<?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>203052</bug_id>
          
          <creation_ts>2019-10-16 14:13:27 -0700</creation_ts>
          <short_desc>Move assert in Wasm::Plan::fail.</short_desc>
          <delta_ts>2019-10-16 23:08:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1580669</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-16 14:13:27 -0700</bug_when>
    <thetext>Move assert in Wasm::Plan::fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580671</commentid>
    <comment_count>1</comment_count>
      <attachid>381107</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-16 14:16:05 -0700</bug_when>
    <thetext>Created attachment 381107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580672</commentid>
    <comment_count>2</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-16 14:22:37 -0700</bug_when>
    <thetext>rdar://problem/55988797</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580701</commentid>
    <comment_count>3</comment_count>
      <attachid>381107</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-16 14:51:45 -0700</bug_when>
    <thetext>Comment on attachment 381107
Patch

Clearing flags on attachment: 381107

Committed r251209: &lt;https://trac.webkit.org/changeset/251209&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580702</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-16 14:51:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580881</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-10-16 23:07:55 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580882</commentid>
    <comment_count>6</comment_count>
      <attachid>381170</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-10-16 23:08:00 -0700</bug_when>
    <thetext>Created attachment 381170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580883</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-10-16 23:08:56 -0700</bug_when>
    <thetext>Oops, uploading the patch to the wrong bug. Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381107</attachid>
            <date>2019-10-16 14:16:05 -0700</date>
            <delta_ts>2019-10-16 23:07:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203052-20191016141603.patch</filename>
            <type>text/plain</type>
            <size>4302</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
Nzg0ZTUyOTgxNzYzYTdhOGJlMDQ2MWI2YmYxMThlYTliNjQ5YmJmLi41ZWE4M2Q2ZTNhYjEwNWI5
YTQ5MGJiM2E0NGVmMjMyZDgxMjUzNmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxOS0xMC0xNiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBNb3ZlIGFzc2VydCBpbiBXYXNtOjpQbGFuOjpmYWlsLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDUyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2UgY2hhbmdl
ZCBob3cgV2FzbTo6UGxhbiBpbnRlcmFjdHMgd2l0aCB0aGUgc3RyZWFtaW5nCisgICAgICAgIHBh
cnNlciBpdCdzIHBvc3NpYmxlIGZvciB0aGUgc3RyZWFtaW5nIHBhcnNlciB0byBjYWxsIGZhaWwg
d2l0aCBubworICAgICAgICBlcnJvciBtZXNzYWdlIChiZWNhdXNlIHRoZSBjb3JyZXNwb25kaW5n
IFdhc206OlBsYW4gYWxyZWFkeQorICAgICAgICBmYWlsZWQpLiBUaGlzIHBhdGNoIG1vdmVzIGFu
IGVycm9uZW91cyBhc3NlcnQgc28gaXQgbm8gbG9uZ2VyCisgICAgICAgIHRyaXBzIHdoZW4gdGhp
cyBoYXBwZW5zLgorCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OlBsYW46OmZhaWwpOgorCiAyMDE5LTEwLTE2ICBQYXVsbyBNYXRvcyAgPHBtYXRvc0Bs
aW5raS50b29scz4KIAogICAgICAgICBGaXggR0NDIHdhcm5pbmcgb24gTUlQUyBhYm91dCBkZWFk
IHZhcmlhYmxlIG1ldGFkYXRhCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAK
aW5kZXggOGUxYjljZWJiZWE4OTEyYzQ3NWUxOTU2YzMxNzMwYTZhMDFmMTFhNi4uMWVkNmNmZmZh
MGQ0NGQwMTMxYWJjN2JlMzcwY2EwMmNkNTQ2Y2ZlNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmNwcApAQCAtMTMwLDkgKzEzMCw5IEBAIGJvb2wgUGxhbjo6dHJ5UmVtb3Zl
Q29udGV4dEFuZENhbmNlbElmTGFzdChDb250ZXh0JiBjb250ZXh0KQogCiB2b2lkIFBsYW46OmZh
aWwoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgU3RyaW5nJiYgZXJyb3JNZXNzYWdlKQog
ewotICAgIEFTU0VSVChlcnJvck1lc3NhZ2UpOwogICAgIGlmIChmYWlsZWQoKSkKICAgICAgICAg
cmV0dXJuOworICAgIEFTU0VSVChlcnJvck1lc3NhZ2UpOwogICAgIGRhdGFMb2dMbklmKFdhc21Q
bGFuSW50ZXJuYWw6OnZlcmJvc2UsICJmYWlsaW5nIHdpdGggbWVzc2FnZTogIiwgZXJyb3JNZXNz
YWdlKTsKICAgICBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUoZXJyb3JNZXNzYWdlKTsKICAgICBj
b21wbGV0ZShsb2NrZXIpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwppbmRleCBhOTNkNDlmNzQ1NDhhZDQxNTA1YWE0MGIxNjRmYjI2YTBhYzU3MTNj
Li4wN2E3MmNhNTQ1NDlhYmU1NmQ0ODdjMGM2MDI5ZDQzYmVkNGE3ODVlIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDE5LTEwLTE2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIE1vdmUgYXNzZXJ0IGluIFdhc206OlBsYW46OmZhaWwuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMwNTIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vcmVncmVzcy93YXNtLXBsYW4t
ZmFpbC1iYWQtZXJyb3ItbWVzc2FnZS1hc3NlcnQuanM6IEFkZGVkLgorICAgICAgICAoQmluYXJ5
KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5cGUudHJ1bmNfYnVmZmVyKToKKyAgICAgICAgKEJp
bmFyeS5wcm90b3R5cGUuZW1pdF9sZWJfdSk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVt
aXRfdTMydik6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfYnl0ZXMpOgorICAgICAg
ICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2hlYWRlcik6CisgICAgICAgIChfX2ZfNTc2KToKKyAg
ICAgICAgKF9fZl81ODcpOgorCiAyMDE5LTEwLTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlIGZh
aWxlZCB0byBoYW5kbGUgT09NRSB3aGVuIHJlc29sdmluZyByb3BlIHN0cmluZy4KZGlmZiAtLWdp
dCBhL0pTVGVzdHMvd2FzbS9yZWdyZXNzL3dhc20tcGxhbi1mYWlsLWJhZC1lcnJvci1tZXNzYWdl
LWFzc2VydC5qcyBiL0pTVGVzdHMvd2FzbS9yZWdyZXNzL3dhc20tcGxhbi1mYWlsLWJhZC1lcnJv
ci1tZXNzYWdlLWFzc2VydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjBlZWRmMGI0ZDg1ZWRjNzM3MDhmMGQ2
YmIyNDcwOTBmN2I0ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL3JlZ3Jlc3Mv
d2FzbS1wbGFuLWZhaWwtYmFkLWVycm9yLW1lc3NhZ2UtYXNzZXJ0LmpzCkBAIC0wLDAgKzEsNTUg
QEAKKy8vIEZyb20gb3NzLWZ1eno6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6
ei9pc3N1ZXMvZGV0YWlsP2lkPTE3OTc2CisKK3ZhciBrV2FzbUgwID0gMDsKK3ZhciBrV2FzbUgx
ID0gMHg2MTsKK3ZhciBrV2FzbUgyID0gMHg3MzsKK3ZhciBrV2FzbUgzID0gMHg2ZDsKK3ZhciBr
V2FzbVYwID0gMHgxOwordmFyIGtXYXNtVjEgPSAwOwordmFyIGtXYXNtVjIgPSAwOwordmFyIGtX
YXNtVjMgPSAwOworbGV0IGtUeXBlU2VjdGlvbkNvZGUgPSAxOworbGV0IGtGdW5jdGlvblNlY3Rp
b25Db2RlID0gMzsKK2xldCBrQ29kZVNlY3Rpb25Db2RlID0gMTA7CitsZXQga1dhc21GdW5jdGlv
blR5cGVGb3JtID0gMHg2MDsKK2NsYXNzIEJpbmFyeSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAg
IHRoaXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDgxOTIp
OworICB9CisgIHRydW5jX2J1ZmZlcigpIHsKKyAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodGhp
cy5idWZmZXIuYnVmZmVyLCAwLCB0aGlzLmxlbmd0aCk7CisgIH0KKyAgZW1pdF9sZWJfdSgpIHsK
KworICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHY7CisgICAgICAgIHJldHVy
bjsKKyAgfQorICBlbWl0X3UzMnYoKSB7CisgICAgdGhpcy5lbWl0X2xlYl91KCk7CisgIH0KKyAg
ZW1pdF9ieXRlcyhkYXRhKSB7CisgICAgdGhpcy5idWZmZXIuc2V0KGRhdGEsIHRoaXMubGVuZ3Ro
KTsKKyAgICB0aGlzLmxlbmd0aCArPSBkYXRhLmxlbmd0aDsKKyAgfQorICBlbWl0X2hlYWRlcigp
IHsKKyAgICB0aGlzLmVtaXRfYnl0ZXMoW2tXYXNtSDAsIGtXYXNtSDEsIGtXYXNtSDIsIGtXYXNt
SDMsIGtXYXNtVjAsIGtXYXNtVjEsIGtXYXNtVjIsIGtXYXNtVjNdKTsKKyAgfQorCit9CitmdW5j
dGlvbiBfX2ZfNTc2KF9fdl8yMDc4KSB7CisgICAgV2ViQXNzZW1ibHkuY29tcGlsZShfX3ZfMjA3
OC50cnVuY19idWZmZXIoKSkKK30KKyAgKGZ1bmN0aW9uIF9fZl81ODcoKSB7CisgICAgbGV0IF9f
dl8yMDk5ID0gbmV3IEJpbmFyeSgpOworCisgICAgICBfX3ZfMjA5OS5lbWl0X2hlYWRlcigpCisg
ICAgICBfX3ZfMjA5OS5lbWl0X2J5dGVzKFtrVHlwZVNlY3Rpb25Db2RlLCA0LCAxLCBrV2FzbUZ1
bmN0aW9uVHlwZUZvcm0sIDAsIDBdKQorICAgICAgX192XzIwOTkuZW1pdF9ieXRlcyhba0Z1bmN0
aW9uU2VjdGlvbkNvZGUsIDIsIDEsIDBdKQorICAgICAgX192XzIwOTkuZW1pdF9ieXRlcyhba0Nv
ZGVTZWN0aW9uQ29kZSwgMjAsIDFdKQorICAgIHRyeSB7CisgICAgICBfX3ZfMjA5OS5lbWl0X3Uz
MnYoKTsKKyAgICB9IGNhdGNoIChlKSB7fQorICAgICAgX19mXzU3NihfX3ZfMjA5OSwKKyAndGVz
dEJvZHlTaXplSXNaZXJvJykKKyAgfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381170</attachid>
            <date>2019-10-16 23:08:00 -0700</date>
            <delta_ts>2019-10-16 23:08:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203052-20191016230756.patch</filename>
            <type>text/plain</type>
            <size>8199443</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMjI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MzUxZjRhODZmNzc4ZDZlMDk1ZDJhMjE5ZWVhMDdmNjU0NTllYTJkLi44OTIwODI5MWFjY2ViZTNi
NTM5NjNkZmViN2U3MjUxYjljM2Y3MzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOTUyIEBACisyMDE5LTEwLTE2ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5j
b20+CisKKyAgICAgICAgW0pTQ10gVGhyZWFkIEpTR2xvYmFsT2JqZWN0KiBpbnN0ZWFkIG9mIEV4
ZWNTdGF0ZSoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMjM5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogQVBJL0FQSUNhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJhY2tG
dW5jdGlvbjo6Y2FsbCk6CisgICAgICAgIChKU0M6OkFQSUNhbGxiYWNrRnVuY3Rpb246OmNvbnN0
cnVjdCk6CisgICAgICAgICogQVBJL0FQSUNhc3QuaDoKKyAgICAgICAgKHRvSlMpOgorICAgICAg
ICAodG9KU0dsb2JhbE9iamVjdCk6CisgICAgICAgICh0b0pTRm9yR0MpOgorICAgICAgICAodG9S
ZWYpOgorICAgICAgICAodG9HbG9iYWxSZWYpOgorICAgICAgICAqIEFQSS9BUElVdGlscy5oOgor
ICAgICAgICAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQpOgorICAgICAgICAoc2V0RXhjZXB0aW9u
KToKKyAgICAgICAgKiBBUEkvSlNBUElHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBBUEkvSlNB
UElHbG9iYWxPYmplY3QubW06CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1
bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVs
ZUxvYWRlckltcG9ydE1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0Ojpt
b2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1
bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OkpTQVBJ
R2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJFdmFsdWF0ZSk6CisgICAgICAgIChKU0M6OkpTQVBJ
R2xvYmFsT2JqZWN0Ojpsb2FkQW5kRXZhbHVhdGVKU1NjcmlwdE1vZHVsZSk6CisgICAgICAgICog
QVBJL0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAgICAgICogQVBJL0pTQmFzZS5jcHA6CisgICAg
ICAgIChKU0V2YWx1YXRlU2NyaXB0SW50ZXJuYWwpOgorICAgICAgICAoSlNFdmFsdWF0ZVNjcmlw
dCk6CisgICAgICAgIChKU0NoZWNrU2NyaXB0U3ludGF4KToKKyAgICAgICAgKEpTR2FyYmFnZUNv
bGxlY3QpOgorICAgICAgICAoSlNSZXBvcnRFeHRyYU1lbW9yeUNvc3QpOgorICAgICAgICAoSlNT
eW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKToKKyAgICAgICAgKEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyk6CisgICAgICAgICogQVBJL0pTQmFzZUludGVy
bmFsLmg6CisgICAgICAgICogQVBJL0pTQ1Rlc3RSdW5uZXJVdGlscy5jcHA6CisgICAgICAgIChK
U0M6OmZhaWxOZXh0TmV3Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6bnVtYmVyT2ZERkdDb21w
aWxlcyk6CisgICAgICAgIChKU0M6OnNldE5ldmVySW5saW5lKToKKyAgICAgICAgKEpTQzo6c2V0
TmV2ZXJPcHRpbWl6ZSk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6CisgICAgICAgICogQVBJL0pTQ2FsbGJh
Y2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpKU0NhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
dG9TdHJpbmdOYW1lKToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+Ojpjb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBh
cmVudD46OmN1c3RvbUhhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpjYWxsKToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OmdldFN0YXRpY1ZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpzdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChKU0M6OkpT
Q2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Y2FsbGJhY2tHZXR0ZXIpOgorICAgICAgICAqIEFQSS9K
U0NsYXNzUmVmLmNwcDoKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6OmNvbnRleHREYXRhKToKKyAg
ICAgICAgKE9wYXF1ZUpTQ2xhc3M6OnN0YXRpY1ZhbHVlcyk6CisgICAgICAgIChPcGFxdWVKU0Ns
YXNzOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6cHJvdG90eXBl
KToKKyAgICAgICAgKiBBUEkvSlNDbGFzc1JlZi5oOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQu
bW06CisgICAgICAgICgtW0pTQ29udGV4dCBlbnN1cmVXcmFwcGVyTWFwXSk6CisgICAgICAgICgt
W0pTQ29udGV4dCBldmFsdWF0ZUpTU2NyaXB0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgZGVw
ZW5kZW5jeUlkZW50aWZpZXJzRm9yTW9kdWxlSlNTY3JpcHQ6XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dCBzZXRFeGNlcHRpb246XSk6CisgICAgICAgICgtW0pTQ29udGV4dCBpbml0V2l0aEdsb2Jh
bENvbnRleHRSZWY6XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB3cmFwcGVyTWFwXSk6CisgICAg
ICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgIChpbnRlcm5hbFNjcmlwdFRpbWVv
dXRDYWxsYmFjayk6CisgICAgICAgIChKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKToKKyAg
ICAgICAgKEpTR2xvYmFsQ29udGV4dFJldGFpbik6CisgICAgICAgIChKU0dsb2JhbENvbnRleHRS
ZWxlYXNlKToKKyAgICAgICAgKEpTQ29udGV4dEdldEdsb2JhbE9iamVjdCk6CisgICAgICAgIChK
U0NvbnRleHRHZXRHcm91cCk6CisgICAgICAgIChKU0NvbnRleHRHZXRHbG9iYWxDb250ZXh0KToK
KyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENvcHlOYW1lKToKKyAgICAgICAgKEpTR2xvYmFsQ29u
dGV4dFNldE5hbWUpOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0U2V0VW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKToKKyAgICAg
ICAgKEpTR2xvYmFsQ29udGV4dEdldFJlbW90ZUluc3BlY3Rpb25FbmFibGVkKToKKyAgICAgICAg
KEpTR2xvYmFsQ29udGV4dFNldFJlbW90ZUluc3BlY3Rpb25FbmFibGVkKToKKyAgICAgICAgKEpT
R2xvYmFsQ29udGV4dEdldEluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2Vw
dGlvbnMpOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0U2V0SW5jbHVkZXNOYXRpdmVDYWxsU3Rh
Y2tXaGVuUmVwb3J0aW5nRXhjZXB0aW9ucyk6CisgICAgICAgIChKU0dsb2JhbENvbnRleHRHZXRE
ZWJ1Z2dlclJ1bkxvb3ApOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0U2V0RGVidWdnZXJSdW5M
b29wKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dEdldEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlcik6CisgICAgICAgICogQVBJL0pTTWFuYWdlZFZhbHVlLm1tOgorICAgICAgICAoLVtK
U01hbmFnZWRWYWx1ZSBpbml0V2l0aFZhbHVlOl0pOgorICAgICAgICAoLVtKU01hbmFnZWRWYWx1
ZSB2YWx1ZV0pOgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5jcHA6CisgICAgICAgIChKU09i
amVjdE1ha2UpOgorICAgICAgICAoSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2spOgor
ICAgICAgICAoSlNPYmplY3RNYWtlQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNPYmplY3RNYWtl
RnVuY3Rpb24pOgorICAgICAgICAoSlNPYmplY3RNYWtlQXJyYXkpOgorICAgICAgICAoSlNPYmpl
Y3RNYWtlRGF0ZSk6CisgICAgICAgIChKU09iamVjdE1ha2VFcnJvcik6CisgICAgICAgIChKU09i
amVjdE1ha2VSZWdFeHApOgorICAgICAgICAoSlNPYmplY3RNYWtlRGVmZXJyZWRQcm9taXNlKToK
KyAgICAgICAgKEpTT2JqZWN0R2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTT2JqZWN0U2V0UHJv
dG90eXBlKToKKyAgICAgICAgKEpTT2JqZWN0SGFzUHJvcGVydHkpOgorICAgICAgICAoSlNPYmpl
Y3RHZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdFNldFByb3BlcnR5KToKKyAgICAgICAg
KEpTT2JqZWN0SGFzUHJvcGVydHlGb3JLZXkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0
eUZvcktleSk6CisgICAgICAgIChKU09iamVjdFNldFByb3BlcnR5Rm9yS2V5KToKKyAgICAgICAg
KEpTT2JqZWN0RGVsZXRlUHJvcGVydHlGb3JLZXkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgpOgorICAgICAgICAoSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgpOgorICAg
ICAgICAoSlNPYmplY3REZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdEdldFByaXZh
dGVQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdFNldFByaXZhdGVQcm9wZXJ0eSk6CisgICAg
ICAgIChKU09iamVjdERlbGV0ZVByaXZhdGVQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdElz
RnVuY3Rpb24pOgorICAgICAgICAoSlNPYmplY3RDYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChK
U09iamVjdElzQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTT2Jq
ZWN0R2V0R2xvYmFsQ29udGV4dCk6CisgICAgICAgICogQVBJL0pTU2NyaXB0UmVmLmNwcDoKKyAg
ICAgICAgKiBBUEkvSlNUeXBlZEFycmF5LmNwcDoKKyAgICAgICAgKGNyZWF0ZVR5cGVkQXJyYXkp
OgorICAgICAgICAoSlNWYWx1ZUdldFR5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKEpTT2JqZWN0
TWFrZVR5cGVkQXJyYXkpOgorICAgICAgICAoSlNPYmplY3RNYWtlVHlwZWRBcnJheVdpdGhCeXRl
c05vQ29weSk6CisgICAgICAgIChKU09iamVjdE1ha2VUeXBlZEFycmF5V2l0aEFycmF5QnVmZmVy
KToKKyAgICAgICAgKEpTT2JqZWN0TWFrZVR5cGVkQXJyYXlXaXRoQXJyYXlCdWZmZXJBbmRPZmZz
ZXQpOgorICAgICAgICAoSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZXNQdHIpOgorICAgICAgICAo
SlNPYmplY3RHZXRUeXBlZEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTT2JqZWN0R2V0VHlwZWRB
cnJheUJ5dGVMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3RHZXRUeXBlZEFycmF5Qnl0ZU9mZnNl
dCk6CisgICAgICAgIChKU09iamVjdEdldFR5cGVkQXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNP
YmplY3RNYWtlQXJyYXlCdWZmZXJXaXRoQnl0ZXNOb0NvcHkpOgorICAgICAgICAoSlNPYmplY3RH
ZXRBcnJheUJ1ZmZlckJ5dGVzUHRyKToKKyAgICAgICAgKEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJC
eXRlTGVuZ3RoKToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZS5tbToKKyAgICAgICAgKEpTQ29udGFp
bmVyQ29udmVydG9yOjphZGQpOgorICAgICAgICAocmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3Ip
OgorICAgICAgICAodmFsdWVUb09iamVjdFdpdGhvdXRDb3B5KToKKyAgICAgICAgKE9iamNDb250
YWluZXJDb252ZXJ0b3I6OmFkZCk6CisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAg
ICAgICAoSlNWYWx1ZUdldFR5cGUpOgorICAgICAgICAoSlNWYWx1ZUlzVW5kZWZpbmVkKToKKyAg
ICAgICAgKEpTVmFsdWVJc051bGwpOgorICAgICAgICAoSlNWYWx1ZUlzQm9vbGVhbik6CisgICAg
ICAgIChKU1ZhbHVlSXNOdW1iZXIpOgorICAgICAgICAoSlNWYWx1ZUlzU3RyaW5nKToKKyAgICAg
ICAgKEpTVmFsdWVJc09iamVjdCk6CisgICAgICAgIChKU1ZhbHVlSXNTeW1ib2wpOgorICAgICAg
ICAoSlNWYWx1ZUlzQXJyYXkpOgorICAgICAgICAoSlNWYWx1ZUlzRGF0ZSk6CisgICAgICAgIChK
U1ZhbHVlSXNPYmplY3RPZkNsYXNzKToKKyAgICAgICAgKEpTVmFsdWVJc0VxdWFsKToKKyAgICAg
ICAgKEpTVmFsdWVJc1N0cmljdEVxdWFsKToKKyAgICAgICAgKEpTVmFsdWVJc0luc3RhbmNlT2ZD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChKU1ZhbHVlTWFrZVVuZGVmaW5lZCk6CisgICAgICAgIChK
U1ZhbHVlTWFrZU51bGwpOgorICAgICAgICAoSlNWYWx1ZU1ha2VCb29sZWFuKToKKyAgICAgICAg
KEpTVmFsdWVNYWtlTnVtYmVyKToKKyAgICAgICAgKEpTVmFsdWVNYWtlU3ltYm9sKToKKyAgICAg
ICAgKEpTVmFsdWVNYWtlU3RyaW5nKToKKyAgICAgICAgKEpTVmFsdWVNYWtlRnJvbUpTT05TdHJp
bmcpOgorICAgICAgICAoSlNWYWx1ZUNyZWF0ZUpTT05TdHJpbmcpOgorICAgICAgICAoSlNWYWx1
ZVRvQm9vbGVhbik6CisgICAgICAgIChKU1ZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNWYWx1
ZVRvU3RyaW5nQ29weSk6CisgICAgICAgIChKU1ZhbHVlVG9PYmplY3QpOgorICAgICAgICAoSlNW
YWx1ZVByb3RlY3QpOgorICAgICAgICAoSlNWYWx1ZVVucHJvdGVjdCk6CisgICAgICAgICogQVBJ
L0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwOgorICAgICAgICAqIEFQSS9KU1dyYXBwZXJN
YXAubW06CisgICAgICAgIChjb25zdHJ1Y3Rvckhhc0luc3RhbmNlKToKKyAgICAgICAgKG1ha2VX
cmFwcGVyKToKKyAgICAgICAgKHB1dE5vbkVudW1lcmFibGUpOgorICAgICAgICAoY29weU1ldGhv
ZHNUb09iamVjdCk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyB3cmFwcGVyRm9yT2JqZWN0
OmluQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIHN0cnVjdHVyZUluQ29u
dGV4dDpdKToKKyAgICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW06CisgICAgICAg
IChKU0M6Om9iakNDYWxsYmFja0Z1bmN0aW9uQ2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKG9iakND
YWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbik6CisgICAgICAgICogQVBJL2dsaWIvSlNDQ2Fs
bGJhY2tGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OmNh
bGwpOgorICAgICAgICAoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QpOgorICAg
ICAgICAqIEFQSS9nbGliL0pTQ0NsYXNzLmNwcDoKKyAgICAgICAgKGlzV3JhcHBlZE9iamVjdCk6
CisgICAgICAgIChqc2NDb250ZXh0Rm9yT2JqZWN0KToKKyAgICAgICAgKGpzY0NsYXNzQ3JlYXRl
Q29uc3RydWN0b3IpOgorICAgICAgICAoanNjQ2xhc3NBZGRNZXRob2QpOgorICAgICAgICAqIEFQ
SS9nbGliL0pTQ0NvbnRleHQuY3BwOgorICAgICAgICAoanNjX2NvbnRleHRfZXZhbHVhdGVfaW5f
b2JqZWN0KToKKyAgICAgICAgKGpzY19jb250ZXh0X2NoZWNrX3N5bnRheCk6CisgICAgICAgICog
QVBJL2dsaWIvSlNDRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKGpzY0V4Y2VwdGlvbkNyZWF0ZSk6
CisgICAgICAgICogQVBJL2dsaWIvSlNDVmFsdWUuY3BwOgorICAgICAgICAoanNjX3ZhbHVlX29i
amVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YSk6CisgICAgICAgIChqc2NfdmFsdWVfb2JqZWN0X2Rl
ZmluZV9wcm9wZXJ0eV9hY2Nlc3Nvcik6CisgICAgICAgIChqc2NWYWx1ZUZ1bmN0aW9uQ3JlYXRl
KToKKyAgICAgICAgKiBBUEkvZ2xpYi9KU0NXZWFrVmFsdWUuY3BwOgorICAgICAgICAoanNjV2Vh
a1ZhbHVlSW5pdGlhbGl6ZSk6CisgICAgICAgIChqc2Nfd2Vha192YWx1ZV9nZXRfdmFsdWUpOgor
ICAgICAgICAqIEFQSS9nbGliL0pTQ1dyYXBwZXJNYXAuY3BwOgorICAgICAgICAoSlNDOjpXcmFw
cGVyTWFwOjpjcmVhdGVKU1dyYXBwcGVyKToKKyAgICAgICAgKEpTQzo6V3JhcHBlck1hcDo6Y3Jl
YXRlQ29udGV4dFdpdGhKU1dyYXBwcGVyKToKKyAgICAgICAgKiBBUEkvdGVzdHMvSlNPTlBhcnNl
VGVzdC5jcHA6CisgICAgICAgICh0ZXN0SlNPTlBhcnNlKToKKyAgICAgICAgKiBBUEkvdGVzdHMv
SlNPYmplY3RHZXRQcm94eVRhcmdldFRlc3QuY3BwOgorICAgICAgICAodGVzdEpTT2JqZWN0R2V0
UHJveHlUYXJnZXQpOgorICAgICAgICAqIEFQSS90ZXN0cy9KU1dyYXBwZXJNYXBUZXN0cy5tbToK
KyAgICAgICAgKCtbSlNXcmFwcGVyTWFwVGVzdHMgdGVzdFN0cnVjdHVyZUlkZW50aXR5XSk6Cisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuY3BwOgorICAgICAgICAoQVBJQ29udGV4dDo6QVBJ
Q29udGV4dCk6CisgICAgICAgIChBUElDb250ZXh0OjpvcGVyYXRvciBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik6CisgICAgICAgIChBUElDb250ZXh0OjpvcGVyYXRvciBKU0M6OkV4ZWNTdGF0ZSopOiBE
ZWxldGVkLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIENoYW5nZUxvZy0y
MDE2LTA5LTI2OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAg
ICAgKERlcHJlY2F0ZWQ6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50
KToKKyAgICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rp
b25DYWxsKToKKyAgICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCk6
CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmg6CisgICAgICAgICogYmlu
ZGluZ3MvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVj
dDo6U2NyaXB0T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9TY3JpcHRPYmplY3QuaDoKKyAg
ICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdDo6Z2xvYmFsT2JqZWN0IGNvbnN0KToKKyAg
ICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdDo6c2NyaXB0U3RhdGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGJpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6anNUb0luc3BlY3RvclZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6dG9JbnNwZWN0
b3JWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKiBi
dWlsdGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHA6CisgICAgICAgIChKU0M6OlNsb3dQ
YXRoQ2FsbEdlbmVyYXRvcldpdGhBcmd1bWVudHM6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVy
U2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lz
dGVycyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6OnIpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWU6OnVuY2hlY2tlZFIpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnIp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnVuY2hlY2tlZFIpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuY3BwOgorICAgICAgICAo
SlNDOjpEaXJlY3RFdmFsQ29kZUNhY2hlOjpzZXRTbG93KToKKyAgICAgICAgKiBieXRlY29kZS9E
aXJlY3RFdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkRpcmVjdEV2YWxDb2RlQ2FjaGU6
OnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAg
KEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVGb3JDYWxsRnJhbWUgY29uc3QpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL0ludGVy
bmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6OmNyZWF0ZUFsbG9jYXRpb25TdHJ1Y3R1cmVGcm9tQmFz
ZSk6CisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwOgor
ICAgICAgICAoSlNDOjpnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MpOgorICAgICAg
ICAoSlNDOjpnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MpOgorICAgICAg
ICAoSlNDOjpnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCk6CisgICAg
ICAgIChKU0M6OmdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9t
KToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZik6CisgICAg
ICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVy
YXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgICogYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6YXBwcm9wcmlhdGVHZW5l
cmljR2V0QnlJZEZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
Ojpmcm9tR2xvYmFsQ29kZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcDoKKyAgICAg
ICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6cmVjb3ZlciBjb25zdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXI6OmF0dGFjaCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpo
YXNCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnBhdXNlSWZOZWVkZWQpOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6Omdsb2JhbE9iamVjdCk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjp2bUVudHJ5R2xvYmFsT2JqZWN0IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnRoaXNWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbik6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpnbG9iYWxFeGVjKTogRGVsZXRlZC4K
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oOgorICAgICAgICAqIGRlYnVn
Z2VyL0RlYnVnZ2VyRXZhbEVuYWJsZXIuaDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJFdmFsRW5h
Ymxlcjo6RGVidWdnZXJFdmFsRW5hYmxlcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyRXZhbEVu
YWJsZXI6On5EZWJ1Z2dlckV2YWxFbmFibGVyKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dl
clNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6dG9TdHJpbmdOYW1lKToK
KyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXJTY29wZTo6cHV0KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29w
ZTo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6ZGVmaW5lT3duUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpjYXVnaHRWYWx1ZSBjb25zdCk6
CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5oOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpib29sZWFuUmVzdWx0KToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcml0aE1vZGUuaDoKKyAgICAgICAgKiBkZmcv
REZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yOjpDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0
aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZh
cmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yOjpDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFi
bGVTaXplU2xvd1BhdGhHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkNhbGxBcnJheUFs
bG9jYXRvcldpdGhWYXJpYWJsZVN0cnVjdHVyZVZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9y
OjpDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTdHJ1Y3R1cmVWYXJpYWJsZVNpemVTbG93
UGF0aEdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVu
dHNTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpnbG9iYWxUaGlzT2JqZWN0Rm9yKToKKyAgICAgICAgKiBkZmcv
REZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6cmVjb25zdHJ1Y3Qp
OgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0
aW9uKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNhdGNoT1NSRW50
cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAgICAoSlNDOjpERkc6OnBy
ZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQpOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1
c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAgICAoSlNDOjpERkc6OnByaW50T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbXBpbGVPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZH
OjpPU1JFeGl0OjpkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9zcldyaXRlQmFycmllcik6CisgICAgICAg
IChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBkZmcvREZHT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHV0QnlWYWwpOgorICAgICAgICAoSlND
OjpERkc6OnB1dEJ5VmFsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OnB1dEJ5VmFsQ2Vs
bEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpwdXRCeVZhbENlbGxTdHJpbmdJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkRGRzo6bmV3VHlwZWRBcnJheVdpdGhTaXplKToKKyAgICAgICAg
KEpTQzo6REZHOjpwdXRXaXRoVGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6YmluYXJ5T3ApOgor
ICAgICAgICAoSlNDOjpERkc6OmJpdHdpc2VCaW5hcnlPcCk6CisgICAgICAgIChKU0M6OkRGRzo6
Z2V0QnlWYWxPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAg
ICogZGZnL0RGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmg6CisgICAgICAg
IChKU0M6OkRGRzo6U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I6OlNhbmVTdHJp
bmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5C
eUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluQnlWYWwp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVsZXRlQnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWxldGVCeVZhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXNoV2l0aFNjb3Bl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1NsaWNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvTG93ZXJDYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrVHJhcHMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlUHV0QnlW
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
blN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGcm9t
Q2hhckNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JDZWxs
V2l0aFN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsV2l0aFRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvckNlbGxzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQml0Tm90KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdFVudHlwZWRCaXRPcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUJpdHdpc2VPcCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRVbnR5cGVkUmlnaHRTaGlmdEJpdE9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTFNoaWZ0T3ApOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVCaXRSU2hpZnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZDdXN0b20pOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9PYmplY3RPckNhbGxPYmplY3RDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aEFi
cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aENsejMy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRG91Ymxl
VW5hcnlPcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZURp
dik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aEZSb3Vu
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU1vZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFJvdW5kaW5n
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3FydCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVBvdyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdFcXVhbGl0eSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdDb21wYXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNhbWVWYWx1ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU2V0RnVuY3Rpb25OYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVDbG9uZWRB
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Jl
YXRlUmVzdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJl
YWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRo
U3ByZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5
U2xpY2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlJ
bmRleE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5
UHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3RpZnlX
cml0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ2FsbERPTUdldHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVUb1N0cmluZ09yQ2FsbFN0cmluZ0NvbnN0cnVjdG9yT3JTdHJpbmdW
YWx1ZU9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU51bWJl
clRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdTdHJpbmdPYmplY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3U3ltYm9sKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXlXaXRoU2l6ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdSZWdleHApOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXJTdHJpbmdKdW1wKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TdHJpbmcp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0R2V0dGVy
U2V0dGVyQnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVS
ZXNvbHZlU2NvcGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
UmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXREeW5hbWljVmFyKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dER5bmFtaWNWYXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QWNjZXNzb3JCeVZhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdSZXBsYWNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlZmluZURhdGFQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWZpbmVBY2Nlc3Nv
clByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRo
cm93KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRocm93U3Rh
dGljRXJyb3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFz
R2VuZXJpY1Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVRvSW5kZXhTdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlJZFdpdGhUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJDYXQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvVGhpcyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RLZXlzKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdENyZWF0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVUaGlzKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVByb21pc2UpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdPYmplY3QpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3UHJvbWlzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdJbnRlcm5hbEZpZWxk
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvUHJp
bWl0aXZlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXBTZXQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlV2Vha1NldEFkZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVXZWFrTWFwU2V0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3RvdHlwZU9mKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJy
YXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0RGlyZWN0UG5hbWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHJvZmlsZVR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJpZ0ludEVxdWFsaXR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cHJlcGFyZUZvckV4dGVybmFsQ2FsbCk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmlj
dEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2FjaGVkR2V0QnlJZFdpdGhUaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkeW5iZW5jaC5j
cHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0
aW9uLmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxp
bmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVUb09iamVjdE9yQ2FsbE9iamVjdENvbnN0cnVjdG9yKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVRvVGhpcyk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVWYWx1ZVN1Yik6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVWYWx1ZU11bCk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVVbmFyeU1hdGhJQyk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVCaW5hcnlNYXRoSUMp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyQ2F0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUFyaXRoQ2x6MzIp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFsdWVEaXYp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFsdWVNb2Qp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQXJpdGhBYnMp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQXJpdGhVbmFy
eSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVWYWx1ZVBv
dyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVBcml0aFJv
dW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUFyaXRo
Rmxvb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQXJp
dGhDZWlsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUFy
aXRoVHJ1bmMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
QXJpdGhTcXJ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUFyaXRoRlJvdW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZVZhbHVlQml0Tm90KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVZhbHVlQml0QW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZVZhbHVlQml0T3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlVmFsdWVCaXRYb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlVmFsdWVCaXRSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVmFsdWVCaXRMU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQXJyYXlpZnkpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeUlkV2l0aFRoaXMpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWxXaXRoVGhpcyk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQdXRCeUlkV2l0aFRoaXMp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0QnlWYWxX
aXRoVGhpcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVB
dG9taWNzUmVhZE1vZGlmeVdyaXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUF0b21pY3NJc0xvY2tGcmVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZURlZmluZURhdGFQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVEZWZpbmVBY2Nlc3NvclByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVHZXRQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpjb21waWxlUHV0R2V0dGVyU2V0dGVyQnlJZCk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5VmFsKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZURlbGV0ZUJ5SWQpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlRGVsZXRlQnlWYWwpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQXJyYXlQdXNoKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUFycmF5SW5kZXhPZik6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVBcnJheVBvcCk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQdXNoV2l0aFNj
b3BlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0
ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTmV3RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlUmVzdCk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVPYmplY3RLZXlz
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU9iamVjdENy
ZWF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOZXdQ
cm9taXNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5l
d0ludGVybmFsRmllbGRPYmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTmV3U3RyaW5nT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZU5ld1N5bWJvbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVOZXdBcnJheSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ3JlYXRlVGhpcyk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDcmVhdGVQcm9taXNlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNyZWF0ZUludGVybmFsRmllbGRP
YmplY3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3By
ZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5ld0Fy
cmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZU5ld0FycmF5V2l0aFNpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlTmV3VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVUb051bWJlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVUb1N0cmluZ09yQ2FsbFN0cmluZ0NvbnN0cnVjdG9yT3JTdHJpbmdWYWx1
ZU9mKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVRvUHJp
bWl0aXZlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1h
a2VSb3BlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0
cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVTdHJpbmdGcm9tQ2hhckNvZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTm90aWZ5V3JpdGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNhbWVWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJnc1NwcmVh
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZVN3aXRjaCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVUaHJvdyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVUaHJvd1N0YXRpY0Vycm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6bWFwSGFzaFN0cmluZyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVNYXBIYXNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZUdldE1hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVTZXRBZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTWFwU2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZVdlYWtTZXRBZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlV2Vha01hcFNldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVJbkJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZUluQnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVQYXJzZUludCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVJbnN0YW5jZU9mKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUluc3RhbmNlT2ZDdXN0b20pOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVHZXREaXJlY3RQbmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVG9JbmRleFN0cmluZyk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNYXRlcmlhbGl6ZUNyZWF0ZUFj
dGl2YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
Q2hlY2tUcmFwcyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVSZWdFeHBFeGVjKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29t
cGlsZVJlZ0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVSZWdFeHBNYXRjaEZhc3RHbG9iYWwpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUmVnRXhwVGVzdCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVSZWdFeHBNYXRjaEZhc3QpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTmV3UmVnZXhwKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVNldEZ1bmN0aW9u
TmFtZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJp
bmdSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
OjpyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpnZXRCeUlkKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Z2V0QnlJZFdpdGhUaGlzKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdTbGljZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVUb0xvd2VyQ2FzZSk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOdW1iZXJUb1N0cmlu
Z1dpdGhWYWxpZFJhZGl4Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVSZXNvbHZlU2NvcGUp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0RHluYW1p
Y1Zhcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQdXRE
eW5hbWljVmFyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUNhbGxET00pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
Q2FsbERPTUdldHRlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Om5v
blNwZWN1bGF0aXZlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OnN0cmluZ3NFcXVhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmVtaXRCaW5hcnlTbmlwcGV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6ZW1pdEJpbmFyeUJpdE9wU25pcHBldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmVtaXRSaWdodFNoaWZ0U25pcHBldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmFsbG9jYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVKU0FycmF5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbnRpZ3VvdXNQdXRCeVZhbE91dE9mQm91bmRzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c3dpdGNoU3RyaW5nU2xvdyk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmVtaXRTdG9yZUJhcnJpZXIp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjYWxsQ2hlY2spOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6cHJlcGFyZU9T
UkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuaDoKKyAgICAgICAgKiBmdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9GVExP
U1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6b3BlcmF0aW9uUG9wdWxhdGVPYmplY3RJbk9TUik6CisgICAgICAgIChK
U0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik6CisgICAgICAgIChKU0M6
OkZUTDo6Y29tcGlsZUZUTExhenlTbG93UGF0aCk6CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmg6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZ2VuZXJhdG9yL01ldGFkYXRhLnJiOgorICAg
ICAgICAqIGhlYXAvSGFuZGxlLmg6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbC5oOgorICAgICAg
ICAqIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHA6CisgICAgICAgIChKU0M6OkhlYXBTbmFw
c2hvdEJ1aWxkZXI6Ompzb24pOgorICAgICAgICAqIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5j
cHA6CisgICAgICAgIChJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlOjphdXRvZ2VuZXJhdGVNZXRhZGF0
YSk6CisgICAgICAgIChJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U6Omdsb2JhbE9iamVjdCBjb25zdCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlOjpzY3JpcHRTdGF0ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bmplY3RlZFNjcmlwdDo6d3JhcEpTT05TdHJpbmcgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5qZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZSBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0OjphcnJheUZyb21WZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dEJhc2U6Omhhc0FjY2Vzc1RvSW5zcGVjdGVkU2NyaXB0U3RhdGUgY29uc3QpOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6OmNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxl
ZCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUNh
bGwpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VBc3luY0Nh
bGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5qZWN0ZWRTY3JpcHRIb3N0Ojp3cmFwcGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRIb3N0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdl
ci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0
ZWRTY3JpcHRJZEZvcik6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdl
cjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNj
cmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TW9kdWxlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNb2R1bGU6OmVu
c3VyZUluamVjdGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanM6CisgICAgICAg
IChsZXQuSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLndyYXBDYWxsRnJhbWVzKToKKyAgICAgICAg
KEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RD
b25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RDb25z
b2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6CisgICAgICAgIChJbnNwZWN0b3I6
OkpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6Y291bnQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmNvdW50UmVzZXQpOgorICAgICAgICAoSW5z
cGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnByb2ZpbGUpOgorICAgICAgICAo
SW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnByb2ZpbGVFbmQpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25h
cHNob3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6
OnRpbWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6
OnRpbWVMb2cpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQ6OnRpbWVFbmQpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdENvbnNvbGVD
bGllbnQ6OnRpbWVTdGFtcCk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0Q29u
c29sZUNsaWVudDo6cmVjb3JkKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RD
b25zb2xlQ2xpZW50OjpyZWNvcmRFbmQpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9i
amVjdENvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIGluc3BlY3Rvci9KU0ds
b2JhbE9iamVjdENvbnNvbGVDbGllbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNHbG9i
YWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpyZXBvcnRBUElFeGNlcHRpb24pOgorICAgICAg
ICAqIGluc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHA6CisgICAgICAgIChJbnNwZWN0
b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZSBjb25zdCk6CisgICAgICAgIChJbnNw
ZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzYXZlZFJlc3VsdEFsaWFzIGNvbnN0KToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmV2YWx1YXRlV2l0aFNjb3Bl
RXh0ZW5zaW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omlu
dGVybmFsQ29uc3RydWN0b3JOYW1lKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNj
cmlwdEhvc3Q6OmlzSFRNTEFsbENvbGxlY3Rpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0lu
amVjdGVkU2NyaXB0SG9zdDo6aXNQcm9taXNlUmVqZWN0ZWRXaXRoTmF0aXZlR2V0dGVyVHlwZUVy
cm9yKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnN1YnR5cGUp
OgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6ZnVuY3Rpb25EZXRh
aWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6Y29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hbFByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6cHJveHlU
YXJnZXRWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3
ZWFrTWFwU2l6ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3
ZWFrTWFwRW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0
Ojp3ZWFrU2V0U2l6ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0
Ojp3ZWFrU2V0RW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OmNsb25lQXJyYXlJdGVyYXRv
ck9iamVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OmNsb25lTWFwSXRlcmF0b3JPYmplY3QpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpjbG9uZVNldEl0ZXJhdG9yT2JqZWN0KToKKyAgICAgICAgKElu
c3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW50cmllcyk6CisgICAgICAg
IChJbnNwZWN0b3I6OmNoZWNrRm9yYmlkZGVuUHJvdG90eXBlKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnF1ZXJ5SW5zdGFuY2VzKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnF1ZXJ5SG9sZGVycyk6CisgICAgICAgICogaW5z
cGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmpl
Y3RlZFNjcmlwdEhvc3RQcm90b3R5cGVBdHRyaWJ1dGVFdmFsdWF0ZSk6CisgICAgICAgIChJbnNw
ZWN0b3I6OmpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlQXR0cmlidXRlU2F2ZWRSZXN1bHRB
bGlhcyk6CisgICAgICAgIChJbnNwZWN0b3I6OmpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
RnVuY3Rpb25JbnRlcm5hbENvbnN0cnVjdG9yTmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6Ompz
SW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25Jc0hUTUxBbGxDb2xsZWN0aW9uKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlv
bklzUHJvbWlzZVJlamVjdGVkV2l0aE5hdGl2ZUdldHRlclR5cGVFcnJvcik6CisgICAgICAgIChJ
bnNwZWN0b3I6OmpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25Qcm94eVRhcmdl
dFZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGVGdW5jdGlvbldlYWtNYXBTaXplKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNj
cmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtNYXBFbnRyaWVzKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtTZXRTaXplKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlv
bldlYWtTZXRFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNJbmplY3RlZFNjcmlwdEhv
c3RQcm90b3R5cGVGdW5jdGlvbkl0ZXJhdG9yRW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6
OmpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25RdWVyeUluc3RhbmNlcyk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OmpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25R
dWVyeUhvbGRlcnMpOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFBy
b3RvdHlwZUZ1bmN0aW9uRXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24pOgorICAgICAgICAoSW5z
cGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uU3VidHlwZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OmpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25G
dW5jdGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0luamVjdGVkU2NyaXB0SG9z
dFByb3RvdHlwZUZ1bmN0aW9uR2V0SW50ZXJuYWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNK
YXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbik6CisgICAgICAg
IChJbnNwZWN0b3I6OnZhbHVlRm9yU2NvcGVMb2NhdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6
OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVEZXNjcmlwdGlvbnMpOgorICAgICAgICAoSW5z
cGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmNhbGxlciBjb25zdCk6CisgICAgICAgIChJ
bnNwZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6c291cmNlSUQgY29uc3QpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmxpbmUgY29uc3QpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmNvbHVtbiBjb25zdCk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lIGNvbnN0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWlu
IGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlz
T2JqZWN0IGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1l
Ojppc1RhaWxEZWxldGVkIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0
Q2FsbEZyYW1lOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6dG9KUyk6CisgICAg
ICAgICogaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSW5zcGVj
dG9yOjpqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNj
b3BlRXh0ZW5zaW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1l
UHJvdG90eXBlRnVuY3Rpb25TY29wZURlc2NyaXB0aW9ucyk6CisgICAgICAgIChJbnNwZWN0b3I6
OmpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUNhbGxlcik6CisgICAgICAgIChJbnNwZWN0
b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVNvdXJjZUlEKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlTGluZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUNvbHVtbik6CisgICAgICAg
IChJbnNwZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUZ1bmN0aW9uTmFtZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVNjb3Bl
Q2hhaW4pOgorICAgICAgICAoSW5zcGVjdG9yOjpqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1
dGVUaGlzT2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6anNKYXZhU2NyaXB0Q2FsbEZyYW1l
QXR0cmlidXRlVHlwZSk6CisgICAgICAgIChJbnNwZWN0b3I6OmpzSmF2YVNjcmlwdENhbGxGcmFt
ZUlzVGFpbERlbGV0ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAg
IChJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50czo6U2NyaXB0QXJndW1lbnRzKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzOjpnbG9iYWxPYmplY3QgY29uc3QpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM6OmdldEZpcnN0QXJndW1lbnRBc1N0cmluZyBj
b25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50czo6aXNFcXVhbCBjb25z
dCk6CisgICAgICAgIChJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50czo6Z2xvYmFsU3RhdGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHA6CisgICAgICAgIChJ
bnNwZWN0b3I6OmNyZWF0ZVNjcmlwdENhbGxTdGFjayk6CisgICAgICAgIChJbnNwZWN0b3I6OmNy
ZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpleHRy
YWN0U291cmNlSW5mb3JtYXRpb25Gcm9tRXhjZXB0aW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
Y3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6
OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyk6CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdENhbGxT
dGFja0ZhY3RvcnkuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5o
OgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChJ
bnNwZWN0b3I6OlNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFrcG9pbnRBY3Rpb24pOgor
ICAgICAgICAoSW5zcGVjdG9yOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6U2NyaXB0RGVidWdTZXJ2ZXI6OmhhbmRsZUV4Y2VwdGlvbkluQnJl
YWtwb2ludENvbmRpdGlvbiBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlNjcmlwdERlYnVn
U2VydmVyOjpoYW5kbGVQYXVzZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlNjcmlwdERlYnVnU2Vy
dmVyOjpleGNlcHRpb25PckNhdWdodFZhbHVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0
RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0
QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBdWRpdEFnZW50OjpzZXR1
cCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckF1ZGl0QWdlbnQ6OnBvcHVsYXRlQXVk
aXRPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQ29uc29sZUFnZW50OjpzdGFydFRpbWlu
Zyk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6bG9nVGltaW5n
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQ29uc29sZUFnZW50OjpzdG9wVGltaW5n
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y291bnRSZXNldCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRTY2hlZHVsZUFzeW5jQ2Fs
bCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZSk6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFj
dGlvblByb2JlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkQ29udGludWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpjbGVhckRlYnVnZ2VyQnJlYWtwb2ludFN0YXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YXNzZXJ0UGF1c2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rv
ckhlYXBBZ2VudDo6c25hcHNob3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JIZWFw
QWdlbnQ6OmdldFByZXZpZXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JIZWFwQWdl
bnQ6OmdldFJlbW90ZU9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2Jh
bE9iamVjdEF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVj
dEF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbCk6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVj
dG9yOjpKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6YnJlYWtw
b2ludEFjdGlvbkxvZyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVj
dERlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2Jq
ZWN0UnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RS
dW50aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbCk6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvQWJzdHJhY3RQQy5jcHA6CisgICAgICAgIChKU0M6OkFic3RyYWN0UEM6OkFic3RyYWN0UEMp
OgorICAgICAgICAqIGludGVycHJldGVyL0Fic3RyYWN0UEMuaDoKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9DYWNoZWRDYWxsLmg6CisgICAgICAgIChKU0M6OkNhY2hlZENhbGw6OkNhY2hlZENhbGwp
OgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZTo6aW5pdEdsb2JhbEV4ZWMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWU6Ondhc21B
d2FyZUxleGljYWxHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmluaXRH
bG9iYWxFeGVjKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmV2
YWwpOgorICAgICAgICAoSlNDOjpzaXplT2ZWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6c2l6ZUZy
YW1lRm9yRm9yd2FyZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OnNpemVGcmFtZUZvclZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpsb2FkVmFyYXJncyk6CisgICAgICAgIChKU0M6OnNldHVwVmFy
YXJnc0ZyYW1lKToKKyAgICAgICAgKEpTQzo6c2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKToK
KyAgICAgICAgKEpTQzo6c2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUpOgorICAgICAgICAoSlND
OjpzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZUFuZFNldFRoaXMpOgorICAgICAgICAoSlNDOjpu
b3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6Om5v
dGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKToKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmV4ZWN1dGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpleGVjdXRlTW9kdWxlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpkZWJ1Zyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SW50ZXJw
cmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyLmg6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHA6CisgICAgICAgIChKU0M6OlNoYWRv
d0NoaWNrZW46OmxvZyk6CisgICAgICAgIChKU0M6OlNoYWRvd0NoaWNrZW46OnVwZGF0ZSk6Cisg
ICAgICAgIChKU0M6OlNoYWRvd0NoaWNrZW46OmZ1bmN0aW9uc09uU3RhY2spOgorICAgICAgICAq
IGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9TaGFk
b3dDaGlja2VuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjppdGVyYXRl
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwOgorICAgICAgICAoSlND
OjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpjcmVhdGVBcmd1bWVudHMpOgorICAgICAgICAqIGludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5oOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENhbGwpOgor
ICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkND
YWxsSGVscGVyczo6cHJlcGFyZUNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpDQ2FsbEhl
bHBlcnM6OnNldHVwQXJndW1lbnRzKToKKyAgICAgICAgKiBqaXQvSG9zdENhbGxSZXR1cm5WYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRl
KToKKyAgICAgICAgKiBqaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5oOgorICAgICAgICAoSlNDOjpp
bml0aWFsaXplSG9zdENhbGxSZXR1cm5WYWx1ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKiBqaXQvSklUQXJp
dGhtZXRpYzMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyk6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpT
Qzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9u
cy5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2hp
bnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXROZXdGdW5jQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0V4cHJDb21t
b24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpuZXdGdW5jdGlvbkNvbW1vbik6CisgICAgICAgIChKU0M6
OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5R2V0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAg
IChKU0M6Om9wZXJhdGlvbk5ld0Z1bmN0aW9uQ29tbW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zTVNWQzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpOgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAg
ICAgICAqIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA6CisgICAgICAgIChKU0M6
OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjpQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSk6
CisgICAgICAgICogaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmg6CisgICAgICAgICog
aml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpmb3JjZUlDRmFpbHVyZSk6CisgICAgICAg
IChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hHZXRCeUlEKToK
KyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaFB1
dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluQnlJRCk6CisgICAgICAgIChKU0M6OnJl
cGF0Y2hJbkJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluc3RhbmNlT2YpOgorICAgICAg
ICAoSlNDOjpyZXBhdGNoSW5zdGFuY2VPZik6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAg
ICAgICAoSlNDOjpsaW5rRGlyZWN0Rm9yKToKKyAgICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgor
ICAgICAgICAoSlNDOjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9y
cGhpY0NhbGwpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogaml0L1NuaXBw
ZXRTbG93UGF0aENhbGxzLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6Cisg
ICAgICAgIChKU0M6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OnNsb3dQYXRoRm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICoganNjLmNwcDoK
KyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUpOgorICAgICAgICAoR2xvYmFsT2JqZWN0
Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6bW9kdWxlTG9h
ZGVyRmV0Y2gpOgorICAgICAgICAoR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBv
cnRNZXRhUHJvcGVydGllcyk6CisgICAgICAgIChjU3RyaW5nRnJvbVZpZXdXaXRoU3RyaW5nKToK
KyAgICAgICAgKHByaW50SW50ZXJuYWwpOgorICAgICAgICAoZnVuY3Rpb25QcmludFN0ZE91dCk6
CisgICAgICAgIChmdW5jdGlvblByaW50U3RkRXJyKToKKyAgICAgICAgKGZ1bmN0aW9uRGVidWcp
OgorICAgICAgICAoZnVuY3Rpb25TbGVlcFNlY29uZHMpOgorICAgICAgICAoZnVuY3Rpb25SdW4p
OgorICAgICAgICAoZnVuY3Rpb25SdW5TdHJpbmcpOgorICAgICAgICAoZnVuY3Rpb25Mb2FkKToK
KyAgICAgICAgKGZ1bmN0aW9uTG9hZFN0cmluZyk6CisgICAgICAgIChmdW5jdGlvblJlYWRGaWxl
KToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tTeW50YXgpOgorICAgICAgICAoZnVuY3Rpb25TZXRT
YW1wbGluZ0ZsYWdzKToKKyAgICAgICAgKGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKToKKyAg
ICAgICAgKGZ1bmN0aW9uU2V0UmFuZG9tU2VlZCk6CisgICAgICAgIChmdW5jdGlvbk5ldmVySW5s
aW5lRnVuY3Rpb24pOgorICAgICAgICAoZnVuY3Rpb25Ob0RGRyk6CisgICAgICAgIChmdW5jdGlv
bk5vT1NSRXhpdEZ1enppbmcpOgorICAgICAgICAoZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKToKKyAgICAgICAgKGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcyk6CisgICAgICAgIChm
dW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQpOgorICAgICAgICAoZnVuY3Rpb25Eb2xsYXJFdmFs
U2NyaXB0KToKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydCk6CisgICAgICAgIChm
dW5jdGlvbkRvbGxhckFnZW50UmVjZWl2ZUJyb2FkY2FzdCk6CisgICAgICAgIChmdW5jdGlvbkRv
bGxhckFnZW50UmVwb3J0KToKKyAgICAgICAgKGZ1bmN0aW9uRG9sbGFyQWdlbnRTbGVlcCk6Cisg
ICAgICAgIChmdW5jdGlvbkRvbGxhckFnZW50QnJvYWRjYXN0KToKKyAgICAgICAgKGZ1bmN0aW9u
Rmxhc2hIZWFwQWNjZXNzKToKKyAgICAgICAgKGZ1bmN0aW9uSlNDT3B0aW9ucyk6CisgICAgICAg
IChmdW5jdGlvblRyYW5zZmVyQXJyYXlCdWZmZXIpOgorICAgICAgICAoZnVuY3Rpb25DaGVja01v
ZHVsZVN5bnRheCk6CisgICAgICAgIChmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90KToKKyAg
ICAgICAgKGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzKToKKyAgICAgICAgKGZ1
bmN0aW9uQXN5bmNUZXN0U3RhcnQpOgorICAgICAgICAoZnVuY3Rpb25XZWJBc3NlbWJseU1lbW9y
eU1vZGUpOgorICAgICAgICAoZnVuY3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayk6
CisgICAgICAgIChkdW1wRXhjZXB0aW9uKToKKyAgICAgICAgKGNoZWNrVW5jYXVnaHRFeGNlcHRp
b24pOgorICAgICAgICAoY2hlY2tFeGNlcHRpb24pOgorICAgICAgICAocnVuV2l0aE9wdGlvbnMp
OgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIGxsaW50L0xMSW50RXhjZXB0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpyZXR1cm5Ub1Rocm93KToKKyAgICAgICAg
KEpTQzo6TExJbnQ6OmNhbGxUb1Rocm93KToKKyAgICAgICAgKiBsbGludC9MTEludEV4Y2VwdGlv
bnMuaDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpnZXROb25Db25zdGFudE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkxMSW50OjpsbGludF90cmFjZV9vcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmxsaW50X3RyYWNlX3ZhbHVlKToKKyAgICAgICAgKEpTQzo6TExJ
bnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnRyYWNlRnVu
Y3Rpb25Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyk6CisgICAgICAgIChKU0M6OkxMSW50OjplbnRyeU9TUik6CisgICAgICAgIChKU0M6
OkxMSW50OjpzZXR1cEdldEJ5SWRQcm90b3R5cGVDYWNoZSk6CisgICAgICAgIChKU0M6OkxMSW50
OjpnZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVIb3N0Q2FsbCk6CisgICAg
ICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJp
Y0NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6dmFyYXJnc1NldHVwKToKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OmNvbW1vbkNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50X3Ro
cm93X3N0YWNrX292ZXJmbG93X2Vycm9yKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmxsaW50X3dy
aXRlX2JhcnJpZXJfc2xvdyk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q0xvb3BSZWdpc3Rlcjo6b3Bl
cmF0b3IgQ2FsbEZyYW1lKik6CisgICAgICAgIChKU0M6OkNMb29wUmVnaXN0ZXI6Om9wZXJhdG9y
IEV4ZWNTdGF0ZSopOiBEZWxldGVkLgorICAgICAgICAqIHBhcnNlci9Nb2R1bGVBbmFseXplci5j
cHA6CisgICAgICAgIChKU0M6Ok1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFseXplcik6CisgICAg
ICAgICogcGFyc2VyL01vZHVsZUFuYWx5emVyLmg6CisgICAgICAgICogcGFyc2VyL1BhcnNlckVy
cm9yLmg6CisgICAgICAgIChKU0M6OlBhcnNlckVycm9yOjp0b0Vycm9yT2JqZWN0KToKKyAgICAg
ICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmls
ZXI6OkJ5dGVjb2RlOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5
dGVjb2RlLmg6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNl
UHJvcGVydGllcyBjb25zdCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNl
cXVlbmNlLmg6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwOgorICAg
ICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGVzOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBw
cm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5oOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVy
Q29tcGlsYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Q29tcGlsYXRpb246OnRv
SlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uaDoKKyAg
ICAgICAgKiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwOgorICAgICAgICAo
SlNDOjpQcm9maWxlcjo6Q29tcGlsZWRCeXRlY29kZTo6dG9KUyBjb25zdCk6CisgICAgICAgICog
cHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmg6CisgICAgICAgICogcHJvZmlsZXIv
UHJvZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRhYmFzZTo6
dG9KUyBjb25zdCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRhYmFzZTo6dG9KU09OIGNv
bnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmg6CisgICAgICAgICog
cHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpFdmVu
dDo6dG9KUyBjb25zdCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5oOgorICAg
ICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OlByb2Zp
bGVyOjpPU1JFeGl0Ojp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9T
UkV4aXQuaDoKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRlOjp0b0pTIGNvbnN0KToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmg6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW4uY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6T3JpZ2luOjp0b0pTIGNv
bnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9yaWdpbi5oOgorICAgICAgICAqIHBy
b2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6
T3JpZ2luU3RhY2s6OnRvSlMgY29uc3QpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyT3Jp
Z2luU3RhY2suaDoKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVz
LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OlByb2ZpbGVkQnl0ZWNvZGVzOjp0b0pTIGNv
bnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmg6Cisg
ICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJVSUQuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxl
cjo6VUlEOjp0b0pTIGNvbnN0KToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlclVJRC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlND
OjpBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpB
YnN0cmFjdE1vZHVsZVJlY29yZDo6aG9zdFJlc29sdmVJbXBvcnRlZE1vZHVsZSk6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TW9kdWxlUmVjb3JkOjpyZXNvbHZlSW1wb3J0KToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnJlc29sdmVFeHBvcnRJbXBsKToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnJlc29sdmVFeHBvcnQpOgorICAgICAgICAoSlNDOjpn
ZXRFeHBvcnRlZE5hbWVzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6Omdl
dE1vZHVsZU5hbWVzcGFjZSk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TW9kdWxlUmVjb3JkOjps
aW5rKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmg6CisgICAgICAgICogcnVudGlt
ZS9BcmdMaXN0Lmg6CisgICAgICAgIChKU0M6OkFyZ0xpc3Q6OkFyZ0xpc3QpOgorICAgICAgICAq
IHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9BcnJheUNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKToK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAo
SlNDOjpjYWxsQXJyYXlDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmlzQXJyYXlTbG93SW5s
aW5lKToKKyAgICAgICAgKEpTQzo6aXNBcnJheVNsb3cpOgorICAgICAgICAoSlNDOjphcnJheUNv
bnN0cnVjdG9yUHJpdmF0ZUZ1bmNJc0FycmF5U2xvdyk6CisgICAgICAgICogcnVudGltZS9BcnJh
eUNvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OmlzQXJyYXkpOgorICAgICAgICAqIHJ1bnRp
bWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OnB1dExlbmd0aCk6CisgICAgICAgIChKU0M6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OnNw
ZWNpZXNXYXRjaHBvaW50SXNWYWxpZCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3Bl
Y2llc0NyZWF0ZSk6CisgICAgICAgIChKU0M6OmFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0
T3JFbmQpOgorICAgICAgICAoSlNDOjpzaGlmdCk6CisgICAgICAgIChKU0M6OnVuc2hpZnQpOgor
ICAgICAgICAoSlNDOjpmYXN0Sm9pbik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6c2xvd0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0pvaW4p
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1BvcCk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmV2ZXJzZSk6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2hpZnQpOgorICAgICAgICAoSlNDOjphcnJheVBy
b3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1VuU2hpZnQpOgorICAgICAgICAoSlNDOjpmYXN0SW5k
ZXhPZik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSW5kZXhPZik6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjptb3ZlRWxlbWVu
dHMpOgorICAgICAgICAoSlNDOjpjb25jYXRBcHBlbmRPbmUpOgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvUHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHkpOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
UHJpdmF0ZUZ1bmNBcHBlbmRNZW1jcHkpOgorICAgICAgICAqIHJ1bnRpbWUvQXN5bmNGdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEFzeW5jRnVuY3Rpb25Db25zdHJ1
Y3Rvcik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvcik6
CisgICAgICAgICogcnVudGltZS9Bc3luY0dlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjYWxsQXN5bmNHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yKToK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXN5bmNHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBydW50aW1lL0F0b21pY3NPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjph
dG9taWNzRnVuY0FkZCk6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jQW5kKToKKyAgICAgICAg
KEpTQzo6YXRvbWljc0Z1bmNDb21wYXJlRXhjaGFuZ2UpOgorICAgICAgICAoSlNDOjphdG9taWNz
RnVuY0V4Y2hhbmdlKToKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNJc0xvY2tGcmVlKToKKyAg
ICAgICAgKEpTQzo6YXRvbWljc0Z1bmNMb2FkKToKKyAgICAgICAgKEpTQzo6YXRvbWljc0Z1bmNP
cik6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jU3RvcmUpOgorICAgICAgICAoSlNDOjphdG9t
aWNzRnVuY1N1Yik6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jV2FpdCk6CisgICAgICAgIChK
U0M6OmF0b21pY3NGdW5jV2FrZSk6CisgICAgICAgIChKU0M6OmF0b21pY3NGdW5jWG9yKToKKyAg
ICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc0FkZCk6CisgICAgICAgIChKU0M6Om9wZXJhdGlv
bkF0b21pY3NBbmQpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25BdG9taWNzQ29tcGFyZUV4Y2hh
bmdlKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQXRvbWljc0V4Y2hhbmdlKToKKyAgICAgICAg
KEpTQzo6b3BlcmF0aW9uQXRvbWljc0lzTG9ja0ZyZWUpOgorICAgICAgICAoSlNDOjpvcGVyYXRp
b25BdG9taWNzTG9hZCk6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NPcik6CisgICAg
ICAgIChKU0M6Om9wZXJhdGlvbkF0b21pY3NTdG9yZSk6CisgICAgICAgIChKU0M6Om9wZXJhdGlv
bkF0b21pY3NTdWIpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25BdG9taWNzWG9yKToKKyAgICAg
ICAgKiBydW50aW1lL0F0b21pY3NPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6dG9CaWdJbnQpOgorICAgICAgICAoSlNDOjpj
YWxsQmlnSW50Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvQmlnSW50T2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6QmlnSW50T2JqZWN0Ojp0b1N0cmluZ05hbWUpOgorICAgICAgICAo
SlNDOjpCaWdJbnRPYmplY3Q6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9CaWdJ
bnRPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1RvU3RyaW5nSW1wbCk6CisgICAgICAgIChKU0M6OmJp
Z0ludFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEJvb2xlYW5Db25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdFdpdGhCb29sZWFuQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUv
Qm9vbGVhbkNvbnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6Ym9vbGVhblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6Ym9vbGVhblByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKEpTQzo6cHJvZmlsZWRDYWxs
KToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRhLmg6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAg
IChKU0M6OkNsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkpOgorICAgICAgICAoSlNDOjpDbG9u
ZWRBcmd1bWVudHM6OmNyZWF0ZVdpdGhJbmxpbmVGcmFtZSk6CisgICAgICAgIChKU0M6OkNsb25l
ZEFyZ3VtZW50czo6Y3JlYXRlV2l0aE1hY2hpbmVGcmFtZSk6CisgICAgICAgIChKU0M6OkNsb25l
ZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nRnJvbSk6CisgICAgICAgIChKU0M6OkNsb25lZEFy
Z3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6Q2xvbmVkQXJndW1l
bnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRz
OjpwdXQpOgorICAgICAgICAoSlNDOjpDbG9uZWRBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6Q2xvbmVkQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkNsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFscyk6CisgICAgICAg
IChKU0M6OkNsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KToK
KyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dBcml0eUNoZWNrU3RhY2tP
dmVyZmxvd0Vycm9yKToKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAo
SlNDOjpjcmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0KToKKyAgICAgICAgKEpTQzo6dXBkYXRlQXJp
dGhQcm9maWxlRm9yQmluYXJ5QXJpdGhPcCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93
UGF0aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjpjb2RlQmxvY2tGcm9tQ2Fs
bEZyYW1lQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNr
Rm9yKToKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwpOgorICAgICAg
ICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbCk6CisgICAg
ICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVHZXRGcm9tU2NvcGVHbG9iYWwpOgor
ICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSk6CisgICAg
ICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0QWNjZXNzb3JXaXRoUmVpZnkpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNoZWNrU3lu
dGF4KToKKyAgICAgICAgKEpTQzo6Y2hlY2tNb2R1bGVTeW50YXgpOgorICAgICAgICAoSlNDOjpl
dmFsdWF0ZSk6CisgICAgICAgIChKU0M6OnByb2ZpbGVkRXZhbHVhdGUpOgorICAgICAgICAoSlND
OjpldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbik6CisgICAgICAgIChKU0M6OnJlamVjdFByb21p
c2UpOgorICAgICAgICAoSlNDOjpsb2FkQW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoSlND
Ojpsb2FkTW9kdWxlKToKKyAgICAgICAgKEpTQzo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKToKKyAg
ICAgICAgKEpTQzo6aW1wb3J0TW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24u
aDoKKyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAoSlNDOjpwcm9maWxlZEV2YWx1
YXRlKToKKyAgICAgICAgKiBydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoSlND
OjpDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyk6CisgICAg
ICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6OmludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwp
OgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojpsb2dXaXRoTGV2ZWwpOgorICAgICAgICAo
SlNDOjpDb25zb2xlQ2xpZW50OjpjbGVhcik6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6
OmRpcik6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGllbnQ6OmRpclhNTCk6CisgICAgICAgIChK
U0M6OkNvbnNvbGVDbGllbnQ6OnRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6
dHJhY2UpOgorICAgICAgICAoSlNDOjpDb25zb2xlQ2xpZW50Ojphc3NlcnRpb24pOgorICAgICAg
ICAoSlNDOjpDb25zb2xlQ2xpZW50Ojpncm91cCk6CisgICAgICAgIChKU0M6OkNvbnNvbGVDbGll
bnQ6Omdyb3VwQ29sbGFwc2VkKToKKyAgICAgICAgKEpTQzo6Q29uc29sZUNsaWVudDo6Z3JvdXBF
bmQpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc29sZUNsaWVudC5oOgorICAgICAgICAqIHJ1bnRp
bWUvQ29uc29sZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OnZhbHVlT3JEZWZhdWx0TGFiZWxT
dHJpbmcpOgorICAgICAgICAoSlNDOjp2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENo
ZWNrKToKKyAgICAgICAgKEpTQzo6Y29uc29sZUxvZ1dpdGhMZXZlbCk6CisgICAgICAgIChKU0M6
OmNvbnNvbGVQcm90b0Z1bmNEZWJ1Zyk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNF
cnJvcik6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNMb2cpOgorICAgICAgICAoSlND
Ojpjb25zb2xlUHJvdG9GdW5jSW5mbyk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNX
YXJuKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0NsZWFyKToKKyAgICAgICAgKEpT
Qzo6Y29uc29sZVByb3RvRnVuY0Rpcik6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNE
aXJYTUwpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jVGFibGUpOgorICAgICAgICAo
SlNDOjpjb25zb2xlUHJvdG9GdW5jVHJhY2UpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9G
dW5jQXNzZXJ0KToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0NvdW50KToKKyAgICAg
ICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0NvdW50UmVzZXQpOgorICAgICAgICAoSlNDOjpjb25z
b2xlUHJvdG9GdW5jUHJvZmlsZSk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNQcm9m
aWxlRW5kKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1Rha2VIZWFwU25hcHNob3Qp
OgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jVGltZSk6CisgICAgICAgIChKU0M6OmNv
bnNvbGVQcm90b0Z1bmNUaW1lTG9nKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1Rp
bWVFbmQpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jVGltZVN0YW1wKToKKyAgICAg
ICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0dyb3VwKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVBy
b3RvRnVuY0dyb3VwQ29sbGFwc2VkKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY0dy
b3VwRW5kKToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1JlY29yZCk6CisgICAgICAg
IChKU0M6OmNvbnNvbGVQcm90b0Z1bmNSZWNvcmRFbmQpOgorICAgICAgICAoSlNDOjpjb25zb2xl
UHJvdG9GdW5jU2NyZWVuc2hvdCk6CisgICAgICAgICogcnVudGltZS9Db25zdHJ1Y3REYXRhLmNw
cDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6cHJvZmlsZWRDb25z
dHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5oOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpwcm9maWxlZENvbnN0cnVjdCk6CisgICAgICAg
ICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwOgorICAgICAgICAoSlNDOjpjYWxsQ3Vz
dG9tU2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuY3BwOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6d3Jh
cCk6CisgICAgICAgICogcnVudGltZS9EYXRhVmlldy5oOgorICAgICAgICAqIHJ1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6bWlsbGlzZWNvbmRzRnJvbUNvbXBvbmVu
dHMpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAgKEpTQzo6Y29uc3Ry
dWN0V2l0aERhdGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmRhdGVQYXJzZSk6CisgICAg
ICAgIChKU0M6OmRhdGVVVEMpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6
CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpEYXRl
SW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1lIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6RGF0ZUluc3RhbmNlOjpjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZVVUQyBjb25zdCk6Cisg
ICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRMb2NhbGVEYXRlKToKKyAgICAgICAg
KEpTQzo6Zm9ybWF0ZURhdGVJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OmZpbGxTdHJ1Y3R1cmVz
VXNpbmdUaW1lQXJncyk6CisgICAgICAgIChKU0M6OmZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJn
cyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6
OmRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNU
b0lTT1N0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0RhdGVTdHJpbmcpOgor
ICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9UaW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
ZGF0ZVByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1RvTG9jYWxlRGF0ZVN0cmluZyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0xvY2Fs
ZVRpbWVTdHJpbmcpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9QcmltaXRpdmVTeW1i
b2wpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VGltZSk6CisgICAgICAgIChKU0M6
OmRhdGVQcm90b0Z1bmNHZXRGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNH
ZXRVVENGdWxsWWVhcik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNb250aCk6Cisg
ICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENNb250aCk6CisgICAgICAgIChKU0M6OmRh
dGVQcm90b0Z1bmNHZXREYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFVUQ0Rh
dGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0RGF5KToKKyAgICAgICAgKEpTQzo6
ZGF0ZVByb3RvRnVuY0dldFVUQ0RheSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRI
b3Vycyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENIb3Vycyk6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNHZXRNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3Rv
RnVuY0dldFVUQ01pbnV0ZXMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0U2Vjb25k
cyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRVVENTZWNvbmRzKToKKyAgICAgICAg
KEpTQzo6ZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQ
cm90b0Z1bmNHZXRVVENNaWxsaXNlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
R2V0VGltZXpvbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VGltZSk6
CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToKKyAgICAgICAgKEpTQzo6
c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0
TWlsbGlTZWNvbmRzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vj
b25kcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRTZWNvbmRzKToKKyAgICAgICAg
KEpTQzo6ZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJv
dG9GdW5jU2V0TWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENNaW51
dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY1NldEhvdXJzKToKKyAgICAgICAgKEpT
Qzo6ZGF0ZVByb3RvRnVuY1NldFVUQ0hvdXJzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y1NldERhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0VVRDRGF0ZSk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90
b0Z1bmNTZXRVVENNb250aCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRGdWxsWWVh
cik6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNTZXRVVENGdWxsWWVhcik6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNTZXRZZWFyKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVu
Y0dldFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9KU09OKToKKyAgICAgICAg
KiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3Vt
ZW50czo6Y3JlYXRlQnlDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmg6Cisg
ICAgICAgICogcnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OkRpcmVjdEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEaXJlY3RFdmFs
RXhlY3V0YWJsZTo6RGlyZWN0RXZhbEV4ZWN1dGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvRGly
ZWN0RXZhbEV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y3JlYXRlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFdmFsRXJyb3IpOgor
ICAgICAgICAoSlNDOjpjcmVhdGVSYW5nZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVm
ZXJlbmNlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVTeW50YXhFcnJvcik6CisgICAgICAg
IChKU0M6OmNyZWF0ZVR5cGVFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVVJJRXJyb3IpOgorICAgICAgICAo
SlNDOjpjcmVhdGVHZXR0ZXJUeXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpnZXRTdGFja1RyYWNl
KToKKyAgICAgICAgKEpTQzo6Z2V0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjphZGRF
cnJvckluZm8pOgorICAgICAgICAoSlNDOjp0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRB
c0Z1bmN0aW9uVHlwZUVycm9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dUeXBlRXJyb3IpOgorICAg
ICAgICAoSlNDOjp0aHJvd1N5bnRheEVycm9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dHZXR0ZXJU
eXBlRXJyb3IpOgorICAgICAgICAoSlNDOjp0aHJvd0RPTUF0dHJpYnV0ZUdldHRlclR5cGVFcnJv
cik6CisgICAgICAgIChKU0M6OmNyZWF0ZU91dE9mTWVtb3J5RXJyb3IpOgorICAgICAgICAqIHJ1
bnRpbWUvRXJyb3IuaDoKKyAgICAgICAgKEpTQzo6dGhyb3dSYW5nZUVycm9yKToKKyAgICAgICAg
KEpTQzo6dGhyb3dWTUVycm9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dWTVR5cGVFcnJvcik6Cisg
ICAgICAgIChKU0M6OnRocm93Vk1SYW5nZUVycm9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dWTUdl
dHRlclR5cGVFcnJvcik6CisgICAgICAgIChKU0M6OnRocm93Vk1ET01BdHRyaWJ1dGVHZXR0ZXJU
eXBlRXJyb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxs
RXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkVycm9yQ29uc3RydWN0b3I6OnB1dCk6
CisgICAgICAgIChKU0M6OkVycm9yQ29uc3RydWN0b3I6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAg
ICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9y
SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0
YW5jZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpzYW5p
dGl6ZWRUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmdldE93blByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmdldFN0cnVjdHVyZVBy
b3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpkZWZpbmVPd25Qcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnB1dCk6CisgICAgICAgIChKU0M6
OkVycm9ySW5zdGFuY2U6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9y
SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZXJyb3JQcm90
b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHA6Cisg
ICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpFdmFsRXhlY3V0YWJsZSk6CisgICAgICAgICog
cnVudGltZS9FdmFsRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uRnV6
ei5jcHA6CisgICAgICAgIChKU0M6OmRvRXhjZXB0aW9uRnV6emluZyk6CisgICAgICAgICogcnVu
dGltZS9FeGNlcHRpb25GdXp6Lmg6CisgICAgICAgIChKU0M6OmRvRXhjZXB0aW9uRnV6emluZ0lm
RW5hYmxlZCk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAg
ICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpkZWZhdWx0VmFsdWUpOgorICAgICAg
ICAoSlNDOjpjcmVhdGVTdGFja092ZXJmbG93RXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVV
bmRlZmluZWRWYXJpYWJsZUVycm9yKToKKyAgICAgICAgKEpTQzo6ZXJyb3JEZXNjcmlwdGlvbkZv
clZhbHVlKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVh
dGVJbnZhbGlkRnVuY3Rpb25BcHBseVBhcmFtZXRlckVycm9yKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlSW52YWxpZEluUGFyYW1ldGVyRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVJbnZhbGlk
SW5zdGFuY2VvZlBhcmFtZXRlckVycm9yTm90RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpjcmVh
dGVJbnZhbGlkSW5zdGFuY2VvZlBhcmFtZXRlckVycm9ySGFzSW5zdGFuY2VWYWx1ZU5vdEZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IpOgorICAgICAg
ICAoSlNDOjpjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5v
dEFuT2JqZWN0RXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFcnJvckZvckludmFsaWRHbG9i
YWxBc3NpZ25tZW50KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVERaRXJyb3IpOgorICAgICAgICAo
SlNDOjp0aHJvd091dE9mTWVtb3J5RXJyb3IpOgorICAgICAgICAoSlNDOjp0aHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcik6CisgICAgICAgIChKU0M6OnRocm93VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2Vw
dGlvbik6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg6CisgICAgICAgICog
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
V2l0aEZ1bmN0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsRnVuY3Rpb25Db25z
dHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAq
IHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9t
R2xvYmFsQ29kZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAg
ICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblJhcmVE
YXRhLmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Y2FsbEdlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IpOgorICAg
ICAgICAoSlNDOjpjb25zdHJ1Y3RHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6R2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpHZW5lcmljQXJndW1l
bnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
d3JhcCk6CisgICAgICAgICogcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwOgorICAgICAgICAoSlND
OjpjYWxsR2V0dGVyKToKKyAgICAgICAgKEpTQzo6Y2FsbFNldHRlcik6CisgICAgICAgICogcnVu
dGltZS9HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0hhc2hNYXBJbXBsLmg6Cisg
ICAgICAgIChKU0M6Okhhc2hNYXBCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmFyZUtl
eXNFcXVhbCk6CisgICAgICAgIChKU0M6OmpzTWFwSGFzaCk6CisgICAgICAgIChKU0M6Okhhc2hN
YXBJbXBsOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpmaW5k
QnVja2V0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmdldCk6CisgICAgICAgIChKU0M6
Okhhc2hNYXBJbXBsOjpoYXMpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YWRkKToKKyAg
ICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmFkZE5vcm1hbGl6ZWQpOgorICAgICAgICAoSlNDOjpI
YXNoTWFwSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmNsZWFyKToK
KyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnNldFVwSGVhZEFuZFRhaWwpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6YWRkTm9ybWFsaXplZE5vbkV4aXN0aW5nRm9yQ2xvbmluZyk6Cisg
ICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjphZGROb3JtYWxpemVkSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwSW1wbDo6ZmluZEJ1Y2tldEFscmVhZHlIYXNoZWRBbmROb3JtYWxpemVk
KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnJlaGFzaCk6CisgICAgICAgIChKU0M6Okhh
c2hNYXBJbXBsOjptYWtlQW5kU2V0TmV3QnVmZmVyKToKKyAgICAgICAgKiBydW50aW1lL0lkZW50
aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwOgor
ICAgICAgICAoSlNDOjpJbmRpcmVjdEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpJbmRpcmVjdEV2YWxFeGVjdXRhYmxlOjpJbmRpcmVjdEV2YWxFeGVjdXRhYmxlKToKKyAg
ICAgICAgKiBydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50
aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Omlu
c3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdExvZyk6CisgICAgICAgICogcnVudGltZS9JbnRl
cm5hbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJu
YWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlU2xvdyk6CisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmg6
CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvci5jcHA6CisgICAgICAgIChKU0M6Oklu
dGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxh
dG9yOjpjcmVhdGVDb2xsYXRvcik6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6Y29tcGFy
ZVN0cmluZ3MpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3I6OnJlc29sdmVkT3B0aW9ucyk6
CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SW50bENv
bGxhdG9yKToKKyAgICAgICAgKEpTQzo6Y2FsbEludGxDb2xsYXRvcik6CisgICAgICAgIChKU0M6
OkludGxDb2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6CisgICAgICAg
ICogcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpJbnRs
Q29sbGF0b3JGdW5jQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvclByb3RvdHlw
ZUdldHRlckNvbXBhcmUpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3JQcm90b3R5cGVGdW5j
UmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5j
cHA6CisgICAgICAgIChKU0M6OkludGxEVEZJbnRlcm5hbDo6dG9EYXRlVGltZU9wdGlvbnNBbnlE
YXRlKToKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRp
bWVGb3JtYXQpOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVGb3JtYXQ6OnJlc29sdmVkT3B0
aW9ucyk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0KToKKyAgICAg
ICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnRzKToKKyAgICAgICAgKiBy
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJbnRsRGF0
ZVRpbWVGb3JtYXQpOgorICAgICAgICAoSlNDOjpjYWxsSW50bERhdGVUaW1lRm9ybWF0KToKKyAg
ICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9j
YWxlc09mKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZSk6
CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdCk6
CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZUZ1bmNGb3JtYXRUb1Bh
cnRzKToKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29s
dmVkT3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdCk6Cisg
ICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmZvcm1hdE51bWJlcik6CisgICAgICAgIChK
U0M6OkludGxOdW1iZXJGb3JtYXQ6OnJlc29sdmVkT3B0aW9ucyk6CisgICAgICAgIChKU0M6Oklu
dGxOdW1iZXJGb3JtYXQ6OmZvcm1hdFRvUGFydHMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51
bWJlckZvcm1hdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SW50bE51bWJlckZvcm1hdCk6CisgICAg
ICAgIChKU0M6OmNhbGxJbnRsTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6CisgICAgICAgICogcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51
bWJlckZvcm1hdEZ1bmNGb3JtYXROdW1iZXIpOgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9y
bWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1h
dFByb3RvdHlwZUZ1bmNGb3JtYXRUb1BhcnRzKToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZv
cm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmludGxCb29sZWFuT3B0aW9uKToKKyAgICAgICAg
KEpTQzo6aW50bFN0cmluZ09wdGlvbik6CisgICAgICAgIChKU0M6OmludGxOdW1iZXJPcHRpb24p
OgorICAgICAgICAoSlNDOjppbnRsRGVmYXVsdE51bWJlck9wdGlvbik6CisgICAgICAgIChKU0M6
OmNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QpOgorICAgICAgICAoSlNDOjpkZWZhdWx0TG9jYWxlKToK
KyAgICAgICAgKEpTQzo6bG9va3VwTWF0Y2hlcik6CisgICAgICAgIChKU0M6OmJlc3RGaXRNYXRj
aGVyKToKKyAgICAgICAgKEpTQzo6cmVzb2x2ZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxvb2t1
cFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9jYWxl
cyk6CisgICAgICAgIChKU0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjppbnRs
T2JqZWN0RnVuY0dldENhbm9uaWNhbExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9i
amVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0SW50bEluc3RhbmNlV2l0aFdvcmthcm91bmRGb3JMZWdhY3lJbnRsQ29u
c3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMpOgorICAgICAg
ICAoSlNDOjpJbnRsUGx1cmFsUnVsZXM6OnJlc29sdmVkT3B0aW9ucyk6CisgICAgICAgIChKU0M6
OkludGxQbHVyYWxSdWxlczo6c2VsZWN0KToKKyAgICAgICAgKiBydW50aW1lL0ludGxQbHVyYWxS
dWxlcy5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJbnRsUGx1cmFsUnVsZXMpOgorICAgICAgICAoSlND
OjpjYWxsSW50bFBsdXJhbFJ1bGVzKToKKyAgICAgICAgKEpTQzo6SW50bFBsdXJhbFJ1bGVzQ29u
c3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAgICAgKiBydW50aW1lL0ludGxQ
bHVyYWxSdWxlc1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkludGxQbHVyYWxSdWxlc1By
b3RvdHlwZUZ1bmNTZWxlY3QpOgorICAgICAgICAoSlNDOjpJbnRsUGx1cmFsUnVsZXNQcm90b3R5
cGVGdW5jUmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yTmV4dCk6CisgICAgICAgIChKU0M6Oml0
ZXJhdG9yVmFsdWUpOgorICAgICAgICAoSlNDOjppdGVyYXRvckNvbXBsZXRlKToKKyAgICAgICAg
KEpTQzo6aXRlcmF0b3JTdGVwKToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JDbG9zZSk6CisgICAg
ICAgIChKU0M6OmNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KToKKyAgICAgICAgKEpTQzo6aGFz
SXRlcmF0b3JNZXRob2QpOgorICAgICAgICAoSlNDOjppdGVyYXRvck1ldGhvZCk6CisgICAgICAg
IChKU0M6Oml0ZXJhdG9yRm9ySXRlcmFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JP
cGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmZvckVhY2hJbkl0ZXJhYmxlKToKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhX
cml0YWJsZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlZmluZU93blByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVsZXRlUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6YXBwZW5kTWVtY3B5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZhc3RTbGljZSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAo
SlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvcHlU
b0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzaGlmdENvdW50Rm9yU2hpZnQpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5OjpzaGlmdENvdW50Rm9yU3BsaWNlKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3Vu
dEZvclNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50Rm9yU3BsaWNl
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50KToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTR2VuZXJp
Y0FycmF5QnVmZmVyQ29uc3RydWN0b3I8c2hhcmluZ01vZGU+Ojpjb25zdHJ1Y3RBcnJheUJ1ZmZl
cik6CisgICAgICAgIChKU0M6OmNhbGxBcnJheUJ1ZmZlcik6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlCdWZmZXJQcm90
b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5QnVmZmVyUHJvdG9HZXR0ZXJGdW5jQnl0
ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OnNoYXJlZEFycmF5QnVmZmVyUHJvdG9HZXR0ZXJGdW5j
Qnl0ZUxlbmd0aCk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojp0b1N0cmluZ05hbWUpOgorICAgICAgICAo
SlNDOjpKU0FycmF5QnVmZmVyVmlldzo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OnVuc2hhcmVkSlNCdWZmZXIpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmll
dzo6cG9zc2libHlTaGFyZWRKU0J1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5SW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjp0b0xlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2hJbmxpbmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
dHJ5Q3JlYXRlV2l0aExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0b1ByaW1pdGl2
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpwYXJzZUludCk6CisgICAgICAgIChK
U0M6OkpTQmlnSW50OjpzdHJpbmdUb0JpZ0ludCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0
b1N0cmluZyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBvbmVudGlhdGUpOgorICAgICAg
ICAoSlNDOjpKU0JpZ0ludDo6bXVsdGlwbHkpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6ZGl2
aWRlKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJlbWFpbmRlcik6CisgICAgICAgIChKU0M6
OkpTQmlnSW50OjphZGQpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c3ViKToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VBbmQpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0
d2lzZU9yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VYb3IpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6bGVmdFNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnNpZ25l
ZFJpZ2h0U2hpZnQpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZU5vdCk6CisgICAg
ICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUFkZCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50
OjphYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OmFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojph
YnNvbHV0ZUFkZE9uZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZVN1Yk9uZSk6
CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28pOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFsbG9jYXRlRm9yKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRvTnVtYmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
SlNCaWdJbnQ6OmdldFByaW1pdGl2ZU51bWJlciBjb25zdCk6CisgICAgICAgIChKU0M6OkpTQmln
SW50Ojp0b09iamVjdCBjb25zdCk6CisgICAgICAgICogcnVudGltZS9KU0JpZ0ludC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Ym91bmRU
aGlzTm9BcmdzRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEpTQzo6Ym91bmRGdW5jdGlvbkNhbGwp
OgorICAgICAgICAoSlNDOjpib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAg
ICAgIChKU0M6OmJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpoYXNJbnN0
YW5jZUJvdW5kRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpnZXRCb3VuZEZ1bmN0aW9uU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpKU0JvdW5kRnVuY3Rpb246OmN1c3RvbUhhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6
SlNCb3VuZEZ1bmN0aW9uOjpib3VuZEFyZ3NDb3B5KToKKyAgICAgICAgKiBydW50aW1lL0pTQm91
bmRGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAg
IChKU0M6OkpTVmFsdWU6OnRvSW50ZWdlciBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OnRvSW50ZWdlclByZXNlcnZlTmFOIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9M
ZW5ndGggY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b051bWJlclNsb3dDYXNlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9PYmplY3RTbG93Q2FzZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OnRvVGhpc1Nsb3dDYXNlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnB1dFRvUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0VG9Qcmlt
aXRpdmVCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZSBj
b25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvV1RGU3RyaW5nU2xvd0Nhc2UgY29uc3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
Ojp0b0Zsb2F0IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvSW50MzIgY29uc3QpOgorICAgICAgICAoSlNDOjpK
U1ZhbHVlOjp0b1VJbnQzMiBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvSW5kZXgg
Y29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpnZXRTdHJpbmcgY29uc3QpOgorICAgICAg
ICAoSlNDOjpVbmtub3duPjo6Z2V0U3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9Qcm9wZXJ0eUtleSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvUHJpbWl0
aXZlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6dG9QcmVmZXJyZWRQcmltaXRpdmVUeXBlKToKKyAg
ICAgICAgKEpTQzo6SlNWYWx1ZTo6Z2V0UHJpbWl0aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6
SlNWYWx1ZTo6dG9OdW1iZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b051bWVy
aWMgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b0JpZ0ludE9ySW50MzIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b09iamVjdCBjb25zdCk6CisgICAgICAgIChKU0M6
OkpTVmFsdWU6OnRvVGhpcyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmdldCBjb25z
dCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmdldFByb3BlcnR5U2xvdCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTVmFsdWU6OmdldE93blByb3BlcnR5U2xvdCBjb25zdCk6CisgICAgICAgIChK
U0M6OkpTVmFsdWU6OnB1dCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dElubGluZSk6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
OjplcXVhbCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUpOgor
ICAgICAgICAoSlNDOjpKU1ZhbHVlOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6c3RyaWN0RXF1YWwpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpy
ZXF1aXJlT2JqZWN0Q29lcmNpYmxlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6c2FtZVZhbHVlKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0
U3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpwdXQpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OnRvVGhpcyk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6dG9Qcmlt
aXRpdmUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldFByaW1pdGl2ZU51bWJlciBj
b25zdCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6dG9OdW1iZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpKU0NlbGw6OnRvT2JqZWN0U2xvdyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6
ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKToKKyAgICAgICAg
KEpTQzo6SlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnRv
U3RyaW5nTmFtZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0UHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgIChKU0M6OkpTQ2VsbDo6Y3VzdG9tSGFzSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRFbnVt
ZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTQ2VsbDo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmlzRXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c2V0UHJvdG90
eXBlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRQcm90b3R5cGUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0NlbGxJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZTo6dm0gY29uc3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnRv
Qm9vbGVhbiBjb25zdCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6dG9PYmplY3QgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OnB1dElubGluZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0
ZTo6dm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVu
Y3Rpb246OmN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uQ2FsbCk6CisgICAgICAgICogcnVudGlt
ZS9KU0RhdGFWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChK
U0M6OkpTRGF0YVZpZXc6OnNldCk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OnNldEluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6SlNEYXRhVmlldzo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6ZGVm
aW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpkZWxldGVQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyk6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9K
U0RhdGFWaWV3UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0RGF0YSk6CisgICAgICAg
IChKU0M6OnNldERhdGEpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvR2V0dGVyQnVmZmVy
KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0dldHRlckJ5dGVMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpkYXRhVmlld1Byb3RvR2V0dGVyQnl0ZU9mZnNldCk6CisgICAgICAgICogcnVudGlt
ZS9KU0RhdGVNYXRoLmNwcDoKKyAgICAgICAgKEpTQzo6cGFyc2VEYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTRGF0ZU1hdGguaDoKKyAgICAgICAgKiBydW50aW1lL0pTRml4ZWRBcnJheS5jcHA6
CisgICAgICAgIChKU0M6OkpTRml4ZWRBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAg
KiBydW50aW1lL0pTRml4ZWRBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OmNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6cHJvdG90eXBlRm9yQ29uc3RydWN0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNGdW5jdGlvbjo6YWxsb2NhdGVBbmRJbml0aWFsaXplUmFyZURhdGEpOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjppbml0aWFsaXplUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpy
ZXRyaWV2ZUFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmFyZ3VtZW50c0dl
dHRlcik6CisgICAgICAgIChKU0M6OnJldHJpZXZlQ2FsbGVyRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpwdXQpOgor
ICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6c2V0RnVuY3Rpb25OYW1lKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cmVpZnlOYW1l
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cmVpZnlMYXp5UHJvcGVydHlJZk5lZWRlZCk6
CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnJlaWZ5TGF6eVByb3BlcnR5Rm9ySG9zdE9yQnVp
bHRpbklmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cmVpZnlMYXp5TGVuZ3Ro
SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpyZWlmeUxhenlOYW1lSWZOZWVk
ZWQpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpyZWlmeUxhenlCb3VuZE5hbWVJZk5lZWRl
ZCk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9K
U0Z1bmN0aW9uSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjplbnN1cmVSYXJl
RGF0YUFuZEFsbG9jYXRpb25Qcm9maWxlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Lmg6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlw
ZWRBcnJheVZpZXdGcm9tSXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RHZW5lcmlj
VHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6Y2FsbEdlbmVyaWNUeXBlZEFycmF5
Vmlldyk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVh
dGVXaXRoRmFzdFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZhbGlkYXRlUmFuZ2UpOgorICAgICAgICAoSlNDOjpK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0V2l0aFNwZWNpZmljVHlwZSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXQpOgorICAg
ICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dGhyb3dOZXV0ZXJl
ZFR5cGVkQXJyYXlUeXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dCk6CisgICAgICAgIChKU0M6OkpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMu
aDoKKyAgICAgICAgKEpTQzo6c3BlY2llc0NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OmFyZ3Vt
ZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNDb3B5V2l0aGluKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG9HZXR0ZXJGdW5jQnVmZmVyKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG9HZXR0ZXJGdW5jTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J5dGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpn
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKEpTQzo6Z2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTb3J0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlw
ZWRBcnJheVZpZXdQcml2YXRlRnVuY1N1YmFycmF5Q3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50OjpwdXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29uc29sZVByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6bWFrZUJvdW5kRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpoYXNPd25MZW5ndGhQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OmdldEdldHRlckJ5SWQpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXQpOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6YWRkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpn
bG9iYWxFeGVjKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmV4cG9zZURvbGxhclZN
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp0cnlJbnN0YWxsQXJyYXlTcGVjaWVzV2F0Y2hw
b2ludCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpkZWZhdWx0Q29sbGF0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OmFkZFZhcik6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZWdFeHBD
b25zdHJ1Y3RvciBjb25zdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpmdW5jdGlv
bkNvbnN0cnVjdG9yIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFycmF5
U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24gY29uc3QpOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6Z2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVudHJ5IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnNldEdsb2JhbE9iamVjdEF0RGVidWdnZXJFbnRy
eSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEVtcHR5QXJyYXkpOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3RBcnJheSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRl
eGVkKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmNhbGxGcmFtZUF0RGVidWdnZXJF
bnRyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpzZXRD
YWxsRnJhbWVBdERlYnVnZ2VyRW50cnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjU3Rh
dGU6Omdsb2JhbFRoaXNWYWx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmVuY29kZSk6CisgICAg
ICAgIChKU0M6OmRlY29kZSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFdmFsKToKKyAgICAg
ICAgKEpTQzo6Z2xvYmFsRnVuY1BhcnNlSW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY1Bh
cnNlRmxvYXQpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRGVjb2RlVVJJKToKKyAgICAgICAg
KEpTQzo6Z2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudCk6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNFbmNvZGVVUkkpOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9u
ZW50KToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0VzY2FwZSk6CisgICAgICAgIChKU0M6Omds
b2JhbEZ1bmNVbmVzY2FwZSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJv
cik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvckFyZ3VtZW50c0NhbGxl
ZUFuZENhbGxlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNNYWtlVHlwZUVycm9yKToKKyAg
ICAgICAgKEpTQzo6Z2xvYmFsRnVuY1Byb3RvR2V0dGVyKToKKyAgICAgICAgKEpTQzo6Z2xvYmFs
RnVuY1Byb3RvU2V0dGVyKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0hvc3RQcm9taXNlUmVq
ZWN0aW9uVHJhY2tlcik6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNCdWlsdGluTG9nKToKKyAg
ICAgICAgKEpTQzo6Z2xvYmFsRnVuY0ltcG9ydE1vZHVsZSk6CisgICAgICAgIChKU0M6Omdsb2Jh
bEZ1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZSk6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNPd25L
ZXlzKToKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0RhdGVUaW1lRm9ybWF0KToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OmdldFZNKToKKyAgICAgICAgKiBydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNJbW11dGFibGVCdXR0ZXJmbHk6OmNvcHlUb0FyZ3VtZW50
cyk6CisgICAgICAgICogcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNJbnRlcm5hbFByb21pc2UuY3BwOgorICAgICAgICAoSlNDOjpKU0ludGVybmFs
UHJvbWlzZTo6dGhlbik6CisgICAgICAgICogcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5jcHA6CisgICAgICAg
IChKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZSk6CisgICAgICAgIChK
U0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUpOgorICAgICAgICAoSlNDOjpK
U0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpyZWplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNMZXhpY2FsRW52
aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNMZXhpY2FsRW52aXJvbm1l
bnQ6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTTGV4aWNhbEVudmlyb25t
ZW50OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0xleGljYWxFbnZpcm9ubWVudDo6ZGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNM
b2NrSG9sZGVyKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKToKKyAgICAgICAgKEpTQzo6
SlNMb2NrOjp1bmxvY2spOgorICAgICAgICAoSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJv
cEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNNYXAuY3BwOgorICAgICAgICAoSlNDOjpKU01hcDo6dG9TdHJpbmdOYW1lKToKKyAgICAg
ICAgKEpTQzo6SlNNYXA6OmNsb25lKToKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmg6CisgICAg
ICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVy
YXRvcjo6Y3JlYXRlUGFpcik6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmg6Cisg
ICAgICAgICogcnVudGltZS9KU01pY3JvdGFzay5jcHA6CisgICAgICAgIChKU0M6OkpTTWljcm90
YXNrOjpydW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OnB1dCk6CisgICAgICAg
IChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBy
dW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxl
TG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6cHJpbnRhYmxlTW9kdWxlS2V5KToKKyAgICAgICAgKEpTQzo6SlNN
b2R1bGVMb2FkZXI6OmRlcGVuZGVuY3lLZXlzSWZFdmFsdWF0ZWQpOgorICAgICAgICAoSlNDOjpK
U01vZHVsZUxvYWRlcjo6cHJvdmlkZUZldGNoKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2Fk
ZXI6OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVy
Ojpsb2FkTW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmxpbmtBbmRFdmFs
dWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpyZXF1ZXN0SW1wb3J0
TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmltcG9ydE1vZHVsZSk6Cisg
ICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpyZXNvbHZlU3luYyk6CisgICAgICAgIChKU0M6
OkpTTW9kdWxlTG9hZGVyOjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6
OmZldGNoKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmNyZWF0ZUltcG9ydE1ldGFQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmV2YWx1YXRlKToKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmV2YWx1YXRlTm9uVmlydHVhbCk6CisgICAgICAg
IChKU0M6OkpTTW9kdWxlTG9hZGVyOjpnZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QpOgorICAgICAg
ICAoSlNDOjptb2R1bGVMb2FkZXJQYXJzZU1vZHVsZSk6CisgICAgICAgIChKU0M6Om1vZHVsZUxv
YWRlclJlcXVlc3RlZE1vZHVsZXMpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJNb2R1bGVE
ZWNsYXJhdGlvbkluc3RhbnRpYXRpb24pOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJSZXNv
bHZlKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUmVzb2x2ZVN5bmMpOgorICAgICAgICAo
SlNDOjptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlckdldE1v
ZHVsZU5hbWVzcGFjZU9iamVjdCk6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlckV2YWx1YXRl
KToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmg6CisgICAgICAgICogcnVudGlt
ZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24pOgorICAgICAgICAoSlNDOjpK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpT
Qzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgor
ICAgICAgICAoSlNDOjpKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6cHV0KToKKyAgICAgICAgKEpT
Qzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAg
ICogcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZVJlY29yZDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpKU01vZHVsZVJl
Y29yZDo6aW5zdGFudGlhdGVEZWNsYXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpKU01vZHVsZVJl
Y29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjp1bndyYXBCb3hl
ZFByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OmdhcCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
TmFtZUZvckZ1bmN0aW9uQ2FsbDo6dmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJpbmdp
Zmllcjo6U3RyaW5naWZpZXIpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6c3RyaW5naWZ5
KToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnRvSlNPTik6CisgICAgICAgIChKU0M6OlN0
cmluZ2lmaWVyOjp0b0pTT05JbXBsKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OmFwcGVu
ZFN0cmluZ2lmaWVkVmFsdWUpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjpI
b2xkZXIpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpXYWxrZXI6OldhbGtlcik6CisgICAgICAgIChKU0M6Oldh
bGtlcjo6Y2FsbFJldml2ZXIpOgorICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGspOgorICAgICAg
ICAoSlNDOjpKU09OUHJvdG9GdW5jUGFyc2UpOgorICAgICAgICAoSlNDOjpKU09OUHJvdG9GdW5j
U3RyaW5naWZ5KToKKyAgICAgICAgKEpTQzo6SlNPTlBhcnNlKToKKyAgICAgICAgKEpTQzo6SlNP
TlN0cmluZ2lmeSk6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0Lmg6CisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1l
cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0b1N0cmluZ05hbWUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y2FsY3VsYXRlZENsYXNzTmFtZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6b3JkaW5hcnlTZXRT
bG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXRJbmxpbmVTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2spOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRHZXR0ZXIp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0U2V0dGVyKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1By
b3BlcnR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1Byb3BlcnR5R2VuZXJp
YyBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpjYWxsVG9QcmltaXRpdmVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvcmRp
bmFyeVRvUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmF1bHRW
YWx1ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0b1ByaW1pdGl2ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcmltaXRpdmVOdW1iZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6aGFzSW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVm
YXVsdEhhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJpdmF0ZUZ1bmNJbnN0YW5j
ZU9mKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6dG9OdW1iZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dG9TdHJpbmcg
Y29uc3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dG9UaGlzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omlz
RXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWlmeUFsbFN0YXRpY1Byb3Bl
cnRpZXMpOgorICAgICAgICAoSlNDOjpwdXRJbmRleGVkRGVzY3JpcHRvcik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3RvdHlwZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25I
b2xlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRob3V0QXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleFNsb3dPckJleW9uZFZlY3Rvckxl
bmd0aCk6CisgICAgICAgIChKU0M6OmdldEN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uRm9yR2V0
dGVyU2V0dGVyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgIChKU0M6OnB1dERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleCk6CisgICAgICAgIChKU0M6OnZhbGlkYXRlQW5kQXBw
bHlQcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3du
Tm9uSW5kZXhQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25Qcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0TWV0aG9kKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4SW5saW5lKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldERp
cmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZVJhd09iamVjdCk6CisgICAgICAgIChKU0M6OkpT
RmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm90b3R5
cGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXQgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OmNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmdldFByb3BlcnR5U2xvdCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0Tm9uSW5kZXhQcm9wZXJ0
eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90SW5saW5l
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dElubGluZUZvckpTT2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6Omhhc093blByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eU1heUJlSW5kZXgpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNQcm9taXNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlOjpyZXNvbHZlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJvbWlzZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNl
RGVmZXJyZWQuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlRGVm
ZXJyZWREYXRhKToKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZSk6
CisgICAgICAgIChKU0M6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZURl
ZmVycmVkOjpyZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVj
dCk6CisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6CisgICAgICAgIChKU0M6OnByb3BlcnR5
TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5jcHA6CisgICAgICAg
IChKU0M6OkpTUHJveHk6OnRvU3RyaW5nTmFtZSk6CisgICAgICAgIChKU0M6OkpTUHJveHk6Omdl
dE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTUHJveHk6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpwdXQpOgorICAgICAgICAoSlND
OjpKU1Byb3h5OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6ZGVmaW5lT3du
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpkZWxldGVQcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpTUHJveHk6OmlzRXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6OkpTUHJveHk6
OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0UHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgIChKU0M6OkpTUHJveHk6OmdldEVudW1lcmFibGVMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU1Byb3h5OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNQ
cm94eTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU1Byb3h5Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6c2V0UHJvdG90eXBl
KToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0UHJvdG90eXBlKToKKyAgICAgICAgKiBydW50
aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAo
SlNDOjphYnN0cmFjdEFjY2Vzcyk6CisgICAgICAgIChKU0M6OmlzVW5zY29wYWJsZSk6CisgICAg
ICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNv
bHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKToKKyAgICAgICAgKEpTQzo6SlNTY29w
ZTo6YWJzdHJhY3RSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6dG9UaGlzKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpsZXhp
Y2FsR2xvYmFsT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpsZXhpY2Fs
R2xvYmFsT2JqZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2V0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6OnRvU3RyaW5nTmFtZSk6CisgICAgICAgIChKU0M6OkpT
U2V0OjpjbG9uZSk6CisgICAgICAgICogcnVudGltZS9KU1NldC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTZXRJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmNyZWF0
ZVBhaXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6ZXF1YWxTbG93Q2Fz
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVUb0F0b21T
dHJpbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlVG9F
eGlzdGluZ0F0b21TdHJpbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJl
c29sdmVSb3BlV2l0aEZ1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5n
OjpyZXNvbHZlUm9wZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6b3V0T2ZN
ZW1vcnkgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dG9QcmltaXRpdmUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0UHJpbWl0aXZlTnVtYmVyIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvTnVtYmVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNT
dHJpbmc6OnRvT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvVGhpcyk6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRv
SWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b0F0b21TdHJpbmcg
Y29uc3QpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dG9FeGlzdGluZ0F0b21TdHJpbmcgY29u
c3QpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dmFsdWUgY29uc3QpOgorICAgICAgICAoSlND
OjpKU1N0cmluZzo6dHJ5R2V0VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6
Z2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpqc1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6Ompz
U3RyaW5nV2l0aENhY2hlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmdldFN0cmluZ1Byb3Bl
cnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6dW5zYWZlVmlldyBjb25zdCk6
CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnVuc2FmZVZpZXcgY29uc3QpOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZzo6dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SlNWYWx1ZTo6dG9Cb29sZWFuIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1N0cmluZ09yTnVs
bCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvV1RGU3RyaW5nIGNvbnN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU1N0cmlu
Zzo6ZXF1YWwgY29uc3QpOgorICAgICAgICAoSlNDOjpqc01ha2VOb250cml2aWFsU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6cmVwZWF0Q2hhcmFjdGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTU3Ry
aW5nSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZ0l0ZXJhdG9yOjppdGVyYXRl
ZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmdJdGVyYXRvcjo6Y2xvbmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNTdHJpbmdKb2luZXIuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZ0pvaW5lcjo6am9pbmVk
TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmdKb2luZXI6OmpvaW4pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmdK
b2luZXI6OkpTU3RyaW5nSm9pbmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmdKb2luZXI6OmFw
cGVuZFdpdGhvdXRTaWRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSm9pbmVyOjph
cHBlbmQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
c3ltYm9sVGFibGVQdXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hw
b2ludFNldCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0SW52YWxpZGF0ZVdhdGNocG9p
bnRTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6Y3JlYXRlVGVtcGxh
dGVPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3Iu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbnN0cnVjdFR5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKiBydW50aW1l
L0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5
Vmlld1ByaXZhdGVGdW5jTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvRnVuY0NvcHlXaXRo
aW4pOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvRnVuY0luY2x1ZGVzKToKKyAg
ICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAg
IChKU0M6OnR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZik6CisgICAgICAgIChKU0M6OnR5
cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlWaWV3
UHJvdG9HZXR0ZXJGdW5jQnVmZmVyKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVZpZXdQcm90
b0dldHRlckZ1bmNMZW5ndGgpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvR2V0
dGVyRnVuY0J5dGVMZW5ndGgpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvR2V0
dGVyRnVuY0J5dGVPZmZzZXQpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvRnVu
Y1JldmVyc2UpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJy
YXlDcmVhdGUpOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5Vmlld1Byb3RvRnVuY1NsaWNlKToK
KyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwOgorICAgICAgICAoSlNDOjpjcmVh
dGVVaW50OFR5cGVkQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNXZWFrTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWFrTWFw
Ojp0b1N0cmluZ05hbWUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNXZWFrTWFwLmg6CisgICAgICAg
ICogcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYWtPYmpl
Y3RSZWY6OnRvU3RyaW5nTmFtZSk6CisgICAgICAgICogcnVudGltZS9KU1dlYWtPYmplY3RSZWYu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTV2Vha1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTV2Vh
a1NldDo6dG9TdHJpbmdOYW1lKToKKyAgICAgICAgKiBydW50aW1lL0pTV2Vha1NldC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkxpdGVyYWxQ
YXJzZXI8Q2hhclR5cGU+Ojp0cnlKU09OUFBhcnNlKToKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBh
cnNlcjxDaGFyVHlwZT46Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBh
cnNlcjxDaGFyVHlwZT46OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIu
aDoKKyAgICAgICAgKEpTQzo6TGl0ZXJhbFBhcnNlcjo6TGl0ZXJhbFBhcnNlcik6CisgICAgICAg
ICogcnVudGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6cHV0RW50cnkpOgorICAgICAgICAo
SlNDOjpsb29rdXBQdXQpOgorICAgICAgICAoSlNDOjpub25DYWNoaW5nU3RhdGljRnVuY3Rpb25H
ZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjYWxsTWFwKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFwKToKKyAgICAgICAgKiBy
dW50aW1lL01hcFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldE1hcCk6CisgICAgICAg
IChKU0M6Om1hcFByb3RvRnVuY0NsZWFyKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jRGVs
ZXRlKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpTQzo6bWFw
UHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2V0KToKKyAgICAgICAg
KEpTQzo6bWFwUHJvdG9GdW5jU2l6ZSk6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Ficyk6CisgICAgICAgIChKU0M6Om1hdGhQ
cm90b0Z1bmNBQ29zKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0FTaW4pOgorICAgICAg
ICAoSlNDOjptYXRoUHJvdG9GdW5jQVRhbik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNB
VGFuMik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDZWlsKToKKyAgICAgICAgKEpTQzo6
bWF0aFByb3RvRnVuY0NsejMyKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0Nvcyk6Cisg
ICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNFeHApOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9G
dW5jRmxvb3IpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jSHlwb3QpOgorICAgICAgICAo
SlNDOjptYXRoUHJvdG9GdW5jTG9nKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY01heCk6
CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNNaW4pOgorICAgICAgICAoSlNDOjptYXRoUHJv
dG9GdW5jUG93KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1JvdW5kKToKKyAgICAgICAg
KEpTQzo6bWF0aFByb3RvRnVuY1NpZ24pOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jU2lu
KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1NxcnQpOgorICAgICAgICAoSlNDOjptYXRo
UHJvdG9GdW5jVGFuKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0lNdWwpOgorICAgICAg
ICAoSlNDOjptYXRoUHJvdG9GdW5jQUNvc2gpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5j
QVNpbmgpOgorICAgICAgICAoSlNDOjptYXRoUHJvdG9GdW5jQVRhbmgpOgorICAgICAgICAoSlND
OjptYXRoUHJvdG9GdW5jQ2JydCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNDb3NoKToK
KyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0V4cG0xKToKKyAgICAgICAgKEpTQzo6bWF0aFBy
b3RvRnVuY0Zyb3VuZCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNMb2cxcCk6CisgICAg
ICAgIChKU0M6Om1hdGhQcm90b0Z1bmNMb2cxMCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1
bmNMb2cyKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY1NpbmgpOgorICAgICAgICAoSlND
OjptYXRoUHJvdG9GdW5jVGFuaCk6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNUcnVuYyk6
CisgICAgICAgICogcnVudGltZS9NaWNyb3Rhc2suaDoKKyAgICAgICAgKiBydW50aW1lL01vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGU6Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I8ZXJyb3JUeXBlPjo6Y29u
c3RydWN0TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9y
Q29uc3RydWN0b3I8ZXJyb3JUeXBlPjo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvTnVsbFNldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6Y2Fs
bGVySXNTdHJpY3QpOgorICAgICAgICAoSlNDOjpOdWxsU2V0dGVyRnVuY3Rpb25JbnRlcm5hbDo6
Y2FsbFJldHVyblVuZGVmaW5lZCk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdE51bWJlckNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKEpTQzo6Y2FsbE51bWJlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL051bWJl
ck9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdE51bWJlcik6CisgICAgICAgICog
cnVudGltZS9OdW1iZXJPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OnRocm93Vk1Ub1RoaXNOdW1iZXJFcnJvcik6CisgICAgICAg
IChKU0M6Om51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwpOgorICAgICAgICAoSlNDOjpudW1i
ZXJQcm90b0Z1bmNUb0ZpeGVkKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9QcmVj
aXNpb24pOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAg
IChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bnVt
YmVyUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgIChKU0M6OmV4dHJhY3RUb1N0cmluZ1JhZGl4
QXJndW1lbnQpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAg
ICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dE9iamVjdFdpdGhOZXdUYXJnZXQpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoT2JqZWN0
Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsT2JqZWN0Q29uc3RydWN0b3IpOgorICAg
ICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKEpT
Qzo6b2JqZWN0Q29uc3RydWN0b3JTZXRQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVj
dENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6b2Jq
ZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKToKKyAgICAgICAgKEpTQzo6
b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6b2Jq
ZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMpOgorICAgICAgICAoSlNDOjpvYmpl
Y3RDb25zdHJ1Y3RvcktleXMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckFzc2ln
bik6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yVmFsdWVzKToKKyAgICAgICAgKEpT
Qzo6dG9Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3Rv
ckRlZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6ZGVmaW5lUHJvcGVydGllcyk6CisgICAg
ICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVydGllcyk6CisgICAgICAgIChK
U0M6Om9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKToKKyAgICAgICAgKEpTQzo6c2V0SW50ZWdyaXR5
TGV2ZWwpOgorICAgICAgICAoSlNDOjp0ZXN0SW50ZWdyaXR5TGV2ZWwpOgorICAgICAgICAoSlND
OjpvYmplY3RDb25zdHJ1Y3RvclNlYWwpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3Rv
ckZyZWV6ZSk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yUHJldmVudEV4dGVuc2lv
bnMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcklzU2VhbGVkKToKKyAgICAgICAg
KEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc0Zyb3plbik6CisgICAgICAgIChKU0M6Om9iamVjdENv
bnN0cnVjdG9ySXNFeHRlbnNpYmxlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJ
cyk6CisgICAgICAgIChKU0M6Om93blByb3BlcnR5S2V5cyk6CisgICAgICAgICogcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RFbXB0eU9iamVjdCk6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdE9iamVjdCk6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVmFsdWVPZik6Cisg
ICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6b2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFBy
b3RvRnVuY0RlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmlu
ZVNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6Cisg
ICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6
Om9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6b2Jq
ZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1
bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6ZXF1YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnN0
cmljdEVxdWFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpqc0FkZFNsb3dDYXNlKToKKyAgICAg
ICAgKEpTQzo6anNUeXBlU3RyaW5nRm9yVmFsdWUpOgorICAgICAgICAoSlNDOjpqc0lzT2JqZWN0
VHlwZU9yTnVsbCk6CisgICAgICAgIChKU0M6Om5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKToKKyAg
ICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgor
ICAgICAgICAoSlNDOjpqc1N0cmluZ0Zyb21SZWdpc3RlckFycmF5KToKKyAgICAgICAgKEpTQzo6
YmlnSW50Q29tcGFyZSk6CisgICAgICAgIChKU0M6OnRvUHJpbWl0aXZlTnVtZXJpYyk6CisgICAg
ICAgIChKU0M6OmpzTGVzcyk6CisgICAgICAgIChKU0M6OmpzTGVzc0VxKToKKyAgICAgICAgKEpT
Qzo6anNBZGROb25OdW1iZXIpOgorICAgICAgICAoSlNDOjpqc0FkZCk6CisgICAgICAgIChKU0M6
OmpzU3ViKToKKyAgICAgICAgKEpTQzo6anNNdWwpOgorICAgICAgICAoSlNDOjpqc1N0cmluZ0Zy
b21Bcmd1bWVudHMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUGFyc2VJbnQuaDoKKyAg
ICAgICAgKEpTQzo6dG9TdHJpbmdWaWV3KToKKyAgICAgICAgKiBydW50aW1lL1Byb2dyYW1FeGVj
dXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OlByb2dyYW1FeGVj
dXRhYmxlKToKKyAgICAgICAgKEpTQzo6aGFzUmVzdHJpY3RlZEdsb2JhbFByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVz
KToKKyAgICAgICAgKiBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3I6OnNsb3dHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3I6OmVxdWFsVG8gY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9y
Lmg6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlTbG90OjpjdXN0b21HZXR0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6
OmN1c3RvbUFjY2Vzc29yR2V0dGVyIGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5
U2xvdC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlIGNvbnN0KToKKyAg
ICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjptYWtl
UmV2b2NhYmxlUHJveHkpOgorICAgICAgICAoSlNDOjpwcm94eVJldm9jYWJsZUNvbnN0cnVjdG9y
VGhyb3dFcnJvcik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFByb3h5T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6Y2FsbFByb3h5KToKKyAgICAgICAgKiBydW50aW1lL1Byb3h5Q29uc3RydWN0b3Iu
aDoKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHJv
eHlPYmplY3Q6OnRvU3RyaW5nTmFtZSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm94eUdldCk6CisgICAgICAgIChK
U0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6
OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6UHJv
eHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24pOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybVB1
dCk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpQcm94
eU9iamVjdDo6cHV0QnlJbmRleENvbW1vbik6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0Ojpw
dXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5Q2FsbCk6CisgICAgICAgIChK
U0M6OnBlcmZvcm1Qcm94eUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0Ojpw
ZXJmb3JtRGVsZXRlKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6Cisg
ICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtUHJldmVudEV4dGVuc2lvbnMpOgorICAg
ICAgICAoSlNDOjpQcm94eU9iamVjdDo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlND
OjpQcm94eU9iamVjdDo6cGVyZm9ybUlzRXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6OlByb3h5
T2JqZWN0Ojppc0V4dGVuc2libGUpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9y
bURlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmRlZmluZU93
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
UHJveHlPYmplY3Q6OnNldFByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0Ojpw
ZXJmb3JtR2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmdldFByb3Rv
dHlwZSk6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdENvbnN0cnVjdCk6CisgICAgICAgIChKU0M6
OnJlZmxlY3RPYmplY3REZWZpbmVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmpl
Y3RHZXQpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdEdldFByb3RvdHlwZU9mKToKKyAgICAg
ICAgKEpTQzo6cmVmbGVjdE9iamVjdElzRXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6OnJlZmxl
Y3RPYmplY3RPd25LZXlzKToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdFByZXZlbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdFNldCk6CisgICAgICAgIChKU0M6
OnJlZmxlY3RPYmplY3RTZXRQcm90b3R5cGVPZik6CisgICAgICAgICogcnVudGltZS9SZWdFeHAu
aDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHA6CisgICAgICAgIChK
U0M6OlJlZ0V4cENhY2hlZFJlc3VsdDo6bGFzdFJlc3VsdCk6CisgICAgICAgIChKU0M6OlJlZ0V4
cENhY2hlZFJlc3VsdDo6bGVmdENvbnRleHQpOgorICAgICAgICAoSlNDOjpSZWdFeHBDYWNoZWRS
ZXN1bHQ6OnJpZ2h0Q29udGV4dCk6CisgICAgICAgIChKU0M6OlJlZ0V4cENhY2hlZFJlc3VsdDo6
c2V0SW5wdXQpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0Lmg6CisgICAg
ICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4
cENvbnN0cnVjdG9yRG9sbGFyKToKKyAgICAgICAgKEpTQzo6cmVnRXhwQ29uc3RydWN0b3JJbnB1
dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKToKKyAgICAgICAg
KEpTQzo6cmVnRXhwQ29uc3RydWN0b3JMYXN0TWF0Y2gpOgorICAgICAgICAoSlNDOjpyZWdFeHBD
b25zdHJ1Y3Rvckxhc3RQYXJlbik6CisgICAgICAgIChKU0M6OnJlZ0V4cENvbnN0cnVjdG9yTGVm
dENvbnRleHQpOgorICAgICAgICAoSlNDOjpyZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dCk6
CisgICAgICAgIChKU0M6OnNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQpOgorICAgICAgICAoSlND
OjpzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZSk6CisgICAgICAgIChKU0M6OmdldFJlZ0V4
cFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OnRvRmxhZ3MpOgorICAgICAgICAoSlNDOjpyZWdF
eHBDcmVhdGUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RSZWdFeHApOgorICAgICAgICAoSlND
Ojplc1NwZWNSZWdFeHBDcmVhdGUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoUmVnRXhw
Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpjYWxsUmVnRXhwQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6aXNSZWdF
eHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OlJlZ0V4cEdsb2JhbERhdGE6OmdldEJhY2tyZWYpOgorICAgICAgICAoSlNDOjpSZWdFeHBH
bG9iYWxEYXRhOjpnZXRMYXN0UGFyZW4pOgorICAgICAgICAoSlNDOjpSZWdFeHBHbG9iYWxEYXRh
OjpnZXRMZWZ0Q29udGV4dCk6CisgICAgICAgIChKU0M6OlJlZ0V4cEdsb2JhbERhdGE6OmdldFJp
Z2h0Q29udGV4dCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmg6CisgICAg
ICAgICogcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpS
ZWdFeHBHbG9iYWxEYXRhOjpzZXRJbnB1dCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6bWF0Y2hJbmxpbmUpOgorICAgICAgICAqIHJ1
bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OmNyZWF0ZVJlZ0V4cE1h
dGNoZXNBcnJheSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6
OlJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmpl
Y3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9i
amVjdDo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6cmVnRXhwT2JqZWN0U2V0TGFzdEluZGV4U3Ry
aWN0KToKKyAgICAgICAgKEpTQzo6cmVnRXhwT2JqZWN0U2V0TGFzdEluZGV4Tm9uU3RyaWN0KToK
KyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpSZWdFeHBP
YmplY3Q6OmV4ZWMpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6Om1hdGNoKToKKyAgICAg
ICAgKEpTQzo6UmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbCk6CisgICAgICAgICogcnVudGltZS9S
ZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6Z2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4QXNVbnNpZ25lZCk6CisgICAg
ICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6ZXhlY0lubGluZSk6CisgICAgICAgIChKU0M6OlJlZ0V4
cE9iamVjdDo6bWF0Y2hJbmxpbmUpOgorICAgICAgICAoSlNDOjpjb2xsZWN0TWF0Y2hlcyk6Cisg
ICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdF
eHBQcm90b0Z1bmNUZXN0RmFzdCk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY0V4ZWMp
OgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNNYXRjaEZhc3QpOgorICAgICAgICAoSlND
OjpyZWdFeHBQcm90b0Z1bmNDb21waWxlKToKKyAgICAgICAgKEpTQzo6ZmxhZ3NTdHJpbmcpOgor
ICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OnJl
Z0V4cFByb3RvR2V0dGVyR2xvYmFsKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJJ
Z25vcmVDYXNlKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJNdWx0aWxpbmUpOgor
ICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0dldHRlckRvdEFsbCk6CisgICAgICAgIChKU0M6OnJl
Z0V4cFByb3RvR2V0dGVyU3RpY2t5KToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJV
bmljb2RlKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9HZXR0ZXJGbGFncyk6CisgICAgICAg
IChKU0M6OnJlZ0V4cFByb3RvR2V0dGVyU291cmNlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpy
ZWdFeHBQcm90b0dldHRlclNvdXJjZSk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1Nl
YXJjaEZhc3QpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNTcGxpdEZhc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OkZyYW1l
V2Fsa2VyOjpGcmFtZVdhbGtlcik6CisgICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjppc1ZhbGlk
RnJhbWVQb2ludGVyKToKKyAgICAgICAgKEpTQzo6Q0ZyYW1lV2Fsa2VyOjpDRnJhbWVXYWxrZXIp
OgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtZUZyb21DYWxsZWUpOgorICAg
ICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVk
QXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmcpOgorICAgICAgICAoSlNDOjpTY29wZWRBcmd1bWVu
dHM6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMu
aDoKKyAgICAgICAgKiBydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpTY3Jp
cHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgIChKU0M6OlNj
cmlwdEV4ZWN1dGFibGU6OmNyZWF0ZVRlbXBsYXRlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL1NldENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Y2FsbFNldCk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFNldCk6
CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRT
ZXQpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNBZGQpOgorICAgICAgICAoSlNDOjpzZXRQ
cm90b0Z1bmNDbGVhcik6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0RlbGV0ZSk6CisgICAg
ICAgIChKU0M6OnNldFByb3RvRnVuY0hhcyk6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY1Np
emUpOgorICAgICAgICAqIHJ1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoSlNDOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUyk6CisgICAgICAg
ICogcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oOgorICAgICAgICAqIHJ1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHA6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnB1dEVudHJ5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0
RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6cHV0KToKKyAgICAgICAg
KiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmlj
dEV2YWxBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaWN0RXZhbEFjdGl2YXRpb246
OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9u
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OnN0cmluZ0Zyb21DaGFyQ29kZSk6CisgICAgICAgIChKU0M6OnN0cmluZ0Zyb21Db2RlUG9p
bnQpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OmNhbGxTdHJpbmdD
b25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OnB1
dCk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OmlzU3RyaW5nT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5n
V2l0aFJldXNlKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3Vic3RpdHV0ZUJhY2tyZWZl
cmVuY2VzU2xvdyk6CisgICAgICAgIChKU0M6OmpzU3BsaWNlU3Vic3RyaW5ncyk6CisgICAgICAg
IChKU0M6OmpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKToKKyAgICAgICAgKEpTQzo6
cmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2gpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdF
eHBTZWFyY2gpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNl
UmVnRXhwRW1wdHlTdHIpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNS
ZXBsYWNlUmVnRXhwU3RyaW5nKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZVVzaW5nU3RyaW5nU2Vh
cmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jUmVwZWF0Q2hhcmFjdGVyKToKKyAg
ICAgICAgKEpTQzo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1JlcGxh
Y2VVc2luZ1JlZ0V4cCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2lu
Z1N0cmluZ1NlYXJjaCk6CisgICAgICAgIChKU0M6Om9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1Jl
cGxhY2VHZW5lcmljKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNDaGFyQXQpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ29k
ZVBvaW50QXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJbmRleE9mKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OnNwbGl0U3RyaW5nQnlPbmVDaGFyYWN0
ZXJJbXBsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3BsaXRGYXN0KToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3Vic3RySW1wbCk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvTG93
ZXJDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6
dG9Mb2NhbGVDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb2NhbGVVcHBl
ckNhc2UpOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jVHJpbSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RyaW1TdGFydCk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RyaW1FbmQpOgorICAgICAgICAoSlNDOjpz
dHJpbmdQcm90b0Z1bmNTdGFydHNXaXRoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
RW5kc1dpdGgpOgorICAgICAgICAoSlNDOjpzdHJpbmdJbmNsdWRlc0ltcGwpOgorICAgICAgICAo
SlNDOjpzdHJpbmdQcm90b0Z1bmNJbmNsdWRlcyk6CisgICAgICAgIChKU0M6OmJ1aWx0aW5TdHJp
bmdJbmNsdWRlc0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jSXRlcmF0
b3IpOgorICAgICAgICAoSlNDOjpub3JtYWxpemUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNOb3JtYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg6Cisg
ICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OnN0cmluZ1NsaWNlKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdSZWN1cnNpb25DaGVja2VyOjp0aHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcik6CisgICAgICAgIChKU0M6OlN0cmluZ1JlY3Vyc2lvbkNoZWNrZXI6OmVtcHR5
U3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaDoKKyAg
ICAgICAgKEpTQzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVyZm9ybUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcik6
CisgICAgICAgIChKU0M6OlN0cmluZ1JlY3Vyc2lvbkNoZWNrZXI6On5TdHJpbmdSZWN1cnNpb25D
aGVja2VyKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlw
ZUNoYWluIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc1ZhbGlkIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbC5jcHA6CisgICAg
ICAgIChKU0M6OlN5bWJvbDo6dG9QcmltaXRpdmUgY29uc3QpOgorICAgICAgICAoSlNDOjpTeW1i
b2w6OmdldFByaW1pdGl2ZU51bWJlciBjb25zdCk6CisgICAgICAgIChKU0M6OlN5bWJvbDo6dG9P
YmplY3QgY29uc3QpOgorICAgICAgICAoSlNDOjpTeW1ib2w6OnRvTnVtYmVyIGNvbnN0KToKKyAg
ICAgICAgKiBydW50aW1lL1N5bWJvbC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjYWxsU3ltYm9sKToKKyAgICAgICAgKEpTQzo6c3lt
Ym9sQ29uc3RydWN0b3JGb3IpOgorICAgICAgICAoSlNDOjpzeW1ib2xDb25zdHJ1Y3RvcktleUZv
cik6CisgICAgICAgICogcnVudGltZS9TeW1ib2xPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpT
eW1ib2xPYmplY3Q6OnRvU3RyaW5nTmFtZSk6CisgICAgICAgIChKU0M6OlN5bWJvbE9iamVjdDo6
ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbE9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3ltYm9sUHJv
dG9HZXR0ZXJEZXNjcmlwdGlvbik6CisgICAgICAgIChKU0M6OnN5bWJvbFByb3RvRnVuY1RvU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6c3ltYm9sUHJvdG9GdW5jVmFsdWVPZik6CisgICAgICAgICog
cnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwOgorICAgICAgICAoSlNDOjpmYWlsTmV4dE5ld0Nv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6Om51bWJlck9mREZHQ29tcGlsZXMpOgorICAgICAgICAo
SlNDOjpzZXROZXZlcklubGluZSk6CisgICAgICAgIChKU0M6OnNldE5ldmVyT3B0aW1pemUpOgor
ICAgICAgICAoSlNDOjpzZXRDYW5ub3RVc2VPU1JFeGl0RnV6emluZyk6CisgICAgICAgIChKU0M6
Om9wdGltaXplTmV4dEludm9jYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVGVzdFJ1bm5lclV0
aWxzLmg6CisgICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6
VGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVGhyb3dTY29w
ZS5oOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAg
IChKU0M6OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1RvTmF0aXZlRnJvbVZh
bHVlLmg6CisgICAgICAgIChKU0M6OnRvTmF0aXZlRnJvbVZhbHVlKToKKyAgICAgICAgKiBydW50
aW1lL1R5cGVFcnJvci5oOgorICAgICAgICAoSlNDOjp0eXBlRXJyb3IpOgorICAgICAgICAqIHJ1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoK
KyAgICAgICAgKEpTQzo6Vk06OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OmNh
bGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpRdWV1ZWRUYXNrOjpy
dW4pOgorICAgICAgICAoSlNDOjpWTTo6dm1FbnRyeUdsb2JhbE9iamVjdCBjb25zdCk6CisgICAg
ICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6YWRkcmVzc09mQ2FsbEZyYW1l
Rm9yQ2F0Y2gpOgorICAgICAgICAoSlNDOjpWTTo6aGFuZGxlVHJhcHMpOgorICAgICAgICAqIHJ1
bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmludmFsaWRhdGVDb2Rl
QmxvY2tzT25TdGFjayk6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OmhhbmRsZVRyYXBzKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNVHJhcHMuaDoKKyAgICAgICAgKEpTQzo6Vk1UcmFwczo6aW52YWxp
ZGF0ZUNvZGVCbG9ja3NPblN0YWNrKToKKyAgICAgICAgKiBydW50aW1lL1dhdGNoZG9nLmNwcDoK
KyAgICAgICAgKEpTQzo6V2F0Y2hkb2c6OnNob3VsZFRlcm1pbmF0ZSk6CisgICAgICAgICogcnVu
dGltZS9XYXRjaGRvZy5oOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Y2FsbFdlYWtNYXApOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RX
ZWFrTWFwKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpnZXRXZWFrTWFwKToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha01hcERlbGV0
ZSk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtNYXBHZXQpOgorICAgICAgICAoSlNDOjpw
cm90b0Z1bmNXZWFrTWFwSGFzKToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha01hcFNldCk6
CisgICAgICAgICogcnVudGltZS9XZWFrT2JqZWN0UmVmQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpjYWxsV2Vha1JlZik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdlYWtSZWYpOgor
ICAgICAgICAqIHJ1bnRpbWUvV2Vha09iamVjdFJlZlByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OmdldFdlYWtSZWYpOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrUmVmRGVyZWYpOgor
ICAgICAgICAqIHJ1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Y2FsbFdlYWtTZXQpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXZWFrU2V0KToKKyAgICAgICAg
KiBydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRXZWFrU2V0
KToKKyAgICAgICAgKEpTQzo6cHJvdG9GdW5jV2Vha1NldERlbGV0ZSk6CisgICAgICAgIChKU0M6
OnByb3RvRnVuY1dlYWtTZXRIYXMpOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrU2V0QWRk
KToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAgICAgKEpTQzo6SlNEb2xs
YXJWTUNhbGxGcmFtZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTUNhbGxGcmFt
ZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpJbXB1cmVHZXR0ZXI6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkN1c3RvbUdldHRlcjo6Z2V0T3duUHJvcGVydHlT
bG90KToKKyAgICAgICAgKEpTQzo6Q3VzdG9tR2V0dGVyOjpjdXN0b21HZXR0ZXIpOgorICAgICAg
ICAoSlNDOjpDdXN0b21HZXR0ZXI6OmN1c3RvbUdldHRlckFjZXNzb3IpOgorICAgICAgICAoSlND
OjpSdW50aW1lQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpwdXQpOgorICAg
ICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
UnVudGltZUFycmF5OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJh
eTo6UnVudGltZUFycmF5KToKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpsZW5ndGhHZXR0
ZXIpOgorICAgICAgICAoSlNDOjp0ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAo
SlNDOjp0ZXN0U3RhdGljQWNjZXNzb3JQdXR0ZXIpOgorICAgICAgICAoSlNDOjpTdGF0aWNDdXN0
b21BY2Nlc3Nvcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6RE9NSklUR2V0
dGVyOjpET01KSVRBdHRyaWJ1dGU6OnNsb3dDYWxsKToKKyAgICAgICAgKEpTQzo6RE9NSklUR2V0
dGVyOjpET01KSVRBdHRyaWJ1dGU6OmNhbGxET01HZXR0ZXIpOgorICAgICAgICAoSlNDOjpET01K
SVRHZXR0ZXI6OmN1c3RvbUdldHRlcik6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlckNvbXBs
ZXg6OkRPTUpJVEF0dHJpYnV0ZTo6c2xvd0NhbGwpOgorICAgICAgICAoSlNDOjpET01KSVRHZXR0
ZXJDb21wbGV4OjpET01KSVRBdHRyaWJ1dGU6OmNhbGxET01HZXR0ZXIpOgorICAgICAgICAoSlND
OjpET01KSVRHZXR0ZXJDb21wbGV4OjpjdXN0b21HZXR0ZXIpOgorICAgICAgICAoSlNDOjpET01K
SVRGdW5jdGlvbk9iamVjdDo6ZnVuY3Rpb25XaXRoVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6
RE9NSklURnVuY3Rpb25PYmplY3Q6OmZ1bmN0aW9uV2l0aG91dFR5cGVDaGVjayk6CisgICAgICAg
IChKU0M6OkRPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OmZ1bmN0aW9uV2l0aFR5cGVDaGVjayk6
CisgICAgICAgIChKU0M6OkRPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6OmZ1bmN0aW9uV2l0aG91
dFR5cGVDaGVjayk6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlckJhc2VKU09iamVjdDo6RE9N
SklUQXR0cmlidXRlOjpzbG93Q2FsbCk6CisgICAgICAgIChKU0M6OkRPTUpJVEdldHRlckJhc2VK
U09iamVjdDo6RE9NSklUQXR0cmlidXRlOjpjYWxsRE9NR2V0dGVyKToKKyAgICAgICAgKEpTQzo6
RE9NSklUR2V0dGVyQmFzZUpTT2JqZWN0OjpjdXN0b21HZXR0ZXIpOgorICAgICAgICAoSlNDOjpj
dXN0b21HZXRBY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OmN1c3RvbUdldFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6Y3VzdG9tU2V0QWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpjdXN0b21TZXRWYWx1
ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckFkZEJ5dGVzKToK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25CcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rp
b25DcHVDbGZsdXNoKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25HQyk6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uRWRlbkdDKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DYWxsRnJhbWUpOgorICAg
ICAgICAoSlNDOjpmdW5jdGlvbkNvZGVCbG9ja0ZvckZyYW1lKToKKyAgICAgICAgKEpTQzo6Y29k
ZUJsb2NrRnJvbUFyZyk6CisgICAgICAgIChKU0M6OmRvUHJpbnQpOgorICAgICAgICAoSlNDOjpm
dW5jdGlvbkR1bXBDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkR1bXBTdGFjayk6
CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlUnVudGltZUFycmF5KToKKyAgICAgICAgKEpT
Qzo6ZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0
aW9uQ3JlYXRlQnVpbHRpbik6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR2V0UHJpdmF0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmVhdGVFbGVtZW50KToKKyAgICAgICAgKEpT
Qzo6ZnVuY3Rpb25HZXRIaWRkZW5WYWx1ZSk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uU2V0SGlk
ZGVuVmFsdWUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvblNoYWRvd0NoaWNrZW5GdW5jdGlvbnNP
blN0YWNrKToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25GaW5kVHlwZUZvckV4cHJlc3Npb24pOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvblJldHVyblR5cGVGb3IpOgorICAgICAgICAoSlNDOjpmdW5j
dGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQmFzaWNC
bG9ja0V4ZWN1dGlvbkNvdW50KToKKyAgICAgICAgKEpTQzo6Y2hhbmdlRGVidWdnZXJNb2RlV2hl
bklkbGUpOgorICAgICAgICAoSlNDOjpmdW5jdGlvbkVuYWJsZURlYnVnZ2VyTW9kZVdoZW5JZGxl
KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25EaXNhYmxlRGVidWdnZXJNb2RlV2hlbklkbGUpOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvbkdldEdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OmZ1
bmN0aW9uTG9hZEdldHRlckZyb21HZXR0ZXJTZXR0ZXIpOgorICAgICAgICAqIHRvb2xzL1ZNSW5z
cGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmN1cnJlbnRUaHJlYWRPd25z
SlNMb2NrKToKKyAgICAgICAgKEpTQzo6ZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2spOgor
ICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6Z2MpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rv
cjo6ZWRlbkdDKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OmlzVmFsaWRDb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6Y29kZUJsb2NrRm9yRnJhbWUpOgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6ZHVtcENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OlZNSW5z
cGVjdG9yOjpkdW1wU3RhY2spOgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmg6CisgICAg
ICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKiB3YXNtL1dhc21F
bWJlZGRlci5oOgorICAgICAgICAqIHdhc20vV2FzbU9wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpvcGVyYXRpb25UaHJvd0JhZEk2NCk6CisgICAgICAgICogd2FzbS9XYXNtT3Bl
cmF0aW9ucy5oOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjphbGxvY2F0ZVJlc3VsdHNBcnJheSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5LmNwcDoKKyAgICAgICAgKEpTQzo6cmVqZWN0KToKKyAgICAgICAgKEpTQzo6d2ViQXNz
ZW1ibHlNb2R1bGVWYWxpZGF0ZUFzeW5jSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjp3ZWJBc3Nl
bWJseUNvbXBpbGVGdW5jKToKKyAgICAgICAgKEpTQzo6cmVzb2x2ZSk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHk6OndlYkFzc2VtYmx5TW9kdWxlVmFsaWRhdGVBc3luYyk6CisgICAgICAg
IChKU0M6Omluc3RhbnRpYXRlKToKKyAgICAgICAgKEpTQzo6Y29tcGlsZUFuZEluc3RhbnRpYXRl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseTo6aW5zdGFudGlhdGUpOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseU1vZHVsZUluc3RhbnRpbmF0ZUFzeW5jSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5Ojp3ZWJBc3NlbWJseU1vZHVsZUluc3RhbnRpbmF0ZUFzeW5j
KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlJbnN0YW50aWF0ZUZ1bmMpOgorICAgICAgICAo
SlNDOjp3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5
Q29tcGlsZVN0cmVhbWluZ0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlJbnN0
YW50aWF0ZVN0cmVhbWluZ0ludGVybmFsKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1i
bHkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpjcmVhdGVKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKToKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OnRvTm9uV3JhcHBpbmdVaW50MzIpOgor
ICAgICAgICAoSlNDOjpnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlU291cmNlQnVmZmVyRnJvbVZhbHVlKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
OjpmaW5hbGl6ZUNyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNl
OjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6Cisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
SlNXZWJBc3NlbWJseUxpbmtFcnJvcik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TGlua0Vycm9yLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6Z3Jvdyk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5Lmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yik6CisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlSlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvcik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6aGFuZGxlQmFkSTY0VXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
d2FzbVRvSlMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9KU0V4Y2VwdGlvbik6CisgICAg
ICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlD
b21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2Vi
QXNzZW1ibHlDb21waWxlRXJyb3IpOgorICAgICAgICAoSlNDOjpjYWxsSlNXZWJBc3NlbWJseUNv
bXBpbGVFcnJvcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6Y2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6Y2FsbEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OndlYkFz
c2VtYmx5SW5zdGFuY2VQcm90b0Z1bmNFeHBvcnRzKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5TGlua0Vycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKToKKyAgICAgICAgKEpTQzo6Y2FsbEpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAg
ICAgICAoSlNDOjpjYWxsSlNXZWJBc3NlbWJseU1lbW9yeSk6CisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldE1lbW9yeSk6
CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jR3Jvdyk6CisgICAgICAg
IChKU0M6OndlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKToKKyAgICAgICAgKiB3YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp3ZWJB
c3NlbWJseU1vZHVsZUN1c3RvbVNlY3Rpb25zKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlN
b2R1bGVJbXBvcnRzKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlNb2R1bGVFeHBvcnRzKToK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAgICAgIChK
U0M6OmNhbGxKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlTW9kdWxlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToK
KyAgICAgICAgKEpTQzo6ZGF0YVNlZ21lbnRGYWlsKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJv
ckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvcik6CisgICAgICAgIChKU0M6OmNhbGxKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZSk6CisgICAgICAgIChKU0M6
OmNhbGxKU1dlYkFzc2VtYmx5VGFibGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlU
YWJsZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmdldFRhYmxlKToKKyAgICAgICAgKEpT
Qzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY0xlbmd0aCk6CisgICAgICAgIChKU0M6OndlYkFz
c2VtYmx5VGFibGVQcm90b0Z1bmNHcm93KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJs
ZVByb3RvRnVuY0dldCk6CisgICAgICAgIChKU0M6OndlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNT
ZXQpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24pOgorICAgICAgICAq
IHlhcnIvWWFyckVycm9yQ29kZS5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OmVycm9yVG9UaHJv
dyk6CisgICAgICAgICogeWFyci9ZYXJyRXJyb3JDb2RlLmg6CisKKzIwMTktMTAtMTYgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBhc3NlcnQg
aW4gV2FzbTo6UGxhbjo6ZmFpbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzA1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgTGFtLgorCisg
ICAgICAgIFNpbmNlIHdlIGNoYW5nZWQgaG93IFdhc206OlBsYW4gaW50ZXJhY3RzIHdpdGggdGhl
IHN0cmVhbWluZworICAgICAgICBwYXJzZXIgaXQncyBwb3NzaWJsZSBmb3IgdGhlIHN0cmVhbWlu
ZyBwYXJzZXIgdG8gY2FsbCBmYWlsIHdpdGggbm8KKyAgICAgICAgZXJyb3IgbWVzc2FnZSAoYmVj
YXVzZSB0aGUgY29ycmVzcG9uZGluZyBXYXNtOjpQbGFuIGFscmVhZHkKKyAgICAgICAgZmFpbGVk
KS4gVGhpcyBwYXRjaCBtb3ZlcyBhbiBlcnJvbmVvdXMgYXNzZXJ0IHNvIGl0IG5vIGxvbmdlcgor
ICAgICAgICB0cmlwcyB3aGVuIHRoaXMgaGFwcGVucy4KKworICAgICAgICAqIHdhc20vV2FzbVBs
YW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpmYWlsKToKKworMjAxOS0xMC0xNiAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5IGluIEFpciBPMCBzaG91bGQgb25seSBydW4gd2hlbiB2YWxpZGF0aW9uIGlzIGVu
YWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIEkgcmVz
dWVkIHRoZSB2YWxpZGF0ZUdyYXBoIGFuZCB2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2Ugb3B0aW9u
cworICAgICAgICBiZWNhdXNlIGFkZGluZyBhIG5ldyBvcHRpb24gYW5kIHRocmVhZGluZyBpdCB0
aHJvdWdoIGFsbCBvdXIKKyAgICAgICAgdGVzdGluZyBpbmZyYXN0cnVjdHVyZSBkaWRuJ3Qgc2Vl
bSB3b3J0aHdoaWxlIGZvciB0aGlzLgorCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlUmVn
aXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpHZW5lcmF0ZUFuZEFsbG9jYXRlUmVnaXN0ZXJzOjpjaGVja0NvbnNpc3RlbmN5KToKKwogMjAx
OS0xMC0xNiAgUGF1bG8gTWF0b3MgIDxwbWF0b3NAaWdhbGlhLmNvbT4gYW5kIENhaW8gTGltYSAg
PHRpY2Fpb2xpbWFAZ21haWwuY29tPgogCiAgICAgICAgIEludmFsaWQgaW5zdHJ1Y3Rpb24gZ2Vu
ZXJhdGVkIGZvciBBUk1fVEhVTUIyIGluIGxsaW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM5MThlOTM4NmIz
MGEyOTY0NjljM2ZjMTcxZWI0MzZjZjBiMWMzNi4uYWFjMzA0NDYzNWM0NzEyOWQwZWIzZWViNjdi
OWUzOGM0NDgxZThiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3MjkgQEAKKzIwMTktMTAtMTYg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBUaHJl
YWQgSlNHbG9iYWxPYmplY3QqIGluc3RlYWQgb2YgRXhlY1N0YXRlKgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMzkyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisK
KyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKToK
KyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5oOgorICAgICAgICAq
IE1vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmlkbDoKKyAgICAgICAgKiBNb2R1bGVz
L2FwcGxlcGF5L1BheW1lbnRNZXJjaGFudFNlc3Npb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL2Fw
cGxlcGF5L2NvY29hL1BheW1lbnRNZXJjaGFudFNlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Npb246OmZyb21KUyk6CisgICAgICAgICogTW9kdWxl
cy9hcHBsZXBheS9wYXltZW50cmVxdWVzdC9BcHBsZVBheVBheW1lbnRIYW5kbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxlUGF5UGF5bWVudEhhbmRsZXI6OmNvbXB1dGVUb3RhbEFuZExp
bmVJdGVtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTRGljdGlvbmFyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsZVBheVBheW1lbnRIYW5kbGVyOjpkaWRBdXRob3JpemVQYXltZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxlUGF5UGF5bWVudEhhbmRsZXI6OmRpZFNlbGVjdFBh
eW1lbnRNZXRob2QpOgorICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2Fy
ZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6Z2V0VHlwZSk6CisgICAgICAgICogTW9kdWxlcy9lbmNy
eXB0ZWRtZWRpYS9NZWRpYUtleVN0YXR1c01hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUtleVN0YXR1c01hcDo6Z2V0KToKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01l
ZGlhS2V5U3RhdHVzTWFwLmg6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRp
YUtleVN0YXR1c01hcC5pZGw6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdh
Y3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVNl
c3Npb25DbGVhcktleTo6dXBkYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9k
eS5pZGw6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHlPd25lcjo6cmVhZGFibGVTdHJlYW0pOgorICAgICAgICAo
V2ViQ29yZTo6RmV0Y2hCb2R5T3duZXI6OmNyZWF0ZVJlYWRhYmxlU3RyZWFtKToKKyAgICAgICAg
KiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmg6CisgICAgICAgICogTW9kdWxlcy9mZXRj
aC9GZXRjaFJlc3BvbnNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6Y29udGludWVQcmltYXJ5S2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3I6OmRlbGV0ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCRmFjdG9yeTo6Y21wKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGw6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXg6OmRvT3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3BlbkN1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6ZG9PcGVuS2V5Q3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkluZGV4Ojpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6ZG9Db3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4Ojpkb0dldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0S2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpkb0dldEtleSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJJbmRleDo6ZG9HZXRBbGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmdldEFs
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6ZG9HZXRBbGxLZXlzKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4OjpnZXRBbGxLZXlzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4Lmlk
bDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlSYW5nZTo6b25seSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlS
YW5nZTo6bG93ZXJCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlSYW5nZTo6dXBwZXJC
b3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlSYW5nZTo6Ym91bmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UmFuZ2U6OmluY2x1ZGVzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlSYW5nZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJh
bmdlLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZG9PcGVuQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpkb09wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmU6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Z2V0S2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphZGQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6cHV0Rm9yQ3Vyc29yVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRl
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvRGVsZXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpk
b0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkb0dldEFsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Z2V0QWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpkb0dldEFsbEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OmdldEFsbEtleXMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZG9SZXF1ZXN0T3BlbkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldEFsbE9iamVjdFN0b3Jl
UmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldEFs
bEluZGV4UmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVz
dEdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdl
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0S2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0SW5kZXhSZWNvcmQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdERlbGV0ZVJlY29yZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbkNvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJpYWxpemF0aW9uQ29udGV4dDo6ZXhlY1N0YXRl
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbkNv
bnRleHQuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNlcnRpZmljYXRlVHlwZUZyb21BbGdvcml0aG1JZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjpnZW5lcmF0ZUNl
cnRpZmljYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5p
ZGw6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50TWV0aG9kQ2hhbmdl
RXZlbnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrQW5kQ2Fub25pY2FsaXplRGV0YWlscyk6Cisg
ICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVzcG9uc2UuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW06CisgICAg
ICAgIChXZWJDb3JlOjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZW5zdXJlUmVwbGFjZW1l
bnRTY3JpcHRJbmplY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnRpbWVkTWV0YURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6YWNjZXNzTG9nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVycm9yTG9nIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR1BVRGV2aWNlOjpjcmVhdGVCdWZmZXJNYXBwZWQgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dlYkdQVURldmljZS5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGFibGUu
aWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwcm9jZXNzS2V5ZnJhbWVMaWtlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBy
b2Nlc3NJdGVyYWJsZUtleWZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzUHJvcGVy
dHlJbmRleGVkS2V5ZnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lRWZmZWN0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVFZmZlY3Q6OmdldEtleWZyYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdDo6c2V0S2V5ZnJhbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OktleWZyYW1lRWZmZWN0Ojpwcm9jZXNzS2V5ZnJhbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OktleWZyYW1lRWZmZWN0OjphbmltYXRpb25EaWRTZWVrKToKKyAgICAgICAgKiBh
bmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaDoKKyAgICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVF
ZmZlY3QuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVByb21pc2VQcm94eS5oOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NUHJvbWlzZVByb3h5PElETFR5cGU+Ojpwcm9taXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVByb21pc2VQcm94eTxJRExWb2lkPjo6cHJvbWlzZSk6CisgICAgICAg
IChXZWJDb3JlOjpET01Qcm9taXNlUHJveHlXaXRoUmVzb2x2ZUNhbGxiYWNrPElETFR5cGU+Ojpw
cm9taXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OmN1cnJlbnRXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjppc1dvcmxkQ29t
cGF0aWJsZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldE50aFZhbHVlT25LZXlQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OmludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpp
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bWF5YmVDcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNlcmlh
bGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFZhbHVlVG9J
REJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlS2V5UGF0aEFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OmdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNlcmlhbGl6ZUlEQlZhbHVlV2l0aEtleUluamVjdGlvbik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSURCQmluZGluZ1V0aWxpdGllcy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQW5pbWF0
aW9uRWZmZWN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNBbmlt
YXRpb25UaW1lbGluZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVh
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
QXV0aGVudGljYXRvclJlc3BvbnNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNO
ZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNCYXNpY0NyZWRlbnRpYWxDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9K
U05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3Jl
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NTU1J1bGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbGxi
YWNrRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnRyeVRvQ29u
c3RydWN0Q3VzdG9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RDdXN0b21F
bGVtZW50U3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2U6OnVwZ3JhZGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tRWxl
bWVudEludGVyZmFjZTo6aW52b2tlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0
b21FbGVtZW50SW50ZXJmYWNlOjppbnZva2VBZG9wdGVkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjppbnZva2VBdHRyaWJ1dGVDaGFuZ2VkQ2Fs
bGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjppbnZva2VDYWxs
YmFjayk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OnZhbGlkYXRlQ3VzdG9tRWxlbWVudE5hbWVBbmRUaHJvd0lmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6d2hlbkRlZmluZWRQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp3aGVuRGVmaW5lZCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3Rv
bUV2ZW50OjpkZXRhaWwgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29s
dmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6
Omxvb2t1cE5hbWVzcGFjZVVSSSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUFic3RyYWN0T3BlcmF0
aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6aXNWaXNpYmxlTmFtZWRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjphY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01BdHRyaWJ1dGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklETEF0dHJpYnV0
ZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklETEF0dHJpYnV0ZTo6c2V0U3RhdGljKToKKyAg
ICAgICAgKFdlYkNvcmU6OklETEF0dHJpYnV0ZTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
TEF0dHJpYnV0ZTo6Z2V0U3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OkF0dHJpYnV0ZVNldHRl
cjo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2FuQWNjZXNzRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb05v
ZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rvci5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01CdWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmNhbGxDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6
Y29uc3RydWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3Rv
ckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNl
OjpjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01Db25zdHJ1Y3RvckJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbFRocm93VHlw
ZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3JCYXNlOjp0b1N0cmlu
Z05hbWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlOjpjYWxs
VGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydEFueS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETEFueT46OmNvbnZlcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMQW55Pjo6Y29udmVydCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0QmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6RGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dmVydCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNO
ZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJvb2xlYW4u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExCb29sZWFuPjo6Y29udmVydCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0QnVmZmVyU291cmNlLmg6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OkRldGFpbDo6QnVmZmVyU291cmNl
Q29udmVydGVyOjpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExBcnJh
eUJ1ZmZlcj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMQXJy
YXlCdWZmZXI+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExEYXRh
Vmlldz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRGF0YVZp
ZXc+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExJbnQ4QXJyYXk+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElETEludDhBcnJheT46
OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETEludDE2QXJyYXk+Ojpj
b252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElETEludDE2QXJyYXk+Ojpj
b252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExJbnQzMkFycmF5Pjo6Y29u
dmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExJbnQzMkFycmF5Pjo6Y29u
dmVydCk6CisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMVWludDhBcnJheT46OmNvbnZl
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMVWludDhBcnJheT46OmNvbnZl
cnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETFVpbnQxNkFycmF5Pjo6Y29udmVy
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExVaW50MTZBcnJheT46OmNvbnZl
cnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETFVpbnQzMkFycmF5Pjo6Y29udmVy
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExVaW50MzJBcnJheT46OmNvbnZl
cnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETFVpbnQ4Q2xhbXBlZEFycmF5Pjo6
Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExVaW50OENsYW1wZWRB
cnJheT46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETEZsb2F0MzJB
cnJheT46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRmxvYXQz
MkFycmF5Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMRmxvYXQ2
NEFycmF5Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExGbG9h
dDY0QXJyYXk+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExBcnJh
eUJ1ZmZlclZpZXc+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElE
TEFycmF5QnVmZmVyVmlldz46OmNvbnZlcnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
Q29udmVydENhbGxiYWNrcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETENhbGxi
YWNrRnVuY3Rpb248VD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJ
RExDYWxsYmFja0ludGVyZmFjZTxUPj46OmNvbnZlcnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQ29udmVydERhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNEYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnZhbHVlVG9EYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnREYXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMRGF0ZT46OmNvbnZl
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRGF0ZT46OmNvbnZlcnQpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydERpY3Rpb25hcnkuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+Pjo6Y29udmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+Pjo6Y29udmVydCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0RW51bWVyYXRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj46OmNvbnZlcnQpOgorICAgICAgICAo
V2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+Ojpjb252ZXJ0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj46OmNvbnZlcnQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDb252ZXJ0ZXI8SURMSURCS2V5Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpK
U0NvbnZlcnRlcjxJRExJREJLZXlEYXRhPjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpK
U0NvbnZlcnRlcjxJRExJREJWYWx1ZT46OmNvbnZlcnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQ29udmVydEludGVyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNUb1dyYXBwZWRP
dmVybG9hZGVyOjp0b1dyYXBwZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETElu
dGVyZmFjZTxUPj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURM
SW50ZXJmYWNlPFQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJ
RExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlZhcmlhZGljQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydEpTT04uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZl
cnRlcjxJRExKU09OPjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJ
RExKU09OPjo6Y29udmVydCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVs
bC5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETE51bGw+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdWxsYWJsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udmVydGVyPElETE51bGxhYmxlPFQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj46OmNvbnZlcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1iZXJzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1NtYWxsZXJJbnQp
OgorICAgICAgICAoV2ViQ29yZTo6dG9TbWFsbGVyVUludCk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0VG9JbnRlZ2VyRW5mb3JjZVJhbmdlPGludDhfdD4pOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTx1aW50OF90Pik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0VG9JbnRlZ2VyQ2xhbXA8aW50OF90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0VG9JbnRlZ2VyQ2xhbXA8dWludDhfdD4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
SW50ZWdlcjxpbnQ4X3Q+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0ludGVnZXI8dWlu
dDhfdD4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTxp
bnQxNl90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9JbnRlZ2VyRW5mb3JjZVJhbmdl
PHVpbnQxNl90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9JbnRlZ2VyQ2xhbXA8aW50
MTZfdD4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvSW50ZWdlckNsYW1wPHVpbnQxNl90
Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9JbnRlZ2VyPGludDE2X3Q+KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnRUb0ludGVnZXI8dWludDE2X3Q+KToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0ludGVnZXJFbmZvcmNlUmFuZ2U8aW50MzJfdD4pOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTx1aW50MzJfdD4pOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFRvSW50ZWdlckNsYW1wPGludDMyX3Q+KToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0ludGVnZXJDbGFtcDx1aW50MzJfdD4pOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydFRvSW50ZWdlcjxpbnQzMl90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9J
bnRlZ2VyPHVpbnQzMl90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9JbnRlZ2VyRW5m
b3JjZVJhbmdlPGludDY0X3Q+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0ludGVnZXJF
bmZvcmNlUmFuZ2U8dWludDY0X3Q+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0ludGVn
ZXJDbGFtcDxpbnQ2NF90Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9JbnRlZ2VyQ2xh
bXA8dWludDY0X3Q+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0ludGVnZXI8aW50NjRf
dD4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvSW50ZWdlcjx1aW50NjRfdD4pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnZlcnRlcjxJRExCeXRlPjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpDb252
ZXJ0ZXI8SURMT2N0ZXQ+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJ
RExTaG9ydD46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExMb25n
Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+Ojpj
b252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25n
Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMQ2xhbXBBZGFwdG9y
PFQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMRW5mb3JjZVJh
bmdlQWRhcHRvcjxUPj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElE
TEZsb2F0Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExE
b3VibGU+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWREb3VibGU+Ojpjb252ZXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExPYmplY3Q+Ojpjb252
ZXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRQcm9taXNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDb252ZXJ0ZXI8SURMUHJvbWlzZTxUPj46OmNvbnZlcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMUHJvbWlzZTxUPj46OmNvbnZlcnQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oOgorICAgICAgICAoV2ViQ29yZTo6
RGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz46OmNvbnZlcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRldGFpbDo6SWRlbnRpZmllckNvbnZlcnRl
cjxJRExVU1ZTdHJpbmc+Ojpjb252ZXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnRTY2hlZHVsZWRBY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExT
Y2hlZHVsZWRBY3Rpb24+Ojpjb252ZXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnRTZXF1ZW5jZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRldGFpbDo6R2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyOjpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRldGFpbDo6TnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyOjpjb252ZXJ0QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGV0
YWlsOjpOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI6OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjo6Y29udmVydEFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkRldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI6OmNvbnZlcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydCk6CisgICAg
ICAgIChXZWJDb3JlOjpEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVy
dCk6CisgICAgICAgIChXZWJDb3JlOjpEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6RGV0
YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj46OmNvbnZlcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+Ojpjb252ZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj46OmNvbnZlcnQp
OgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+Ojpjb252
ZXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0
VmFsdWU8VD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ29udmVydGVyPElETFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj46OmNvbnZlcnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQ29udmVydFN0cmluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RyaW5nVG9CeXRl
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmlkZW50aWZpZXJUb0J5dGVTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6dmFsdWVUb0J5dGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6aWRl
bnRpZmllclRvVVNWU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlVG9VU1ZTdHJpbmcp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnZlcnRlcjxJRExET01TdHJpbmc+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ29udmVydGVyPElETERPTVN0cmluZz46OmNvbnZlcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udmVydGVyPElETEJ5dGVTdHJpbmc+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ29udmVydGVyPElETFVTVlN0cmluZz46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udmVydGVyPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPFQ+Pjo6Y29udmVydCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxUPj46
OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVyPElETEF0b21TdHJpbmdBZGFw
dG9yPFQ+Pjo6Y29udmVydCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZlcnRlcjxJRExBdG9t
U3RyaW5nQWRhcHRvcjxUPj46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udmVydGVy
PElETFJlcXVpcmVzRXhpc3RpbmdBdG9tU3RyaW5nQWRhcHRvcjxUPj46OmNvbnZlcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0ZXI8SURMUmVxdWlyZXNFeGlzdGluZ0F0b21TdHJpbmdB
ZGFwdG9yPFQ+Pjo6Y29udmVydCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0
VW5pb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRWYXJpYWRpYy5oOgor
ICAgICAgICAoV2ViQ29yZTo6VmFyaWFkaWNDb252ZXJ0ZXI6OmNvbnZlcnQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFZhcmlhZGljQXJndW1lbnRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRXZWJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9KU1Zh
bHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udmVydFRvSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NvbnZl
cnRlcjxJRExXZWJHTEFueT46OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNDb252ZXJ0
ZXI8SURMV2ViR0xFeHRlbnNpb24+Ojpjb252ZXJ0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+Ojpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj46OmNvbnZlcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+Pjo6Y29udmVydE5ld2x5Q3Jl
YXRlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
cmV0cmlldmVFcnJvck1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0Q3VycmVudEV4
Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVET01FeGNlcHRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6cHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6dGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dOb3RTdXBwb3J0ZWRF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0ludmFsaWRTdGF0ZUVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRocm93U2VjdXJpdHlFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJv
d0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93QXJndW1l
bnRNdXN0QmVGdW5jdGlvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93QXJndW1lbnRU
eXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6dGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcik6CisgICAgICAg
IChXZWJDb3JlOjp0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxh
YmxlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dTZXF1ZW5jZVR5cGVFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjp0aHJvd05vbkZpbml0ZVR5cGVFcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjp0aHJvd0dldHRlclR5cGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpyZWplY3RQcm9t
aXNlV2l0aEdldHRlclR5cGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd1NldHRlclR5
cGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd1RoaXNUeXBlRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6cmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OnRocm93RE9NU3ludGF4RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dEYXRh
Q2xvbmVFcnJvcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oOgorICAgICAgICAoV2ViQ29yZTo6cHJvcGFnYXRlRXhjZXB0aW9uKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtl
VGhpc1R5cGVFcnJvckZvckJ1aWx0aW5zKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VHZXR0ZXJU
eXBlRXJyb3JGb3JCdWlsdGlucyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVj
dDo6cHJvbWlzZVJlamVjdGlvblRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbGVyR2xv
YmFsT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRW
YWx1ZUl0ZXJhYmxlTWV0aG9kcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01JdGVyYXRv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6anNQYWlyKToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJh
dG9yVHJhaXRzPjo6YXNKUyk6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRGb3JFYWNoQXJndW1l
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6Oml0ZXJhdG9yRm9yRWFjaCk6CisgICAgICAgIChXZWJD
b3JlOjpJdGVyYXRvclRyYWl0cz46Om5leHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
TWFwTGlrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRCYWNraW5nTWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUJhY2tpbmdNYXApOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZEF0
dHJpYnV0ZUdldHRlclRvQmFja2luZ01hcCk6CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkRnVu
Y3Rpb25DYWxsVG9CYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRGb3JFYWNo
Q2FsbFRvQmFja2luZ01hcCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmg6
CisgICAgICAgIChXZWJDb3JlOjpET01NYXBMaWtlOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
c3luY2hyb25pemVCYWNraW5nTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRTaXplVG9N
YXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZvcndhcmRLZXlzVG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6
OmZvcndhcmRWYWx1ZXNUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZENsZWFy
VG9NYXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRGb3JFYWNoVG9NYXBMaWtlKToK
KyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmRHZXRUb01hcExpa2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Zm9yd2FyZEhhc1RvTWFwTGlrZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3J3YXJkQWRkVG9N
YXBMaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcndhcmREZWxldGVUb01hcExpa2UpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NT3BlcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
RExPcGVyYXRpb246OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9uOjpjYWxs
U3RhdGljKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTU9wZXJhdGlvblJldHVybmluZ1By
b21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U6
OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTo6
Y2FsbFJldHVybmluZ093blByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9u
UmV0dXJuaW5nUHJvbWlzZTo6Y2FsbFN0YXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVy
YXRpb25SZXR1cm5pbmdQcm9taXNlOjpjYWxsU3RhdGljUmV0dXJuaW5nT3duUHJvbWlzZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpET01Qcm9taXNlOjp3aGVuUHJvbWlz
ZUlzU2V0dGxlZCk6CisgICAgICAgIChXZWJDb3JlOjpET01Qcm9taXNlOjpyZXN1bHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NUHJvbWlzZTo6c3RhdHVzIGNvbnN0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZFByb21pc2U6OmNhbGxGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWZl
cnJlZFByb21pc2U6OnJlamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpyZWplY3RQcm9taXNlV2l0
aEV4Y2VwdGlvbklmQW55KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlZmVycmVkUHJvbWlz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXNKU09OKToKKyAgICAgICAgKFdlYkNvcmU6OmZ1
bGZpbGxQcm9taXNlV2l0aEpTT04pOgorICAgICAgICAoV2ViQ29yZTo6ZnVsZmlsbFByb21pc2VX
aXRoQXJyYXlCdWZmZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZURlZmVy
cmVkLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFByb21pc2U6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWZlcnJlZFByb21pc2U6OnJlc29sdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVmZXJyZWRQcm9taXNlOjpyZXNvbHZlV2l0aE5ld2x5Q3JlYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWZlcnJlZFByb21pc2U6OnJlc29sdmVDYWxsYmFja1ZhbHVlV2l0aE5ld2x5Q3Jl
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZFByb21pc2U6OnJlamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEZWZlcnJlZFByb21pc2U6OnJlc29sdmVXaXRoQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6RGVmZXJyZWRQcm9taXNlOjpyZWplY3RXaXRoQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbFByb21pc2VGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpi
aW5kaW5nUHJvbWlzZUZ1bmN0aW9uQWRhcHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6dXBk
YXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkSW50ZXJydXB0U2NyaXB0VG9Q
cmV2ZW50SW5maW5pdGVSZWN1cnNpb25XaGVuQ2xvc2luZ1BhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjppbmN1bWJlbnRET01XaW5kb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6YWN0aXZlRE9NV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0RE9N
V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3BvbnNpYmxlRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJFdmFsdWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckNyZWF0ZUlt
cG9ydE1ldGFQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUFsbG9jYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUmVzcG9uc2VDb3JyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Omhh
bmRsZVJlc3BvbnNlT25TdHJlYW1pbmdBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3dCYXNlOjpjb21waWxlU3RyZWFtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93QmFzZTo6aW5zdGFudGlhdGVTdHJlYW1pbmcpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNET01X
aW5kb3dXZWJLaXQpOgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dHZXRPd25Qcm9wZXJ0
eVNsb3RSZXN0cmljdGVkQWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRv
UHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
OjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnB1dEJ5SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6YWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmFkZFNjb3BlZENoaWxkcmVuSW5kZXhlcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
dzo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldFBy
b3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cHJldmVudEV4dGVuc2lv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnRvU3RyaW5nTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZXZlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlhbG9nSGFuZGxlcjo6RGlhbG9nSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEaWFs
b2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWxvZ0hhbmRs
ZXI6OnJldHVyblZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpz
aG93TW9kYWxEaWFsb2cpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnF1ZXVlTWlj
cm90YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRPcGVuZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNlbGYgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01XaW5kb3c6OndpbmRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvdzo6ZnJhbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzRE9NV2luZG93SW5zdGFu
Y2VGdW5jdGlvbk9wZW5EYXRhYmFzZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0
aW9uPEpTRE9NV2luZG93Pjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd0lu
c3RhbmNlRnVuY3Rpb25PcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3c6Om9wZW5EYXRhYmFzZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
c2V0T3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd1Byb3BlcnRpZXNHZXRPd25Qcm9wZXJ0eVNsb3RO
YW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dQcm9wZXJ0aWVz
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dQcm9w
ZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdy
YXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xvbmVBY3Jvc3NXb3JsZHMpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NV3JhcHBlckNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpkZXByZWNhdGVkR2xvYmFsT2Jq
ZWN0Rm9yUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1
Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNEZXByZWNhdGVkQ1NTT01WYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
TmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTmV3
RG9jdW1lbnRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZERvY3VtZW50V3JhcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRNZW1vcnlGb3JEb2N1bWVudElmRnJhbWVsZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRGcmFnbWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
RXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFcnJv
ckhhbmRsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUpTRXJyb3JIYW5kbGVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUV2ZW50TGlzdGVuZXJGb3JFdmVudEhhbmRsZXJBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFdpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXREb2N1bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1
c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9uPEpTRXZlbnRUYXJnZXQ+Ojpj
YWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V4ZWNTdGF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0V4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpcHRDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OmZ1bmN0aW9uQ2FsbEhhbmRsZXJGcm9tQW55VGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OmV2YWx1YXRlSGFuZGxlckZyb21BbnlUaHJlYWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXhlY1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0V4ZWNTdGF0ZTo6Y3VycmVudFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhlY1N0YXRlOjpjYWxsKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXhlY1N0YXRlOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V4ZWNT
dGF0ZTo6cHJvZmlsZWRDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhlY1N0YXRlOjpwcm9m
aWxlZEV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhlY1N0YXRlOjpydW5UYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRXhlY1N0YXRlOjpsb2FkTW9kdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXhlY1N0YXRlOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNFeGVjU3RhdGU6OkpTRXhlY1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhl
Y1N0YXRlOjp+SlNFeGVjU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNFeGVjU3RhdGU6OnNl
dEN1cnJlbnRTdGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFeHRlbmRhYmxlTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRXh0ZW5kYWJs
ZU1lc3NhZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpKU0V4dGVuZGFibGVNZXNzYWdlRXZl
bnQ6OmRhdGEgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbUVudHJ5
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlv
bkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU0hUTUxFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZSBjb25z
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTSGlzdG9yeTo6c3RhdGUgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTSURCQ3Vyc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCQ3Vyc29yOjpr
ZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3I6OnByaW1hcnlLZXkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUg
Y29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0lEQlJlcXVlc3Q6OnJlc3VsdCBjb25zdCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9K
U05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6
eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldE93
blByb3BlcnR5U2xvdENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpnZXRP
d25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpwdXRDb21tb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2spOgorICAg
ICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9j
YXRpb246OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZGVsZXRlUHJvcGVydHlC
eUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6Z2V0UHJvdG90eXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTTG9jYXRpb246OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTTG9jYXRpb246OnRvU3RyaW5nTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9u
UHJvdG90eXBlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvblByb3RvdHlwZTo6
ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVkaWFTdHJlYW1U
cmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUV2
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZUV2ZW50Ojpwb3J0cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VFdmVudDo6ZGF0YSBjb25zdCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNNaWNyb3Rhc2tDYWxsYmFjay5oOgorICAgICAgICAoV2Vi
Q29yZTo6SlNNaWNyb3Rhc2tDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6cHVzaEV2ZW50SGFu
ZGxlclNjb3BlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVdyYXBwZXJJbmxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OndpbGxDcmVhdGVQb3NzaWJseU9y
cGhhbmVkVHJlZUJ5UmVtb3ZhbFNsb3dDYXNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05v
ZGVDdXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6
SlNOb2RlOjpub2RlVHlwZSBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlTGlz
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6
bWV0aG9kRGV0YWlscyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQYXltZW50UmVz
cG9uc2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNQYXltZW50UmVzcG9uc2U6OmRl
dGFpbHMgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VFbnRyeUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1
bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbHVnaW5TY3JpcHRPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6cGx1Z2luRWxlbWVudFByb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnBsdWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
V2ViQ29yZTo6cGx1Z2luRWxlbWVudEN1c3RvbVB1dCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxs
UGx1Z2luKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZSBjb25zdCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVNvdXJjZUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1JlYWRhYmxlU3RyZWFtU291cmNlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1JlYWRhYmxlU3RyZWFtU291cmNlOjpwdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVh
ZGFibGVTdHJlYW1Tb3VyY2U6OmNvbnRyb2xsZXIgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVt
b3RlRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNS
ZW1vdGVET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNSZW1vdGVET01XaW5kb3c6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90
ZURPTVdpbmRvdzo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURPTVdp
bmRvdzo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNSZW1vdGVET01XaW5k
b3c6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURP
TVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90
ZURPTVdpbmRvdzo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNSZW1v
dGVET01XaW5kb3c6OmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90ZURP
TVdpbmRvdzo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SlNSZW1vdGVE
T01XaW5kb3c6OnRvU3RyaW5nTmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTVkdQYXRo
U2VnQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTZXJ2aWNlV29y
a2VyQ2xpZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdHls
ZVNoZWV0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNUZXh0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVHJhY2tD
dXN0b20uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1R5cGVkT01DU1NTdHlsZVZhbHVlQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9i
amVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkUHJvcGVydHlWYWx1ZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXZWJBbmltYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN0cnVjdEpTV2ViQW5pbWF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1dpbmRvd1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTV2luZG93UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
V29ya2VyR2xvYmFsU2NvcGU6OnF1ZXVlTWljcm90YXNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTERvY3VtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25z
ZSBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYUGF0aE5TUmVzb2x2ZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVTdHJlYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0
cmVhbUludGVybmFsOjpjYWxsRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVT
dHJlYW06OnBpcGVUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0cmVhbTo6dGVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtOjpsb2NrKToKKyAgICAgICAgKFdlYkNv
cmU6OmNoZWNrUmVhZGFibGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJl
YW06OmlzRGlzdHVyYmVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbS5o
OgorICAgICAgICAoV2ViQ29yZTo6SlNSZWFkYWJsZVN0cmVhbVdyYXBwZXJDb252ZXJ0ZXI6OnRv
V3JhcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnJlYWRhYmxlU3RyZWFtQ2FsbEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXI6Omludm9rZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6ZW5xdWV1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjpnbG9iYWxFeGVjIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRl
eHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmxvYWRNb2R1bGVTY3JpcHRJbldvcmxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmxpbmtBbmRFdmFsdWF0ZU1vZHVsZVNj
cmlwdEluV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVh
dGVNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6anNWYWx1ZVRvTW9kdWxlS2V5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnNldHVwTW9kdWxlU2NyaXB0SGFuZGxlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FuQWNjZXNzRnJvbUN1cnJl
bnRPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElz
b2xhdGVkQ29udGV4dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6anNP
YmplY3RGb3JQbHVnaW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6amF2YVNjcmlwdENvbnRl
eHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE1vZHVsZUxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRNb2R1bGVMb2FkZXI6OnJlc29sdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVqZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0TW9kdWxlTG9hZGVyOjpmZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRNb2R1
bGVMb2FkZXI6Om1vZHVsZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRNb2R1bGVMb2Fk
ZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlamVjdFByb21pc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0TW9kdWxlTG9hZGVyOjppbXBvcnRNb2R1bGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0TW9kdWxlTG9hZGVyOjpjcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRNb2R1bGVMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRNb2R1bGVMb2FkZXIuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkb21XaW5kb3dG
cm9tRXhlY1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmZyYW1lRnJvbUV4ZWNTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjptYWluV29ybGRFeGVjU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
ZXhlY1N0YXRlRnJvbU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY1N0YXRlRnJvbVBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6ZXhlY1N0YXRlRnJvbVdvcmtlckdsb2JhbFNjb3BlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmV4ZWNTdGF0ZUZyb21Xb3JrbGV0R2xvYmFsU2NvcGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lQmFzZTo6Q2xv
bmVCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lQmFzZTo6c2hvdWxkVGVybWluYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OndyYXBDcnlwdG9LZXkpOgorICAgICAgICAoV2ViQ29yZTo6dW53
cmFwQ3J5cHRvS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6c2VyaWFs
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6Q2xvbmVTZXJpYWxpemVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZmlsbFRyYW5zZmVyTWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6Z2V0UHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjp0b0pTQXJyYXlCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1wQXJyYXlCdWZmZXJWaWV3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcERPTVBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcERPTVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVTZXJpYWxpemVyOjpkdW1wRE9NTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6ZHVtcElmVGVybWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxp
emVyOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OkNhY2hlZFN0cmlu
Zzo6anNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OkNsb25l
RGVzZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpwdXRQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEFycmF5
QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Z2V0SlNW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZERPTVBvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkRE9NTWF0cml4KToK
KyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkRE9NUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZERPTVF1YWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRSVENDZXJ0aWZpY2F0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAgKFdl
YkNvcmU6Om1heWJlVGhyb3dFeGNlcHRpb25JZlNlcmlhbGl6YXRpb25GYWlsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgICogYmluZGluZ3MvanMv
U3RydWN0dXJlZENsb25lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNsb25lQXJyYXlCdWZmZXJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OnN0cnVjdHVyZWRDbG9uZUFycmF5QnVmZmVyVmlldyk6
CisgICAgICAgICogYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25lLmg6CisgICAgICAgICogYmlu
ZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJv
bGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6c2V0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZGV0YWNoRGVidWdnZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVHZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KToKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChHZW5l
cmF0ZUludm9rZUluZGV4ZWRQcm9wZXJ0eVNldHRlcik6CisgICAgICAgIChHZW5lcmF0ZUludm9r
ZU5hbWVkUHJvcGVydHlTZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVQdXQpOgorICAgICAgICAo
R2VuZXJhdGVQdXRCeUluZGV4KToKKyAgICAgICAgKEdlbmVyYXRlRGVmaW5lT3duUHJvcGVydHkp
OgorICAgICAgICAoR2VuZXJhdGVEZWxldGVQcm9wZXJ0eUNvbW1vbik6CisgICAgICAgIChHZW5l
cmF0ZURlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEdlbmVyYXRlRGVsZXRlUHJvcGVydHlCeUlu
ZGV4KToKKyAgICAgICAgKEdldEFyZ3VtZW50RXhjZXB0aW9uRnVuY3Rpb24pOgorICAgICAgICAo
R2V0QXJndW1lbnRFeGNlcHRpb25UaHJvd2VyKToKKyAgICAgICAgKEdldEF0dHJpYnV0ZUV4Y2Vw
dGlvbkZ1bmN0aW9uKToKKyAgICAgICAgKEdldEF0dHJpYnV0ZUV4Y2VwdGlvblRocm93ZXIpOgor
ICAgICAgICAoQWRkQWRkaXRpb25hbEFyZ3VtZW50c0ZvckltcGxlbWVudGF0aW9uQ2FsbCk6Cisg
ICAgICAgIChHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVtZW50YXRpb25Db250ZW50KToKKyAgICAg
ICAgKEdlbmVyYXRlRW51bWVyYXRpb25IZWFkZXJDb250ZW50KToKKyAgICAgICAgKEdlbmVyYXRl
RGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEdlbmVyYXRlRGljdGlvbmFyeUhlYWRlckNvbnRlbnQp
OgorICAgICAgICAoR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250ZW50KToKKyAg
ICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlT3ZlcmxvYWREaXNwYXRj
aGVyKToKKyAgICAgICAgKGFkZFVuc2NvcGFibGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEdlbmVy
YXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1dGVHZXR0ZXJCb2R5
RGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZUdldHRlclRyYW1wb2xpbmVE
ZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQXR0cmlidXRlU2V0dGVyQm9keURlZmluaXRp
b24pOgorICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1dGVTZXR0ZXJUcmFtcG9saW5lRGVmaW5pdGlv
bik6CisgICAgICAgIChHZW5lcmF0ZU9wZXJhdGlvblRyYW1wb2xpbmVEZWZpbml0aW9uKToKKyAg
ICAgICAgKEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJh
dGVPcGVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlU2VyaWFsaXplckRlZmlu
aXRpb24pOgorICAgICAgICAoR2VuZXJhdGVMZWdhY3lDYWxsZXJEZWZpbml0aW9ucyk6CisgICAg
ICAgIChHZW5lcmF0ZUxlZ2FjeUNhbGxlckRlZmluaXRpb24pOgorICAgICAgICAoR2VuZXJhdGVD
YWxsV2l0aFVzaW5nUmVmZXJlbmNlcyk6CisgICAgICAgIChHZW5lcmF0ZUNhbGxXaXRoVXNpbmdQ
b2ludGVycyk6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbFdpdGhVc2luZ1BvaW50
ZXJzKToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbFdpdGgpOgorICAgICAgICAoR2VuZXJhdGVBcmd1
bWVudHNDb3VudENoZWNrKToKKyAgICAgICAgKEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAg
ICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbkNvbnRlbnQpOgorICAgICAgICAo
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uQ3VzdG9tRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEdlbmVyYXRlSXRlcmFi
bGVEZWZpbml0aW9uKToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgIChUb05h
dGl2ZUZvckZ1bmN0aW9uV2l0aG91dFR5cGVDaGVjayk6CisgICAgICAgIChOYXRpdmVUb0pTVmFs
dWVET01Db252ZXJ0TmVlZHNTdGF0ZSk6CisgICAgICAgIChOYXRpdmVUb0pTVmFsdWVET01Db252
ZXJ0TmVlZHNHbG9iYWxPYmplY3QpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZl
cmVuY2VzKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMpOgorICAgICAg
ICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgKEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRp
b24pOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb25zKToKKyAgICAgICAg
KEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3Ry
dWN0b3JIZWxwZXJNZXRob2RzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNJbnRlcmZhY2VOYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzSW50ZXJmYWNlTmFtZUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTSW50ZXJmYWNlTmFtZUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50ZXJm
YWNlTmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNN
YXBMaWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFwTGlrZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRlPEpTTWFwTGlrZT46OmNhc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9uPEpTTWFwTGlrZT46OmNhc3QpOgorICAgICAgICAo
V2ViQ29yZTo6anNNYXBMaWtlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNN
YXBMaWtlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNNYXBMaWtlU2l6ZUdldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc01hcExpa2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNN
YXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uQWRkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkNsZWFyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmg6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1JlYWRPbmx5TWFwTGlrZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURMQXR0cmlidXRlPEpTUmVhZE9ubHlNYXBMaWtlPjo6Y2FzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJRExPcGVyYXRpb248SlNSZWFkT25seU1hcExpa2U+OjpjYXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzUmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNSZWFkT25seU1hcExpa2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1JlYWRPbmx5TWFwTGlrZVNpemVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNSZWFkT25s
eU1hcExpa2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OmpzUmVhZE9ubHlNYXBMaWtlUHJvdG90
eXBlRnVuY3Rpb25HZXRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzUmVhZE9ubHlNYXBMaWtl
UHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzUmVhZE9ubHlN
YXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9u
bHlNYXBMaWtlLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRl
PEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURMT3Bl
cmF0aW9uPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb25Cb2R5
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0
aW9uUG9zdE1lc3NhZ2VCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURMQXR0cmlidXRlPEpTVGVzdENFUmVhY3Rpb25zPjo6Y2FzdCk6CisgICAgICAgIChXZWJD
b3JlOjpJRExPcGVyYXRpb248SlNUZXN0Q0VSZWFjdGlvbnM+OjpjYXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0dldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9u
c1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDRVJlYWN0aW9uc1Jl
ZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9uc1NldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc1Jl
ZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0
aW9uc05vdE5lZWRlZEdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDRVJlYWN0aW9u
c0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhD
RVJlYWN0aW9uc05vdE5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDRVJlYWN0aW9u
c1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rp
b25zTm90TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENFUmVhY3Rpb25zUmVm
bGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlv
bnNOb3ROZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckF0dHJpYnV0ZU5vdE5lZWRlZEdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWRTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0
dHJpYnV0ZU5vdE5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDRVJlYWN0aW9uc1By
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rp
b25zTm90TmVlZGVkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OmNhc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9uPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXI+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllclZhbHVlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlvbnNHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlV2l0aG91
dFJlYWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0
aW9uVG9TdHJpbmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURMQXR0cmlidXRlPEpTVGVzdENhbGxUcmFjZXI+OjpjYXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklETE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Y2FzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dENhbGxUcmFjZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlSW50ZXJm
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlU3Bl
Y2lmaWVkR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENhbGxUcmFjZXJUZXN0QXR0
cmlidXRlU3BlY2lmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENhbGxUcmFjZXJU
ZXN0QXR0cmlidXRlU3BlY2lmaWVkU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dENhbGxUcmFjZXJUZXN0QXR0cmlidXRlU3BlY2lmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlV2l0aFZhcmlhbnRHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudCk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmli
dXRlV2l0aFZhcmlhbnQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q2FsbFRyYWNlclRlc3RS
ZWFkb25seUF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDYWxsVHJh
Y2VyVGVzdFJlYWRvbmx5QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENhbGxU
cmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25JbnRlcmZhY2VCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRp
b25TcGVjaWZpZWRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENhbGxUcmFjZXJQcm90
b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRoQXJndW1lbnRzQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0
aE51bGxhYmxlQXJndW1lbnRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdENhbGxUcmFj
ZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRoVmFyaWFudEFyZ3VtZW50Qm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0
T3BlcmF0aW9uV2l0aE51bGxhYmxlVmFyaWFudEFyZ3VtZW50Qm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aE9w
dGlvbmFsVmFyaWFudEFyZ3VtZW50Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDYWxs
VHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aERlZmF1bHRWYXJpYW50QXJn
dW1lbnRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENhbGxUcmFjZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZl
cnRFbnVtZXJhdGlvblRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VFbnVtZXJhdGlvbjxU
ZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkVudW0+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRE
aWN0aW9uYXJ5PFRlc3RDYWxsYmFja0ludGVyZmFjZTo6RGljdGlvbmFyeT4pOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9K
U05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dERPTUpJVC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklU
Pjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVyYXRpb248SlNUZXN0RE9NSklUPjo6
Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RET01KSVRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RET01KSVRBbnlBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dERPTUpJVEFueUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUQm9vbGVhbkF0
dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUQm9vbGVhbkF0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUQnl0ZUF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0RE9NSklUQnl0ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
RE9NSklUT2N0ZXRBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVE9j
dGV0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRTaG9ydEF0dHJHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUU2hvcnRBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdERPTUpJVExvbmdBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERP
TUpJVExvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkTG9u
Z0F0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUVW5zaWduZWRMb25n
QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRMb25nTG9uZ0F0dHJHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdERPTUpJVEZsb2F0QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RET01KSVRGbG9hdEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklU
VW5yZXN0cmljdGVkRmxvYXRBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERP
TUpJVFVucmVzdHJpY3RlZEZsb2F0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01K
SVREb3VibGVBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVERvdWJs
ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91Ymxl
QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHJH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklURG9tU3RyaW5nQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0ckdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdERPTUpJVFVzdlN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9N
SklUTm9kZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUTm9kZUF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0ckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHJHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRPY3RldE51bGxhYmxlQXR0ckdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRPY3RldE51bGxhYmxlQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0ckdldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnROdWxsYWJsZUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0ckdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RET01KSVRMb25nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0ckdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJsZUF0dHJHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJsZUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nTnVsbGFi
bGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRy
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0TnVsbGFi
bGVBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFVucmVzdHJpY3Rl
ZEZsb2F0TnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVERvdWJs
ZU51bGxhYmxlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01KSVREb3Vi
bGVOdWxsYWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUVW5yZXN0cmlj
dGVkRG91YmxlTnVsbGFibGVBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERP
TUpJVFVucmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RET01KSVREb21TdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RET01KSVRVc3ZTdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdERPTUpJVE5vZGVOdWxsYWJsZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZUJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVXaXRob3V0
VHlwZUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0
aW9uSXRlbUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RE9NSklUUHJvdG90eXBlRnVu
Y3Rpb25JdGVtV2l0aG91dFR5cGVDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RET01K
SVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1dGVXaXRob3V0VHlwZUNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxl
bWVudEJ5SWRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1
bmN0aW9uR2V0RWxlbWVudEJ5SWRXaXRob3V0VHlwZUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWVCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNC
eU5hbWVXaXRob3V0VHlwZUNoZWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RGVyaXZlZERpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dERpY3Rpb25hcnk8VGVzdERlcml2ZWREaWN0aW9uYXJ5Pik6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0RGljdGlvbmFyeVRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3REZXJpdmVkRGljdGlvbmFyeS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
TEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPjo6Y2FzdCk6CisgICAgICAgIChXZWJD
b3JlOjpJRExPcGVyYXRpb248SlNUZXN0RW5hYmxlZEJ5U2V0dGluZz46OmNhc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRp
bmdDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFbmFibGVkQnlT
ZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRp
bmdDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RFbmFibGVk
QnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0
ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxl
ZEJ5U2V0dGluZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RFbmFibGVk
QnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFbmFibGVkQnlTZXR0aW5nUHJvdG90eXBlRnVuY3Rp
b25FbmFibGVkQnlTZXR0aW5nT3BlcmF0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
TmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmg6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJRExBdHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEZvckNvbnRl
eHQ+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRl
c3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0RW5hYmxlZEZvckNvbnRl
eHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9y
Q29udGV4dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RFdmVudENvbnN0cnVjdG9yOjpJbml0Pik6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNv
bnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJRExBdHRyaWJ1dGU8SlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvcj46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEV2ZW50Q29uc3RydWN0
b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFdmVudENvbnN0cnVjdG9y
QXR0cjFHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMkdldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyk6CisgICAgICAgIChXZWJD
b3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0
ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdl
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVy
dHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJhdGlvbjxKU1Rl
c3RFdmVudFRhcmdldD46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXZlbnRUYXJn
ZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RFdmVudFRhcmdldENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBl
RnVuY3Rpb25JdGVtQm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklETEF0
dHJpYnV0ZTxKU1Rlc3RFeGNlcHRpb24+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEV4Y2VwdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEV4Y2Vw
dGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEV4Y2VwdGlvbk5hbWVH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0RXhjZXB0aW9uTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRl
ZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRlPEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGU+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZUFTZWNyZXRBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUFTZWNyZXRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3
bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xv
YmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklETEF0dHJpYnV0ZTxKU1Rlc3RHbG9i
YWxPYmplY3Q+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJhdGlvbjxKU1Rlc3RH
bG9iYWxPYmplY3Q+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVj
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJB
dHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0UmVn
dWxhckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RS
ZWd1bGFyQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2Jh
bE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFs
T2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5k
UHJpdmF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RQ
dWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFBy
aXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlv
bnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0
cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvclNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEds
b2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxUcmFjZXJDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVj
dG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RD
YWxsVHJhY2VyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxiYWNrSW50
ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9y
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
RE9NSklUQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5T
ZWN1cml0eUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNl
dHRpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250
ZXh0Q29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRG
b3JDb250ZXh0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRU
YXJnZXRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25z
dHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFs
T2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvYmFsT2JqZWN0Q29uc3Ry
dWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdEds
b2JhbE9iamVjdENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xv
YmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlcmFibGVDb25z
dHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
SXRlcmFibGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlcmFibGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1
Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TWFwTGlrZUNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvclNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xv
YmFsT2JqZWN0VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQ29uc3Ry
dWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3Rvckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RBdWRpb0NvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdEF1ZGlvQ29uc3Ry
dWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVk
aW9Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVs
ZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0
aENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9y
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVj
dG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVj
dG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25z
dHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xv
YmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5z
Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnNDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRP
dmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xv
YmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rv
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRl
QnVpbHRpbnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVy
ZmFjZUNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9i
amVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVy
ZmFjZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRl
c3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0
cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6YXRpb25Db25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRp
b25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvckdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvclNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvclNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1
Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
U3RyaW5naWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9u
eW1vdXNPcGVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvclNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9y
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdp
Zmllck5hbWVkT3BlcmF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvclNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1
Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVt
ZW50ZWRBc0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
Z0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvclNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3Rvckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0
b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25z
dHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRlZnND
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbkJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJs
ZWRBdFJ1bnRpbWVPcGVyYXRpb24xQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9i
YWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjJCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uT3ZlcmxvYWREaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yRnVuY3Rpb25FbmFibGVkQXRSdW50aW1l
T3BlcmF0aW9uU3RhdGljQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmpl
Y3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZEJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNp
ZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3Js
ZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFibGVkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlvbkJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkNhbGN1
bGF0ZVNlY3JldFJlc3VsdEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvbkdldFNlY3JldEJvb2xlYW5Cb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3Jl
dEJvb2xlYW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmRlZmluZU93
blByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5
Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVm
aW5lT3duUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZWZp
bmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVyYXRpb248SlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5
cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXds
eUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVk
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5oZXJpdGVkRGlj
dGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0SW5o
ZXJpdGVkRGljdGlvbmFyeT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25hcnlU
b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5oZXJpdGVk
RGljdGlvbmFyeS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJRExBdHRyaWJ1dGU8SlNUZXN0SW50
ZXJmYWNlPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVyYXRpb248SlNUZXN0SW50
ZXJmYWNlPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNT
dGF0aWNSZWFkT25seUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1l
bnRzU3RhdGljQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjEpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c05vZGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0
aWNSZWFkT25seUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRp
Y0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyMlNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RJbnRlcmZhY2VSZWZsZWN0QXR0cmlidXRlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEludGVyZmFjZVJlZmxlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0SW50ZXJmYWNlUmVmbGVjdEF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RJbnRlcmZhY2VSZWZsZWN0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDFCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50
c01ldGhvZDJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlw
ZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDNCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kNEJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXNC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
U3VwcGxlbWVudGFsTWV0aG9kMUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhv
ZDNCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVu
Y3Rpb25TdXBwbGVtZW50YWxNZXRob2Q0Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3
bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5n
VW5kZXJzY29yZT46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9ubHlHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFkb25seSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZS5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9u
PEpTVGVzdEl0ZXJhYmxlPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJdGVyYWJs
ZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEl0ZXJhYmxlQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlv
bkVudHJpZXNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVQcm90b3R5
cGVGdW5jdGlvbktleXNDYWxsZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SXRlcmFibGVQ
cm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJ
dGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcik6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRlPEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVyYXRpb248SlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3I+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9t
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJp
YnV0ZVJXQ3VzdG9tR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0
ZVJXQ3VzdG9tKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tRnVuY3Rpb25Cb2R5KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVyYXRpb248SlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2RCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6
dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcjo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNO
ZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3
bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6
OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcjo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkU2V0dGVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9u
SW5kZXhlZFNldHRlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29u
c3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZENvbnN0
cnVjdG9yQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMp
OgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50
aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6ZGVsZXRlUHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmg6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNy
ZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpkZWxldGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6ZGVsZXRlUHJvcGVydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVyYXRpb248SlNUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXI+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1
bmN0aW9uTmFtZWREZWxldGVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVh
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElu
ZGV4ZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmRlbGV0ZVByb3BlcnR5
QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9K
U05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5
Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGguaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAo
V2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURMT3Bl
cmF0aW9uPEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+OjpjYXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
clByb3RvdHlwZUZ1bmN0aW9uR2V0dGVyTmFtZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6dG9K
U05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5oOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVh
dGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllcjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05l
d2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0QnlJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpkZWZp
bmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05l
d2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cj46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0
eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnB1dCk6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpw
dXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJh
dGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyPjo6Y2FzdCk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkU2V0dGVyQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVuY3Rp
b25JbmRleGVkU2V0dGVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6ZGVmaW5lT3duUHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXJCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIxQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBl
RnVuY3Rpb25JbmRleGVkU2V0dGVyMkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhl
ZFNldHRlck92ZXJsb2FkRGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlD
cmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXds
eUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6cHV0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6
OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3Zl
cnJpZGVCdWlsdGluczo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpwdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OnB1
dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXM6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OklE
TEF0dHJpYnV0ZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz46OmNh
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNVbmZvcmdlYWJsZUF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1VuZm9yZ2VhYmxl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzSW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwdXRC
eUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRlPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz46OmNhc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGlucz46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zVW5mb3JnZWFibGVBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zVW5mb3JnZWFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zSW5zdGFu
Y2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Tm9kZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmli
dXRlPEpTVGVzdE5vZGU+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJhdGlvbjxK
U1Rlc3ROb2RlPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVOYW1lR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE5vZGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5vZGVOYW1lU2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5vZGVOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25DYWxjdWxhdGVTZWNy
ZXRSZXN1bHRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkdldFNlY3JldEJvb2xlYW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbkJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllc0NhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNo
Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGU6OnNlcmlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9K
Uyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRl
ZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RW51bWVyYXRpb25Ub0pTKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRW51bWVyYXRpb248QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bUM+KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
RW51bWVyYXRpb248VGVzdE9iajo6S2luZD4pOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VFbnVt
ZXJhdGlvbjxUZXN0T2JqOjpTaXplPik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUVudW1lcmF0
aW9uPFRlc3RPYmo6OkNvbmZpZGVuY2U+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0
aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRE
aWN0aW9uYXJ5VG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0
T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVsbD4pOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xl
cmF0ZU51bGw+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PEFsdGVybmF0
ZURpY3Rpb25hcnlOYW1lPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxU
ZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGlj
dGlvbmFyeTxUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnk+KToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUE+KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlv
bmFyeUI+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNv
bmRpdGlvbmFsRGljdGlvbmFyeUM+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0
cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iajo6Z2V0T3duUHJvcGVy
dHlOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpjYWxsSlNUZXN0T2JqMSk6CisgICAgICAgIChX
ZWJDb3JlOjpjYWxsSlNUZXN0T2JqMik6CisgICAgICAgIChXZWJDb3JlOjpjYWxsSlNUZXN0T2Jq
Myk6CisgICAgICAgIChXZWJDb3JlOjpjYWxsSlNUZXN0T2JqKToKKyAgICAgICAgKFdlYkNvcmU6
OklETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUmVhZE9ubHlUZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25z
dHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3Ry
aW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJP
YmpHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3Vi
T2JqKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN0YXRpY1Jl
YWRvbmx5T2JqR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9y
VGVzdFN0YXRpY1JlYWRvbmx5T2JqKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakVudW1B
dHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakVudW1BdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakVudW1BdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iakVudW1BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakJ5
dGVBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakJ5dGVBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakJ5dGVBdHRyU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9iakJ5dGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
ak9jdGV0QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpPY3RldEF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqT2N0ZXRBdHRyU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9jdGV0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU2hv
cnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialNob3J0QXR0clNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTaG9ydEF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakNsYW1wZWRTaG9ydEF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqQ2xhbXBlZFNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpFbmZvcmNl
UmFuZ2VTaG9ydEF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqRW5mb3Jj
ZVJhbmdlU2hvcnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakVuZm9yY2VS
YW5nZVNob3J0QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpFbmZv
cmNlUmFuZ2VTaG9ydEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVW5zaWduZWRT
aG9ydEF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVW5zaWduZWRTaG9y
dEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqTG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqTG9uZ0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0F0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakxvbmdMb25nQXR0cik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialVuc2ln
bmVkTG9uZ0xvbmdBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialVuc2ln
bmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVuc2lnbmVk
TG9uZ0xvbmdBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVuc2ln
bmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0cmluZ0F0dHJH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU3RyaW5nQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
VXN2c3RyaW5nQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpVc3ZzdHJp
bmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpUZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpUZXN0T2JqQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUZXN0
T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRy
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0clNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqVW5mb3JnZWFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialVzdnN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVzdnN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0cik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0cik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ckdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRy
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0cmluZ1ZvaWRDYWxsYmFja1Jl
Y29yZEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nVm9pZENhbGxi
YWNrUmVjb3JkQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJp
bmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakRp
Y3Rpb25hcnlBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakRpY3Rpb25h
cnlBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyU2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRyR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakFubm90YXRlZFR5cGVJblVuaW9uQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5p
b25BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVl
bmNlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpBbm5vdGF0ZWRUeXBl
SW5TZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQW5ub3RhdGVk
VHlwZUluU2VxdWVuY2VBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9iak1lZGlhRGV2aWNlc0dldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpNZWRp
YURldmljZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU2VydmljZVdvcmtlcnNHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU2VydmljZVdvcmtlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqWE1MT2JqQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpYTUxPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialhN
TE9iakF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqWE1MT2JqQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqQ3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akNyZWF0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0clNldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFs
QXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNp
Z25lZEludGVncmFsQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRC
b29sZWFuQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRC
b29sZWFuQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29s
ZWFuQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRC
b29sZWFuQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRy
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0clNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRy
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xl
YW5BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbUJvb2xlYW5BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbVVSTEF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tVVJMQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21VUkxBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbVVSTEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqRW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWNHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlU3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbnN0cnVj
dG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpY1NldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0
aWMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVHlwZWRBcnJheUF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqQ3VzdG9tQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDdXN0b21B
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakN1c3RvbUF0dHJTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ3VzdG9tQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpPbmZvb0dldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpP
bmZvbyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpPbmZvb1NldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpPbmZvbyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpPbndlYmtpdGZvb0dldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpPbndl
YmtpdGZvbyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb1NldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpPbndlYmtpdGZvbyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0cmlidXRlR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhFeGVjU3RhdGVBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZVNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmli
dXRlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNl
dHRlckNhbGxXaXRoQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
RXhlY1N0YXRlQXR0cmlidXRlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0
YXRlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0
aFNwYWNlc0F0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNw
YWNlc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIxR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMVNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyM0dldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjNTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3Ry
dWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjRDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVj
dG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjZDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1
dGUxR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTNHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpBbnlBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQW55QXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakFueUF0dHJpYnV0ZVNldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqT2JqZWN0QXR0cmlidXRlR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9iak9iamVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqT2JqZWN0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnRl
bnREb2N1bWVudEdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb250ZW50RG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak11dGFibGVQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnRTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialN0
cmF3YmVycnlHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU3RyYXdiZXJyeSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5U2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmF3YmVycnkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqSWRHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqSWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqSWRTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqSGFzaEdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmli
dXRlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRl
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRl
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJp
YnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0
YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZUxv
bmdTZXR0YWJsZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZVNl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRh
YmxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iak51bGxhYmxlVVNWU3Ry
aW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
TnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0
dGFibGVBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTnVsbGFi
bGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQXR0cmlidXRlR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9iakF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZVNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVt
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpUZXN0UmVhZE9ubHlWb2lkUHJvbWlz
ZUF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpUZXN0UmVhZE9u
bHlWb2lkUHJvbWlzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpUZXN0
UmVhZE9ubHlQcm9taXNlQXR0cmlidXRlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZVNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
akNvbmRpdGlvbmFsQW5kQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZUdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQW5kQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3Nl
ZFRvV2luZG93QXR0cmlidXRlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZVNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2lu
ZG93QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbmRpdGlvbmFsbHlF
eHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9Xb3JrZXJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uZGl0aW9u
YWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBv
c2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24xQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRp
b25PdmVybG9hZERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0aWNCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNX
b3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZEJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DYWxjdWxhdGVTZWNyZXRSZXN1
bHRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0
U2VjcmV0Qm9vbGVhbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW5Cb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZEJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3NCb2R5
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhv
ZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRl
TWV0aG9kV2l0aEFyZ3NCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT2N0ZXRNZXRob2RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJnc0JvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0JvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0
aG9kV2l0aEFyZ3NCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakluc3RhbmNlRnVu
Y3Rpb25VbmZvcmdlYWJsZU1ldGhvZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Jv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTdGF0
aWNNZXRob2RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25l
RW51bUFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0
VmFsdWVCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0JvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
dWxsYWJsZVVTVlN0cmluZ0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRl
U3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0JvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWVCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJlY29yZEJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoRXhjZXB0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1
cm5pbmdPYmplY3RCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ3VzdG9tTWV0aG9kQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2RCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhv
ZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRF
dmVudExpc3RlbmVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNTdGF0ZVZvaWRCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNTdGF0ZU9iakJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRl
Vm9pZEV4Y2VwdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqRXhjZXB0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Qm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhl
Y1N0YXRlT2JqRXhjZXB0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNw
YWNlc0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoRG9jdW1lbnRBcmd1bWVudEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRBcmd1bWVudEJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93QXJndW1l
bnRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQXJnQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZUJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25h
bEFyZ3NCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0JvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBdG9tU3RyaW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZUJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBdG9tU3RyaW5nQW5kRGVmYXVsdFZhbHVlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbEJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNOdWxsQm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0
eVN0cmluZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNFbXB0eVN0cmluZ0JvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxE
b3VibGVJc05hTkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nQm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbExvbmdMb25nSXNaZXJvQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdCb2R5
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVyb0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHlCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbkJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxC
b29sZWFuSXNGYWxzZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnlCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0Qm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbE51bGxhYmxlV3JhcHBlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGxCb2R5
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZEJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxQ
cm9taXNlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhDYWxsYmFja0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0Jv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0JvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9u
Q2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5k
T3B0aW9uYWxBcmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0JvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdp
dGhDYWxsYmFja0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0JvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kMkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kM0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNEJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNUJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kNkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kN0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOEJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOUJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
MTBCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDExQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTNCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZE92ZXJs
b2FkRGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIxQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXJPdmVybG9h
ZERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
RGlzdGluZ3Vpc2hpbmdVbmlvbjJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uT3Zl
cmxvYWREaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMxQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGlu
Z1VuaW9uc092ZXJsb2FkRGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlv
bjFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMkJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5v
bkRpc3Rpbmd1aXNoaW5nVW5pb25PdmVybG9hZERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMUJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZFdpdGhOdWxsYWJsZVVuaW9uMkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uT3ZlcmxvYWREaXNwYXRjaGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRX
aXRoT3B0aW9uYWxVbmlvbjFCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjJCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlv
bk92ZXJsb2FkRGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIx
Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxl
Tm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXJPdmVybG9hZERpc3BhdGNoZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RX
aXRoT3B0aW9uYWxCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25DbGFzc01ldGhvZDJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMU92ZXJsb2FkRGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wT25PcHRp
b25hbEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
bGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2VCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlT25PcHRpb25h
bEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2VCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbkJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0RnVuY3Rpb25C
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0
aW9uV2l0aE9wdGlvbmFsVW5pb25QYXJhbWV0ZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVl
bmNlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdl
dEVsZW1lbnRCeUlkQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkdldFNWR0RvY3VtZW50Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQ0Qm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2ludEZ1bmN0aW9uQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZUJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1N0cmlu
Z01ldGhvZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25WYXJpYWRpY0RvdWJsZU1ldGhvZEJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY05vZGVNZXRob2RCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZEJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5j
dGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnRCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNl
cHRpb25Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50Qm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRl
ZEZ1bmN0aW9uMUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJCb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rp
b25PdmVybG9hZERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25Cb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0
aW9uV2l0aEV4Y2VwdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUHJvbWlzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY0N1c3RvbVByb21pc2VG
dW5jdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0Q3VzdG9tUmV0dXJuc093blByb21pc2VGdW5jdGlvbkJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuc093blByb21pc2VBbmRQ
cm9taXNlUHJveHlGdW5jdGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMUJvZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMkJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92
ZXJsb2FkT3ZlcmxvYWREaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDFCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVy
bG9hZDJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZE92ZXJsb2FkRGlzcGF0Y2hlcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3RCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0
aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CdWZmZXJTb3VyY2VQYXJhbWV0ZXJCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTGVnYWN5Q2FsbGVyTmFtZWRC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFJl
dHVyblZhbHVlT3B0aW1pemF0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhFeGNlcHRpb25C
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0
aW9uYWxseUV4cG9zZWRUb1dpbmRvd0Z1bmN0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5j
dGlvbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
b25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb25Cb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iajo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czEpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczIpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczMpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yczQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yczUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXds
eUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UxKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0
eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJh
dGlvbjxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbUJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWls
dGlucy5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
TmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
UGx1Z2luSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBsdWdpbkludGVy
ZmFjZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFBsdWdp
bkludGVyZmFjZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RQ
bHVnaW5JbnRlcmZhY2U6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0UGx1
Z2luSW50ZXJmYWNlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0UGx1
Z2luSW50ZXJmYWNlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3Jl
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25hcnk8VGVzdFByb21pc2VSZWplY3Rpb25F
dmVudDo6SW5pdD4pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJRExBdHRyaWJ1
dGU8SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Pjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRQcm9taXNlR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb21pc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UmVhc29uR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFJlYXNvbik6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRl
PEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJh
dGlvbjxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJp
YnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25k
TG9uZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
U2Vjb25kTG9uZ0F0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNl
cmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRl
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJl
c3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2Vy
aWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91
YmxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0
aExvbmdBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXph
dGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRy
aWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvblNp
eHRoVHlwZWRlZkF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0
aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVu
dGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVj
dGx5QXR0cmlidXRlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRp
b25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25h
bERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJv
emVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFs
aXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2Vx
dWVuY2VBdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXph
dGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZh
Y2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJp
YWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRy
aWJ1dGVTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvblR3
ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2Vy
aWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQ+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJhdGlvbjxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdD46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdElu
aGVyaXRMb25nQXR0cmlidXRlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9k
eSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmli
dXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpjYXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2Fz
dCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29HZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZv
byk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
RmluYWxMb25nQXR0cmlidXRlRm9vU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28pOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJp
YnV0ZUJhckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJTZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZp
bmFsTG9uZ0F0dHJpYnV0ZUJhcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpjYXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2U+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVZhbHVlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDYWNoZWRWYWx1ZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZVNldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
YWNoZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQb3J0c0dldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNh
Y2hlZFJlYWRvbmx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25GdW5jdGlvblJldHVybmluZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05l
d2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNy
ZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFs
b25lRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxE
aWN0aW9uYXJ5SW1wbE5hbWU+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5
VG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RW51bWVyYXRpb25Ub0pTKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpF
bnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRFbnVtZXJhdGlvblRvSlMpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uPik6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVFbnVtZXJhdGlvbi5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXI+Ojpj
YXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24+OjpjYXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U3RyaW5naWZpZXJBbm9u
eW1vdXNPcGVyYXRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPjo6
Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0cmluZ2lm
aWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5cGVGdW5jdGlvbklkZW50aWZpZXJCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5cGVGdW5j
dGlvblRvU3RyaW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURMT3BlcmF0aW9uPEpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcz46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzUHJvdG90eXBlRnVuY3Rpb25JZGVudGlmaWVyQm9keSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5
cGVGdW5jdGlvblRvU3RyaW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVh
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRl
ZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVyYXRp
b248SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nPjo6Y2FzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlv
bk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMp
OgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRlPEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9u
bHlBdHRyaWJ1dGU+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJhdGlvbjxKU1Rl
c3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlPjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGVJZGVudGlmaWVyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keSk6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
ZmllclJlYWRPbmx5QXR0cmlidXRlLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJRExBdHRyaWJ1dGU8SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGU+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklETE9wZXJhdGlvbjxKU1Rlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT46OmNhc3QpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRl
SWRlbnRpZmllckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTdHJpbmdpZmllclJl
YWRXcml0ZUF0dHJpYnV0ZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVJZGVudGlmaWVyU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlSWRlbnRpZmll
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZVByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNO
ZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmg6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNy
ZWF0ZWQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25z
dHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6
Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+Ojpj
YXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0clNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVl
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNjcmlw
dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNj
cmlwdFZhbHVlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzQ29u
c3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVk
ZWZzQXR0cmlidXRlV2l0aENsYW1wR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5
cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5
cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVm
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0
aENsYW1wSW5UeXBlZGVmKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzQnVmZmVy
U291cmNlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc0J1ZmZl
clNvdXJjZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNCdWZmZXJT
b3VyY2VBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzQnVm
ZmVyU291cmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc0RvbVRpbWVT
dGFtcEF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNEb21UaW1l
U3RhbXBBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzRG9tVGltZVN0
YW1wQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc0RvbVRp
bWVTdGFtcEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbkZ1bmNCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25TZXRTaGFkb3dCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVuY2VBcmdCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNl
QXJnQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0Jv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51
bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZ0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9uQXJnQm9keSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xh
bXBJblR5cGVkZWZCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25Qb2ludEZ1bmN0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbkJvZHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVl
bmNlRnVuY3Rpb24yQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGVCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
RXhjZXB0aW9uQm9keSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RUeXBlZGVmcy5oOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQuaWRsOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OmdldExpc3RGcm9tVmFyaWFudEFyZ3MpOgorICAgICAgICAqIGJyaWRn
ZS9jL2NfaW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpt
b3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Q0luc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNS
dW50aW1lTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNl
OjpnZXRNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VN
ZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VEZWZhdWx0
TWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlQ29uc3Ry
dWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6c3RyaW5nVmFsdWUgY29u
c3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpudW1iZXJWYWx1ZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OnZhbHVlT2YgY29uc3QpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjp0b0pTUHJpbWl0aXZlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9jL2NfcnVu
dGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6OnZhbHVlRnJvbUluc3Rh
bmNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNGaWVsZDo6c2V0VmFsdWVUb0lu
c3RhbmNlIGNvbnN0KToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3J1bnRpbWUuaDoKKyAgICAgICAg
KiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVy
dFZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5QVmFy
aWFudFRvVmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6aWRlbnRpZmllckZyb21OUElk
ZW50aWZpZXIpOgorICAgICAgICAqIGJyaWRnZS9jL2NfdXRpbGl0eS5oOgorICAgICAgICAqIGJy
aWRnZS9qc2MvQnJpZGdlSlNDLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3RhbmNl
OjpjcmVhdGVSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3RhbmNl
OjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2UvanNjL0JyaWRnZUpTQy5oOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdCk6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6Okluc3RhbmNlOjpwdXQpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL1dlYlNj
cmlwdE9iamVjdC5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFkZEV4Y2VwdGlvblRvQ29uc29sZSk6
CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBfaXNTYWZlU2NyaXB0XSk6CisgICAgICAgICgt
W1dlYlNjcmlwdE9iamVjdCBfZ2xvYmFsQ29udGV4dFJlZl0pOgorICAgICAgICAoZ2V0TGlzdEZy
b21OU0FycmF5KToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRo
b2Q6d2l0aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRl
V2ViU2NyaXB0Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0VmFsdWU6Zm9yS2V5
Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgdmFsdWVGb3JLZXk6XSk6CisgICAgICAg
ICgtW1dlYlNjcmlwdE9iamVjdCByZW1vdmVXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dl
YlNjcmlwdE9iamVjdCBoYXNXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9i
amVjdCBzdHJpbmdSZXByZXNlbnRhdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qg
d2ViU2NyaXB0VmFsdWVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0
V2ViU2NyaXB0VmFsdWVBdEluZGV4OnZhbHVlOl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmpl
Y3QgSlNPYmplY3RdKToKKyAgICAgICAgKCtbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVU
b09iamNWYWx1ZTpvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYnJp
ZGdlL29iamMvb2JqY19jbGFzcy5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfY2xhc3Mu
bW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjQ2xhc3M6OmZhbGxiYWNrT2JqZWN0KToK
KyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLmg6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY19pbnN0YW5jZS5tbToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6bmV3UnVudGlt
ZU9iamVjdCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4
ZWNTdGF0ZSk6CisgICAgICAgIChPYmpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAg
KE9iamNJbnN0YW5jZTo6aW52b2tlTWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6aW52
b2tlT2JqY01ldGhvZCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRo
b2QpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQpOgor
ICAgICAgICAoT2JqY0luc3RhbmNlOjpnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQgY29uc3QpOgor
ICAgICAgICAoT2JqY0luc3RhbmNlOjpkZWZhdWx0VmFsdWUgY29uc3QpOgorICAgICAgICAoT2Jq
Y0luc3RhbmNlOjpzdHJpbmdWYWx1ZSBjb25zdCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6Om51
bWJlclZhbHVlIGNvbnN0KToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6dmFsdWVPZiBjb25zdCk6
CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmNyZWF0ZSk6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZpZWxk
Ojp2YWx1ZUZyb21JbnN0YW5jZSBjb25zdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252
ZXJ0VmFsdWVUb09iamNPYmplY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZpZWxk
OjpzZXRWYWx1ZVRvSW5zdGFuY2UgY29uc3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2Jq
Y0FycmF5OjpzZXRWYWx1ZUF0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNB
cnJheTo6dmFsdWVBdCBjb25zdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmFsbGJh
Y2tPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnB1dCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpj
YWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxs
YmFja09iamVjdEltcDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjp0b0Jvb2xlYW4gY29uc3QpOgorICAgICAgICAq
IGJyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNf
dXRpbGl0eS5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvT2JqY1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OnRocm93RXJyb3IpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1l
X2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkpOgor
ICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChKU0M6
OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJ1bnRp
bWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5
OjpwdXQpOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OnB1dEJ5SW5kZXgpOgorICAgICAg
ICAoSlNDOjpSdW50aW1lQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6UnVu
dGltZUFycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAqIGJyaWRnZS9ydW50
aW1lX2FycmF5Lmg6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0
aG9kOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoSlNDOjpSdW50aW1lTWV0aG9kOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpjYWxsUnVudGltZU1ldGhvZCk6CisgICAgICAg
ICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmg6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OmZhbGxiYWNr
T2JqZWN0R2V0dGVyKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OmZp
ZWxkR2V0dGVyKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6Om1ldGhv
ZEdldHRlcik6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6cHV0
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OmRlZmF1bHRWYWx1ZSk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjYWxsUnVudGltZU9iamVjdCk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpjYWxsUnVudGltZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlJ1bnRpbWVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6UnVudGltZU9iamVjdDo6dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IpOgorICAg
ICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5oOgorICAgICAgICAqIGJyaWRnZS90ZXN0Ymlu
ZGluZ3MuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogYnJpZGdlL3Rlc3RiaW5kaW5n
cy5tbToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25QYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OmdldFN0cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmdldERvbWFpbkxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Omdl
dFR5cGVGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZFRy
aWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkRW5jb2RlZFJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAg
KiBjcnlwdG8vU3VidGxlQ3J5cHRvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSGFzaElkZW50
aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVDcnlwdG86OmVuY3J5cHQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3VidGxlQ3J5cHRvOjpkZWNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlN1
YnRsZUNyeXB0bzo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVDcnlwdG86OnZlcmlm
eSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVDcnlwdG86OmRpZ2VzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdWJ0bGVDcnlwdG86OmdlbmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlN1
YnRsZUNyeXB0bzo6ZGVyaXZlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnRsZUNyeXB0bzo6
ZGVyaXZlQml0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVDcnlwdG86OmltcG9ydEtleSk6
CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVDcnlwdG86OndyYXBLZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6U3VidGxlQ3J5cHRvOjp1bndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVD
cnlwdG8uaDoKKyAgICAgICAgKiBjcnlwdG8vU3VidGxlQ3J5cHRvLmlkbDoKKyAgICAgICAgKiBj
c3MvQ1NTRm9udEZhY2UuaDoKKyAgICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVs
ZW1lbnRRdWV1ZTo6cHJvY2Vzc1F1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzUXVldWUpOgorICAgICAgICAqIGRvbS9DdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0
aW9uU3RhY2s6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNob3VsZEJ5cGFzc01haW5X
b3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6YWRkTWVzc2FnZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICog
ZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2hhZG93Um9vdEZv
ckJpbmRpbmdzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmFuaW1hdGUpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnQuaWRsOgorICAg
ICAgICAqIGRvbS9FcnJvckV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVycm9yRXZlbnQ6
OmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVycm9yRXZlbnQ6OnRyeVNlcmlhbGl6ZUVycm9y
KToKKyAgICAgICAgKiBkb20vRXJyb3JFdmVudC5oOgorICAgICAgICAqIGRvbS9FcnJvckV2ZW50
LmlkbDoKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuaDoK
KyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuaWRsOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50UXVpcmsp
OgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgICogZG9tL01vdXNlRXZlbnQu
aWRsOgorICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBvcFN0YXRlRXZlbnQ6OnRyeVNlcmlhbGl6ZVN0YXRlKToKKyAgICAgICAgKiBkb20vUG9wU3Rh
dGVFdmVudC5oOgorICAgICAgICAqIGRvbS9SZWplY3RlZFByb21pc2VUcmFja2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21SZWFzb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVqZWN0ZWRQcm9taXNlVHJhY2tlcjo6cHJvbWlzZVJlamVjdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlamVjdGVkUHJvbWlzZVRyYWNrZXI6OnByb21pc2VIYW5kbGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlamVjdGVkUHJvbWlzZVRyYWNrZXI6OnJlcG9ydFVuaGFuZGxl
ZFJlamVjdGlvbnMpOgorICAgICAgICAqIGRvbS9SZWplY3RlZFByb21pc2VUcmFja2VyLmg6Cisg
ICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVwb3J0VW5oYW5kbGVkUHJvbWlzZVJlamVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjphZGRDb25zb2xl
TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpleGVj
U3RhdGUpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAgICAg
ICogZG9tL21ha2VfZXZlbnRfZmFjdG9yeS5wbDoKKyAgICAgICAgKGdlbmVyYXRlSW1wbGVtZW50
YXRpb24pOgorICAgICAgICAqIGRvbWppdC9ET01KSVRIZWxwZXJzLmg6CisgICAgICAgIChXZWJD
b3JlOjpET01KSVQ6OnRvV3JhcHBlclNsb3cpOgorICAgICAgICAqIGRvbWppdC9ET01KSVRJRExD
b252ZXJ0Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OkRpcmVjdENvbnZlcnRlcjxJRExE
T01TdHJpbmc+OjpkaXJlY3RDb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUpJVDo6RGly
ZWN0Q29udmVydGVyPElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+OjpkaXJlY3RD
b252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUpJVDo6RGlyZWN0Q29udmVydGVyPElETFJl
cXVpcmVzRXhpc3RpbmdBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+Pjo6ZGlyZWN0Q29u
dmVydCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9I
VE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6c2V0TG9jYXRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udHJvbGxlckpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6c2V0dXBBbmRDYWxsSlMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0Q29udHJvbGxlckpTUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xz
QWZ0ZXJQcmVzZW50YXRpb25Nb2RlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKToKKyAgICAgICAgKiBodG1s
L0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRk
VXNlckFnZW50U2hhZG93Um9vdCk6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpnZXRDb250ZXh0KToKKyAgICAg
ICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5oOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2Fu
dmFzLmlkbDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFueS5oOgorICAgICAgICAqIGh0
bWwvdHJhY2svRGF0YUN1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjp2YWx1ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjpzZXRWYWx1ZSk6CisgICAgICAgICog
aHRtbC90cmFjay9EYXRhQ3VlLmg6CisgICAgICAgICogaHRtbC90cmFjay9EYXRhQ3VlLmlkbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpD
b21tYW5kTGluZUFQSUhvc3Q6OmdldEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbW1hbmRMaW5lQVBJSG9zdDo6SW5zcGVjdGFibGVPYmplY3Q6OmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3RlZE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6OndyYXBwZXIpOgorICAgICAgICAqIGluc3BlY3Rv
ci9Db21tYW5kTGluZUFQSUhvc3QuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29tbWFuZExpbmVB
UElIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29tbWFuZExpbmVBUElNb2R1bGU6Omhvc3QgY29uc3QpOgor
ICAgICAgICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZS5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2FudmFzOjpyZXNvbHZlQ29udGV4dCBjb25zdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNhbkFjY2Vzc0luc3Bl
Y3RlZFNjcmlwdFN0YXRlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjphZGRTZWxmVG9HbG9i
YWxPYmplY3RJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9z
dDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkUG9zdE1lc3NhZ2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Y29uc29sZUNvdW50SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudFJlc2V0SW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZ0ltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2dDb25zb2xlVGlt
aW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0
b3BDb25zb2xlVGltaW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnN0YXJ0UHJvZmlsaW5nSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzSW1w
bCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQb3N0TWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVD
b3VudFJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c3RhcnRDb25zb2xlVGltaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6bG9nQ29uc29sZVRpbWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2Fu
dmFzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6aXNDb250ZW50U2NyaXB0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVwb3J0RXhj
ZXB0aW9uIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVy
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL1dlYkluamVjdGVkU2NyaXB0SG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJJbmplY3RlZFNjcmlwdEhvc3Q6OnN1YnR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpv
YmplY3RGb3JQYXltZW50T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RGb3JQYXlt
ZW50Q3VycmVuY3lBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudEl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudFNoaXBwaW5nT3B0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Om9iamVjdEZvclBheW1lbnREZXRhaWxzTW9kaWZpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6b2JqZWN0Rm9yUGF5bWVudERldGFpbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9XZWJJbmplY3RlZFNjcmlwdEhvc3QuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvV2ViSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYklu
amVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0c0Zvcik6CisgICAgICAg
ICogaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXI6OnJlcG9ydEV4Y2VwdGlvbiBjb25zdCk6CisgICAgICAgICog
aW5zcGVjdG9yL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6Zm9jdXNOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2ViU29j
a2V0QXNTY3JpcHRWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JU
aW1lbGluZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OnN0YXJ0RnJvbUNvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6c3RvcEZyb21Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZSk6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9XZWJDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29uc29sZUFn
ZW50OjpmcmFtZVdpbmRvd0Rpc2NhcmRlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9X
ZWJEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkRlYnVnZ2VyQWdlbnQ6
OmRpZEFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViRGVidWdnZXJBZ2Vu
dDo6ZGlkUG9zdE1lc3NhZ2UpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdn
ZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0
T2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25M
b2cpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZURlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0
Rm9yRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlRGVidWdnZXJBZ2VudDo6ZGlkUmVxdWVz
dEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURl
YnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRp
bWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlUnVudGltZUFnZW50OjppbmplY3Rl
ZFNjcmlwdEZvckV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRpbWVBZ2VudDo6cmVw
b3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VSdW50
aW1lQWdlbnQ6Om5vdGlmeUNvbnRleHRDcmVhdGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXVk
aXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKToK
KyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5k
b3c6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6c2V0VGltZW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNldEludGVydmFsKToKKyAgICAgICAg
KiBwYWdlL0RPTVdpbmRvdy5oOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAg
ICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VD
b25zb2xlQ2xpZW50OjphZGRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xl
Q2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q29uc29sZUNsaWVudDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGll
bnQ6OmNvdW50UmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnByb2ZpbGVFbmQp
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25hcHNob3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnRpbWVMb2cpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUNvbnNvbGVDbGllbnQ6OnRpbWVFbmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNv
bGVDbGllbnQ6OnRpbWVTdGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVu
dDo6cmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpyZWNvcmRF
bmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgor
ICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL1JlbW90
ZURPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdGVET01XaW5kb3c6OnBvc3RN
ZXNzYWdlKToKKyAgICAgICAgKiBwYWdlL1JlbW90ZURPTVdpbmRvdy5oOgorICAgICAgICAqIHBh
Z2UvUmVtb3RlRE9NV2luZG93LmlkbDoKKyAgICAgICAgKiBwYWdlL1dpbmRvd09yV29ya2VyR2xv
YmFsU2NvcGUuaWRsOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93RXZhbCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFZp
b2xhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6
OmxvZ1RvQ29uc29sZSBjb25zdCk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50
YXRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmg6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9iYWxEYXRhOjpjdXJyZW50U3Rh
dGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkR2xvYmFsRGF0YTo6VGhyZWFkR2xv
YmFsRGF0YTo6c2V0Q3VycmVudFN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
dXN0b21QYWludEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6
OmRvQ3VzdG9tUGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL0NETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9TZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5oOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9TZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjOjpkZXNl
cmlhbGl6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja0JveC5jcHA6Cisg
ICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oOgorICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGFyc2VyTWV0YURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjppc0Zyb21DdXJyZW50V29ybGQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjppc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6Y2xvbmVBcnJheUJ1ZmZlcik6CisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5p
ZGw6CisgICAgICAgICogdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdCk6CisgICAgICAgICogd29y
a2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAqIHdvcmtl
cnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaDoKKyAgICAgICAgKiB3b3JrZXJzL0RlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlLmlkbDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlci5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyLmlkbDoKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlckNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyQ29uc29sZUNsaWVudDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29uc29sZUNsaWVudDo6Y291bnRSZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb25z
b2xlQ2xpZW50Ojp0aW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnNvbGVDbGllbnQ6
OnRpbWVMb2cpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29uc29sZUNsaWVudDo6dGltZUVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb25zb2xlQ2xpZW50Ojpwcm9maWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnNvbGVDbGllbnQ6OnByb2ZpbGVFbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29uc29sZUNsaWVudDo6dGFrZUhlYXBTbmFwc2hvdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJDb25zb2xlQ2xpZW50Ojp0aW1lU3RhbXApOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29uc29sZUNsaWVudDo6cmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckNvbnNvbGVDbGllbnQ6OnJlY29yZEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNv
bnNvbGVDbGllbnQuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjpzZXRUaW1lb3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6YWRkTWVzc2FnZSk6CisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXJHbG9iYWxTY29wZS5oOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9FeHRlbmRh
YmxlRXZlbnQuY3BwOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9FeHRlbmRhYmxlTWVzc2Fn
ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGFibGVNZXNzYWdlRXZlbnQ6OkV4
dGVuZGFibGVNZXNzYWdlRXZlbnQpOgorICAgICAgICAqIHdvcmtlcnMvc2VydmljZS9FeHRlbmRh
YmxlTWVzc2FnZUV2ZW50Lmg6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL0ZldGNoRXZlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hFdmVudDo6cHJvbWlzZUlzU2V0dGxlZCk6Cisg
ICAgICAgICogd29ya2xldHMvUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnJlZ2lzdGVyUGFpbnQpOgorICAgICAg
ICAqIHdvcmtsZXRzL1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmg6CisgICAgICAgICogd29ya2xl
dHMvUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaWRsOgorICAgICAgICAqIHdvcmtsZXRzL1dvcmts
ZXRDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtsZXRDb25zb2xlQ2xp
ZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrbGV0
Q29uc29sZUNsaWVudDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2xldENvbnNvbGVD
bGllbnQ6OmNvdW50UmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2xldENvbnNvbGVDbGll
bnQ6OnRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2xldENvbnNvbGVDbGllbnQ6OnRpbWVM
b2cpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2xldENvbnNvbGVDbGllbnQ6OnRpbWVFbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2xldENvbnNvbGVDbGllbnQ6OnByb2ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2xldENvbnNvbGVDbGllbnQ6OnByb2ZpbGVFbmQpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2xldENvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25hcHNob3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2xldENvbnNvbGVDbGllbnQ6OnRpbWVTdGFtcCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrbGV0Q29uc29sZUNsaWVudDo6cmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtsZXRDb25zb2xlQ2xpZW50OjpyZWNvcmRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2xldENvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHdvcmtsZXRzL1dvcmts
ZXRDb25zb2xlQ2xpZW50Lmg6CisgICAgICAgICogd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3Bl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtsZXRHbG9iYWxTY29wZTo6YWRkTWVzc2FnZSk6
CisgICAgICAgICogd29ya2xldHMvV29ya2xldEdsb2JhbFNjb3BlLmg6CisgICAgICAgICogd29y
a2xldHMvV29ya2xldFNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2xldFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmts
ZXRTY3JpcHRDb250cm9sbGVyOjpzZXRFeGNlcHRpb24pOgorCisyMDE5LTEwLTE2ICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDbGlwYm9hcmQgQVBJ
XSBbaU9TXSBSZWZhY3RvciBsb2dpYyBmb3Igc3VwcHJlc3NpbmcgVVJMIGRhdGEgd2hlbiB0aGUg
cGFzdGVib2FyZCBtYXkgY29udGFpbiBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhv
cnRvbi4KKworICAgICAgICBQbGF0Zm9ybS1zcGVjaWZpYyBwYXN0ZWJvYXJkIHJlZmFjdG9yaW5n
IGJlZm9yZSB0YWNrbGluZyB3ZWJraXQub3JnL2IvMjAzMDIxLiBTZWUgYmVsb3cgZm9yIGRldGFp
bHMuIE5vIG5ldworICAgICAgICB0ZXN0cywgYXMgdGhlcmUgaXMgbm8gY2hhbmdlIGluIGJlaGF2
aW9yLgorCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6Y2hhbmdlQ291bnQgY29uc3QpOgorCisgICAgICAgIEFkZCBhIHN0dWIg
Zm9yIFBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkgb24gbm9uLUNvY29hIHBsYXRmb3Jtcy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAg
IChXZWJDb3JlOjpzYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlRm9yUGxhdGZvcm1UeXBlKToK
KworICAgICAgICBNb3ZlIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGZhcnRoZXIgdXAgdGhlIGZpbGUs
IHNvIGl0IGNhbiBiZSB1c2VkIGluIG1vcmUgcGxhY2VzLgorCisgICAgICAgIChXZWJDb3JlOjp3
ZWJTYWZlVHlwZXMpOgorCisgICAgICAgIEFkZCBhIHNlcGFyYXRlIGhlbHBlciB0byBjb21wdXRl
IHRoZSBsaXN0IG9mIHdlYi1zYWZlIE1JTUUgdHlwZXMgKGZvciBpbnN0YW5jZSwgInRleHQvcGxh
aW4iKSBnaXZlbiBhIGxpc3Qgb2YKKyAgICAgICAgcGxhdGZvcm0gdHlwZXMsIGFuZCBhIGZ1bmN0
aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGF2b2lkIGV4cG9zaW5nIGEgZ2l2ZW4gVVJMIHRv
IHRoZSBET00uCisKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFRyZWF0QXRMZWFzdE9uZVR5cGVB
c0ZpbGUpOgorCisgICAgICAgIFNwbGl0IHRoaXMgb3V0IGludG8gYSBzZXBhcmF0ZSBoZWxwZXIg
ZnVuY3Rpb24sIHNvIHRoYXQgaXQgY2FuIGJlIGludm9rZWQgd2hlbiBkZXRlcm1pbmluZyB3aGV0
aGVyIGEgZ2l2ZW4KKyAgICAgICAgTlNJdGVtUHJvdmlkZXIgaXMgc3VzcGVjdGVkIHRvIGNvbnRh
aW4gZmlsZSBwYXRocy4gSW4gdGhlIGNhc2Ugd2hlcmUgd2UncmUgZ2V0dGluZyB0aGUgZnVsbCBs
aXN0IG9mIHR5cGVzIHRoYXQKKyAgICAgICAgYXJlIHNhZmUgZm9yIHRoZSBET00gdG8gcmVhZCwg
d2Ugd2FudCB0byBwYXNzIGluIHRoZSBlbnRpcmUgcGFzdGVib2FyZCBvYmplY3QgYW5kIGl0ZXJh
dGUgdGhyb3VnaCBhbGwgb2YgdGhlCisgICAgICAgIGF2YWlsYWJsZSB0eXBlcyBpbiBzZWFyY2gg
Zm9yIHNvbWV0aGluZyB0aGF0IGNvdWxkIGZlYXNpYmx5IGFjY29tcGFueSBhIGZpbGUgVVJMLgor
CisgICAgICAgIEluIHRoZSBjYXNlIG9mIGNvbXB1dGluZyB0aGUgd2ViLXNhZmUgdHlwZXMgcGVy
IGl0ZW0sIHdlIG9ubHkgaGF2ZSBhbiBpdGVtIHByb3ZpZGVyLCBpbiB3aGljaCBjYXNlIHdlIG9u
bHkKKyAgICAgICAgaXRlcmF0ZSB0aHJvdWdoIHRoZSB0eXBlcyBpbiB0aGF0IE5TSXRlbVByb3Zp
ZGVyLiBTZWUgY2FsbCBzaXRlcyBiZWxvdyBmb3IgZXhhbXBsZXMuCisKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRleCk6CisKKyAg
ICAgICAgSW52b2tlIHRoZSBuZXcgYHdlYlNhZmVUeXBlc2AgaGVscGVyIG1ldGhvZC4KKworICAg
ICAgICAoV2ViQ29yZTo6cGFzdGVib2FyZE1heUNvbnRhaW5GaWxlUGF0aHMpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0
ZSBjb25zdCk6CisKKyAgICAgICAgSW52b2tlIHRoZSBuZXcgYHdlYlNhZmVUeXBlc2AgaGVscGVy
IG1ldGhvZC4KKworMjAxOS0xMC0xNiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBbRlRXXSBDb3JyZWN0IHJhZGlhbCBncmFkaWVudCBoYW5kbGluZyBvZiB2
YXJpb3VzIHJhZGl1cyBvcmRlcmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMjgxNQorCisgICAgICAgIFJldmlld2VkIGJ5IFBlciBBcm5lIFZv
bGxhbi4KKworICAgICAgICBSZXZpc2UgdGhlICdnZW5lcmF0ZUdyYWRpZW50JyBpbXBsZW1lbnRh
dGlvbiB0byByZWNvZ25pemUgdGhhdCB0aGUKKyAgICAgICAgcmFkaXVzIGFyZ3VtZW50cyBtaWdo
dCBub3QgYmUgaW4gaW5jcmVhc2luZyBvcmRlci4gRGlyZWN0MkQncworICAgICAgICBpbXBsZW1l
bnRhdGlvbiBkb2VzIGV4cGVjdCB0aGlzLCBzbyB3ZSBuZWVkIHRvIHN3YXAgb3JkZXIgYW5kCisg
ICAgICAgIHJldmlzZSB0aGUgZ3JhZGllbnQgcmFuZ2UgdG8gbWF0Y2guCisKKyAgICAgICAgRHJp
dmUtYnkgZml4OiBTdG9wIGJ1aWxkaW5nIHVudXNlZCBpbWFnZSBkZWNvZGVycyBpZiBidWlsZGlu
ZyB3aXRoCisgICAgICAgIHRoZSBBcHBsZSBzdGFjay4KKworICAgICAgICAqIFBsYXRmb3JtRlRX
LmNtYWtlOiBTdG9wIGJ1aWxkaW5nIHVudXNlZCBpbWFnZSBkZWNvZGVycy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudCk6CisKKzIwMTktMTAtMTYgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgUGFnZUNhY2hlIHRvIEJh
Y2tGb3J3YXJkQ2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMzA0OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgUmVuYW1lIFBhZ2VDYWNoZSB0byBCYWNrRm9yd2FyZENhY2hlIGZvciBjbGFyaXR5
IGFuZCBjb25zaXN0ZW5jeSB3aXRoIHRoZSBVSVByb2Nlc3MncyBXZWJCYWNrRm9yd2FyZENhY2hl
LgorCisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6c3VzcGVuZCk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFS
ZWNvcmRlcjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbiBjb25zdCk6CisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbjo6c3VzcGVuZCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnN1
c3BlbmQpOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50
U3VzcGVuc2lvbiBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvV2luZG93UHJveHkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OmNsZWFySlNXaW5kb3dQcm94aWVzTm90
TWF0Y2hpbmdET01XaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dpbmRvd1Byb3h5Lmg6
CisgICAgICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpzY2hlZHVsZVN0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpuZWVkc1N0eWxlUmVjYWxjIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjppbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFuZEZvcmNlU3R5bGVS
ZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZVJlbmRlclRyZWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZEJlY29tZUN1cnJlbnREb2N1bWVudEluRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmF0dGFjaFRvQ2FjaGVkRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRldGFjaEZyb21DYWNoZWRGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJlcGFyZUZvckRlc3RydWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjphZGp1c3RGb2N1c2VkTm9kZU9uTm9kZVJlbW92YWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldEZvY3VzZWRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojp0YWtlRE9NV2luZG93RnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2V0QmFja0ZvcndhcmRDYWNoZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZXN1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRvcERvY3VtZW50IGNvbnN0KToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpiYWNrRm9yd2Fy
ZENhY2hlU3RhdGUgY29uc3QpOgorICAgICAgICAqIGRvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuTWFuYWdlcjo6d2lsbEVudGVyRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5NYW5hZ2VyOjp3aWxsRXhpdEZ1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxs
c2NyZWVuKToKKyAgICAgICAgKiBkb20vRnVsbHNjcmVlbk1hbmFnZXIuaDoKKyAgICAgICAgKiBk
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKToKKyAg
ICAgICAgKiBoaXN0b3J5L0JhY2tGb3J3YXJkQ2FjaGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6bG9nQmFj
a0ZvcndhcmRDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjYW5DYWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkNhY2hlUGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZENhY2hlOjpzaW5nbGV0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6QmFja0ZvcndhcmRDYWNoZTo6QmFja0ZvcndhcmRDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpCYWNrRm9yd2FyZENhY2hlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJh
Y2tGb3J3YXJkQ2FjaGU6OmNhbkNhY2hlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhY2tG
b3J3YXJkQ2FjaGU6OnBydW5lVG9TaXplTm93KToKKyAgICAgICAgKFdlYkNvcmU6OkJhY2tGb3J3
YXJkQ2FjaGU6OnNldE1heFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRDYWNo
ZTo6ZnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZENhY2hl
OjptYXJrUGFnZXNGb3JEZXZpY2VPclBhZ2VTY2FsZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QmFja0ZvcndhcmRDYWNoZTo6bWFya1BhZ2VzRm9yQ29udGVudHNTaXplQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZENhY2hlOjptYXJrUGFnZXNGb3JDYXB0aW9uUHJl
ZmVyZW5jZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEJhY2tGb3J3YXJkQ2FjaGVT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZENhY2hlOjphZGRJZkNhY2hlYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZENhY2hlOjp0YWtlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhY2tGb3J3YXJkQ2FjaGU6OnJlbW92ZUFsbEl0ZW1zRm9yUGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZENhY2hlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6
QmFja0ZvcndhcmRDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhY2tGb3J3YXJk
Q2FjaGU6OnBydW5lKToKKyAgICAgICAgKiBoaXN0b3J5L0JhY2tGb3J3YXJkQ2FjaGUuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmguCisgICAgICAgICog
aGlzdG9yeS9DYWNoZWRGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZUJh
c2U6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OkNhY2hlZEZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1lOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRGcmFtZTo6ZGVzdHJveSk6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRGcmFt
ZVBsYXRmb3JtRGF0YS5oOgorICAgICAgICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNldENhY2hlZFBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SGlzdG9yeUl0ZW06OnNldFVSTCk6CisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5SXRl
bS5oOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OmlzSW5CYWNrRm9yd2FyZENhY2hl
IGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpyZXN1bWUpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpj
cmVhdGVFbGVtZW50UmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFNvdXJjZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNvdXJjZUVsZW1lbnQ6OnN1c3BlbmQpOgorICAg
ICAgICAqIGh0bWwvTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUVsZW1lbnRTZXNzaW9uOjphdXRvcGxheVBlcm1pdHRlZCBjb25zdCk6CisgICAgICAgICog
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyOjphZGRTdWJyZXNvdXJjZUxvYWRlcik6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmg6CisgICAgICAgICogbG9hZGVyL0VtcHR5RnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmNsb3NlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjbGVhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN0b3BGb3JCYWNrRm9yd2FyZENhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXI6OmZyYW1lRGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRldGFj
aEZyb21QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlY2VpdmVkTWFp
blJlc291cmNlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNob3VsZFBl
cmZvcm1GcmFnbWVudE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OmRpc3BhdGNoVW5sb2FkRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpj
b250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbSk6CisgICAgICAg
ICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgICogbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGVUb0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29u
dHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yUmVsb2FkKToKKyAgICAgICAgKiBsb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25DYWNoZUhvc3Q6OmNhbkNhY2hlSW5CYWNrRm9yd2FyZENhY2hlKToKKyAgICAg
ICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaDoKKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6OmxvYWQpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVdpbmRvdzo6c3VzcGVuZEZvckJhY2tGb3J3YXJkQ2FjaGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZXN1bWVGcm9tQmFja0ZvcndhcmRDYWNoZSk6CisgICAg
ICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmRlY3JlbWVudFNjcm9sbEV2ZW50TGlzdGVuZXJzQ291
bnQpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5k
b3dFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93RXh0ZW5zaW9uOjpz
dXNwZW5kRm9yQmFja0ZvcndhcmRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3dF
eHRlbnNpb246OnJlc3VtZUZyb21CYWNrRm9yd2FyZENhY2hlKToKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvd0V4dGVuc2lvbi5oOgorICAgICAgICAqIHBhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6YmFja0Zvcndh
cmRDYWNoZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmJh
Y2tGb3J3YXJkQ2FjaGVGYWlsdXJlS2V5KToKKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dn
aW5nS2V5cy5oOgorICAgICAgICAqIHBhZ2UvRXZlbnRTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRTb3VyY2U6OnNjaGVkdWxlUmVjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50U291cmNlOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRTb3VyY2U6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNl
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRG
YWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjphYm9ydENvbm5lY3Rpb25BdHRl
bXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRT
b3VyY2U6OmRpc3BhdGNoTWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNl
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
c2V0Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0RG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OndpbGxEZXRhY2hQYWdlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmRpZFJlc3RvcmVGcm9tQmFj
a0ZvcndhcmRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldENvbnRlbnRz
U2l6ZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlld0xheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0
Q29udGV4dDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlld0xheW91dENvbnRl
eHQ6OnNjaGVkdWxlTGF5b3V0KToKKyAgICAgICAgKiBwYWdlL01lbW9yeVJlbGVhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZUNyaXRpY2FsTWVtb3J5KToKKyAgICAgICAgKFdlYkNv
cmU6OnJlbGVhc2VNZW1vcnkpOgorICAgICAgICAqIHBhZ2UvTWVtb3J5UmVsZWFzZS5oOgorICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp+UGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRWaWV3U2NhbGVGYWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAqIHBhZ2UvUGFnZS5o
OgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VH
cm91cDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCk6CisgICAgICAgICogcGFnZS9QZXJmb3Jt
YW5jZUxvZ2dpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2VMb2dnaW5nOjpt
ZW1vcnlVc2FnZVN0YXRpc3RpY3MpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MueWFtbDoKKyAg
ICAgICAgKiBwYWdlL1NldHRpbmdzQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5n
c0Jhc2U6OnVzZXNCYWNrRm9yd2FyZENhY2hlQ2hhbmdlZCk6CisgICAgICAgICogcGFnZS9TZXR0
aW5nc0Jhc2UuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnNldE5lZWRzU3R5bGVSZWNhbGMpOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGlj
aXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXZlbnQpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0
aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5p
bWF0aW9uOjpzZW5kQW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0Fz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6bm90aWZ5Q29udGVudEFyZWFTY3JvbGxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEFkZFNjcm9s
bGluZ0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6Y29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3NGb3JDdXJyZW50
UGFnZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRl
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OmNsZWFyQmFja0ZvcndhcmRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRl
cm5hbHM6OmJhY2tGb3J3YXJkQ2FjaGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6cHJldmVudERvY3VtZW50Rm9yRW50ZXJpbmdCYWNrRm9yd2FyZENhY2hlKToKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxz
LmlkbDoKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MSHR0cFJlcXVlc3Q6OnN1c3BlbmQpOgorCisyMDE5LTEwLTE2ICBKb2huIFdpbGFuZGVy
ICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGlj
cyAoZXhwZXJpbWVudGFsKTogQmxvY2sgYWxsIHRoaXJkLXBhcnR5IGNvb2tpZXMgb24gd2Vic2l0
ZXMgd2l0aG91dCBwcmlvciB1c2VyIGludGVyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMwMTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzU2MjYyNzA4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAg
ICAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzaG91bGRCbG9ja0Nvb2tpZXMoKSBub3cgY2hl
Y2tzIGlmIHRoZSBmaXJzdC1wYXJ0eSB3ZWJzaXRlIGhhcworICAgICAgICByZWNlaXZlZCB1c2Vy
IGludGVyYWN0aW9uIGFuZCBpZiBub3QsIGJsb2NrcyBhbGwgdGhpcmQtcGFydHkgY29va2llcywg
cmVnYXJkbGVzcyBvZiB0aGUKKyAgICAgICAgc3RhdHVzIG9mIHRob3NlIHRoaXJkLXBhcnR5IGRv
bWFpbnMgKHByZXZhbGVudCBvciBub3QpLgorCisgICAgICAgIEJ1bmRsZWQgY2xlYW51cCB0YXNr
OiBSZW1vdmUgdGhlIHR3byBtb250aCBvbGQgZmVhdHVyZSBmbGFnIGZvciBOU1VSTFNlc3Npb24g
c3dpdGNoaW5nLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MvdGhpcmQtcGFydHktY29va2llLWJsb2NraW5nLW9uLXNpdGVzLXdpdGhvdXQtdXNlci1p
bnRlcmFjdGlvbi1kYXRhYmFzZS5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvdGhpcmQtcGFydHktY29va2llLWJsb2NraW5nLW9uLXNpdGVzLXdp
dGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCisKKyAgICAgICAgKiBwYWdlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNldElzSVRQU2Vzc2lvblN3aXRjaGluZ0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNJVFBTZXNzaW9uU3dpdGNoaW5nRW5hYmxl
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9TZXR0aW5ncy55YW1sOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6aGFzSGFkVXNlckludGVyYWN0aW9uQXNG
aXJzdFBhcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c2hvdWxkQmxvY2tDb29raWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c2V0RG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldElzVGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25FbmFibGVkKToKKworMjAx
OS0xMC0xNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNd
W0lGQ10gQWRkIHN0eWxlIGFuZCB0ZXh0IGNvbnRlbnQgdG8gRGlzcGxheTo6UnVuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMwNDUKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzU2MzQwMTA1PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtv
aXZpc3RvLgorCisgICAgICAgIFBhaW50aW5nIERpc3BsYXk6OlJ1bnMgcmVxdWlyZXMgc3R5bGUg
YW5kIHRleHQgY29udGVudC4gQ3VycmVudGx5IHRoZXJlJ3Mgbm8gbWFwcGluZyBzdHJ1Y3R1cmUg
dG8gY29ubmVjdCBEaXNwbGF5OjpSdW5zIHRvIERpc3BsYXk6OkJveGVzIHRvIGFjY2VzcyBzdHls
ZSBhbmQgY29udGVudC4KKworICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVu
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpSdW46OlRleHRDb250ZXh0Ojpjb250ZW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlJ1bjo6c3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UnVuOjpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dDo6VGV4dENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dDo6ZXhwYW5kKToKKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZTo6YXBwZW5kTm9uQnJlYWthYmxlU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjphcHBlbmRUZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6YXBwZW5kSGFyZExpbmVCcmVhayk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
OjpSdW46OmV4cGFuZCk6CisKKzIwMTktMTAtMTYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGR1bXBpbmcgZm9yIEJvcmRlckRhdGEgYW5kIFN0
eWxlQmFja2dyb3VuZERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMzAzOAorCisgICAgICAgIFJldmlld2VkIGJ5IFphbGFuIEJ1anRhcy4KKwor
ICAgICAgICBBcyBwYXJ0IG9mIGFkZGluZyBkdW1waW5nIGZvciBhbGwgUmVuZGVyU3R5bGUgZGF0
YSwgYWRkIGR1bXBpbmcgc3VwcG9ydCBmb3IgCisgICAgICAgIEJvcmRlckRhdGEgYW5kIFN0eWxl
QmFja2dyb3VuZERhdGEuCisgICAgICAgIAorICAgICAgICBGb3IgbGFyZ2UgY2xhc3NlcyBpdCdz
IGJlbmVmaWNpYWwgdG8gYXZvaWQgZHVtcGluZyBkZWZhdWx0IHZhbHVlczsgdGhvc2UgY2xhc3Nl
cworICAgICAgICBnZXQgYSBkdW1wKCkgZnVuY3Rpb24gdGhhdCBjYW4gdGFrZSBhbiBhcmd1bWVu
dCB0byBzYXkgd2hldGhlciB2YWx1ZXMgd2hpY2ggYXJlIGRlZmF1bHQKKyAgICAgICAgc2hvdWxk
IGJlIHByaW50ZWQuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoU2l6
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGVuZ3RoU2l6ZTo6aXNaZXJvIGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJEYXRhOjpkdW1wIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5oOgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQmFja2dyb3VuZERhdGE6OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0
b3I8PCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaDoK
KwogMjAxOS0xMC0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFtXSzJdIEhhbmRsZSBiYWNrL2ZvcndhcmQgY2FjaGUgZW50cnkgZXhwaXJhdGlvbiBpbiB0aGUg
VUlQcm9jZXNzIGluc3RlYWQgb2YgdGhlIFdlYlByb2Nlc3MKQEAgLTQwLDcgKzM3NjYsOCBAQAog
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzZXRBc2NlbnRJZkdyZWF0ZXIpOgog
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzZXREZXNjZW50SWZHcmVhdGVyKToK
ICAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6cmVzZXRCYXNlbGluZSk6Ci0gICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldEJhc2VsaW5lKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OgorICAgICAgICBMYXlvdXQ6OkxpbmVCb3g6OnNldEJhc2VsaW5lKTog
RGVsZXRlZC4KICAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6YmFzZWxpbmUpOiBE
ZWxldGVkLgogICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzZXRCYXNlbGluZU9m
ZnNldCk6IERlbGV0ZWQuCiAgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OkJhc2Vs
aW5lOjpzZXRBc2NlbnRJZkdyZWF0ZXIpOiBEZWxldGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0ZmZjZWJiZTIz
Mjc0MzcxMmM4Y2I5MzJjOWIxNzA3ZjVhYTIzNjRmLi5lOTY3ZTA3M2Q1NmYwMjE0YjMzMzI1YzJl
ZDYzODJiZjNiZDg2YTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxNiBAQAorMjAxOS0xMC0xNiAg
WXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFRocmVh
ZCBKU0dsb2JhbE9iamVjdCogaW5zdGVhZCBvZiBFeGVjU3RhdGUqCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIzOTIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2dsaWIvV2ViS2l0RnJhbWUuY3BwOgorICAgICAgICAod2Via2l0X2ZyYW1lX2dldF9q
c192YWx1ZV9mb3JfZG9tX29iamVjdF9pbl9zY3JpcHRfd29ybGQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYktpdDo6SW5q
ZWN0ZWRCdW5kbGU6OmNyZWF0ZVdlYkRhdGFGcm9tVWludDhBcnJheSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuY3BwOgorICAgICAgICAoV2ViS2l0
OjpjYWxsTWV0aG9kKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE1ldGhvZC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE1ldGhvZCk6CisgICAg
ICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpK
U05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpjYWxsTlBKU09i
amVjdCk6CisgICAgICAgIChXZWJLaXQ6OmNvbnN0cnVjdFdpdGhDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChX
ZWJLaXQ6OkpTTlBPYmplY3Q6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGVyKToKKyAg
ICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKFdlYktp
dDo6SlNOUE9iamVjdDo6dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0Lmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjppZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXJSZXApOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0Ojpo
YXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjppbnZva2UpOgorICAgICAg
ICAoV2ViS2l0OjpOUEpTT2JqZWN0OjppbnZva2VEZWZhdWx0KToKKyAgICAgICAgKFdlYktpdDo6
TlBKU09iamVjdDo6aGFzUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0Ojpn
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OnNldFByb3BlcnR5KToK
KyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAo
V2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJhdGUpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2Jq
ZWN0Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UEpTT2JqZWN0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6
Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9i
amVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudCk6CisgICAgICAgIChXZWJLaXQ6Ok5Q
UnVudGltZU9iamVjdE1hcDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVP
YmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6Z2xvYmFsRXhlYyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6cGVyZm9ybUphdmFTY3JpcHRVUkxSZXF1ZXN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZTo6anNDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmpzQ29udGV4dEZv
cldvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmZyYW1lRm9yQ29udGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpqc1dyYXBwZXJGb3JXb3JsZCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpydW5KYXZhU2NyaXB0KToKKworMjAxOS0xMC0xNiAgRW1pbGlvIENvYm9zIMOBbHZhcmV6ICA8
ZW1pbGlvQGNyaXNhbC5pbz4KKworICAgICAgICBQYXNzIG5ldHdvcmsgY2FjaGUgZGlyZWN0b3J5
IGluIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKSBmb3Igbm9uLUNvY29hIHBsYXRmb3Jt
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzA0
MworCisgICAgICAgIFRoaXMgd2FzIGNhdXNpbmcgdmFyaW91cyBlcnJvcnMgaW4gdGhlIG5ldHdv
cmsgcHJvY2VzcyB0aGF0IHdlcmUKKyAgICAgICAgdmlzaWJsZSBpbiBkZWJ1ZyBidWlsZHMuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisKKzIwMTktMTAtMTYgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgUGFnZUNhY2hlIHRvIEJhY2tG
b3J3YXJkQ2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMzA0OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAg
ICAgICAgUmVuYW1lIFBhZ2VDYWNoZSB0byBCYWNrRm9yd2FyZENhY2hlIGZvciBjbGFyaXR5IGFu
ZCBjb25zaXN0ZW5jeSB3aXRoIHRoZSBVSVByb2Nlc3MncyBXZWJCYWNrRm9yd2FyZENhY2hlLgor
CisgICAgICAgICogU2hhcmVkL0NhY2hlTW9kZWwuY3BwOgorICAgICAgICAoV2ViS2l0OjpjYWxj
dWxhdGVNZW1vcnlDYWNoZVNpemVzKToKKyAgICAgICAgKiBTaGFyZWQvQ2FjaGVNb2RlbC5oOgor
ICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oOgorICAgICAgICAoQVBJOjpOYXZpZ2F0aW9uQ2xp
ZW50Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKEFQSTo6UHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uOjpjb3B5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1By
ZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVk
KToKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNHZXRQYWdlQ2FjaGVFbmFibGVkKToKKyAgICAgICAg
KFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMpOgorICAgICAgICAoV0tQ
cmVmZXJlbmNlc0dldFBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1ByZWZlcmVuY2Vz
IF9zZXRVc2VzUGFnZUNhY2hlOl0pOgorICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF91c2VzUGFn
ZUNhY2hlXSk6CisgICAgICAgICgtW1dLUHJlZmVyZW5jZXMgX3NldFBhZ2VDYWNoZVN1cHBvcnRz
UGx1Z2luczpdKToKKyAgICAgICAgKC1bV0tQcmVmZXJlbmNlcyBfcGFnZUNhY2hlU3VwcG9ydHNQ
bHVnaW5zXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24ubW06CisgICAgICAgICgtW19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbiBw
YWdlQ2FjaGVFbmFibGVkXSk6CisgICAgICAgICgtW19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlv
biBzZXRQYWdlQ2FjaGVFbmFibGVkOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRTZXR0aW5ncy5jcHA6CisgICAgICAgICh3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9w
YWdlX2NhY2hlKToKKyAgICAgICAgKHdlYmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3BhZ2VfY2Fj
aGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tOgorICAgICAgICAoV2ViS2l0
OjpOYXZpZ2F0aW9uU3RhdGU6OnNldE5hdmlnYXRpb25EZWxlZ2F0ZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2lsbEdvVG9CYWNrRm9yd2Fy
ZExpc3RJdGVtKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50OjpkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlv
blN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uV2l0
aEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50OjpkaWRDb21taXROYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hEb2N1bWVudExvYWQpOgorICAgICAgICAo
V2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZpbmlzaE5hdmln
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OmRpZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpkaWRSZWFjaE1haW5GcmFtZUxvYWRUZXJt
aW5hbFN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG91bGRVc2VCYWNrRm9yd2FyZENhY2hlIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlz
dEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWVTaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRp
ZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lU2hhcmVkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWVTaGFyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExv
YWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmluaXNoRG9j
dW1lbnRMb2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEZp
bmlzaExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmFp
bExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkU2FtZURv
Y3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6dXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbS5jcHA6CisgICAgICAgIChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Jc0luQmFja0Zv
cndhcmRDYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0Ojp0
b0JhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lTG9hZGVyQ2xpZW50OjpXZWJGcmFtZUxvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0gY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVk
RnJvbUNhY2hlZEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6
OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlkUmVzdG9yZUZyb21CYWNrRm9yd2FyZENhY2hlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkZyYW1lTG9hZGVyQ2xpZW50
SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6Zm9yY2VMYXlv
dXRPblJlc3RvcmVGcm9tQmFja0ZvcndhcmRDYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6cmVtb3ZlSXRlbSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzdXNw
ZW5kRm9yUHJvY2Vzc1N3YXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzczo6c2V0QmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6Y2xlYXJDYWNoZWRQYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuaDoKKworMjAxOS0xMC0xNiAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5j
b20+CisKKyAgICAgICAgW2lPU10gUmVtb3ZlIHViaXF1aXR5IGNsaWVudCBydWxlIGZyb20gc2Fu
ZGJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAx
MzQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQgRnVsZ2hhbS4KKworICAgICAgICBUaGlz
IHJ1bGUgaXMgbW9zdCBsaWtlbHkgbm90IG5lZWRlZCwgc2luY2Ugd2UgaGF2ZSBhbHJlYWR5IGJs
b2NrZWQgYWxsIG9mIGl0cyBhc3NvY2lhdGVkIG1hY2ggc2VydmljZXMsCisgICAgICAgIGFuZCBu
byBpc3N1ZXMgaGF2ZSBiZWVuIHJlcG9ydGVkLgorCisgICAgICAgICogUmVzb3VyY2VzL1NhbmRi
b3hQcm9maWxlcy9pb3MvY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LnNiOgorCisyMDE5LTEw
LTE2ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIGlP
UzogaW5wdXRtb2RlPW5vbmUgaXMgbm90IHJlc3BlY3RlZCB3aXRoIGEgaGFyZHdhcmUga2V5Ym9h
cmQgYXR0YWNoZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMzA2MQorCisgICAgICAgIFJldmlld2VkIGJ5IERhbmllbCBCYXRlcy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IHNob3VsZFNob3dBdXRvbWF0aWNLZXlib2FyZFVJXSk6CisgICAgICAg
IFdlIGNhbiByZXNvbHZlIHRoaXMgRklYTUUsIGFzIHRoZSB1bmRlcmx5aW5nIGJ1ZyB3YXMgZml4
ZWQgaW4gPHJkYXI6Ly9wcm9ibGVtLzUyNzA2NTIzPi4KKyAgICAgICAgVGhpcyBub3cgbWVhbnMg
dGhhdCB3ZSB3aWxsIHJlc3BlY3QgaW5wdXRtb2RlPW5vbmUgZXZlbiB3aGVuIGEgaGFyZHdhcmUK
KyAgICAgICAga2V5Ym9hcmQgaXMgYXR0YWNoZWQsIHNpZ25pZmljYW50bHkgaW1wcm92aW5nIHRo
ZSBleHBlcmllbmNlIG9uIHNpdGVzIHRoYXQgdXNlIGl0CisgICAgICAgIGJ5IGF2b2lkaW5nIGFu
IGludGVybWl0dGVudCBpbnB1dCBiYXIuCisKKzIwMTktMTAtMTYgIFBlciBBcm5lIFZvbGxhbiAg
PHB2b2xsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFJlbW92ZSBzZW5kLXNpZ25hbCBm
cm9tIG1hY2gtbG9va3VwIHJ1bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMTIwMworCisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50IEZ1bGdoYW0u
CisKKyAgICAgICAgVGhlIHNlbmQtc2lnbmFsIGNhbiBiZSByZW1vdmVkLCBzaW5jZSBjcmFzaGVz
IGhhdmUgbm90IGJlZW4gcmVwb3J0ZWQgZnJvbSB0aGlzIHJ1bGUuCisKKyAgICAgICAgKiBSZXNv
dXJjZXMvU2FuZGJveFByb2ZpbGVzL2lvcy9jb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQuc2I6
CisKKzIwMTktMTAtMTYgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBTd2lmdCBtb2R1bGVtYXAgZm9yIFdlYktpdCBQcml2YXRlIEFQSXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzA1OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgUHJvdmlkZSBhIFN3aWZ0IG1vZHVsZW1h
cCBmb3IgV2ViS2l0X1ByaXZhdGUsIGFuZAorICAgICAgICBlbnN1cmUgV0tQcmVmZXJlbmNlc1By
aXZhdGUuaCBpcyBleHBvc2VkLgorCisgICAgICAgIFJlbmFtZWQgT1NYLm1vZHVsZW1hcCB0byBt
YWNPUy5tb2R1bGVtYXAgd2hpbGUgaGVyZS4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL1dl
YktpdC54Y2NvbmZpZzoKKyAgICAgICAgKiBNb2R1bGVzL2lPUy5wcml2YXRlLm1vZHVsZW1hcDog
QWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tYWNPUy5tb2R1bGVtYXA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L01vZHVsZXMvT1NYLm1vZHVsZW1hcC4KKyAgICAgICAgKiBNb2R1bGVzL21h
Y09TLnByaXZhdGUubW9kdWxlbWFwOiBBZGRlZC4KKyAgICAgICAgKiBTaGFyZWQvQVBJL0NvY29h
L1dlYktpdFByaXZhdGUuaDogSW5jbHVkZSBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oLgorCisyMDE5
LTEwLTE2ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJl
c291cmNlIExvYWQgU3RhdGlzdGljcyAoZXhwZXJpbWVudGFsKTogQmxvY2sgYWxsIHRoaXJkLXBh
cnR5IGNvb2tpZXMgb24gd2Vic2l0ZXMgd2l0aG91dCBwcmlvciB1c2VyIGludGVyYWN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMwMTcKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2MjYyNzA4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGhpcyBlbmhhbmNlbWVudCBpcyBvZmYgYnkgZGVm
YXVsdCBhbmQgY29udHJvbGxlZCBieSBhbiBpbnRlcm5hbCBmZWF0dXJlIGZsYWcuCisKKyAgICAg
ICAgVGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGluIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6c2hvdWxkQmxvY2tDb29raWVzKCkgd2hpY2ggaXMKKyAgICAgICAgY2FsbGVkIGZyb206
CisgICAgICAgIC0gTmV0d29ya0RhdGFUYXNrQ29jb2E6Ok5ldHdvcmtEYXRhVGFza0NvY29hKCkK
KyAgICAgICAgLSBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rp
b24KKworICAgICAgICBzaG91bGRCbG9ja0Nvb2tpZXMoKSBub3cgY2hlY2tzIGlmIHRoZSBmaXJz
dC1wYXJ0eSB3ZWJzaXRlIGhhcyByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uCisgICAgICAgIGFu
ZCBpZiBub3QsIGJsb2NrcyBhbGwgdGhpcmQtcGFydHkgY29va2llcywgcmVnYXJkbGVzcyBvZiB0
aGUgc3RhdHVzIG9mIHRob3NlIHRoaXJkLXBhcnR5CisgICAgICAgIGRvbWFpbnMgKHByZXZhbGVu
dCBvciBub3QpLgorCisgICAgICAgIFRoZSBjaGFuZ2VzIHRvIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlIGFuZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUKKyAg
ICAgICAgYXJlIGFib3V0IGNvbW11bmljYXRpbmcgd2hpY2ggZG9tYWlucyBoYXZlIHJlY2VpdmVk
IHVzZXIgaW50ZXJhY3Rpb24gKHByZXZhbGVudCBvciBub3QpCisgICAgICAgIHRvIHRoZSBuZXR3
b3JrIHN0b3JhZ2Ugc2Vzc2lvbiBzbyB0aGF0IGl0IGNhbiBlbmZvcmNlIHRoZSBuZXcgcmVzdHJp
Y3Rpb24uCisKKyAgICAgICAgVGhlIEMgQVBJIGNoYW5nZSBhbmQgcGlwaW5nIHRocm91Z2ggdGhl
IFdlYnNpdGVEYXRhU3RvcmUgaXMgdGVzdCBpbmZyYXN0cnVjdHVyZS4KKworICAgICAgICBCdW5k
bGVkIGNsZWFudXAgdGFzazogUmVtb3ZlIHRoZSB0d28gbW9udGggb2xkIGZlYXR1cmUgZmxhZyBm
b3IgTlNVUkxTZXNzaW9uIHN3aXRjaGluZy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbGxVcGRh
dGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
OgorICAgICAgICAoV2ViS2l0OjpSZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQ29va2llc0Zvcjo6
aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0U2hvdWxk
QmxvY2tUaGlyZFBhcnR5Q29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5l
dHdvcmtTZXNzaW9uKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5o
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0xvZ1Rlc3RpbmdFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpz
aG91bGRJc29sYXRlU2Vzc2lvbnNGb3JQcmV2YWxlbnRUb3BGcmFtZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRl
cnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ3JlYXRp
b25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFza0NvY29hOjpOZXR3b3JrRGF0YVRhc2tDb2NvYSk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYSk6CisgICAgICAgICogU2hhcmVkL1dl
YlByZWZlcmVuY2VzLnlhbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5jcHA6CisgICAgICAgIChXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0ZvclRlc3RpbmcpOgorICAg
ICAgICAoV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5
Q29va2llc0ZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzRm9yVGVzdGluZyk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKwor
MjAxOS0xMC0xNiAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KKwor
ICAgICAgICBXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0
ZSgpIHNob3VsZCBjYWxsIHN0b3JlLnNldFVzZUlUUERhdGFiYXNlKGZhbHNlKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDIwCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81NjMxNDQ4ND4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1l
ei4KKworICAgICAgICBUaGUgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHNob3VsZCBiZSBy
ZXNldCBiZXR3ZWVuIHRlc3RzIHRvIHVzZQorICAgICAgICBhIG1lbW9yeSBzdG9yZSwgYW5kIGFu
eSB0ZXN0IHRoYXQgbmVlZHMgdG8gdXNlIHRoZSBkYXRhYmFzZSBzdG9yZQorICAgICAgICBjYW4g
dXNlIHRoZSBzZXRVc2VJVFBEYXRhYmFzZSBmdW5jdGlvbi4KKworICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYu
Y3BwOgorICAgICAgICAoV0tXZWJzaXRlRGF0YVN0b3JlU2V0VXNlSVRQRGF0YWJhc2UpOgorICAg
ICAgICAoV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VXNlSVRQRGF0YWJhc2UpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlUUERhdGFiYXNlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorCiAyMDE5LTEwLTE2ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gSGFuZGxlIGJh
Y2svZm9yd2FyZCBjYWNoZSBlbnRyeSBleHBpcmF0aW9uIGluIHRoZSBVSVByb2Nlc3MgaW5zdGVh
ZCBvZiB0aGUgV2ViUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IDA3ODk5
MDMyZTNjZDFmMjJmOTUxN2U3MmFmZWFjZWRiYzdiNWNkZjUuLmQzZjAyOTMyNjMxMDcyMzdkZTcx
OGU3MjJmNWM1NjdlYzFlZTkxODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9z
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxOS0xMC0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFJlbmFtZSBQYWdlQ2FjaGUgdG8gQmFja0ZvcndhcmRDYWNoZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBSZW5hbWUgUGFnZUNhY2hl
IHRvIEJhY2tGb3J3YXJkQ2FjaGUgZm9yIGNsYXJpdHkgYW5kIGNvbnNpc3RlbmN5IHdpdGggdGhl
IFVJUHJvY2VzcydzIFdlYkJhY2tGb3J3YXJkQ2FjaGUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dl
YlVJS2l0RGVsZWdhdGUuaDoKKwogMjAxOS0xMC0wOSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBs
ZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3ZlIHJlZHVuZGFudCB1c2VzIG9mIFVTRShVSUtJ
VF9FRElUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDA2MWFlMWI0YWRmYmIz
NjYyNGI0Y2I5NmY0YzQ5NWRkZTFkODFmODEuLjMzYjViZWYxYjMyYzIxNWFhNzYzNjFkOWY5ZDEz
MDMzMjhiNjk4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDUg
QEAKKzIwMTktMTAtMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAg
ICAgICBbSlNDXSBUaHJlYWQgSlNHbG9iYWxPYmplY3QqIGluc3RlYWQgb2YgRXhlY1N0YXRlKgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMzkyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vRE9N
SW50ZXJuYWwubW06CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBfaW5pdGlhbGl6ZVNjcmlw
dERPTU5vZGVJbXBdKToKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAg
ICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkuaDoKKyAgICAg
ICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlRGVmYXVsdCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RydWN0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0
UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpoYXNQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9BcnJheSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bWFyc2hhbFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjptYXJzaGFsVmFsdWVzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpkZW1hcnNoYWxWYWx1ZUZyb21BcnJh
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJz
aGFsVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmRlbWFyc2hhbFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBQbHVn
aW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmg6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJv
eHlJbnN0YW5jZS5tbToKKyAgICAgICAgKFdlYktpdDo6UHJveHlGaWVsZDo6dmFsdWVGcm9tSW5z
dGFuY2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUZpZWxkOjpzZXRWYWx1ZVRvSW5z
dGFuY2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpuZXdSdW50aW1l
T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6aW52b2tlKToKKyAgICAg
ICAgKFdlYktpdDo6UHJveHlSdW50aW1lTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpQcm94eUluc3RhbmNlOjpnZXRNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3Rh
bmNlOjppbnZva2VNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjppbnZv
a2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6aW52b2tl
Q29uc3RydWN0KToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6ZGVmYXVsdFZhbHVl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6c3RyaW5nVmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpudW1iZXJWYWx1ZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6OnZhbHVlT2YgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdl
YktpdDo6UHJveHlJbnN0YW5jZTo6ZmllbGRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlByb3h5SW5zdGFuY2U6OnNldEZpZWxkVmFsdWUgY29uc3QpOgorICAgICAgICAqIFdlYlZpZXcv
V2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0RnJvbVN0cmluZzpmb3JjZVVzZXJHZXN0dXJlOl0pOgorICAgICAgICAoLVtXZWJGcmFt
ZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6d2l0aEdsb2JhbE9iamVj
dDppblNjcmlwdFdvcmxkOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfZ2xvYmFsQ29udGV4dEZv
clNjcmlwdFdvcmxkOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBqc1dyYXBwZXJGb3JOb2RlOmlu
U2NyaXB0V29ybGQ6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIGdsb2JhbENvbnRleHRdKToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLmg6CisgICAgICAgICogV2ViVmlldy9X
ZWJTY3JpcHREZWJ1Z2dlci5tbToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpzb3VyY2VQ
YXJzZWQpOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKCtbV2ViVmll
dyBfcmVwb3J0RXhjZXB0aW9uOmluQ29udGV4dDpdKToKKyAgICAgICAgKGFlRGVzY0Zyb21KU1Zh
bHVlKToKKyAgICAgICAgKC1bV2ViVmlldyBhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJv
bVN0cmluZzpdKToKKworMjAxOS0xMC0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgorCisgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBpT1MgRGVidWcgYnVpbGQgYWZ0ZXIgcjI1MTIy
MC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBf
cHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgorCisyMDE5LTEwLTE2ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIFBhZ2VDYWNoZSB0byBCYWNrRm9yd2FyZENh
Y2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMw
NDgKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIFJl
bmFtZSBQYWdlQ2FjaGUgdG8gQmFja0ZvcndhcmRDYWNoZSBmb3IgY2xhcml0eSBhbmQgY29uc2lz
dGVuY3kgd2l0aCB0aGUgVUlQcm9jZXNzJ3MgV2ViQmFja0ZvcndhcmRDYWNoZS4KKworICAgICAg
ICAqIEhpc3RvcnkvQmFja0ZvcndhcmRMaXN0Lm1tOgorICAgICAgICAoQmFja0ZvcndhcmRMaXN0
OjphZGRJdGVtKToKKyAgICAgICAgKEJhY2tGb3J3YXJkTGlzdDo6c2V0Q2FwYWNpdHkpOgorICAg
ICAgICAqIEhpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tOgorICAgICAgICAoLVtXZWJCYWNr
Rm9yd2FyZExpc3QgcGFnZUNhY2hlU2l6ZV0pOgorICAgICAgICAqIEhpc3RvcnkvV2ViSGlzdG9y
eUl0ZW0ubW06CisgICAgICAgICogSGlzdG9yeS9XZWJIaXN0b3J5SXRlbVByaXZhdGUuaDoKKyAg
ICAgICAgKiBNaXNjL1dlYkNhY2hlLm1tOgorICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3Rp
Y3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGNhY2hlZFBhZ2VDb3VudF0pOgor
ICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBjYWNoZWRGcmFtZUNvdW50XSk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50Ojpmb3JjZUxheW91dE9uUmVzdG9yZUZyb21CYWNrRm9yd2FyZENhY2hlKToKKyAg
ICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRSZXN0b3JlRnJvbUJhY2tGb3J3YXJkQ2Fj
aGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW06Cisg
ICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcg
bGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOmhlaWdodDpvcmlnaW5hbFBhZ2VXaWR0aDpvcmlnaW5h
bFBhZ2VIZWlnaHQ6bWF4aW11bVNocmlua1JhdGlvOmFkanVzdGluZ1ZpZXdTaXplOl0pOgorICAg
ICAgICAoLVtXZWJIVE1MVmlldyBzZXROZWVkc0xheW91dDpdKToKKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgc2V0TmVlZHNUb0FwcGx5U3R5bGVzOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmll
dy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKToKKyAgICAgICAgKC1bV2ViVmlldyBf
cHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9zZXRDYWNoZU1vZGVs
Ol0pOgorCiAyMDE5LTEwLTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgW1dLMl0gTW92ZSBiYWNrL2ZvcndhcmQgY2FjaGUgZW50cnkgZXhwaXJhdGlvbiBmcm9t
IHRoZSBXZWJQcm9jZXNzIHRvIHRoZSBVSVByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxv
ZwppbmRleCAzNDk3ZTQ4Y2E5ZjM2NTFiN2Y4YzkyMGNjZTIxZjkxYmYxMTk3ODFhLi5mZTU4ZjEz
ODYyZmVmMjQ4ZGZlYjc3NzYyYTU4MDYyMDI1MTJmZjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTktMTAtMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBUaHJlYWQgSlNHbG9iYWxPYmplY3QqIGlu
c3RlYWQgb2YgRXhlY1N0YXRlKgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAyMzkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0TGlzdEZyb21WYXJpYW50QXJncyk6CisgICAgICAgIChXZWJDb3JlOjpOUE5fRXZhbHVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TlBOX0ludm9rZSk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1
ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6
CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09i
amVjdEluV29ybGQpOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1l
OjpnbG9iYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkZyYW1lOjpnbG9iYWxDb250ZXh0Rm9yU2Ny
aXB0V29ybGQpOgorICAgICAgICAoV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHRJblNjcmlwdFdvcmxkKToKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZp
ZXc6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nKToKKyAgICAgICAgKFdl
YlZpZXc6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJWaWV3OjplbGVtZW50RnJvbUpT
KToKKworMjAxOS0xMC0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlbmFtZSBQYWdlQ2FjaGUgdG8gQmFja0ZvcndhcmRDYWNoZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDQ4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBSZW5hbWUgUGFnZUNhY2hlIHRvIEJh
Y2tGb3J3YXJkQ2FjaGUgZm9yIGNsYXJpdHkgYW5kIGNvbnNpc3RlbmN5IHdpdGggdGhlIFVJUHJv
Y2VzcydzIFdlYkJhY2tGb3J3YXJkQ2FjaGUuCisKKyAgICAgICAgKiBCYWNrRm9yd2FyZExpc3Qu
Y3BwOgorICAgICAgICAoQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKToKKyAgICAgICAgKEJhY2tG
b3J3YXJkTGlzdDo6c2V0Q2FwYWNpdHkpOgorICAgICAgICAqIFdlYkNvcmVTdGF0aXN0aWNzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpjYWNoZWRQYWdlQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZVN0YXRpc3RpY3M6OmNhY2hlZEZyYW1lQ291bnQpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaWRSZXN0b3JlRnJvbUJhY2tGb3J3YXJkQ2FjaGUpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5jcHA6CisgICAgICAgICogV2ViRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViRnJhbWU6OmFjY2Vzc2libGUgY29uc3QpOgorICAgICAgICAqIFdlYlZpZXcu
Y3BwOgorICAgICAgICAoV2ViVmlldzo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChXZWJWaWV3
Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDE5LTEwLTE1ICBXZW5zb24gSHNpZWgg
IDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT046IGVkaXRpbmcv
YXN5bmMtY2xpcGJvYXJkL2NsaXBib2FyZC1pbnRlcmZhY2VzLmh0bWwgaXMgZmFpbGluZyBpbiBX
ZWJLaXQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhbGxiYWNr
RnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FsbGJhY2tGdW5jdGlv
bi5oCmluZGV4IGVhNzg0OGRlZTFhYjY1MThlYTdkN2M1NWVmMWRlM2IxMWUzYjU4MTcuLmM5OTEw
NTNhMTkxOWY4ZTFiYTRlYTk4Yjc3ZDhlMWE5ZDFiN2RkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oCkBAIC00NCw0MSArNDQsNDEgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdChKU0dsb2JhbE9iamUKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBBUElDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU0NvbnRleHRS
ZWYgZXhlY1JlZiA9IHRvUmVmKGNhbGxGcmFtZSk7CisgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYg
PSB0b1JlZihnbG9iYWxPYmplY3QpOwogICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uUmVmID0gdG9S
ZWYoY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKLSAgICBKU09iamVjdFJlZiB0aGlzT2JqUmVmID0g
dG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoY2Fs
bEZyYW1lLCBOb3RTdHJpY3RNb2RlKSkpOworICAgIEpTT2JqZWN0UmVmIHRoaXNPYmpSZWYgPSB0
b1JlZihqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhnbG9i
YWxPYmplY3QsIE5vdFN0cmljdE1vZGUpKSk7CiAKICAgICBpbnQgYXJndW1lbnRDb3VudCA9IHN0
YXRpY19jYXN0PGludD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIFZlY3RvcjxK
U1ZhbHVlUmVmLCAxNj4gYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGFyZ3VtZW50Q291bnQpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRD
b3VudDsgaSsrKQotICAgICAgICBhcmd1bWVudHMudW5jaGVja2VkQXBwZW5kKHRvUmVmKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSkpOworICAgICAgICBhcmd1bWVu
dHMudW5jaGVja2VkQXBwZW5kKHRvUmVmKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudChpKSkpOwogCiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwogICAgIEpT
VmFsdWVSZWYgcmVzdWx0OwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGNhbGxGcmFtZSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhnbG9iYWxPYmplY3QpOwogICAgICAgICByZXN1bHQgPSBqc0Nhc3Q8VCo+KHRvSlMo
ZnVuY3Rpb25SZWYpKS0+ZnVuY3Rpb25DYWxsYmFjaygpKGV4ZWNSZWYsIGZ1bmN0aW9uUmVmLCB0
aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCAmZXhjZXB0aW9uKTsK
ICAgICB9CiAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oY2FsbEZy
YW1lLCBzY29wZSwgdG9KUyhjYWxsRnJhbWUsIGV4Y2VwdGlvbikpOworICAgICAgICB0aHJvd0V4
Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCB0b0pTKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9u
KSk7CiAKICAgICAvLyByZXN1bHQgbXVzdCBiZSBhIHZhbGlkIEpTVmFsdWUuCiAgICAgaWYgKCFy
ZXN1bHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoY2FsbEZyYW1lLCByZXN1bHQpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZ2xvYmFsT2JqZWN0LCByZXN1bHQpKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEFQ
SUNhbGxiYWNrRnVuY3Rpb246OmNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gY2Fs
bEZyYW1lLT5qc0NhbGxlZSgpOwotICAgIEpTQ29udGV4dFJlZiBjdHggPSB0b1JlZihjYWxsRnJh
bWUpOworICAgIEpTQ29udGV4dFJlZiBjdHggPSB0b1JlZihnbG9iYWxPYmplY3QpOwogICAgIEpT
T2JqZWN0UmVmIGNvbnN0cnVjdG9yUmVmID0gdG9SZWYoY29uc3RydWN0b3IpOwogCiAgICAgSlNP
YmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrID0ganNDYXN0PFQqPihjb25z
dHJ1Y3RvciktPmNvbnN0cnVjdENhbGxiYWNrKCk7CkBAIC04NywyMSArODcsMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBBUElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3QoSlNH
bG9iYWxPYmplY3QqIGdsb2IKICAgICAgICAgVmVjdG9yPEpTVmFsdWVSZWYsIDE2PiBhcmd1bWVu
dHM7CiAgICAgICAgIGFyZ3VtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50Q291
bnQpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkK
LSAgICAgICAgICAgIGFyZ3VtZW50cy51bmNoZWNrZWRBcHBlbmQodG9SZWYoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKSk7CisgICAgICAgICAgICBhcmd1bWVudHMu
dW5jaGVja2VkQXBwZW5kKHRvUmVmKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudChpKSkpOwogCiAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKICAgICAg
ICAgSlNPYmplY3RSZWYgcmVzdWx0OwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgcmVz
dWx0ID0gY2FsbGJhY2soY3R4LCBjb25zdHJ1Y3RvclJlZiwgYXJndW1lbnRDb3VudCwgYXJndW1l
bnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGV4Y2VwdGlv
bikgewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBzY29wZSwgdG9KUyhj
YWxsRnJhbWUsIGV4Y2VwdGlvbikpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTKGNhbGxGcmFtZSwgZXhjZXB0aW9uKSk7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihnbG9iYWxPYmplY3QsIHNjb3BlLCB0b0pTKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSk7Cisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZ2xvYmFsT2JqZWN0LCBleGNl
cHRpb24pKTsKICAgICAgICAgfQogICAgICAgICAvLyByZXN1bHQgbXVzdCBiZSBhIHZhbGlkIEpT
VmFsdWUuCiAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTKHJlc3VsdCkpOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElD
YXN0LmgKaW5kZXggM2I4MjBlOWU2ZjM0ZmI2MmViZmE4NzI1YzhiMzc5NjlkZTZjYjZkZS4uM2I0
ZjMxZDY3YWJjNTQ0ZTk5ZTllZGRlYTViNDliNGI5MTUwODg4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9BUElDYXN0LmgKQEAgLTM4LDcgKzM4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgVk07CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNWYWx1ZTsKLSAgICB1c2lu
ZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiB9CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1
ZUpTQ29udGV4dEdyb3VwKiBKU0NvbnRleHRHcm91cFJlZjsKQEAgLTUwLDI2ICs0OSwyNiBAQCB0
eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU09iamVjdFJlZjsKIAogLyogT3BhcXVlIHR5
cGluZyBjb252ZW5pZW5jZSBtZXRob2RzICovCiAKLWlubGluZSBKU0M6OkV4ZWNTdGF0ZSogdG9K
UyhKU0NvbnRleHRSZWYgYykKK2lubGluZSBKU0M6OkpTR2xvYmFsT2JqZWN0KiB0b0pTKEpTQ29u
dGV4dFJlZiBjb250ZXh0KQogewotICAgIEFTU0VSVChjKTsKLSAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxKU0M6OkV4ZWNTdGF0ZSo+KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0Kj4oYykp
OworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6
OkpTR2xvYmFsT2JqZWN0Kj4oY29uc3RfY2FzdDxPcGFxdWVKU0NvbnRleHQqPihjb250ZXh0KSk7
CiB9CiAKLWlubGluZSBKU0M6OkV4ZWNTdGF0ZSogdG9KUyhKU0dsb2JhbENvbnRleHRSZWYgYykK
K2lubGluZSBKU0M6OkpTR2xvYmFsT2JqZWN0KiB0b0pTKEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0KQogewotICAgIEFTU0VSVChjKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6
OkV4ZWNTdGF0ZSo+KGMpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU0M6OkpTR2xvYmFsT2JqZWN0Kj4oY29udGV4dCk7CiB9CiAKIGlubGluZSBK
U0M6OkpTR2xvYmFsT2JqZWN0KiB0b0pTR2xvYmFsT2JqZWN0KEpTR2xvYmFsQ29udGV4dFJlZiBj
b250ZXh0KQogewotICAgIHJldHVybiB0b0pTKGNvbnRleHQpLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CisgICAgcmV0dXJuIHRvSlMoY29udGV4dCk7CiB9CiAKLWlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiB2KQoraW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZVJlZiB2
KQogewotICAgIEFTU0VSVF9VTlVTRUQoZXhlYywgZXhlYyk7CisgICAgQVNTRVJUX1VOVVNFRChn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCk7CiAjaWYgIUNQVShBRERSRVNTNjQpCiAgICAgSlND
OjpKU0NlbGwqIGpzQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpKU0NlbGwqPihjb25zdF9j
YXN0PE9wYXF1ZUpTVmFsdWUqPih2KSk7CiAgICAgaWYgKCFqc0NlbGwpCkBAIC04NSwxMyArODQs
MTMgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlUmVmIHYpCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OwogICAgIGlmIChyZXN1bHQuaXNDZWxsKCkpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dC5hc0NlbGwoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQuYXNDZWxsKCktPm1ldGhvZFRhYmxlKGdldFZNKGdsb2JhbE9iamVjdCkpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNGb3JHQyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiB2KQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTRm9yR0MoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVmIHYp
CiB7Ci0gICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjKTsKKyAgICBBU1NFUlRfVU5VU0VEKGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0KTsKICNpZiAhQ1BVKEFERFJFU1M2NCkKICAgICBKU0M6
OkpTQ2VsbCoganNDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxKU0M6OkpTQ2VsbCo+KGNvbnN0X2Nh
c3Q8T3BhcXVlSlNWYWx1ZSo+KHYpKTsKICAgICBpZiAoIWpzQ2VsbCkKQEAgLTEwMSw3ICsxMDAs
NyBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNGb3JHQyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZVJlZiB2KQogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlND
OjpKU1ZhbHVlPih2KTsKICNlbmRpZgogICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmlzQ2VsbCgp
KQotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuYXNDZWxsKCktPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmFzQ2VsbCgpLT5tZXRo
b2RUYWJsZShnZXRWTShnbG9iYWxPYmplY3QpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTQ0LDkgKzE0Myw5IEBAIGlubGluZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdikKICNlbmRpZgogfQogCi1pbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHYpCitpbmxpbmUgSlNWYWx1ZVJlZiB0b1Jl
ZihKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2KQogewot
ICAgIHJldHVybiB0b1JlZihleGVjLT52bSgpLCB2KTsKKyAgICByZXR1cm4gdG9SZWYoZ2V0Vk0o
Z2xvYmFsT2JqZWN0KSwgdik7CiB9CiAKIGlubGluZSBKU09iamVjdFJlZiB0b1JlZihKU0M6OkpT
T2JqZWN0KiBvKQpAQCAtMTU5LDE1ICsxNTgsMTQgQEAgaW5saW5lIEpTT2JqZWN0UmVmIHRvUmVm
KGNvbnN0IEpTQzo6SlNPYmplY3QqIG8pCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNP
YmplY3RSZWY+KGNvbnN0X2Nhc3Q8SlNDOjpKU09iamVjdCo+KG8pKTsKIH0KIAotaW5saW5lIEpT
Q29udGV4dFJlZiB0b1JlZihKU0M6OkV4ZWNTdGF0ZSogZSkKK2lubGluZSBKU0NvbnRleHRSZWYg
dG9SZWYoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PEpTQ29udGV4dFJlZj4oZSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDb250ZXh0UmVmPihnbG9iYWxPYmplY3QpOwogfQogCi1pbmxpbmUgSlNHbG9iYWxD
b250ZXh0UmVmIHRvR2xvYmFsUmVmKEpTQzo6RXhlY1N0YXRlKiBlKQoraW5saW5lIEpTR2xvYmFs
Q29udGV4dFJlZiB0b0dsb2JhbFJlZihKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7Ci0gICAgQVNTRVJUKGUgPT0gZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTR2xvYmFsQ29udGV4dFJlZj4oZSk7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNHbG9iYWxDb250ZXh0UmVmPihnbG9iYWxP
YmplY3QpOwogfQogCiBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvclJlZiB0b1JlZihK
U0M6OlByb3BlcnR5TmFtZUFycmF5KiBsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9BUElVdGlscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElVdGlscy5o
CmluZGV4IDdhNWU4YmE4YjgyNjNmZDU4NWE3ZTRiMWU2YmE4ZmFiMGFmMGUxYjIuLjRiNmQ1Mzk2
NTBiZjYxYTJjZWJmYTk0M2JkOTQ2MDZlMzMyMzU0M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJVXRpbHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0FQSVV0aWxzLmgKQEAgLTM3LDI4ICszNywyOCBAQCBlbnVtIGNsYXNzIEV4Y2VwdGlvblN0YXR1
cyB7CiAgICAgRGlkTm90VGhyb3cKIH07CiAKLWlubGluZSBFeGNlcHRpb25TdGF0dXMgaGFuZGxl
RXhjZXB0aW9uSWZOZWVkZWQoSlNDOjpDYXRjaFNjb3BlJiBzY29wZSwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9uUmVmKQoraW5saW5lIEV4Y2VwdGlv
blN0YXR1cyBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChKU0M6OkNhdGNoU2NvcGUmIHNjb3BlLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhj
ZXB0aW9uUmVmKQogewogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAg
ICAgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAg
ICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb25SZWYpCi0gICAgICAgICAgICAqcmV0dXJuZWRFeGNl
cHRpb25SZWYgPSB0b1JlZihleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOworICAgICAgICAgICAg
KnJldHVybmVkRXhjZXB0aW9uUmVmID0gdG9SZWYoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24tPnZh
bHVlKCkpOwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotICAgICAgICBzY29wZS52bSgpLnZtRW50cnlHbG9iYWxPYmplY3QoZXhl
YyktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uKTsKKyAgICAgICAgc2NvcGUudm0oKS52bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCBleGNlcHRpb24pOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBFeGNlcHRpb25TdGF0dXM6OkRp
ZFRocm93OwogICAgIH0KICAgICByZXR1cm4gRXhjZXB0aW9uU3RhdHVzOjpEaWROb3RUaHJvdzsK
IH0KIAotaW5saW5lIHZvaWQgc2V0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlUmVmKiByZXR1cm5lZEV4Y2VwdGlvblJlZiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikKK2lu
bGluZSB2b2lkIHNldEV4Y2VwdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWVSZWYqIHJldHVybmVkRXhjZXB0aW9uUmVmLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9u
KQogewogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvblJlZikKLSAgICAgICAgKnJldHVybmVkRXhj
ZXB0aW9uUmVmID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgKnJldHVybmVkRXhj
ZXB0aW9uUmVmID0gdG9SZWYoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICB2bS52
bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJ
RXhjZXB0aW9uKGV4ZWMsIEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUodm0sIGV4Y2VwdGlvbikpOwor
ICAgIEpTQzo6Vk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKKyAgICB2bS52bUVudHJ5R2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElF
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBleGNlcHRp
b24pKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xv
YmFsT2JqZWN0LmgKaW5kZXggMzM5ZTVlMjdmYjEyOWEyYTM1ODk2NzQxZDJhZTVlNDQzYjA2Mjc0
ZS4uNGIzYmIxNWNkZjBhNWM0NmI0ZmU5NWRlYTZhYTA5ZTIwNmI0MTkxZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaApAQCAtNTIsMTEgKzUyLDEx
IEBAIGNsYXNzIEpTQVBJR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21p
c2UqIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSos
IEpTTW9kdWxlTG9hZGVyKiwgSlNTdHJpbmcqIG1vZHVsZU5hbWVWYWx1ZSwgSlNWYWx1ZSBwYXJh
bWV0ZXJzLCBjb25zdCBTb3VyY2VPcmlnaW4mKTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBtb2R1
bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2Fk
ZXIqLCBKU1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVycmVyVmFsdWUsIEpTVmFsdWUpOwot
ICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxP
YmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFsdWUsIEpT
VmFsdWUpOwotICAgIHN0YXRpYyBKU09iamVjdCogbW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0
YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlcios
IEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTVmFsdWUg
bW9kdWxlTG9hZGVyRXZhbHVhdGUoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVs
ZUxvYWRlciosIEpTVmFsdWUsIEpTVmFsdWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU0ludGVy
bmFsUHJvbWlzZSogbW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiwgSlNN
b2R1bGVMb2FkZXIqLCBKU1N0cmluZyogbW9kdWxlTmFtZVZhbHVlLCBKU1ZhbHVlIHBhcmFtZXRl
cnMsIGNvbnN0IFNvdXJjZU9yaWdpbiYpOworICAgIHN0YXRpYyBJZGVudGlmaWVyIG1vZHVsZUxv
YWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUga2V5
VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTSW50
ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCosIEpTTW9kdWxl
TG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwgSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTT2JqZWN0
KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCos
IEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSBtb2R1bGVMb2FkZXJFdmFsdWF0ZShKU0dsb2JhbE9iamVjdCosIEpT
TW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAKICAgICBKU1ZhbHVl
IGxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKGNvbnN0IEpTTG9ja0hvbGRlciYsIEpTU2Ny
aXB0ICopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xv
YmFsT2JqZWN0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVj
dC5tbQppbmRleCBkOWE0MzM2MzExOTQzNWJlNTY3OGZhNjYxOTVlYjRkNDg4ZGZkOTIxLi41Y2Q5
YjM4NGY1NWJmYTVhZWZjYmI0NTllMThjYmZjZmYxZTYxZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0KQEAgLTk2LDE4ICs5NiwxOCBAQCBz
dGF0aWMgRXhwZWN0ZWQ8VVJMLCBTdHJpbmc+IGNvbXB1dGVWYWxpZEltcG9ydFNwZWNpZmllcihj
b25zdCBVUkwmIGJhc2UsIGNvbnN0CiAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG1ha2VTdHJp
bmcoIkNvdWxkIG5vdCBmb3JtIHZhbGlkIFVSTCBmcm9tIGlkZW50aWZpZXIgYW5kIGJhc2UuIFRy
aWVkOiJfcywgYWJzb2x1dGVVUkwuc3RyaW5nKCkpKTsKIH0KIAotSWRlbnRpZmllciBKU0FQSUds
b2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXksIEpTVmFs
dWUgcmVmZXJyZXIsIEpTVmFsdWUpCitJZGVudGlmaWVyIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1
bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTTW9kdWxlTG9h
ZGVyKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgcmVmZXJyZXIsIEpTVmFsdWUpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEFTU0VSVF9VTlVTRUQo
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0ID09IGdsb2Jh
bE9iamVjdCk7CiAgICAgQVNTRVJUKGtleS5pc1N0cmluZygpIHx8IGtleS5pc1N5bWJvbCgpKTsK
LSAgICBTdHJpbmcgbmFtZSA9ICBrZXkudG9XVEZTdHJpbmcoZXhlYyk7CisgICAgU3RyaW5nIG5h
bWUgPSAga2V5LnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIAogICAgIFVSTCBiYXNlOwogICAgIGlmIChKU1N0cmluZyogcmVm
ZXJyZXJTdHJpbmcgPSBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4odm0sIHJlZmVycmVyKSkgewot
ICAgICAgICBTdHJpbmcgdmFsdWUgPSByZWZlcnJlclN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAg
ICAgIFN0cmluZyB2YWx1ZSA9IHJlZmVycmVyU3RyaW5nLT52YWx1ZShnbG9iYWxPYmplY3QpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBVUkwgcmVm
ZXJyZXJVUkwoeyB9LCB2YWx1ZSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZmVycmVyVVJM
LmlzVmFsaWQoKSk7CkBAIC0xMTgsMjkgKzExOCwyOSBAQCBJZGVudGlmaWVyIEpTQVBJR2xvYmFs
T2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
CiAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlc3VsdC52YWx1ZSgpKTsKIAotICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3Jl
YXRlRXJyb3IoZXhlYywgcmVzdWx0LmVycm9yKCkpKTsKKyAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCByZXN1bHQuZXJyb3IoKSkp
OwogICAgIHJldHVybiB7IH07CiB9CiAKLUpTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9i
amVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1N0cmluZyogc3BlY2lmaWVy
VmFsdWUsIEpTVmFsdWUsIGNvbnN0IFNvdXJjZU9yaWdpbiYgc291cmNlT3JpZ2luKQorSlNJbnRl
cm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNNb2R1bGVMb2FkZXIqLCBKU1N0cmluZyog
c3BlY2lmaWVyVmFsdWUsIEpTVmFsdWUsIGNvbnN0IFNvdXJjZU9yaWdpbiYgc291cmNlT3JpZ2lu
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgYXV0byByZWplY3QgPSBbJl0gKEpTVmFsdWUg
ZXhjZXB0aW9uKSAtPiBKU0ludGVybmFsUHJvbWlzZSogewogICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwotICAgICAgICBhdXRvKiBwcm9taXNlID0gSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZDo6dHJ5Q3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIGF1dG8qIHByb21p
c2UgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIHByb21pc2Ut
PnJlamVjdChleGVjLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm4gcHJvbWlzZS0+cmVqZWN0
KGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKTsKICAgICB9OwogCiAgICAgYXV0byBpbXBvcnQgPSBb
Jl0gKFVSTCYgdXJsKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gaW1wb3J0TW9kdWxlKGV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHVybCksIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZp
bmVkKCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGltcG9ydE1vZHVsZShnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHVybCksIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZp
bmVkKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfTsKIAotICAgIGF1dG8gc3BlY2lmaWVyID0gc3BlY2lmaWVyVmFsdWUtPnZh
bHVlKGV4ZWMpOworICAgIGF1dG8gc3BlY2lmaWVyID0gc3BlY2lmaWVyVmFsdWUtPnZhbHVlKGds
b2JhbE9iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwpAQCAtMTUyLDQyICsxNTIsNDIgQEAgSlNJbnRlcm5hbFByb21p
c2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUoSlNHbG9iYWxP
YmplY3QqIGcKICAgICBhdXRvIHJlc3VsdCA9IGNvbXB1dGVWYWxpZEltcG9ydFNwZWNpZmllcihi
YXNlVVJMLCBzcGVjaWZpZXIpOwogICAgIGlmIChyZXN1bHQpCiAgICAgICAgIHJldHVybiBpbXBv
cnQocmVzdWx0LnZhbHVlKCkpOwotICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywg
cmVzdWx0LmVycm9yKCkpKTsKKyAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGdsb2JhbE9i
amVjdCwgcmVzdWx0LmVycm9yKCkpKTsKIH0KIAotSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xv
YmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUs
IEpTVmFsdWUpCitKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxv
YWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTTW9kdWxlTG9hZGVyKiwg
SlNWYWx1ZSBrZXksIEpTVmFsdWUsIEpTVmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAot
ICAgIEFTU0VSVChnbG9iYWxPYmplY3QgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsK
LSAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxD
b250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CisgICAg
QVNTRVJUKGdsb2JhbE9iamVjdCA9PSBnbG9iYWxPYmplY3QpOworICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxS
ZWYoZ2xvYmFsT2JqZWN0KV07CiAKLSAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZl
cnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxP
YmplY3QpOworICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRl
cm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKLSAgICBJZGVudGlmaWVyIG1vZHVsZUtl
eSA9IGtleS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIElkZW50aWZpZXIgbW9kdWxlS2V5ID0g
a2V5LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0
aW9uKCk7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBk
ZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBkZWZlcnJl
ZC0+cmVqZWN0KGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKTsKICAgICB9CiAKICAgICBpZiAoVU5M
SUtFTFkoIVtjb250ZXh0IG1vZHVsZUxvYWRlckRlbGVnYXRlXSkpCi0gICAgICAgIHJldHVybiBk
ZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVy
IHByb3ZpZGVkLiIpKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZ2xvYmFsT2Jq
ZWN0LCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVk
LiIpKTsKIAogICAgIGF1dG8gZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQ+KHZtLCBkZWZlcnJlZCk7CiAgICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0aXZl
U3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9XSAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsKICAg
ICAgICAgLy8gVGhpcyBjYXB0dXJlcyB0aGUgZ2xvYmFsT2JqZWN0IGJ1dCB0aGF0J3Mgb2sgYmVj
YXVzZSBvdXIgc3RydWN0dXJlIGtlZXBzIGl0IGFsaXZlIGFueXdheS4KICAgICAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlND
b250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpKV07Ci0gICAgICAgIGlkIHNjcmlwdCA9IHZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgdG9SZWYoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7CisgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENv
bnRleHRSZWY6dG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0KV07CisgICAgICAgIGlkIHNjcmlwdCA9
IHZhbHVlVG9PYmplY3QoY29udGV4dCwgdG9SZWYoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApKSk7CiAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKIAogICAg
ICAgICBhdXRvIHJlamVjdFByb21pc2UgPSBbJl0gKFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgICAg
ICAgICBhcmdzLmFwcGVuZChjcmVhdGVUeXBlRXJyb3IoY2FsbEZyYW1lLCBtZXNzYWdlKSk7Ci0g
ICAgICAgICAgICBjYWxsKGNhbGxGcmFtZSwgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZl
cnJlZDo6cmVqZWN0KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7Cisg
ICAgICAgICAgICBhcmdzLmFwcGVuZChjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBtZXNz
YWdlKSk7CisgICAgICAgICAgICBjYWxsKGdsb2JhbE9iamVjdCwgZGVmZXJyZWRQcm9taXNlLT5K
U1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBz
ZWVuLi4uIik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CiAgICAg
ICAgIH07CiAKQEAgLTIwNiw3ICsyMDYsNyBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9i
YWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2UobWFrZVN0cmluZygiVGhlIHNhbWUgSlNTY3Jp
cHQgd2FzIHByb3ZpZGVkIGZvciB0d28gZGlmZmVyZW50IGlkZW50aWZpZXJzLCBwcmV2aW91c2x5
OiAiLCBvbGRNb2R1bGVLZXksICIgYW5kIG5vdzogIiwgbW9kdWxlS2V5LnN0cmluZygpKSk7CiAK
ICAgICAgICAgYXJncy5hcHBlbmQoc291cmNlKTsKLSAgICAgICAgY2FsbChjYWxsRnJhbWUsIGRl
ZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUoKSwgYXJncywgIlRoaXMg
c2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKKyAgICAgICAgY2FsbChnbG9iYWxPYmplY3QsIGRl
ZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUoKSwgYXJncywgIlRoaXMg
c2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVm
aW5lZCgpOwogICAgIH0pOwogCkBAIC0yMTQsMjQgKzIxNCwyNCBAQCBKU0ludGVybmFsUHJvbWlz
ZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYgogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgICAgICBhcmdz
LmFwcGVuZChjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKIAotICAgICAgICBjYWxsKGNhbGxGcmFt
ZSwgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3MsICJU
aGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgIGNhbGwoZ2xvYmFsT2JqZWN0
LCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRo
aXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1Vu
ZGVmaW5lZCgpOwogICAgIH0pOwogCi0gICAgW1tjb250ZXh0IG1vZHVsZUxvYWRlckRlbGVnYXRl
XSBjb250ZXh0OmNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOls6OkpTVmFsdWUgdmFs
dWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVjLCBrZXkpIGluQ29udGV4dDpjb250ZXh0XSB3aXRo
UmVzb2x2ZUhhbmRsZXI6Wzo6SlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGV4ZWMs
IHJlc29sdmUpIGluQ29udGV4dDpjb250ZXh0XSBhbmRSZWplY3RIYW5kbGVyOls6OkpTVmFsdWUg
dmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVjLCByZWplY3QpIGluQ29udGV4dDpjb250ZXh0
XV07CisgICAgW1tjb250ZXh0IG1vZHVsZUxvYWRlckRlbGVnYXRlXSBjb250ZXh0OmNvbnRleHQg
ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOls6OkpTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0
b1JlZihnbG9iYWxPYmplY3QsIGtleSkgaW5Db250ZXh0OmNvbnRleHRdIHdpdGhSZXNvbHZlSGFu
ZGxlcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoZ2xvYmFsT2JqZWN0LCBy
ZXNvbHZlKSBpbkNvbnRleHQ6Y29udGV4dF0gYW5kUmVqZWN0SGFuZGxlcjpbOjpKU1ZhbHVlIHZh
bHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoZ2xvYmFsT2JqZWN0LCByZWplY3QpIGluQ29udGV4dDpj
b250ZXh0XV07CiAgICAgaWYgKGNvbnRleHQuZXhjZXB0aW9uKSB7Ci0gICAgICAgIGRlZmVycmVk
LT5yZWplY3QoZXhlYywgdG9KUyhleGVjLCBbY29udGV4dC5leGNlcHRpb24gSlNWYWx1ZVJlZl0p
KTsKKyAgICAgICAgZGVmZXJyZWQtPnJlamVjdChnbG9iYWxPYmplY3QsIHRvSlMoZ2xvYmFsT2Jq
ZWN0LCBbY29udGV4dC5leGNlcHRpb24gSlNWYWx1ZVJlZl0pKTsKICAgICAgICAgY29udGV4dC5l
eGNlcHRpb24gPSBuaWw7CiAgICAgfQogICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwog
fQogCi1KU09iamVjdCogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9y
dE1ldGFQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNNb2R1bGVSZWNvcmQqLCBKU1Zh
bHVlKQorSlNPYmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBv
cnRNZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUga2V5LCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNPYmplY3QqIG1l
dGFQcm9wZXJ0aWVzID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5u
dWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpOworICAgIEpTT2JqZWN0KiBtZXRhUHJvcGVy
dGllcyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHZtLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5
cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAKICAgICBtZXRhUHJvcGVydGllcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZmlsZW5hbWUiKSwga2V5KTsKQEAgLTI0MCwxNyArMjQwLDE3IEBAIEpT
T2JqZWN0KiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVBy
b3BlcnRpZXMoSlNHbG9iYWxPYmplCiAgICAgcmV0dXJuIG1ldGFQcm9wZXJ0aWVzOwogfQogCi1K
U1ZhbHVlIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJFdmFsdWF0ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiBtb2R1
bGVMb2FkZXIsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIG1vZHVsZVJlY29yZFZhbHVlLCBKU1ZhbHVl
IHNjcmlwdEZldGNoZXIpCitKU1ZhbHVlIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJF
dmFsdWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU01vZHVsZUxvYWRlciogbW9k
dWxlTG9hZGVyLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBtb2R1bGVSZWNvcmRWYWx1ZSwgSlNWYWx1
ZSBzY3JpcHRGZXRjaGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAotICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdp
dGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCkpXTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNH
bG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdCldOwogICAgIGlkIDxKU01v
ZHVsZUxvYWRlckRlbGVnYXRlPiBtb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IFtjb250ZXh0IG1vZHVs
ZUxvYWRlckRlbGVnYXRlXTsKICAgICBOU1VSTCAqdXJsID0gbmlsOwogCiAgICAgaWYgKFttb2R1
bGVMb2FkZXJEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdpbGxFdmFsdWF0
ZU1vZHVsZTopXSB8fCBbbW9kdWxlTG9hZGVyRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihkaWRFdmFsdWF0ZU1vZHVsZTopXSkgewotICAgICAgICBTdHJpbmcgbW9kdWxlS2V5
ID0ga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOworICAgICAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5
LnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgICAgIHVybCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnN0YXRpY19j
YXN0PE5TU3RyaW5nICo+KG1vZHVsZUtleSldOwogICAgIH0KQEAgLTI1OSw3ICsyNTksNyBAQCBK
U1ZhbHVlIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJFdmFsdWF0ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFeAogICAgICAgICBbbW9kdWxlTG9hZGVyRGVsZWdhdGUgd2ls
bEV2YWx1YXRlTW9kdWxlOnVybF07CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBtb2R1bGVMb2FkZXItPmV2YWx1YXRlTm9uVmlydHVhbChleGVjLCBrZXksIG1v
ZHVsZVJlY29yZFZhbHVlLCBzY3JpcHRGZXRjaGVyKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1v
ZHVsZUxvYWRlci0+ZXZhbHVhdGVOb25WaXJ0dWFsKGdsb2JhbE9iamVjdCwga2V5LCBtb2R1bGVS
ZWNvcmRWYWx1ZSwgc2NyaXB0RmV0Y2hlcik7CiAKICAgICBpZiAoW21vZHVsZUxvYWRlckRlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZGlkRXZhbHVhdGVNb2R1bGU6KV0pCiAg
ICAgICAgIFttb2R1bGVMb2FkZXJEZWxlZ2F0ZSBkaWRFdmFsdWF0ZU1vZHVsZTp1cmxdOwpAQCAt
MjcxLDE1ICsyNzEsMTQgQEAgSlNWYWx1ZSBKU0FQSUdsb2JhbE9iamVjdDo6bG9hZEFuZEV2YWx1
YXRlSlNTY3JpcHRNb2R1bGUoY29uc3QgSlNMb2NrSG9sZGVyJiwgSlMKIHsKICAgICBBU1NFUlQo
c2NyaXB0LnR5cGUgPT0ga0pTU2NyaXB0VHlwZU1vZHVsZSk7CiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxFeGVjKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmllciBrZXkgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmcgeyBbW3NjcmlwdCBzb3VyY2VVUkxdIGFic29s
dXRlU3RyaW5nXSB9KTsKLSAgICBKU0ludGVybmFsUHJvbWlzZSogcHJvbWlzZSA9IGltcG9ydE1v
ZHVsZShleGVjLCBrZXksIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOworICAgIEpTSW50
ZXJuYWxQcm9taXNlKiBwcm9taXNlID0gaW1wb3J0TW9kdWxlKHRoaXMsIGtleSwganNVbmRlZmlu
ZWQoKSwganNVbmRlZmluZWQoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBhdXRvIHJlc3VsdCA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywg
dGhpcyk7CisgICAgYXV0byByZXN1bHQgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKHRo
aXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgcmVzdWx0LT5y
ZXNvbHZlKGV4ZWMsIHByb21pc2UpOworICAgIHJlc3VsdC0+cmVzb2x2ZSh0aGlzLCBwcm9taXNl
KTsKICAgICByZXR1cm4gcmVzdWx0LT5wcm9taXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAppbmRleCBiMmFlNWNkMTZhNTZhNzhiNDg4
YTE3MzJlOGY2ODk1NjRlYjQ0YmQxLi40MWY1MDlkMzY0YWJjODQ0M2M0ZTgxZTQ2MDczMWM2MTc5
ZDA0MmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVX
cmFwcGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBl
ci5oCkBAIC0zMCw3ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNBUElWYWx1
ZVdyYXBwZXIgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKLSAgICBmcmllbmQgSlNWYWx1ZSBqc0FQ
SVZhbHVlV3JhcHBlcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBmcmllbmQgSlNWYWx1ZSBq
c0FQSVZhbHVlV3JhcHBlcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogcHVibGljOgogICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAppbmRleCA0NGVkNDk4MDkzOWQwOWRhNDhi
MTg2ODFiODVjN2ZiMDQwN2YxNzE2Li4xMDkxOWI0Zjc3ODBjOGE0ZTJjNmQ0MzhlNTg4Yjg5N2I4
ZmIyZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCkBAIC00OCwzNyArNDgs
MzcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2Ny
aXB0SW50ZXJuYWwoY29uc3QgSlNMb2NrSG9sZGVyJiwgRXhlY1N0YXRlKiBleGVjLCBKU0NvbnRl
eHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK0pTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdElu
dGVybmFsKGNvbnN0IEpTTG9ja0hvbGRlciYsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIFVOVVNFRF9QQVJBTShj
dHgpOwogCiAgICAgSlNPYmplY3QqIGpzVGhpc09iamVjdCA9IHRvSlModGhpc09iamVjdCk7CiAK
ICAgICAvLyBldmFsdWF0ZSBzZXRzICJ0aGlzIiB0byB0aGUgZ2xvYmFsIG9iamVjdCBpZiBpdCBp
cyBOVUxMCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmpl
Y3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgTmFrZWRQdHI8
RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUg
PSBwcm9maWxlZEV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBQcm9maWxpbmdS
ZWFzb246OkFQSSwgc291cmNlLCBqc1RoaXNPYmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOwor
ICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBwcm9maWxlZEV2YWx1YXRlKHZtRW50cnlHbG9iYWxP
YmplY3QsIFByb2ZpbGluZ1JlYXNvbjo6QVBJLCBzb3VyY2UsIGpzVGhpc09iamVjdCwgZXZhbHVh
dGlvbkV4Y2VwdGlvbik7CiAKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgewogICAgICAg
ICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV2
YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGdsb2JhbE9iamVjdCwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKSk7CiAjaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBoYXZlIGEgZGVi
dWdnZXIgYXR0YWNoZWQgd2UgY291bGQgbGVhcm4gYWJvdXQgUGFyc2VFcnJvciBleGNlcHRpb25z
IHRocm91Z2gKICAgICAgICAgLy8gU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZCBhbmQg
dGhpcyBwYXRoIGNvdWxkIHByb2R1Y2UgYSBkdXBsaWNhdGUgd2FybmluZy4gVGhlCiAgICAgICAg
IC8vIERlYnVnZ2VyIHBhdGggaXMgY3VycmVudGx5IGlnbm9yZWQgYnkgaW5zcGVjdG9yLgogICAg
ICAgICAvLyBOT1RFOiBJZiB3ZSBkb24ndCBoYXZlIGEgZGVidWdnZXIsIHRoaXMgU291cmNlQ29k
ZSB3aWxsIGJlIGZvcmV2ZXIgbG9zdCB0byB0aGUgaW5zcGVjdG9yLgogICAgICAgICAvLyBXZSBj
b3VsZCBzdGFzaCBpdCBpbiB0aGUgaW5zcGVjdG9yIGluIGNhc2UgYW4gaW5zcGVjdG9yIGlzIGV2
ZXIgb3BlbmVkLgotICAgICAgICBnbG9iYWxPYmplY3QtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgIHZt
RW50cnlHbG9iYWxPYmplY3QtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbmRpZgogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgIHJl
dHVybiB0b1JlZihleGVjLCByZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiB0b1JlZihnbG9i
YWxPYmplY3QsIHJldHVyblZhbHVlKTsKIAogICAgIC8vIGhhcHBlbnMsIGZvciBleGFtcGxlLCB3
aGVuIHRoZSBvbmx5IHN0YXRlbWVudCBpcyBhbiBlbXB0eSAoJzsnKSBzdGF0ZW1lbnQKLSAgICBy
ZXR1cm4gdG9SZWYoZXhlYywganNVbmRlZmluZWQoKSk7CisgICAgcmV0dXJuIHRvUmVmKGdsb2Jh
bE9iamVjdCwganNVbmRlZmluZWQoKSk7CiB9CiAKIEpTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlw
dChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtODcsOCArODcsOCBAQCBKU1ZhbHVlUmVmIEpTRXZhbHVh
dGVTY3JpcHQoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU09iamVjdFJl
ZiB0aAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0
eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBs
b2NrZXIodm0pOwogCiAgICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwgc3RhcnRp
bmdMaW5lTnVtYmVyKTsKQEAgLTk2LDcgKzk2LDcgQEAgSlNWYWx1ZVJlZiBKU0V2YWx1YXRlU2Ny
aXB0KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNPYmplY3RSZWYgdGgK
ICAgICBhdXRvIHNvdXJjZVVSTFN0cmluZyA9IHNvdXJjZVVSTCA/IHNvdXJjZVVSTC0+c3RyaW5n
KCkgOiBTdHJpbmcoKTsKICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uoc2NyaXB0
LT5zdHJpbmcoKSwgU291cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0sIFVSTCh7IH0sIHNv
dXJjZVVSTFN0cmluZyksIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJ
bnQoc3RhcnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7CiAKLSAgICByZXR1cm4g
SlNFdmFsdWF0ZVNjcmlwdEludGVybmFsKGxvY2tlciwgZXhlYywgY3R4LCB0aGlzT2JqZWN0LCBz
b3VyY2UsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChs
b2NrZXIsIGdsb2JhbE9iamVjdCwgY3R4LCB0aGlzT2JqZWN0LCBzb3VyY2UsIGV4Y2VwdGlvbik7
CiB9CiAKIGJvb2wgSlNDaGVja1NjcmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmlu
Z1JlZiBzY3JpcHQsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJl
ciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtMTA1LDggKzEwNSw4IEBAIGJvb2wgSlNDaGVj
a1NjcmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTU3Ry
aW5nUmVmIHNvdXJjCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIodm0pOwogCiAgICAgc3RhcnRpbmdMaW5lTnVtYmVyID0gc3RkOjptYXgoMSwg
c3RhcnRpbmdMaW5lTnVtYmVyKTsKQEAgLTExNSwxNCArMTE1LDE0IEBAIGJvb2wgSlNDaGVja1Nj
cmlwdFN5bnRheChKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzY3JpcHQsIEpTU3RyaW5n
UmVmIHNvdXJjCiAgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtYWtlU291cmNlKHNjcmlwdC0+c3Ry
aW5nKCksIFNvdXJjZU9yaWdpbiB7IHNvdXJjZVVSTFN0cmluZyB9LCBVUkwoeyB9LCBzb3VyY2VV
UkxTdHJpbmcpLCBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHN0
YXJ0aW5nTGluZU51bWJlciksIE9yZGluYWxOdW1iZXIoKSkpOwogICAgIAogICAgIEpTVmFsdWUg
c3ludGF4RXhjZXB0aW9uOwotICAgIGJvb2wgaXNWYWxpZFN5bnRheCA9IGNoZWNrU3ludGF4KHZt
LnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPmdsb2JhbEV4ZWMoKSwgc291cmNlLCAmc3ludGF4
RXhjZXB0aW9uKTsKKyAgICBib29sIGlzVmFsaWRTeW50YXggPSBjaGVja1N5bnRheCh2bS52bUVu
dHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCksIHNvdXJjZSwgJnN5bnRheEV4Y2VwdGlvbik7
CiAKICAgICBpZiAoIWlzVmFsaWRTeW50YXgpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAg
ICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBzeW50YXhFeGNlcHRpb24pOworICAg
ICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGdsb2JhbE9iamVjdCwgc3ludGF4RXhjZXB0aW9u
KTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24gPSBFeGNlcHRpb246OmNyZWF0ZSh2bSwgc3ludGF4RXhjZXB0aW9uKTsKLSAgICAgICAg
dm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9y
dEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworICAgICAgICB2bS52bUVudHJ5R2xvYmFs
T2JqZWN0KGdsb2JhbE9iamVjdCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC0xNDAsOCArMTQwLDggQEAgdm9pZCBKU0dhcmJhZ2VDb2xsZWN0KEpT
Q29udGV4dFJlZiBjdHgpCiAgICAgaWYgKCFjdHgpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAg
dm0uaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOwpAQCAtMTUzLDggKzE1Myw4IEBA
IHZvaWQgSlNSZXBvcnRFeHRyYU1lbW9yeUNvc3QoSlNDb250ZXh0UmVmIGN0eCwgc2l6ZV90IHNp
emUpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0p
OwogCiAgICAgdm0uaGVhcC5kZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnkoc2l6ZSk7CkBAIC0x
NjgsOCArMTY4LDggQEAgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dp
bmcoSlNDb250ZXh0UmVmIGN0eCkKICAgICBpZiAoIWN0eCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAg
ICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CiB9CkBA
IC0xNzksOCArMTc5LDggQEAgdm9pZCBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dp
bmcoSlNDb250ZXh0UmVmIGN0eCkKICAgICBpZiAoIWN0eCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAg
ICAgdm0uaGVhcC5jb2xsZWN0U3luYyhDb2xsZWN0aW9uU2NvcGU6OkVkZW4pOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2VJbnRlcm5hbC5oCmluZGV4IGEyZmNjNWNkYmQ5Nzhk
MmEzNGRlOTkxMjlhZmJjY2Y4MWMwNDA3OTYuLjg0Y2YzZmJhZDAyMzY4MWJiNGI4NTIyOGNhMDkz
N2MzOGI0MjAxZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNl
SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZUludGVybmFs
LmgKQEAgLTMyLDcgKzMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWxsRnJhbWU7CiBj
bGFzcyBKU0xvY2tIb2xkZXI7CiBjbGFzcyBTb3VyY2VDb2RlOwotdXNpbmcgRXhlY1N0YXRlID0g
Q2FsbEZyYW1lOwogfQogCi1leHRlcm4gIkMiIEpTVmFsdWVSZWYgSlNFdmFsdWF0ZVNjcmlwdElu
dGVybmFsKGNvbnN0IEpTQzo6SlNMb2NrSG9sZGVyJiwgSlNDOjpFeGVjU3RhdGUqLCBKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CitleHRlcm4gIkMiIEpTVmFsdWVSZWYgSlNFdmFsdWF0ZVNj
cmlwdEludGVybmFsKGNvbnN0IEpTQzo6SlNMb2NrSG9sZGVyJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgSlNDOjpTb3Vy
Y2VDb2RlJiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDVGVzdFJ1bm5lclV0aWxzLmNwcAppbmRleCBkMzE0YzVkNDhjZGY3NGQxNDNk
OTIzMzlkYWU3MTA4NDU0Yjg4YzI0Li42ZGEyNjljMDBlNTg5ZjI1M2ViYmExNTc4ZmNiMzdiNzJi
NzllMTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ1Rlc3RSdW5u
ZXJVdGlscy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NUZXN0UnVubmVy
VXRpbHMuY3BwCkBAIC0zNSwzMCArMzUsMzAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEpTVmFsdWVS
ZWYgZmFpbE5leHROZXdDb2RlQmxvY2soSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgRXhl
Y1N0YXRlKiBleGVjPSB0b0pTKGNvbnRleHQpOwotICAgIEpTTG9ja0hvbGRlciBob2xkZXIoZXhl
Yyk7Ci0gICAgcmV0dXJuIHRvUmVmKGV4ZWMsIGZhaWxOZXh0TmV3Q29kZUJsb2NrKGV4ZWMpKTsK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0PSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBob2xkZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdG9SZWYoZ2xvYmFs
T2JqZWN0LCBmYWlsTmV4dE5ld0NvZGVCbG9jayhnbG9iYWxPYmplY3QpKTsKIH0KIAogSlNWYWx1
ZVJlZiBudW1iZXJPZkRGR0NvbXBpbGVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IHRoZUZ1bmN0aW9uVmFsdWVSZWYpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjPSB0b0pTKGNvbnRl
eHQpOwotICAgIEpTTG9ja0hvbGRlciBob2xkZXIoZXhlYyk7Ci0gICAgcmV0dXJuIHRvUmVmKGV4
ZWMsIG51bWJlck9mREZHQ29tcGlsZXModG9KUyhleGVjLCB0aGVGdW5jdGlvblZhbHVlUmVmKSkp
OworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Q9IHRvSlMoY29udGV4dCk7CisgICAg
SlNMb2NrSG9sZGVyIGhvbGRlcihnbG9iYWxPYmplY3QpOworICAgIHJldHVybiB0b1JlZihnbG9i
YWxPYmplY3QsIG51bWJlck9mREZHQ29tcGlsZXModG9KUyhnbG9iYWxPYmplY3QsIHRoZUZ1bmN0
aW9uVmFsdWVSZWYpKSk7CiB9CiAKIEpTVmFsdWVSZWYgc2V0TmV2ZXJJbmxpbmUoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdGhlRnVuY3Rpb25WYWx1ZVJlZikKIHsKLSAgICBFeGVj
U3RhdGUqIGV4ZWM9IHRvSlMoY29udGV4dCk7Ci0gICAgSlNMb2NrSG9sZGVyIGhvbGRlcihleGVj
KTsKLSAgICByZXR1cm4gdG9SZWYoZXhlYywgc2V0TmV2ZXJJbmxpbmUodG9KUyhleGVjLCB0aGVG
dW5jdGlvblZhbHVlUmVmKSkpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Q9IHRv
SlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGhvbGRlcihnbG9iYWxPYmplY3QpOworICAg
IHJldHVybiB0b1JlZihnbG9iYWxPYmplY3QsIHNldE5ldmVySW5saW5lKHRvSlMoZ2xvYmFsT2Jq
ZWN0LCB0aGVGdW5jdGlvblZhbHVlUmVmKSkpOwogfQogCiBKU1ZhbHVlUmVmIHNldE5ldmVyT3B0
aW1pemUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdGhlRnVuY3Rpb25WYWx1ZVJl
ZikKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWM9IHRvSlMoY29udGV4dCk7Ci0gICAgSlNMb2NrSG9s
ZGVyIGhvbGRlcihleGVjKTsKLSAgICByZXR1cm4gdG9SZWYoZXhlYywgc2V0TmV2ZXJPcHRpbWl6
ZSh0b0pTKGV4ZWMsIHRoZUZ1bmN0aW9uVmFsdWVSZWYpKSk7CisgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdD0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKGds
b2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHRvUmVmKGdsb2JhbE9iamVjdCwgc2V0TmV2ZXJPcHRp
bWl6ZSh0b0pTKGdsb2JhbE9iamVjdCwgdGhlRnVuY3Rpb25WYWx1ZVJlZikpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrQ29uc3RydWN0b3IuaAppbmRleCAzMDVhYzhjM2EzNWRmNjUxZDAzNmQxNmMxMzk0MDU5NTY3
MDg5NDYxLi4yNTkyOGZiYWZkZmM3ODZhNjQyZTYxMjg0ZTFjNGUzMzY5MGIyNjdkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgKQEAg
LTM2LDkgKzM2LDkgQEAgY2xhc3MgSlNDYWxsYmFja0NvbnN0cnVjdG9yIGZpbmFsIDogcHVibGlj
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSW1wbGVtZW50c0Rl
ZmF1bHRIYXNJbnN0YW5jZTsKIAotICAgIHN0YXRpYyBKU0NhbGxiYWNrQ29uc3RydWN0b3IqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCBKU09iamVjdENhbGxBc0NvbnN0
cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2spIAorICAgIHN0YXRpYyBKU0NhbGxiYWNrQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNDbGFzc1JlZiBjbGFzc1JlZiwgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxi
YWNrIGNhbGxiYWNrKSAKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
ICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIEpTQ2FsbGJhY2tDb25z
dHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0NhbGxi
YWNrQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU0NhbGxiYWNrQ29uc3RydWN0b3IoZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIGNsYXNzUmVmLCBjYWxsYmFjayk7CiAgICAgICAgIGNvbnN0cnVjdG9y
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QsIGNsYXNzUmVmKTsKICAgICAgICAgcmV0dXJu
IGNvbnN0cnVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3QuaAppbmRleCAzNzIzZTQwZmVjYjUxNzZkOTQ3YzFlOWUyNDczM2I1MDM1NmVmMmU1Li40ZjVm
NGI2ZjUzNTFmMzg0NjQ0N2YyYzAwZTY3OWMzNWU4YTA0YWI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaApAQCAtMTI0LDEwICsxMjQsMTAgQEAgc3Ry
dWN0IEpTQ2FsbGJhY2tPYmplY3REYXRhIHsKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBjbGFz
cyBKU0NhbGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGljIFBhcmVudCB7CiBwcm90ZWN0ZWQ6Ci0g
ICAgSlNDYWxsYmFja09iamVjdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCB2
b2lkKiBkYXRhKTsKKyAgICBKU0NhbGxiYWNrT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgSlNDbGFzc1JlZiwgdm9pZCogZGF0YSk7CiAgICAgSlNDYWxsYmFja09iamVjdChWTSYs
IEpTQ2xhc3NSZWYsIFN0cnVjdHVyZSopOwogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVj
U3RhdGUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCiBwdWJsaWM6CkBAIC0xMzcsMTIgKzEzNywxMiBA
QCBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGljIFBhcmVudCB7CiAKICAgICB+
SlNDYWxsYmFja09iamVjdCgpOwogCi0gICAgc3RhdGljIEpTQ2FsbGJhY2tPYmplY3QqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCB2b2lkKiBkYXRhKQorICAgIHN0YXRp
YyBKU0NhbGxiYWNrT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIHZvaWQqIGRhdGEpCiAg
ICAgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBnZXRW
TShnbG9iYWxPYmplY3QpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgIXN0
cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkgfHwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSA9PSBn
bG9iYWxPYmplY3QpOwotICAgICAgICBKU0NhbGxiYWNrT2JqZWN0KiBjYWxsYmFja09iamVjdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQ2FsbGJhY2tPYmplY3Q+KHZtLmhlYXApKSBK
U0NhbGxiYWNrT2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOwotICAgICAg
ICBjYWxsYmFja09iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYyk7CisgICAgICAgIEpTQ2FsbGJh
Y2tPYmplY3QqIGNhbGxiYWNrT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlND
YWxsYmFja09iamVjdD4odm0uaGVhcCkpIEpTQ2FsbGJhY2tPYmplY3QoZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIGNsYXNzUmVmLCBkYXRhKTsKKyAgICAgICAgY2FsbGJhY2tPYmplY3QtPmZpbmlz
aENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIHJldHVybiBjYWxsYmFja09iamVjdDsK
ICAgICB9CiAgICAgc3RhdGljIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PiogY3JlYXRlKFZNJiwg
SlNDbGFzc1JlZiwgU3RydWN0dXJlKik7CkBAIC0xODUsMjIgKzE4NSwyMiBAQCBjbGFzcyBKU0Nh
bGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGljIFBhcmVudCB7CiAKIHByaXZhdGU6CiAgICAgc3Rh
dGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBWTSYpOwotICAgIHN0YXRpYyBT
dHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7CisgICAgc3Rh
dGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCop
OwogCi0gICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CisgICAgc3RhdGljIEpTVmFsdWUgZGVm
YXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlKTsKIAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgCi0gICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogCi0gICAgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQpOwor
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAKLSAgICBzdGF0aWMgYm9vbCBjdXN0
b21IYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIHN0YXRp
YyBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAog
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxs
RGF0YSYpOwpAQCAtMjEzLDcgKzIxMyw3IEBAIGNsYXNzIEpTQ2FsbGJhY2tPYmplY3QgZmluYWwg
OiBwdWJsaWMgUGFyZW50IHsKICAgICAgICAgdGhpc09iamVjdC0+bV9jYWxsYmFja09iamVjdERh
dGEtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiAgICAgfQogCi0gICAgdm9pZCBpbml0KEV4ZWNT
dGF0ZSopOworICAgIHZvaWQgaW5pdChKU0dsb2JhbE9iamVjdCopOwogIAogICAgIHN0YXRpYyBK
U0NhbGxiYWNrT2JqZWN0KiBhc0NhbGxiYWNrT2JqZWN0KEpTVmFsdWUpOwogICAgIHN0YXRpYyBK
U0NhbGxiYWNrT2JqZWN0KiBhc0NhbGxiYWNrT2JqZWN0KEVuY29kZWRKU1ZhbHVlKTsKQEAgLTIy
MSw5ICsyMjEsOSBAQCBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGljIFBhcmVu
dCB7CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSopOwogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogICAgCi0gICAg
SlNWYWx1ZSBnZXRTdGF0aWNWYWx1ZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY2Fs
bGJhY2tHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Cisg
ICAgSlNWYWx1ZSBnZXRTdGF0aWNWYWx1ZShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSk7
CisgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHN0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIGNhbGxiYWNrR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IFByb3BlcnR5TmFtZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDYWxsYmFja09iamVjdERh
dGE+IG1fY2FsbGJhY2tPYmplY3REYXRhOwogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0lu
Zm8geyBudWxscHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCmluZGV4IGM1NTdmOThmZjdhNTU4ZWZlYWE4OTBiNzE3
ZDQzZTc3MGFiNmZlMDAuLmEwMjk5NTI1ZDU4Zjk0OWUxYWY5YTBkNDEzY2VmMjk3OTVhODRhZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1
bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oCkBAIC01Niw4ICs1Niw4IEBAIGlubGluZSBKU0NhbGxiYWNrT2JqZWN0PFBh
cmVudD4qIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6YXNDYWxsYmFja09iamVjdChFbmNvCiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci1KU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OkpT
Q2FsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlND
bGFzc1JlZiBqc0NsYXNzLCB2b2lkKiBkYXRhKQotICAgIDogUGFyZW50KGV4ZWMtPnZtKCksIHN0
cnVjdHVyZSkKK0pTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6SlNDYWxsYmFja09iamVjdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDbGFzc1Jl
ZiBqc0NsYXNzLCB2b2lkKiBkYXRhKQorICAgIDogUGFyZW50KGdldFZNKGdsb2JhbE9iamVjdCks
IHN0cnVjdHVyZSkKICAgICAsIG1fY2FsbGJhY2tPYmplY3REYXRhKG1ha2VVbmlxdWU8SlNDYWxs
YmFja09iamVjdERhdGE+KGRhdGEsIGpzQ2xhc3MpKQogewogfQpAQCAtODgsMTIgKzg4LDEyIEBA
IEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6fkpTQ2FsbGJhY2tPYmplY3QoKQogfQogICAgIAog
dGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KLXZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpm
aW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChQYXJlbnQ6OmluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKLSAgICBpbml0KGV4ZWMpOworICAgIGluaXQoZ2xvYmFsT2JqZWN0
KTsKIH0KIAogLy8gVGhpcyBpcyBqdXN0IGZvciBHbG9iYWwgb2JqZWN0LCBzbyB3ZSBjYW4gYXNz
dW1lIHRoYXQgQmFzZTo6ZmluaXNoQ3JlYXRpb24gaXMgSlNHbG9iYWxPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uLgpAQCAtMTAzLDEzICsxMDMsMTMgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICBBU1NFUlQoUGFyZW50Ojppbmhlcml0cyh2
bSwgaW5mbygpKSk7CiAgICAgQVNTRVJUKFBhcmVudDo6aXNHbG9iYWxPYmplY3QoKSk7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIGluaXQoanNDYXN0PEpTR2xvYmFsT2JqZWN0
Kj4odGhpcyktPmdsb2JhbEV4ZWMoKSk7CisgICAgaW5pdChqc0Nhc3Q8SlNHbG9iYWxPYmplY3Qq
Pih0aGlzKSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6aW5pdChFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6aW5pdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEFT
U0VSVChleGVjKTsKKyAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKICAgICAKICAgICBWZWN0b3I8
SlNPYmplY3RJbml0aWFsaXplQ2FsbGJhY2ssIDE2PiBpbml0Um91dGluZXM7CiAgICAgSlNDbGFz
c1JlZiBqc0NsYXNzID0gY2xhc3NSZWYoKTsKQEAgLTEyMCw5ICsxMjAsOSBAQCB2b2lkIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6aW5pdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgCiAgICAgLy8g
aW5pdGlhbGl6ZSBmcm9tIGJhc2UgdG8gZGVyaXZlZAogICAgIGZvciAoaW50IGkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGluaXRSb3V0aW5lcy5zaXplKCkpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOworICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgSlNP
YmplY3RJbml0aWFsaXplQ2FsbGJhY2sgaW5pdGlhbGl6ZSA9IGluaXRSb3V0aW5lc1tpXTsKLSAg
ICAgICAgaW5pdGlhbGl6ZSh0b1JlZihleGVjKSwgdG9SZWYodGhpcykpOworICAgICAgICBpbml0
aWFsaXplKHRvUmVmKGdsb2JhbE9iamVjdCksIHRvUmVmKGpzQ2FzdDxKU09iamVjdCo+KHRoaXMp
KSk7CiAgICAgfQogICAgIAogICAgIG1fY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7CkBA
IC0xNDAsMjMgKzE0MCwyMyBAQCBTdHJpbmcgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpjbGFz
c05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgVk0mIHZtKQogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50PgotU3RyaW5nIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6dG9TdHJpbmdOYW1l
KGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykKK1N0cmluZyBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBjb25zdCBDbGFzc0luZm8q
IGluZm8gPSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CiAgICAgQVNTRVJUKGluZm8pOwogICAgIHJl
dHVybiBpbmZvLT5tZXRob2RUYWJsZS5jbGFzc05hbWUob2JqZWN0LCB2bSk7CiB9CiAKIHRlbXBs
YXRlIDxjbGFzcyBQYXJlbnQ+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU0NhbGxiYWNrT2Jq
ZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBn
ZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxs
YmFja09iamVjdCo+KG9iamVjdCk7Ci0gICAgSlNDb250ZXh0UmVmIGN0eCA9IHRvUmVmKGV4ZWMp
OwotICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlzT2JqZWN0KTsKKyAgICBKU0Nv
bnRleHRSZWYgY3R4ID0gdG9SZWYoZ2xvYmFsT2JqZWN0KTsKKyAgICBKU09iamVjdFJlZiB0aGlz
UmVmID0gdG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4odGhpc09iamVjdCkpOwogICAgIFJlZlB0cjxP
cGFxdWVKU1N0cmluZz4gcHJvcGVydHlOYW1lUmVmOwogICAgIAogICAgIGlmIChTdHJpbmdJbXBs
KiBuYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpKSB7CkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGUKICAgICAgICAgICAgIGlmIChKU09iamVjdEhhc1Byb3BlcnR5Q2Fs
bGJhY2sgaGFzUHJvcGVydHkgPSBqc0NsYXNzLT5oYXNQcm9wZXJ0eSkgewogICAgICAgICAgICAg
ICAgIGlmICghcHJvcGVydHlOYW1lUmVmKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWVSZWYgPSBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKG5hbWUpOwotICAgICAgICAgICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKKyAgICAgICAgICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgICAgICAgICBpZiAoaGFzUHJvcGVydHkoY3R4LCB0aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYu
Z2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3Qs
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSwgY2FsbGJhY2tHZXR0ZXIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTE3NiwyMyArMTc2LDIzIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYg
dmFsdWU7CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9IGdldFByb3BlcnR5KGN0eCwgdGhpc1JlZiwgcHJvcGVydHlOYW1lUmVm
LmdldCgpLCAmZXhjZXB0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWYgKGV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgdG9KUyhnbG9iYWxPYmplY3QsIGV4Y2Vw
dGlvbikpOwogICAgICAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwg
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIHRvSlMoZXhlYywgdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIHRvSlMoZ2xvYmFs
T2JqZWN0LCB2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3Mt
PnN0YXRpY1ZhbHVlcyhleGVjKSkgeworICAgICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0
aWNWYWx1ZXNUYWJsZSogc3RhdGljVmFsdWVzID0ganNDbGFzcy0+c3RhdGljVmFsdWVzKGdsb2Jh
bE9iamVjdCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGljVmFsdWVzLT5jb250YWlucyhu
YW1lKSkgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+
Z2V0U3RhdGljVmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHRoaXNPYmplY3QtPmdldFN0YXRpY1ZhbHVlKGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwgdmFsdWUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDAsNyArMjAwLDcgQEAgYm9v
bCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25z
VGFibGUqIHN0YXRpY0Z1bmN0aW9ucyA9IGpzQ2xhc3MtPnN0YXRpY0Z1bmN0aW9ucyhleGVjKSkg
eworICAgICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogc3Rh
dGljRnVuY3Rpb25zID0ganNDbGFzcy0+c3RhdGljRnVuY3Rpb25zKGdsb2JhbE9iamVjdCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoc3RhdGljRnVuY3Rpb25zLT5jb250YWlucyhuYW1lKSkgewog
ICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIHN0YXRpY0Z1
bmN0aW9uR2V0dGVyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDks
MjUgKzIwOSwyNSBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgcmV0dXJuIFBhcmVudDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIFBhcmVudDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAog
dGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KLWJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IHJldHVybiBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KG9iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAg
Vk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSwgc2xvdCk7CiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBQYXJlbnQ+Ci1KU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVmYXVsdFZhbHVl
KGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0
aXZlVHlwZSBoaW50KQorSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRlZmF1bHRW
YWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGNvbnN0IEpTQ2FsbGJhY2tPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgSlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7Ci0gICAg
SlNDb250ZXh0UmVmIGN0eCA9IHRvUmVmKGV4ZWMpOwotICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYg
PSB0b1JlZih0aGlzT2JqZWN0KTsKKyAgICBKU0NvbnRleHRSZWYgY3R4ID0gdG9SZWYoZ2xvYmFs
T2JqZWN0KTsKKyAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYoanNDYXN0PGNvbnN0IEpT
T2JqZWN0Kj4odGhpc09iamVjdCkpOwogICAgIDo6SlNUeXBlIGpzSGludCA9IGhpbnQgPT0gUHJl
ZmVyU3RyaW5nID8ga0pTVHlwZVN0cmluZyA6IGtKU1R5cGVOdW1iZXI7CiAKICAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xh
c3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewpAQCAtMjM1LDI4ICsyMzUsMjggQEAgSlNWYWx1
ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUKICAgICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsK
ICAgICAgICAgICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gY29udmVydFRvVHlwZShjdHgsIHRoaXNS
ZWYsIGpzSGludCwgJmV4Y2VwdGlvbik7CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIHRvSlMoZXhlYywgZXhj
ZXB0aW9uKSk7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgdG9KUyhnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCByZXN1bHQpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0b0pTKGdsb2JhbE9iamVjdCwgcmVzdWx0KTsKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICByZXR1cm4gUGFyZW50OjpkZWZhdWx0VmFsdWUob2JqZWN0LCBleGVjLCBo
aW50KTsKKyAgICByZXR1cm4gUGFyZW50OjpkZWZhdWx0VmFsdWUob2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIGhpbnQpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgotYm9vbCBKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KQorYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oY2VsbCk7Ci0gICAgSlNDb250ZXh0UmVm
IGN0eCA9IHRvUmVmKGV4ZWMpOwotICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlz
T2JqZWN0KTsKKyAgICBKU0NvbnRleHRSZWYgY3R4ID0gdG9SZWYoZ2xvYmFsT2JqZWN0KTsKKyAg
ICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4odGhpc09iamVj
dCkpOwogICAgIFJlZlB0cjxPcGFxdWVKU1N0cmluZz4gcHJvcGVydHlOYW1lUmVmOwotICAgIEpT
VmFsdWVSZWYgdmFsdWVSZWYgPSB0b1JlZihleGVjLCB2YWx1ZSk7CisgICAgSlNWYWx1ZVJlZiB2
YWx1ZVJlZiA9IHRvUmVmKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIAogICAgIGlmIChTdHJp
bmdJbXBsKiBuYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpKSB7CiAgICAgICAgIGZvciAoSlNDbGFz
c1JlZiBqc0NsYXNzID0gdGhpc09iamVjdC0+Y2xhc3NSZWYoKTsganNDbGFzczsganNDbGFzcyA9
IGpzQ2xhc3MtPnBhcmVudENsYXNzKSB7CkBAIC0yNjYsMTYgKzI2NiwxNiBAQCBib29sIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcAogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsK
ICAgICAgICAgICAgICAgICBib29sIHJlc3VsdDsKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKKyAg
ICAgICAgICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGdsb2Jh
bE9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNldFByb3BlcnR5KGN0eCwg
dGhpc1JlZiwgcHJvcGVydHlOYW1lUmVmLmdldCgpLCB2YWx1ZVJlZiwgJmV4Y2VwdGlvbik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCB0b0pTKGV4ZWMsIGV4Y2Vw
dGlvbikpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IHNjb3BlLCB0b0pTKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSk7CiAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCB8fCBleGNlcHRpb24pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChPcGFxdWVK
U0NsYXNzU3RhdGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3MtPnN0YXRpY1Zh
bHVlcyhleGVjKSkgeworICAgICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNU
YWJsZSogc3RhdGljVmFsdWVzID0ganNDbGFzcy0+c3RhdGljVmFsdWVzKGdsb2JhbE9iamVjdCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoU3RhdGljVmFsdWVFbnRyeSogZW50cnkgPSBzdGF0aWNW
YWx1ZXMtPmdldChuYW1lKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmF0dHJp
YnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5KQogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjgzLDIyICsyODMsMjIgQEAgYm9vbCBKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHAKICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0g
MDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0OwogICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZXRQcm9wZXJ0eShjdHgsIHRoaXNSZWYsIGVudHJ5
LT5wcm9wZXJ0eU5hbWVSZWYuZ2V0KCksIHZhbHVlUmVmLCAmZXhjZXB0aW9uKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUs
IHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgdG9KUyhnbG9iYWxPYmplY3QsIGV4Y2Vw
dGlvbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCB8fCBleGNlcHRpb24p
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogc3Rh
dGljRnVuY3Rpb25zID0ganNDbGFzcy0+c3RhdGljRnVuY3Rpb25zKGV4ZWMpKSB7CisgICAgICAg
ICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5jdGlv
bnMgPSBqc0NsYXNzLT5zdGF0aWNGdW5jdGlvbnMoZ2xvYmFsT2JqZWN0KSkgewogICAgICAgICAg
ICAgICAgIGlmIChTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+
Z2V0KG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBnZXRTbG90KHRo
aXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoUGFyZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBnZXRTbG90KSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBQYXJlbnQ6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBhcmVudDo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBnZXRTbG90KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnQ6OnB1dCh0aGlzT2JqZWN0LCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpc09iamVjdC0+SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXREaXJl
Y3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUpOyAvLyBwdXQgYXMgb3ZlcnJpZGUgcHJvcGVydHkK
QEAgLTMwNywyMCArMzA3LDIwIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXQo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICByZXR1cm4gUGFyZW50OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIFBhcmVudDo6cHV0KHRoaXNPYmplY3Qs
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKIHRlbXBsYXRl
IDxjbGFzcyBQYXJlbnQ+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlJbmRleCwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgcHJvcGVydHlJbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGds
b2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgSlNDb250ZXh0UmVmIGN0eCA9IHRvUmVmKGV4ZWMpOwotICAgIEpT
T2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlzT2JqZWN0KTsKKyAgICBKU0NvbnRleHRSZWYg
Y3R4ID0gdG9SZWYoZ2xvYmFsT2JqZWN0KTsKKyAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9S
ZWYoanNDYXN0PEpTT2JqZWN0Kj4odGhpc09iamVjdCkpOwogICAgIFJlZlB0cjxPcGFxdWVKU1N0
cmluZz4gcHJvcGVydHlOYW1lUmVmOwotICAgIEpTVmFsdWVSZWYgdmFsdWVSZWYgPSB0b1JlZihl
eGVjLCB2YWx1ZSk7CisgICAgSlNWYWx1ZVJlZiB2YWx1ZVJlZiA9IHRvUmVmKGdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bSh2bSwgcHJvcGVydHlJbmRleCk7CiAKICAgICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IHRo
aXNPYmplY3QtPmNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0NsYXNzLT5wYXJlbnRD
bGFzcykgewpAQCAtMzMwLDE2ICszMzAsMTYgQEAgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmUKICAg
ICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKICAgICAgICAgICAgIGJvb2wgcmVz
dWx0OwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhleGVjKTsKKyAgICAgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBz
ZXRQcm9wZXJ0eShjdHgsIHRoaXNSZWYsIHByb3BlcnR5TmFtZVJlZi5nZXQoKSwgdmFsdWVSZWYs
ICZleGNlcHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikK
LSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgdG9KUyhleGVjLCBl
eGNlcHRpb24pKTsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IHNjb3BlLCB0b0pTKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSk7CiAgICAgICAgICAgICBpZiAo
cmVzdWx0IHx8IGV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZSogc3Rh
dGljVmFsdWVzID0ganNDbGFzcy0+c3RhdGljVmFsdWVzKGV4ZWMpKSB7CisgICAgICAgIGlmIChP
cGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3MtPnN0
YXRpY1ZhbHVlcyhnbG9iYWxPYmplY3QpKSB7CiAgICAgICAgICAgICBpZiAoU3RhdGljVmFsdWVF
bnRyeSogZW50cnkgPSBzdGF0aWNWYWx1ZXMtPmdldChwcm9wZXJ0eU5hbWUuaW1wbCgpKSkgewog
ICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM0Nywx
OCArMzQ3LDE4IEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpwdXRCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lCiAgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXN1
bHQ7CiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhnbG9iYWxPYmplY3QpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2V0UHJvcGVydHkoY3R4LCB0aGlzUmVmLCBl
bnRyeS0+cHJvcGVydHlOYW1lUmVmLmdldCgpLCB2YWx1ZVJlZiwgJmV4Y2VwdGlvbik7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCB0b0pTKGV4
ZWMsIGV4Y2VwdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCBzY29wZSwgdG9KUyhnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IHx8IGV4Y2VwdGlvbikKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNU
YWJsZSogc3RhdGljRnVuY3Rpb25zID0ganNDbGFzcy0+c3RhdGljRnVuY3Rpb25zKGV4ZWMpKSB7
CisgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUqIHN0YXRpY0Z1
bmN0aW9ucyA9IGpzQ2xhc3MtPnN0YXRpY0Z1bmN0aW9ucyhnbG9iYWxPYmplY3QpKSB7CiAgICAg
ICAgICAgICBpZiAoU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBzdGF0aWNGdW5jdGlvbnMt
PmdldChwcm9wZXJ0eU5hbWUuaW1wbCgpKSkgewogICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+
YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2NywxOCArMzY3LDE4IEBAIGJvb2wgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gUGFyZW50OjpwdXRCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5SW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7
CisgICAgcmV0dXJuIFBhcmVudDo6cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5SW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBQYXJlbnQ+Ci1ib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVsZXRlUHJvcGVydHko
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
Citib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmpl
Y3QqPihjZWxsKTsKLSAgICBKU0NvbnRleHRSZWYgY3R4ID0gdG9SZWYoZXhlYyk7Ci0gICAgSlNP
YmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXNPYmplY3QpOworICAgIEpTQ29udGV4dFJlZiBj
dHggPSB0b1JlZihnbG9iYWxPYmplY3QpOworICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1Jl
Zihqc0Nhc3Q8SlNPYmplY3QqPih0aGlzT2JqZWN0KSk7CiAgICAgUmVmUHRyPE9wYXF1ZUpTU3Ry
aW5nPiBwcm9wZXJ0eU5hbWVSZWY7CiAgICAgCiAgICAgaWYgKFN0cmluZ0ltcGwqIG5hbWUgPSBw
cm9wZXJ0eU5hbWUudWlkKCkpIHsKQEAgLTM4OSwxNiArMzg5LDE2IEBAIGJvb2wgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvCiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwogICAg
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0OwogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOworICAgICAg
ICAgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGVsZXRlUHJvcGVydHkoY3R4LCB0
aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYuZ2V0KCksICZleGNlcHRpb24pOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgdG9K
UyhnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikpOwogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQg
fHwgZXhjZXB0aW9uKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNW
YWx1ZXNUYWJsZSogc3RhdGljVmFsdWVzID0ganNDbGFzcy0+c3RhdGljVmFsdWVzKGV4ZWMpKSB7
CisgICAgICAgICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlKiBzdGF0aWNW
YWx1ZXMgPSBqc0NsYXNzLT5zdGF0aWNWYWx1ZXMoZ2xvYmFsT2JqZWN0KSkgewogICAgICAgICAg
ICAgICAgIGlmIChTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IHN0YXRpY1ZhbHVlcy0+Z2V0KG5h
bWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTQwNiw3ICs0MDYsNyBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBybwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogc3RhdGljRnVuY3Rpb25zID0g
anNDbGFzcy0+c3RhdGljRnVuY3Rpb25zKGV4ZWMpKSB7CisgICAgICAgICAgICBpZiAoT3BhcXVl
SlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5jdGlvbnMgPSBqc0NsYXNzLT5z
dGF0aWNGdW5jdGlvbnMoZ2xvYmFsT2JqZWN0KSkgewogICAgICAgICAgICAgICAgIGlmIChTdGF0
aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+Z2V0KG5hbWUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTQxNiwxNSArNDE2LDE1IEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICByZXR1cm4gUGFyZW50OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBQYXJlbnQ6OmRlbGV0ZVByb3BlcnR5KHRo
aXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAogdGVtcGxhdGUgPGNs
YXNzIFBhcmVudD4KLWJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSkKK2Jvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBn
ZXRWTShnbG9iYWxPYmplY3QpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQ
YXJlbnQ+CkBAIC00NDMsMTEgKzQ0MywxMSBAQCBDb25zdHJ1Y3RUeXBlIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqIGNlbGwsIENvbnN0cnVjdAogdGVt
cGxhdGUgPGNsYXNzIFBhcmVudD4KIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYg
dm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGNhbGxGcmFtZS0+anND
YWxsZWUoKTsKLSAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGNhbGxGcmFtZSk7Cisg
ICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihnbG9iYWxPYmplY3QpOwogICAgIEpTT2Jq
ZWN0UmVmIGNvbnN0cnVjdG9yUmVmID0gdG9SZWYoY29uc3RydWN0b3IpOwogICAgIAogICAgIGZv
ciAoSlNDbGFzc1JlZiBqc0NsYXNzID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pio+
KGNvbnN0cnVjdG9yKS0+Y2xhc3NSZWYoKTsganNDbGFzczsganNDbGFzcyA9IGpzQ2xhc3MtPnBh
cmVudENsYXNzKSB7CkBAIC00NTYsMTUgKzQ1NiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OmNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LAogICAgICAgICAgICAgVmVjdG9yPEpTVmFsdWVSZWYsIDE2PiBhcmd1bWVudHM7CiAgICAgICAg
ICAgICBhcmd1bWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAg
ICAgICAgICAgICAgIGFyZ3VtZW50cy51bmNoZWNrZWRBcHBlbmQodG9SZWYoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKSk7CisgICAgICAgICAgICAgICAgYXJndW1l
bnRzLnVuY2hlY2tlZEFwcGVuZCh0b1JlZihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoaSkpKTsKICAgICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsK
ICAgICAgICAgICAgIEpTT2JqZWN0KiByZXN1bHQ7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNhbGxGcmFtZSk7CisgICAg
ICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGdsb2JhbE9iamVj
dCk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdG9KUyhjYWxsQXNDb25zdHJ1Y3RvcihleGVj
UmVmLCBjb25zdHJ1Y3RvclJlZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgJmV4
Y2VwdGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAg
ICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHNjb3BlLCB0b0pTKGNhbGxG
cmFtZSwgZXhjZXB0aW9uKSk7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCBzY29wZSwgdG9KUyhnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikpOwogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NDc0LDI2ICs0NzQsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+
Ojpjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIH0KIAogdGVtcGxhdGUg
PGNsYXNzIFBhcmVudD4KLWJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpjdXN0b21IYXNJ
bnN0YW5jZShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
Citib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Y3VzdG9tSGFzSW5zdGFuY2UoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
SlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4o
b2JqZWN0KTsKLSAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwotICAgIEpT
T2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlzT2JqZWN0KTsKKyAgICBKU0NvbnRleHRSZWYg
ZXhlY1JlZiA9IHRvUmVmKGdsb2JhbE9iamVjdCk7CisgICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9
IHRvUmVmKGpzQ2FzdDxKU09iamVjdCo+KHRoaXNPYmplY3QpKTsKICAgICAKICAgICBmb3IgKEpT
Q2xhc3NSZWYganNDbGFzcyA9IHRoaXNPYmplY3QtPmNsYXNzUmVmKCk7IGpzQ2xhc3M7IGpzQ2xh
c3MgPSBqc0NsYXNzLT5wYXJlbnRDbGFzcykgewogICAgICAgICBpZiAoSlNPYmplY3RIYXNJbnN0
YW5jZUNhbGxiYWNrIGhhc0luc3RhbmNlID0ganNDbGFzcy0+aGFzSW5zdGFuY2UpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWVSZWYgdmFsdWVSZWYgPSB0b1JlZihleGVjLCB2YWx1ZSk7CisgICAgICAg
ICAgICBKU1ZhbHVlUmVmIHZhbHVlUmVmID0gdG9SZWYoZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CiAgICAgICAgICAgICBib29sIHJl
c3VsdDsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoZXhlYyk7CisgICAgICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
aGFzSW5zdGFuY2UoZXhlY1JlZiwgdGhpc1JlZiwgdmFsdWVSZWYsICZleGNlcHRpb24pOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKKyAgICAg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCB0b0pTKGdsb2Jh
bE9iamVjdCwgZXhjZXB0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICB9CiAgICAgfQpAQCAtNTE2LDEyICs1MTYsMTIgQEAgQ2FsbFR5cGUgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpnZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwsIENhbGxEYXRhJiBjYWxsRGF0YSkK
IHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmNhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2
bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihjYWxsRnJhbWUp
OworICAgIEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9SZWYoZ2xvYmFsT2JqZWN0KTsKICAgICBK
U09iamVjdFJlZiBmdW5jdGlvblJlZiA9IHRvUmVmKGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Ci0g
ICAgSlNPYmplY3RSZWYgdGhpc09ialJlZiA9IHRvUmVmKGpzQ2FzdDxKU09iamVjdCo+KGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGNhbGxGcmFtZSwgTm90U3RyaWN0TW9kZSkpKTsKKyAg
ICBKU09iamVjdFJlZiB0aGlzT2JqUmVmID0gdG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4oY2FsbEZy
YW1lLT50aGlzVmFsdWUoKS50b1RoaXMoZ2xvYmFsT2JqZWN0LCBOb3RTdHJpY3RNb2RlKSkpOwog
ICAgIAogICAgIGZvciAoSlNDbGFzc1JlZiBqc0NsYXNzID0ganNDYXN0PEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pio+KHRvSlMoZnVuY3Rpb25SZWYpKS0+Y2xhc3NSZWYoKTsganNDbGFzczsganND
bGFzcyA9IGpzQ2xhc3MtPnBhcmVudENsYXNzKSB7CiAgICAgICAgIGlmIChKU09iamVjdENhbGxB
c0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24gPSBqc0NsYXNzLT5jYWxsQXNGdW5jdGlv
bikgewpAQCAtNTI5LDE1ICs1MjksMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpjYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGwKICAgICAg
ICAgICAgIFZlY3RvcjxKU1ZhbHVlUmVmLCAxNj4gYXJndW1lbnRzOwogICAgICAgICAgICAgYXJn
dW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJndW1lbnRDb3VudCk7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgICAg
ICAgICBhcmd1bWVudHMudW5jaGVja2VkQXBwZW5kKHRvUmVmKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudChpKSkpOworICAgICAgICAgICAgICAgIGFyZ3VtZW50cy51bmNo
ZWNrZWRBcHBlbmQodG9SZWYoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGkpKSk7CiAgICAgICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CiAgICAgICAg
ICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSB0b0pTKGNhbGxGcmFtZSwgY2FsbEFzRnVuY3Rpb24oZXhlY1JlZiwgZnVuY3Rp
b25SZWYsIHRoaXNPYmpSZWYsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRhKCksICZleGNl
cHRpb24pKTsKKyAgICAgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0b0pTKGdsb2JhbE9i
amVjdCwgY2FsbEFzRnVuY3Rpb24oZXhlY1JlZiwgZnVuY3Rpb25SZWYsIHRoaXNPYmpSZWYsIGFy
Z3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRhKCksICZleGNlcHRpb24pKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAgICAgdGhyb3dFeGNl
cHRpb24oY2FsbEZyYW1lLCBzY29wZSwgdG9KUyhjYWxsRnJhbWUsIGV4Y2VwdGlvbikpOworICAg
ICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRvSlMoZ2xv
YmFsT2JqZWN0LCBleGNlcHRpb24pKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTU0NywyMCArNTQ3LDIwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Y2FsbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpT
Q2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7Ci0gICAgSlNDb250ZXh0
UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKLSAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9S
ZWYodGhpc09iamVjdCk7CisgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihnbG9iYWxP
YmplY3QpOworICAgIEpTT2JqZWN0UmVmIHRoaXNSZWYgPSB0b1JlZihqc0Nhc3Q8SlNPYmplY3Qq
Pih0aGlzT2JqZWN0KSk7CiAgICAgCiAgICAgZm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSB0aGlz
T2JqZWN0LT5jbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0ganNDbGFzcy0+cGFyZW50Q2xh
c3MpIHsKICAgICAgICAgaWYgKEpTT2JqZWN0R2V0UHJvcGVydHlOYW1lc0NhbGxiYWNrIGdldFBy
b3BlcnR5TmFtZXMgPSBqc0NsYXNzLT5nZXRQcm9wZXJ0eU5hbWVzKSB7Ci0gICAgICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CisgICAgICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAg
IGdldFByb3BlcnR5TmFtZXMoZXhlY1JlZiwgdGhpc1JlZiwgdG9SZWYoJnByb3BlcnR5TmFtZXMp
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNW
YWx1ZXNUYWJsZSogc3RhdGljVmFsdWVzID0ganNDbGFzcy0+c3RhdGljVmFsdWVzKGV4ZWMpKSB7
CisgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVl
cyA9IGpzQ2xhc3MtPnN0YXRpY1ZhbHVlcyhnbG9iYWxPYmplY3QpKSB7CiAgICAgICAgICAgICB0
eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRl
cmF0b3I7CiAgICAgICAgICAgICBpdGVyYXRvciBlbmQgPSBzdGF0aWNWYWx1ZXMtPmVuZCgpOwog
ICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CkBAIC01NzMsNyArNTczLDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKE9wYXF1
ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogc3RhdGljRnVuY3Rpb25zID0ganNDbGFzcy0+
c3RhdGljRnVuY3Rpb25zKGV4ZWMpKSB7CisgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3RhdGlj
RnVuY3Rpb25zVGFibGUqIHN0YXRpY0Z1bmN0aW9ucyA9IGpzQ2xhc3MtPnN0YXRpY0Z1bmN0aW9u
cyhnbG9iYWxPYmplY3QpKSB7CiAgICAgICAgICAgICB0eXBlZGVmIE9wYXF1ZUpTQ2xhc3NTdGF0
aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgICAgICBp
dGVyYXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChp
dGVyYXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGUKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBQYXJlbnQ6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpAQCAtNjEzLDMwICs2MTMs
MzAgQEAgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmluaGVyaXRzKEpTQ2xhc3NSZWYg
YykgY29uc3QKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KLUpTVmFsdWUgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpnZXRTdGF0aWNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0
U3RhdGljVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdl
dFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXMpOworICAgIEpTT2Jq
ZWN0UmVmIHRoaXNSZWYgPSB0b1JlZihqc0Nhc3Q8SlNPYmplY3QqPih0aGlzKSk7CiAgICAgCiAg
ICAgaWYgKFN0cmluZ0ltcGwqIG5hbWUgPSBwcm9wZXJ0eU5hbWUudWlkKCkpIHsKICAgICAgICAg
Zm9yIChKU0NsYXNzUmVmIGpzQ2xhc3MgPSBjbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNzID0g
anNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKLSAgICAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNzU3Rh
dGljVmFsdWVzVGFibGUqIHN0YXRpY1ZhbHVlcyA9IGpzQ2xhc3MtPnN0YXRpY1ZhbHVlcyhleGVj
KSkgeworICAgICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZSogc3Rh
dGljVmFsdWVzID0ganNDbGFzcy0+c3RhdGljVmFsdWVzKGdsb2JhbE9iamVjdCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoU3RhdGljVmFsdWVFbnRyeSogZW50cnkgPSBzdGF0aWNWYWx1ZXMtPmdl
dChuYW1lKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoSlNPYmplY3RHZXRQcm9wZXJ0eUNh
bGxiYWNrIGdldFByb3BlcnR5ID0gZW50cnktPmdldFByb3BlcnR5KSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVmIHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhl
eGVjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFByb3BlcnR5KHRv
UmVmKGV4ZWMpLCB0aGlzUmVmLCBlbnRyeS0+cHJvcGVydHlOYW1lUmVmLmdldCgpLCAmZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IGdldFByb3BlcnR5KHRvUmVmKGdsb2JhbE9iamVjdCksIHRoaXNSZWYsIGVudHJ5LT5w
cm9wZXJ0eU5hbWVSZWYuZ2V0KCksICZleGNlcHRpb24pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCB0b0pTKGV4ZWMs
IGV4Y2VwdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9u
KGdsb2JhbE9iamVjdCwgc2NvcGUsIHRvSlMoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvSlMoZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC02NDcsMjEgKzY0NywyMSBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
Z2V0U3RhdGljVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcAogfQogCiB0ZW1w
bGF0ZSA8Y2xhc3MgUGFyZW50PgotRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6c3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
Z2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqID0gYXNDYWxsYmFja09iamVj
dCh0aGlzVmFsdWUpOwogICAgIAogICAgIC8vIENoZWNrIGZvciBjYWNoZWQgb3Igb3ZlcnJpZGUg
cHJvcGVydHkuCiAgICAgUHJvcGVydHlTbG90IHNsb3QyKHRoaXNPYmosIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwotICAgIGlmIChQYXJlbnQ6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QyKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzbG90Mi5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUp
KTsKKyAgICBpZiAoUGFyZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iaiwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QyKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShzbG90Mi5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpOwogCiAgICAgaWYg
KFN0cmluZ0ltcGwqIG5hbWUgPSBwcm9wZXJ0eU5hbWUudWlkKCkpIHsKICAgICAgICAgZm9yIChK
U0NsYXNzUmVmIGpzQ2xhc3MgPSB0aGlzT2JqLT5jbGFzc1JlZigpOyBqc0NsYXNzOyBqc0NsYXNz
ID0ganNDbGFzcy0+cGFyZW50Q2xhc3MpIHsKLSAgICAgICAgICAgIGlmIChPcGFxdWVKU0NsYXNz
U3RhdGljRnVuY3Rpb25zVGFibGUqIHN0YXRpY0Z1bmN0aW9ucyA9IGpzQ2xhc3MtPnN0YXRpY0Z1
bmN0aW9ucyhleGVjKSkgeworICAgICAgICAgICAgaWYgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5j
dGlvbnNUYWJsZSogc3RhdGljRnVuY3Rpb25zID0ganNDbGFzcy0+c3RhdGljRnVuY3Rpb25zKGds
b2JhbE9iamVjdCkpIHsKICAgICAgICAgICAgICAgICBpZiAoU3RhdGljRnVuY3Rpb25FbnRyeSog
ZW50cnkgPSBzdGF0aWNGdW5jdGlvbnMtPmdldChuYW1lKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNhbGxBc0Z1bmN0aW9uID0gZW50
cnktPmNhbGxBc0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCog
byA9IEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzT2JqLT5nbG9iYWxPYmplY3Qo
dm0pLCBjYWxsQXNGdW5jdGlvbiwgbmFtZSk7CkBAIC02NzMsMTggKzY3MywxOCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OnN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgRQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3Io
ZXhlYywgIlN0YXRpYyBmdW5jdGlvbiBwcm9wZXJ0eSBkZWZpbmVkIHdpdGggTlVMTCBjYWxsQXNG
dW5jdGlvbiBjYWxsYmFjay4iX3MpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihnbG9i
YWxPYmplY3QsICJTdGF0aWMgZnVuY3Rpb24gcHJvcGVydHkgZGVmaW5lZCB3aXRoIE5VTEwgY2Fs
bEFzRnVuY3Rpb24gY2FsbGJhY2suIl9zKSkpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50
PgotRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpjYWxsYmFja0dldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6
Y2FsbGJhY2tHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU0NhbGxiYWNrT2JqZWN0
KiB0aGlzT2JqID0gYXNDYWxsYmFja09iamVjdCh0aGlzVmFsdWUpOwogICAgIAotICAgIEpTT2Jq
ZWN0UmVmIHRoaXNSZWYgPSB0b1JlZih0aGlzT2JqKTsKKyAgICBKU09iamVjdFJlZiB0aGlzUmVm
ID0gdG9SZWYoanNDYXN0PEpTT2JqZWN0Kj4odGhpc09iaikpOwogICAgIFJlZlB0cjxPcGFxdWVK
U1N0cmluZz4gcHJvcGVydHlOYW1lUmVmOwogICAgIAogICAgIGlmIChTdHJpbmdJbXBsKiBuYW1l
ID0gcHJvcGVydHlOYW1lLnVpZCgpKSB7CkBAIC02OTUsMjAgKzY5NSwyMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmNhbGxiYWNrR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZAogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlOwogICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFByb3BlcnR5KHRvUmVmKGV4ZWMpLCB0
aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYuZ2V0KCksICZleGNlcHRpb24pOworICAgICAgICAgICAg
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eSh0b1JlZihnbG9iYWxPYmpl
Y3QpLCB0aGlzUmVmLCBwcm9wZXJ0eU5hbWVSZWYuZ2V0KCksICZleGNlcHRpb24pOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCB0b0pTKGV4ZWMsIGV4Y2VwdGlv
bikpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNj
b3BlLCB0b0pTKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAi
aGFzUHJvcGVydHkgY2FsbGJhY2sgcmV0dXJuZWQgdHJ1ZSBmb3IgYSBwcm9wZXJ0eSB0aGF0IGRv
ZXNuJ3QgZXhpc3QuIl9zKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCAiaGFzUHJvcGVydHkgY2FsbGJhY2sgcmV0dXJuZWQgdHJ1ZSBmb3IgYSBwcm9wZXJ0eSB0
aGF0IGRvZXNuJ3QgZXhpc3QuIl9zKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCmluZGV4IDdlZWMyYTkwYTQ0Zjg2MGJh
YTIyNzZiOTZkNDVmMmJkNjg2MTcwODIuLjRjMTI2ZTQ0OGY2NzFhMTMyOTM2YzhiOGU1OTEzNDcz
NDc4NmVmY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1Jl
Zi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcApAQCAt
MTQ3LDExICsxNDcsMTEgQEAgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNz
Q29udGV4dERhdGEoSlNDOjpWTSYsIE9wYXF1ZUpTQ2xhc3MqIGpzQ2wKICAgICB9CiB9CiAKLU9w
YXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSYgT3BhcXVlSlNDbGFzczo6Y29udGV4dERhdGEoRXhlY1N0
YXRlKiBleGVjKQorT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhJiBPcGFxdWVKU0NsYXNzOjpjb250
ZXh0RGF0YShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHN0ZDo6dW5pcXVl
X3B0cjxPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE+JiBjb250ZXh0RGF0YSA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+b3BhcXVlSlNDbGFzc0RhdGEoKS5hZGQodGhpcywgbnVsbHB0ciku
aXRlcmF0b3ItPnZhbHVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVKU0NsYXNzQ29udGV4
dERhdGE+JiBjb250ZXh0RGF0YSA9IGdsb2JhbE9iamVjdC0+b3BhcXVlSlNDbGFzc0RhdGEoKS5h
ZGQodGhpcywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghY29udGV4dERhdGEp
Ci0gICAgICAgIGNvbnRleHREYXRhID0gbWFrZVVuaXF1ZTxPcGFxdWVKU0NsYXNzQ29udGV4dERh
dGE+KGV4ZWMtPnZtKCksIHRoaXMpOworICAgICAgICBjb250ZXh0RGF0YSA9IG1ha2VVbmlxdWU8
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhPihnbG9iYWxPYmplY3QtPnZtKCksIHRoaXMpOwogICAg
IHJldHVybiAqY29udGV4dERhdGE7CiB9CiAKQEAgLTE2MSwxNyArMTYxLDE3IEBAIFN0cmluZyBP
cGFxdWVKU0NsYXNzOjpjbGFzc05hbWUoKQogICAgIHJldHVybiBtX2NsYXNzTmFtZS5pc29sYXRl
ZENvcHkoKTsKIH0KIAotT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlKiBPcGFxdWVKU0Ns
YXNzOjpzdGF0aWNWYWx1ZXMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCitPcGFxdWVKU0NsYXNzU3Rh
dGljVmFsdWVzVGFibGUqIE9wYXF1ZUpTQ2xhc3M6OnN0YXRpY1ZhbHVlcyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHREYXRhKGV4ZWMpLnN0
YXRpY1ZhbHVlcy5nZXQoKTsKKyAgICByZXR1cm4gY29udGV4dERhdGEoZ2xvYmFsT2JqZWN0KS5z
dGF0aWNWYWx1ZXMuZ2V0KCk7CiB9CiAKLU9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJs
ZSogT3BhcXVlSlNDbGFzczo6c3RhdGljRnVuY3Rpb25zKEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
T3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKiBPcGFxdWVKU0NsYXNzOjpzdGF0aWNG
dW5jdGlvbnMoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVy
biBjb250ZXh0RGF0YShleGVjKS5zdGF0aWNGdW5jdGlvbnMuZ2V0KCk7CisgICAgcmV0dXJuIGNv
bnRleHREYXRhKGdsb2JhbE9iamVjdCkuc3RhdGljRnVuY3Rpb25zLmdldCgpOwogfQogCi1KU09i
amVjdCogT3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYykKK0pTT2JqZWN0
KiBPcGFxdWVKU0NsYXNzOjpwcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKICAgICAvKiBDbGFzcyAoQysrKSBhbmQgcHJvdG90eXBlIChKUykgaW5oZXJpdGFuY2UgYXJl
IHBhcmFsbGVsLCBzbzoKICAgICAgKiAgICAgKEMrKykgICAgICB8ICAgICAgICAoSlMpCkBAIC0x
ODQsMTYgKzE4NCwxNiBAQCBKU09iamVjdCogT3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSogZXhlYykKICAgICBpZiAoIXByb3RvdHlwZUNsYXNzKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSYganNDbGFzc0RhdGEgPSBjb250ZXh0RGF0
YShleGVjKTsKKyAgICBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEmIGpzQ2xhc3NEYXRhID0gY29u
dGV4dERhdGEoZ2xvYmFsT2JqZWN0KTsKIAogICAgIGlmIChKU09iamVjdCogcHJvdG90eXBlID0g
anNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlLmdldCgpKQogICAgICAgICByZXR1cm4gcHJvdG90
eXBlOwogCiAgICAgLy8gUmVjdXJzaXZlLCBidXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBv
dXIgcHVycG9zZXMKLSAgICBKU09iamVjdCogcHJvdG90eXBlID0gSlNDYWxsYmFja09iamVjdDxK
U0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1
cmUoKSwgcHJvdG90eXBlQ2xhc3MsICZqc0NsYXNzRGF0YSk7IC8vIHNldCBqc0NsYXNzRGF0YSBh
cyB0aGUgb2JqZWN0J3MgcHJpdmF0ZSBkYXRhLCBzbyBpdCBjYW4gY2xlYXIgb3VyIHJlZmVyZW5j
ZSBvbiBkZXN0cnVjdGlvbgorICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBKU0NhbGxiYWNrT2Jq
ZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5jYWxsYmFja09iamVjdFN0cnVjdHVyZSgpLCBwcm90b3R5cGVDbGFzcywgJmpzQ2xhc3NE
YXRhKTsgLy8gc2V0IGpzQ2xhc3NEYXRhIGFzIHRoZSBvYmplY3QncyBwcml2YXRlIGRhdGEsIHNv
IGl0IGNhbiBjbGVhciBvdXIgcmVmZXJlbmNlIG9uIGRlc3RydWN0aW9uCiAgICAgaWYgKHBhcmVu
dENsYXNzKSB7Ci0gICAgICAgIGlmIChKU09iamVjdCogcGFyZW50UHJvdG90eXBlID0gcGFyZW50
Q2xhc3MtPnByb3RvdHlwZShleGVjKSkKLSAgICAgICAgICAgIHByb3RvdHlwZS0+c2V0UHJvdG90
eXBlRGlyZWN0KGV4ZWMtPnZtKCksIHBhcmVudFByb3RvdHlwZSk7CisgICAgICAgIGlmIChKU09i
amVjdCogcGFyZW50UHJvdG90eXBlID0gcGFyZW50Q2xhc3MtPnByb3RvdHlwZShnbG9iYWxPYmpl
Y3QpKQorICAgICAgICAgICAgcHJvdG90eXBlLT5zZXRQcm90b3R5cGVEaXJlY3QoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBwYXJlbnRQcm90b3R5cGUpOwogICAgIH0KIAogICAgIGpzQ2xhc3NEYXRhLmNh
Y2hlZFByb3RvdHlwZSA9IFdlYWs8SlNPYmplY3Q+KHByb3RvdHlwZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDbGFzc1JlZi5oCmluZGV4IDBkZDBkY2E1NGMwNDM4OTVlOWUwM2JhZGI5MDE1
ZmJhZWY4YjI5YjguLmFhOWI1ZGY2MWMwYjNjODkxZTg3M2U3NDU1NzIwYjc4OWRjYzMwMDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5oCkBAIC05Myw5ICs5Myw5IEBAIHN0
cnVjdCBPcGFxdWVKU0NsYXNzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE9wYXF1ZUpT
Q2xhc3M+IHsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+T3BhcXVlSlNDbGFzcygpOwogICAgIAog
ICAgIFN0cmluZyBjbGFzc05hbWUoKTsKLSAgICBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFi
bGUqIHN0YXRpY1ZhbHVlcyhKU0M6OkV4ZWNTdGF0ZSopOwotICAgIE9wYXF1ZUpTQ2xhc3NTdGF0
aWNGdW5jdGlvbnNUYWJsZSogc3RhdGljRnVuY3Rpb25zKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAg
SlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgT3BhcXVlSlND
bGFzc1N0YXRpY1ZhbHVlc1RhYmxlKiBzdGF0aWNWYWx1ZXMoSlNDOjpKU0dsb2JhbE9iamVjdCop
OworICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogc3RhdGljRnVuY3Rpb25z
KEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlND
OjpKU0dsb2JhbE9iamVjdCopOwogCiAgICAgT3BhcXVlSlNDbGFzcyogcGFyZW50Q2xhc3M7CiAg
ICAgT3BhcXVlSlNDbGFzcyogcHJvdG90eXBlQ2xhc3M7CkBAIC0xMTksNyArMTE5LDcgQEAgc3Ry
dWN0IE9wYXF1ZUpTQ2xhc3MgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8T3BhcXVlSlND
bGFzcz4gewogICAgIE9wYXF1ZUpTQ2xhc3MoY29uc3QgT3BhcXVlSlNDbGFzcyYpOwogICAgIE9w
YXF1ZUpTQ2xhc3MoY29uc3QgSlNDbGFzc0RlZmluaXRpb24qLCBPcGFxdWVKU0NsYXNzKiBwcm90
b0NsYXNzKTsKIAotICAgIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSYgY29udGV4dERhdGEoSlND
OjpFeGVjU3RhdGUqKTsKKyAgICBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEmIGNvbnRleHREYXRh
KEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKIAogICAgIC8vIFN0cmluZ3MgaW4gdGhlc2UgZGF0YSBt
ZW1iZXJzIHNob3VsZCBub3QgYmUgcHV0IGludG8gYW55IEF0b21TdHJpbmdUYWJsZS4KICAgICBT
dHJpbmcgbV9jbGFzc05hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCmlu
ZGV4IGZmZDljMzNmZDgzMzY1NmFhZDM3OGI4YmZjNzUyM2EzYzEyZTAwNDIuLmM2OTc4NDIyNWE2
ODRkNjk1MzM1ZjhlNzRkZjc0ODQ2NmMwNmRmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0Lm1tCkBAIC02MCw3ICs2MCw3IEBAIC0gKEpTR2xvYmFsQ29udGV4dFJlZilKU0ds
b2JhbENvbnRleHRSZWYKIAogLSAodm9pZCllbnN1cmVXcmFwcGVyTWFwCiB7Ci0gICAgaWYgKCF0
b0pTKFtzZWxmIEpTR2xvYmFsQ29udGV4dFJlZl0pLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPndy
YXBwZXJNYXAoKSkgeworICAgIGlmICghdG9KUyhbc2VsZiBKU0dsb2JhbENvbnRleHRSZWZdKS0+
d3JhcHBlck1hcCgpKSB7CiAgICAgICAgIC8vIFRoZSBtYXAgd2lsbCBiZSByZXRhaW5lZCBieSB0
aGUgR2xvYmFsT2JqZWN0IGluIGluaXRpYWxpemF0aW9uLgogICAgICAgICBbW1tKU1dyYXBwZXJN
YXAgYWxsb2NdIGluaXRXaXRoR2xvYmFsQ29udGV4dFJlZjpbc2VsZiBKU0dsb2JhbENvbnRleHRS
ZWZdXSByZWxlYXNlXTsKICAgICB9CkBAIC0xMTgsMjggKzExOCwyOCBAQCAtIChKU1ZhbHVlICop
ZXZhbHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0IHdpdGhTb3VyY2VVUkw6KE5TVVJMICop
c291cmNlVVJMCiAKIC0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNj
cmlwdAogewotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQpOwotICAg
IEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0b0pTKG1fY29udGV4dCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKIAogICAgIGlmIChz
Y3JpcHQudHlwZSA9PSBrSlNTY3JpcHRUeXBlUHJvZ3JhbSkgewogICAgICAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvblZhbHVlID0gbnVsbHB0cjsKICAgICAgICAgSlNDOjpTb3VyY2VDb2RlIHNvdXJj
ZUNvZGUgPSBbc2NyaXB0IHNvdXJjZUNvZGVdOwotICAgICAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9
IEpTRXZhbHVhdGVTY3JpcHRJbnRlcm5hbChsb2NrZXIsIGV4ZWMsIG1fY29udGV4dCwgbnVsbHB0
ciwgc291cmNlQ29kZSwgJmV4Y2VwdGlvblZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZVJlZiByZXN1
bHQgPSBKU0V2YWx1YXRlU2NyaXB0SW50ZXJuYWwobG9ja2VyLCBnbG9iYWxPYmplY3QsIG1fY29u
dGV4dCwgbnVsbHB0ciwgc291cmNlQ29kZSwgJmV4Y2VwdGlvblZhbHVlKTsKIAogICAgICAgICBp
ZiAoZXhjZXB0aW9uVmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGcm9tTm90
aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvblZhbHVlXTsKICAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZh
bHVlV2l0aEpTVmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpzZWxmXTsKICAgICB9CiAKLSAgICBh
dXRvKiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0FQSUdsb2JhbE9i
amVjdCo+KHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmICghZ2xvYmFs
T2JqZWN0KQorICAgIGF1dG8qIGFwaUdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxK
U0M6OkpTQVBJR2xvYmFsT2JqZWN0Kj4odm0sIGdsb2JhbE9iamVjdCk7CisgICAgaWYgKCFhcGlH
bG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdQcm9taXNl
UmVqZWN0ZWRXaXRoUmVhc29uOltKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6
QCJDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgbW9kdWxlIGxvYWRpbmciIGluQ29udGV4dDpzZWxm
XSBpbkNvbnRleHQ6c2VsZl07CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7Ci0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+bG9hZEFuZEV2
YWx1YXRlSlNTY3JpcHRNb2R1bGUobG9ja2VyLCBzY3JpcHQpOworICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSBhcGlHbG9iYWxPYmplY3QtPmxvYWRBbmRFdmFsdWF0ZUpTU2NyaXB0TW9kdWxlKGxv
Y2tlciwgc2NyaXB0KTsKICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IHRvUmVmKGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigpLT52
YWx1ZSgpKTsKKyAgICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb25WYWx1ZSA9IHRvUmVmKGFwaUds
b2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOwogICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoTmV3UHJv
bWlzZVJlamVjdGVkV2l0aFJlYXNvbjpbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOmV4Y2Vw
dGlvblZhbHVlIGluQ29udGV4dDpzZWxmXSBpbkNvbnRleHQ6c2VsZl07CiAgICAgfQpAQCAtMTQ4
LDggKzE0OCw4IEBAIC0gKEpTVmFsdWUgKilldmFsdWF0ZUpTU2NyaXB0OihKU1NjcmlwdCAqKXNj
cmlwdAogCiAtIChKU1ZhbHVlICopZGVwZW5kZW5jeUlkZW50aWZpZXJzRm9yTW9kdWxlSlNTY3Jp
cHQ6KEpTU2NyaXB0ICopc2NyaXB0CiB7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KG1fY29udGV4dCk7Ci0gICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMobV9jb250ZXh0KTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOwogCiAgICAgaWYgKHNjcmlwdC50eXBlICE9IGtKU1NjcmlwdFR5cGVNb2R1bGUpIHsKQEAg
LTE1OCw5ICsxNTgsOSBAQCAtIChKU1ZhbHVlICopZGVwZW5kZW5jeUlkZW50aWZpZXJzRm9yTW9k
dWxlSlNTY3JpcHQ6KEpTU2NyaXB0ICopc2NyaXB0CiAgICAgfQogCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIEpTQzo6SlNBcnJheSogcmVzdWx0ID0gZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVMb2FkZXIoKS0+ZGVwZW5kZW5jeUtleXNJ
ZkV2YWx1YXRlZChleGVjLCBKU0M6OmpzU3RyaW5nKHZtLCBbW3NjcmlwdCBzb3VyY2VVUkxdIGFi
c29sdXRlU3RyaW5nXSkpOworICAgIEpTQzo6SlNBcnJheSogcmVzdWx0ID0gZ2xvYmFsT2JqZWN0
LT5tb2R1bGVMb2FkZXIoKS0+ZGVwZW5kZW5jeUtleXNJZkV2YWx1YXRlZChnbG9iYWxPYmplY3Qs
IEpTQzo6anNTdHJpbmcodm0sIFtbc2NyaXB0IHNvdXJjZVVSTF0gYWJzb2x1dGVTdHJpbmddKSk7
CiAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0
aW9uVmFsdWUgPSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CisgICAg
ICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSB0b1JlZihnbG9iYWxPYmplY3QsIHNjb3Bl
LmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgcmV0dXJuIFtzZWxmIHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25W
YWx1ZV07CiAgICAgfQpAQCAtMTc0LDggKzE3NCw4IEBAIC0gKEpTVmFsdWUgKilkZXBlbmRlbmN5
SWRlbnRpZmllcnNGb3JNb2R1bGVKU1NjcmlwdDooSlNTY3JpcHQgKilzY3JpcHQKIAogLSAodm9p
ZClzZXRFeGNlcHRpb246KEpTVmFsdWUgKil2YWx1ZQogewotICAgIEpTQzo6RXhlY1N0YXRlKiBl
eGVjID0gdG9KUyhtX2NvbnRleHQpOwotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKG1fY29udGV4dCk7Cisg
ICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKICAgICBpZiAodmFsdWUpCiAgICAgICAgIG1fZXhjZXB0aW9uLnNldCh2
bSwgdG9KUyhKU1ZhbHVlVG9PYmplY3QobV9jb250ZXh0LCB2YWx1ZUludGVybmFsVmFsdWUodmFs
dWUpLCAwKSkpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEds
b2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZiljb250ZXh0CiAgICAgaWYgKCFzZWxm
KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gdG9KUyhjb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CiAgICAgbV92aXJ0
dWFsTWFjaGluZSA9IFtbSlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFsTWFjaGluZVdpdGhDb250ZXh0
R3JvdXBSZWY6dG9SZWYoJmdsb2JhbE9iamVjdC0+dm0oKSldIHJldGFpbl07CiAgICAgQVNTRVJU
KG1fdmlydHVhbE1hY2hpbmUpOwogICAgIG1fY29udGV4dCA9IEpTR2xvYmFsQ29udGV4dFJldGFp
bihjb250ZXh0KTsKQEAgLTM4NCw3ICszODQsNyBAQCAtIChKU1ZhbHVlICopd3JhcHBlckZvck9i
akNPYmplY3Q6KGlkKW9iamVjdAogCiAtIChKU1dyYXBwZXJNYXAgKil3cmFwcGVyTWFwCiB7Ci0g
ICAgcmV0dXJuIHRvSlMobV9jb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT53cmFwcGVy
TWFwKCk7CisgICAgcmV0dXJuIHRvSlMobV9jb250ZXh0KS0+d3JhcHBlck1hcCgpOwogfQogCiAt
IChKU1ZhbHVlICopd3JhcHBlckZvckpTT2JqZWN0OihKU1ZhbHVlUmVmKXZhbHVlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKaW5kZXggZGU3NTU1NDdhYjA3OTky
NTA2NTI0ZGZjZjYwOWZmZTUwMTc5ZWIwNy4uYjY2MjYxYTdhZTVjNGE5MjExZWQ4Yjg5ZTM2Nzkz
ZDY3NDZmZDFjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHRSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNw
cApAQCAtODYsMTAgKzg2LDEwIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBSZWxlYXNlKEpTQ29udGV4
dEdyb3VwUmVmIGdyb3VwKQogICAgIHZtLmRlcmVmKCk7CiB9CiAKLXN0YXRpYyBib29sIGludGVy
bmFsU2NyaXB0VGltZW91dENhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogY2FsbGJhY2tQ
dHIsIHZvaWQqIGNhbGxiYWNrRGF0YSkKK3N0YXRpYyBib29sIGludGVybmFsU2NyaXB0VGltZW91
dENhbGxiYWNrKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHZvaWQqIGNhbGxiYWNrUHRy
LCB2b2lkKiBjYWxsYmFja0RhdGEpCiB7CiAgICAgSlNTaG91bGRUZXJtaW5hdGVDYWxsYmFjayBj
YWxsYmFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNTaG91bGRUZXJtaW5hdGVDYWxsYmFjaz4oY2Fs
bGJhY2tQdHIpOwotICAgIEpTQ29udGV4dFJlZiBjb250ZXh0UmVmID0gdG9SZWYoZXhlYyk7Cisg
ICAgSlNDb250ZXh0UmVmIGNvbnRleHRSZWYgPSB0b1JlZihnbG9iYWxPYmplY3QpOwogICAgIEFT
U0VSVChjYWxsYmFjayk7CiAgICAgcmV0dXJuIGNhbGxiYWNrKGNvbnRleHRSZWYsIGNhbGxiYWNr
RGF0YSk7CiB9CkBAIC0xNDUsMTIgKzE0NSwxMSBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9i
YWxDb250ZXh0Q3JlYXRlSW5Hcm91cChKU0NvbnRleHRHcm91cFJlZiBncm91cCwgSlNDbGFzcwog
ICAgICAgICBpZiAoSlNSZW1vdGVJbnNwZWN0b3JHZXRJbnNwZWN0aW9uRW5hYmxlZEJ5RGVmYXVs
dCgpKQogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRSZW1vdGVEZWJ1Z2dpbmdFbmFibGVk
KHRydWUpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBKU0dsb2JhbENvbnRleHRSZXRhaW4odG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpKTsKKyAgICAgICAgcmV0dXJuIEpT
R2xvYmFsQ29udGV4dFJldGFpbih0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QpKTsKICAgICB9CiAK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDYWxsYmFja09iamVjdDxKU0ds
b2JhbE9iamVjdD46OmNyZWF0ZSh2bS5nZXQoKSwgZ2xvYmFsT2JqZWN0Q2xhc3MsIEpTQ2FsbGJh
Y2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUodm0uZ2V0KCksIDAsIGpz
TnVsbCgpKSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBnbG9iYWxPYmplY3RDbGFzcy0+cHJvdG90eXBl
KGV4ZWMpOworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gZ2xvYmFsT2JqZWN0Q2xhc3MtPnByb3Rv
dHlwZShnbG9iYWxPYmplY3QpOwogICAgIGlmICghcHJvdG90eXBlKQogICAgICAgICBwcm90b3R5
cGUgPSBqc051bGwoKTsKICAgICBnbG9iYWxPYmplY3QtPnJlc2V0UHJvdG90eXBlKHZtLmdldCgp
LCBwcm90b3R5cGUpOwpAQCAtMTU4LDI3ICsxNTcsMjcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpT
R2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoSlNDb250ZXh0R3JvdXBSZWYgZ3JvdXAsIEpTQ2xh
c3MKICAgICBpZiAoSlNSZW1vdGVJbnNwZWN0b3JHZXRJbnNwZWN0aW9uRW5hYmxlZEJ5RGVmYXVs
dCgpKQogICAgICAgICBnbG9iYWxPYmplY3QtPnNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQodHJ1
ZSk7CiAjZW5kaWYKLSAgICByZXR1cm4gSlNHbG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFsUmVm
KGV4ZWMpKTsKKyAgICByZXR1cm4gSlNHbG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFsUmVmKGds
b2JhbE9iamVjdCkpOwogfQogCiBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250ZXh0UmV0
YWluKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
UyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKLSAgICBnY1Byb3RlY3Qodm0udm1FbnRy
eUdsb2JhbE9iamVjdChleGVjKSk7CisgICAgZ2NQcm90ZWN0KHZtLnZtRW50cnlHbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0KSk7CiAgICAgdm0ucmVmKCk7CiAgICAgcmV0dXJuIGN0eDsKIH0KIAog
dm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgpCiB7Ci0g
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAK
LSAgICBib29sIHByb3RlY3RDb3VudElzWmVybyA9IHZtLmhlYXAudW5wcm90ZWN0KHZtLnZtRW50
cnlHbG9iYWxPYmplY3QoZXhlYykpOworICAgIGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gdm0u
aGVhcC51bnByb3RlY3Qodm0udm1FbnRyeUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpKTsKICAg
ICBpZiAocHJvdGVjdENvdW50SXNaZXJvKQogICAgICAgICB2bS5oZWFwLnJlcG9ydEFiYW5kb25l
ZE9iamVjdEdyYXBoKCk7CiAgICAgdm0uZGVyZWYoKTsKQEAgLTE5MCwxMSArMTg5LDExIEBAIEpT
T2JqZWN0UmVmIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChKU0NvbnRleHRSZWYgY3R4KQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCi0g
ICAgcmV0dXJuIHRvUmVmKGpzQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+bWV0aG9kVGFibGUodm0pLT50b1RoaXMoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBleGVjLCBOb3RTdHJpY3RNb2RlKSkpOworICAgIHJldHVybiB0b1JlZihqc0Nhc3Q8SlNPYmpl
Y3QqPihnbG9iYWxPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+dG9UaGlzKGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBOb3RTdHJpY3RNb2RlKSkpOwogfQogCiBKU0NvbnRleHRHcm91cFJlZiBK
U0NvbnRleHRHZXRHcm91cChKU0NvbnRleHRSZWYgY3R4KQpAQCAtMjAzLDggKzIwMiw4IEBAIEpT
Q29udGV4dEdyb3VwUmVmIEpTQ29udGV4dEdldEdyb3VwKEpTQ29udGV4dFJlZiBjdHgpCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAg
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIHJldHVybiB0b1JlZigmZXhlYy0+dm0o
KSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBy
ZXR1cm4gdG9SZWYoJmdsb2JhbE9iamVjdC0+dm0oKSk7CiB9CiAKIEpTR2xvYmFsQ29udGV4dFJl
ZiBKU0NvbnRleHRHZXRHbG9iYWxDb250ZXh0KEpTQ29udGV4dFJlZiBjdHgpCkBAIC0yMTMsMTAg
KzIxMiwxMCBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNDb250ZXh0R2V0R2xvYmFsQ29udGV4dChK
U0NvbnRleHRSZWYgY3R4KQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBK
U0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSB0b0pTKGN0eCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxPYmplY3QpOwog
Ci0gICAgcmV0dXJuIHRvR2xvYmFsUmVmKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpKTsKKyAgICByZXR1cm4gdG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0KTsKIH0KIAog
SlNTdHJpbmdSZWYgSlNHbG9iYWxDb250ZXh0Q29weU5hbWUoSlNHbG9iYWxDb250ZXh0UmVmIGN0
eCkKQEAgLTIyNiwxMSArMjI1LDExIEBAIEpTU3RyaW5nUmVmIEpTR2xvYmFsQ29udGV4dENvcHlO
YW1lKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgpCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwog
Ci0gICAgU3RyaW5nIG5hbWUgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5uYW1lKCk7
CisgICAgU3RyaW5nIG5hbWUgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkt
Pm5hbWUoKTsKICAgICBpZiAobmFtZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAg
LTI0NCwxMSArMjQzLDExIEBAIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0TmFtZShKU0dsb2JhbENv
bnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBuYW1lKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7
CiAKLSAgICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5zZXROYW1lKG5hbWUgPyBuYW1l
LT5zdHJpbmcoKSA6IFN0cmluZygpKTsKKyAgICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdCktPnNldE5hbWUobmFtZSA/IG5hbWUtPnN0cmluZygpIDogU3RyaW5nKCkpOwogfQog
CiB2b2lkIEpTR2xvYmFsQ29udGV4dFNldFVuaGFuZGxlZFJlamVjdGlvbkNhbGxiYWNrKEpTR2xv
YmFsQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCkBAIC0yNTgsMTcgKzI1NywxNyBAQCB2b2lkIEpTR2xvYmFsQ29udGV4dFNldFVuaGFu
ZGxlZFJlamVjdGlvbkNhbGxiYWNrKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIEpTT2JqZQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNM
b2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KUyhmdW5j
dGlvbik7CiAgICAgaWYgKCFvYmplY3QtPmlzRnVuY3Rpb24odm0pKSB7Ci0gICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihjcmVhdGVUeXBlRXJyb3IoZXhlYykpOworICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+c2V0VW5oYW5kbGVk
UmVqZWN0aW9uQ2FsbGJhY2sodm0sIG9iamVjdCk7CisgICAgdm0udm1FbnRyeUdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3QpLT5zZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayh2bSwgb2JqZWN0
KTsKIH0KIAogY2xhc3MgQmFja3RyYWNlRnVuY3RvciB7CkBAIC0zMjcsOCArMzI2LDggQEAgSlNT
dHJpbmdSZWYgSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKEpTQ29udGV4dFJlZiBjdHgsIHVuc2ln
bmVkIG1heFN0YWNrU2l6ZSkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIENhbGxGcmFt
ZSogZnJhbWUgPSB2bS50b3BDYWxsRnJhbWU7CkBAIC0zNDcsMTEgKzM0NiwxMSBAQCBib29sIEpT
R2xvYmFsQ29udGV4dEdldFJlbW90ZUluc3BlY3Rpb25FbmFibGVkKEpTR2xvYmFsQ29udGV4dFJl
ZiBjdHgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKLSAgICByZXR1cm4gdm0udm1F
bnRyeUdsb2JhbE9iamVjdChleGVjKS0+cmVtb3RlRGVidWdnaW5nRW5hYmxlZCgpOworICAgIHJl
dHVybiB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCktPnJlbW90ZURlYnVnZ2lu
Z0VuYWJsZWQoKTsKIH0KIAogdm9pZCBKU0dsb2JhbENvbnRleHRTZXRSZW1vdGVJbnNwZWN0aW9u
RW5hYmxlZChKU0dsb2JhbENvbnRleHRSZWYgY3R4LCBib29sIGVuYWJsZWQpCkBAIC0zNjEsMTEg
KzM2MCwxMSBAQCB2b2lkIEpTR2xvYmFsQ29udGV4dFNldFJlbW90ZUluc3BlY3Rpb25FbmFibGVk
KEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIGJvb2wgZW5hYgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OwogCi0gICAgdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+c2V0UmVtb3RlRGVidWdnaW5n
RW5hYmxlZChlbmFibGVkKTsKKyAgICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dCktPnNldFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgSlNHbG9i
YWxDb250ZXh0R2V0SW5jbHVkZXNOYXRpdmVDYWxsU3RhY2tXaGVuUmVwb3J0aW5nRXhjZXB0aW9u
cyhKU0dsb2JhbENvbnRleHRSZWYgY3R4KQpAQCAtMzc2LDEyICszNzUsMTEgQEAgYm9vbCBKU0ds
b2JhbENvbnRleHRHZXRJbmNsdWRlc05hdGl2ZUNhbGxTdGFja1doZW5SZXBvcnRpbmdFeGNlcHRp
b25zKEpTR2xvYmFsQ28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAotICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOwot
ICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5pbmNsdWRlc05h
dGl2ZUNhbGxTdGFja1doZW5SZXBvcnRpbmdFeGNlcHRpb25zKCk7CisgICAgcmV0dXJuIHZtLnZt
RW50cnlHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmlu
Y2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGN0eCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk2LDEyICszOTQs
MTEgQEAgdm9pZCBKU0dsb2JhbENvbnRleHRTZXRJbmNsdWRlc05hdGl2ZUNhbGxTdGFja1doZW5S
ZXBvcnRpbmdFeGNlcHRpb25zKEpTR2xvYmFsQ28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAot
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0
KGV4ZWMpOwotICAgIGdsb2JhbE9iamVjdC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEluY2x1
ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoaW5jbHVkZXNOYXRpdmVD
YWxsU3RhY2spOworICAgIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLnNldEluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGlu
Z0V4Y2VwdGlvbnMoaW5jbHVkZXNOYXRpdmVDYWxsU3RhY2spOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oY3R4KTsKICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZXNOYXRpdmVDYWxsU3RhY2spOwpA
QCAtNDE3LDExICs0MTQsMTEgQEAgQ0ZSdW5Mb29wUmVmIEpTR2xvYmFsQ29udGV4dEdldERlYnVn
Z2VyUnVuTG9vcChKU0dsb2JhbENvbnRleHRSZWYgY3R4KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhj
dHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CiAKLSAgICByZXR1cm4gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+aW5z
cGVjdG9yRGVidWdnYWJsZSgpLnRhcmdldFJ1bkxvb3AoKTsKKyAgICByZXR1cm4gdm0udm1FbnRy
eUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpLT5pbnNwZWN0b3JEZWJ1Z2dhYmxlKCkudGFyZ2V0
UnVuTG9vcCgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3R4KTsKICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTQzNiwxMSArNDMzLDExIEBAIHZvaWQgSlNHbG9iYWxDb250ZXh0U2V0RGVidWdn
ZXJSdW5Mb29wKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgsIENGUnVuTG9vcFJlZiBydW5MCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CiAKLSAgICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5p
bnNwZWN0b3JEZWJ1Z2dhYmxlKCkuc2V0VGFyZ2V0UnVuTG9vcChydW5Mb29wKTsKKyAgICB2bS52
bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCktPmluc3BlY3RvckRlYnVnZ2FibGUoKS5z
ZXRUYXJnZXRSdW5Mb29wKHJ1bkxvb3ApOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY3R4KTsK
ICAgICBVTlVTRURfUEFSQU0ocnVuTG9vcCk7CkBAIC00NTYsMTAgKzQ1MywxMCBAQCBJbnNwZWN0
b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogSlNHbG9iYWxDb250ZXh0R2V0QXVn
bWVudGFibGVJbnNwZWN0bwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKLSAgICBy
ZXR1cm4gJnZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPmluc3BlY3RvckNvbnRyb2xsZXIo
KTsKKyAgICByZXR1cm4gJnZtLnZtRW50cnlHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU01hbmFnZWRWYWx1ZS5tbQppbmRleCA5ZjVkZDg4OTJhOGJmYWUzMjhjZTBjNTlhYjVlOWJj
YjYzNDQyN2ZkLi42M2Q2NDkyYzJkZTQ5YmNjNjcwNGQ3MDY3NWFiYmU4NzdmZDRkZWY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFZhbHVlLm1tCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkVmFsdWUubW0KQEAgLTg0LDE5ICs4
NCwxOCBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWYWx1ZTooSlNWYWx1ZSAqKXZhbHVlCiAg
ICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHNlbGY7CiAKLSAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IHRvSlMoW3ZhbHVlLmNvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7Ci0gICAg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoW3Zh
bHVlLmNvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CiAgICAgYXV0byYgb3duZXIgPSBtYW5h
Z2VkVmFsdWVIYW5kbGVPd25lcigpOwogICAgIEpTQzo6V2VhazxKU0M6OkpTR2xvYmFsT2JqZWN0
PiB3ZWFrKGdsb2JhbE9iamVjdCwgJm93bmVyLCAoX19icmlkZ2Ugdm9pZCopc2VsZik7CiAgICAg
bV9nbG9iYWxPYmplY3Quc3dhcCh3ZWFrKTsKIAotICAgIG1fbG9jayA9ICZleGVjLT52bSgpLmFw
aUxvY2soKTsKKyAgICBtX2xvY2sgPSAmZ2xvYmFsT2JqZWN0LT52bSgpLmFwaUxvY2soKTsKIAog
ICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1
bmN0aW9uc1dlYWtNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsK
ICAgICBOU1BvaW50ZXJGdW5jdGlvbnNPcHRpb25zIGludGVnZXJPcHRpb25zID0gTlNQb2ludGVy
RnVuY3Rpb25zT3BhcXVlTWVtb3J5IHwgTlNQb2ludGVyRnVuY3Rpb25zSW50ZWdlclBlcnNvbmFs
aXR5OwogICAgIG1fb3duZXJzID0gW1tOU01hcFRhYmxlIGFsbG9jXSBpbml0V2l0aEtleU9wdGlv
bnM6d2Vha0lET3B0aW9ucyB2YWx1ZU9wdGlvbnM6aW50ZWdlck9wdGlvbnMgY2FwYWNpdHk6MV07
CiAKLSAgICBKU0M6OkpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgW3ZhbHVlIEpTVmFsdWVS
ZWZdKTsKKyAgICBKU0M6OkpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBbdmFs
dWUgSlNWYWx1ZVJlZl0pOwogICAgIGlmIChqc1ZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIG1f
d2Vha1ZhbHVlLnNldE9iamVjdChKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oanNWYWx1ZS5h
c0NlbGwoKSksIG93bmVyLCAoX19icmlkZ2Ugdm9pZCopc2VsZik7CiAgICAgZWxzZSBpZiAoanNW
YWx1ZS5pc1N0cmluZygpKQpAQCAtMTU3LDggKzE1Niw4IEBAIC0gKEpTVmFsdWUgKil2YWx1ZQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIGlmIChtX3dlYWtWYWx1ZS5pc0NsZWFyKCkpCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29u
dGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYoZXhlYyldOworICAgIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOworICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRl
eHRSZWY6dG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0KV07CiAgICAgSlNDOjpKU1ZhbHVlIHZhbHVl
OwogICAgIGlmIChtX3dlYWtWYWx1ZS5pc1ByaW1pdGl2ZSgpKQogICAgICAgICB2YWx1ZSA9IG1f
d2Vha1ZhbHVlLnByaW1pdGl2ZSgpOwpAQCAtMTY2LDcgKzE2NSw3IEBAIC0gKEpTVmFsdWUgKil2
YWx1ZQogICAgICAgICB2YWx1ZSA9IG1fd2Vha1ZhbHVlLnN0cmluZygpOwogICAgIGVsc2UKICAg
ICAgICAgdmFsdWUgPSBtX3dlYWtWYWx1ZS5vYmplY3QoKTsKLSAgICByZXR1cm4gW0pTVmFsdWUg
dmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVjLCB2YWx1ZSkgaW5Db250ZXh0OmNvbnRleHRd
OworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGdsb2JhbE9i
amVjdCwgdmFsdWUpIGluQ29udGV4dDpjb250ZXh0XTsKIH0KIAogLSAodm9pZClkaXNjb25uZWN0
VmFsdWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKaW5kZXggOWQw
ODAzMjg0MjVlMGJmNDU1ZmU4ZmFhOTYwOGYzNmJjMGM3MGYzZi4uMjcyNWI1OTI1ZjZiNWVjYTEy
M2IwMzFkZWZkNDVlZDFjOTcwODIzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09i
amVjdFJlZi5jcHAKQEAgLTkwLDE1ICs5MCwxNSBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2Uo
SlNDb250ZXh0UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCB2b2lkKiBkYXRhKQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAg
aWYgKCFqc0NsYXNzKQotICAgICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYykpOworICAgICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KSk7CiAKLSAgICBKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Piog
b2JqZWN0ID0gSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZShl
eGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7Ci0gICAgaWYg
KEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0NsYXNzLT5wcm90b3R5cGUoZXhlYykpCisgICAgSlND
YWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD4qIG9iamVjdCA9IEpTQ2FsbGJhY2tP
YmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIGpzQ2xhc3MsIGRhdGEpOworICAgIGlm
IChKU09iamVjdCogcHJvdG90eXBlID0ganNDbGFzcy0+cHJvdG90eXBlKGdsb2JhbE9iamVjdCkp
CiAgICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlRGlyZWN0KHZtLCBwcm90b3R5cGUpOwogCiAg
ICAgcmV0dXJuIHRvUmVmKG9iamVjdCk7CkBAIC0xMTAsMTAgKzExMCwxMCBAQCBKU09iamVjdFJl
ZiBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU1N0
cmluZ1JlZiBuYW1lLAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
KGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOwotICAgIHJldHVybiB0b1JlZihKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0
ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsQXNGdW5jdGlvbiwgbmFtZSA/
IG5hbWUtPnN0cmluZygpIDogImFub255bW91cyJfcykpOworICAgIHJldHVybiB0b1JlZihKU0Nh
bGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBjYWxsQXNGdW5jdGlvbiwg
bmFtZSA/IG5hbWUtPnN0cmluZygpIDogImFub255bW91cyJfcykpOwogfQogCiBKU09iamVjdFJl
ZiBKU09iamVjdE1ha2VDb25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY3R4LCBKU0NsYXNzUmVmIGpz
Q2xhc3MsIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsQXNDb25zdHJ1Y3Rv
cikKQEAgLTEyMiwxNSArMTIyLDE1IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0cnVj
dG9yKEpTQ29udGV4dFJlZiBjdHgsIEpTQ2xhc3NSZWYganNDbGFzcywgSlNPYmplCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgRXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKLSAgICBK
U1ZhbHVlIGpzUHJvdG90eXBlID0ganNDbGFzcyA/IGpzQ2xhc3MtPnByb3RvdHlwZShleGVjKSA6
IDA7CisgICAgSlNWYWx1ZSBqc1Byb3RvdHlwZSA9IGpzQ2xhc3MgPyBqc0NsYXNzLT5wcm90b3R5
cGUoZ2xvYmFsT2JqZWN0KSA6IDA7CiAgICAgaWYgKCFqc1Byb3RvdHlwZSkKLSAgICAgICAganNQ
cm90b3R5cGUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgp
OworICAgICAgICBqc1Byb3RvdHlwZSA9IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCk7
CiAKLSAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gSlNDYWxsYmFja0Nv
bnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUoKSwg
anNDbGFzcywgY2FsbEFzQ29uc3RydWN0b3IpOworICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvciog
Y29uc3RydWN0b3IgPSBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0ZShnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpLCBqc0NsYXNzLCBj
YWxsQXNDb25zdHJ1Y3Rvcik7CiAgICAgY29uc3RydWN0b3ItPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBqc1Byb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOwogICAgIHJldHVybiB0b1JlZihjb25zdHJ1Y3Rvcik7CiB9CkBAIC0xNDEs
OCArMTQxLDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlRnVuY3Rpb24oSlNDb250ZXh0UmVm
IGN0eCwgSlNTdHJpbmdSZWYgbmFtZSwgdW5zaWduZWQgcGEKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTE1NSwxNCArMTU1LDE0IEBAIEpTT2JqZWN0UmVm
IEpTT2JqZWN0TWFrZUZ1bmN0aW9uKEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIG5hbWUs
IHVuc2lnbmVkIHBhCiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmcodm0sIGJvZHktPnN0cmluZygp
KSk7CiAgICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSkgewogICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMsIHRocm93U2NvcGUpOwotICAgICAgICBoYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIGhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAogICAgIGF1dG8gc291cmNlVVJMU3RyaW5nID0gc291cmNlVVJMID8g
c291cmNlVVJMLT5zdHJpbmcoKSA6IFN0cmluZygpOwotICAgIEpTT2JqZWN0KiByZXN1bHQgPSBj
b25zdHJ1Y3RGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGFyZ3Ms
IG5hbWVJRCwgU291cmNlT3JpZ2luIHsgc291cmNlVVJMU3RyaW5nIH0sIHNvdXJjZVVSTFN0cmlu
ZywgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzdGFydGluZ0xp
bmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkpKTsKLSAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQoc2NvcGUsIGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJv
dykKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RnVuY3Rpb24oZ2xvYmFsT2JqZWN0
LCBhcmdzLCBuYW1lSUQsIFNvdXJjZU9yaWdpbiB7IHNvdXJjZVVSTFN0cmluZyB9LCBzb3VyY2VV
UkxTdHJpbmcsIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc3Rh
cnRpbmdMaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcigpKSk7CisgICAgaWYgKGhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9u
U3RhdHVzOjpEaWRUaHJvdykKICAgICAgICAgcmVzdWx0ID0gMDsKICAgICByZXR1cm4gdG9SZWYo
cmVzdWx0KTsKIH0KQEAgLTE3Myw4ICsxNzMsOCBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VB
cnJheShKU0NvbnRleHRSZWYgY3R4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYQog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAtMTgyLDE5ICsx
ODIsMTkgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQXJyYXkoSlNDb250ZXh0UmVmIGN0eCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmEKICAgICBpZiAoYXJndW1lbnRDb3VudCkg
ewogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgICAgIGFyZ0xpc3Qu
YXBwZW5kKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7CisgICAgICAgICAgICBhcmdMaXN0LmFw
cGVuZCh0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzW2ldKSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShhcmdMaXN0Lmhhc092ZXJmbG93ZWQoKSkpIHsKICAgICAgICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMsIHRocm93U2NvcGUpOwotICAgICAgICAgICAgaGFuZGxlRXhjZXB0aW9u
SWZOZWVkZWQoc2NvcGUsIGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdCA9IGNvbnN0cnVj
dEFycmF5KGV4ZWMsIHN0YXRpY19jYXN0PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPigwKSwgYXJn
TGlzdCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEFycmF5KGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KDApLCBhcmdMaXN0KTsKICAgICB9IGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKKyAgICAg
ICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIDApOwogCi0gICAg
aWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBleGVjLCBleGNlcHRpb24pID09IEV4
Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRU
aHJvdykKICAgICAgICAgcmVzdWx0ID0gMDsKIAogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwpA
QCAtMjA2LDIzICsyMDYsMjMgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlRGF0ZShKU0NvbnRl
eHRSZWYgY3R4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWwKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdMaXN0OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytp
KQotICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50c1tpXSkpOworICAg
ICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzW2ldKSk7CiAg
ICAgaWYgKFVOTElLRUxZKGFyZ0xpc3QuaGFzT3ZlcmZsb3dlZCgpKSkgewogICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMsIHRocm93U2NvcGUpOwotICAgICAgICBoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAotICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3REYXRlKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgSlNWYWx1ZSgpLCBhcmdMaXN0KTsKLSAgICBp
ZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhj
ZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0
RGF0ZShnbG9iYWxPYmplY3QsIEpTVmFsdWUoKSwgYXJnTGlzdCk7CisgICAgaWYgKGhhbmRsZUV4
Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhjZXB0
aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAgICAgcmVzdWx0ID0gMDsKIAogICAgIHJldHVybiB0
b1JlZihyZXN1bHQpOwpAQCAtMjM0LDE2ICsyMzQsMTYgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RN
YWtlRXJyb3IoSlNDb250ZXh0UmVmIGN0eCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmEKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZt
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICBKU1Zh
bHVlIG1lc3NhZ2UgPSBhcmd1bWVudENvdW50ID8gdG9KUyhleGVjLCBhcmd1bWVudHNbMF0pIDog
anNVbmRlZmluZWQoKTsKLSAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5lcnJvclN0cnVjdHVyZSgpOwotICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2Up
OworICAgIEpTVmFsdWUgbWVzc2FnZSA9IGFyZ3VtZW50Q291bnQgPyB0b0pTKGdsb2JhbE9iamVj
dCwgYXJndW1lbnRzWzBdKSA6IGpzVW5kZWZpbmVkKCk7CisgICAgU3RydWN0dXJlKiBlcnJvclN0
cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoKTsKKyAgICBKU09iamVjdCog
cmVzdWx0ID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgZXJyb3JTdHJ1Y3R1
cmUsIG1lc3NhZ2UpOwogCi0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBl
eGVjLCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCisgICAgaWYgKGhh
bmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0g
RXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAgICAgcmVzdWx0ID0gMDsKIAogICAgIHJl
dHVybiB0b1JlZihyZXN1bHQpOwpAQCAtMjU1LDIzICsyNTUsMjMgQEAgSlNPYmplY3RSZWYgSlNP
YmplY3RNYWtlUmVnRXhwKEpTQ29udGV4dFJlZiBjdHgsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1YKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMs
IGFyZ3VtZW50c1tpXSkpOworICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGdsb2JhbE9iamVj
dCwgYXJndW1lbnRzW2ldKSk7CiAgICAgaWYgKFVOTElLRUxZKGFyZ0xpc3QuaGFzT3ZlcmZsb3dl
ZCgpKSkgewogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHRocm93U2NvcGUpOwotICAg
ICAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0aW9uKTsKKyAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Cisg
ICAgICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2Vw
dGlvbik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEpTT2JqZWN0KiByZXN1bHQg
PSBjb25zdHJ1Y3RSZWdFeHAoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBhcmdM
aXN0KTsKLSAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGV4ZWMsIGV4Y2Vw
dGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKKyAgICBKU09iamVjdCogcmVzdWx0
ID0gY29uc3RydWN0UmVnRXhwKGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7CisgICAgaWYgKGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhj
ZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAgICAgcmVzdWx0ID0gMDsKICAgICAKICAgICBy
ZXR1cm4gdG9SZWYocmVzdWx0KTsKQEAgLTI4NCwxNCArMjg0LDEzIEBAIEpTT2JqZWN0UmVmIEpT
T2JqZWN0TWFrZURlZmVycmVkUHJvbWlzZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiog
cmVzb2x2ZSwKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgRXhlY1N0YXRl
KiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogCi0gICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwotICAgIEpTUHJvbWlzZURlZmVycmVkOjpEZWZlcnJlZERhdGEgZGF0YSA9
IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVEZWZlcnJlZERhdGEoZXhlYywgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPnByb21pc2VDb25zdHJ1Y3RvcigpKTsKLSAgICBpZiAoaGFuZGxlRXhj
ZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVz
OjpEaWRUaHJvdykKKyAgICBKU1Byb21pc2VEZWZlcnJlZDo6RGVmZXJyZWREYXRhIGRhdGEgPSBK
U1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlRGVmZXJyZWREYXRhKGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5wcm9taXNlQ29uc3RydWN0b3IoKSk7CisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklm
TmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVz
OjpEaWRUaHJvdykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAocmVzb2x2ZSkK
QEAgLTMwNywxMSArMzA2LDExIEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm90b3R5cGUoSlND
b250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tl
cihnbG9iYWxPYmplY3QpOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3Qp
OyAKLSAgICByZXR1cm4gdG9SZWYoZXhlYywganNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChl
eGVjLT52bSgpKSk7CisgICAgcmV0dXJuIHRvUmVmKGdsb2JhbE9iamVjdCwganNPYmplY3QtPmdl
dFByb3RvdHlwZURpcmVjdChnbG9iYWxPYmplY3QtPnZtKCkpKTsKIH0KIAogdm9pZCBKU09iamVj
dFNldFByb3RvdHlwZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFs
dWVSZWYgdmFsdWUpCkBAIC0zMjAsMTUgKzMxOSwxNSBAQCB2b2lkIEpTT2JqZWN0U2V0UHJvdG90
eXBlKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNWYWx1ZVJlZiB2YWx1
ZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBKU09iamVj
dCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7Ci0gICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhl
eGVjLCB2YWx1ZSk7Ci0gICAganNPYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywganNWYWx1
ZS5pc09iamVjdCgpID8ganNWYWx1ZSA6IGpzTnVsbCgpKTsKLSAgICBoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChzY29wZSwgZXhlYywgbnVsbHB0cik7CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9K
UyhnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBqc09iamVjdC0+c2V0UHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QsIGpzVmFsdWUuaXNPYmplY3QoKSA/IGpzVmFsdWUgOiBqc051bGwoKSk7Cisg
ICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGdsb2JhbE9iamVjdCwgbnVsbHB0cik7
CiB9CiAKIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVj
dFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSkKQEAgLTMzNywxMyArMzM2LDEz
IEBAIGJvb2wgSlNPYmplY3RIYXNQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
ZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0
ID0gdG9KUyhvYmplY3QpOwogICAgIAotICAgIHJldHVybiBqc09iamVjdC0+aGFzUHJvcGVydHko
ZXhlYywgcHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZ2bSkpOworICAgIHJldHVybiBqc09iamVj
dC0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUtPmlkZW50aWZpZXIoJnZt
KSk7CiB9CiAKIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4
LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQpAQCAtMzUyLDE2ICszNTEsMTYgQEAgSlNWYWx1ZVJlZiBKU09iamVjdEdl
dFByb3BlcnR5KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNTdHJpbmdS
ZWYKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZt
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBKU09i
amVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAKLSAgICBKU1ZhbHVlIGpzVmFsdWUgPSBq
c09iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0pKTsKLSAgICBo
YW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0aW9uKTsKLSAgICByZXR1
cm4gdG9SZWYoZXhlYywganNWYWx1ZSk7CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmplY3Qt
PmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0pKTsKKyAgICBo
YW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwor
ICAgIHJldHVybiB0b1JlZihnbG9iYWxPYmplY3QsIGpzVmFsdWUpOwogfQogCiB2b2lkIEpTT2Jq
ZWN0U2V0UHJvcGVydHkoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0
cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYgdmFsdWUsIEpTUHJvcGVydHlBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKQEAgLTM3MCwyNiArMzY5LDI2
IEBAIHZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
ZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4
KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKICAg
ICBJZGVudGlmaWVyIG5hbWUocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZ2bSkpOwotICAgIEpT
VmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOworICAgIEpTVmFsdWUganNWYWx1ZSA9
IHRvSlMoZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAKLSAgICBib29sIGRvZXNOb3RIYXZlUHJvcGVy
dHkgPSBhdHRyaWJ1dGVzICYmICFqc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgbmFtZSk7Cisg
ICAgYm9vbCBkb2VzTm90SGF2ZVByb3BlcnR5ID0gYXR0cmlidXRlcyAmJiAhanNPYmplY3QtPmhh
c1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgbmFtZSk7CiAgICAgaWYgKExJS0VMWSghc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CiAgICAgICAgIGlmIChkb2VzTm90SGF2ZVByb3BlcnR5KSB7CiAgICAgICAg
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYyhqc1ZhbHVlLCBhdHRyaWJ1dGVzKTsKLSAgICAg
ICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KGpzT2Jq
ZWN0LCBleGVjLCBuYW1lLCBkZXNjLCBmYWxzZSk7CisgICAgICAgICAgICBqc09iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShqc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBu
YW1lLCBkZXNjLCBmYWxzZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChqc09iamVjdCk7Ci0gICAgICAgICAgICBqc09iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5wdXQoanNPYmplY3QsIGV4ZWMsIG5hbWUsIGpzVmFsdWUsIHNsb3QpOworICAgICAg
ICAgICAganNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGpzT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIG5hbWUsIGpzVmFsdWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgfQotICAgIGhhbmRsZUV4
Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBleGVjLCBleGNlcHRpb24pOworICAgIGhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiB9CiAKIGJvb2wg
SlNPYmplY3RIYXNQcm9wZXJ0eUZvcktleShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBv
YmplY3QsIEpTVmFsdWVSZWYga2V5LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC0zOTgsMTgg
KzM5NywxOCBAQCBib29sIEpTT2JqZWN0SGFzUHJvcGVydHlGb3JLZXkoSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1ZhbHVlUmVmCiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMo
b2JqZWN0KTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gdG9KUyhleGVjLCBrZXkpLnRvUHJvcGVy
dHlLZXkoZXhlYyk7Ci0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBleGVj
LCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCisgICAgSWRlbnRpZmll
ciBpZGVudCA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBrZXkpLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGdsb2JhbE9iamVj
dCwgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBib29sIHJlc3VsdCA9IGpzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVj
LCBpZGVudCk7Ci0gICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGV4ZWMsIGV4Y2Vw
dGlvbik7CisgICAgYm9vbCByZXN1bHQgPSBqc09iamVjdC0+aGFzUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBpZGVudCk7CisgICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGdsb2JhbE9i
amVjdCwgZXhjZXB0aW9uKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00MTksMTkgKzQx
OCwxOSBAQCBKU1ZhbHVlUmVmIEpTT2JqZWN0R2V0UHJvcGVydHlGb3JLZXkoSlNDb250ZXh0UmVm
IGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1ZhbAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMo
b2JqZWN0KTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gdG9KUyhleGVjLCBrZXkpLnRvUHJvcGVy
dHlLZXkoZXhlYyk7Ci0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBleGVj
LCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCisgICAgSWRlbnRpZmll
ciBpZGVudCA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBrZXkpLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGdsb2JhbE9iamVj
dCwgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzT2JqZWN0LT5nZXQoZXhlYywg
aWRlbnQpOwotICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBleGVjLCBleGNlcHRp
b24pOwotICAgIHJldHVybiB0b1JlZihleGVjLCBqc1ZhbHVlKTsKKyAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBqc09iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgaWRlbnQpOworICAgIGhhbmRsZUV4Y2Vw
dGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJu
IHRvUmVmKGdsb2JhbE9iamVjdCwganNWYWx1ZSk7CiB9CiAKIHZvaWQgSlNPYmplY3RTZXRQcm9w
ZXJ0eUZvcktleShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFsdWVS
ZWYga2V5LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1Byb3BlcnR5QXR0cmlidXRlcyBhdHRyaWJ1dGVz
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC00NDAsMjkgKzQzOSwyOSBAQCB2b2lkIEpTT2Jq
ZWN0U2V0UHJvcGVydHlGb3JLZXkoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0
LCBKU1ZhbHVlUmVmCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0
eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBs
b2NrZXIodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAog
ICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKLSAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogCi0gICAgSWRlbnRpZmllciBpZGVudCA9IHRvSlMoZXhlYywga2V5
KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChz
Y29wZSwgZXhlYywgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQorICAg
IElkZW50aWZpZXIgaWRlbnQgPSB0b0pTKGdsb2JhbE9iamVjdCwga2V5KS50b1Byb3BlcnR5S2V5
KGdsb2JhbE9iamVjdCk7CisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBn
bG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBkb2VzTm90SGF2ZVByb3BlcnR5ID0gYXR0cmlidXRl
cyAmJiAhanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KTsKKyAgICBib29sIGRvZXNO
b3RIYXZlUHJvcGVydHkgPSBhdHRyaWJ1dGVzICYmICFqc09iamVjdC0+aGFzUHJvcGVydHkoZ2xv
YmFsT2JqZWN0LCBpZGVudCk7CiAgICAgaWYgKExJS0VMWSghc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgIGlmIChkb2VzTm90SGF2ZVByb3BlcnR5KSB7CiAgICAgICAgICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgZGVzYyhqc1ZhbHVlLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgICAgIGpzT2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KGpzT2JqZWN0LCBleGVjLCBp
ZGVudCwgZGVzYywgZmFsc2UpOworICAgICAgICAgICAganNPYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+ZGVmaW5lT3duUHJvcGVydHkoanNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIGRlc2Ms
IGZhbHNlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGpzT2JqZWN0KTsKLSAgICAgICAgICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1
dChqc09iamVjdCwgZXhlYywgaWRlbnQsIGpzVmFsdWUsIHNsb3QpOworICAgICAgICAgICAganNP
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGpzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50
LCBqc1ZhbHVlLCBzbG90KTsKICAgICAgICAgfQogICAgIH0KLSAgICBoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0aW9uKTsKKyAgICBoYW5kbGVFeGNlcHRpb25JZk5l
ZWRlZChzY29wZSwgZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogfQogCiBib29sIEpTT2JqZWN0
RGVsZXRlUHJvcGVydHlGb3JLZXkoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0
LCBKU1ZhbHVlUmVmIGtleSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtNDcxLDE4ICs0NzAs
MTggQEAgYm9vbCBKU09iamVjdERlbGV0ZVByb3BlcnR5Rm9yS2V5KEpTQ29udGV4dFJlZiBjdHgs
IEpTT2JqZWN0UmVmIG9iamVjdCwgSlNWYWx1ZVIKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0g
dG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmpl
Y3QpOwotICAgIElkZW50aWZpZXIgaWRlbnQgPSB0b0pTKGV4ZWMsIGtleSkudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGV4ZWMsIGV4
Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKKyAgICBJZGVudGlmaWVyIGlk
ZW50ID0gdG9KUyhnbG9iYWxPYmplY3QsIGtleSkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3Qp
OworICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZ2xvYmFsT2JqZWN0LCBl
eGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVs
ZXRlUHJvcGVydHkoanNPYmplY3QsIGV4ZWMsIGlkZW50KTsKLSAgICBoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0aW9uKTsKKyAgICBib29sIHJlc3VsdCA9IGpzT2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KGpzT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIGlkZW50KTsKKyAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZ2xvYmFsT2Jq
ZWN0LCBleGNlcHRpb24pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ5MiwxNiArNDkx
LDE2IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250ZXh0UmVm
IGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCB1bnNpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
UyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3Qp
OwogCi0gICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNPYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eUlu
ZGV4KTsKLSAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0aW9u
KTsKLSAgICByZXR1cm4gdG9SZWYoZXhlYywganNWYWx1ZSk7CisgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0ganNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5SW5kZXgpOworICAgIGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CisgICAg
cmV0dXJuIHRvUmVmKGdsb2JhbE9iamVjdCwganNWYWx1ZSk7CiB9CiAKIApAQCAtNTExLDE2ICs1
MTAsMTYgQEAgdm9pZCBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChKU0NvbnRleHRSZWYgY3R4
LCBKU09iamVjdFJlZiBvYmplY3QsIHVuc2lnbmVkIHAKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
UyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3Qp
OwotICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOworICAgIEpTVmFsdWUg
anNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgCi0gICAganNPYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChqc09iamVjdCwgZXhlYywgcHJvcGVydHlJbmRl
eCwganNWYWx1ZSwgZmFsc2UpOwotICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBl
eGVjLCBleGNlcHRpb24pOworICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5k
ZXgoanNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlJbmRleCwganNWYWx1ZSwgZmFsc2Up
OworICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2Vw
dGlvbik7CiB9CiAKIGJvb2wgSlNPYmplY3REZWxldGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4
LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQpAQCAtNTI5LDE1ICs1MjgsMTUgQEAgYm9vbCBKU09iamVjdERlbGV0ZVBy
b3BlcnR5KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNTdHJpbmdSZWYg
cHIKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tl
cih2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAg
SlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogCi0gICAgYm9vbCByZXN1bHQgPSBq
c09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShqc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZ2bSkpOwotICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKHNjb3BlLCBleGVjLCBleGNlcHRpb24pOworICAgIGJvb2wgcmVzdWx0ID0ganNPYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoanNPYmplY3QsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZ2bSkpOworICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtNjEyLDggKzYxMSw4IEBAIGJvb2wgSlNPYmplY3RTZXRQcml2YXRlKEpTT2JqZWN0
UmVmIG9iamVjdCwgdm9pZCogZGF0YSkKIAogSlNWYWx1ZVJlZiBKU09iamVjdEdldFByaXZhdGVQ
cm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVm
IHByb3BlcnR5TmFtZSkKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQ7CkBAIC02MzIsMTYgKzYzMSwxNiBAQCBKU1ZhbHVlUmVmIEpT
T2JqZWN0R2V0UHJpdmF0ZVByb3BlcnR5KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9i
amVjdCwgSlNTdAogICAgIGVsc2UgaWYgKGpzT2JqZWN0LT5pbmhlcml0czxKU0NhbGxiYWNrT2Jq
ZWN0PEpTQVBJV3JhcHBlck9iamVjdD4+KHZtKSkKICAgICAgICAgcmVzdWx0ID0ganNDYXN0PEpT
Q2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pio+KGpzT2JqZWN0KS0+Z2V0UHJpdmF0
ZVByb3BlcnR5KG5hbWUpOwogI2VuZGlmCi0gICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHRvUmVmKGdsb2JhbE9iamVjdCwgcmVzdWx0KTsKIH0KIAogYm9vbCBKU09i
amVjdFNldFByaXZhdGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmpl
Y3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBK
U09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7Ci0gICAgSlNWYWx1ZSBqc1ZhbHVlID0g
dmFsdWUgPyB0b0pTKGV4ZWMsIHZhbHVlKSA6IEpTVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB2YWx1ZSA/IHRvSlMoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkgOiBKU1ZhbHVlKCk7CiAgICAg
SWRlbnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0pKTsKIAogICAgIC8v
IEdldCB3cmFwcGVkIG9iamVjdCBpZiBwcm94aWVkCkBAIC02NjcsOCArNjY2LDggQEAgYm9vbCBK
U09iamVjdFNldFByaXZhdGVQcm9wZXJ0eShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBv
YmplY3QsIEpTU3RyaW5nUmUKIAogYm9vbCBKU09iamVjdERlbGV0ZVByaXZhdGVQcm9wZXJ0eShK
U0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5
TmFtZSkKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgSWRl
bnRpZmllciBuYW1lKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcigmdm0pKTsKQEAgLTY5OCw4ICs2
OTcsOCBAQCBib29sIEpTT2JqZWN0SXNGdW5jdGlvbihKU0NvbnRleHRSZWYgY3R4LCBKU09iamVj
dFJlZiBvYmplY3QpCiB7CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBKU0NlbGwqIGNlbGwgPSB0b0pTKG9iamVjdCk7
CkBAIC03MDgsOCArNzA3LDggQEAgYm9vbCBKU09iamVjdElzRnVuY3Rpb24oSlNDb250ZXh0UmVm
IGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQogCiBKU1ZhbHVlUmVmIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb24oSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVu
dHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKIApAQCAtNzIwLDE1ICs3MTksMTUgQEAgSlNWYWx1ZVJlZiBKU09i
amVjdENhbGxBc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwg
SlNPYmplY3QKICAgICBKU09iamVjdCoganNUaGlzT2JqZWN0ID0gdG9KUyh0aGlzT2JqZWN0KTsK
IAogICAgIGlmICghanNUaGlzT2JqZWN0KQotICAgICAgICBqc1RoaXNPYmplY3QgPSBleGVjLT5n
bG9iYWxUaGlzVmFsdWUoKTsKKyAgICAgICAganNUaGlzT2JqZWN0ID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxUaGlzKCk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsrKQotICAgICAgICBhcmdMaXN0
LmFwcGVuZCh0b0pTKGV4ZWMsIGFyZ3VtZW50c1tpXSkpOworICAgICAgICBhcmdMaXN0LmFwcGVu
ZCh0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzW2ldKSk7CiAgICAgaWYgKFVOTElLRUxZKGFy
Z0xpc3QuaGFzT3ZlcmZsb3dlZCgpKSkgewogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMs
IHRocm93U2NvcGUpOwotICAgICAgICBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZXhl
YywgZXhjZXB0aW9uKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSk7CisgICAgICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBn
bG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAt
NzM3LDE2ICs3MzYsMTYgQEAgSlNWYWx1ZVJlZiBKU09iamVjdENhbGxBc0Z1bmN0aW9uKEpTQ29u
dGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNPYmplY3QKICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSlNWYWx1ZVJl
ZiByZXN1bHQgPSB0b1JlZihleGVjLCBwcm9maWxlZENhbGwoZXhlYywgUHJvZmlsaW5nUmVhc29u
OjpBUEksIGpzT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVGhpc09iamVjdCwgYXJnTGlz
dCkpOwotICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0
aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQorICAgIEpTVmFsdWVSZWYgcmVzdWx0
ID0gdG9SZWYoZ2xvYmFsT2JqZWN0LCBwcm9maWxlZENhbGwoZ2xvYmFsT2JqZWN0LCBQcm9maWxp
bmdSZWFzb246OkFQSSwganNPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNUaGlzT2JqZWN0
LCBhcmdMaXN0KSk7CisgICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9i
YWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAg
ICAgcmVzdWx0ID0gMDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBib29sIEpTT2JqZWN0SXND
b25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QpCiB7Ci0gICAg
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAg
aWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc1NSw4ICs3NTQsOCBAQCBi
b29sIEpTT2JqZWN0SXNDb25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBv
YmplY3QpCiAKIEpTT2JqZWN0UmVmIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoSlNDb250ZXh0
UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAtNzcyLDE2ICs3NzEsMTYg
QEAgSlNPYmplY3RSZWYgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY3R4
LCBKU09iamVjdFJlZiBvYmplY3QsIHNpemUKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z0xpc3Q7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyBpKyspCi0g
ICAgICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7CisgICAgICAg
IGFyZ0xpc3QuYXBwZW5kKHRvSlMoZ2xvYmFsT2JqZWN0LCBhcmd1bWVudHNbaV0pKTsKICAgICBp
ZiAoVU5MSUtFTFkoYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpKSB7CiAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYywgdGhyb3dTY29wZSk7Ci0gICAgICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKHNjb3BlLCBleGVjLCBleGNlcHRpb24pOworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgaGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQoc2NvcGUsIGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gdG9SZWYocHJvZmlsZWRDb25zdHJ1
Y3QoZXhlYywgUHJvZmlsaW5nUmVhc29uOjpBUEksIGpzT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBj
b25zdHJ1Y3REYXRhLCBhcmdMaXN0KSk7Ci0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVk
KHNjb3BlLCBleGVjLCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCisg
ICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gdG9SZWYocHJvZmlsZWRDb25zdHJ1Y3QoZ2xvYmFsT2Jq
ZWN0LCBQcm9maWxpbmdSZWFzb246OkFQSSwganNPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0
cnVjdERhdGEsIGFyZ0xpc3QpKTsKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2Nv
cGUsIGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93
KQogICAgICAgICByZXN1bHQgPSAwOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC04MDcsMTUg
KzgwNiwxNSBAQCBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIEpTT2JqZWN0Q29weVByb3BlcnR5TmFt
ZXMoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgbwogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tl
cihnbG9iYWxPYmplY3QpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9i
amVjdCk7CiAgICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5hbWVzID0gbmV3IE9w
YXF1ZUpTUHJvcGVydHlOYW1lQXJyYXkoJnZtKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBhcnJh
eSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1
ZGUpOwotICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMoanNP
YmplY3QsIGV4ZWMsIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAganNPYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhqc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBh
cnJheSwgRW51bWVyYXRpb25Nb2RlKCkpOwogCiAgICAgc2l6ZV90IHNpemUgPSBhcnJheS5zaXpl
KCk7CiAgICAgcHJvcGVydHlOYW1lcy0+YXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXpl
KTsKQEAgLTg3Nyw2ICs4NzYsNiBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNPYmplY3RHZXRHbG9i
YWxDb250ZXh0KEpTT2JqZWN0UmVmIG9iamVjdFJlZikKICAgICBKU09iamVjdCogb2JqZWN0ID0g
dG9KUyhvYmplY3RSZWYpOwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0dsb2JhbENvbnRleHRSZWY+KG9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8SlNHbG9iYWxDb250ZXh0UmVmPihvYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJlZi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAppbmRleCBiZTAwNDliZDhh
ZTk4Y2I5OWU3ZWRmOGY1NmEzMzRiN2FjOTYwYWZiLi5iOWMwYzA4N2VmNTUzMTNhZTIwMmExODMw
OTY1OTM3YjYxZWRkNmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U2NyaXB0UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVm
LmNwcApAQCAtMTQ0LDIzICsxNDQsMjMgQEAgdm9pZCBKU1NjcmlwdFJlbGVhc2UoSlNTY3JpcHRS
ZWYgc2NyaXB0KQogCiBKU1ZhbHVlUmVmIEpTU2NyaXB0RXZhbHVhdGUoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTU2NyaXB0UmVmIHNjcmlwdCwgSlNWYWx1ZVJlZiB0aGlzVmFsdWVSZWYsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQp
OwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGlmICgmc2NyaXB0LT52bSgpICE9ICZ2
bSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBpbnRlcm5hbEV4Y2VwdGlvbjsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRoaXNWYWx1ZVJlZiA/IHRvSlMoZXhlYywgdGhpc1Zh
bHVlUmVmKSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZShl
eGVjLCBTb3VyY2VDb2RlKCpzY3JpcHQpLCB0aGlzVmFsdWUsIGludGVybmFsRXhjZXB0aW9uKTsK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRoaXNWYWx1ZVJlZiA/IHRvSlMoZ2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWVSZWYpIDoganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2
YWx1YXRlKGdsb2JhbE9iamVjdCwgU291cmNlQ29kZSgqc2NyaXB0KSwgdGhpc1ZhbHVlLCBpbnRl
cm5hbEV4Y2VwdGlvbik7CiAgICAgaWYgKGludGVybmFsRXhjZXB0aW9uKSB7CiAgICAgICAgIGlm
IChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgaW50ZXJu
YWxFeGNlcHRpb24tPnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGds
b2JhbE9iamVjdCwgaW50ZXJuYWxFeGNlcHRpb24tPnZhbHVlKCkpOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHJl
c3VsdCk7CisgICAgcmV0dXJuIHRvUmVmKGdsb2JhbE9iamVjdCwgcmVzdWx0KTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1R5cGVkQXJyYXkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1R5cGVkQXJyYXkuY3BwCmluZGV4IDk5M2JmMmNm
YTJlYTBhNjNjY2Y5NzAxODg0Yjc5MzFhODM3NTI5ZDcuLmEyYThhOTlhNTg5MjRkZDRlMTU2NDg5
MzVhMzlkMmM5ZTg1YTc1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNUeXBlZEFycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVHlwZWRB
cnJheS5jcHAKQEAgLTk5LDM0ICs5OSwzMyBAQCBpbmxpbmUgVHlwZWRBcnJheVR5cGUgdG9UeXBl
ZEFycmF5VHlwZShKU1R5cGVkQXJyYXlUeXBlIHR5cGUpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAotc3RhdGljIEpTT2JqZWN0KiBjcmVhdGVUeXBlZEFycmF5KEV4ZWNT
dGF0ZSogZXhlYywgSlNUeXBlZEFycmF5VHlwZSB0eXBlLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYg
YnVmZmVyLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIEpTT2JqZWN0KiBj
cmVhdGVUeXBlZEFycmF5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVHlwZWRBcnJh
eVR5cGUgdHlwZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIGJ1ZmZlciwgc2l6ZV90IG9mZnNldCwg
c2l6ZV90IGxlbmd0aCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKICAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBz
d2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIGtKU1R5cGVkQXJyYXlUeXBlSW50OEFycmF5OgotICAg
ICAgICByZXR1cm4gSlNJbnQ4QXJyYXk6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnR5cGVk
QXJyYXlTdHJ1Y3R1cmUoVHlwZUludDgpLCBXVEZNb3ZlKGJ1ZmZlciksIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIEpTSW50OEFycmF5OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZUludDgpLCBXVEZNb3ZlKGJ1ZmZlciks
IG9mZnNldCwgbGVuZ3RoKTsKICAgICBjYXNlIGtKU1R5cGVkQXJyYXlUeXBlSW50MTZBcnJheToK
LSAgICAgICAgcmV0dXJuIEpTSW50MTZBcnJheTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+
dHlwZWRBcnJheVN0cnVjdHVyZShUeXBlSW50MTYpLCBXVEZNb3ZlKGJ1ZmZlciksIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEpTSW50MTZBcnJheTo6Y3JlYXRlKGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKFR5cGVJbnQxNiksIFdURk1vdmUo
YnVmZmVyKSwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIGNhc2Uga0pTVHlwZWRBcnJheVR5cGVJbnQz
MkFycmF5OgotICAgICAgICByZXR1cm4gSlNJbnQzMkFycmF5OjpjcmVhdGUoZXhlYywgZ2xvYmFs
T2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKFR5cGVJbnQzMiksIFdURk1vdmUoYnVmZmVyKSwg
b2Zmc2V0LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gSlNJbnQzMkFycmF5OjpjcmVhdGUoZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZUludDMyKSwg
V1RGTW92ZShidWZmZXIpLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgY2FzZSBrSlNUeXBlZEFycmF5
VHlwZVVpbnQ4QXJyYXk6Ci0gICAgICAgIHJldHVybiBKU1VpbnQ4QXJyYXk6OmNyZWF0ZShleGVj
LCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZVVpbnQ4KSwgV1RGTW92ZShi
dWZmZXIpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBKU1VpbnQ4QXJyYXk6OmNy
ZWF0ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShUeXBl
VWludDgpLCBXVEZNb3ZlKGJ1ZmZlciksIG9mZnNldCwgbGVuZ3RoKTsKICAgICBjYXNlIGtKU1R5
cGVkQXJyYXlUeXBlVWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHJldHVybiBKU1VpbnQ4Q2xh
bXBlZEFycmF5OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJl
KFR5cGVVaW50OENsYW1wZWQpLCBXVEZNb3ZlKGJ1ZmZlciksIG9mZnNldCwgbGVuZ3RoKTsKKyAg
ICAgICAgcmV0dXJuIEpTVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShUeXBlVWludDhDbGFtcGVkKSwgV1RGTW92
ZShidWZmZXIpLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgY2FzZSBrSlNUeXBlZEFycmF5VHlwZVVp
bnQxNkFycmF5OgotICAgICAgICByZXR1cm4gSlNVaW50MTZBcnJheTo6Y3JlYXRlKGV4ZWMsIGds
b2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShUeXBlVWludDE2KSwgV1RGTW92ZShidWZm
ZXIpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBKU1VpbnQxNkFycmF5OjpjcmVh
dGUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZVVp
bnQxNiksIFdURk1vdmUoYnVmZmVyKSwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIGNhc2Uga0pTVHlw
ZWRBcnJheVR5cGVVaW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuIEpTVWludDMyQXJyYXk6OmNy
ZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZVVpbnQzMiks
IFdURk1vdmUoYnVmZmVyKSwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gSlNVaW50
MzJBcnJheTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3Ry
dWN0dXJlKFR5cGVVaW50MzIpLCBXVEZNb3ZlKGJ1ZmZlciksIG9mZnNldCwgbGVuZ3RoKTsKICAg
ICBjYXNlIGtKU1R5cGVkQXJyYXlUeXBlRmxvYXQzMkFycmF5OgotICAgICAgICByZXR1cm4gSlNG
bG9hdDMyQXJyYXk6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1
cmUoVHlwZUZsb2F0MzIpLCBXVEZNb3ZlKGJ1ZmZlciksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAg
ICAgcmV0dXJuIEpTRmxvYXQzMkFycmF5OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZUZsb2F0MzIpLCBXVEZNb3ZlKGJ1ZmZlciksIG9m
ZnNldCwgbGVuZ3RoKTsKICAgICBjYXNlIGtKU1R5cGVkQXJyYXlUeXBlRmxvYXQ2NEFycmF5Ogot
ICAgICAgICByZXR1cm4gSlNGbG9hdDY0QXJyYXk6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qt
PnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZUZsb2F0NjQpLCBXVEZNb3ZlKGJ1ZmZlciksIG9mZnNl
dCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQ2NEFycmF5OjpjcmVhdGUoZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZUZsb2F0NjQpLCBX
VEZNb3ZlKGJ1ZmZlciksIG9mZnNldCwgbGVuZ3RoKTsKICAgICBjYXNlIGtKU1R5cGVkQXJyYXlU
eXBlQXJyYXlCdWZmZXI6CiAgICAgY2FzZSBrSlNUeXBlZEFycmF5VHlwZU5vbmU6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzksMTEgKzEzOCwxMSBAQCBzdGF0
aWMgSlNPYmplY3QqIGNyZWF0ZVR5cGVkQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU1R5cGVkQXJy
YXlUeXBlIHR5cGUsIFJlZlB0cgogSlNUeXBlZEFycmF5VHlwZSBKU1ZhbHVlR2V0VHlwZWRBcnJh
eVR5cGUoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZVJlZiwgSlNWYWx1ZVJlZiop
CiB7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2Vy
KHZtKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlUmVmKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlUmVmKTsKICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBrSlNUeXBlZEFycmF5VHlwZU5vbmU7CiAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLmdldE9iamVjdCgpOwpAQCAtMTU2LDggKzE1NSw4
IEBAIEpTVHlwZWRBcnJheVR5cGUgSlNWYWx1ZUdldFR5cGVkQXJyYXlUeXBlKEpTQ29udGV4dFJl
ZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWVSZWYsCiAKIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZVR5
cGVkQXJyYXkoSlNDb250ZXh0UmVmIGN0eCwgSlNUeXBlZEFycmF5VHlwZSBhcnJheVR5cGUsIHNp
emVfdCBsZW5ndGgsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTE2NywxNiArMTY2LDE2IEBAIEpTT2JqZWN0
UmVmIEpTT2JqZWN0TWFrZVR5cGVkQXJyYXkoSlNDb250ZXh0UmVmIGN0eCwgSlNUeXBlZEFycmF5
VHlwZSBhcnJheVR5cGUsCiAgICAgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplID0gZWxlbWVudFNp
emUodG9UeXBlZEFycmF5VHlwZShhcnJheVR5cGUpKTsKIAogICAgIGF1dG8gYnVmZmVyID0gQXJy
YXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgsIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgSlNPYmpl
Y3QqIHJlc3VsdCA9IGNyZWF0ZVR5cGVkQXJyYXkoZXhlYywgYXJyYXlUeXBlLCBXVEZNb3ZlKGJ1
ZmZlciksIDAsIGxlbmd0aCk7Ci0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3Bl
LCBleGVjLCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCisgICAgSlNP
YmplY3QqIHJlc3VsdCA9IGNyZWF0ZVR5cGVkQXJyYXkoZ2xvYmFsT2JqZWN0LCBhcnJheVR5cGUs
IFdURk1vdmUoYnVmZmVyKSwgMCwgbGVuZ3RoKTsKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZO
ZWVkZWQoc2NvcGUsIGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6
OkRpZFRocm93KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gdG9SZWYocmVz
dWx0KTsKIH0KIAogSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlVHlwZWRBcnJheVdpdGhCeXRlc05v
Q29weShKU0NvbnRleHRSZWYgY3R4LCBKU1R5cGVkQXJyYXlUeXBlIGFycmF5VHlwZSwgdm9pZCog
Ynl0ZXMsIHNpemVfdCBsZW5ndGgsIEpTVHlwZWRBcnJheUJ5dGVzRGVhbGxvY2F0b3IgZGVzdHJ1
Y3Rvciwgdm9pZCogZGVzdHJ1Y3RvckNvbnRleHQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTE4OSwxNiAr
MTg4LDE2IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZVR5cGVkQXJyYXlXaXRoQnl0ZXNOb0Nv
cHkoSlNDb250ZXh0UmVmIGN0eCwgSlNUeXBlZEFycmF5CiAgICAgICAgIGlmIChkZXN0cnVjdG9y
KQogICAgICAgICAgICAgZGVzdHJ1Y3RvcihwLCBkZXN0cnVjdG9yQ29udGV4dCk7CiAgICAgfSk7
Ci0gICAgSlNPYmplY3QqIHJlc3VsdCA9IGNyZWF0ZVR5cGVkQXJyYXkoZXhlYywgYXJyYXlUeXBl
LCBXVEZNb3ZlKGJ1ZmZlciksIDAsIGxlbmd0aCAvIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgaWYg
KGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBleGVjLCBleGNlcHRpb24pID09IEV4Y2Vw
dGlvblN0YXR1czo6RGlkVGhyb3cpCisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNyZWF0ZVR5cGVk
QXJyYXkoZ2xvYmFsT2JqZWN0LCBhcnJheVR5cGUsIFdURk1vdmUoYnVmZmVyKSwgMCwgbGVuZ3Ro
IC8gZWxlbWVudEJ5dGVTaXplKTsKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2Nv
cGUsIGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gdG9SZWYocmVzdWx0KTsKIH0K
IAogSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlVHlwZWRBcnJheVdpdGhBcnJheUJ1ZmZlcihKU0Nv
bnRleHRSZWYgY3R4LCBKU1R5cGVkQXJyYXlUeXBlIGFycmF5VHlwZSwgSlNPYmplY3RSZWYganNC
dWZmZXJSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTIwNywyMyArMjA2LDIzIEBAIEpTT2JqZWN0UmVm
IEpTT2JqZWN0TWFrZVR5cGVkQXJyYXlXaXRoQXJyYXlCdWZmZXIoSlNDb250ZXh0UmVmIGN0eCwg
SlNUeXBlZEFycmF5CiAKICAgICBKU0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IGpzRHluYW1pY0Nh
c3Q8SlNBcnJheUJ1ZmZlcio+KHZtLCB0b0pTKGpzQnVmZmVyUmVmKSk7CiAgICAgaWYgKCFqc0J1
ZmZlcikgewotICAgICAgICBzZXRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgIkpTT2JqZWN0TWFrZVR5cGVkQXJyYXlXaXRoQXJyYXlCdWZmZXIgZXhwZWN0
cyBidWZmZXIgdG8gYmUgYW4gQXJyYXkgQnVmZmVyIG9iamVjdCIpKTsKKyAgICAgICAgc2V0RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uLCBjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCAiSlNPYmplY3RNYWtlVHlwZWRBcnJheVdpdGhBcnJheUJ1ZmZlciBleHBlY3RzIGJ1ZmZl
ciB0byBiZSBhbiBBcnJheSBCdWZmZXIgb2JqZWN0IikpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGpzQnVmZmVyLT5p
bXBsKCk7CiAgICAgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplID0gZWxlbWVudFNpemUodG9UeXBl
ZEFycmF5VHlwZShhcnJheVR5cGUpKTsKIAotICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjcmVhdGVU
eXBlZEFycmF5KGV4ZWMsIGFycmF5VHlwZSwgV1RGTW92ZShidWZmZXIpLCAwLCBidWZmZXItPmJ5
dGVMZW5ndGgoKSAvIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklm
TmVlZGVkKHNjb3BlLCBleGVjLCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhy
b3cpCisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNyZWF0ZVR5cGVkQXJyYXkoZ2xvYmFsT2JqZWN0
LCBhcnJheVR5cGUsIFdURk1vdmUoYnVmZmVyKSwgMCwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyBl
bGVtZW50Qnl0ZVNpemUpOworICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwg
Z2xvYmFsT2JqZWN0LCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiB0b1JlZihyZXN1bHQpOwogfQogCiBK
U09iamVjdFJlZiBKU09iamVjdE1ha2VUeXBlZEFycmF5V2l0aEFycmF5QnVmZmVyQW5kT2Zmc2V0
KEpTQ29udGV4dFJlZiBjdHgsIEpTVHlwZWRBcnJheVR5cGUgYXJyYXlUeXBlLCBKU09iamVjdFJl
ZiBqc0J1ZmZlclJlZiwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQogewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
KGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
IApAQCAtMjMyLDIwICsyMzEsMjAgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlVHlwZWRBcnJh
eVdpdGhBcnJheUJ1ZmZlckFuZE9mZnNldChKU0NvbnRleHRSZWYgY3R4LCBKU1QKIAogICAgIEpT
QXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4odm0s
IHRvSlMoanNCdWZmZXJSZWYpKTsKICAgICBpZiAoIWpzQnVmZmVyKSB7Ci0gICAgICAgIHNldEV4
Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSlNPYmplY3RN
YWtlVHlwZWRBcnJheVdpdGhBcnJheUJ1ZmZlciBleHBlY3RzIGJ1ZmZlciB0byBiZSBhbiBBcnJh
eSBCdWZmZXIgb2JqZWN0IikpOworICAgICAgICBzZXRFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBl
eGNlcHRpb24sIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJKU09iamVjdE1ha2VUeXBl
ZEFycmF5V2l0aEFycmF5QnVmZmVyIGV4cGVjdHMgYnVmZmVyIHRvIGJlIGFuIEFycmF5IEJ1ZmZl
ciBvYmplY3QiKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBjcmVhdGVUeXBlZEFycmF5KGV4ZWMsIGFycmF5VHlwZSwganNCdWZmZXIt
PmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpOwotICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRl
ZChzY29wZSwgZXhlYywgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQor
ICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjcmVhdGVUeXBlZEFycmF5KGdsb2JhbE9iamVjdCwgYXJy
YXlUeXBlLCBqc0J1ZmZlci0+aW1wbCgpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgaWYgKGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhj
ZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0
dXJuIHRvUmVmKHJlc3VsdCk7CiB9CiAKIHZvaWQqIEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5dGVz
UHRyKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdFJlZiwgSlNWYWx1ZVJlZiop
CiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIApAQCAtMjU5LDgg
KzI1OCw4IEBAIHZvaWQqIEpTT2JqZWN0R2V0VHlwZWRBcnJheUJ5dGVzUHRyKEpTQ29udGV4dFJl
ZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdFJlZiwgSlNWCiAKIHNpemVfdCBKU09iamVjdEdldFR5
cGVkQXJyYXlMZW5ndGgoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0UmVmLCBK
U1ZhbHVlUmVmKikKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
UyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU09iamVjdCog
b2JqZWN0ID0gdG9KUyhvYmplY3RSZWYpOwogCiAgICAgaWYgKEpTQXJyYXlCdWZmZXJWaWV3KiB0
eXBlZEFycmF5ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHZtLCBvYmplY3Qp
KQpAQCAtMjcxLDggKzI3MCw4IEBAIHNpemVfdCBKU09iamVjdEdldFR5cGVkQXJyYXlMZW5ndGgo
SlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0UmVmLCBKU1ZhCiAKIHNpemVfdCBK
U09iamVjdEdldFR5cGVkQXJyYXlCeXRlTGVuZ3RoKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIG9iamVjdFJlZiwgSlNWYWx1ZVJlZiopCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
UyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIAogICAgIGlmIChKU0Fy
cmF5QnVmZmVyVmlldyogdHlwZWRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZp
ZXcqPih2bSwgb2JqZWN0KSkKQEAgLTI4Myw4ICsyODIsOCBAQCBzaXplX3QgSlNPYmplY3RHZXRU
eXBlZEFycmF5Qnl0ZUxlbmd0aChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3RS
ZWYsCiAKIHNpemVfdCBKU09iamVjdEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KEpTQ29udGV4dFJl
ZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdFJlZiwgSlNWYWx1ZVJlZiopCiB7Ci0gICAgRXhlY1N0
YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsK
IAogICAgIGlmIChKU0FycmF5QnVmZmVyVmlldyogdHlwZWRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8
SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgb2JqZWN0KSkKQEAgLTI5NSwyMSArMjk0LDIxIEBAIHNp
emVfdCBKU09iamVjdEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KEpTQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIG9iamVjdFJlZiwKIAogSlNPYmplY3RSZWYgSlNPYmplY3RHZXRUeXBlZEFycmF5
QnVmZmVyKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdFJlZiwgSlNWYWx1ZVJl
ZiopCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tl
cih2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIAogICAgIGlm
IChKU0FycmF5QnVmZmVyVmlldyogdHlwZWRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1
ZmZlclZpZXcqPih2bSwgb2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHRvUmVmKHZtLm1fdHlwZWRB
cnJheUNvbnRyb2xsZXItPnRvSlMoZXhlYywgdHlwZWRBcnJheS0+Z2xvYmFsT2JqZWN0KHZtKSwg
dHlwZWRBcnJheS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKSkpOworICAgICAgICByZXR1cm4gdG9S
ZWYodm0ubV90eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUyhnbG9iYWxPYmplY3QsIHR5cGVkQXJy
YXktPmdsb2JhbE9iamVjdCh2bSksIHR5cGVkQXJyYXktPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCkp
KTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQogCiBKU09iamVjdFJlZiBKU09iamVjdE1ha2VB
cnJheUJ1ZmZlcldpdGhCeXRlc05vQ29weShKU0NvbnRleHRSZWYgY3R4LCB2b2lkKiBieXRlcywg
c2l6ZV90IGJ5dGVMZW5ndGgsIEpTVHlwZWRBcnJheUJ5dGVzRGVhbGxvY2F0b3IgYnl0ZXNEZWFs
bG9jYXRvciwgdm9pZCogZGVhbGxvY2F0b3JDb250ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCkBAIC0zMTgs
OCArMzE3LDggQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQXJyYXlCdWZmZXJXaXRoQnl0ZXNO
b0NvcHkoSlNDb250ZXh0UmVmIGN0eCwgdm9pZCogYnl0ZXMKICAgICAgICAgICAgIGJ5dGVzRGVh
bGxvY2F0b3IocCwgZGVhbGxvY2F0b3JDb250ZXh0KTsKICAgICB9KTsKIAotICAgIEpTQXJyYXlC
dWZmZXIqIGpzQnVmZmVyID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKEFycmF5QnVmZmVyU2hhcmluZ01v
ZGU6OkRlZmF1bHQpLCBXVEZNb3ZlKGJ1ZmZlcikpOwotICAgIGlmIChoYW5kbGVFeGNlcHRpb25J
Zk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRo
cm93KQorICAgIEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVyID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKEFycmF5QnVmZmVyU2hhcmlu
Z01vZGU6OkRlZmF1bHQpLCBXVEZNb3ZlKGJ1ZmZlcikpOworICAgIGlmIChoYW5kbGVFeGNlcHRp
b25JZk5lZWRlZChzY29wZSwgZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0
YXR1czo6RGlkVGhyb3cpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIHRv
UmVmKGpzQnVmZmVyKTsKQEAgLTMyNywxNSArMzI2LDE1IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0
TWFrZUFycmF5QnVmZmVyV2l0aEJ5dGVzTm9Db3B5KEpTQ29udGV4dFJlZiBjdHgsIHZvaWQqIGJ5
dGVzCiAKIHZvaWQqIEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlc1B0cihKU0NvbnRleHRSZWYg
Y3R4LCBKU09iamVjdFJlZiBvYmplY3RSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gdG9KUyhvYmplY3RSZWYpOwogCiAgICAgaWYgKEpTQXJyYXlC
dWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4odm0sIG9iamVj
dCkpIHsKICAgICAgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IGpzQnVmZmVyLT5pbXBsKCk7CiAg
ICAgICAgIGlmIChidWZmZXItPmlzV2FzbU1lbW9yeSgpKSB7Ci0gICAgICAgICAgICBzZXRFeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkNhbm5vdCBnZXQg
dGhlIGJhY2tpbmcgYnVmZmVyIGZvciBhIFdlYkFzc2VtYmx5Lk1lbW9yeSJfcykpOworICAgICAg
ICAgICAgc2V0RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uLCBjcmVhdGVUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCAiQ2Fubm90IGdldCB0aGUgYmFja2luZyBidWZmZXIgZm9yIGEgV2Vi
QXNzZW1ibHkuTWVtb3J5Il9zKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfQogCkBAIC0zNDcsOCArMzQ2LDggQEAgdm9pZCogSlNPYmplY3RHZXRBcnJheUJ1ZmZlckJ5
dGVzUHRyKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdFJlZiwgSlMKIAogc2l6
ZV90IEpTT2JqZWN0R2V0QXJyYXlCdWZmZXJCeXRlTGVuZ3RoKEpTQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIG9iamVjdFJlZiwgSlNWYWx1ZVJlZiopCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlMob2JqZWN0UmVmKTsKIAogICAgIGlm
IChKU0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+
KHZtLCBvYmplY3QpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zh
bHVlLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCmluZGV4IDg2ZTEw
Y2ZjOTQwY2YwOWUwNGQ5ODMwYWNhYjJkMDMwODRkZmFhZGUuLmU3NTIwZjc2ZjcxOGU0MzU0ZTkz
ZDdlNmQyMzU3ZjlhMjE0YzBkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0K
QEAgLTY5MSw4ICs2OTEsOCBAQCBpbmxpbmUgaWQgSlNDb250YWluZXJDb252ZXJ0b3I6OmNvbnZl
cnQoSlNWYWx1ZVJlZiB2YWx1ZSkKIAogdm9pZCBKU0NvbnRhaW5lckNvbnZlcnRvcjo6YWRkKFRh
c2sgdGFzaykKIHsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMobV9jb250ZXh0KTsK
LSAgICBtX2pzVmFsdWVzLmFwcGVuZChKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+KGV4ZWMtPnZt
KCksIHRvSlNGb3JHQyhleGVjLCB0YXNrLmpzKSkpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHRvSlMobV9jb250ZXh0KTsKKyAgICBtX2pzVmFsdWVzLmFwcGVuZChK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+KGdsb2JhbE9iamVjdC0+dm0oKSwgdG9KU0ZvckdDKGds
b2JhbE9iamVjdCwgdGFzay5qcykpKTsKICAgICBtX29iamVjdE1hcC5hZGQodGFzay5qcywgdGFz
ay5vYmpjKTsKICAgICBpZiAodGFzay50eXBlICE9IENvbnRhaW5lck5vbmUpCiAgICAgICAgIG1f
d29ya2xpc3QuYXBwZW5kKHRhc2spOwpAQCAtNzA5LDE3ICs3MDksMTcgQEAgSlNDb250YWluZXJD
b252ZXJ0b3I6OlRhc2sgSlNDb250YWluZXJDb252ZXJ0b3I6OnRha2UoKQogI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQogc3RhdGljIHZvaWQgcmVwb3J0RXhjZXB0aW9uVG9JbnNwZWN0b3Io
SlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb25WYWx1ZSkK
IHsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7Ci0gICAgSlNDOjpW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUo
dm0sIGV4Y2VwdGlvblZhbHVlKTsKLSAgICB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CisgICAgdm0udm1FbnRyeUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKTsKIH0K
ICNlbmRpZgogCiBzdGF0aWMgSlNDb250YWluZXJDb252ZXJ0b3I6OlRhc2sgdmFsdWVUb09iamVj
dFdpdGhvdXRDb3B5KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVl
KQogewotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKLSAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKIAogICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHZhbHVlKSkgewogICAgICAg
ICBpZCBwcmltaXRpdmU7CkBAIC05NDAsOCArOTQwLDggQEAgSlNWYWx1ZVJlZiBPYmpjQ29udGFp
bmVyQ29udmVydG9yOjpjb252ZXJ0KGlkIG9iamVjdCkKIAogdm9pZCBPYmpjQ29udGFpbmVyQ29u
dmVydG9yOjphZGQoT2JqY0NvbnRhaW5lckNvbnZlcnRvcjo6VGFzayB0YXNrKQogewotICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhtX2NvbnRleHQuSlNHbG9iYWxDb250ZXh0UmVmKTsK
LSAgICBtX2pzVmFsdWVzLmFwcGVuZChKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+KGV4ZWMtPnZt
KCksIHRvSlNGb3JHQyhleGVjLCB0YXNrLmpzKSkpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHRvSlMobV9jb250ZXh0LkpTR2xvYmFsQ29udGV4dFJlZik7CisgICAg
bV9qc1ZhbHVlcy5hcHBlbmQoSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPihnbG9iYWxPYmplY3Qt
PnZtKCksIHRvSlNGb3JHQyhnbG9iYWxPYmplY3QsIHRhc2suanMpKSk7CiAgICAgbV9vYmplY3RN
YXAuYWRkKHRhc2sub2JqYywgdGFzay5qcyk7CiAgICAgaWYgKHRhc2sudHlwZSAhPSBDb250YWlu
ZXJOb25lKQogICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZCh0YXNrKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCmluZGV4IDNhMTlmMzgyMmZjNmQ1ZjM2MGRhYTRkZTBj
ZmIyMjg0OGQxZGUyZTUuLjRjY2E1M2U0MmMwMjU4Nzk4YjQ4YmU5NGQzYzk2NjU5MWQxMGE5ODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcApAQCAtNjEsMTAgKzYx
LDEwIEBAIDo6SlNUeXBlIEpTVmFsdWVHZXRUeXBlKEpTQ29udGV4dFJlZiBjdHgsIEpTVmFsdWVS
ZWYgdmFsdWUpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4g
a0pTVHlwZVVuZGVmaW5lZDsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgp
OwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbE9i
amVjdCk7CiAKLSAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKKyAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogCiAgICAgaWYgKGpz
VmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIGtKU1R5cGVVbmRlZmluZWQ7CkBA
IC04OCwxMCArODgsMTAgQEAgYm9vbCBKU1ZhbHVlSXNVbmRlZmluZWQoSlNDb250ZXh0UmVmIGN0
eCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgp
OwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbE9i
amVjdCk7CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCB2YWx1ZSkuaXNVbmRlZmluZWQoKTsKKyAg
ICByZXR1cm4gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlKS5pc1VuZGVmaW5lZCgpOwogfQogCiBi
b29sIEpTVmFsdWVJc051bGwoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSkKQEAg
LTEwMCwxMCArMTAwLDEwIEBAIGJvb2wgSlNWYWx1ZUlzTnVsbChKU0NvbnRleHRSZWYgY3R4LCBK
U1ZhbHVlUmVmIHZhbHVlKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gdG9KUyhjdHgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0
KTsKIAotICAgIHJldHVybiB0b0pTKGV4ZWMsIHZhbHVlKS5pc051bGwoKTsKKyAgICByZXR1cm4g
dG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlKS5pc051bGwoKTsKIH0KIAogYm9vbCBKU1ZhbHVlSXNC
b29sZWFuKEpTQ29udGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUpCkBAIC0xMTIsMTAgKzEx
MiwxMCBAQCBib29sIEpTVmFsdWVJc0Jvb2xlYW4oSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJl
ZiB2YWx1ZSkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHRvSlMoY3R4KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbE9iamVjdCk7CiAKLSAg
ICByZXR1cm4gdG9KUyhleGVjLCB2YWx1ZSkuaXNCb29sZWFuKCk7CisgICAgcmV0dXJuIHRvSlMo
Z2xvYmFsT2JqZWN0LCB2YWx1ZSkuaXNCb29sZWFuKCk7CiB9CiAKIGJvb2wgSlNWYWx1ZUlzTnVt
YmVyKEpTQ29udGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUpCkBAIC0xMjQsMTAgKzEyNCwx
MCBAQCBib29sIEpTVmFsdWVJc051bWJlcihKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZh
bHVlKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
UyhjdHgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0KTsKIAotICAgIHJl
dHVybiB0b0pTKGV4ZWMsIHZhbHVlKS5pc051bWJlcigpOworICAgIHJldHVybiB0b0pTKGdsb2Jh
bE9iamVjdCwgdmFsdWUpLmlzTnVtYmVyKCk7CiB9CiAKIGJvb2wgSlNWYWx1ZUlzU3RyaW5nKEpT
Q29udGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUpCkBAIC0xMzYsMTAgKzEzNiwxMCBAQCBi
b29sIEpTVmFsdWVJc1N0cmluZyhKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlKQog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2tlcihleGVjKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0KTsKIAotICAgIHJldHVybiB0
b0pTKGV4ZWMsIHZhbHVlKS5pc1N0cmluZygpOworICAgIHJldHVybiB0b0pTKGdsb2JhbE9iamVj
dCwgdmFsdWUpLmlzU3RyaW5nKCk7CiB9CiAKIGJvb2wgSlNWYWx1ZUlzT2JqZWN0KEpTQ29udGV4
dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUpCkBAIC0xNDgsMTAgKzE0OCwxMCBAQCBib29sIEpT
VmFsdWVJc09iamVjdChKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlKQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihl
eGVjKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0KTsKIAotICAgIHJldHVybiB0b0pTKGV4
ZWMsIHZhbHVlKS5pc09iamVjdCgpOworICAgIHJldHVybiB0b0pTKGdsb2JhbE9iamVjdCwgdmFs
dWUpLmlzT2JqZWN0KCk7CiB9CiAKIGJvb2wgSlNWYWx1ZUlzU3ltYm9sKEpTQ29udGV4dFJlZiBj
dHgsIEpTVmFsdWVSZWYgdmFsdWUpCkBAIC0xNjAsMTAgKzE2MCwxMCBAQCBib29sIEpTVmFsdWVJ
c1N5bWJvbChKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlKQogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBFeGVj
U3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0KTsKIAotICAgIHJldHVybiB0b0pTKGV4ZWMsIHZh
bHVlKS5pc1N5bWJvbCgpOworICAgIHJldHVybiB0b0pTKGdsb2JhbE9iamVjdCwgdmFsdWUpLmlz
U3ltYm9sKCk7CiB9CiAKIGJvb2wgSlNWYWx1ZUlzQXJyYXkoSlNDb250ZXh0UmVmIGN0eCwgSlNW
YWx1ZVJlZiB2YWx1ZSkKQEAgLTE3MiwxMSArMTcyLDExIEBAIGJvb2wgSlNWYWx1ZUlzQXJyYXko
SlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBl
eGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
UyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKGdsb2JhbE9iamVjdCk7CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCB2YWx1ZSku
aW5oZXJpdHM8SlNBcnJheT4odm0pOworICAgIHJldHVybiB0b0pTKGdsb2JhbE9iamVjdCwgdmFs
dWUpLmluaGVyaXRzPEpTQXJyYXk+KHZtKTsKIH0KIAogYm9vbCBKU1ZhbHVlSXNEYXRlKEpTQ29u
dGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUpCkBAIC0xODUsMTEgKzE4NSwxMSBAQCBib29s
IEpTVmFsdWVJc0RhdGUoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSkKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbE9iamVjdCk7CiAKLSAgICByZXR1cm4gdG9K
UyhleGVjLCB2YWx1ZSkuaW5oZXJpdHM8RGF0ZUluc3RhbmNlPih2bSk7CisgICAgcmV0dXJuIHRv
SlMoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkuaW5oZXJpdHM8RGF0ZUluc3RhbmNlPih2bSk7CiB9CiAK
IGJvb2wgSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVm
IHZhbHVlLCBKU0NsYXNzUmVmIGpzQ2xhc3MpCkBAIC0xOTgsMTEgKzE5OCwxMSBAQCBib29sIEpT
VmFsdWVJc09iamVjdE9mQ2xhc3MoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSwg
SlNDbGFzc1JlZiBqc0NsYQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2Jq
ZWN0KTsKIAotICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOworICAgIEpT
VmFsdWUganNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgCiAgICAgaWYg
KEpTT2JqZWN0KiBvID0ganNWYWx1ZS5nZXRPYmplY3QoKSkgewogICAgICAgICBpZiAoby0+aW5o
ZXJpdHM8SlNQcm94eT4odm0pKQpAQCAtMjI2LDE2ICsyMjYsMTYgQEAgYm9vbCBKU1ZhbHVlSXNF
cXVhbChKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIGEsIEpTVmFsdWVSZWYgYiwgSlNWYWx1
ZVJlZiogZXgKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMo
Y3R4KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2tlcih2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwog
Ci0gICAgSlNWYWx1ZSBqc0EgPSB0b0pTKGV4ZWMsIGEpOwotICAgIEpTVmFsdWUganNCID0gdG9K
UyhleGVjLCBiKTsKKyAgICBKU1ZhbHVlIGpzQSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBhKTsKKyAg
ICBKU1ZhbHVlIGpzQiA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBiKTsKIAotICAgIGJvb2wgcmVzdWx0
ID0gSlNWYWx1ZTo6ZXF1YWwoZXhlYywganNBLCBqc0IpOyAvLyBmYWxzZSBpZiBhbiBleGNlcHRp
b24gaXMgdGhyb3duCi0gICAgaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGV4ZWMsIGV4
Y2VwdGlvbik7CisgICAgYm9vbCByZXN1bHQgPSBKU1ZhbHVlOjplcXVhbChnbG9iYWxPYmplY3Qs
IGpzQSwganNCKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93bgorICAgIGhhbmRs
ZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI0NiwxMyArMjQ2LDEzIEBAIGJvb2wgSlNWYWx1
ZUlzU3RyaWN0RXF1YWwoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiBhLCBKU1ZhbHVlUmVm
IGIpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKGV4ZWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
KGN0eCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxPYmplY3QpOwogCi0gICAgSlNW
YWx1ZSBqc0EgPSB0b0pTKGV4ZWMsIGEpOwotICAgIEpTVmFsdWUganNCID0gdG9KUyhleGVjLCBi
KTsKKyAgICBKU1ZhbHVlIGpzQSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBhKTsKKyAgICBKU1ZhbHVl
IGpzQiA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBiKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjpzdHJp
Y3RFcXVhbChleGVjLCBqc0EsIGpzQik7CisgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFs
KGdsb2JhbE9iamVjdCwganNBLCBqc0IpOwogfQogCiBib29sIEpTVmFsdWVJc0luc3RhbmNlT2ZD
b25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU09iamVjdFJl
ZiBjb25zdHJ1Y3RvciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtMjYxLDE4ICsyNjEsMTgg
QEAgYm9vbCBKU1ZhbHVlSXNJbnN0YW5jZU9mQ29uc3RydWN0b3IoSlNDb250ZXh0UmVmIGN0eCwg
SlNWYWx1ZVJlZiB2YWx1ZSwgSlNPYmplY3QKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
UyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1
ZSk7CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QsIHZhbHVlKTsKIAog
ICAgIEpTT2JqZWN0KiBqc0NvbnN0cnVjdG9yID0gdG9KUyhjb25zdHJ1Y3Rvcik7CiAgICAgaWYg
KCFqc0NvbnN0cnVjdG9yLT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmltcGxlbWVudHNIYXNJ
bnN0YW5jZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYm9vbCByZXN1bHQgPSBqc0Nv
bnN0cnVjdG9yLT5oYXNJbnN0YW5jZShleGVjLCBqc1ZhbHVlKTsgLy8gZmFsc2UgaWYgYW4gZXhj
ZXB0aW9uIGlzIHRocm93bgotICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBleGVj
LCBleGNlcHRpb24pOworICAgIGJvb2wgcmVzdWx0ID0ganNDb25zdHJ1Y3Rvci0+aGFzSW5zdGFu
Y2UoZ2xvYmFsT2JqZWN0LCBqc1ZhbHVlKTsgLy8gZmFsc2UgaWYgYW4gZXhjZXB0aW9uIGlzIHRo
cm93bgorICAgIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4
Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjgyLDEwICsyODIsMTAgQEAg
SlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChKU0NvbnRleHRSZWYgY3R4KQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMp
OworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2tlcihnbG9iYWxPYmplY3QpOwogCi0gICAgcmV0dXJuIHRvUmVmKGV4ZWMs
IGpzVW5kZWZpbmVkKCkpOworICAgIHJldHVybiB0b1JlZihnbG9iYWxPYmplY3QsIGpzVW5kZWZp
bmVkKCkpOwogfQogCiBKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlTnVsbChKU0NvbnRleHRSZWYgY3R4
KQpAQCAtMjk0LDEwICsyOTQsMTAgQEAgSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZU51bGwoSlNDb250
ZXh0UmVmIGN0eCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dG9KUyhjdHgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0KTsKIAotICAg
IHJldHVybiB0b1JlZihleGVjLCBqc051bGwoKSk7CisgICAgcmV0dXJuIHRvUmVmKGdsb2JhbE9i
amVjdCwganNOdWxsKCkpOwogfQogCiBKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlQm9vbGVhbihKU0Nv
bnRleHRSZWYgY3R4LCBib29sIHZhbHVlKQpAQCAtMzA2LDEwICszMDYsMTAgQEAgSlNWYWx1ZVJl
ZiBKU1ZhbHVlTWFrZUJvb2xlYW4oSlNDb250ZXh0UmVmIGN0eCwgYm9vbCB2YWx1ZSkKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVj
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0KTsKIAotICAgIHJldHVybiB0b1JlZihleGVj
LCBqc0Jvb2xlYW4odmFsdWUpKTsKKyAgICByZXR1cm4gdG9SZWYoZ2xvYmFsT2JqZWN0LCBqc0Jv
b2xlYW4odmFsdWUpKTsKIH0KIAogSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZU51bWJlcihKU0NvbnRl
eHRSZWYgY3R4LCBkb3VibGUgdmFsdWUpCkBAIC0zMTgsMTAgKzMxOCwxMCBAQCBKU1ZhbHVlUmVm
IEpTVmFsdWVNYWtlTnVtYmVyKEpTQ29udGV4dFJlZiBjdHgsIGRvdWJsZSB2YWx1ZSkKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVj
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0KTsKIAotICAgIHJldHVybiB0b1JlZihleGVj
LCBqc051bWJlcihwdXJpZnlOYU4odmFsdWUpKSk7CisgICAgcmV0dXJuIHRvUmVmKGdsb2JhbE9i
amVjdCwganNOdW1iZXIocHVyaWZ5TmFOKHZhbHVlKSkpOwogfQogCiBKU1ZhbHVlUmVmIEpTVmFs
dWVNYWtlU3ltYm9sKEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIGRlc2NyaXB0aW9uKQpA
QCAtMzMwLDEzICszMzAsMTMgQEAgSlNWYWx1ZVJlZiBKU1ZhbHVlTWFrZVN5bWJvbChKU0NvbnRl
eHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBkZXNjcmlwdGlvbikKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIoZ2xvYmFsT2JqZWN0KTsKIAogICAgIGlmICghZGVzY3JpcHRpb24pCi0gICAg
ICAgIHJldHVybiB0b1JlZihleGVjLCBTeW1ib2w6OmNyZWF0ZSh2bSkpOwotICAgIHJldHVybiB0
b1JlZihleGVjLCBTeW1ib2w6OmNyZWF0ZVdpdGhEZXNjcmlwdGlvbih2bSwgZGVzY3JpcHRpb24t
PnN0cmluZygpKSk7CisgICAgICAgIHJldHVybiB0b1JlZihnbG9iYWxPYmplY3QsIFN5bWJvbDo6
Y3JlYXRlKHZtKSk7CisgICAgcmV0dXJuIHRvUmVmKGdsb2JhbE9iamVjdCwgU3ltYm9sOjpjcmVh
dGVXaXRoRGVzY3JpcHRpb24odm0sIGRlc2NyaXB0aW9uLT5zdHJpbmcoKSkpOwogfQogCiBKU1Zh
bHVlUmVmIEpTVmFsdWVNYWtlU3RyaW5nKEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHN0
cmluZykKQEAgLTM0NSwxMSArMzQ1LDExIEBAIEpTVmFsdWVSZWYgSlNWYWx1ZU1ha2VTdHJpbmco
SlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc3RyaW5nKQogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCi0gICAgcmV0dXJuIHRvUmVm
KGV4ZWMsIGpzU3RyaW5nKHZtLCBzdHJpbmcgPyBzdHJpbmctPnN0cmluZygpIDogU3RyaW5nKCkp
KTsKKyAgICByZXR1cm4gdG9SZWYoZ2xvYmFsT2JqZWN0LCBqc1N0cmluZyh2bSwgc3RyaW5nID8g
c3RyaW5nLT5zdHJpbmcoKSA6IFN0cmluZygpKSk7CiB9CiAKIEpTVmFsdWVSZWYgSlNWYWx1ZU1h
a2VGcm9tSlNPTlN0cmluZyhKU0NvbnRleHRSZWYgY3R4LCBKU1N0cmluZ1JlZiBzdHJpbmcpCkBA
IC0zNTgsMTYgKzM1OCwxNiBAQCBKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlRnJvbUpTT05TdHJpbmco
SlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc3RyaW5nKQogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2tlcihnbG9iYWxPYmplY3QpOwogICAgIFN0cmluZyBzdHIgPSBzdHJpbmctPnN0cmluZygpOwog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCB8fCBz
dHIuaXM4Qml0KCkpIHsKLSAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4gcGFyc2VyKGV4ZWMs
IHN0ci5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgsIFN0cmljdEpTT04pOwotICAgICAgICByZXR1cm4g
dG9SZWYoZXhlYywgcGFyc2VyLnRyeUxpdGVyYWxQYXJzZSgpKTsKKyAgICAgICAgTGl0ZXJhbFBh
cnNlcjxMQ2hhcj4gcGFyc2VyKGdsb2JhbE9iamVjdCwgc3RyLmNoYXJhY3RlcnM4KCksIGxlbmd0
aCwgU3RyaWN0SlNPTik7CisgICAgICAgIHJldHVybiB0b1JlZihnbG9iYWxPYmplY3QsIHBhcnNl
ci50cnlMaXRlcmFsUGFyc2UoKSk7CiAgICAgfQotICAgIExpdGVyYWxQYXJzZXI8VUNoYXI+IHBh
cnNlcihleGVjLCBzdHIuY2hhcmFjdGVyczE2KCksIGxlbmd0aCwgU3RyaWN0SlNPTik7Ci0gICAg
cmV0dXJuIHRvUmVmKGV4ZWMsIHBhcnNlci50cnlMaXRlcmFsUGFyc2UoKSk7CisgICAgTGl0ZXJh
bFBhcnNlcjxVQ2hhcj4gcGFyc2VyKGdsb2JhbE9iamVjdCwgc3RyLmNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgsIFN0cmljdEpTT04pOworICAgIHJldHVybiB0b1JlZihnbG9iYWxPYmplY3QsIHBhcnNl
ci50cnlMaXRlcmFsUGFyc2UoKSk7CiB9CiAKIEpTU3RyaW5nUmVmIEpTVmFsdWVDcmVhdGVKU09O
U3RyaW5nKEpTQ29udGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgYXBpVmFsdWUsIHVuc2lnbmVkIGlu
ZGVudCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpAQCAtMzc2LDE2ICszNzYsMTYgQEAgSlNTdHJp
bmdSZWYgSlNWYWx1ZUNyZWF0ZUpTT05TdHJpbmcoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJl
ZiBhcGlWYWx1ZSwgdW5zaWcKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlID0gdG9KUyhleGVjLCBhcGlWYWx1ZSk7Ci0gICAgU3Ry
aW5nIHJlc3VsdCA9IEpTT05TdHJpbmdpZnkoZXhlYywgdmFsdWUsIGluZGVudCk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBhcGlWYWx1ZSk7CisgICAgU3RyaW5nIHJl
c3VsdCA9IEpTT05TdHJpbmdpZnkoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgaW5kZW50KTsKICAgICBp
ZiAoZXhjZXB0aW9uKQogICAgICAgICAqZXhjZXB0aW9uID0gMDsKLSAgICBpZiAoaGFuZGxlRXhj
ZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGV4ZWMsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVz
OjpEaWRUaHJvdykKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGdsb2Jh
bE9iamVjdCwgZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShyZXN1bHQp
LmxlYWtSZWYoKTsKIH0KQEAgLTM5NiwxMSArMzk2LDExIEBAIGJvb2wgSlNWYWx1ZVRvQm9vbGVh
bihKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlKQogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIoZ2xvYmFsT2JqZWN0KTsKIAotICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhl
YywgdmFsdWUpOwotICAgIHJldHVybiBqc1ZhbHVlLnRvQm9vbGVhbihleGVjKTsKKyAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIHJldHVybiBqc1Zh
bHVlLnRvQm9vbGVhbihnbG9iYWxPYmplY3QpOwogfQogCiBkb3VibGUgSlNWYWx1ZVRvTnVtYmVy
KEpTQ29udGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKQEAgLTQwOSwxNSArNDA5LDE1IEBAIGRvdWJsZSBKU1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0
UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gUE5hTjsKICAgICB9Ci0gICAg
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSBqc1Zh
bHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhnbG9i
YWxPYmplY3QsIHZhbHVlKTsKIAotICAgIGRvdWJsZSBudW1iZXIgPSBqc1ZhbHVlLnRvTnVtYmVy
KGV4ZWMpOwotICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZXhlYywgZXhj
ZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KQorICAgIGRvdWJsZSBudW1iZXIg
PSBqc1ZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CisgICAgaWYgKGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3Rh
dHVzOjpEaWRUaHJvdykKICAgICAgICAgbnVtYmVyID0gUE5hTjsKICAgICByZXR1cm4gbnVtYmVy
OwogfQpAQCAtNDI4LDE1ICs0MjgsMTUgQEAgSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3RyaW5nQ29w
eShKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgIEpTVmFsdWUganNWYWx1
ZSA9IHRvSlMoZXhlYywgdmFsdWUpOworICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZ2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CiAgICAgCi0gICAgYXV0byBzdHJpbmdSZWYoT3BhcXVlSlNTdHJpbmc6
OnRyeUNyZWF0ZShqc1ZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpKSk7Ci0gICAgaWYgKGhhbmRsZUV4
Y2VwdGlvbklmTmVlZGVkKHNjb3BlLCBleGVjLCBleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1
czo6RGlkVGhyb3cpCisgICAgYXV0byBzdHJpbmdSZWYoT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0
ZShqc1ZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCkpKTsKKyAgICBpZiAoaGFuZGxlRXhj
ZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKSA9PSBFeGNlcHRp
b25TdGF0dXM6OkRpZFRocm93KQogICAgICAgICBzdHJpbmdSZWYgPSBudWxscHRyOwogICAgIHJl
dHVybiBzdHJpbmdSZWYubGVha1JlZigpOwogfQpAQCAtNDQ3LDE1ICs0NDcsMTUgQEAgSlNPYmpl
Y3RSZWYgSlNWYWx1ZVRvT2JqZWN0KEpTQ29udGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUs
IEpTVmFsdWVSZWYqIGV4Y2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dG9KUyhjdHgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CiAKLSAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKKyAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIAotICAgIEpTT2Jq
ZWN0UmVmIG9iamVjdFJlZiA9IHRvUmVmKGpzVmFsdWUudG9PYmplY3QoZXhlYykpOwotICAgIGlm
IChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZXhlYywgZXhjZXB0aW9uKSA9PSBFeGNl
cHRpb25TdGF0dXM6OkRpZFRocm93KQorICAgIEpTT2JqZWN0UmVmIG9iamVjdFJlZiA9IHRvUmVm
KGpzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KSk7CisgICAgaWYgKGhhbmRsZUV4Y2VwdGlv
bklmTmVlZGVkKHNjb3BlLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3Rh
dHVzOjpEaWRUaHJvdykKICAgICAgICAgb2JqZWN0UmVmID0gMDsKICAgICByZXR1cm4gb2JqZWN0
UmVmOwogfQpAQCAtNDY2LDE4ICs0NjYsMTggQEAgdm9pZCBKU1ZhbHVlUHJvdGVjdChKU0NvbnRl
eHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlKQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0
eCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFs
T2JqZWN0KTsKIAotICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlNGb3JHQyhleGVjLCB2YWx1ZSk7
CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KU0ZvckdDKGdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIGdjUHJvdGVjdChqc1ZhbHVlKTsKIH0KIAogdm9pZCBKU1ZhbHVlVW5wcm90ZWN0KEpTQ29u
dGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0g
dG9KUyhjdHgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2Vy
KGdsb2JhbE9iamVjdCk7CiAKLSAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTRm9yR0MoZXhlYywg
dmFsdWUpOworICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlNGb3JHQyhnbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBnY1VucHJvdGVjdChqc1ZhbHVlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwCmluZGV4IGM2
YjM5NmQ3YzI4ZGQzZTIxNmZmYWMzNWZkODhmYzAwNTM5M2FjZGEuLmQyYzUzN2E4YTAxNDFiMjJk
ZDM0YmY4OTg0YTM5YzYzMGU5ZWJmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcApAQCAtNDIsMTEgKzQyLDEx
IEBAIGV4dGVybiAiQyIgewogCiBKU1dlYWtPYmplY3RNYXBSZWYgSlNXZWFrT2JqZWN0TWFwQ3Jl
YXRlKEpTQ29udGV4dFJlZiBjb250ZXh0LCB2b2lkKiBwcml2YXRlRGF0YSwgSlNXZWFrTWFwRGVz
dHJveWVkQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhj
b250ZXh0KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBhdXRvIG1hcCA9IE9wYXF1
ZUpTV2Vha09iamVjdE1hcDo6Y3JlYXRlKHZtLCBwcml2YXRlRGF0YSwgY2FsbGJhY2spOwotICAg
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnaXN0ZXJXZWFrTWFwKG1hcC5wdHIoKSk7
CisgICAgZ2xvYmFsT2JqZWN0LT5yZWdpc3RlcldlYWtNYXAobWFwLnB0cigpKTsKICAgICByZXR1
cm4gbWFwLnB0cigpOwogfQogCkBAIC01Niw4ICs1Niw4IEBAIHZvaWQgSlNXZWFrT2JqZWN0TWFw
U2V0KEpTQ29udGV4dFJlZiBjdHgsIEpTV2Vha09iamVjdE1hcFJlZiBtYXAsIHZvaWQqIGtleSwg
SlNPCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGN0eCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0p
OwogICAgIEpTT2JqZWN0KiBvYmogPSB0b0pTKG9iamVjdCk7CiAgICAgaWYgKCFvYmopCkBAIC03
NCw4ICs3NCw4IEBAIEpTT2JqZWN0UmVmIEpTV2Vha09iamVjdE1hcEdldChKU0NvbnRleHRSZWYg
Y3R4LCBKU1dlYWtPYmplY3RNYXBSZWYgbWFwLCB2b2lkKiBrCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjdHgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIHRvUmVmKGpzQ2FzdDxKU09iamVjdCo+KG1h
cC0+bWFwKCkuZ2V0KGtleSkpKTsKIH0KIApAQCAtODUsOCArODUsOCBAQCB2b2lkIEpTV2Vha09i
amVjdE1hcFJlbW92ZShKU0NvbnRleHRSZWYgY3R4LCBKU1dlYWtPYmplY3RNYXBSZWYgbWFwLCB2
b2lkKiBrZXkpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKGV4ZWMpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
KGN0eCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxPYmplY3QpOwogICAgIG1hcC0+
bWFwKCkucmVtb3ZlKGtleSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNXcmFwcGVyTWFwLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBw
ZXJNYXAubW0KaW5kZXggYTI3YmMxNWQ0MmVmNjEwMDRhM2IzYjBmMGQzM2E5MDBiZWMyNjAwZS4u
Y2YwYTQyODdjNjdmZTU5NGViOGQwMzBlOGQ3OTJkOTFjMDllNDdlYSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KQEAgLTEwOCwyNSArMTA4LDI1IEBAIGRvbmU6
CiAKIHN0YXRpYyBib29sIGNvbnN0cnVjdG9ySGFzSW5zdGFuY2UoSlNDb250ZXh0UmVmIGN0eCwg
SlNPYmplY3RSZWYgY29uc3RydWN0b3JSZWYsIEpTVmFsdWVSZWYgcG9zc2libGVJbnN0YW5jZSwg
SlNWYWx1ZVJlZiopCiB7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0g
ICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHRvSlMoY3R4KTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgSlNDOjpKU09i
amVjdCogY29uc3RydWN0b3IgPSB0b0pTKGNvbnN0cnVjdG9yUmVmKTsKLSAgICBKU0M6OkpTVmFs
dWUgaW5zdGFuY2UgPSB0b0pTKGV4ZWMsIHBvc3NpYmxlSW5zdGFuY2UpOwotICAgIHJldHVybiBK
U0M6OkpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGNvbnN0cnVj
dG9yLT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKSk7CisgICAgSlNDOjpK
U1ZhbHVlIGluc3RhbmNlID0gdG9KUyhnbG9iYWxPYmplY3QsIHBvc3NpYmxlSW5zdGFuY2UpOwor
ICAgIHJldHVybiBKU0M6OkpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoZ2xvYmFsT2JqZWN0
LCBpbnN0YW5jZSwgY29uc3RydWN0b3ItPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSkpOwogfQogCiBzdGF0aWMgSlNDOjpKU09iamVjdCogbWFrZVdyYXBwZXIo
SlNDb250ZXh0UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBpZCB3cmFwcGVkT2JqZWN0KQog
ewotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTQzo6Vk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0
b0pTKGN0eCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKIAogICAgIEFTU0VSVChqc0NsYXNzKTsKLSAgICBK
U0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3Q+KiBvYmplY3QgPSBK
U0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVhdGUoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm9iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlKCksIGpzQ2xhc3MsIDApOworICAgIEpTQzo6
SlNDYWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdD4qIG9iamVjdCA9IEpTQzo6
SlNDYWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZShnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+b2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFz
cywgMCk7CiAgICAgb2JqZWN0LT5zZXRXcmFwcGVkT2JqZWN0KChfX2JyaWRnZSB2b2lkKil3cmFw
cGVkT2JqZWN0KTsKLSAgICBpZiAoSlNDOjpKU09iamVjdCogcHJvdG90eXBlID0ganNDbGFzcy0+
cHJvdG90eXBlKGV4ZWMpKQorICAgIGlmIChKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0Ns
YXNzLT5wcm90b3R5cGUoZ2xvYmFsT2JqZWN0KSkKICAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5
cGVEaXJlY3Qodm0sIHByb3RvdHlwZSk7CiAKICAgICByZXR1cm4gb2JqZWN0OwpAQCAtMTgzLDI2
ICsxODMsMjYgQEAgaW5saW5lIHZvaWQgcHV0Tm9uRW51bWVyYWJsZShKU0NvbnRleHQgKmNvbnRl
eHQsIEpTVmFsdWUgKmJhc2UsIE5TU3RyaW5nICpwcm9wZXIKIHsKICAgICBpZiAoIVtiYXNlIGlz
T2JqZWN0XSkKICAgICAgICAgcmV0dXJuOwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9K
UyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhbY29u
dGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgIEpTQzo6SlNPYmplY3QqIGJhc2VP
YmplY3QgPSBKU0M6OmFzT2JqZWN0KHRvSlMoZXhlYywgW2Jhc2UgSlNWYWx1ZVJlZl0pKTsKKyAg
ICBKU0M6OkpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gSlNDOjphc09iamVjdCh0b0pTKGdsb2JhbE9i
amVjdCwgW2Jhc2UgSlNWYWx1ZVJlZl0pKTsKICAgICBhdXRvIG5hbWUgPSBPcGFxdWVKU1N0cmlu
Zzo6dHJ5Q3JlYXRlKHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1
cm47CiAKICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgIGRlc2Ny
aXB0b3Iuc2V0VmFsdWUodG9KUyhleGVjLCBbdmFsdWUgSlNWYWx1ZVJlZl0pKTsKKyAgICBkZXNj
cmlwdG9yLnNldFZhbHVlKHRvSlMoZ2xvYmFsT2JqZWN0LCBbdmFsdWUgSlNWYWx1ZVJlZl0pKTsK
ICAgICBkZXNjcmlwdG9yLnNldEVudW1lcmFibGUoZmFsc2UpOwogICAgIGRlc2NyaXB0b3Iuc2V0
Q29uZmlndXJhYmxlKHRydWUpOwogICAgIGRlc2NyaXB0b3Iuc2V0V3JpdGFibGUodHJ1ZSk7CiAg
ICAgYm9vbCBzaG91bGRUaHJvdyA9IGZhbHNlOwotICAgIGJhc2VPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+ZGVmaW5lT3duUHJvcGVydHkoYmFzZU9iamVjdCwgZXhlYywgbmFtZS0+aWRlbnRpZmll
cigmdm0pLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CisgICAgYmFzZU9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShiYXNlT2JqZWN0LCBnbG9iYWxPYmplY3QsIG5h
bWUtPmlkZW50aWZpZXIoJnZtKSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogCiAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChz
Y29wZSwgZXhlYywgJmV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKKyAg
ICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGdsb2JhbE9iamVjdCwgJmV4Y2Vw
dGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykKICAgICAgICAgW2NvbnRleHQgdmFs
dWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiB9CiAKQEAgLTI2OCw3ICsyNjgsNyBA
QCBzdGF0aWMgdm9pZCBjb3B5TWV0aG9kc1RvT2JqZWN0KEpTQ29udGV4dCAqY29udGV4dCwgQ2xh
c3Mgb2JqY0NsYXNzLCBQcm90b2NvbCAqcAogICAgICAgICAgICAgbmFtZSA9IHJlbmFtZU1hcFtu
YW1lXTsKICAgICAgICAgICAgIGlmICghbmFtZSkKICAgICAgICAgICAgICAgICBuYW1lID0gc2Vs
ZWN0b3JUb1Byb3BlcnR5TmFtZShuYW1lQ1N0cik7Ci0gICAgICAgICAgICBhdXRvIGV4ZWMgPSB0
b0pTKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOworICAgICAgICAgICAgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRS
ZWZdKTsKICAgICAgICAgICAgIEpTVmFsdWUgKmV4aXN0aW5nTWV0aG9kID0gb2JqZWN0W25hbWVd
OwogICAgICAgICAgICAgLy8gT2JqQ0NhbGxiYWNrRnVuY3Rpb24gZG9lcyBhIGR5bmFtaWMgbG9v
a3VwIGZvciB0aGUKICAgICAgICAgICAgIC8vIHNlbGVjdG9yIGJlZm9yZSBjYWxsaW5nIHRoZSBt
ZXRob2QuIEluIG9yZGVyIHRvIHNhdmUKQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCBj
b3B5TWV0aG9kc1RvT2JqZWN0KEpTQ29udGV4dCAqY29udGV4dCwgQ2xhc3Mgb2JqY0NsYXNzLCBQ
cm90b2NvbCAqcAogICAgICAgICAgICAgLy8gdG8gb3ZlcnJpZGUgbm9ybWFsIGJ1aWx0aW5zIGUu
Zy4gInRvU3RyaW5nIiB3ZSBjaGVjayBpZgogICAgICAgICAgICAgLy8gdGhlIGV4aXN0aW5nIHZh
bHVlIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgYW4gT2JqQwogICAgICAgICAgICAgLy8gY2Fs
bGJhY2sgYWxyZWFkeS4KLSAgICAgICAgICAgIGlmIChbZXhpc3RpbmdNZXRob2QgaXNPYmplY3Rd
ICYmIEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uKj4oZXhlYy0+
dm0oKSwgdG9KUyhleGVjLCBbZXhpc3RpbmdNZXRob2QgSlNWYWx1ZVJlZl0pKSkKKyAgICAgICAg
ICAgIGlmIChbZXhpc3RpbmdNZXRob2QgaXNPYmplY3RdICYmIEpTQzo6anNEeW5hbWljQ2FzdDxK
U0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uKj4oZ2xvYmFsT2JqZWN0LT52bSgpLCB0b0pTKGdsb2Jh
bE9iamVjdCwgW2V4aXN0aW5nTWV0aG9kIEpTVmFsdWVSZWZdKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgSlNPYmplY3RSZWYgbWV0aG9kID0gb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25Gb3JNZXRob2QoY29udGV4dCwgb2JqY0NsYXNzLCBwcm90b2NvbCwgaXNJbnN0YW5jZU1l
dGhvZCwgc2VsLCB0eXBlcyk7CiAgICAgICAgICAgICBpZiAobWV0aG9kKQpAQCAtNTQ3LDExICs1
NDcsMTEgQEAgLSAoSlNDOjpKU09iamVjdCopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0IGlu
Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAogCiAgICAgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IFtzZWxmIHN0cnVjdHVyZUluQ29udGV4dDpjb250ZXh0XTsKIAotICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKLSAgICBK
U0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gdG9KUyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOwogCi0gICAgYXV0byB3cmFwcGVyID0gSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNB
UElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgc3RydWN0dXJlLCBtX2NsYXNzUmVmLCAwKTsKKyAgICBhdXRvIHdyYXBwZXIgPSBKU0M6OkpT
Q2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3Q+OjpjcmVhdGUoZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIG1fY2xhc3NSZWYsIDApOwogICAgIHdyYXBwZXItPnNldFdyYXBwZWRP
YmplY3QoKF9fYnJpZGdlIHZvaWQqKW9iamVjdCk7CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CkBA
IC01ODAsMTAgKzU4MCw5IEBAIC0gKEpTQzo6U3RydWN0dXJlKilzdHJ1Y3R1cmVJbkNvbnRleHQ6
KEpTQ29udGV4dCAqKWNvbnRleHQKICAgICBpZiAoc3RydWN0dXJlKQogICAgICAgICByZXR1cm4g
c3RydWN0dXJlOwogCi0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKFtjb250ZXh0IEpT
R2xvYmFsQ29udGV4dFJlZl0pOwogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHRvSlNHbG9iYWxPYmplY3QoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CiAgICAg
SlNDOjpKU09iamVjdCogcHJvdG90eXBlID0gW3NlbGYgcHJvdG90eXBlSW5Db250ZXh0OmNvbnRl
eHRdOwotICAgIG1fc3RydWN0dXJlID0gSlNDOjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElX
cmFwcGVyT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlKTsKKyAgICBtX3N0cnVjdHVyZSA9IEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0M6
OkpTQVBJV3JhcHBlck9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlKTsKIAogICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNr
RnVuY3Rpb24ubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0
aW9uLm1tCmluZGV4IDczY2I0MjcwNDM4MTgzMWU4MTlkOWQ5NDNlYjllNTQ0MDMwOTZmOGEuLjI0
NzZlMjNlZjMwMjQ0MDM3Mjc3OWUyOTIyNjA5Zjg1ZmU2M2ZlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQpAQCAtNDU1LDcgKzQ1
NSw3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2FsbEFzRnVuY3Rp
b24oSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsCiAKICAgICBPYmpDQ2FsbGJhY2tGdW5jdGlv
biogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KHRvSlMoZnVu
Y3Rpb24pKTsKICAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwqIGltcGwgPSBjYWxsYmFjay0+
aW1wbCgpOwotICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhK
U0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYoY2FsbGJhY2stPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCkpXTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRl
eHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGNhbGxiYWNrLT5nbG9iYWxPYmpl
Y3QoKSldOwogCiAgICAgaWYgKGltcGwtPnR5cGUoKSA9PSBDYWxsYmFja0luaXRNZXRob2QpIHsK
ICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBbY29udGV4dCBKU0dsb2Jh
bENvbnRleHRSZWZdOwpAQCAtNDgxLDcgKzQ4MSw3IEBAIHN0YXRpYyBKU09iamVjdFJlZiBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkNhbGxBc0NvbnN0cnVjdG9yKEpTQ29udGV4dFJlZiBjYWxsZXJDb250
CiAKICAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxPYmpD
Q2FsbGJhY2tGdW5jdGlvbio+KHRvSlMoY29uc3RydWN0b3IpKTsKICAgICBPYmpDQ2FsbGJhY2tG
dW5jdGlvbkltcGwqIGltcGwgPSBjYWxsYmFjay0+aW1wbCgpOwotICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxS
ZWYodG9KUyhjYWxsZXJDb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkpXTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNH
bG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKHRvSlMoY2FsbGVyQ29udGV4dCkpXTsKIAogICAg
IENhbGxiYWNrRGF0YSBjYWxsYmFja0RhdGE7CiAgICAgSlNWYWx1ZVJlZiByZXN1bHQ7CkBAIC02
NTksMTIgKzY1OSwxMiBAQCBzdGF0aWMgSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25G
b3JJbnZvY2F0aW9uKEpTQ29udGV4dCAqY29udGV4dCwgTlNJbnZvYwogICAgICAgICArK2FyZ3Vt
ZW50Q291bnQ7CiAgICAgfQogCi0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKFtjb250
ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOwotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKFtjb250ZXh0IEpT
R2xvYmFsQ29udGV4dFJlZl0pOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgYXV0byBpbXBsID0gbWFr
ZVVuaXF1ZTxKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4oaW52b2NhdGlvbiwgdHlwZSwg
aW5zdGFuY2VDbGFzcywgV1RGTW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKHJlc3VsdCkpOwogICAg
IGNvbnN0IFN0cmluZyYgbmFtZSA9IGltcGwtPm5hbWUoKTsKLSAgICByZXR1cm4gdG9SZWYoSlND
OjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIG5hbWUsIFdURk1vdmUoaW1wbCkpKTsKKyAgICByZXR1cm4gdG9SZWYoSlNDOjpPYmpD
Q2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIG5hbWUsIFdURk1vdmUo
aW1wbCkpKTsKIH0KIAogSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JJbml0KEpT
Q29udGV4dCAqY29udGV4dCwgQ2xhc3MgY2xzLCBQcm90b2NvbCAqcHJvdG9jb2wsIFNFTCBzZWws
IGNvbnN0IGNoYXIqIHR5cGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ0NhbGxiYWNrRnVuY3Rpb24uY3BwCmluZGV4IGUyMjJhNDA1N2E3NjdjY2FmZGUw
M2RlYTE5MTkyNDYxNWJkMTJlZGIuLjdjNGQ1NDcwNjhlNDA1YzgyMWJmMzNkMWJkZDBkZjBlMjRm
ZDM3ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDYWxs
YmFja0Z1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlND
Q2FsbGJhY2tGdW5jdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgSlNDQ2FsbGJhY2tGdW5jdGlv
bjo6SlNDQ2FsbGJhY2tGdW5jdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBUeXBl
IHR5cGUKIEpTVmFsdWVSZWYgSlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y2FsbChKU0NvbnRleHRSZWYg
Y2FsbGVyQ29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHRvSlMoY2FsbGVyQ29udGV4dCkpOwotICAgIGF1
dG8gY29udGV4dCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZSh0b0dsb2JhbFJlZihnbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpKSk7CisgICAgYXV0byBjb250ZXh0ID0ganNjQ29udGV4dEdldE9y
Q3JlYXRlKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdCgpKSk7CiAgICAgYXV0byoganNDb250ZXh0
ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChjb250ZXh0LmdldCgpKTsKIAogICAgIGlmIChtX3R5
cGUgPT0gVHlwZTo6Q29uc3RydWN0b3IpIHsKQEAgLTE1MCw3ICsxNTAsNyBAQCBKU1ZhbHVlUmVm
IEpTQ0NhbGxiYWNrRnVuY3Rpb246OmNhbGwoSlNDb250ZXh0UmVmIGNhbGxlckNvbnRleHQsIEpT
T2JqZWN0UmVmIHRoaQogSlNPYmplY3RSZWYgSlNDQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0
KEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEpT
TG9ja0hvbGRlciBsb2NrZXIodG9KUyhjYWxsZXJDb250ZXh0KSk7Ci0gICAgYXV0byBjb250ZXh0
ID0ganNjQ29udGV4dEdldE9yQ3JlYXRlKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCkpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0KCkpKTsKICAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250
ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQuZ2V0KCkpOwogCiAgICAgaWYgKG1fcmV0dXJuVHlwZSA9
PSBHX1RZUEVfTk9ORSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ0NsYXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDbGFz
cy5jcHAKaW5kZXggNGMwNTRiZWFiOGRiYWFjMTdhOTFhYjljODZlOGQyNTg1OTAxM2ZlYS4uZDZl
MmRlOWQ2YjU0NDA1MTE3NWZhOWI0NWZmYjEyNTkwM2RkNjY5OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NsYXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDQ2xhc3MuY3BwCkBAIC0xMTAsMTAgKzExMCwxMCBAQCBjbGFz
cyBWVGFibGVFeGNlcHRpb25IYW5kbGVyIHsKIAogc3RhdGljIGJvb2wgaXNXcmFwcGVkT2JqZWN0
KEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQogewotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
anNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNPYmplY3QtPmdsb2JhbE9iamVjdCgpOwogICAgIGlm
IChqc09iamVjdC0+aXNHbG9iYWxPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGpzT2JqZWN0LT5p
bmhlcml0czxKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBwZXJHbG9iYWxPYmpl
Y3Q+PihleGVjLT52bSgpKTsKLSAgICByZXR1cm4ganNPYmplY3QtPmluaGVyaXRzPEpTQzo6SlND
YWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdD4+KGV4ZWMtPnZtKCkpOworICAg
ICAgICByZXR1cm4ganNPYmplY3QtPmluaGVyaXRzPEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0M6
OkpTQVBJV3JhcHBlckdsb2JhbE9iamVjdD4+KGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgcmV0
dXJuIGpzT2JqZWN0LT5pbmhlcml0czxKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdy
YXBwZXJPYmplY3Q+PihnbG9iYWxPYmplY3QtPnZtKCkpOwogfQogCiBzdGF0aWMgSlNDbGFzc1Jl
ZiB3cmFwcGVkT2JqZWN0Q2xhc3MoSlNDOjpKU09iamVjdCoganNPYmplY3QpCkBAIC0xMjgsMTMg
KzEyOCwxMiBAQCBzdGF0aWMgR1JlZlB0cjxKU0NDb250ZXh0PiBqc2NDb250ZXh0Rm9yT2JqZWN0
KEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQogewogICAgIEFTU0VSVChpc1dyYXBwZWRPYmplY3Qo
anNPYmplY3QpKTsKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc09i
amVjdC0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBpZiAoanNPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkp
IHsKICAgICAgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAgIGlm
IChhdXRvKiBnbG9iYWxTY29wZUV4dGVuc2lvbiA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhl
YyktPmdsb2JhbFNjb3BlRXh0ZW5zaW9uKCkpCi0gICAgICAgICAgICBleGVjID0gSlNDOjpKU1Nj
b3BlOjpvYmplY3RBdFNjb3BlKGdsb2JhbFNjb3BlRXh0ZW5zaW9uKS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgaWYgKGF1dG8qIGdsb2JhbFNjb3BlRXh0ZW5zaW9uID0g
dm0udm1FbnRyeUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpLT5nbG9iYWxTY29wZUV4dGVuc2lv
bigpKQorICAgICAgICAgICAgZ2xvYmFsT2JqZWN0ID0gSlNDOjpKU1Njb3BlOjpvYmplY3RBdFNj
b3BlKGdsb2JhbFNjb3BlRXh0ZW5zaW9uKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgfQotICAgIHJl
dHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9HbG9iYWxSZWYoZXhlYykpOworICAgIHJldHVy
biBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0KSk7CiB9CiAK
IHN0YXRpYyBKU1ZhbHVlUmVmIGdldFByb3BlcnR5KEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0
LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQpAQCAtNTU4LDEwICs1NTcsMTAgQEAgc3RhdGljIEdSZWZQdHI8SlNDVmFs
dWU+IGpzY0NsYXNzQ3JlYXRlQ29uc3RydWN0b3IoSlNDQ2xhc3MqIGpzY0NsYXNzLCBjb25zdCBj
aGEKICAgICBlbHNlCiAgICAgICAgIGNsb3N1cmUgPSBhZG9wdEdSZWYoZ19jY2xvc3VyZV9uZXco
Y2FsbGJhY2ssIHVzZXJEYXRhLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5PihyZWlu
dGVycHJldF9jYXN0PEdDYWxsYmFjaz4oZGVzdHJveU5vdGlmeSkpKSk7CiAgICAgSlNDQ2xhc3NQ
cml2YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKHByaXYtPmNvbnRleHQpOwotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKHByaXYtPmNvbnRleHQp
OworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7Ci0gICAgYXV0byogZnVuY3Rpb25PYmplY3QgPSBKU0M6OkpTQ0Nh
bGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBT
dHJpbmc6OmZyb21VVEY4KG5hbWUpLAorICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gSlNDOjpK
U0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgU3RyaW5nOjpmcm9t
VVRGOChuYW1lKSwKICAgICAgICAgSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpDb25z
dHJ1Y3RvciwganNjQ2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVyblR5cGUsIFdURk1vdmUo
cGFyYW1ldGVycykpOwogICAgIGF1dG8gY29udGV4dCA9IGpzY0NvbnRleHRHZXRPckNyZWF0ZShw
cml2LT5jb250ZXh0KTsKICAgICBhdXRvIGNvbnN0cnVjdG9yID0ganNjQ29udGV4dEdldE9yQ3Jl
YXRlVmFsdWUoY29udGV4dC5nZXQoKSwgdG9SZWYoZnVuY3Rpb25PYmplY3QpKTsKQEAgLTcwNywx
MCArNzA2LDEwIEBAIHN0YXRpYyB2b2lkIGpzY0NsYXNzQWRkTWV0aG9kKEpTQ0NsYXNzKiBqc2ND
bGFzcywgY29uc3QgY2hhciogbmFtZSwgR0NhbGxiYWNrIGNhCiB7CiAgICAgSlNDQ2xhc3NQcml2
YXRlKiBwcml2ID0ganNjQ2xhc3MtPnByaXY7CiAgICAgR1JlZlB0cjxHQ2xvc3VyZT4gY2xvc3Vy
ZSA9IGFkb3B0R1JlZihnX2NjbG9zdXJlX25ldyhjYWxsYmFjaywgdXNlckRhdGEsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Nsb3N1cmVOb3RpZnk+KHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNrPihkZXN0
cm95Tm90aWZ5KSkpKTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMocHJpdi0+Y29u
dGV4dCk7Ci0gICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMocHJpdi0+Y29udGV4dCk7CisgICAgSlNDOjpWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZt
KTsKLSAgICBhdXRvKiBmdW5jdGlvbk9iamVjdCA9IHRvUmVmKEpTQzo6SlNDQ2FsbGJhY2tGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIFN0cmluZzo6ZnJv
bVVURjgobmFtZSksCisgICAgYXV0byogZnVuY3Rpb25PYmplY3QgPSB0b1JlZihKU0M6OkpTQ0Nh
bGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBTdHJpbmc6OmZyb21VVEY4
KG5hbWUpLAogICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6Ok1ldGhvZCwg
anNjQ2xhc3MsIFdURk1vdmUoY2xvc3VyZSksIHJldHVyblR5cGUsIFdURk1vdmUocGFyYW1ldGVy
cykpKTsKICAgICBhdXRvIGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUocHJpdi0+Y29u
dGV4dCk7CiAgICAgYXV0byBtZXRob2QgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShjb250
ZXh0LmdldCgpLCBmdW5jdGlvbk9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL2dsaWIvSlNDQ29udGV4dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L2dsaWIvSlNDQ29udGV4dC5jcHAKaW5kZXggZGMzNDEzNmFlMjA4MzczMmFhOTUzMTE1YTI5ZmRj
MDU4OGQzZjhlNS4uODUzOTNmMmY2MmRiNTFmMDQxOTAzMzJlNDYxYjZjYzdkMTQxNzllZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NDb250ZXh0LmNwcApAQCAtODc5
LDkgKzg3OSw5IEBAIEpTQ1ZhbHVlKiBqc2NfY29udGV4dF9ldmFsdWF0ZV9pbl9vYmplY3QoSlND
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogY29kZSwKIAogICAgIEpTUmV0YWluUHRyPEpT
R2xvYmFsQ29udGV4dFJlZj4gb2JqZWN0Q29udGV4dChBZG9wdCwKICAgICAgICAgaW5zdGFuY2Ug
PyBqc2NDbGFzc0NyZWF0ZUNvbnRleHRXaXRoSlNXcmFwcGVyKG9iamVjdENsYXNzLCBjb250ZXh0
LCBpbnN0YW5jZSkgOiBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKGpzY1ZpcnR1YWxNYWNo
aW5lR2V0Q29udGV4dEdyb3VwKGNvbnRleHQtPnByaXYtPnZtLmdldCgpKSwgbnVsbHB0cikpOwot
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhvYmplY3RDb250ZXh0LmdldCgpKTsKLSAg
ICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byoganNPYmplY3QgPSB2bS52bUVu
dHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHRvSlMob2JqZWN0Q29udGV4dC5nZXQoKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byoganNPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAganNPYmplY3QtPnNldEdsb2JhbFNjb3BlRXh0ZW5zaW9u
KEpTQzo6SlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwganNPYmplY3QsIGpzT2JqZWN0LT5nbG9iYWxT
Y29wZSgpLCB0b0pTKEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0LT5wcml2LT5qc0Nv
bnRleHQuZ2V0KCkpKSkpOwogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKICAg
ICBKU1ZhbHVlUmVmIHJlc3VsdCA9IGV2YWx1YXRlU2NyaXB0SW5Db250ZXh0KG9iamVjdENvbnRl
eHQuZ2V0KCksIFN0cmluZzo6ZnJvbVVURjgoY29kZSwgbGVuZ3RoIDwgMCA/IHN0cmxlbihjb2Rl
KSA6IGxlbmd0aCksIHVyaSwgbGluZU51bWJlciwgJmV4Y2VwdGlvbik7CkBAIC05MzksOCArOTM5
LDggQEAgSlNDQ2hlY2tTeW50YXhSZXN1bHQganNjX2NvbnRleHRfY2hlY2tfc3ludGF4KEpTQ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGMKICAgICBsaW5lTnVtYmVyID0gc3RkOjptYXg8
dW5zaWduZWQ+KDEsIGxpbmVOdW1iZXIpOwogCiAgICAgYXV0byoganNDb250ZXh0ID0gY29udGV4
dC0+cHJpdi0+anNDb250ZXh0LmdldCgpOwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9K
Uyhqc0NvbnRleHQpOwotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGpzQ29udGV4dCk7CisgICAgSlNDOjpW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2Vy
KHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2VVUkxTdHJpbmcgPSB1cmkgPyBTdHJpbmc6OmZyb21V
VEY4KHVyaSkgOiBTdHJpbmcoKTsKQEAgLTk5NCw4ICs5OTQsOCBAQCBKU0NDaGVja1N5bnRheFJl
c3VsdCBqc2NfY29udGV4dF9jaGVja19zeW50YXgoSlNDQ29udGV4dCogY29udGV4dCwgY29uc3Qg
Y2hhciogYwogICAgIH0KIAogICAgIGlmIChleGNlcHRpb24pIHsKLSAgICAgICAgYXV0byoganNF
cnJvciA9IGVycm9yLnRvRXJyb3JPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBz
b3VyY2UpOwotICAgICAgICAqZXhjZXB0aW9uID0ganNjRXhjZXB0aW9uQ3JlYXRlKGNvbnRleHQs
IHRvUmVmKGV4ZWMsIGpzRXJyb3IpKS5sZWFrUmVmKCk7CisgICAgICAgIGF1dG8qIGpzRXJyb3Ig
PSBlcnJvci50b0Vycm9yT2JqZWN0KGdsb2JhbE9iamVjdCwgc291cmNlKTsKKyAgICAgICAgKmV4
Y2VwdGlvbiA9IGpzY0V4Y2VwdGlvbkNyZWF0ZShjb250ZXh0LCB0b1JlZihnbG9iYWxPYmplY3Qs
IGpzRXJyb3IpKS5sZWFrUmVmKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NFeGNlcHRpb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAKaW5kZXggMjcx
OThkOTFiNWQ2ZmRiMDJkMjczYTlmYTY4ZDQ1NzI2ZTZiOGVkNS4uY2NkYThlOTAzM2RiYTYzMmMz
NmQwZjhiMGM1OGI1ZTE1ODI5YTFlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9nbGliL0pTQ0V4Y2VwdGlvbi5jcHAKQEAgLTc0LDggKzc0LDggQEAgR1JlZlB0cjxKU0NFeGNl
cHRpb24+IGpzY0V4Y2VwdGlvbkNyZWF0ZShKU0NDb250ZXh0KiBjb250ZXh0LCBKU1ZhbHVlUmVm
IGpzRXhjZXAKIHsKICAgICBHUmVmUHRyPEpTQ0V4Y2VwdGlvbj4gZXhjZXB0aW9uID0gYWRvcHRH
UmVmKEpTQ19FWENFUFRJT04oZ19vYmplY3RfbmV3KEpTQ19UWVBFX0VYQ0VQVElPTiwgbnVsbHB0
cikpKTsKICAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRl
eHQpOwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc0NvbnRleHQpOwotICAgIEpT
Qzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSB0b0pTKGpzQ29udGV4dCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBleGNlcHRpb24t
PnByaXYtPmpzRXhjZXB0aW9uLnNldCh2bSwgdG9KUyhKU1ZhbHVlVG9PYmplY3QoanNDb250ZXh0
LCBqc0V4Y2VwdGlvbiwgbnVsbHB0cikpKTsKICAgICAvLyBUaGUgY29udGV4dCBoYXMgYSBzdHJv
bmcgcmVmZXJlbmNlIHRvIHRoZSBleGNlcHRpb24sIHNvIHdlIGNhbid0IHJlZiB0aGUgY29udGV4
dC4gV2UgdXNlIGEgd2VhawpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9n
bGliL0pTQ1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NWYWx1
ZS5jcHAKaW5kZXggNWUxNzc0OTVkODJiNTg0NmQwNzg2NmJhMjYxMTg1MTZjMmRiMzY2OC4uYzUz
ZDJiZDczNzI5ZTllYmU4MDJlNjI0YTgzMDA2OWI1ODg3NGVkNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL2dsaWIvSlNDVmFsdWUuY3BwCkBAIC0xMDM5LDE1ICsxMDM5LDE1IEBAIHZv
aWQganNjX3ZhbHVlX29iamVjdF9kZWZpbmVfcHJvcGVydHlfZGF0YShKU0NWYWx1ZSogdmFsdWUs
IGNvbnN0IGNoYXIqIHByb3BlcnR5CiAKICAgICBKU0NWYWx1ZVByaXZhdGUqIHByaXYgPSB2YWx1
ZS0+cHJpdjsKICAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlNDb250ZXh0KHBy
aXYtPmNvbnRleHQuZ2V0KCkpOwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc0Nv
bnRleHQpOwotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGpzQ29udGV4dCk7CisgICAgSlNDOjpWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICBKU0M6OkpT
VmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgcHJpdi0+anNWYWx1ZSk7Ci0gICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0ganNWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICBKU0M6OkpTVmFsdWUg
anNWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0LCBwcml2LT5qc1ZhbHVlKTsKKyAgICBKU0M6OkpT
T2JqZWN0KiBvYmplY3QgPSBqc1ZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOwotICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5l
ZWRlZChzY29wZSwgZXhlYywgJmV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJv
dykgeworICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZ2xvYmFsT2JqZWN0
LCAmZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KSB7CiAgICAgICAgIGpz
Y0NvbnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNl
cHRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA1NywxMiArMTA1NywxMiBAQCB2
b2lkIGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2RhdGEoSlNDVmFsdWUqIHZhbHVl
LCBjb25zdCBjaGFyKiBwcm9wZXJ0eQogICAgICAgICByZXR1cm47CiAKICAgICBKU0M6OlByb3Bl
cnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgIGRlc2NyaXB0b3Iuc2V0VmFsdWUodG9KUyhl
eGVjLCBwcm9wZXJ0eVZhbHVlLT5wcml2LT5qc1ZhbHVlKSk7CisgICAgZGVzY3JpcHRvci5zZXRW
YWx1ZSh0b0pTKGdsb2JhbE9iamVjdCwgcHJvcGVydHlWYWx1ZS0+cHJpdi0+anNWYWx1ZSkpOwog
ICAgIGRlc2NyaXB0b3Iuc2V0RW51bWVyYWJsZShmbGFncyAmIEpTQ19WQUxVRV9QUk9QRVJUWV9F
TlVNRVJBQkxFKTsKICAgICBkZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZShmbGFncyAmIEpTQ19W
QUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUpOwogICAgIGRlc2NyaXB0b3Iuc2V0V3JpdGFibGUo
ZmxhZ3MgJiBKU0NfVkFMVUVfUFJPUEVSVFlfV1JJVEFCTEUpOwotICAgIG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIG5hbWUtPmlkZW50aWZp
ZXIoJnZtKSwgZGVzY3JpcHRvciwgdHJ1ZSk7Ci0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKHNjb3BlLCBleGVjLCAmZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93
KSB7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBuYW1lLT5pZGVudGlmaWVyKCZ2bSksIGRlc2NyaXB0b3IsIHRydWUp
OworICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZ2xvYmFsT2JqZWN0LCAm
ZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KSB7CiAgICAgICAgIGpzY0Nv
bnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRp
b24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA5OSwxNSArMTA5OSwxNSBAQCB2b2lk
IGpzY192YWx1ZV9vYmplY3RfZGVmaW5lX3Byb3BlcnR5X2FjY2Vzc29yKEpTQ1ZhbHVlKiB2YWx1
ZSwgY29uc3QgY2hhciogcHJvcAogCiAgICAgSlNDVmFsdWVQcml2YXRlKiBwcml2ID0gdmFsdWUt
PnByaXY7CiAgICAgYXV0byoganNDb250ZXh0ID0ganNjQ29udGV4dEdldEpTQ29udGV4dChwcml2
LT5jb250ZXh0LmdldCgpKTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoanNDb250
ZXh0KTsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhqc0NvbnRleHQpOworICAgIEpTQzo6Vk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHByaXYtPmpzVmFsdWUpOwotICAgIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCA9IGpzVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgSlNDOjpKU1ZhbHVlIGpz
VmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwgcHJpdi0+anNWYWx1ZSk7CisgICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0ganNWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVk
ZWQoc2NvcGUsIGV4ZWMsICZleGNlcHRpb24pID09IEV4Y2VwdGlvblN0YXR1czo6RGlkVGhyb3cp
IHsKKyAgICBpZiAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQoc2NvcGUsIGdsb2JhbE9iamVjdCwg
JmV4Y2VwdGlvbikgPT0gRXhjZXB0aW9uU3RhdHVzOjpEaWRUaHJvdykgewogICAgICAgICBqc2ND
b250ZXh0SGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQocHJpdi0+Y29udGV4dC5nZXQoKSwgZXhjZXB0
aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExMjEsMTggKzExMjEsMTggQEAgdm9p
ZCBqc2NfdmFsdWVfb2JqZWN0X2RlZmluZV9wcm9wZXJ0eV9hY2Nlc3NvcihKU0NWYWx1ZSogdmFs
dWUsIGNvbnN0IGNoYXIqIHByb3AKICAgICBkZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZShmbGFn
cyAmIEpTQ19WQUxVRV9QUk9QRVJUWV9DT05GSUdVUkFCTEUpOwogICAgIGlmIChnZXR0ZXIpIHsK
ICAgICAgICAgR1JlZlB0cjxHQ2xvc3VyZT4gY2xvc3VyZSA9IGFkb3B0R1JlZihnX2NjbG9zdXJl
X25ldyhnZXR0ZXIsIHVzZXJEYXRhLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJlTm90aWZ5Pihy
ZWludGVycHJldF9jYXN0PEdDYWxsYmFjaz4oZGVzdHJveU5vdGlmeSkpKSk7Ci0gICAgICAgIGF1
dG8gZnVuY3Rpb24gPSBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAiZ2V0Il9zLAorICAgICAgICBhdXRvIGZ1bmN0aW9uID0g
SlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgImdldCJf
cywKICAgICAgICAgICAgIEpTQzo6SlNDQ2FsbGJhY2tGdW5jdGlvbjo6VHlwZTo6TWV0aG9kLCBu
dWxscHRyLCBXVEZNb3ZlKGNsb3N1cmUpLCBwcm9wZXJ0eVR5cGUsIFZlY3RvcjxHVHlwZT4geyB9
KTsKICAgICAgICAgZGVzY3JpcHRvci5zZXRHZXR0ZXIoZnVuY3Rpb24pOwogICAgIH0KICAgICBp
ZiAoc2V0dGVyKSB7CiAgICAgICAgIEdSZWZQdHI8R0Nsb3N1cmU+IGNsb3N1cmUgPSBhZG9wdEdS
ZWYoZ19jY2xvc3VyZV9uZXcoc2V0dGVyLCB1c2VyRGF0YSwgZ2V0dGVyID8gbnVsbHB0ciA6IHJl
aW50ZXJwcmV0X2Nhc3Q8R0Nsb3N1cmVOb3RpZnk+KHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNr
PihkZXN0cm95Tm90aWZ5KSkpKTsKLSAgICAgICAgYXV0byBmdW5jdGlvbiA9IEpTQzo6SlNDQ2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksICJz
ZXQiX3MsCisgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAic2V0Il9zLAogICAgICAgICAgICAgSlNDOjpKU0ND
YWxsYmFja0Z1bmN0aW9uOjpUeXBlOjpNZXRob2QsIG51bGxwdHIsIFdURk1vdmUoY2xvc3VyZSks
IEdfVFlQRV9OT05FLCBWZWN0b3I8R1R5cGU+IHsgcHJvcGVydHlUeXBlIH0pOwogICAgICAgICBk
ZXNjcmlwdG9yLnNldFNldHRlcihmdW5jdGlvbik7CiAgICAgfQotICAgIG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIG5hbWUtPmlkZW50aWZp
ZXIoJnZtKSwgZGVzY3JpcHRvciwgdHJ1ZSk7Ci0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbklmTmVl
ZGVkKHNjb3BlLCBleGVjLCAmZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93
KSB7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBuYW1lLT5pZGVudGlmaWVyKCZ2bSksIGRlc2NyaXB0b3IsIHRydWUp
OworICAgIGlmIChoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChzY29wZSwgZ2xvYmFsT2JqZWN0LCAm
ZXhjZXB0aW9uKSA9PSBFeGNlcHRpb25TdGF0dXM6OkRpZFRocm93KSB7CiAgICAgICAgIGpzY0Nv
bnRleHRIYW5kbGVFeGNlcHRpb25JZk5lZWRlZChwcml2LT5jb250ZXh0LmdldCgpLCBleGNlcHRp
b24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE0NywxMCArMTE0NywxMCBAQCBzdGF0
aWMgR1JlZlB0cjxKU0NWYWx1ZT4ganNjVmFsdWVGdW5jdGlvbkNyZWF0ZShKU0NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBjaGFyKgogICAgICAgICBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1
cmVfbmV3X3N3YXAoY2FsbGJhY2ssIHVzZXJEYXRhLCByZWludGVycHJldF9jYXN0PEdDbG9zdXJl
Tm90aWZ5PihyZWludGVycHJldF9jYXN0PEdDYWxsYmFjaz4oZGVzdHJveU5vdGlmeSkpKSk7CiAg
ICAgZWxzZQogICAgICAgICBjbG9zdXJlID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3KGNhbGxi
YWNrLCB1c2VyRGF0YSwgcmVpbnRlcnByZXRfY2FzdDxHQ2xvc3VyZU5vdGlmeT4ocmVpbnRlcnBy
ZXRfY2FzdDxHQ2FsbGJhY2s+KGRlc3Ryb3lOb3RpZnkpKSkpOwotICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gdG9KUyhqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpKTsKLSAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdG9KUyhqc2NDb250ZXh0R2V0SlNDb250ZXh0KGNvbnRleHQpKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dm0pOwotICAgIGF1dG8qIGZ1bmN0aW9uT2JqZWN0ID0gdG9SZWYoSlNDOjpKU0NDYWxsYmFja0Z1
bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbmFtZSA/IFN0
cmluZzo6ZnJvbVVURjgobmFtZSkgOiAiYW5vbnltb3VzIl9zLAorICAgIGF1dG8qIGZ1bmN0aW9u
T2JqZWN0ID0gdG9SZWYoSlNDOjpKU0NDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgbmFtZSA/IFN0cmluZzo6ZnJvbVVURjgobmFtZSkgOiAiYW5vbnltb3VzIl9zLAog
ICAgICAgICBKU0M6OkpTQ0NhbGxiYWNrRnVuY3Rpb246OlR5cGU6OkZ1bmN0aW9uLCBudWxscHRy
LCBXVEZNb3ZlKGNsb3N1cmUpLCByZXR1cm5UeXBlLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKSk7CiAg
ICAgcmV0dXJuIGpzY0NvbnRleHRHZXRPckNyZWF0ZVZhbHVlKGNvbnRleHQsIGZ1bmN0aW9uT2Jq
ZWN0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NX
ZWFrVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dlYWtWYWx1
ZS5jcHAKaW5kZXggOTg5N2VlMzI3NGZkNmVkZDU2YWU5ZjQ1OTBlMTg0Y2JkZGY3YTQ0Zi4uZTVj
MDRlYzc4NWUxMzc1NDEyMzJkMmVkZjViYmQ5NTZhOGU5YTBiYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dlYWtWYWx1ZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dlYWtWYWx1ZS5jcHAKQEAgLTkwLDE0ICs5MCwxMyBA
QCBzdGF0aWMgdm9pZCBqc2NXZWFrVmFsdWVJbml0aWFsaXplKEpTQ1dlYWtWYWx1ZSogd2Vha1Zh
bHVlLCBKU0NWYWx1ZSogdmFsdWUpCiB7CiAgICAgSlNDV2Vha1ZhbHVlUHJpdmF0ZSogcHJpdiA9
IHdlYWtWYWx1ZS0+cHJpdjsKICAgICBhdXRvKiBqc0NvbnRleHQgPSBqc2NDb250ZXh0R2V0SlND
b250ZXh0KGpzY192YWx1ZV9nZXRfY29udGV4dCh2YWx1ZSkpOwotICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gdG9KUyhqc0NvbnRleHQpOwotICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGpzQ29udGV4dCk7CiAgICAgYXV0byYgb3duZXIg
PSB3ZWFrVmFsdWVIYW5kbGVPd25lcigpOwogICAgIEpTQzo6V2VhazxKU0M6OkpTR2xvYmFsT2Jq
ZWN0PiB3ZWFrKGdsb2JhbE9iamVjdCwgJm93bmVyLCB3ZWFrVmFsdWUpOwogICAgIHByaXYtPmds
b2JhbE9iamVjdC5zd2FwKHdlYWspOwotICAgIHByaXYtPmxvY2sgPSAmZXhlYy0+dm0oKS5hcGlM
b2NrKCk7CisgICAgcHJpdi0+bG9jayA9ICZnbG9iYWxPYmplY3QtPnZtKCkuYXBpTG9jaygpOwog
Ci0gICAgSlNDOjpKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIGpzY1ZhbHVlR2V0SlNWYWx1
ZSh2YWx1ZSkpOworICAgIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3Qs
IGpzY1ZhbHVlR2V0SlNWYWx1ZSh2YWx1ZSkpOwogICAgIGlmIChqc1ZhbHVlLmlzT2JqZWN0KCkp
CiAgICAgICAgIHByaXYtPndlYWtWYWx1ZVJlZi5zZXRPYmplY3QoSlNDOjpqc0Nhc3Q8SlNDOjpK
U09iamVjdCo+KGpzVmFsdWUuYXNDZWxsKCkpLCBvd25lciwgd2Vha1ZhbHVlKTsKICAgICBlbHNl
IGlmIChqc1ZhbHVlLmlzU3RyaW5nKCkpCkBAIC0yMDYsNyArMjA1LDcgQEAgSlNDVmFsdWUqIGpz
Y193ZWFrX3ZhbHVlX2dldF92YWx1ZShKU0NXZWFrVmFsdWUqIHdlYWtWYWx1ZSkKICAgICBlbHNl
CiAgICAgICAgIHZhbHVlID0gcHJpdi0+d2Vha1ZhbHVlUmVmLm9iamVjdCgpOwogCi0gICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSBwcml2LT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAg
ICBHUmVmUHRyPEpTQ0NvbnRleHQ+IGNvbnRleHQgPSBqc2NDb250ZXh0R2V0T3JDcmVhdGUodG9H
bG9iYWxSZWYoZXhlYykpOwotICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShj
b250ZXh0LmdldCgpLCB0b1JlZihleGVjLCB2YWx1ZSkpLmxlYWtSZWYoKTsKKyAgICBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBwcml2LT5nbG9iYWxPYmplY3QuZ2V0KCk7Cisg
ICAgR1JlZlB0cjxKU0NDb250ZXh0PiBjb250ZXh0ID0ganNjQ29udGV4dEdldE9yQ3JlYXRlKHRv
R2xvYmFsUmVmKGdsb2JhbE9iamVjdCkpOworICAgIHJldHVybiBqc2NDb250ZXh0R2V0T3JDcmVh
dGVWYWx1ZShjb250ZXh0LmdldCgpLCB0b1JlZihnbG9iYWxPYmplY3QsIHZhbHVlKSkubGVha1Jl
ZigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dy
YXBwZXJNYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9nbGliL0pTQ1dyYXBwZXJN
YXAuY3BwCmluZGV4IGY1MjNlYTQxOTlmOGFiZDczMmY3N2I2MjgxNDEyMDEzNGJiOGJlYTguLmM2
MjExZGMwOWMwMDk5ZGQyYTFjODIzNzEzZTM3YjZiMjA1OTRmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvZ2xpYi9KU0NXcmFwcGVyTWFwLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL2dsaWIvSlNDV3JhcHBlck1hcC5jcHAKQEAgLTc3LDE3ICs3Nywx
NyBAQCBKU0NDbGFzcyogV3JhcHBlck1hcDo6cmVnaXN0ZXJlZENsYXNzKEpTQ2xhc3NSZWYganND
bGFzcykgY29uc3QKIEpTT2JqZWN0KiBXcmFwcGVyTWFwOjpjcmVhdGVKU1dyYXBwcGVyKEpTR2xv
YmFsQ29udGV4dFJlZiBqc0NvbnRleHQsIEpTQ2xhc3NSZWYganNDbGFzcywgSlNWYWx1ZVJlZiBw
cm90b3R5cGUsIGdwb2ludGVyIHdyYXBwZWRPYmplY3QsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lG
dW5jdGlvbikKIHsKICAgICBBU1NFUlQodG9KU0dsb2JhbE9iamVjdChqc0NvbnRleHQpLT53cmFw
cGVyTWFwKCkgPT0gdGhpcyk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhqc0NvbnRleHQp
OwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHRvSlMoanNDb250ZXh0KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7Ci0gICAgYXV0byogb2JqZWN0ID0gSlNDOjpK
U0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5n
bGliV3JhcHBlck9iamVjdFN0cnVjdHVyZSgpLCBqc0NsYXNzLCBudWxscHRyKTsKKyAgICBhdXRv
KiBvYmplY3QgPSBKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3Q+
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsaWJXcmFwcGVyT2JqZWN0U3Ry
dWN0dXJlKCksIGpzQ2xhc3MsIG51bGxwdHIpOwogICAgIGlmICh3cmFwcGVkT2JqZWN0KSB7CiAg
ICAgICAgIG9iamVjdC0+c2V0V3JhcHBlZE9iamVjdChuZXcgSlNDOjpKU0NHTGliV3JhcHBlck9i
amVjdCh3cmFwcGVkT2JqZWN0LCBkZXN0cm95RnVuY3Rpb24pKTsKICAgICAgICAgbV9jYWNoZWRK
U1dyYXBwZXJzLT5zZXQod3JhcHBlZE9iamVjdCwgb2JqZWN0KTsKICAgICB9CiAgICAgaWYgKHBy
b3RvdHlwZSkKICAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoanNDb250ZXh0LCB0b1JlZihv
YmplY3QpLCBwcm90b3R5cGUpOwotICAgIGVsc2UgaWYgKGF1dG8qIGpzUHJvdG90eXBlID0ganND
bGFzcy0+cHJvdG90eXBlKGV4ZWMpKQorICAgIGVsc2UgaWYgKGF1dG8qIGpzUHJvdG90eXBlID0g
anNDbGFzcy0+cHJvdG90eXBlKGdsb2JhbE9iamVjdCkpCiAgICAgICAgIG9iamVjdC0+c2V0UHJv
dG90eXBlRGlyZWN0KHZtLCBqc1Byb3RvdHlwZSk7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KQEAg
LTEwMSwxNSArMTAxLDE0IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBXcmFwcGVyTWFwOjpjcmVhdGVD
b250ZXh0V2l0aEpTV3JhcHBwZXIoSlNDb250ZXh0R3JvdXBSZWYganNHCiAgICAgICAgIGdsb2Jh
bE9iamVjdC0+c2V0V3JhcHBlZE9iamVjdChuZXcgSlNDOjpKU0NHTGliV3JhcHBlck9iamVjdCh3
cmFwcGVkT2JqZWN0LCBkZXN0cm95RnVuY3Rpb24pKTsKICAgICAgICAgbV9jYWNoZWRKU1dyYXBw
ZXJzLT5zZXQod3JhcHBlZE9iamVjdCwgZ2xvYmFsT2JqZWN0KTsKICAgICB9Ci0gICAgRXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgaWYgKHByb3RvdHlw
ZSkKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZXNldFByb3RvdHlwZSh2bS5nZXQoKSwgdG9KUyhl
eGVjLCBwcm90b3R5cGUpKTsKLSAgICBlbHNlIGlmIChhdXRvIGpzUHJvdG90eXBlID0ganNDbGFz
cy0+cHJvdG90eXBlKGV4ZWMpKQorICAgICAgICBnbG9iYWxPYmplY3QtPnJlc2V0UHJvdG90eXBl
KHZtLmdldCgpLCB0b0pTKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlKSk7CisgICAgZWxzZSBpZiAo
YXV0byBqc1Byb3RvdHlwZSA9IGpzQ2xhc3MtPnByb3RvdHlwZShnbG9iYWxPYmplY3QpKQogICAg
ICAgICBnbG9iYWxPYmplY3QtPnJlc2V0UHJvdG90eXBlKHZtLmdldCgpLCBqc1Byb3RvdHlwZSk7
CiAgICAgZWxzZQogICAgICAgICBnbG9iYWxPYmplY3QtPnJlc2V0UHJvdG90eXBlKHZtLmdldCgp
LCBqc051bGwoKSk7CiAKLSAgICByZXR1cm4gSlNHbG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFs
UmVmKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNHbG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFsUmVm
KGdsb2JhbE9iamVjdCkpOwogfQogCiBKU09iamVjdCogV3JhcHBlck1hcDo6anNXcmFwcGVyKGdw
b2ludGVyIHdyYXBwZWRPYmplY3QpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL0pTT05QYXJzZVRlc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy9KU09OUGFyc2VUZXN0LmNwcAppbmRleCBkN2UyYmNhMjE3MjE4MjExOGIzOGE5
ZmZmZGEwNzJlNDBhMGE5ZjgzLi5hMDYyYWFiN2VkYzczZDViNTIxN2E1NWE5ZWY4NWVhNjZkYzc4
MmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTT05QYXJz
ZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvSlNPTlBhcnNl
VGVzdC5jcHAKQEAgLTQzLDE0ICs0MywxMyBAQCBpbnQgdGVzdEpTT05QYXJzZSgpCiAgICAgSlNM
b2NrSG9sZGVyIGxvY2tlcih2bS5nZXQoKSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKCp2bSwganNOdWxsKCkpKTsKICAgICAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU1ZhbHVlIHYwID0gSlNPTlBhcnNlKGV4
ZWMsICIiKTsKLSAgICBKU1ZhbHVlIHYxID0gSlNPTlBhcnNlKGV4ZWMsICIjJCVeIik7Ci0gICAg
SlNWYWx1ZSB2MiA9IEpTT05QYXJzZShleGVjLCBTdHJpbmcoKSk7CisgICAgSlNWYWx1ZSB2MCA9
IEpTT05QYXJzZShnbG9iYWxPYmplY3QsICIiKTsKKyAgICBKU1ZhbHVlIHYxID0gSlNPTlBhcnNl
KGdsb2JhbE9iamVjdCwgIiMkJV4iKTsKKyAgICBKU1ZhbHVlIHYyID0gSlNPTlBhcnNlKGdsb2Jh
bE9iamVjdCwgU3RyaW5nKCkpOwogICAgIFVDaGFyIGVtcHR5VUNoYXJBcnJheVsxXSA9IHsgJ1ww
JyB9OwotICAgIEpTVmFsdWUgdjMgPSBKU09OUGFyc2UoZXhlYywgU3RyaW5nKGVtcHR5VUNoYXJB
cnJheSwgMCkpOworICAgIEpTVmFsdWUgdjMgPSBKU09OUGFyc2UoZ2xvYmFsT2JqZWN0LCBTdHJp
bmcoZW1wdHlVQ2hhckFycmF5LCAwKSk7CiAgICAgSlNWYWx1ZSB2NDsKLSAgICBKU1ZhbHVlIHY1
ID0gSlNPTlBhcnNlKGV4ZWMsICIxMjMiKTsKKyAgICBKU1ZhbHVlIHY1ID0gSlNPTlBhcnNlKGds
b2JhbE9iamVjdCwgIjEyMyIpOwogICAgIAogICAgIGZhaWxlZCA9IGZhaWxlZCB8fCAodjAgIT0g
djEpOwogICAgIGZhaWxlZCA9IGZhaWxlZCB8fCAodjEgIT0gdjIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9KU09iamVjdEdldFByb3h5VGFyZ2V0VGVzdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTT2JqZWN0R2V0UHJveHlUYXJn
ZXRUZXN0LmNwcAppbmRleCA3MTgyMWVhZWI2MjdmMjMzMzBhZTQ5OWJkMzBjNDBkM2VjNWU1YjE5
Li5iNjk5YjViMzQ0YjczMDRmNWZmODFjYzAzZTM5NjlkZTVhY2EwNTUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTT2JqZWN0R2V0UHJveHlUYXJnZXRUZXN0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTT2JqZWN0R2V0UHJv
eHlUYXJnZXRUZXN0LmNwcApAQCAtNTEsMTIgKzUxLDExIEBAIGludCB0ZXN0SlNPYmplY3RHZXRQ
cm94eVRhcmdldCgpCiAgICAgSlNDb250ZXh0R3JvdXBSZWYgZ3JvdXAgPSBKU0NvbnRleHRHcm91
cENyZWF0ZSgpOwogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0ID0gSlNHbG9iYWxDb250
ZXh0Q3JlYXRlSW5Hcm91cChncm91cCwgbnVsbHB0cik7CiAgICAgCi0gICAgRXhlY1N0YXRlKiBl
eGVjID0gdG9KUyhjb250ZXh0KTsKICAgICBWTSYgdm0gPSAqdG9KUyhncm91cCk7CiAgICAgSlNP
YmplY3RSZWYgZ2xvYmFsT2JqZWN0UHJveHkgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29u
dGV4dCk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0T2JqZWN0OwotICAgIEpT
T2JqZWN0UmVmIGdsb2JhbE9iamVjdDsKKyAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3RSZWY7
CiAgICAgSlNQcm94eSoganNQcm94eU9iamVjdDsKIAogICAgIHsKQEAgLTY0LDcgKzYzLDcgQEAg
aW50IHRlc3RKU09iamVjdEdldFByb3h5VGFyZ2V0KCkKICAgICAgICAgSlNQcm94eSogZ2xvYmFs
T2JqZWN0UHJveHlPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KHRvSlMoZ2xvYmFsT2JqZWN0UHJv
eHkpKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0T2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0UHJveHlPYmplY3QtPnRhcmdldCgpKTsKICAgICAgICAgU3RydWN0dXJl
KiBwcm94eVN0cnVjdHVyZSA9IEpTUHJveHk6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2Jq
ZWN0T2JqZWN0LCBnbG9iYWxPYmplY3RPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCBQdXJlRm9y
d2FyZGluZ1Byb3h5VHlwZSk7Ci0gICAgICAgIGdsb2JhbE9iamVjdCA9IHRvUmVmKGdsb2JhbE9i
amVjdE9iamVjdCk7CisgICAgICAgIGdsb2JhbE9iamVjdFJlZiA9IHRvUmVmKGpzQ2FzdDxKU09i
amVjdCo+KGdsb2JhbE9iamVjdE9iamVjdCkpOwogICAgICAgICBqc1Byb3h5T2JqZWN0ID0gSlNQ
cm94eTo6Y3JlYXRlKHZtLCBwcm94eVN0cnVjdHVyZSk7CiAgICAgfQogICAgIApAQCAtNzYsNyAr
NzUsNyBAQCBpbnQgdGVzdEpTT2JqZWN0R2V0UHJveHlUYXJnZXQoKQogICAgICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgU3RydWN0dXJlKiBlbXB0eU9iamVjdFN0cnVjdHVy
ZSA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0T2JqZWN0
LCBnbG9iYWxPYmplY3RPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAwKTsKICAgICAgICAgSlNP
YmplY3QqIGhhbmRsZXIgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIGVtcHR5T2JqZWN0U3Ry
dWN0dXJlKTsKLSAgICAgICAgcHJveHlPYmplY3RPYmplY3QgPSBQcm94eU9iamVjdDo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdE9iamVjdCwgdG9KUyhhcnJheSksIGhhbmRsZXIpOworICAgICAg
ICBwcm94eU9iamVjdE9iamVjdCA9IFByb3h5T2JqZWN0OjpjcmVhdGUoZ2xvYmFsT2JqZWN0T2Jq
ZWN0LCB0b0pTKGFycmF5KSwgaGFuZGxlcik7CiAgICAgfQogCiAgICAgSlNPYmplY3RSZWYganNQ
cm94eSA9IHRvUmVmKGpzUHJveHlPYmplY3QpOwpAQCAtOTEsMTEgKzkwLDExIEBAIGludCB0ZXN0
SlNPYmplY3RHZXRQcm94eVRhcmdldCgpCiAgICAgICAgIGpzUHJveHlPYmplY3QtPnNldFRhcmdl
dCh2bSwgZ2xvYmFsT2JqZWN0T2JqZWN0KTsKICAgICB9CiAgICAgCi0gICAgdGVzdCgicHJveHkg
dGFyZ2V0IG9mIGluaXRpYWxpemVkIEpTUHJveHkgd29ya3MiLCBKU09iamVjdEdldFByb3h5VGFy
Z2V0KGpzUHJveHkpID09IGdsb2JhbE9iamVjdCk7CisgICAgdGVzdCgicHJveHkgdGFyZ2V0IG9m
IGluaXRpYWxpemVkIEpTUHJveHkgd29ya3MiLCBKU09iamVjdEdldFByb3h5VGFyZ2V0KGpzUHJv
eHkpID09IGdsb2JhbE9iamVjdFJlZik7CiAgICAgCiAgICAgdGVzdCgicHJveHkgdGFyZ2V0IG9m
IFByb3h5T2JqZWN0IHdvcmtzIiwgSlNPYmplY3RHZXRQcm94eVRhcmdldChwcm94eU9iamVjdCkg
PT0gYXJyYXkpOwogICAgIAotICAgIHRlc3QoInByb3h5IHRhcmdldCBvZiBHbG9iYWxPYmplY3Qg
aXMgdGhlIGdsb2JhbE9iamVjdCIsIEpTT2JqZWN0R2V0UHJveHlUYXJnZXQoZ2xvYmFsT2JqZWN0
UHJveHkpID09IGdsb2JhbE9iamVjdCk7CisgICAgdGVzdCgicHJveHkgdGFyZ2V0IG9mIEdsb2Jh
bE9iamVjdCBpcyB0aGUgZ2xvYmFsT2JqZWN0IiwgSlNPYmplY3RHZXRQcm94eVRhcmdldChnbG9i
YWxPYmplY3RQcm94eSkgPT0gZ2xvYmFsT2JqZWN0UmVmKTsKIAogICAgIEpTR2xvYmFsQ29udGV4
dFJlbGVhc2UoY29udGV4dCk7CiAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKGdyb3VwKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvSlNXcmFwcGVyTWFwVGVz
dHMubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTV3JhcHBlck1hcFRlc3Rz
Lm1tCmluZGV4IDkzMWE5NDUzZjQwOThkMDA4NDdkZjcyODQyZDVmZDZmOTMyNzVmOTYuLmNhNmQ3
Mzk0ZTlmY2UxMWNkNWYyNDgxZGJhOGE0YzFjZDBhMzczYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvSlNXcmFwcGVyTWFwVGVzdHMubW0KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9KU1dyYXBwZXJNYXBUZXN0cy5tbQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJIZWFwQ2VsbElubGluZXMu
aCIKKyNpbXBvcnQgIkpTR2xvYmFsT2JqZWN0SW5saW5lcy5oIgogI2ltcG9ydCAiSlNWYWx1ZS5o
IgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKQEAgLTU1LDEzICs1NiwxMyBAQCArICh2b2lk
KXRlc3RTdHJ1Y3R1cmVJZGVudGl0eQogewogICAgIEpTQ29udGV4dCogY29udGV4dCA9IFtbSlND
b250ZXh0IGFsbG9jXSBpbml0XTsKICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9
IEpTR2xvYmFsQ29udGV4dFJldGFpbihjb250ZXh0LkpTR2xvYmFsQ29udGV4dFJlZik7Ci0gICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHRSZWYpOworICAgIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dFJlZik7CiAKICAgICBjb250ZXh0
W0AiVGVzdENsYXNzIl0gPSBbVGVzdENsYXNzIGNsYXNzXTsKICAgICBKU1ZhbHVlKiBhV3JhcHBl
ciA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAibmV3IFRlc3RDbGFzcygpIl07CiAgICAgSlNW
YWx1ZSogYldyYXBwZXIgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBUZXN0Q2xhc3Mo
KSJdOwotICAgIEpTQzo6SlNWYWx1ZSBhVmFsdWUgPSB0b0pTKGV4ZWMsIGFXcmFwcGVyLkpTVmFs
dWVSZWYpOwotICAgIEpTQzo6SlNWYWx1ZSBiVmFsdWUgPSB0b0pTKGV4ZWMsIGJXcmFwcGVyLkpT
VmFsdWVSZWYpOworICAgIEpTQzo6SlNWYWx1ZSBhVmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwg
YVdyYXBwZXIuSlNWYWx1ZVJlZik7CisgICAgSlNDOjpKU1ZhbHVlIGJWYWx1ZSA9IHRvSlMoZ2xv
YmFsT2JqZWN0LCBiV3JhcHBlci5KU1ZhbHVlUmVmKTsKICAgICBKU0M6OlN0cnVjdHVyZSogYVN0
cnVjdHVyZSA9IGFWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKTsKICAgICBKU0M6OlN0cnVjdHVyZSog
YlN0cnVjdHVyZSA9IGJWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKTsKICAgICBjaGVja1Jlc3VsdChA
InN0cnVjdHVyZSBzaG91bGQgbm90IGJlIG51bGwiLCAhIWFTdHJ1Y3R1cmUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5jcHAKaW5kZXggM2ZmYTNlYThkZDQ5ZmMw
Y2Y2MGM4NWYxNDJjNmNjNDdmYzJkYTQ4NC4uNzlmNGM0MzEzNGJkOGYwMWZkM2EwNGJhOTMwNmYw
OTEzZDNjOTkxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdElubGluZXMuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250
ZXh0UmVmUHJpdmF0ZS5oPgpAQCAtNzIsOSArNzMsOSBAQCBjbGFzcyBBUElDb250ZXh0IHsKICAg
ICAgICAgQVBJU3RyaW5nIHByaW50KCJwcmludCIpOwogICAgICAgICBKU09iamVjdFJlZiBwcmlu
dEZ1bmN0aW9uID0gSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2sobV9jb250ZXh0LCBw
cmludCwgW10gKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqKSB7CiAKLSAgICAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwor
ICAgICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjdHgp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7IGkr
KykKLSAgICAgICAgICAgICAgICBkYXRhTG9nKHRvSlMoZXhlYywgYXJndW1lbnRzW2ldKSk7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZyh0b0pTKGdsb2JhbE9iamVjdCwgYXJndW1lbnRzW2ldKSk7
CiAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjdHgpOwogICAgICAgICB9KTsKQEAgLTg4LDcgKzg5LDcgQEAgY2xhc3MgQVBJ
Q29udGV4dCB7CiAgICAgfQogCiAgICAgb3BlcmF0b3IgSlNHbG9iYWxDb250ZXh0UmVmKCkgeyBy
ZXR1cm4gbV9jb250ZXh0OyB9Ci0gICAgb3BlcmF0b3IgSlNDOjpFeGVjU3RhdGUqKCkgeyByZXR1
cm4gdG9KUyhtX2NvbnRleHQpOyB9CisgICAgb3BlcmF0b3IgSlNDOjpKU0dsb2JhbE9iamVjdCoo
KSB7IHJldHVybiB0b0pTKG1fY29udGV4dCk7IH0KIAogcHJpdmF0ZToKICAgICBKU0dsb2JhbENv
bnRleHRSZWYgbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IDE3NzIyYTFlY2E0MjUyYzAwZTNkZDAzODQ1MWQ5MGI5MDAyNGY2ZGMuLjUxM2RiYTRmZmUzMjk3
MmJkZWY1OGZkODYwN2MxMTUwZjkxMmE3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTc0NCw2ICs3NDQsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAogICAgIHJ1
bnRpbWUvQXJnTGlzdC5oCiAgICAgcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCisgICAgcnVudGlt
ZS9BcnJheUNvbnN0cnVjdG9yLmgKICAgICBydW50aW1lL0FycmF5QnVmZmVyLmgKICAgICBydW50
aW1lL0FycmF5QnVmZmVyU2hhcmluZ01vZGUuaAogICAgIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgKQEAgLTkzNiw2ICs5MzcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHJ1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgKICAgICBydW50aW1lL1By
b3RlY3QuaAogICAgIHJ1bnRpbWUvUHJvdG90eXBlS2V5LmgKKyAgICBydW50aW1lL1Byb3h5T2Jq
ZWN0LmgKICAgICBydW50aW1lL1B1cmVOYU4uaAogICAgIHJ1bnRpbWUvUHV0RGlyZWN0SW5kZXhN
b2RlLmgKICAgICBydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDhjOTllMTcxNmVlYzlmZjkyMGEyZTIyMWEzMWNkYTRkYjI3ZDg1MmQuLmQz
M2FiZGU5OTMzOWRlODU2Nzk5YTQwMmZjOWMxYTdkNDhlOGUzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xNjI0LDcgKzE2MjQsNyBAQAogCQlCQzExNjY3QjBFMTk5QzA1MDA4
MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMxMTY2N0EwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVu
Y3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQzExNjdEQTBFMTlCQ0M5MDA4MDY2REQgLyogSlNDZWxsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzExNjdEODBFMTlCQ0M5MDA4MDY2REQgLyog
SlNDZWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODJCNzhBMEE0MzA1QUIwMDUxN0NGQyAv
KiBBUElDYXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzk1MjA3MEUxNUU4
QTgwMEE4OThBQiAvKiBBcnJheUNvbnN0cnVjdG9yLmggKi87IH07CisJCUJDMThDM0U2MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc5NTIwNzBFMTVFOEE4MDBBODk4QUIgLyogQXJyYXlD
b25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUJDMThDM0U3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheVByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY5MkE4NEUwMjU1NTk3
RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xl
YW5PYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEMzRUQwRTE2RjVDRDAw
QjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDVDNTA3RjBEOURGNjNCMDA4OEY2QjkgLyogQ2FsbERhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5k
R2VuZXJhdGVDb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5jcHAKaW5kZXggZWEyYzdjY2IzMWIx
ODEyYWU2ZGQ5ZWE2ODZhN2RiMzQ3ZmQ4NTQ4NC4uYzFlMTMwMGJkYzI3NmMwMmRmMGQ1NDg4N2Y3
NjQ4MTQxYWU1NGU3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRH
ZW5lcmF0ZUNvZGUuY3BwCkBAIC00NywzMCArNDcsMzEgQEAgR2VuZXJhdGVBbmRBbGxvY2F0ZVJl
Z2lzdGVyczo6R2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVycyhDb2RlJiBjb2RlKQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgR2VuZXJhdGVBbmRBbGxvY2F0ZVJlZ2lzdGVyczo6Y2hlY2tDb25zaXN0
ZW5jeSgpCiB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG1fY29kZS5mb3JFYWNoVG1wKFsm
XSAoVG1wIHRtcCkgewotICAgICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5yZWc7Ci0gICAgICAg
IGlmICghcmVnKQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIFRoaXMgaXNuJ3QgZXhhY3Rs
eSB0aGUgcmlnaHQgb3B0aW9uIGZvciB0aGlzIGJ1dCBhZGRpbmcgYSBuZXcgb25lIGZvciBqdXN0
IHRoaXMgc2VlbXMgc2lsbHkuCisgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlR3JhcGgoKSB8fCBP
cHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBtX2NvZGUuZm9y
RWFjaFRtcChbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAgIFJlZyByZWcgPSBtX21hcFt0bXBd
LnJlZzsKKyAgICAgICAgICAgIGlmICghcmVnKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBBU1NFUlQoIW1fYXZhaWxhYmxlUmVnc1t0bXAuYmFuaygpXS5jb250YWlucyhyZWcp
KTsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudEFsbG9jYXRpb24tPmF0KHJlZykgPT0gdG1wKTsK
LSAgICB9KTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCld
LmNvbnRhaW5zKHJlZykpOworICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEFsbG9jYXRpb24t
PmF0KHJlZykgPT0gdG1wKTsKKyAgICAgICAgfSk7CiAKLSAgICBmb3IgKFJlZyByZWcgOiBSZWdp
c3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgaWYgKGlzRGlzYWxsb3dlZFJlZ2lz
dGVyKHJlZykpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChSZWcgcmVnIDog
UmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICBpZiAoaXNEaXNhbGxv
d2VkUmVnaXN0ZXIocmVnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBU
bXAgdG1wID0gbV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKTsKLSAgICAgICAgaWYgKCF0bXAp
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2F2YWlsYWJsZVJlZ3NbYmFua0ZvclJlZyhyZWcpXS5j
b250YWlucyhyZWcpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgICAg
ICAgICBUbXAgdG1wID0gbV9jdXJyZW50QWxsb2NhdGlvbi0+YXQocmVnKTsKKyAgICAgICAgICAg
IGlmICghdG1wKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXZhaWxhYmxlUmVnc1tiYW5r
Rm9yUmVnKHJlZyldLmNvbnRhaW5zKHJlZykpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQogCi0gICAgICAgIEFTU0VSVCghbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5r
KCldLmNvbnRhaW5zKHJlZykpOwotICAgICAgICBBU1NFUlQobV9tYXBbdG1wXS5yZWcgPT0gcmVn
KTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9hdmFpbGFibGVSZWdzW3RtcC5iYW5rKCldLmNvbnRh
aW5zKHJlZykpOworICAgICAgICAgICAgQVNTRVJUKG1fbWFwW3RtcF0ucmVnID09IHJlZyk7Cisg
ICAgICAgIH0KICAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBHZW5lcmF0ZUFuZEFsbG9jYXRlUmVn
aXN0ZXJzOjpidWlsZExpdmVSYW5nZXMoVW5pZmllZFRtcExpdmVuZXNzJiBsaXZlbmVzcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNh
bGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHAKaW5kZXggODcyMzAwOTJlNzQyNmE2OGNhMTQ1ZjdiMmRkOGQ0NzFhMzllZTJjMy4uMmVi
MDI4NTZkMjZlYTU0M2Y5OTY2MTIxNjhjYjFlMzcxZjJjNWQ1NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKQEAgLTQy
LDE0ICs0MiwxNCBAQCBuYW1lc3BhY2UgRGVwcmVjYXRlZCB7CiAKIHZvaWQgU2NyaXB0Q2FsbEFy
Z3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsK
LSAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbV9nbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIG1fYXJndW1lbnRzLmFwcGVu
ZChqc1N0cmluZyh2bSwgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRI
YW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKiBhcmd1bWVudCkKIHsKLSAgICBWTSYg
dm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbV9nbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0cmlu
Zyh2bSwgU3RyaW5nKGFyZ3VtZW50KSkpOwogfQpAQCAtNjEsMzEgKzYxLDMxIEBAIHZvaWQgU2Ny
aXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoSlNWYWx1ZSBhcmd1bWVudCkK
IAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChsb25nIGFy
Z3VtZW50KQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV9nbG9iYWxPYmplY3QpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJl
cihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVu
ZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayht
X2V4ZWMpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBtX2Fy
Z3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBpbnQgYXJndW1lbnQpCiB7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayht
X2dsb2JhbE9iamVjdCk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50
KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
dWludDY0X3QgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2dsb2JhbE9iamVjdCk7CiAgICAgbV9hcmd1bWVudHMuYXBw
ZW5kKGpzTnVtYmVyKGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFu
ZGxlcjo6YXBwZW5kQXJndW1lbnQoaW50IGFyZ3VtZW50KQogewotICAgIEpTTG9ja0hvbGRlciBs
b2NrKG1fZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxPYmplY3QpOwogICAg
IG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCkBAIC05NSw3ICs5
NSw3IEBAIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoYm9v
bCBhcmd1bWVudCkKIH0KIAogU2NyaXB0RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNhbGwo
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIFNjcmlwdEZ1bmN0aW9uQ2FsbEhhbmRsZXIgY2FsbEhhbmRsZXIpCi0gICAgOiBTY3Jp
cHRDYWxsQXJndW1lbnRIYW5kbGVyKHRoaXNPYmplY3Quc2NyaXB0U3RhdGUoKSkKKyAgICA6IFNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXIodGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSkKICAgICAs
IG1fY2FsbEhhbmRsZXIoY2FsbEhhbmRsZXIpCiAgICAgLCBtX3RoaXNPYmplY3QodGhpc09iamVj
dCkKICAgICAsIG1fbmFtZShuYW1lKQpAQCAtMTA2LDExICsxMDYsMTEgQEAgRXhwZWN0ZWQ8SlNW
YWx1ZSwgTmFrZWRQdHI8RXhjZXB0aW9uPj4gU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKCkKIHsK
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09iamVjdCgpOwogCi0g
ICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIFZNJiB2bSA9IG1fZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+
Z2V0KG1fZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbV9uYW1lKSk7CisgICAgSlNW
YWx1ZSBmdW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldChtX2dsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgbV9uYW1lKSk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHNjb3BlLmV4Y2VwdGlvbigp
KTsKIApAQCAtMTIyLDkgKzEyMiw5IEBAIEV4cGVjdGVkPEpTVmFsdWUsIE5ha2VkUHRyPEV4Y2Vw
dGlvbj4+IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCgpCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAg
ICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CiAgICAgaWYgKG1fY2FsbEhhbmRsZXIp
Ci0gICAgICAgIHJlc3VsdCA9IG1fY2FsbEhhbmRsZXIobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKKyAgICAg
ICAgcmVzdWx0ID0gbV9jYWxsSGFuZGxlcihtX2dsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc09iamVjdCwgbV9hcmd1bWVudHMsIGV4Y2VwdGlvbik7CiAgICAg
ZWxzZQotICAgICAgICByZXN1bHQgPSBKU0M6OmNhbGwobV9leGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKKyAgICAg
ICAgcmVzdWx0ID0gSlNDOjpjYWxsKG1fZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCB0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cywgZXhjZXB0aW9uKTsKIAogICAgIGlm
IChleGNlcHRpb24pIHsKICAgICAgICAgLy8gRG8gbm90IHRyZWF0IGEgdGVybWluYXRlZCBleGVj
dXRpb24gZXhjZXB0aW9uIGFzIGhhdmluZyBhbiBleGNlcHRpb24uIEp1c3QgdHJlYXQgaXQgYXMg
YW4gZW1wdHkgcmVzdWx0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCmluZGV4IDYxNDE0YjhiZmY3NGU1NTdjMzVmZmVmYjM2NDgy
YjkzZjEzYmYzMDAuLjQ1NTY3N2QyNzU5YmFiNTNkYjNjYThlNGRhMmU4YTMzZjlkZmQzMDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNh
bGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25D
YWxsLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIERlcHJlY2F0ZWQgewogCiBjbGFzcyBK
U19FWFBPUlRfUFJJVkFURSBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyIHsKIHB1YmxpYzoKLSAg
ICBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkgOiBtX2V4
ZWMoc3RhdGUpIHsgfQorICAgIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIoSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KSA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkgeyB9
CiAKICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqKTsKICAgICB2b2lkIGFwcGVu
ZEFyZ3VtZW50KGNvbnN0IFN0cmluZyYpOwpAQCAtNTksNyArNTksNyBAQCBjbGFzcyBKU19FWFBP
UlRfUFJJVkFURSBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyIHsKIAogcHJvdGVjdGVkOgogICAg
IEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbV9hcmd1bWVudHM7Ci0gICAgSlNDOjpFeGVjU3Rh
dGUqIG1fZXhlYzsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKIAog
cHJpdmF0ZToKICAgICAvLyBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtdXN0IGJlIHN0YWNrIGFsbG9j
YXRlZCwgc28gcHJldmVudCBoZWFwCkBAIC03MCw3ICs3MCw3IEBAIGNsYXNzIEpTX0VYUE9SVF9Q
UklWQVRFIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXIgewogCiBjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBTY3JpcHRGdW5jdGlvbkNhbGwgOiBwdWJsaWMgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxl
ciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6OkpTVmFsdWUgKCpTY3JpcHRGdW5jdGlvbkNh
bGxIYW5kbGVyKShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0
YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBOYWtl
ZFB0cjxKU0M6OkV4Y2VwdGlvbj4mKTsKKyAgICB0eXBlZGVmIEpTQzo6SlNWYWx1ZSAoKlNjcmlw
dEZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlLCBjb25z
dCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
SlNDOjpBcmdMaXN0JiBhcmdzLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4mKTsKICAgICBTY3Jp
cHRGdW5jdGlvbkNhbGwoY29uc3QgU2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIFNjcmlwdEZ1bmN0aW9uQ2FsbEhhbmRsZXIgaGFuZGxlciA9IG51bGxwdHIpOwog
ICAgIEV4cGVjdGVkPEpTQzo6SlNWYWx1ZSwgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+PiBjYWxs
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRP
YmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdE9iamVjdC5j
cHAKaW5kZXggYTExMjhhYTA2ZWE4MzQxZTQ1NTFhNjUyOWY4NjBmOWIwZGFiZGEyYS4uYWU4OTVk
NWIyYjQxNGQ3MWI3MzhmMWZkOGZjOGZlNDJkMTc5OGFkYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdE9iamVjdC5jcHAKQEAgLTM4LDkgKzM4LDkgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIERlcHJlY2F0ZWQgewogCi1TY3JpcHRPYmpl
Y3Q6OlNjcmlwdE9iamVjdChFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBKU09iamVjdCogb2JqZWN0
KQotICAgIDogU2NyaXB0VmFsdWUoc2NyaXB0U3RhdGUtPnZtKCksIG9iamVjdCkKLSAgICAsIG1f
c2NyaXB0U3RhdGUoc2NyaXB0U3RhdGUpCitTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0KQorICAgIDogU2NyaXB0
VmFsdWUoZ2xvYmFsT2JqZWN0LT52bSgpLCBvYmplY3QpCisgICAgLCBtX2dsb2JhbE9iamVjdChn
bG9iYWxPYmplY3QpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9TY3JpcHRPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRPYmplY3QuaAppbmRleCAwNmQ2YTQ2NDhkZDFjN2I4NGY5ZTc0YzMyMjA2MzY1ZTFlMTZj
NDY2Li5mYjZlMjI2ODcwYzE4OGYzNGMyNDIzZDBkYWU3ZmMwNzUxMWFjNWQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0T2JqZWN0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdE9iamVjdC5oCkBAIC0zOCwxOCArMzgs
MTggQEAgbmFtZXNwYWNlIERlcHJlY2F0ZWQgewogCiBjbGFzcyBTY3JpcHRPYmplY3QgOiBwdWJs
aWMgU2NyaXB0VmFsdWUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjcmlwdE9i
amVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBTY3JpcHRPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNPYmplY3QqKTsK
ICAgICBTY3JpcHRPYmplY3QoKSA9IGRlZmF1bHQ7CiAKICAgICBvcGVyYXRvciBKU0M6OkpTT2Jq
ZWN0KigpIGNvbnN0IHsgcmV0dXJuIGpzT2JqZWN0KCk7IH0KIAogICAgIEpTQzo6SlNPYmplY3Qq
IGpzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gYXNPYmplY3QoanNWYWx1ZSgpKTsgfQotICAgIEpT
Qzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0U3RhdGU7
IH0KKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbE9iamVjdDsgfQogCiAgICAgdXNpbmcgU2NyaXB0VmFsdWU6Omhhc05vVmFsdWU7
CiAKIHByaXZhdGU6Ci0gICAgSlNDOjpFeGVjU3RhdGUqIG1fc2NyaXB0U3RhdGUgeyBudWxscHRy
IH07CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBEZXByZWNhdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAppbmRleCA0YTdmNGYzYTI2YTU0OTk0NTNjMjc2
ZmUxMmUyNjI2ZWU3M2ZlNTM4Li41ZGE2NDg5NzM0ZTY1NjE3YzQ1ZjY2MzViODY1M2VhOTFkZTli
NzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5j
cHAKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKLXN0YXRpYyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0
b3JWYWx1ZShFeGVjU3RhdGUmIHNjcmlwdFN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBpbnQgbWF4RGVw
dGgpCitzdGF0aWMgUmVmUHRyPEpTT046OlZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgaW50IG1heERlcHRoKQogewog
ICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02MSw3
ICs2MSw3IEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShF
eGVjU3RhdGUmIHNjcmlwdFN0YXRlLCBKU1ZhbHVlIHZhCiAgICAgaWYgKHZhbHVlLmlzTnVtYmVy
KCkgJiYgdmFsdWUuaXNBbnlJbnQoKSkKICAgICAgICAgcmV0dXJuIEpTT046OlZhbHVlOjpjcmVh
dGUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZS5hc0FueUludCgpKSk7CiAgICAgaWYgKHZhbHVlLmlz
U3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBKU09OOjpWYWx1ZTo6Y3JlYXRlKGFzU3RyaW5nKHZh
bHVlKS0+dmFsdWUoJnNjcmlwdFN0YXRlKSk7CisgICAgICAgIHJldHVybiBKU09OOjpWYWx1ZTo6
Y3JlYXRlKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KSk7CiAKICAgICBpZiAo
dmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBpZiAoaXNKU0FycmF5KHZhbHVlKSkgewpAQCAt
NjksMjAgKzY5LDIwIEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3JW
YWx1ZShFeGVjU3RhdGUmIHNjcmlwdFN0YXRlLCBKU1ZhbHVlIHZhCiAgICAgICAgICAgICBhdXRv
JiBhcnJheSA9ICphc0FycmF5KHZhbHVlKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFycmF5Lmxlbmd0aCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBlbGVtZW50VmFsdWUgPSBqc1RvSW5z
cGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUsIGFycmF5LmdldEluZGV4KCZzY3JpcHRTdGF0ZSwgaSks
IG1heERlcHRoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRWYWx1ZSA9IGpzVG9JbnNw
ZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QsIGFycmF5LmdldEluZGV4KGdsb2JhbE9iamVjdCwgaSks
IG1heERlcHRoKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRWYWx1ZSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICAgICAgaW5zcGVjdG9yQXJy
YXktPnB1c2hWYWx1ZShXVEZNb3ZlKGVsZW1lbnRWYWx1ZSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIGluc3BlY3RvckFycmF5OwogICAgICAgICB9Ci0gICAgICAgIFZNJiB2
bSA9IHNjcmlwdFN0YXRlLnZtKCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICAgICAgYXV0byBpbnNwZWN0b3JPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgICBhdXRvJiBvYmplY3QgPSAqdmFsdWUuZ2V0T2JqZWN0KCk7CiAgICAgICAgIFBy
b3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICAgICAgb2JqZWN0Lm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcygmb2JqZWN0LCAmc2NyaXB0U3RhdGUsIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgb2JqZWN0Lm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcygmb2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogcHJv
cGVydHlOYW1lcykgewotICAgICAgICAgICAgYXV0byBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9JbnNw
ZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSwgb2JqZWN0LmdldCgmc2NyaXB0U3RhdGUsIG5hbWUpLCBt
YXhEZXB0aCk7CisgICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0ganNUb0luc3BlY3Rv
clZhbHVlKGdsb2JhbE9iamVjdCwgb2JqZWN0LmdldChnbG9iYWxPYmplY3QsIG5hbWUpLCBtYXhE
ZXB0aCk7CiAgICAgICAgICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5zZXRWYWx1ZShu
YW1lLnN0cmluZygpLCBXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CkBAIC05NCwxMiArOTQsMTIg
QEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0
ZSYgc2NyaXB0U3RhdGUsIEpTVmFsdWUgdmEKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVm
UHRyPEpTT046OlZhbHVlPiB0b0luc3BlY3RvclZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCitSZWZQdHI8SlNPTjo6VmFsdWU+IHRvSW5zcGVjdG9yVmFsdWUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICAvLyBGSVhNRTogTWF5
YmUgd2Ugc2hvdWxkIG1vdmUgdGhlIEpTTG9ja0hvbGRlciBzdHVmZiB0byB0aGUgY2FsbGVycyBz
aW5jZSB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgSlNWYWx1ZSBkaXJlY3RseS4KICAgICAvLyBEb2lu
ZyB0aGUgbG9ja2luZyBoZXJlIG1hZGUgc2Vuc2Ugd2hlbiB3ZSB3ZXJlIHRyeWluZyB0byBhYnN0
cmFjdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG11bHRpcGxlIEphdmFTY3JpcHQgZW5naW5lcy4K
LSAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIGpzVG9JbnNwZWN0
b3JWYWx1ZShzdGF0ZSwgdmFsdWUsIEpTT046OlZhbHVlOjptYXhEZXB0aCk7CisgICAgSlNMb2Nr
SG9sZGVyIGhvbGRlcihnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFs
dWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgSlNPTjo6VmFsdWU6Om1heERlcHRoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRWYWx1ZS5oCmluZGV4IDAyZWE2NTc3ZGEyMmEzNjhlMDY0MGM4NDEyZjQxYjJhYTllYjQ5
YTUuLjE0ZjlhMTY4MWNiNWI5ZDMyYTNhY2U0MTFmYjdmYWMyODcyN2JmYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5oCkBAIC0zOSw3ICszOSw3IEBA
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPEpTT046OlZhbHVlPiB0b0luc3BlY3RvclZhbHVl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK0pTX0VYUE9SVF9QUklWQVRFIFJlZlB0
cjxKU09OOjpWYWx1ZT4gdG9JbnNwZWN0b3JWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpKU1ZhbHVlKTsKIH0KIAogbmFtZXNwYWNlIERlcHJlY2F0ZWQgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IDQ4ODA2NTkyNjYwZGYxYWVj
NDkyNWQwODk2ODZlZWE1YzVjNzFhZTIuLjNhZjlmM2NjOWE2MjcwY2ExOGVmNjhjYWJjNDNhMDhj
NTRjODM0ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5h
bWVzLmgKQEAgLTEwMSw3ICsxMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhVaW50
MzJBcnJheSkgXAogICAgIG1hY3JvKEZsb2F0MzJBcnJheSkgXAogICAgIG1hY3JvKEZsb2F0NjRB
cnJheSkgXAotICAgIG1hY3JvKGV4ZWMpIFwKKyAgICBtYWNybyhnbG9iYWxPYmplY3QpIFwKICAg
ICBtYWNybyhnZW5lcmF0b3IpIFwKICAgICBtYWNybyhnZW5lcmF0b3JOZXh0KSBcCiAgICAgbWFj
cm8oZ2VuZXJhdG9yU3RhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAppbmRleCBmMmU0MzA2MGE2YTJiMDlkMzY0MzU4NjFiMDc0ODUwNDMxNTBh
NWZlLi4xM2Y4YmMyMDZiYmUxYTM1M2U1NjBiZjAxMjA0ZjRlM2JmMWVkMjY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xMDA5LDYgKzEw
MDksNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKICNlbmRpZgogICAgICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFjY2Vzcy5jYWxsTGlua0lu
Zm8oKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdGF0ZS5tX2dsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsK
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBHZXR0ZXIpCiAgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2
YWx1ZVJlZ3MpOwpAQCAtMTA0NiwxOCArMTA0NywyMSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgLy8gQ2hl
Y2sgaWYgaXQgaXMgYSBzdXBlciBhY2Nlc3MKICAgICAgICAgICAgIEdQUlJlZyBiYXNlRm9yQ3Vz
dG9tR2V0R1BSID0gYmFzZUdQUiAhPSB0aGlzR1BSID8gdGhpc0dQUiA6IGJhc2VGb3JHZXRHUFI7
CiAKLSAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMp
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOworICAgICAgICAg
ICAgLy8gZ2V0dGVyOiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgICAgICAg
ICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwogICAgICAgICAgICAg
Ly8gQ3VzdG9tIHZhbHVlcyBhcmUgcGFzc2VkIHRoZSBzbG90QmFzZSAodGhlIHByb3BlcnR5IGhv
bGRlciksIGN1c3RvbSBhY2Nlc3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhpc1ZhdWxlIChyZWNpZXZl
cikuCiAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZGlmZmVyZW5jZXMgaW4gY3Vz
dG9tIHZhbHVlcyBhbmQgY3VzdG9tIGFjY2Vzc29ycy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwMTQKICAgICAgICAgICAgIEdQUlJl
ZyBiYXNlRm9yQ3VzdG9tID0gbV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9
PSBDdXN0b21WYWx1ZVNldHRlciA/IGJhc2VGb3JBY2Nlc3NHUFIgOiBiYXNlRm9yQ3VzdG9tR2V0
R1BSOyAKKyAgICAgICAgICAgIC8vIFdlIGVtaXQgSlNHbG9iYWxPYmplY3QKICAgICAgICAgICAg
IGlmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vz
c29yR2V0dGVyKSB7CiAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAogICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlRm9yQ3VzdG9tKSwKICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCiAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKGJhc2VGb3JDdXN0b20pLAogICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgfQpAQCAtMTE4OSw3ICsx
MTkzLDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxs
KCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcp
IHsKLSAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENh
cGFjaXR5KT4oYmFzZUdQUik7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eSk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0p
LCBiYXNlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9u
KHZtKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewpAQCAtMTIwMCw4ICsxMjA1LDggQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUlt
cGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIHJl
YWxsb2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkKICAgICAgICAgICAg
ICAgICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3RvcmFnZSkuCi0g
ICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKT4oCi0gICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplIC8g
c2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9y
YWdlKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIGJhc2VHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5jcHAKaW5kZXggOTI1N2ZjMjI2NjUyOWY4NjEzN2Q1ZGFkOGM5MjQ5NzE4MzkwNDc0MC4uYTE3
NGUyNDczZjc1MzBjYzc3NzE1M2M2M2IxMzEzMzBlZTU4ZjU4OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMu
Y3BwCkBAIC02MCw2ICs2MCw3IEBAIGNsYXNzIFNsb3dQYXRoQ2FsbEdlbmVyYXRvcldpdGhBcmd1
bWVudHMgOiBwdWJsaWMgQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXM6OlNsb3dQCiAgICAgICAgIGpp
dC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKIAogICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHM8RnVuY3Rpb25UeXBlPihzdGQ6OmdldDxBcmd1bWVudHNJbmRleD4obV9hcmd1bWVudHMpLi4u
KTsKKyAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHN0YXRlLm1fdm0pOwogCiAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKICAgICAgICAgYXV0byBmdW5jdGlvbiA9IG1fZnVuY3Rpb247CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDYwY2M2NWU2NDQ1N2Vk
NDM0MDE0YzNhNzlhZmRlNjRkOGFiNjI4M2IuLjA5ZjUwNzM4ZGU1ZDVlZmJmM2ZkMTQxNTdiMjc1
ZjJiYzQyYWRlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCkBAIC01ODksNyArNTg5LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zh
cik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZS5tX3Jlc29sdmVUeXBlICE9
IExvY2FsQ2xvc3VyZVZhcik7CiAKLSAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6
OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5t
X2xvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGJ5dGVjb2RlLm1fcmVzb2x2ZVR5
cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAg
UmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpLCBieXRlY29kZS5tX2xvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGJ5dGVj
b2RlLm1fcmVzb2x2ZVR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24p
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAK
ICAgICAgICAgICAgIG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUgPSBvcC50eXBlOwpAQCAtNjI0LDcg
KzYyNCw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zh
cik7Ci0gICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUo
bV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgYnl0ZWNvZGUubV9sb2NhbFNjb3BlRGVwdGgs
IHNjb3BlLCBpZGVudCwgR2V0LCBieXRlY29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSwg
SW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAgICBSZXNv
bHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QuZ2V0KCks
IGJ5dGVjb2RlLm1fbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgYnl0ZWNvZGUu
bV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCksIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlh
bGl6YXRpb24pOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CiAKICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8o
Ynl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG9wLnR5cGUsIGJ5dGVjb2RlLm1f
Z2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CkBAIC02NTgsNyArNjU4LDcgQEAgYm9v
bCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmsKIAogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgIG1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Nj
b3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgYnl0ZWNv
ZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zY29wZURlcHRoKCksIHNjb3BlLCBpZGVudCwg
UHV0LCBieXRlY29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSwgYnl0ZWNvZGUubV9nZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9
IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC5nZXQoKSwgYnl0ZWNvZGUu
bV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zY29wZURlcHRoKCksIHNjb3BlLCBpZGVudCwgUHV0
LCBieXRlY29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSwgYnl0ZWNvZGUubV9nZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwogCiAgICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dElu
Zm8gPSBHZXRQdXRJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBvcC50
eXBlLCBieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwpAQCAtNjkx
LDcgKzY5MSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9jYWxTY29wZURlcHRoID0gYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0
aC5zY29wZURlcHRoKCk7CiAgICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggdHlwZSBwcm9m
aWxpbmcgbWF5IGJlIHByb2ZpbGluZyBlaXRoZXIgYSBHZXQgb3IgYSBQdXQsIHdlIGNhbiBhbHdh
eXMgY2xhaW0gYSBHZXQgYmVjYXVzZQogICAgICAgICAgICAgICAgIC8vIHdlJ3JlIGFic3RyYWN0
bHkgInJlYWQiaW5nIGZyb20gYSBKU1Njb3BlLgotICAgICAgICAgICAgICAgIFJlc29sdmVPcCBv
cCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBsb2NhbFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCBieXRlY29kZS5tX3Jlc29sdmVU
eXBlLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAg
ICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmpl
Y3QuZ2V0KCksIGxvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGJ5dGVjb2RlLm1f
cmVzb2x2ZVR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pOwogICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogCiAg
ICAgICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZhciB8fCBvcC50eXBlID09IE1v
ZHVsZVZhcikKQEAgLTg3MywxOSArODczLDE4IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFu
dElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJCiB7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIGZvciAoY29uc3Qg
YXV0byYgZW50cnkgOiBjb25zdGFudHMpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllclNldCYg
c2V0ID0gZW50cnkuZmlyc3Q7CiAKICAgICAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwotICAgICAgICBKU1NldCoganNTZXQgPSBKU1NldDo6Y3JlYXRlKGV4
ZWMsIHZtLCBzZXRTdHJ1Y3R1cmUsIHNldC5zaXplKCkpOworICAgICAgICBKU1NldCoganNTZXQg
PSBKU1NldDo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIHNldFN0cnVjdHVyZSwgc2V0LnNpemUo
KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBzZXRFbnRyeSA6IHNldCkgewogICAgICAgICAgICAgSlNTdHJp
bmcqIGpzU3RyaW5nID0ganNPd25lZFN0cmluZyh2bSwgc2V0RW50cnkuZ2V0KCkpOyAKLSAgICAg
ICAgICAgIGpzU2V0LT5hZGQoZXhlYywganNTdHJpbmcpOworICAgICAgICAgICAganNTZXQtPmFk
ZChnbG9iYWxPYmplY3QsIGpzU3RyaW5nKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVy
c1tlbnRyeS5zZWNvbmRdLnNldCh2bSwgdGhpcywganNTZXQpOwpAQCAtODk3LDcgKzg5Niw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiYgY29uc3RhCiAgICAgVk0mIHZtID0gKm1fdm07CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIEFTU0VSVChjb25zdGFudHMuc2l6ZSgp
ID09IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5zaXplKCkpOwogICAgIHNpemVf
dCBjb3VudCA9IGNvbnN0YW50cy5zaXplKCk7CkBAIC05MjMsNyArOTIxLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4+JiBjb25zdGEKIAogICAgICAgICAgICAgICAgICAgICBjb25zdGFudCA9IGNsb25lOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXV0byogZGVzY3JpcHRvciA9IGpzRHluYW1pY0Nh
c3Q8SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IqPih2bSwgY2VsbCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byogdGVtcGxhdGVPYmplY3QgPSB0b3BMZXZlbEV4ZWN1dGFibGUtPmNyZWF0
ZVRlbXBsYXRlT2JqZWN0KGV4ZWMsIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgICAgICAgICBh
dXRvKiB0ZW1wbGF0ZU9iamVjdCA9IHRvcExldmVsRXhlY3V0YWJsZS0+Y3JlYXRlVGVtcGxhdGVP
YmplY3QoZ2xvYmFsT2JqZWN0LCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgICAgICAgICAgICAgY29u
c3RhbnQgPSB0ZW1wbGF0ZU9iamVjdDsKICAgICAgICAgICAgICAgICB9CkBAIC0xOTA2LDE0ICsx
OTA0LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01v
ZGUpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0Nh
bGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKK3ZvaWQg
Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENhbGxM
aW5rSW5mbyogaW5jb21pbmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1l
KTsKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgZW5zdXJlSklU
RGF0YShsb2NrZXIpLm1faW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nKTsKIH0KIAotdm9pZCBD
b2RlQmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZy
YW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKiBpbmNvbWluZykKK3ZvaWQgQ29kZUJsb2NrOjpsaW5r
SW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBo
aWNDYWxsTm9kZSogaW5jb21pbmcpCiB7CiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZy
YW1lKTsKICAgICB7CkBAIC0xOTQyLDcgKzE5NDAsNyBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5r
SW5jb21pbmdDYWxscygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxv
Y2s6OmxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlu
a0luZm8qIGluY29taW5nKQordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoQ2FsbEZy
YW1lKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qIGluY29taW5nKQogewogICAgIG5v
dGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7CiAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMu
cHVzaChpbmNvbWluZyk7CkBAIC0yMTY3LDcgKzIxNjUsNyBAQCBjbGFzcyBSZWN1cnNpb25DaGVj
a0Z1bmN0b3IgewogICAgIG11dGFibGUgYm9vbCBtX2RpZFJlY3Vyc2U7CiB9OwogCi12b2lkIENv
ZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUpCit2b2lk
IENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUpCiB7
CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2Nr
KCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5k
ZXggNDIzM2VhMjFlOTQ3ODEwNDQzMDcyMmM0MzU0YjM1MWRlZjQxNDA4OC4uZDIwMGZkNTlmNDI5
YTM4M2RhOWFkN2M3ZmZhYzA5Y2IyNjJiY2YzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaApAQCAtMzYxLDExICszNjEsMTEgQEAgY2xhc3MgQ29kZUJsb2Nr
IDogcHVibGljIEpTQ2VsbCB7CiAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAKICNp
ZiBFTkFCTEUoSklUKQotICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxl
ckZyYW1lLCBDYWxsTGlua0luZm8qKTsKLSAgICB2b2lkIGxpbmtJbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKik7CisgICAg
dm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5m
byopOworICAgIHZvaWQgbGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSogY2Fs
bGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
Ci0gICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50
Q2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKENhbGxGcmFtZSogY2Fs
bGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7CiAKICAgICBjb25zdCBJbnN0cnVjdGlvbiog
b3V0T2ZMaW5lSnVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiogcGMpOwogICAgIGludCBvdXRP
ZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYyk7CkBAIC05MTQsNyArOTE0LDcg
QEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgCiAgICAgQ29kZUJsb2Nr
KiBzcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpOwogICAgIAotICAgIHZvaWQgbm90aWNlSW5j
b21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUpOworICAgIHZvaWQgbm90aWNlSW5jb21p
bmdDYWxsKENhbGxGcmFtZSogY2FsbGVyRnJhbWUpOwogICAgIAogICAgIGRvdWJsZSBvcHRpbWl6
YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKCk7CiAKQEAgLTEwMjcsNyArMTAyNyw3IEBAIGNs
YXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJl
RGF0YT4gbV9yYXJlRGF0YTsKIH07CiAKLWlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjpyKGlu
dCBpbmRleCkKK2lubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKGludCBpbmRleCkKIHsKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwogICAgIGlmIChjb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkKQEAgLTEwMzUsMTggKzEwMzUs
MTggQEAgaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoaW50IGluZGV4KQogICAgIHJldHVy
biB0aGlzW2luZGV4XTsKIH0KIAotaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnIoVmlydHVh
bFJlZ2lzdGVyIHJlZykKK2lubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjpyKFZpcnR1YWxSZWdp
c3RlciByZWcpCiB7CiAgICAgcmV0dXJuIHIocmVnLm9mZnNldCgpKTsKIH0KIAotaW5saW5lIFJl
Z2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQoraW5saW5lIFJlZ2lzdGVy
JiBDYWxsRnJhbWU6OnVuY2hlY2tlZFIoaW50IGluZGV4KQogewogICAgIFJFTEVBU0VfQVNTRVJU
KGluZGV4IDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwogICAgIHJldHVybiB0aGlzW2lu
ZGV4XTsKIH0KIAotaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoVmlydHVh
bFJlZ2lzdGVyIHJlZykKK2lubGluZSBSZWdpc3RlciYgQ2FsbEZyYW1lOjp1bmNoZWNrZWRSKFZp
cnR1YWxSZWdpc3RlciByZWcpCiB7CiAgICAgcmV0dXJuIHVuY2hlY2tlZFIocmVnLm9mZnNldCgp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RF
dmFsQ29kZUNhY2hlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RF
dmFsQ29kZUNhY2hlLmNwcAppbmRleCAxNDQ4NjQwMDczOGQyZmQ5M2M0MjlkYmM0M2RmOWE5ZGM2
MjFmNjJhLi42ZjBhY2NhZGEwZTgwODYyZmRkYmRkN2I3NGE1ODM0MzFkZjlmZjE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2Fj
aGUuY3BwCkBAIC0zMCwxMyArMzAsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgRGly
ZWN0RXZhbENvZGVDYWNoZTo6c2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIs
IGNvbnN0IFN0cmluZyYgZXZhbFNvdXJjZSwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBE
aXJlY3RFdmFsRXhlY3V0YWJsZSogZXZhbEV4ZWN1dGFibGUpCit2b2lkIERpcmVjdEV2YWxDb2Rl
Q2FjaGU6OnNldFNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvd25l
ciwgY29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgs
IERpcmVjdEV2YWxFeGVjdXRhYmxlKiBldmFsRXhlY3V0YWJsZSkKIHsKICAgICBpZiAoIWV2YWxF
eGVjdXRhYmxlLT5hbGxvd0RpcmVjdEV2YWxDYWNoZSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgIG1fY2FjaGVNYXAuc2V0KENhY2hlS2V5
KGV2YWxTb3VyY2UsIGNhbGxTaXRlSW5kZXgpLCBXcml0ZUJhcnJpZXI8RGlyZWN0RXZhbEV4ZWN1
dGFibGU+KGV4ZWMtPnZtKCksIG93bmVyLCBldmFsRXhlY3V0YWJsZSkpOworICAgIG1fY2FjaGVN
YXAuc2V0KENhY2hlS2V5KGV2YWxTb3VyY2UsIGNhbGxTaXRlSW5kZXgpLCBXcml0ZUJhcnJpZXI8
RGlyZWN0RXZhbEV4ZWN1dGFibGU+KGdsb2JhbE9iamVjdC0+dm0oKSwgb3duZXIsIGV2YWxFeGVj
dXRhYmxlKSk7CiB9CiAKIHZvaWQgRGlyZWN0RXZhbENvZGVDYWNoZTo6Y2xlYXIoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EaXJlY3RFdmFsQ29kZUNhY2hlLmgK
aW5kZXggMGQ0ODQ2ZDU0ODFiZTViM2RlNTVkYTc5MzBkMmY0YzAwMDkyNzdmNC4uMGM1YjQxOWQ4
ZjM3MTNlZmUwZDJiNGNjYjM2NzY0ZjgyZDRmODk1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RpcmVjdEV2YWxDb2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGlyZWN0RXZhbENvZGVDYWNoZS5oCkBAIC04OSwxMCArODks
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbV9jYWNoZU1hcC5pbmxp
bmVHZXQoQ2FjaGVLZXkoZXZhbFNvdXJjZSwgY2FsbFNpdGVJbmRleCkpLmdldCgpOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
b3duZXIsIGNvbnN0IFN0cmluZyYgZXZhbFNvdXJjZSwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4LCBEaXJlY3RFdmFsRXhlY3V0YWJsZSogZXZhbEV4ZWN1dGFibGUpCisgICAgICAgIHZvaWQg
c2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFN0
cmluZyYgZXZhbFNvdXJjZSwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBEaXJlY3RFdmFs
RXhlY3V0YWJsZSogZXZhbEV4ZWN1dGFibGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICht
X2NhY2hlTWFwLnNpemUoKSA8IG1heENhY2hlRW50cmllcykKLSAgICAgICAgICAgICAgICBzZXRT
bG93KGV4ZWMsIG93bmVyLCBldmFsU291cmNlLCBjYWxsU2l0ZUluZGV4LCBldmFsRXhlY3V0YWJs
ZSk7CisgICAgICAgICAgICAgICAgc2V0U2xvdyhnbG9iYWxPYmplY3QsIG93bmVyLCBldmFsU291
cmNlLCBjYWxsU2l0ZUluZGV4LCBldmFsRXhlY3V0YWJsZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlTWFwLmlzRW1wdHkoKTsgfQpA
QCAtMTA0LDcgKzEwNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IG1heENhY2hlRW50cmllcyA9IDY0OwogCi0gICAgICAgIHZv
aWQgc2V0U2xvdyhFeGVjU3RhdGUqLCBKU0NlbGwqIG93bmVyLCBjb25zdCBTdHJpbmcmIGV2YWxT
b3VyY2UsIENhbGxTaXRlSW5kZXgsIERpcmVjdEV2YWxFeGVjdXRhYmxlKik7CisgICAgICAgIHZv
aWQgc2V0U2xvdyhKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3duZXIsIGNvbnN0IFN0cmluZyYg
ZXZhbFNvdXJjZSwgQ2FsbFNpdGVJbmRleCwgRGlyZWN0RXZhbEV4ZWN1dGFibGUqKTsKIAogICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8Q2FjaGVLZXksIFdyaXRlQmFycmllcjxEaXJlY3RFdmFsRXhl
Y3V0YWJsZT4sIENhY2hlS2V5OjpIYXNoLCBDYWNoZUtleTo6SGFzaFRyYWl0cz4gRXZhbENhY2hl
TWFwOwogICAgICAgICBFdmFsQ2FjaGVNYXAgbV9jYWNoZU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKaW5kZXggZGU2NzJmZTFh
YThiODU5MWFmYmQyZDZjMGE4MDBhYTk2YThmOWM3Ni4uZTUzNjFiNjFhMjVmMDBmNGMzMjliNzk3
MmE3MDgzMjJiMTA2ZWY4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5jcHAKQEAgLTM5LDkgKzM5LDkgQEAgSlNGdW5jdGlvbiogSW5s
aW5lQ2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCgpIGNvbnN0CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLUpTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVlRm9yQ2FsbEZyYW1lKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVl
Rm9yQ2FsbEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKSBjb25zdAogewotICAgIHJldHVybiBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LnJlY292ZXIoZXhlYykpOworICAgIHJl
dHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LnJlY292ZXIoY2FsbEZyYW1l
KSk7CiB9CiAKIENvZGVCbG9ja0hhc2ggSW5saW5lQ2FsbEZyYW1lOjpoYXNoKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAppbmRl
eCAxMmU3MDg2MzEwMjZjN2ZkZWIwZDg5MDQwM2U2NTM5NGMzZTA2NDkwLi45NzUwOGJiZjBjNDVj
Yjk3YTQ3ODUxNTk3MDQxNzFkZGY2ZGQxZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFj
ZSBKU0Mgewogc3RydWN0IElubGluZUNhbGxGcmFtZTsKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNz
IEpTRnVuY3Rpb247Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CkBAIC0yMDgsNyArMjA3LDcgQEAgc3RydWN0
IElubGluZUNhbGxGcmFtZSB7CiAgICAgSlNGdW5jdGlvbiogY2FsbGVlQ29uc3RhbnQoKSBjb25z
dDsKICAgICAKICAgICAvLyBHZXQgdGhlIGNhbGxlZSBnaXZlbiBhIG1hY2hpbmUgY2FsbCBmcmFt
ZSB0byB3aGljaCB0aGlzIElubGluZUNhbGxGcmFtZSBiZWxvbmdzLgotICAgIEpTRnVuY3Rpb24q
IGNhbGxlZUZvckNhbGxGcmFtZShFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU0Z1bmN0aW9uKiBj
YWxsZWVGb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKikgY29uc3Q7CiAgICAgCiAgICAgQ1N0cmluZyBp
bmZlcnJlZE5hbWUoKSBjb25zdDsKICAgICBDb2RlQmxvY2tIYXNoIGhhc2goKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9u
QWxsb2NhdGlvblByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAppbmRleCA5OGY5MjgxYTkzYTM4NzQ4MzU0
MGNlZTA1MDhhOGZjZDZhNTc0MGQzLi5kYThkYTlhYjI5YjdiMWMyMDMwMGJiYzEwOGIxZGE4OWM1
MTYyMWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oCkBAIC00NSw3ICs0
NSw3IEBAIGNsYXNzIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZSB7CiAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CiB9OwogCi1pbmxpbmUgU3RydWN0dXJl
KiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGU6OmNyZWF0ZUFsbG9jYXRpb25TdHJ1
Y3R1cmVGcm9tQmFzZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2Vs
bCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSkK
K2lubGluZSBTdHJ1Y3R1cmUqIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZTo6Y3Jl
YXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGJh
c2VHbG9iYWxPYmplY3QsIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVj
dHVyZSogYmFzZVN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoIW1fc3RydWN0dXJlIHx8IG1fc3Ry
dWN0dXJlLmdldCgpLT5jbGFzc0luZm8oKSAhPSBiYXNlU3RydWN0dXJlLT5jbGFzc0luZm8oKSk7
CiAgICAgQVNTRVJUKGJhc2VTdHJ1Y3R1cmUtPmhhc01vbm9Qcm90bygpKTsKQEAgLTU2LDcgKzU2
LDcgQEAgaW5saW5lIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxl
OjpjcmVhdGVBbGxvY2F0aW9uU3RydWN0dXJlRnIKICAgICBpZiAocHJvdG90eXBlID09IGJhc2VT
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKQogICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNlU3Ry
dWN0dXJlOwogICAgIGVsc2UKLSAgICAgICAgc3RydWN0dXJlID0gdm0uc3RydWN0dXJlQ2FjaGUu
ZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgYmFzZVN0cnVjdHVyZSk7CisgICAgICAgIHN0cnVjdHVyZSA9IHZtLnN0cnVj
dHVyZUNhY2hlLmVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoYmFz
ZUdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlKTsKIAogICAgIC8vIEVuc3Vy
ZSB0aGF0IGlmIGFub3RoZXIgdGhyZWFkIHNlZXMgdGhlIHN0cnVjdHVyZSwgaXQgd2lsbCBzZWUg
aXQgcHJvcGVybHkgY3JlYXRlZC4KICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldC5jcHAKaW5kZXggNDc1MTE2MWIwYmQ2MjFkNzdiMmEzMzAxODM5ZWM1ZjUx
YTMyNDhiZS4uY2JlMDg0OWI0Zjg5MTdmMjljNmI3NTQzN2IxMjMxYWI2MTdiZjBhNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuY3BwCkBAIC0zMzUsMTAgKzMzNSwxMCBAQCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnMoCiB9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKIAogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJv
cGVydHlNaXNzKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgcmV0dXJu
IGdlbmVyYXRlQ29uZGl0aW9ucygKLSAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgaGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwg
aGVhZFN0cnVjdHVyZSwgbnVsbHB0ciwKICAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVy
dHlDb25kaXRpb24+JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsKICAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9CiAgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25k
aXRpb246OkFic2VuY2UpOwpAQCAtMzUwLDEwICszNTAsMTAgQEAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKAogfQogCiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3MoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogaGVh
ZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICByZXR1cm4gZ2VuZXJh
dGVDb25kaXRpb25zKAotICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBo
ZWFkU3RydWN0dXJlLCBudWxscHRyLAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBoZWFkU3Ry
dWN0dXJlLCBudWxscHRyLAogICAgICAgICBbJl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbj4mIGNvbmRpdGlvbnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJvb2wgewogICAgICAgICAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0KICAgICAgICAgICAgICAgICBnZW5l
cmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6
QWJzZW5jZU9mU2V0RWZmZWN0KTsKQEAgLTM2NSwxMSArMzY1LDExIEBAIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzcygKIH0K
IAogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQogewogICAgIHJldHVybiBnZW5lcmF0ZUNvbmRpdGlvbnMoCi0gICAgICAg
IHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGhlYWRTdHJ1Y3R1cmUsIHByb3RvdHlw
ZSwKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLAog
ICAgICAgICBbJl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlvbnMs
IEpTT2JqZWN0KiBvYmplY3QpIC0+IGJvb2wgewogICAgICAgICAgICAgUHJvcGVydHlDb25kaXRp
b246OktpbmQga2luZCA9CiAgICAgICAgICAgICAgICAgb2JqZWN0ID09IHByb3RvdHlwZSA/IFBy
b3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSA6IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOwpA
QCAtMzgzLDExICszODMsMTEgQEAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQoCiB9CiAKIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9t
KAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
dW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAot
ICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBw
cm90b3R5cGUsCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIGhlYWRTdHJ1Y3R1cmUsIHByb3Rv
dHlwZSwKICAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+JiBjb25k
aXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsKICAgICAgICAgICAgIGF1dG8ga2lu
ZCA9IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOwogICAgICAgICAgICAgaWYgKG9iamVjdCA9
PSBwcm90b3R5cGUpIHsKQEAgLTQyNSwxNCArNDI1LDE0IEBAIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAog
fQogCiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JJbnN0
YW5jZU9mKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGhl
YWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCiAgICAgYm9vbCBzaG91bGRIaXQpCiB7
CiAgICAgYm9vbCBkaWRIaXQgPSBmYWxzZTsKICAgICBpZiAoT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiU2VhcmNoaW5nIGZvciBw
cm90b3R5cGUgIiwgSlNWYWx1ZShwcm90b3R5cGUpLCAiIHN0YXJ0aW5nIHdpdGggc3RydWN0dXJl
ICIsIFJhd1BvaW50ZXIoaGVhZFN0cnVjdHVyZSksICIgd2l0aCBzaG91bGRIaXQgPSAiLCBzaG91
bGRIaXQsICJcbiIpOwogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IHJlc3VsdCA9IGdl
bmVyYXRlQ29uZGl0aW9ucygKLSAgICAgICAgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgaGVhZFN0cnVjdHVyZSwgc2hvdWxkSGl0ID8gcHJvdG90eXBlIDogbnVsbHB0ciwKKyAgICAg
ICAgdm0sIGdsb2JhbE9iamVjdCwgaGVhZFN0cnVjdHVyZSwgc2hvdWxkSGl0ID8gcHJvdG90eXBl
IDogbnVsbHB0ciwKICAgICAgICAgWyZdIChWZWN0b3I8T2JqZWN0UHJvcGVydHlDb25kaXRpb24+
JiBjb25kaXRpb25zLCBKU09iamVjdCogb2JqZWN0KSAtPiBib29sIHsKICAgICAgICAgICAgIGlm
IChPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkVuY291bnRlcmVkIG9iamVjdDogIiwgUmF3UG9pbnRlcihvYmplY3Qp
LCAiXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgKaW5kZXggZjUzNTc4N2EwMWRlZGM4ZDZmNWRl
ZDYyNmVhYzgwZDZmOGQ3NzU2NS4uMzhiN2MxMjA4ZDE5ZWFlZWJmNDQ2Y2IxNTdkNjM4MzkwOWRi
NjU1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgKQEAgLTE2OCwxOCArMTY4LDE4IEBAIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0aW9uRm9yU2VsZkVxdWl2YWxlbmNlKAog
ICAgIFZNJiwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7CiAKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9u
c0ZvclByb3BlcnR5TWlzcygKLSAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgVk0m
LCBKU0NlbGwqIG93bmVyLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVy
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBn
ZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgVk0mLCBKU0NlbGwq
IG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOworICAgIFZNJiwgSlNDZWxsKiBvd25lciwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwogT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVy
dHlIaXQoCi0gICAgVk0mLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhl
YWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgVk0mLCBKU0NlbGwqIG93bmVy
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHBy
b3RvdHlwZSwKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9t
KAotICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3Ry
dWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIFZNJiwgSlNDZWxsKiBvd25lciwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5
cGUsCiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAK
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0Zvckluc3RhbmNl
T2YoCi0gICAgVk0mLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGJvb2wgc2hvdWxkSGl0KTsKKyAgICBWTSYs
IEpTQ2VsbCogb3duZXIsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJl
LCBKU09iamVjdCogcHJvdG90eXBlLCBib29sIHNob3VsZEhpdCk7CiAKIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZUVxdWl2YWxlbmNlQ29u
Y3VycmVudGx5KAogICAgIFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCA4YzRiOWI4YmQxNDcwODgz
ZjNkMDQ2ZDM3MmU1MGY3Y2M1YzRkMjViLi4yYzJhZGI1OWNmOGM5NGNiZDgyNGM5ZmMzM2NkNTVj
Mzk4ZTExNDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTIxMCwxMSArMjEwLDEyIEBAIHZvaWQgQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCkKICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvT1NSRXhpdEV4Y2VwdGlvbkhhbmRsZXIsIG9yaWdp
bmFsSGFuZGxlci5uYXRpdmVDb2RlKTsKICAgICAgICAgICAgIH0pOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGppdC0+c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0aW9uSGFuZGxl
cik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LT5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRp
b25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZt
X3ZtKSk7CisgICAgICAgIGppdC0+cHJlcGFyZUNhbGxPcGVyYXRpb24obV92bSk7CiAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCA9IGppdC0+Y2Fs
bChPcGVyYXRpb25QdHJUYWcpOwogICAgICAgICBqaXQtPmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIGppdC0+anVtcFRvRXhjZXB0aW9uSGFuZGxlcihtX3ZtKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCmluZGV4IDZiZTZkZTg2MzE3ODRiNGNiYTE1ZTNmYWI0NjM0MWYzODg4ODc4ZDEuLjg0ZDFh
M2RkZWM5ZTY5NDRiZWZiMTdhMjRhMTkzMjczZjk3YTUwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCkBAIC0yNjgsNyArMjY4
LDcgQEAgaW5saW5lIEpfSklUT3BlcmF0aW9uX0VTc2lKSSBhcHByb3ByaWF0ZU9wdGltaXppbmdH
ZXRCeUlkRnVuY3Rpb24oQWNjZXNzVHlwZSB0eXAKICAgICB9CiB9CiAKLWlubGluZSBKX0pJVE9w
ZXJhdGlvbl9FSkkgYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bmN0aW9uKEFjY2Vzc1R5cGUg
dHlwZSkKK2lubGluZSBKX0pJVE9wZXJhdGlvbl9HSkkgYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJ
ZEZ1bmN0aW9uKEFjY2Vzc1R5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCmluZGV4IDM5N2Nh
MTc1MWZkZDBhOGMwZGI1NmU3OWYxNzU2ZDA4YWU5Mjc0MGMuLmRmYzhhNDBmNjhhM2E3NDA1ZTE4
OTRiMzc0NTYxYzdmY2Q4ZDVmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtMTg5
LDIxICsxODksMjAgQEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZTo6bGluayhWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIHQKIH0KIAogVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29k
ZSgKLSAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgCisgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09i
amVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBm
dW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQogewogICAgIFBhcnNlckVy
cm9yIGVycm9yOwotICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICBhdXRvJiBnbG9iYWxPYmpl
Y3QgPSAqZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIENvZGVDYWNoZSogY29kZUNhY2hlID0gdm0uY29kZUNhY2hlKCk7Ci0g
ICAgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlID0gZ2xv
YmFsT2JqZWN0LmRlZmF1bHRDb2RlR2VuZXJhdGlvbk1vZGUoKTsKKyAgICBPcHRpb25TZXQ8Q29k
ZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUgPSBnbG9iYWxPYmplY3QtPmRlZmF1
bHRDb2RlR2VuZXJhdGlvbk1vZGUoKTsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGNvZGVDYWNoZS0+Z2V0VW5saW5rZWRHbG9iYWxGdW5jdGlvbkV4ZWN1dGFi
bGUodm0sIG5hbWUsIHNvdXJjZSwgY29kZUdlbmVyYXRpb25Nb2RlLCBmdW5jdGlvbkNvbnN0cnVj
dG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBlcnJvcik7CiAKLSAgICBpZiAoZ2xvYmFsT2JqZWN0
Lmhhc0RlYnVnZ2VyKCkpCi0gICAgICAgIGdsb2JhbE9iamVjdC5kZWJ1Z2dlcigpLT5zb3VyY2VQ
YXJzZWQoJmV4ZWMsIHNvdXJjZS5wcm92aWRlcigpLCBlcnJvci5saW5lKCksIGVycm9yLm1lc3Nh
Z2UoKSk7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+aGFzRGVidWdnZXIoKSkKKyAgICAgICAgZ2xv
YmFsT2JqZWN0LT5kZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoZ2xvYmFsT2JqZWN0LCBzb3VyY2Uu
cHJvdmlkZXIoKSwgZXJyb3IubGluZSgpLCBlcnJvci5tZXNzYWdlKCkpOwogCiAgICAgaWYgKGVy
cm9yLmlzVmFsaWQoKSkgewotICAgICAgICBleGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0
KCZnbG9iYWxPYmplY3QsIHNvdXJjZSwgb3ZlcnJpZGVMaW5lTnVtYmVyKTsKKyAgICAgICAgZXhj
ZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChnbG9iYWxPYmplY3QsIHNvdXJjZSwgb3ZlcnJp
ZGVMaW5lTnVtYmVyKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5oCmluZGV4IDA2NzgwNTNkNGM3ODhkYjE0NmQwMDM2MzZkNWI0MTYzZTgwNWY0
YWUuLjU0ZjAwNTM1MzcwYzVhOGMzNWUzM2E1OGNiOTlmODM2MWU3ZmU5YTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5oCkBAIC0xMjAsNyArMTIwLDcgQEAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgUGFyc2VyRXJyb3ImLCBT
b3VyY2VQYXJzZU1vZGUpOwogCiAgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBmcm9tR2xvYmFsQ29kZSgKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYsIEV4ZWNTdGF0ZSYs
IGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdComIGV4Y2VwdGlvbiwgCisgICAgICAgIGNvbnN0
IElkZW50aWZpZXImLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVj
dComIGV4Y2VwdGlvbiwgCiAgICAgICAgIGludCBvdmVycmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFs
PGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbik7CiAKICAgICBT
b3VyY2VDb2RlIGxpbmtlZFNvdXJjZUNvZGUoY29uc3QgU291cmNlQ29kZSYpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCmluZGV4
IDQ5NTRmZTI4MmRhOWNiOWJmNDBjYTFlNzhjYTU3NTdjYjVlOGRhMTIuLmM1Y2E0ZGUxZTRiMzYx
MTIxNGMzNWFiMWVhMzJkYzFjYmY0NWYzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTMxLDI2ICszMSwyNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVyKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKK0pTVmFsdWUgVmFsdWVSZWNvdmVyeTo6cmVjb3ZlcihDYWxsRnJhbWUqIGNh
bGxGcmFtZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CiAgICAgY2FzZSBE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBleGVjLT5yKHZpcnR1YWxSZWdpc3Rl
cigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmly
dHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKICAgICBjYXNlIEludDMyRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYy0+cih2aXJ0dWFsUmVn
aXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1cm4ganNOdW1i
ZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkSW50MzIo
KSk7CiAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGV4ZWMtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRJbnQ1Migp
KTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIo
KS5vZmZzZXQoKSkudW5ib3hlZEludDUyKCkpOwogICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFj
ZWRJbkpTU3RhY2s6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihleGVjLT5yKHZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpKS51bmJveGVkU3RyaWN0SW50NTIoKSk7CisgICAgICAgIHJldHVybiBq
c051bWJlcihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRT
dHJpY3RJbnQ1MigpKTsKICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihleGVjLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9m
ZnNldCgpKS51bmJveGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlm
eU5hTihjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3Vi
bGUoKSkpOwogICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJu
IGV4ZWMtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWRDZWxsKCk7CisgICAg
ICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94
ZWRDZWxsKCk7CiAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBleGVjLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPnIodmlydHVhbFJlZ2lz
dGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBqc0Jvb2xl
YW4oZXhlYy0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZEJvb2xlYW4oKSk7
CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpKS51bmJveGVkQm9vbGVhbigpKTsKICNlbmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6
CiAgICAgICAgIHJldHVybiBjb25zdGFudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXggOTVlNTgwZDcxYTI4OTgxMmIyOGM1NWM1ZTg2
YjM1N2M0NjU0ZjY1NC4uZDhmMThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBA
IC0zODgsNyArMzg4LDcgQEAgY2xhc3MgVmFsdWVSZWNvdmVyeSB7CiAgICAgICAgIHJldHVybiBE
Rkc6Ok1pbmlmaWVkSUQ6OmZyb21CaXRzKG1fc291cmNlLmdldCgpLm5vZGVJRCk7CiAgICAgfQog
ICAgIAotICAgIEpTVmFsdWUgcmVjb3ZlcihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVl
IHJlY292ZXIoQ2FsbEZyYW1lKikgY29uc3Q7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAKaW5kZXggZTNjYzllMzk4YTZlNWI4ZTE0ZGFjYTRkYTdkMDMwMDZjMTYzMzc0
My4uNjI4ZWE4ODRkZjk5ZWFlYTQ4ZWE4N2Y1OWExMTMyZWFkNDU5YTA4OCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCkBAIC0xNjQsNyArMTY0LDcgQEAg
dm9pZCBEZWJ1Z2dlcjo6YXR0YWNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAg
ICAgIG1fdm0uaGVhcC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29w
ZSwgZ2F0aGVyU291cmNlUHJvdmlkZXJzKTsKICAgICB9CiAgICAgZm9yIChhdXRvKiBzb3VyY2VQ
cm92aWRlciA6IGdhdGhlclNvdXJjZVByb3ZpZGVycy5zb3VyY2VQcm92aWRlcnMpCi0gICAgICAg
IHNvdXJjZVBhcnNlZChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc291cmNlUHJvdmlkZXIs
IC0xLCBTdHJpbmcoKSk7CisgICAgICAgIHNvdXJjZVBhcnNlZChnbG9iYWxPYmplY3QsIHNvdXJj
ZVByb3ZpZGVyLCAtMSwgU3RyaW5nKCkpOwogfQogCiB2b2lkIERlYnVnZ2VyOjpkZXRhY2goSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVhc29uRm9yRGV0YWNoIHJlYXNvbikKQEAgLTUy
NSwxMyArNTI1LDE0IEBAIGJvb2wgRGVidWdnZXI6Omhhc0JyZWFrcG9pbnQoU291cmNlSUQgc291
cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRpb24sIEJyCiAgICAgaWYgKCFtX2N1cnJl
bnRDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2N1cnJlbnRDYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KTsKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgIC8vIEFuIGVycm9uZW91cyBjb25kaXRp
b24gY291bnRzIGFzICJmYWxzZSIuCi0gICAgICAgIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2lu
dENvbmRpdGlvbihtX2N1cnJlbnRDYWxsRnJhbWUsIGV4Y2VwdGlvbik7CisgICAgICAgIGhhbmRs
ZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0LnRvQm9v
bGVhbihtX2N1cnJlbnRDYWxsRnJhbWUpOworICAgIHJldHVybiByZXN1bHQudG9Cb29sZWFuKGds
b2JhbE9iamVjdCk7CiB9CiAKIGNsYXNzIERlYnVnZ2VyOjpDbGVhckNvZGVCbG9ja0RlYnVnZ2Vy
UmVxdWVzdHNGdW5jdG9yIHsKQEAgLTczNiw3ICs3MzcsNyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVz
ZUlmTmVlZGVkKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIC8vIHJlc2V0aW5nIHRoZSBwYXVz
ZSBzdGF0ZSBiZWZvcmUgZXhlY3V0aW5nIGFueSBicmVha3BvaW50IGFjdGlvbnMuCiAgICAgVGVt
cG9yYXJ5UGF1c2VkU3RhdGUgcGF1c2VkU3RhdGUoKnRoaXMpOwogCi0gICAgSlNHbG9iYWxPYmpl
Y3QqIHZtRW50cnlHbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGNhbGxGcmFt
ZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5
R2xvYmFsT2JqZWN0KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKIAogICAgIGlm
IChkaWRIaXRCcmVha3BvaW50KSB7CiAgICAgICAgIGhhbmRsZUJyZWFrcG9pbnRIaXQodm1FbnRy
eUdsb2JhbE9iamVjdCwgYnJlYWtwb2ludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5oCmluZGV4IDFlNWVhYTkyYzBhMGYwNmNiZDJlMjhjOWM0MDU1ZWYzZDRiMDQw
ZDYuLjA3ZjhlZjk5Y2Q3YWU3Y2NjMDM0OTRjZTBkYjIwMTBlY2E4NWU0NGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCkBAIC00MSw4ICs0MSw2IEBAIGNsYXNz
IEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgU291cmNlUHJvdmlkZXI7CiBjbGFzcyBWTTsKIAotdXNp
bmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwotCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1
Z2dlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xMjIsNyAr
MTIwLDcgQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgRGVidWdnZXIgewogICAgIGJvb2wgc3Vw
cHJlc3NBbGxQYXVzZXMoKSBjb25zdCB7IHJldHVybiBtX3N1cHByZXNzQWxsUGF1c2VzOyB9CiAg
ICAgdm9pZCBzZXRTdXBwcmVzc0FsbFBhdXNlcyhib29sIHN1cHByZXNzKSB7IG1fc3VwcHJlc3NB
bGxQYXVzZXMgPSBzdXBwcmVzczsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNvdXJjZVBhcnNlZChF
eGVjU3RhdGUqLCBTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmVOdW1iZXIsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBlcnJvck1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlUGFy
c2VkKEpTR2xvYmFsT2JqZWN0KiwgU291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lTnVtYmVy
LCBjb25zdCBXVEY6OlN0cmluZyYgZXJyb3JNZXNzYWdlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHdpbGxSdW5NaWNyb3Rhc2soKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUnVuTWljcm90YXNr
KCkgeyB9CiAKQEAgLTE1Niw3ICsxNTQsNyBAQCBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1
Z2dlciB7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQnJlYWtwb2ludEhp
dChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEJyZWFrcG9pbnQmKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEV4ZWNTdGF0ZSosIEV4Y2Vw
dGlvbiopIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFeGNlcHRpb25JbkJyZWFr
cG9pbnRDb25kaXRpb24oSlNHbG9iYWxPYmplY3QqLCBFeGNlcHRpb24qKSBjb25zdCB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlUGF1c2UoSlNHbG9iYWxPYmplY3QqLCBSZWFzb25Gb3JQYXVz
ZSkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeURvbmVQcm9jZXNzaW5nRGVidWdnZXJFdmVu
dHMoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5jcHAKaW5kZXggZTlkZmJjMmMwODg3MjVkMWQ3MDY1NDhhNGMxMWI1Nzdm
OGI0NWRmMS4uYTMxY2Q0MTllZjYwMTc2YzRmMjMyNzYyNzZmMjZhMTNkMjJjNDM1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIExpbmVBbmRDb2x1bW5GdW5jdG9yIHsKIAogUmVm
PERlYnVnZ2VyQ2FsbEZyYW1lPiBEZWJ1Z2dlckNhbGxGcmFtZTo6Y3JlYXRlKFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZSA9PSBjYWxs
RnJhbWUtPndhc21Bd2FyZUxleGljYWxHbG9iYWxPYmplY3Qodm0pLT5nbG9iYWxFeGVjKCkpKSB7
CisgICAgaWYgKFVOTElLRUxZKCFjYWxsRnJhbWUpKSB7CiAgICAgICAgIFNoYWRvd0NoaWNrZW46
OkZyYW1lIGVtcHR5RnJhbWU7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbXB0eUZyYW1lLmlz
VGFpbERlbGV0ZWQpOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWJ1Z2dlckNhbGxG
cmFtZSh2bSwgY2FsbEZyYW1lLCBlbXB0eUZyYW1lKSk7CkBAIC04MCwxMyArODAsMTIgQEAgUmVm
PERlYnVnZ2VyQ2FsbEZyYW1lPiBEZWJ1Z2dlckNhbGxGcmFtZTo6Y3JlYXRlKFZNJiB2bSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgQVNTRVJUKCFmcmFtZXNbMF0uaXNUYWlsRGVsZXRlZCk7
IC8vIFRoZSB0b3AgZnJhbWUgc2hvdWxkIG5ldmVyIGJlIHRhaWwgZGVsZXRlZC4KIAogICAgIFJl
ZlB0cjxEZWJ1Z2dlckNhbGxGcmFtZT4gY3VycmVudFBhcmVudCA9IG51bGxwdHI7Ci0gICAgRXhl
Y1N0YXRlKiBleGVjID0gY2FsbEZyYW1lLT53YXNtQXdhcmVMZXhpY2FsR2xvYmFsT2JqZWN0KHZt
KS0+Z2xvYmFsRXhlYygpOwogICAgIC8vIFRoaXMgd2Fsa3MgdGhlIHN0YWNrIGZyb20gdGhlIGVu
dHJ5IHN0YWNrIGZyYW1lIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrLgogICAgIGZvciAodW5zaWdu
ZWQgaSA9IGZyYW1lcy5zaXplKCk7IGktLTsgKSB7CiAgICAgICAgIGNvbnN0IFNoYWRvd0NoaWNr
ZW46OkZyYW1lJiBmcmFtZSA9IGZyYW1lc1tpXTsKICAgICAgICAgaWYgKCFmcmFtZS5pc1RhaWxE
ZWxldGVkKQotICAgICAgICAgICAgZXhlYyA9IGZyYW1lLmZyYW1lOwotICAgICAgICBSZWY8RGVi
dWdnZXJDYWxsRnJhbWU+IGN1cnJlbnRGcmFtZSA9IGFkb3B0UmVmKCpuZXcgRGVidWdnZXJDYWxs
RnJhbWUodm0sIGV4ZWMsIGZyYW1lKSk7CisgICAgICAgICAgICBjYWxsRnJhbWUgPSBmcmFtZS5m
cmFtZTsKKyAgICAgICAgUmVmPERlYnVnZ2VyQ2FsbEZyYW1lPiBjdXJyZW50RnJhbWUgPSBhZG9w
dFJlZigqbmV3IERlYnVnZ2VyQ2FsbEZyYW1lKHZtLCBjYWxsRnJhbWUsIGZyYW1lKSk7CiAgICAg
ICAgIGN1cnJlbnRGcmFtZS0+bV9jYWxsZXIgPSBjdXJyZW50UGFyZW50OwogICAgICAgICBjdXJy
ZW50UGFyZW50ID0gV1RGTW92ZShjdXJyZW50RnJhbWUpOwogICAgIH0KQEAgLTEwOSw5ICsxMDgs
OSBAQCBSZWZQdHI8RGVidWdnZXJDYWxsRnJhbWU+IERlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxsZXJG
cmFtZSgpCiAgICAgcmV0dXJuIG1fY2FsbGVyOwogfQogCi1FeGVjU3RhdGUqIERlYnVnZ2VyQ2Fs
bEZyYW1lOjpnbG9iYWxFeGVjKCkKK0pTR2xvYmFsT2JqZWN0KiBEZWJ1Z2dlckNhbGxGcmFtZTo6
Z2xvYmFsT2JqZWN0KCkKIHsKLSAgICByZXR1cm4gc2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gc2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCk7CiB9CiAKIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIERlYnVnZ2VyQ2FsbEZyYW1lOjp2bUVudHJ5R2xvYmFsT2JqZWN0
KCkgY29uc3QKQEAgLTEyMCw3ICsxMTksNyBAQCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBEZWJ1Z2dl
ckNhbGxGcmFtZTo6dm1FbnRyeUdsb2JhbE9iamVjdCgpIGNvbnN0CiAgICAgaWYgKCFpc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIFZNJiB2bSA9IG1fdmFsaWRNYWNoaW5l
RnJhbWUtPnZtKCk7Ci0gICAgcmV0dXJuIHZtLnZtRW50cnlHbG9iYWxPYmplY3QobV92YWxpZE1h
Y2hpbmVGcmFtZSk7CisgICAgcmV0dXJuIHZtLnZtRW50cnlHbG9iYWxPYmplY3QobV92YWxpZE1h
Y2hpbmVGcmFtZS0+d2FzbUF3YXJlTGV4aWNhbEdsb2JhbE9iamVjdCh2bSkpOwogfQogCiBTb3Vy
Y2VJRCBEZWJ1Z2dlckNhbGxGcmFtZTo6c291cmNlSUQoKSBjb25zdApAQCAtMjEwLDcgKzIwOSw3
IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OnRoaXNWYWx1ZSgpIGNvbnN0CiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBOb3RTdHJpY3RNb2RlOwogICAgIGlmIChjb2RlQmxvY2sgJiYgY29k
ZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgZWNtYU1vZGUgPSBTdHJpY3RNb2RlOwot
ICAgIHJldHVybiB0aGlzVmFsdWUudG9UaGlzKG1fdmFsaWRNYWNoaW5lRnJhbWUsIGVjbWFNb2Rl
KTsKKyAgICByZXR1cm4gdGhpc1ZhbHVlLnRvVGhpcyhtX3ZhbGlkTWFjaGluZUZyYW1lLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGVjbWFNb2RlKTsKIH0KIAogLy8gRXZhbHVhdGUgc29tZSBKYXZh
U2NyaXB0IGNvZGUgaW4gdGhlIHNjb3BlIG9mIHRoaXMgZnJhbWUuCkBAIC0yMzMsNyArMjMyLDgg
QEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTT2IKICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgRGVidWdnZXJFdmFsRW5hYmxlciBldmFs
RW5hYmxlcihjYWxsRnJhbWUsIERlYnVnZ2VyRXZhbEVuYWJsZXI6Ok1vZGU6OkV2YWxPbkNhbGxG
cmFtZUF0RGVidWdnZXJFbnRyeSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgRGVidWdnZXJFdmFsRW5hYmxlciBldmFs
RW5hYmxlcihnbG9iYWxPYmplY3QsIERlYnVnZ2VyRXZhbEVuYWJsZXI6Ok1vZGU6OkV2YWxPbkds
b2JhbE9iamVjdEF0RGVidWdnZXJFbnRyeSk7CiAKICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENv
bnRleHRUeXBlOwogICAgIApAQCAtMjQ3LDI4ICsyNDcsMjggQEAgSlNWYWx1ZSBEZWJ1Z2dlckNh
bGxGcmFtZTo6ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBzY3JpcHQs
IEpTT2IKICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwogICAgIEpT
U2NvcGU6OmNvbGxlY3RDbG9zdXJlVmFyaWFibGVzVW5kZXJURFooc2NvcGUoKS0+anNTY29wZSgp
LCB2YXJpYWJsZXNVbmRlclREWik7CiAKLSAgICBhdXRvKiBldmFsID0gRGlyZWN0RXZhbEV4ZWN1
dGFibGU6OmNyZWF0ZShjYWxsRnJhbWUsIG1ha2VTb3VyY2Uoc2NyaXB0LCBjYWxsRnJhbWUtPmNh
bGxlclNvdXJjZU9yaWdpbigpKSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgY29kZUJsb2Nr
LT51bmxpbmtlZENvZGVCbG9jaygpLT5kZXJpdmVkQ29udGV4dFR5cGUoKSwgY29kZUJsb2NrLT51
bmxpbmtlZENvZGVCbG9jaygpLT5pc0Fycm93RnVuY3Rpb24oKSwgZXZhbENvbnRleHRUeXBlLCAm
dmFyaWFibGVzVW5kZXJURFopOworICAgIGF1dG8qIGV2YWwgPSBEaXJlY3RFdmFsRXhlY3V0YWJs
ZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgbWFrZVNvdXJjZShzY3JpcHQsIGNhbGxGcmFtZS0+Y2Fs
bGVyU291cmNlT3JpZ2luKCkpLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBjb2RlQmxvY2st
PnVubGlua2VkQ29kZUJsb2NrKCktPmRlcml2ZWRDb250ZXh0VHlwZSgpLCBjb2RlQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCktPmlzQXJyb3dGdW5jdGlvbigpLCBldmFsQ29udGV4dFR5cGUsICZ2
YXJpYWJsZXNVbmRlclREWik7CiAgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0aW9u
KCkpKSB7CiAgICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7CiAgICAg
ICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZtLnZt
RW50cnlHbG9iYWxPYmplY3QoY2FsbEZyYW1lKTsKKyAgICBKU0dsb2JhbE9iamVjdCogdm1FbnRy
eUdsb2JhbE9iamVjdCA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAg
ICBpZiAoc2NvcGVFeHRlbnNpb25PYmplY3QpIHsKLSAgICAgICAgSlNTY29wZSogaWdub3JlZFBy
ZXZpb3VzU2NvcGUgPSBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlKCk7Ci0gICAgICAgIGdsb2Jh
bE9iamVjdC0+c2V0R2xvYmFsU2NvcGVFeHRlbnNpb24oSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBpZ25vcmVkUHJldmlvdXNTY29wZSwgc2NvcGVFeHRlbnNpb25PYmplY3Qp
KTsKKyAgICAgICAgSlNTY29wZSogaWdub3JlZFByZXZpb3VzU2NvcGUgPSB2bUVudHJ5R2xvYmFs
T2JqZWN0LT5nbG9iYWxTY29wZSgpOworICAgICAgICB2bUVudHJ5R2xvYmFsT2JqZWN0LT5zZXRH
bG9iYWxTY29wZUV4dGVuc2lvbihKU1dpdGhTY29wZTo6Y3JlYXRlKHZtLCB2bUVudHJ5R2xvYmFs
T2JqZWN0LCBpZ25vcmVkUHJldmlvdXNTY29wZSwgc2NvcGVFeHRlbnNpb25PYmplY3QpKTsKICAg
ICB9CiAKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHRoaXMtPnRoaXNWYWx1ZSgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdm0uaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0
aGlzVmFsdWUsIHNjb3BlKCktPmpzU2NvcGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5p
bnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCB2bUVudHJ5R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IHNjb3BlKCktPmpzU2NvcGUoKSk7CiAgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCkpKSB7CiAgICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7CiAg
ICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBpZiAoc2Nv
cGVFeHRlbnNpb25PYmplY3QpCi0gICAgICAgIGdsb2JhbE9iamVjdC0+Y2xlYXJHbG9iYWxTY29w
ZUV4dGVuc2lvbigpOworICAgICAgICB2bUVudHJ5R2xvYmFsT2JqZWN0LT5jbGVhckdsb2JhbFNj
b3BlRXh0ZW5zaW9uKCk7CiAKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2Fs
bEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuaAppbmRleCA1OGUzOGYwMTgwNzEyODVkMjI2YmM3MDNlY2U1MzE2MTBhYjQ2MjgyLi45YjUw
NGY3YTFlM2Y0ZGEzMDgwM2IxMGFjZWZmMGRhMmIzYjUxYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaApAQCAtNDgsNyArNDgs
NyBAQCBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZSA6IHB1YmxpYyBSZWZDb3VudGVkPERlYnVnZ2Vy
Q2FsbEZyYW1lPiB7CiAgICAgc3RhdGljIFJlZjxEZWJ1Z2dlckNhbGxGcmFtZT4gY3JlYXRlKFZN
JiwgQ2FsbEZyYW1lKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8RGVidWdnZXJD
YWxsRnJhbWU+IGNhbGxlckZyYW1lKCk7Ci0gICAgRXhlY1N0YXRlKiBnbG9iYWxFeGVjKCk7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IFNvdXJjZUlEIHNvdXJjZUlEKCkgY29uc3Q7CiAKICAgICAvLyBsaW5lIGFuZCBjb2x1bW4gYXJl
IGluIGJhc2UgMCBlLmcuIHRoZSBmaXJzdCBsaW5lIGlzIGxpbmUgMC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckV2YWxFbmFibGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJFdmFsRW5hYmxlci5oCmluZGV4IDli
MjczOTU0Mzg0YjQ1ODI1YTlhNjc5MzM2OTBlMzM0MTQ5Njc4OWIuLjQ2MWYwYTZlOWEwZTI5ZDg1
YjUxYzU2YzlhOGZlYjdmZjVhMjZjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlckV2YWxFbmFibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyRXZhbEVuYWJsZXIuaApAQCAtMzQsNDQgKzM0LDQzIEBAIGNs
YXNzIERlYnVnZ2VyRXZhbEVuYWJsZXIgewogcHVibGljOgogICAgIGVudW0gY2xhc3MgTW9kZSB7
CiAgICAgICAgIEV2YWxPbkN1cnJlbnRDYWxsRnJhbWUsCi0gICAgICAgIEV2YWxPbkNhbGxGcmFt
ZUF0RGVidWdnZXJFbnRyeSwKKyAgICAgICAgRXZhbE9uR2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVu
dHJ5LAogICAgIH07CiAKLSAgICBEZWJ1Z2dlckV2YWxFbmFibGVyKGNvbnN0IEV4ZWNTdGF0ZSog
ZXhlYywgTW9kZSBtb2RlID0gTW9kZTo6RXZhbE9uQ3VycmVudENhbGxGcmFtZSkKLSAgICAgICAg
OiBtX2V4ZWMoZXhlYykKKyAgICBEZWJ1Z2dlckV2YWxFbmFibGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIE1vZGUgbW9kZSA9IE1vZGU6OkV2YWxPbkN1cnJlbnRDYWxsRnJhbWUpCisg
ICAgICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAgICAgLCBtX21vZGUobW9kZSkKICNlbmRpZgogICAgICAgICAKICAgICB7CiAgICAg
ICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSAgICAgICAgaWYgKGV4ZWMpIHsKLSAgICAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CisgICAgICAgIGlmIChnbG9iYWxPYmplY3QpIHsKICAgICAgICAgICAgIG1fZXZhbFdhc0Rp
c2FibGVkID0gIWdsb2JhbE9iamVjdC0+ZXZhbEVuYWJsZWQoKTsKICAgICAgICAgICAgIGlmICht
X2V2YWxXYXNEaXNhYmxlZCkKICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnNldEV2YWxF
bmFibGVkKHRydWUsIGdsb2JhbE9iamVjdC0+ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkpOwog
I2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6RXZh
bE9uQ2FsbEZyYW1lQXREZWJ1Z2dlckVudHJ5KQotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVj
dC0+c2V0Q2FsbEZyYW1lQXREZWJ1Z2dlckVudHJ5KGV4ZWMpOworICAgICAgICAgICAgaWYgKG1f
bW9kZSA9PSBNb2RlOjpFdmFsT25HbG9iYWxPYmplY3RBdERlYnVnZ2VyRW50cnkpCisgICAgICAg
ICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRHbG9iYWxPYmplY3RBdERlYnVnZ2VyRW50cnkoZ2xv
YmFsT2JqZWN0KTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfQogCiAgICAgfkRlYnVnZ2VyRXZh
bEVuYWJsZXIoKQogICAgIHsKLSAgICAgICAgaWYgKG1fZXhlYykgewotICAgICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OworICAgICAgICBpZiAobV9nbG9iYWxPYmplY3QpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgICAgIGlmIChtX2V2
YWxXYXNEaXNhYmxlZCkKICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnNldEV2YWxFbmFi
bGVkKGZhbHNlLCBnbG9iYWxPYmplY3QtPmV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZSgpKTsKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICAgICBpZiAobV9tb2RlID09IE1vZGU6OkV2YWxP
bkNhbGxGcmFtZUF0RGVidWdnZXJFbnRyeSkKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3Qt
PnNldENhbGxGcmFtZUF0RGVidWdnZXJFbnRyeShudWxscHRyKTsKKyAgICAgICAgICAgIGlmICht
X21vZGUgPT0gTW9kZTo6RXZhbE9uR2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVudHJ5KQorICAgICAg
ICAgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0R2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVudHJ5KG51
bGxwdHIpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKIHByaXZhdGU6Ci0gICAgY29uc3Qg
RXhlY1N0YXRlKiBtX2V4ZWM7CisgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0Owog
ICAgIGJvb2wgbV9ldmFsV2FzRGlzYWJsZWQgeyBmYWxzZSB9OwogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICBEZWJ1Z2dlckV2YWxFbmFibGVyOjpNb2RlIG1fbW9kZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAppbmRleCAwOWQwZjJiMzU1
MzkyZTcyY2VlN2U4NzU0MzQ5ZDdiODQwMDU3MGU1Li4yNmUyODI5MzllOWFjYTg4NjVjMjIxNzcz
YzJhNDFlMDI4MDk0ZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJTY29wZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyU2NvcGUuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIFN0cmluZyBEZWJ1Z2dlclNjb3Bl
OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgVk0mIHZtKQogICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmNsYXNzTmFtZSh0aGlzT2JqZWN0LCB2bSk7CiB9
CiAKLVN0cmluZyBEZWJ1Z2dlclNjb3BlOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjKQorU3RyaW5nIERlYnVnZ2VyU2NvcGU6OnRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewogICAgIGNvbnN0IERlYnVnZ2VyU2NvcGUqIHNjb3BlID0ganNDYXN0PGNvbnN0IERlYnVnZ2Vy
U2NvcGUqPihvYmplY3QpOwogICAgIC8vIFdlIGNhbm5vdCBhc3NlcnQgdGhhdCBzY29wZS0+aXNW
YWxpZCgpIGJlY2F1c2UgdGhlIFR5cGVQcm9maWxlciBtYXkgZW5jb3VudGVyIGFuIGludmFsaWRh
dGVkCkBAIC04NSwxMCArODUsMTAgQEAgU3RyaW5nIERlYnVnZ2VyU2NvcGU6OnRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKCFzY29w
ZS0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Njb3BlKCkpOwotICAg
IHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+dG9TdHJpbmdOYW1l
KHRoaXNPYmplY3QsIGV4ZWMpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShn
bG9iYWxPYmplY3QtPnZtKCkpLT50b1N0cmluZ05hbWUodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0
KTsKIH0KIAotYm9vbCBEZWJ1Z2dlclNjb3BlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitib29sIERlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgRGVidWdnZXJTY29w
ZSogc2NvcGUgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KG9iamVjdCk7CiAgICAgaWYgKCFzY29w
ZS0+aXNWYWxpZCgpKQpAQCAtMTA1LDggKzEwNSw4IEBAIGJvb2wgRGVidWdnZXJTY29wZTo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
CiAgICAgLy8gZG9lcyBub3QgcHJlc2VudGx5IG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB3
aGF0J3Mgb3duZWQgYXQgZWFjaCBsZXZlbCBpbiB0aGUKICAgICAvLyBwcm90b3R5cGUgY2hhaW4u
IEhlbmNlLCB3ZSdsbCBpbnZva2UgZ2V0UHJvcGVydHlTbG90KCkgb24gdGhlIHdyYXBwZWQgc2Nv
cGUgaGVyZQogICAgIC8vIGluc3RlYWQgb2YgZ2V0T3duUHJvcGVydHlTbG90KCkuCi0gICAgYm9v
bCByZXN1bHQgPSB0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KTsKLSAgICBpZiAocmVzdWx0ICYmIHNsb3QuaXNWYWx1ZSgpICYmIHNsb3QuZ2V0VmFs
dWUoZXhlYywgcHJvcGVydHlOYW1lKSA9PSBqc1REWlZhbHVlKCkpIHsKKyAgICBib29sIHJlc3Vs
dCA9IHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CisgICAgaWYgKHJlc3VsdCAmJiBzbG90LmlzVmFsdWUoKSAmJiBzbG90LmdldFZh
bHVlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSA9PSBqc1REWlZhbHVlKCkpIHsKICAgICAg
ICAgLy8gRklYTUU6CiAgICAgICAgIC8vIFdlIGhpdCBhIHNjb3BlIHByb3BlcnR5IHRoYXQgaGFz
IHRoZSBURFogZW1wdHkgdmFsdWUuCiAgICAgICAgIC8vIEN1cnJlbnRseSwgd2UganVzdCBsaWUg
dG8gdGhlIGluc3BlY3RvciBhbmQgY2xhaW0gdGhhdCB0aGlzIHByb3BlcnR5IGlzIHVuZGVmaW5l
ZC4KQEAgLTExOCw3ICsxMTgsNyBAQCBib29sIERlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLWJvb2wgRGVidWdnZXJTY29wZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIERlYnVnZ2VyU2NvcGU6OnB1dChKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBEZWJ1Z2dl
clNjb3BlKiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CiAgICAgQVNTRVJU
KHNjb3BlLT5pc1ZhbGlkKCkpOwpAQCAtMTI2LDM3ICsxMjYsMzcgQEAgYm9vbCBEZWJ1Z2dlclNj
b3BlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0gSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29wZS0+anNTY29wZSgpKTsKICAgICBzbG90LnNl
dFRoaXNWYWx1ZShKU1ZhbHVlKHRoaXNPYmplY3QpKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZ2xv
YmFsT2JqZWN0LT52bSgpKS0+cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLWJvb2wgRGVidWdnZXJTY29wZTo6ZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCitib29sIERlYnVnZ2VyU2NvcGU6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsK
ICAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7
CiAgICAgQVNTRVJUKHNjb3BlLT5pc1ZhbGlkKCkpOwogICAgIGlmICghc2NvcGUtPmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNT
Y29wZTo6b2JqZWN0QXRTY29wZShzY29wZS0+anNTY29wZSgpKTsKLSAgICByZXR1cm4gdGhpc09i
amVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KGdsb2JhbE9iamVjdC0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBEZWJ1Z2dl
clNjb3BlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxE
ZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKICAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CiAg
ICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Njb3BlKCkpOwot
ICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRQcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmdldFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9vbCBEZWJ1
Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgRGVidWdnZXJTY29wZTo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQogewogICAgIERlYnVnZ2VyU2NvcGUqIHNj
b3BlID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwogICAgIEFTU0VSVChzY29wZS0+
aXNWYWxpZCgpKTsKICAgICBpZiAoIXNjb3BlLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUo
c2NvcGUtPmpzU2NvcGUoKSk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVj
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsK
IH0KIAogRGVidWdnZXJTY29wZSogRGVidWdnZXJTY29wZTo6bmV4dCgpCkBAIC0yNDksNyArMjQ5
LDcgQEAgRGVidWdnZXJMb2NhdGlvbiBEZWJ1Z2dlclNjb3BlOjpsb2NhdGlvbigpIGNvbnN0CiAg
ICAgcmV0dXJuIERlYnVnZ2VyTG9jYXRpb24oZXhlY3V0YWJsZSk7CiB9CiAKLUpTVmFsdWUgRGVi
dWdnZXJTY29wZTo6Y2F1Z2h0VmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBE
ZWJ1Z2dlclNjb3BlOjpjYXVnaHRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBj
b25zdAogewogICAgIEFTU0VSVChpc0NhdGNoU2NvcGUoKSk7CiAgICAgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIGNhdGNoRW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPiht
X3Njb3BlLmdldCgpKTsKQEAgLTI1Nyw5ICsyNTcsOSBAQCBKU1ZhbHVlIERlYnVnZ2VyU2NvcGU6
OmNhdWdodFZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBSRUxFQVNFX0FTU0VSVChj
YXRjaFN5bWJvbFRhYmxlLT5zaXplKCkgPT0gMSk7CiAgICAgUHJvcGVydHlOYW1lIGVycm9yTmFt
ZShjYXRjaFN5bWJvbFRhYmxlLT5iZWdpbihjYXRjaFN5bWJvbFRhYmxlLT5tX2xvY2spLT5rZXku
Z2V0KCkpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KG1fc2NvcGUuZ2V0KCksIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGNhdGNoRW52
aXJvbm1lbnQtPmdldE93blByb3BlcnR5U2xvdChjYXRjaEVudmlyb25tZW50LCBleGVjLCBlcnJv
ck5hbWUsIHNsb3QpOworICAgIGJvb2wgc3VjY2VzcyA9IGNhdGNoRW52aXJvbm1lbnQtPmdldE93
blByb3BlcnR5U2xvdChjYXRjaEVudmlyb25tZW50LCBnbG9iYWxPYmplY3QsIGVycm9yTmFtZSwg
c2xvdCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2VzcyAmJiBzbG90LmlzVmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgZXJyb3JOYW1lKTsKKyAgICByZXR1cm4gc2xv
dC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIGVycm9yTmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
U2NvcGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgK
aW5kZXggYzc2ZjNlYzVlNjM3NjkxYWM5ZDlmNWQ2ODgwYzY4NzI4ZTU0MGRhYy4uMzMxNzBlYjZk
ODhiNWNjMzk3ZTM4YmNkNjRmNGJlZDA2OTQwNTdmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCkBAIC00MiwxMiArNDIsMTIgQEAgY2xhc3Mg
RGVidWdnZXJTY29wZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIAogICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBzdGF0
aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIFZNJik7Ci0gICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKLSAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwotICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3Rh
dGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCop
OworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
CkBAIC05Miw3ICs5Miw3IEBAIGNsYXNzIERlYnVnZ2VyU2NvcGUgZmluYWwgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICBEZWJ1Z2dlckxv
Y2F0aW9uIGxvY2F0aW9uKCkgY29uc3Q7CiAKLSAgICBKU1ZhbHVlIGNhdWdodFZhbHVlKEV4ZWNT
dGF0ZSopIGNvbnN0OworICAgIEpTVmFsdWUgY2F1Z2h0VmFsdWUoSlNHbG9iYWxPYmplY3QqKSBj
b25zdDsKIAogcHJpdmF0ZToKICAgICBEZWJ1Z2dlclNjb3BlKFZNJiwgU3RydWN0dXJlKiwgSlNT
Y29wZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4IGQ0MWMwNDUxMTdlZGZjZWVhODJhMjIwNDU5
N2UyMmM4NTA2YjMyNzIuLjc1ZDc2MmZjN2RiOTUwYzYwZWZkNmNiMzY5YWUzMjZiYzc0NjI4YWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTc4LDcgKzc4LDcgQEAgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmJvb2xlYW5SZXN1bHQoCiB7CiAgICAgSlNWYWx1ZSBjaGls
ZENvbnN0ID0gdmFsdWUudmFsdWUoKTsKICAgICBpZiAoY2hpbGRDb25zdCkgewotICAgICAgICBp
ZiAoY2hpbGRDb25zdC50b0Jvb2xlYW4obV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5nbG9iYWxFeGVjKCkpKQorICAgICAgICBpZiAoY2hpbGRDb25z
dC50b0Jvb2xlYW4obV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSkKICAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsKICAgICAgICAgcmV0
dXJuIERlZmluaXRlbHlGYWxzZTsKICAgICB9CkBAIC0yNzU4LDcgKzI3NTgsNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNp
Z25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgaWYgKGJhc2UuaXNOdWxsKCkpCiAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3Ry
dWN0dXJlKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChiYXNlLmlzT2JqZWN0KCkpCi0gICAgICAg
ICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT52bSgpLnN0cnVjdHVyZUNhY2hlLmVt
cHR5T2JqZWN0U3RydWN0dXJlQ29uY3VycmVudGx5KGdsb2JhbE9iamVjdCwgYmFzZS5nZXRPYmpl
Y3QoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpOworICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSA9IGdldFZNKGdsb2JhbE9iamVjdCkuc3RydWN0dXJlQ2FjaGUuZW1w
dHlPYmplY3RTdHJ1Y3R1cmVDb25jdXJyZW50bHkoZ2xvYmFsT2JqZWN0LCBiYXNlLmdldE9iamVj
dCgpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcml0aE1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJp
dGhNb2RlLmgKaW5kZXggM2ViYWNhYjc4YTJiYWE0Nzk1ODhmOGViYTBlNTc1NmY4YTZlYWI4Yy4u
MmI3YTNjMmIyOTA5NDNlYjI0NjAwYWQ3YjFlMWEzNzhkNGIwNmQxZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcml0aE1vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyaXRoTW9kZS5oCkBAIC0zMCw3ICszMCw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ2FsbEZyYW1lOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwor
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7CiB1c2luZyBFbmNvZGVkSlNWYWx1ZSA9IGludDY0X3Q7CiAK
IG5hbWVzcGFjZSBERkcgewpAQCAtODMsNyArODMsNyBAQCBlbnVtIGNsYXNzIFVuYXJ5VHlwZSA6
IHVpbnQzMl90IHsKIH07CiAKIHR5cGVkZWYgZG91YmxlICgqVW5hcnlGdW5jdGlvbikoZG91Ymxl
KTsKLXR5cGVkZWYgZG91YmxlICgqVW5hcnlPcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlKTsKK3R5cGVkZWYgZG91YmxlICgqVW5hcnlPcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUpOwogCiB9IC8vIG5hbWVzcGFjZSBBcml0aAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRv
ci5oCmluZGV4IGViMzQ4ODg5OTY4NjhkN2Q4NmYyNDdiNjk2N2Y4N2RkNWRhYWY2NmUuLjE4NzQx
YmVlNGY4YjU4OGM4OWE1MTEwMmUwZDM2ZTc3MjI2OWQxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oCkBA
IC05MSwxOSArOTEsMjAgQEAgY2xhc3MgQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvciA6IHB1Ymxp
YyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXIKICAgICAgICAgCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsYW5zLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgaml0LT5zaWxlbnRTcGlsbChtX3BsYW5zW2ldKTsKKyAgICAgICAgVk0mIHZtID0gaml0
LT52bSgpOwogICAgICAgICBzd2l0Y2ggKG1fYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbihvcGVyYXRp
b25FbnN1cmVJbnQzMiwgbV90ZW1wR1BSLCBtX2Jhc2VHUFIpOworICAgICAgICAgICAgaml0LT5j
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUludDMyLCBtX3RlbXBHUFIsICZ2bSwgbV9iYXNl
R1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0g
ICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlRG91YmxlLCBtX3Rl
bXBHUFIsIG1fYmFzZUdQUik7CisgICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRW5zdXJlRG91YmxlLCBtX3RlbXBHUFIsICZ2bSwgbV9iYXNlR1BSKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAgICAgaml0
LT5jYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMsIG1fdGVtcEdQUiwgbV9i
YXNlR1BSKTsKKyAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVD
b250aWd1b3VzLCBtX3RlbXBHUFIsICZ2bSwgbV9iYXNlR1BSKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlLCBtX3RlbXBHUFIsIG1fYmFzZUdQUik7CisgICAgICAg
ICAgICBqaXQtPmNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlLCBtX3Rl
bXBHUFIsICZ2bSwgbV9iYXNlR1BSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgQ1JBU0goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0
b3IuaAppbmRleCBjYWFlY2VlY2UxZmI4Zjg2OGYwZjlkODQ1OTRmMDMxY2I3NDczNGZjLi5mZWVm
ZWZjNmQ5YTRlMzM0YjUwYTA3MTUyY2RmM2M0YTMwMmI5Nzk4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9y
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JT
bG93UGF0aEdlbmVyYXRvci5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIGNsYXNzIENhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yIDog
cHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+
IHsKIHB1YmxpYzoKICAgICBDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvcigKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQs
IFBfSklUT3BlcmF0aW9uX0VTdFpCIGZ1bmN0aW9uLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9KSVRPcGVyYXRpb25fVm1TdFpC
IGZ1bmN0aW9uLAogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc3RvcmFnZUdQUiwg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUsIHNpemVfdCBzaXplKQogICAgICAgICA6IEp1
bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+KGZyb20sIGpp
dCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQpAQCAtNTUsNyArNTUsNyBAQCBjbGFz
cyBDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xv
d1BhdGhHZW5lcmF0b3I8TWFjcgogICAgICAgICBsaW5rRnJvbShqaXQpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wbGFucy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGpp
dC0+c2lsZW50U3BpbGwobV9wbGFuc1tpXSk7Ci0gICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbiht
X2Z1bmN0aW9uLCBtX3Jlc3VsdEdQUiwgbV9zdHJ1Y3R1cmUsIG1fc2l6ZSwgbV9zdG9yYWdlR1BS
KTsKKyAgICAgICAgaml0LT5jYWxsT3BlcmF0aW9uKG1fZnVuY3Rpb24sIG1fcmVzdWx0R1BSLCAm
aml0LT52bSgpLCBtX3N0cnVjdHVyZSwgbV9zaXplLCBtX3N0b3JhZ2VHUFIpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX3BsYW5zLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgIGppdC0+
c2lsZW50RmlsbChtX3BsYW5zW2ldKTsKICAgICAgICAgaml0LT5tX2ppdC5leGNlcHRpb25DaGVj
aygpOwpAQCAtNjQsNyArNjQsNyBAQCBjbGFzcyBDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdl
bmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcgogICAgIH0KICAg
ICAKIHByaXZhdGU6Ci0gICAgUF9KSVRPcGVyYXRpb25fRVN0WkIgbV9mdW5jdGlvbjsKKyAgICBQ
X0pJVE9wZXJhdGlvbl9WbVN0WkIgbV9mdW5jdGlvbjsKICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7
CiAgICAgR1BSUmVnIG1fc3RvcmFnZUdQUjsKICAgICBpbnQgbV9zaXplOwpAQCAtNzUsMTMgKzc1
LDE0IEBAIGNsYXNzIENhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yIDogcHVibGlj
IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyCiBjbGFzcyBDYWxsQXJyYXlBbGxvY2F0b3JX
aXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYXRo
R2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4gewogcHVibGljOgogICAgIENhbGxB
cnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIFBfSklU
T3BlcmF0aW9uX0VTdFpCIGZ1bmN0aW9uLAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBSZWdp
c3RlcmVkU3RydWN0dXJlIGNvbnRpZ3VvdXNTdHJ1Y3R1cmUsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
YXJyYXlTdG9yYWdlU3RydWN0dXJlLCBHUFJSZWcgc2l6ZUdQUiwgR1BSUmVnIHN0b3JhZ2VHUFIp
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmcm9tLCBTcGVjdWxhdGl2ZUpJVCog
aml0LCBQX0pJVE9wZXJhdGlvbl9HU3RaQiBmdW5jdGlvbiwKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyIGdsb2JhbE9iamVjdCwgUmVnaXN0ZXJl
ZFN0cnVjdHVyZSBjb250aWd1b3VzU3RydWN0dXJlLCBSZWdpc3RlcmVkU3RydWN0dXJlIGFycmF5
U3RvcmFnZVN0cnVjdHVyZSwgR1BSUmVnIHNpemVHUFIsIEdQUlJlZyBzdG9yYWdlR1BSKQogICAg
ICAgICA6IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q+
KGZyb20sIGppdCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogICAgICAgICAsIG1f
Y29udGlndW91c1N0cnVjdHVyZShjb250aWd1b3VzU3RydWN0dXJlKQogICAgICAgICAsIG1fYXJy
YXlTdG9yYWdlT3JDb250aWd1b3VzU3RydWN0dXJlKGFycmF5U3RvcmFnZVN0cnVjdHVyZSkKICAg
ICAgICAgLCBtX3Jlc3VsdEdQUihyZXN1bHRHUFIpCisgICAgICAgICwgbV9nbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0KQogICAgICAgICAsIG1fc2l6ZUdQUihzaXplR1BSKQogICAgICAgICAsIG1f
c3RvcmFnZUdQUihzdG9yYWdlR1BSKQogICAgIHsKQEAgLTEwNCw3ICsxMDUsNyBAQCBjbGFzcyBD
YWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJs
aWMgSnVtcGluZ1Nsb3dQYQogICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQtPm1faml0KTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBqaXQtPm1faml0Lm1vdmUoU3BlY3VsYXRpdmVKSVQ6
OlRydXN0ZWRJbW1QdHIobV9jb250aWd1b3VzU3RydWN0dXJlKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgIGppdC0+Y2FsbE9wZXJhdGlvbihtX2Z1bmN0aW9uLCBtX3Jlc3VsdEdQUiwgc2NyYXRjaEdQ
UiwgbV9zaXplR1BSLCBtX3N0b3JhZ2VHUFIpOworICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24o
bV9mdW5jdGlvbiwgbV9yZXN1bHRHUFIsIG1fZ2xvYmFsT2JqZWN0LCBzY3JhdGNoR1BSLCBtX3Np
emVHUFIsIG1fc3RvcmFnZUdQUik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMu
c2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgaml0LT5zaWxlbnRGaWxsKG1fcGxhbnNbaV0pOwog
ICAgICAgICBqaXQtPm1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBAIC0xMTIsMTAgKzExMywxMSBA
QCBjbGFzcyBDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0
b3IgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYQogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgUF9K
SVRPcGVyYXRpb25fRVN0WkIgbV9mdW5jdGlvbjsKKyAgICBQX0pJVE9wZXJhdGlvbl9HU3RaQiBt
X2Z1bmN0aW9uOwogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbV9jb250aWd1b3VzU3RydWN0dXJl
OwogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgbV9hcnJheVN0b3JhZ2VPckNvbnRpZ3VvdXNTdHJ1
Y3R1cmU7CiAgICAgR1BSUmVnIG1fcmVzdWx0R1BSOworICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0ciBtX2dsb2JhbE9iamVjdDsKICAgICBHUFJSZWcgbV9zaXplR1BSOwogICAgIEdQUlJl
ZyBtX3N0b3JhZ2VHUFI7CiAgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4sIDI+IG1f
cGxhbnM7CkBAIC0xMjQsMTEgKzEyNiwxMiBAQCBjbGFzcyBDYWxsQXJyYXlBbGxvY2F0b3JXaXRo
VmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYQogY2xh
c3MgQ2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU3RydWN0dXJlVmFyaWFibGVTaXplU2xv
d1BhdGhHZW5lcmF0b3IgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdD4gewogcHVibGljOgogICAgIENhbGxBcnJheUFsbG9jYXRvcldpdGhW
YXJpYWJsZVN0cnVjdHVyZVZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZnJvbSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgUF9KSVRP
cGVyYXRpb25fRVN0WkIgZnVuY3Rpb24sCi0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJl
ZyBzdHJ1Y3R1cmVHUFIsIEdQUlJlZyBzaXplR1BSLCBHUFJSZWcgc3RvcmFnZUdQUikKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIFBf
SklUT3BlcmF0aW9uX0dTdFpCIGZ1bmN0aW9uLAorICAgICAgICBHUFJSZWcgcmVzdWx0R1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIgZ2xvYmFsT2JqZWN0LCBHUFJSZWcgc3RydWN0dXJl
R1BSLCBHUFJSZWcgc2l6ZUdQUiwgR1BSUmVnIHN0b3JhZ2VHUFIpCiAgICAgICAgIDogSnVtcGlu
Z1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdD4oZnJvbSwgaml0KQog
ICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9yZXN1bHRHUFIocmVz
dWx0R1BSKQorICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKICAgICAgICAg
LCBtX3N0cnVjdHVyZUdQUihzdHJ1Y3R1cmVHUFIpCiAgICAgICAgICwgbV9zaXplR1BSKHNpemVH
UFIpCiAgICAgICAgICwgbV9zdG9yYWdlR1BSKHN0b3JhZ2VHUFIpCkBAIC0xNDIsNyArMTQ1LDcg
QEAgY2xhc3MgQ2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU3RydWN0dXJlVmFyaWFibGVT
aXplU2xvd1BhdGhHZW5lcmF0b3IgOiBwdWIKICAgICAgICAgbGlua0Zyb20oaml0KTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxhbnMuc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICBqaXQtPnNpbGVudFNwaWxsKG1fcGxhbnNbaV0pOwotICAgICAgICBqaXQtPmNhbGxPcGVy
YXRpb24obV9mdW5jdGlvbiwgbV9yZXN1bHRHUFIsIG1fc3RydWN0dXJlR1BSLCBtX3NpemVHUFIs
IG1fc3RvcmFnZUdQUik7CisgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbihtX2Z1bmN0aW9uLCBt
X3Jlc3VsdEdQUiwgbV9nbG9iYWxPYmplY3QsIG1fc3RydWN0dXJlR1BSLCBtX3NpemVHUFIsIG1f
c3RvcmFnZUdQUik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBp
LS07KQogICAgICAgICAgICAgaml0LT5zaWxlbnRGaWxsKG1fcGxhbnNbaV0pOwogICAgICAgICBq
aXQtPm1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBAIC0xNTAsOCArMTUzLDkgQEAgY2xhc3MgQ2Fs
bEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU3RydWN0dXJlVmFyaWFibGVTaXplU2xvd1BhdGhH
ZW5lcmF0b3IgOiBwdWIKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFBfSklUT3BlcmF0aW9u
X0VTdFpCIG1fZnVuY3Rpb247CisgICAgUF9KSVRPcGVyYXRpb25fR1N0WkIgbV9mdW5jdGlvbjsK
ICAgICBHUFJSZWcgbV9yZXN1bHRHUFI7CisgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
IG1fZ2xvYmFsT2JqZWN0OwogICAgIEdQUlJlZyBtX3N0cnVjdHVyZUdQUjsKICAgICBHUFJSZWcg
bV9zaXplR1BSOwogICAgIEdQUlJlZyBtX3N0b3JhZ2VHUFI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxDcmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdl
bmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYWxsQ3JlYXRlRGlyZWN0
QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3IuaAppbmRleCA5MTg1NmVjZmE4NGVkOTIzZTNkZTJi
NTgzYmNlNjgyN2M4NjcxZjc1Li4wZGRiMzA4MDcxYTAwYmQ4ZTQ2NmQ1MDk2ZjE1MmNmYjc2NTI5
NDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhbGxDcmVhdGVE
aXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yLmgK
QEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgQ2FsbENyZWF0ZURpcmVjdEFyZ3VtZW50c1Nsb3dQYXRo
R2VuZXJhdG9yIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXQKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxhbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBqaXQt
PnNpbGVudFNwaWxsKG1fcGxhbnNbaV0pOwogICAgICAgICBqaXQtPmNhbGxPcGVyYXRpb24oCi0g
ICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMsIG1fcmVzdWx0R1BSLCBt
X3N0cnVjdHVyZSwgbV9sZW5ndGhHUFIsIG1fbWluQ2FwYWNpdHkpOworICAgICAgICAgICAgb3Bl
cmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBtX3Jlc3VsdEdQUiwgJmppdC0+dm0oKSwgbV9z
dHJ1Y3R1cmUsIG1fbGVuZ3RoR1BSLCBtX21pbkNhcGFjaXR5KTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9wbGFucy5zaXplKCk7IGktLTspCiAgICAgICAgICAgICBqaXQtPnNpbGVudEZp
bGwobV9wbGFuc1tpXSk7CiAgICAgICAgIGppdC0+bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAppbmRleCAxNWFmNDFiZTA0ZTJiYzgzZjljYjc4
YmZmN2UzMGVjMTBlMTBhZjkyLi40YTcwOGFhYjkzMTMzOWI1ZWU0N2MzMzRlYjQxMmI4YjA5ODY1
MzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCkBAIC01Myw3ICs1Myw2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDYWxsRnJhbWU7Ci11
c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC00NDIs
NyArNDQxLDcgQEAgY2xhc3MgR3JhcGggOiBwdWJsaWMgdmlydHVhbCBTY2FubmFibGUgewogICAg
IEpTT2JqZWN0KiBnbG9iYWxUaGlzT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBvYmplY3QgPSBnbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbik7Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8SlNPYmplY3QqPihvYmplY3QtPm1ldGhv
ZFRhYmxlKG1fdm0pLT50b1RoaXMob2JqZWN0LCBvYmplY3QtPmdsb2JhbEV4ZWMoKSwgTm90U3Ry
aWN0TW9kZSkpOworICAgICAgICByZXR1cm4ganNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0LT5tZXRo
b2RUYWJsZShtX3ZtKS0+dG9UaGlzKG9iamVjdCwgb2JqZWN0LCBOb3RTdHJpY3RNb2RlKSk7CiAg
ICAgfQogICAgIAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGVGb3IoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmNwcAppbmRleCA0NzU0MTlmZDFlMmYwOGIxYWM5M2RlYTIxZWVhMmRjN2RjMDVhYWM3Li5j
NWJjZDRlM2QzZDJjNWUwMzkyYjhjMjgyOGJjZDdjYTEzNjMzNWU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKQEAgLTc2LDE2ICs3NiwxNCBAQCB2b2lkIEpJVENv
ZGU6OnJlY29uc3RydWN0KAogICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIG1pbmlmaWVk
REZHLCBzdHJlYW1JbmRleCwgcmVzdWx0KTsKIH0KIAotdm9pZCBKSVRDb2RlOjpyZWNvbnN0cnVj
dCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LAotICAgIE9wZXJhbmRzPE9wdGlvbmFs
PEpTVmFsdWU+PiYgcmVzdWx0KQordm9pZCBKSVRDb2RlOjpyZWNvbnN0cnVjdChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
dW5zaWduZWQgc3RyZWFtSW5kZXgsIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYgcmVzdWx0
KQogewogICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IHJlY292ZXJpZXM7CiAgICAgcmVjb25z
dHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBzdHJlYW1JbmRleCwgcmVjb3Zlcmllcyk7CiAg
ICAgCiAgICAgcmVzdWx0ID0gT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+KE9wZXJhbmRzTGlr
ZSwgcmVjb3Zlcmllcyk7CiAgICAgZm9yIChzaXplX3QgaSA9IHJlc3VsdC5zaXplKCk7IGktLTsp
Ci0gICAgICAgIHJlc3VsdFtpXSA9IHJlY292ZXJpZXNbaV0ucmVjb3ZlcihleGVjKTsKKyAgICAg
ICAgcmVzdWx0W2ldID0gcmVjb3Zlcmllc1tpXS5yZWNvdmVyKGNhbGxGcmFtZSk7CiB9CiAKIFJl
Z2lzdGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5k
bGluZ0NhbGxTaXRlKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCmluZGV4IDc2MWZiODg0
ZDk4MDQ4ODY4ZWI4OWNkYjMyY2JmMmMzNDA4ZjA0ZTIuLmJiOGY1MGFjYTY1ODVjYzA1YzM2NmUz
ZmZlZWI4Y2YzNWEzMDlmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5o
CkBAIC05OCw3ICs5OCw3IEBAIGNsYXNzIEpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSB7
CiAgICAgLy8gc3RhY2suIEN1cnJlbnRseSwgaXQgYWxzbyBoYXMgdGhlIHJlc3RyaWN0aW9uIHRo
YXQgdGhlIHZhbHVlcyBtdXN0IGJlIGluIHRoZWlyCiAgICAgLy8gYnl0ZWNvZGUtZGVzaWduYXRl
ZCBzdGFjayBzbG90cy4KICAgICB2b2lkIHJlY29uc3RydWN0KAotICAgICAgICBFeGVjU3RhdGUq
LCBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgT3BlcmFuZHM8
T3B0aW9uYWw8SlNWYWx1ZT4+JiByZXN1bHQpOworICAgICAgICBDYWxsRnJhbWUqLCBDb2RlQmxv
Y2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgT3BlcmFuZHM8T3B0aW9uYWw8
SlNWYWx1ZT4+JiByZXN1bHQpOwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgLy8gTkIuIEFs
bCBvZiB0aGVzZSBtZXRob2RzIHRha2UgQ29kZUJsb2NrKiBiZWNhdXNlIHRoZXkgbWF5IHdhbnQg
dG8gdXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCmlu
ZGV4IGY5MWI2ZmM4OWYzOGY3MTExMDNkMDY5ZjBlMGYwODMyY2E2OGQyMjUuLjAxMDYzY2U2YmI0
Nzg1MWVmMTNjOTJiNmE4MGUyZDIwYTg4MTExNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCkBAIC0xNDksMTIgKzE0OSwxMiBAQCB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogCiAgICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAK
LSAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNz
ZWQgdHdvIGFyZ3VtZW50cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgor
ICAgICAgICAvLyBvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1l
IGlzIHBhc3NlZCBvbmUgYXJndW1lbnQsIHRoZSBWTSouCiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cigmdm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIG1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIHBy
ZXBhcmVDYWxsT3BlcmF0aW9uKHZtKCkpOwogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1f
Z3JhcGguc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAotICAgICAgICBtX2Nh
bGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFt
ZSkpKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbChPcGVyYXRp
b25QdHJUYWcpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKSk7CiAKICAgICAgICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcih2bSgpKTsKICAgICB9CkBAIC0xNjQsMTEgKzE2NCwxMSBAQCB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogCiAgICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAK
LSAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50
cywgdGhlIFZNIGFuZCB0aGUgZXhlYyAodGhlIENhbGxGcmFtZSopLgorICAgICAgICAvLyBvcGVy
YXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCBvbmUgYXJndW1lbnQsIHRoZSBW
TSouCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigmdm0oKSksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7Ci0gICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKCkpOwogCi0g
ICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFn
KSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSkp
OworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsTGlua1JlY29yZChjYWxsKE9wZXJhdGlvblB0
clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0
aW9uSGFuZGxlcikpKTsKIAogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwog
ICAgIH0KQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rp
b24oKQogICAgICAgICBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmlnaW4oMCkpOwogICAgICAg
ICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIG1fc3BlY3VsYXRpdmUt
PmNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVCbG9j
ay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJh
dGlvbkNhbGxBcml0eUNoZWNrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIG1fc3BlY3VsYXRp
dmUtPmNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9w
ZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBHUFJJbmZvOjpyZWdUMCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8s
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKS5saW5rVG8oZnJvbUFyaXR5Q2hlY2ssIHRoaXMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAppbmRleCBhZTkzYzFhZjc0
Y2NiNDhkOWI1YzVjYzg3OWVlZWYyOGE0OTlmYWE5Li5kOTM5ZDMwM2QyNGE2MjM5MDQ3MTZmZjI3
ZmUwMzMyZmE3OTQ3ZmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIE9TUkVudHJ5RGF0YTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogfQogCiBTVVBQUkVTU19BU0FOCi12b2lkKiBwcmVwYXJlT1NSRW50cnko
RXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBB
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CkBAIC0xMDksOCArMTA5LDYgQEAg
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICAgICAgICAgICIgZnJvbSBiYyMiLCBieXRlY29k
ZUluZGV4LCAiXG4iKTsKICAgICB9CiAgICAgCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLQog
ICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAgICAgCiAgICAgaWYgKGJ5dGVjb2RlSW5kZXgp
CkBAIC0xNzksOSArMTc3LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhl
YywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICBmb3IgKHNp
emVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlOwog
ICAgICAgICBpZiAoIWFyZ3VtZW50KQotICAgICAgICAgICAgdmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKKyAgICAgICAgICAgIHZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmd1bWVudCAtIDEp
OworICAgICAgICAgICAgdmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KGFyZ3VtZW50IC0gMSk7
CiAgICAgICAgIAogICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50
KGFyZ3VtZW50KS52YWxpZGF0ZU9TUkVudHJ5VmFsdWUodmFsdWUsIEZsdXNoZWRKU1ZhbHVlKSkg
ewogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtMTk1LDcgKzE5
Myw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluCiAgICAgCiAgICAgZm9yIChzaXplX3QgbG9j
YWwgPSAwOyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7
ICsrbG9jYWwpIHsKICAgICAgICAgaW50IGxvY2FsT2Zmc2V0ID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwobG9jYWwpLm9mZnNldCgpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+cmVn
aXN0ZXJzKClbbG9jYWxPZmZzZXRdLmFzYW5VbnNhZmVKU1ZhbHVlKCk7CisgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW2xvY2FsT2Zmc2V0XS5hc2FuVW5zYWZl
SlNWYWx1ZSgpOwogICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBGbHVzaGVkSlNWYWx1ZTsK
IAogICAgICAgICBpZiAoZW50cnktPm1fbG9jYWxzRm9yY2VkQW55SW50LmdldChsb2NhbCkpIHsK
QEAgLTIzOCw3ICsyMzYsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVj
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbgogICAgIC8vICAgIHdv
dWxkIGhhdmUgb3RoZXJ3aXNlIGp1c3Qga2VwdCBydW5uaW5nIGFsYmVpdCBsZXNzIHF1aWNrbHku
CiAgICAgCiAgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yQ2hlY2sgPSBqaXRDb2RlLT5jb21tb24u
cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5kRXhpdCgpOwotICAgIGlmIChVTkxJ
S0VMWSghdm0uZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigmZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVTaXplRm9yQ2hlY2sgLSAxKS5vZmZzZXQoKV0pKSkgewor
ICAgIGlmIChVTkxJS0VMWSghdm0uZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigmY2FsbEZyYW1lLT5y
ZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVNpemVGb3JDaGVjayAtIDEp
Lm9mZnNldCgpXSkpKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAg
ICAgICAgICBkYXRhTG9nRigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFp
bGVkLlxuIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjY3LDcgKzI2NSw3IEBAIHZv
aWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2Nr
LCB1bnNpZ25lZCBieXRlY29kZUluCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAg
ICAgICAgZGF0YUxvZ0YoIiAgICBPU1IgdXNpbmcgdGFyZ2V0IFBDICVwLlxuIiwgdGFyZ2V0UEMp
OwogICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldFBDKTsKLSAgICAqYml0d2lzZV9jYXN0PHZvaWQq
Kj4oc2NyYXRjaCArIDEpID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBPU1JFbnRyeVB0clRhZywg
Yml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOworICAgICpiaXR3aXNlX2Nhc3Q8dm9pZCoqPihz
Y3JhdGNoICsgMSkgPSByZXRhZ0NvZGVQdHIodGFyZ2V0UEMsIE9TUkVudHJ5UHRyVGFnLCBiaXR3
aXNlX2Nhc3Q8UHRyVGFnPihjYWxsRnJhbWUpKTsKIAogICAgIFJlZ2lzdGVyKiBwaXZvdCA9IHNj
cmF0Y2ggKyAyICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnM7CiAgICAgCkBAIC0y
NzYsMTcgKzI3NCwxNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbgogICAgICAgICAKICAgICAg
ICAgaWYgKHJlZy5pc0xvY2FsKCkpIHsKICAgICAgICAgICAgIGlmIChlbnRyeS0+bV9sb2NhbHNG
b3JjZWREb3VibGUuZ2V0KHJlZy50b0xvY2FsKCkpKSB7Ci0gICAgICAgICAgICAgICAgKmJpdHdp
c2VfY2FzdDxkb3VibGUqPihwaXZvdCArIGluZGV4KSA9IGV4ZWMtPnJlZ2lzdGVycygpW3JlZy5v
ZmZzZXQoKV0uYXNhblVuc2FmZUpTVmFsdWUoKS5hc051bWJlcigpOworICAgICAgICAgICAgICAg
ICpiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4ocGl2b3QgKyBpbmRleCkgPSBjYWxsRnJhbWUtPnJlZ2lz
dGVycygpW3JlZy5vZmZzZXQoKV0uYXNhblVuc2FmZUpTVmFsdWUoKS5hc051bWJlcigpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAoZW50cnktPm1fbG9jYWxzRm9yY2VkQW55SW50LmdldChyZWcudG9Mb2NhbCgp
KSkgewotICAgICAgICAgICAgICAgICpiaXR3aXNlX2Nhc3Q8aW50NjRfdCo+KHBpdm90ICsgaW5k
ZXgpID0gZXhlYy0+cmVnaXN0ZXJzKClbcmVnLm9mZnNldCgpXS5hc2FuVW5zYWZlSlNWYWx1ZSgp
LmFzQW55SW50KCkgPDwgSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudDsKKyAgICAgICAgICAgICAg
ICAqYml0d2lzZV9jYXN0PGludDY0X3QqPihwaXZvdCArIGluZGV4KSA9IGNhbGxGcmFtZS0+cmVn
aXN0ZXJzKClbcmVnLm9mZnNldCgpXS5hc2FuVW5zYWZlSlNWYWx1ZSgpLmFzQW55SW50KCkgPDwg
SlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcGl2b3RbaW5kZXhdID0g
ZXhlYy0+cmVnaXN0ZXJzKClbcmVnLm9mZnNldCgpXS5hc2FuVW5zYWZlSlNWYWx1ZSgpOworICAg
ICAgICBwaXZvdFtpbmRleF0gPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3JlZy5vZmZzZXQoKV0u
YXNhblVuc2FmZUpTVmFsdWUoKTsKICAgICB9CiAgICAgCiAgICAgLy8gNCkgUmVzaHVmZmxlIHRo
b3NlIHJlZ2lzdGVycyB0aGF0IG5lZWQgcmVzaHVmZmxpbmcuCkBAIC0zMzEsNyArMzI5LDcgQEAg
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW4KICAgICByZXR1cm4gc2NyYXRjaDsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4g
cHJlcGFyZUNhdGNoT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7IAogICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQgfHwgY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwpAQCAtMzQxLDggKzMzOSw2IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JF
bnRyeShFeGVjU3RhdGUqIGV4CiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvRlRMKCkg
JiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLQogICAg
IENvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24o
KTsKICAgICBSRUxFQVNFX0FTU0VSVChkZmdDb21tb24pOwogICAgIERGRzo6Q2F0Y2hFbnRyeXBv
aW50RGF0YSogY2F0Y2hFbnRyeXBvaW50ID0gZGZnQ29tbW9uLT5jYXRjaE9TUkVudHJ5RGF0YUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CkBAIC0zNTUsNyArMzUxLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXgKIAogICAgIC8vIFdlJ3JlIG9ubHkgYWxsb3dlZCB0byBPU1IgZW50
ZXIgaWYgd2UndmUgcHJvdmVuIHdlIGhhdmUgY29tcGF0aWJsZSBhcmd1bWVudCB0eXBlcy4KICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBjYXRjaEVudHJ5cG9pbnQt
PmFyZ3VtZW50Rm9ybWF0cy5zaXplKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZFIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpKS5qc1ZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5qc1ZhbHVlKCk7CiAg
ICAgICAgIHN3aXRjaCAoY2F0Y2hFbnRyeXBvaW50LT5hcmd1bWVudEZvcm1hdHNbYXJndW1lbnRd
KSB7CiAgICAgICAgIGNhc2UgREZHOjpGbHVzaGVkSW50MzI6CiAgICAgICAgICAgICBpZiAoIXZh
bHVlLmlzSW50MzIoKSkKQEAgLTM4MSwxOCArMzc3LDE4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlQ2F0Y2hPU1JFbnRyeShFeGVjU3RhdGUq
IGV4CiAgICAgfQogCiAgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yQ2hlY2sgPSBkZmdDb21tb24t
PnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsKLSAgICBpZiAoVU5M
SUtFTFkoIXZtLmVuc3VyZVN0YWNrQ2FwYWNpdHlGb3IoJmV4ZWMtPnJlZ2lzdGVycygpW3ZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lU2l6ZUZvckNoZWNrKS5vZmZzZXQoKV0pKSkKKyAgICBp
ZiAoVU5MSUtFTFkoIXZtLmVuc3VyZVN0YWNrQ2FwYWNpdHlGb3IoJmNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVTaXplRm9yQ2hlY2spLm9mZnNldCgp
XSkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBl
eGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgYXV0byBpbnN0cnVjdGlvbiA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3Ry
dWN0aW9ucygpLmF0KGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgQVNTRVJUKGlu
c3RydWN0aW9uLT5pczxPcENhdGNoPigpKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVm
ZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShleGVjKS5t
X2J1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBpbnN0
cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShjYWxsRnJhbWUpLm1fYnVmZmVyOwogICAg
IEpTVmFsdWUqIGRhdGFCdWZmZXIgPSByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihkZmdDb21t
b24tPmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSAwOwogICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQm
IHByb2ZpbGUpIHsKICAgICAgICAgaWYgKCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJh
bmQpLmlzTG9jYWwoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YUJ1ZmZlcltp
bmRleF0gPSBleGVjLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7Cisg
ICAgICAgIGRhdGFCdWZmZXJbaW5kZXhdID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUu
bV9vcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgICAgICsraW5kZXg7CiAgICAgfSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAppbmRleCAxN2Y4YWVlMWUyZDg4ODY5Mjk2
MWVmOWFlYWRkMzQ1N2NkMzIxNzUyLi5kODE2NzdhMWMyY2U1YmI3NmU4YmM0MzJkNzllYmZmODc4
ZGYzYTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCkBAIC0zNSw3
ICszNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBDb2Rl
QmxvY2s7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIG5hbWVzcGFjZSBERkcgewog
CkBAIC04MiwxMiArODEsMTIgQEAgc3RydWN0IENhdGNoRW50cnlwb2ludERhdGEgewogCiAvLyBS
ZXR1cm5zIGEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyIHRoYXQgdGhlIE9TUiBlbnRyeSB0aHVu
ayB3aWxsIHJlY29nbml6ZSBhbmQKIC8vIHBhcnNlLiBJZiB0aGlzIHJldHVybnMgbnVsbCwgaXQg
bWVhbnMgCi12b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCk7Cit2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mLCBDYWxsRnJh
bWUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKIAogLy8gSWYgbnVsbCBp
cyByZXR1cm5lZCwgd2UgY2FuJ3QgT1NSIGVudGVyLiBJZiBpdCdzIG5vdCBudWxsLCBpdCdzIHRo
ZSBQQyB0byBqdW1wIHRvLgotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpOworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2Nr
KiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAjZWxzZQotaW5saW5lIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KK2lubGluZSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gcHJlcGFyZU9TUkVudHJ5
KFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIG51bGxwdHI7
IH0KICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCA3NDk1YWI2OTllZGNjZDZkMjAyMjhlZDljOWI3
NDIzOTNkM2VkMjU1Li44ZWY3ODM0MjlhZmMzYjU2M2FkMDEyNWM3YWZjNDhkNGNjYWY5YmViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTI0MCwyMSArMjQw
LDIxIEBAIHN0YXRpYyBKU0NlbGwqIGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29u
dGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlCiBzdGF0aWMgSlNDZWxsKiBjcmVhdGVDbG9u
ZWRBcmd1bWVudHNEdXJpbmdFeGl0KENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJs
b2NrLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVl
LCBpbnQzMl90IGFyZ3VtZW50Q291bnQpCiB7CiAgICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZN
Kj4oKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBjb250ZXh0LmZwPEV4ZWNTdGF0ZSo+KCk7CiAK
ICAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwogCiAgICAgaWYgKGlubGluZUNhbGxG
cmFtZSkKICAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxs
RnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKIAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFy
Z3VtZW50Q291bnQgLSAxOwogICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gQ2xvbmVkQXJn
dW1lbnRzOjpjcmVhdGVFbXB0eSgKLSAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBjYWxsZWUsIGxlbmd0aCk7CisgICAgICAg
IHZtLCBnbG9iYWxPYmplY3QtPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBjYWxsZWUsIGxl
bmd0aCk7CiAKICAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSAr
IChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CiAg
ICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCBmcmFtZS5hcmd1bWVudChpKSk7CisgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpLCBmcmFtZS5hcmd1bWVudChpKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApAQCAtMzM0LDggKzMzNCw4IEBAIHZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQo
Q29udGV4dCYgY29udGV4dCkKICAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGNvbnRleHQuZnA8RXhlY1N0YXRlKj4oKTsKLSAgICBBU1NFUlQoJmV4ZWMtPnZtKCkg
PT0gJnZtKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNvbnRleHQuZnA8Q2FsbEZyYW1l
Kj4oKTsKKyAgICBBU1NFUlQoJmNhbGxGcmFtZS0+dm0oKSA9PSAmdm0pOwogICAgIGF1dG8mIGNw
dSA9IGNvbnRleHQuY3B1OwogCiAgICAgaWYgKHZhbGlkYXRlREZHRG9lc0dDKSB7CkBAIC0zNDUs
MTEgKzM0NSwxMSBAQCB2b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvbnRl
eHQpCiAgICAgfQogCiAgICAgaWYgKHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7Ci0gICAgICAgIGV4
ZWMgPSB2bS5jYWxsRnJhbWVGb3JDYXRjaDsKLSAgICAgICAgY29udGV4dC5mcCgpID0gZXhlYzsK
KyAgICAgICAgY2FsbEZyYW1lID0gdm0uY2FsbEZyYW1lRm9yQ2F0Y2g7CisgICAgICAgIGNvbnRl
eHQuZnAoKSA9IGNhbGxGcmFtZTsKICAgICB9CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKIApAQCAtNjAyLDcgKzYwMiw3IEBA
IHZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4dCkKIAogICAgICAg
ICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgRGlzcGxhY2Vk
SW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBleGVjLT5y
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgSW5GUFI6CkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBPU1JFeGl0
OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGV4ZWMtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkQ2VsbCgpKSk7CisgICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZENlbGwoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAK
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtNjM1LDkgKzYzNSw5IEBAIHZvaWQgT1NSRXhpdDo6
ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4dCkKIAogICAgICAgICBjYXNlIEJvb2xlYW5E
aXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgZXhlYy0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZUpTVmFsdWUoKSk7CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJh
bmQsIGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpT
VmFsdWUoKSk7CiAjZWxzZQotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBq
c0Jvb2xlYW4oZXhlYy0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpT
VmFsdWUoKS5wYXlsb2FkKCkpKTsKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFu
ZCwganNCb29sZWFuKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNh
blVuc2FmZUpTVmFsdWUoKS5wYXlsb2FkKCkpKTsKICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7
CiAKQEAgLTY0Niw3ICs2NDYsNyBAQCB2b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRl
eHQmIGNvbnRleHQpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEludDMyRGlz
cGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBK
U1ZhbHVlKGV4ZWMtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJv
eGVkSW50MzIoKSkpOworICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1Zh
bHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVu
Ym94ZWRJbnQzMigpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
CkBAIC02NTUsNyArNjU1LDcgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0
JiBjb250ZXh0KQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBJbnQ1MkRpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNW
YWx1ZShleGVjLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hl
ZEludDUyKCkpKTsKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1
ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJv
eGVkSW50NTIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBVbmJveGVk
U3RyaWN0SW50NTJJbkdQUjoKQEAgLTY2Myw3ICs2NjMsNyBAQCB2b2lkIE9TUkV4aXQ6OmV4ZWN1
dGVPU1JFeGl0KENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGV4ZWMtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkU3RyaWN0SW50NTIoKSkpOworICAgICAgICAgICAgZnJh
bWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZVVuYm94ZWRTdHJpY3RJbnQ1MigpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICNlbmRpZgogCkBAIC02NzIsNyArNjcyLDcgQEAgdm9pZCBPU1JFeGl0Ojpl
eGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICBmcmFtZS5z
ZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlm
eU5hTihleGVjLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hl
ZERvdWJsZSgpKSkpOworICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZERvdWJsZSgpKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDb25zdGFudDoKQEAgLTg3NCwxMCArODc0
LDEwIEBAIHN0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0
LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrCiAKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlv
bkhhbmRsZXIoKSkgewogICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNo
LCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4KLSAgICAgICAgdm0uY2FsbEZyYW1l
Rm9yQ2F0Y2ggPSBjb250ZXh0LmZwPEV4ZWNTdGF0ZSo+KCk7CisgICAgICAgIHZtLmNhbGxGcmFt
ZUZvckNhdGNoID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpOwogICAgIH0KIAotICAgIHZtLnRv
cENhbGxGcmFtZSA9IGNvbnRleHQuZnA8RXhlY1N0YXRlKj4oKTsKKyAgICB2bS50b3BDYWxsRnJh
bWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7CiAKICAgICBpZiAoZXhpdFN0YXRlLT5pc0p1
bXBUb0xMSW50KSB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmln
aW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKQEAgLTkwMSw4ICs5MDEsOCBAQCBzdGF0aWMgdm9pZCBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ29udGV4dCYgY29udGV4dCwgVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jawogCiBzdGF0aWMgdm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYgY29udGV4dCwg
dWludDMyX3Qgb3NyRXhpdEluZGV4LCBjb25zdCBPU1JFeGl0JiBleGl0KQogewotICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGNvbnRleHQuZnA8RXhlY1N0YXRlKj4oKTsKLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
Y29udGV4dC5mcDxDYWxsRnJhbWUqPigpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpOwogICAgIEV4aXRLaW5kIGtpbmQgPSBleGl0Lm1fa2luZDsKICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKQEAgLTEwMDcsNyArMTAwNyw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1
bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3ZlCiAKICAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uQ3JlYXRl
RGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCksIGRlY2x0eXBlKG9wZXJhdGlvbkNyZWF0ZUNsb25l
ZEFyZ3VtZW50c0R1cmluZ0V4aXQpPjo6dmFsdWUsICJXZSBhc3N1bWUgdGhlc2UgZnVuY3Rpb25z
IGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlIGJlbG93LiIpOwogICAgICAgICBqaXQuc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCk+
KAotICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxG
cmFtZSksIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICBBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmppdC52bSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSksIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpy
ZWdUMSk7CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
Y2FzZSBEaXJlY3RBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CiAgICAgICAgICAgICBqaXQu
bW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzRHVyaW5nRXhpdCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKQEAgLTEwMjYsOSArMTAyNiw5IEBAIHZvaWQgT1NSRXhpdDo6
ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9wZXJhbmRzPFZh
bHVlUmVjb3ZlCiAgICAgfQogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6Y29tcGls
ZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNv
bXBpbGVPU1JFeGl0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykgewpA
QCAtMTAzOCw5ICsxMDM4LDkgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmNvbXBpbGVP
U1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICB9CiAKICAgICBpZiAodm0uY2FsbEZyYW1lRm9y
Q2F0Y2gpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLmNhbGxGcmFtZUZvckNhdGNoID09IGV4
ZWMpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS5jYWxsRnJhbWVGb3JDYXRjaCA9PSBjYWxs
RnJhbWUpOwogCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkRGR0pJVCk7CiAKQEAgLTE2NjEsMTAgKzE2NjEsMTAgQEAgdm9pZCBPU1JFeGl0Ojpj
b21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0
LCBjb25zdAogICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldCh2bSwgaml0LCBleGl0KTsKIH0KIAot
dm9pZCBKSVRfT1BFUkFUSU9OIE9TUkV4aXQ6OmRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlv
bkZhaWx1cmUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBkZWJ1Z0luZm9SYXcsIHZvaWQqIHNjcmF0
Y2gpCit2b2lkIEpJVF9PUEVSQVRJT04gT1NSRXhpdDo6ZGVidWdPcGVyYXRpb25QcmludFNwZWN1
bGF0aW9uRmFpbHVyZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdm9pZCogZGVidWdJbmZvUmF3LCB2
b2lkKiBzY3JhdGNoKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAK
ICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IHN0YXRpY19jYXN0
PFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyo+KGRlYnVnSW5mb1Jhdyk7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBkZWJ1Z0luZm8tPmNvZGVCbG9jazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmgKaW5kZXggY2JjNzEzMTA0Y2YwYzYxMjA5OThkOTNlMjkzM2E3ZmRh
NjdkM2IzNC4uMjU3MDRkMmNiOTgwYWUyMjQyZGQxZmZlNjkzYjRjN2Q5OGJiM2MyYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBzdHJ1
Y3QgT1NSRXhpdFN0YXRlIDogUmVmQ291bnRlZDxPU1JFeGl0U3RhdGU+IHsKIHN0cnVjdCBPU1JF
eGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKICAgICBPU1JFeGl0KEV4aXRLaW5kLCBKU1ZhbHVl
U291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJVCosIHVu
c2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gVUlOVF9NQVgpOwog
Ci0gICAgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CisgICAgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBjb21waWxlT1NS
RXhpdChDYWxsRnJhbWUqKSBXVEZfSU5URVJOQUw7CiAgICAgc3RhdGljIHZvaWQgZXhlY3V0ZU9T
UkV4aXQoUHJvYmU6OkNvbnRleHQmKTsKIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fcGF0Y2hhYmxlSnVtcExvY2F0aW9uOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0
cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIHByaXZhdGU6CiAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiwgVk0mLCBjb25zdCBPU1JFeGl0JiwgY29u
c3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mLCBTcGVjdWxhdGlvblJlY292ZXJ5Kik7CiAgICAg
c3RhdGljIHZvaWQgZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT3Bl
cmFuZHM8VmFsdWVSZWNvdmVyeT4mKTsKLSAgICBzdGF0aWMgdm9pZCBKSVRfT1BFUkFUSU9OIGRl
YnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoRXhlY1N0YXRlKiwgdm9pZCosIHZv
aWQqKSBXVEZfSU5URVJOQUw7CisgICAgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09w
ZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlKENhbGxGcmFtZSosIHZvaWQqLCB2b2lkKikg
V1RGX0lOVEVSTkFMOwogfTsKIAogc3RydWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAKaW5kZXggMjlkMjE5ZGFmZjU0NjM2YWZlZWU1OGY2ZWNmZTY1ZTgyZDFkZGE3
OC4uMjJkZTllNjFiZjAyMzE2YWFiZDJiMTBjNWE2MDFlM2U0Zjc3ZDBmOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cApAQCAtMzM0LDExICszMzQsMTEgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICB9CiB9CiAKLXN0YXRp
YyB2b2lkIG9zcldyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBH
UFJSZWcgc2NyYXRjaCkKK3N0YXRpYyB2b2lkIG9zcldyaXRlQmFycmllcihWTSYgdm0sIENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoKQogewogICAgIEFzc2Vt
Ymx5SGVscGVyczo6SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0LmJhcnJpZXJC
cmFuY2hXaXRob3V0RmVuY2Uob3duZXIpOwogCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvbk9TUldyaXRlQmFycmllcik+KG93bmVyKTsKKyAgICBqaXQuc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKT4oJnZtLCBvd25lcik7CiAg
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIHNjcmF0Y2gpOwog
ICAgIGppdC5jYWxsKHNjcmF0Y2gsIE9wZXJhdGlvblB0clRhZyk7CiAKQEAgLTM1Miw3ICszNTIs
NyBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICBqaXQubW92ZSgKICAgICAgICAgQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKAogICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5i
YXNlbGluZUFsdGVybmF0aXZlKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgIG9zcldy
aXRlQmFycmllcihqaXQsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7CisgICAgb3NyV3JpdGVCYXJyaWVyKHZtLCBqaXQsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAKICAgICAvLyBXZSBiYXJyaWVyIGFsbCBpbmxpbmVkIGZy
YW1lcyAtLSBhbmQgbm90IGp1c3QgdGhlIGN1cnJlbnQgaW5saW5lIHN0YWNrIC0tCiAgICAgLy8g
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoaWNoIGlubGluZWQgZnVuY3Rpb24gb3ducyB0aGUgdmFs
dWUgcHJvZmlsZSB0aGF0CkBAIC0zNjcsNyArMzY3LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9U
YXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQp
CiAgICAgICAgICAgICBqaXQubW92ZSgKICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoCiAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YmFz
ZWxpbmVDb2RlQmxvY2suZ2V0KCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICAg
ICAgb3NyV3JpdGVCYXJyaWVyKGppdCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKKyAgICAgICAgICAgIG9zcldyaXRlQmFycmllcih2bSwgaml0LCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICB9CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCBhMWY2
NTc2MWUwZDU0M2FlYzNlNGRkZDUzMzgwZTA0ZTMzMjAyMzg4Li41NTJhNjBmMGViYTEyMzMwMzdk
ZmE4MTUwZTc4MTAwZjNjY2MwODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJERkdXb3JrbGlzdC5o
IgogI2luY2x1ZGUgIkRlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkRpcmVj
dEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkV2YWxDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExG
b3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExPU1JFbnRyeS5oIgogI2luY2x1ZGUg
IkZyYW1lVHJhY2Vycy5oIgpAQCAtNjQsMTAgKzY1LDEyIEBACiAjaW5jbHVkZSAiSlNTZXQuaCIK
ICNpbmNsdWRlICJKU1dlYWtNYXAuaCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKKyNpbmNsdWRl
ICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTnVtYmVyQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJQYXJzZUludC5oIgorI2luY2x1ZGUgIlByb2dyYW1Db2RlQmxvY2suaCIK
ICNpbmNsdWRlICJSZWdFeHBHbG9iYWxEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlJlZ0V4cE1h
dGNoZXNBcnJheS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdElubGluZXMuaCIKQEAgLTg5LDEy
ICs5MiwxMiBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB0ZW1wbGF0ZTxi
b29sIHN0cmljdCwgYm9vbCBkaXJlY3Q+Ci1zdGF0aWMgaW5saW5lIHZvaWQgcHV0QnlWYWwoRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTVmFsdWUgYmFzZVZhbHVlLCB1aW50MzJfdCBpbmRleCwg
SlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTVmFsdWUgYmFzZVZhbHVlLCB1aW50MzJfdCBpbmRl
eCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQoaXNJbmRleChpbmRleCkpOwogICAgIGlm
IChkaXJlY3QpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkp
OwotICAgICAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCwgdmFsdWUsIDAsIHN0cmljdCA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJl
Y3RJbmRleFNob3VsZE5vdFRocm93KTsKKyAgICAgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0
RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIDAsIHN0cmljdCA/IFB1dERp
cmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKQEAg
LTEwNCwxNSArMTA3LDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUq
IGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSBiYXNlVmFsdWUsIHVpbnQzMl90CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0
QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc3RyaWN0KTsKKyAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBnbG9iYWxPYmplY3QsIGlu
ZGV4LCB2YWx1ZSwgc3RyaWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJhc2VW
YWx1ZS5wdXRCeUluZGV4KGV4ZWMsIGluZGV4LCB2YWx1ZSwgc3RyaWN0KTsKKyAgICBiYXNlVmFs
dWUucHV0QnlJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc3RyaWN0KTsKIH0KIAog
dGVtcGxhdGU8Ym9vbCBzdHJpY3QsIGJvb2wgZGlyZWN0PgotQUxXQVlTX0lOTElORSBzdGF0aWMg
dm9pZCBwdXRCeVZhbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHB1dEJ5VmFs
SW50ZXJuYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCkBAIC0xMjQsNyArMTI3LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9p
ZCBwdXRCeVZhbEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBFbmNvZGVkSlNWYWwK
ICAgICAgICAgLy8gRGVzcGl0ZSBpdHMgbmFtZSwgSlNWYWx1ZTo6aXNVSW50MzIgd2lsbCByZXR1
cm4gdHJ1ZSBvbmx5IGZvciBwb3NpdGl2ZSBib3hlZCBpbnQzMl90OyBhbGwgdGhvc2UgdmFsdWVz
IGFyZSB2YWxpZCBhcnJheSBpbmRpY2VzLgogICAgICAgICBBU1NFUlQoaXNJbmRleChwcm9wZXJ0
eS5hc1VJbnQzMigpKSk7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcHV0QnlW
YWw8c3RyaWN0LCBkaXJlY3Q+KGV4ZWMsIHZtLCBiYXNlVmFsdWUsIHByb3BlcnR5LmFzVUludDMy
KCksIHZhbHVlKTsKKyAgICAgICAgcHV0QnlWYWw8c3RyaWN0LCBkaXJlY3Q+KGdsb2JhbE9iamVj
dCwgdm0sIGJhc2VWYWx1ZSwgcHJvcGVydHkuYXNVSW50MzIoKSwgdmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0xMzMsMTMgKzEzNiwxMyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRp
YyB2b2lkIHB1dEJ5VmFsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEVuY29kZWRK
U1ZhbAogICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUFzVUludDMyID0gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHByb3BlcnR5QXNEb3VibGUpOwogICAgICAgICBpZiAocHJvcGVydHlBc0RvdWJsZSA9
PSBwcm9wZXJ0eUFzVUludDMyICYmIGlzSW5kZXgocHJvcGVydHlBc1VJbnQzMikpIHsKICAgICAg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHB1dEJ5VmFsPHN0cmljdCwgZGly
ZWN0PihleGVjLCB2bSwgYmFzZVZhbHVlLCBwcm9wZXJ0eUFzVUludDMyLCB2YWx1ZSk7CisgICAg
ICAgICAgICBwdXRCeVZhbDxzdHJpY3QsIGRpcmVjdD4oZ2xvYmFsT2JqZWN0LCB2bSwgYmFzZVZh
bHVlLCBwcm9wZXJ0eUFzVUludDMyLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5n
IHRocm93cyBhbiBleGNlcHRpb24uCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50
b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Q
cm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHN0cmljdCk7
CkBAIC0xNDgsOTQgKzE1MSw5MCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHB1dEJ5VmFs
SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEVuY29kZWRKU1ZhbAogICAgICAgICBK
U09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgICAgIGlmIChP
cHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKICAg
ICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBzdHJpY3QgPyBQdXREaXJl
Y3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CisgICAg
ICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZh
bHVlKCksIHZhbHVlLCAwLCBzdHJpY3QgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0
RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBDb21tb25TbG93UGF0aHM6OnB1
dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7CisgICAgICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZt
LCBnbG9iYWxPYmplY3QsIGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBiYXNlVmFs
dWUucHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VWYWx1ZS5w
dXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogdGVtcGxh
dGU8Ym9vbCBzdHJpY3QsIGJvb2wgZGlyZWN0PgotQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBw
dXRCeVZhbENlbGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNDZWxsKiBiYXNl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorQUxXQVlTX0lOTElO
RSBzdGF0aWMgdm9pZCBwdXRCeVZhbENlbGxJbnRlcm5hbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBWTSYgdm0sIEpTQ2VsbCogYmFzZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlLCBzdHJpY3Qp
OwogICAgIGlmIChkaXJlY3QpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS0+aXNPYmpl
Y3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZSk7CiAg
ICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGlu
ZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBzdHJpY3QgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93
IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CisgICAgICAgICAgICBiYXNlT2JqZWN0
LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBz
dHJpY3QgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGRO
b3RUaHJvdyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgQ29tbW9u
U2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIGJhc2VPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVj
dFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBiYXNlLT5wdXRJbmxpbmUo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgYmFzZS0+cHV0SW5saW5lKGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKIHRlbXBsYXRlPGJv
b2wgc3RyaWN0LCBib29sIGRpcmVjdD4KLUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgcHV0QnlW
YWxDZWxsU3RyaW5nSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTQ2VsbCogYmFz
ZSwgSlNTdHJpbmcqIHByb3BlcnR5LCBKU1ZhbHVlIHZhbHVlKQorQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCBwdXRCeVZhbENlbGxTdHJpbmdJbnRlcm5hbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBWTSYgdm0sIEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5LCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHktPnRvSWRlbnRpZmllcihleGVjKTsKKyAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgIHB1dEJ5VmFsQ2VsbEludGVybmFsPHN0cmljdCwgZGlyZWN0PihleGVj
LCB2bSwgYmFzZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgcHV0QnlWYWxDZWxsSW50ZXJu
YWw8c3RyaWN0LCBkaXJlY3Q+KGdsb2JhbE9iamVjdCwgdm0sIGJhc2UsIHByb3BlcnR5TmFtZSwg
dmFsdWUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Ci1jaGFyKiBuZXdUeXBl
ZEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50
MzJfdCBzaXplLCBjaGFyKiB2ZWN0b3IpCitjaGFyKiBuZXdUeXBlZEFycmF5V2l0aFNpemUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
aW50MzJfdCBzaXplLCBjaGFyKiB2ZWN0b3IpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoc2l6ZSA8IDApIHsKLSAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IlJlcXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUiX3MpKTsKKyAgICAgICAgdGhyb3dFeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsICJS
ZXF1ZXN0ZWQgbGVuZ3RoIGlzIG5lZ2F0aXZlIl9zKSk7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KICAgICAKICAgICBpZiAodmVjdG9yKQotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNo
YXIqPihWaWV3Q2xhc3M6OmNyZWF0ZVdpdGhGYXN0VmVjdG9yKGV4ZWMsIHN0cnVjdHVyZSwgc2l6
ZSwgdW50YWdBcnJheVB0cih2ZWN0b3IsIHNpemUpKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KFZpZXdDbGFzczo6Y3JlYXRlV2l0aEZhc3RWZWN0b3IoZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHNpemUsIHVudGFnQXJyYXlQdHIodmVjdG9yLCBzaXplKSkpOwogCi0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBiaXR3aXNlX2Nhc3Q8Y2hhcio+KFZpZXdDbGFzczo6
Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgc2l6ZSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGJpdHdpc2VfY2FzdDxjaGFyKj4oVmlld0NsYXNzOjpjcmVhdGUoZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHNpemUpKSk7CiB9CiAKIHRlbXBsYXRlIDxib29sIHN0cmljdD4KLXN0YXRp
YyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0V2l0aFRoaXMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRoaXMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCitzdGF0aWMgQUxX
QVlTX0lOTElORSB2b2lkIHB1dFdpdGhUaGlzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsK
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAg
ICAgSlNWYWx1ZSB0aGlzVmFsID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRUaGlzKTsKICAgICBK
U1ZhbHVlIHB1dFZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QodGhpc1ZhbCwgc3RyaWN0KTsKLSAgICBiYXNlVmFsdWUucHV0SW5s
aW5lKGV4ZWMsIGlkZW50LCBwdXRWYWx1ZSwgc2xvdCk7CisgICAgYmFzZVZhbHVlLnB1dElubGlu
ZShnbG9iYWxPYmplY3QsIGlkZW50LCBwdXRWYWx1ZSwgc2xvdCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEJpZ0ludE9wZXJhdGlvbiwgdHlwZW5hbWUgTnVtYmVyT3BlcmF0aW9uPgotc3RhdGlj
IEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgYmluYXJ5T3AoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBCaWdJ
bnRPcGVyYXRpb24mJiBiaWdJbnRPcCwgTnVtYmVyT3BlcmF0aW9uJiYgbnVtYmVyT3AsIGNvbnN0
IGNoYXIqIGVycm9yTWVzc2FnZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVl
IGJpbmFyeU9wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQmlnSW50T3BlcmF0
aW9uJiYgYmlnSW50T3AsIE51bWJlck9wZXJhdGlvbiYmIG51bWJlck9wLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsK
IAotICAgIGF1dG8gbGVmdE51bWVyaWMgPSBvcDEudG9OdW1lcmljKGV4ZWMpOworICAgIGF1dG8g
bGVmdE51bWVyaWMgPSBvcDEudG9OdW1lcmljKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byByaWdodE51bWVy
aWMgPSBvcDIudG9OdW1lcmljKGV4ZWMpOworICAgIGF1dG8gcmlnaHROdW1lcmljID0gb3AyLnRv
TnVtZXJpYyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJ
bnQqPihsZWZ0TnVtZXJpYykgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJp
Z2h0TnVtZXJpYykpIHsKICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJ
bnQqPihsZWZ0TnVtZXJpYykgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJp
Z2h0TnVtZXJpYykpCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShiaWdJbnRPcChleGVjLCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1lcmlj
KSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoYmlnSW50T3AoZ2xvYmFsT2Jq
ZWN0LCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSwgV1RGOjpnZXQ8SlNCaWdJbnQq
PihyaWdodE51bWVyaWMpKSkpOwogCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogICAgIH0KIAogICAgIHNjb3Bl
LnJlbGVhc2UoKTsKQEAgLTI0NCwyNSArMjQzLDIzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVu
Y29kZWRKU1ZhbHVlIGJpbmFyeU9wKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJpZ0ludE9wZXJhdGlvbiwgdHlwZW5hbWUgSW50MzJP
cGVyYXRpb24+Ci1zdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBiaXR3aXNlQmlu
YXJ5T3AoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyLCBCaWdJbnRPcGVyYXRpb24mJiBiaWdJbnRPcCwgSW50MzJPcGVy
YXRpb24mJiBpbnQzMk9wLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCitzdGF0aWMgQUxXQVlT
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSBiaXR3aXNlQmluYXJ5T3AoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVk0mIHZtLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyLCBCaWdJbnRPcGVyYXRpb24mJiBiaWdJbnRPcCwgSW50MzJPcGVyYXRp
b24mJiBpbnQzMk9wLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVl
IG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAotICAgIGF1dG8gbGVmdE51bWVyaWMgPSBvcDEu
dG9CaWdJbnRPckludDMyKGV4ZWMpOworICAgIGF1dG8gbGVmdE51bWVyaWMgPSBvcDEudG9CaWdJ
bnRPckludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byByaWdodE51bWVyaWMgPSBvcDIudG9CaWdJbnRP
ckludDMyKGV4ZWMpOworICAgIGF1dG8gcmlnaHROdW1lcmljID0gb3AyLnRvQmlnSW50T3JJbnQz
MihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihs
ZWZ0TnVtZXJpYykgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVt
ZXJpYykpIHsKICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihs
ZWZ0TnVtZXJpYykgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVt
ZXJpYykpCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShiaWdJbnRPcChleGVjLCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSwgV1RG
OjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSkpOworICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoYmlnSW50T3AoZ2xvYmFsT2JqZWN0LCBX
VEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihyaWdo
dE51bWVyaWMpKSkpOwogCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBlcnJvck1lc3NhZ2UpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogICAgIH0KIAogICAgIHNjb3BlLnJlbGVh
c2UoKTsKQEAgLTI3OCw5MiArMjc1LDk5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIHBhcnNlSW50UmVzdWx0KGRvdWJsZSBpbnB1dCkKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGlucHV0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIEpTVmFs
dWUgZ2V0QnlWYWxPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTT2JqZWN0KiBiYXNl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1
ZSBnZXRCeVZhbE9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpT
T2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIFN0cnVjdHVy
ZSYgc3RydWN0dXJlID0gKmJhc2UtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKEpTQ2VsbDo6Y2Fu
VXNlRmFzdEdldE93blByb3BlcnR5KHN0cnVjdHVyZSkpIHsKICAgICAgICAgaWYgKEpTVmFsdWUg
cmVzdWx0ID0gYmFzZS0+ZmFzdEdldE93blByb3BlcnR5KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gYmFz
ZS0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIGJhc2UtPmdldChnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKIGV4dGVybiAiQyIgewogCi1FbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VG9UaGlzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9UaGlzKGV4ZWMs
IE5vdFN0cmljdE1vZGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3ApLnRvVGhpcyhnbG9iYWxPYmplY3QsIE5vdFN0cmljdE1vZGUpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpc1N0cmljdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3ApCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3ApLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50b1RoaXMoZ2xvYmFsT2Jq
ZWN0LCBTdHJpY3RNb2RlKSk7CiB9CiAKLUpTQXJyYXkqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T2JqZWN0S2V5cyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPYmplY3Qp
CitKU0FycmF5KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdEtleXMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9iamVjdCkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU09iamVjdCogb2JqZWN0ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPYmplY3QpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9iamVjdCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgcmV0dXJuIG93blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOworICAgIHJl
dHVybiBvd25Qcm9wZXJ0eUtleXMoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogfQogCi1KU0Fy
cmF5KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdEtleXNPYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogb2JqZWN0KQorSlNBcnJheSogSklUX09QRVJBVElPTiBvcGVyYXRpb25P
YmplY3RLZXlzT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBv
YmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICByZXR1cm4gb3duUHJvcGVydHlLZXlzKGV4ZWMs
IG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZTo6RXhjbHVkZSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiBvd25Qcm9wZXJ0
eUtleXMoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uT2JqZWN0Q3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3RvdHlwZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RD
cmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3RvdHlwZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvdG90eXBlKTsKIAogICAgIGlmICghcHJv
dG90eXBlLmlzT2JqZWN0KCkgJiYgIXByb3RvdHlwZS5pc051bGwoKSkgewotICAgICAgICB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiT2JqZWN0IHByb3RvdHlwZSBtYXkgb25seSBiZSBh
biBPYmplY3Qgb3IgbnVsbC4iX3MpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJPYmplY3QgcHJvdG90eXBlIG1heSBvbmx5IGJlIGFuIE9iamVjdCBvciBu
dWxsLiJfcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChwcm90
b3R5cGUuaXNPYmplY3QoKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjLCBhc09iamVjdChwcm90b3R5cGUpKSk7Ci0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSkpOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2Jh
bE9iamVjdCwgYXNPYmplY3QocHJvdG90eXBlKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgY29uc3RydWN0RW1wdHlPYmplY3Qodm0sIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlw
ZU9iamVjdFN0cnVjdHVyZSgpKSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25PYmplY3RDcmVhdGVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG90eXBl
KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdENyZWF0ZU9iamVjdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlKQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHByb3RvdHlwZSk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25DcmVhdGVUaGlzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCB1
aW50MzJfdCBpbmxpbmVDYXBhY2l0eSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVUaGlzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBjb25zdHJ1
Y3RvciwgdWludDMyX3QgaW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIGlmIChjb25zdHJ1Y3Rvci0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlICYmIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5jYW5Vc2VBbGxvY2F0aW9uUHJvZmlsZSgpKSB7Ci0g
ICAgICAgIGF1dG8gcmFyZURhdGEgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+
ZW5zdXJlUmFyZURhdGFBbmRBbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVDYXBhY2l0eSk7
CisgICAgICAgIGF1dG8gcmFyZURhdGEgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9y
KS0+ZW5zdXJlUmFyZURhdGFBbmRBbGxvY2F0aW9uUHJvZmlsZShnbG9iYWxPYmplY3QsIGlubGlu
ZUNhcGFjaXR5KTsKICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAg
ICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZSogYWxsb2NhdGlvblBy
b2ZpbGUgPSByYXJlRGF0YS0+b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKTsKICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBhbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7Ci0gICAg
ICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1
cmUpOworICAgICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qodm0s
IHN0cnVjdHVyZSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKSB7CiAg
ICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gYWxsb2NhdGlvblByb2ZpbGUtPnByb3Rv
dHlwZSgpOwotICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZSA9PSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNvbnN0cnVjdG9yKS0+cHJvdG90eXBlRm9yQ29uc3RydWN0aW9uKHZtLCBleGVjKSk7Cisg
ICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlID09IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3Ry
dWN0b3IpLT5wcm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24odm0sIGdsb2JhbE9iamVjdCkpOwogICAg
ICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGtub3duUG9seVByb3RvT2Zmc2V0LCBwcm90
b3R5cGUpOwogICAgICAgICAgICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQcm90b3R5cGUoKTsKICAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHJlc3Vs
dC0+aW5kZXhpbmdUeXBlKCkpLCAiV2UgcmVseSBvbiBKU0ZpbmFsT2JqZWN0IG5vdCBzdGFydGlu
ZyBvdXQgd2l0aCBhbiBpbmRleGluZyB0eXBlIG90aGVyd2lzZSB3ZSB3b3VsZCBwb3RlbnRpYWxs
eSBuZWVkIHRvIGNvbnZlcnQgdG8gc2xvdyBwdXQgc3RvcmFnZSIpOwpAQCAtMzcxLDcwICszNzUs
NzYgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKLSAgICBKU1ZhbHVlIHByb3RvID0gY29uc3RydWN0b3ItPmdldChleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUpOworICAgIEpTVmFsdWUgcHJvdG8gPSBjb25zdHJ1Y3Rvci0+
Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAocHJvdG8uaXNPYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGFzT2JqZWN0KHBy
b3RvKSk7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAgICAgICBy
ZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LCBhc09iamVjdChwcm90bykp
OworICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QpOwogfQogCi1K
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlUHJvbWlzZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVQcm9taXNlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvcikKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpj
cmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3QtPnByb21pc2VDb25zdHJ1
Y3RvcigpLCBjb25zdHJ1Y3RvciwgZ2xvYmFsT2JqZWN0LT5wcm9taXNlU3RydWN0dXJlKCkpOwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnByb21pc2VDb25zdHJ1Y3Rv
cigpLCBjb25zdHJ1Y3RvciwgZ2xvYmFsT2JqZWN0LT5wcm9taXNlU3RydWN0dXJlKCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNQcm9taXNlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSkpOwogfQogCi1KU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW50ZXJuYWxQcm9taXNlKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUludGVybmFsUHJvbWlz
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogY29uc3RydWN0b3IpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LT5p
bnRlcm5hbFByb21pc2VDb25zdHJ1Y3RvcigpLCBjb25zdHJ1Y3RvciwgZ2xvYmFsT2JqZWN0LT5p
bnRlcm5hbFByb21pc2VTdHJ1Y3R1cmUoKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJ
bnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+aW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IoKSwgY29uc3RydWN0b3IsIGds
b2JhbE9iamVjdC0+aW50ZXJuYWxQcm9taXNlU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
SlNJbnRlcm5hbFByb21pc2U6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKSk7CiB9CiAKLUpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVHZW5lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogY29uc3RydWN0b3IsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCitKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlR2VuZXJhdG9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvcikKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBudWxscHRyLCBjb25zdHJ1Y3RvciwgZ2xvYmFsT2Jq
ZWN0LT5nZW5lcmF0b3JTdHJ1Y3R1cmUoKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJ
bnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxPYmplY3QsIG51
bGxwdHIsIGNvbnN0cnVjdG9yLCBnbG9iYWxPYmplY3QtPmdlbmVyYXRvclN0cnVjdHVyZSgpKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTR2VuZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZSkpOwogfQog
Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXN5bmNHZW5lcmF0b3IoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXN5bmNHZW5l
cmF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGNvbnN0cnVjdG9y
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG51bGxwdHIsIGNv
bnN0cnVjdG9yLCBnbG9iYWxPYmplY3QtPmFzeW5jR2VuZXJhdG9yU3RydWN0dXJlKCkpOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBudWxscHRyLCBjb25zdHJ1Y3RvciwgZ2xvYmFsT2JqZWN0
LT5hc3luY0dlbmVyYXRvclN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQXN5bmNHZW5l
cmF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25DYWxsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGFyZ2V0KQorSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxPYmplY3RDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGFyZ2V0KQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVGFyZ2V0KTsKICAgICBBU1NFUlQoIXZhbHVlLmlzT2Jq
ZWN0KCkpOwogCiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKTsKLSAgICByZXR1cm4gdmFsdWUudG9PYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgcmV0dXJuIHZhbHVlLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub09iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRUYXJnZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiBlcnJvck1lc3NhZ2UpCitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRhcmdldCwgVW5pcXVlZFN0cmluZ0lt
cGwqIGVycm9yTWVzc2FnZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRUYXJnZXQpOwpAQCAtNDQyLDI3NyArNDUy
LDMxOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9PYmplY3QoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgaWYgKFVOTElLRUxZKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpKSB7CiAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UtPmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBlcnJvck1l
c3NhZ2UpOworICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCBlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlLnRvT2JqZWN0KGV4
ZWMsIGdsb2JhbE9iamVjdCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdmFsdWUu
dG9PYmplY3QoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVNb2QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYWx1ZU1vZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewot
ICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogbGVmdCwg
SlNCaWdJbnQqIHJpZ2h0KSAtPiBKU0JpZ0ludCogewotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6
OnJlbWFpbmRlcihleGVjLCBsZWZ0LCByaWdodCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisg
ICAgYXV0byBiaWdJbnRPcCA9IFtdIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogbGVmdCwgSlNCaWdJbnQqIHJpZ2h0KSAtPiBKU0JpZ0ludCogeworICAgICAgICByZXR1
cm4gSlNCaWdJbnQ6OnJlbWFpbmRlcihnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsKICAgICB9
OwogCiAgICAgYXV0byBudW1iZXJPcCA9IFtdIChkb3VibGUgbGVmdCwgZG91YmxlIHJpZ2h0KSAt
PiBkb3VibGUgewogICAgICAgICByZXR1cm4ganNNb2QobGVmdCwgcmlnaHQpOwogICAgIH07CiAK
LSAgICByZXR1cm4gYmluYXJ5T3AoZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYmlnSW50
T3AsIG51bWJlck9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHJl
bWFpbmRlciBvcGVyYXRpb24uIik7CisgICAgcmV0dXJuIGJpbmFyeU9wKGdsb2JhbE9iamVjdCwg
dm0sIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsIGJpZ0ludE9wLCBudW1iZXJPcCwgIkludmFsaWQg
bWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiByZW1haW5kZXIgb3BlcmF0aW9uLiIpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0Tm90KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVCaXROb3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKIAot
ICAgIGF1dG8gb3BlcmFuZE51bWVyaWMgPSBvcDEudG9CaWdJbnRPckludDMyKGV4ZWMpOworICAg
IGF1dG8gb3BlcmFuZE51bWVyaWMgPSBvcDEudG9CaWdJbnRPckludDMyKGdsb2JhbE9iamVjdCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KG9wZXJhbmROdW1lcmljKSkK
LSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJ
bnQ6OmJpdHdpc2VOb3QoZXhlYywgV1RGOjpnZXQ8SlNCaWdJbnQqPihvcGVyYW5kTnVtZXJpYykp
KSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpT
QmlnSW50OjpiaXR3aXNlTm90KGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8SlNCaWdJbnQqPihvcGVy
YW5kTnVtZXJpYykpKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKH5X
VEY6OmdldDxpbnQzMl90PihvcGVyYW5kTnVtZXJpYykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdEFuZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0QW5kKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7Ci0gICAgYXV0byBiaWdJbnRPcCA9IFtdIChFeGVjU3RhdGUqIGV4ZWMs
IEpTQmlnSW50KiBsZWZ0LCBKU0JpZ0ludCogcmlnaHQpIC0+IEpTQmlnSW50KiB7Ci0gICAgICAg
IHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZUFuZChleGVjLCBsZWZ0LCByaWdodCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOworCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogbGVmdCwgSlNCaWdJbnQqIHJpZ2h0KSAtPiBKU0JpZ0lu
dCogeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VBbmQoZ2xvYmFsT2JqZWN0LCBs
ZWZ0LCByaWdodCk7CiAgICAgfTsKIAogICAgIGF1dG8gaW50MzJPcCA9IFtdIChpbnQzMl90IGxl
ZnQsIGludDMyX3QgcmlnaHQpIC0+IGludDMyX3QgewogICAgICAgICByZXR1cm4gbGVmdCAmIHJp
Z2h0OwogICAgIH07CiAKLSAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGV4ZWMsIGVuY29kZWRP
cDEsIGVuY29kZWRPcDIsIGJpZ0ludE9wLCBpbnQzMk9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50
IGFuZCBvdGhlciB0eXBlIGluIGJpdHdpc2UgJ2FuZCcgb3BlcmF0aW9uLiJfcyk7CisgICAgcmV0
dXJuIGJpdHdpc2VCaW5hcnlPcChnbG9iYWxPYmplY3QsIHZtLCBlbmNvZGVkT3AxLCBlbmNvZGVk
T3AyLCBiaWdJbnRPcCwgaW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIg
dHlwZSBpbiBiaXR3aXNlICdhbmQnIG9wZXJhdGlvbi4iX3MpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0T3IoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdE9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7Ci0gICAgYXV0byBiaWdJbnRPcCA9IFtdIChFeGVjU3RhdGUqIGV4ZWMs
IEpTQmlnSW50KiBsZWZ0LCBKU0JpZ0ludCogcmlnaHQpIC0+IEpTQmlnSW50KiB7Ci0gICAgICAg
IHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZU9yKGV4ZWMsIGxlZnQsIHJpZ2h0KTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiBsZWZ0LCBKU0JpZ0ludCogcmlnaHQpIC0+IEpTQmlnSW50
KiB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZU9yKGdsb2JhbE9iamVjdCwgbGVm
dCwgcmlnaHQpOwogICAgIH07CiAKICAgICBhdXRvIGludDMyT3AgPSBbXSAoaW50MzJfdCBsZWZ0
LCBpbnQzMl90IHJpZ2h0KSAtPiBpbnQzMl90IHsKICAgICAgICAgcmV0dXJuIGxlZnQgfCByaWdo
dDsKICAgICB9OwogCi0gICAgcmV0dXJuIGJpdHdpc2VCaW5hcnlPcChleGVjLCBlbmNvZGVkT3Ax
LCBlbmNvZGVkT3AyLCBiaWdJbnRPcCwgaW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBh
bmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICdvcicgb3BlcmF0aW9uLiJfcyk7CisgICAgcmV0dXJu
IGJpdHdpc2VCaW5hcnlPcChnbG9iYWxPYmplY3QsIHZtLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3Ay
LCBiaWdJbnRPcCwgaW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlw
ZSBpbiBiaXR3aXNlICdvcicgb3BlcmF0aW9uLiJfcyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVCaXRYb3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdFhvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKQogewotICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBK
U0JpZ0ludCogbGVmdCwgSlNCaWdJbnQqIHJpZ2h0KSAtPiBKU0JpZ0ludCogewotICAgICAgICBy
ZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VYb3IoZXhlYywgbGVmdCwgcmlnaHQpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKKworICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIGxlZnQsIEpTQmlnSW50KiByaWdodCkgLT4gSlNCaWdJbnQq
IHsKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpiaXR3aXNlWG9yKGdsb2JhbE9iamVjdCwgbGVm
dCwgcmlnaHQpOwogICAgIH07CiAKICAgICBhdXRvIGludDMyT3AgPSBbXSAoaW50MzJfdCBsZWZ0
LCBpbnQzMl90IHJpZ2h0KSAtPiBpbnQzMl90IHsKICAgICAgICAgcmV0dXJuIGxlZnQgXiByaWdo
dDsKICAgICB9OwogCi0gICAgcmV0dXJuIGJpdHdpc2VCaW5hcnlPcChleGVjLCBlbmNvZGVkT3Ax
LCBlbmNvZGVkT3AyLCBiaWdJbnRPcCwgaW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBh
bmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICd4b3InIG9wZXJhdGlvbi4iX3MpOworICAgIHJldHVy
biBiaXR3aXNlQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2bSwgZW5jb2RlZE9wMSwgZW5jb2RlZE9w
MiwgYmlnSW50T3AsIGludDMyT3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5
cGUgaW4gYml0d2lzZSAneG9yJyBvcGVyYXRpb24uIl9zKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdExTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0TFNoaWZ0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgYXV0byBiaWdJbnRPcCA9IFtdIChFeGVjU3RhdGUq
IGV4ZWMsIEpTQmlnSW50KiBsZWZ0LCBKU0JpZ0ludCogcmlnaHQpIC0+IEpTQmlnSW50KiB7Ci0g
ICAgICAgIHJldHVybiBKU0JpZ0ludDo6bGVmdFNoaWZ0KGV4ZWMsIGxlZnQsIHJpZ2h0KTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBsZWZ0LCBKU0JpZ0ludCogcmlnaHQpIC0+IEpT
QmlnSW50KiB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVj
dCwgbGVmdCwgcmlnaHQpOwogICAgIH07CiAKICAgICBhdXRvIGludDMyT3AgPSBbXSAoaW50MzJf
dCBsZWZ0LCBpbnQzMl90IHJpZ2h0KSAtPiBpbnQzMl90IHsKICAgICAgICAgcmV0dXJuIGxlZnQg
PDwgKHJpZ2h0ICYgMHgxZik7CiAgICAgfTsKIAotICAgIHJldHVybiBiaXR3aXNlQmluYXJ5T3Ao
ZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYmlnSW50T3AsIGludDMyT3AsICJJbnZhbGlk
IG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gbGVmdCBzaGlmdCBvcGVyYXRpb24uIl9z
KTsKKyAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGdsb2JhbE9iamVjdCwgdm0sIGVuY29kZWRP
cDEsIGVuY29kZWRPcDIsIGJpZ0ludE9wLCBpbnQzMk9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50
IGFuZCBvdGhlciB0eXBlIGluIGxlZnQgc2hpZnQgb3BlcmF0aW9uLiJfcyk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVCaXRSU2hpZnQoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdFJTaGlm
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIGF1dG8gYmlnSW50T3AgPSBbXSAo
RXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogbGVmdCwgSlNCaWdJbnQqIHJpZ2h0KSAtPiBKU0Jp
Z0ludCogewotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoZXhlYywg
bGVmdCwgcmlnaHQpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIGF1dG8gYmlnSW50T3Ag
PSBbXSAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIGxlZnQsIEpTQmln
SW50KiByaWdodCkgLT4gSlNCaWdJbnQqIHsKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpzaWdu
ZWRSaWdodFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOwogICAgIH07CiAKICAgICBh
dXRvIGludDMyT3AgPSBbXSAoaW50MzJfdCBsZWZ0LCBpbnQzMl90IHJpZ2h0KSAtPiBpbnQzMl90
IHsKICAgICAgICAgcmV0dXJuIGxlZnQgPj4gKHJpZ2h0ICYgMHgxZik7CiAgICAgfTsKIAotICAg
IHJldHVybiBiaXR3aXNlQmluYXJ5T3AoZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYmln
SW50T3AsIGludDMyT3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4g
c2lnbmVkIHJpZ2h0IHNoaWZ0IG9wZXJhdGlvbi4iX3MpOworICAgIHJldHVybiBiaXR3aXNlQmlu
YXJ5T3AoZ2xvYmFsT2JqZWN0LCB2bSwgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYmlnSW50T3As
IGludDMyT3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gc2lnbmVk
IHJpZ2h0IHNoaWZ0IG9wZXJhdGlvbi4iX3MpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZhbHVlQml0VVJTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0VVJTaGlmdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCi0gICAgdWludDMyX3QgYSA9IG9wMS50b1VJbnQzMihl
eGVjKTsKKyAgICB1aW50MzJfdCBhID0gb3AxLnRvVUludDMyKGdsb2JhbE9iamVjdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgIHVpbnQzMl90IGIgPSBvcDIudG9VSW50MzIoZXhlYyk7CisgICAgdWlu
dDMyX3QgYiA9IG9wMi50b1VJbnQzMihnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYSA+PiAoYiAmIDB4MWYpKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVBZGROb3ROdW1iZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQWRk
Tm9uTnVtYmVyKGV4ZWMsIG9wMSwgb3AyKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0FkZE5vbk51bWJlcihnbG9iYWxPYmplY3QsIG9wMSwgb3AyKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVEaXYoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZURpdihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKQogewotICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBK
U0JpZ0ludCogbGVmdCwgSlNCaWdJbnQqIHJpZ2h0KSAtPiBKU0JpZ0ludCogewotICAgICAgICBy
ZXR1cm4gSlNCaWdJbnQ6OmRpdmlkZShleGVjLCBsZWZ0LCByaWdodCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOworCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogbGVmdCwgSlNCaWdJbnQqIHJpZ2h0KSAtPiBKU0JpZ0ludCogewor
ICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmRpdmlkZShnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0
KTsKICAgICB9OwogCiAgICAgYXV0byBudW1iZXJPcCA9IFtdIChkb3VibGUgbGVmdCwgZG91Ymxl
IHJpZ2h0KSAtPiBkb3VibGUgewogICAgICAgICByZXR1cm4gbGVmdCAvIHJpZ2h0OwogICAgIH07
CiAKLSAgICByZXR1cm4gYmluYXJ5T3AoZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYmln
SW50T3AsIG51bWJlck9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGlu
IGRpdmlzaW9uIG9wZXJhdGlvbi4iKTsKKyAgICByZXR1cm4gYmluYXJ5T3AoZ2xvYmFsT2JqZWN0
LCB2bSwgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYmlnSW50T3AsIG51bWJlck9wLCAiSW52YWxp
ZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGRpdmlzaW9uIG9wZXJhdGlvbi4iKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVBvdyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlUG93
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgYXV0byBiaWdJbnRPcCA9IFtdIChF
eGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiBsZWZ0LCBKU0JpZ0ludCogcmlnaHQpIC0+IEpTQmln
SW50KiB7Ci0gICAgICAgIHJldHVybiBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlKGV4ZWMsIGxlZnQs
IHJpZ2h0KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10g
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBsZWZ0LCBKU0JpZ0ludCog
cmlnaHQpIC0+IEpTQmlnSW50KiB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6ZXhwb25lbnRp
YXRlKGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOwogICAgIH07CiAKICAgICBhdXRvIG51bWJl
ck9wID0gW10gKGRvdWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAg
IHJldHVybiBvcGVyYXRpb25NYXRoUG93KGxlZnQsIHJpZ2h0KTsKICAgICB9OwogCi0gICAgcmV0
dXJuIGJpbmFyeU9wKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsIGJpZ0ludE9wLCBudW1i
ZXJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBleHBvbmVudGlh
dGlvbiBvcGVyYXRpb24uIl9zKTsKKyAgICByZXR1cm4gYmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2
bSwgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYmlnSW50T3AsIG51bWJlck9wLCAiSW52YWxpZCBt
aXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGV4cG9uZW50aWF0aW9uIG9wZXJhdGlvbi4i
X3MpOwogfQogCi1kb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aEFicyhFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpCitkb3VibGUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Bcml0aEFicyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFs
dWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwotICAgIGRvdWJsZSBhID0gb3Ax
LnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGdsb2JhbE9iamVj
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUE5hTik7CiAgICAgcmV0dXJuIGZh
YnMoYSk7CiB9CiAKLXVpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhDbHozMihF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpCit1aW50MzJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQ2x6MzIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKLSAgICB1aW50
MzJfdCB2YWx1ZSA9IG9wMS50b1VJbnQzMihleGVjKTsKKyAgICB1aW50MzJfdCB2YWx1ZSA9IG9w
MS50b1VJbnQzMihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOwogICAgIHJldHVybiBjbHoodmFsdWUpOwogfQogCi1kb3VibGUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Bcml0aEZSb3VuZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEpCitkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aEZSb3VuZChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDEpOwotICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJs
ZSBhID0gb3AxLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgUE5hTik7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhKTsKIH0KIAog
I2RlZmluZSBERkdfQVJJVEhfVU5BUlkoY2FwaXRhbGl6ZWROYW1lLCBsb3dlck5hbWUpIFwKLWRv
dWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoIyNjYXBpdGFsaXplZE5hbWUoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBcCitkb3VibGUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Bcml0aCMjY2FwaXRhbGl6ZWROYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFwKIHsgXAotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7IFwKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsgXAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsgXAorICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsgXAorICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7IFwKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7IFwKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AxKTsgXAotICAgIGRvdWJsZSByZXN1bHQgPSBvcDEudG9OdW1iZXIoZXhlYyk7IFwK
KyAgICBkb3VibGUgcmVzdWx0ID0gb3AxLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7IFwKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBQTmFOKTsgXAogICAgIHJldHVybiBKU0M6Ok1hdGg6
Omxvd2VyTmFtZShyZXN1bHQpOyBcCiB9CiAgICAgRk9SX0VBQ0hfREZHX0FSSVRIX1VOQVJZX09Q
KERGR19BUklUSF9VTkFSWSkKICN1bmRlZiBERkdfQVJJVEhfVU5BUlkKIAotZG91YmxlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXJpdGhTcXJ0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSkKK2RvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoU3FydChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpOwotICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOworICAg
IGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgUE5hTik7CiAgICAgcmV0dXJuIHNxcnQoYSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhSb3VuZChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXJpdGhSb3VuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQp
OwotICAgIGRvdWJsZSB2YWx1ZU9mQXJndW1lbnQgPSBhcmd1bWVudC50b051bWJlcihleGVjKTsK
KyAgICBkb3VibGUgdmFsdWVPZkFyZ3VtZW50ID0gYXJndW1lbnQudG9OdW1iZXIoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGpzUm91bmQodmFsdWVPZkFyZ3Vt
ZW50KSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRo
Rmxvb3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoRmxvb3IoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50KQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKLSAgICBkb3VibGUgdmFsdWVPZkFyZ3VtZW50ID0gYXJn
dW1lbnQudG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIHZhbHVlT2ZBcmd1bWVudCA9IGFyZ3Vt
ZW50LnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihmbG9vcih2YWx1ZU9mQXJndW1lbnQpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXJpdGhDZWlsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEFyZ3VtZW50KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cml0aENlaWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEFyZ3VtZW50KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJn
dW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKLSAgICBkb3VibGUgdmFs
dWVPZkFyZ3VtZW50ID0gYXJndW1lbnQudG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIHZhbHVl
T2ZBcmd1bWVudCA9IGFyZ3VtZW50LnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihjZWlsKHZhbHVlT2ZBcmd1bWVudCkpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFRydW5jKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50KQorRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Bcml0aFRydW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVu
dCk7Ci0gICAgZG91YmxlIHRydW5jYXRlZFZhbHVlT2ZBcmd1bWVudCA9IGFyZ3VtZW50LnRvSW50
ZWdlclByZXNlcnZlTmFOKGV4ZWMpOworICAgIGRvdWJsZSB0cnVuY2F0ZWRWYWx1ZU9mQXJndW1l
bnQgPSBhcmd1bWVudC50b0ludGVnZXJQcmVzZXJ2ZU5hTihnbG9iYWxPYmplY3QpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodHJ1bmNhdGVkVmFsdWVPZkFyZ3VtZW50KSk7CiB9CiAK
LXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBiYXNlLCB1aW50MzJfdCBpbmRleCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Q2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAKICAgICBp
ZiAoYmFzZS0+aXNPYmplY3QoKSkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZSk7CiAgICAgICAgIGlmIChvYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkp
CkBAIC03MjAsMTUgKzc3MSwxNiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1
ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgdWludAogICAgIH0KIAog
ICAgIGlmIChpc0pTU3RyaW5nKGJhc2UpICYmIGFzU3RyaW5nKGJhc2UpLT5jYW5HZXRJbmRleChp
bmRleCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNTdHJpbmcoYmFzZSktPmdl
dEluZGV4KGV4ZWMsIGluZGV4KSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNT
dHJpbmcoYmFzZSktPmdldEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgpKTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQoZXhlYywgaW5kZXgpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGdsb2JhbE9iamVjdCwgaW5k
ZXgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZh
bChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHkpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2UpOwpAQCAtNzM4LDE4ICs3OTAsMTggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGUKICAgICAgICAgSlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogCiAgICAgICAg
IGlmIChwcm9wZXJ0eS5pc1VJbnQzMigpKQotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBnZXRCeVZhbChleGVjLCBiYXNlLCBwcm9wZXJ0eS5hc1VJbnQzMigpKSk7CisgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGdldEJ5VmFsKGdsb2JhbE9iamVjdCwg
YmFzZSwgcHJvcGVydHkuYXNVSW50MzIoKSkpOwogCiAgICAgICAgIGlmIChwcm9wZXJ0eS5pc0Rv
dWJsZSgpKSB7CiAgICAgICAgICAgICBkb3VibGUgcHJvcGVydHlBc0RvdWJsZSA9IHByb3BlcnR5
LmFzRG91YmxlKCk7CiAgICAgICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUFzVUludDMyID0gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHByb3BlcnR5QXNEb3VibGUpOwogICAgICAgICAgICAgaWYgKHBy
b3BlcnR5QXNVSW50MzIgPT0gcHJvcGVydHlBc0RvdWJsZSAmJiBpc0luZGV4KHByb3BlcnR5QXNV
SW50MzIpKQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZ2V0QnlW
YWwoZXhlYywgYmFzZSwgcHJvcGVydHlBc1VJbnQzMikpOworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgZ2V0QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0
eUFzVUludDMyKSk7CiAKICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5pc1N0cmluZygpKSB7
CiAgICAgICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpiYXNlLT5zdHJ1Y3R1cmUodm0p
OwogICAgICAgICAgICAgaWYgKEpTQ2VsbDo6Y2FuVXNlRmFzdEdldE93blByb3BlcnR5KHN0cnVj
dHVyZSkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IGV4aXN0aW5n
QXRvbVN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9FeGlzdGluZ0F0b21TdHJpbmcoZXhl
Yyk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBleGlzdGluZ0F0b21T
dHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSktPnRvRXhpc3RpbmdBdG9tU3RyaW5nKGdsb2JhbE9i
amVjdCk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nQXRvbVN0cmluZykgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlLT5mYXN0R2V0T3du
UHJvcGVydHkodm0sIHN0cnVjdHVyZSwgZXhpc3RpbmdBdG9tU3RyaW5nLmdldCgpKSkKQEAgLTc1
OSwzNCArODExLDM1IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0
QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKKyAgICBiYXNl
VmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5TmFt
ZSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShiYXNl
VmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KQorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbENlbGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDZWxsKiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVy
dHkpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVydHkpOwogCiAgICAgaWYgKHByb3BlcnR5LmlzVUlu
dDMyKCkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZ2V0QnlWYWwoZXhlYywg
YmFzZSwgcHJvcGVydHkuYXNVSW50MzIoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGdldEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHkuYXNVSW50MzIoKSkp
OwogCiAgICAgaWYgKHByb3BlcnR5LmlzRG91YmxlKCkpIHsKICAgICAgICAgZG91YmxlIHByb3Bl
cnR5QXNEb3VibGUgPSBwcm9wZXJ0eS5hc0RvdWJsZSgpOwogICAgICAgICB1aW50MzJfdCBwcm9w
ZXJ0eUFzVUludDMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHByb3BlcnR5QXNEb3VibGUpOwog
ICAgICAgICBpZiAocHJvcGVydHlBc1VJbnQzMiA9PSBwcm9wZXJ0eUFzRG91YmxlKQotICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBnZXRCeVZhbChleGVjLCBiYXNlLCBwcm9w
ZXJ0eUFzVUludDMyKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGdl
dEJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlBc1VJbnQzMikpOwogCiAgICAgfSBl
bHNlIGlmIChwcm9wZXJ0eS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cnVjdHVyZSYgc3RydWN0
dXJlID0gKmJhc2UtPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChKU0NlbGw6OmNhblVzZUZh
c3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8QXRvbVN0
cmluZ0ltcGw+IGV4aXN0aW5nQXRvbVN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9FeGlz
dGluZ0F0b21TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+
IGV4aXN0aW5nQXRvbVN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9FeGlzdGluZ0F0b21T
dHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKGV4aXN0aW5nQXRvbVN0cmlu
ZykgewogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2UtPmZhc3RHZXRP
d25Qcm9wZXJ0eSh2bSwgc3RydWN0dXJlLCBleGlzdGluZ0F0b21TdHJpbmcuZ2V0KCkpKQpAQCAt
Nzk1LDMzNCArODQ4LDM2OCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5VmFsQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4
ZWMpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShnbG9i
YWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoYmFzZSkuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSkpKTsKIH0KIAotQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBnZXRC
eVZhbENlbGxJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIGludDMyX3QgaW5kZXgp
CitBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsQ2VsbEludChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTQ2VsbCogYmFzZSwgaW50MzJfdCBpbmRleCkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwotICAgIAogICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgLy8g
R28gdGhlIHNsb3dlc3Qgd2F5IHBvc3NpYmxlIGJlY2F1c2UgbmVnYXRpdmUgaW5kaWNlcyBkb24n
dCB1c2UgaW5kZXhlZCBzdG9yYWdlLgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSkpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpKSk7CiAgICAgfQogCiAgICAgLy8gVXNlIHRo
aXMgc2luY2Ugd2Uga25vdyB0aGF0IHRoZSB2YWx1ZSBpcyBvdXQgb2YgYm91bmRzLgotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluZGV4KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShi
YXNlKS5nZXQoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJ
bnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgaW50MzJfdCBpbmRleCkKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIGludDMyX3QgaW5kZXgpCiB7
Ci0gICAgcmV0dXJuIGdldEJ5VmFsQ2VsbEludChleGVjLCBiYXNlLCBpbmRleCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOworCisgICAgcmV0dXJuIGdldEJ5VmFsQ2VsbEludChnbG9iYWxPYmplY3Qs
IHZtLCBiYXNlLCBpbmRleCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYmFzZSwg
aW50MzJfdCBpbmRleCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0
QnlWYWxTdHJpbmdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGJh
c2UsIGludDMyX3QgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIGdldEJ5VmFsQ2VsbEludChleGVjLCBi
YXNlLCBpbmRleCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgcmV0dXJuIGdldEJ5VmFs
Q2VsbEludChnbG9iYWxPYmplY3QsIHZtLCBiYXNlLCBpbmRleCk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogc3RyaW5nKQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogc3RyaW5nKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N0cmluZyhzdHJpbmcp
LT50b0lkZW50aWZpZXIoZXhlYyk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N0cmluZyhz
dHJpbmcpLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGdldEJ5VmFsT2JqZWN0KGV4ZWMsIHZtLCBhc09iamVjdChi
YXNlKSwgcHJvcGVydHlOYW1lKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKGdldEJ5VmFsT2JqZWN0KGdsb2JhbE9iamVjdCwgdm0sIGFzT2JqZWN0KGJh
c2UpLCBwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2woRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJh
c2UsIEpTQ2VsbCogc3ltYm9sKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdFN5bWJvbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Nl
bGwqIGJhc2UsIEpTQ2VsbCogc3ltYm9sKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N5bWJvbChzeW1ib2wpLT5wcml2
YXRlTmFtZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2V0QnlWYWxPYmplY3QoZXhl
Yywgdm0sIGFzT2JqZWN0KGJhc2UpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGdldEJ5VmFsT2JqZWN0KGdsb2JhbE9iamVjdCwgdm0sIGFzT2JqZWN0KGJhc2Up
LCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKLSAgICBwdXRCeVZhbEludGVy
bmFsPHRydWUsIGZhbHNlPihleGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwg
ZW5jb2RlZFZhbHVlKTsKKyAgICBwdXRCeVZhbEludGVybmFsPHRydWUsIGZhbHNlPihnbG9iYWxP
YmplY3QsIHZtLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwog
fQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQ
cm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAotICAgIHB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2UsIGZh
bHNlPihleGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVl
KTsKKyAgICBwdXRCeVZhbEludGVybmFsPGZhbHNlLCBmYWxzZT4oZ2xvYmFsT2JqZWN0LCB2bSwg
ZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxD
ZWxsU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogY2VsbCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCi0gICAgcHV0QnlW
YWxJbnRlcm5hbDx0cnVlLCBmYWxzZT4oZXhlYywgdm0sIEpTVmFsdWU6OmVuY29kZShjZWxsKSwg
ZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOworICAgIHB1dEJ5VmFsSW50ZXJuYWw8dHJ1
ZSwgZmFsc2U+KGdsb2JhbE9iamVjdCwgdm0sIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2Rl
ZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKLSAgICBwdXRCeVZhbEludGVybmFsPGZh
bHNlLCBmYWxzZT4oZXhlYywgdm0sIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3Bl
cnR5LCBlbmNvZGVkVmFsdWUpOworICAgIHB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2UsIGZhbHNlPihn
bG9iYWxPYmplY3QsIHZtLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwg
ZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
Q2VsbFN0cmluZ1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBz
dHJpbmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGxTdHJpbmdTdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN0cmluZywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgcHV0
QnlWYWxDZWxsU3RyaW5nSW50ZXJuYWw8dHJ1ZSwgZmFsc2U+KGV4ZWMsIHZtLCBjZWxsLCBhc1N0
cmluZyhzdHJpbmcpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcHV0QnlW
YWxDZWxsU3RyaW5nSW50ZXJuYWw8dHJ1ZSwgZmFsc2U+KGdsb2JhbE9iamVjdCwgdm0sIGNlbGws
IGFzU3RyaW5nKHN0cmluZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAot
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBzdHJpbmcsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENl
bGxTdHJpbmdOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBj
ZWxsLCBKU0NlbGwqIHN0cmluZywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgcHV0QnlWYWxDZWxsU3RyaW5n
SW50ZXJuYWw8ZmFsc2UsIGZhbHNlPihleGVjLCB2bSwgY2VsbCwgYXNTdHJpbmcoc3RyaW5nKSwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIHB1dEJ5VmFsQ2VsbFN0cmluZ0lu
dGVybmFsPGZhbHNlLCBmYWxzZT4oZ2xvYmFsT2JqZWN0LCB2bSwgY2VsbCwgYXNTdHJpbmcoc3Ry
aW5nKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbFN0cmljdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3ltYm9s
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3ltYm9sKHN5bWJvbCkt
PnByaXZhdGVOYW1lKCk7Ci0gICAgcHV0QnlWYWxDZWxsSW50ZXJuYWw8dHJ1ZSwgZmFsc2U+KGV4
ZWMsIHZtLCBjZWxsLCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
KTsKKyAgICBwdXRCeVZhbENlbGxJbnRlcm5hbDx0cnVlLCBmYWxzZT4oZ2xvYmFsT2JqZWN0LCB2
bSwgY2VsbCwgcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9
CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25TdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxDZWxsU3ltYm9sTm9uU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2Vs
bCogY2VsbCwgSlNDZWxsKiBzeW1ib2wsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gYXNTeW1ib2woc3ltYm9sKS0+cHJpdmF0ZU5hbWUoKTsKLSAgICBwdXRCeVZhbENlbGxJ
bnRlcm5hbDxmYWxzZSwgZmFsc2U+KGV4ZWMsIHZtLCBjZWxsLCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICBwdXRCeVZhbENlbGxJbnRlcm5hbDxmYWxz
ZSwgZmFsc2U+KGdsb2JhbE9iamVjdCwgdm0sIGNlbGwsIHByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3Qg
aW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICBv
YmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2Jh
bE9iamVjdCwgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmpl
Y3QsIHRydWUpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQoCi0gICAgICAgIG9i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgICAgIG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBz
bG90KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBpbnQz
Ml90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0LCBpbnQzMl90IGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0LT5wdXRC
eUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
ZmFsc2UpOworICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBp
bmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNl
KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KAotICAgICAgICBvYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIHNsb3QpOworICAgICAgICBvYmplY3QsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9
CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5
Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBp
bmRleCwgZG91YmxlIHZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJs
ZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIEpTVmFsdWUganNWYWx1
ZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKTsKICAgICAKICAgICBp
ZiAoaW5kZXggPj0gMCkgewotICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywg
aW5kZXgsIGpzVmFsdWUsIHRydWUpOworICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUo
Z2xvYmFsT2JqZWN0LCBpbmRleCwganNWYWx1ZSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCB0cnVlKTsKICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KAotICAgICAgICBvYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CisgICAgICAgIG9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIGpzVmFsdWUsIHNsb3Qp
OwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRB
cnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGlu
dDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1
ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAg
ICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5s
aW5lKGV4ZWMsIGluZGV4LCBqc1ZhbHVlLCBmYWxzZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJ
bmRleElubGluZShnbG9iYWxPYmplY3QsIGluZGV4LCBqc1ZhbHVlLCBmYWxzZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBm
YWxzZSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCgKLSAgICAgICAgb2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIGpzVmFsdWUsIHNsb3QpOworICAg
ICAgICBvYmplY3QsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBq
c1ZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJs
ZUJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb2JqZWN0LCBpbnQzMl90IGluZGV4LCBkb3VibGUgdmFsdWUpCit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0LCBpbnQzMl90
IGluZGV4LCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91
YmxlLCB2YWx1ZSk7CiAKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICBvYmplY3QtPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBqc1ZhbHVlLCAwLCBQdXREaXJlY3RJbmRleFNob3Vs
ZFRocm93KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGlu
ZGV4LCBqc1ZhbHVlLCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgdHJ1ZSk7Ci0g
ICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIG9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBqc1ZhbHVlLCBzbG90KTsKKyAgICBDb21tb25T
bG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBvYmplY3QsIElk
ZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwganNWYWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRz
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRl
eCwgZG91YmxlIHZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5
VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgSlNWYWx1ZSBqc1Zh
bHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpOwogCiAgICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCwganNWYWx1ZSk7CisgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0
LCBpbmRleCwganNWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKLSAgICBDb21tb25TbG93UGF0aHM6OnB1dERp
cmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgb2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRl
eCksIGpzVmFsdWUsIHNsb3QpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJl
aWZ5KHZtLCBnbG9iYWxPYmplY3QsIG9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgp
LCBqc1ZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKLSAgICBw
dXRCeVZhbEludGVybmFsPHRydWUsIHRydWU+KGV4ZWMsIHZtLCBlbmNvZGVkQmFzZSwgZW5jb2Rl
ZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOworICAgIHB1dEJ5VmFsSW50ZXJuYWw8dHJ1ZSwgdHJ1
ZT4oZ2xvYmFsT2JqZWN0LCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2Rl
ZFZhbHVlKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKLSAgICBwdXRC
eVZhbEludGVybmFsPGZhbHNlLCB0cnVlPihleGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQ
cm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKKyAgICBwdXRCeVZhbEludGVybmFsPGZhbHNlLCB0cnVl
PihnbG9iYWxPYmplY3QsIHZtLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVk
VmFsdWUpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RD
ZWxsU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJpY3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKICAgICAKLSAgICBwdXRCeVZhbEludGVybmFsPHRydWUsIHRydWU+KGV4
ZWMsIHZtLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZh
bHVlKTsKKyAgICBwdXRCeVZhbEludGVybmFsPHRydWUsIHRydWU+KGdsb2JhbE9iamVjdCwgdm0s
IEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwog
fQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsTm9uU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDZWxsKiBjZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKICAgICAKLSAgICBwdXRCeVZhbEludGVybmFsPGZhbHNlLCB0cnVlPihleGVj
LCB2bSwgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1
ZSk7CisgICAgcHV0QnlWYWxJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZ2xvYmFsT2JqZWN0LCB2bSwg
SlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9
CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJpbmdT
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3RyaW5nLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxEaXJlY3RDZWxsU3RyaW5nU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBzdHJpbmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIHB1dEJ5VmFs
Q2VsbFN0cmluZ0ludGVybmFsPHRydWUsIHRydWU+KGV4ZWMsIHZtLCBjZWxsLCBhc1N0cmluZyhz
dHJpbmcpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgcHV0QnlWYWxDZWxs
U3RyaW5nSW50ZXJuYWw8dHJ1ZSwgdHJ1ZT4oZ2xvYmFsT2JqZWN0LCB2bSwgY2VsbCwgYXNTdHJp
bmcoc3RyaW5nKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nTm9uU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN0cmluZywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGly
ZWN0Q2VsbFN0cmluZ05vblN0cmljdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Nl
bGwqIGNlbGwsIEpTQ2VsbCogc3RyaW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBwdXRCeVZhbENlbGxT
dHJpbmdJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIGFzU3RyaW5nKHN0cmlu
ZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICBwdXRCeVZhbENlbGxTdHJp
bmdJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZ2xvYmFsT2JqZWN0LCB2bSwgY2VsbCwgYXNTdHJpbmco
c3RyaW5nKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi12b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3ltYm9sU3RyaWN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2Vs
bFN5bWJvbFN0cmljdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIGNlbGws
IEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFz
U3ltYm9sKHN5bWJvbCktPnByaXZhdGVOYW1lKCk7Ci0gICAgcHV0QnlWYWxDZWxsSW50ZXJuYWw8
dHJ1ZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIHByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSkpOworICAgIHB1dEJ5VmFsQ2VsbEludGVybmFsPHRydWUsIHRydWU+KGds
b2JhbE9iamVjdCwgdm0sIGNlbGwsIHByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3ltYm9sTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0Nl
bGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3ltYm9sKHN5bWJvbCktPnByaXZhdGVO
YW1lKCk7Ci0gICAgcHV0QnlWYWxDZWxsSW50ZXJuYWw8ZmFsc2UsIHRydWU+KGV4ZWMsIHZtLCBj
ZWxsLCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICBw
dXRCeVZhbENlbGxJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZ2xvYmFsT2JqZWN0LCB2bSwgY2VsbCwg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKLXZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAg
IGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCAwLCBQdXREaXJlY3RJbmRleFNo
b3VsZFRocm93KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3Qs
IGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgMCwgUHV0RGlyZWN0SW5kZXhT
aG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3Qob2JqZWN0LCB0cnVlKTsKLSAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVj
dFdpdGhSZWlmeSh2bSwgZXhlYywgb2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCks
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBDb21tb25TbG93UGF0
aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBvYmplY3QsIElkZW50aWZp
ZXI6OmZyb20odm0sIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3Qp
OwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRB
cnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGlu
dDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5k
ZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIG9iamVjdC0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7Ci0gICAgQ29tbW9u
U2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIG9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbSh2bSwgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7
CisgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVj
dCwgb2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheVB1c2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKICAgICAKLSAgICBhcnJheS0+cHVzaElubGluZShleGVjLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgYXJyYXktPnB1c2hJbmxpbmUoZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBk
b3VibGUgdmFsdWUsIEpTQXJyYXkqIGFycmF5KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
ZG91YmxlIHZhbHVlLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKICAgICAKLSAgICBhcnJheS0+cHVzaElubGluZShleGVjLCBKU1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOworICAgIGFycmF5LT5wdXNoSW5saW5lKGds
b2JhbE9iamVjdCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaE11bHRpcGxl
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHZvaWQqIGJ1ZmZlciwgaW50MzJfdCBl
bGVtZW50Q291bnQpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5
UHVzaE11bHRpcGxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQXJyYXkqIGFycmF5
LCB2b2lkKiBidWZmZXIsIGludDMyX3QgZWxlbWVudENvdW50KQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIC8vIFdlIGFzc3VtZSB0aGF0IG11bHRpcGxlIEpTQXJyYXk6OnB1c2ggY2Fs
bHMgd2l0aCBBcnJheVdpdGhJbnQzMi9BcnJheVdpdGhDb250aWd1b3VzIGRvIG5vdCBjYXVzZSBK
UyB0cmFwcy4KQEAgLTExMzcsMTYgKzEyMjQsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVB1c2hNdWx0aXBsZShFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkK
IAogICAgIEVuY29kZWRKU1ZhbHVlKiB2YWx1ZXMgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KGJ1ZmZlcik7CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyAr
K2kpIHsKLSAgICAgICAgYXJyYXktPnB1c2hJbmxpbmUoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlc1tpXSkpOworICAgICAgICBhcnJheS0+cHVzaElubGluZShnbG9iYWxPYmplY3QsIEpTVmFs
dWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlTXVsdGlwbGUoRXhlY1N0YXRlKiBleGVjLCBK
U0FycmF5KiBhcnJheSwgdm9pZCogYnVmZmVyLCBpbnQzMl90IGVsZW1lbnRDb3VudCkKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlTXVsdGlwbGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNBcnJheSogYXJyYXksIHZvaWQqIGJ1ZmZl
ciwgaW50MzJfdCBlbGVtZW50Q291bnQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
Ly8gV2UgYXNzdW1lIHRoYXQgbXVsdGlwbGUgSlNBcnJheTo6cHVzaCBjYWxscyB3aXRoIEFycmF5
V2l0aERvdWJsZSBkbyBub3QgY2F1c2UgSlMgdHJhcHMuCkBAIC0xMTU3LDYzICsxMjQ1LDY4IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlTXVs
dGlwbGUoRXhlY1N0YXRlKiBleGVjLCBKCiAKICAgICBkb3VibGUqIHZhbHVlcyA9IHN0YXRpY19j
YXN0PGRvdWJsZSo+KGJ1ZmZlcik7CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgZWxlbWVu
dENvdW50OyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1c2hJbmxpbmUoZXhlYywgSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVzW2ldKSk7CisgICAgICAgIGFycmF5LT5wdXNo
SW5saW5lKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFs
dWVzW2ldKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIH0KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5
LT5sZW5ndGgoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFycmF5UG9wKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQXJyYXkqIGFycmF5KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGdsb2JhbE9iamVjdCkpOwog
fQogICAgICAgICAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQ
b3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0
aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICBhcnJheS0+YnV0dGVyZmx5
KCktPnNldFB1YmxpY0xlbmd0aChhcnJheS0+YnV0dGVyZmx5KCktPnB1YmxpY0xlbmd0aCgpICsg
MSk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZ2xvYmFsT2JqZWN0KSk7CiB9
CiAgICAgICAgIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBF
eGVjU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVnRXhwT2JqZWN0KiByZWdFeHBPYmplY3QsIEpTU3RyaW5nKiBhcmd1bWVudCkKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlY1N0cmluZyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwgSlNTdHJpbmcq
IGFyZ3VtZW50KQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZWdFeHBPYmplY3QtPmV4ZWNJbmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhwT2JqZWN0LT5leGVjSW5saW5lKGdsb2Jh
bE9iamVjdCwgYXJndW1lbnQpKTsKIH0KICAgICAgICAgCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEFyZ3VtZW50KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25SZWdFeHBFeGVjKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZ0V4cE9iamVjdCog
cmVnRXhwT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCiB7CiAgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgCiAgICAgSlNW
YWx1ZSBhcmd1bWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOwogCi0gICAg
SlNTdHJpbmcqIGlucHV0ID0gYXJndW1lbnQudG9TdHJpbmdPck51bGwoZXhlYyk7CisgICAgSlNT
dHJpbmcqIGlucHV0ID0gYXJndW1lbnQudG9TdHJpbmdPck51bGwoZ2xvYmFsT2JqZWN0KTsKICAg
ICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIWlucHV0KTsKICAgICBp
ZiAoIWlucHV0KQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWNJbmxp
bmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1dCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWNJbmxpbmUoZ2xvYmFsT2Jq
ZWN0LCBpbnB1dCkpKTsKIH0KICAgICAgICAgCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlZ0V4cEV4ZWNHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRBcmd1bWVudCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmVnRXhwRXhlY0dlbmVyaWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKIHsK
ICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CkBAIC0xMjIxLDI1
ICsxMzE0LDI2IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhw
RXhlY0dlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhCiAgICAgCiAgICAgYXV0byogcmVn
ZXhwID0ganNEeW5hbWljQ2FzdDxSZWdFeHBPYmplY3QqPih2bSwgYmFzZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFyZWdleHApKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUpOwogCi0gICAgSlNTdHJpbmcqIGlucHV0ID0gYXJndW1lbnQudG9TdHJpbmdPck51bGwoZXhl
Yyk7CisgICAgSlNTdHJpbmcqIGlucHV0ID0gYXJndW1lbnQudG9TdHJpbmdPck51bGwoZ2xvYmFs
T2JqZWN0KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIWlu
cHV0KTsKICAgICBpZiAoIWlucHV0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHJlZ2V4cC0+ZXhlYyhleGVjLCBnbG9iYWxPYmplY3QsIGlucHV0KSkpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHJlZ2V4cC0+ZXhlYyhnbG9iYWxP
YmplY3QsIGlucHV0KSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlZ0V4cEV4ZWNOb25HbG9iYWxPclN0aWNreShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZ0V4cCogcmVnRXhwLCBKU1N0cmluZyogc3RyaW5nKQor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjTm9uR2xvYmFs
T3JTdGlja3koSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVnRXhwKiByZWdFeHAsIEpT
U3RyaW5nKiBzdHJpbmcpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2Nv
cGUoZmFsc2UpOwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgU3RyaW5nIGlucHV0ID0gc3RyaW5nLT52YWx1ZShleGVjKTsKKyAg
ICBTdHJpbmcgaW5wdXQgPSBzdHJpbmctPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IDA7
CkBAIC0xMjU1LDEyNSArMTM0OSwxMzQgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25SZWdFeHBFeGVjTm9uR2xvYmFsT3JTdGlja3koRXhlY1N0YXRlKiBleGUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZWdFeHBNYXRjaEZhc3RTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwg
SlNTdHJpbmcqIGFyZ3VtZW50KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25SZWdFeHBNYXRjaEZhc3RTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVn
RXhwT2JqZWN0KiByZWdFeHBPYmplY3QsIEpTU3RyaW5nKiBhcmd1bWVudCkKIHsKICAgICBTdXBl
clNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAg
ICBpZiAoIXJlZ0V4cE9iamVjdC0+cmVnRXhwKCktPmdsb2JhbCgpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlZ0V4cE9iamVjdC0+ZXhlY0lubGluZShleGVjLCBnbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZWdFeHBPYmplY3Qt
Pm1hdGNoR2xvYmFsKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJndW1lbnQpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWNJbmxpbmUoZ2xvYmFsT2JqZWN0
LCBhcmd1bWVudCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhwT2JqZWN0LT5t
YXRjaEdsb2JhbChnbG9iYWxPYmplY3QsIGFyZ3VtZW50KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwTWF0Y2hGYXN0R2xvYmFsU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVnRXhwKiByZWdFeHAs
IEpTU3RyaW5nKiBzdHJpbmcpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlZ0V4cE1hdGNoRmFzdEdsb2JhbFN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWdFeHAqIHJlZ0V4cCwgSlNTdHJpbmcqIHN0cmluZykKIHsKICAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQocmVnRXhwLT5nbG9i
YWwoKSk7CiAKLSAgICBTdHJpbmcgcyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5n
IHMgPSBzdHJpbmctPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIGlmIChyZWdFeHAtPnVuaWNvZGUoKSkgewogICAgICAgICB1
bnNpZ25lZCBzdHJpbmdMZW5ndGggPSBzLmxlbmd0aCgpOwogICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShjb2xsZWN0TWF0Y2hlcygKLSAgICAgICAgICAg
IHZtLCBleGVjLCBzdHJpbmcsIHMsIGdsb2JhbE9iamVjdCwgcmVnRXhwLAorICAgICAgICAgICAg
dm0sIGdsb2JhbE9iamVjdCwgc3RyaW5nLCBzLCByZWdFeHAsCiAgICAgICAgICAgICBbJl0gKHNp
emVfdCBlbmQpIC0+IHNpemVfdCB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFkdmFuY2VTdHJp
bmdVbmljb2RlKHMsIHN0cmluZ0xlbmd0aCwgZW5kKTsKICAgICAgICAgICAgIH0pKSk7CiAgICAg
fQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoY29sbGVj
dE1hdGNoZXMoCi0gICAgICAgIHZtLCBleGVjLCBzdHJpbmcsIHMsIGdsb2JhbE9iamVjdCwgcmVn
RXhwLAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJpbmcsIHMsIHJlZ0V4cCwKICAgICAg
ICAgWyZdIChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGVuZCAr
IDE7CiAgICAgICAgIH0pKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUGFyc2VJbnROb1JhZGl4R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25QYXJzZUlu
dE5vUmFkaXhHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAg
cmV0dXJuIHRvU3RyaW5nVmlldyhleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLCBbJl0gKFN0
cmluZ1ZpZXcgdmlldykgeworICAgIHJldHVybiB0b1N0cmluZ1ZpZXcoZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlOjpkZWNvZGUodmFsdWUpLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgewogICAgICAgICAv
LyBUaGlzIHZlcnNpb24gaXMgYXMgaWYgcmFkaXggd2FzIHVuZGVmaW5lZC4gSGVuY2UsIHVuZGVm
aW5lZC50b051bWJlcigpID09PSAwLgogICAgICAgICByZXR1cm4gcGFyc2VJbnRSZXN1bHQocGFy
c2VJbnQodmlldywgMCkpOwogICAgIH0pOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblBhcnNlSW50U3RyaW5nTm9SYWRpeChFeGVjU3RhdGUqIGV4ZWMsIEpTU3Ry
aW5nKiBzdHJpbmcpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNl
SW50U3RyaW5nTm9SYWRpeChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyog
c3RyaW5nKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8gdmlld1dpdGhTdHJp
bmcgPSBzdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhleGVjKTsKKyAgICBhdXRvIHZp
ZXdXaXRoU3RyaW5nID0gc3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gVGhp
cyB2ZXJzaW9uIGlzIGFzIGlmIHJhZGl4IHdhcyB1bmRlZmluZWQuIEhlbmNlLCB1bmRlZmluZWQu
dG9OdW1iZXIoKSA9PT0gMC4KICAgICByZXR1cm4gcGFyc2VJbnRSZXN1bHQocGFyc2VJbnQodmll
d1dpdGhTdHJpbmcudmlldywgMCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblBhcnNlSW50U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmlu
ZywgaW50MzJfdCByYWRpeCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UGFyc2VJbnRTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0
cmluZywgaW50MzJfdCByYWRpeCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBhdXRv
IHZpZXdXaXRoU3RyaW5nID0gc3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZXhlYyk7
CisgICAgYXV0byB2aWV3V2l0aFN0cmluZyA9IHN0cmluZy0+dmlld1dpdGhVbmRlcmx5aW5nU3Ry
aW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAogICAgIHJldHVybiBwYXJzZUludFJlc3VsdChwYXJzZUludCh2aWV3V2l0aFN0cmluZy52aWV3
LCByYWRpeCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBh
cnNlSW50R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBpbnQz
Ml90IHJhZGl4KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25QYXJzZUlu
dEdlbmVyaWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFs
dWUsIGludDMyX3QgcmFkaXgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CiAKLSAgICByZXR1cm4gdG9TdHJpbmdWaWV3KGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSks
IFsmXSAoU3RyaW5nVmlldyB2aWV3KSB7CisgICAgcmV0dXJuIHRvU3RyaW5nVmlldyhnbG9iYWxP
YmplY3QsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIFsmXSAoU3RyaW5nVmlldyB2aWV3KSB7CiAg
ICAgICAgIHJldHVybiBwYXJzZUludFJlc3VsdChwYXJzZUludCh2aWV3LCByYWRpeCkpOwogICAg
IH0pOwogfQogICAgICAgICAKLXNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRl
c3RTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwgSlNTdHJpbmcqIGlucHV0KQorc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdFN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwgSlNTdHJpbmcqIGlucHV0KQogewog
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CiAKLSAgICByZXR1cm4gcmVnRXhwT2JqZWN0LT50ZXN0SW5saW5lKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgaW5wdXQpOworICAgIHJldHVybiByZWdFeHBPYmplY3QtPnRlc3RJbmxpbmUoZ2xv
YmFsT2JqZWN0LCBpbnB1dCk7CiB9CiAKLXNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJl
Z0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50
KQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEFyZ3VtZW50KQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKICAgICAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudCk7CiAKLSAgICBKU1N0cmluZyogaW5wdXQg
PSBhcmd1bWVudC50b1N0cmluZ09yTnVsbChleGVjKTsKKyAgICBKU1N0cmluZyogaW5wdXQgPSBh
cmd1bWVudC50b1N0cmluZ09yTnVsbChnbG9iYWxPYmplY3QpOwogICAgIGlmICghaW5wdXQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcmVnRXhwT2JqZWN0LT50ZXN0SW5saW5l
KGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5wdXQpOworICAgIHJldHVybiByZWdFeHBPYmplY3QtPnRl
c3RJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpbnB1dCk7CiB9CiAKLXNpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlZ0V4cFRlc3RHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRBcmd1bWVudCkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4
cFRlc3RHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCiB7CiAgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVl
IGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwpAQCAtMTM4MSwxODQgKzE0ODQs
MjAxIEBAIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3RHZW5lcmljKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqCiAKICAgICBhdXRvKiByZWdleHAgPSBqc0R5
bmFtaWNDYXN0PFJlZ0V4cE9iamVjdCo+KHZtLCBiYXNlKTsKICAgICBpZiAoVU5MSUtFTFkoIXJl
Z2V4cCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIEpTU3RyaW5nKiBpbnB1dCA9IGFyZ3VtZW50LnRvU3RyaW5nT3JOdWxs
KGV4ZWMpOworICAgIEpTU3RyaW5nKiBpbnB1dCA9IGFyZ3VtZW50LnRvU3RyaW5nT3JOdWxsKGds
b2JhbE9iamVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09
ICFpbnB1dCk7CiAgICAgaWYgKCFpbnB1dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVnZXhwLT50ZXN0KGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW5wdXQpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlZ2V4cC0+dGVzdChnbG9i
YWxPYmplY3QsIGlucHV0KSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
dWJCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCitKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ViQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nh
c3Q8SlNCaWdJbnQqPihvcDEpOwogICAgIEpTQmlnSW50KiByaWdodE9wZXJhbmQgPSBqc0Nhc3Q8
SlNCaWdJbnQqPihvcDIpOwogICAgIAotICAgIHJldHVybiBKU0JpZ0ludDo6c3ViKGV4ZWMsIGxl
ZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU0JpZ0ludDo6c3ViKGdsb2Jh
bE9iamVjdCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7CiB9CiAKLUpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25CaXROb3RCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9w
MSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXROb3RCaWdJbnQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CiAKICAgICBKU0JpZ0ludCogb3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0lu
dCo+KG9wMSk7CiAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VOb3QoZXhlYywgb3BlcmFu
ZCk7CisgICAgcmV0dXJuIEpTQmlnSW50OjpiaXR3aXNlTm90KGdsb2JhbE9iamVjdCwgb3BlcmFu
ZCk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NdWxCaWdJbnQoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCitKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTXVsQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2Vs
bCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKIAogICAgIEpTQmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7
CiAgICAgSlNCaWdJbnQqIHJpZ2h0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMik7CiAK
LSAgICByZXR1cm4gSlNCaWdJbnQ6Om11bHRpcGx5KGV4ZWMsIGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQpOworICAgIHJldHVybiBKU0JpZ0ludDo6bXVsdGlwbHkoZ2xvYmFsT2JqZWN0LCBsZWZ0
T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTsKIH0KICAgICAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25Nb2RCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBv
cDIpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTW9kQmlnSW50KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJh
bmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwogICAgIEpTQmlnSW50KiByaWdodE9wZXJhbmQg
PSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDIpOwogICAgIAotICAgIHJldHVybiBKU0JpZ0ludDo6cmVt
YWluZGVyKGV4ZWMsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU0Jp
Z0ludDo6cmVtYWluZGVyKGdsb2JhbE9iamVjdCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7
CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXZCaWdJbnQoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRGl2QmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCog
b3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
ICAgICAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEp
OwogICAgIEpTQmlnSW50KiByaWdodE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDIpOwog
ICAgIAotICAgIHJldHVybiBKU0JpZ0ludDo6ZGl2aWRlKGV4ZWMsIGxlZnRPcGVyYW5kLCByaWdo
dE9wZXJhbmQpOworICAgIHJldHVybiBKU0JpZ0ludDo6ZGl2aWRlKGdsb2JhbE9iamVjdCwgbGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25Qb3dCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIp
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG93QmlnSW50KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQg
PSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwogICAgIEpTQmlnSW50KiByaWdodE9wZXJhbmQgPSBq
c0Nhc3Q8SlNCaWdJbnQqPihvcDIpOwogICAgIAotICAgIHJldHVybiBKU0JpZ0ludDo6ZXhwb25l
bnRpYXRlKGV4ZWMsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU0Jp
Z0ludDo6ZXhwb25lbnRpYXRlKGdsb2JhbE9iamVjdCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRBbmRCaWdJbnQoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQml0QW5kQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKIAogICAgIEpTQmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+
KG9wMSk7CiAgICAgSlNCaWdJbnQqIHJpZ2h0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9w
Mik7CiAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VBbmQoZXhlYywgbGVmdE9wZXJhbmQs
IHJpZ2h0T3BlcmFuZCk7CisgICAgcmV0dXJuIEpTQmlnSW50OjpiaXR3aXNlQW5kKGdsb2JhbE9i
amVjdCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25CaXRMU2hpZnRCaWdJbnQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9w
MSwgSlNDZWxsKiBvcDIpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0TFNoaWZ0
QmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwq
IG9wMikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIEpTQmln
SW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CiAgICAgSlNCaWdJbnQq
IHJpZ2h0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMik7CiAKLSAgICByZXR1cm4gSlNC
aWdJbnQ6OmxlZnRTaGlmdChleGVjLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTsKKyAgICBy
ZXR1cm4gSlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdo
dE9wZXJhbmQpOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWRkQmlnSW50
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFkZEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmln
SW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50
Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmFkZChleGVjLCBsZWZ0T3BlcmFu
ZCwgcmlnaHRPcGVyYW5kKTsKKyAgICByZXR1cm4gSlNCaWdJbnQ6OmFkZChnbG9iYWxPYmplY3Qs
IGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQml0UlNoaWZ0QmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpT
Q2VsbCogb3AyKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFJTaGlmdEJpZ0lu
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgSlNCaWdJ
bnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCog
cmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4g
SlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoZXhlYywgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCk7CisgICAgcmV0dXJuIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KGdsb2JhbE9iamVjdCwg
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25CaXRPckJpZ0ludChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3AxLCBKU0NlbGwq
IG9wMikKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRPckJpZ0ludChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgSlNCaWdJbnQqIGxlZnRP
cGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVy
YW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6
OmJpdHdpc2VPcihleGVjLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTsKKyAgICByZXR1cm4g
SlNCaWdJbnQ6OmJpdHdpc2VPcihnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQpOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0WG9yQmlnSW50KEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkJpdFhvckJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQq
PihvcDEpOwogICAgIEpTQmlnSW50KiByaWdodE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihv
cDIpOwogCi0gICAgcmV0dXJuIEpTQmlnSW50OjpiaXR3aXNlWG9yKGV4ZWMsIGxlZnRPcGVyYW5k
LCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZVhvcihnbG9iYWxP
YmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOwogfQogCi1zaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBvcDEsIEpTQ2VsbCogb3AyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxQ2VsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9wMSwg
SlNDZWxsKiBvcDIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAg
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoZXhlYywgb3Ax
LCBvcDIpOworICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKGds
b2JhbE9iamVjdCwgb3AxLCBvcDIpOwogfQogCi1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25TYW1lVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBhcmcxLCBFbmNvZGVk
SlNWYWx1ZSBhcmcyKQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2FtZVZhbHVlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGFyZzEsIEVuY29kZWRK
U1ZhbHVlIGFyZzIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAg
ICByZXR1cm4gc2FtZVZhbHVlKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShhcmcxKSwgSlNWYWx1ZTo6
ZGVjb2RlKGFyZzIpKTsKKyAgICByZXR1cm4gc2FtZVZhbHVlKGdsb2JhbE9iamVjdCwgSlNWYWx1
ZTo6ZGVjb2RlKGFyZzEpLCBKU1ZhbHVlOjpkZWNvZGUoYXJnMikpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgdmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b1ByaW1p
dGl2ZShleGVjKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpLnRvUHJpbWl0aXZlKGdsb2JhbE9iamVjdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdmFsdWUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTnVt
YmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvTnVtYmVyKGV4ZWMp
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFdpdGhUaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUaGlzLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZXRCeVZhbFdpdGhUaGlzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7
CkBAIC0xNTY4LDcgKzE2ODgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdldEJ5VmFsV2l0aFRoaXMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSgogICAgIGlmIChM
SUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewogICAg
ICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSh2bSk7CiAgICAgICAgIGlmIChKU0NlbGw6OmNhblVzZUZhc3RHZXRPd25Qcm9wZXJ0eShzdHJ1
Y3R1cmUpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IGV4aXN0aW5nQXRv
bVN0cmluZyA9IGFzU3RyaW5nKHN1YnNjcmlwdCktPnRvRXhpc3RpbmdBdG9tU3RyaW5nKGV4ZWMp
OworICAgICAgICAgICAgUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBleGlzdGluZ0F0b21TdHJpbmcg
PSBhc1N0cmluZyhzdWJzY3JpcHQpLT50b0V4aXN0aW5nQXRvbVN0cmluZyhnbG9iYWxPYmplY3Qp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgICAgICAgICBpZiAoZXhpc3RpbmdBdG9tU3RyaW5nKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJv
cGVydHkodm0sIHN0cnVjdHVyZSwgZXhpc3RpbmdBdG9tU3RyaW5nLmdldCgpKSkKQEAgLTE1ODEs
MTc3ICsxNzAxLDE5MiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsV2l0aFRoaXMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSgogICAgIGlmIChzdWJzY3Jp
cHQuaXNVSW50MzIoKSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMy
KCk7CiAgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZh
bHVlKS0+Y2FuR2V0SW5kZXgoaSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGV4ZWMsIGkpKTsKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoZ2xvYmFs
T2JqZWN0LCBpKSk7CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIGksIHNsb3QpKSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQo
Z2xvYmFsT2JqZWN0LCBpLCBzbG90KSkpOwogICAgIH0KIAotICAgIGJhc2VWYWx1ZS5yZXF1aXJl
T2JqZWN0Q29lcmNpYmxlKGV4ZWMpOworICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNp
YmxlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAKLSAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlL
ZXkoZXhlYyk7CisgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGds
b2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoYmFz
ZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSwgc2xvdCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgcHJv
cGVydHksIHNsb3QpKSk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
V2l0aFRoaXNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRoaXMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZFdpdGhUaGlzU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIHB1dFdpdGhUaGlzPHRydWU+KGV4
ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBpbXBsKSk7CisgICAgcHV0V2l0aFRoaXM8dHJ1ZT4oZ2xvYmFsT2JqZWN0LCBl
bmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMsIGVuY29kZWRWYWx1ZSwgSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgaW1wbCkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFdp
dGhUaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRUaGlzLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIFVuaXF1
ZWRTdHJpbmdJbXBsKiBpbXBsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRX
aXRoVGhpcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFRoaXMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CiAKLSAgICBwdXRXaXRoVGhpczxmYWxzZT4oZXhlYywgZW5jb2RlZEJh
c2UsIGVuY29kZWRUaGlzLCBlbmNvZGVkVmFsdWUsIElkZW50aWZpZXI6OmZyb21VaWQodm0sIGlt
cGwpKTsKKyAgICBwdXRXaXRoVGhpczxmYWxzZT4oZ2xvYmFsT2JqZWN0LCBlbmNvZGVkQmFzZSwg
ZW5jb2RlZFRoaXMsIGVuY29kZWRWYWx1ZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgaW1wbCkp
OwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxXaXRoVGhpc1N0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVGhpcywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsV2l0aFRoaXNTdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUaGlzLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIElkZW50
aWZpZXIgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCkudG9Qcm9w
ZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHB1dFdpdGhUaGlzPHRydWU+KGV4ZWMs
IGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7CisgICAg
cHV0V2l0aFRoaXM8dHJ1ZT4oZ2xvYmFsT2JqZWN0LCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMs
IGVuY29kZWRWYWx1ZSwgcHJvcGVydHkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxXaXRoVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVGhpcywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRoaXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUaGlz
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0
eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KS50b1Byb3BlcnR5S2V5KGV4ZWMp
OworICAgIElkZW50aWZpZXIgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNj
cmlwdCkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHB1dFdpdGhUaGlz
PGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMsIGVuY29kZWRWYWx1ZSwgcHJv
cGVydHkpOworICAgIHB1dFdpdGhUaGlzPGZhbHNlPihnbG9iYWxPYmplY3QsIGVuY29kZWRCYXNl
LCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgc3RhdGljIHZvaWQgZGVmaW5lRGF0YVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZt
LCBKU09iamVjdCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGRl
ZmluZURhdGFQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpT
T2JqZWN0KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGludDMyX3QgYXR0cmlidXRlcykKIHsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3Jp
cHRvciA9IHRvUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVm
aW5lZCgpLCBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlcykpOwogICAgIEFTU0VS
VCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3Ip
IHx8ICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSk7CiAgICAgaWYgKGJhc2Ut
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkgPT0gSlNPYmplY3Q6OmRlZmluZU93
blByb3BlcnR5KQotICAgICAgICBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoYmFzZSwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0cnVlKTsKKyAgICAgICAgSlNPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KGJhc2UsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCB0cnVlKTsKICAgICBlbHNlCi0gICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+ZGVm
aW5lT3duUHJvcGVydHkoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0cnVl
KTsKKyAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShiYXNl
LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdHJ1ZSk7CiB9CiAKLXZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGludDMyX3QgYXR0cmlidXRlcykKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFByb3BlcnR5KS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSkudG9Q
cm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIGRlZmluZURhdGFQcm9wZXJ0eShl
eGVjLCB2bSwgYmFzZSwgcHJvcGVydHlOYW1lLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgYXR0cmlidXRlcyk7CisgICAgZGVmaW5lRGF0YVByb3BlcnR5KGdsb2JhbE9iamVjdCwgdm0s
IGJhc2UsIHByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGF0dHJp
YnV0ZXMpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3Bl
cnR5U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIEpTU3RyaW5nKiBwcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBKU1N0cmluZyogcHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgaW50MzJfdCBhdHRyaWJ1dGVzKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gcHJv
cGVydHktPnRvSWRlbnRpZmllcihleGVjKTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9
IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBkZWZpbmVE
YXRhUHJvcGVydHkoZXhlYywgdm0sIGJhc2UsIHByb3BlcnR5TmFtZSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSksIGF0dHJpYnV0ZXMpOworICAgIGRlZmluZURhdGFQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIHZtLCBiYXNlLCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpLCBhdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRl
ZmluZURhdGFQcm9wZXJ0eVN0cmluZ0lkZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJh
c2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVm
aW5lRGF0YVByb3BlcnR5U3RyaW5nSWRlbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAg
ICBkZWZpbmVEYXRhUHJvcGVydHkoZXhlYywgdm0sIGJhc2UsIElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHByb3BlcnR5KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGF0dHJpYnV0ZXMp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBkZWZpbmVEYXRhUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCB2bSwgYmFzZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHkpLCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgYXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHlTeW1ib2woRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogYmFzZSwgU3ltYm9sKiBwcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBpbnQzMl90IGF0dHJpYnV0ZXMpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVm
aW5lRGF0YVByb3BlcnR5U3ltYm9sKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiBiYXNlLCBTeW1ib2wqIHByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IGludDMyX3QgYXR0cmlidXRlcykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGRlZmluZURhdGFQcm9w
ZXJ0eShleGVjLCB2bSwgYmFzZSwgSWRlbnRpZmllcjo6ZnJvbVVpZChwcm9wZXJ0eS0+cHJpdmF0
ZU5hbWUoKSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBhdHRyaWJ1dGVzKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CisgICAgZGVmaW5lRGF0YVByb3BlcnR5KGdsb2JhbE9iamVjdCwg
dm0sIGJhc2UsIElkZW50aWZpZXI6OmZyb21VaWQocHJvcGVydHktPnByaXZhdGVOYW1lKCkpLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgYXR0cmlidXRlcyk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgc3RhdGljIHZvaWQgZGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IFZNJiB2bSwgSlNPYmplY3QqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNPYmplY3QqIGdldHRlciwgSlNPYmplY3QqIHNldHRlciwgaW50MzJfdCBhdHRyaWJ1dGVzKQor
QUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBkZWZpbmVBY2Nlc3NvclByb3BlcnR5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNPYmplY3QqIGJhc2UsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIGdldHRlciwgSlNPYmplY3QqIHNldHRlciwg
aW50MzJfdCBhdHRyaWJ1dGVzKQogewogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
ID0gdG9Qcm9wZXJ0eURlc2NyaXB0b3IoanNVbmRlZmluZWQoKSwgZ2V0dGVyLCBzZXR0ZXIsIERl
ZmluZVByb3BlcnR5QXR0cmlidXRlcyhhdHRyaWJ1dGVzKSk7CiAgICAgQVNTRVJUKChkZXNjcmlw
dG9yLmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikgfHwgKCFkZXNj
cmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKICAgICBpZiAoYmFzZS0+bWV0aG9kVGFi
bGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSA9PSBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkp
Ci0gICAgICAgIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShiYXNlLCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIHRydWUpOworICAgICAgICBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkoYmFzZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRydWUp
OwogICAgIGVsc2UKLSAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9w
ZXJ0eShiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRydWUpOworICAgICAg
ICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KGJhc2UsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0cnVlKTsKIH0KIAotdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBKU09iamVjdCog
Z2V0dGVyLCBKU09iamVjdCogc2V0dGVyLCBpbnQzMl90IGF0dHJpYnV0ZXMpCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3Bl
cnR5LCBKU09iamVjdCogZ2V0dGVyLCBKU09iamVjdCogc2V0dGVyLCBpbnQzMl90IGF0dHJpYnV0
ZXMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3BlcnR5KS50b1Byb3BlcnR5S2V5KGV4ZWMp
OworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQ
cm9wZXJ0eSkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgZGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShleGVjLCB2
bSwgYmFzZSwgcHJvcGVydHlOYW1lLCBnZXR0ZXIsIHNldHRlciwgYXR0cmlidXRlcyk7CisgICAg
ZGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHZtLCBiYXNlLCBwcm9wZXJ0eU5h
bWUsIGdldHRlciwgc2V0dGVyLCBhdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5LCBKU09iamVjdCogZ2V0dGVyLCBKU09i
amVjdCogc2V0dGVyLCBpbnQzMl90IGF0dHJpYnV0ZXMpCit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5LCBKU09iamVjdCogZ2V0
dGVyLCBKU09iamVjdCogc2V0dGVyLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS0+dG9J
ZGVudGlmaWVyKGV4ZWMpOworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHkt
PnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7Ci0gICAgZGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShleGVjLCB2bSwgYmFzZSwg
cHJvcGVydHlOYW1lLCBnZXR0ZXIsIHNldHRlciwgYXR0cmlidXRlcyk7CisgICAgZGVmaW5lQWNj
ZXNzb3JQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHZtLCBiYXNlLCBwcm9wZXJ0eU5hbWUsIGdldHRl
ciwgc2V0dGVyLCBhdHRyaWJ1dGVzKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJpbmdJZGVudChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHksIEpTT2JqZWN0KiBnZXR0ZXIs
IEpTT2JqZWN0KiBzZXR0ZXIsIGludDMyX3QgYXR0cmlidXRlcykKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3RyaW5nSWRlbnQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9w
ZXJ0eSwgSlNPYmplY3QqIGdldHRlciwgSlNPYmplY3QqIHNldHRlciwgaW50MzJfdCBhdHRyaWJ1
dGVzKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgZGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShleGVjLCB2
bSwgYmFzZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHkpLCBnZXR0ZXIsIHNldHRl
ciwgYXR0cmlidXRlcyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGRlZmluZUFjY2Vzc29y
UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB2bSwgYmFzZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
cHJvcGVydHkpLCBnZXR0ZXIsIHNldHRlciwgYXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3ltYm9sKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2UsIFN5bWJvbCogcHJvcGVydHksIEpTT2JqZWN0KiBnZXR0ZXIs
IEpTT2JqZWN0KiBzZXR0ZXIsIGludDMyX3QgYXR0cmlidXRlcykKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3ltYm9sKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBTeW1ib2wqIHByb3BlcnR5LCBKU09iamVjdCog
Z2V0dGVyLCBKU09iamVjdCogc2V0dGVyLCBpbnQzMl90IGF0dHJpYnV0ZXMpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKLSAgICBkZWZpbmVBY2Nlc3NvclByb3BlcnR5KGV4ZWMsIHZtLCBiYXNlLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHByb3BlcnR5LT5wcml2YXRlTmFtZSgpKSwgZ2V0dGVyLCBzZXR0ZXIsIGF0
dHJpYnV0ZXMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBkZWZpbmVBY2Nlc3NvclByb3Bl
cnR5KGdsb2JhbE9iamVjdCwgdm0sIGJhc2UsIElkZW50aWZpZXI6OmZyb21VaWQocHJvcGVydHkt
PnByaXZhdGVOYW1lKCkpLCBnZXR0ZXIsIHNldHRlciwgYXR0cmlidXRlcyk7CiB9CiAKLWNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAotICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5KGV4ZWMsIGFycmF5U3RydWN0dXJlLCBz
dGF0aWNfY2FzdDxKU1ZhbHVlKj4oYnVmZmVyKSwgc2l6ZSkpOworICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5KGdsb2JhbE9iamVjdCwgYXJyYXlTdHJ1Y3R1cmUs
IHN0YXRpY19jYXN0PEpTVmFsdWUqPihidWZmZXIpLCBzaXplKSk7CiB9CiAKLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogYXJyYXlTdHJ1Y3R1cmUpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5
QXJyYXkoVk0qIHZtUG9pbnRlciwgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFy
Kj4oSlNBcnJheTo6Y3JlYXRlKHZtLCBhcnJheVN0cnVjdHVyZSkpOwogfQogCi1jaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBpbnQzMl90IHNpemUsIEJ1dHRlcmZseSogYnV0dGVyZmx5
KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGludDMyX3Qg
c2l6ZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgaWYgKFVOTElLRUxZKHNpemUgPCAwKSkKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIl9zKSkp
OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPih0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIkFycmF5IHNp
emUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIl9zKSkpOwogCiAgICAg
SlNBcnJheSogcmVzdWx0OwogICAgIGlmIChidXR0ZXJmbHkpCkBAIC0xNzYxLDE0ICsxODk2LDE1
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFy
Kj4ocmVzdWx0KTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplQW5kSGludChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUs
IGludDMyX3Qgc2l6ZSwgaW50MzJfdCB2ZWN0b3JMZW5ndGhIaW50LCBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZEhp
bnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVy
ZSwgaW50MzJfdCBzaXplLCBpbnQzMl90IHZlY3Rvckxlbmd0aEhpbnQsIEJ1dHRlcmZseSogYnV0
dGVyZmx5KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXpl
IDwgMCkpCi0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheSBzaXplIGlzIG5vdCBh
IHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiJfcykpKTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxjaGFyKj4odGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3Jl
YXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsICJBcnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVu
b3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiJfcykpKTsKIAogICAgIEpTQXJyYXkqIHJlc3VsdDsKICAg
ICBpZiAoYnV0dGVyZmx5KQpAQCAtMTc4MCwxMCArMTkxNiwxMSBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRIaW50KEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLUpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIEpTQ2VsbCogaW1tdXRhYmxlQnV0dGVyZmx5
Q2VsbCkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihWTSog
dm1Qb2ludGVyLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBKU0NlbGwqIGltbXV0YWJsZUJ1
dHRlcmZseUNlbGwpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEFTU0VSVCgh
YXJyYXlTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIGF1dG8qIGltbXV0YWJs
ZUJ1dHRlcmZseSA9IGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGltbXV0YWJsZUJ1dHRl
cmZseUNlbGwpOwogICAgIEFTU0VSVChhcnJheVN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkgPT0g
aW1tdXRhYmxlQnV0dGVyZmx5LT5pbmRleGluZ01vZGUoKSB8fCBoYXNBbnlBcnJheVN0b3JhZ2Uo
YXJyYXlTdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSk7CkBAIC0xNzk0LDE0NCArMTkzMSwxODIg
QEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVMKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZSgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCwgY2hhciogdmVjdG9yKQorICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0
aCwgY2hhciogdmVjdG9yKQogewotICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNJ
bnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3IpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTSW50OEFycmF5Pihn
bG9iYWxPYmplY3QsIHZtLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yKTsKIH0KIAogY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoCi0gICAg
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVk
QXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNv
ZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3V2l0aEFyZ3VtZW50czxKU0ludDhBcnJheT4oZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGVu
Y29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoLCBjaGFyKiB2ZWN0b3IpCisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3Qg
bGVuZ3RoLCBjaGFyKiB2ZWN0b3IpCiB7Ci0gICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6
ZTxKU0ludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3IpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTSW50MTZB
cnJheT4oZ2xvYmFsT2JqZWN0LCB2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvcik7CiB9CiAK
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVu
dCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5l
cmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPEpTSW50MTZBcnJheT4oZXhlYywgc3RydWN0
dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5
cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU0ludDE2QXJyYXk+KGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwogfQogCiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoU2l6ZSgKLSAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCwgY2hhciogdmVjdG9y
KQorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBpbnQzMl90IGxlbmd0aCwgY2hhciogdmVjdG9yKQogewotICAgIHJldHVybiBuZXdUeXBlZEFy
cmF5V2l0aFNpemU8SlNJbnQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9y
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6
ZTxKU0ludDMyQXJyYXk+KGdsb2JhbE9iamVjdCwgdm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0
b3IpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRo
T25lQXJndW1lbnQoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29u
c3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU0ludDMyQXJyYXk+KGV4
ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVj
dEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHM8SlNJbnQzMkFycmF5PihnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKIH0KIAog
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoCi0gICAg
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgsIGNo
YXIqIHZlY3RvcikKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgsIGNoYXIqIHZlY3RvcikKIHsKLSAgICByZXR1cm4g
bmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5n
dGgsIHZlY3Rvcik7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiBuZXdUeXBlZEFy
cmF5V2l0aFNpemU8SlNVaW50OEFycmF5PihnbG9iYWxPYmplY3QsIHZtLCBzdHJ1Y3R1cmUsIGxl
bmd0aCwgdmVjdG9yKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OEFycmF5V2l0aE9uZUFyZ3VtZW50KAotICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHM8SlNVaW50
OEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
Pihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPEpTVWludDhBcnJh
eT4oZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0
KSk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJy
YXlXaXRoU2l6ZSgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBp
bnQzMl90IGxlbmd0aCwgY2hhciogdmVjdG9yKQorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCwgY2hhciogdmVjdG9y
KQogewotICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50OENsYW1wZWRBcnJh
eT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvcik7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OworICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50OENsYW1wZWRBcnJheT4o
Z2xvYmFsT2JqZWN0LCB2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvcik7CiB9CiAKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1l
bnQoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RydWN0R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVj
LCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RH
ZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzPEpTVWludDhDbGFtcGVkQXJyYXk+KGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwog
fQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUo
Ci0gICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5n
dGgsIGNoYXIqIHZlY3RvcikKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgsIGNoYXIqIHZlY3RvcikKIHsKLSAgICBy
ZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVy
ZSwgbGVuZ3RoLCB2ZWN0b3IpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gbmV3
VHlwZWRBcnJheVdpdGhTaXplPEpTVWludDE2QXJyYXk+KGdsb2JhbE9iamVjdCwgdm0sIHN0cnVj
dHVyZSwgbGVuZ3RoLCB2ZWN0b3IpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld1VpbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KAotICAgIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVu
dHM8SlNVaW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6
bnVsbG9wdCkpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50czxK
U1VpbnQxNkFycmF5PihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAwLCBX
VEY6Om51bGxvcHQpKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
MzJBcnJheVdpdGhTaXplKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGludDMyX3QgbGVuZ3RoLCBjaGFyKiB2ZWN0b3IpCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoLCBjaGFyKiB2
ZWN0b3IpCiB7Ci0gICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQzMkFycmF5
PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQzMkFycmF5PihnbG9iYWxP
YmplY3QsIHZtLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yKTsKIH0KIAogY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgKLSAgICBFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJh
eVZpZXdXaXRoQXJndW1lbnRzPEpTVWludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2Rl
ZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmll
d1dpdGhBcmd1bWVudHM8SlNVaW50MzJBcnJheT4oZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGVu
Y29kZWRWYWx1ZSwgMCwgV1RGOjpudWxsb3B0KSk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemUoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgsIGNoYXIqIHZlY3RvcikKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJf
dCBsZW5ndGgsIGNoYXIqIHZlY3RvcikKIHsKLSAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhT
aXplPEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0Zs
b2F0MzJBcnJheT4oZ2xvYmFsT2JqZWN0LCB2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvcik7
CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9u
ZUFyZ3VtZW50KAotICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0
cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHM8SlNGbG9hdDMyQXJyYXk+KGV4
ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAwLCBXVEY6Om51bGxvcHQpKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0cnVj
dEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHM8SlNGbG9hdDMyQXJyYXk+KGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUsIDAsIFdURjo6bnVsbG9wdCkpOwogfQog
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKAot
ICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3Ro
LCBjaGFyKiB2ZWN0b3IpCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoLCBjaGFyKiB2ZWN0b3IpCiB7Ci0gICAgcmV0
dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0Zsb2F0NjRBcnJheT4oZXhlYywgc3RydWN0dXJl
LCBsZW5ndGgsIHZlY3Rvcik7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiBuZXdU
eXBlZEFycmF5V2l0aFNpemU8SlNGbG9hdDY0QXJyYXk+KGdsb2JhbE9iamVjdCwgdm0sIHN0cnVj
dHVyZSwgbGVuZ3RoLCB2ZWN0b3IpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1bWVudCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1l
bnRzPEpTRmxvYXQ2NEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSwgMCwgV1RG
OjpudWxsb3B0KSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPihjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRz
PEpTRmxvYXQ2NEFycmF5PihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlLCAw
LCBXVEY6Om51bGxvcHQpKTsKIH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNy
ZWF0ZUFjdGl2YXRpb25EaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNTY29wZSogc2NvcGUsIFN5bWJvbFRhYmxlKiB0YWJsZSwgRW5jb2RlZEpTVmFsdWUgaW5p
dGlhbFZhbHVlRW5jb2RlZCkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVB
Y3RpdmF0aW9uRGlyZWN0KFZNKiB2bVBvaW50ZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Nj
b3BlKiBzY29wZSwgU3ltYm9sVGFibGUqIHRhYmxlLCBFbmNvZGVkSlNWYWx1ZSBpbml0aWFsVmFs
dWVFbmNvZGVkKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIGlu
aXRpYWxWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShpbml0aWFsVmFsdWVFbmNvZGVkKTsKICAgICBB
U1NFUlQoaW5pdGlhbFZhbHVlID09IGpzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbFZhbHVlID09IGpz
VERaVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTTGV4aWNhbEVudmlyb25tZW50OjpjcmVhdGUodm0s
IHN0cnVjdHVyZSwgc2NvcGUsIHRhYmxlLCBpbml0aWFsVmFsdWUpOwogfQogCi1KU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgbWluQ2Fw
YWNpdHkpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1l
bnRzKFZNKiB2bVBvaW50ZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgs
IHVpbnQzMl90IG1pbkNhcGFjaXR5KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZt
UG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAg
ICBEaXJlY3RBcmd1bWVudHMqIHJlc3VsdCA9IERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlKAogICAg
ICAgICB2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHN0ZDo6bWF4KGxlbmd0aCwgbWluQ2FwYWNpdHkp
KTsKICAgICAvLyBUaGUgY2FsbGVyIHdpbGwgc3RvcmUgdG8gdGhpcyBvYmplY3Qgd2l0aG91dCBi
YXJyaWVycy4gTW9zdCBsaWtlbHksIGF0IHRoaXMgcG9pbnQsIHRoaXMgaXMKQEAgLTE5NDEsMTAg
KzIxMTYsMTEgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFy
Z3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSoKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlU2NvcGVkQXJndW1lbnRz
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ2lzdGVyKiBhcmd1bWVu
dFN0YXJ0LCB1aW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgSlNMZXhpY2FsRW52
aXJvbm1lbnQqIHNjb3BlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVNj
b3BlZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVpbnQzMl90IGxlbmd0aCwgSlNGdW5j
dGlvbiogY2FsbGVlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUpCiB7Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgLy8gV2UgY291bGQgcGFzcyB0aGUg
U2NvcGVkQXJndW1lbnRzVGFibGUqIGFzIGFuIGFyZ3VtZW50LiBXZSBjdXJyZW50bHkgZG9uJ3Qg
YmVjYXVzZSBJCiAgICAgLy8gZGlkbid0IGZlZWwgbGlrZSBjaGFuZ2luZyB0aGUgbWF4IG51bWJl
ciBvZiBhcmd1bWVudHMgZm9yIGEgc2xvdyBwYXRoIGNhbGwgZnJvbSA2IHRvIDcuCkBAIC0xOTU0
LDE4ICsyMTMwLDIwIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVTY29w
ZWRBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqCiAgICAgICAgIHZtLCBzdHJ1
Y3R1cmUsIGFyZ3VtZW50U3RhcnQsIGxlbmd0aCwgY2FsbGVlLCB0YWJsZSwgc2NvcGUpOwogfQog
Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ2lzdGVyKiBhcmd1bWVudFN0
YXJ0LCB1aW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSkKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0
LCB1aW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSkKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICByZXR1cm4gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVC
eUNvcHlpbmdGcm9tKAotICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50U3RhcnQsIGxl
bmd0aCwgY2FsbGVlKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGFyZ3VtZW50
U3RhcnQsIGxlbmd0aCwgY2FsbGVlKTsKIH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoRXhlY1N0YXRlKiBleGVjLCBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlvbiogY2FsbGVlLCB1aW50MzJf
dCBhcmd1bWVudENvdW50KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZURp
cmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoVk0qIHZtUG9pbnRlciwgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNhbGxlZSwgdWludDMyX3QgYXJndW1lbnRDb3Vu
dCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgRGVmZXJHQ0ZvckFX
aGlsZSBkZWZlckdDKHZtLmhlYXApOwogICAgIApAQCAtMTk3Myw3ICsyMTUxLDcgQEAgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQo
RXhlY1N0YXRlKiBleGVjLAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIGNvZGVC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFt
ZSk7CiAgICAgZWxzZQotICAgICAgICBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAg
ICAgICAgY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKICAgICB1bnNpZ25lZCBjYXBhY2l0eSA9
IHN0ZDo6bWF4KGxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpIC0gMSkpOwpAQCAtMTk4Myw3ICsyMTYxLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoRXhlY1N0YXRlKiBl
eGVjLAogICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBjYWxsZWUpOwogICAgIAogICAgIFJlZ2lz
dGVyKiBhcmd1bWVudHMgPQotICAgICAgICBleGVjLT5yZWdpc3RlcnMoKSArIChpbmxpbmVDYWxs
RnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCkgKworICAgICAgICBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpICsgKGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgOiAwKSArCiAgICAgICAgIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQogICAgICAgICByZXN1bHQtPnNl
dEluZGV4UXVpY2tseSh2bSwgaSwgYXJndW1lbnRzW2ldLmpzVmFsdWUoKSk7CkBAIC0xOTkxLDEw
ICsyMTY5LDExIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXJlY3RB
cmd1bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSogZXhlYywKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
RHVyaW5nRXhpdChFeGVjU3RhdGUqIGV4ZWMsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQpCitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChW
TSogdm1Qb2ludGVyLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgSlNGdW5jdGlv
biogY2FsbGVlLCB1aW50MzJfdCBhcmd1bWVudENvdW50KQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
Vk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKICAgICAKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgCkBAIC0yMDAyLDM4ICsyMTgxLDQwIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSogZXhlYywKICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9j
a0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOwogICAgIGVsc2UKLSAgICAgICAg
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgICAgIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJndW1lbnRD
b3VudCAtIDE7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgQ2xvbmVkQXJndW1lbnRzKiByZXN1bHQgPSBDbG9uZWRBcmd1
bWVudHM6OmNyZWF0ZUVtcHR5KAotICAgICAgICB2bSwgY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsKKyAgICAgICAg
dm0sIGdsb2JhbE9iamVjdC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVu
Z3RoKTsKICAgICAKICAgICBSZWdpc3RlciogYXJndW1lbnRzID0KLSAgICAgICAgZXhlYy0+cmVn
aXN0ZXJzKCkgKyAoaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCA6IDApICsKKyAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIChpbmxpbmVDYWxsRnJh
bWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCkgKwogICAgICAgICBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0KDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0t
OykKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBhcmd1bWVudHNbaV0u
anNWYWx1ZSgpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3Qs
IGksIGFyZ3VtZW50c1tpXS5qc1ZhbHVlKCkpOwogCiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVJlc3QoRXhlY1N0YXRl
KiBleGVjLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbXNU
b1NraXAsIHVuc2lnbmVkIGFycmF5U2l6ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVSZXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZ2lzdGVyKiBhcmd1
bWVudFN0YXJ0LCB1bnNpZ25lZCBudW1iZXJPZlBhcmFtc1RvU2tpcCwgdW5zaWduZWQgYXJyYXlT
aXplKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+cmVzdFBhcmFtZXRlclN0cnVj
dHVyZSgpOwogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2YoSlNW
YWx1ZSksICJUaGlzIGlzIGEgc3Ryb25nIGFzc3VtcHRpb24gaGVyZS4iKTsKICAgICBKU1ZhbHVl
KiBhcmd1bWVudHNUb0NvcHlSZWdpb24gPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KGFyZ3VtZW50
U3RhcnQpICsgbnVtYmVyT2ZQYXJhbXNUb1NraXA7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5
KGV4ZWMsIHN0cnVjdHVyZSwgYXJndW1lbnRzVG9Db3B5UmVnaW9uLCBhcnJheVNpemUpOworICAg
IHJldHVybiBjb25zdHJ1Y3RBcnJheShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgYXJndW1lbnRz
VG9Db3B5UmVnaW9uLCBhcnJheVNpemUpOwogfQogCi1zaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
T2JqZWN0SXNPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvYmpl
Y3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBBU1NFUlQo
anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBvYmplY3QpKTsKICAgICAKQEAgLTIwNDQsMTAg
KzIyMjUsMTEgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNPYmplY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2wKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQor
c2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKIAogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4o
dm0sIG9iamVjdCkpOwogICAgIApAQCAtMjA1OCwxMCArMjI0MCwxMSBAQCBzaXplX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25PYmplY3RJc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVHlwZU9mT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDZWxsKiBvYmplY3QpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVHlwZU9mT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2Jq
ZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgQVNTRVJU
KGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgb2JqZWN0KSk7CiAgICAgCkBAIC0yMDcyLDEw
ICsyMjU1LDExIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2ZPYmplY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgcmV0dXJuIHZtLnNtYWxs
U3RyaW5ncy5vYmplY3RTdHJpbmcoKTsKIH0KIAotaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblR5cGVPZk9iamVjdEFzVHlwZW9mVHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQoraW50MzJfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlwZW9mVHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKIAogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIG9iamVjdCkp
OwogICAgIApAQCAtMjA4Niw0NyArMjI3MCw1MiBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVHlwZU9mT2JqZWN0QXNUeXBlb2ZUeXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpPYmplY3QpOwogfQog
Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlU2ltcGxlUHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMpCitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFsbG9jYXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBh
Y2l0eShWTSogdm1Qb2ludGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9p
bnRlcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKICAgICAgICAgQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkKHZtLCAwLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHksIGZhbHNl
LCAwKSk7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQ
cm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbmV3U2l6ZSkKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2UoVk0qIHZt
UG9pbnRlciwgc2l6ZV90IG5ld1NpemUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSAq
dm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAogICAgICAgICBCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIDAsIDAsIG5ld1NpemUsIGZhbHNlLCAwKSk7CiB9CiAK
LWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVDb21wbGV4UHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qp
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3Rv
cmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoVk0qIHZtUG9pbnRlciwgSlNPYmplY3QqIG9iamVjdCkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3Ry
dWN0dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KAogICAgICAgICBvYmplY3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3Jh
Z2Uodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSkpOwogfQogCi1jaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQorY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2UoVk0qIHZtUG9pbnRl
ciwgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAogICAgICAg
ICBvYmplY3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0
dXJlKHZtKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSkpOwogfQogCi1jaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBj
ZWxsKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihWTSogdm1Qb2lu
dGVyLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2lu
dGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAog
ICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTM2LDEw
ICsyMzI1LDExIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlSW50MzIoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVEb3VibGUoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGNlbGwpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShW
TSogdm1Qb2ludGVyLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0g
PSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwogICAgIAogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0yMTQ5LDEwICsyMzM5LDExIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJl
RG91YmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlQ29udGlndW91cyhWTSogdm1Qb2ludGVyLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIGlmICghY2VsbC0+aXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC0yMTYyLDEwICsyMzUzLDExIEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKFZNKiB2bVBvaW50ZXIs
IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAg
aWYgKCFjZWxsLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxNzUsOTQgKzIz
NjcsMTAyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdl
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgSlNDZWxs
KiBwcm9wZXJ0eSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzR2Vu
ZXJpY1Byb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEpTQ2VsbCogcHJvcGVydHkpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2VWYWx1ZSk7CiAgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogCi0gICAgSlNPYmpl
Y3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2Ug
PSBiYXNlVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpIHx8ICFiYXNlKTsKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5n
KHByb3BlcnR5KS0+dG9JZGVudGlmaWVyKGV4ZWMpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
YXNTdHJpbmcocHJvcGVydHkpLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eUdlbmVyaWMoZXhl
YywgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3du
UHJvcGVydHkpKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0
eSkpKSk7CiB9CiAKLXNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9w
ZXJ0eUJ5SW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBzdWJz
Y3JpcHQsIGludDMyX3QgaW50ZXJuYWxNZXRob2RUeXBlKQorc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQsIGludDMyX3QgaW50ZXJu
YWxNZXRob2RUeXBlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGJh
c2VDZWxsLT50b09iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYmFzZUNlbGwtPnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKHN1YnNjcmlwdCA8IDApKSB7CiAg
ICAgICAgIC8vIEdvIHRoZSBzbG93ZXN0IHdheSBwb3NzaWJsZSBiZWNhdXNlIG5lZ2F0aXZlIGlu
ZGljZXMgZG9uJ3QgdXNlIGluZGV4ZWQgc3RvcmFnZS4KLSAgICAgICAgcmV0dXJuIG9iamVjdC0+
aGFzUHJvcGVydHlHZW5lcmljKGV4ZWMsIElkZW50aWZpZXI6OmZyb20odm0sIHN1YnNjcmlwdCks
IHN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlPihpbnRlcm5hbE1l
dGhvZFR5cGUpKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdC0+aGFzUHJvcGVydHlHZW5lcmljKGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgc3Vic2NyaXB0KSwgc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU+KGludGVybmFsTWV0aG9kVHlwZSkpOwog
ICAgIH0KLSAgICByZXR1cm4gb2JqZWN0LT5oYXNQcm9wZXJ0eUdlbmVyaWMoZXhlYywgc3Vic2Ny
aXB0LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZT4oaW50ZXJu
YWxNZXRob2RUeXBlKSk7CisgICAgcmV0dXJuIG9iamVjdC0+aGFzUHJvcGVydHlHZW5lcmljKGds
b2JhbE9iamVjdCwgc3Vic2NyaXB0LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZT4oaW50ZXJuYWxNZXRob2RUeXBlKSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRQcm9wZXJ0eUVudW1lcmF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNW
YWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBpZiAoYmFzZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gdm0uZW1wdHlQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKCk7CiAKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGJhc2UudG9PYmplY3Qo
ZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBiYXNlLnRvT2JqZWN0KGdsb2JhbE9i
amVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgcHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBiYXNlT2Jq
ZWN0KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCkpOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogY2VsbCkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQcm9wZXJ0eUVu
dW1lcmF0b3JDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogY2VsbCkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU09iamVjdCogYmFzZSA9IGNlbGwtPnRv
T2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNPYmplY3Qq
IGJhc2UgPSBjZWxsLT50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByb3Bl
cnR5TmFtZUVudW1lcmF0b3IoZXhlYywgYmFzZSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgcHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmplY3QsIGJhc2UpKTsKIH0KIAot
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBpbnQzMl90IGluZGV4KQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvSW5k
ZXhTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBpbmRleCkKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICByZXR1cm4ganNTdHJpbmco
dm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSk7CiB9CiAKLUpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4KEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiByZWdleHBQdHIsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRMYXN0SW5kZXgp
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIHJlZ2V4cFB0ciwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZExhc3RJbmRleCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKIAogICAgIFJlZ0V4cCogcmVnZXhwID0gc3RhdGljX2Nhc3Q8UmVnRXhwKj4ocmVnZXhw
UHRyKTsKICAgICBBU1NFUlQocmVnZXhwLT5pc1ZhbGlkKCkpOwotICAgIHJldHVybiBSZWdFeHBP
YmplY3Q6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1
Y3R1cmUoKSwgcmVnZXhwLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZExhc3RJbmRleCkpOworICAg
IHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1
Y3R1cmUoKSwgcmVnZXhwLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZExhc3RJbmRleCkpOwogfQog
Ci1TdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0
ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZykKK1N0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmVzb2x2ZVJvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcq
IHN0cmluZykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIHJl
dHVybiBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKKyAgICByZXR1cm4gc3RyaW5nLT52YWx1
ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKIH0KIAotSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uU3RyaW5nVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRBcmd1bWVudCkKK0pTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1ZhbHVl
T2YoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFy
Z3VtZW50KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYXJndW1lbnQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKQEAgLTIyNzMsMzYgKzI0NzMsMzkg
QEAgSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nVmFsdWVPZihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGUKICAgICBpZiAoYXV0byogc3RyaW5nT2JqZWN0ID0g
anNEeW5hbWljQ2FzdDxTdHJpbmdPYmplY3QqPih2bSwgYXJndW1lbnQpKQogICAgICAgICByZXR1
cm4gc3RyaW5nT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCk7CiAKLSAgICB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlKTsKKyAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUp
OwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3RyaW5nU3Vic3RyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBpbnQzMl90IGZy
b20sIGludDMyX3Qgc3BhbikKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdT
dWJzdHIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBjZWxsLCBpbnQzMl90
IGZyb20sIGludDMyX3Qgc3BhbikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKIAotICAgIHJldHVybiBqc1N1YnN0cmluZyh2bSwgZXhlYywganNDYXN0PEpTU3RyaW5nKj4o
Y2VsbCksIGZyb20sIHNwYW4pOworICAgIHJldHVybiBqc1N1YnN0cmluZyh2bSwgZ2xvYmFsT2Jq
ZWN0LCBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxsKSwgZnJvbSwgc3Bhbik7CiB9CiAKLUpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdTbGljZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogY2VsbCwgaW50MzJfdCBzdGFydCwgaW50MzJfdCBlbmQpCitKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3RyaW5nU2xpY2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
ZWxsKiBjZWxsLCBpbnQzMl90IHN0YXJ0LCBpbnQzMl90IGVuZCkKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhj
ZWxsKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnQ2NF90PihKU1N0cmluZzo6
TWF4TGVuZ3RoKSA8PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWF4KCkpLCAiIik7Ci0gICAgcmV0dXJuIHN0cmluZ1NsaWNlKGV4ZWMsIHZtLCBz
dHJpbmcsIHN0cmluZy0+bGVuZ3RoKCksIHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBzdHJpbmdT
bGljZShnbG9iYWxPYmplY3QsIHZtLCBzdHJpbmcsIHN0cmluZy0+bGVuZ3RoKCksIHN0YXJ0LCBl
bmQpOwogfQogCi1KU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0xvd2VyQ2FzZShF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIHVpbnQzMl90IGZhaWxpbmdJbmRleCkK
K0pTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTG93ZXJDYXNlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcsIHVpbnQzMl90IGZhaWxpbmdJbmRl
eCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFN0cmluZyBpbnB1dFN0cmluZyA9
IHN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIGlucHV0U3RyaW5nID0gc3RyaW5nLT52
YWx1ZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogICAgIGlmICghaW5wdXRTdHJpbmcubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiB2bS5z
bWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKTsKQEAgLTIzMTMsMjAwICsyNTE2LDIxOCBAQCBKU1N0
cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMs
IEpTU3RyaW5nKiBzdHJpbmcsCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmlu
Zyh2bSwgbG93ZXJjYXNlZFN0cmluZykpOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkludDMyVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IHZhbHVlLCBpbnQzMl90
IHJhZGl4KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQzMlRvU3RyaW5nKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgdmFsdWUsIGludDMyX3QgcmFkaXgpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4g
MzYpIHsKLSAgICAgICAgdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsICJ0b1N0cmluZygpIHJhZGl4IGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiAyIGFuZCAz
NiJfcykpOworICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsICJ0b1N0cmluZygpIHJhZGl4IGFyZ3VtZW50IG11c3Qg
YmUgYmV0d2VlbiAyIGFuZCAzNiJfcykpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW50MzJUb1N0cmluZyh2bSwg
dmFsdWUsIHJhZGl4KSk7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50NTJU
b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDY0X3QgdmFsdWUsIGludDMyX3QgcmFkaXgpCitj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkludDUyVG9TdHJpbmcoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChyYWRpeCA8IDIgfHwgcmFkaXggPiAzNikgewotICAg
ICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgInRv
U3RyaW5nKCkgcmFkaXggYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDM2Il9zKSk7Cisg
ICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGdsb2JhbE9iamVjdCwgInRvU3RyaW5nKCkgcmFkaXggYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVu
IDIgYW5kIDM2Il9zKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihpbnQ1MlRvU3RyaW5nKHZtLCB2YWx1ZSwgcmFk
aXgpKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Eb3VibGVUb1N0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSwgaW50MzJfdCByYWRpeCkKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgZG91YmxlIHZhbHVlLCBpbnQzMl90IHJhZGl4KQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwogCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDM2KSB7Ci0gICAgICAgIHRocm93
Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAidG9TdHJpbmcoKSBy
YWRpeCBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMiBhbmQgMzYiX3MpKTsKKyAgICAgICAgdGhy
b3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCAidG9TdHJpbmcoKSByYWRpeCBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMiBhbmQgMzYi
X3MpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KG51bWJlclRvU3RyaW5nKHZtLCB2YWx1ZSwgcmFkaXgpKTsKIH0K
IAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQzMlRvU3RyaW5nV2l0aFZhbGlkUmFk
aXgoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IHZhbHVlLCBpbnQzMl90IHJhZGl4KQorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQzMlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihpbnQzMlRvU3RyaW5nKHZtLCB2YWx1ZSwgcmFkaXgpKTsKIH0KIAot
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQ1MlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgo
RXhlY1N0YXRlKiBleGVjLCBpbnQ2NF90IHZhbHVlLCBpbnQzMl90IHJhZGl4KQorY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25JbnQ1MlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPihpbnQ1MlRvU3RyaW5nKHZtLCB2YWx1ZSwgcmFkaXgpKTsKIH0KIAotY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Eb3VibGVUb1N0cmluZ1dpdGhWYWxpZFJhZGl4KEV4
ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlLCBpbnQzMl90IHJhZGl4KQorY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Eb3VibGVUb1N0cmluZ1dpdGhWYWxpZFJhZGl4KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSB2YWx1ZSwgaW50MzJfdCByYWRpeCkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihudW1iZXJUb1N0cmluZyh2bSwgdmFsdWUsIHJhZGl4KSk7CiB9CiAKLUpTU3Ry
aW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIGludDMyX3QgY2hhcmFjdGVyKQorSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKFZNKiB2bVBvaW50ZXIsIGludDMyX3QgY2hhcmFj
dGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICByZXR1cm4ganNT
aW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIHN0YXRpY19jYXN0PFVDaGFyPihjaGFyYWN0ZXIpKTsK
IH0KIAotU3ltYm9sKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N5bWJvbChFeGVjU3RhdGUq
IGV4ZWMpCitTeW1ib2wqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3ltYm9sKFZNKiB2bVBv
aW50ZXIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgcmV0dXJuIFN5bWJv
bDo6Y3JlYXRlKHZtKTsKIH0KIAotU3ltYm9sKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N5
bWJvbFdpdGhEZXNjcmlwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBkZXNjcmlwdGlv
bikKK1N5bWJvbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTeW1ib2xXaXRoRGVzY3JpcHRp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGRlc2NyaXB0aW9uKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFN0cmluZyBzdHJpbmcgPSBkZXNjcmlwdGlv
bi0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIHN0cmluZyA9IGRlc2NyaXB0aW9uLT52YWx1ZShn
bG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwog
CiAgICAgcmV0dXJuIFN5bWJvbDo6Y3JlYXRlV2l0aERlc2NyaXB0aW9uKHZtLCBzdHJpbmcpOwog
fQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KFZNKiB2bVBvaW50ZXIs
IEpTU3RyaW5nKiBzdHJpbmcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICByZXR1cm4gU3RyaW5nT2JqZWN0OjpjcmVhdGUodm0s
IHN0cnVjdHVyZSwgc3RyaW5nKTsKIH0KIAotSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCitKU1N0cmlu
ZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWUoY2VsbCkudG9TdHJpbmcoZXhlYyk7
CisgICAgcmV0dXJuIEpTVmFsdWUoY2VsbCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKIH0KIAot
SlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK0pTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZh
bHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9TdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmRlY29kZSh2YWx1ZSkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKIH0KIAotSlNTdHJpbmcq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yT25DZWxsKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yT25DZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
IAotICAgIHJldHVybiBzdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBjZWxsKTsKKyAgICByZXR1cm4g
c3RyaW5nQ29uc3RydWN0b3IoZ2xvYmFsT2JqZWN0LCBjZWxsKTsKIH0KIAotSlNTdHJpbmcqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRp
b25DYWxsU3RyaW5nQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CiAKLSAgICByZXR1cm4gc3RyaW5nQ29uc3RydWN0b3IoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlKSk7CisgICAgcmV0dXJuIHN0cmluZ0NvbnN0cnVjdG9yKGdsb2JhbE9iamVjdCwgSlNWYWx1
ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKLUpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk1ha2VSb3BlMihFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBsZWZ0LCBKU1N0cmluZyogcmln
aHQpCitKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGxlZnQsIEpTU3RyaW5nKiByaWdodCkKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIHJldHVybiBqc1N0cmlu
ZyhleGVjLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGdsb2JhbE9iamVjdCwg
bGVmdCwgcmlnaHQpOwogfQogCi1KU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtl
Um9wZTMoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcqIGIsIEpTU3RyaW5n
KiBjKQorSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyogYiwgSlNTdHJpbmcq
IGMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgYSwgYiwgYyk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGdsb2JhbE9iamVj
dCwgYSwgYiwgYyk7CiB9CiAKLUpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNh
dDIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBhLCBFbmNvZGVkSlNWYWx1ZSBiKQor
SlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBhLCBFbmNvZGVkSlNWYWx1ZSBiKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVCghSlNWYWx1ZTo6ZGVjb2RlKGEpLmlzU3lt
Ym9sKCkpOwogICAgIEFTU0VSVCghSlNWYWx1ZTo6ZGVjb2RlKGIpLmlzU3ltYm9sKCkpOwotICAg
IEpTU3RyaW5nKiBzdHIxID0gSlNWYWx1ZTo6ZGVjb2RlKGEpLnRvU3RyaW5nKGV4ZWMpOworICAg
IEpTU3RyaW5nKiBzdHIxID0gSlNWYWx1ZTo6ZGVjb2RlKGEpLnRvU3RyaW5nKGdsb2JhbE9iamVj
dCk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ug
d2UgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4gbm9uLVN5bWJvbCBwcmltaXRpdmVzLgotICAgIEpTU3Ry
aW5nKiBzdHIyID0gSlNWYWx1ZTo6ZGVjb2RlKGIpLnRvU3RyaW5nKGV4ZWMpOworICAgIEpTU3Ry
aW5nKiBzdHIyID0gSlNWYWx1ZTo6ZGVjb2RlKGIpLnRvU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAg
ICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwganNTdHJpbmcoZXhlYywgc3RyMSwgc3RyMikpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwganNTdHJpbmcoZ2xvYmFsT2JqZWN0LCBzdHIxLCBzdHIyKSk7CiB9CiAgICAgCi1K
U1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQzKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgYSwgRW5jb2RlZEpTVmFsdWUgYiwgRW5jb2RlZEpTVmFsdWUgYykKK0pT
U3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdDMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgYSwgRW5jb2RlZEpTVmFsdWUgYiwgRW5jb2RlZEpT
VmFsdWUgYykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQoIUpTVmFsdWU6
OmRlY29kZShhKS5pc1N5bWJvbCgpKTsKICAgICBBU1NFUlQoIUpTVmFsdWU6OmRlY29kZShiKS5p
c1N5bWJvbCgpKTsKICAgICBBU1NFUlQoIUpTVmFsdWU6OmRlY29kZShjKS5pc1N5bWJvbCgpKTsK
LSAgICBKU1N0cmluZyogc3RyMSA9IEpTVmFsdWU6OmRlY29kZShhKS50b1N0cmluZyhleGVjKTsK
KyAgICBKU1N0cmluZyogc3RyMSA9IEpTVmFsdWU6OmRlY29kZShhKS50b1N0cmluZyhnbG9iYWxP
YmplY3QpOwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7IC8vIEltcG9zc2libGUsIHNp
bmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIG5vbi1TeW1ib2wgcHJpbWl0aXZlcy4KLSAgICBK
U1N0cmluZyogc3RyMiA9IEpTVmFsdWU6OmRlY29kZShiKS50b1N0cmluZyhleGVjKTsKKyAgICBK
U1N0cmluZyogc3RyMiA9IEpTVmFsdWU6OmRlY29kZShiKS50b1N0cmluZyhnbG9iYWxPYmplY3Qp
OwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgSlNTdHJpbmcqIHN0cjMgPSBK
U1ZhbHVlOjpkZWNvZGUoYykudG9TdHJpbmcoZXhlYyk7CisgICAgSlNTdHJpbmcqIHN0cjMgPSBK
U1ZhbHVlOjpkZWNvZGUoYykudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBzY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmlu
ZyhleGVjLCBzdHIxLCBzdHIyLCBzdHIzKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBqc1N0cmluZyhnbG9iYWxPYmplY3QsIHN0cjEsIHN0cjIsIHN0cjMpKTsKIH0KIAotY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKAotICAg
IEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBzaXplX3QgdGFi
bGVJbmRleCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdl
dEZvckRvdWJsZShWTSogdm1Qb2ludGVyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIHNp
emVfdCB0YWJsZUluZGV4KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBTaW1wbGVKdW1wVGFibGUmIHRh
YmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1
ZS5pc0RvdWJsZSgpKTsKQEAgLTI1MTcsMzAgKzI3MzgsMzIgQEAgY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKAogICAgIHJldHVybiB0YWJs
ZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOwogfQogCi1jaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0
YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Td2l0Y2hTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc2l6ZV90IHRhYmxl
SW5kZXgsIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBTdHJpbmdJbXBsKiBzdHJJbXBsID0gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7Cisg
ICAgU3RyaW5nSW1wbCogc3RySW1wbCA9IHN0cmluZy0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBs
KCk7CiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCi0g
ICAgcmV0dXJuIGV4ZWMtPmNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCkuY3RpRm9yVmFsdWUoc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7Cisg
ICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KS5jdGlGb3JWYWx1ZShzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4o
KTsKIH0KIAotaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdl
dEJyYW5jaE9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmlu
Zyogc3RyaW5nKQoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZ0Fu
ZEdldEJyYW5jaE9mZnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBzaXplX3QgdGFi
bGVJbmRleCwgSlNTdHJpbmcqIHN0cmluZykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIFN0cmluZ0ltcGwqIHN0ckltcGwgPSBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsK
KyAgICBTdHJpbmdJbXBsKiBzdHJJbXBsID0gc3RyaW5nLT52YWx1ZShnbG9iYWxPYmplY3QpLmlt
cGwoKTsKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7CiAKLSAgICBy
ZXR1cm4gZXhlYy0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KS5vZmZzZXRGb3JWYWx1ZShzdHJJbXBsLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
aW4oKSk7CisgICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZShzdHJJbXBsLCBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptaW4oKSk7CiB9CiAKIHVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdJbXBsTGVzcyhTdHJpbmdJbXBsKiBhLCBTdHJpbmdJbXBsKiBi
KQpAQCAtMjU2Myw3NSArMjc4Niw4MyBAQCB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlU3RyaW5nSW1wbEdyZWF0ZXJFcShTdHJpbmdJbXBsKiBhLCBTdHJpbgogICAgIHJl
dHVybiBjb2RlUG9pbnRDb21wYXJlKGEsIGIpID49IDA7CiB9CiAKLXVpbnRwdHJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdMZXNzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIGEsIEpTU3RyaW5nKiBiKQordWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0xlc3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGEs
IEpTU3RyaW5nKiBiKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0g
ICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihhc1N0cmluZyhhKS0+dmFsdWUoZXhl
YyksIGFzU3RyaW5nKGIpLT52YWx1ZShleGVjKSk7CisgICAgcmV0dXJuIGNvZGVQb2ludENvbXBh
cmVMZXNzVGhhbihhc1N0cmluZyhhKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KSwgYXNTdHJpbmcoYikt
PnZhbHVlKGdsb2JhbE9iamVjdCkpOwogfQogCi11aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Db21wYXJlU3RyaW5nTGVzc0VxKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGEsIEpT
U3RyaW5nKiBiKQordWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmlu
Z0xlc3NFcShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogYSwgSlNTdHJp
bmcqIGIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICByZXR1
cm4gIWNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihhc1N0cmluZyhiKS0+dmFsdWUoZXhlYyksIGFz
U3RyaW5nKGEpLT52YWx1ZShleGVjKSk7CisgICAgcmV0dXJuICFjb2RlUG9pbnRDb21wYXJlTGVz
c1RoYW4oYXNTdHJpbmcoYiktPnZhbHVlKGdsb2JhbE9iamVjdCksIGFzU3RyaW5nKGEpLT52YWx1
ZShnbG9iYWxPYmplY3QpKTsKIH0KIAotdWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0dyZWF0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJp
bmcqIGIpCit1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nR3Jl
YXRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogYSwgSlNTdHJpbmcq
IGIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICByZXR1cm4g
Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGFzU3RyaW5nKGIpLT52YWx1ZShleGVjKSwgYXNTdHJp
bmcoYSktPnZhbHVlKGV4ZWMpKTsKKyAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFu
KGFzU3RyaW5nKGIpLT52YWx1ZShnbG9iYWxPYmplY3QpLCBhc1N0cmluZyhhKS0+dmFsdWUoZ2xv
YmFsT2JqZWN0KSk7CiB9CiAKLXVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVTdHJpbmdHcmVhdGVyRXEoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogYSwgSlNTdHJpbmcq
IGIpCit1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nR3JlYXRl
ckVxKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBhLCBKU1N0cmluZyog
YikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIHJldHVybiAh
Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGFzU3RyaW5nKGEpLT52YWx1ZShleGVjKSwgYXNTdHJp
bmcoYiktPnZhbHVlKGV4ZWMpKTsKKyAgICByZXR1cm4gIWNvZGVQb2ludENvbXBhcmVMZXNzVGhh
bihhc1N0cmluZyhhKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KSwgYXNTdHJpbmcoYiktPnZhbHVlKGds
b2JhbE9iamVjdCkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3Jp
dGUoRXhlY1N0YXRlKiBleGVjLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoVk0qIHZtUG9pbnRlciwgV2F0Y2hwb2ludFNldCogc2V0
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIHNldC0+dG91Y2godm0sICJF
eGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICB0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBzY29wZSk7CisgICAgdGhyb3dTdGFja092ZXJmbG93RXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiB9CiAKLWludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCitpbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09m
ZnNldCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVl
IGFyZ3VtZW50cyA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKICAgICAKLSAg
ICByZXR1cm4gc2l6ZU9mVmFyYXJncyhleGVjLCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0
KTsKKyAgICByZXR1cm4gc2l6ZU9mVmFyYXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgYXJn
dW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCk7CiB9CiAKLWludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25IYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkS2V5KQoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkhhc093blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkS2V5KQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRL
ZXkpOwotICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0ga2V5LnRvUHJvcGVydHlLZXkoZXhl
Yyk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBrZXkudG9Qcm9wZXJ0eUtleShnbG9i
YWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAg
IFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7Ci0gICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5o
YXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUuaW1wbCgpLCBzbG90KTsKKyAgICBib29s
IHJlc3VsdCA9IHRoaXNPYmplY3QtPmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLmltcGwoKSwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwogCiAgICAgSGFzT3duUHJvcGVydHlDYWNoZSogaGFzT3duUHJvcGVydHlDYWNoZSA9IHZt
Lmhhc093blByb3BlcnR5Q2FjaGUoKTsKQEAgLTI2NDAsMTcgKzI4NzEsMTkgQEAgaW50MzJfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTnVtYmVySXNJbnRlZ2VyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdmFsdWUpCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTnVtYmVySXNJbnRl
Z2VyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIHJldHVybiBOdW1iZXJD
b25zdHJ1Y3Rvcjo6aXNJbnRlZ2VySW1wbChKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAot
aW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlN0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBKU1N0cmluZyogc2VhcmNoRWxlbWVudCwg
aW50MzJfdCBpbmRleCkKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4
T2ZTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQnV0dGVyZmx5KiBidXR0ZXJm
bHksIEpTU3RyaW5nKiBzZWFyY2hFbGVtZW50LCBpbnQzMl90IGluZGV4KQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIGludDMyX3QgbGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKQEAgLTI2NjIsNyArMjg5NSw3IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25BcnJheUluZGV4T2ZTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBCdXR0ZXJmbHkqIGJ1CiAgICAg
ICAgIGF1dG8qIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHN0cmluZyA9
PSBzZWFyY2hFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICBpZiAo
c3RyaW5nLT5lcXVhbChleGVjLCBzZWFyY2hFbGVtZW50KSkgeworICAgICAgICBpZiAoc3RyaW5n
LT5lcXVhbChnbG9iYWxPYmplY3QsIHNlYXJjaEVsZW1lbnQpKSB7CiAgICAgICAgICAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAg
ICB9CkBAIC0yNjcxLDEwICsyOTA0LDExIEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25BcnJheUluZGV4T2ZTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBCdXR0ZXJmbHkqIGJ1CiAgICAg
cmV0dXJuIC0xOwogfQogCi1pbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRl
eE9mVmFsdWVJbnQzMk9yQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEJ1dHRlcmZseSogYnV0
dGVyZmx5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGludDMyX3QgaW5kZXgpCitpbnQz
Ml90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRleE9mVmFsdWVJbnQzMk9yQ29udGln
dW91cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBpbnQzMl90IGluZGV4KQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgc2VhcmNoRWxlbWVudCA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwpAQCAtMjY4NSw3ICsyOTE5LDcgQEAgaW50MzJfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlSW50MzJPckNvbnRpZ3VvdXMoRXhlY1N0YXRl
KiBleGUKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRhdGFbaW5kZXhdLmdldCgpOwogICAgICAg
ICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGJvb2wgaXNFcXVh
bCA9IEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIHNlYXJjaEVsZW1lbnQsIHZhbHVlKTsKKyAg
ICAgICAgYm9vbCBpc0VxdWFsID0gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZ2xvYmFsT2JqZWN0LCBz
ZWFyY2hFbGVtZW50LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgICAgIGlmIChpc0VxdWFsKQogICAgICAgICAgICAgcmV0dXJuIGluZGV4OwpA
QCAtMjY5MywxMCArMjkyNywxMSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJy
YXlJbmRleE9mVmFsdWVJbnQzMk9yQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVy
biAtMTsKIH0KIAotaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZh
bHVlRG91YmxlKEV4ZWNTdGF0ZSogZXhlYywgQnV0dGVyZmx5KiBidXR0ZXJmbHksIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgaW50MzJfdCBpbmRleCkKK2ludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBpbnQzMl90IGluZGV4KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
CiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAKQEAgLTI3MTQsMTYgKzI5NDksMTcgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEV4ZWNTdGF0ZSogZXhlYywgQnV0dGVyZmwKICAg
ICByZXR1cm4gLTE7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJn
cyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVp
bnQzMl90IG1hbmRhdG9yeU1pbmltdW0pCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9h
ZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBmaXJzdEVsZW1l
bnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQs
IHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgbWFuZGF0b3J5TWluaW11bSkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnRzKTsKICAgICAKLSAgICBsb2FkVmFyYXJncyhleGVj
LCBWaXJ0dWFsUmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBs
ZW5ndGgpOworICAgIGxvYWRWYXJhcmdzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBWaXJ0dWFs
UmVnaXN0ZXIoZmlyc3RFbGVtZW50RGVzdCksIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwog
ICAgIAogICAgIGZvciAodWludDMyX3QgaSA9IGxlbmd0aDsgaSA8IG1hbmRhdG9yeU1pbmltdW07
ICsraSkKLSAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBqc1VuZGVmaW5l
ZCgpOworICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRl
ZmluZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhp
bnQzMl90IGEsIGludDMyX3QgYikKQEAgLTI3MzgsMjAgKzI5NzQsMjIgQEAgZG91YmxlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUmFuZG9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB9
CiAjZW5kaWYKIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFy
Q29kZShFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3Qgb3AxKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQzMl90IG9wMSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIHJldHVybiBKU0M6OnN0cmluZ0Zy
b21DaGFyQ29kZShleGVjLCBvcDEpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4g
SlNDOjpzdHJpbmdGcm9tQ2hhckNvZGUoZ2xvYmFsT2JqZWN0LCBvcDEpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZVVudHlwZWQo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZVVudHlwZWQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgY2hhclZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgaW50MzJfdCBjaEludCA9
IGNoYXJWYWx1ZS50b1VJbnQzMihleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
Qzo6c3RyaW5nRnJvbUNoYXJDb2RlKGV4ZWMsIGNoSW50KSk7CisgICAgaW50MzJfdCBjaEludCA9
IGNoYXJWYWx1ZS50b1VJbnQzMihnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNDOjpzdHJpbmdGcm9tQ2hhckNvZGUoZ2xvYmFsT2JqZWN0LCBjaEludCkpOwogfQog
CiBpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydEJveGVkRG91YmxlVG9JbnQ1
MihFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCkBAIC0yNzY3LDEwICszMDA1LDExIEBAIGlu
dDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0RG91YmxlVG9JbnQ1Mihkb3VibGUg
dmFsdWUpCiAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0ludDUyKHZhbHVlKTsKIH0KIAotY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSYXdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSYXdPYmplY3QoVk0qIHZtUG9pbnRlciwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBpZiAoIWJ1dHRlcmZseQog
ICAgICAgICAmJiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IGhhc0luZGV4ZWRQ
cm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkgewpAQCAtMjc4NCwyOCArMzAy
MywzMCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1Jhd09iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgICAgICAgICAgbGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgfQogCi0gICAgSlNPYmplY3QqIHJlc3VsdCA9IEpT
T2JqZWN0OjpjcmVhdGVSYXdPYmplY3QoZXhlYywgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAg
IEpTT2JqZWN0KiByZXN1bHQgPSBKU09iamVjdDo6Y3JlYXRlUmF3T2JqZWN0KHZtLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0KTsK
IH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJm
bHkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0
ZXJmbHkpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRl
cmZseShWTSogdm1Qb2ludGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0
ZXJmbHkpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIGlmICghYnV0
dGVyZmx5KSB7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAogICAgICAg
ICAgICAgdm0sIG51bGxwdHIsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFs
c2UsIEluZGV4aW5nSGVhZGVyKCksIDApOwogICAgIH0KICAgICAKLSAgICBKU09iamVjdCogcmVz
dWx0ID0gSlNPYmplY3Q6OmNyZWF0ZVJhd09iamVjdChleGVjLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZs
eSk7CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IEpTT2JqZWN0OjpjcmVhdGVSYXdPYmplY3Qodm0s
IHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseVdpdGhJbmRleGlu
Z0hlYWRlckFuZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCB1bnNpZ25lZCBsZW5ndGgsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHlXaXRoSW5kZXhpbmdIZWFk
ZXJBbmRWZWN0b3JMZW5ndGgoVk0qIHZtUG9pbnRlciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVu
c2lnbmVkIGxlbmd0aCwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogCiAgICAgSW5kZXhpbmdIZWFkZXIgaGVhZGVyOwogICAgIGhlYWRlci5zZXRW
ZWN0b3JMZW5ndGgobGVuZ3RoKTsKQEAgLTI4MTksMTQgKzMwNjAsMTUgQEAgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHlXaXRoSW5kZXhpbmdIZWFk
ZXJBbmRWZWN0b3IKICAgICB9CiAgICAgCiAgICAgLy8gUGFyYWRveGljYWxseSB0aGlzIG1heSBh
bGxvY2F0ZSBhIEpTQXJyYXkuIFRoYXQncyB0b3RhbGx5IGNvb2wuCi0gICAgSlNPYmplY3QqIHJl
c3VsdCA9IEpTT2JqZWN0OjpjcmVhdGVSYXdPYmplY3QoZXhlYywgc3RydWN0dXJlLCBidXR0ZXJm
bHkpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBKU09iamVjdDo6Y3JlYXRlUmF3T2JqZWN0KHZt
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNwcmVhZFNsb3coRXhlY1N0YXRl
KiBleGVjLCB2b2lkKiBidWZmZXIsIHVpbnQzMl90IG51bUl0ZW1zKQorSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNwcmVhZFNsb3coSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdm9pZCogYnVmZmVyLCB1aW50MzJfdCBudW1JdGVtcykKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBFbmNvZGVkSlNWYWx1ZSogdmFsdWVzID0gc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPihidWZmZXIpOwpAQCAtMjg0MCwyMiArMzA4MiwyMSBAQCBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU3ByZWFkU2xvdyhFeGVjU3RhdGUq
IGV4ZWMsIHZvaWQqIGJ1ZgogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShjaGVja2VkTGVuZ3Ro
Lmhhc092ZXJmbG93ZWQoKSkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMs
IHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBjaGVja2VkTGVuZ3RoLnVuc2FmZUdldCgpOwogICAgIGlmIChVTkxJS0VMWShsZW5ndGgg
Pj0gTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpIHsKLSAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29u
dGlndW91cyk7CiAKICAgICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGUodm0s
IHN0cnVjdHVyZSwgbGVuZ3RoKTsKICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CkBAIC0y
ODY2LDEzICszMTA3LDEzIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJh
eVdpdGhTcHJlYWRTbG93KEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogYnVmCiAgICAgICAgIGlmIChK
U0ZpeGVkQXJyYXkqIGFycmF5ID0ganNEeW5hbWljQ2FzdDxKU0ZpeGVkQXJyYXkqPih2bSwgdmFs
dWUpKSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgc3ByZWFkaW5nLgogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5zaXplKCk7IGkrKykgewotICAgICAgICAgICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGFycmF5LT5nZXQoaSkpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRl
eCwgYXJyYXktPmdldChpKSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSBub3Qgc3ByZWFkaW5nLgot
ICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgdmFsdWUpOwor
ICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCB2
YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
ICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KQEAgLTI4ODEsMzYgKzMxMjIsMzcgQEAg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNwcmVhZFNsb3coRXhl
Y1N0YXRlKiBleGVjLCB2b2lkKiBidWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0NlbGwq
IG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBsZW5n
dGgpCitKU0NlbGwqIG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGlmIChKU0ZpeGVkQXJyYXkqIHJlc3VsdCA9IEpTRml4ZWRBcnJheTo6dHJ5Q3JlYXRlKHZt
LCB2bS5maXhlZEFycmF5U3RydWN0dXJlLmdldCgpLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TcHJlYWRHZW5lcmlj
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBpdGVyYWJsZSkKK0pTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25TcHJlYWRHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Q2VsbCogaXRlcmFibGUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlm
IChpc0pTQXJyYXkoaXRlcmFibGUpKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0
PEpTQXJyYXkqPihpdGVyYWJsZSk7CiAgICAgICAgIGlmIChhcnJheS0+aXNJdGVyYXRvclByb3Rv
Y29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU0ZpeGVkQXJyYXk6OmNyZWF0ZUZyb21BcnJheShleGVjLCB2bSwgYXJy
YXkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU0ZpeGVk
QXJyYXk6OmNyZWF0ZUZyb21BcnJheShnbG9iYWxPYmplY3QsIHZtLCBhcnJheSkpOwogICAgIH0K
IAogICAgIC8vIEZJWE1FOiB3ZSBjYW4gcHJvYmFibHkgbWFrZSB0aGlzIHBhdGggZmFzdGVyIGJ5
IGhhdmluZyBvdXIgY2FsbGVyIEpTIGNvZGUgY2FsbCBkaXJlY3RseSBpbnRvCiAgICAgLy8gdGhl
IGl0ZXJhdGlvbiBwcm90b2NvbCBidWlsdGluOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY0NTIwCiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIEpTQXJyYXkqIGFycmF5OwogICAgIHsK
ICAgICAgICAgSlNGdW5jdGlvbiogaXRlcmF0aW9uRnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPml0
ZXJhdG9yUHJvdG9jb2xGdW5jdGlvbigpOwpAQCAtMjkyMSwyMzMgKzMxNjMsMzAzIEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TcHJlYWRHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBpdGVyYWJsZSkKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRz
OwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGl0ZXJhYmxlKTsKICAgICAgICAgQVNTRVJUKCFh
cmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgSlNWYWx1ZSBhcnJheVJlc3VsdCA9
IGNhbGwoZXhlYywgaXRlcmF0aW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNOdWxs
KCksIGFyZ3VtZW50cyk7CisgICAgICAgIEpTVmFsdWUgYXJyYXlSZXN1bHQgPSBjYWxsKGdsb2Jh
bE9iamVjdCwgaXRlcmF0aW9uRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNOdWxsKCks
IGFyZ3VtZW50cyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVs
bHB0cik7CiAgICAgICAgIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihhcnJheVJlc3VsdCk7CiAg
ICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTRml4ZWRBcnJheTo6
Y3JlYXRlRnJvbUFycmF5KGV4ZWMsIHZtLCBhcnJheSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU0ZpeGVkQXJyYXk6OmNyZWF0ZUZyb21BcnJheShnbG9iYWxPYmplY3Qs
IHZtLCBhcnJheSkpOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ByZWFk
RmFzdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblNwcmVhZEZhc3RBcnJheShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CiAKICAgICBBU1NFUlQoaXNKU0FycmF5KGNlbGwpKTsKICAgICBKU0FycmF5KiBhcnJheSA9IGpz
Q2FzdDxKU0FycmF5Kj4oY2VsbCk7CiAgICAgQVNTRVJUKGFycmF5LT5pc0l0ZXJhdG9yUHJvdG9j
b2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKTsKIAotICAgIHJldHVybiBKU0ZpeGVkQXJyYXk6OmNy
ZWF0ZUZyb21BcnJheShleGVjLCB2bSwgYXJyYXkpOworICAgIHJldHVybiBKU0ZpeGVkQXJyYXk6
OmNyZWF0ZUZyb21BcnJheShnbG9iYWxPYmplY3QsIHZtLCBhcnJheSk7CiB9CiAKLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nREZHKEV4ZWNTdGF0ZSog
ZXhlYykgCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxv
Z0RGRyhWTSogdm1Qb2ludGVyKSAKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBv
aW50ZXI7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAg
ICB2bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXModm0sICJMb2cgRnVsbCwg
Y2FsbGVkIGZyb20gaW5zaWRlIERGRy4iX3MpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoRXhl
Y1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwpCitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVTY29wZUZvckhvaXN0
aW5nRnVuY0RlY2xJbkV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSog
c2NvcGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOwogICAgICAgICAKLSAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Nj
b3BlOjpyZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKGV4ZWMsIHNjb3BlLCBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBpbXBsKSk7CisgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3Bl
ID0gSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChnbG9iYWxP
YmplY3QsIHNjb3BlLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBpbXBsKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsKIH0KICAgICAKLUpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZXNvbHZlU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBz
Y29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwpCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmVzb2x2ZVNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUq
IHNjb3BlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKIAotICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6
cmVzb2x2ZShleGVjLCBzY29wZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgaW1wbCkpOworICAg
IEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShnbG9iYWxPYmplY3Qs
IHNjb3BlLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBpbXBsKSk7CiAgICAgcmV0dXJuIHJlc29s
dmVkU2NvcGU7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0
RHluYW1pY1ZhcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzY29wZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIGltcGwsIHVuc2lnbmVkIGdldFB1dEluZm9CaXRzKQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXREeW5hbWljVmFyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTT2JqZWN0KiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVuc2lnbmVk
IGdldFB1dEluZm9CaXRzKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGltcGwpOwotICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUoc2NvcGUtPmdldFByb3Bl
cnR5U2xvdChleGVjLCBpZGVudCwgWyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
IC0+IEpTVmFsdWUgeworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVl
OjplbmNvZGUoc2NvcGUtPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIGlkZW50LCBbJl0g
KGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIGlm
ICghZm91bmQpIHsKICAgICAgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyhnZXRQdXRJbmZv
Qml0cyk7CiAgICAgICAgICAgICBpZiAoZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpID09IFRocm93
SWZOb3RGb3VuZCkKLSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KSk7CisgICAgICAg
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVV
bmRlZmluZWRWYXJpYWJsZUVycm9yKGdsb2JhbE9iamVjdCwgaWRlbnQpKTsKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHNjb3BlLT5p
c0dsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdlIGNh
bid0IHN0YXRpY2FsbHkgcHJvdmUgd2UgbmVlZCBhIFREWiBjaGVjaywgd2UgbXVzdCBwZXJmb3Jt
IHRoZSBjaGVjayBvbiB0aGUgc2xvdyBwYXRoLgotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIGlkZW50KTsKICAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0ganNURFpWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVERaRXJyb3IoZXhlYykpOworICAgICAgICAgICAgICAg
IHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVERaRXJyb3Io
Z2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKLSAg
ICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOworICAgICAgICByZXR1cm4g
c2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIGlkZW50KTsKICAgICB9KSkpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHN0YXRpYyB2b2lkIHB1dER5bmFtaWNWYXIoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIEpTT2JqZWN0KiBzY29wZSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBpbXBsLCB1bnNpZ25lZCBnZXRQdXRJbmZvQml0cywgYm9vbCBpc1N0cmljdE1vZGUpCitB
TFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHB1dER5bmFtaWNWYXIoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVk0mIHZtLCBKU09iamVjdCogc2NvcGUsIEVuY29kZWRKU1ZhbHVlIHZhbHVl
LCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCwgdW5zaWduZWQgZ2V0UHV0SW5mb0JpdHMsIGJvb2wg
aXNTdHJpY3RNb2RlKQogewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCBpbXBsKTsKICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8oZ2V0UHV0SW5mb0JpdHMp
OwotICAgIGJvb2wgaGFzUHJvcGVydHkgPSBzY29wZS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQp
OworICAgIGJvb2wgaGFzUHJvcGVydHkgPSBzY29wZS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0
LCBpZGVudCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB2b2lkKCkpOwog
ICAgIGlmIChoYXNQcm9wZXJ0eQogICAgICAgICAmJiBzY29wZS0+aXNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQoKQogICAgICAgICAmJiAhaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRp
YWxpemF0aW9uTW9kZSgpKSkgewogICAgICAgICAvLyBXaGVuIHdlIGNhbid0IHN0YXRpY2FsbHkg
cHJvdmUgd2UgbmVlZCBhIFREWiBjaGVjaywgd2UgbXVzdCBwZXJmb3JtIHRoZSBjaGVjayBvbiB0
aGUgc2xvdyBwYXRoLgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSwgUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAgICAgIEpTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3Qoc2NvcGUsIGV4ZWMsIGlkZW50LCBzbG90KTsK
LSAgICAgICAgaWYgKHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpID09IGpzVERaVmFsdWUoKSkg
ewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVERa
RXJyb3IoZXhlYykpOworICAgICAgICBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudDo6Z2V0T3du
UHJvcGVydHlTbG90KHNjb3BlLCBnbG9iYWxPYmplY3QsIGlkZW50LCBzbG90KTsKKyAgICAgICAg
aWYgKHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVudCkgPT0ganNURFpWYWx1ZSgpKSB7
CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZVREWkVycm9yKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSA9PSBUaHJvd0lm
Tm90Rm91bmQgJiYgIWhhc1Byb3BlcnR5KSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKTsK
KyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVV
bmRlZmluZWRWYXJpYWJsZUVycm9yKGdsb2JhbE9iamVjdCwgaWRlbnQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBpc1N0cmljdE1v
ZGUsIFB1dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24oZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwotICAgIHNjb3BlLT5tZXRob2RUYWJsZSh2bSktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIEpT
VmFsdWU6OmRlY29kZSh2YWx1ZSksIHNsb3QpOworICAgIHNjb3BlLT5tZXRob2RUYWJsZSh2bSkt
PnB1dChzY29wZSwgZ2xvYmFsT2JqZWN0LCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwg
c2xvdCk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmFyU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHNjb3BlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVuc2lnbmVkIGdldFB1dEluZm9CaXRzKQordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYXJTdHJpY3QoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHNjb3BlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVuc2lnbmVkIGdldFB1dEluZm9CaXRzKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGNvbnN0ZXhwciBib29sIGlzU3Ry
aWN0TW9kZSA9IHRydWU7Ci0gICAgcmV0dXJuIHB1dER5bmFtaWNWYXIoZXhlYywgdm0sIHNjb3Bl
LCB2YWx1ZSwgaW1wbCwgZ2V0UHV0SW5mb0JpdHMsIGlzU3RyaWN0TW9kZSk7CisgICAgcmV0dXJu
IHB1dER5bmFtaWNWYXIoZ2xvYmFsT2JqZWN0LCB2bSwgc2NvcGUsIHZhbHVlLCBpbXBsLCBnZXRQ
dXRJbmZvQml0cywgaXNTdHJpY3RNb2RlKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dER5bmFtaWNWYXJOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogc2Nv
cGUsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCwgdW5zaWdu
ZWQgZ2V0UHV0SW5mb0JpdHMpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RHluYW1p
Y1Zhck5vblN0cmljdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogc2Nv
cGUsIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCogaW1wbCwgdW5zaWdu
ZWQgZ2V0UHV0SW5mb0JpdHMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CiAgICAgY29uc3RleHByIGJvb2wgaXNTdHJpY3RNb2RlID0gZmFsc2U7Ci0gICAgcmV0dXJuIHB1
dER5bmFtaWNWYXIoZXhlYywgdm0sIHNjb3BlLCB2YWx1ZSwgaW1wbCwgZ2V0UHV0SW5mb0JpdHMs
IGlzU3RyaWN0TW9kZSk7CisgICAgcmV0dXJuIHB1dER5bmFtaWNWYXIoZ2xvYmFsT2JqZWN0LCB2
bSwgc2NvcGUsIHZhbHVlLCBpbXBsLCBnZXRQdXRJbmZvQml0cywgaXNTdHJpY3RNb2RlKTsKIH0K
IAotaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25N
YXBIYXNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGlucHV0
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgcmV0dXJuIGpz
TWFwSGFzaChleGVjLCB2bSwgSlNWYWx1ZTo6ZGVjb2RlKGlucHV0KSk7CisgICAgcmV0dXJuIGpz
TWFwSGFzaChnbG9iYWxPYmplY3QsIHZtLCBKU1ZhbHVlOjpkZWNvZGUoaW5wdXQpKTsKIH0KIAot
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogbWFwLCBFbmNvZGVkSlNWYWx1ZSBrZXksIGludDMyX3QgaGFzaCkKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwgaW50MzJf
dCBoYXNoKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgSlNNYXA6OkJ1Y2tldFR5cGUqKiBidWNrZXQg
PSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShr
ZXkpLCBoYXNoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgSlNNYXA6OkJ1Y2tldFR5cGUq
KiBidWNrZXQgPSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5maW5kQnVja2V0KGdsb2JhbE9iamVjdCwg
SlNWYWx1ZTo6ZGVjb2RlKGtleSksIGhhc2gpOwogICAgIGlmICghYnVja2V0KQogICAgICAgICBy
ZXR1cm4gdm0uc2VudGluZWxNYXBCdWNrZXQoKTsKICAgICByZXR1cm4gKmJ1Y2tldDsKIH0KIAot
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogbWFwLCBFbmNvZGVkSlNWYWx1ZSBrZXksIGludDMyX3QgaGFzaCkKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwgaW50MzJf
dCBoYXNoKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgSlNTZXQ6OkJ1Y2tldFR5cGUqKiBidWNrZXQg
PSBqc0Nhc3Q8SlNTZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShr
ZXkpLCBoYXNoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgSlNTZXQ6OkJ1Y2tldFR5cGUq
KiBidWNrZXQgPSBqc0Nhc3Q8SlNTZXQqPihtYXApLT5maW5kQnVja2V0KGdsb2JhbE9iamVjdCwg
SlNWYWx1ZTo6ZGVjb2RlKGtleSksIGhhc2gpOwogICAgIGlmICghYnVja2V0KQogICAgICAgICBy
ZXR1cm4gdm0uc2VudGluZWxTZXRCdWNrZXQoKTsKICAgICByZXR1cm4gKmJ1Y2tldDsKIH0KIAot
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNldEFkZChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogc2V0LCBFbmNvZGVkSlNWYWx1ZSBrZXksIGludDMyX3QgaGFzaCkKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25TZXRBZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBzZXQsIEVuY29kZWRKU1ZhbHVlIGtleSwgaW50MzJfdCBoYXNoKQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7Ci0gICAgYXV0byogYnVja2V0ID0ganNDYXN0PEpTU2V0Kj4oc2V0KS0+YWRkTm9ybWFs
aXplZChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgSlNWYWx1ZSgpLCBoYXNoKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byogYnVja2V0ID0ganNDYXN0PEpTU2V0Kj4oc2V0KS0+
YWRkTm9ybWFsaXplZChnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBKU1ZhbHVl
KCksIGhhc2gpOwogICAgIGlmICghYnVja2V0KQogICAgICAgICByZXR1cm4gdm0uc2VudGluZWxT
ZXRCdWNrZXQoKTsKICAgICByZXR1cm4gYnVja2V0OwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTWFwU2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRK
U1ZhbHVlIGtleSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIGludDMyX3QgaGFzaCkKK0pTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBTZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUs
IGludDMyX3QgaGFzaCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIGF1dG8qIGJ1Y2tldCA9IGpzQ2Fz
dDxKU01hcCo+KG1hcCktPmFkZE5vcm1hbGl6ZWQoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGtleSks
IEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIGhhc2gpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAg
ICBhdXRvKiBidWNrZXQgPSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5hZGROb3JtYWxpemVkKGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGtleSksIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIGhh
c2gpOwogICAgIGlmICghYnVja2V0KQogICAgICAgICByZXR1cm4gdm0uc2VudGluZWxNYXBCdWNr
ZXQoKTsKICAgICByZXR1cm4gYnVja2V0OwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uV2Vha1NldEFkZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogc2V0LCBKU0NlbGwqIGtleSwg
aW50MzJfdCBoYXNoKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldlYWtTZXRBZGQoVk0q
IHZtUG9pbnRlciwgSlNDZWxsKiBzZXQsIEpTQ2VsbCoga2V5LCBpbnQzMl90IGhhc2gpCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGpzQ2FzdDxKU1dlYWtTZXQqPihzZXQpLT5h
ZGQodm0sIGFzT2JqZWN0KGtleSksIEpTVmFsdWUoKSwgaGFzaCk7CiB9CiAKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25XZWFrTWFwU2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAs
IEpTQ2VsbCoga2V5LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgaW50MzJfdCBoYXNoKQordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbldlYWtNYXBTZXQoVk0qIHZtUG9pbnRlciwgSlNDZWxsKiBt
YXAsIEpTQ2VsbCoga2V5LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgaW50MzJfdCBoYXNoKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBqc0Nhc3Q8SlNXZWFrTWFwKj4obWFwKS0+
YWRkKHZtLCBhc09iamVjdChrZXkpLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLCBoYXNoKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQcm90b3R5cGVPZk9i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0KQorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQcm90b3R5cGVPZk9iamVjdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iamVjdCkKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0UHJvdG90eXBlKHZt
LCBleGVjKSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhpc09iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQcm90b3R5cGVPZihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UHJvdG90eXBlT2YoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkudG9UaGlzKGdsb2JhbE9iamVjdCwgU3RyaWN0
TW9kZSk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGV4
ZWMsIHRoaXNWYWx1ZSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUp
KTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+
KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmICghdGhpc09iamVjdCkgewotICAgICAgICBKU09iamVj
dCogcHJvdG90eXBlID0gdGhpc1ZhbHVlLnN5bnRoZXNpemVQcm90b3R5cGUoZXhlYyk7CisgICAg
ICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSB0aGlzVmFsdWUuc3ludGhlc2l6ZVByb3RvdHlwZShn
bG9iYWxPYmplY3QpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9u
KCkgPT0gIXByb3RvdHlwZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShwcm90b3R5cGUpOwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmdldFByb3RvdHlwZSh2
bSwgZXhlYykpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZSh0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKIH0KIAotdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93REZHKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgdmFsdWVUb1Rocm93KQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93
REZHKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlVG9U
aHJvdykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgc2NvcGUudGhyb3dFeGNlcHRpb24o
ZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlVG9UaHJvdykpOworICAgIHNjb3BlLnRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlVG9UaHJvdykpOwogfQog
Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGF0aWNFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTU3RyaW5nKiBtZXNzYWdlLCB1aW50MzJfdCBlcnJvclR5cGUpCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGF0aWNFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1N0cmluZyogbWVzc2FnZSwgdWludDMyX3QgZXJyb3JUeXBlKQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gbWVzc2FnZS0+dmFsdWUo
ZXhlYyk7Ci0gICAgc2NvcGUudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywg
c3RhdGljX2Nhc3Q8RXJyb3JUeXBlPihlcnJvclR5cGUpLCBlcnJvck1lc3NhZ2UpKTsKKyAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlID0gbWVzc2FnZS0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKKyAgICBz
Y29wZS50aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGNyZWF0ZUVycm9yKGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8RXJyb3JUeXBlPihlcnJvclR5cGUpLCBlcnJvck1lc3NhZ2UpKTsKK30K
Kwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtEaXJlY3RDYWxsKENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvLCBKU0Z1bmN0aW9uKiBjYWxsZWUpCit7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFs
aXphdGlvbktpbmQoKTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8tPmlz
RGlyZWN0KCkpOworICAgIAorICAgIC8vIFRoaXMgd291bGQgaGFwcGVuIGlmIHRoZSBleGVjdXRh
YmxlIGRpZWQgZHVyaW5nIEdDIGJ1dCB0aGUgQ29kZUJsb2NrIGRpZCBub3QgZGllLiBUaGF0IHNo
b3VsZAorICAgIC8vIG5vdCBoYXBwZW4gYmVjYXVzZSB0aGUgQ29kZUJsb2NrIHNob3VsZCBoYXZl
IGEgd2VhayByZWZlcmVuY2UgdG8gYW55IGV4ZWN1dGFibGUgaXQgdXNlcyBmb3IKKyAgICAvLyB0
aGlzIHB1cnBvc2UuCisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLT5leGVjdXRhYmxl
KCkpOworICAgIAorICAgIC8vIEhhdmluZyBhIENvZGVCbG9jayBpbmRpY2F0ZXMgdGhhdCB0aGlz
IGlzIGxpbmtlZC4gV2Ugc2hvdWxkbid0IGJlIHRha2luZyB0aGlzIHBhdGggaWYgaXQncworICAg
IC8vIGxpbmtlZC4KKyAgICBSRUxFQVNFX0FTU0VSVCghY2FsbExpbmtJbmZvLT5jb2RlQmxvY2so
KSk7CisgICAgCisgICAgLy8gV2UganVzdCBkb24ndCBzdXBwb3J0IHRoaXMgeWV0LgorICAgIFJF
TEVBU0VfQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKTsKKyAgICAKKyAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxMaW5rSW5mby0+ZXhlY3V0YWJsZSgpOworICAg
IFJFTEVBU0VfQVNTRVJUKGNhbGxlZS0+ZXhlY3V0YWJsZSgpID09IGNhbGxMaW5rSW5mby0+ZXhl
Y3V0YWJsZSgpKTsKKworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tl
ZCgpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIGlmIChleGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgZWxzZSB7CisgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNDYWxs
KGtpbmQpIHx8IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpICE9IENvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCk7CisgICAgICAgIAorICAgICAgICBFeGNlcHRp
b24qIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0
aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsIGNvZGVCbG9jayk7CisgICAg
ICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHRocm93U2NvcGUsIHRocm93U2NvcGUuZXhjZXB0
aW9uKCkgPT0gZXJyb3IpOworICAgICAgICBpZiAoVU5MSUtFTFkoZXJyb3IpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudFN0YWNrU2xvdHMgPSBjYWxsTGlu
a0luZm8tPm1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCk7CisgICAgICAgIGlmIChhcmd1
bWVudFN0YWNrU2xvdHMgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKSkKKyAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5
cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZCk7CisgICAgfQorICAgIAorICAgIGxpbmtEaXJlY3RGb3IoY2FsbEZy
YW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNvZGVQdHIpOwogfQogCiBleHRlcm4gIkMi
IHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrLCBPU1JFeGl0QmFzZSogZXhp
dCkKQEAgLTMyNzksMTIgKzM1OTEsMTMgQEAgc3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2Vt
ZW50Q29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKgogICAgICAg
ICBjb2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJ
T04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpJVF9PUEVSQVRJT04g
dHJpZ2dlclRpZXJVcE5vdyhWTSogdm1Qb2ludGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0m
IHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgCiAgICAgc2FuaXRpemVTdGFja0Zv
clZNKHZtKTsKIApAQCAtMzMyNCwxMCArMzYzNyw5IEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmln
Z2VyVGllclVwTm93KEV4ZWNTdGF0ZSogZXhlYykKICAgICB9CiB9CiAKLXN0YXRpYyBjaGFyKiB0
aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBvcmlnaW5CeXRlY29kZUluZGV4
LCBib29sIGNhbk9TUkVudGVySGVyZSkKK3N0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oVk0mIHZt
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgb3JpZ2luQnl0ZWNvZGVJbmRleCwgYm9v
bCBjYW5PU1JFbnRlckhlcmUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAogICAgIC8vIFJlc29sdmUgYW55IHBl
bmRpbmcgcGxhbiBmb3IgT1NSIEVudGVyIG9uIHRoaXMgZnVuY3Rpb24uCiAgICAgV29ya2xpc3Q6
OlN0YXRlIHdvcmtsaXN0U3RhdGU7CkBAIC0zMzc3LDkgKzM2ODksOSBAQCBzdGF0aWMgY2hhciog
dGllclVwQ29tbW9uKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb3JpZ2luQnl0ZWNvZGVJbmRl
eCwgYm9vbCBjYQogICAgICAgICAgICAgaWYgKENvZGVCbG9jayogZW50cnlCbG9jayA9IGppdENv
ZGUtPm9zckVudHJ5QmxvY2soKSkgewogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk9TUiBlbnRyeTogRnJvbSAi
LCBSYXdQb2ludGVyKGppdENvZGUpLCAiIGdvdCBlbnRyeSBibG9jayAiLCBSYXdQb2ludGVyKGVu
dHJ5QmxvY2spLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAodm9pZCogYWRkcmVzcyA9IEZU
TDo6cHJlcGFyZU9TUkVudHJ5KGV4ZWMsIGNvZGVCbG9jaywgZW50cnlCbG9jaywgb3JpZ2luQnl0
ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZvaWQqIGFk
ZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGVu
dHJ5QmxvY2ssIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KSkgewogICAgICAgICAg
ICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGVudHJ5QmxvY2ssICJvc3JFbnRyeSIsICgi
YXQgYmMjIiwgb3JpZ2luQnl0ZWNvZGVJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmV0YWdDb2RlUHRyPGNoYXIqPihhZGRyZXNzLCBKU0VudHJ5UHRyVGFnLCBiaXR3aXNlX2Nh
c3Q8UHRyVGFnPihleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRhZ0NvZGVQ
dHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGNh
bGxGcmFtZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMzUwNyw4ICszODE5LDcgQEAgc3RhdGljIGNoYXIqIHRpZXJVcENvbW1vbihFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIG9yaWdpbkJ5dGVjb2RlSW5kZXgsIGJvb2wgY2EKIAogICAgIE9wZXJh
bmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFsdWVzOwogICAgIHVuc2lnbmVkIHN0
cmVhbUluZGV4ID0gaml0Q29kZS0+Ynl0ZWNvZGVJbmRleFRvU3RyZWFtSW5kZXguZ2V0KG9yaWdp
bkJ5dGVjb2RlSW5kZXgpOwotICAgIGppdENvZGUtPnJlY29uc3RydWN0KAotICAgICAgICBleGVj
LCBjb2RlQmxvY2ssIENvZGVPcmlnaW4ob3JpZ2luQnl0ZWNvZGVJbmRleCksIHN0cmVhbUluZGV4
LCBtdXN0SGFuZGxlVmFsdWVzKTsKKyAgICBqaXRDb2RlLT5yZWNvbnN0cnVjdChjYWxsRnJhbWUs
IGNvZGVCbG9jaywgQ29kZU9yaWdpbihvcmlnaW5CeXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgs
IG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRDb2RlQmxvY2sg
PSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CiAKICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5U
KGNvZGVCbG9jaywgInRyaWdnZXJGVExPU1IiLCAoKSk7CkBAIC0zNTMzLDE5ICszODQ0LDE5IEBA
IHN0YXRpYyBjaGFyKiB0aWVyVXBDb21tb24oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBvcmln
aW5CeXRlY29kZUluZGV4LCBib29sIGNhCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkK
ICAgICAgICAgZGF0YUxvZygiSW1tZWRpYXRlIE9TUiBlbnRyeTogRnJvbSAiLCBSYXdQb2ludGVy
KGppdENvZGUpLCAiIGdvdCBlbnRyeSBibG9jayAiLCBSYXdQb2ludGVyKGppdENvZGUtPm9zckVu
dHJ5QmxvY2soKSksICJcbiIpOwogCi0gICAgdm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9T
UkVudHJ5KAotICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUtPm9zckVudHJ5QmxvY2so
KSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOworICAgIHZvaWQqIGFkZHJlc3Mg
PSBGVEw6OnByZXBhcmVPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBjb2RlQmxvY2ssIGppdENvZGUt
Pm9zckVudHJ5QmxvY2soKSwgb3JpZ2luQnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOwogICAg
IGlmICghYWRkcmVzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJldGFn
Q29kZVB0cjxjaGFyKj4oYWRkcmVzcywgSlNFbnRyeVB0clRhZywgYml0d2lzZV9jYXN0PFB0clRh
Zz4oZXhlYykpOworICAgIHJldHVybiByZXRhZ0NvZGVQdHI8Y2hhcio+KGFkZHJlc3MsIEpTRW50
cnlQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+KGNhbGxGcmFtZSkpOwogfQogCi12b2lkIEpJ
VF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCit2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0lu
TG9vcChWTSogdm1Qb2ludGVyLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICBzYW5pdGl6
ZVN0YWNrRm9yVk0odm0pOwogCkBAIC0zNTYzLDcgKzM4NzQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZQogICAgIH0KIAogICAgIGlmIChqaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHku
Y29udGFpbnMoYnl0ZWNvZGVJbmRleCkpCi0gICAgICAgIHRpZXJVcENvbW1vbihleGVjLCBieXRl
Y29kZUluZGV4LCBmYWxzZSk7CisgICAgICAgIHRpZXJVcENvbW1vbih2bSwgY2FsbEZyYW1lLCBi
eXRlY29kZUluZGV4LCBmYWxzZSk7CiAgICAgZWxzZSBpZiAoc2hvdWxkVHJpZ2dlckZUTENvbXBp
bGUoY29kZUJsb2NrLCBqaXRDb2RlKSkKICAgICAgICAgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29t
cGlsZSh2bSwgY29kZUJsb2NrLCBqaXRDb2RlKTsKIApAQCAtMzU3NCwxMiArMzg4NSwxMyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vd0luTG9vcChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZQogICAgIH0KIH0KIAotY2hhciogSklUX09QRVJBVElPTiB0
cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KQorY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coVk0qIHZtUG9pbnRlciwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2
bVBvaW50ZXI7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAg
ICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwotICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKIApA
QCAtMzU5Niw3ICszOTA4LDcgQEAgY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlO
b3coRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogICAgICAgICAgICAg
aml0Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7CiAgICAgfQogCi0gICAgcmV0dXJuIHRpZXJV
cENvbW1vbihleGVjLCBieXRlY29kZUluZGV4LCB0cnVlKTsKKyAgICByZXR1cm4gdGllclVwQ29t
bW9uKHZtLCBjYWxsRnJhbWUsIGJ5dGVjb2RlSW5kZXgsIHRydWUpOwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CmluZGV4IGFkZDBjYWUyNmViMGZhMzE1YzcyYTc1NzIzNTIyMjMzMGViMTM2ZGMuLjJhMjIyYTUy
YzVlMGM4MTViNWRmMzdlZTk4Y2EwOTZiNzI1ZWEzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCkBAIC0zNywyNjIgKzM3LDI2NCBAQCBzdHJ1Y3QgT1NSRXhp
dEJhc2U7CiAKIGV4dGVybiAiQyIgewogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5URVJOQUw7IAot
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGVV
bnR5cGVkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSAgV1RGX0lOVEVSTkFMOworSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShKU0dsb2JhbE9iamVj
dCosIGludDMyX3QpICBXVEZfSU5URVJOQUw7IAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGVVbnR5cGVkKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUpICBXVEZfSU5URVJOQUw7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIHByb3ZpZGUg
Y2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNv
bXBsZXggdG8gSklULgotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxPYmplY3RD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRUYXJnZXQpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Ub09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRUYXJnZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotSlNBcnJheSog
SklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RLZXlzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7Ci1KU0FycmF5KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVj
dEtleXNPYmplY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0Q3JlYXRlKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2Jq
ZWN0Q3JlYXRlT2JqZWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwotSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqIGNvbnN0cnVjdG9yLCB1aW50MzJfdCBpbmxpbmVDYXBhY2l0eSkgV1RGX0lOVEVSTkFMOwot
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVByb21pc2UoRXhlY1N0YXRlKiwg
SlNPYmplY3QqIGNvbnN0cnVjdG9yLCBKU0dsb2JhbE9iamVjdCopIFdURl9JTlRFUk5BTDsKLUpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbnRlcm5hbFByb21pc2UoRXhlY1N0
YXRlKiwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBKU0dsb2JhbE9iamVjdCopIFdURl9JTlRFUk5B
TDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVHZW5lcmF0b3IoRXhlY1N0
YXRlKiwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBKU0dsb2JhbE9iamVjdCopIFdURl9JTlRFUk5B
TDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBc3luY0dlbmVyYXRvcihF
eGVjU3RhdGUqLCBKU09iamVjdCogY29uc3RydWN0b3IsIEpTR2xvYmFsT2JqZWN0KikgV1RGX0lO
VEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXMoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFMOwotRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNTdHJpY3QoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU1vZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1F
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0Tm90KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVCaXRBbmQoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVS
TkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdE9yKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVCaXRYb3IoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUJpdExTaGlmdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0UlNoaWZ0KEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVCaXRVUlNoaWZ0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lO
VEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZURpdihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlUG93KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKLWRvdWJsZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkFyaXRoQWJzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEp
IFdURl9JTlRFUk5BTDsKLXVpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhDbHoz
MihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7Ci1k
b3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aEZSb3VuZChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7Ci1kb3VibGUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Bcml0aFNxcnQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxPYmpl
Y3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUYXJn
ZXQpIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub09iamVj
dChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRUYXJnZXQsIFVuaXF1ZWRT
dHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworSlNBcnJheSogSklUX09QRVJBVElPTiBvcGVyYXRp
b25PYmplY3RLZXlzKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKK0pTQXJyYXkqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0S2V5c09iamVjdChKU0ds
b2JhbE9iamVjdCosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk9iamVjdENyZWF0ZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
KSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0Q3Jl
YXRlT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CitKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpcyhKU0dsb2JhbE9iamVjdCosIEpT
T2JqZWN0KiBjb25zdHJ1Y3RvciwgdWludDMyX3QgaW5saW5lQ2FwYWNpdHkpIFdURl9JTlRFUk5B
TDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVQcm9taXNlKEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqIGNvbnN0cnVjdG9yKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlSW50ZXJuYWxQcm9taXNlKEpTR2xvYmFsT2JqZWN0
KiwgSlNPYmplY3QqIGNvbnN0cnVjdG9yKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlR2VuZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
IGNvbnN0cnVjdG9yKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlQXN5bmNHZW5lcmF0b3IoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogY29uc3Ry
dWN0b3IpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVG9UaGlzKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkgV1RG
X0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1RoaXNT
dHJpY3QoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTW9kKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25WYWx1ZUJpdE5vdChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVCaXRBbmQoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0T3IoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQml0WG9y
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYWx1ZUJpdExTaGlmdChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVCaXRSU2hpZnQoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlQml0VVJTaGlmdChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhbHVlRGl2KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVBvdyhKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsK
K2RvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQWJzKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFMOwordWludDMyX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Bcml0aENsejMyKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFMOworZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXJpdGhGUm91bmQoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
KSBXVEZfSU5URVJOQUw7Citkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFNxcnQo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7
CiAKICNkZWZpbmUgREZHX0FSSVRIX1VOQVJZKGNhcGl0YWxpemVkTmFtZSwgbG93ZXJOYW1lKSBc
Ci1kb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aCMjY2FwaXRhbGl6ZWROYW1lKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKK2RvdWJs
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoIyNjYXBpdGFsaXplZE5hbWUoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZfSU5URVJOQUw7CiAgICAgRk9S
X0VBQ0hfREZHX0FSSVRIX1VOQVJZX09QKERGR19BUklUSF9VTkFSWSkKICN1bmRlZiBERkdfQVJJ
VEhfVU5BUlkKIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFJv
dW5kKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoRmxvb3IoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXJpdGhDZWlsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoVHJ1bmMoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbENlbGwoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJO
QUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
SW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChFeGVjU3Rh
dGUqLCBKU1N0cmluZyosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgSlNDZWxsKiBzdHJpbmcpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2woRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKiBzeW1ib2wpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9OdW1i
ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxXaXRoVGhpcyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3RvdHlwZU9m
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpT
Q2VsbCopOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
QnlJbnQoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCwgaW50MzJfdCk7Ci1KU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlKTsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRQcm9wZXJ0
eUVudW1lcmF0b3JDZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci1KU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleChFeGVjU3RhdGUq
LCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6
ZV90KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5
QXJyYXkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IGludDMyX3QsIEJ1dHRlcmZseSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZEhpbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
aW50MzJfdCwgaW50MzJfdCwgQnV0dGVyZmx5KikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBpbnQzMl90LCBjaGFyKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMy
X3QsIGNoYXIqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
SW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QsIGNoYXIq
KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJy
YXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnJh
eVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QsIGNoYXIqKSBXVEZfSU5U
RVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25l
QXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRF
Uk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlX
aXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBjaGFyKikgV1RGX0lOVEVS
TkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdp
dGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdp
dGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QsIGNoYXIqKSBXVEZfSU5URVJO
QUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aE9uZUFy
Z3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aFNpemUo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCwgY2hhciopIFdURl9JTlRFUk5BTDsKLWNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoT25lQXJndW1lbnQo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLWNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemUoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCwgY2hhciopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIGludDMyX3QsIGNoYXIqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUq
LCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqIHN0
cmluZywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaW5nTm9uU3RyaWN0KEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEpTQ2VsbCogc3RyaW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
IFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxT
eW1ib2xTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiBzeW1ib2wsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBK
U0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7
Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0
cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5B
TDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5
Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZf
SU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxs
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nU3RyaWN0KEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCogc3RyaW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdENlbGxTdHJpbmdOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiBzdHJp
bmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0cmljdChFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBKU0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3RDZWxsU3ltYm9sTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCogc3ltYm9s
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCos
IGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFM
Owotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBkb3VibGUg
dmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3Vi
bGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
aW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RG
X0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsRGly
ZWN0QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90IGluZGV4LCBkb3VibGUgdmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkV2l0aFRoaXMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFdpdGhUaGlzU3RyaWN0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRoaXMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFdpdGhUaGlzU3RyaWN0KEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRGVmaW5lRGF0YVByb3BlcnR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNTdHJpbmcqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwot
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eVN0cmluZ0lkZW50
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgVW5pcXVlZFN0cmluZ0ltcGwqLCBFbmNvZGVkSlNWYWx1
ZSwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRl
ZmluZURhdGFQcm9wZXJ0eVN5bWJvbChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN5bWJvbCosIEVu
Y29kZWRKU1ZhbHVlLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShFeGVjU3RhdGUqLCBKU09iamVjdCosIEVu
Y29kZWRKU1ZhbHVlLCBKU09iamVjdCosIEpTT2JqZWN0KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFM
Owotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJp
bmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1N0cmluZyosIEpTT2JqZWN0KiwgSlNPYmplY3Qq
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVm
aW5lQWNjZXNzb3JQcm9wZXJ0eVN0cmluZ0lkZW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgVW5p
cXVlZFN0cmluZ0ltcGwqLCBKU09iamVjdCosIEpTT2JqZWN0KiwgaW50MzJfdCkgV1RGX0lOVEVS
TkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlT
eW1ib2woRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTeW1ib2wqLCBKU09iamVjdCosIEpTT2JqZWN0
KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVB1c2hNdWx0aXBsZShFeGVjU3RhdGUqLCBKU0FycmF5Kiwgdm9pZCogYnVm
ZmVyLCBpbnQzMl90IGVsZW1lbnRDb3VudCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUoRXhlY1N0YXRlKiwgZG91Ymxl
IHZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVB1c2hEb3VibGVNdWx0aXBsZShFeGVjU3RhdGUqLCBKU0FycmF5
Kiwgdm9pZCogYnVmZmVyLCBpbnQzMl90IGVsZW1lbnRDb3VudCkgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBK
U0FycmF5KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhl
Y1N0cmluZyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFJlZ0V4cE9iamVjdCosIEpTU3Ry
aW5nKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUmVnRXhwRXhlY0dlbmVyaWMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwKiwgSlNTdHJpbmcqKSBXVEZfSU5U
RVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cE1hdGNo
RmFzdEdsb2JhbFN0cmluZyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFJlZ0V4cCosIEpT
U3RyaW5nKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25SZWdFeHBNYXRjaEZhc3RTdHJpbmcoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBS
ZWdFeHBPYmplY3QqLCBKU1N0cmluZyopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhSb3VuZChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFyaXRoRmxvb3IoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aENlaWwoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFRydW5jKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbE9iamVj
dEludChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludChK
U0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZyhKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCosIEpTQ2VsbCogc3RyaW5nKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sKEpT
R2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNDZWxsKiBzeW1ib2wpIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9QcmltaXRpdmUoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Ub051bWJlcihKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5VmFsV2l0aFRoaXMoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFByb3RvdHlwZU9mKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0UHJvdG90eXBlT2ZPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCop
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFz
R2VuZXJpY1Byb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCop
Oworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQo
SlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90LCBpbnQzMl90KTsKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UHJv
cGVydHlFbnVtZXJhdG9yQ2VsbChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopOworSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvSW5kZXhTdHJpbmcoSlNHbG9iYWxPYmplY3QqLCBpbnQz
Ml90KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHBXaXRoTGFzdElu
ZGV4KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoVk0qLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJO
QUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUoSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBCdXR0ZXJmbHkqKSBXVEZfSU5URVJOQUw7
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRIaW50KEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgaW50MzJfdCwgaW50MzJfdCwgQnV0dGVyZmx5Kikg
V1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlX
aXRoU2l6ZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGludDMyX3QsIGNoYXIqKSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhP
bmVBcmd1bWVudChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlX
aXRoU2l6ZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGludDMyX3QsIGNoYXIqKSBXVEZf
SU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRo
T25lQXJndW1lbnQoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5
V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBjaGFyKikgV1RG
X0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0
aE9uZUFyZ3VtZW50KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnJh
eVdpdGhTaXplKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgaW50MzJfdCwgY2hhciopIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnJheVdp
dGhPbmVBcmd1bWVudChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVl
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xh
bXBlZEFycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBj
aGFyKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50
OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBp
bnQzMl90LCBjaGFyKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBpbnQzMl90LCBjaGFyKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudChKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgaW50MzJfdCwgY2hhciopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBpbnQzMl90LCBjaGFyKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQoSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkg
V1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5v
blN0cmljdChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQ
cm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaW5nU3RyaWN0KEpTR2xvYmFs
T2JqZWN0KiwgSlNDZWxsKiwgSlNDZWxsKiBzdHJpbmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
Q2VsbFN0cmluZ05vblN0cmljdChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpTQ2VsbCogc3Ry
aW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xTdHJpY3QoSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqLCBKU0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxs
U3ltYm9sTm9uU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNDZWxsKiBzeW1ib2ws
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoSlNHbG9iYWxP
YmplY3QqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIGlu
dDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3Vu
ZHNOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsRGlyZWN0Q2VsbE5vblN0cmljdChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBX
VEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RD
ZWxsU3RyaW5nU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNDZWxsKiBzdHJpbmcs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN0cmluZ05vblN0cmljdChKU0dsb2Jh
bE9iamVjdCosIEpTQ2VsbCosIEpTQ2VsbCogc3RyaW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bERpcmVjdENlbGxTeW1ib2xTdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBKU0NlbGwq
IHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3ltYm9sTm9uU3RyaWN0
KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNDZWxsKiBzeW1ib2wsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5
b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIGludDMy
X3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNT
dHJpY3QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2
YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJs
ZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNT
dHJpY3QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2
YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJs
ZUJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCosIGludDMyX3QgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRXaXRoVGhpcyhKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRT
dHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRXaXRoVGhpc1N0cmljdChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVS
TkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRoaXMoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsV2l0aFRoaXNTdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eShK
U0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVm
aW5lRGF0YVByb3BlcnR5U3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBKU1N0cmlu
ZyosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nSWRlbnQoSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMy
X3QpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWZpbmVEYXRh
UHJvcGVydHlTeW1ib2woSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFN5bWJvbCosIEVuY29k
ZWRKU1ZhbHVlLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUsIEpTT2JqZWN0KiwgSlNPYmplY3QqLCBpbnQzMl90KSBXVEZfSU5URVJO
QUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eVN0
cmluZyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgSlNTdHJpbmcqLCBKU09iamVjdCosIEpT
T2JqZWN0KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJpbmdJZGVudChKU0dsb2JhbE9iamVjdCosIEpT
T2JqZWN0KiwgVW5pcXVlZFN0cmluZ0ltcGwqLCBKU09iamVjdCosIEpTT2JqZWN0KiwgaW50MzJf
dCkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlZmluZUFjY2Vz
c29yUHJvcGVydHlTeW1ib2woSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFN5bWJvbCosIEpT
T2JqZWN0KiwgSlNPYmplY3QqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoTXVsdGlwbGUoSlNHbG9iYWxP
YmplY3QqLCBKU0FycmF5Kiwgdm9pZCogYnVmZmVyLCBpbnQzMl90IGVsZW1lbnRDb3VudCkgV1RG
X0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1
c2hEb3VibGUoSlNHbG9iYWxPYmplY3QqLCBkb3VibGUgdmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaERv
dWJsZU11bHRpcGxlKEpTR2xvYmFsT2JqZWN0KiwgSlNBcnJheSosIHZvaWQqIGJ1ZmZlciwgaW50
MzJfdCBlbGVtZW50Q291bnQpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoSlNHbG9iYWxPYmplY3QqLCBKU0FycmF5KikgV1RGX0lO
VEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFu
ZFJlY292ZXJMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjU3RyaW5nKEpT
R2xvYmFsT2JqZWN0KiwgUmVnRXhwT2JqZWN0KiwgSlNTdHJpbmcqKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoSlNHbG9iYWxP
YmplY3QqLCBSZWdFeHBPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjR2VuZXJpYyhKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjTm9uR2xv
YmFsT3JTdGlja3koSlNHbG9iYWxPYmplY3QqLCBSZWdFeHAqLCBKU1N0cmluZyopIFdURl9JTlRF
Uk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwTWF0Y2hG
YXN0R2xvYmFsU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwKiwgSlNTdHJpbmcqKSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cE1h
dGNoRmFzdFN0cmluZyhKU0dsb2JhbE9iamVjdCosIFJlZ0V4cE9iamVjdCosIEpTU3RyaW5nKikg
V1RGX0lOVEVSTkFMOwogLy8gVGhlc2UgY29tcGFyaXNvbnMgcmV0dXJuIGEgYm9vbGVhbiB3aXRo
aW4gYSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwg
dGhlIHJlZ2lzdGVyLgotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdFN0
cmluZyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFJlZ0V4cE9iamVjdCosIEpTU3RyaW5n
KikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVz
dChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFJlZ0V4cE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBU
ZXN0R2VuZXJpYyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBv
cDIpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdWJCaWdJ
bnQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7Ci1K
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTXVsQmlnSW50KEV4ZWNTdGF0ZSosIEpTQ2Vs
bCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk1vZEJpZ0ludChFeGVjU3RhdGUqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIp
IFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXZCaWdJbnQo
RXhlY1N0YXRlKiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7Ci1KU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG93QmlnSW50KEV4ZWNTdGF0ZSosIEpTQ2VsbCog
b3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkJpdEFuZEJpZ0ludChFeGVjU3RhdGUqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIp
IFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXROb3RCaWdJ
bnQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvcDEpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25CaXRPckJpZ0ludChFeGVjU3RhdGUqLCBKU0NlbGwqIG9wMSwgSlND
ZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25C
aXRMU2hpZnRCaWdJbnQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZf
SU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWRkQmlnSW50KEV4ZWNT
dGF0ZSosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFJTaGlmdEJpZ0ludChFeGVjU3RhdGUqLCBKU0NlbGwq
IG9wMSwgSlNDZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25CaXRYb3JCaWdJbnQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3Ay
KSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TYW1lVmFsdWUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdChF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBKU1Njb3BlKiwgU3ltYm9sVGFibGUqLCBFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1l
bnRzKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgbWlu
Q2FwYWNpdHkpOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFy
Z3VtZW50c0R1cmluZ0V4aXQoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKiwgSlNGdW5jdGlv
biosIHVpbnQzMl90IGFyZ3VtZW50Q291bnQpOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3Rl
ciogYXJndW1lbnRTdGFydCwgdWludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIEpT
TGV4aWNhbEVudmlyb25tZW50Kik7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUq
LCBKU0Z1bmN0aW9uKiwgdWludDMyX3QgYXJndW1lbnRDb3VudCk7Ci1KU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1aW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24q
IGNhbGxlZSk7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlUmVzdChFeGVj
U3RhdGUqLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAsIHVuc2lnbmVkIGFycmF5U2l6ZSk7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgSlNDZWxsKikgV1RG
X0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNldEFkZChFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcFNldChFeGVjU3RhdGUqLCBKU0NlbGwqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLXZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25XZWFrU2V0QWRkKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEpTQ2VsbCosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25XZWFrTWFwU2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIEVuY29kZWRKU1Zh
bHVlLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25SZWdFeHBUZXN0U3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwT2JqZWN0KiwgSlNTdHJp
bmcqKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBU
ZXN0KEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpIFdURl9J
TlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3RHZW5lcmlj
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxs
KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ViQmlnSW50KEpTR2xvYmFsT2JqZWN0
KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTXVsQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEs
IEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTW9kQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBX
VEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGl2QmlnSW50KEpT
R2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7CitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG93QmlnSW50KEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQml0QW5kQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEs
IEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQml0Tm90QmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEpIFdURl9JTlRFUk5B
TDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRPckJpZ0ludChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdExTaGlmdEJpZ0ludChKU0dsb2JhbE9iamVjdCosIEpT
Q2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFkZEJpZ0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0Nl
bGwqIG9wMikgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJp
dFJTaGlmdEJpZ0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikg
V1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFhvckJpZ0lu
dChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFM
Oworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2FtZVZhbHVlKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdChWTSosIFN0cnVj
dHVyZSosIEpTU2NvcGUqLCBTeW1ib2xUYWJsZSosIEVuY29kZWRKU1ZhbHVlKTsKK0pTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMoVk0qLCBTdHJ1Y3R1
cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IG1pbkNhcGFjaXR5KTsKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpbmdFeGl0KFZNKiwg
SW5saW5lQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiosIHVpbnQzMl90IGFyZ3VtZW50Q291bnQpOwor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1aW50MzJf
dCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdF
eGl0KFZNKiwgSW5saW5lQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiosIHVpbnQzMl90IGFyZ3VtZW50
Q291bnQpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3Vt
ZW50cyhKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0
LCB1aW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSk7CitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlUmVzdChKU0dsb2JhbE9iamVjdCosIFJlZ2lzdGVyKiBhcmd1
bWVudFN0YXJ0LCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgdW5zaWduZWQgYXJy
YXlTaXplKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihW
TSosIFN0cnVjdHVyZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25TZXRBZGQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBFbmNvZGVkSlNW
YWx1ZSwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk1hcFNldChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbldlYWtTZXRBZGQoVk0qLCBKU0NlbGwqLCBKU0NlbGwqLCBpbnQzMl90KSBXVEZfSU5U
RVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2Vha01hcFNldChWTSosIEpTQ2Vs
bCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiBkb3Vi
bGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QsIGludDMyX3QpIFdU
Rl9JTlRFUk5BTDsKLXNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzT2JqZWN0
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25UeXBlT2ZPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1pbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlw
ZU9mT2JqZWN0QXNUeXBlb2ZUeXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVNp
bXBsZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVNpbXBsZVByb3Bl
cnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwotY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwot
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwot
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVJbnQzMihFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlRG91YmxlKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1
b3VzKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1TdHJpbmdJbXBsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci1K
U1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhl
Y1N0YXRlKiwgaW50MzJfdCk7Ci0KLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJp
bmdTdWJzdHIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCwgaW50MzJfdCk7Ci1KU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nU2xpY2UoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
aW50MzJfdCwgaW50MzJfdCk7Ci1KU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJp
bmdWYWx1ZU9mKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKLUpTU3RyaW5nKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRvTG93ZXJDYXNlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgdWludDMy
X3QpOwotCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkludDMyVG9TdHJpbmcoRXhlY1N0
YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklu
dDUyVG9TdHJpbmcoRXhlY1N0YXRlKiwgaW50NjRfdCwgaW50MzJfdCk7Ci1jaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkRvdWJsZVRvU3RyaW5nKEV4ZWNTdGF0ZSosIGRvdWJsZSwgaW50MzJf
dCk7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkludDMyVG9TdHJpbmdXaXRoVmFsaWRS
YWRpeChFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLWNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSW50NTJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4KEV4ZWNTdGF0ZSosIGludDY0X3Qs
IGludDMyX3QpOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Eb3VibGVUb1N0cmluZ1dp
dGhWYWxpZFJhZGl4KEV4ZWNTdGF0ZSosIGRvdWJsZSwgaW50MzJfdCk7Ci0KLWludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGlu
cHV0KTsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwotSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0NlbGwqLCBF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Ci0KLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUGFyc2VJbnROb1JhZGl4R2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSk7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50U3RyaW5n
Tm9SYWRpeChFeGVjU3RhdGUqLCBKU1N0cmluZyopOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QYXJzZUludFN0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMy
X3QpOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25QYXJzZUludEdlbmVy
aWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwotCi1TeW1ib2wqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3U3ltYm9sKEV4ZWNTdGF0ZSopOwotU3ltYm9sKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1N5bWJvbFdpdGhEZXNjcmlwdGlvbihFeGVjU3RhdGUqLCBKU1N0
cmluZyopOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChF
eGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwotSlNTdHJpbmcqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1KU1N0cmlu
ZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSk7Ci1KU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3Ry
dWN0b3JPbkNlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1KU1N0cmluZyogSklUX09QRVJBVElP
TiBvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUpOwotSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyKEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKLUpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcq
KTsKLUpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdDIoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLUpTU3RyaW5nKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblN0ckNhdDMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRT
d2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVf
dCB0YWJsZUluZGV4KTsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5n
KEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwotaW50MzJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdldEJyYW5jaE9mZnNldChFeGVjU3Rh
dGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqKTsKK3NpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk9iamVjdElzT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lO
VEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbihK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25UeXBlT2ZPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNU
eXBlb2ZUeXBlKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVNpbXBsZVByb3BlcnR5U3RvcmFnZVdpdGhJ
bml0aWFsQ2FwYWNpdHkoVk0qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFsbG9jYXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlKFZNKiwgc2l6ZV90IG5ld1NpemUp
IFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVDb21w
bGV4UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShWTSosIEpTT2JqZWN0KikgV1RG
X0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQ
cm9wZXJ0eVN0b3JhZ2UoVk0qLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJO
QUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUludDMyKFZNKiwgSlNDZWxs
Kik7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZURvdWJsZShWTSosIEpTQ2Vs
bCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKFZNKiwg
SlNDZWxsKik7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFn
ZShWTSosIEpTQ2VsbCopOworU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZXNv
bHZlUm9wZShKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CitKU1N0cmluZyogSklUX09QRVJB
VElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVk0qLCBpbnQzMl90KTsKKworSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1N1YnN0cihKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCosIGludDMyX3QsIGludDMyX3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN0cmluZ1NsaWNlKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJfdCwgaW50MzJf
dCk7CitKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdWYWx1ZU9mKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpOworSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVG9Mb3dlckNhc2UoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIHVpbnQzMl90KTsK
KworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQzMlRvU3RyaW5nKEpTR2xvYmFsT2Jq
ZWN0KiwgaW50MzJfdCwgaW50MzJfdCk7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklu
dDUyVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqLCBpbnQ2NF90LCBpbnQzMl90KTsKK2NoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqLCBkb3Vi
bGUsIGludDMyX3QpOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQzMlRvU3RyaW5n
V2l0aFZhbGlkUmFkaXgoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90LCBpbnQzMl90KTsKK2NoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50NTJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4KEpTR2xv
YmFsT2JqZWN0KiwgaW50NjRfdCwgaW50MzJfdCk7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkRvdWJsZVRvU3RyaW5nV2l0aFZhbGlkUmFkaXgoSlNHbG9iYWxPYmplY3QqLCBkb3VibGUs
IGludDMyX3QpOworCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFwSGFzaChKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGlucHV0KTsKK0pTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNT
ZXRGaW5kQnVja2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGlu
dDMyX3QpOworCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50
Tm9SYWRpeEdlbmVyaWMoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSk7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBhcnNlSW50U3RyaW5nTm9SYWRpeChKU0ds
b2JhbE9iamVjdCosIEpTU3RyaW5nKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblBhcnNlSW50U3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqLCBpbnQzMl90
KTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUGFyc2VJbnRHZW5lcmlj
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOworCitTeW1ib2wqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3ltYm9sKFZNKik7CitTeW1ib2wqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3U3ltYm9sV2l0aERlc2NyaXB0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNT
dHJpbmcqKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3Qo
Vk0qLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOworSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVG9TdHJpbmdPbkNlbGwoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKTsKK0pTU3RyaW5n
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUpOworSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cmluZ0Nv
bnN0cnVjdG9yT25DZWxsKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKik7CitKU1N0cmluZyogSklU
X09QRVJBVElPTiBvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSk7CitKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtl
Um9wZTIoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7CitKU1N0cmluZyog
SklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmlu
ZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKK0pTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN0ckNhdDIoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpOworSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91Ymxl
KFZNKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEpTR2xvYmFsT2JqZWN0Kiwgc2l6ZV90IHRhYmxl
SW5kZXgsIEpTU3RyaW5nKik7CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNo
U3RyaW5nQW5kR2V0QnJhbmNoT2Zmc2V0KEpTR2xvYmFsT2JqZWN0Kiwgc2l6ZV90IHRhYmxlSW5k
ZXgsIEpTU3RyaW5nKik7CiB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyaW5nSW1wbExlc3MoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKTsKIHVpbnRwdHJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdJbXBsTGVzc0VxKFN0cmluZ0ltcGwqLCBT
dHJpbmdJbXBsKik7CiB1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3Ry
aW5nSW1wbEdyZWF0ZXIoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKTsKIHVpbnRwdHJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdJbXBsR3JlYXRlckVxKFN0cmluZ0ltcGwq
LCBTdHJpbmdJbXBsKik7Ci11aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJl
U3RyaW5nTGVzcyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci11aW50cHRyX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nTGVzc0VxKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqKTsKLXVpbnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdHcmVhdGVyKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKLXVp
bnRwdHJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdHcmVhdGVyRXEoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFdhdGNocG9pbnRTZXQqKTsKLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKLWludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJh
cmdzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RW
YXJBcmdPZmZzZXQpOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4
ZWNTdGF0ZSosIGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgYXJndW1l
bnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgbWFuZGF0b3J5
TWluaW11bSk7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dERkcoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUpOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3Rh
dGljRXJyb3IoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCB1aW50MzJfdCk7Ci0KLWludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25IYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBKU09iamVjdCos
IEVuY29kZWRKU1ZhbHVlKTsKLQotaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5
SW5kZXhPZlN0cmluZyhFeGVjU3RhdGUqLCBCdXR0ZXJmbHkqLCBKU1N0cmluZyosIGludDMyX3Qp
OwotaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlKEV4ZWNT
dGF0ZSosIEJ1dHRlcmZseSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKLWludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShFeGVjU3RhdGUqLCBC
dXR0ZXJmbHkqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Ci1pbnQzMl90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXJyYXlJbmRleE9mVmFsdWVJbnQzMk9yQ29udGlndW91cyhFeGVjU3RhdGUq
LCBCdXR0ZXJmbHkqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Ci0KLUpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TcHJlYWRGYXN0QXJyYXkoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci1K
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ByZWFkR2VuZXJpYyhFeGVjU3RhdGUqLCBK
U0NlbGwqKTsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTcHJl
YWRTbG93KEV4ZWNTdGF0ZSosIHZvaWQqLCB1aW50MzJfdCk7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ3JlYXRlRml4ZWRBcnJheShFeGVjU3RhdGUqLCB1bnNpZ25lZCBsZW5ndGgp
OwotCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVNjb3BlKEV4ZWNTdGF0
ZSosIEpTU2NvcGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwotRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKEV4
ZWNTdGF0ZSosIEpTU2NvcGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXREeW5hbWljVmFyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiBzY29wZSwgVW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCk7Ci12b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0RHluYW1pY1ZhclN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCogc2Nv
cGUsIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkKTsKLXZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmFyTm9uU3RyaWN0KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiBzY29wZSwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5z
aWduZWQpOwordWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0xl
c3MoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Cit1aW50cHRyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nTGVzc0VxKEpTR2xvYmFsT2JqZWN0Kiwg
SlNTdHJpbmcqLCBKU1N0cmluZyopOwordWludHB0cl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0dyZWF0ZXIoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIEpTU3RyaW5n
Kik7Cit1aW50cHRyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nR3JlYXRl
ckVxKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKFZNKiwgV2F0Y2hwb2ludFNldCopOwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoSlNHbG9i
YWxPYmplY3QqKSBXVEZfSU5URVJOQUw7CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U2l6ZU9mVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywg
dWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBF
bmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3Ro
LCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UaHJvd0RGRyhKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlKTsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YXRpY0Vycm9yKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJp
bmcqLCB1aW50MzJfdCk7CisKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNPd25Q
cm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpOworCitp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlJbmRleE9mU3RyaW5nKEpTR2xvYmFs
T2JqZWN0KiwgQnV0dGVyZmx5KiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKK2ludDMyX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZShKU0dsb2JhbE9iamVjdCosIEJ1dHRl
cmZseSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK2ludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZShKU0dsb2JhbE9iamVjdCosIEJ1dHRlcmZs
eSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheUluZGV4T2ZWYWx1ZUludDMyT3JDb250aWd1b3VzKEpTR2xvYmFsT2JqZWN0Kiwg
QnV0dGVyZmx5KiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOworCitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uU3ByZWFkRmFzdEFycmF5KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKik7
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ByZWFkR2VuZXJpYyhKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCopOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNwcmVhZFNsb3coSlNHbG9iYWxPYmplY3QqLCB2b2lkKiwgdWludDMyX3QpOworSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXkoSlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBsZW5ndGgpOworCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVz
b2x2ZVNjb3BlKEpTR2xvYmFsT2JqZWN0KiwgSlNTY29wZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVTY29wZUZvckhv
aXN0aW5nRnVuY0RlY2xJbkV2YWwoSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKiwgVW5pcXVlZFN0
cmluZ0ltcGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RHlu
YW1pY1ZhcihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBzY29wZSwgVW5pcXVlZFN0cmluZ0lt
cGwqLCB1bnNpZ25lZCk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RHluYW1pY1Zh
clN0cmljdChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBzY29wZSwgRW5jb2RlZEpTVmFsdWUs
IFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dER5bmFtaWNWYXJOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogc2Nv
cGUsIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkKTsKIAogaW50
NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRvSW50NTIoRW5j
b2RlZEpTVmFsdWUpOwogaW50NjRfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnREb3Vi
bGVUb0ludDUyKGRvdWJsZSk7CiAKLWludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25OdW1i
ZXJJc0ludGVnZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOworaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk51bWJlcklzSW50ZWdlcihKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlKTsKIAotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmYXVsdEhhc0luc3Rh
bmNlKEV4ZWNTdGF0ZSosIEpTQ2VsbCogdmFsdWUsIEpTQ2VsbCogcHJvdG8pOworc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRGVmYXVsdEhhc0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiB2YWx1ZSwgSlNDZWxsKiBwcm90byk7CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3UmF3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QsIEJ1dHRl
cmZseSopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdP
YmplY3RXaXRoQnV0dGVyZmx5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopIFdU
Rl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3RXaXRo
QnV0dGVyZmx5V2l0aEluZGV4aW5nSGVhZGVyQW5kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCwgQnV0dGVyZmx5KikgV1RGX0lOVEVSTkFMOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSYXdPYmplY3QoVk0qLCBTdHJ1Y3R1cmUqLCBp
bnQzMl90LCBCdXR0ZXJmbHkqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShWTSosIFN0cnVjdHVyZSosIEJ1dHRlcmZs
eSopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmpl
Y3RXaXRoQnV0dGVyZmx5V2l0aEluZGV4aW5nSGVhZGVyQW5kVmVjdG9yTGVuZ3RoKFZNKiwgU3Ry
dWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoLCBCdXR0ZXJmbHkqKSBXVEZfSU5URVJOQUw7CiAKLXZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nREZHKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGly
ZWN0Q2FsbChDYWxsTGlua0luZm8qLCBKU0Z1bmN0aW9uKikgV1RGX0lOVEVSTkFMOworCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZ0RGRyhWTSopIFdU
Rl9JTlRFUk5BTDsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5v
dyhDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBDb2RlQmxvY2sqIG9wdGlpbXplZENvZGVC
bG9jaywgT1NSRXhpdEJhc2UqKSBXVEZfSU5URVJOQUw7CiAKQEAgLTMwMSw5ICszMDMsOSBAQCBk
b3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SYW5kb20oSlNHbG9iYWxPYmplY3QqKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCi12b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRp
ZXJVcE5vdyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gdHJp
Z2dlclRpZXJVcE5vd0luTG9vcChFeGVjU3RhdGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSBX
VEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhFeGVj
U3RhdGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9P
UEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhWTSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiB0cmlnZ2VyVGllclVwTm93SW5Mb29wKFZNKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3co
Vk0qLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCiAKIH0gLy8gZXh0ZXJuICJDIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdl
bmVyYXRvci5oCmluZGV4IDBmYTM3ZDZhYTA1NWY1NTM2ZWViNjM0Y2E3ZGE5ZGFiNmQ5N2ZmOTEu
LmJkZTY2NzYwYWM0ZWQ4YzY5ZWE5ODMwYzBjZTZlYWYxM2MyNGM0OTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhbmVTdHJpbmdHZXRC
eVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgKQEAgLTM3LDEwICszNywxMCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVy
YXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1
bXA+IHsKIHB1YmxpYzoKICAgICBTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcigK
LSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGZyb20sIFNwZWN1bGF0aXZlSklU
KiBqaXQsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnLCBH
UFJSZWcgcHJvcGVydHlSZWcpCisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBm
cm9tLCBTcGVjdWxhdGl2ZUpJVCogaml0LCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIgZ2xvYmFsT2JqZWN0LCBHUFJSZWcgYmFzZVJlZywgR1BSUmVn
IHByb3BlcnR5UmVnKQogICAgICAgICA6IEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyb0Fz
c2VtYmxlcjo6SnVtcD4oZnJvbSwgaml0KQogICAgICAgICAsIG1fcmVzdWx0UmVncyhyZXN1bHRS
ZWdzKQorICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKICAgICAgICAgLCBt
X2Jhc2VSZWcoYmFzZVJlZykKICAgICAgICAgLCBtX3Byb3BlcnR5UmVnKHByb3BlcnR5UmVnKQog
ICAgIHsKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhH
ZW5lcmF0b3IgOiBwdWJsaWMgSnVtcGluZ1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3IKIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wbGFucy5zaXplKCk7ICsraSkKICAgICAgICAg
ICAgIGppdC0+c2lsZW50U3BpbGwobV9wbGFuc1tpXSk7Ci0gICAgICAgIGppdC0+Y2FsbE9wZXJh
dGlvbihvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludCwgZXh0cmFjdFJlc3VsdChtX3Jlc3VsdFJl
Z3MpLCBtX2Jhc2VSZWcsIG1fcHJvcGVydHlSZWcpOworICAgICAgICBqaXQtPmNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQsIGV4dHJhY3RSZXN1bHQobV9yZXN1bHRSZWdz
KSwgbV9nbG9iYWxPYmplY3QsIG1fYmFzZVJlZywgbV9wcm9wZXJ0eVJlZyk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgaml0LT5z
aWxlbnRGaWxsKG1fcGxhbnNbaV0pOwogICAgICAgICBqaXQtPm1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CkBAIC04MCw2ICs4MCw3IEBAIGNsYXNzIFNhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2Vu
ZXJhdG9yIDogcHVibGljIEp1bXBpbmdTbG93UGF0aEdlbmVyYXRvcjxNYWNyCiAgICAgCiBwcml2
YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0UmVnczsKKyAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIgbV9nbG9iYWxPYmplY3Q7CiAgICAgR1BSUmVnIG1fYmFzZVJlZzsKICAgICBH
UFJSZWcgbV9wcm9wZXJ0eVJlZzsKICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbiwg
Mj4gbV9wbGFuczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKaW5kZXggOTVhN2NkNjI0OGVmNWUzMDM2M2JjNTBiNGVmYjVlMTViNGQzOWIyMi4u
MzUzZTA1NjQ3NjRhYzQ1NzBlZDNiMjYzOTc3ZjcxMDBmMGIyMDc1YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTEwOTAsNyArMTA5
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbkJ5SWQoTm9kZSogbm9kZSkKICAg
ICBhdXRvIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAogICAgICAgICBnZW4uc2xvd1BhdGhKdW1w
KCksIHRoaXMsIG9wZXJhdGlvbkluQnlJZE9wdGltaXplLAogICAgICAgICBOZWVkVG9TcGlsbCwg
RXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAgIHJlc3VsdFJl
Z3MsIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRl
bnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICAgICAgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGdlbi5zdHViSW5mbygpLCBDQ2FsbEhlbHBl
cnM6OkNlbGxWYWx1ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCkpKTsKIAogICAgIG1faml0LmFkZEluQnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CkBAIC0xMTEyLDcgKzEx
MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5CeVZhbChOb2RlKiBub2RlKQog
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCBy
ZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsLCByZXN1bHRSZWdzLCBiYXNlR1BS
LCByZWdzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWwsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCByZWdzKTsKICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQpAQCAtMTEy
OCw3ICsxMTI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURlbGV0ZUJ5SWQoTm9k
ZSogbm9kZSkKICAgICB2YWx1ZS51c2UoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkLCByZXN1bHRHUFIsIHZhbHVlUmVncywg
aWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIHZhbHVlUmVncywgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkp
KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgdW5ibGVzc2VkQm9vbGVhblJl
c3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0x
MTQ4LDcgKzExNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVsZXRlQnlWYWwo
Tm9kZSogbm9kZSkKICAgICBrZXkudXNlKCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWwsIHJlc3VsdEdQUiwgYmFzZVJlZ3Ms
IGtleVJlZ3MpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWwsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBrZXlSZWdzKTsKICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0xMTY5LDcg
KzExNjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHVzaFdpdGhTY29wZShOb2Rl
KiBub2RlKQogICAgICAgICBzcGVjdWxhdGVPYmplY3Qob2JqZWN0RWRnZSwgb2JqZWN0R1BSKTsK
IAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1c2hXaXRoU2NvcGVPYmplY3QsIHJlc3VsdEdQUiwgY3VycmVudFNjb3BlR1BSLCBvYmpl
Y3RHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1c2hXaXRoU2NvcGVPYmpl
Y3QsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGN1cnJlbnRTY29wZUdQ
Uiwgb2JqZWN0R1BSKTsKICAgICAgICAgLy8gTm8gZXhjZXB0aW9uIGNoZWNrIGhlcmUgYXMgd2Ug
ZGlkIG5vdCBoYXZlIHRvIGNhbGwgdG9PYmplY3QoKS4KICAgICB9IGVsc2UgewogICAgICAgICBB
U1NFUlQob2JqZWN0RWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CkBAIC0xMTc3LDcgKzEx
NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHVzaFdpdGhTY29wZShOb2RlKiBu
b2RlKQogICAgICAgICBKU1ZhbHVlUmVncyBvYmplY3RSZWdzID0gb2JqZWN0LmpzVmFsdWVSZWdz
KCk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXNoV2l0aFNjb3BlLCByZXN1bHRHUFIsIGN1cnJlbnRTY29wZUdQUiwgb2JqZWN0
UmVncyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHVzaFdpdGhTY29wZSwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgY3VycmVudFNjb3BlR1BSLCBvYmpl
Y3RSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICB9CiAgICAgCkBA
IC0xNjA0LDE0ICsxNjA0LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdT
bGljZShOb2RlKiBub2RlKQogICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tUHRyKHZtLnNtYWxs
U3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCB0ZW1wR1BSKTsKICAgICBtX2ppdC5s
b2FkUHRyKHRlbXBHUFIsIHRlbXBHUFIpOwogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nLCB0ZW1wR1BSLCB0ZW1wR1BSKSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1Bh
dGhDYWxsKGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
LCB0ZW1wR1BSLCAmdm0sIHRlbXBHUFIpKTsKIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvblN0cmluZ1N1YnN0ciwgdGVtcEdQ
Uiwgc3RyaW5nR1BSLCBzdGFydEluZGV4R1BSLCB0ZW1wR1BSKSk7CisgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uU3RyaW5nU3Vi
c3RyLCB0ZW1wR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc3RyaW5nR1BSLCBzdGFy
dEluZGV4R1BSLCB0ZW1wR1BSKSk7CiAKICAgICBpZiAoZW5kR1BSKQotICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNSb3BlLCB0aGlzLCBvcGVyYXRpb25TdHJpbmdT
bGljZSwgdGVtcEdQUiwgc3RyaW5nR1BSLCBzdGFydEdQUiwgKmVuZEdQUikpOworICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNSb3BlLCB0aGlzLCBvcGVyYXRpb25T
dHJpbmdTbGljZSwgdGVtcEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0cmluZ0dQ
Uiwgc3RhcnRHUFIsICplbmRHUFIpKTsKICAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChpc1JvcGUsIHRoaXMsIG9wZXJhdGlvblN0cmluZ1NsaWNlLCB0
ZW1wR1BSLCBzdHJpbmdHUFIsIHN0YXJ0R1BSLCBUcnVzdGVkSW1tMzIoc3RkOjpudW1lcmljX2xp
bWl0czxpbnQzMl90Pjo6bWF4KCkpKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbChpc1JvcGUsIHRoaXMsIG9wZXJhdGlvblN0cmluZ1NsaWNlLCB0ZW1wR1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc3RyaW5nR1BSLCBzdGFydEdQUiwgVHJ1c3RlZElt
bTMyKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkpOwogCiAgICAgZG9uZUNh
c2VzLmxpbmsoJm1faml0KTsKICAgICBjZWxsUmVzdWx0KHRlbXBHUFIsIG5vZGUpOwpAQCAtMTY1
OCw3ICsxNjU4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvTG93ZXJDYXNlKE5v
ZGUqIG5vZGUpCiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKGxlbmd0aEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
b0xvd2VyQ2FzZSwgbGVuZ3RoR1BSLCBzdHJpbmdHUFIsIGluZGV4R1BSKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRvTG93ZXJDYXNlLCBsZW5ndGhHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBzdHJpbmdHUFIsIGluZGV4R1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBhdXRvIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CkBAIC0yMDUzLDcgKzIwNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ2hlY2tUcmFwcyhOb2RlKiBub2RlKQogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUcmFw
SGFuZGxpbmcgPSBtX2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6Tm9uWmVybywKICAgICAg
ICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhtX2ppdC52bSgpLm5lZWRUcmFwSGFuZGxp
bmdBZGRyZXNzKCkpKTsKIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChu
ZWVkVHJhcEhhbmRsaW5nLCB0aGlzLCBvcGVyYXRpb25IYW5kbGVUcmFwcywgdW51c2VkR1BSKSk7
CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG5lZWRUcmFwSGFuZGxpbmcs
IHRoaXMsIG9wZXJhdGlvbkhhbmRsZVRyYXBzLCB1bnVzZWRHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpKSk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKQEAgLTIxMjgsNyArMjEyOCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbChOb2RlKiBub2Rl
LCBTcGVjdWxhdGVDZWxsT3BlcmFuZCYgYmFzCiAgICAgICAgICAgICAgICAgbV9qaXQuaXNTdHJp
Y3RNb2RlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykKICAgICAgICAgICAgICAgICAgICAgPyAo
bm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCA/IG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsRGly
ZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9u
ZEFycmF5Qm91bmRzU3RyaWN0KQogICAgICAgICAgICAgICAgICAgICA6IChub2RlLT5vcCgpID09
IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxEaXJlY3RCZXlvbmRBcnJh
eUJvdW5kc05vblN0cmljdCA6IG9wZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNOb25TdHJpY3QpLAotICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0
eVJlZywgdmFsdWVSZWcpKTsKKyAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOwogICAgIH0K
IAogICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CkBAIC0yMjIzLDcgKzIyMjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3Bl
cmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCBzY3JhdGNoUmVnLCBzY3JhdGNoUmVnKSk7Cisg
ICAgICAgICAgICBiaWdDaGFyYWN0ZXIsIHRoaXMsIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0
cmluZywgc2NyYXRjaFJlZywgJnZtLCBzY3JhdGNoUmVnKSk7CiAKICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTIy
NDcsMjMgKzIyNDcsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
dHJpbmcoTm9kZSogbm9kZSkKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihtYWtlVW5pcXVlPFNhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2Vu
ZXJhdG9yPigKLSAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgSlNWYWx1ZVJlZ3Mo
c2NyYXRjaFJlZyksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAgICAgb3V0
T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwogI2Vsc2UKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2Fu
ZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAotICAgICAgICAgICAgICAgIG91dE9m
Qm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLAotICAg
ICAgICAgICAgICAgIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAgICAgb3V0
T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgc2NyYXRjaFJlZyksIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcs
IHByb3BlcnR5UmVnKSk7CiAjZW5kaWYKICAgICAgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgb3Bl
cmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQsCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcs
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VS
ZWcsIHByb3BlcnR5UmVnKSk7CiAjZWxzZQogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBv
dXRPZkJvdW5kcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQsCi0gICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgc2NyYXRjaFJlZyksIGJhc2VSZWcs
IHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRh
Z1JlZywgc2NyYXRjaFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGds
b2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAjZW5kaWYKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTIyODYsNyArMjI4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVGcm9tQ2hhckNvZGUoTm9kZSogbm9kZSkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAg
ICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZVVudHlwZWQsIHJlc3VsdFJlZ3MsIG9w
clJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29k
ZVVudHlwZWQsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcHJSZWdz
KTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgCiAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CkBAIC0yMzA2LDcgKzIzMDUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqIG5vZGUpCiAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNtYWxsU3RyaW5nc1JlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIHNjcmF0Y2hSZWcpOwogCiAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHNjcmF0Y2hSZWcpKTsKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUsIHNjcmF0Y2hSZWcs
IHByb3BlcnR5UmVnKSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlLCBzY3JhdGNoUmVnLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcHJvcGVydHlSZWcpKTsKICAgICBjZWxsUmVzdWx0
KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOwogfQogCkBAIC0zMTU4LDI0ICszMTU3LDI0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BS
UmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYXNlcywgdGhpcywKICAg
ICAgICAgICAgICAgICBtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0U3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxEaXJl
Y3ROb25TdHJpY3QsCi0gICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2UsIHByb3BlcnR5LCB2
YWx1ZUdQUikpOworICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYmFzZSwgcHJvcGVydHksIHZhbHVlR1BSKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoCiAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYXNlcywgdGhpcywKICAgICAgICAgICAgICAgICBtX2ppdC5pc1N0cmlj
dE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QsCi0gICAgICAgICAgICAgICAgTm9SZXN1bHQs
IGJhc2UsIHByb3BlcnR5LCB2YWx1ZUdQUikpOworICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZSwgcHJvcGVydHksIHZhbHVlR1BSKSk7CiAg
ICAgICAgIH0KICNlbHNlIC8vIG5vdCBVU0UoSlNWQUxVRTY0KQogICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkgewogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FzZXMsIHRoaXMsCiAg
ICAgICAgICAgICAgICAgbV9qaXQuaXNTdHJpY3RNb2RlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykgPyBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZh
bERpcmVjdENlbGxOb25TdHJpY3QsCi0gICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2UsIEpT
VmFsdWVSZWdzKHByb3BlcnR5VGFnR1BSLCBwcm9wZXJ0eSksIEpTVmFsdWVSZWdzKHZhbHVlVGFn
R1BSLCB2YWx1ZUdQUikpKTsKKyAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2UsIEpTVmFsdWVSZWdzKHByb3BlcnR5VGFnR1BSLCBwcm9wZXJ0
eSksIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZUdQUikpKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhc2VzLCB0aGlzLAogICAgICAgICAgICAgICAgIG1faml0Lmlz
U3RyaWN0TW9kZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpID8gb3BlcmF0aW9uUHV0QnlWYWxD
ZWxsU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0LAotICAgICAgICAgICAg
ICAgIE5vUmVzdWx0LCBiYXNlLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVRhZ0dQUiwgcHJvcGVydHkp
LCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVHUFIpKSk7CisgICAgICAgICAgICAgICAg
Tm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eVRhZ0dQUiwgcHJvcGVydHkpLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVH
UFIpKSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KQEAgLTMyNjcsNyArMzI2Niw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9k
ZSogbm9kZSkKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEpTVmFsdWVSZWdzRmx1c2hlZENh
bGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1
bHQucmVncygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJp
bmcsIHJlc3VsdFJlZ3MsIGFyZzFHUFIsIGFyZzJHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTMyODcsNyArMzI4
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhT
eW1ib2woTm9kZSogbm9kZSkKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEpTVmFsdWVSZWdz
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXN1bHQucmVncygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxP
YmplY3RTeW1ib2wsIHJlc3VsdFJlZ3MsIGFyZzFHUFIsIGFyZzJHUFIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOwogCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTMz
MDYsNyArMzMwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckNl
bGxXaXRoU3RyaW5nKE5vZGUqIG5vZGUsIEVkZ2UmIGNoaWxkMSwKICAgICBzcGVjdWxhdGVTdHJp
bmcoY2hpbGQyLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0
cmluZ05vblN0cmljdCwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM1JlZ3MpOworICAgIGNhbGxPcGVy
YXRpb24obV9qaXQuaXNTdHJpY3RNb2RlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVy
YXRpb25QdXRCeVZhbENlbGxTdHJpbmdTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJp
bmdOb25TdHJpY3QsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BS
LCBhcmczUmVncyk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIG5vUmVzdWx0
KG5vZGUpOwpAQCAtMzMyNSw3ICszMzI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSogbm9kZSwgRWRnZSYgY2hpbGQxLAogICAg
IHNwZWN1bGF0ZVN5bWJvbChjaGlsZDIsIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG1faml0LmlzU3RyaWN0TW9kZUZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpID8gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0IDogb3BlcmF0aW9u
UHV0QnlWYWxDZWxsU3ltYm9sTm9uU3RyaWN0LCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczUmVncyk7
CisgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSA/IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJvbFN0cmljdCA6IG9wZXJhdGlvblB1
dEJ5VmFsQ2VsbFN5bWJvbE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFy
ZzFHUFIsIGFyZzJHUFIsIGFyZzNSZWdzKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwog
CiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0zMzQzLDcgKzMzNDIsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKiBub2RlKQogICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CiAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbFdpdGhUaGlzLCByZXN1bHRSZWdzLCBiYXNlUmVncywg
dGhpc1ZhbHVlUmVncywgc3Vic2NyaXB0UmVncyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25HZXRCeVZhbFdpdGhUaGlzLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgYmFzZVJlZ3MsIHRoaXNWYWx1ZVJlZ3MsIHN1YnNjcmlwdFJlZ3MpOwogICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwpA
QCAtMzM3Niw3ICszMzc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBhcnNlSW50
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUGFyc2VJbnRHZW5lcmljLCByZXN1bHRSZWdzLCB2YWx1ZVJlZ3Ms
IHJhZGl4R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUGFyc2VJbnRH
ZW5lcmljLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWVSZWdz
LCByYWRpeEdQUik7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTMzODksNyArMzM4OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQYXJz
ZUludChOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUGFyc2VJbnRTdHJpbmcsIHJlc3VsdFJlZ3MsIHZhbHVlR1BSLCByYWRpeEdQUik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUGFyc2VJbnRTdHJpbmcsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCB2YWx1ZUdQUiwgcmFkaXhHUFIpOwogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Z3MsIG5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC0zNDAyLDcgKzM0MDEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGFyc2VJbnQoTm9kZSogbm9kZSkKICAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQo
dGhpcyk7CiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblBhcnNlSW50Tm9SYWRpeEdlbmVyaWMsIHJl
c3VsdFJlZ3MsIHZhbHVlUmVncyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUGFy
c2VJbnROb1JhZGl4R2VuZXJpYywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIHZhbHVlUmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTM0
MTUsNyArMzQxNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQYXJzZUludChOb2Rl
KiBub2RlKQogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3Vs
dC5yZWdzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QYXJzZUludFN0cmluZ05vUmFk
aXgsIHJlc3VsdFJlZ3MsIHZhbHVlR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblBh
cnNlSW50U3RyaW5nTm9SYWRpeCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIHZhbHVlR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CkBAIC0zNDczLDcgKzM0NzIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvckNlbGxzKE5vZGUqIG5vZGUsIEpTVmFs
dWVSZWdzIHZhbHVlUmVncwogICAgIHNsb3dDYXNlcy5hcHBlbmQoc2xvd0Nhc2UpOwogICAgIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0
aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplLCByZXN1bHRHUFIsIGdlbi5zdHViSW5mbygpLCB2YWx1ZVJlZ3MsCisgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWVSZWdzLAogICAgICAg
ICBwcm90b3R5cGVSZWdzKTsKICAgICAKICAgICBtX2ppdC5hZGRJbnN0YW5jZU9mKGdlbiwgc2xv
d1BhdGguZ2V0KCkpOwpAQCAtMzU1MCw3ICszNTQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQml0Tm90KE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdE5vdEJpZ0ludCwgcmVzdWx0
R1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXROb3RC
aWdJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9wZXJhbmRHUFIp
OwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CiAKQEAgLTM1NjMsNyArMzU2Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZUJpdE5vdChOb2RlKiBub2RlKQogICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CiAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25WYWx1ZUJpdE5vdCwgcmVzdWx0UmVncywgb3BlcmFuZFJlZ3MpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVmFsdWVCaXROb3QsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBvcGVyYW5kUmVncyk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
IAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CkBAIC0zNTk5LDcgKzM1OTgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0VW50eXBlZEJpdE9wKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVz
dWx0LnJlZ3MoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihzbmlwcGV0U2xvd1BhdGhGdW5jdGlv
biwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24oc25pcHBldFNsb3dQYXRoRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwpAQCAt
MzY2Miw3ICszNjYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFVudHlwZWRCaXRPcChO
b2RlKiBub2RlKQogICAgICAgICBtX2ppdC5tb3ZlVmFsdWUocmlnaHRDaGlsZC0+YXNKU1ZhbHVl
KCksIHJpZ2h0UmVncyk7CiAgICAgfQogCi0gICAgY2FsbE9wZXJhdGlvbihzbmlwcGV0U2xvd1Bh
dGhGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgY2FsbE9w
ZXJhdGlvbihzbmlwcGV0U2xvd1BhdGhGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogCiAgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycygpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBAIC0zNzA5LDEzICsz
NzA4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUJpdHdpc2VPcChOb2Rl
KiBub2RlKQogCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgVmFsdWVCaXRBbmQ6Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0QW5kQmlnSW50LCByZXN1bHRHUFIsIGxlZnRH
UFIsIHJpZ2h0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXRBbmRCaWdJ
bnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0
R1BSKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWYWx1ZUJpdFhvcjoKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25CaXRYb3JCaWdJbnQsIHJlc3VsdEdQUiwgbGVmdEdQUiwgcmln
aHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdFhvckJpZ0ludCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFZhbHVlQml0T3I6Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQml0T3JCaWdJbnQsIHJlc3VsdEdQUiwgbGVmdEdQUiwgcmlnaHRHUFIpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdE9yQmlnSW50LCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0zNzgxLDcgKzM3ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0VW50eXBlZFJp
Z2h0U2hpZnRCaXRPcChOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAg
ICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24oc25pcHBldFNsb3dQYXRoRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHNuaXBwZXRTbG93UGF0aEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTM4NTEsNyArMzg1MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRVbnR5cGVkUmlnaHRTaGlmdEJpdE9wKE5vZGUqIG5vZGUpCiAgICAgICAg
IG1faml0Lm1vdmVWYWx1ZShyaWdodENoaWxkLT5hc0pTVmFsdWUoKSwgcmlnaHRSZWdzKTsKICAg
ICB9CiAKLSAgICBjYWxsT3BlcmF0aW9uKHNuaXBwZXRTbG93UGF0aEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNuaXBwZXRTbG93
UGF0aEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncyk7CiAKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKQEAgLTM4NzksNyArMzg3OCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUxTaGlmdE9wKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUkZs
dXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdExTaGlm
dEJpZ0ludCwgcmVzdWx0R1BSLCBsZWZ0R1BSLCByaWdodEdQUik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQml0TFNoaWZ0QmlnSW50LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzkwNiw3ICszOTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlQml0UlNoaWZ0KE5vZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAg
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25CaXRSU2hpZnRCaWdJbnQsIHJlc3VsdEdQUiwgbGVmdEdQUiwgcmlnaHRHUFIpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdFJTaGlmdEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwogICAgICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKQEAgLTM5NjcsNyArMzk2Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZUFkZChOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBHUFJG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWRkQmlnSW50
LCByZXN1bHRHUFIsIGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25BZGRCaWdJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAog
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC0zOTgzLDcgKzM5ODIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kZSogbm9kZSkKICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3Vs
dCByZXN1bHQodGhpcyk7CiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVy
LCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOwogICAgIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OwpAQCAtNDA0Nyw3ICs0MDQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVl
U3ViKE5vZGUqIG5vZGUpCiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwog
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN1YkJpZ0ludCwgcmVzdWx0R1BSLCBsZWZ0R1BSLCByaWdodEdQUik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdWJCaWdJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKIAogICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtNDE1NCw5ICs0
MTUzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKiBub2RlLCBK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aEkKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKGFkZElDR2VuZXJhdGlvblN0YXRlLT5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0g
ICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb24oYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaGluZ0Z1
bmN0aW9uKSwgcmVzdWx0UmVncywgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICAgICAgYWRkSUNHZW5lcmF0aW9uU3RhdGUt
PnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGlubmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFkZElDR2VuZXJh
dGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5j
dGlvbiwgcmVzdWx0UmVncywgaW5uZXJMZWZ0UmVncywgaW5uZXJSaWdodFJlZ3MpOworICAgICAg
ICAgICAgICAgIGFkZElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGlubmVyTGVmdFJlZ3MsIGlubmVyUmlnaHRSZWdzKTsKIAogICAgICAgICAgICAg
c2lsZW50RmlsbChzYXZlUGxhbnMpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKQEAgLTQxODUsNyArNDE4NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRo
SUMoTm9kZSogbm9kZSwgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJCiAgICAgICAg
IH0KIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG5v
blJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgfQogCkBAIC00MjE4LDcgKzQyMTcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkN1c3RvbShOb2RlKiBub2RlKQog
CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5qdW1wKCk7CiAKLSAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJh
dGlvbkluc3RhbmNlT2ZDdXN0b20sIHJlc3VsdEdQUiwgdmFsdWVSZWdzLCBjb25zdHJ1Y3RvckdQ
UiwgaGFzSW5zdGFuY2VSZWdzKSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCB2YWx1ZVJlZ3MsIGNvbnN0cnVjdG9yR1BSLCBo
YXNJbnN0YW5jZVJlZ3MpKTsKIAogICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKIH0KQEAgLTQzMTQsNyArNDMxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVUb09iamVjdE9yQ2FsbE9iamVjdENvbnN0cnVjdG9yKE5vZGUqIG5vZGUpCiAgICAgbV9q
aXQubW92ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRHUFIpOwogCiAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gVG9PYmplY3QpCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvblRvT2JqZWN0LCByZXN1bHRHUFIsIG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHZhbHVl
UmVncywgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKSk7CisgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvblRvT2JqZWN0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCB2YWx1
ZVJlZ3MsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSkpOwogICAgIGVs
c2UKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uQ2FsbE9iamVjdENvbnN0cnVjdG9yLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHIobm9kZS0+Y2VsbE9wZXJhbmQoKSksIHZhbHVlUmVncykpOwogCkBAIC00NDYwLDcgKzQ0
NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhBYnMoTm9kZSogbm9kZSkK
ICAgICAgICAgSlNWYWx1ZVJlZ3Mgb3AxUmVncyA9IG9wMS5qc1ZhbHVlUmVncygpOwogICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoQWJzLCByZXN1bHQuZnByKCksIG9wMVJl
Z3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoQWJzLCByZXN1bHQuZnBy
KCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcDFSZWdzKTsKICAgICAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9k
ZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDQ4NCwxMiArNDQ4MywxMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhDbHozMihOb2RlKiBub2RlKQogICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKICAgICBm
bHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQXJpdGhDbHozMiwg
cmVzdWx0UmVnLCBvcDFSZWdzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoQ2x6
MzIsIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMVJlZ3MpOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoRG91YmxlVW5hcnlPcChO
b2RlKiBub2RlLCBkb3VibGUgKCpkb3VibGVGdW5jdGlvbikoZG91YmxlKSwgZG91YmxlICgqb3Bl
cmF0aW9uKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQXJpdGhEb3VibGVVbmFyeU9wKE5vZGUqIG5vZGUsIGRvdWJsZSAoKmRvdWJsZUZ1
bmN0aW9uKShkb3VibGUpLCBkb3VibGUgKCpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUpKQogewogICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91
YmxlUmVwVXNlKSB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKQEAgLTQ1MDgsNyArNDUwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcml0aERvdWJsZVVuYXJ5T3AoTm9kZSogbm9kZSwgZG91YmxlICgqZG91YmxlRnVu
Y3RpCiAgICAgSlNWYWx1ZVJlZ3Mgb3AxUmVncyA9IG9wMS5qc1ZhbHVlUmVncygpOwogICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CiAgICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0LmZwcigpLCBvcDFSZWdzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgcmVzdWx0LmZwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
b3AxUmVncyk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBub2RlKTsKIH0KQEAgLTQ3NTIsOSArNDc1MSw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSogbm9kZSwgSklUVW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDCiAgICAgICAgICAgICBzaWxlbnRTcGlsbChzYXZlUGxhbnMpOwogCiAgICAg
ICAgICAgICBpZiAoaWNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAg
ICAgICAgICAgICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbihiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hpbmdGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIGNoaWxkUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgICAgICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bihiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hpbmdGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBjaGlsZFJlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaWNH
ZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uLCByZXN1bHRSZWdzLCBjaGlsZFJlZ3MpOworICAgICAgICAgICAgICAgIGljR2Vu
ZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGNoaWxkUmVn
cyk7CiAKICAgICAgICAgICAgIHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKICAgICAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBAIC00Nzc1LDcgKzQ3NzQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQwogICAgICAgICB9KTsKICAgICB9IGVsc2UgewogICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVz
dWx0UmVncywgY2hpbGRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5n
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBjaGlsZFJl
Z3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIH0KIApAQCAtNDgwOSw3
ICs0ODA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZGUqIG5v
ZGUpCiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk11bEJpZ0ludCwgcmVzdWx0R1BSLCBsZWZ0R1BSLCByaWdodEdQUik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTXVsQmlnSW50LCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAKICAgICAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpA
QCAtNDgyNSw3ICs0ODI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVs
KE5vZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEpTVmFsdWVS
ZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25WYWx1ZU11bCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVNdWwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwpA
QCAtNTAxMSw3ICs1MDEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlRGl2
KE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRpdkJpZ0ludCwgcmVzdWx0R1BSLCBsZWZ0R1BSLCByaWdodEdQ
Uik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGl2QmlnSW50LCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAKICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwpAQCAtNTAyNyw3ICs1MDI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlRGl2KE5vZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAg
IEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25WYWx1ZURpdiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVEaXYsIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOwpAQCAtNTEwOSw3ICs1MTA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlRGl2KE5vZGUqIG5vZGUpCiAgICAgICAgIG1faml0Lm1vdmVWYWx1ZShyaWdodENoaWxk
LT5hc0pTVmFsdWUoKSwgcmlnaHRSZWdzKTsKICAgICB9CiAKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblZhbHVlRGl2LCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlRGl2LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAKICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKQEAgLTUyNzMsNyArNTI3
Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aEZSb3VuZChOb2RlKiBub2Rl
KQogICAgIEpTVmFsdWVSZWdzIG9wMVJlZ3MgPSBvcDEuanNWYWx1ZVJlZ3MoKTsKICAgICBmbHVz
aFJlZ2lzdGVycygpOwogICAgIEZQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Bcml0aEZSb3VuZCwgcmVzdWx0LmZwcigpLCBvcDFSZWdzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoRlJvdW5kLCByZXN1bHQuZnByKCksIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBvcDFSZWdzKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogfQpAQCAtNTI5Niw3ICs1
Mjk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTW9kKE5vZGUqIG5vZGUp
CiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk1vZEJpZ0ludCwgcmVzdWx0R1BSLCBsZWZ0R1BSLCByaWdodEdQUik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTW9kQmlnSW50LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAKICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAt
NTMxMSw3ICs1MzEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTW9kKE5v
ZGUqIG5vZGUpCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVz
dWx0LnJlZ3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlTW9kLCByZXN1bHRS
ZWdzLCBvcDFSZWdzLCBvcDJSZWdzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVl
TW9kLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3AxUmVncywgb3Ay
UmVncyk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MsIG5vZGUpOwogfQpAQCAtNTY5OSw3ICs1Njk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFyaXRoUm91bmRpbmcoTm9kZSogbm9kZSkKICAgICBmbHVzaFJlZ2lzdGVy
cygpOwogICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIEpfSklUT3BlcmF0
aW9uX0VKIG9wZXJhdGlvbiA9IG51bGxwdHI7CisgICAgSl9KSVRPcGVyYXRpb25fR0ogb3BlcmF0
aW9uID0gbnVsbHB0cjsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBBcml0aFJvdW5kKQogICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25Bcml0aFJvdW5kOwogICAgIGVsc2UgaWYgKG5vZGUtPm9w
KCkgPT0gQXJpdGhGbG9vcikKQEAgLTU3MTAsNyArNTcwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aFJvdW5kaW5nKE5vZGUqIG5vZGUpCiAgICAgICAgIEFTU0VSVChub2Rl
LT5vcCgpID09IEFyaXRoVHJ1bmMpOwogICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25Bcml0
aFRydW5jOwogICAgIH0KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0UmVncywg
YXJndW1lbnRSZWdzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50UmVncyk7CiAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQpA
QCAtNTc0Myw3ICs1NzQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3Fy
dChOb2RlKiBub2RlKQogICAgIEpTVmFsdWVSZWdzIG9wMVJlZ3MgPSBvcDEuanNWYWx1ZVJlZ3Mo
KTsKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEZQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Bcml0aFNxcnQsIHJlc3VsdC5mcHIoKSwgb3AxUmVn
cyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Bcml0aFNxcnQsIHJlc3VsdC5mcHIoKSwg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMVJlZ3MpOwogICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CkBAIC01
ODYwLDcgKzU4NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVQb3coTm9k
ZSogbm9kZSkKICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUG93QmlnSW50LCByZXN1bHRHUFIsIGxlZnRHUFIsIHJpZ2h0R1BSKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Qb3dCaWdJbnQsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKIAogICAgICAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CkBAIC01ODc3LDcgKzU4NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVQb3coTm9kZSogbm9kZSkKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEpTVmFsdWVSZWdz
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXN1bHQucmVncygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVQb3cs
IHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVmFsdWVQb3csIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKQEAgLTY0NjIsNyArNjQ2MSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdFcXVhbGl0eSgKICAgICBkb25lLmxpbmso
Jm1faml0KTsKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwg
bGVmdFRlbXBHUFIsIGxlZnRHUFIsIHJpZ2h0R1BSKSk7CisgICAgICAgICAgICBzbG93Q2FzZSwg
dGhpcywgb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBsZWZ0VGVtcEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKSk7CiAgICAgCiAgICAgYmxlc3NlZEJv
b2xlYW5SZXN1bHQobGVmdFRlbXBHUFIsIG5vZGUpOwogfQpAQCAtNjYxMiw3ICs2NjExLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0NvbXBhcmUoTm9kZSogbm9kZSwgTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWwKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKGNvbXBhcmVG
dW5jdGlvbiwgcmVzdWx0R1BSLCBsZWZ0R1BSLCByaWdodEdQUik7CisgICAgY2FsbE9wZXJhdGlv
bihjb21wYXJlRnVuY3Rpb24sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAg
dW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtNjcxMyw3ICs2NzEy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNhbWVWYWx1ZShOb2RlKiBub2RlKQog
CiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TYW1lVmFs
dWUsIHJlc3VsdEdQUiwgYXJnMVJlZ3MsIGFyZzJSZWdzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNhbWVWYWx1ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YXJnMVJlZ3MsIGFyZzJSZWdzKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAg
dW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CkBAIC02ODUyLDcgKzY4NTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hJZlJvcGVTdHJpbmdJbXBsKHN0b3JhZ2VSZWcpLAotICAgICAgICAg
ICAgICAgIHRoaXMsIG9wZXJhdGlvblJlc29sdmVSb3BlLCBzdG9yYWdlUmVnLCBiYXNlUmVnKSk7
CisgICAgICAgICAgICAgICAgdGhpcywgb3BlcmF0aW9uUmVzb2x2ZVJvcGUsIHN0b3JhZ2VSZWcs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnKSk7CiAKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBTdHJpbmdJbXBsOjpk
YXRhT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CkBAIC02OTU5LDcgKzY5
NTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3Vt
ZW50cyhOb2RlKiBub2RlKQogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBpc091dE9mQm91bmRzLCB0aGlzLCBv
cGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICBleHRyYWN0UmVzdWx0
KHJlc3VsdFJlZ3MpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgICAgIGV4
dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZykpOwogICAgIH0KICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFJlZ3MsIG5vZGUpOwpAQCAtNzI1NiwxMyArNzI1NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3RnVuY3Rpb24oTm9kZSogbm9kZSkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKIAogICAgICAgICBpZiAobm9kZVR5cGUgPT0gTmV3R2VuZXJhdG9yRnVuY3Rpb24pCi0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCByZXN1
bHRHUFIsIHNjb3BlR1BSLCBleGVjdXRhYmxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIHJlc3VsdEdQUiwgJnZtKCksIHNjb3BlR1BS
LCBleGVjdXRhYmxlKTsKICAgICAgICAgZWxzZSBpZiAobm9kZVR5cGUgPT0gTmV3QXN5bmNGdW5j
dGlvbikKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgcmVzdWx0R1BSLCBzY29wZUdQUiwgZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIHJlc3VsdEdQUiwgJnZtKCksIHNjb3Bl
R1BSLCBleGVjdXRhYmxlKTsKICAgICAgICAgZWxzZSBpZiAobm9kZVR5cGUgPT0gTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbikKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgcmVzdWx0R1BSLCBzY29wZUdQUiwgZXhlY3V0YWJsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVu
Y3Rpb24sIHJlc3VsdEdQUiwgJnZtKCksIHNjb3BlR1BSLCBleGVjdXRhYmxlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgcmVz
dWx0R1BSLCBzY29wZUdQUiwgZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsICZ2bSgpLCBzY29wZUdQUiwgZXhlY3V0
YWJsZSk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzI5OCwyNSArNzI5Nywy
NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24oTm9kZSogbm9kZSkK
ICAgICBpZiAobm9kZVR5cGUgPT0gTmV3RnVuY3Rpb24pIHsKICAgICAgICAgY29tcGlsZU5ld0Z1
bmN0aW9uQ29tbW9uPEpTRnVuY3Rpb24+KHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzY3JhdGNoMUdQ
Uiwgc2NyYXRjaDJHUFIsIHNjb3BlR1BSLCBzbG93UGF0aCwgSlNGdW5jdGlvbjo6YWxsb2NhdGlv
blNpemUoMCksIGV4ZWN1dGFibGUpOwogICAgICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3RnVuY3Rp
b25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1bHRHUFIsIHNjb3Bl
R1BSLCBleGVjdXRhYmxlKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRS
ZWFsbG9jYXRpb25XYXRjaHBvaW50LCByZXN1bHRHUFIsICZ2bSgpLCBzY29wZUdQUiwgZXhlY3V0
YWJsZSkpOwogICAgIH0KIAogICAgIGlmIChub2RlVHlwZSA9PSBOZXdHZW5lcmF0b3JGdW5jdGlv
bikgewogICAgICAgICBjb21waWxlTmV3RnVuY3Rpb25Db21tb248SlNHZW5lcmF0b3JGdW5jdGlv
bj4ocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NvcGVH
UFIsIHNsb3dQYXRoLCBKU0dlbmVyYXRvckZ1bmN0aW9uOjphbGxvY2F0aW9uU2l6ZSgwKSwgZXhl
Y3V0YWJsZSk7CiAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbldpdGhJbnZhbGlkYXRl
ZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsIHJlc3VsdEdQUiwgc2NvcGVHUFIsIGV4ZWN1dGFibGUp
KTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2Nh
dGlvbldhdGNocG9pbnQsIHJlc3VsdEdQUiwgJnZtKCksIHNjb3BlR1BSLCBleGVjdXRhYmxlKSk7
CiAgICAgfQogCiAgICAgaWYgKG5vZGVUeXBlID09IE5ld0FzeW5jRnVuY3Rpb24pIHsKICAgICAg
ICAgY29tcGlsZU5ld0Z1bmN0aW9uQ29tbW9uPEpTQXN5bmNGdW5jdGlvbj4ocmVzdWx0R1BSLCBz
dHJ1Y3R1cmUsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NvcGVHUFIsIHNsb3dQYXRoLCBK
U0FzeW5jRnVuY3Rpb246OmFsbG9jYXRpb25TaXplKDApLCBleGVjdXRhYmxlKTsKIAotICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50
LCByZXN1bHRHUFIsIHNjb3BlR1BSLCBleGVjdXRhYmxlKSk7CisgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsIHJlc3VsdEdQUiwg
JnZtKCksIHNjb3BlR1BSLCBleGVjdXRhYmxlKSk7CiAgICAgfQogCiAgICAgaWYgKG5vZGVUeXBl
ID09IE5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24pIHsKICAgICAgICAgY29tcGlsZU5ld0Z1bmN0
aW9uQ29tbW9uPEpTQXN5bmNHZW5lcmF0b3JGdW5jdGlvbj4ocmVzdWx0R1BSLCBzdHJ1Y3R1cmUs
IHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgc2NvcGVHUFIsIHNsb3dQYXRoLCBKU0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb246OmFsbG9jYXRpb25TaXplKDApLCBleGVjdXRhYmxlKTsKICAgICAgICAg
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhp
cywgb3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxs
b2NhdGlvbldhdGNocG9pbnQsIHJlc3VsdEdQUiwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpKTsKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0
aW9uV2F0Y2hwb2ludCwgcmVzdWx0R1BSLCAmdm0oKSwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpKTsK
ICAgICB9CiAgICAgCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtNzMzMCw3
ICs3MzI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEZ1bmN0aW9uTmFtZShO
b2RlKiBub2RlKQogICAgIEpTVmFsdWVSZWdzIG5hbWVWYWx1ZVJlZ3MgPSBuYW1lVmFsdWUuanNW
YWx1ZVJlZ3MoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGZ1bmNHUFIsIG5hbWVWYWx1ZVJlZ3MpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgZnVuY0dQUiwgbmFtZVZhbHVlUmVncyk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKIAogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtNzM0Nyw3ICs3MzQ2LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKE5vZGUqIG5vZGUpCiAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CiAgICAgfQogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TaXpl
T2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgYXJndW1lbnRzUmVncywgZGF0YS0+
b2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRz
UmVncywgZGF0YS0+b2Zmc2V0KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAg
bG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CkBAIC03MzgzLDcgKzczODIsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKIAogICAgIG1f
aml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TG9hZFZhcmFyZ3MsIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRzUmVncywg
ZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFuZGF0b3J5TWlu
aW11bSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSwgYXJndW1lbnRz
UmVncywgZGF0YS0+b2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZGF0YS0+bWFuZGF0
b3J5TWluaW11bSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIG5vUmVzdWx0
KG5vZGUpOwpAQCAtNzQ4MCwxMCArNzQ3OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKiBub2RlKQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LAotICAg
ICAgICAgICAgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHNjb3BlR1BSLCB0YWJsZSwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSkpOworICAgICAgICAgICAg
cmVzdWx0R1BSLCAmdm0oKSwgc3RydWN0dXJlLCBzY29wZUdQUiwgdGFibGUsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKICNlbHNlCiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwKLSAgICAgICAg
ICAgIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzY29wZUdQUiwgdGFibGUsIGluaXRpYWxpemF0aW9u
UmVncyk7CisgICAgICAgICAgICByZXN1bHRHUFIsICZ2bSgpLCBzdHJ1Y3R1cmUsIHNjb3BlR1BS
LCB0YWJsZSwgaW5pdGlhbGl6YXRpb25SZWdzKTsKICNlbmRpZgogICAgICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC03
NTI5LDExICs3NTI4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3Rp
dmF0aW9uKE5vZGUqIG5vZGUpCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgc2xvd1BhdGgsIHRo
aXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJl
LCBzY29wZUdQUiwgdGFibGUsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6
YXRpb25WYWx1ZSkpKSk7CisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3Jl
YXRlQWN0aXZhdGlvbkRpcmVjdCwgcmVzdWx0R1BSLCAmdm0oKSwgc3RydWN0dXJlLCBzY29wZUdQ
UiwgdGFibGUsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1
ZSkpKSk7CiAjZWxzZQogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0
aENhbGwoCi0gICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlQWN0aXZh
dGlvbkRpcmVjdCwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHNjb3BlR1BSLCB0YWJsZSwgaW5pdGlh
bGl6YXRpb25SZWdzKSk7CisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3Jl
YXRlQWN0aXZhdGlvbkRpcmVjdCwgcmVzdWx0R1BSLCAmdm0oKSwgc3RydWN0dXJlLCBzY29wZUdQ
UiwgdGFibGUsIGluaXRpYWxpemF0aW9uUmVncykpOwogI2VuZGlmCiAKICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC03NjI4LDcgKzc2MjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUpCiAgICAgaWYgKGxl
bmd0aElzS25vd24pIHsKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlv
bkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsCisgICAgICAgICAg
ICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgcmVz
dWx0R1BSLCAmdm0oKSwgc3RydWN0dXJlLAogICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoLCBt
aW5DYXBhY2l0eSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gbWFr
ZVVuaXF1ZTxDYWxsQ3JlYXRlRGlyZWN0QXJndW1lbnRzU2xvd1BhdGhHZW5lcmF0b3I+KApAQCAt
Nzc0NCwxMiArNzc0MywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzKE5vZGUqIG5vZGUpCiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAKICAgICAvLyBXZSBz
ZXQgdXAgdGhlIGFyZ3VtZW50cyBvdXJzZWx2ZXMsIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgd2hvbGUg
cmVnaXN0ZXIgZmlsZSBhbmQgd2UgY2FuCiAgICAgLy8gc2V0IHRoZW0gdXAgZGlyZWN0bHkgaW50
byB0aGUgYXJndW1lbnQgcmVnaXN0ZXJzLiBUaGlzIGFsc28gbWVhbnMgdGhhdCB3ZSBkb24ndCBo
YXZlIHRvCiAgICAgLy8gaW52ZW50IGEgZm91ci1hcmd1bWVudC1yZWdpc3RlciBzaHVmZmxlLgog
ICAgIAotICAgIC8vIEFyZ3VtZW50czogMDpleGVjLCAxOnN0cnVjdHVyZSwgMjpzdGFydCwgMzps
ZW5ndGgsIDQ6Y2FsbGVlLCA1OnNjb3BlCisgICAgLy8gQXJndW1lbnRzOiAwOkpTR2xvYmFsT2Jq
ZWN0KiwgMTpzdHJ1Y3R1cmUsIDI6c3RhcnQsIDM6bGVuZ3RoLCA0OmNhbGxlZSwgNTpzY29wZQog
ICAgIAogICAgIC8vIERvIHRoZSBzY29wZUdQUiBmaXJzdCwgc2luY2UgaXQgbWlnaHQgYWxpYXMg
YW4gYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgbV9qaXQuc2V0dXBBcmd1bWVudCg1LCBbJl0gKEdQ
UlJlZyBkZXN0R1BSKSB7IG1faml0Lm1vdmUoc2NvcGVHUFIsIGRlc3RHUFIpOyB9KTsKQEAgLTc3
NjEsMTAgKzc3NjIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVNjb3Bl
ZEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIG1faml0LnNldHVwQXJndW1lbnQoCiAgICAgICAg
IDEsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoCi0gICAg
ICAgICAgICAgICAgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgbV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnNjb3BlZEFyZ3VtZW50
c1N0cnVjdHVyZSgpKSwKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2ppdC5ncmFwaCgpLCBnbG9iYWxPYmplY3QtPnNjb3BlZEFyZ3VtZW50c1N0cnVjdHVyZSgp
KSwKICAgICAgICAgICAgICAgICBkZXN0R1BSKTsKICAgICAgICAgfSk7Ci0gICAgbV9qaXQuc2V0
dXBBcmd1bWVudCgwLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IG1faml0Lm1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGRlc3RHUFIpOyB9KTsKKyAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBkZXN0R1BSKTsgfSk7CiAgICAgCiAgICAg
YXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMsIHJlc3Vs
dEdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKQEAgLTc3NzcsMTEgKzc3NzgsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cyhOb2Rl
KiBub2RlKQogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgCiAgICAgLy8gV2Ugc2V0IHVwIHRoZSBhcmd1bWVu
dHMgb3Vyc2VsdmVzLCBiZWNhdXNlIHdlIGhhdmUgdGhlIHdob2xlIHJlZ2lzdGVyIGZpbGUgYW5k
IHdlIGNhbgogICAgIC8vIHNldCB0aGVtIHVwIGRpcmVjdGx5IGludG8gdGhlIGFyZ3VtZW50IHJl
Z2lzdGVycy4KICAgICAKLSAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpzdHJ1Y3R1cmUsIDI6
c3RhcnQsIDM6bGVuZ3RoLCA0OmNhbGxlZQorICAgIC8vIEFyZ3VtZW50czogMDpKU0dsb2JhbE9i
amVjdCosIDE6c3RydWN0dXJlLCAyOnN0YXJ0LCAzOmxlbmd0aCwgNDpjYWxsZWUKICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50KDQsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgZW1pdEdldENhbGxlZShu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIGRlc3RHUFIpOyB9KTsKICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50KDMsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgZW1pdEdldExlbmd0aChub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGRlc3RHUFIpOyB9KTsKICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KDIsIFsmXSAo
R1BSUmVnIGRlc3RHUFIpIHsgZW1pdEdldEFyZ3VtZW50U3RhcnQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBkZXN0R1BSKTsgfSk7CkBAIC03Nzg5LDEwICs3NzkyLDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICAgICAg
MSwgWyZdIChHUFJSZWcgZGVzdEdQUikgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKICAgICAg
ICAgICAgICAgICBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcigKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuZ3JhcGgoKSwgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyktPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpKSwKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSks
CiAgICAgICAgICAgICAgICAgZGVzdEdQUik7CiAgICAgICAgIH0pOwotICAgIG1faml0LnNldHVw
QXJndW1lbnQoMCwgWyZdIChHUFJSZWcgZGVzdEdQUikgeyBtX2ppdC5tb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBkZXN0R1BSKTsgfSk7CisgICAgbV9qaXQuc2V0dXBBcmd1bWVudCgw
LCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgZGVzdEdQUik7IH0pOwogICAgIAogICAgIGFw
cGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzLCByZXN1bHRH
UFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBAIC03ODYyLDcgKzc4NjUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlUmVzdChOb2RlKiBub2RlKQogCiAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVSZXN0LCBy
ZXN1bHRHUFIsIGFyZ3VtZW50c1N0YXJ0R1BSLCBJbW0zMihub2RlLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpKSwgYXJyYXlMZW5ndGhHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q3JlYXRlUmVzdCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1l
bnRzU3RhcnRHUFIsIEltbTMyKG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpLCBhcnJh
eUxlbmd0aEdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTc5NTEsNyArNzk1NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQubXV0YXRvckZl
bmNlKHZtKCkpOwogCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG1faml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0
aW9uU3ByZWFkRmFzdEFycmF5LCByZXN1bHRHUFIsIGFyZ3VtZW50KSk7CisgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1wKCksIHRoaXMsIG9wZXJhdGlv
blNwcmVhZEZhc3RBcnJheSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YXJndW1lbnQpKTsKIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtNzk2MCw3ICs3OTYzLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKiBub2RlKQogCiAgICAgICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TcHJlYWRGYXN0QXJyYXks
IHJlc3VsdEdQUiwgYXJndW1lbnQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNw
cmVhZEZhc3RBcnJheSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJn
dW1lbnQpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKQEAgLTc5Njks
NyArNzk3Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSogbm9k
ZSkKIAogICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3ByZWFkR2VuZXJpYywgcmVzdWx0R1BSLCBhcmd1bWVudCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3ByZWFkR2VuZXJpYywgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnQpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgfQpAQCAtODA1
Miw3ICs4MDU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZGUq
IG5vZGUpCiAgICAgaWYgKCFub2RlLT5udW1DaGlsZHJlbigpKSB7CiAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCByZXN1bHQuZ3ByKCks
IHN0cnVjdHVyZSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RW1wdHlBcnJh
eSwgcmVzdWx0LmdwcigpLCAmdm0oKSwgc3RydWN0dXJlKTsKICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAg
ICAgICByZXR1cm47CkBAIC04MTIzLDcgKzgxMjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTmV3QXJyYXkoTm9kZSogbm9kZSkKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1
bHQodGhpcyk7CiAKICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICBvcGVyYXRpb25OZXdBcnJh
eSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSksCisgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5LCByZXN1bHQuZ3By
KCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIG1f
aml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSwK
ICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIHNpemVfdChub2RlLT5udW1DaGls
ZHJlbigpKSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtODI2NSw3ICs4MjY4
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0aFNwcmVhZChOb2Rl
KiBub2RlKQogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhTcHJlYWRTbG93LCByZXN1bHRHUFIsIGJ1ZmZlciwgbm9kZS0+bnVtQ2hp
bGRyZW4oKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTcHJlYWRT
bG93LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBidWZmZXIsIG5vZGUt
Pm51bUNoaWxkcmVuKCkpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgewogICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTg0NTAsNyArODQ1Myw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVNsaWNlKE5vZGUqIG5vZGUpCiAgICAgICAg
IH0KIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihtYWtlVW5pcXVlPENhbGxBcnJheUFs
bG9jYXRvcldpdGhWYXJpYWJsZVN0cnVjdHVyZVZhcmlhYmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9y
PigKLSAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZSwgcmVzdWx0R1BSLCB0ZW1wVmFsdWUsIHNpemVHUFIsIHN0b3JhZ2VSZXN1bHRHUFIpKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3Qp
LCB0ZW1wVmFsdWUsIHNpemVHUFIsIHN0b3JhZ2VSZXN1bHRHUFIpKTsKICAgICB9CiAKICAgICBH
UFJUZW1wb3JhcnkgdGVtcDQodGhpcyk7CkBAIC04NjY5LDcgKzg2NzIsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJyYXlJbmRleE9mKE5vZGUqIG5vZGUpCiAKICAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5SW5k
ZXhPZlN0cmluZywgbGVuZ3RoR1BSLCBzdG9yYWdlR1BSLCBzZWFyY2hFbGVtZW50R1BSLCBpbmRl
eEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlJbmRleE9mU3RyaW5n
LCBsZW5ndGhHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdG9yYWdlR1BSLCBzZWFy
Y2hFbGVtZW50R1BSLCBpbmRleEdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAKICAgICAgICAgaW50MzJSZXN1bHQobGVuZ3RoR1BSLCBub2RlKTsKQEAgLTg2ODQsMTEgKzg2
ODcsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5SW5kZXhPZihOb2RlKiBu
b2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlLCBsZW5n
dGhHUFIsIHN0b3JhZ2VHUFIsIHNlYXJjaEVsZW1lbnRSZWdzLCBpbmRleEdQUik7CisgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlLCBsZW5n
dGhHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdG9yYWdlR1BSLCBzZWFyY2hFbGVt
ZW50UmVncywgaW5kZXhHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZUludDMyT3JDb250aWd1b3Vz
LCBsZW5ndGhHUFIsIHN0b3JhZ2VHUFIsIHNlYXJjaEVsZW1lbnRSZWdzLCBpbmRleEdQUik7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlSW50MzJP
ckNvbnRpZ3VvdXMsIGxlbmd0aEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0b3Jh
Z2VHUFIsIHNlYXJjaEVsZW1lbnRSZWdzLCBpbmRleEdQUik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC04NzU3LDcgKzg3NjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJy
YXlQdXNoKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihzdG9yYWdlTGVu
Z3RoR1BSLCByZXN1bHRSZWdzKTsKIAogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25B
cnJheVB1c2gsIHJlc3VsdFJlZ3MsIHZhbHVlUmVncywgYmFzZUdQUikpOworICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWVSZWdzLCBiYXNlR1BSKSk7
CiAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC04ODA1LDcgKzg4MDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJyYXlQdXNoKE5vZGUqIG5vZGUpCiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZmFzdFBhdGggPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBi
dWZmZXJHUFIsIFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpKSk7CiAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKG1faml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoTXVs
dGlwbGUsIHJlc3VsdFJlZ3MsIGJhc2VHUFIsIGJ1ZmZlckdQUiwgVHJ1c3RlZEltbTMyKGVsZW1l
bnRDb3VudCkpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG1f
aml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoTXVsdGlwbGUsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBidWZmZXJHUFIsIFRydXN0ZWRJ
bW0zMihlbGVtZW50Q291bnQpKSk7CiAKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgYnVmZmVyR1BSKTsKICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYnVmZmVyR1BSKSk7CkBAIC04ODMzLDcgKzg4MzYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJyYXlQdXNoKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2pp
dC5ib3hJbnQzMihzdG9yYWdlTGVuZ3RoR1BSLCByZXN1bHRSZWdzKTsKIAogICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUsIHJlc3VsdFJlZ3MsIHZhbHVlRlBS
LCBiYXNlR1BSKSk7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCB2YWx1ZUZQUiwgYmFzZUdQUikpOwogCiAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtODg3OSw3ICs4
ODgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChOb2RlKiBub2Rl
KQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhc3RQYXRoID0gbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYnVmZmVyR1BSLCBUcnVzdGVkSW1tUHRyKHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSkp
OwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1w
KCksIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaERvdWJsZU11bHRpcGxlLCByZXN1bHRSZWdzLCBi
YXNlR1BSLCBidWZmZXJHUFIsIFRydXN0ZWRJbW0zMihlbGVtZW50Q291bnQpKSk7CisgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1wKCksIHRoaXMsIG9w
ZXJhdGlvbkFycmF5UHVzaERvdWJsZU11bHRpcGxlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgYnVmZmVyR1BSLCBUcnVzdGVkSW1tMzIoZWxlbWVudENv
dW50KSkpOwogCiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVy
LT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSksIGJ1ZmZlckdQUik7CiAgICAgICAgIG1faml0LnN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1
ZmZlckdQUikpOwpAQCAtODkxNSw3ICs4OTE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFycmF5UHVzaChOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQuYm94SW50MzIoc3Rv
cmFnZUxlbmd0aEdQUiwgcmVzdWx0UmVncyk7CiAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uQXJyYXlQdXNoLCByZXN1bHRSZWdzLCB2YWx1ZVJlZ3MsIGJhc2VHUFIpKTsKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVz
aCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlUmVncywgYmFz
ZUdQUikpOwogCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtODk2MSw3ICs4OTY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChOb2RlKiBub2RlKQogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmYXN0UGF0aCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGJ1ZmZlckdQUiwgVHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkpKTsKIAogICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1wKCksIHRoaXMsIG9w
ZXJhdGlvbkFycmF5UHVzaE11bHRpcGxlLCByZXN1bHRSZWdzLCBiYXNlR1BSLCBidWZmZXJHUFIs
IFRydXN0ZWRJbW0zMihlbGVtZW50Q291bnQpKSk7CisgICAgICAgICAgICBzbG93UGF0aENhbGwo
bV9qaXQuanVtcCgpLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2hNdWx0aXBsZSwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGJ1ZmZlckdQUiwgVHJ1c3Rl
ZEltbTMyKGVsZW1lbnRDb3VudCkpKTsKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBidWZmZXJHUFIpOwog
ICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhidWZmZXJHUFIpKTsKQEAgLTg5ODksNyArODk5Miw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKiBub2RlKQogICAgICAgICBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwogICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbk5vdGlmeVdy
aXRlLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVk
ZWQsIE5vUmVzdWx0LCBzZXQpKTsKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlz
LCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTmVlZFRvU3BpbGwsIEV4Y2VwdGlvbkNoZWNrUmVxdWly
ZW1lbnQ6OkNoZWNrTm90TmVlZGVkLCBOb1Jlc3VsdCwgJnZtKCksIHNldCkpOwogICAgIAogICAg
IG5vUmVzdWx0KG5vZGUpOwogfQpAQCAtOTIzNiw3ICs5MjM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9jYXRlQ29tcGxleFBy
b3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHJlc3VsdC5ncHIoKSwgYmFzZUdQUik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVDb21wbGV4UHJvcGVydHlT
dG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgcmVzdWx0LmdwcigpLCAmdm0oKSwgYmFzZUdQUik7
CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIAogICAgICAgICBzdG9y
YWdlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CkBAIC05MjU2LDcgKzkyNTksNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9k
ZSkKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKIAogICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFs
bG9jYXRlU2ltcGxlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQ
UjEpKTsKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxv
Y2F0ZVNpbXBsZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIx
LCAmdm0oKSkpOwogCiAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpCiAgICAg
ICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2
b2lkKikpKSk7CkBAIC05MjgwLDcgKzkyODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwogCiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0
b3JhZ2UsIHJlc3VsdC5ncHIoKSwgYmFzZUdQUiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVDb21wbGV4UHJvcGVydHlT
dG9yYWdlLCByZXN1bHQuZ3ByKCksICZ2bSgpLCBiYXNlR1BSLCBuZXdTaXplIC8gc2l6ZW9mKEpT
VmFsdWUpKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgICAgICBzdG9y
YWdlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CkBAIC05MzAzLDcgKzkzMDYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBu
b2RlKQogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogCiAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uQWxsb2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBuZXdTaXplIC8g
c2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCAmdm0o
KSwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwogCiAgICAgZm9yIChwdHJkaWZmX3Qgb2Zm
c2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihuZXdTaXplKTsg
b2Zmc2V0ICs9IHNpemVvZih2b2lkKikpCiAgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNl
dCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CkBAIC05NDIxLDE3ICs5NDI0
LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKE5vZGUqIG5vZGUpCiAK
ICAgICBmbHVzaFJlZ2lzdGVycygpOwogCisgICAgLy8gRklYTUU6IEdsb2JhbE9iamVjdCBjaGVj
ay4KICAgICBhdXRvIGZ1bmN0aW9uID0gQ0Z1bmN0aW9uUHRyKHNpZ25hdHVyZS0+ZnVuY3Rpb25X
aXRob3V0VHlwZUNoZWNrKTsKICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyA9IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCArIDE7CiAgICAgc3dpdGNoIChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykgewogICAgIGNhc2UgMToKLSAgICAgICAgY2FsbE9wZXJhdGlvbihy
ZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VQPihmdW5jdGlvbi5nZXQoKSksIGV4dHJh
Y3RSZXN1bHQocmVzdWx0UmVncyksIHJlZ3NbMF0pOworICAgICAgICBjYWxsT3BlcmF0aW9uKHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1A+KGZ1bmN0aW9uLmdldCgpKSwgZXh0cmFj
dFJlc3VsdChyZXN1bHRSZWdzKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHJlZ3NbMF0p
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FUFA+KGZ1bmN0aW9uLmdldCgpKSwgZXh0cmFj
dFJlc3VsdChyZXN1bHRSZWdzKSwgcmVnc1swXSwgcmVnc1sxXSk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HUFA+KGZ1bmN0aW9uLmdldCgp
KSwgZXh0cmFjdFJlc3VsdChyZXN1bHRSZWdzKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IHJlZ3NbMF0sIHJlZ3NbMV0pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDM6Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FUFBQPihmdW5j
dGlvbi5nZXQoKSksIGV4dHJhY3RSZXN1bHQocmVzdWx0UmVncyksIHJlZ3NbMF0sIHJlZ3NbMV0s
IHJlZ3NbMl0pOworICAgICAgICBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR1BQUD4oZnVuY3Rpb24uZ2V0KCkpLCBleHRyYWN0UmVzdWx0KHJlc3VsdFJlZ3Mp
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgcmVnc1swXSwgcmVnc1sxXSwgcmVnc1syXSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC05NDU0LDcgKzk0NTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ2FsbERPTUdldHRlcihOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHM8Sl9KSVRPcGVyYXRpb25fRUpJPihDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1
ZShiYXNlR1BSKSwgaWRlbnRpZmllclVJRChub2RlLT5jYWxsRE9NR2V0dGVyRGF0YSgpLT5pZGVu
dGlmaWVyTnVtYmVyKSk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzPEpfSklUT3BlcmF0
aW9uX0dKST4oVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIENDYWxsSGVscGVyczo6Q2VsbFZh
bHVlKGJhc2VHUFIpLCBpZGVudGlmaWVyVUlEKG5vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlk
ZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsICZ2bSgpLnRvcENhbGxGcmFtZSk7CiAgICAgICAgIG1faml0LmVtaXRTdG9y
ZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgbV9q
aXQuYXBwZW5kQ2FsbChnZXR0ZXIucmV0YWdnZWQ8Q0Z1bmN0aW9uUHRyVGFnPigpKTsKQEAgLTk1
NjMsMTAgKzk1NjcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvU3RyaW5nT3JD
YWxsU3RyaW5nQ29uc3RydWN0b3JPclN0cmluZ1ZhbHVlT2YoTm9kZSoKICAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKIAogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUb1N0cmluZykKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9TdHJpbmcsIHJlc3VsdEdQUiwgb3AxUmVn
cyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvU3RyaW5nLCByZXN1bHRH
UFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcDFSZWdzKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxsU3RyaW5nQ29uc3RydWN0b3Ip
OwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3RydWN0
b3IsIHJlc3VsdEdQUiwgb3AxUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3RvciwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgb3AxUmVncyk7CiAgICAgICAgIH0KICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtOTU5MywxMiAr
OTU5NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9TdHJpbmdPckNhbGxTdHJp
bmdDb25zdHJ1Y3Rvck9yU3RyaW5nVmFsdWVPZihOb2RlKgogICAgICAgICAgICAgc2xvd1BhdGgy
LmxpbmsoJm1faml0KTsKICAgICAgICAgfQogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUb1N0
cmluZykKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9TdHJpbmcsIHJlc3Vs
dEdQUiwgb3AxUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvU3Ry
aW5nLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcDFSZWdzKTsKICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBTdHJpbmdWYWx1ZU9mKQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJpbmdWYWx1ZU9mLCByZXN1bHRHUFIsIG9wMVJlZ3Mp
OworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJpbmdWYWx1ZU9mLCByZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcDFSZWdzKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDYWxsU3RyaW5nQ29uc3RydWN0
b3IpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3Ry
dWN0b3IsIHJlc3VsdEdQUiwgb3AxUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3RvciwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgb3AxUmVncyk7CiAgICAgICAgIH0KICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKICAgICAgICAgaWYgKGRvbmUuaXNTZXQoKSkKQEAgLTk2NjksMTAgKzk2NzMsMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvU3RyaW5nT3JDYWxsU3RyaW5nQ29uc3Ry
dWN0b3JPclN0cmluZ1ZhbHVlT2YoTm9kZSoKICAgICAgICAgICAgIG5lZWRDYWxsLmxpbmsoJm1f
aml0KTsKICAgICAgICAgfQogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUb1N0cmluZykKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwsIHJlc3VsdEdQ
Uiwgb3AxR1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9TdHJpbmdP
bkNlbGwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMUdQUik7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbFN0cmlu
Z0NvbnN0cnVjdG9yKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbFN0
cmluZ0NvbnN0cnVjdG9yT25DZWxsLCByZXN1bHRHUFIsIG9wMUdQUik7CisgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3Rvck9uQ2VsbCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3AxR1BSKTsKICAgICAgICAgfQogICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBpZiAoZG9uZS5pc1NldCgpKQpA
QCAtOTY5NSw3ICs5Njk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU51bWJlclRv
U3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudChOb2RlKiBub2RlLCBpbnQKIHsKICAgICBhdXRv
IGNhbGxUb1N0cmluZyA9IFsmXSAoYXV0byBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRHUFIsIGF1
dG8gdmFsdWVSZWcpIHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIHJlc3VsdEdQUiwgdmFsdWVSZWcsIFRydXN0ZWRJbW0zMihyYWRp
eCkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWVSZWcsIFRydXN0ZWRJbW0zMihyYWRpeCkpOwogICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgfTsKQEAgLTk3NDAsNyArOTc0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOdW1iZXJUb1N0cmluZ1dpdGhSYWRpeChOb2RlKiBub2RlKQogCiAgICAgYXV0
byBjYWxsVG9TdHJpbmcgPSBbJl0gKGF1dG8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLCBh
dXRvIHZhbHVlUmVnLCBHUFJSZWcgcmFkaXhHUFIpIHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlc3VsdEdQUiwgdmFsdWVSZWcs
IHJhZGl4R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlUmVnLCByYWRpeEdQUik7CiAgICAgICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKICAgICB9OwpAQCAtOTgxNSw3ICs5ODE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld1N0cmluZ09iamVjdChOb2RlKiBub2RlKQogICAgIG1faml0Lm11dGF0b3JGZW5j
ZSh2bSgpKTsKICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoCi0g
ICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIHJlc3VsdEdQ
Uiwgb3BlcmFuZEdQUiwgbm9kZS0+c3RydWN0dXJlKCkpKTsKKyAgICAgICAgc2xvd1BhdGgsIHRo
aXMsIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdCwgcmVzdWx0R1BSLCAmdm0oKSwgb3BlcmFuZEdQ
Uiwgbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiB9CkBAIC05ODI2LDcgKzk4MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTmV3U3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
ICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdTeW1ib2wsIHJlc3VsdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
U3ltYm9sLCByZXN1bHRHUFIsICZ2bSgpKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICByZXR1cm47
CkBAIC05ODQxLDcgKzk4NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3U3lt
Ym9sKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1N5bWJvbFdpdGhEZXNjcmlwdGlvbiwg
cmVzdWx0R1BSLCBzdHJpbmdHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3U3lt
Ym9sV2l0aERlc2NyaXB0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBzdHJpbmdHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtOTkyNiw3ICs5OTMwLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXlXaXRoU2l6ZShOb2RlKiBub2RlKQogICAgIAog
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKHR5cGVkQXJyYXlU
eXBlKSwKLSAgICAgICAgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHNpemVHUFIsIHN0b3JhZ2VHUFIp
KTsKKyAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc3RydWN0
dXJlLCBzaXplR1BSLCBzdG9yYWdlR1BSKSk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiB9CkBAIC05OTU3LDcgKzk5NjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTmV3UmVnZXhwKE5vZGUqIG5vZGUpCiAgICAgbV9qaXQuc3RvcmVWYWx1ZShsYXN0SW5kZXhS
ZWdzLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocmVzdWx0R1BSLCBSZWdFeHBPYmplY3Q6Om9mZnNl
dE9mTGFzdEluZGV4KCkpKTsKICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKLSAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlv
bk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIHJlc3VsdEdQUiwgcmVnZXhwLCBsYXN0SW5kZXhSZWdz
KSk7CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCByZWdleHAsIGxhc3RJbmRleFJlZ3MpKTsKIAogICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTEwNzAwLDcgKzEwNzA0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbShOb2RlKiBub2RlLCBTd2l0Y2hEYXRhKiBkYXRhKQog
ICAgICAgICBub3RJbnQzMi5saW5rKCZtX2ppdCk7CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5i
cmFuY2hJZk5vdE51bWJlcih2YWx1ZVJlZ3MsIHNjcmF0Y2gpLCBkYXRhLT5mYWxsVGhyb3VnaC5i
bG9jayk7CiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2gpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUsIHNj
cmF0Y2gsIHZhbHVlUmVncywgZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwg
JnZtKCksIHZhbHVlUmVncywgZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMoKTsKIAogICAgICAgICBtX2ppdC5mYXJKdW1wKHNjcmF0Y2gsIEpT
U3dpdGNoUHRyVGFnKTsKQEAgLTEwNzE0LDEyICsxMDcxOCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0U3dpdGNoSW1tKE5vZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRhdGEpCiAgICAgfQog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoQ2hhclN0cmluZ0p1bXAoCi0gICAg
U3dpdGNoRGF0YSogZGF0YSwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCkKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcChOb2RlKiBub2RlLCBTd2l0Y2hE
YXRhKiBkYXRhLCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBzY3JhdGNoKQogewogICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWUsIEpTU3RyaW5nOjpvZmZzZXRPZlZh
bHVlKCkpLCBzY3JhdGNoKTsKICAgICBhdXRvIGlzUm9wZSA9IG1faml0LmJyYW5jaElmUm9wZVN0
cmluZ0ltcGwoc2NyYXRjaCk7Ci0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KGlzUm9wZSwgdGhpcywgb3BlcmF0aW9uUmVzb2x2ZVJvcGUsIHNjcmF0Y2gsIHZhbHVlKSk7Cisg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzUm9wZSwgdGhpcywgb3BlcmF0
aW9uUmVzb2x2ZVJvcGUsIHNjcmF0Y2gsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCB2YWx1
ZSkpOwogICAgIAogICAgIGFkZEJyYW5jaCgKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC0x
MDc1OSw3ICsxMDc2Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyKE5v
ZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRhdGEpCiAgICAgICAgIG9wMS51c2UoKTsKIAogICAgICAg
ICBzcGVjdWxhdGVTdHJpbmcobm9kZS0+Y2hpbGQxKCksIG9wMUdQUik7Ci0gICAgICAgIGVtaXRT
d2l0Y2hDaGFyU3RyaW5nSnVtcChkYXRhLCBvcDFHUFIsIHRlbXBHUFIpOworICAgICAgICBlbWl0
U3dpdGNoQ2hhclN0cmluZ0p1bXAobm9kZSwgZGF0YSwgb3AxR1BSLCB0ZW1wR1BSKTsKICAgICAg
ICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMTA3NzcsNyArMTA3ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0U3dpdGNoQ2hhcihOb2RlKiBub2RlLCBTd2l0Y2hEYXRhKiBkYXRhKQogICAgICAgICAK
ICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaElmTm90U3RyaW5nKG9wMVJlZ3MucGF5bG9h
ZEdQUigpKSwgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgICAgICAKLSAgICAgICAgZW1p
dFN3aXRjaENoYXJTdHJpbmdKdW1wKGRhdGEsIG9wMVJlZ3MucGF5bG9hZEdQUigpLCB0ZW1wR1BS
KTsKKyAgICAgICAgZW1pdFN3aXRjaENoYXJTdHJpbmdKdW1wKG5vZGUsIGRhdGEsIG9wMVJlZ3Mu
cGF5bG9hZEdQUigpLCB0ZW1wR1BSKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTA5MzQsNyAr
MTA5MzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QmluYXJ5U3dpdGNoU3RyaW5nUmVj
dXJzZSgKICAgICBhZGRCcmFuY2goYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCksIGRhdGEtPmZh
bGxUaHJvdWdoLmJsb2NrKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0
cmluZ09uU3RyaW5nKFN3aXRjaERhdGEqIGRhdGEsIEdQUlJlZyBzdHJpbmcpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TdHJpbmcoTm9kZSogbm9kZSwgU3dpdGNoRGF0
YSogZGF0YSwgR1BSUmVnIHN0cmluZykKIHsKICAgICBkYXRhLT5kaWRVc2VKdW1wVGFibGUgPSB0
cnVlOwogICAgIApAQCAtMTA5NTcsNyArMTA5NjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0U3dpdGNoU3RyaW5nT25TdHJpbmcoU3dpdGNoRGF0YSogZGF0YSwgR1BSUmVnIHN0cmluZykK
ICAgICBpZiAoIWNhbkRvQmluYXJ5U3dpdGNoIHx8IHRvdGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4
aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoKCkpIHsKICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgIG9wZXJhdGlvblN3
aXRjaFN0cmluZywgc3RyaW5nLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxl
SW5kZXgpLCBzdHJpbmcpOworICAgICAgICAgICAgb3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBzdHJp
bmcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEt
PnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwogICAgICAgICBtX2ppdC5mYXJKdW1wKHN0cmluZywgSlNTd2l0Y2hQdHJUYWcpOwogICAg
ICAgICByZXR1cm47CkBAIC0xMDk5NCw3ICsxMDk5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyhTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcgc3RyaW5n
KQogICAgIAogICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CiAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMoc3RyaW5nKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmlu
Zywgc3RyaW5nLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBz
dHJpbmcpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBzdHJpbmcs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3
aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwogICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsK
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIG1faml0LmZhckp1bXAoc3RyaW5nLCBK
U1N3aXRjaFB0clRhZyk7CkBAIC0xMTAzNiw3ICsxMTAzOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSkKICAgICAg
ICAgb3AxLnVzZSgpOwogCiAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDEoKSwg
b3AxR1BSKTsKLSAgICAgICAgZW1pdFN3aXRjaFN0cmluZ09uU3RyaW5nKGRhdGEsIG9wMUdQUik7
CisgICAgICAgIGVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyhub2RlLCBkYXRhLCBvcDFHUFIpOwog
ICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0xMTA1Miw3ICsxMTA1NSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSkKICAg
ICAgICAgCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hJZk5vdFN0cmluZyhvcDFSZWdz
LnBheWxvYWRHUFIoKSksIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICAgICAgCi0gICAg
ICAgIGVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyhkYXRhLCBvcDFSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgIGVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyhub2RlLCBkYXRhLCBvcDFSZWdzLnBh
eWxvYWRHUFIoKSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTExMTIzLDcgKzExMTI2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihOb2RlKiBub2RlKQogICAg
ICAgICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShiYXNlR1BSKSk7
CiAKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBiYXNlR1BSKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgYmFzZUdQ
Uik7CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogCiAgICAgb2subGluaygmbV9qaXQp
OwpAQCAtMTExNDAsNyArMTExNDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QWNjZXNzb3JCeUlkKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFjY2Vzc29yR1BSID0gYWNjZXNz
b3IuZ3ByKCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24obm9k
ZS0+b3AoKSA9PSBQdXRHZXR0ZXJCeUlkID8gb3BlcmF0aW9uUHV0R2V0dGVyQnlJZCA6IG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIE5vUmVzdWx0LCBiYXNlR1BSLCBpZGVudGlmaWVyVUlEKG5vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKSksIG5vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpLCBhY2Nlc3Nv
ckdQUik7CisgICAgY2FsbE9wZXJhdGlvbihub2RlLT5vcCgpID09IFB1dEdldHRlckJ5SWQgPyBv
cGVyYXRpb25QdXRHZXR0ZXJCeUlkIDogb3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgTm9SZXN1bHQs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBpZGVudGlmaWVyVUlEKG5vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKSksIG5vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpLCBhY2Nlc3Nv
ckdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIG5vUmVzdWx0KG5vZGUp
OwpAQCAtMTExNTgsNyArMTExNjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
R2V0dGVyU2V0dGVyQnlJZChOb2RlKiBub2RlKQogICAgIEdQUlJlZyBzZXR0ZXJHUFIgPSBzZXR0
ZXIuZ3ByKCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBOb1Jlc3VsdCwgYmFzZUdQUiwgaWRlbnRpZmllclVJRChu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLCBub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSwgZ2V0
dGVyR1BSLCBzZXR0ZXJHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
U2V0dGVyLCBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGlk
ZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSwgbm9kZS0+YWNjZXNzb3JBdHRy
aWJ1dGVzKCksIGdldHRlckdQUiwgc2V0dGVyR1BSKTsKICNlbHNlCiAgICAgLy8gVGhlc2UgSlNW
YWx1ZXMgbWF5IGJlIEpTVW5kZWZpbmVkIE9SIEpTRnVuY3Rpb24qLgogICAgIC8vIEF0IHRoYXQg
dGltZSwKQEAgLTExMTcwLDcgKzExMTczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEdldHRlclNldHRlckJ5SWQoTm9kZSogbm9kZSkKICAgICBKU1ZhbHVlUmVncyBzZXR0ZXJS
ZWdzID0gc2V0dGVyLmpzVmFsdWVSZWdzKCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBOb1Jlc3VsdCwgYmFzZUdQ
UiwgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpLCBub2RlLT5hY2Nlc3Nv
ckF0dHJpYnV0ZXMoKSwgZ2V0dGVyUmVncy5wYXlsb2FkR1BSKCksIHNldHRlclJlZ3MucGF5bG9h
ZEdQUigpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgTm9S
ZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBpZGVudGlmaWVyVUlE
KG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSksIG5vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpLCBn
ZXR0ZXJSZWdzLnBheWxvYWRHUFIoKSwgc2V0dGVyUmVncy5wYXlsb2FkR1BSKCkpOwogI2VuZGlm
CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtMTExODQsNyArMTExODcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVzb2x2ZVNjb3BlKE5vZGUqIG5vZGUpCiAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblJlc29sdmVTY29wZSwgcmVzdWx0R1BSLCBzY29wZUdQUiwgaWRlbnRpZmllclVJ
RChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blJlc29sdmVTY29wZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgc2Nv
cGVHUFIsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSk7CiAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9
CkBAIC0xMTE5Niw3ICsxMTE5OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZXNv
bHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWws
IHJlc3VsdFJlZ3MsIHNjb3BlR1BSLCBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9ySG9pc3Rp
bmdGdW5jRGVjbEluRXZhbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IHNjb3BlR1BSLCBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkpOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKIH0KQEAgLTExMjI0LDcgKzExMjI3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldER5bmFtaWNWYXIoTm9kZSogbm9kZSkKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAg
IEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uR2V0RHluYW1pY1ZhciwgcmVzdWx0UmVncywgc2NvcGVHUFIsIGlkZW50aWZpZXJVSUQobm9k
ZS0+aWRlbnRpZmllck51bWJlcigpKSwgbm9kZS0+Z2V0UHV0SW5mbygpKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkdldER5bmFtaWNWYXIsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBzY29wZUdQUiwgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCkpLCBub2RlLT5nZXRQdXRJbmZvKCkpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KQEAgLTExMjM4LDcgKzEx
MjQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dER5bmFtaWNWYXIoTm9kZSog
bm9kZSkKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOwog
CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG1faml0LmlzU3RyaWN0
TW9kZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpID8gb3BlcmF0aW9uUHV0RHluYW1pY1ZhclN0
cmljdCA6IG9wZXJhdGlvblB1dER5bmFtaWNWYXJOb25TdHJpY3QsIE5vUmVzdWx0LCBzY29wZUdQ
UiwgdmFsdWVSZWdzLCBpZGVudGlmaWVyVUlEKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSksIG5v
ZGUtPmdldFB1dEluZm8oKSk7CisgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5pc1N0cmljdE1vZGVG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSA/IG9wZXJhdGlvblB1dER5bmFtaWNWYXJTdHJpY3Qg
OiBvcGVyYXRpb25QdXREeW5hbWljVmFyTm9uU3RyaWN0LCBOb1Jlc3VsdCwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIHNjb3BlR1BSLCB2YWx1ZVJlZ3MsIGlkZW50aWZpZXJVSUQobm9kZS0+
aWRlbnRpZmllck51bWJlcigpKSwgbm9kZS0+Z2V0UHV0SW5mbygpKTsKICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQpAQCAtMTEzMDQsNyArMTEzMDcs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QWNjZXNzb3JCeVZhbChOb2RlKiBu
b2RlKQogICAgIEdQUlJlZyBhY2Nlc3NvckdQUiA9IGFjY2Vzc29yLmdwcigpOwogCiAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgTm9SZXN1bHQsIGJh
c2VHUFIsIHN1YnNjcmlwdFJlZ3MsIG5vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpLCBhY2Nlc3Nv
ckdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIE5vUmVzdWx0LCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgc3Vic2NyaXB0UmVncywgbm9kZS0+YWNjZXNzb3JB
dHRyaWJ1dGVzKCksIGFjY2Vzc29yR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwog
CiAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0xMTQ4MSw3ICsxMTQ4NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdSZXBsYWNlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN0cmluZ1Byb3RvRnVuY1JlcGxhY2VSZWdFeHBFbXB0eVN0ciwgcmVzdWx0LmdwcigpLCBzdHJp
bmdHUFIsIHJlZ0V4cEdQUik7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwRW1wdHlTdHIsIHJlc3VsdC5ncHIoKSwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0cmluZ0dQUiwgcmVnRXhwR1BSKTsKICAgICAgICAg
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICAgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoc2FtcGxlKQpAQCAt
MTE1MDIsNyArMTE1MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nUmVw
bGFjZShOb2RlKiBub2RlKQogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQ
UkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwU3RyaW5nLCByZXN1bHQuZ3ByKCks
IHN0cmluZ0dQUiwgcmVnRXhwR1BSLCByZXBsYWNlR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlUmVnRXhwU3RyaW5nLCByZXN1bHQuZ3By
KCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdHJpbmdHUFIsIHJlZ0V4cEdQUiwgcmVw
bGFjZUdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgaWYgKHNhbXBsZSkKQEAgLTExNTI0
LDcgKzExNTI3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1JlcGxhY2Uo
Tm9kZSogbm9kZSkKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgR1BSRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyaW5nUHJv
dG9GdW5jUmVwbGFjZUdlbmVyaWMsIHJlc3VsdC5ncHIoKSwgc3RyaW5nUmVncywgc2VhcmNoUmVn
cywgcmVwbGFjZVJlZ3MpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyaW5nUHJvdG9G
dW5jUmVwbGFjZUdlbmVyaWMsIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIHN0cmluZ1JlZ3MsIHNlYXJjaFJlZ3MsIHJlcGxhY2VSZWdzKTsKICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICBp
ZiAoc2FtcGxlKQpAQCAtMTE3NDcsNyArMTE3NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRGVmaW5lRGF0YVByb3BlcnR5KE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZUNoaWxkcmVu
KG5vZGUpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nLCBOb1Jlc3VsdCwgYmFzZUdQUiwg
cHJvcGVydHlHUFIsIHZhbHVlUmVncywgYXR0cmlidXRlc0dQUik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nLCBOb1Jlc3VsdCwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZVJlZ3MsIGF0
dHJpYnV0ZXNHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0xMTc2NCw3ICsxMTc2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVEZWZpbmVEYXRhUHJvcGVydHkoTm9kZSogbm9kZSkKICAgICAgICAgdXNlQ2hpbGRy
ZW4obm9kZSk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHlTdHJpbmdJZGVudCwgTm9SZXN1bHQsIGJh
c2VHUFIsIGlkZW50R1BSLCB2YWx1ZVJlZ3MsIGF0dHJpYnV0ZXNHUFIpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eVN0cmluZ0lkZW50LCBOb1Jlc3Vs
dCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGlkZW50R1BSLCB2YWx1ZVJl
Z3MsIGF0dHJpYnV0ZXNHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0xMTc3Niw3ICsxMTc3OSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVEZWZpbmVEYXRhUHJvcGVydHkoTm9kZSogbm9kZSkKICAgICAgICAgdXNl
Q2hpbGRyZW4obm9kZSk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHlTeW1ib2wsIE5vUmVzdWx0LCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVSZWdzLCBhdHRyaWJ1dGVzR1BSKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHlTeW1ib2wsIE5vUmVzdWx0
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVl
UmVncywgYXR0cmlidXRlc0dQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTExNzg3LDcgKzExNzkwLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZURlZmluZURhdGFQcm9wZXJ0eShOb2RlKiBub2RlKQogICAgICAgICB1
c2VDaGlsZHJlbihub2RlKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eSwgTm9SZXN1bHQsIGJhc2VH
UFIsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBhdHRyaWJ1dGVzR1BSKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHksIE5vUmVzdWx0LCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGF0
dHJpYnV0ZXNHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0xMTgyOCw3ICsxMTgzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVEZWZpbmVBY2Nlc3NvclByb3BlcnR5KE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZUNo
aWxkcmVuKG5vZGUpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eVN0cmluZywgTm9SZXN1bHQs
IGJhc2VHUFIsIHByb3BlcnR5R1BSLCBnZXR0ZXJHUFIsIHNldHRlckdQUiwgYXR0cmlidXRlc0dQ
Uik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0
eVN0cmluZywgTm9SZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUiwgZ2V0dGVyR1BSLCBzZXR0ZXJHUFIsIGF0dHJpYnV0ZXNHUFIpOwogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMTg0
NSw3ICsxMTg0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEZWZpbmVBY2Nlc3Nv
clByb3BlcnR5KE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogCiAgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVm
aW5lQWNjZXNzb3JQcm9wZXJ0eVN0cmluZ0lkZW50LCBOb1Jlc3VsdCwgYmFzZUdQUiwgaWRlbnRH
UFIsIGdldHRlckdQUiwgc2V0dGVyR1BSLCBhdHRyaWJ1dGVzR1BSKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3RyaW5nSWRlbnQsIE5vUmVz
dWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgaWRlbnRHUFIsIGdldHRl
ckdQUiwgc2V0dGVyR1BSLCBhdHRyaWJ1dGVzR1BSKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTE4NTcsNyArMTE4NjAsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShOb2RlKiBu
b2RlKQogICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVy
dHlTeW1ib2wsIE5vUmVzdWx0LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgZ2V0dGVyR1BSLCBzZXR0
ZXJHUFIsIGF0dHJpYnV0ZXNHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
ZmluZUFjY2Vzc29yUHJvcGVydHlTeW1ib2wsIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIGdldHRlckdQUiwgc2V0dGVyR1BSLCBhdHRy
aWJ1dGVzR1BSKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMTE4NjgsNyArMTE4NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShOb2RlKiBub2RlKQogICAgICAgICB1c2VDaGls
ZHJlbihub2RlKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHksIE5vUmVzdWx0LCBiYXNlR1BS
LCBwcm9wZXJ0eVJlZ3MsIGdldHRlckdQUiwgc2V0dGVyR1BSLCBhdHRyaWJ1dGVzR1BSKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5LCBOb1Jl
c3VsdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncywg
Z2V0dGVyR1BSLCBzZXR0ZXJHUFIsIGF0dHJpYnV0ZXNHUFIpOwogICAgICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjA1Niw3ICsxMjA1OSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUaHJvdyhOb2RlKiBub2RlKQogICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOwogICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0RGRywgdmFsdWVSZWdzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93REZHLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgdmFsdWVSZWdzKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIG1faml0LmJy
ZWFrcG9pbnQoKTsKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTEyMDY4LDcgKzEyMDcxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRocm93U3RhdGljRXJyb3IoTm9kZSogbm9kZSkK
ICAgICBHUFJSZWcgbWVzc2FnZUdQUiA9IG1lc3NhZ2UuZ3ByKCk7CiAgICAgc3BlY3VsYXRlU3Ry
aW5nKG5vZGUtPmNoaWxkMSgpLCBtZXNzYWdlR1BSKTsKICAgICBmbHVzaFJlZ2lzdGVycygpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dTdGF0aWNFcnJvciwgbWVzc2FnZUdQUiwg
bm9kZS0+ZXJyb3JUeXBlKCkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dTdGF0
aWNFcnJvciwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG1lc3NhZ2VHUFIsIG5vZGUtPmVy
cm9yVHlwZSgpKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIG1faml0LmJyZWFr
cG9pbnQoKTsKICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTEyMDk1LDcgKzEyMDk4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eShOb2RlKiBub2RlKQog
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCBy
ZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHksIHJlc3VsdFJl
Z3MsIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25I
YXNHZW5lcmljUHJvcGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBiYXNlUmVncywgcHJvcGVydHlHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAg
ICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOwog
fQpAQCAtMTIxMDgsNyArMTIxMTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9J
bmRleFN0cmluZyhOb2RlKiBub2RlKQogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgR1BSRmx1
c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCByZXN1
bHRHUFIsIGluZGV4R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJp
bmcsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGluZGV4R1BSKTsKICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKIH0KQEAgLTEyMTcwLDcgKzEyMTczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5SWRXaXRoVGhpcyhOb2RlKiBub2RlKQogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG1faml0LmlzU3RyaWN0TW9kZUZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpID8gb3BlcmF0aW9uUHV0QnlJZFdpdGhUaGlzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlJZFdp
dGhUaGlzLAotICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZ3MsIHRoaXNSZWdzLCB2YWx1ZVJlZ3Ms
IGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSk7CisgICAgICAgIE5vUmVz
dWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIHRoaXNSZWdzLCB2YWx1
ZVJlZ3MsIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSk7CiAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMTIyNjAsNyAr
MTIyNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzU3RydWN0dXJlUHJvcGVy
dHkoTm9kZSogbm9kZSkKIAogICAgIGRvbmUubGluaygmbV9qaXQpOwogCi0gICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25I
YXNHZW5lcmljUHJvcGVydHksIHJlc3VsdFJlZ3MsIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUikpOwor
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhp
cywgb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIHByb3BlcnR5R1BSKSk7CiAgICAgYmxlc3NlZEJvb2xl
YW5SZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOwogfQogCkBAIC0xMjI3Myw3
ICsxMjI3Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm9wZXJ0eUVudW1l
cmF0b3IoTm9kZSogbm9kZSkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BS
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFByb3Bl
cnR5RW51bWVyYXRvckNlbGwsIHJlc3VsdEdQUiwgYmFzZUdQUik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMTIyODUsNyArMTIyODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFBy
b3BlcnR5RW51bWVyYXRvciwgcmVzdWx0R1BSLCBiYXNlUmVncyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWdzKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwog
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KQEAgLTEyNDA5LDkgKzEyNDEyLDkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0ckNhdChOb2RlKiBub2RlKQogCiAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIGlmIChub2RlLT5jaGlsZDMo
KSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQzLCByZXN1bHQuZ3ByKCks
IG9wMVJlZ3MsIG9wMlJlZ3MsIG9wM1JlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN0ckNhdDMsIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9w
MVJlZ3MsIG9wMlJlZ3MsIG9wM1JlZ3MpOwogICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TdHJDYXQyLCByZXN1bHQuZ3ByKCksIG9wMVJlZ3MsIG9wMlJlZ3MpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDIsIHJlc3VsdC5ncHIoKSwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIG9wMVJlZ3MsIG9wMlJlZ3MpOwogICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CkBAIC0x
MjQzOCw3ICsxMjQ0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1
ZmZlcihOb2RlKiBub2RlKQogCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+
KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKGFycmF5
LT50b0J1dHRlcmZseSgpKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwog
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCByZXN1bHQuZ3ByKCksIHN0cnVjdHVyZSwgYXJy
YXkpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3VsdC5ncHIoKSwgJnZtKCksIHN0
cnVjdHVyZSwgYXJyYXkpKTsKIAogICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5v
ZGUsIGluZGV4aW5nTW9kZSAmIElzQXJyYXksIGluZGV4aW5nTW9kZSk7CiAgICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTEyNDQ4LDcgKzEyNDUxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5QnVmZmVyKE5vZGUqIG5vZGUpCiAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCByZXN1bHQuZ3ByKCksIHN0
cnVjdHVyZSwgVHJ1c3RlZEltbVB0cihub2RlLT5jZWxsT3BlcmFuZCgpKSk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCAmdm0oKSwgc3Ry
dWN0dXJlLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpKTsKICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwpA
QCAtMTI0ODEsNyArMTI0ODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3QXJy
YXlXaXRoU2l6ZShOb2RlKiBub2RlKQogICAgIGJpZ0xlbmd0aC5saW5rKCZtX2ppdCk7CiAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIGRvbmUubGlu
aygmbV9qaXQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwg
cmVzdWx0R1BSLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIsIG51bGxwdHIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgc3RydWN0dXJlR1BSLCBzaXplR1BSLCBudWxscHRyKTsKICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0K
QEAgLTEyNTA0LDcgKzEyNTA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5
cGVkQXJyYXkoTm9kZSogbm9kZSkKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICBvcGVyYXRpb25OZXdUeXBlZEFy
cmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZShub2RlLT50eXBlZEFycmF5VHlwZSgpKSwKLSAgICAg
ICAgICAgIHJlc3VsdEdQUiwgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50bHkobm9kZS0+dHlwZWRBcnJheVR5
cGUoKSkpLCBhcmd1bWVudFJlZ3MpOworICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxP
YmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50bHkobm9kZS0+dHlwZWRBcnJheVR5
cGUoKSkpLCBhcmd1bWVudFJlZ3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwog
CiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTEyNTM0LDEyICsxMjUz
NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9UaGlzKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykp
KTsKICAgICBtX2ppdC5tb3ZlVmFsdWVSZWdzKHRoaXNWYWx1ZVJlZ3MsIHRlbXBSZWdzKTsKIAot
ICAgIEpfSklUT3BlcmF0aW9uX0VKIGZ1bmN0aW9uOworICAgIEpfSklUT3BlcmF0aW9uX0dKIGZ1
bmN0aW9uOwogICAgIGlmIChtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSkKICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7CiAgICAgZWxz
ZQogICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpczsKLSAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBmdW5jdGlvbiwgdGVtcFJlZ3Ms
IHRoaXNWYWx1ZVJlZ3MpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
c2xvd0Nhc2VzLCB0aGlzLCBmdW5jdGlvbiwgdGVtcFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCB0aGlzVmFsdWVSZWdzKSk7CiAKICAgICBqc1ZhbHVlUmVzdWx0KHRlbXBSZWdzLCBu
b2RlKTsKIH0KQEAgLTEyNTg3LDkgKzEyNTkwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdEtleXMoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3Q8SlNBcnJheT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKGFycmF5U3RydWN0dXJlKSwg
c2NyYXRjaEdQUiwgc3RydWN0dXJlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0J1dEFycmF5QnVmZmVy
Q2FzZXMpOwogCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
c2xvd0J1dEFycmF5QnVmZmVyQ2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCBy
ZXN1bHRHUFIsIGFycmF5U3RydWN0dXJlLCBzY3JhdGNoM0dQUikpOworICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dCdXRBcnJheUJ1ZmZlckNhc2VzLCB0
aGlzLCBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0R1BSLCAmdm0oKSwgYXJyYXlTdHJ1
Y3R1cmUsIHNjcmF0Y2gzR1BSKSk7CiAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk9iamVjdEtleXNPYmplY3Qs
IHJlc3VsdEdQUiwgb2JqZWN0R1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25PYmplY3RLZXlzT2JqZWN0
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvYmplY3RHUFIpKTsKIAog
ICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMjYwNCw3ICsxMjYwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RLZXlzKE5vZGUqIG5vZGUpCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAg
IEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PYmpl
Y3RLZXlzT2JqZWN0LCByZXN1bHRHUFIsIG9iamVjdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uT2JqZWN0S2V5c09iamVjdCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgb2JqZWN0R1BSKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
IAogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CkBAIC0xMjYxOSw3ICsxMjYy
Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RLZXlzKE5vZGUqIG5vZGUp
CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0
IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PYmplY3RLZXlzLCByZXN1bHRHUFIsIG9i
amVjdFJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk9iamVjdEtleXMsIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIG9iamVjdFJlZ3MpOwogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKQEAgLTEyNjQ1LDcgKzEyNjQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdENyZWF0ZShOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwog
ICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uT2JqZWN0Q3JlYXRlT2JqZWN0LCByZXN1bHRHUFIsIHByb3RvdHlwZUdQUik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT2JqZWN0Q3JlYXRlT2JqZWN0LCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBwcm90b3R5cGVHUFIpOwogICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogCiAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
QEAgLTEyNjYwLDcgKzEyNjYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dENyZWF0ZShOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBH
UFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT2JqZWN0
Q3JlYXRlLCByZXN1bHRHUFIsIHByb3RvdHlwZVJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk9iamVjdENyZWF0ZSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgcHJvdG90eXBlUmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAK
ICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwpAQCAtMTI3MTIsNyArMTI3MTUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlVGhpcyhOb2RlKiBub2RlKQog
ICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIGlubGluZUNh
cGFjaXR5R1BSKTsKICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uodm0oKSk7CiAKLSAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkNyZWF0
ZVRoaXMsIHJlc3VsdEdQUiwgY2FsbGVlR1BSLCBub2RlLT5pbmxpbmVDYXBhY2l0eSgpKSk7Cisg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBj
YWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKIAogICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKIH0KQEAgLTEyNzYxLDcgKzEyNzY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUNyZWF0ZVByb21pc2UoTm9kZSogbm9kZSkKICAgICBtX2ppdC5zdG9yZVRy
dXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocmVzdWx0R1BS
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNQcm9taXNlOjpGaWVsZDo6UmVhY3Rpb25zT3JSZXN1bHQpKSkp
OwogICAgIG1faml0Lm11dGF0b3JGZW5jZShtX2ppdC52bSgpKTsKIAotICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG5vZGUtPmlzSW50ZXJuYWxQ
cm9taXNlKCkgPyBvcGVyYXRpb25DcmVhdGVJbnRlcm5hbFByb21pc2UgOiBvcGVyYXRpb25DcmVh
dGVQcm9taXNlLCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0KSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG5vZGUtPmlzSW50ZXJuYWxQcm9taXNl
KCkgPyBvcGVyYXRpb25DcmVhdGVJbnRlcm5hbFByb21pc2UgOiBvcGVyYXRpb25DcmVhdGVQcm9t
aXNlLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1faml0LmdyYXBoKCks
IGdsb2JhbE9iamVjdCksIGNhbGxlZUdQUikpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQpAQCAtMTI4MDcsNyArMTI4MTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdChOb2RlKiBub2RlLCBPcGVyYXRpb24gb3Bl
cgogICAgICAgICBtX2ppdC5zdG9yZVRydXN0ZWRWYWx1ZShpbml0aWFsVmFsdWVzW2luZGV4XSwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CiAgICAgbV9qaXQubXV0YXRvckZl
bmNlKG1faml0LnZtKCkpOwogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9qaXQuZ3JhcGgoKSwgZ2xvYmFsT2JqZWN0KSkpOworICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgp
LCBnbG9iYWxPYmplY3QpLCBjYWxsZWVHUFIpKTsKIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKIH0KQEAgLTEyODQ2LDcgKzEyODQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld09iamVjdChOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
dm0oKSk7CiAgICAgfQogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJlKSk7
CisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBv
cGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwgJnZtKCksIHN0cnVjdHVyZSkpOwogCiAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtMTI4NzMsNyArMTI4NzYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3UHJvbWlzZShOb2RlKiBub2RlKQogICAgIG1f
aml0LnN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIENDYWxsSGVscGVyczo6QWRkcmVz
cyhyZXN1bHRHUFIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb21pc2U6OkZpZWxkOjpSZWFjdGlvbnNP
clJlc3VsdCkpKSk7CiAgICAgbV9qaXQubXV0YXRvckZlbmNlKG1faml0LnZtKCkpOwogCi0gICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgbm9kZS0+
aXNJbnRlcm5hbFByb21pc2UoKSA/IG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlzZSA6IG9wZXJh
dGlvbk5ld1Byb21pc2UsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7Cisg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgbm9k
ZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlzZSA6IG9w
ZXJhdGlvbk5ld1Byb21pc2UsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cigmdm0oKSksIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSkpOwogCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OwogfQpAQCAtMTI5MDAsNyArMTI5MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TmV3SW50ZXJuYWxGaWVsZE9iamVjdChOb2RlKiBub2RlLCBPcGVyYXRpb24gb3BlcmF0aQogICAg
ICAgICBtX2ppdC5zdG9yZVRydXN0ZWRWYWx1ZShpbml0aWFsVmFsdWVzW2luZGV4XSwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+Ojpv
ZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CiAgICAgbV9qaXQubXV0YXRvckZlbmNlKG1f
aml0LnZtKCkpOwogCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbiwgcmVzdWx0R1BSLCAmdm0oKSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
KSk7CiAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBAIC0xMjkzMiw3ICsx
MjkzNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb1ByaW1pdGl2ZShOb2RlKiBu
b2RlKQogICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwogICAgIG1faml0Lm1vdmVW
YWx1ZVJlZ3MoYXJndW1lbnRSZWdzLCByZXN1bHRSZWdzKTsKIAotICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0
aXZlLCByZXN1bHRSZWdzLCBhcmd1bWVudFJlZ3MpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwobm90UHJpbWl0aXZlLCB0aGlzLCBvcGVyYXRpb25Ub1ByaW1pdGl2ZSwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50UmVncykpOwog
CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CkBAIC0xMjk5OCw3ICsxMzAwMSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTZXRBZGQoTm9kZSogbm9kZSkKICAgICBmbHVzaFJlZ2lz
dGVycygpOwogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0QWRkLCByZXN1bHRHUFIsIHNldEdQUiwga2V5UmVncywgaGFzaEdQUik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRBZGQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIHNldEdQUiwga2V5UmVncywgaGFzaEdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CkBAIC0xMzAyMCw3ICsx
MzAyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXBTZXQoTm9kZSogbm9kZSkK
ICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0
aGlzKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTWFwU2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5UmVncywgdmFsdWVS
ZWdzLCBoYXNoR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk1hcFNldCwgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbWFwR1BSLCBrZXlSZWdzLCB2YWx1ZVJl
Z3MsIGhhc2hHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtMTMxMzcsNyArMTMxNDAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlV2Vha1NldEFkZChOb2RlKiBub2RlKQogICAgIHNwZWN1bGF0ZU9i
amVjdChub2RlLT5jaGlsZDIoKSwga2V5R1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25XZWFrU2V0QWRkLCBzZXRHUFIsIGtleUdQUiwgaGFz
aEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25XZWFrU2V0QWRkLCAmdm0oKSwgc2V0
R1BSLCBrZXlHUFIsIGhhc2hHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAg
bm9SZXN1bHQobm9kZSk7CiB9CkBAIC0xMzE1OCw3ICsxMzE2MSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVXZWFrTWFwU2V0KE5vZGUqIG5vZGUpCiAgICAgc3BlY3VsYXRlT2JqZWN0
KG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSksIGtleUdQUik7CiAKICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV2Vha01hcFNldCwgbWFw
R1BSLCBrZXlHUFIsIHZhbHVlUmVncywgaGFzaEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25XZWFrTWFwU2V0LCAmdm0oKSwgbWFwR1BSLCBrZXlHUFIsIHZhbHVlUmVncywgaGFzaEdQ
Uik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0K
QEAgLTEzMjU3LDcgKzEzMjYwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFBy
b3RvdHlwZU9mKE5vZGUqIG5vZGUpCiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChub2RlLT5jaGls
ZDEoKSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvdG90eXBlT2ZPYmplY3QsIHJlc3VsdFJlZ3MsIHZh
bHVlR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRQcm90b3R5cGVPZk9i
amVjdCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlR1BSKTsK
ICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRSZWdzLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTMyNzAsNyArMTMyNzMsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlT2YoTm9kZSogbm9kZSkK
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAKICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRQ
cm90b3R5cGVPZiwgcmVzdWx0UmVncywgdmFsdWVSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25HZXRQcm90b3R5cGVPZiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIHZhbHVlUmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgIHJldHVybjsK
QEAgLTEzMzk3LDYgKzEzNDAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9j
YXRlTmV3QXJyYXlXaXRoU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKIAogICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlh
YmxlU2l6ZVNsb3dQYXRoR2VuZXJhdG9yPigKICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsCisgICAgICAgIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksCiAgICAgICAgIHN0cnVjdHVyZSwK
ICAgICAgICAgc2hvdWxkQ29udmVydExhcmdlU2l6ZVRvQXJyYXlTdG9yYWdlID8gbV9qaXQuZ3Jh
cGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSA6IHN0cnVj
dHVyZSwKICAgICAgICAgc2l6ZUdQUiwgc3RvcmFnZUdQUikpOwpAQCAtMTM0ODgsNyArMTM0OTIs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUq
IG5vZGUpCiAgICAgfQogICAgIH0KIAotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCBy
ZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BSLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihub2RlLT5p
bnRlcm5hbE1ldGhvZFR5cGUoKSkpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgaW5kZXhHUFIs
IHN0YXRpY19jYXN0PGludDMyX3Q+KG5vZGUtPmludGVybmFsTWV0aG9kVHlwZSgpKSkpOwogCiAg
ICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQpAQCAtMTM1NDcs
NyArMTM1NTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RGlyZWN0UG5hbWUo
Tm9kZSogbm9kZSkKIAogICAgIGRvbmUubGluaygmbV9qaXQpOwogCi0gICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbENl
bGwsIHJlc3VsdFJlZ3MsIGJhc2VHUFIsIENDYWxsSGVscGVyczo6Q2VsbFZhbHVlKHByb3BlcnR5
R1BSKSkpOworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgYmFzZUdQUiwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHlHUFIp
KSk7CiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQpAQCAtMTM2MzYs
NyArMTM2NDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHJvZmlsZVR5cGUoTm9k
ZSogbm9kZSkKICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoMUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaDJHUFIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zm
c2V0KCkpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjbGVhckxvZyA9IG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2gxR1BSLCBUcnVzdGVkSW1tUHRyKGNh
Y2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxsKGNsZWFyTG9nLCB0aGlzLCBvcGVyYXRpb25Qcm9j
ZXNzVHlwZVByb2ZpbGVyTG9nREZHLCBOb1Jlc3VsdCkpOworICAgICAgICBzbG93UGF0aENhbGwo
Y2xlYXJMb2csIHRoaXMsIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2dERkcsIE5vUmVz
dWx0LCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSkpOwogCiAgICAganVtcFRvRW5kLmxpbmsoJm1faml0
KTsKIApAQCAtMTM2NjUsNyArMTM2NjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQ
dXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEpTVmFsdQogICAg
IHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKIAogICAgIGF1dG8gc2xvd1Bh
dGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSwgTm9SZXN1bHQsIGdlbi5zdHViSW5mbygpLCB2YWx1ZVJlZ3MsCisgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgTm9SZXN1bHQsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNv
ZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlUmVncywKICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDZWxsVmFsdWUoYmFzZUdQUiksIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikp
OwogCiAgICAgbV9qaXQuYWRkUHV0QnlJZChnZW4sIHNsb3dQYXRoLmdldCgpKTsKQEAgLTEzNjkx
LDcgKzEzNjk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXIKICAgICAgICAgYXJnMi51c2Uo
KTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKGhl
bHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFSZWdzLCBhcmcyUmVncyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGFyZzFSZWdzLCBhcmcyUmVncyk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CiAKICAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0xMzcxMiw3ICsxMzcxNiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUq
IG5vZGUsIE1hY3JvQXNzZW1ibGVyCiAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFSZWdz
LnBheWxvYWRHUFIoKSwgYXJnMlJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRHUFIpOwogCiAgICAg
aWYgKCFpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8ICFpc0tub3duSW50
ZWdlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIs
IGFyZzFSZWdzLCBhcmcyUmVncykpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUmVncywgYXJnMlJlZ3MpKTsKIAogICAgIHVuYmxl
c3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOwogfQpAQCAtMTM3NDksNyArMTM3NTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUs
CiAgICAgICAgIGFyZzIudXNlKCk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxUmVncywgYXJn
MlJlZ3MpOworICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUmVncywgYXJnMlJlZ3MpOwogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgICAgIGJyYW5jaFRlc3QzMihjYWxsUmVz
dWx0Q29uZGl0aW9uLCByZXN1bHRHUFIsIHRha2VuKTsKQEAgLTEzNzczLDcgKzEzNzc3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBu
b2RlLCBOb2RlKiBicmFuY2hOb2RlLAogICAgICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQp
OwogCiAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxUmVn
cywgYXJnMlJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMVJlZ3MsIGFyZzJSZWdz
KTsKICAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKQEAgLTEzODEzLDcgKzEzODE3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUJpZ0ludEVxdWFsaXR5KE5vZGUqIG5vZGUpCiAgICAgbm90RXF1
YWxDYXNlLmxpbmsoJm1faml0KTsKIAogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCBy
ZXN1bHRHUFIsIGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAK
ICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTEzOTc0LDExICsxMzk3OCwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9kZSogbm9kZSkKICAgICBzd2l0Y2ggKG51
bU9wR1BScykgewogICAgIGNhc2UgMjoKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKAotICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk1ha2VSb3Bl
MiwgcmVzdWx0R1BSLCBvcEdQUnNbMF0sIG9wR1BSc1sxXSkpOworICAgICAgICAgICAgc2xvd1Bh
dGgsIHRoaXMsIG9wZXJhdGlvbk1ha2VSb3BlMiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgb3BHUFJzWzBdLCBvcEdQUnNbMV0pKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSAzOgogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoCi0gICAg
ICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTWFrZVJvcGUzLCByZXN1bHRHUFIsIG9w
R1BSc1swXSwgb3BHUFJzWzFdLCBvcEdQUnNbMl0pKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25NYWtlUm9wZTMsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIG9wR1BSc1swXSwgb3BHUFJzWzFdLCBvcEdQUnNbMl0pKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTEzOTkyLDExICsxMzk5NiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJv
cGUoTm9kZSogbm9kZSkKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAg
IHN3aXRjaCAobnVtT3BHUFJzKSB7CiAgICAgY2FzZSAyOgotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk1ha2VSb3BlMiwgcmVzdWx0R1BSLCBvcEdQUnNbMF0sIG9wR1BSc1sxXSk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFrZVJvcGUyLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcEdQUnNbMF0sIG9wR1BSc1sxXSk7CiAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMzoKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYWtlUm9wZTMsIHJlc3VsdEdQUiwgb3BHUFJzWzBd
LCBvcEdQUnNbMV0sIG9wR1BSc1syXSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TWFrZVJvcGUzLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcEdQUnNb
MF0sIG9wR1BSc1sxXSwgb3BHUFJzWzJdKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCBhZDVkYmZlNzlkZDI3NjQ0ZDZiYzM2ZmVm
Y2ZhNTllZTQ0MTliMDgyLi4yYjcxZDMyZTlkMTYzNTI0NjJhYjEzMWYyYzE0YmIzYWNiNGYwZmUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBA
IC05NjYsMjMgKzk2NiwyNCBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAKICN1bmRlZiBGSVJT
VF9BUkdVTUVOVF9UWVBFCiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oVl9KSVRPcGVyYXRpb25fRUNiIG9wZXJhdGlv
biwgdm9pZCogcG9pbnRlcikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oVl9KSVRPcGVyYXRpb25fQ2Igb3BlcmF0aW9u
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzPFZfSklUT3BlcmF0aW9uX0VDYj4oVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CisgICAgICAg
IC8vIERvIG5vdCByZWdpc3RlciBDb2RlQmxvY2sqIGFzIGEgd2Vhay1wb2ludGVyLgorICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50czxWX0pJVE9wZXJhdGlvbl9DYj4oVHJ1c3RlZEltbVB0cihz
dGF0aWNfY2FzdDx2b2lkKj4oY29kZUJsb2NrKSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvbik7CiAgICAgfQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aW9uKFpfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0KQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbihaX0pJVE9wZXJhdGlvbl9HIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzPFpfSklUT3BlcmF0aW9uX0U+KCk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzPFpf
SklUT3BlcmF0aW9uX0c+KFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2Jh
bE9iamVjdCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAgICAgCi0j
aWYgIWRlZmluZWQoTkRFQlVHKSAmJiAhQ1BVKEFSTV9USFVNQjIpICYmICFDUFUoTUlQUykKICAg
ICB2b2lkIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKQogICAgIHsKKyNpZiAhZGVmaW5lZChOREVC
VUcpICYmICFDUFUoQVJNX1RIVU1CMikgJiYgIUNQVShNSVBTKQogICAgICAgICAvLyBXZSdyZSBh
Ym91dCB0byBjYWxsIG91dCB0byBhICJuYXRpdmUiIGhlbHBlciBmdW5jdGlvbi4gVGhlIGhlbHBl
cgotICAgICAgICAvLyBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBzZXQgdG9wQ2FsbEZyYW1lIGl0
c2VsZiB3aXRoIHRoZSBFeGVjU3RhdGUKKyAgICAgICAgLy8gZnVuY3Rpb24gaXMgZXhwZWN0ZWQg
dG8gc2V0IHRvcENhbGxGcmFtZSBpdHNlbGYgd2l0aCB0aGUgQ2FsbEZyYW1lCiAgICAgICAgIC8v
IHRoYXQgaXMgcGFzc2VkIHRvIGl0LgogICAgICAgICAvLwogICAgICAgICAvLyBXZSBleHBsaWNp
dGx5IHRyYXNoIHRvcENhbGxGcmFtZSBoZXJlIHNvIHRoYXQgd2UnbGwga25vdyBpZiBzb21lIG9m
CkBAIC05OTIsMTAgKzk5Myw5IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKHZvaWQqKSAvIDQ7IGkrKykKICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDB4YmFkYmVlZiksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCZ2bSgpLnRvcENhbGxGcmFtZSkgKyBpICogNCk7Ci0gICAgfQotI2Vsc2UKLSAg
ICB2b2lkIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKSB7IH0KICNlbmRpZgorICAgICAgICBtX2pp
dC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSgpKTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRo
b2RzIGFkZCBjYWxsIGluc3RydWN0aW9ucywgb3B0aW9uYWxseSBzZXR0aW5nIHJlc3VsdHMsIGFu
ZCBvcHRpb25hbGx5IHJvbGxpbmcgYmFjayB0aGUgY2FsbCBmcmFtZSBvbiBhbiBleGNlcHRpb24u
CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMTIyMywxMyArMTIyMywxMyBAQCBjbGFzcyBTcGVj
dWxhdGl2ZUpJVCB7CiAgICAgCiAgICAgdm9pZCBlbWl0U3dpdGNoSW50SnVtcChTd2l0Y2hEYXRh
KiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCk7CiAgICAgdm9pZCBlbWl0U3dpdGNoSW1t
KE5vZGUqLCBTd2l0Y2hEYXRhKik7Ci0gICAgdm9pZCBlbWl0U3dpdGNoQ2hhclN0cmluZ0p1bXAo
U3dpdGNoRGF0YSosIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gpOworICAgIHZvaWQgZW1p
dFN3aXRjaENoYXJTdHJpbmdKdW1wKE5vZGUqLCBTd2l0Y2hEYXRhKiwgR1BSUmVnIHZhbHVlLCBH
UFJSZWcgc2NyYXRjaCk7CiAgICAgdm9pZCBlbWl0U3dpdGNoQ2hhcihOb2RlKiwgU3dpdGNoRGF0
YSopOwogICAgIHZvaWQgZW1pdEJpbmFyeVN3aXRjaFN0cmluZ1JlY3Vyc2UoCiAgICAgICAgIFN3
aXRjaERhdGEqLCBjb25zdCBWZWN0b3I8U3RyaW5nU3dpdGNoQ2FzZT4mLCB1bnNpZ25lZCBudW1D
aGVja2VkLAogICAgICAgICB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kLCBHUFJSZWcgYnVm
ZmVyLCBHUFJSZWcgbGVuZ3RoLCBHUFJSZWcgdGVtcCwKICAgICAgICAgdW5zaWduZWQgYWxyZWFk
eUNoZWNrZWRMZW5ndGgsIGJvb2wgY2hlY2tlZEV4YWN0TGVuZ3RoKTsKLSAgICB2b2lkIGVtaXRT
d2l0Y2hTdHJpbmdPblN0cmluZyhTd2l0Y2hEYXRhKiwgR1BSUmVnIHN0cmluZyk7CisgICAgdm9p
ZCBlbWl0U3dpdGNoU3RyaW5nT25TdHJpbmcoTm9kZSosIFN3aXRjaERhdGEqLCBHUFJSZWcgc3Ry
aW5nKTsKICAgICB2b2lkIGVtaXRTd2l0Y2hTdHJpbmcoTm9kZSosIFN3aXRjaERhdGEqKTsKICAg
ICB2b2lkIGVtaXRTd2l0Y2goTm9kZSopOwogICAgIApAQCAtMTMzMyw3ICsxMzMzLDcgQEAgY2xh
c3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lIFJlcGF0Y2hpbmdGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUmVwYXRjaGluZ0Z1bmN0aW9u
PgogICAgIHZvaWQgY29tcGlsZU1hdGhJQyhOb2RlKiwgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiosIGJvb2wgbmVlZHNTY3JhdGNoR1BSUmVnLCBSZXBhdGNoaW5nRnVuY3Rpb24sIE5vblJlcGF0
Y2hpbmdGdW5jdGlvbik7CiAKLSAgICB2b2lkIGNvbXBpbGVBcml0aERvdWJsZVVuYXJ5T3AoTm9k
ZSosIGRvdWJsZSAoKmRvdWJsZUZ1bmN0aW9uKShkb3VibGUpLCBkb3VibGUgKCpvcGVyYXRpb24p
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSk7CisgICAgdm9pZCBjb21waWxlQXJpdGhEb3Vi
bGVVbmFyeU9wKE5vZGUqLCBkb3VibGUgKCpkb3VibGVGdW5jdGlvbikoZG91YmxlKSwgZG91Ymxl
ICgqb3BlcmF0aW9uKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgdm9p
ZCBjb21waWxlVmFsdWVBZGQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVZhbHVlU3ViKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVBcml0aEFkZChOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAwMjg0N2I5
NjY1ODE1Nzk2MDAwYmI5NzQzMWIxN2NiMWFmNmI0ZDhhLi40ZmU3YzUyODA3YmQ3ODVlZTI4ZTMy
N2EwYzYzYmZhMGU4ZWRjOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTIxMywxMyArMjEzLDEzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoCiAgICAgaWYgKGJhc2VUYWdHUFJPck5vbmUg
PT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1
bmN0aW9uKHR5cGUpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSKSwgZ2VuLnN0dWJJbmZvKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgZ2VuLnN0dWJJbmZvKCksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShi
YXNlUGF5bG9hZEdQUiksCiAgICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1i
ZXIpKTsKICAgICB9IGVsc2UgewogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1
bmN0aW9uKHR5cGUpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJhc2VUYWdHUFJPck5v
bmUsIGJhc2VQYXlsb2FkR1BSKSwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7Cisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJh
c2VUYWdHUFJPck5vbmUsIGJhc2VQYXlsb2FkR1BSKSwgaWRlbnRpZmllclVJRChpZGVudGlmaWVy
TnVtYmVyKSk7CiAgICAgfQogCiAgICAgbV9qaXQuYWRkR2V0QnlJZChnZW4sIHNsb3dQYXRoLmdl
dCgpKTsKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRC
eUlkV2l0aFRoaXMoCiAgICAgaWYgKGJhc2VUYWdHUFJPck5vbmUgPT0gSW52YWxpZEdQUlJlZyAm
JiB0aGlzVGFnR1BSID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aENhbGwoCiAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5SWRX
aXRoVGhpc09wdGltaXplLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSKSwgZ2VuLnN0dWJJbmZvKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgZ2VuLnN0dWJJbmZvKCksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1
ZShiYXNlUGF5bG9hZEdQUiksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZSh0
aGlzUGF5bG9hZEdQUiksCiAgICAgICAgICAgICBpZGVudGlmaWVyVUlEKGlkZW50aWZpZXJOdW1i
ZXIpKTsKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRC
eUlkV2l0aFRoaXMoCiAgICAgICAgIAogICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgK
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUsCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxv
YWRHUFIpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVRhZ0dQUk9yTm9uZSwgYmFz
ZVBheWxvYWRHUFIpLCBKU1ZhbHVlUmVncyh0aGlzVGFnR1BSLCB0aGlzUGF5bG9hZEdQUiksIGlk
ZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JOb25lLCBiYXNlUGF5
bG9hZEdQUiksIEpTVmFsdWVSZWdzKHRoaXNUYWdHUFIsIHRoaXNQYXlsb2FkR1BSKSwgaWRlbnRp
ZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgfQogCiAgICAgbV9qaXQuYWRkR2V0QnlJ
ZFdpdGhUaGlzKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwpAQCAtNDE2LDcgKzQxNiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlKiBub2Rl
LCBOb2RlKiBicmFuY2hOb2RlCiAgICAgICAgIGJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWws
IGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtl
bik7CiAgICAgICAgIAogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXls
b2FkR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFD
ZWxsLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJlc3Vs
dFBheWxvYWRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUGF5bG9hZEdQUiwg
YXJnMlBheWxvYWRHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAKQEAgLTQyNSw3ICs0MjUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwg
Tm9kZSogYnJhbmNoTm9kZQogICAgICAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aHMgZm9yIHR3
b0NlbGxzLCBudW1iZXIgZXRjLgogCiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJl
c3VsdFBheWxvYWRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcSwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVJlZ3MsIGFyZzJSZWdzKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdFBheWxvYWRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxUmVncywgYXJnMlJlZ3MpOwogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KCk7CiAKQEAgLTQ2Miw3ICs0NjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZU5vblBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgICAg
IG5vdEVxdWFsQ2FzZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAogICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxUGF5bG9h
ZEdQUiwgYXJnMlBheWxvYWRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcUNlbGwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpOwogICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAKQEAg
LTQ3Myw3ICs0NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBl
ZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAgICAgICAgIC8vIEZJWE1F
OiBBZGQgZmFzdCBwYXRocy4KIAogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFSZWdzLCBhcmcyUmVncyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1bHRQYXlsb2FkR1BSLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMVJlZ3MsIGFyZzJSZWdzKTsKICAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogICAgICAgICAKQEAgLTU4NCw2ICs1ODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlKQogICAgIEdQUlJlZyBjYWxsZWVQYXlsb2FkR1BSID0gSW52YWxpZEdQ
UlJlZzsKICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKICAgICAKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IG51
bGxwdHI7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBudWxs
cHRyOwogICAgIGlmIChpc0RpcmVjdCkgewpAQCAtNjI1LDcgKzYyNiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBlbWl0U2V0dXBWYXJh
cmdzRnJhbWVGYXN0Q2FzZSh2bSgpLCBtX2ppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJB
cmdPZmZzZXQsIHNsb3dDYXNlKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CiAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFy
Z3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dGb3JWYXJhcmdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxP
YmplY3QpKTsKICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgICAg
ICBtX2ppdC5hYm9ydFdpdGhSZWFzb24oREZHVmFyYXJnc1Rocm93aW5nUGF0aERpZE5vdFRocm93
KTsKICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAtNjU3LDcgKzY1OCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAKICAgICAgICAgICAgIC8v
IFJpZ2h0IG5vdywgYXJndW1lbnRzIGlzIGluIGFyZ3VtZW50c1RhZ0dQUi9hcmd1bWVudHNQYXls
b2FkR1BSIGFuZCB0aGUgcmVnaXN0ZXIgZmlsZSBpcwogICAgICAgICAgICAgLy8gZmx1c2hlZC4K
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncywg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzKGFyZ3VtZW50c1RhZ0dQUiwgYXJn
dW1lbnRzUGF5bG9hZEdQUiksIG51bVVzZWRTdGFja1Nsb3RzLCBkYXRhLT5maXJzdFZhckFyZ09m
ZnNldCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZh
cmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgSlNWYWx1ZVJlZ3MoYXJndW1lbnRzVGFnR1BSLCBhcmd1bWVudHNQYXlsb2FkR1BSKSwgbnVt
VXNlZFN0YWNrU2xvdHMsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE5vdyB3
ZSBoYXZlIHRoZSBhcmd1bWVudCBjb3VudCBvZiB0aGUgY2FsbGVlIGZyYW1lLCBidXQgd2UndmUg
bG9zdCB0aGUgYXJndW1lbnRzIG9wZXJhbmQuCkBAIC02NjcsNyArNjY4LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGVtaXRTZXRWYXJh
cmdzRnJhbWUobV9qaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBmYWxzZSwgc2NyYXRjaEdQ
UjEsIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIo
LShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCA2ICogc2l6ZW9mKHZvaWQqKSkpKSwgc2NyYXRjaEdQUjEsIEpJ
VENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSwgSlNWYWx1ZVJlZ3MoYXJndW1lbnRzVGFnR1BSLCBh
cmd1bWVudHNQYXlsb2FkR1BSKSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0dXBW
YXJhcmdzRnJhbWUsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgc2NyYXRjaEdQUjEsIEpTVmFsdWVSZWdzKGFyZ3VtZW50c1RhZ0dQUiwgYXJndW1l
bnRzUGF5bG9hZEdQUiksIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICAg
ICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICAgICAgfQpAQCAtODA0LDEwICs4MDUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8gbWFrZSByb29t
IGZvcjoKICAgICAgICAgLy8gLSBUaGUgY2FsbGVyIGZyYW1lIGFuZCBQQyBvZiBhIGNhbGwgdG8g
b3BlcmF0aW9uQ2FsbEV2YWwuCiAgICAgICAgIC8vIC0gUG90ZW50aWFsbHkgdHdvIGFyZ3VtZW50
cyBvbiB0aGUgc3RhY2suCi0gICAgICAgIHVuc2lnbmVkIHJlcXVpcmVkQnl0ZXMgPSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykgKyBzaXplb2YoRXhlY1N0YXRlKikgKiAyOworICAgICAgICB1bnNp
Z25lZCByZXF1aXJlZEJ5dGVzID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgc2l6ZW9mKENh
bGxGcmFtZSopICogMjsKICAgICAgICAgcmVxdWlyZWRCeXRlcyA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHJlcXVpcmVkQnl0ZXMpOwogICAgICAgICBt
X2ppdC5zdWJQdHIoVHJ1c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMpLCBKSVRDb21waWxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlw
ZShvcGVyYXRpb25DYWxsRXZhbCk+KEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEV2YWwpPihUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAg
ICAgIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChv
cGVyYXRpb25DYWxsRXZhbCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBAIC04
MTcsNyArODE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkK
ICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgSklUQ29t
cGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKS53aXRoT2Zmc2V0
KFBheWxvYWRPZmZzZXQpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkud2l0aE9m
ZnNldChUYWdPZmZzZXQpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIG1faml0LmVtaXREdW1i
VmlydHVhbENhbGwodm0oKSwgaW5mbyk7CisgICAgICAgIG1faml0LmVtaXREdW1iVmlydHVhbENh
bGwodm0oKSwgZ2xvYmFsT2JqZWN0LCBpbmZvKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOwogICAgICAgICBzZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CkBAIC05MjEsNiAr
OTIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICB9
CiAKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2Jh
bE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKICAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2Fs
bCA9IG1faml0Lm5lYXJDYWxsKCk7CiAKICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTE3ODMs
MTIgKzE3ODUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNQdXRC
eVZhbChOb2RlKiBub2RlLCBCYXNlT3BlcmFuZFR5cGUmIGJhc2UKICAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICBzbG93Q2FzZSwg
dGhpcywKICAgICAgICAgICAgICAgICBtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJp
Y3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAot
ICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgSlNWYWx1ZVJl
Z3ModmFsdWVUYWcsIHZhbHVlUGF5bG9hZFJlZykpKTsKKyAgICAgICAgICAgICAgICBOb1Jlc3Vs
dCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBKU1Zh
bHVlUmVncyh2YWx1ZVRhZywgdmFsdWVQYXlsb2FkUmVnKSkpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICAg
ICAgICAgIHNsb3dDYXNlLCB0aGlzLAogICAgICAgICAgICAgICAgIG1faml0LmlzU3RyaWN0TW9k
ZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJh
eUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJp
Y3QsCi0gICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBKU1Zh
bHVlUmVncyh2YWx1ZVRhZywgdmFsdWVQYXlsb2FkUmVnKSkpOworICAgICAgICAgICAgICAgIE5v
UmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IEpTVmFsdWVSZWdzKHZhbHVlVGFnLCB2YWx1ZVBheWxvYWRSZWcpKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTIyNzIsNyArMjI3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICBK
U1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIGJhc2VHUFIsIHByb3Bl
cnR5UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQ2Vs
bCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3Bl
cnR5UmVncyk7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwpAQCAtMjM2
MSw3ICsyMzYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRU
YWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcp
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3Vs
dFBheWxvYWRSZWcsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDE2LDcgKzI0MTgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAg
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmpl
Y3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVz
dWx0UGF5bG9hZFJlZyksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJl
Zywgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0NzQsNyArMjQ3Niw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2Fk
UmVnKSwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1
bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksCiAgICAgICAgICAgICAg
ICAgICAgIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKQEAgLTI1NzAsOSArMjU3
Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
bV9qaXQuaXNTdHJpY3RNb2RlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVyYXRpb25Q
dXRCeVZhbERpcmVjdENlbGxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxOb25T
dHJpY3QsIGJhc2VHUFIsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzKTsKKyAgICAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG1faml0LmlzU3RyaWN0TW9kZUZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3RDZWxsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQ
UiwgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuaXNTdHJpY3RNb2RlRm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykgPyBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZh
bENlbGxOb25TdHJpY3QsIGJhc2VHUFIsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzKTsKKyAgICAg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmlzU3RyaWN0TW9kZUZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpID8gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0IDogb3BlcmF0aW9uUHV0
QnlWYWxDZWxsTm9uU3RyaWN0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwg
cHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0yNjg0
LDEyICsyNjg2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAog
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuaXNTdHJpY3RNb2RlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBv
cGVyYXRpb25QdXRCeVZhbERpcmVjdEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9u
UHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgSlNWYWx1ZVJlZ3ModmFs
dWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5v
UmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IEpTVmFsdWVSZWdzKHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuaXNTdHJpY3RNb2RlRm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDog
b3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgSlNWYWx1ZVJlZ3Mo
dmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcsIEpTVmFsdWVSZWdzKHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yNzI0LDcgKzI3MjYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSA/IG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRoaXNTdHJpY3QgOiBvcGVy
YXRpb25QdXRCeVZhbFdpdGhUaGlzLAotICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWdzLCB0
aGlzUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MpOworICAgICAgICAgICAgTm9SZXN1bHQs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywgdGhpc1JlZ3MsIHByb3BlcnR5
UmVncywgdmFsdWVSZWdzKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAg
ICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTI4MjQsNyArMjgyNiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aCwKLSAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiks
IGJhc2VHUFIpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIs
IHZhbHVlUGF5bG9hZEdQUiksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVUYWdHUFIsIHZh
bHVlUGF5bG9hZEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI4NjIsNyArMjg2
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
ICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5k
UmVjb3Zlckxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdH
UFIsIHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBiYXNlR1BSKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTI5MDEsNyArMjkwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMs
IG9wZXJhdGlvbkFycmF5UG9wLAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgYmFzZUdQUikpOworICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VHUFIpKTsKIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2
YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzA1Myw3ICszMDU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAvLyBJbnN0ZWFkIG9mIHRoZSBzbG93IHBhdGggZ2VuZXJhdG9yLCB3ZSBl
bWl0IGNhbGxPcGVyYXRpb24gaGVyZS4KICAgICAgICAgaWYgKCEobV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CiAgICAgICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
b051bWJlciwgcmVzdWx0UmVncywgYXJndW1lbnRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVG9OdW1iZXIsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBhcmd1bWVudFJlZ3MpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
dE51bWJlcjsKQEAgLTMwNjcsNyArMzA2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgbm90TnVtYmVyLmxpbmsoJm1faml0KTsKICAg
ICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFJlZ3MpOwotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub051bWJlciwgcmVzdWx0UmVncywgYXJndW1lbnRS
ZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9OdW1iZXIsIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmd1bWVudFJlZ3MpOwogICAgICAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKIApAQCAtMzYyMCw3ICszNjIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBH
UFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTnVtYmVy
SXNJbnRlZ2VyLCByZXN1bHRHUFIsIGlucHV0UmVncyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTnVtYmVySXNJbnRlZ2VyLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBpbnB1dFJlZ3MpOwogICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM2NjMsNyArMzY2NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgaW5wdXRSZWdzKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBpbnB1dFJlZ3MpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAg
ICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKQEAgLTM2OTQs
OSArMzY5Niw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE1hcE9iamVjdFVzZSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSlNNYXBGaW5kQnVja2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5UmVncywgaGFzaEdQUik7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbWFwR1BSLCBrZXlSZWdzLCBoYXNo
R1BSKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25K
U1NldEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlSZWdzLCBoYXNoR1BSKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0LCByZXN1bHRH
UFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIp
OwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBjZWxsUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzkzNyw3ICszOTM5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0ZW1w
R1BSKTsKICAgICAgICAgICAgIGtleVJlZ3MgPSBKU1ZhbHVlUmVncyh0ZW1wR1BSLCBrZXlSZWdz
LnBheWxvYWRHUFIoKSk7CiAgICAgICAgIH0KLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYXNPd25Qcm9wZXJ0eSwgcmVzdWx0R1BSLCBvYmplY3RHUFIsIGtleVJlZ3MpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc093blByb3BlcnR5LCByZXN1bHRHUFIsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvYmplY3RHUFIsIGtleVJlZ3MpOwogICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CmluZGV4IDQ3YzE4MmE1ODk2OWRlY2MyZDVlOWYzODdhYThjYWFkOGY0ZjRlYjMuLjA2NGRlNzFl
MDkyZTlmNTI0MTI5NjVlMWNlOTNiYjNhZTY1ODY1YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMTgyLDcgKzE4Miw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24odHlwZSksCiAgICAgICAgIHNw
aWxsTW9kZSwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOZWVkZWQsCi0gICAgICAg
IHJlc3VsdEdQUiwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQoaWRlbnRp
Zmllck51bWJlcikpOworICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIGlkZW50aWZpZXJVSUQoaWRlbnRpZmllck51bWJlcikpOwogICAg
IAogICAgIG1faml0LmFkZEdldEJ5SWQoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CiAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWRXaXRoVGhpcyhDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIEdQUlJlZyBiYXNlR1BSCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJh
dG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwKICAgICAgICAgRG9udFNwaWxsLCBFeGNl
cHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05lZWRlZCwKLSAgICAgICAgcmVzdWx0R1BSLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVy
TnVtYmVyKSk7CisgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgdGhpc0dQUiwgaWRlbnRpZmllclVJRChpZGVudGlmaWVyTnVtYmVyKSk7
CiAgICAgCiAgICAgbV9qaXQuYWRkR2V0QnlJZFdpdGhUaGlzKGdlbiwgc2xvd1BhdGguZ2V0KCkp
OwogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKQEAgLTM1Niw3
ICszNTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3Ry
aWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZQogICAgICAgICBicmFuY2g2NChKSVRD
b21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFr
ZW4pOwogICAgICAgICAKICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BS
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCBy
ZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIGFyZzFHUFIsIGFyZzJHUFIpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgIApAQCAtMzgzLDcg
KzM4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJp
Y3RFcShOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlCiAgICAgICAgIHJpZ2h0RG91YmxlLmxp
bmsoJm1faml0KTsKICAgICAgICAgCiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJl
c3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
KTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgCkBAIC00MTksNyAr
NDE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0
cmljdEVxKE5vZGUqIG5vZGUsIGJvb2wgaW52ZXJ0KQogICAgICAgICBub3RFcXVhbENhc2UubGlu
aygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFD
ZWxsLCByZXN1bHRHUFIsIGFyZzFSZWdzLCBhcmcyUmVncyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYXJnMVJlZ3MsIGFyZzJSZWdzKTsKICAgICAgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycygpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICAK
QEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgYm9vbCBpbnZlcnQpCiAKICAgICBtX2ppdC5t
b3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tNjQoIWludmVydCksIHJlc3VsdEdQUik7CiAKLSAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGhDYXNlcywgdGhpcywg
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1bHRHUFIsIGFyZzFSZWdzLCBhcmcyUmVncykp
OworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aENhc2VzLCB0
aGlzLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGFyZzFSZWdzLCBhcmcyUmVncykpOwogCiAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CiAKQEAgLTU0Myw2ICs1NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlKQogICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIENh
bGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwogICAgIAorICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gbnVsbHB0cjsKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IG51bGxwdHI7CiAgICAgaWYg
KGlzRGlyZWN0KSB7CkBAIC01ODQsNyArNTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RD
YXNlKHZtKCksIG1faml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBz
Y3JhdGNoR1BSMywgaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xv
d0Nhc2UpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyk7CisgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCkpOwogICAg
ICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgICAgIG1faml0LmFib3J0
V2l0aFJlYXNvbihERkdWYXJhcmdzVGhyb3dpbmdQYXRoRGlkTm90VGhyb3cpOwogICAgICAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC02MTMsNyArNjE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgaXNGbHVzaGVkKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAv
LyBSaWdodCBub3csIGFyZ3VtZW50cyBpcyBpbiBhcmd1bWVudHNHUFIgYW5kIHRoZSByZWdpc3Rl
ciBmaWxlIGlzIGZsdXNoZWQuCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNp
emVGcmFtZUZvclZhcmFyZ3MsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhcmd1bWVudHNHUFIs
IG51bVVzZWRTdGFja1Nsb3RzLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCk7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRzR1BSLCBu
dW1Vc2VkU3RhY2tTbG90cywgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpOwogICAgICAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTm93
IHdlIGhhdmUgdGhlIGFyZ3VtZW50IGNvdW50IG9mIHRoZSBjYWxsZWUgZnJhbWUsIGJ1dCB3ZSd2
ZSBsb3N0IHRoZSBhcmd1bWVudHMgb3BlcmFuZC4KQEAgLTYyMyw3ICs2MjQsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAgICAgZW1pdFNldFZh
cmFyZ3NGcmFtZShtX2ppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCBzY3JhdGNo
R1BSMSwgc2NyYXRjaEdQUjEpOwogICAgICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0z
MigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCBzY3JhdGNoR1BSMSwg
SklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIxLCBhcmd1bWVudHNHUFIsIGRhdGEtPmZpcnN0VmFy
QXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHNjcmF0Y2hHUFIxLCBhcmd1bWVudHNHUFIs
IGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAg
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICAgICAgbV9qaXQuYWRkUHRy
KFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgfQpA
QCAtNzU1LDEwICs3NTYsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZSkKICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8gbWFrZSByb29tIGZvcjoKICAgICAgICAg
Ly8gLSBUaGUgY2FsbGVyIGZyYW1lIGFuZCBQQyBvZiBhIGNhbGwgdG8gb3BlcmF0aW9uQ2FsbEV2
YWwuCiAgICAgICAgIC8vIC0gUG90ZW50aWFsbHkgdHdvIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2su
Ci0gICAgICAgIHVuc2lnbmVkIHJlcXVpcmVkQnl0ZXMgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykgKyBzaXplb2YoRXhlY1N0YXRlKikgKiAyOworICAgICAgICB1bnNpZ25lZCByZXF1aXJlZEJ5
dGVzID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgc2l6ZW9mKENhbGxGcmFtZSopICogMjsK
ICAgICAgICAgcmVxdWlyZWRCeXRlcyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIHJlcXVpcmVkQnl0ZXMpOwogICAgICAgICBtX2ppdC5zdWJQdHIoVHJ1
c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMpLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25DYWxs
RXZhbCk+KEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uQ2FsbEV2YWwpPihUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIHByZXBhcmVGb3JF
eHRlcm5hbENhbGwoKTsKICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb25DYWxsRXZh
bCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CkBAIC03NjcsNyArNzY4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgcGFydCB3aGVyZSB3ZSBtZWFudCB0byBtYWtlIGEgbm9ybWFsIGNhbGwuIE9vcHMu
CiAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVxdWlyZWRCeXRlcyksIEpJVENv
bXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIG1faml0LmxvYWQ2NChKSVRD
b21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFsQ2FsbCh2bSgpLCBjYWxsTGlu
a0luZm8pOworICAgICAgICBtX2ppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKHZtKCksIGdsb2JhbE9i
amVjdCwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwogICAgICAgICBzZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CkBAIC04NjIsNiArODYzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAv
LyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gcmVnVDIKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1Qz
KTsgLy8gSlNHbG9iYWxPYmplY3QgbmVlZHMgdG8gYmUgaW4gcmVnVDMKICAgICBKSVRDb21waWxl
cjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAKICAgICBkb25lLmxpbmsoJm1f
aml0KTsKQEAgLTI0MTgsNyArMjQyMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
ICAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdC5ncHIoKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRC
eVZhbCwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwg
cHJvcGVydHlHUFIpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwpA
QCAtMjQ3OSw3ICsyNDgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIo
KSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjUzNSw3ICsyNTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VS
ZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjU4Nyw3ICsyNTg5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAog
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2Jq
ZWN0SW50LAotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3Bl
cnR5UmVnKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjY2NSw5ICsyNjY3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBhcmczLmdwcigpOwogICAg
ICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFB1dEJ5VmFsRGlyZWN0KQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuaXNT
dHJpY3RNb2RlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0LCBhcmcxR1BSLCBh
cmcyR1BSLCBhcmczR1BSKTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0Lmlz
U3RyaWN0TW9kZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpID8gb3BlcmF0aW9uUHV0QnlWYWxE
aXJlY3RTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdCwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIsIGFyZzNHUFIpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuaXNTdHJpY3RNb2Rl
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0LCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsKKyAg
ICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmlzU3RyaWN0TW9kZUZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdCwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJH
UFIsIGFyZzNHUFIpOwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0yNzUyLDcgKzI3NTQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAg
ICAgICAgIG1faml0LmlzU3RyaWN0TW9kZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpCiAgICAg
ICAgICAgICAgICAgICAgICAgICA/IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3Bl
cmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICA6
IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RC
ZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNOb25TdHJpY3QpLAotICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywg
cHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVn
KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC0yODM2LDcgKzI4MzgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0Lmlz
U3RyaWN0TW9kZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpCiAgICAgICAgICAgICAgICAgICAg
ICAgICA/IChub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxE
aXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNTdHJpY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IChub2RlLT5vcCgpID09
IFB1dEJ5VmFsRGlyZWN0ID8gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5k
c05vblN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qp
LAotICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZh
bHVlUmVnKSk7CisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7CkBAIC0yODk4LDMzICsyOTAwLDM0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUjsKIAogICAgICAgICBhdXRv
IGNhbGxTbG93UGF0aCA9IFsmXSAoKSB7CisgICAgICAgICAgICBhdXRvIGdsb2JhbE9iamVjdElt
bVB0ciA9IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpOwogICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEF0b21pY3NBZGQ6Ci0gICAgICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BdG9taWNzQWRkLCByZXN1bHRHUFIsIGJhc2VHUFIs
IGluZGV4R1BSLCBhcmdHUFJzWzBdKTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkF0b21pY3NBZGQsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0SW1tUHRyLCBiYXNlR1BS
LCBpbmRleEdQUiwgYXJnR1BSc1swXSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIEF0b21pY3NBbmQ6Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25BdG9taWNzQW5kLCByZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BSLCBhcmdHUFJzWzBd
KTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkF0b21pY3NBbmQsIHJl
c3VsdEdQUiwgZ2xvYmFsT2JqZWN0SW1tUHRyLCBiYXNlR1BSLCBpbmRleEdQUiwgYXJnR1BSc1sw
XSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEF0b21pY3NDb21w
YXJlRXhjaGFuZ2U6Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BdG9t
aWNzQ29tcGFyZUV4Y2hhbmdlLCByZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BSLCBhcmdHUFJz
WzBdLCBhcmdHUFJzWzFdKTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkF0b21pY3NDb21wYXJlRXhjaGFuZ2UsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0SW1tUHRyLCBi
YXNlR1BSLCBpbmRleEdQUiwgYXJnR1BSc1swXSwgYXJnR1BSc1sxXSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEF0b21pY3NFeGNoYW5nZToKLSAgICAgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkF0b21pY3NFeGNoYW5nZSwgcmVzdWx0R1BSLCBi
YXNlR1BSLCBpbmRleEdQUiwgYXJnR1BSc1swXSk7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25BdG9taWNzRXhjaGFuZ2UsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0SW1t
UHRyLCBiYXNlR1BSLCBpbmRleEdQUiwgYXJnR1BSc1swXSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIEF0b21pY3NMb2FkOgotICAgICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQXRvbWljc0xvYWQsIHJlc3VsdEdQUiwgYmFzZUdQUiwgaW5kZXhH
UFIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQXRvbWljc0xvYWQs
IHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0SW1tUHRyLCBiYXNlR1BSLCBpbmRleEdQUik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEF0b21pY3NPcjoKLSAgICAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkF0b21pY3NPciwgcmVzdWx0R1BSLCBiYXNl
R1BSLCBpbmRleEdQUiwgYXJnR1BSc1swXSk7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25BdG9taWNzT3IsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0SW1tUHRyLCBiYXNl
R1BSLCBpbmRleEdQUiwgYXJnR1BSc1swXSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkF0b21pY3NTdG9yZSwgcmVzdWx0R1BSLCBiYXNlR1BSLCBpbmRleEdQUiwgYXJn
R1BSc1swXSk7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BdG9taWNz
U3RvcmUsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0SW1tUHRyLCBiYXNlR1BSLCBpbmRleEdQUiwg
YXJnR1BSc1swXSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEF0
b21pY3NTdWI6Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BdG9taWNz
U3ViLCByZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BSLCBhcmdHUFJzWzBdKTsKKyAgICAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkF0b21pY3NTdWIsIHJlc3VsdEdQUiwgZ2xv
YmFsT2JqZWN0SW1tUHRyLCBiYXNlR1BSLCBpbmRleEdQUiwgYXJnR1BSc1swXSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEF0b21pY3NYb3I6Ci0gICAgICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25BdG9taWNzWG9yLCByZXN1bHRHUFIsIGJhc2VH
UFIsIGluZGV4R1BSLCBhcmdHUFJzWzBdKTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkF0b21pY3NYb3IsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0SW1tUHRyLCBiYXNl
R1BSLCBpbmRleEdQUiwgYXJnR1BSc1swXSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0zMDk1LDcgKzMwOTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQXRvbWljc0lzTG9ja0ZyZWUsIHJlc3VsdEdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkF0b21pY3NJc0xvY2tGcmVlLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBvcGVyYW5kR1BSKTsKICAgICAgICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMyMzEsNyArMzIzNCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkp
LCB2YWx1ZUdQUikpOwogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhp
cywgb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoLCB2YWx1ZUdQUiwgYmFzZUdQUikp
OworICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3BB
bmRSZWNvdmVyTGVuZ3RoLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VHUFIpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2UgY2FuJ3Qga25vdyBmb3Ig
c3VyZSB0aGF0IHRoZSByZXN1bHQgaXMgYW4gaW50IGJlY2F1c2Ugb2YgdGhlIHNsb3cgcGF0aHMu
IDotLwogICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbm9kZSk7CkBAIC0zMjY0
LDcgKzMyNjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIAogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIpKTsKIAogICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dCh2YWx1ZUdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMzODUsNyArMzM4OCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8g
SW5zdGVhZCBvZiB0aGUgc2xvdyBwYXRoIGdlbmVyYXRvciwgd2UgZW1pdCBjYWxsT3BlcmF0aW9u
IGhlcmUuCiAgICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlICYgU3BlY0J5dGVjb2RlTnVtYmVyKSkgewogICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9OdW1iZXIsIHJlc3VsdEdQ
UiwgYXJndW1lbnRHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub051
bWJlciwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJndW1lbnRHUFIp
OwogICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5j
aElmTm90TnVtYmVyKGFyZ3VtZW50R1BSKTsKQEAgLTMzOTQsNyArMzM5Nyw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICAgICAgbm90TnVtYmVy
LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvTnVtYmVyLCByZXN1
bHRHUFIsIGFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VG9OdW1iZXIsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZ3VtZW50
R1BSKTsKICAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoKTsKICAgICAgICAgICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKQEAgLTM4MjEsNyArMzgyNCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSA/
IG9wZXJhdGlvblB1dEJ5VmFsV2l0aFRoaXNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbFdpdGhU
aGlzLCBOb1Jlc3VsdCwgYmFzZUdQUiwgdGhpc1ZhbHVlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVH
UFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG1faml0LmlzU3RyaWN0TW9kZUZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpID8gb3BlcmF0aW9uUHV0QnlWYWxXaXRoVGhpc1N0cmljdCA6IG9wZXJh
dGlvblB1dEJ5VmFsV2l0aFRoaXMsIE5vUmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgYmFzZUdQUiwgdGhpc1ZhbHVlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIpOwogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAt
NDExMiw3ICs0MTE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogCiAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIEpTVmFsdWVSZWdzKGlucHV0R1BSKSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIEpTVmFsdWVSZWdzKGlucHV0R1BSKSk7CiAgICAgICAg
ICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOwogCkBAIC00MTU1LDcgKzQxNTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MoaW5wdXRHUFIp
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBKU1ZhbHVlUmVncyhpbnB1dEdQUikpOwogICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CiAKQEAgLTQyNzMsOSArNDI3Niw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIHNsb3dQYXRoQ2FzZXMubGluaygmbV9qaXQpOwogICAg
ICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoaW5kZXhHUFIpOwogICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCi0gICAgICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwg
bWFwR1BSLCBrZXlHUFIsIGhhc2hHUFIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQUik7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQsIHJlc3Vs
dEdQUiwgbWFwR1BSLCBrZXlHUFIsIGhhc2hHUFIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQUik7CiAgICAgICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwogICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAgLTQ1NjksNyArNDU3
Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAg
ICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJz
KHJlc3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzT3duUHJvcGVy
dHksIHJlc3VsdEdQUiwgb2JqZWN0R1BSLCBrZXlHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkhhc093blByb3BlcnR5LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBvYmplY3RHUFIsIGtleUdQUik7CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMoKTsKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtNTA4Miw3ICs1MDg1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgY2FsbFRpZXJVcC5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIHNpbGVudFNwaWxsKHNh
dmVQbGFucyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRyaWdnZXJUaWVyVXBOb3dJbkxv
b3AsIFRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKHRyaWdnZXJUaWVyVXBOb3dJbkxvb3AsICZ2bSgpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJ
bmRleCkpOwogICAgICAgICAgICAgc2lsZW50RmlsbChzYXZlUGxhbnMpOwogCiAgICAgICAgICAg
ICBtX2ppdC5qdW1wKCkubGlua1RvKHRvTmV4dE9wZXJhdGlvbiwgJm1faml0KTsKQEAgLTUwOTcs
NyArNTEwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJm1faml0LmppdENvZGUo
KS0+dGllclVwQ291bnRlci5tX2NvdW50ZXIpKTsKICAgICAgICAgCiAgICAgICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKHRy
aWdnZXJUaWVyVXBOb3cpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHRyaWdnZXJUaWVyVXBOb3cs
ICZ2bSgpKTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogICAgICAgICAKICAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC01MTM1LDcgKzUxMzgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBvdmVyZmxvd2VkQ291
bnRlci5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIHNpbGVudFNwaWxsKHNhdmVQbGFucyk7
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRyaWdnZXJPU1JFbnRyeU5vdywgdGVtcEdQUiwg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
dHJpZ2dlck9TUkVudHJ5Tm93LCB0ZW1wR1BSLCAmdm0oKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
SW5kZXgpKTsKIAogICAgICAgICAgICAgaWYgKHNhdmVQbGFucy5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQ
UikubGlua1RvKHRvTmV4dE9wZXJhdGlvbiwgJm1faml0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZHluYmVu
Y2guY3BwCmluZGV4IGY5ZWVjNDhjOTc2NDlhY2M3YmUwMGZkMGFiOTM4OTIyYTJiNjVmODUuLjE3
YzRmODQ4Y2ZlZDg5YzBmODE4YTZlYTgwODZhNGZjZDkzOWZlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2R5bmJlbmNoLmNwcApAQCAtOTYsNyArOTYsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9CiAgICAgICAg
ICAgICBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBqc051bGwoKSkpOwotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgICAgICBJZGVudGlmaWVyIGlkZW50RiA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJmIik7CiAgICAgICAgIElkZW50aWZpZXIgaWRlbnRHID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImciKTsKQEAgLTEwOCwyMCArMTA3LDIwIEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBK
U0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5
U2xvdDo6UHV0QnlJZCk7Ci0gICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50
RiwganNOdW1iZXIoNDIpLCBzbG90KTsKKyAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZ2xv
YmFsT2JqZWN0LCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAg
ICAgewogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0
UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKLSAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhl
YywgaWRlbnRHLCBqc051bWJlcig0MyksIHNsb3QpOworICAgICAgICAgICAgb2JqZWN0LnB1dElu
bGluZShnbG9iYWxPYmplY3QsIGlkZW50RywganNOdW1iZXIoNDMpLCBzbG90KTsKICAgICAgICAg
fQogICAgICAgICBiZW5jaG1hcmtJbXBsKAogICAgICAgICAgICAgIk5vbiBTdHJpY3QgRHluYW1p
YyBHZXQgQnkgSWQiLAogICAgICAgICAgICAgMTAwMDAwMCwKICAgICAgICAgICAgIFsmXSAodW5z
aWduZWQgaXRlcmF0aW9uQ291bnQpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBpdGVyYXRpb25Db3VudDsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IG9iamVjdC5nZXQoZXhlYywgaWRlbnRGKTsKKyAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBvYmplY3QuZ2V0KGdsb2JhbE9iamVjdCwgaWRlbnRGKTsKICAgICAgICAg
ICAgICAgICAgICAgQ0hFQ0socmVzdWx0ID09IGpzTnVtYmVyKDQyKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG9iamVjdC5nZXQoZXhlYywgaWRlbnRHKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gb2JqZWN0LmdldChnbG9iYWxPYmplY3QsIGlkZW50Ryk7CiAgICAgICAg
ICAgICAgICAgICAgIENIRUNLKHJlc3VsdCA9PSBqc051bWJlcig0MykpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0pOwpAQCAtMTMwLDExICsxMjksMTEgQEAgaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVh
dGUodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgIHsKICAgICAgICAgICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0g
ICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoNDIpLCBz
bG90KTsKKyAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpZGVudEYs
IGpzTnVtYmVyKDQyKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAgICAgewogICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRC
eUlkKTsKLSAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRHLCBqc051bWJl
cig0MyksIHNsb3QpOworICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShnbG9iYWxPYmplY3Qs
IGlkZW50RywganNOdW1iZXIoNDMpLCBzbG90KTsKICAgICAgICAgfQogICAgICAgICBiZW5jaG1h
cmtJbXBsKAogICAgICAgICAgICAgIk5vbiBTdHJpY3QgRHluYW1pYyBQdXQgQnkgSWQgUmVwbGFj
ZSIsCkBAIC0xNDMsMTEgKzE0MiwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTsp
IHsKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBq
c051bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW5s
aW5lKGdsb2JhbE9iamVjdCwgaWRlbnRGLCBqc051bWJlcihpKSwgc2xvdCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQ
dXRCeUlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywg
aWRlbnRHLCBqc051bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QucHV0SW5saW5lKGdsb2JhbE9iamVjdCwgaWRlbnRHLCBqc051bWJlcihpKSwgc2xvdCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsK
QEAgLTE2MSwxMSArMTYwLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUo
dm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3Bl
cnR5U2xvdDo6UHV0QnlJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW5s
aW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0LnB1dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50RiwganNOdW1iZXIoaSks
IHNsb3QpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2Us
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50RywganNO
dW1iZXIoaSksIHNsb3QpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSk7CkBAIC0xNzQsMjAgKzE3MywyMCBAQCBpbnQgbWFpbihpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCiAgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSh2
bSwgb2JqZWN0U3RydWN0dXJlKTsKICAgICAgICAgewogICAgICAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7Ci0gICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4
ZWMsIGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKKyAgICAgICAgICAgIG9iamVjdC5wdXRJ
bmxpbmUoZ2xvYmFsT2JqZWN0LCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CiAgICAgICAg
IH0KICAgICAgICAgewogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBm
YWxzZSk7Ci0gICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1i
ZXIoNDMpLCBzbG90KTsKKyAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0
LCBpZGVudEcsIGpzTnVtYmVyKDQzKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAgICAgYmVuY2ht
YXJrSW1wbCgKICAgICAgICAgICAgICJOb24gU3RyaWN0IER5bmFtaWMgR2V0IEJ5IElkIFdpdGgg
RHluYW1pYyBTdG9yZSBDb250ZXh0IiwKICAgICAgICAgICAgIDEwMDAwMDAsCiAgICAgICAgICAg
ICBbJl0gKHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSBvYmplY3QuZ2V0KGV4ZWMsIGlkZW50Rik7CisgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gb2JqZWN0LmdldChnbG9iYWxPYmplY3QsIGlkZW50Rik7
CiAgICAgICAgICAgICAgICAgICAgIENIRUNLKHJlc3VsdCA9PSBqc051bWJlcig0MikpOwotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmplY3QuZ2V0KGV4ZWMsIGlkZW50Ryk7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCBpZGVudEcp
OwogICAgICAgICAgICAgICAgICAgICBDSEVDSyhyZXN1bHQgPT0ganNOdW1iZXIoNDMpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKQEAgLTE5NiwxMSArMTk1LDExIEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAgb2JqZWN0ID0gSlNGaW5hbE9i
amVjdDo6Y3JlYXRlKHZtLCBvYmplY3RTdHJ1Y3R1cmUpOwogICAgICAgICB7CiAgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKLSAgICAgICAgICAgIG9iamVj
dC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJlcig0MiksIHNsb3QpOworICAgICAgICAg
ICAgb2JqZWN0LnB1dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50RiwganNOdW1iZXIoNDIpLCBz
bG90KTsKICAgICAgICAgfQogICAgICAgICB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChvYmplY3QsIGZhbHNlKTsKLSAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywg
aWRlbnRHLCBqc051bWJlcig0MyksIHNsb3QpOworICAgICAgICAgICAgb2JqZWN0LnB1dElubGlu
ZShnbG9iYWxPYmplY3QsIGlkZW50RywganNOdW1iZXIoNDMpLCBzbG90KTsKICAgICAgICAgfQog
ICAgICAgICBiZW5jaG1hcmtJbXBsKAogICAgICAgICAgICAgIk5vbiBTdHJpY3QgRHluYW1pYyBQ
dXQgQnkgSWQgUmVwbGFjZSBXaXRoIER5bmFtaWMgU3RvcmUgQ29udGV4dCIsCkBAIC0yMDksMTEg
KzIwOCwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qo
b2JqZWN0LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5l
KGV4ZWMsIGlkZW50RiwganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LnB1dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50RiwganNOdW1iZXIoaSksIHNs
b3QpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVjLCBpZGVudEcsIGpz
TnVtYmVyKGkpLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxp
bmUoZ2xvYmFsT2JqZWN0LCBpZGVudEcsIGpzTnVtYmVyKGkpLCBzbG90KTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwpAQCAtMjI3LDEx
ICsyMjYsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSh2bSwgb2JqZWN0
U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoaSksIHNsb3Qp
OworICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShnbG9iYWxPYmplY3Qs
IGlkZW50RiwganNOdW1iZXIoaSksIHNsb3QpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KG9iamVjdCwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1
dElubGluZShleGVjLCBpZGVudEcsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpZGVudEcsIGpzTnVtYmVy
KGkpLCBzbG90KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKaW5k
ZXggNDYzNWNjOTZmOTEwOTFmNzNmMDhkMWY3NTJiMDQ3ZDEwNTNiZmI0Ny4uNGQ0YjFlYjZmZDM3
MDQxMmE5NGNjNzE4ZjRhZTI1ZDI3NWQ0MjY0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCkBAIC0xMzQsMTIgKzEzNCwxMiBAQCB2b2lkIGNvbXBpbGUoU3RhdGUm
IHN0YXRlLCBTYWZlcG9pbnQ6OlJlc3VsdCYgc2FmZXBvaW50UmVzdWx0KQogICAgICpzdGF0ZS5l
eGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVsKCk7CiAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7Ci0gICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAg
aml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogICAgIGppdC5hZGRMaW5rVGFzaygKICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRp
b25IYW5kbGVyKSk7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7CiAg
ICAgICAgIH0pOwogCiAgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyID0gbWFr
ZVVuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVu
Y3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMR2VuZXJhdGVkRnVuY3Rpb24u
aAppbmRleCAwMWRlMzk4MDkwZmE3MWRiODE1MDEzNmJmMDI3NGU5YjgzNDdiNzA3Li45OTQ3MjQ0
YThlMmYyYzg4YTliNDQ5NWZiYTEyMTlkYjIzMDg2ODZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExHZW5lcmF0ZWRGdW5jdGlvbi5oCkBAIC0zMiw3ICszMiw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotLy8gUG9pbnRzIHRvIGEgZnVuY3Rp
b24gb2YgcHJvdG90eXBlOiBFbmNvZGVkSlNWYWx1ZSAoKikoRXhlY1N0YXRlKikuCisvLyBQb2lu
dHMgdG8gYSBmdW5jdGlvbiBvZiBwcm90b3R5cGU6IEVuY29kZWRKU1ZhbHVlICgqKShKU0dsb2Jh
bE9iamVjdCopLgogdXNpbmcgR2VuZXJhdGVkRnVuY3Rpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxK
U0VudHJ5UHRyVGFnPjsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGluay5jcHAKaW5kZXggOTVkYjY5NjFlOGU5MDc3MGNkNmU1NTY3MzAyMmI0
NDc2M2I1ODA2NS4uZDQ4NzMxOGYyOWZlMzYxYzY3YWE4NTg5MWNhOTEyMDk4ZTZlNTYxMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCkBAIC0xMzksMTQgKzEzOSwxNCBAQCB2
b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJhbWUpOwogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKIAog
ICAgICAgICAgICAgYXV0byBub0V4Y2VwdGlvbiA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
OkdyZWF0ZXJUaGFuT3JFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxP
cGVyYXRpb24odm0pOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb29rdXBF
eGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFn
KTsKICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKICAgICAgICAg
ICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBsaW5r
KFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUNoZWNrLCBGdW5jdGlvblB0cjxP
cGVyYXRpb25QdHJUYWc+KGNvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29u
c3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKSk7Ci0gICAgICAgICAg
ICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZy
YW1lLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJG
cm9tQ2FsbGVyRnJhbWUpKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwog
ICAgICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHI8
SklUVGh1bmtQdHJUYWc+KHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgp
KSk7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIHN0YXRlLmdl
bmVyYXRlZEZ1bmN0aW9uKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGEzYjg0ZDYzNzk4MmI1NGNmZmJhMTAzNjkwYTYz
ZmIyOTFiNTFkYzcuLjA1NmM5MWZiYzY4YWU4OWQ3ZjExMmZhNmJjYmNhZTYyMjdkMzZjMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTI2
MCw3ICsyNjAsMTAgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgICAgICBhdXRvIHByZU9y
ZGVyID0gbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCk7CiAKKyAgICAgICAgVk0qIHZtID0gJnRo
aXMtPnZtKCk7CisKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5mcmFtZVBvaW50ZXIoKTsK
KyAgICAgICAgbV92bVZhbHVlID0gbV9vdXQuY29uc3RJbnRQdHIodm0pOwogICAgICAgICBtX251
bWJlclRhZyA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnKTsKICAgICAgICAg
bV9ub3RDZWxsTWFzayA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwog
CkBAIC0yNzMsOCArMjc2LDYgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgLy8gdGhh
dCB3b3VsZCBjYXVzZSBpdCB0byBhbHdheXMgZ2V0IGNvbGxlY3RlZC4KICAgICAgICAgbV9vdXQu
c3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0cl90Pihjb2RlQmxv
Y2soKSkpLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwogCi0gICAgICAg
IFZNKiB2bSA9ICZ0aGlzLT52bSgpOwotCiAgICAgICAgIC8vIFN0YWNrIE92ZXJmbG93IENoZWNr
LgogICAgICAgICB1bnNpZ25lZCBleGl0RnJhbWVTaXplID0gbV9ncmFwaC5yZXF1aXJlZFJlZ2lz
dGVyQ291bnRGb3JFeGl0KCkgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWJzb2x1dGVBZGRyZXNzIGFkZHJlc3NPZlN0YWNrTGltaXQodm0tPmFkZHJlc3NPZlNv
ZnRTdGFja0xpbWl0KCkpOwpAQCAtMzE0LDE5ICszMTUsMTkgQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAgICAgICAgICAgICAg
ICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0t
PnRvcEVudHJ5RnJhbWUpOwogCi0gICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICAgICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9j
aygpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKSksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJh
dGlvbigqdm0pOwogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgdGhyb3dD
YWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKIAogICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwotICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnByZXBhcmVDYWxsT3BlcmF0aW9uKCp2bSk7CiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlv
blB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVy
KCp2bSk7CiAKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAg
ICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHRocm93Q2FsbCwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcikpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhsb29rdXBFeGNlcHRpb25I
YW5kbGVyQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9KTsKQEAgLTIwNTIsOSArMjA1Myw5IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQ7CiAgICAgICAgIGlmIChtX25vZGUtPm9w
KCkgPT0gVG9PYmplY3QpIHsKICAgICAgICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAg
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25Ub09iamVj
dCwgbV9jYWxsRnJhbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHZhbHVlLCBtX291dC5j
b25zdEludFB0cihtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCldKSkpOworICAgICAgICAgICAgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50
NjQsIG9wZXJhdGlvblRvT2JqZWN0LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCB2YWx1ZSwg
bV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmll
ck51bWJlcigpXSkpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uQ2FsbE9iamVjdENvbnN0cnVjdG9y
LCBtX2NhbGxGcmFtZSwgZnJvemVuUG9pbnRlcihtX25vZGUtPmNlbGxPcGVyYW5kKCkpLCB2YWx1
ZSkpOworICAgICAgICAgICAgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbkNhbGxPYmplY3RDb25zdHJ1Y3RvciwgZnJvemVuUG9pbnRlcihtX25vZGUtPmNl
bGxPcGVyYW5kKCkpLCB2YWx1ZSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0y
MDYzLDYgKzIwNjQsOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgIAogICAgIHZvaWQgY29t
cGlsZVRvVGhpcygpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworCiAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIAogICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsK
QEAgLTIwODEsMTMgKzIwODQsMTIgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAg
IHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CiAgICAgICAgIAogICAg
ICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgSl9K
SVRPcGVyYXRpb25fRUogZnVuY3Rpb247CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0dKIGZ1bmN0
aW9uOwogICAgICAgICBpZiAobV9ncmFwaC5pc1N0cmljdE1vZGVGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpKQogICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzOwot
ICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAg
ICAgICAgdm1DYWxsKEludDY0LCBmdW5jdGlvbiwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0
LCBmdW5jdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgdmFsdWUpKTsKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0yMDk2LDExICsyMDk4LDEzIEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAKICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZCgpCiAgICAgeworICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChCaWdJbnRVc2UpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0Jp
Z0ludChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0Jp
Z0ludChtX25vZGUtPmNoaWxkMigpKTsKIAotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZt
Q2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25BZGRCaWdJbnQsIG1fY2FsbEZyYW1lLCBsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBl
KCksIG9wZXJhdGlvbkFkZEJpZ0ludCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbGVmdCwg
cmlnaHQpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC0yMTE1LDExICsyMTE5LDEzIEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAKICAgICB2b2lkIGNvbXBpbGVWYWx1ZVN1YigpCiAgICAgeworICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOworCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChC
aWdJbnRVc2UpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0JpZ0ludChtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0JpZ0ludChtX25vZGUt
PmNoaWxkMigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZt
Q2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25TdWJCaWdJbnQsIG1fY2FsbEZyYW1lLCBsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBl
KCksIG9wZXJhdGlvblN1YkJpZ0ludCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbGVmdCwg
cmlnaHQpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC0yMTM0LDExICsyMTQwLDEzIEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAKICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgeworICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOworCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChC
aWdJbnRVc2UpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0JpZ0ludChtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0JpZ0ludChtX25vZGUt
PmNoaWxkMigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZt
Q2FsbChJbnQ2NCwgb3BlcmF0aW9uTXVsQmlnSW50LCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTXVs
QmlnSW50LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsZWZ0LCByaWdodCk7CiAgICAgICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
QEAgLTIxOTgsMTEgKzIyMDYsMTEgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2hvdWxkU2xvd1BhdGhS
ZXBhdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvd1BhdGhDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKCpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGpp
dCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25zLmdldCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwg
cGFyYW1zWzFdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0aElDKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1z
WzBdLmdwcigpLCBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLCBwYXJhbXNbMV0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG93UGF0aENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24oKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0
LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbnMuZ2V0KCksIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigp
LCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNl
cHRpb25zLmdldCgpLCBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgaml0
LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgcGFy
YW1zWzFdLmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwg
JmppdCk7CkBAIC0yMjIyLDcgKzIyMzAsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgZXhjZXB0aW9ucy5nZXQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigp
LCBwYXJhbXNbMV0uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHBhcmFtc1sxXS5ncHIoKSk7CiAgICAgICAgICAg
ICAgICAgfQogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCkBAIC0yMjk0LDExICsyMzAyLDEx
IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
YXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNsb3dQYXRoQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigqc3Rh
dGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1h
bnRpYywgZXhjZXB0aW9ucy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSwgcGFy
YW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBd
LmdwcigpLCBqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbC5jYWxsKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3dQ
YXRoQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJl
Z2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCBw
YXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdw
cigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUt
PnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CkBA
IC0yMzE4LDcgKzIzMjYsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAg
ICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQs
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgZXhjZXB0aW9ucy5nZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNb
MV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub25S
ZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgcGFyYW1zWzFdLmdwcigpLCBwYXJh
bXNbMl0uZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0KIAogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQpAQCAtMjMzNSwxNiArMjM0MywxOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgIAog
ICAgIHZvaWQgY29tcGlsZVN0ckNhdCgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworCiAgICAgICAgIExWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChtX25vZGUtPmNo
aWxkMygpKSB7CiAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICAgICAg
SW50NjQsIG9wZXJhdGlvblN0ckNhdDMsIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgICAgIElu
dDY0LCBvcGVyYXRpb25TdHJDYXQzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAg
ICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKSwKICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCiAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMygpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBJbnQ2NCwg
b3BlcmF0aW9uU3RyQ2F0MiwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAgSW50NjQsIG9w
ZXJhdGlvblN0ckNhdDIsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICAg
ICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
LAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSk7CiAgICAgICAgIH0KQEAgLTI0MjEsNiArMjQzMSw3IEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aENsejMyKCkKICAgICB7Cisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBLbm93bkludDMyVXNlKSB7CiAgICAgICAgICAgICBMVmFsdWUgb3BlcmFuZCA9IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuY3RsejMyKG9w
ZXJhbmQpKTsKQEAgLTI0MjgsNyArMjQzOSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAg
ICAgIH0KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsK
ICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uQXJpdGhDbHoz
MiwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50KTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2Fs
bChJbnQzMiwgb3BlcmF0aW9uQXJpdGhDbHozMiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
YXJndW1lbnQpOwogICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAgIH0KICAgICAKQEAgLTI1
MDcsMTEgKzI1MTgsMTIgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgIHZvaWQgY29tcGls
ZVZhbHVlRGl2KCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAg
ICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCaWdJbnRVc2UpKSB7CiAgICAgICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd0JpZ0ludChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IExWYWx1ZSByaWdodCA9IGxvd0JpZ0ludChtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVy
YXRpb25EaXZCaWdJbnQsIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbkRpdkJpZ0ludCwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNTg1
LDExICsyNTk3LDEyIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlVmFsdWVNb2QoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICAgICAgaWYgKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEJpZ0ludFVzZSkgewogICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICBMVmFsdWUgcmlnaHQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDIoKSk7CiAKLSAgICAg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uTW9k
QmlnSW50LCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25Nb2RCaWdJbnQsIHdlYWtQb2lu
dGVyKGdsb2JhbE9iamVjdCksIGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHNldEpTVmFsdWUo
cmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjU5Nyw3ICsyNjEw
LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IFVudHlwZWRVc2UsIG1fbm9kZS0+Ymlu
YXJ5VXNlS2luZCgpKTsKICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQyKCkpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25W
YWx1ZU1vZCwgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uVmFsdWVNb2QsIHdlYWtQb2ludGVyKGdsb2JhbE9i
amVjdCksIGxlZnQsIHJpZ2h0KTsKICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0K
IApAQCAtMjcxNiw2ICsyNzI5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAKICAgICB2
b2lkIGNvbXBpbGVBcml0aEFicygpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAg
ICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMjczOCw3ICsyNzUyLDcgQEAgY2xhc3MgTG93ZXJERkdU
b0IzIHsKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBtX25vZGUsIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKTsKICAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
dm1DYWxsKERvdWJsZSwgb3BlcmF0aW9uQXJpdGhBYnMsIG1fY2FsbEZyYW1lLCBhcmd1bWVudCk7
CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKERvdWJsZSwgb3BlcmF0aW9uQXJp
dGhBYnMsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGFyZ3VtZW50KTsKICAgICAgICAgICAg
IHNldERvdWJsZShyZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3
NDcsMjkgKzI3NjEsMzEgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgIHZvaWQgY29tcGls
ZUFyaXRoVW5hcnkoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkgewog
ICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZVVuYXJ5KG1fbm9kZS0+YXJpdGhVbmFy
eVR5cGUoKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChEb3VibGUsIERG
Rzo6YXJpdGhVbmFyeU9wZXJhdGlvbihtX25vZGUtPmFyaXRoVW5hcnlUeXBlKCkpLCBtX2NhbGxG
cmFtZSwgYXJndW1lbnQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKERvdWJsZSwg
REZHOjphcml0aFVuYXJ5T3BlcmF0aW9uKG1fbm9kZS0+YXJpdGhVbmFyeVR5cGUoKSksIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGFyZ3VtZW50KTsKICAgICAgICAgc2V0RG91YmxlKHJlc3Vs
dCk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlVmFsdWVQb3coKQogICAgIHsKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKEJpZ0ludFVzZSkpIHsKICAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93QmlnSW50KG1f
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgTFZhbHVlIGV4cG9uZW50ID0gbG93QmlnSW50
KG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvblBvd0JpZ0ludCwgbV9jYWxsRnJh
bWUsIGJhc2UsIGV4cG9uZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwo
cG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uUG93QmlnSW50LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCBiYXNlLCBleHBvbmVudCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIExWYWx1ZSBleHBvbmVudCA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNh
bGwoSW50NjQsIG9wZXJhdGlvblZhbHVlUG93LCBtX2NhbGxGcmFtZSwgYmFzZSwgZXhwb25lbnQp
OworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25WYWx1ZVBv
dywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgZXhwb25lbnQpOwogICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogCkBAIC0yOTU5LDYgKzI5NzUsNyBAQCBjbGFzcyBM
b3dlckRGR1RvQjMgewogCiAgICAgdm9pZCBjb21waWxlQXJpdGhSb3VuZCgpCiAgICAgeworICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKSB7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5hcml0
aFJvdW5kaW5nTW9kZSgpKSAmJiAhc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0
aFJvdW5kaW5nTW9kZSgpKSkgewpAQCAtMjk5NCwxMSArMzAxMSwxMiBAQCBjbGFzcyBMb3dlckRG
R1RvQjMgewogCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSk7CiAgICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25Bcml0aFJvdW5k
LCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50
NjQsIG9wZXJhdGlvbkFyaXRoUm91bmQsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGFyZ3Vt
ZW50KSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlQXJpdGhGbG9vcigpCiAgICAgeworICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKSB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBMVmFsdWUgaW50ZWdl
clZhbHVlID0gbV9vdXQuZG91YmxlRmxvb3IodmFsdWUpOwpAQCAtMzAxMCwxMSArMzAyOCwxMiBA
QCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICB9CiAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlLCBt
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSk7CiAgICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKElu
dDY0LCBvcGVyYXRpb25Bcml0aEZsb29yLCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpKTsKKyAgICAg
ICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkFyaXRoRmxvb3IsIHdlYWtQb2lu
dGVyKGdsb2JhbE9iamVjdCksIGFyZ3VtZW50KSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxl
QXJpdGhDZWlsKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAg
ICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2UpIHsKICAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBtX291dC5kb3VibGVDZWlsKHZhbHVlKTsK
QEAgLTMwMjYsMTEgKzMwNDUsMTIgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgfQog
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpOwogICAgICAg
ICBMVmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uQXJpdGhDZWlsLCBtX2NhbGxGcmFt
ZSwgYXJndW1lbnQpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlv
bkFyaXRoQ2VpbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYXJndW1lbnQpKTsKICAgICB9
CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aFRydW5jKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBEb3VibGVSZXBVc2UpIHsKICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5kb3Vi
bGVUcnVuYyh2YWx1ZSk7CkBAIC0zMDQyLDI4ICszMDYyLDMwIEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgICAgIH0KICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKTsKICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkFyaXRo
VHJ1bmMsIG1fY2FsbEZyYW1lLCBhcmd1bWVudCkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uQXJpdGhUcnVuYywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
YXJndW1lbnQpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoKQogICAgIHsK
KyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkgewogICAgICAgICAgICAgc2V0RG91Ymxl
KG1fb3V0LmRvdWJsZVNxcnQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChE
b3VibGUsIG9wZXJhdGlvbkFyaXRoU3FydCwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50KTsKKyAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChEb3VibGUsIG9wZXJhdGlvbkFyaXRoU3FydCwgd2Vh
a1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYXJndW1lbnQpOwogICAgICAgICBzZXREb3VibGUocmVz
dWx0KTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aEZSb3VuZCgpCiAgICAgeworICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKSB7CiAgICAgICAgICAgICBzZXREb3VibGUobV9v
dXQuZnJvdW5kKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoRG91YmxlLCBv
cGVyYXRpb25Bcml0aEZSb3VuZCwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50KTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IHZtQ2FsbChEb3VibGUsIG9wZXJhdGlvbkFyaXRoRlJvdW5kLCB3ZWFrUG9p
bnRlcihnbG9iYWxPYmplY3QpLCBhcmd1bWVudCk7CiAgICAgICAgIHNldERvdWJsZShyZXN1bHQp
OwogICAgIH0KIApAQCAtMzEzMywxNSArMzE1NSwxNiBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
ICAgIAogICAgIHZvaWQgY29tcGlsZVZhbHVlQml0Tm90KCkKICAgICB7CisgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBCaWdJbnRVc2UpIHsKICAgICAgICAgICAgIExWYWx1ZSBvcGVyYW5kID0gbG93QmlnSW50
KG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChw
b2ludGVyVHlwZSgpLCBvcGVyYXRpb25CaXROb3RCaWdJbnQsIG1fY2FsbEZyYW1lLCBvcGVyYW5k
KTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5cGUoKSwgb3Bl
cmF0aW9uQml0Tm90QmlnSW50LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBvcGVyYW5kKTsK
ICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCiAgICAgICAgIExWYWx1ZSBvcGVyYW5kID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9u
VmFsdWVCaXROb3QsIG1fY2FsbEZyYW1lLCBvcGVyYW5kKTsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uVmFsdWVCaXROb3QsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIG9wZXJhbmQpOwogICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQog
CkBAIC0zMTUyLDExICszMTc1LDEyIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICB2b2lk
IGNvbXBpbGVWYWx1ZUJpdEFuZCgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoQmlnSW50VXNlKSkgewog
ICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5
cGUoKSwgb3BlcmF0aW9uQml0QW5kQmlnSW50LCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRp
b25CaXRBbmRCaWdJbnQsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxlZnQsIHJpZ2h0KTsK
ICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtMzE3MSwxMSArMzE5NSwxMiBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAg
IAogICAgIHZvaWQgY29tcGlsZVZhbHVlQml0T3IoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEJpZ0lu
dFVzZSkpIHsKICAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hp
bGQyKCkpOwogCi0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBl
KCksIG9wZXJhdGlvbkJpdE9yQmlnSW50LCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpOworICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25C
aXRPckJpZ0ludCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbGVmdCwgcmlnaHQpOwogICAg
ICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0zMTkwLDExICszMjE1LDEyIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlVmFsdWVCaXRYb3IoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEJpZ0ludFVz
ZSkpIHsKICAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93QmlnSW50KG1fbm9kZS0+Y2hpbGQy
KCkpOwogCi0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKHBvaW50ZXJUeXBlKCks
IG9wZXJhdGlvbkJpdFhvckJpZ0ludCwgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKKyAgICAg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uQml0
WG9yQmlnSW50LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsZWZ0LCByaWdodCk7CiAgICAg
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTMyMDksMTEgKzMyMzUsMTIgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAKICAg
ICB2b2lkIGNvbXBpbGVWYWx1ZUJpdFJTaGlmdCgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpOwogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoQmlnSW50
VXNlKSkgewogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dCaWdJbnQobV9ub2RlLT5jaGls
ZDIoKSk7CiAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5cGUo
KSwgb3BlcmF0aW9uQml0UlNoaWZ0QmlnSW50LCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRp
b25CaXRSU2hpZnRCaWdJbnQsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxlZnQsIHJpZ2h0
KTsKICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMzIzNywxMSArMzI2NCwxMiBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
ICAgIAogICAgIHZvaWQgY29tcGlsZVZhbHVlQml0TFNoaWZ0KCkKICAgICB7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChCaWdJbnRVc2UpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0JpZ0ludChtX25v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0JpZ0ludChtX25v
ZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25CaXRMU2hpZnRCaWdJbnQsIG1fY2FsbEZy
YW1lLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKHBv
aW50ZXJUeXBlKCksIG9wZXJhdGlvbkJpdExTaGlmdEJpZ0ludCwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgbGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zNDQ5LDE3ICszNDc3LDE3IEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAg
ICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbkVuc3VyZUludDMyLCBtX2NhbGxGcmFtZSwgY2VsbCk7
CisgICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uRW5zdXJlSW50MzIsIG1fdm1WYWx1
ZSwgY2VsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91Ymxl
OgotICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbkVuc3VyZURvdWJsZSwgbV9jYWxs
RnJhbWUsIGNlbGwpOworICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbkVuc3VyZURv
dWJsZSwgbV92bVZhbHVlLCBjZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbkVu
c3VyZUNvbnRpZ3VvdXMsIG1fY2FsbEZyYW1lLCBjZWxsKTsKKyAgICAgICAgICAgIHZtQ2FsbChW
b2lkLCBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzLCBtX3ZtVmFsdWUsIGNlbGwpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAg
Y2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIHZtQ2FsbChWb2lk
LCBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UsIG1fY2FsbEZyYW1lLCBjZWxsKTsKKyAgICAg
ICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UsIG1fdm1WYWx1
ZSwgY2VsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwpAQCAtMzQ5
MSw2ICszNTE5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICB2b2lkIGNvbXBpbGVHZXRC
eUlkKEFjY2Vzc1R5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IEFjY2Vz
c1R5cGU6OkdldCB8fCB0eXBlID09IEFjY2Vzc1R5cGU6OlRyeUdldCB8fCB0eXBlID09IEFjY2Vz
c1R5cGU6OkdldERpcmVjdCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBD
ZWxsVXNlOiB7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKGdldEJ5SWQobG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKSwgdHlwZSkpOwpAQCAtMzUxNCwxMiArMzU0MywxMiBAQCBjbGFzcyBMb3dlckRG
R1RvQjMgewogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihnZXRCeUlkKHZhbHVlLCB0eXBlKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKLSAgICAgICAgICAgIEpfSklUT3BlcmF0aW9uX0VKSSBnZXRCeUlkRnVuY3Rp
b24gPSBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuY3Rpb24odHlwZSk7CisgICAgICAgICAg
ICBKX0pJVE9wZXJhdGlvbl9HSkkgZ2V0QnlJZEZ1bmN0aW9uID0gYXBwcm9wcmlhdGVHZW5lcmlj
R2V0QnlJZEZ1bmN0aW9uKHR5cGUpOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RD
ZWxsQ2FzZSwgY29udGludWF0aW9uKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENl
bGxSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAogICAgICAgICAgICAgICAgIEludDY0LCBn
ZXRCeUlkRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIHZhbHVlLAorICAg
ICAgICAgICAgICAgIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHZhbHVlLAogICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKV0pKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAgICAgICAgICAgICAKQEAgLTM1MzYsNiArMzU2NSw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAKICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkV2l0aFRoaXMoKQogICAgIHsKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IENlbGxVc2UgJiYgbV9ub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSkKICAgICAgICAgICAgIHNldEpTVmFsdWUoZ2V0QnlJZFdpdGhUaGlzKGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgZWxzZSB7
CkBAIC0zNTYyLDcgKzM1OTIsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKICAgICAg
ICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzR2VuZXJpYywKLSAgICAg
ICAgICAgICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgdGhpc1ZhbHVlLAorICAgICAgICAgICAgICAg
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHRoaXNWYWx1ZSwKICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCldKSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogICAgICAgICAgICAgCkBAIC0zNTc0LDM3ICszNjA0LDQxIEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbFdpdGhUaGlzKCkKICAgICB7CisgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIHRoaXNWYWx1ZSA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIExWYWx1ZSBzdWJzY3JpcHQgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQzKCkpOwogCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwo
SW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsV2l0aFRoaXMsIG1fY2FsbEZyYW1lLCBiYXNlLCB0aGlz
VmFsdWUsIHN1YnNjcmlwdCk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbkdldEJ5VmFsV2l0aFRoaXMsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJh
c2UsIHRoaXNWYWx1ZSwgc3Vic2NyaXB0KTsKICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwog
ICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVB1dEJ5SWRXaXRoVGhpcygpCiAgICAgeworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIExWYWx1ZSB0aGlzVmFsdWUgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQzKCkpOwogCiAgICAgICAgIHZtQ2FsbChWb2lkLCBtX2dyYXBoLmlzU3Ry
aWN0TW9kZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVyYXRpb25QdXRCeUlkV2l0
aFRoaXNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeUlkV2l0aFRoaXMsCi0gICAgICAgICAgICBtX2Nh
bGxGcmFtZSwgYmFzZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFw
aC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSkpOworICAgICAgICAg
ICAgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgdGhpc1ZhbHVlLCB2YWx1ZSwgbV9v
dXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51
bWJlcigpXSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aFRoaXMoKQog
ICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGJh
c2UgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7CiAgICAgICAg
IExWYWx1ZSB0aGlzVmFsdWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAxKSk7CiAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOwogCiAgICAgICAgIHZtQ2FsbChWb2lkLCBt
X2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVyYXRp
b25QdXRCeVZhbFdpdGhUaGlzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxXaXRoVGhpcywKLSAg
ICAgICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCB0aGlzVmFsdWUsIHByb3BlcnR5LCB2YWx1ZSk7
CisgICAgICAgICAgICB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCB0aGlzVmFsdWUs
IHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUF0b21pY3NS
ZWFkTW9kaWZ5V3JpdGUoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
ICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKTsKICAgICAgICAgdW5zaWduZWQgbnVtRXh0cmFBcmdzID0gbnVtRXh0cmFBdG9t
aWNzQXJncyhtX25vZGUtPm9wKCkpOwogICAgICAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC5j
aGlsZChtX25vZGUsIDApOwpAQCAtMzYxNywxNyArMzY1MSwxNyBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogICAgICAgICBpZiAoIXN0b3JhZ2VFZGdlKSB7CiAgICAgICAgICAgICBhdXRvIGNhbGxX
aXRoMCA9IFsmXSAoYXV0byogb3BlcmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG51
bUV4dHJhQXJncyA9PSAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKEludDY0LCBv
cGVyYXRpb24sIG1fY2FsbEZyYW1lLCBsb3dKU1ZhbHVlKGJhc2VFZGdlKSwgbG93SlNWYWx1ZShp
bmRleEVkZ2UpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKEludDY0LCBvcGVyYXRp
b24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0pTVmFsdWUoYmFzZUVkZ2UpLCBsb3dK
U1ZhbHVlKGluZGV4RWRnZSkpOwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgYXV0byBj
YWxsV2l0aDEgPSBbJl0gKGF1dG8qIG9wZXJhdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VS
VChudW1FeHRyYUFyZ3MgPT0gMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1ZShiYXNlRWRnZSksIGxvd0pTVmFs
dWUoaW5kZXhFZGdlKSwgbG93SlNWYWx1ZShhcmdFZGdlc1swXSkpOworICAgICAgICAgICAgICAg
IHJldHVybiB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwgbG93SlNWYWx1ZShiYXNlRWRnZSksIGxvd0pTVmFsdWUoaW5kZXhFZGdlKSwgbG93SlNWYWx1
ZShhcmdFZGdlc1swXSkpOwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgYXV0byBjYWxs
V2l0aDIgPSBbJl0gKGF1dG8qIG9wZXJhdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VSVChu
dW1FeHRyYUFyZ3MgPT0gMik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChJbnQ2NCwg
b3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1ZShiYXNlRWRnZSksIGxvd0pTVmFsdWUo
aW5kZXhFZGdlKSwgbG93SlNWYWx1ZShhcmdFZGdlc1swXSksIGxvd0pTVmFsdWUoYXJnRWRnZXNb
MV0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKEludDY0LCBvcGVyYXRpb24sIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0pTVmFsdWUoYmFzZUVkZ2UpLCBsb3dKU1ZhbHVl
KGluZGV4RWRnZSksIGxvd0pTVmFsdWUoYXJnRWRnZXNbMF0pLCBsb3dKU1ZhbHVlKGFyZ0VkZ2Vz
WzFdKSk7CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwpAQCAt
Mzc0OCw4ICszNzgyLDkgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAKICAgICB2b2lkIGNv
bXBpbGVBdG9taWNzSXNMb2NrRnJlZSgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gSW50MzJV
c2UpIHsKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25BdG9t
aWNzSXNMb2NrRnJlZSwgbV9jYWxsRnJhbWUsIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkp
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25BdG9taWNz
SXNMb2NrRnJlZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMzc4MCw2ICszODE1LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgIHZvaWQgY29t
cGlsZURlZmluZURhdGFQcm9wZXJ0eSgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDApKTsKICAgICAgICAgTFZhbHVlIHZhbHVlICA9IGxvd0pTVmFsdWUobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgTFZhbHVlIGF0dHJpYnV0ZXMgPSBs
b3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOwpAQCAtMzc4NywyMiArMzgy
MywyMiBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBzd2l0Y2ggKHByb3BlcnR5RWRn
ZS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6IHsKICAgICAgICAgICAgIExW
YWx1ZSBwcm9wZXJ0eSA9IGxvd1N0cmluZyhwcm9wZXJ0eUVkZ2UpOwotICAgICAgICAgICAgdm1D
YWxsKFZvaWQsIG9wZXJhdGlvbkRlZmluZURhdGFQcm9wZXJ0eVN0cmluZywgbV9jYWxsRnJhbWUs
IGJhc2UsIHByb3BlcnR5LCB2YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICB2bUNhbGwo
Vm9pZCwgb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3RyaW5nLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZTogewogICAg
ICAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nSWRlbnQocHJvcGVydHlFZGdlKTsK
LSAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25EZWZpbmVEYXRhUHJvcGVydHlTdHJp
bmdJZGVudCwgbV9jYWxsRnJhbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSwgYXR0cmlidXRlcyk7
CisgICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uRGVmaW5lRGF0YVByb3BlcnR5U3Ry
aW5nSWRlbnQsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5LCB2YWx1
ZSwgYXR0cmlidXRlcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIFN5bWJvbFVzZTogewogICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3ltYm9s
KHByb3BlcnR5RWRnZSk7Ci0gICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uRGVmaW5l
RGF0YVByb3BlcnR5U3ltYm9sLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHksIHZhbHVlLCBh
dHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25EZWZpbmVEYXRh
UHJvcGVydHlTeW1ib2wsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5
LCB2YWx1ZSwgYXR0cmlidXRlcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFVudHlwZWRVc2U6IHsKICAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxv
d0pTVmFsdWUocHJvcGVydHlFZGdlKTsKLSAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRp
b25EZWZpbmVEYXRhUHJvcGVydHksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUs
IGF0dHJpYnV0ZXMpOworICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbkRlZmluZURh
dGFQcm9wZXJ0eSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHksIHZh
bHVlLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGRlZmF1bHQ6CkBAIC0zODEyLDYgKzM4NDgsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAg
ICAgdm9pZCBjb21waWxlRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eSgpCiAgICAgeworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKICAgICAgICAgTFZhbHVlIGdldHRlciA9IGxv
d0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgTFZhbHVlIHNl
dHRlciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKQEAgLTM4MjAs
MjIgKzM4NTcsMjIgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgc3dpdGNoIChwcm9w
ZXJ0eUVkZ2UudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOiB7CiAgICAgICAg
ICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dTdHJpbmcocHJvcGVydHlFZGdlKTsKLSAgICAgICAg
ICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3RyaW5nLCBt
X2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHksIGdldHRlciwgc2V0dGVyLCBhdHRyaWJ1dGVzKTsK
KyAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5
U3RyaW5nLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBwcm9wZXJ0eSwgZ2V0dGVy
LCBzZXR0ZXIsIGF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZTogewogICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5
ID0gbG93U3RyaW5nSWRlbnQocHJvcGVydHlFZGdlKTsKLSAgICAgICAgICAgIHZtQ2FsbChWb2lk
LCBvcGVyYXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3RyaW5nSWRlbnQsIG1fY2FsbEZyYW1l
LCBiYXNlLCBwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIsIGF0dHJpYnV0ZXMpOworICAgICAgICAg
ICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbkRlZmluZUFjY2Vzc29yUHJvcGVydHlTdHJpbmdJZGVu
dCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHksIGdldHRlciwgc2V0
dGVyLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgU3ltYm9sVXNlOiB7CiAgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dTeW1i
b2wocHJvcGVydHlFZGdlKTsKLSAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25EZWZp
bmVBY2Nlc3NvclByb3BlcnR5U3ltYm9sLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHksIGdl
dHRlciwgc2V0dGVyLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVy
YXRpb25EZWZpbmVBY2Nlc3NvclByb3BlcnR5U3ltYm9sLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCBiYXNlLCBwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIsIGF0dHJpYnV0ZXMpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CiAgICAg
ICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dKU1ZhbHVlKHByb3BlcnR5RWRnZSk7Ci0gICAg
ICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eSwgbV9j
YWxsRnJhbWUsIGJhc2UsIHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlciwgYXR0cmlidXRlcyk7Cisg
ICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eSwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHksIGdldHRlciwgc2V0dGVy
LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRl
ZmF1bHQ6CkBAIC0zODk5LDYgKzM5MzYsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgZ2VuZXJhdG9yLT5zbG93UGF0
aEZ1bmN0aW9uKCksIEludmFsaWRHUFJSZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Z2VuZXJhdG9yLT5zdHViSW5mbygpKSwgcGFyYW1zWzFdLmdwcigpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHVpZCkpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1Rv
KGRvbmUsICZqaXQpOwpAQCAtMzkyNiw2ICszOTY0LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKCkKICAgICB7
CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBjZWxsID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKSB7CkBAIC0zOTM5LDcgKzM5Nzgs
NyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgCiAgICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24p
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25SZXNvbHZlUm9wZSwg
bV9jYWxsRnJhbWUsIGNlbGwpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1
bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvblJlc29sdmVS
b3BlLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBjZWxsKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIApAQCAtNDAx
NSw2ICs0MDU0LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgIHZvaWQgY29tcGlsZUdl
dFByb3RvdHlwZU9mKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheVVzZToKICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKQEAgLTQwNzYsMTEgKzQxMTYs
MTEgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBjYXNlIE9iamVjdFVzZTogewotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNh
bGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBtX2NhbGxGcmFtZSwgbG93
T2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvdG90eXBlT2ZPYmplY3QsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGxvd09iamVjdChtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIHNldEpTVmFs
dWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm90b3R5cGVPZiwgbV9jYWxsRnJhbWUsIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1D
YWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm90b3R5cGVPZiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0KSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxODMsNiArNDIyMyw3IEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQogICAgIHsKKyAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czogewpAQCAtNDIyNSw3ICs0MjY2LDcgQEAgY2xhc3MgTG93ZXJE
RkdUb0IzIHsKICAgICAgICAgICAgICAgICBtX291dC5pc1plcm82NChmYXN0UmVzdWx0VmFsdWUp
LCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxs
KEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwgbV9jYWxsRnJhbWUsIGJhc2UsIGlu
ZGV4KSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5j
aG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNDI3NSw3ICs0MzE2LDcgQEAgY2xhc3MgTG93ZXJE
RkdUb0IzIHsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsIG1fY2FsbEZyYW1lLCBiYXNl
LCBpbmRleCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LCB3ZWFrUG9p
bnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCkpOwogICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTQzMjQsNyArNDM2NSw3IEBAIGNsYXNzIExv
d2VyREZHVG9CMyB7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50
NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgp
KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Io
dm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwgd2Vha1BvaW50ZXIoZ2xv
YmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CkBAIC00Mzk0LDIwICs0NDM1LDIwIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAg
ICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApLnVzZUtpbmQoKSA9PSBP
YmplY3RVc2UpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RTdHJpbmcsIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3RyaW5nLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMSkpKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLnVz
ZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2
bUNhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxP
YmplY3RTeW1ib2wsIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgSW50NjQs
IG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3Qp
LAogICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAwKSksIGxvd1N5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBJ
bnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWwsIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgICAgIElu
dDY0LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKICAgICAg
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxv
d0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC00NDQ0LDcgKzQ0ODUsNyBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9u
KTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Io
Ci0gICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdElu
dCwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSk7CisgICAgICAgICAgICAgICAgdm1DYWxsKElu
dDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwgYmFzZSwgaW5kZXgpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBA
IC00NTgwLDYgKzQ2MjEsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgIAogICAgIHZvaWQg
Y29tcGlsZVB1dEJ5VmFsKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOwog
ICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKTsKICAg
ICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMik7CkBAIC00
NjAzLDcgKzQ2NDUsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdDsKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwg
bG93Q2VsbChjaGlsZDEpLCBsb3dTdHJpbmcoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsK
KyAgICAgICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbiwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwgbG93Q2VsbChjaGlsZDEpLCBsb3dTdHJpbmcoY2hpbGQyKSwgbG93SlNW
YWx1ZShjaGlsZDMpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIH0KIApAQCAtNDYxOSw3ICs0NjYxLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25TdHJpY3Q7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvbiwg
bV9jYWxsRnJhbWUsIGxvd0NlbGwoY2hpbGQxKSwgbG93U3ltYm9sKGNoaWxkMiksIGxvd0pTVmFs
dWUoY2hpbGQzKSk7CisgICAgICAgICAgICAgICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb24s
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwoY2hpbGQxKSwgbG93U3ltYm9sKGNo
aWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NjM4LDcgKzQ2ODAsNyBAQCBj
bGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAgICAgIFZvaWQsIG9wZXJhdGlvbiwgbV9jYWxs
RnJhbWUsCisgICAgICAgICAgICAgICAgVm9pZCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoY2hpbGQxKSwgbG93SlNWYWx1
ZShjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC00NzYzLDcgKzQ4MDUsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgaW5C
b3VuZENhc2UpOwogICAgICAgICAgICAgdm1DYWxsKAogICAgICAgICAgICAgICAgIFZvaWQsIHNs
b3dQYXRoRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFz
ZSwgaW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
IAogCkBAIC00ODgyLDU0ICs0OTI0LDYwIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICB2
b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBMVmFsdWUgYWNjZXNzb3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkp
OwogICAgICAgICBhdXRvIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKV07CiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQsCiAgICAg
ICAgICAgICBtX25vZGUtPm9wKCkgPT0gUHV0R2V0dGVyQnlJZCA/IG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQgOiBvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLAotICAgICAgICAgICAgbV9jYWxsRnJhbWUs
IGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCksIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5h
Y2Nlc3NvckF0dHJpYnV0ZXMoKSksIGFjY2Vzc29yKTsKKyAgICAgICAgICAgIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCksIG1fb3V0LmNvbnN0
SW50MzIobV9ub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSksIGFjY2Vzc29yKTsKICAgICB9CiAK
ICAgICB2b2lkIGNvbXBpbGVQdXRHZXR0ZXJTZXR0ZXJCeUlkKCkKICAgICB7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIGdldHRlciA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDIoKSk7CiAgICAgICAgIExWYWx1ZSBzZXR0ZXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQzKCkpOwogICAgICAgICBhdXRvIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25v
ZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZv
aWQsIG9wZXJhdGlvblB1dEdldHRlclNldHRlciwKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBi
YXNlLCBtX291dC5jb25zdEludFB0cih1aWQpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+YWNj
ZXNzb3JBdHRyaWJ1dGVzKCkpLCBnZXR0ZXIsIHNldHRlcik7CisgICAgICAgICAgICB3ZWFrUG9p
bnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBtX291dC5jb25zdEludFB0cih1aWQpLCBtX291dC5j
b25zdEludDMyKG1fbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCkpLCBnZXR0ZXIsIHNldHRlcik7
CiAKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5VmFsKCkKICAgICB7Cisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIHN1YnNjcmlwdCA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIExWYWx1ZSBhY2Nlc3NvciA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZvaWQs
CiAgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gUHV0R2V0dGVyQnlWYWwgPyBvcGVyYXRpb25Q
dXRHZXR0ZXJCeVZhbCA6IG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLAotICAgICAgICAgICAgbV9j
YWxsRnJhbWUsIGJhc2UsIHN1YnNjcmlwdCwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFjY2Vz
c29yQXR0cmlidXRlcygpKSwgYWNjZXNzb3IpOworICAgICAgICAgICAgd2Vha1BvaW50ZXIoZ2xv
YmFsT2JqZWN0KSwgYmFzZSwgc3Vic2NyaXB0LCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+YWNj
ZXNzb3JBdHRyaWJ1dGVzKCkpLCBhY2Nlc3Nvcik7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxl
RGVsZXRlQnlJZCgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IGF1dG8gdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJl
cigpXTsKLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBv
cGVyYXRpb25EZWxldGVCeUlkLCBtX2NhbGxGcmFtZSwgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIo
dWlkKSkpKTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0
LCBvcGVyYXRpb25EZWxldGVCeUlkLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBt
X291dC5jb25zdEludFB0cih1aWQpKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZURlbGV0
ZUJ5VmFsKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZh
bHVlIHN1YnNjcmlwdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIHNl
dEJvb2xlYW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRGVsZXRlQnlW
YWwsIG1fY2FsbEZyYW1lLCBiYXNlLCBzdWJzY3JpcHQpKSk7CisgICAgICAgIHNldEJvb2xlYW4o
bV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRGVsZXRlQnlWYWwsIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHN1YnNjcmlwdCkpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlQXJyYXlQdXNoKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMSkpOwogICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKICAgICAgICAgdW5zaWduZWQgZWxlbWVudE9m
ZnNldCA9IDI7CkBAIC00OTc4LDkgKzUwMjYsOSBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwogICAg
ICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpEb3VibGUpCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uQXJyYXlQdXNoLCBtX2NhbGxGcmFtZSwg
dmFsdWUsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbkFycmF5UHVzaCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgdmFsdWUsIGJh
c2UpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
dm1DYWxsKEludDY0LCBvcGVyYXRpb25BcnJheVB1c2hEb3VibGUsIG1fY2FsbEZyYW1lLCB2YWx1
ZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3Bl
cmF0aW9uQXJyYXlQdXNoRG91YmxlLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCB2YWx1ZSwg
YmFzZSk7CiAgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcihyZXN1bHQpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKICAgICAgICAgICAgICAgICAKQEAgLTUwNDYsNyArNTA5NCw3IEBAIGNsYXNzIExvd2VyREZH
VG9CMyB7CiAgICAgICAgICAgICBhdXRvKiBvcGVyYXRpb24gPSAmb3BlcmF0aW9uQXJyYXlQdXNo
TXVsdGlwbGU7CiAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0g
QXJyYXk6OkRvdWJsZSkKICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAmb3BlcmF0aW9uQXJy
YXlQdXNoRG91YmxlTXVsdGlwbGU7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwg
YmFzZSwgYnVmZmVyLCBtX291dC5jb25zdEludDMyKGVsZW1lbnRDb3VudCkpKTsKKyAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0
LCBvcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGJ1ZmZlciwgbV9v
dXQuY29uc3RJbnQzMihlbGVtZW50Q291bnQpKSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZVB0
cihtX291dC5jb25zdEludFB0cigwKSwgbV9vdXQuYWJzb2x1dGUoc2NyYXRjaEJ1ZmZlci0+YWRk
cmVzc09mQWN0aXZlTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKIApAQCAtNTA5MSw3ICs1MTM5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwogICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCi0g
ICAgICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uQXJyYXlQdXNoLCBtX2Nh
bGxGcmFtZSwgdmFsdWUsIGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgdm1DYWxsKEludDY0
LCBvcGVyYXRpb25BcnJheVB1c2gsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHZhbHVlLCBi
YXNlKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC01
MTQwLDcgKzUxODgsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGJleW9uZFZlY3Rvckxlbmd0aCwgcmFyZWx5KHNsb3dDYWxsUGF0aCksIHVzdWFsbHko
Y29udGludWF0aW9uKSk7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYWxsUGF0
aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25BcnJheVB1c2hNdWx0aXBsZSwg
bV9jYWxsRnJhbWUsIGJhc2UsIGJ1ZmZlciwgbV9vdXQuY29uc3RJbnQzMihlbGVtZW50Q291bnQp
KSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uQXJyYXlQdXNoTXVsdGlwbGUsIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksIGJhc2UsIGJ1ZmZlciwgbV9vdXQuY29uc3RJbnQzMihlbGVtZW50Q291bnQp
KSk7CiAgICAgICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cigwKSwgbV9v
dXQuYWJzb2x1dGUoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIApAQCAtNTI1MSw2ICs1Mjk5LDcg
QEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgIHZvaWQgY29tcGlsZUFycmF5SW5kZXhPZigp
CiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMVmFsdWUg
c3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5udW1DaGlsZHJlbigpID09IDMgPyBtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMikgOiBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykp
OwogICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMu
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CiAKQEAgLTUzNTksMTcgKzU0MDgsMTcgQEAgY2xhc3Mg
TG93ZXJERkdUb0IzIHsKIAogICAgICAgICBjYXNlIFN0cmluZ1VzZToKICAgICAgICAgICAgIEFT
U0VSVChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyk7Ci0g
ICAgICAgICAgICBzZXRJbnQzMih2bUNhbGwoSW50MzIsIG9wZXJhdGlvbkFycmF5SW5kZXhPZlN0
cmluZywgbV9jYWxsRnJhbWUsIHN0b3JhZ2UsIGxvd1N0cmluZyhzZWFyY2hFbGVtZW50RWRnZSks
IHN0YXJ0SW5kZXgpKTsKKyAgICAgICAgICAgIHNldEludDMyKHZtQ2FsbChJbnQzMiwgb3BlcmF0
aW9uQXJyYXlJbmRleE9mU3RyaW5nLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBzdG9yYWdl
LCBsb3dTdHJpbmcoc2VhcmNoRWxlbWVudEVkZ2UpLCBzdGFydEluZGV4KSk7CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICBzd2l0Y2gg
KG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6Ci0gICAgICAgICAgICAgICAgc2V0SW50MzIodm1DYWxsKEludDMyLCBvcGVyYXRpb25B
cnJheUluZGV4T2ZWYWx1ZURvdWJsZSwgbV9jYWxsRnJhbWUsIHN0b3JhZ2UsIGxvd0pTVmFsdWUo
c2VhcmNoRWxlbWVudEVkZ2UpLCBzdGFydEluZGV4KSk7CisgICAgICAgICAgICAgICAgc2V0SW50
MzIodm1DYWxsKEludDMyLCBvcGVyYXRpb25BcnJheUluZGV4T2ZWYWx1ZURvdWJsZSwgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwgc3RvcmFnZSwgbG93SlNWYWx1ZShzZWFyY2hFbGVtZW50RWRn
ZSksIHN0YXJ0SW5kZXgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKLSAg
ICAgICAgICAgICAgICBzZXRJbnQzMih2bUNhbGwoSW50MzIsIG9wZXJhdGlvbkFycmF5SW5kZXhP
ZlZhbHVlSW50MzJPckNvbnRpZ3VvdXMsIG1fY2FsbEZyYW1lLCBzdG9yYWdlLCBsb3dKU1ZhbHVl
KHNlYXJjaEVsZW1lbnRFZGdlKSwgc3RhcnRJbmRleCkpOworICAgICAgICAgICAgICAgIHNldElu
dDMyKHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uQXJyYXlJbmRleE9mVmFsdWVJbnQzMk9yQ29udGln
dW91cywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgc3RvcmFnZSwgbG93SlNWYWx1ZShzZWFy
Y2hFbGVtZW50RWRnZSksIHN0YXJ0SW5kZXgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTUzODYsNiArNTQzNSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAg
CiAgICAgdm9pZCBjb21waWxlQXJyYXlQb3AoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIo
KSk7CiAgICAgICAgIApAQCAtNTQyNyw3ICs1NDc3LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRp
bnVhdGlvbik7CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxs
KAotICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5n
dGgsIG1fY2FsbEZyYW1lLCBiYXNlKSkpOworICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRp
b25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJh
c2UpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpA
QCAtNTQ2OSw3ICs1NTE5LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5h
bmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25BcnJheVBvcCwgbV9jYWxsRnJhbWUsIGJhc2Up
KSk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKEludDY0
LCBvcGVyYXRpb25BcnJheVBvcCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSkpKTsK
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC01NDg1LDE2ICs1NTM1LDE3
IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICB2b2lkIGNvbXBpbGVQdXNoV2l0aFNjb3Bl
KCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1
ZSBwYXJlbnRTY29wZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGF1dG8g
b2JqZWN0RWRnZSA9IG1fbm9kZS0+Y2hpbGQyKCk7CiAgICAgICAgIGlmIChvYmplY3RFZGdlLnVz
ZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKICAgICAgICAgICAgIExWYWx1ZSBvYmplY3QgPSBsb3dO
b25OdWxsT2JqZWN0KG9iamVjdEVkZ2UpOwotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZt
Q2FsbChJbnQ2NCwgb3BlcmF0aW9uUHVzaFdpdGhTY29wZU9iamVjdCwgbV9jYWxsRnJhbWUsIHBh
cmVudFNjb3BlLCBvYmplY3QpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJ
bnQ2NCwgb3BlcmF0aW9uUHVzaFdpdGhTY29wZU9iamVjdCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0KSwgcGFyZW50U2NvcGUsIG9iamVjdCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQob2JqZWN0RWRnZS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSk7CiAgICAgICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNh
bGwoSW50NjQsIG9wZXJhdGlvblB1c2hXaXRoU2NvcGUsIG1fY2FsbEZyYW1lLCBwYXJlbnRTY29w
ZSwgb2JqZWN0KTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG9w
ZXJhdGlvblB1c2hXaXRoU2NvcGUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHBhcmVudFNj
b3BlLCBvYmplY3QpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICB9
CiAgICAgfQpAQCAtNTUwOSw3ICs1NTYwLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAg
ICAgaWYgKHRhYmxlLT5zaW5nbGV0b24oKS5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAg
TFZhbHVlIGNhbGxSZXN1bHQgPSB2bUNhbGwoCiAgICAgICAgICAgICAgICAgSW50NjQsCi0gICAg
ICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbV9jYWxsRnJhbWUs
IHdlYWtTdHJ1Y3R1cmUoc3RydWN0dXJlKSwKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVh
dGVBY3RpdmF0aW9uRGlyZWN0LCBtX3ZtVmFsdWUsIHdlYWtTdHJ1Y3R1cmUoc3RydWN0dXJlKSwK
ICAgICAgICAgICAgICAgICBzY29wZSwgd2Vha1BvaW50ZXIodGFibGUpLCBtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSkpOwogICAgICAgICAgICAg
c2V0SlNWYWx1ZShjYWxsUmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTU1NDQsNyAr
NTU5NSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0
ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAotICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBsb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2
YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAogICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwgbG9j
YXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFibGUpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKQEAg
LTU1NjksMTAgKzU2MjAsMTAgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbV9ub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4
ZWN1dGFibGUqPigpOwogICAgICAgICBpZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uKCkuaXNTdGls
bFZhbGlkKCkpIHsKICAgICAgICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0KLSAgICAgICAgICAg
ICAgICBpc0dlbmVyYXRvckZ1bmN0aW9uID8gdm1DYWxsKEludDY0LCBvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxl
KSkgOgotICAgICAgICAgICAgICAgIGlzQXN5bmNGdW5jdGlvbiA/IHZtQ2FsbChJbnQ2NCwgb3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihl
eGVjdXRhYmxlKSkgOgotICAgICAgICAgICAgICAgIGlzQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiA/
IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgbV9jYWxs
RnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSkgOgotICAgICAgICAgICAgICAg
IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTmV3RnVuY3Rpb24sIG1fY2FsbEZyYW1lLCBzY29wZSwg
d2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpOworICAgICAgICAgICAgICAgIGlzR2VuZXJhdG9yRnVu
Y3Rpb24gPyB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBtX3Zt
VmFsdWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSkgOgorICAgICAgICAgICAgICAg
IGlzQXN5bmNGdW5jdGlvbiA/IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgbV92bVZhbHVlLCBzY29wZSwgd2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpIDoKKyAgICAgICAg
ICAgICAgICBpc0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24gPyB2bUNhbGwoSW50NjQsIG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIG1fdm1WYWx1ZSwgc2NvcGUsIHdlYWtQb2ludGVy
KGV4ZWN1dGFibGUpKSA6CisgICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgbV92bVZhbHVlLCBzY29wZSwgd2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpOwog
ICAgICAgICAgICAgc2V0SlNWYWx1ZShjYWxsUmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNTYzMyw3ICs1Njg0LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQ7CiAKICAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sIG9wZXJhdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0u
ZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIo
KSwgJnZtLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSk7CiAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgc2xvd1BhdGhBcmd1bWVudHMpOwpAQCAtNTY5Myw3ICs1NzQ0LDcgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1Bh
dGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRp
b25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigp
LAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMsIGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwgbG9jYXRpb25zWzFdLmRpcmVj
dEdQUigpLAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMiht
aW5DYXBhY2l0eSkpOwogICAgICAgICAgICAgfSwgbGVuZ3RoLnZhbHVlKTsKQEAgLTU3NTMsMTAg
KzU4MDQsMTEgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAKICAgICB2b2lkIGNvbXBpbGVD
cmVhdGVTY29wZWRBcmd1bWVudHMoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBJ
bnQ2NCwgb3BlcmF0aW9uQ3JlYXRlU2NvcGVkQXJndW1lbnRzLCBtX2NhbGxGcmFtZSwKKyAgICAg
ICAgICAgIEludDY0LCBvcGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMsIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICB3ZWFrUG9pbnRlcigKICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnNjb3Bl
ZEFyZ3VtZW50c1N0cnVjdHVyZSgpKSwKICAgICAgICAgICAgIGdldEFyZ3VtZW50c1N0YXJ0KCks
IGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVlLCBnZXRDdXJyZW50Q2FsbGVlKCksIHNjb3BlKTsK
QEAgLTU3NjYsOCArNTgxOCw5IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAg
ICAgICBJbnQ2NCwgb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzLCBtX2NhbGxGcmFtZSwK
KyAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMsIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksCiAgICAgICAgICAgICB3ZWFrUG9pbnRlcigKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpKSwKICAgICAgICAgICAgIGdldEFyZ3VtZW50c1N0
YXJ0KCksIGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVlLCBnZXRDdXJyZW50Q2FsbGVlKCkpOwpA
QCAtNTc3NywxMSArNTgzMCwxMSBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgdm9pZCBj
b21waWxlQ3JlYXRlUmVzdCgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgICAgICBpZiAobV9ncmFwaC5pc1dhdGNoaW5nSGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50
KG1fbm9kZSkpIHsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMVmFsdWUgYXJyYXlMZW5ndGggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BTdGFydCA9IG1f
b3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
ICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVy
U3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b3JpZ2luYWxSZXN0UGFyYW1ldGVyU3RydWN0dXJlKCkp
OwogICAgICAgICAgICAgQXJyYXlWYWx1ZXMgYXJyYXlWYWx1ZXMgPSBhbGxvY2F0ZVVuaW5pdGlh
bGl6ZWRDb250aWd1b3VzSlNBcnJheShhcnJheUxlbmd0aCwgc3RydWN0dXJlKTsKICAgICAgICAg
ICAgIExWYWx1ZSBhcnJheSA9IGFycmF5VmFsdWVzLmFycmF5OwpAQCAtNTgxMCw3ICs1ODYzLDcg
QEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgTFZhbHVlIGFyZ3VtZW50U3RhcnQgPSBn
ZXRBcmd1bWVudHNTdGFydCgpOwogICAgICAgICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgPSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7
CiAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAotICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlv
bkNyZWF0ZVJlc3QsIG1fY2FsbEZyYW1lLCBhcmd1bWVudFN0YXJ0LCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCwgYXJyYXlMZW5ndGgpKTsKKyAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25DcmVh
dGVSZXN0LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBhcmd1bWVudFN0YXJ0LCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCwgYXJyYXlMZW5ndGgpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBp
bGVHZXRSZXN0TGVuZ3RoKCkKQEAgLTU4MzUsNiArNTg4OCw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAKICAgICB2b2lkIGNvbXBpbGVPYmplY3RLZXlzKCkKICAgICB7CisgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKICAgICAgICAgY2FzZSBPYmplY3RVc2U6IHsKICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmlzV2F0Y2hpbmdIYXZpbmdBQmFkVGltZVdhdGNocG9pbnQobV9ub2RlKSkgewpAQCAtNTg2
MSwxNCArNTkxNSwxMyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5iZWxvd09yRXF1YWwoY2FjaGVkT3duS2V5cywgbV9vdXQuY29uc3RJ
bnRQdHIoYml0d2lzZV9jYXN0PHZvaWQqPihTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkT3duS2V5
c1NlbnRpbmVsKCkpKSksIHVuc3VyZShzbG93Q2FzZSksIHVuc3VyZSh1c2VDYWNoZUNhc2UpKTsK
IAogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVzZUNhY2hlQ2FzZSwgc2xvd0J1dEFy
cmF5QnVmZmVyQ2FzZSk7Ci0gICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
ICAgICAgICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIGFycmF5U3RydWN0dXJlID0gbV9n
cmFwaC5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihDb3B5T25Xcml0ZUFycmF5V2l0aENvbnRpZ3VvdXMp
KTsKICAgICAgICAgICAgICAgICBMVmFsdWUgZmFzdEFycmF5ID0gYWxsb2NhdGVPYmplY3Q8SlNB
cnJheT4oYXJyYXlTdHJ1Y3R1cmUsIG1fb3V0LmFkZFB0cihjYWNoZWRPd25LZXlzLCBKU0ltbXV0
YWJsZUJ1dHRlcmZseTo6b2Zmc2V0T2ZEYXRhKCkpLCBzbG93QnV0QXJyYXlCdWZmZXJDYXNlKTsK
ICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGZhc3RBcnJheSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0J1dEFycmF5QnVmZmVyQ2FzZSwg
c2xvd0Nhc2UpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBzbG93QXJyYXkgPSB2bUNhbGwoSW50
NjQsIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCBtX2NhbGxGcmFtZSwgd2Vha1N0cnVjdHVyZShh
cnJheVN0cnVjdHVyZSksIGNhY2hlZE93bktleXMpOworICAgICAgICAgICAgICAgIExWYWx1ZSBz
bG93QXJyYXkgPSB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCBtX3ZtVmFs
dWUsIHdlYWtTdHJ1Y3R1cmUoYXJyYXlTdHJ1Y3R1cmUpLCBjYWNoZWRPd25LZXlzKTsKICAgICAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0QXJyYXlCdWZmZXJSZXN1bHQgPSBtX291
dC5hbmNob3Ioc2xvd0FycmF5KTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CiAKQEAgLTU4NzcsNyArNTkzMCw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAg
ICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKICAgICAg
ICAgICAgICAgICAgICAgWz0sICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9u
cykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uT2JqZWN0S2V5c09iamVjdCwgbG9jYXRpb25zWzBdLmRp
cmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbk9iamVjdEtleXNPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKSwgZ2xvYmFsT2JqZWN0LCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwogICAgICAgICAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBvYmplY3QpOwogICAgICAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZh
bHVlKTsKQEAgLTU4ODcsMTEgKzU5NDAsMTEgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAg
ICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBmYXN0UmVzdWx0
LCBzbG93QnV0QXJyYXlCdWZmZXJSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKElu
dDY0LCBvcGVyYXRpb25PYmplY3RLZXlzT2JqZWN0LCBtX2NhbGxGcmFtZSwgbG93T2JqZWN0KG1f
bm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwg
b3BlcmF0aW9uT2JqZWN0S2V5c09iamVjdCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93
T2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uT2JqZWN0S2V5cywgbV9jYWxsRnJhbWUsIGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBv
cGVyYXRpb25PYmplY3RLZXlzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01OTAxLDEy
ICs1OTU0LDEzIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICB2b2lkIGNvbXBpbGVPYmpl
Y3RDcmVhdGUoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIE9i
amVjdFVzZToKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25P
YmplY3RDcmVhdGVPYmplY3QsIG1fY2FsbEZyYW1lLCBsb3dPYmplY3QobV9ub2RlLT5jaGlsZDEo
KSkpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25PYmpl
Y3RDcmVhdGVPYmplY3QsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd09iamVjdChtX25v
ZGUtPmNoaWxkMSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBl
ZFVzZToKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25PYmpl
Y3RDcmVhdGUsIG1fY2FsbEZyYW1lLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uT2JqZWN0Q3JlYXRl
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01OTM5LDcgKzU5OTMsNyBAQCBjbGFzcyBM
b3dlckRGR1RvQjMgewogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCks
IG1fbm9kZS0+aXNJbnRlcm5hbFByb21pc2UoKSA/IG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlz
ZSA6IG9wZXJhdGlvbk5ld1Byb21pc2UsIG1fY2FsbEZyYW1lLCBmcm96ZW5Qb2ludGVyKG1fZ3Jh
cGguZnJlZXplU3Ryb25nKG1fbm9kZS0+c3RydWN0dXJlKCkuZ2V0KCkpKSkpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlw
ZSgpLCBtX25vZGUtPmlzSW50ZXJuYWxQcm9taXNlKCkgPyBvcGVyYXRpb25OZXdJbnRlcm5hbFBy
b21pc2UgOiBvcGVyYXRpb25OZXdQcm9taXNlLCBtX3ZtVmFsdWUsIGZyb3plblBvaW50ZXIobV9n
cmFwaC5mcmVlemVTdHJvbmcobV9ub2RlLT5zdHJ1Y3R1cmUoKS5nZXQoKSkpKSk7CiAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTU5NjQsNyArNjAxOCw3IEBAIGNsYXNzIExvd2VyREZH
VG9CMyB7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291
dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0
aW9uLCBtX2NhbGxGcmFtZSwgZnJvemVuUG9pbnRlcihtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX25v
ZGUtPnN0cnVjdHVyZSgpLmdldCgpKSkpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uLCBtX3Zt
VmFsdWUsIGZyb3plblBvaW50ZXIobV9ncmFwaC5mcmVlemVTdHJvbmcobV9ub2RlLT5zdHJ1Y3R1
cmUoKS5nZXQoKSkpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTYwMDMsNyAr
NjA1Nyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0
VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0g
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdCwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAm
dm0sIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAgICAgfSwK
ICAgICAgICAgICAgIHN0cmluZyk7CkBAIC02MDE2LDEyICs2MDcwLDEzIEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAKICAgICB2b2lkIGNvbXBpbGVOZXdTeW1ib2woKQogICAgIHsKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgaWYgKCFtX25vZGUtPmNoaWxkMSgpKSB7
Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25O
ZXdTeW1ib2wsIG1fY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChw
b2ludGVyVHlwZSgpLCBvcGVyYXRpb25OZXdTeW1ib2wsIG1fdm1WYWx1ZSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChtX25vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBLbm93blN0cmluZ1VzZSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKHBv
aW50ZXJUeXBlKCksIG9wZXJhdGlvbk5ld1N5bWJvbFdpdGhEZXNjcmlwdGlvbiwgbV9jYWxsRnJh
bWUsIGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKHZt
Q2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25OZXdTeW1ib2xXaXRoRGVzY3JpcHRpb24sIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKSkpOwog
ICAgIH0KIAogICAgIHZvaWQgY29tcGlsZU5ld0FycmF5KCkKQEAgLTYwODIsNyArNjEzNyw3IEBA
IGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fbm9kZS0+bnVt
Q2hpbGRyZW4oKSkgewogICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAg
ICAgICAgSW50NjQsIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXksIG1fY2FsbEZyYW1lLAorICAgICAg
ICAgICAgICAgIEludDY0LCBvcGVyYXRpb25OZXdFbXB0eUFycmF5LCBtX3ZtVmFsdWUsCiAgICAg
ICAgICAgICAgICAgd2Vha1N0cnVjdHVyZShzdHJ1Y3R1cmUpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KQEAgLTYxMTAsNyArNjE2NSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7
CiAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzY3JhdGNoU2l6ZSksIG1fb3V0LmFic29s
dXRlKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSk7CiAgICAgICAgIAog
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgSW50NjQsIG9wZXJh
dGlvbk5ld0FycmF5LCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25O
ZXdBcnJheSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgIHdlYWtTdHJ1
Y3R1cmUoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnRQdHIoYnVmZmVyKSwKICAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSkpOwogICAgICAgICAKQEAg
LTYxMjEsNiArNjE3Niw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICB2b2lkIGNvbXBp
bGVOZXdBcnJheVdpdGhTcHJlYWQoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICAgICAgaWYgKG1fZ3JhcGguaXNXYXRjaGluZ0hhdmluZ0FCYWRUaW1lV2F0Y2hw
b2ludChtX25vZGUpKSB7CiAgICAgICAgICAgICBDaGVja2VkSW50MzIgc3RhcnRMZW5ndGggPSAw
OwogICAgICAgICAgICAgQml0VmVjdG9yKiBiaXRWZWN0b3IgPSBtX25vZGUtPmJpdFZlY3Rvcigp
OwpAQCAtNjI5OSw3ICs2MzU1LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgfQog
CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKHNjcmF0Y2hTaXplKSwg
bV9vdXQuYWJzb2x1dGUoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpKTsK
LSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTmV3QXJyYXlX
aXRoU3ByZWFkU2xvdywgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKGJ1ZmZlciksIG1f
b3V0LmNvbnN0SW50MzIobV9ub2RlLT5udW1DaGlsZHJlbigpKSk7CisgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNwcmVhZFNsb3csIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIG1fb3V0LmNvbnN0SW50UHRyKGJ1ZmZlciksIG1fb3V0
LmNvbnN0SW50MzIobV9ub2RlLT5udW1DaGlsZHJlbigpKSk7CiAgICAgICAgIG1fb3V0LnN0b3Jl
UHRyKG1fb3V0LmNvbnN0SW50UHRyKDApLCBtX291dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5h
ZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSkpOwogCiAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsK
QEAgLTYzMDcsNiArNjM2Myw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQ3JlYXRlVGhpcygpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICBMVmFsdWUgY2FsbGVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
IAogICAgICAgICBMQmFzaWNCbG9jayBpc0Z1bmN0aW9uQmxvY2sgPSBtX291dC5uZXdCbG9jaygp
OwpAQCAtNjMyOSw3ICs2Mzg2LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgICAgICBt
X291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBJbnQ2
NCwgb3BlcmF0aW9uQ3JlYXRlVGhpcywgbV9jYWxsRnJhbWUsIGNhbGxlZSwgbV9vdXQuY29uc3RJ
bnQzMihtX25vZGUtPmlubGluZUNhcGFjaXR5KCkpKSk7CisgICAgICAgICAgICBJbnQ2NCwgb3Bl
cmF0aW9uQ3JlYXRlVGhpcywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgY2FsbGVlLCBtX291
dC5jb25zdEludDMyKG1fbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpKTsKICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwpAQCAtNjM4OCw3ICs2NDQ1LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgbV9ub2RlLT5pc0ludGVybmFsUHJv
bWlzZSgpID8gb3BlcmF0aW9uQ3JlYXRlSW50ZXJuYWxQcm9taXNlIDogb3BlcmF0aW9uQ3JlYXRl
UHJvbWlzZSwgbV9jYWxsRnJhbWUsIGNhbGxlZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSkp
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2Fs
bChJbnQ2NCwgbV9ub2RlLT5pc0ludGVybmFsUHJvbWlzZSgpID8gb3BlcmF0aW9uQ3JlYXRlSW50
ZXJuYWxQcm9taXNlIDogb3BlcmF0aW9uQ3JlYXRlUHJvbWlzZSwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgY2FsbGVlKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTY0Mzks
NyArNjQ5Niw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0
aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2
bUNhbGwoSW50NjQsIG9wZXJhdGlvbiwgbV9jYWxsRnJhbWUsIGNhbGxlZSwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCBjYWxsZWUpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNjQ2MCw2ICs2
NTE3LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgIHZvaWQgY29tcGlsZVNwcmVhZCgp
CiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBpZiAobV9u
b2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlCdWZmZXIpIHsKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIHNsb3dBbGxvY2F0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC02
NDc0LDcgKzY1MzIsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKHNsb3dBbGxvY2F0aW9uLCBjb250aW51YXRpb24pOwotICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc2xvd0ZpeGVkQXJyYXkgPSBtX291dC5hbmNob3Iodm1DYWxsKHBv
aW50ZXJUeXBlKCksIG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXksIG1fY2FsbEZyYW1lLCBtX291
dC5jb25zdEludDMyKGltbXV0YWJsZUJ1dHRlcmZseS0+bGVuZ3RoKCkpKSk7CisgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93Rml4ZWRBcnJheSA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9p
bnRlclR5cGUoKSwgb3BlcmF0aW9uQ3JlYXRlRml4ZWRBcnJheSwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgbV9vdXQuY29uc3RJbnQzMihpbW11dGFibGVCdXR0ZXJmbHktPmxlbmd0aCgpKSkp
OwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTY1MTksNyArNjU3Nyw3
IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBtX291dC5qdW1wKGxvb3BIZWFk
ZXIpOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93QWxsb2NhdGlvbiwgbG9vcEhl
YWRlcik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QXJyYXkgPSBtX291dC5hbmNo
b3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbkNyZWF0ZUZpeGVkQXJyYXksIG1fY2Fs
bEZyYW1lLCBsZW5ndGgpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dBcnJheSA9
IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uQ3JlYXRlRml4ZWRB
cnJheSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbGVuZ3RoKSk7CiAgICAgICAgICAgICBt
X291dC5qdW1wKGxvb3BIZWFkZXIpOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhsb29w
SGVhZGVyLCBsb29wQm9keSk7CkBAIC02NjIxLDE0ICs2Njc5LDE0IEBAIGNsYXNzIExvd2VyREZH
VG9CMyB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQ
YXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uU3ByZWFkRmFz
dEFycmF5LCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJh
dGlvblNwcmVhZEZhc3RBcnJheSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYXJndW1lbnQp
KTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICByZXN1
bHQgPSBtX291dC5waGkocG9pbnRlclR5cGUoKSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAg
ICAgICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBy
ZXN1bHQgPSB2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uU3ByZWFkR2VuZXJpYywgbV9j
YWxsRnJhbWUsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChwb2ludGVy
VHlwZSgpLCBvcGVyYXRpb25TcHJlYWRHZW5lcmljLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3Qp
LCBhcmd1bWVudCk7CiAKICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KQEAgLTY2
NDksNyArNjcwNyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRo
LCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgTFZhbHVlIHNsb3dBcnJheSA9IHZtQ2FsbChJ
bnQ2NCwgb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIG1fY2FsbEZyYW1lLCB3ZWFrU3RydWN0dXJl
KHN0cnVjdHVyZSksIGZyb3plblBvaW50ZXIobV9ub2RlLT5jZWxsT3BlcmFuZCgpKSk7CisgICAg
ICAgICAgICBMVmFsdWUgc2xvd0FycmF5ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25OZXdBcnJh
eUJ1ZmZlciwgbV92bVZhbHVlLCB3ZWFrU3RydWN0dXJlKHN0cnVjdHVyZSksIGZyb3plblBvaW50
ZXIobV9ub2RlLT5jZWxsT3BlcmFuZCgpKSk7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dBcnJheSk7CiAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CiAKQEAgLTY2NjEsNyArNjcxOSw3IEBAIGNsYXNzIExvd2VyREZH
VG9CMyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAot
ICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyLCBtX2NhbGxGcmFtZSwK
KyAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgbV92bVZhbHVlLAog
ICAgICAgICAgICAgd2Vha1N0cnVjdHVyZShzdHJ1Y3R1cmUpLCBmcm96ZW5Qb2ludGVyKG1fbm9k
ZS0+Y2VsbE9wZXJhbmQoKSkpKTsKICAgICB9CiAKQEAgLTY2ODYsNyArNjc0NCw3IEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwocHVibGljTGVu
Z3RoLCBtX291dC5jb25zdEludDMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5H
VEgpKSwKICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmUobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2Nh
dGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSksCiAgICAgICAgICAgICB3ZWFrU3RydWN0dXJl
KHN0cnVjdHVyZSkpOwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZSwgbV9jYWxsRnJhbWUsIHN0cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5n
dGgsIG1fb3V0LmludFB0clplcm8pKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHN0
cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgsIG1fb3V0LmludFB0clplcm8pKTsKICAgICB9CiAK
ICAgICB2b2lkIGNvbXBpbGVOZXdUeXBlZEFycmF5KCkKQEAgLTY3NjQsNyArNjgyMiw3IEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0g
bGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9j
YXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JU
eXBlKHR5cGVkQXJyYXlUeXBlKSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZSh0eXBl
ZEFycmF5VHlwZSksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2JqZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZS5nZXQoKSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7CiAgICAgICAgICAgICAgICAgfSwKQEAgLTY3
ODIsNyArNjg0MCw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAgICAgICAgIExWYWx1
ZSByZXN1bHQgPSB2bUNhbGwoCiAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoKSwgb3BlcmF0
aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5cGUodHlwZWRBcnJheVR5cGUpLAot
ICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QtPnR5
cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50bHkodHlwZWRBcnJheVR5cGUpKSwgYXJndW1lbnQp
OworICAgICAgICAgICAgICAgIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZUNvbmN1cnJlbnRseSh0eXBlZEFycmF5
VHlwZSkpLCBhcmd1bWVudCk7CiAKICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTY4MTgsMTAgKzY4NzYsMTEgQEAgY2xhc3MgTG93ZXJERkdU
b0IzIHsKIAogICAgIHZvaWQgY29tcGlsZVRvTnVtYmVyKCkKICAgICB7CisgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgaWYgKCEoYWJzdHJhY3RWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKS5tX3R5cGUgJiBTcGVjQnl0ZWNvZGVOdW1iZXIpKQotICAgICAgICAgICAgc2V0SlNW
YWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvblRvTnVtYmVyLCBtX2NhbGxGcmFtZSwgdmFsdWUp
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25Ub051bWJl
ciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgdmFsdWUpKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBub3ROdW1iZXIgPSBtX291dC5uZXdCbG9jaygpOwogICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAg
LTY4MzQsNyArNjg5Myw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHNldmVyYWwgYXR0ZW1wdHMgdG8gcmVtb3ZlIFRvTnVtYmVyLiBCdXQgVG9OdW1iZXIg
c3RpbGwgZXhpc3RzLgogICAgICAgICAgICAgLy8gSXQgbWVhbnMgdGhhdCBjb252ZXJ0aW5nIG5v
bi1udW1iZXJzIHRvIG51bWJlcnMgYnkgdGhpcyBUb051bWJlciBpcyBub3QgcmFyZS4KICAgICAg
ICAgICAgIC8vIEluc3RlYWQgb2YgdGhlIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRvciwgd2UgY2Fs
bCB0aGUgb3BlcmF0aW9uIGhlcmUuCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uVG9OdW1iZXIsIG1fY2Fs
bEZyYW1lLCB2YWx1ZSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvblRvTnVtYmVyLCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpLCB2YWx1ZSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogCiAgICAgICAgICAgICAvLyBjb250aW51YXRpb24gY2FzZS4KQEAgLTY4NDYsNiAr
NjkwNSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgdm9pZCBjb21waWxlVG9TdHJpbmdP
ckNhbGxTdHJpbmdDb25zdHJ1Y3Rvck9yU3RyaW5nVmFsdWVPZigpCiAgICAgewogICAgICAgICBB
U1NFUlQobV9ub2RlLT5vcCgpICE9IFN0cmluZ1ZhbHVlT2YgfHwgbV9ub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAg
Y2FzZSBTdHJpbmdPYmplY3RVc2U6IHsKICAgICAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKTsKQEAgLTY5MTgsMTIgKzY5NzgsMTIgQEAgY2xhc3MgTG93ZXJE
RkdUb0IzIHsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICBpZiAobV9u
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgewogICAgICAgICAgICAgICAgIEFT
U0VSVChtX25vZGUtPm9wKCkgIT0gU3RyaW5nVmFsdWVPZik7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gdm1DYWxsKEludDY0LCBtX25vZGUtPm9wKCkgPT0gVG9TdHJpbmcgPyBvcGVyYXRpb25U
b1N0cmluZ09uQ2VsbCA6IG9wZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3Rvck9uQ2VsbCwgbV9j
YWxsRnJhbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQs
IG1fbm9kZS0+b3AoKSA9PSBUb1N0cmluZyA/IG9wZXJhdGlvblRvU3RyaW5nT25DZWxsIDogb3Bl
cmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yT25DZWxsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCB2YWx1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGF1dG8q
IG9wZXJhdGlvbiA9IG1fbm9kZS0+b3AoKSA9PSBUb1N0cmluZwogICAgICAgICAgICAgICAgICAg
ICA/IG9wZXJhdGlvblRvU3RyaW5nIDogbV9ub2RlLT5vcCgpID09IFN0cmluZ1ZhbHVlT2YKICAg
ICAgICAgICAgICAgICAgICAgPyBvcGVyYXRpb25TdHJpbmdWYWx1ZU9mIDogb3BlcmF0aW9uQ2Fs
bFN0cmluZ0NvbnN0cnVjdG9yOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCB2
YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0
ZWRSZXN1bHQgPSBtX291dC5hbmNob3IocmVzdWx0KTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKQEAgLTY5MzQsMTUgKzY5OTQsMTUgQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSW50MzJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4
LCBtX2NhbGxGcmFtZSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50
MzIoMTApKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9u
SW50MzJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnQzMigxMCkpKTsKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBjYXNlIEludDUyUmVwVXNlOgotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkludDUyVG9TdHJpbmdXaXRoVmFsaWRS
YWRpeCwgbV9jYWxsRnJhbWUsIGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291
dC5jb25zdEludDMyKDEwKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbkludDUyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgbG93U3RyaWN0SW50NTIobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50
MzIoMTApKSk7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgY2FzZSBEb3VibGVSZXBV
c2U6Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRG91Ymxl
VG9TdHJpbmdXaXRoVmFsaWRSYWRpeCwgbV9jYWxsRnJhbWUsIGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKSwgbV9vdXQuY29uc3RJbnQzMigxMCkpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
dm1DYWxsKEludDY0LCBvcGVyYXRpb25Eb3VibGVUb1N0cmluZ1dpdGhWYWxpZFJhZGl4LCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0
LmNvbnN0SW50MzIoMTApKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAg
ICAgICAgZGVmYXVsdDoKQEAgLTY5NTMsNiArNzAxMyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7
CiAgICAgCiAgICAgdm9pZCBjb21waWxlVG9QcmltaXRpdmUoKQogICAgIHsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENh
c2UgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNjk3Myw3ICs3MDM0LDcgQEAgY2xhc3MgTG93ZXJE
RkdUb0IzIHsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzT2JqZWN0Q2FzZSwg
Y29udGludWF0aW9uKTsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZtQ2Fs
bCgKLSAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25Ub1ByaW1pdGl2ZSwgbV9jYWxsRnJhbWUs
IHZhbHVlKSkpOworICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvblRvUHJpbWl0aXZlLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLCB2YWx1ZSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CkBAIC02OTgyLDYgKzcwNDMsOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
ICAgIAogICAgIHZvaWQgY29tcGlsZU1ha2VSb3BlKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CisKICAgICAgICAgc3RydWN0IEZsYWdzQW5kTGVuZ3RoIHsKICAgICAg
ICAgICAgIExWYWx1ZSBmbGFnczsKICAgICAgICAgICAgIExWYWx1ZSBsZW5ndGg7CkBAIC03MDky
LDcgKzcxNTUsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgc2xvd1Jlc3Vs
dFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBW
ZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4gewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtlUm9wZTIsIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uTWFrZVJvcGUyLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BS
KCksIGdsb2JhbE9iamVjdCwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKICAgICAgICAgICAgICAgICB9
LCBraWRzWzBdLCBraWRzWzFdKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzEwMCw3ICs3MTYz
LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9
IGxhenlTbG93UGF0aCgKICAgICAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLAot
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTWFrZVJvcGUzLCBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbk1ha2VSb3BlMywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBnbG9i
YWxPYmplY3QsIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzNdLmRpcmVjdEdQUigpKTsK
ICAgICAgICAgICAgICAgICB9LCBraWRzWzBdLCBraWRzWzFdLCBraWRzWzJdKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNzE3MCw3ICs3MjMzLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAg
ICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCA0PiByZXN1bHRzOwogICAgICAgICByZXN1bHRz
LmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKAogICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlv
blNpbmdsZUNoYXJhY3RlclN0cmluZywKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBjaGFyMTZC
aXRWYWx1ZSkpKTsKKyAgICAgICAgICAgIG1fdm1WYWx1ZSwgY2hhcjE2Qml0VmFsdWUpKSk7CiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICBt
X291dC5hcHBlbmRUbyhiaXRzQ29udGludWF0aW9uLCBzbG93UGF0aCk7CkBAIC03MTg5LDYgKzcy
NTIsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9m
Qm91bmRzLCBub1ZhbHVlKCksIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKICAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5pbnRQdHJaZXJvKSk7CiAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXMgaXQgY29ycmVjdCBKU0dsb2JhbE9iamVj
dD8KICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+c3RyaW5nUHJv
dG90eXBlKCktPnN0cnVjdHVyZSh2bSgpKTsKICAgICAgICAgICAgIFN0cnVjdHVyZSogb2JqZWN0
UHJvdG90eXBlU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKS0+c3Ry
dWN0dXJlKHZtKCkpOwpAQCAtNzIxMyw4ICs3Mjc3LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZWdhdGl2ZUluZGV4LCBjb250aW51YXRp
b24pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0
cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBJbnQ2NCwgb3Bl
cmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQsIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpKTsKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJh
dGlvbkdldEJ5VmFsU3RyaW5nSW50LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBp
bmRleCkpKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKQEAgLTczMjksMTEgKzczOTIsMTIgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
IAogICAgIHZvaWQgY29tcGlsZVN0cmluZ0Zyb21DaGFyQ29kZSgpCiAgICAgeworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG1fbm9kZS0+
Y2hpbGQxKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKSB7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAg
ICAgICAgICAgIEludDY0LCBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGVVbnR5cGVkLCBtX2Nh
bGxGcmFtZSwKKyAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJD
b2RlVW50eXBlZCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgICAgICBs
b3dKU1ZhbHVlKGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzM2Miw3ICs3NDI2LDcgQEAgY2xhc3MgTG93ZXJERkdU
b0IzIHsKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CiAK
ICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IHZtQ2FsbCgKLSAgICAgICAgICAgIHBv
aW50ZXJUeXBlKCksIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZSwgbV9jYWxsRnJhbWUsIHZh
bHVlKTsKKyAgICAgICAgICAgIHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFy
Q29kZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgdmFsdWUpOwogICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CiAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIApAQCAtNzYxMSw3ICs3Njc1LDcgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgWz0s
ICZ2bV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBJbnZhbGlk
R1BSUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2V0KSk7CisgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBJbnZhbGlkR1BSUmVnLCAmdm0sIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihzZXQpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtNzc4Myw2ICs3ODQ3LDcgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICAKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEo
KQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgaWYgKG1f
bm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewogICAgICAgICAgICAgc2V0Qm9vbGVh
bigKICAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgp
KSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKQEAgLTc4ODYsNyArNzk1MSw3IEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKG5vdFRyaXZpYWxseUVxdWFsQ2FzZSwgY29udGludWF0aW9uKTsKIAogICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5u
b3ROdWxsKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCkpKTsKKyAgICAgICAgICAg
ICAgICBwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGxlZnQsIHJpZ2h0KSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKQEAgLTgwODQsNiArODE0OSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAK
ICAgICB2b2lkIGNvbXBpbGVTYW1lVmFsdWUoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKERvdWJsZVJl
cFVzZSkpIHsKICAgICAgICAgICAgIExWYWx1ZSBhcmcxID0gbG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgTFZhbHVlIGFyZzIgPSBsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDIoKSk7CkBAIC04MTE4LDcgKzgxODQsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAg
ICB9CiAKICAgICAgICAgQVNTRVJUKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2Up
KTsKLSAgICAgICAgc2V0Qm9vbGVhbih2bUNhbGwoSW50MzIsIG9wZXJhdGlvblNhbWVWYWx1ZSwg
bV9jYWxsRnJhbWUsIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgc2V0Qm9vbGVhbih2bUNhbGwoSW50MzIsIG9wZXJh
dGlvblNhbWVWYWx1ZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KCkKQEAgLTgyMDQsNiArODI3MCw3IEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsK
IAogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
YWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAg
ICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogCkBAIC04NDkzLDcgKzg1NjAsNyBAQCBjbGFz
cyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2Rl
T3JpZ2luKTsKIAogICAgICAgICAgICAgICAgIC8vIFllcywgdGhpcyBpcyByZWFsbHkgbmVjZXNz
YXJ5LiBZb3UgY291bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGluIGEgaG9zdCBjYWxsIG9uIHRoZQot
ICAgICAgICAgICAgICAgIC8vIHNsb3cgcGF0aC4gVGhhdCdsbCByb3V0ZSB1cyB0byBsb29rdXBF
eGNlcHRpb25IYW5kbGVyKCksIHdoaWNoIHVud2luZHMgc3RhcnRpbmcKKyAgICAgICAgICAgICAg
ICAvLyBzbG93IHBhdGguIFRoYXQnbGwgcm91dGUgdXMgdG8gb3BlcmF0aW9uTG9va3VwRXhjZXB0
aW9uSGFuZGxlcigpLCB3aGljaCB1bndpbmRzIHN0YXJ0aW5nCiAgICAgICAgICAgICAgICAgLy8g
d2l0aCB0aGUgY2FsbCBzaXRlIGluZGV4IG9mIG91ciBmcmFtZS4gQmFkIHRoaW5ncyBoYXBwZW4g
aWYgaXQncyBub3Qgc2V0LgogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMo
KSksCkBAIC04NTI5LDYgKzg1OTYsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CiAKICAgICAgICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZv
KSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogCiAgICAgICAgICAgICAg
ICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwpAQCAtODc3
NSw3ICs4ODQzLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb250VGhyb3cgPSBqaXQuanVt
cCgpOwogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgICAgICAg
ICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dTdGFj
a092ZXJmbG93Rm9yVmFyYXJncyk+KCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKT4o
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSk7
CiAgICAgICAgICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0
PHZvaWQqPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVmFyYXJnc1Rocm93aW5nUGF0aERp
ZE5vdFRocm93KTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC04ODIwLDYgKzg4ODgsNyBAQCBj
bGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgIEFTU0VSVCghdXNlZFJlZ2lzdGVycy5nZXQo
R1BSSW5mbzo6cmVnVDIpKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgR1BSSW5mbzo6cmVn
VDMpOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKQpAQCAtOTA0MCwxNCArOTEwOSwxNCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKICAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0ZvclZhcmFyZ3MpPigpOworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyk+KGppdC5jb2Rl
QmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpOwogICAgICAg
ICAgICAgICAgICAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4o
b3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncykpOwogICAgICAgICAgICAgICAg
ICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1ZhcmFyZ3NUaHJvd2luZ1BhdGhEaWROb3RUaHJv
dyk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmso
JmppdCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIob3JpZ2luYWxTdGFja0hlaWdodCAvIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdz
KT4oYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
ZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MpPihqaXQuY29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBhcmd1bWVu
dHNHUFIsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJz
dFZhckFyZ09mZnNldCkpOwogICAgICAgICAgICAgICAgICAgICBjYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncykpOwog
CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBz
Y3JhdGNoR1BSMSk7CkBAIC05MDU1LDcgKzkxMjQsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
ICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNMYXRlUmVwLmVtaXRSZXN0b3JlKGppdCwgYXJn
dW1lbnRzR1BSKTsKICAgICAgICAgICAgICAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQs
IHNjcmF0Y2hHUFIxLCBmYWxzZSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIyKTsKICAgICAgICAg
ICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtbWluaW11
bUpTQ2FsbEFyZWFTaXplKSwgc2NyYXRjaEdQUjIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpPihzY3JhdGNoR1BSMiwgYXJndW1lbnRzR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCksIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lKT4oaml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgc2NyYXRjaEdQUjIsIGFyZ3VtZW50c0dQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpLCBz
Y3JhdGNoR1BSMSk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
Yml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSkpOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC05MTAy
LDYgKzkxNzEsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgIGlmIChp
c1RhaWxDYWxsKQogICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpCkBAIC05MTc5
LDYgKzkyNDksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CiAgICAgICAgIFN0
YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwor
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCiAgICAgICAgICAgICBbPSwgJnZtXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwpAQCAtOTIwMSwx
MCArOTI3MiwxMCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgIC8vIE5v
dyB3ZSBuZWVkIHRvIG1ha2Ugcm9vbSBmb3I6CiAgICAgICAgICAgICAgICAgLy8gLSBUaGUgY2Fs
bGVyIGZyYW1lIGFuZCBQQyBmb3IgYSBjYWxsIHRvIG9wZXJhdGlvbkNhbGxFdmFsLgogICAgICAg
ICAgICAgICAgIC8vIC0gUG90ZW50aWFsbHkgdHdvIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgcmVxdWlyZWRCeXRlcyA9IHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSArIHNpemVvZihFeGVjU3RhdGUqKSAqIDI7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgcmVxdWlyZWRCeXRlcyA9IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIHNpemVvZihDYWxs
RnJhbWUqKSAqIDI7CiAgICAgICAgICAgICAgICAgcmVxdWlyZWRCeXRlcyA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHJlcXVpcmVkQnl0ZXMpOwogICAg
ICAgICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVxdWly
ZWRCeXRlcyksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25DYWxsRXZhbCk+KEdQ
UkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uQ2FsbEV2YWwpPihnbG9iYWxPYmplY3QsIEdQUkluZm86OnJlZ1QxKTsKICAg
ICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1
bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ2FsbEV2YWwpKSwgR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAg
ICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2so
c3RhdGUtPnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2Vt
Ymx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CkBAIC05MjEzLDcgKzkyODQsNyBAQCBjbGFzcyBM
b3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVxdWlyZWRCeXRlcyksIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0Nh
bGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKHZtLCBj
YWxsTGlua0luZm8pOworICAgICAgICAgICAgICAgIGppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKHZt
LCBnbG9iYWxPYmplY3QsIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCkBA
IC05MjI2LDExICs5Mjk3LDEyIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlTG9hZFZhcmFyZ3MoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJn
c0RhdGEoKTsKICAgICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCi0g
ICAgICAgICAgICBJbnQzMiwgb3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgbV9jYWxsRnJhbWUsIGpz
QXJndW1lbnRzLAorICAgICAgICAgICAgSW50MzIsIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MsIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGpzQXJndW1lbnRzLAogICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBU
aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3RoIHBy
b3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKQEAgLTkyNTksNyArOTMzMSw3IEBAIGNsYXNzIExv
d2VyREZHVG9CMyB7CiAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigzKSk7CiAgICAgICAg
IAogICAgICAgICB2bUNhbGwoCi0gICAgICAgICAgICBWb2lkLCBvcGVyYXRpb25Mb2FkVmFyYXJn
cywgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICBWb2lkLCBvcGVyYXRpb25Mb2FkVmFyYXJncywg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgIG1fb3V0LmNhc3RUb0ludDMy
KG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNl
dCksCiAgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5
TWluaW11bSkpOwogICAgIH0KQEAgLTk1NDksNiArOTYyMSw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgCiAgICAgdm9pZCBjb21waWxlU3dpdGNoKCkKICAgICB7CisgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBtX25vZGUtPnN3
aXRjaERhdGEoKTsKICAgICAgICAgc3dpdGNoIChkYXRhLT5raW5kKSB7CiAgICAgICAgIGNhc2Ug
U3dpdGNoSW1tOiB7CkBAIC05NjU3LDcgKzk3MzAsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5lZWRS
ZXNvbHV0aW9uLCByZXNvbHZlZCk7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93VmFs
dWUgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAgdm1DYWxsKHBvaW50ZXJUeXBlKCks
IG9wZXJhdGlvblJlc29sdmVSb3BlLCBtX2NhbGxGcmFtZSwgc3RyaW5nVmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICB2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uUmVzb2x2ZVJvcGUsIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHN0cmluZ1ZhbHVlKSk7CiAgICAgICAgICAgICBtX291
dC5qdW1wKHJlc29sdmVkKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ocmVzb2x2ZWQs
IGxlbmd0aElzMSk7CkBAIC05ODQ0LDE3ICs5OTE3LDE5IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7
CiAgICAgCiAgICAgdm9pZCBjb21waWxlVGhyb3coKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGVycm9yID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvblRocm93REZHLCBtX2Nh
bGxGcmFtZSwgZXJyb3IpOyAKKyAgICAgICAgdm1DYWxsKFZvaWQsIG9wZXJhdGlvblRocm93REZH
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBlcnJvcik7IAogICAgICAgICAvLyB2bUNhbGwo
KSBkb2VzIGFuIGV4Y2VwdGlvbiBjaGVjayBzbyB3ZSBzaG91bGQgbmV2ZXIgcmVhY2ggdGhpcy4K
ICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVU
aHJvd1N0YXRpY0Vycm9yKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgIExWYWx1ZSBlcnJvck1lc3NhZ2UgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIExWYWx1ZSBlcnJvclR5cGUgPSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+
ZXJyb3JUeXBlKCkpOwotICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uVGhyb3dTdGF0aWNF
cnJvciwgbV9jYWxsRnJhbWUsIGVycm9yTWVzc2FnZSwgZXJyb3JUeXBlKTsKKyAgICAgICAgdm1D
YWxsKFZvaWQsIG9wZXJhdGlvblRocm93U3RhdGljRXJyb3IsIHdlYWtQb2ludGVyKGdsb2JhbE9i
amVjdCksIGVycm9yTWVzc2FnZSwgZXJyb3JUeXBlKTsKICAgICAgICAgLy8gdm1DYWxsKCkgZG9l
cyBhbiBleGNlcHRpb24gY2hlY2sgc28gd2Ugc2hvdWxkIG5ldmVyIHJlYWNoIHRoaXMuCiAgICAg
ICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgfQpAQCAtMTAwNzIsNiArMTAxNDcsNyBAQCBj
bGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgTFZhbHVlIG1hcEhhc2hTdHJpbmcoTFZhbHVlIHN0
cmluZywgRWRnZSYgZWRnZSkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgIExCYXNpY0Jsb2NrIG5vbkVtcHR5U3RyaW5nQ2FzZSA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEw
MDg3LDcgKzEwMTYzLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIHZtQ2FsbChJbnQzMiwgb3Bl
cmF0aW9uTWFwSGFzaCwgbV9jYWxsRnJhbWUsIHN0cmluZykpOworICAgICAgICAgICAgdm1DYWxs
KEludDMyLCBvcGVyYXRpb25NYXBIYXNoLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBzdHJp
bmcpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMTAwOTYsNiArMTAxNzIsNyBA
QCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgdm9pZCBjb21waWxlTWFwSGFzaCgpCiAgICAg
eworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAgICAg
ICAgY2FzZSBJbnQzMlVzZToKQEAgLTEwMTc0LDcgKzEwMjUxLDcgQEAgY2xhc3MgTG93ZXJERkdU
b0IzIHsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsK
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAg
ICAgICAgIHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uTWFwSGFzaCwgbV9jYWxsRnJhbWUsIHZhbHVl
KSk7CisgICAgICAgICAgICB2bUNhbGwoSW50MzIsIG9wZXJhdGlvbk1hcEhhc2gsIHdlYWtQb2lu
dGVyKGdsb2JhbE9iamVjdCksIHZhbHVlKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
QEAgLTEwMjIxLDYgKzEwMjk4LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgIHZvaWQg
Y29tcGlsZUdldE1hcEJ1Y2tldCgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOwog
ICAgICAgICBMQmFzaWNCbG9jayBsb29wQXJvdW5kID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTAzNTEsNyAr
MTA0MjksNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dQYXRoLCBub3RQcmVzZW50SW5UYWJsZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLAotICAgICAg
ICAgICAgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlID8gb3BlcmF0
aW9uSlNNYXBGaW5kQnVja2V0IDogb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0LCBtX2NhbGxGcmFt
ZSwgbWFwLCBrZXksIGhhc2gpKTsKKyAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE1hcE9iamVjdFVzZSA/IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCA6IG9wZXJhdGlv
bkpTU2V0RmluZEJ1Y2tldCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbWFwLCBrZXksIGhh
c2gpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG5vdFByZXNlbnRJblRhYmxlLCBjb250aW51YXRpb24pOwpAQCAtMTA0NDYsMjEg
KzEwNTI0LDIzIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICB2b2lkIGNvbXBpbGVTZXRB
ZGQoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTFZh
bHVlIHNldCA9IGxvd1NldE9iamVjdChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVl
IGtleSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIExWYWx1ZSBoYXNo
ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDMoKSk7CiAKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNh
bGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uU2V0QWRkLCBtX2NhbGxGcmFtZSwgc2V0LCBrZXks
IGhhc2gpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0
aW9uU2V0QWRkLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBzZXQsIGtleSwgaGFzaCkpOwog
ICAgIH0KIAogICAgIHZvaWQgY29tcGlsZU1hcFNldCgpCiAgICAgeworICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMVmFsdWUgbWFwID0gbG93TWFwT2JqZWN0KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7CiAgICAgICAgIExWYWx1ZSBrZXkgPSBsb3dKU1Zh
bHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CiAgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAg
TFZhbHVlIGhhc2ggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOwog
Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvbk1hcFNl
dCwgbV9jYWxsRnJhbWUsIG1hcCwga2V5LCB2YWx1ZSwgaGFzaCkpOworICAgICAgICBzZXRKU1Zh
bHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25NYXBTZXQsIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksIG1hcCwga2V5LCB2YWx1ZSwgaGFzaCkpOwogICAgIH0KIAogICAgIHZvaWQg
Y29tcGlsZVdlYWtNYXBHZXQoKQpAQCAtMTA1MjcsNyArMTA2MDcsNyBAQCBjbGFzcyBMb3dlckRG
R1RvQjMgewogICAgICAgICBMVmFsdWUga2V5ID0gbG93T2JqZWN0KG1fbm9kZS0+Y2hpbGQyKCkp
OwogICAgICAgICBMVmFsdWUgaGFzaCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQzKCkpOwogCi0g
ICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25XZWFrU2V0QWRkLCBtX2NhbGxGcmFtZSwgc2V0
LCBrZXksIGhhc2gpOworICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uV2Vha1NldEFkZCwg
bV92bVZhbHVlLCBzZXQsIGtleSwgaGFzaCk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlV2Vh
a01hcFNldCgpCkBAIC0xMDUzNyw3ICsxMDYxNyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDIpKTsKICAgICAgICAgTFZhbHVlIGhhc2ggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMykpOwogCi0gICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25XZWFrTWFw
U2V0LCBtX2NhbGxGcmFtZSwgbWFwLCBrZXksIHZhbHVlLCBoYXNoKTsKKyAgICAgICAgdm1DYWxs
KFZvaWQsIG9wZXJhdGlvbldlYWtNYXBTZXQsIG1fdm1WYWx1ZSwgbWFwLCBrZXksIHZhbHVlLCBo
YXNoKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbCgpCkBAIC0xMDY4
Myw3ICsxMDc2Myw4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlSW5CeVZhbCgpCiAgICAgewotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3Bl
cmF0aW9uSW5CeVZhbCwgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkluQnlWYWws
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVJ
bkJ5SWQoKQpAQCAtMTA3MzEsNiArMTA4MTIsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMu
dW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUsIHBhcmFtc1swXS5ncHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihn
ZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0uZ3ByKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpLmNhbGwoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwpAQCAt
MTA3NDksNiArMTA4MzEsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgdm9pZCBjb21w
aWxlSGFzT3duUHJvcGVydHkoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG51bGxwdHI7CkBAIC0xMDg0Miw3ICsxMDkyNSw3IEBA
IGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2Us
IGNvbnRpbnVhdGlvbik7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQ7Ci0gICAg
ICAgIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDMyLCBvcGVyYXRpb25IYXNP
d25Qcm9wZXJ0eSwgbV9jYWxsRnJhbWUsIG9iamVjdCwga2V5QXNWYWx1ZSkpOworICAgICAgICBz
bG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uSGFzT3duUHJv
cGVydHksIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIG9iamVjdCwga2V5QXNWYWx1ZSkpOwog
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMDg1MiwxOCArMTA5MzUsMTkgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICB2b2lkIGNvbXBpbGVQYXJzZUludCgpCiAgICAgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVk
VXNlIHx8IG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSk7CisgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSByZXN1bHQ7CiAgICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMigpKSB7CiAgICAgICAgICAgICBMVmFsdWUgcmFkaXggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uUGFyc2VJbnRHZW5lcmljLCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKSwgcmFkaXgpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZt
Q2FsbChJbnQ2NCwgb3BlcmF0aW9uUGFyc2VJbnRHZW5lcmljLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCByYWRpeCk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25Q
YXJzZUludFN0cmluZywgbV9jYWxsRnJhbWUsIGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKSwg
cmFkaXgpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9u
UGFyc2VJbnRTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd1N0cmluZyhtX25v
ZGUtPmNoaWxkMSgpKSwgcmFkaXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25QYXJzZUludE5vUmFkaXhHZW5lcmlj
LCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25QYXJzZUludE5vUmFkaXhHZW5l
cmljLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwo
SW50NjQsIG9wZXJhdGlvblBhcnNlSW50U3RyaW5nTm9SYWRpeCwgbV9jYWxsRnJhbWUsIGxvd1N0
cmluZyhtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxs
KEludDY0LCBvcGVyYXRpb25QYXJzZUludFN0cmluZ05vUmFkaXgsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KQEAgLTEwOTkxLDYgKzExMDc1LDcgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+
b3JpZ2luLnNlbWFudGljLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMu
Z2V0KCksIG9wdGltaXphdGlvbkZ1bmN0aW9uLCByZXN1bHRHUFIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgdmFsdWVHUFIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdG90eXBlR1BSKS5jYWxsKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKQEAgLTExMDEzLDExICsxMTA5
OCwxMiBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgdm9pZCBjb21waWxlSW5zdGFuY2VP
ZkN1c3RvbSgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBM
VmFsdWUgY29uc3RydWN0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBM
VmFsdWUgaGFzSW5zdGFuY2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOwogCi0gICAg
ICAgIHNldEJvb2xlYW4obV9vdXQubG9naWNhbE5vdChtX291dC5lcXVhbChtX291dC5jb25zdElu
dDMyKDApLCB2bUNhbGwoSW50MzIsIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fY2FsbEZy
YW1lLCB2YWx1ZSwgY29uc3RydWN0b3IsIGhhc0luc3RhbmNlKSkpKTsKKyAgICAgICAgc2V0Qm9v
bGVhbihtX291dC5sb2dpY2FsTm90KG1fb3V0LmVxdWFsKG1fb3V0LmNvbnN0SW50MzIoMCksIHZt
Q2FsbChJbnQzMiwgb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgdmFsdWUsIGNvbnN0cnVjdG9yLCBoYXNJbnN0YW5jZSkpKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUNvdW50RXhlY3V0aW9uKCkKQEAgLTExMDQ1LDYgKzExMTMxLDcg
QEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAKICAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7
CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9u
b2RlLCAxKSk7CiAKQEAgLTExMDc4LDcgKzExMTY1LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CiAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAg
ICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eUJ5SW50LCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0
aG9kVHlwZSkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0
LCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0KSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKICAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMTExMiw3ICsxMTE5OSw3IEBAIGNsYXNzIExvd2Vy
REZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dD
YXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQodm1DYWxs
KEludDY0LCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlCeUludCwgbV9jYWxsRnJhbWUsIGJh
c2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5cGUpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQu
bm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5QnlJbnQs
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBpbnRlcm5hbE1ldGhvZFR5
cGUpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpA
QCAtMTExNDUsNyArMTEyMzIsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAg
bV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
QnlJbnQsIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOwor
ICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBp
bmRleCwgaW50ZXJuYWxNZXRob2RUeXBlKSkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKQEAgLTExMTU1LDcgKzExMjQyLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAog
ICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICBMVmFsdWUgaW50ZXJuYWxNZXRob2RUeXBl
ID0gbV9vdXQuY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX25vZGUtPmludGVybmFs
TWV0aG9kVHlwZSgpKSk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lm5vdFplcm82NCh2
bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUJ5SW50LCBtX2NhbGxGcmFt
ZSwgYmFzZSwgaW5kZXgsIGludGVybmFsTWV0aG9kVHlwZSkpKTsKKyAgICAgICAgICAgIHNldEJv
b2xlYW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5QnlJbnQsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBpbnRl
cm5hbE1ldGhvZFR5cGUpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0xMTE2MywxMyArMTEyNTAsMTUgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAg
IHZvaWQgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eSgpCiAgICAgeworICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDIoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25IYXNH
ZW5lcmljUHJvcGVydHksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0eSkpOworICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBwcm9wZXJ0eSkpOwogICAgIH0KIAogICAgIHZv
aWQgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KCkKICAgICB7CisgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nKG1fbm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDMoKSk7CkBAIC0xMTE5MSw3ICsxMTI4MCw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHdyb25nU3RydWN0dXJlUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KAogICAgICAgICAgICAgbV9vdXQuZXF1YWwoCiAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIAotICAgICAgICAgICAgICAg
IHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCBtX2NhbGxGcmFtZSwg
YmFzZSwgcHJvcGVydHkpKSk7CisgICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBvcGVyYXRp
b25IYXNHZW5lcmljUHJvcGVydHksIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHBy
b3BlcnR5KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0xMTIwMCw2ICsxMTI4
OSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RQ
bmFtZSgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBM
VmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKICAg
ICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMSkpOwogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMikpOwpAQCAtMTEyMzcsNyArMTEzMjcsNyBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwog
ICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93Q2FzZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWwsIG1fY2FsbEZyYW1lLCBi
YXNlLCBwcm9wZXJ0eSkpOworICAgICAgICAgICAgdm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRC
eVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMTEyNTIsMTAgKzExMzQyLDExIEBAIGNsYXNzIExv
d2VyREZHVG9CMyB7CiAKICAgICB2b2lkIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKQog
ICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgaWYgKG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCi0gICAgICAgICAgICBzZXRKU1ZhbHVl
KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgbV9jYWxs
RnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25H
ZXRQcm9wZXJ0eUVudW1lcmF0b3IsIG1fY2FsbEZyYW1lLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQxKCkpKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9u
R2V0UHJvcGVydHlFbnVtZXJhdG9yLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlR2V0RW51
bWVyYXRvclN0cnVjdHVyZVBuYW1lKCkKQEAgLTExMzEyLDggKzExNDAzLDkgQEAgY2xhc3MgTG93
ZXJERkdUb0IzIHsKICAgICAKICAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKCkKICAgICB7
CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJ
bnQ2NCwgb3BlcmF0aW9uVG9JbmRleFN0cmluZywgbV9jYWxsRnJhbWUsIGluZGV4KSk7CisgICAg
ICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLCBpbmRleCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpCkBAIC0xMTQ1MCw3ICsxMTU0Miw3IEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAgICAgICAgICAgICBbPSwgJnZtXSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6
eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHlXaXRoSW5kZXhpbmdIZWFkZXJBbmRWZWN0b3JMZW5n
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS5nZXQoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZt
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdldCgpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2NhdGlv
bnNbMl0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIHZlY3Rvckxlbmd0aCwgYnV0dGVyZmx5VmFsdWUpOwpAQCAtMTE0NTgs
NyArMTE1NTAsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgICAgICBz
bG93T2JqZWN0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICAgICAgICAgICAgICBb
PSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHksIGxvY2F0aW9uc1swXS5kaXJl
Y3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2Jq
ZWN0V2l0aEJ1dHRlcmZseSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUuZ2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRlcmZseVZhbHVlKTsKQEAg
LTExNjU4LDcgKzExNzUwLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgTFZhbHVl
IGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBbPSwgJnZtXSAoY29uc3Qg
VmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
dm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3Qs
IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
Q3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0sCiAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUu
Z2V0KCkpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCiAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkp
OwpAQCAtMTE3MTEsOSArMTE4MDMsMTAgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhuZWVkVHJhcEhhbmRsaW5nLCBj
b250aW51YXRpb24pOwogCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGxhenlTbG93UGF0aCgKICAgICAgICAgICAg
IFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JikgLT4gUmVmUHRyPExhenlTbG93UGF0
aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2Vu
ZXJhdG9yKHZtLCBvcGVyYXRpb25IYW5kbGVUcmFwcywgSW52YWxpZEdQUlJlZyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKHZtLCBvcGVyYXRpb25IYW5k
bGVUcmFwcywgSW52YWxpZEdQUlJlZywgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIH0pOwog
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtMTE3MjksMjYg
KzExODIyLDIwIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChtX25vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKICAgICAg
ICAgICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDMoKSk7
Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAg
ICAgICAgSW50NjQsIG9wZXJhdGlvblJlZ0V4cEV4ZWNTdHJpbmcsIG1fY2FsbEZyYW1lLCBnbG9i
YWxPYmplY3QsCi0gICAgICAgICAgICAgICAgICAgIGJhc2UsIGFyZ3VtZW50KTsKKyAgICAgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25SZWdFeHBFeGVj
U3RyaW5nLCBnbG9iYWxPYmplY3QsIGJhc2UsIGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgK
LSAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uUmVnRXhwRXhlYywgbV9jYWxsRnJhbWUs
IGdsb2JhbE9iamVjdCwgYmFzZSwKLSAgICAgICAgICAgICAgICBhcmd1bWVudCk7CisgICAgICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25SZWdFeHBFeGVjLCBn
bG9iYWxPYmplY3QsIGJhc2UsIGFyZ3VtZW50KTsKICAgICAgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
TFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBMVmFs
dWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvblJlZ0V4cEV4
ZWNHZW5lcmljLCBtX2NhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBiYXNlLAotICAgICAgICAgICAg
YXJndW1lbnQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRp
b25SZWdFeHBFeGVjR2VuZXJpYywgZ2xvYmFsT2JqZWN0LCBiYXNlLCBhcmd1bWVudCk7CiAgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9CiAKQEAgLTExNzU2LDggKzExODQzLDcgQEAg
Y2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICB7CiAgICAgICAgIExWYWx1ZSBnbG9iYWxPYmplY3Qg
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBMVmFsdWUgYXJndW1lbnQgPSBs
b3dTdHJpbmcobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNh
bGwoCi0gICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uUmVnRXhwRXhlY05vbkdsb2JhbE9yU3Rp
Y2t5LCBtX2NhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBmcm96ZW5Qb2ludGVyKG1fbm9kZS0+Y2Vs
bE9wZXJhbmQoKSksIGFyZ3VtZW50KTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChJ
bnQ2NCwgb3BlcmF0aW9uUmVnRXhwRXhlY05vbkdsb2JhbE9yU3RpY2t5LCBnbG9iYWxPYmplY3Qs
IGZyb3plblBvaW50ZXIobV9ub2RlLT5jZWxsT3BlcmFuZCgpKSwgYXJndW1lbnQpOwogICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogCkBAIC0xMTc2NSw4ICsxMTg1MSw3IEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgewogICAgICAgICBMVmFsdWUgZ2xvYmFsT2JqZWN0ID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93
U3RyaW5nKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxs
KAotICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvblJlZ0V4cE1hdGNoRmFzdEdsb2JhbFN0cmlu
ZywgbV9jYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgZnJvemVuUG9pbnRlcihtX25vZGUtPmNlbGxP
cGVyYW5kKCkpLCBhcmd1bWVudCk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoSW50
NjQsIG9wZXJhdGlvblJlZ0V4cE1hdGNoRmFzdEdsb2JhbFN0cmluZywgZ2xvYmFsT2JqZWN0LCBm
cm96ZW5Qb2ludGVyKG1fbm9kZS0+Y2VsbE9wZXJhbmQoKSksIGFyZ3VtZW50KTsKICAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KIApAQCAtMTE3NzksMjYgKzExODY0LDIwIEBAIGNs
YXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKICAgICAgICAgICAgICAgICBMVmFs
dWUgYXJndW1lbnQgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgSW50MzIsIG9w
ZXJhdGlvblJlZ0V4cFRlc3RTdHJpbmcsIG1fY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsCi0gICAg
ICAgICAgICAgICAgICAgIGJhc2UsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gdm1DYWxsKEludDMyLCBvcGVyYXRpb25SZWdFeHBUZXN0U3RyaW5nLCBnbG9iYWxP
YmplY3QsIGJhc2UsIGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICBzZXRCb29sZWFuKHJlc3Vs
dCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBMVmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBJbnQzMiwgb3Bl
cmF0aW9uUmVnRXhwVGVzdCwgbV9jYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgYmFzZSwKLSAgICAg
ICAgICAgICAgICBhcmd1bWVudCk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxs
KEludDMyLCBvcGVyYXRpb25SZWdFeHBUZXN0LCBnbG9iYWxPYmplY3QsIGJhc2UsIGFyZ3VtZW50
KTsKICAgICAgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMigpKTsKICAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMygpKTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIElu
dDMyLCBvcGVyYXRpb25SZWdFeHBUZXN0R2VuZXJpYywgbV9jYWxsRnJhbWUsIGdsb2JhbE9iamVj
dCwgYmFzZSwKLSAgICAgICAgICAgIGFyZ3VtZW50KTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IHZtQ2FsbChJbnQzMiwgb3BlcmF0aW9uUmVnRXhwVGVzdEdlbmVyaWMsIGdsb2JhbE9iamVjdCwg
YmFzZSwgYXJndW1lbnQpOwogICAgICAgICBzZXRCb29sZWFuKHJlc3VsdCk7CiAgICAgfQogCkBA
IC0xMTgwNywxNCArMTE4ODYsMTMgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgTFZh
bHVlIGdsb2JhbE9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIExW
YWx1ZSBiYXNlID0gbG93UmVnRXhwT2JqZWN0KG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBM
VmFsdWUgYXJndW1lbnQgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgIExW
YWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uUmVnRXhw
TWF0Y2hGYXN0U3RyaW5nLCBtX2NhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LAotICAgICAgICAgICAg
YmFzZSwgYXJndW1lbnQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBv
cGVyYXRpb25SZWdFeHBNYXRjaEZhc3RTdHJpbmcsIGdsb2JhbE9iamVjdCwgYmFzZSwgYXJndW1l
bnQpOwogICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogCiAgICAgdm9pZCBjb21w
aWxlTmV3UmVnZXhwKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgICAgIEZyb3plblZhbHVlKiByZWdleHAgPSBtX25vZGUtPmNlbGxPcGVyYW5kKCk7CiAgICAg
ICAgIExWYWx1ZSBsYXN0SW5kZXggPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBBU1NFUlQocmVnZXhwLT5jZWxsKCktPmluaGVyaXRzPFJlZ0V4cD4odm0oKSkpOwpAQCAt
MTE4MjQsNyArMTE5MDIsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dDYXNlKTsK
IAotICAgICAgICBhdXRvIHN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUobV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBTdHJ1
Y3R1cmUoKSk7CisgICAgICAgIGF1dG8gc3RydWN0dXJlID0gbV9ncmFwaC5yZWdpc3RlclN0cnVj
dHVyZShnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAgICAgICAgTFZhbHVlIGZh
c3RSZXN1bHRWYWx1ZSA9IGFsbG9jYXRlT2JqZWN0PFJlZ0V4cE9iamVjdD4oc3RydWN0dXJlLCBt
X291dC5pbnRQdHJaZXJvLCBzbG93Q2FzZSk7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGZyb3pl
blBvaW50ZXIocmVnZXhwKSwgZmFzdFJlc3VsdFZhbHVlLCBtX2hlYXBzLlJlZ0V4cE9iamVjdF9y
ZWdFeHBBbmRMYXN0SW5kZXhJc05vdFdyaXRhYmxlRmxhZyk7CiAgICAgICAgIG1fb3V0LnN0b3Jl
NjQobGFzdEluZGV4LCBmYXN0UmVzdWx0VmFsdWUsIG1faGVhcHMuUmVnRXhwT2JqZWN0X2xhc3RJ
bmRleCk7CkBAIC0xMTgzOCw3ICsxMTkxNiw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAg
ICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAgICAgICAgICBb
PSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6
eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1JlZ2V4
cFdpdGhMYXN0SW5kZXgsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLCBnbG9iYWxPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihyZWdleHBDZWxsKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKICAg
ICAgICAgICAgIH0sIGxhc3RJbmRleCk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1
bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKQEAgLTExODUwLDEyICsxMTkyOCwx
NCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25O
YW1lKCkKICAgICB7Ci0gICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIG1fY2FsbEZyYW1lLAorICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAg
ICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLAogICAgICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVN0
cmluZ1JlcGxhY2UoKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZQogICAgICAg
ICAgICAgJiYgbV9ub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gUmVnRXhwT2JqZWN0VXNlCiAg
ICAgICAgICAgICAmJiBtX25vZGUtPmNoaWxkMygpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsK
QEAgLTExODY1LDkgKzExOTQ1LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAg
ICAgICAgICAgTFZhbHVlIHN0cmluZyA9IGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgTFZhbHVlIHJlZ0V4cCA9IGxvd1JlZ0V4cE9iamVjdChtX25vZGUt
PmNoaWxkMigpKTsKIAotICAgICAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxs
KAotICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uU3RyaW5n
UHJvdG9GdW5jUmVwbGFjZVJlZ0V4cEVtcHR5U3RyLAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9jYWxsRnJhbWUsIHN0cmluZywgcmVnRXhwKTsKKyAgICAgICAgICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNS
ZXBsYWNlUmVnRXhwRW1wdHlTdHIsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHN0cmluZywg
cmVnRXhwKTsKIAogICAgICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTExODc4LDkgKzExOTU2LDcgQEAgY2xhc3MgTG93
ZXJERkdUb0IzIHsKICAgICAgICAgICAgIExWYWx1ZSByZWdFeHAgPSBsb3dSZWdFeHBPYmplY3Qo
bV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVwbGFjZSA9IGxvd1N0cmlu
ZyhtX25vZGUtPmNoaWxkMygpKTsKIAotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2Fs
bCgKLSAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25TdHJpbmdQcm90b0Z1
bmNSZXBsYWNlUmVnRXhwU3RyaW5nLAotICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBzdHJp
bmcsIHJlZ0V4cCwgcmVwbGFjZSk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxs
KHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VSZWdFeHBTdHJp
bmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHN0cmluZywgcmVnRXhwLCByZXBsYWNlKTsK
IAogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTE4OTMsNyArMTE5NjksOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAg
c2VhcmNoID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKIAogICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgcG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uU3Ry
aW5nUHJvdG9GdW5jUmVwbGFjZUdlbmVyaWMsIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgcG9p
bnRlclR5cGUoKSwgb3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZUdlbmVyaWMsCisgICAg
ICAgICAgICB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAgICAgICAgICAgbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKSwgc2VhcmNoLAogICAgICAgICAgICAgbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMygpKSk7CiAKQEAgLTEyMjM4LDcgKzEyMzE1LDcgQEAgY2xhc3MgTG93ZXJERkdU
b0IzIHsKICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgcG9pbnRl
clR5cGUoKSwKICAgICAgICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZUNvbXBsZXhQcm9wZXJ0
eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LAotICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1l
LCBvYmplY3QpOworICAgICAgICAgICAgICAgIG1fdm1WYWx1ZSwgb2JqZWN0KTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlV2l0aFNpemVJbXBsKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CkBAIC0xMjI2MSw3ICsx
MjMzOCw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIAogICAgICAgICBpZiAocHJl
dmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgICAgIExWYWx1ZSBu
ZXdBbGxvY1NpemUgPSBtX291dC5jb25zdEludFB0cihuZXdTaXplKTsgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25B
bGxvY2F0ZUNvbXBsZXhQcm9wZXJ0eVN0b3JhZ2UsIG1fY2FsbEZyYW1lLCBvYmplY3QsIG5ld0Fs
bG9jU2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gdm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJh
dGlvbkFsbG9jYXRlQ29tcGxleFByb3BlcnR5U3RvcmFnZSwgbV92bVZhbHVlLCBvYmplY3QsIG5l
d0FsbG9jU2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbChuZXdTaXplKTsKQEAgLTEyMzA3
LDEzICsxMjM4NCwxMyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgIFs9
LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5
U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3Iodm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25B
bGxvY2F0ZVNpbXBsZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCAmdm0pOwogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVl
ID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZVNpbXBsZVByb3BlcnR5
U3RvcmFnZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uQWxsb2NhdGVTaW1wbGVQcm9wZXJ0eVN0b3JhZ2UsIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwgJnZtLAogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHNpemVJblZhbHVlcykpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CkBAIC0xMjM4Miw2ICsxMjQ1OSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcHRpbWl6YXRpb25GdW5jdGlv
biwgcGFyYW1zWzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2Rl
QmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRv
ci0+c3R1YkluZm8oKSksIHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSkuY2FsbCgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CkBAIC0xMjQ1MCw2
ICsxMjUyOCw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleGNlcHRpb25zLmdldCgpLCBvcHRpbWl6YXRpb25GdW5jdGlvbiwgcGFyYW1zWzBdLmdw
cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSks
IHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMl0u
Z3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKS5jYWxsKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKQEAgLTEyNDg2
LDYgKzEyNTY1LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgQ19KSVRPcGVyYXRp
b25fQl9FSnNzSnNzIHN0cmluZ0Z1bmN0aW9uLAogICAgICAgICBTX0pJVE9wZXJhdGlvbl9FSkog
ZmFsbGJhY2tGdW5jdGlvbikKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKICAgICAg
ICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKQEAgLTEyNTIz
LDcgKzEyNjAzLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IHZtQ2FsbCgKICAgICAgICAgICAgICAgICBJbnQzMiwgc3RyaW5nRnVuY3Rpb24s
Ci0gICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
ICAgICB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsZWZ0LCByaWdodCk7CiAgICAgICAgICAg
ICBzZXRCb29sZWFuKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTEyNTM0LDYgKzEyNjE0LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgIHZvaWQgY29t
cGlsZVN0cmluZ1NsaWNlKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgIExCYXNpY0Jsb2NrIGxlbmd0aENoZWNrQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CiAgICAgICAgIExCYXNpY0Jsb2NrIGVtcHR5Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAg
ICAgIExCYXNpY0Jsb2NrIG5vdEVtcHR5Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMjU5
NSw3ICsxMjY3Niw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGJpZ0NoYXJhY3RlciwgYml0c0NvbnRpbnVhdGlvbik7CiAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCiAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uU2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nLAotICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGNoYXIxNkJpdFZh
bHVlKSkpOworICAgICAgICAgICAgbV92bVZhbHVlLCBjaGFyMTZCaXRWYWx1ZSkpKTsKICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJp
dHNDb250aW51YXRpb24sIHNsb3dDYXNlKTsKQEAgLTEyNjA2LDExICsxMjY4NywxMSBAQCBjbGFz
cyBMb3dlckRGR1RvQjMgewogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIHJvcGVTbG93Q2FzZSk7Ci0gICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9u
U3RyaW5nU3Vic3RyLCBtX2NhbGxGcmFtZSwgc3RyaW5nLCBmcm9tLCBzcGFuKSkpOworICAgICAg
ICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJh
dGlvblN0cmluZ1N1YnN0ciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgc3RyaW5nLCBmcm9t
LCBzcGFuKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8ocm9wZVNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICByZXN1
bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvblN0
cmluZ1NsaWNlLCBtX2NhbGxGcmFtZSwgc3RyaW5nLCBzdGFydCwgZW5kKSkpOworICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlv
blN0cmluZ1NsaWNlLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBzdHJpbmcsIHN0YXJ0LCBl
bmQpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTEyNjE5LDYgKzEyNzAwLDcg
QEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgIHZvaWQgY29tcGlsZVRvTG93ZXJDYXNlKCkK
ICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExCYXNpY0Js
b2NrIG5vdFJvcGUgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBpczhC
aXQgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBsb29wVG9wID0gbV9v
dXQubmV3QmxvY2soKTsKQEAgLTEyNjY1LDcgKzEyNzQ3LDcgQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKICAg
ICAgICAgTFZhbHVlIHNsb3dQYXRoSW5kZXggPSBtX291dC5waGkoSW50MzIsIHN0YXJ0SW5kZXhG
b3JDYWxsLCBpbmRleEZyb21CbG9jayk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1
bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvblRvTG93ZXJD
YXNlLCBtX2NhbGxGcmFtZSwgc3RyaW5nLCBzbG93UGF0aEluZGV4KSk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCks
IG9wZXJhdGlvblRvTG93ZXJDYXNlLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBzdHJpbmcs
IHNsb3dQYXRoSW5kZXgpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMTI2ODEs
MTUgKzEyNzYzLDE2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAgICAgdmFs
aWRSYWRpeElzR3VhcmFudGVlZCA9IHRydWU7CiAgICAgICAgIH0KIAorICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZt
Q2FsbChwb2ludGVyVHlwZSgpLCB2YWxpZFJhZGl4SXNHdWFyYW50ZWVkID8gb3BlcmF0aW9uSW50
MzJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4IDogb3BlcmF0aW9uSW50MzJUb1N0cmluZywgbV9jYWxs
RnJhbWUsIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5cGUoKSwgdmFs
aWRSYWRpeElzR3VhcmFudGVlZCA/IG9wZXJhdGlvbkludDMyVG9TdHJpbmdXaXRoVmFsaWRSYWRp
eCA6IG9wZXJhdGlvbkludDMyVG9TdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCB2YWxpZFJhZGl4SXNHdWFyYW50ZWVk
ID8gb3BlcmF0aW9uSW50NTJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4IDogb3BlcmF0aW9uSW50NTJU
b1N0cmluZywgbV9jYWxsRnJhbWUsIGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpLCBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNh
bGwocG9pbnRlclR5cGUoKSwgdmFsaWRSYWRpeElzR3VhcmFudGVlZCA/IG9wZXJhdGlvbkludDUy
VG9TdHJpbmdXaXRoVmFsaWRSYWRpeCA6IG9wZXJhdGlvbkludDUyVG9TdHJpbmcsIHdlYWtQb2lu
dGVyKGdsb2JhbE9iamVjdCksIGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRG91YmxlUmVwVXNlOgotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5
cGUoKSwgdmFsaWRSYWRpeElzR3VhcmFudGVlZCA/IG9wZXJhdGlvbkRvdWJsZVRvU3RyaW5nV2l0
aFZhbGlkUmFkaXggOiBvcGVyYXRpb25Eb3VibGVUb1N0cmluZywgbV9jYWxsRnJhbWUsIGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKHBvaW50ZXJUeXBlKCksIHZhbGlkUmFkaXhJc0d1
YXJhbnRlZWQgPyBvcGVyYXRpb25Eb3VibGVUb1N0cmluZ1dpdGhWYWxpZFJhZGl4IDogb3BlcmF0
aW9uRG91YmxlVG9TdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTEyNjk4LDE1ICsxMjc4MSwxNiBAQCBjbGFzcyBMb3dlckRGR1Rv
QjMgewogCiAgICAgdm9pZCBjb21waWxlTnVtYmVyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeENvbnN0
YW50KCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVz
ZToKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKHBvaW50ZXJUeXBlKCksIG9wZXJhdGlv
bkludDMyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCwgbV9jYWxsRnJhbWUsIGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+dmFsaWRSYWRpeENvbnN0YW50
KCkpKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVy
YXRpb25JbnQzMlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVj
dCksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+
dmFsaWRSYWRpeENvbnN0YW50KCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJbnQ1MlJlcFVzZToKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKHBvaW50ZXJUeXBl
KCksIG9wZXJhdGlvbkludDUyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeCwgbV9jYWxsRnJhbWUsIGxv
d1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+
dmFsaWRSYWRpeENvbnN0YW50KCkpKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChw
b2ludGVyVHlwZSgpLCBvcGVyYXRpb25JbnQ1MlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgsIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpLCBt
X291dC5jb25zdEludDMyKG1fbm9kZS0+dmFsaWRSYWRpeENvbnN0YW50KCkpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25Eb3VibGVUb1N0cmluZ1dpdGhW
YWxpZFJhZGl4LCBtX2NhbGxGcmFtZSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291
dC5jb25zdEludDMyKG1fbm9kZS0+dmFsaWRSYWRpeENvbnN0YW50KCkpKSk7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBvcGVyYXRpb25Eb3VibGVUb1N0cmlu
Z1dpdGhWYWxpZFJhZGl4LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT52YWxpZFJhZGl4Q29uc3Rh
bnQoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEyNzE1LDI5ICsxMjc5OSwzMyBA
QCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgdm9pZCBjb21waWxlUmVzb2x2ZVNjb3BlRm9y
SG9pc3RpbmdGdW5jRGVjbEluRXZhbCgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlm
aWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2
bUNhbGwocG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5j
RGVjbEluRXZhbCwgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0
LmNvbnN0SW50UHRyKHVpZCkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5
cGUoKSwgb3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbCwgd2Vh
a1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQu
Y29uc3RJbnRQdHIodWlkKSkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZVJlc29sdmVTY29w
ZSgpCiAgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRp
Zmllck51bWJlcigpXTsKICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwocG9pbnRlclR5cGUoKSwg
b3BlcmF0aW9uUmVzb2x2ZVNjb3BlLAotICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKKyAgICAgICAgICAg
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1f
b3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVHZXREeW5h
bWljVmFyKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCldOwogICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3Bl
cmF0aW9uR2V0RHluYW1pY1ZhciwKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpLCBtX291dC5jb25zdEludFB0cih1aWQpLCBtX291dC5jb25zdEludDMy
KG1fbm9kZS0+Z2V0UHV0SW5mbygpKSkpOworICAgICAgICAgICAgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnRQdHIodWlk
KSwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmdldFB1dEluZm8oKSkpKTsKICAgICB9CiAKICAg
ICB2b2lkIGNvbXBpbGVQdXREeW5hbWljVmFyKCkKICAgICB7CisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwogICAgICAgICBzZXRKU1Zh
bHVlKHZtQ2FsbChWb2lkLCBtX2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYykgPyBvcGVyYXRpb25QdXREeW5hbWljVmFyU3RyaWN0IDogb3BlcmF0aW9uUHV0RHlu
YW1pY1Zhck5vblN0cmljdCwKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdElu
dFB0cih1aWQpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+Z2V0UHV0SW5mbygpKSkpOworICAg
ICAgICAgICAgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnRQdHIodWlk
KSwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmdldFB1dEluZm8oKSkpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlVW5yZWFjaGFibGUoKQpAQCAtMTI4MzQsNiArMTI5MjIsNyBAQCBj
bGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgdm9pZCBjb21waWxlQ2FsbERPTSgpCiAgICAgewor
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBjb25zdCBET01KSVQ6OlNp
Z25hdHVyZSogc2lnbmF0dXJlID0gbV9ub2RlLT5zaWduYXR1cmUoKTsKIAogICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gY2FsbCBmdW5jdGlvbnMgd2l0aCB0aGUgdmVj
dG9yIG9mIHJlZ2lzdGVycy4KQEAgLTEyODY1LDE2ICsxMjk1NCwxNyBAQCBjbGFzcyBMb3dlckRG
R1RvQjMgewogCiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
c2lnbmF0dXJlLT5hcmd1bWVudENvdW50ICsgMTsKICAgICAgICAgTFZhbHVlIHJlc3VsdDsKKyAg
ICAgICAgLy8gRklYTUU6IEdsb2JhbE9iamVjdCBjaGVjay4KICAgICAgICAgYXV0byBmdW5jdGlv
biA9IENGdW5jdGlvblB0cihzaWduYXR1cmUtPmZ1bmN0aW9uV2l0aG91dFR5cGVDaGVjayk7CiAg
ICAgICAgIHN3aXRjaCAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpIHsKICAgICAgICAgY2Fz
ZSAxOgotICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0VQPihmdW5jdGlvbi5nZXQoKSksIG1fY2FsbEZyYW1lLCBvcGVyYW5k
c1swXSk7CisgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIHJlaW50ZXJwcmV0X2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR1A+KGZ1bmN0aW9uLmdldCgpKSwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgb3BlcmFuZHNbMF0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
MjoKLSAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgcmVpbnRlcnByZXRfY2FzdDxK
X0pJVE9wZXJhdGlvbl9FUFA+KGZ1bmN0aW9uLmdldCgpKSwgbV9jYWxsRnJhbWUsIG9wZXJhbmRz
WzBdLCBvcGVyYW5kc1sxXSk7CisgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR1BQPihmdW5jdGlvbi5nZXQoKSksIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxs
KEludDY0LCByZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VQUFA+KGZ1bmN0aW9uLmdl
dCgpKSwgbV9jYWxsRnJhbWUsIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0p
OworICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKEludDY0LCByZWludGVycHJldF9jYXN0PEpf
SklUT3BlcmF0aW9uX0dQUFA+KGZ1bmN0aW9uLmdldCgpKSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0KSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0xMjg5MCwxMCArMTI5ODAsMTEgQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgaWYgKCFkb21KSVQpIHsKICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb24gaXMgbm90IGFuIG9wZXJhdGlvbjogd2UgZGlyZWN0bHkgY2FsbCBhIGN1c3RvbSBh
Y2Nlc3NvciBnZXR0ZXIuCiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgZ2V0dGVyIGRvZXMgbm90
IGhhdmUgY29kZSBzZXR0aW5nIHRvcENhbGxGcmFtZSwgQXMgaXMgdGhlIHNhbWUgdG8gSUMsIHdl
IHNob3VsZCBzZXQgdG9wQ2FsbEZyYW1lIGluIGNhbGxlciBzaWRlLgotICAgICAgICAgICAgbV9v
dXQuc3RvcmVQdHIobV9jYWxsRnJhbWUsIG1fb3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFt
ZSkpOworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsgLy8gRklYTUU6IElzIGl0
IGNvcnJlY3Q/CisgICAgICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCBtX291dC5hYnNvbHV0ZSgmdm0oKS50b3BDYWxsRnJhbWUpKTsKICAgICAgICAgICAg
IHNldEpTVmFsdWUoCiAgICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBiaXR3aXNlX2Nhc3Q8
Q3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21HZXR0ZXI+KG1fbm9kZS0+Y2FsbERPTUdldHRlckRh
dGEoKS0+Y3VzdG9tQWNjZXNzb3JHZXR0ZXIucmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczxDRnVu
Y3Rpb25QdHJUYWc+KCkpLAotICAgICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVy
cygpW21fbm9kZS0+Y2FsbERPTUdldHRlckRhdGEoKS0+aWRlbnRpZmllck51bWJlcl0pKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSksIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGguaWRlbnRpZmllcnMoKVtt
X25vZGUtPmNhbGxET01HZXR0ZXJEYXRhKCktPmlkZW50aWZpZXJOdW1iZXJdKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEzMzc4LDYgKzEzNDY5LDcgQEAgY2xhc3Mg
TG93ZXJERkdUb0IzIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRGdW5jdG9yPgogICAgIHZv
aWQgbm9uU3BlY3VsYXRpdmVDb21wYXJlKGNvbnN0IEludEZ1bmN0b3ImIGludEZ1bmN0b3IsIFNf
SklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKICAgICB7CisgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMigpKTsKICAgICAgICAgCkBAIC0xMzM5Nyw3ICsxMzQ4OSw3IEBAIGNsYXNzIExvd2VyREZH
VG9CMyB7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGlu
dWF0aW9uKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5ub3ROdWxsKHZtQ2FsbCgKLSAgICAgICAgICAgIHBvaW50ZXJUeXBlKCksIGhlbHBl
ckZ1bmN0aW9uLCBtX2NhbGxGcmFtZSwgbGVmdCwgcmlnaHQpKSk7CisgICAgICAgICAgICBwb2lu
dGVyVHlwZSgpLCBoZWxwZXJGdW5jdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbGVm
dCwgcmlnaHQpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAg
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMTM0
MDYsNiArMTM0OTgsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgTFZhbHVlIHN0cmlu
Z3NFcXVhbChMVmFsdWUgbGVmdEpTU3RyaW5nLCBMVmFsdWUgcmlnaHRKU1N0cmluZywgRWRnZSBs
ZWZ0SlNTdHJpbmdFZGdlID0gRWRnZSgpLCBFZGdlIHJpZ2h0SlNTdHJpbmdFZGdlID0gRWRnZSgp
KQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTEJhc2lj
QmxvY2sgbm90VHJpdmlhbGx5VW5lcXVhbENhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAg
ICBMQmFzaWNCbG9jayBub3RFbXB0eUNhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBM
QmFzaWNCbG9jayBsZWZ0UmVhZHlDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEzNDg5LDcg
KzEzNTgyLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1
ZSA9IHZtQ2FsbCgKLSAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEs
IG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdF
cSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKICAgICAgICAgICAgIGxlZnRKU1N0cmluZywg
cmlnaHRKU1N0cmluZyk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3IodW5ib3hCb29sZWFuKHNsb3dSZXN1bHRWYWx1ZSkpOwogICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CkBAIC0xMzU1NCwxMyArMTM2NDcsMTQgQEAgY2xhc3MgTG93ZXJE
RkdUb0IzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJl
Z2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1z
WzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAg
ICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmln
aW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBz
bG93UGF0aEZ1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBh
cmFtc1swXS5ncHIoKSwgaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSwgcGFyYW1zWzFdLmdwcigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zWzJdLmdwcigpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKQEAg
LTEzNjEzLDYgKzEzNzA3LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0
YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2Vt
YW50aWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xv
d1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNb
Ml0uZ3ByKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9u
ZSwgJmppdCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTM2NzUsNiArMTM3NzAsNyBA
QCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWls
YWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBzbG93UGF0aEZ1bmN0aW9uLCBwYXJh
bXNbMF0uZ3ByKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygp
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CkBAIC0xMzkzOSw3ICsxNDAzNSw3IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCiAgICAg
ICAgICAgICBbPSwgJnZtXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBS
ZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKICAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bk5ld09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgJnZtLAogICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLmdl
dCgpKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwpAQCAtMTQwNzEsNyArMTQxNjcsNyBA
QCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6
eVNsb3dQYXRoKAogICAgICAgICAgICAgICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRp
b24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBsb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGdsb2JhbE9iamVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzJd
LmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbM10uZGlyZWN0R1BSKCkpOwogICAgICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICAgICAgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xlbmd0aCwgYnV0dGVy
Zmx5VmFsdWUpOwpAQCAtMTQwNzksNyArMTQxNzUsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
ICAgICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAogICAgICAgICAgICAg
ICAgIFs9LCAmdm1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iodm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kSGludCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZEhpbnQs
IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgZ2xvYmFsT2JqZWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMl0uZGlyZWN0R1BS
KCksIGxvY2F0aW9uc1szXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzRdLmRpcmVjdEdQUigpKTsK
ICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIHN0cnVjdHVyZVZhbHVlLCBwdWJs
aWNMZW5ndGgsIHZlY3Rvckxlbmd0aCwgYnV0dGVyZmx5VmFsdWUpOwpAQCAtMTQxMzQsNyArMTQy
MzAsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAg
ICAgICAgCi0gICAgICAgIHZtQ2FsbChWb2lkLCBvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tl
bkxvZywgbV9jYWxsRnJhbWUpOworICAgICAgICB2bUNhbGwoVm9pZCwgb3BlcmF0aW9uUHJvY2Vz
c1NoYWRvd0NoaWNrZW5Mb2csIG1fdm1WYWx1ZSk7CiAgICAgICAgIAogICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWRQdHIoYWRkcmVzc09m
TG9nQ3Vyc29yKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTE0Mzk3
LDYgKzE0NDkzLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgRnVuY3Rpb25UeXBl
IHNsb3dQYXRoRnVuY3Rpb24sIExWYWx1ZSBiYXNlLCBMVmFsdWUgc3RvcmFnZSwgTFZhbHVlIGlu
ZGV4LCBMVmFsdWUgdmFsdWUsCiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbikKICAg
ICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIGlmICghbV9ub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5v
dEluQm91bmRzQ2FzZSA9CiAgICAgICAgICAgICAgICAgbV9vdXQubmV3QmxvY2soKTsKQEAgLTE0
NDI2LDcgKzE0NTIzLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICBWb2lkLCBz
bG93UGF0aEZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgYmFzZSwg
aW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0KSwgYmFzZSwgaW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgICAgICAK
QEAgLTE0Nzk1LDEwICsxNDg5MiwxMiBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAv
LyBGSVhNRTogV2Ugb3VnaHQgdG8gYmUgYWJsZSB0byB1c2UgY29tcHV0ZWQgZ290b3MgaGVyZS4g
V2Ugd291bGQgc2F2ZSB0aGUgbGFiZWxzIG9mIHRoZQogICAgICAgICAvLyBibG9ja3Mgd2Ugd2Fu
dCB0byBqdW1wIHRvLCBhbmQgdGhlbiByZXF1ZXN0IHRoZWlyIGFkZHJlc3NlcyBhZnRlciBjb21w
aWxhdGlvbiBjb21wbGV0ZXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDQzNjkKKworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgICAgICAKICAgICAgICAgTFZhbHVlIGJyYW5jaE9mZnNldCA9IHZtQ2FsbCgKICAgICAgICAg
ICAgIEludDMyLCBvcGVyYXRpb25Td2l0Y2hTdHJpbmdBbmRHZXRCcmFuY2hPZmZzZXQsCi0gICAg
ICAgICAgICBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+c3dpdGNoVGFibGVJ
bmRleCksIHN0cmluZyk7CisgICAgICAgICAgICB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBt
X291dC5jb25zdEludFB0cihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5nKTsKICAgICAg
ICAgCiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2soKS0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAKQEAgLTE3
MDMxLDcgKzE3MTMwLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1
ZSBjYWxsID0gdm1DYWxsKFZvaWQsIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBtX2Nh
bGxGcmFtZSwgYmFzZSk7CisgICAgICAgIExWYWx1ZSBjYWxsID0gdm1DYWxsKFZvaWQsIG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBtX3ZtVmFsdWUsIGJhc2UpOwogICAgICAgICBtX2hl
YXBzLmRlY29yYXRlQ0NhbGxSZWFkKCZtX2hlYXBzLnJvb3QsIGNhbGwpOwogICAgICAgICBtX2hl
YXBzLmRlY29yYXRlQ0NhbGxXcml0ZSgmbV9oZWFwcy5KU0NlbGxfY2VsbFN0YXRlLCBjYWxsKTsK
ICAgICAgICAgCkBAIC0xNzE4Nyw4ICsxNzI4Niw5IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAg
ICAgCiAgICAgdm9pZCBjYWxsQ2hlY2soKQogICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSkKLSAgICAg
ICAgICAgIG1fb3V0LmNhbGwoVm9pZCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkV4Y2VwdGlv
bkZ1enopLCBtX2NhbGxGcmFtZSk7CisgICAgICAgICAgICBtX291dC5jYWxsKFZvaWQsIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25FeGNlcHRpb25GdXp6KSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0KSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgZXhjZXB0aW9uID0gbV9vdXQubG9hZDY0
KG1fb3V0LmFic29sdXRlKHZtKCkuYWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKICAgICAgICAgTFZh
bHVlIGhhZEV4Y2VwdGlvbiA9IG1fb3V0Lm5vdFplcm82NChleGNlcHRpb24pOwpAQCAtMTc3ODgs
NiArMTc4ODgsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgIEhhc2hNYXA8REZHOjpCYXNp
Y0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tzOwogICAgIAogICAgIExWYWx1ZSBtX2NhbGxG
cmFtZTsKKyAgICBMVmFsdWUgbV92bVZhbHVlOwogICAgIExWYWx1ZSBtX2NhcHR1cmVkOwogICAg
IExWYWx1ZSBtX251bWJlclRhZzsKICAgICBMVmFsdWUgbV9ub3RDZWxsTWFzazsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKaW5kZXggMjU5YjNjZmM1NGJlZWVkODdh
NzlhOTM0NWMxODA4MWY4YTM2Y2ViNy4uYzE3NTczNzViN2FhM2U4NzM0YzgyMjM5YTUyMTc0Njcw
ZWNmOTcxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRy
eS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKQEAg
LTQwLDEwICs0MCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogU1VQUFJF
U1NfQVNBTgogdm9pZCogcHJlcGFyZU9TUkVudHJ5KAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29k
ZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxvY2ssCisgICAgVk0m
IHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVC
bG9jayogZW50cnlDb2RlQmxvY2ssCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lID0gZGZnQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKICAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGRmZ0NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7
CiAgICAgREZHOjpKSVRDb2RlKiBkZmdDb2RlID0gZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRm
ZygpOwpAQCAtNzAsMTQgKzY5LDEzIEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICB9CiAg
ICAgCiAgICAgT3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IHZhbHVlczsKLSAgICBkZmdDb2Rl
LT5yZWNvbnN0cnVjdCgKLSAgICAgICAgZXhlYywgZGZnQ29kZUJsb2NrLCBDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgdmFsdWVzKTsKKyAgICBkZmdDb2RlLT5yZWNvbnN0
cnVjdChjYWxsRnJhbWUsIGRmZ0NvZGVCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSwg
c3RyZWFtSW5kZXgsIHZhbHVlcyk7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKICAgICAgICAgZGF0YUxvZygiICAgIFZhbHVlcyBhdCBlbnRyeTogIiwgdmFsdWVzLCAiXG4i
KTsKICAgICAKICAgICBmb3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50
cygpOyBhcmd1bWVudC0tOykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGV4ZWMt
PnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKS5hc2FuVW5z
YWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNh
ZmVKU1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1
ZSA9IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3Rl
ZFZhbHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwg
IWFyZ3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMDIsMTMgKzEwMCwxMyBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoCiAgICAgfQogICAgIAogICAgIGludCBzdGFja0ZyYW1lU2l6
ZSA9IGVudHJ5Q29kZS0+Y29tbW9uLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFu
ZEV4aXQoKTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmVuc3VyZVN0YWNrQ2FwYWNpdHlGb3IoJmV4
ZWMtPnJlZ2lzdGVycygpW3ZpcnR1YWxSZWdpc3RlckZvckxvY2FsKHN0YWNrRnJhbWVTaXplIC0g
MSkub2Zmc2V0KCldKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmVuc3VyZVN0YWNrQ2FwYWNp
dHlGb3IoJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoc3Rh
Y2tGcmFtZVNpemUgLSAxKS5vZmZzZXQoKV0pKSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBz
dGFjayBncm93dGggZmFpbGVkLlxuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAK
LSAgICBleGVjLT5zZXRDb2RlQmxvY2soZW50cnlDb2RlQmxvY2spOworICAgIGNhbGxGcmFtZS0+
c2V0Q29kZUJsb2NrKGVudHJ5Q29kZUJsb2NrKTsKICAgICAKICAgICB2b2lkKiByZXN1bHQgPSBl
bnRyeUNvZGUtPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCmluZGV4IDVmMDljYjc3MjQyMzlhM2ViOWVkMjI2ZTMx
OGQ1ZTY5ZDk4MTRjNmQuLjIzODhkNGZmYzAwMmRlN2RhMjQ3NmQxYmU5MmRkY2ZhZDQ4ODA2MTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgKQEAgLTMxLDEyICszMSwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgQ29kZUJsb2Nr
OwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogCiBuYW1lc3BhY2UgRlRMIHsKIAogdm9p
ZCogcHJlcGFyZU9TUkVudHJ5KAotICAgIEV4ZWNTdGF0ZSosIENvZGVCbG9jayogZGZnQ29kZUJs
b2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LAor
ICAgIFZNJiwgQ2FsbEZyYW1lKiwgQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayog
ZW50cnlDb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsCiAgICAgdW5zaWduZWQgc3Ry
ZWFtSW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKaW5kZXggZTZhZTRjNWFhNzk3
ODc5ZjBhNmFkOTYzOWU0ZWFhZWIwOGFmYmJmYi4uOThiZTM4N2RmMWYwNjU3YjFiM2NkZWM5ZGI3
NTFmYzRiY2IxZDAwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcApAQCAtMzMyLDYgKzMzMiw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVT
dHViKAogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KEZ1bmN0aW9uVHJh
aXRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpPjo6YXJpdHkgPCBH
UFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzLCAiVGhpcyBjYWxsIGFzc3VtZXMgdGhh
dCB3ZSBkb24ndCBwYXNzIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suIik7CiAgICAgICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9T
Uik+KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdEZvcihtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpKSksCiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvbiksCiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlv
bkFyZ3VtZW50cykpOwogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk1hdGVyaWFs
aXplT2JqZWN0SW5PU1IpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CkBAIC0zNTksNiArMzYwLDcg
QEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAKICAgICAgICAgc3RhdGljX2Fzc2VydChGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKT46OmFyaXR5
IDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycywgIlRoaXMgY2FsbCBhc3N1bWVz
IHRoYXQgd2UgZG9uJ3QgcGFzcyBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiIpOwogICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uUG9wdWxhdGVPYmplY3RJbk9TUik+
KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0Rm9yKG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCkpKSwKICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtYXRlcmlhbGl6YXRpb24pLAogICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1hdGVyaWFsaXphdGlvblRvUG9pbnRlci5nZXQo
bWF0ZXJpYWxpemF0aW9uKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzKSk7CkBAIC00OTgsMTIgKzUwMCwxMiBAQCBzdGF0
aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgKTsKIH0KIAotZXh0ZXJuICJDIiB2b2lkKiBj
b21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGV4aXRJRCkKK2V4dGVy
biAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2ln
bmVkIGV4aXRJRCkKIHsKICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VGVExPU1JFeGl0KCkpCiAgICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyBPU1IgZXhpdCB3aXRoIGV4aXRJRCA9ICIsIGV4aXRJRCwgIlxu
Iik7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+
dm0oKTsKIAogICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykgewogICAgICAgICAvLyBXZSdyZSBh
Ym91dCB0byBleGl0IG9wdGltaXplZCBjb2RlLiBTbywgdGhlcmUncyBubyBsb25nZXIgYW55IG9w
dGltaXplZApAQCAtNTEyLDkgKzUxNCw5IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9T
UkV4aXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBleGl0SUQpCiAgICAgfQogCiAgICAgaWYg
KHZtLmNhbGxGcmFtZUZvckNhdGNoKQotICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS5jYWxsRnJh
bWVGb3JDYXRjaCA9PSBleGVjKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0uY2FsbEZyYW1l
Rm9yQ2F0Y2ggPT0gY2FsbEZyYW1lKTsKICAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6RlRMSklUKTsKQEAgLTUzMSw3ICs1MzMs
NyBAQCBleHRlcm4gIkMiIHZvaWQqIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgZXhpdElEKQogICAgICAgICBkYXRhTG9nKCIgICAgT3JpZ2luOiAiLCBleGl0Lm1f
Y29kZU9yaWdpbiwgIlxuIik7CiAgICAgICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlICE9IGV4aXQubV9jb2RlT3JpZ2luKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIE9y
aWdpbiBmb3IgZXhpdCBwcm9maWxlOiAiLCBleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxl
LCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygiICAgIEN1cnJlbnQgY2FsbCBzaXRlIGluZGV4OiAi
LCBleGVjLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygi
ICAgIEN1cnJlbnQgY2FsbCBzaXRlIGluZGV4OiAiLCBjYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgo
KS5iaXRzKCksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgRXhpdCBpcyBleGNlcHRpb24g
aGFuZGxlcjogIiwgZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSwgIlxuIik7CiAgICAgICAgIGRh
dGFMb2coIiAgICBJcyB1bndpbmQgaGFuZGxlcjogIiwgZXhpdC5pc0dlbmVyaWNVbndpbmRIYW5k
bGVyKCksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgRXhpdCB2YWx1ZXM6ICIsIGV4aXQu
bV9kZXNjcmlwdG9yLT5tX3ZhbHVlcywgIlxuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuaAppbmRleCA0MDViN2E1ZTFjOWY3YTczYTNjMDkyOWM2
NzZhYjA2NWJhZjZkOWIwLi45MTRhYTE5MzgzMWI3MmQyODRkNzM1MjI0YTA2NmY1OGM3MzQyNWU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmgK
QEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogLy8gVGFr
ZXMgdGhlIGNhbGwgZnJhbWUgYW5kIHRoZSBpbmRleCBvZiB0aGUgZXhpdCwgYW5kIHJldHVybnMg
dGhlIGFkZHJlc3MgdG8KIC8vIGp1bXAgdG8uCiBleHRlcm4gIkMiIHsKLXZvaWQqIEpJVF9PUEVS
QVRJT04gY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgZXhpdElEKSBXVEZf
SU5URVJOQUw7Cit2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVExPU1JFeGl0KENhbGxGcmFt
ZSosIHVuc2lnbmVkIGV4aXRJRCkgV1RGX0lOVEVSTkFMOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcApp
bmRleCAzNWVjZWM2NWRlYzYyN2NiMWM2YzI5YjJkZmJlOWY1ODgxNzhmMGU4Li5iZjk3NzMyNTE3
NDNjMWI3NWI1OTA0ZDhmZWY1YmZhMGQ3MDJjNWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJEaXJl
Y3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMTGF6
eVNsb3dQYXRoLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiSW5saW5l
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FzeW5j
RnVuY3Rpb24uaCIKQEAgLTQ3LDEzICs0OCwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAKLWV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcHVs
YXRlT2JqZWN0SW5PU1IoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uLAotICAgIEVuY29kZWRKU1ZhbHVlKiBlbmNvZGVk
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKiB2YWx1ZXMpCitleHRlcm4gIkMiIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24sIEVu
Y29kZWRKU1ZhbHVlKiBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlKiB2YWx1ZXMpCiB7CiAg
ICAgdXNpbmcgbmFtZXNwYWNlIERGRzsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogCiAgICAgLy8gV2UgY2Fubm90IEdDLiBXZSd2ZSBnb3QgcG9pbnRlcnMgaW4gZXZpbCBwbGFj
ZXMuCiAgICAgLy8gRklYTUU6IFdlIGFyZSBub3QgZG9pbmcgYW55dGhpbmcgdGhhdCBjYW4gR0Mg
aGVyZSwgYW5kIHRoaXMgaXMKQEAgLTEyMiw3ICsxMjQsNyBAQCBleHRlcm4gIkMiIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKAogICAgICAgICAgICAgaWYg
KHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpICE9IFJlZ0V4cE9iamVjdExhc3RJbmRleFBMb2Mp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIHJlZ0V4cE9iamVjdC0+
c2V0TGFzdEluZGV4KGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pLCBmYWxzZSAvKiBz
aG91bGRUaHJvdyAqLyk7CisgICAgICAgICAgICByZWdFeHBPYmplY3QtPnNldExhc3RJbmRleChn
bG9iYWxPYmplY3QsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pLCBmYWxzZSAvKiBzaG91bGRU
aHJvdyAqLyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
QEAgLTEzNSwxMSArMTM3LDEyIEBAIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblBvcHVsYXRlT2JqZWN0SW5PU1IoCiAgICAgfQogfQogCi1leHRlcm4gIkMiIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKAotICAgIEV4ZWNT
dGF0ZSogZXhlYywgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlv
biwgRW5jb2RlZEpTVmFsdWUqIHZhbHVlcykKK2V4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiwg
RW5jb2RlZEpTVmFsdWUqIHZhbHVlcykKIHsKICAgICB1c2luZyBuYW1lc3BhY2UgREZHOwotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgLy8gV2Ug
Y2Fubm90IEdDLiBXZSd2ZSBnb3QgcG9pbnRlcnMgaW4gZXZpbCBwbGFjZXMuCiAgICAgRGVmZXJH
Q0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwpAQCAtMjI1LDcgKzIyOCw3IEBAIGV4dGVybiAi
QyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1Io
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxlKTsKIAogICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2so
Ci0gICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLCBleGVjLT5jb2RlQmxvY2so
KS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+
b3JpZ2luKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7
CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpOwogCiAgICAgICAgIC8vIEl0IGRvZXNuJ3QgbWF0dGVy
IHdoYXQgdmFsdWVzIHdlIGluaXRpYWxpemUgYXMgYm90dG9tIHZhbHVlcyBpbnNpZGUgdGhlIGFj
dGl2YXRpb24gY29uc3RydWN0b3IgYmVjYXVzZQpAQCAtMjgxLDE5ICsyODQsMTkgQEAgZXh0ZXJu
ICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9T
UigKICAgICAgICAgaWYgKCFtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLmlubGluZUNhbGxGcmFt
ZSgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG1hdGVyaWFsaXphdGlvbi0+dHlwZSgpKSB7CiAg
ICAgICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKGV4ZWMpOworICAgICAgICAg
ICAgICAgIHJldHVybiBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZUJ5Q29weWluZyhnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENsb25lZEFyZ3VtZW50czo6Y3JlYXRlV2l0aE1hY2hp
bmVGcmFtZShleGVjLCBleGVjLCBBcmd1bWVudHNNb2RlOjpDbG9uZWQpOworICAgICAgICAgICAg
ICAgIHJldHVybiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIEFyZ3VtZW50c01vZGU6OkNsb25lZCk7CiAgICAgICAgICAgICBj
YXNlIFBoYW50b21DcmVhdGVSZXN0OiB7CiAgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKAot
ICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLCBleGVjLT5jb2Rl
QmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0
ZXJpYWxpemF0aW9uLT5vcmlnaW4oKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVB
bHRlcm5hdGl2ZSgpKTsKIAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID0gY29kZUJsb2NrLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgICAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFs
T2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1
ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0gZXhlYy0+YWRkcmVzc09mQXJndW1lbnRzU3RhcnQo
KSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFy
cmF5U2l6ZSA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
ID8gZXhlYy0+YXJndW1lbnRDb3VudCgpIC0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgOiAwOwot
ICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIGFy
Z3VtZW50c1RvQ29weVJlZ2lvbiwgYXJyYXlTaXplKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
KiBhcmd1bWVudHNUb0NvcHlSZWdpb24gPSBjYWxsRnJhbWUtPmFkZHJlc3NPZkFyZ3VtZW50c1N0
YXJ0KCkgKyBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhcnJheVNpemUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA+IG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwID8gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgLSBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCA6IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBhcmd1bWVudHNUb0NvcHlSZWdpb24sIGFycmF5U2l6ZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMzAsNyArMzMzLDcgQEAgZXh0ZXJuICJDIiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jaygKLSAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCksIGV4ZWMtPmNvZGVC
bG9jaygpLT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgbWF0ZXJpYWxpemF0
aW9uLT5vcmlnaW4oKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2
ZSgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGhhdmUgYW4gaW5saW5lIGZyYW1lIGFuZCB3
ZSBoYXZlIGFsbCBvZiB0aGUgZGF0YSB3ZSBuZWVkIHRvIHJlY3JlYXRlIGl0LgogICAgICAgICBz
d2l0Y2ggKG1hdGVyaWFsaXphdGlvbi0+dHlwZSgpKSB7CkBAIC0zNzYsNyArMzc5LDcgQEAgZXh0
ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJ
bk9TUigKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5LmxvY2F0aW9u
KCkuaW5mbygpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgsIEpTVmFs
dWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQwNCw3ICs0MDcsNyBAQCBleHRlcm4gIkMiIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKAogICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5SW5kZXggPSBhcmdJbmRleCAtIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOwogICAgICAgICAgICAgICAgIGlmIChhcnJheUluZGV4ID49IGFycmF5U2l6
ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGFycmF5SW5kZXgsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNb
aV0pKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0
LCBhcnJheUluZGV4LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CiAgICAgICAgICAgICB9
CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC00NTUsNyArNDU4LDcgQEAgZXh0ZXJuICJDIiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUigKICAg
ICAgICAgLy8gYmVjYXVzZSB3ZSdyZSBndWFyYW50ZWVkIHdlIHdvbid0IGJlIGNhbGxpbmcgYW55
IGdldHRlcnMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMKICAgICAgICAgLy8gdGhhdCB3ZSBvbmx5
IHN1cHBvcnQgUGhhbnRvbVNwcmVhZCBvdmVyIENyZWF0ZVJlc3QsIHdoaWNoIGlzIGFuIGFycmF5
IHdlIGNyZWF0ZS4KICAgICAgICAgLy8gQW55IGF0dGVtcHRzIHRvIHB1dCBhIGdldHRlciBvbiBh
bnkgaW5kaWNlcyBvbiB0aGUgcmVzdCBhcnJheSB3aWxsIGVzY2FwZSB0aGUgYXJyYXkuCi0gICAg
ICAgIEpTRml4ZWRBcnJheSogZml4ZWRBcnJheSA9IEpTRml4ZWRBcnJheTo6Y3JlYXRlRnJvbUFy
cmF5KGV4ZWMsIHZtLCBhcnJheSk7CisgICAgICAgIEpTRml4ZWRBcnJheSogZml4ZWRBcnJheSA9
IEpTRml4ZWRBcnJheTo6Y3JlYXRlRnJvbUFycmF5KGdsb2JhbE9iamVjdCwgdm0sIGFycmF5KTsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZml4ZWRBcnJheSk7CiAgICAgICAgIHJldHVybiBmaXhl
ZEFycmF5OwogICAgIH0KQEAgLTQ3MywxMyArNDc2LDEzIEBAIGV4dGVybiAiQyIgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoCiAKICAgICAgICAg
Ly8gRm9yIG5vdywgd2UgdXNlIGFycmF5IGFsbG9jYXRpb24gcHJvZmlsZSBpbiB0aGUgYWN0dWFs
IENvZGVCbG9jay4gSXQgaXMgT0sgc2luY2UgY3VycmVudCBOZXdBcnJheUJ1ZmZlcgogICAgICAg
ICAvLyBhbmQgUGhhbnRvbU5ld0FycmF5QnVmZmVyIGFyZSBhbHdheXMgYm91bmQgdG8gYSBzcGVj
aWZpYyBvcF9uZXdfYXJyYXlfYnVmZmVyLgotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2sobWF0ZXJpYWxp
emF0aW9uLT5vcmlnaW4oKSwgZXhlYy0+Y29kZUJsb2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUo
KSk7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JP
cmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLCBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOwogICAgICAgICBjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7
CiAgICAgICAgIGlmICghY3VycmVudEluc3RydWN0aW9uLT5pczxPcE5ld0FycmF5QnVmZmVyPigp
KSB7CiAgICAgICAgICAgICAvLyBUaGlzIGNhc2UgY2FuIGhhcHBlbiBpZiBPYmplY3Qua2V5cywg
YW4gT3BDYWxsIGlzIGZpcnN0IGNvbnZlcnRlZCBpbnRvIGEgTmV3QXJyYXlCdWZmZXIgd2hpY2gg
aXMgdGhlbiBjb252ZXJ0ZWQgaW50byBhIFBoYW50b21OZXdBcnJheUJ1ZmZlci4KICAgICAgICAg
ICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBhcnJheSBhbGxvY2F0aW9uIHBy
b2ZpbGUgaW4gdGhhdCBjYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudElu
c3RydWN0aW9uLT5pczxPcENhbGw+KCkpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbW11dGFibGVCdXR0ZXJmbHktPmluZGV4aW5nTW9kZSgp
KTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW1tdXRhYmxlQnV0dGVy
Zmx5LT5pbmRleGluZ01vZGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gQ29tbW9uU2xvd1BhdGhz
OjphbGxvY2F0ZU5ld0FycmF5QnVmZmVyKHZtLCBzdHJ1Y3R1cmUsIGltbXV0YWJsZUJ1dHRlcmZs
eSk7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBuZXdBcnJheUJ1ZmZlciA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheUJ1ZmZlcj4oKTsKQEAgLTQ4Nyw3ICs0OTAsNyBAQCBleHRl
cm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdElu
T1NSKAogCiAgICAgICAgIC8vIEZJWE1FOiBTaGFyZSB0aGUgY29kZSB3aXRoIENvbW1vblNsb3dQ
YXRocy4gQ3VycmVudGx5LCBjb2RlQmxvY2sgZXRjLiBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50Lgog
ICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdNb2RlID0gcHJvZmlsZS0+c2VsZWN0SW5kZXhp
bmdUeXBlKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oaW5kZXhpbmdNb2RlKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRl
eGluZ01vZGUpOwogICAgICAgICBBU1NFUlQoaXNDb3B5T25Xcml0ZShpbmRleGluZ01vZGUpKTsK
ICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogCkBAIC01
MTIsNyArNTE1LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TWF0ZXJpYWxpemVPYmplY3RJbk9TUigKIAogICAgIGNhc2UgUGhhbnRvbU5ld0FycmF5V2l0aFNw
cmVhZDogewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soCi0gICAgICAgICAgICBtYXRlcmlhbGl6YXRp
b24tPm9yaWdpbigpLCBleGVjLT5jb2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsK
KyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCksIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpOwogCkBAIC01NjgsMTIgKzU3
MSwxMiBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlh
bGl6ZU9iamVjdEluT1NSKAogICAgICAgICAgICAgaWYgKEpTRml4ZWRBcnJheSogZml4ZWRBcnJh
eSA9IGpzRHluYW1pY0Nhc3Q8SlNGaXhlZEFycmF5Kj4odm0sIHZhbHVlKSkgewogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaXhlZEFycmF5LT5zaXplKCk7IGkrKykg
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZml4ZWRBcnJheS0+Z2V0KGkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBhcnJheUluZGV4LCBm
aXhlZEFycmF5LT5nZXQoaSkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVj
dEluZGV4KGdsb2JhbE9iamVjdCwgYXJyYXlJbmRleCwgZml4ZWRBcnJheS0+Z2V0KGkpKTsKICAg
ICAgICAgICAgICAgICAgICAgKythcnJheUluZGV4OwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vdCBzcHJlYWRpbmcu
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBhcnJheUluZGV4
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChnbG9iYWxP
YmplY3QsIGFycmF5SW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAgICAgICArK2FycmF5SW5kZXg7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU5MSw3ICs1OTQsNyBAQCBleHRlcm4gIkMi
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKAog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZ0V4cCk7
Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmln
aW5BbmRCYXNlbGluZUNvZGVCbG9jayhtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLCBleGVjLT5j
b2RlQmxvY2soKS0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpKTsKKyAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmJhc2Vs
aW5lQWx0ZXJuYXRpdmUoKSk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCk7CiAgICAgICAgIHJldHVybiBS
ZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCByZWdFeHApOwogICAgIH0KQEAgLTYw
MiwxNCArNjA1LDE0IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk1hdGVyaWFsaXplT2JqZWN0SW5PU1IoCiAgICAgfQogfQogCi1leHRlcm4gIkMiIHZvaWQqIEpJ
VF9PUEVSQVRJT04gY29tcGlsZUZUTExhenlTbG93UGF0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGluZGV4KQorZXh0ZXJuICJDIiB2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVExMYXp5
U2xvd1BhdGgoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIGluZGV4KQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogCiAgICAg
Ly8gV2UgY2Fubm90IEdDLiBXZSd2ZSBnb3QgcG9pbnRlcnMgaW4gZXZpbCBwbGFjZXMuCiAgICAg
RGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwogCi0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+
aml0Q29kZSgpLT5mdGwoKTsKIAogICAgIExhenlTbG93UGF0aCYgbGF6eVNsb3dQYXRoID0gKmpp
dENvZGUtPmxhenlTbG93UGF0aHNbaW5kZXhdOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9wZXJhdGlvbnMuaAppbmRleCAwMzE4NDAxMDBkMWY3NTFjNGZhODBlNjk0ODY4YTljNjI3Mzgw
ZDYzLi4wNGQwMjgzOWQ5MTA0NWRjNzgwYmIwNDQxZDY4YjY2ZTZlYjg1NDk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaApAQCAtMzYsMTMgKzM2LDExIEBAIGNs
YXNzIExhenlTbG93UGF0aDsKIAogZXh0ZXJuICJDIiB7CiAKLUpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKAotICAgIEV4ZWNTdGF0ZSosIEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqKSBXVEZfSU5URVJOQUw7
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUihK
U0dsb2JhbE9iamVjdCosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpT
VmFsdWUqKSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3B1
bGF0ZU9iamVjdEluT1NSKAotICAgIEV4ZWNTdGF0ZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqLCBFbmNvZGVkSlNWYWx1ZSopIFdURl9JTlRFUk5BTDsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKEpTR2xvYmFs
T2JqZWN0KiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSos
IEVuY29kZWRKU1ZhbHVlKikgV1RGX0lOVEVSTkFMOwogCi12b2lkKiBKSVRfT1BFUkFUSU9OIGNv
bXBpbGVGVExMYXp5U2xvd1BhdGgoRXhlY1N0YXRlKiwgdW5zaWduZWQpIFdURl9JTlRFUk5BTDsK
K3ZvaWQqIEpJVF9PUEVSQVRJT04gY29tcGlsZUZUTExhenlTbG93UGF0aChDYWxsRnJhbWUqLCB1
bnNpZ25lZCkgV1RGX0lOVEVSTkFMOwogCiB9IC8vIGV4dGVybiAiQyIKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKaW5kZXggZmU3ZTBjYTA2M2JmZTI3NmFh
MjU1NDM5NjQ4MzA2ZDg2NTM5YjYwYi4uNjkzNGMzZjBkMzc5MWY2NGJhNDI5NjNlMDU1NjNkYmJj
N2RkYTVhNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0
aENhbGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5o
CkBAIC04Myw3ICs4Myw3IEBAIFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIFNsb3dQ
YXRoQ2FsbCBjYWxsOwogICAgIHsKICAgICAgICAgU2xvd1BhdGhDYWxsQ29udGV4dCBjb250ZXh0
KHVzZWRSZWdpc3RlcnMsIGppdCwgc2l6ZW9mLi4uKEFyZ3VtZW50VHlwZXMpICsgMSwgcmVzdWx0
R1BSKTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPHZvaWQoRXhlY1N0YXRlKiwgQXJndW1l
bnRUeXBlcy4uLik+KGFyZ3VtZW50cy4uLik7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czx2
b2lkKEFyZ3VtZW50VHlwZXMuLi4pPihhcmd1bWVudHMuLi4pOwogICAgICAgICBjYWxsID0gY29u
dGV4dC5tYWtlQ2FsbCh2bSwgZnVuY3Rpb24pOwogICAgIH0KICAgICBpZiAoZXhjZXB0aW9uVGFy
Z2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0
YS5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKaW5kZXgg
YzM4ODZmODc3Y2Y5NmI1YmM1NzJiNjRmMWVmNDNjNzk4ZWI1N2I0My4uOGQ3YjRkMTA2ZWU5OTQy
NzViYjljYTdiNzNiZDhjMmYzZTY3NWE4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL01ldGFkYXRhLnJiCkBAIC04NCw5ICs4NCw5IEBAIGRlZiBhY2Nlc3NvcgogICAgICAg
ICByZXR1cm4gY29kZUJsb2NrLT5tZXRhZGF0YTxNZXRhZGF0YT4ob3Bjb2RlSUQsICN7TWV0YWRh
dGEuZmllbGRfbmFtZX0pOwogICAgIH0KIAotICAgIE1ldGFkYXRhJiBtZXRhZGF0YShFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CisgICAgTWV0YWRhdGEmIG1ldGFkYXRhKENhbGxGcmFtZSogY2FsbEZy
YW1lKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1ldGFkYXRhKGV4ZWMtPmNvZGVCbG9j
aygpKTsKKyAgICAgICAgcmV0dXJuIG1ldGFkYXRhKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwog
ICAgIH0KIEVPRgogICAgIGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGFuZGxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAppbmRleCBi
YTQxNjFjMjViMjg3MGMwNGVlOGQ5OWUxMTc1M2I4MGIyOTI2MDQ2Li5hYmE2NTExMzQzYTM1MmMw
MzFjMmY4MzQ0OWNmMWNkNjE4YTA5MDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IYW5kbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUu
aApAQCAtOTYsNyArOTYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmFzZT4gc3RydWN0IEhhbmRs
ZUNvbnZlcnRlcjxCYXNlLCBVbmtub3duPiB7CiAgICAgSGFuZGxlPEpTT2JqZWN0PiBhc09iamVj
dCgpIGNvbnN0OwogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiBqc1ZhbHVlKCku
aXNPYmplY3QoKTsgfQogICAgIGJvb2wgZ2V0TnVtYmVyKGRvdWJsZSBudW1iZXIpIGNvbnN0IHsg
cmV0dXJuIGpzVmFsdWUoKS5nZXROdW1iZXIobnVtYmVyKTsgfQotICAgIFdURjo6U3RyaW5nIGdl
dFN0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBXVEY6OlN0cmluZyBnZXRTdHJpbmcoSlNH
bG9iYWxPYmplY3QqKSBjb25zdDsKICAgICBib29sIGlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3Qg
eyByZXR1cm4ganNWYWx1ZSgpLmlzVW5kZWZpbmVkT3JOdWxsKCk7IH0KIAogcHJpdmF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbC5oCmluZGV4IDRiZGNlMjgwNTEzYjZkODVhMmJi
ZjUwZmNiZDdjODVmZDZmMzk4ZWMuLmUxYWUwYmIwNWI0YWVjNmMyODc4YmM5MzA1NTFjY2ZmODdj
ZmFmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGwuaApAQCAtNjksNyArNjks
NyBAQCBjbGFzcyBIZWFwQ2VsbCB7CiAgICAgLy8gSWYgeW91IHdhbnQgcGVyZm9ybWFuY2UgYW5k
IHlvdSBrbm93IHRoYXQgeW91ciBjZWxsIGlzIHNtYWxsLCB5b3UgY2FuIGRvIHRoaXMgaW5zdGVh
ZDoKICAgICAvLyBBU1NFUlQoIWNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpOwogICAgIC8vIGNl
bGwtPm1hcmtlZEJsb2NrKCkudm0oKQotICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHVzZSB0aGlz
IGhhY2sgZm9yIGNhbGxlZXMgdG8gbWFrZSBFeGVjU3RhdGU6OnZtKCkgZmFzdC4gSXQncyBub3QK
KyAgICAvLyBXZSBjdXJyZW50bHkgb25seSB1c2UgdGhpcyBoYWNrIGZvciBjYWxsZWVzIHRvIG1h
a2UgQ2FsbEZyYW1lOjp2bSgpIGZhc3QuIEl0J3Mgbm90CiAgICAgLy8gcmVjb21tZW5kZWQgdG8g
dXNlIGl0IGZvciB0b28gbWFueSBvdGhlciB0aGluZ3MsIHNpbmNlIHRoZSBsYXJnZSBhbGxvY2F0
aW9uIGN1dG9mZiBpcwogICAgIC8vIGEgcnVudGltZSBvcHRpb24gYW5kIGl0cyBkZWZhdWx0IHZh
bHVlIGlzIHNtYWxsICg0MDAgYnl0ZXMpLgogICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKaW5k
ZXggMGM1N2NhOTBjNjVmODZmZTRlYTc5OTExYTdiY2RkMDE0ZWExNGJhNS4uODY2YWRhMzZlN2Q4
MGRjMDdiMmU0YzU5YWM3ZjE4NzAxNmNjYWNkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKQEAgLTQwMiw5ICs0MDIsOCBAQCBT
dHJpbmcgSGVhcFNuYXBzaG90QnVpbGRlcjo6anNvbihGdW5jdGlvbjxib29sIChjb25zdCBIZWFw
U25hcHNob3ROb2RlJik+IGFsbG93TgogICAgICAgICAgICAgLy8gIk9iamVjdCIgaW4gc25hcHNo
b3RzIGFuZCBub3QgZ2V0IHRoZSBuYW1lIG9mIHRoZSBwcm90b3R5cGUncyBwYXJlbnQuCiAgICAg
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qobm9kZS5jZWxsKTsKICAgICAgICAg
ICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gb2JqZWN0LT5nbG9iYWxPYmpl
Y3Qodm0pKSB7Ci0gICAgICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW9iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIHNsb3QpKQorICAgICAgICAgICAgICAgIGlmICgh
b2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBnbG9iYWxPYmplY3QsIHZtLnByb3Bl
cnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBzbG90KSkKICAgICAgICAgICAgICAgICAgICAgY2xhc3NO
YW1lID0gSlNPYmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUob2JqZWN0KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Db25zb2xlTWVzc2FnZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0Nv
bnNvbGVNZXNzYWdlLmNwcAppbmRleCBjNGIyNjE1YmM2MzE2ZjIzMGQ5MTRkODBkZDhkN2I0ZjY1
MWMwNjc0Li5lNDIzNmRhN2I4MWYxM2FlMjBmNmY5YmEyMTk5MjBkOWMwNGJmOTVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcApA
QCAtNTIsNyArNTIsNyBAQCBDb25zb2xlTWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZQogewogfQogCi1Db25zb2xl
TWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBl
IHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHVybCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uLCBKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCitDb25zb2xlTWVzc2Fn
ZTo6Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUs
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHVybCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCiAgICAgOiBt
X3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fbGV2ZWwobGV2ZWwp
CkBAIC02Miw3ICs2Miw3IEBAIENvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxlCiAgICAgLCBtX2NvbHVt
bihjb2x1bW4pCiAgICAgLCBtX3JlcXVlc3RJZChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJ
ZChyZXF1ZXN0SWRlbnRpZmllcikpCiB7Ci0gICAgYXV0b2dlbmVyYXRlTWV0YWRhdGEoc3RhdGUp
OworICAgIGF1dG9nZW5lcmF0ZU1ldGFkYXRhKGdsb2JhbE9iamVjdCk7CiB9CiAKIENvbnNvbGVN
ZXNzYWdlOjpDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUg
dHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFJlZjxTY3Jp
cHRDYWxsU3RhY2s+JiYgY2FsbFN0YWNrLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVy
KQpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxlCiAgICAgfQogfQog
Ci1Db25zb2xlTWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1l
c3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cywgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQorQ29uc29sZU1lc3NhZ2U6OkNvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmPFNjcmlwdEFyZ3VtZW50cz4m
JiBhcmd1bWVudHMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllcikKICAgICA6IG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1f
dHlwZSh0eXBlKQogICAgICwgbV9sZXZlbChsZXZlbCkKQEAgLTEwOSwxNSArMTA5LDE1IEBAIENv
bnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZVR5cGUgdHlwZSwgTWVzc2FnZUxlCiAgICAgLCBtX3VybCgpCiAgICAgLCBtX3JlcXVlc3RJZChJ
ZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChyZXF1ZXN0SWRlbnRpZmllcikpCiB7Ci0gICAg
YXV0b2dlbmVyYXRlTWV0YWRhdGEoc3RhdGUpOworICAgIGF1dG9nZW5lcmF0ZU1ldGFkYXRhKGds
b2JhbE9iamVjdCk7CiB9CiAKLUNvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBWZWN0
b3I8SlNPTkxvZ1ZhbHVlPiYmIG1lc3NhZ2VzLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIpCitDb25zb2xlTWVzc2FnZTo6Q29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBs
ZXZlbCwgVmVjdG9yPEpTT05Mb2dWYWx1ZT4mJiBtZXNzYWdlcywgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQogICAgIDog
bV9zb3VyY2Uoc291cmNlKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX2xldmVsKGxldmVs
KQogICAgICwgbV91cmwoKQotICAgICwgbV9zY3JpcHRTdGF0ZShzdGF0ZSkKKyAgICAsIG1fZ2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKICAgICAsIG1fcmVxdWVzdElkKElkZW50aWZpZXJzRmFj
dG9yeTo6cmVxdWVzdElkKHJlcXVlc3RJZGVudGlmaWVyKSkKIHsKICAgICBpZiAoIW1lc3NhZ2Vz
LnNpemUoKSkKQEAgLTE1MywxNiArMTUzLDE2IEBAIENvbnNvbGVNZXNzYWdlOjp+Q29uc29sZU1l
c3NhZ2UoKQogewogfQogCi12b2lkIENvbnNvbGVNZXNzYWdlOjphdXRvZ2VuZXJhdGVNZXRhZGF0
YShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCit2b2lkIENvbnNvbGVNZXNzYWdlOjphdXRvZ2VuZXJh
dGVNZXRhZGF0YShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgaWYg
KCFzdGF0ZSkKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG1fdHlwZSA9PSBNZXNzYWdlVHlwZTo6RW5kR3JvdXApCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyByZWFsbHkgYmUgdXNpbmcgImZvciBjb25zb2xlIiBp
biB0aGUgZ2VuZXJpYyBDb25zb2xlTWVzc2FnZSBhdXRvZ2VuZXJhdGlvbj8gVGhpcyBjYW4gc2tp
cCB0aGUgZmlyc3QgZnJhbWUuCi0gICAgbV9jYWxsU3RhY2sgPSBjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2tGb3JDb25zb2xlKHN0YXRlKTsKKyAgICBtX2NhbGxTdGFjayA9IGNyZWF0ZVNjcmlwdENhbGxT
dGFja0ZvckNvbnNvbGUoZ2xvYmFsT2JqZWN0KTsKIAogICAgIGlmIChjb25zdCBTY3JpcHRDYWxs
RnJhbWUqIGZyYW1lID0gbV9jYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCkpIHsK
ICAgICAgICAgbV91cmwgPSBmcmFtZS0+c291cmNlVVJMKCk7CkBAIC0yNDUsNyArMjQ1LDcgQEAg
dm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChDb25zb2xlRnJvbnRlbmREaXNwYXRj
aGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAgICAgICAgbWVzc2FnZU9iamVjdC0+c2V0TmV0d29y
a1JlcXVlc3RJZChtX3JlcXVlc3RJZCk7CiAKICAgICBpZiAoKG1fYXJndW1lbnRzICYmIG1fYXJn
dW1lbnRzLT5hcmd1bWVudENvdW50KCkpIHx8IG1fanNvbkxvZ1ZhbHVlcy5zaXplKCkpIHsKLSAg
ICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUoKSk7CisgICAgICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0
Rm9yKGdsb2JhbE9iamVjdCgpKTsKICAgICAgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1Zh
bHVlKCkpIHsKICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRzT2JqZWN0ID0gSlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6Y3JlYXRlKCk7CiAgICAgICAgICAg
ICBpZiAobV9hcmd1bWVudHMgJiYgbV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSkgewpAQCAt
MzQyLDEzICszNDIsMTMgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6Y2xlYXIoKQogICAgICAgICBt
X2FyZ3VtZW50cyA9IG51bGxwdHI7CiB9CiAKLUpTQzo6RXhlY1N0YXRlKiBDb25zb2xlTWVzc2Fn
ZTo6c2NyaXB0U3RhdGUoKSBjb25zdAorSlNDOjpKU0dsb2JhbE9iamVjdCogQ29uc29sZU1lc3Nh
Z2U6Omdsb2JhbE9iamVjdCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fYXJndW1lbnRzKQotICAgICAg
ICByZXR1cm4gbV9hcmd1bWVudHMtPmdsb2JhbFN0YXRlKCk7CisgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50cy0+Z2xvYmFsT2JqZWN0KCk7CiAKLSAgICBpZiAobV9zY3JpcHRTdGF0ZSkKLSAgICAg
ICAgcmV0dXJuIG1fc2NyaXB0U3RhdGU7CisgICAgaWYgKG1fZ2xvYmFsT2JqZWN0KQorICAgICAg
ICByZXR1cm4gbV9nbG9iYWxPYmplY3Q7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAppbmRleCBk
YWMzZGQ1ZGJkOWViZTc4OTE0YjUxMWI3MTkyZWI5NDczNWYyNWYzLi4wY2FiYmI5ZjU0ZjE3NzA1
ZTkyZmQ1MTA5MWFhMDgzN2I4Y2FiZWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgQ2FsbEZyYW1lOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwor
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7CiB9CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTQs
MTEgKzU0LDExIEBAIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnNvbGVNZXNzYWdlIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKLSAgICBDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25l
ZCBjb2x1bW4sIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVz
dElkZW50aWZpZXIgPSAwKTsKKyAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNz
YWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmlu
ZyYgdXJsLCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqID0gbnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAg
IENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmPFNjcmlwdENhbGxTdGFjaz4mJiwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwogICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
UmVmPFNjcmlwdEFyZ3VtZW50cz4mJiwgUmVmPFNjcmlwdENhbGxTdGFjaz4mJiwgdW5zaWduZWQg
bG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwotICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
UmVmPFNjcmlwdEFyZ3VtZW50cz4mJiwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0ciwgdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOwotICAgIENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIFZlY3RvcjxKU09OTG9nVmFsdWU+
JiYsIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDAp
OworICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiwgSlND
OjpKU0dsb2JhbE9iamVjdCogPSBudWxscHRyLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlm
aWVyID0gMCk7CisgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUs
IE1lc3NhZ2VMZXZlbCwgVmVjdG9yPEpTT05Mb2dWYWx1ZT4mJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsKICAgICB+Q29uc29sZU1l
c3NhZ2UoKTsKIAogICAgIHZvaWQgYWRkVG9Gcm9udGVuZChDb25zb2xlRnJvbnRlbmREaXNwYXRj
aGVyJiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpOwpAQCAt
NzIsNyArNzIsNyBAQCBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDb25zb2xlTWVzc2FnZSB7CiAg
ICAgdW5zaWduZWQgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZTsgfQogICAgIHVuc2lnbmVk
IGNvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uOyB9CiAKLSAgICBKU0M6OkV4ZWNTdGF0
ZSogc2NyaXB0U3RhdGUoKSBjb25zdDsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QoKSBjb25zdDsKIAogICAgIHZvaWQgaW5jcmVtZW50Q291bnQoKSB7ICsrbV9yZXBlYXRD
b3VudDsgfQogCkBAIC04NCw3ICs4NCw3IEBAIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnNv
bGVNZXNzYWdlIHsKICAgICB2b2lkIGNsZWFyKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBhdXRv
Z2VuZXJhdGVNZXRhZGF0YShKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyKTsKKyAgICB2b2lkIGF1
dG9nZW5lcmF0ZU1ldGFkYXRhKEpTQzo6SlNHbG9iYWxPYmplY3QqID0gbnVsbHB0cik7CiAKICAg
ICBNZXNzYWdlU291cmNlIG1fc291cmNlOwogICAgIE1lc3NhZ2VUeXBlIG1fdHlwZTsKQEAgLTk0
LDcgKzk0LDcgQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29uc29sZU1lc3NhZ2UgewogICAg
IFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IG1fY2FsbFN0YWNrOwogICAgIFZlY3RvcjxKU09OTG9n
VmFsdWU+IG1fanNvbkxvZ1ZhbHVlczsKICAgICBTdHJpbmcgbV91cmw7Ci0gICAgSlNDOjpFeGVj
U3RhdGUqIG1fc2NyaXB0U3RhdGUgeyBudWxscHRyIH07CisgICAgSlNDOjpKU0dsb2JhbE9iamVj
dCogbV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9saW5lIHsgMCB9
OwogICAgIHVuc2lnbmVkIG1fY29sdW1uIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fcmVwZWF0Q291
bnQgeyAxIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHQuY3BwCmluZGV4IGJhMzVmZGFkMzFhMjk1OTJhNDU1ODA0NTExNjkxNDQzMDViMDcz
MmMuLmNjODQ5ZjA1MWZhNDA1MThhOWQxYTAzNDI5YmMyYjRkYmNmYjMxMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC0y
NjgsNyArMjY4LDcgQEAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxs
RnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMKICAgICBpZiAoIWNhbGxSZXN1
bHQgfHwgIWNhbGxSZXN1bHQudmFsdWUoKSkKICAgICAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIAotICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gcmVzdWx0ID0gdG9JbnNwZWN0b3JWYWx1ZSgqc2NyaXB0U3RhdGUoKSwgY2Fs
bFJlc3VsdC52YWx1ZSgpKTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCA9IHRvSW5z
cGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CiAgICAgaWYg
KHJlc3VsdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSkKICAgICAgICAgcmV0
dXJuIEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZT4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpLnJlbGVhc2VOb25OdWxsKCk7CiAK
QEAgLTI4OSw3ICsyODksNyBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QoSlNDOjpKU1ZhbHVlCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAg
IGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoKnNjcmlwdFN0YXRlKCksIGNh
bGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7CisgICAgYm9vbCBjYXN0
U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52
YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RT
dWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogCiAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7
CkBAIC0zMTEsNyArMzExLDcgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0cmluZyhjb25zdCBTdHIKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0g
ICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZSgqc2NyaXB0U3RhdGUoKSwg
Y2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKKyAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0
LnZhbHVlKCkpLT5hc09iamVjdChyZXN1bHRPYmplY3QpOwogICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAKICAgICByZXR1cm4gQmluZGluZ1RyYWl0czxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0
KTsKQEAgLTMzMyw3ICszMzMsNyBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShKU0M6OkpTVmFsdWUgdAogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsK
LSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB0b0luc3BlY3RvclZhbHVlKCpzY3JpcHRTdGF0ZSgp
LCBjYWxsUmVzdWx0LnZhbHVlKCkpLT5hc09iamVjdChyZXN1bHRPYmplY3QpOworICAgIGJvb2wg
Y2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1
bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7CiAgICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKIAogICAgIHJldHVybiBCaW5kaW5nVHJhaXRz
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmpl
Y3QpOwpAQCAtMzUwLDcgKzM1MCw3IEBAIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0
UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZShKU0M6OkpTVmFsCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0
OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoKnNjcmlwdFN0YXRl
KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7CisgICAgYm9v
bCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJl
c3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKICAgICBBU1NFUlRfVU5VU0VE
KGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogCiAgICAgcmV0dXJuIEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+OjpydW50aW1lQ2FzdChyZXN1bHRP
YmplY3QpOwpAQCAtNDI2LDE4ICs0MjYsMTggQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6cmVsZWFz
ZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiAKIEpTQzo6SlNWYWx1ZSBJ
bmplY3RlZFNjcmlwdDo6YXJyYXlGcm9tVmVjdG9yKFZlY3RvcjxKU0M6OkpTVmFsdWU+JiYgdmVj
dG9yKQogewotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSBzY3JpcHRTdGF0ZSgpOwot
ICAgIGlmICghZXhlY1N0YXRlKQorICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAg
ICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
ayhleGVjU3RhdGUpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0KTsK
IAotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
Y1N0YXRlLCBudWxscHRyKTsKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjpjb25zdHJ1
Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7CiAgICAgaWYgKCFhcnJheSkKICAg
ICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKIAogICAgIGZvciAoYXV0byYgaXRlbSA6
IHZlY3RvcikKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWNTdGF0ZSwgYXJyYXkt
Pmxlbmd0aCgpLCBpdGVtKTsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbE9i
amVjdCwgYXJyYXktPmxlbmd0aCgpLCBpdGVtKTsKIAogICAgIHJldHVybiBhcnJheTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRC
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRC
YXNlLmNwcAppbmRleCA3ODFlNjYyN2E3YjljYjg1YjNkMmM4Yzg3Zjk0NjEwOGNmMjU1YmQ1Li5k
MWM2MzAzOTIwN2YwOWRmMDg2NDJiZTQ1NGQ4NDQ0NWYxY2M0ZTQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCkBA
IC02Miw3ICs2Miw3IEBAIEluamVjdGVkU2NyaXB0QmFzZTo6fkluamVjdGVkU2NyaXB0QmFzZSgp
CiAKIGJvb2wgSW5qZWN0ZWRTY3JpcHRCYXNlOjpoYXNBY2Nlc3NUb0luc3BlY3RlZFNjcmlwdFN0
YXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9lbnZpcm9ubWVudCAmJiBtX2Vudmlyb25tZW50
LT5jYW5BY2Nlc3NJbnNwZWN0ZWRTY3JpcHRTdGF0ZShtX2luamVjdGVkU2NyaXB0T2JqZWN0LnNj
cmlwdFN0YXRlKCkpOworICAgIHJldHVybiBtX2Vudmlyb25tZW50ICYmIG1fZW52aXJvbm1lbnQt
PmNhbkFjY2Vzc0luc3BlY3RlZFNjcmlwdFN0YXRlKG1faW5qZWN0ZWRTY3JpcHRPYmplY3QuZ2xv
YmFsT2JqZWN0KCkpOwogfQogCiBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRPYmplY3QmIEluamVj
dGVkU2NyaXB0QmFzZTo6aW5qZWN0ZWRTY3JpcHRPYmplY3QoKSBjb25zdApAQCAtNzIsOCArNzIs
OCBAQCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRPYmplY3QmIEluamVjdGVkU2NyaXB0QmFzZTo6
aW5qZWN0ZWRTY3JpcHRPYmplY3QoKSBjb25zdAogCiBFeHBlY3RlZDxKU0M6OkpTVmFsdWUsIE5h
a2VkUHRyPEpTQzo6RXhjZXB0aW9uPj4gSW5qZWN0ZWRTY3JpcHRCYXNlOjpjYWxsRnVuY3Rpb25X
aXRoRXZhbEVuYWJsZWQoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbikg
Y29uc3QKIHsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX2luamVjdGVkU2Ny
aXB0T2JqZWN0LnNjcmlwdFN0YXRlKCk7Ci0gICAgSlNDOjpEZWJ1Z2dlckV2YWxFbmFibGVyIGV2
YWxFbmFibGVyKHNjcmlwdFN0YXRlKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2luamVjdGVkU2NyaXB0T2JqZWN0Lmdsb2JhbE9iamVjdCgpOworICAgIEpTQzo6
RGVidWdnZXJFdmFsRW5hYmxlciBldmFsRW5hYmxlcihnbG9iYWxPYmplY3QpOwogICAgIHJldHVy
biBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKQEAgLTg2LDcgKzg2LDcgQEAgUmVmPEpTT046OlZhbHVl
PiBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCYgZnUKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEpTT046OlZhbHVlOjpj
cmVhdGUoIkV4Y2VwdGlvbiB3aGlsZSBtYWtpbmcgYSBjYWxsLiIpOwogCi0gICAgUmVmUHRyPEpT
T046OlZhbHVlPiByZXN1bHRKU09OVmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKCptX2luamVjdGVk
U2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCksIHJlc3VsdC52YWx1ZSgpKTsKKyAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IHJlc3VsdEpTT05WYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUobV9pbmplY3Rl
ZFNjcmlwdE9iamVjdC5nbG9iYWxPYmplY3QoKSwgcmVzdWx0LnZhbHVlKCkpOwogICAgIGlmICgh
cmVzdWx0SlNPTlZhbHVlKQogICAgICAgICByZXR1cm4gSlNPTjo6VmFsdWU6OmNyZWF0ZShtYWtl
U3RyaW5nKCJPYmplY3QgaGFzIHRvbyBsb25nIHJlZmVyZW5jZSBjaGFpbiAobXVzdCBub3QgYmUg
bG9uZ2VyIHRoYW4gIiwgSlNPTjo6VmFsdWU6Om1heERlcHRoLCAnKScpKTsKIApAQCAtMTA1LDE5
ICsxMDUsMTcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VBc3luY0NhbGwoRGVwcmVj
YXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8qIHNjcmlwdFN0YXRlID0gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3Jp
cHRTdGF0ZSgpOwotICAgIEpTQzo6Vk0mIHZtID0gc2NyaXB0U3RhdGUtPnZtKCk7CisgICAgYXV0
byogZ2xvYmFsT2JqZWN0ID0gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5nbG9iYWxPYmplY3QoKTsK
KyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAogICAgIEpTQzo6SlNOYXRp
dmVTdGRGdW5jdGlvbioganNGdW5jdGlvbiA9IG51bGxwdHI7Ci0gICAgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKICAgICB7CiAgICAgICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CiAKLSAgICAgICAgZ2xvYmFsT2JqZWN0ID0gc2NyaXB0U3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICAgICAganNGdW5jdGlvbiA9IEpTQzo6SlNOYXRp
dmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsIFN0cmluZygpLCBbJiwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkNhbGxGcmFtZSogY2FsbEZyYW1lKSB7CisgICAgICAgIGpzRnVuY3Rpb24gPSBKU0M6OkpTTmF0
aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCBTdHJpbmcoKSwgWyYs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGlmICgh
Y2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGNoZWNrQXN5bmNDYWxsUmVzdWx0KEpTT046OlZh
bHVlOjpjcmVhdGUoIkV4Y2VwdGlvbiB3aGlsZSBtYWtpbmcgYSBjYWxsLiIpLCBjYWxsYmFjayk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChhdXRvIHJlc3VsdEpTT05WYWx1ZSA9IHRvSW5zcGVjdG9y
VmFsdWUoKmNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpCisgICAgICAgICAgICBl
bHNlIGlmIChhdXRvIHJlc3VsdEpTT05WYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkKICAgICAgICAgICAgICAgICBjaGVja0FzeW5j
Q2FsbFJlc3VsdChyZXN1bHRKU09OVmFsdWUsIGNhbGxiYWNrKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBjaGVja0FzeW5jQ2FsbFJlc3VsdChKU09OOjpWYWx1ZTo6Y3JlYXRl
KG1ha2VTdHJpbmcoIk9iamVjdCBoYXMgdG9vIGxvbmcgcmVmZXJlbmNlIGNoYWluIChtdXN0IG5v
dCBiZSBsb25nZXIgdGhhbiAiLCBKU09OOjpWYWx1ZTo6bWF4RGVwdGgsICcpJykpLCBjYWxsYmFj
ayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0QmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEJhc2UuaAppbmRleCBlMmZiODQ1YWFlYmI0MTlhYTkyNmMwZDY2ZWI3NWEzY2MyZWE3Yzhm
Li44MTIzZjFkNjZlOWIxM2FkNGFkMGVjYjFhM2NhZDMzZjU5NzZkNWQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgKQEAg
LTU2LDcgKzU2LDcgQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5qZWN0ZWRTY3JpcHRCYXNl
IHsKIAogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQog
ICAgIGJvb2wgaGFzTm9WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRPYmpl
Y3QuaGFzTm9WYWx1ZSgpOyB9Ci0gICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpOyB9CisgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pbmpl
Y3RlZFNjcmlwdE9iamVjdC5nbG9iYWxPYmplY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgSW5q
ZWN0ZWRTY3JpcHRCYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggMjk5
ZjMwZTgzZDUxYWNjNDFlZmI2MjRjNmQxNTczYTNmZTcxNTc2Mi4uNzJlZGFiYmFmNmY5MjlkMjhi
OGNlZmNjYmFhODdkOWViMGQyOWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcApAQCAtMzcsMTMgKzM3LDEzIEBA
IEluamVjdGVkU2NyaXB0SG9zdDo6fkluamVjdGVkU2NyaXB0SG9zdCgpCiB7CiB9CiAKLUpTVmFs
dWUgSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3cmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKK0pTVmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3cmFwcGVy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
d3JhcHBlcnMuZ2V0V3JhcHBlcihnbG9iYWxPYmplY3QpOwogICAgIGlmICh2YWx1ZSkKICAgICAg
ICAgcmV0dXJuIHZhbHVlOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IEpTSW5qZWN0
ZWRTY3JpcHRIb3N0OjpjcmVhdGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSk7CiAgICAgSlNJbmplY3RlZFNjcmlwdEhvc3Qq
IGluamVjdGVkU2NyaXB0SG9zdCA9IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodm0sIHN0
cnVjdHVyZSwgbWFrZVJlZigqdGhpcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKaW5kZXggOGY3ZDM3NDI0NGE3M2FiMTgw
YzlkY2MyMTk0YTdlMzYwNjg0NzQwMi4uMmJhMDUzZGI1ODQwZjBhNzlmNWRjZGQ4NjczODAxYzJl
NjZlMTA0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdEhvc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0SG9zdC5oCkBAIC0zNywxMSArMzcsMTEgQEAgY2xhc3MgSlNfRVhQT1JUX1BS
SVZBVEUgSW5qZWN0ZWRTY3JpcHRIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5qZWN0ZWRTY3Jp
cHRIb3MKICAgICBzdGF0aWMgUmVmPEluamVjdGVkU2NyaXB0SG9zdD4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbmplY3RlZFNjcmlwdEhvc3QpOyB9CiAgICAgdmlydHVhbCB+SW5q
ZWN0ZWRTY3JpcHRIb3N0KCk7CiAKLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBzdWJ0eXBlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKSB7IHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7
IH0KLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBnZXRJbnRlcm5hbFByb3BlcnRpZXMoSlNDOjpW
TSYsIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKSB7IHJldHVybiB7IH07IH0KKyAgICB2
aXJ0dWFsIEpTQzo6SlNWYWx1ZSBzdWJ0eXBlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpT
VmFsdWUpIHsgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsgfQorICAgIHZpcnR1YWwgSlNDOjpK
U1ZhbHVlIGdldEludGVybmFsUHJvcGVydGllcyhKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6SlNWYWx1ZSkgeyByZXR1cm4geyB9OyB9CiAgICAgdmlydHVhbCBib29sIGlzSFRN
TEFsbENvbGxlY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSkgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIEpTQzo6SlNWYWx1ZSB3cmFwcGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOworICAgIEpTQzo6SlNWYWx1ZSB3cmFwcGVyKEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKICAgICB2b2lkIGNsZWFyQWxsV3JhcHBlcnMoKTsKIAogICAgIHZvaWQgc2V0U2F2ZWRSZXN1
bHRBbGlhcyhjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBhbGlhcykgeyBtX3NhdmVkUmVzdWx0QWxp
YXMgPSBhbGlhczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IDc1ZjZkMGMwM2IyYzIyMWRhY2Yy
NmNkYzcyMzZjYjYyNTcxOGNmZGIuLmEwOGYyM2VmMWI5MDVkMTQxYWRmYzQzZGNlYWYyNWNhNjNi
NWM0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKQEAgLTkyLDE0ICs5MiwxNCBAQCBJbmplY3RlZFNj
cmlwdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9ySWQoaW50IGlkKQog
ICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogfQogCi1pbnQgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyOjppbmplY3RlZFNjcmlwdElkRm9yKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCitpbnQgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElkRm9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7Ci0gICAgYXV0byBpdCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQoc2Ny
aXB0U3RhdGUpOworICAgIGF1dG8gaXQgPSBtX3NjcmlwdFN0YXRlVG9JZC5maW5kKGdsb2JhbE9i
amVjdCk7CiAgICAgaWYgKGl0ICE9IG1fc2NyaXB0U3RhdGVUb0lkLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgaW50IGlkID0gbV9uZXh0SW5qZWN0ZWRTY3JpcHRJZCsr
OwotICAgIG1fc2NyaXB0U3RhdGVUb0lkLnNldChzY3JpcHRTdGF0ZSwgaWQpOworICAgIG1fc2Ny
aXB0U3RhdGVUb0lkLnNldChnbG9iYWxPYmplY3QsIGlkKTsKICAgICByZXR1cm4gaWQ7CiB9CiAK
QEAgLTE0MywxOSArMTQzLDE4IEBAIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVj
dGVkU2NyaXB0U291cmNlKCkKICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENv
cHlpbmcoSW5qZWN0ZWRTY3JpcHRTb3VyY2VfanMsIHNpemVvZihJbmplY3RlZFNjcmlwdFNvdXJj
ZV9qcykpOwogfQogCi1FeHBlY3RlZDxKU09iamVjdCosIE5ha2VkUHRyPEV4Y2VwdGlvbj4+IElu
amVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBz
b3VyY2UsIEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkKK0V4cGVjdGVkPEpTT2JqZWN0
KiwgTmFrZWRQdHI8RXhjZXB0aW9uPj4gSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJbmpl
Y3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgaW50IGlkKQogewotICAgIFZNJiB2bSA9IHNjcmlwdFN0YXRlLT52bSgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgU291cmNlQ29k
ZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UsIHsgfSk7Ci0gICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0g
ICAgSlNWYWx1ZSBnbG9iYWxUaGlzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+Z2xvYmFsVGhpc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSBnbG9iYWxUaGlzVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdsb2JhbFRo
aXMoKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAg
ICBJbnNwZWN0b3JFdmFsdWF0ZUhhbmRsZXIgZXZhbHVhdGVIYW5kbGVyID0gbV9lbnZpcm9ubWVu
dC5ldmFsdWF0ZUhhbmRsZXIoKTsKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBldmFsdWF0
ZUhhbmRsZXIoc2NyaXB0U3RhdGUsIHNvdXJjZUNvZGUsIGdsb2JhbFRoaXNWYWx1ZSwgZXZhbHVh
dGlvbkV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZXZhbHVhdGVIYW5k
bGVyKGdsb2JhbE9iamVjdCwgc291cmNlQ29kZSwgZ2xvYmFsVGhpc1ZhbHVlLCBldmFsdWF0aW9u
RXhjZXB0aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGV2YWx1YXRpb25FeGNlcHRpb24pOwogCkBAIC0xNjUsMzAgKzE2NCwz
MCBAQCBFeHBlY3RlZDxKU09iamVjdCosIE5ha2VkUHRyPEV4Y2VwdGlvbj4+IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0ZWRTYwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQobV9pbmplY3Rl
ZFNjcmlwdEhvc3QtPndyYXBwZXIoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdCkpOworICAgIGFy
Z3MuYXBwZW5kKG1faW5qZWN0ZWRTY3JpcHRIb3N0LT53cmFwcGVyKGdsb2JhbE9iamVjdCkpOwog
ICAgIGFyZ3MuYXBwZW5kKGdsb2JhbFRoaXNWYWx1ZSk7CiAgICAgYXJncy5hcHBlbmQoanNOdW1i
ZXIoaWQpKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAotICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNDOjpjYWxsKHNjcmlwdFN0YXRlLCBmdW5jdGlvblZhbHVlLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGdsb2JhbFRoaXNWYWx1ZSwgYXJncyk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBKU0M6OmNhbGwoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblZhbHVlLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGdsb2JhbFRoaXNWYWx1ZSwgYXJncyk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICByZXR1cm4gcmVzdWx0LmdldE9iamVjdCgpOwogfQogCi1JbmplY3RlZFNjcmlwdCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yKEV4ZWNTdGF0ZSogaW5zcGVjdGVk
RXhlY1N0YXRlKQorSW5qZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3Rl
ZFNjcmlwdEZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIGF1dG8gaXQg
PSBtX3NjcmlwdFN0YXRlVG9JZC5maW5kKGluc3BlY3RlZEV4ZWNTdGF0ZSk7CisgICAgYXV0byBp
dCA9IG1fc2NyaXB0U3RhdGVUb0lkLmZpbmQoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoaXQgIT0g
bV9zY3JpcHRTdGF0ZVRvSWQuZW5kKCkpIHsKICAgICAgICAgYXV0byBpdDEgPSBtX2lkVG9Jbmpl
Y3RlZFNjcmlwdC5maW5kKGl0LT52YWx1ZSk7CiAgICAgICAgIGlmIChpdDEgIT0gbV9pZFRvSW5q
ZWN0ZWRTY3JpcHQuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gaXQxLT52YWx1ZTsKICAgICB9
CiAKLSAgICBpZiAoIW1fZW52aXJvbm1lbnQuY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUo
aW5zcGVjdGVkRXhlY1N0YXRlKSkKKyAgICBpZiAoIW1fZW52aXJvbm1lbnQuY2FuQWNjZXNzSW5z
cGVjdGVkU2NyaXB0U3RhdGUoZ2xvYmFsT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIEluamVjdGVk
U2NyaXB0KCk7CiAKLSAgICBpbnQgaWQgPSBpbmplY3RlZFNjcmlwdElkRm9yKGluc3BlY3RlZEV4
ZWNTdGF0ZSk7Ci0gICAgYXV0byBjcmVhdGVSZXN1bHQgPSBjcmVhdGVJbmplY3RlZFNjcmlwdChp
bmplY3RlZFNjcmlwdFNvdXJjZSgpLCBpbnNwZWN0ZWRFeGVjU3RhdGUsIGlkKTsKKyAgICBpbnQg
aWQgPSBpbmplY3RlZFNjcmlwdElkRm9yKGdsb2JhbE9iamVjdCk7CisgICAgYXV0byBjcmVhdGVS
ZXN1bHQgPSBjcmVhdGVJbmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdFNvdXJjZSgpLCBnbG9i
YWxPYmplY3QsIGlkKTsKICAgICBpZiAoIWNyZWF0ZVJlc3VsdCkgewogICAgICAgICBhdXRvJiBl
cnJvciA9IGNyZWF0ZVJlc3VsdC5lcnJvcigpOwogICAgICAgICBBU1NFUlQoZXJyb3IpOwpAQCAt
MTk4LDcgKzE5Nyw3IEBAIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5q
ZWN0ZWRTY3JpcHRGb3IoRXhlY1N0YXRlKiBpbnNwZWN0ZWRFeGVjCiAgICAgICAgIGF1dG8mIHN0
YWNrID0gZXJyb3ItPnN0YWNrKCk7CiAgICAgICAgIGlmIChzdGFjay5zaXplKCkgPiAwKQogICAg
ICAgICAgICAgc3RhY2tbMF0uY29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKLSAg
ICAgICAgV1RGTG9nQWx3YXlzKCJFcnJvciB3aGVuIGNyZWF0aW5nIGluamVjdGVkIHNjcmlwdDog
JXMgKCVkOiVkKVxuIiwgZXJyb3ItPnZhbHVlKCkudG9XVEZTdHJpbmcoaW5zcGVjdGVkRXhlY1N0
YXRlKS51dGY4KCkuZGF0YSgpLCBsaW5lLCBjb2x1bW4pOworICAgICAgICBXVEZMb2dBbHdheXMo
IkVycm9yIHdoZW4gY3JlYXRpbmcgaW5qZWN0ZWQgc2NyaXB0OiAlcyAoJWQ6JWQpXG4iLCBlcnJv
ci0+dmFsdWUoKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpLnV0ZjgoKS5kYXRhKCksIGxpbmUs
IGNvbHVtbik7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiJXNcbiIsIGluamVjdGVkU2NyaXB0U291
cmNlKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQpAQCAtMjA4LDcgKzIwNyw3IEBAIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3IoRXhlY1N0YXRlKiBpbnNwZWN0ZWRFeGVjCiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgSW5qZWN0
ZWRTY3JpcHQgcmVzdWx0KHsgaW5zcGVjdGVkRXhlY1N0YXRlLCBjcmVhdGVSZXN1bHQudmFsdWUo
KSB9LCAmbV9lbnZpcm9ubWVudCk7CisgICAgSW5qZWN0ZWRTY3JpcHQgcmVzdWx0KHsgZ2xvYmFs
T2JqZWN0LCBjcmVhdGVSZXN1bHQudmFsdWUoKSB9LCAmbV9lbnZpcm9ubWVudCk7CiAgICAgbV9p
ZFRvSW5qZWN0ZWRTY3JpcHQuc2V0KGlkLCByZXN1bHQpOwogICAgIGRpZENyZWF0ZUluamVjdGVk
U2NyaXB0KHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5oCmluZGV4IGRk
M2YzZDY4MmRmNTJlZGUxMTM4YWIxNTBjOGVlMzQ3MTFiNjcxOTAuLjFmNzQwYzQwNjg0NTM2NmE3
NTliYTBhZjRjOGMzMjc3NzQ5NTQ4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuaApAQCAtNDAsNyArNDAsNiBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxGcmFtZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9
IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC02MSw5ICs2MCw5IEBA
IGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluamVjdGVkU2NyaXB0TWFuYWdlciB7CiAgICAgSW5q
ZWN0ZWRTY3JpcHRIb3N0JiBpbmplY3RlZFNjcmlwdEhvc3QoKTsKICAgICBJbnNwZWN0b3JFbnZp
cm9ubWVudCYgaW5zcGVjdG9yRW52aXJvbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Vudmlyb25t
ZW50OyB9CiAKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvcihKU0M6OkV4ZWNT
dGF0ZSopOworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvcklkKGludCk7
Ci0gICAgaW50IGluamVjdGVkU2NyaXB0SWRGb3IoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBpbnQg
aW5qZWN0ZWRTY3JpcHRJZEZvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKTsK
ICAgICB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsK
ICAgICB2b2lkIGNsZWFyRXZlbnRWYWx1ZSgpOwpAQCAtNzMsMTEgKzcyLDExIEBAIGNsYXNzIEpT
X0VYUE9SVF9QUklWQVRFIEluamVjdGVkU2NyaXB0TWFuYWdlciB7CiAgICAgdmlydHVhbCB2b2lk
IGRpZENyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IEluamVjdGVkU2NyaXB0Jik7CiAKICAgICBI
YXNoTWFwPGludCwgSW5qZWN0ZWRTY3JpcHQ+IG1faWRUb0luamVjdGVkU2NyaXB0OwotICAgIEhh
c2hNYXA8SlNDOjpFeGVjU3RhdGUqLCBpbnQ+IG1fc2NyaXB0U3RhdGVUb0lkOworICAgIEhhc2hN
YXA8SlNDOjpKU0dsb2JhbE9iamVjdCosIGludD4gbV9zY3JpcHRTdGF0ZVRvSWQ7CiAKIHByaXZh
dGU6CiAgICAgU3RyaW5nIGluamVjdGVkU2NyaXB0U291cmNlKCk7Ci0gICAgRXhwZWN0ZWQ8SlND
OjpKU09iamVjdCosIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPj4gY3JlYXRlSW5qZWN0ZWRTY3Jp
cHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlKiwgaW50IGlkKTsKKyAgICBF
eHBlY3RlZDxKU0M6OkpTT2JqZWN0KiwgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+PiBjcmVhdGVJ
bmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IGludCBpZCk7CiAKICAgICBJbnNwZWN0b3JFbnZpcm9ubWVudCYgbV9lbnZpcm9ubWVudDsKICAg
ICBSZWY8SW5qZWN0ZWRTY3JpcHRIb3N0PiBtX2luamVjdGVkU2NyaXB0SG9zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVs
ZS5jcHAKaW5kZXggNWM5YzQ2MzExZTZiM2RmYmE3ZWMzZjM2MjAwMzdiOGUwMjUzNjE4ZS4uOGJk
ODlhM2U1NzE0NjQyMTVhOGI2OTFkYWNmMDc5ZjUwNmZjZWZkNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAK
QEAgLTQ4LDkgKzQ4LDkgQEAgSW5qZWN0ZWRTY3JpcHRNb2R1bGU6On5JbmplY3RlZFNjcmlwdE1v
ZHVsZSgpCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRNb2R1bGU6OmVuc3VyZUluamVjdGVk
KEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBKU0M6OkV4ZWNT
dGF0ZSogc2NyaXB0U3RhdGUpCit2b2lkIEluamVjdGVkU2NyaXB0TW9kdWxlOjplbnN1cmVJbmpl
Y3RlZChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvcihzY3Jp
cHRTdGF0ZSk7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNj
cmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7CiAgICAgZW5zdXJl
SW5qZWN0ZWQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBpbmplY3RlZFNjcmlwdCk7CiB9CiAKQEAg
LTYxLDcgKzYxLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdE1vZHVsZTo6ZW5zdXJlSW5qZWN0ZWQo
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE0KICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gRklYTUU6IE1ha2UgdGhlIEluamVjdGVkU2NyaXB0IGEgbW9kdWxlIGl0c2VsZi4K
LSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoaW5qZWN0ZWRTY3JpcHQuc2NyaXB0U3RhdGUo
KSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGluamVjdGVkU2NyaXB0Lmdsb2JhbE9i
amVjdCgpKTsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5q
ZWN0ZWRTY3JpcHQuaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImhhc0luamVjdGVkTW9kdWxlIl9z
LCBpbmplY3RlZFNjcmlwdE1hbmFnZXItPmluc3BlY3RvckVudmlyb25tZW50KCkuZnVuY3Rpb25D
YWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChuYW1lKCkpOwogICAg
IGF1dG8gaGFzSW5qZWN0ZWRNb2R1bGVSZXN1bHQgPSBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rp
b25XaXRoRXZhbEVuYWJsZWQoZnVuY3Rpb24pOwpAQCAtNzQsNyArNzQsNyBAQCB2b2lkIEluamVj
dGVkU2NyaXB0TW9kdWxlOjplbnN1cmVJbmplY3RlZChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGlu
amVjdGVkU2NyaXB0TQogICAgICAgICBhdXRvJiBzdGFjayA9IGVycm9yLT5zdGFjaygpOwogICAg
ICAgICBpZiAoc3RhY2suc2l6ZSgpID4gMCkKICAgICAgICAgICAgIHN0YWNrWzBdLmNvbXB1dGVM
aW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRXJyb3Ig
d2hlbiBjYWxsaW5nICdoYXNJbmplY3RlZE1vZHVsZScgZm9yICclcyc6ICVzICglZDolZClcbiIs
IG5hbWUoKS51dGY4KCkuZGF0YSgpLCBlcnJvci0+dmFsdWUoKS50b1dURlN0cmluZyhpbmplY3Rl
ZFNjcmlwdC5zY3JpcHRTdGF0ZSgpKS51dGY4KCkuZGF0YSgpLCBsaW5lLCBjb2x1bW4pOworICAg
ICAgICBXVEZMb2dBbHdheXMoIkVycm9yIHdoZW4gY2FsbGluZyAnaGFzSW5qZWN0ZWRNb2R1bGUn
IGZvciAnJXMnOiAlcyAoJWQ6JWQpXG4iLCBuYW1lKCkudXRmOCgpLmRhdGEoKSwgZXJyb3ItPnZh
bHVlKCkudG9XVEZTdHJpbmcoaW5qZWN0ZWRTY3JpcHQuZ2xvYmFsT2JqZWN0KCkpLnV0ZjgoKS5k
YXRhKCksIGxpbmUsIGNvbHVtbik7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiJXNcbiIsIHNvdXJj
ZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdE1vZHVsZTo6ZW5z
dXJlSW5qZWN0ZWQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE0KICAgICAg
ICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0
LmluamVjdGVkU2NyaXB0T2JqZWN0KCksICJpbmplY3RNb2R1bGUiX3MsIGluamVjdGVkU2NyaXB0
TWFuYWdlci0+aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwog
ICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChuYW1lKCkpOwogICAgICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChzb3VyY2UoKSk7Ci0gICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KGhvc3QoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBpbmplY3RlZFNjcmlwdC5zY3JpcHRTdGF0
ZSgpKSk7CisgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGhvc3QoaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLCBpbmplY3RlZFNjcmlwdC5nbG9iYWxPYmplY3QoKSkpOwogICAgICAgICBhdXRv
IGluamVjdE1vZHVsZVJlc3VsdCA9IGluamVjdGVkU2NyaXB0LmNhbGxGdW5jdGlvbldpdGhFdmFs
RW5hYmxlZChmdW5jdGlvbik7CiAgICAgICAgIGlmICghaW5qZWN0TW9kdWxlUmVzdWx0KSB7CiAg
ICAgICAgICAgICBhdXRvJiBlcnJvciA9IGluamVjdE1vZHVsZVJlc3VsdC5lcnJvcigpOwpAQCAt
OTIsNyArOTIsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0TW9kdWxlOjplbnN1cmVJbmplY3RlZChJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TQogICAgICAgICAgICAgYXV0byYg
c3RhY2sgPSBlcnJvci0+c3RhY2soKTsKICAgICAgICAgICAgIGlmIChzdGFjay5zaXplKCkgPiAw
KQogICAgICAgICAgICAgICAgIHN0YWNrWzBdLmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNv
bHVtbik7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIkVycm9yIHdoZW4gY2FsbGluZyAnaW5q
ZWN0TW9kdWxlJyBmb3IgJyVzJzogJXMgKCVkOiVkKVxuIiwgbmFtZSgpLnV0ZjgoKS5kYXRhKCks
IGVycm9yLT52YWx1ZSgpLnRvV1RGU3RyaW5nKGluamVjdGVkU2NyaXB0LnNjcmlwdFN0YXRlKCkp
LnV0ZjgoKS5kYXRhKCksIGxpbmUsIGNvbHVtbik7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMo
IkVycm9yIHdoZW4gY2FsbGluZyAnaW5qZWN0TW9kdWxlJyBmb3IgJyVzJzogJXMgKCVkOiVkKVxu
IiwgbmFtZSgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT52YWx1ZSgpLnRvV1RGU3RyaW5nKGluamVj
dGVkU2NyaXB0Lmdsb2JhbE9iamVjdCgpKS51dGY4KCkuZGF0YSgpLCBsaW5lLCBjb2x1bW4pOwog
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlc1xuIiwgc291cmNlKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TW9kdWxlLmgKaW5kZXggNTgxNmY1M2RlNTlmMGMxZWM3OTljMGQ3Y2FiNTE1MzY0Yjc1NTQ1Ni4u
Mjc5YmFlNGViYWU0YzE4NTQ0OGM2OTdlOWEwM2JlZGI1ZWFmODU4YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUuaApA
QCAtNDcsMTQgKzQ3LDE0IEBAIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluamVjdGVkU2NyaXB0
TW9kdWxlIDogcHVibGljIEluamVjdGVkU2NyaXB0QmFzZSB7CiBwdWJsaWM6CiAgICAgfkluamVj
dGVkU2NyaXB0TW9kdWxlKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBTdHJpbmcgc291cmNlKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGhvc3QoSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiwgSlNDOjpFeGVjU3RhdGUqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBKU0M6OkpT
VmFsdWUgaG9zdChJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kikg
Y29uc3QgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gRG8gbm90IGV4cG9zZSBjb25zdHJ1Y3Rv
ciBpbiB0aGUgY2hpbGQgY2xhc3NlcyBhcyB3ZWxsLiBJbnN0ZWFkIHByb3ZpZGUKICAgICAvLyBh
IHN0YXRpYyBmYWN0b3J5IG1ldGhvZCB0aGF0IHdvdWxkIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBv
ZiB0aGUgY2xhc3MKICAgICAvLyBhbmQgY2FsbCBpdHMgZW5zdXJlSW5qZWN0ZWQoKSBtZXRob2Qg
aW1tZWRpYXRlbHkuCiAgICAgZXhwbGljaXQgSW5qZWN0ZWRTY3JpcHRNb2R1bGUoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKLSAgICB2b2lkIGVuc3VyZUluamVjdGVkKEluamVjdGVkU2NyaXB0TWFuYWdl
ciosIEpTQzo6RXhlY1N0YXRlKik7CisgICAgdm9pZCBlbnN1cmVJbmplY3RlZChJbmplY3RlZFNj
cmlwdE1hbmFnZXIqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgdm9pZCBlbnN1cmVJbmpl
Y3RlZChJbmplY3RlZFNjcmlwdE1hbmFnZXIqLCBjb25zdCBJbmplY3RlZFNjcmlwdCYpOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdFNvdXJjZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRTb3VyY2UuanMKaW5kZXggZmFiMzRhMDQ3OGNjOGNmOGFiZWFlZDEwMGE5ZGUxMDAwMjVk
OGJmMy4uY2YyYWM1ZDNiMzFiMGJiYWJkOWRlMmMzYzM1MGQ0NmYyOThmOTkxNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291
cmNlLmpzCkBAIC0zMDEsNyArMzAxLDcgQEAgZnVuY3Rpb24gaXNQcmltaXRpdmVWYWx1ZSh2YWx1
ZSkKICAgICAgICAgcmV0dXJuIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXg7CiAgICAgfQogCi0gICAg
d3JhcENhbGxGcmFtZXMoY2FsbEZyYW1lKQorICAgIHdyYXBDYWxsRnJhbWVzKGdsb2JhbE9iamVj
dCkKICAgICB7CiAgICAgICAgIGlmICghY2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMzA5LDkgKzMwOSw5IEBAIGZ1bmN0aW9uIGlzUHJpbWl0aXZlVmFsdWUodmFsdWUp
CiAgICAgICAgIGxldCByZXN1bHQgPSBbXTsKICAgICAgICAgbGV0IGRlcHRoID0gMDsKICAgICAg
ICAgZG8gewotICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IEluamVjdGVkU2NyaXB0LkNhbGxG
cmFtZVByb3h5KGRlcHRoKyssIGNhbGxGcmFtZSkpOworICAgICAgICAgICAgcmVzdWx0LnB1c2go
bmV3IEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5KGRlcHRoKyssIGdsb2JhbE9iamVjdCkp
OwogICAgICAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLmNhbGxlcjsKLSAgICAgICAgfSB3
aGlsZSAoY2FsbEZyYW1lKTsKKyAgICAgICAgfSB3aGlsZSAoZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTE0MTAsMTggKzE0MTAsMTggQEAgZnVuY3Rp
b24gdXBkYXRlTWFpblByZXZpZXcoc3ViUHJldmlldykgewogCiAvLyAtLS0tLS0tCiAKLUluamVj
dGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5ID0gZnVuY3Rpb24ob3JkaW5hbCwgY2FsbEZyYW1lKQor
SW5qZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkgPSBmdW5jdGlvbihvcmRpbmFsLCBnbG9iYWxP
YmplY3QpCiB7CiAgICAgdGhpcy5jYWxsRnJhbWVJZCA9IGB7Im9yZGluYWwiOiR7b3JkaW5hbH0s
ImluamVjdGVkU2NyaXB0SWQiOiR7aW5qZWN0ZWRTY3JpcHRJZH19YDsKICAgICB0aGlzLmZ1bmN0
aW9uTmFtZSA9IGNhbGxGcmFtZS5mdW5jdGlvbk5hbWU7CiAgICAgdGhpcy5sb2NhdGlvbiA9IHtz
Y3JpcHRJZDogU3RyaW5nKGNhbGxGcmFtZS5zb3VyY2VJRCksIGxpbmVOdW1iZXI6IGNhbGxGcmFt
ZS5saW5lLCBjb2x1bW5OdW1iZXI6IGNhbGxGcmFtZS5jb2x1bW59OwotICAgIHRoaXMuc2NvcGVD
aGFpbiA9IHRoaXMuX3dyYXBTY29wZUNoYWluKGNhbGxGcmFtZSk7CisgICAgdGhpcy5zY29wZUNo
YWluID0gdGhpcy5fd3JhcFNjb3BlQ2hhaW4oZ2xvYmFsT2JqZWN0KTsKICAgICB0aGlzLnRoaXMg
PSBSZW1vdGVPYmplY3QuY3JlYXRlKGNhbGxGcmFtZS50aGlzT2JqZWN0LCAiYmFja3RyYWNlIik7
CiAgICAgdGhpcy5pc1RhaWxEZWxldGVkID0gY2FsbEZyYW1lLmlzVGFpbERlbGV0ZWQ7CiB9Owog
CiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5wcm90b3R5cGUgPSB7Ci0gICAgX3dyYXBT
Y29wZUNoYWluKGNhbGxGcmFtZSkKKyAgICBfd3JhcFNjb3BlQ2hhaW4oZ2xvYmFsT2JqZWN0KQog
ICAgIHsKICAgICAgICAgbGV0IHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUuc2NvcGVDaGFpbjsKICAg
ICAgICAgbGV0IHNjb3BlRGVzY3JpcHRpb25zID0gY2FsbEZyYW1lLnNjb3BlRGVzY3JpcHRpb25z
KCk7CkBAIC0xNDY0LDcgKzE0NjQsNyBAQCBmdW5jdGlvbiB1cGRhdGVNYWluUHJldmlldyhzdWJQ
cmV2aWV3KSB7CiAKIC8vIC0tLS0tLS0KIAotZnVuY3Rpb24gQ29tbWFuZExpbmVBUEkoY2FsbEZy
YW1lKQorZnVuY3Rpb24gQ29tbWFuZExpbmVBUEkoZ2xvYmFsT2JqZWN0KQogewogICAgIGxldCBz
YXZlZFJlc3VsdEFsaWFzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LnNhdmVkUmVzdWx0QWxpYXM7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52
aXJvbm1lbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRW52
aXJvbm1lbnQuaAppbmRleCAzYjYwYzFiNGY4OGMwNGM0NGQxNGNkM2ZhOWVlMzk3YzNiYTNmMGM0
Li43N2M2Y2VlZTcxMmFmYjJkNTI3MTVkMDE3YTllNjkyMDcwZWNjZWUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckVudmlyb25tZW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JFbnZpcm9ubWVudC5o
CkBAIC00MCwxNCArNDAsMTQgQEAgY2xhc3MgVk07CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
Y2xhc3MgU2NyaXB0RGVidWdTZXJ2ZXI7Ci10eXBlZGVmIEpTQzo6SlNWYWx1ZSAoKkluc3BlY3Rv
ckZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUg
ZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERh
dGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
IGFyZ3MsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pOwotdHlw
ZWRlZiBKU0M6OkpTVmFsdWUgKCpJbnNwZWN0b3JFdmFsdWF0ZUhhbmRsZXIpKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFr
ZWRQdHI8SlNDOjpFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7Cit0eXBlZGVmIEpTQzo6
SlNWYWx1ZSAoKkluc3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIpKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxU
eXBlIGNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVl
IHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBOYWtlZFB0cjxKU0M6OkV4Y2Vw
dGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKK3R5cGVkZWYgSlNDOjpKU1ZhbHVlICgqSW5zcGVj
dG9yRXZhbHVhdGVIYW5kbGVyKShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpTb3Vy
Y2VDb2RlJiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+
JiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIGNsYXNzIEluc3BlY3RvckVudmlyb25tZW50IHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JFbnZpcm9ubWVudCgpIHsgfQogICAgIHZpcnR1
YWwgYm9vbCBkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBjYW5BY2Nlc3NJbnNwZWN0ZWRTY3JpcHRTdGF0ZShKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoSlND
OjpKU0dsb2JhbE9iamVjdCopIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEluc3BlY3RvckZ1bmN0
aW9uQ2FsbEhhbmRsZXIgZnVuY3Rpb25DYWxsSGFuZGxlcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIEluc3BlY3RvckV2YWx1YXRlSGFuZGxlciBldmFsdWF0ZUhhbmRsZXIoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kSW5pdGlhbGl6ZWQoKSA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNs
aWVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0
Q29uc29sZUNsaWVudC5jcHAKaW5kZXggY2Y4MGVlMjhjMGVmNGUyNDE5OGM1MWIwMWQ2MDVhZmFi
M2EzM2JiMy4uMDExY2Q3MWJiYTRmZjE1ZmUwYWUwNDc1MTYzNTAxMjZmZjJlZDllMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNv
bGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcApAQCAtNjAsMTQgKzYwLDE0IEBAIEpTR2xvYmFsT2Jq
ZWN0Q29uc29sZUNsaWVudDo6SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50KEluc3BlY3RvckNv
bnNvbGVBZ2VudCoKIHsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6Om1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRz
KQordm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExl
dmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsK
ICAgICBpZiAoSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpsb2dUb1N5c3RlbUNvbnNvbGUo
KSkKLSAgICAgICAgQ29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVu
dHMoTWVzc2FnZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50
cy5jb3B5UmVmKCkpOworICAgICAgICBDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdl
V2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCB0eXBlLCBsZXZlbCwgZ2xv
YmFsT2JqZWN0LCBhcmd1bWVudHMuY29weVJlZigpKTsKIAogICAgIFN0cmluZyBtZXNzYWdlOwog
ICAgIGFyZ3VtZW50cy0+Z2V0Rmlyc3RBcmd1bWVudEFzU3RyaW5nKG1lc3NhZ2UpOwotICAgIG1f
Y29uc29sZUFnZW50LT5hZGRNZXNzYWdlVG9Db25zb2xlKG1ha2VVbmlxdWU8Q29uc29sZU1lc3Nh
Z2U+KE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBXVEZN
b3ZlKGFyZ3VtZW50cyksIGV4ZWMpKTsKKyAgICBtX2NvbnNvbGVBZ2VudC0+YWRkTWVzc2FnZVRv
Q29uc29sZShtYWtlVW5pcXVlPENvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpDb25zb2xl
QVBJLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgV1RGTW92ZShhcmd1bWVudHMpLCBnbG9iYWxPYmpl
Y3QpKTsKIAogICAgIGlmICh0eXBlID09IE1lc3NhZ2VUeXBlOjpBc3NlcnQpIHsKICAgICAgICAg
aWYgKG1fZGVidWdnZXJBZ2VudCkKQEAgLTc1LDE3ICs3NSwxNyBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0Q29uc29sZUNsaWVudDo6bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUgdHlw
ZSwgTWVzcwogICAgIH0KIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmNv
dW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCkKK3ZvaWQgSlNHbG9iYWxP
YmplY3RDb25zb2xlQ2xpZW50Ojpjb3VudChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBTdHJpbmcmIGxhYmVsKQogewotICAgIG1fY29uc29sZUFnZW50LT5jb3VudChleGVjLCBs
YWJlbCk7CisgICAgbV9jb25zb2xlQWdlbnQtPmNvdW50KGdsb2JhbE9iamVjdCwgbGFiZWwpOwog
fQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6Y291bnRSZXNldChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudDo6Y291bnRSZXNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBT
dHJpbmcmIGxhYmVsKQogewotICAgIG1fY29uc29sZUFnZW50LT5jb3VudFJlc2V0KGV4ZWMsIGxh
YmVsKTsKKyAgICBtX2NvbnNvbGVBZ2VudC0+Y291bnRSZXNldChnbG9iYWxPYmplY3QsIGxhYmVs
KTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnByb2ZpbGUoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKQordm9pZCBKU0dsb2JhbE9iamVjdENvbnNv
bGVDbGllbnQ6OnByb2ZpbGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0
bGUpCiB7CiAgICAgaWYgKCFtX2NvbnNvbGVBZ2VudC0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6
OnByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogICAgIHN0YXJ0
Q29uc29sZVByb2ZpbGUoKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6
OnByb2ZpbGVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKQordm9pZCBK
U0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnByb2ZpbGVFbmQoSlNDOjpKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgaWYgKCFtX2NvbnNvbGVBZ2VudC0+ZW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTMsMzYgKzE1MywzNiBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudDo6c3RvcENvbnNvbGVQcm9maWxlKCkKICAgICAgICAgbV9k
ZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBtX3Byb2ZpbGVSZXN0
b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlKTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdENvbnNv
bGVDbGllbnQ6OnRha2VIZWFwU25hcHNob3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcm
IHRpdGxlKQordm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25hcHNo
b3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgbV9j
b25zb2xlQWdlbnQtPnRha2VIZWFwU25hcHNob3QodGl0bGUpOwogfQogCi12b2lkIEpTR2xvYmFs
T2JqZWN0Q29uc29sZUNsaWVudDo6dGltZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
bGFiZWwpCit2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGltZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAgIG1fY29uc29s
ZUFnZW50LT5zdGFydFRpbWluZyhleGVjLCBsYWJlbCk7CisgICAgbV9jb25zb2xlQWdlbnQtPnN0
YXJ0VGltaW5nKGdsb2JhbE9iamVjdCwgbGFiZWwpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0
Q29uc29sZUNsaWVudDo6dGltZUxvZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFi
ZWwsIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQordm9pZCBKU0dsb2JhbE9iamVj
dENvbnNvbGVDbGllbnQ6OnRpbWVMb2coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgU3RyaW5nJiBsYWJlbCwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0g
ICAgbV9jb25zb2xlQWdlbnQtPmxvZ1RpbWluZyhleGVjLCBsYWJlbCwgV1RGTW92ZShhcmd1bWVu
dHMpKTsKKyAgICBtX2NvbnNvbGVBZ2VudC0+bG9nVGltaW5nKGdsb2JhbE9iamVjdCwgbGFiZWws
IFdURk1vdmUoYXJndW1lbnRzKSk7CiB9CiAKLXZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xp
ZW50Ojp0aW1lRW5kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCkKK3ZvaWQg
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojp0aW1lRW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7Ci0gICAgbV9jb25zb2xlQWdlbnQtPnN0
b3BUaW1pbmcoZXhlYywgbGFiZWwpOworICAgIG1fY29uc29sZUFnZW50LT5zdG9wVGltaW5nKGds
b2JhbE9iamVjdCwgbGFiZWwpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVu
dDo6dGltZVN0YW1wKEV4ZWNTdGF0ZSosIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYpCit2b2lkIEpT
R2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGltZVN0YW1wKEpTR2xvYmFsT2JqZWN0KiwgUmVm
PFNjcmlwdEFyZ3VtZW50cz4mJikKIHsKICAgICAvLyBGSVhNRTogSlNDb250ZXh0IGluc3BlY3Rp
b24gbmVlZHMgYSB0aW1lbGluZS4KICAgICB3YXJuVW5pbXBsZW1lbnRlZCgiY29uc29sZS50aW1l
U3RhbXAiX3MpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6cmVjb3Jk
KEV4ZWNTdGF0ZSosIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYpIHsgfQotdm9pZCBKU0dsb2JhbE9i
amVjdENvbnNvbGVDbGllbnQ6OnJlY29yZEVuZChFeGVjU3RhdGUqLCBSZWY8U2NyaXB0QXJndW1l
bnRzPiYmKSB7IH0KK3ZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpyZWNvcmQoSlNH
bG9iYWxPYmplY3QqLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmKSB7IH0KK3ZvaWQgSlNHbG9iYWxP
YmplY3RDb25zb2xlQ2xpZW50OjpyZWNvcmRFbmQoSlNHbG9iYWxPYmplY3QqLCBSZWY8U2NyaXB0
QXJndW1lbnRzPiYmKSB7IH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnNj
cmVlbnNob3QoRXhlY1N0YXRlKiwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJikKK3ZvaWQgSlNHbG9i
YWxPYmplY3RDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTR2xvYmFsT2JqZWN0KiwgUmVmPFNj
cmlwdEFyZ3VtZW50cz4mJikKIHsKICAgICB3YXJuVW5pbXBsZW1lbnRlZCgiY29uc29sZS5zY3Jl
ZW5zaG90Il9zKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oCmluZGV4IDkwNjkwYzhjMDYw
MDVkM2NmNjA2YmY3ZmIxZjc5OTMzN2ZhOGE4YzkuLjNlNGExZmYxZDYyODY5ZjMxZGJjMjVlY2Jm
MTIxMjY3MjcxYjY4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaApAQCAtNDgsMjMgKzQ4
LDIzIEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudCBmaW5hbCA6IHB1YmxpYyBK
U0M6OkNvbnNvbGVDbGllbnQgewogICAgIHZvaWQgc2V0SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudChJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KiBhZ2VudCkgeyBtX3NjcmlwdFByb2Zp
bGVyQWdlbnQgPSBhZ2VudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBtZXNzYWdlV2l0aFR5
cGVBbmRMZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFJl
ZjxTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY291bnQoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvdW50UmVz
ZXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBvdmVycmlkZTsKLSAgICB2
b2lkIHByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHByb2ZpbGVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRp
dGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIHRha2VIZWFwU25hcHNob3QoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIHRpbWUoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBvdmVycmlkZTsKLSAgICB2b2lkIHRpbWVMb2co
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8U2NyaXB0QXJndW1lbnRz
PiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHRpbWVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIGxhYmVsKSBvdmVycmlkZTsKLSAgICB2b2lkIHRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0
ZSosIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVjb3JkKEpT
Qzo6RXhlY1N0YXRlKiwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZWNvcmRFbmQoSlNDOjpFeGVjU3RhdGUqLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNjcmVlbnNob3QoSlNDOjpFeGVjU3RhdGUqLCBSZWY8U2NyaXB0QXJn
dW1lbnRzPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIG1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1l
c3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBSZWY8U2NyaXB0
QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvdW50KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvdW50UmVzZXQo
SlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpIG92ZXJyaWRlOworICAg
IHZvaWQgcHJvZmlsZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiB0aXRsZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBwcm9maWxlRW5kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsKKyAgICB2b2lkIHRha2VIZWFwU25hcHNob3QoSlND
OjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOworICAgIHZv
aWQgdGltZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCB0aW1lTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcm
IGxhYmVsLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHRpbWVF
bmQoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdGltZVN0YW1wKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBSZWY8U2NyaXB0QXJndW1l
bnRzPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlY29yZChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
UmVmPFNjcmlwdEFyZ3VtZW50cz4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCByZWNvcmRFbmQoSlND
OjpKU0dsb2JhbE9iamVjdCosIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOworICAg
IHZvaWQgc2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUmVmPFNjcmlwdEFyZ3VtZW50
cz4mJikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgdm9pZCB3YXJuVW5pbXBsZW1lbnRlZChj
b25zdCBTdHJpbmcmIG1ldGhvZCk7Ci0gICAgdm9pZCBpbnRlcm5hbEFkZE1lc3NhZ2UoTWVzc2Fn
ZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUqLCBSZWY8U2NyaXB0QXJndW1lbnRz
PiYmKTsKKyAgICB2b2lkIGludGVybmFsQWRkTWVzc2FnZShNZXNzYWdlVHlwZSwgTWVzc2FnZUxl
dmVsLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJik7CiAKICAg
ICB2b2lkIHN0YXJ0Q29uc29sZVByb2ZpbGUoKTsKICAgICB2b2lkIHN0b3BDb25zb2xlUHJvZmls
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGJkYmQz
MWQ2MzEyYjJjMDU2ZDdjNDc4MTVkYzYxNWQxMjI2ZDkyNzEuLjA5MDJjYTMwYzFmMzM0YWMzNjBi
ZTUwMjEzMDIyNmJmNDA3NjdlMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKQEAgLTE3NCwyMiArMTc0LDIyIEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0
b3JDb250cm9sbGVyOjphcHBlbmRBUElCYWNrdHJhY2UoU2NyaXB0Q2FsbFN0YWNrJiBjYWxsCiAg
ICAgfQogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0
QVBJRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pCit2b2lk
IEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0QVBJRXhjZXB0aW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKICAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSh2bSk7CiAKLSAgICBSZWY8U2Ny
aXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2sgPSBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0
aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgUmVmPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNr
ID0gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGV4Y2Vw
dGlvbik7CiAgICAgaWYgKGluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2Vw
dGlvbnMoKSkKICAgICAgICAgYXBwZW5kQVBJQmFja3RyYWNlKGNhbGxTdGFjay5nZXQoKSk7CiAK
ICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9y
OiBTaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucwogICAg
IC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhjZXB0aW9uIG9iamVjdCwgY2FsbCB0b1N0cmluZyBv
biBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUg
ZXhjZXB0aW9uLgotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24tPnZhbHVlKCku
dG9XVEZTdHJpbmcoZXhlYyk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+
dmFsdWUoKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAKICAgICBpZiAoSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpsb2dUb1N5c3Rl
bUNvbnNvbGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXgg
NDRmMWY0NmE3ZDNhODA5ZGRiNTI0NTgwODc0N2ExYTQxZDYzZGI1Mi4uZGNhM2Q0MTBiNzkxYWM3
MDBjOGFkYWIwODAzMTNkZDYwM2FmYjk1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29u
dHJvbGxlci5oCkBAIC00Miw3ICs0Miw2IEBAIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIENvbnNv
bGVDbGllbnQ7CiBjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLXVzaW5n
IEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC04
MCwxMiArNzksMTIgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyIGZp
bmFsCiAgICAgYm9vbCBpbmNsdWRlc05hdGl2ZUNhbGxTdGFja1doZW5SZXBvcnRpbmdFeGNlcHRp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9pbmNsdWRlTmF0aXZlQ2FsbFN0YWNrV2l0aEV4Y2VwdGlv
bnM7IH0KICAgICB2b2lkIHNldEluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4
Y2VwdGlvbnMoYm9vbCBpbmNsdWRlc05hdGl2ZUNhbGxTdGFjaykgeyBtX2luY2x1ZGVOYXRpdmVD
YWxsU3RhY2tXaXRoRXhjZXB0aW9ucyA9IGluY2x1ZGVzTmF0aXZlQ2FsbFN0YWNrOyB9CiAKLSAg
ICB2b2lkIHJlcG9ydEFQSUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9u
Kik7CisgICAgdm9pZCByZXBvcnRBUElFeGNlcHRpb24oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RXhjZXB0aW9uKik7CiAKICAgICBKU0M6OkNvbnNvbGVDbGllbnQqIGNvbnNvbGVDbGllbnQo
KSBjb25zdDsKIAogICAgIGJvb2wgZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoSlNDOjpFeGVjU3Rh
dGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBjYW5BY2Nlc3NJ
bnNwZWN0ZWRTY3JpcHRTdGF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIEluc3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIgZnVuY3Rp
b25DYWxsSGFuZGxlcigpIGNvbnN0IG92ZXJyaWRlOwogICAgIEluc3BlY3RvckV2YWx1YXRlSGFu
ZGxlciBldmFsdWF0ZUhhbmRsZXIoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGZyb250ZW5k
SW5pdGlhbGl6ZWQoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgK
aW5kZXggOTJkNzVjOWJhNTRjNDI5OTQ0ZDFhMjc0YThkOGQ3MmViNGY4ZjgxNS4uMjMzZWY2ZmZi
NDZmYjIxMGU5OGEyZmYyNTNkYTg3NGEyMjY3NDUyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdFNjcmlwdERl
YnVnU2VydmVyLmgKQEAgLTQ3LDEyICs0NywxMiBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdFNjcmlw
dERlYnVnU2VydmVyIGZpbmFsIDogcHVibGljIFNjcmlwdERlYnVnU2VydmVyIHsKICAgICB2b2lk
IGRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGRp
ZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIHJ1
bkV2ZW50TG9vcFdoaWxlUGF1c2VkKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0NvbnRlbnRTY3Jp
cHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGJvb2wgaXNDb250ZW50U2NyaXB0KEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gTk9URTogQ3VycmVudGx5IGFsbCBleGNlcHRp
b25zIGFyZSByZXBvcnRlZCBhdCB0aGUgQVBJIGJvdW5kYXJ5IHRocm91Z2ggcmVwb3J0QVBJRXhj
ZXB0aW9uLgogICAgIC8vIFVudGlsIGEgdGltZSBjb21lcyB3aGVyZSBhbiBleGNlcHRpb24gY2Fu
IGJlIGNhdXNlZCBvdXRzaWRlIG9mIHRoZSBBUEkgKGUuZy4gc2V0VGltZW91dAogICAgIC8vIG9y
IHNvbWUgb3RoZXIgYXN5bmMgb3BlcmF0aW9uIGluIGEgcHVyZSBKU0NvbnRleHQpIHdlIGNhbiBp
Z25vcmUgZXhjZXB0aW9ucyByZXBvcnRlZCBoZXJlLgotICAgIHZvaWQgcmVwb3J0RXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBvdmVycmlkZSB7IH0KKyAg
ICB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGNlcHRp
b24qKSBjb25zdCBvdmVycmlkZSB7IH0KIAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIG1fZ2xv
YmFsT2JqZWN0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggNmQ3YjkyZDkwZTI4ZDczZjVlNThj
N2MxNTI2NzBjMWQyYWNiOTA1Yi4uMzQxMTU2OWUzNTQxYzc1NDljZjVmZTBlNGQwOGY4YTZmYzQ5
YjQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVj
dGVkU2NyaXB0SG9zdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0luamVjdGVkU2NyaXB0SG9zdC5jcHAKQEAgLTEwOSw2OSArMTA5LDY4IEBAIHZvaWQgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVj
dC0+SlNJbmplY3RlZFNjcmlwdEhvc3Q6On5KU0luamVjdGVkU2NyaXB0SG9zdCgpOwogfQogCi1K
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgcmV0dXJuIGdsb2JhbE9iamVj
dC0+ZXZhbEZ1bmN0aW9uKCk7CiB9CiAKLUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnNh
dmVkUmVzdWx0QWxpYXMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6c2F2ZWRSZXN1bHRBbGlhcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KSBjb25zdAogewogICAgIGF1dG8gc2F2ZWRSZXN1bHRBbGlhcyA9IGltcGwoKS5zYXZlZFJlc3Vs
dEFsaWFzKCk7CiAgICAgaWYgKCFzYXZlZFJlc3VsdEFsaWFzKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYy0+dm0oKSwgc2F2ZWRSZXN1bHRB
bGlhcy52YWx1ZSgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgpLCBz
YXZlZFJlc3VsdEFsaWFzLnZhbHVlKCkpOwogfQogCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIHNjcmlw
dFZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBzY3JpcHRWYWx1ZSA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFzY3JpcHRWYWx1ZS5pc1N0cmluZygpKQot
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJJbmplY3RlZFNjcmlw
dEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24gZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBh
IHN0cmluZy4iX3MpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIkluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbiBm
aXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLiJfcyk7CiAKLSAgICBTdHJpbmcgcHJvZ3Jh
bSA9IGFzU3RyaW5nKHNjcmlwdFZhbHVlKS0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIHByb2dy
YW0gPSBhc1N0cmluZyhzY3JpcHRWYWx1ZSktPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2Vw
dGlvbj4gZXhjZXB0aW9uOwotICAgIEpTT2JqZWN0KiBzY29wZUV4dGVuc2lvbiA9IGV4ZWMtPmFy
Z3VtZW50KDEpLmdldE9iamVjdCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0
ZVdpdGhTY29wZUV4dGVuc2lvbihleGVjLCBtYWtlU291cmNlKHByb2dyYW0sIGV4ZWMtPmNhbGxl
clNvdXJjZU9yaWdpbigpKSwgc2NvcGVFeHRlbnNpb24sIGV4Y2VwdGlvbik7CisgICAgSlNPYmpl
Y3QqIHNjb3BlRXh0ZW5zaW9uID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKS5nZXRPYmplY3QoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24oZ2xv
YmFsT2JqZWN0LCBtYWtlU291cmNlKHByb2dyYW0sIGNhbGxGcmFtZS0+Y2FsbGVyU291cmNlT3Jp
Z2luKCkpLCBzY29wZUV4dGVuc2lvbiwgZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKQot
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXhjZXB0aW9uKTsKKyAgICAgICAg
dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uKTsKIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmludGVybmFs
Q29uc3RydWN0b3JOYW1lKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6OmludGVybmFsQ29uc3RydWN0b3JOYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKQorICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBK
U09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9UaGlzKGdsb2JhbE9iamVjdCwgTm90U3Ry
aWN0TW9kZSkpOwogICAgIHJldHVybiBqc1N0cmluZyh2bSwgSlNPYmplY3Q6OmNhbGN1bGF0ZWRD
bGFzc05hbWUob2JqZWN0KSk7CiB9CiAKLUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omlz
SFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6aXNIVE1MQWxsQ29sbGVjdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
IDwgMSkKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNW
YWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKICAgICByZXR1cm4ganNCb29sZWFuKGltcGwoKS5pc0hUTUxBbGxDb2xs
ZWN0aW9uKHZtLCB2YWx1ZSkpOwogfQogCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpp
c1Byb21pc2VSZWplY3RlZFdpdGhOYXRpdmVHZXR0ZXJUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVj
KQorSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aXNQcm9taXNlUmVqZWN0ZWRXaXRoTmF0
aXZlR2V0dGVyVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIGF1dG8qIHByb21pc2UgPSBqc0R5bmFtaWNDYXN0PEpTUHJvbWlzZSo+KHZt
LCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byogcHJvbWlzZSA9IGpzRHluYW1pY0Nhc3Q8
SlNQcm9taXNlKj4odm0sIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIGlmICghcHJvbWlz
ZSB8fCBwcm9taXNlLT5zdGF0dXModm0pICE9IEpTUHJvbWlzZTo6U3RhdHVzOjpSZWplY3RlZCkK
LSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiSW5qZWN0ZWRTY3Jp
cHRIb3N0LmlzUHJvbWlzZVJlamVjdGVkV2l0aE5hdGl2ZUdldHRlclR5cGVFcnJvciBmaXJzdCBh
cmd1bWVudCBtdXN0IGJlIGEgcmVqZWN0ZWQgUHJvbWlzZS4iX3MpOworICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkluamVjdGVkU2NyaXB0SG9zdC5p
c1Byb21pc2VSZWplY3RlZFdpdGhOYXRpdmVHZXR0ZXJUeXBlRXJyb3IgZmlyc3QgYXJndW1lbnQg
bXVzdCBiZSBhIHJlamVjdGVkIFByb21pc2UuIl9zKTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7CiAgICAgaWYgKGF1dG8qIGVycm9ySW5zdGFuY2UgPSBqc0R5bmFtaWNDYXN0PEVycm9ySW5z
dGFuY2UqPih2bSwgcHJvbWlzZS0+cmVzdWx0KHZtKSkpCkBAIC0xNzksMTMgKzE3OCwxMyBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojppc1Byb21pc2VSZWplY3RlZFdpdGhOYXRpdmVH
ZXR0ZXJUeXBlRXJyb3IoRXhlY1N0YQogICAgIHJldHVybiBqc0Jvb2xlYW4ocmVzdWx0KTsKIH0K
IAotSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6c3VidHlwZShFeGVjU3RhdGUqIGV4ZWMp
CitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzdWJ0eXBlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKQogICAg
ICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpOwogICAgIGlmICh2YWx1
ZS5pc0Jvb2xlYW4oKSkKQEAgLTI0NSwxNiArMjQ0LDE2IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNj
cmlwdEhvc3Q6OnN1YnR5cGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyh2bSwgImFycmF5Il9zKTsKICAgICB9CiAKLSAgICByZXR1cm4gaW1w
bCgpLnN1YnR5cGUoZXhlYywgdmFsdWUpOworICAgIHJldHVybiBpbXBsKCkuc3VidHlwZShnbG9i
YWxPYmplY3QsIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZnVu
Y3Rpb25EZXRhaWxzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhv
c3Q6OmZ1bmN0aW9uRGV0YWlscyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAg
ICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNWYWx1ZSB2YWx1
ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKICAgICBhdXRvKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZt
LCB2YWx1ZSk7CiAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CkBAIC0yNzYsMTIgKzI3NSwxMiBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpm
dW5jdGlvbkRldGFpbHMoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBjb2x1bW5OdW1iZXIgLT0g
MTsKIAogICAgIFN0cmluZyBzY3JpcHRJRCA9IFN0cmluZzo6bnVtYmVyKHNvdXJjZUNvZGUtPnBy
b3ZpZGVyKCktPmFzSUQoKSk7Ci0gICAgSlNPYmplY3QqIGxvY2F0aW9uID0gY29uc3RydWN0RW1w
dHlPYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGxvY2F0aW9uID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBsb2NhdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAic2NyaXB0SWQiKSwganNTdHJpbmcodm0sIHNjcmlwdElEKSk7
CiAgICAgbG9jYXRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImxpbmVOdW1iZXIiKSwganNOdW1iZXIobGluZU51bWJlcikpOwogICAgIGxvY2F0aW9uLT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjb2x1bW5OdW1iZXIiKSwganNO
dW1iZXIoY29sdW1uTnVtYmVyKSk7CiAKLSAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJsb2NhdGlvbiIpLCBsb2NhdGlvbik7CiAKICAgICBTdHJpbmcg
bmFtZSA9IGZ1bmN0aW9uLT5uYW1lKHZtKTsKQEAgLTI5NSw0OCArMjk0LDQ4IEBAIEpTVmFsdWUg
SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmZ1bmN0aW9uRGV0YWlscyhFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RJbnRlcm5h
bFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1ZhbHVlIHZh
bHVlKQorc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVj
dCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJuYW1lIiksIGpzU3RyaW5nKHZtLCBuYW1lKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSIpLCB2YWx1ZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6
OmdldEludGVybmFsUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkK
KyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAKLSAg
ICBKU1ZhbHVlIGludGVybmFsUHJvcGVydGllcyA9IGltcGwoKS5nZXRJbnRlcm5hbFByb3BlcnRp
ZXModm0sIGV4ZWMsIHZhbHVlKTsKKyAgICBKU1ZhbHVlIGludGVybmFsUHJvcGVydGllcyA9IGlt
cGwoKS5nZXRJbnRlcm5hbFByb3BlcnRpZXModm0sIGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IGlmIChpbnRlcm5hbFByb3BlcnRpZXMpCiAgICAgICAgIHJldHVybiBpbnRlcm5hbFByb3BlcnRp
ZXM7CiAKICAgICBpZiAoSlNQcm9taXNlKiBwcm9taXNlID0ganNEeW5hbWljQ2FzdDxKU1Byb21p
c2UqPih2bSwgdmFsdWUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAg
SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAg
ICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBu
dWxscHRyKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
ICAgICAgICAgc3dpdGNoIChwcm9taXNlLT5zdGF0dXModm0pKSB7CiAgICAgICAgIGNhc2UgSlNQ
cm9taXNlOjpTdGF0dXM6OlBlbmRpbmc6CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0
SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAic3RhdHVzIl9zLCBqc05vbnRyaXZpYWxTdHJpbmcodm0s
ICJwZW5kaW5nIl9zKSkpOworICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2Jh
bE9iamVjdCwgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShnbG9iYWxPYmplY3Qs
ICJzdGF0dXMiX3MsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgInBlbmRpbmciX3MpKSk7CiAgICAg
ICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0dXM6OkZ1
bGZpbGxlZDoKLSAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsr
LCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzdGF0dXMiX3MsIGpzTm9udHJpdmlh
bFN0cmluZyh2bSwgInJlc29sdmVkIl9zKSkpOworICAgICAgICAgICAgYXJyYXktPnB1dERpcmVj
dEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShn
bG9iYWxPYmplY3QsICJzdGF0dXMiX3MsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgInJlc29sdmVk
Il9zKSkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgp
KTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGFycmF5LT5wdXRE
aXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMs
ICJyZXN1bHQiX3MsIHByb21pc2UtPnJlc3VsdCh2bSkpKTsKKyAgICAgICAgICAgIGFycmF5LT5w
dXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZ2xvYmFsT2JqZWN0LCAicmVzdWx0Il9zLCBwcm9taXNlLT5yZXN1bHQodm0pKSk7CiAg
ICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0dXM6
OlJlamVjdGVkOgotICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4
KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInN0YXR1cyJfcywganNOb250cml2
aWFsU3RyaW5nKHZtLCAicmVqZWN0ZWQiX3MpKSk7CisgICAgICAgICAgICBhcnJheS0+cHV0RGly
ZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KGdsb2JhbE9iamVjdCwgInN0YXR1cyJfcywganNOb250cml2aWFsU3RyaW5nKHZtLCAicmVqZWN0
ZWQiX3MpKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhl
YywgInJlc3VsdCJfcywgcHJvbWlzZS0+cmVzdWx0KHZtKSkpOworICAgICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQ
cm9wZXJ0eShnbG9iYWxPYmplY3QsICJyZXN1bHQiX3MsIHByb21pc2UtPnJlc3VsdCh2bSkpKTsK
ICAgICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTog
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0MTY2ND4gV2ViIEluc3BlY3RvcjogRVM2OiBJbXByb3Zl
ZCBTdXBwb3J0IGZvciBQcm9taXNlcyAtIFByb21pc2UgUmVhY3Rpb25zCkBAIC0zNDUsMTUgKzM0
NCwxNSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hbFByb3BlcnRp
ZXMoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgaWYgKEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5j
dGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4odm0sIHZhbHVlKSkgewogICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7Ci0gICAgICAgIGFycmF5LT5wdXREaXJl
Y3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJ0
YXJnZXRGdW5jdGlvbiIsIGJvdW5kRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCkpKTsKKyAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgrKywgY29uc3RydWN0
SW50ZXJuYWxQcm9wZXJ0eShnbG9iYWxPYmplY3QsICJ0YXJnZXRGdW5jdGlvbiIsIGJvdW5kRnVu
Y3Rpb24tPnRhcmdldEZ1bmN0aW9uKCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZSgpKTsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGlu
ZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgImJvdW5kVGhpcyIsIGJvdW5k
RnVuY3Rpb24tPmJvdW5kVGhpcygpKSk7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChn
bG9iYWxPYmplY3QsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCAiYm91bmRUaGlzIiwgYm91bmRGdW5jdGlvbi0+Ym91bmRUaGlzKCkpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKGJvdW5k
RnVuY3Rpb24tPmJvdW5kQXJncygpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0
SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAiYm91bmRBcmdzIiwgYm91bmRGdW5jdGlvbi0+Ym91bmRB
cmdzQ29weShleGVjKSkpOworICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2Jh
bE9iamVjdCwgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShnbG9iYWxPYmplY3Qs
ICJib3VuZEFyZ3MiLCBib3VuZEZ1bmN0aW9uLT5ib3VuZEFyZ3NDb3B5KGdsb2JhbE9iamVjdCkp
KTsKICAgICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
YXJyYXk7CkBAIC0zNjEsMTIgKzM2MCwxMiBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0
OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgaWYgKFByb3h5
T2JqZWN0KiBwcm94eSA9IGpzRHluYW1pY0Nhc3Q8UHJveHlPYmplY3QqPih2bSwgdmFsdWUpKSB7
CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOworICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyLCAyKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKLSAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkoZXhlYywgInRhcmdldCJfcywgcHJveHktPnRhcmdldCgpKSk7CisgICAgICAgIGFycmF5LT5w
dXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZ2xvYmFsT2JqZWN0LCAidGFyZ2V0Il9zLCBwcm94eS0+dGFyZ2V0KCkpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOwotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywg
Y29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAiaGFuZGxlciJfcywgcHJveHktPmhhbmRs
ZXIoKSkpOworICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGdsb2JhbE9iamVjdCwgImhhbmRsZXIiX3Ms
IHByb3h5LT5oYW5kbGVyKCkpKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIApAQCAt
Mzc2LDEyICszNzUsMTIgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIEpTVmFsdWUga2luZCA9
IGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLmFycmF5SXRlcmF0b3JLaW5kUHJpdmF0ZU5hbWUoKSk7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKKyAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5
ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIsIDIpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKLSAgICAgICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFBy
b3BlcnR5KGV4ZWMsICJhcnJheSIsIGl0ZXJhdGVkVmFsdWUpKTsKKyAgICAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFs
UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCAiYXJyYXkiLCBpdGVyYXRlZFZhbHVlKSk7CiAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgImtpbmQiLCBraW5kKSk7
CisgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsr
LCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGdsb2JhbE9iamVjdCwgImtpbmQiLCBraW5kKSk7
CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgIH0KIApAQCAtNDAwLDEyICszOTks
MTIgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVz
KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAgICAgIEpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKKyAgICAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxw
dHIsIDIpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgp
KTsKLSAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25z
dHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJtYXAiLCBpdGVyYXRlZFZhbHVlKSk7CisgICAg
ICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCBjb25z
dHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGdsb2JhbE9iamVjdCwgIm1hcCIsIGl0ZXJhdGVkVmFsdWUp
KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAg
ICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2lu
ZCIsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwga2luZCkpKTsKKyAgICAgICAgICAgIGFycmF5LT5w
dXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZ2xvYmFsT2JqZWN0LCAia2luZCIsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwga2luZCkp
KTsKICAgICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfQogCkBAIC00MjQsMzUgKzQy
MywzNCBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hbFByb3BlcnRp
ZXMoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgICAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOworICAgICAgICAg
ICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVs
bHB0ciwgMik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwotICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNv
bnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInNldCIsIGl0ZXJhdGVkVmFsdWUpKTsKKyAg
ICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4KyssIGNv
bnN0cnVjdEludGVybmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCAic2V0IiwgaXRlcmF0ZWRWYWx1
ZSkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsK
ICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGFycmF5LT5wdXREaXJl
Y3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJr
aW5kIiwganNOb250cml2aWFsU3RyaW5nKHZtLCBraW5kKSkpOworICAgICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQ
cm9wZXJ0eShnbG9iYWxPYmplY3QsICJraW5kIiwganNOb250cml2aWFsU3RyaW5nKHZtLCBraW5k
KSkpOwogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKEpTU3RyaW5nSXRlcmF0b3IqIHN0cmluZ0l0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU1N0
cmluZ0l0ZXJhdG9yKj4odm0sIHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7
Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxs
cHRyLCAxKTsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGds
b2JhbE9iamVjdCwgbnVsbHB0ciwgMSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTVmFsdWUoKSk7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHko
ZXhlYywgInN0cmluZyIsIHN0cmluZ0l0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKGV4ZWMpKSk7Cisg
ICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4KyssIGNvbnN0
cnVjdEludGVybmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCAic3RyaW5nIiwgc3RyaW5nSXRlcmF0
b3ItPml0ZXJhdGVkVmFsdWUoZ2xvYmFsT2JqZWN0KSkpOwogICAgICAgICByZXR1cm4gYXJyYXk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OnByb3h5VGFyZ2V0VmFsdWUoRXhlY1N0YXRlICpleGVjKQorSlNWYWx1
ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6cHJveHlUYXJnZXRWYWx1ZShWTSYgdm0sIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAg
IGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU1ZhbHVlIHZhbHVl
ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0ganNE
eW5hbWljQ2FzdDxQcm94eU9iamVjdCo+KHZtLCB2YWx1ZSk7CiAgICAgaWYgKCFwcm94eSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00NjQsMTMgKzQ2MiwxMyBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpwcm94eVRhcmdldFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYykK
ICAgICByZXR1cm4gdGFyZ2V0OwogfQogCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3
ZWFrTWFwU2l6ZShFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0
Ojp3ZWFrTWFwU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICBpZiAo
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsK
ICAgICBKU1dlYWtNYXAqIHdlYWtNYXAgPSBqc0R5bmFtaWNDYXN0PEpTV2Vha01hcCo+KHZtLCB2
YWx1ZSk7CiAgICAgaWYgKCF3ZWFrTWFwKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
QEAgLTQ3OCw0MyArNDc2LDQzIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtN
YXBTaXplKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4ganNOdW1iZXIod2Vha01hcC0+c2l6
ZSgpKTsKIH0KIAotSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcEVudHJpZXMo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha01hcEVu
dHJpZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgaWYgKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byog
d2Vha01hcCA9IGpzRHluYW1pY0Nhc3Q8SlNXZWFrTWFwKj4odm0sIGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICBhdXRvKiB3ZWFrTWFwID0ganNEeW5hbWljQ2FzdDxKU1dlYWtNYXAq
Pih2bSwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCF3ZWFrTWFw
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGJ1ZmZlcjsKLSAgICBhdXRvIGZldGNoQ291bnQgPSBleGVjLT5hcmd1bWVudCgxKS50b0lu
dGVnZXIoZXhlYyk7CisgICAgYXV0byBmZXRjaENvdW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgx
KS50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KTsKICAgICB3ZWFrTWFwLT50YWtlU25hcHNob3QoYnVm
ZmVyLCBmZXRjaENvdW50ID49IDAgPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hDb3VudCkg
OiAwKTsKICAgICBBU1NFUlQoIWJ1ZmZlci5oYXNPdmVyZmxvd2VkKCkpOwogCi0gICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAgIEpTQXJy
YXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBidWZmZXIuc2l6ZSgpOyBpbmRleCArPSAyKSB7Ci0g
ICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAg
ICAgICBKU09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3Qp
OwogICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAia2V5IiksIGJ1ZmZlci5hdChpbmRleCkpOwogICAgICAgICBlbnRyeS0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidmFsdWUiKSwgYnVmZmVyLmF0KGluZGV4ICsg
MSkpOwotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXggLyAyLCBlbnRy
eSk7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4IC8g
MiwgZW50cnkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkp
OwogICAgIH0KIAogICAgIHJldHVybiBhcnJheTsKIH0KIAotSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6d2Vha1NldFNpemUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6d2Vha1NldFNpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
CisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTVmFsdWUg
dmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CiAgICAgSlNXZWFrU2V0KiB3ZWFrU2V0ID0ganNEeW5hbWljQ2FzdDxKU1dlYWtT
ZXQqPih2bSwgdmFsdWUpOwogICAgIGlmICghd2Vha1NldCkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CkBAIC01MjIsMzkgKzUyMCwzOSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0Ojp3ZWFrU2V0U2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGpzTnVtYmVyKHdl
YWtTZXQtPnNpemUoKSk7CiB9CiAKLUpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtT
ZXRFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6
OndlYWtTZXRFbnRyaWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgIGlm
IChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIGF1dG8qIHdlYWtTZXQgPSBqc0R5bmFtaWNDYXN0PEpTV2Vha1NldCo+KHZtLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byogd2Vha1NldCA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWFrU2V0Kj4odm0sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlm
ICghd2Vha1NldCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBidWZmZXI7Ci0gICAgYXV0byBmZXRjaENvdW50ID0gZXhlYy0+YXJndW1l
bnQoMSkudG9JbnRlZ2VyKGV4ZWMpOworICAgIGF1dG8gZmV0Y2hDb3VudCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMSkudG9JbnRlZ2VyKGdsb2JhbE9iamVjdCk7CiAgICAgd2Vha1NldC0+dGFrZVNu
YXBzaG90KGJ1ZmZlciwgZmV0Y2hDb3VudCA+PSAwID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZl
dGNoQ291bnQpIDogMCk7CiAgICAgQVNTRVJUKCFidWZmZXIuaGFzT3ZlcmZsb3dlZCgpKTsKIAot
ICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsK
KyAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBu
dWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgYnVmZmVyLnNpemUoKTsgKytpbmRl
eCkgewotICAgICAgICBKU09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
KTsKKyAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KTsKICAgICAgICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInZhbHVlIiksIGJ1ZmZlci5hdChpbmRleCkpOwotICAgICAgICBhcnJheS0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGVudHJ5KTsKKyAgICAgICAgYXJyYXktPnB1dERpcmVj
dEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgsIGVudHJ5KTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9CiAKICAgICByZXR1cm4gYXJyYXk7CiB9
CiAKLXN0YXRpYyBKU09iamVjdCogY2xvbmVBcnJheUl0ZXJhdG9yT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgVk0mIHZtLCBKU09iamVjdCogaXRlcmF0b3JPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgbmV4dEluZGV4LCBKU1ZhbHVlIGl0ZXJhdGVkT2JqZWN0KQor
c3RhdGljIEpTT2JqZWN0KiBjbG9uZUFycmF5SXRlcmF0b3JPYmplY3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBKU09iamVjdCogaXRlcmF0b3JPYmplY3QsIEpTVmFsdWUg
bmV4dEluZGV4LCBKU1ZhbHVlIGl0ZXJhdGVkT2JqZWN0KQogewogICAgIEFTU0VSVChpdGVyYXRv
ck9iamVjdC0+dHlwZSgpID09IEZpbmFsT2JqZWN0VHlwZSk7Ci0gICAgSlNPYmplY3QqIGNsb25l
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIEFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPml0ZXJhdG9yUHJvdG90eXBlKCkp
KSk7CisgICAgSlNPYmplY3QqIGNsb25lID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgQXJy
YXlJdGVyYXRvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+aXRlcmF0b3JQcm90b3R5cGUoKSkpKTsKICAgICBjbG9uZS0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pdGVyYXRlZE9iamVjdFByaXZh
dGVOYW1lKCksIGl0ZXJhdGVkT2JqZWN0KTsKICAgICBjbG9uZS0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5hcnJheUl0ZXJhdG9yS2luZFByaXZhdGVOYW1l
KCksIGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmFycmF5SXRlcmF0b3JLaW5kUHJpdmF0ZU5hbWUoKSkpOwogICAgIGNsb25lLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFycmF5SXRlcmF0
b3JOZXh0SW5kZXhQcml2YXRlTmFtZSgpLCBuZXh0SW5kZXgpOwpAQCAtNTYzLDQwICs1NjEsMzkg
QEAgc3RhdGljIEpTT2JqZWN0KiBjbG9uZUFycmF5SXRlcmF0b3JPYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBWTSYgdm0sIEpTT2JqZWN0KiBpdGUKICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXN0YXRp
YyBKU09iamVjdCogY2xvbmVNYXBJdGVyYXRvck9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2
bSwgSlNPYmplY3QqIGl0ZXJhdG9yT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIG1hcEJ1Y2tldCwgSlNWYWx1ZSBpdGVyYXRlZE9iamVjdCkKK3N0YXRpYyBKU09i
amVjdCogY2xvbmVNYXBJdGVyYXRvck9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBWTSYgdm0sIEpTT2JqZWN0KiBpdGVyYXRvck9iamVjdCwgSlNWYWx1ZSBtYXBCdWNrZXQsIEpT
VmFsdWUgaXRlcmF0ZWRPYmplY3QpCiB7CiAgICAgQVNTRVJUKGl0ZXJhdG9yT2JqZWN0LT50eXBl
KCkgPT0gRmluYWxPYmplY3RUeXBlKTsKLSAgICBKU09iamVjdCogY2xvbmUgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChleGVjLCBNYXBJdGVyYXRvclByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5pdGVyYXRvclByb3RvdHlwZSgpKSkpOworICAgIEpTT2JqZWN0
KiBjbG9uZSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgTWFwSXRlcmF0b3JQ
cm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBNYXBJdGVyYXRvclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+aXRlcmF0b3JQ
cm90b3R5cGUoKSkpKTsKICAgICBjbG9uZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5pdGVyYXRlZE9iamVjdFByaXZhdGVOYW1lKCksIGl0ZXJhdGVkT2Jq
ZWN0KTsKICAgICBjbG9uZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5tYXBJdGVyYXRvcktpbmRQcml2YXRlTmFtZSgpLCBpdGVyYXRvck9iamVjdC0+Z2V0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5tYXBJdGVyYXRvcktp
bmRQcml2YXRlTmFtZSgpKSk7CiAgICAgY2xvbmUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUoKSwgbWFwQnVja2V0KTsK
ICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLXN0YXRpYyBKU09iamVjdCogY2xvbmVTZXRJdGVyYXRv
ck9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNPYmplY3QqIGl0ZXJhdG9yT2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHNldEJ1Y2tldCwgSlNWYWx1
ZSBpdGVyYXRlZE9iamVjdCkKK3N0YXRpYyBKU09iamVjdCogY2xvbmVTZXRJdGVyYXRvck9iamVj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTT2JqZWN0KiBpdGVyYXRv
ck9iamVjdCwgSlNWYWx1ZSBzZXRCdWNrZXQsIEpTVmFsdWUgaXRlcmF0ZWRPYmplY3QpCiB7CiAg
ICAgQVNTRVJUKGl0ZXJhdG9yT2JqZWN0LT50eXBlKCkgPT0gRmluYWxPYmplY3RUeXBlKTsKLSAg
ICBKU09iamVjdCogY2xvbmUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBTZXRJdGVyYXRv
clByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIFNldEl0ZXJhdG9yUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5pdGVyYXRv
clByb3RvdHlwZSgpKSkpOworICAgIEpTT2JqZWN0KiBjbG9uZSA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGdsb2JhbE9iamVjdCwgU2V0SXRlcmF0b3JQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBTZXRJdGVyYXRvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+aXRlcmF0b3JQcm90b3R5cGUoKSkpKTsKICAgICBjbG9uZS0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pdGVyYXRlZE9i
amVjdFByaXZhdGVOYW1lKCksIGl0ZXJhdGVkT2JqZWN0KTsKICAgICBjbG9uZS0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zZXRJdGVyYXRvcktpbmRQcml2
YXRlTmFtZSgpLCBpdGVyYXRvck9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5zZXRJdGVyYXRvcktpbmRQcml2YXRlTmFtZSgpKSk7CiAgICAgY2xv
bmUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0QnVj
a2V0UHJpdmF0ZU5hbWUoKSwgc2V0QnVja2V0KTsKICAgICByZXR1cm4gY2xvbmU7CiB9CiAKLUpT
VmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW50cmllcyhFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVudHJpZXMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGl0ZXJhdG9y
OwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwog
ICAgIGlmIChKU1N0cmluZ0l0ZXJhdG9yKiBzdHJpbmdJdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8
SlNTdHJpbmdJdGVyYXRvcio+KHZtLCB2YWx1ZSkpIHsKICAgICAgICAgaWYgKGdsb2JhbE9iamVj
dC0+aXNTdHJpbmdQcm90b3R5cGVJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUo
KSkKLSAgICAgICAgICAgIGl0ZXJhdG9yID0gc3RyaW5nSXRlcmF0b3ItPmNsb25lKGV4ZWMpOwor
ICAgICAgICAgICAgaXRlcmF0b3IgPSBzdHJpbmdJdGVyYXRvci0+Y2xvbmUoZ2xvYmFsT2JqZWN0
KTsKICAgICB9IGVsc2UgaWYgKEpTT2JqZWN0KiBpdGVyYXRvck9iamVjdCA9IGpzRHluYW1pY0Nh
c3Q8SlNPYmplY3QqPih2bSwgdmFsdWUpKSB7CiAgICAgICAgIC8vIERldGVjdCBhbiBBcnJheUl0
ZXJhdG9yIGJ5IGNoZWNraW5nIGZvciBvbmUgb2YgaXRzIHVuaXF1ZSBwcml2YXRlIHByb3BlcnRp
ZXMuCiAgICAgICAgIEpTVmFsdWUgaXRlcmF0ZWRPYmplY3QgPSBpdGVyYXRvck9iamVjdC0+Z2V0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pdGVyYXRlZE9iamVj
dFByaXZhdGVOYW1lKCkpOwpAQCAtNjA0LDQ5ICs2MDEsNDkgQEAgSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6aXRlcmF0b3JFbnRyaWVzKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAg
IGlmIChpc0pTQXJyYXkoaXRlcmF0ZWRPYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGl0ZXJhdGVkT2JqZWN0KTsKICAgICAgICAgICAg
ICAgICBpZiAoYXJyYXktPmlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yID0gY2xvbmVBcnJheUl0ZXJhdG9yT2JqZWN0
KGV4ZWMsIHZtLCBpdGVyYXRvck9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuZXh0SW5kZXgsIGl0ZXJh
dGVkT2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBjbG9uZUFycmF5SXRl
cmF0b3JPYmplY3QoZ2xvYmFsT2JqZWN0LCB2bSwgaXRlcmF0b3JPYmplY3QsIG5leHRJbmRleCwg
aXRlcmF0ZWRPYmplY3QpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZE9iamVjdC5p
c09iamVjdCgpICYmIFR5cGVJbmZvOjppc0FyZ3VtZW50c1R5cGUoYXNPYmplY3QoaXRlcmF0ZWRP
YmplY3QpLT50eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+aXNB
cnJheVByb3RvdHlwZUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAg
ICAgICAgICAgICAgICAgICBpdGVyYXRvciA9IGNsb25lQXJyYXlJdGVyYXRvck9iamVjdChleGVj
LCB2bSwgaXRlcmF0b3JPYmplY3QsIGdsb2JhbE9iamVjdCwgbmV4dEluZGV4LCBpdGVyYXRlZE9i
amVjdCk7CisgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yID0gY2xvbmVBcnJheUl0ZXJhdG9y
T2JqZWN0KGdsb2JhbE9iamVjdCwgdm0sIGl0ZXJhdG9yT2JqZWN0LCBuZXh0SW5kZXgsIGl0ZXJh
dGVkT2JqZWN0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlIG1h
cEJ1Y2tldCA9IGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLm1hcEJ1Y2tldFByaXZhdGVOYW1lKCkpKSB7CiAgICAgICAgICAgICBp
ZiAoanNDYXN0PEpTTWFwKj4oaXRlcmF0ZWRPYmplY3QpLT5pc0l0ZXJhdG9yUHJvdG9jb2xGYXN0
QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIGl0ZXJhdG9yID0gY2xvbmVNYXBJ
dGVyYXRvck9iamVjdChleGVjLCB2bSwgaXRlcmF0b3JPYmplY3QsIGdsb2JhbE9iamVjdCwgbWFw
QnVja2V0LCBpdGVyYXRlZE9iamVjdCk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBjbG9u
ZU1hcEl0ZXJhdG9yT2JqZWN0KGdsb2JhbE9iamVjdCwgdm0sIGl0ZXJhdG9yT2JqZWN0LCBtYXBC
dWNrZXQsIGl0ZXJhdGVkT2JqZWN0KTsKICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlIHNldEJ1
Y2tldCA9IGl0ZXJhdG9yT2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1
aWx0aW5OYW1lcygpLnNldEJ1Y2tldFByaXZhdGVOYW1lKCkpKSB7CiAgICAgICAgICAgICBpZiAo
anNDYXN0PEpTU2V0Kj4oaXRlcmF0ZWRPYmplY3QpLT5pc0l0ZXJhdG9yUHJvdG9jb2xGYXN0QW5k
Tm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIGl0ZXJhdG9yID0gY2xvbmVTZXRJdGVy
YXRvck9iamVjdChleGVjLCB2bSwgaXRlcmF0b3JPYmplY3QsIGdsb2JhbE9iamVjdCwgc2V0QnVj
a2V0LCBpdGVyYXRlZE9iamVjdCk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBjbG9uZVNl
dEl0ZXJhdG9yT2JqZWN0KGdsb2JhbE9iamVjdCwgdm0sIGl0ZXJhdG9yT2JqZWN0LCBzZXRCdWNr
ZXQsIGl0ZXJhdGVkT2JqZWN0KTsKICAgICAgICAgfQogICAgIH0KICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgSXRlcmF0aW9uUmVjb3JkIGl0ZXJhdGlvblJlY29yZCA9IHsg
aXRlcmF0b3IsIGl0ZXJhdG9yLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0KSB9Owor
ICAgIEl0ZXJhdGlvblJlY29yZCBpdGVyYXRpb25SZWNvcmQgPSB7IGl0ZXJhdG9yLCBpdGVyYXRv
ci5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0KSB9OwogCiAgICAgdW5z
aWduZWQgbnVtYmVyVG9GZXRjaCA9IDU7Ci0gICAgSlNWYWx1ZSBudW1iZXJUb0ZldGNoQXJnID0g
ZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZG91YmxlIGZldGNoRG91YmxlID0gbnVtYmVyVG9GZXRj
aEFyZy50b0ludGVnZXIoZXhlYyk7CisgICAgSlNWYWx1ZSBudW1iZXJUb0ZldGNoQXJnID0gY2Fs
bEZyYW1lLT5hcmd1bWVudCgxKTsKKyAgICBkb3VibGUgZmV0Y2hEb3VibGUgPSBudW1iZXJUb0Zl
dGNoQXJnLnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgaWYgKGZldGNoRG91YmxlID49IDApCiAgICAgICAgIG51bWJlclRv
RmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCi0gICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAgIEpTQXJy
YXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgbmV4dCA9
IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRpb25SZWNvcmQpOworICAgICAgICBKU1ZhbHVlIG5l
eHQgPSBpdGVyYXRvclN0ZXAoZ2xvYmFsT2JqZWN0LCBpdGVyYXRpb25SZWNvcmQpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8IG5leHQuaXNGYWxzZSgpKQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZh
bHVlKGV4ZWMsIG5leHQpOworICAgICAgICBKU1ZhbHVlIG5leHRWYWx1ZSA9IGl0ZXJhdG9yVmFs
dWUoZ2xvYmFsT2JqZWN0LCBuZXh0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAotICAgICAgICBKU09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjKTsKKyAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
Z2xvYmFsT2JqZWN0KTsKICAgICAgICAgZW50cnktPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInZhbHVlIiksIG5leHRWYWx1ZSk7Ci0gICAgICAgIGFycmF5LT5wdXRE
aXJlY3RJbmRleChleGVjLCBpLCBlbnRyeSk7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChnbG9iYWxPYmplY3QsIGksIGVudHJ5KTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAg
aXRlcmF0b3JDbG9zZShleGVjLCBpdGVyYXRpb25SZWNvcmQpOworICAgICAgICAgICAgaXRlcmF0
b3JDbG9zZShnbG9iYWxPYmplY3QsIGl0ZXJhdGlvblJlY29yZCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KQEAgLTY1NCwzOCArNjUxLDM4IEBAIEpTVmFsdWUgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW50cmllcyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0
dXJuIGFycmF5OwogfQogCi1zdGF0aWMgYm9vbCBjaGVja0ZvcmJpZGRlblByb3RvdHlwZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG8pCitzdGF0aWMgYm9vbCBj
aGVja0ZvcmJpZGRlblByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBKU1ZhbHVlIHByb3RvKQogewogICAgIGlmICh2YWx1ZSA9PSBwcm90bykKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBDaGVjayB0aGF0IHRoZSBwcm90b3R5cGUgY2hh
aW4gb2YgcHJvdG8gaGFzbid0IGJlZW4gbW9kaWZpZWQgdG8gaW5jbHVkZSB2YWx1ZS4KLSAgICBy
ZXR1cm4gSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShleGVjLCBwcm90bywgdmFsdWUpOwor
ICAgIHJldHVybiBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKGdsb2JhbE9iamVjdCwgcHJv
dG8sIHZhbHVlKTsKIH0KIAotSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6cXVlcnlJbnN0
YW5jZXMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6cXVl
cnlJbnN0YW5jZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgaWYgKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBKU1ZhbHVlIHByb3RvdHlwZU9yQ29uc3RydWN0b3IgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZU9yQ29uc3RydWN0b3IgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGlmICghcHJvdG90eXBlT3JDb25zdHJ1Y3Rvci5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJxdWVy
eUluc3RhbmNlcyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4iX3MpOworICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInF1ZXJ5SW5zdGFu
Y2VzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiJfcyk7CiAKICAgICBKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBlT3JDb25zdHJ1Y3Rvcik7CiAgICAgaWYgKG9i
amVjdC0+aW5oZXJpdHM8UHJveHlPYmplY3Q+KHZtKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCAicXVlcnlJbnN0YW5jZXMgY2Fubm90IGJlIGNhbGxlZCB3aXRo
IGEgUHJveHkuIl9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJxdWVyeUluc3RhbmNlcyBjYW5ub3QgYmUgY2FsbGVkIHdpdGggYSBQcm94eS4i
X3MpOwogCiAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBvYmplY3Q7CiAKICAgICBQcm9wZXJ0eVNs
b3QgcHJvdG90eXBlU2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpWTUlucXVpcnkpOwotICAgIGlmIChvYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZVNsb3QpKSB7CisgICAgaWYgKG9iamVj
dC0+Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBwcm90b3R5cGVTbG90KSkgewogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICBpZiAocHJvdG90eXBlU2xvdC5pc1ZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBwcm90b3R5cGVTbG90LmdldFZhbHVlKGV4ZWMs
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CisgICAgICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZVZhbHVlID0gcHJvdG90eXBlU2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSk7CiAgICAgICAgICAgICBpZiAocHJvdG90eXBlVmFsdWUuaXNP
YmplY3QoKSkgewogICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IHByb3RvdHlwZVZhbHVlOwog
ICAgICAgICAgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CkBAIC02OTQsMjcg
KzY5MSwyNiBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpxdWVyeUluc3RhbmNlcyhF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgfQogCiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHM8UHJveHlP
YmplY3Q+KHZtKSB8fCBwcm90b3R5cGUuaW5oZXJpdHM8UHJveHlPYmplY3Q+KHZtKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAicXVlcnlJbnN0YW5jZXMgY2Fu
bm90IGJlIGNhbGxlZCB3aXRoIGEgUHJveHkuIl9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJxdWVyeUluc3RhbmNlcyBjYW5ub3QgYmUgY2Fs
bGVkIHdpdGggYSBQcm94eS4iX3MpOwogCiAgICAgLy8gRklYTUU6IGltcGxlbWVudCBhIHdheSBv
ZiBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIGludGVybmFsIGFuZCB1c2VyLWNyZWF0ZWQgb2JqZWN0
cy4KLSAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoY2hlY2tGb3JiaWRkZW5Qcm90b3R5cGUoZXhlYywg
b2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpCi0gICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgInF1ZXJ5SW5zdGFuY2VzIGNhbm5v
dCBiZSBjYWxsZWQgd2l0aCBPYmplY3QuIl9zKTsKLSAgICBpZiAoY2hlY2tGb3JiaWRkZW5Qcm90
b3R5cGUoZXhlYywgb2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5mdW5jdGlvblByb3RvdHlw
ZSgpKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAicXVlcnlJ
bnN0YW5jZXMgY2Fubm90IGJlIGNhbGxlZCB3aXRoIEZ1bmN0aW9uLiJfcyk7Ci0gICAgaWYgKGNo
ZWNrRm9yYmlkZGVuUHJvdG90eXBlKGV4ZWMsIG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdC0+
YXJyYXlQcm90b3R5cGUoKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgInF1ZXJ5SW5zdGFuY2VzIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBBcnJheS4iX3MpOwot
ICAgIGlmIChjaGVja0ZvcmJpZGRlblByb3RvdHlwZShleGVjLCBvYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QtPm1hcFByb3RvdHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCAicXVlcnlJbnN0YW5jZXMgY2Fubm90IGJlIGNhbGxlZCB3aXRoIE1hcC4i
X3MpOwotICAgIGlmIChjaGVja0ZvcmJpZGRlblByb3RvdHlwZShleGVjLCBvYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QtPmpzU2V0UHJvdG90eXBlKCkpKQotICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYywgc2NvcGUsICJxdWVyeUluc3RhbmNlcyBjYW5ub3QgYmUgY2FsbGVkIHdp
dGggU2V0LiJfcyk7Ci0gICAgaWYgKGNoZWNrRm9yYmlkZGVuUHJvdG90eXBlKGV4ZWMsIG9iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdC0+cHJvbWlzZVByb3RvdHlwZSgpKSkKLSAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAicXVlcnlJbnN0YW5jZXMgY2Fubm90IGJl
IGNhbGxlZCB3aXRoIFByb21pc2UuIl9zKTsKKyAgICBpZiAoY2hlY2tGb3JiaWRkZW5Qcm90b3R5
cGUoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkp
KQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInF1
ZXJ5SW5zdGFuY2VzIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBPYmplY3QuIl9zKTsKKyAgICBpZiAo
Y2hlY2tGb3JiaWRkZW5Qcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIGdsb2JhbE9iamVj
dC0+ZnVuY3Rpb25Qcm90b3R5cGUoKSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAicXVlcnlJbnN0YW5jZXMgY2Fubm90IGJlIGNhbGxlZCB3aXRo
IEZ1bmN0aW9uLiJfcyk7CisgICAgaWYgKGNoZWNrRm9yYmlkZGVuUHJvdG90eXBlKGdsb2JhbE9i
amVjdCwgb2JqZWN0LCBnbG9iYWxPYmplY3QtPmFycmF5UHJvdG90eXBlKCkpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInF1ZXJ5SW5zdGFuY2Vz
IGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBBcnJheS4iX3MpOworICAgIGlmIChjaGVja0ZvcmJpZGRl
blByb3RvdHlwZShnbG9iYWxPYmplY3QsIG9iamVjdCwgZ2xvYmFsT2JqZWN0LT5tYXBQcm90b3R5
cGUoKSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAicXVlcnlJbnN0YW5jZXMgY2Fubm90IGJlIGNhbGxlZCB3aXRoIE1hcC4iX3MpOworICAgIGlm
IChjaGVja0ZvcmJpZGRlblByb3RvdHlwZShnbG9iYWxPYmplY3QsIG9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5qc1NldFByb3RvdHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJxdWVyeUluc3RhbmNlcyBjYW5ub3QgYmUgY2FsbGVkIHdpdGgg
U2V0LiJfcyk7CisgICAgaWYgKGNoZWNrRm9yYmlkZGVuUHJvdG90eXBlKGdsb2JhbE9iamVjdCwg
b2JqZWN0LCBnbG9iYWxPYmplY3QtPnByb21pc2VQcm90b3R5cGUoKSkpCisgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAicXVlcnlJbnN0YW5jZXMgY2Fu
bm90IGJlIGNhbGxlZCB3aXRoIFByb21pc2UuIl9zKTsKIAogICAgIHNhbml0aXplU3RhY2tGb3JW
TSh2bSk7CiAgICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVs
bCk7CiAKLSAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVs
bHB0cik7CisgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9i
amVjdCwgbnVsbHB0cik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIHsKQEAgLTcyNyw4ICs3MjMsOCBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpx
dWVyeUluc3RhbmNlcyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICBpZiAodmFsdWUuaW5o
ZXJpdHM8UHJveHlPYmplY3Q+KHZtKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKEpTT2JqZWN0OjpkZWZhdWx0SGFz
SW5zdGFuY2UoZXhlYywgdmFsdWUsIHByb3RvdHlwZSkpCi0gICAgICAgICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGFycmF5LT5sZW5ndGgoKSwgdmFsdWUpOworICAgICAgICAg
ICAgaWYgKEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwg
cHJvdG90eXBlKSkKKyAgICAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFs
T2JqZWN0LCBhcnJheS0+bGVuZ3RoKCksIHZhbHVlKTsKIAogICAgICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwpAQCAtODcxLDE5ICs4NjcsMTkg
QEAgY2xhc3MgSGVhcEhvbGRlckZpbmRlciBmaW5hbCA6IHB1YmxpYyBIZWFwQW5hbHl6ZXIgewog
ICAgIGNvbnN0IEpTQ2VsbCogbV90YXJnZXQ7CiB9OwogCi1KU1ZhbHVlIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0OjpxdWVyeUhvbGRlcnMoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6cXVlcnlIb2xkZXJzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAx
KQorICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCi0gICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICBKU1ZhbHVlIHRhcmdldCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCAicXVlcnlIb2xkZXJzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4g
b2JqZWN0LiJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAicXVlcnlIb2xkZXJzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiJf
cyk7CiAKLSAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIpOworICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFs
T2JqZWN0LCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgewpAQCAtODk2LDcgKzg5Miw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6
OnF1ZXJ5SG9sZGVycyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGF1dG8gaG9sZGVycyA9IGNv
cHlUb1ZlY3Rvcihob2xkZXJGaW5kZXIuaG9sZGVycygpKTsKICAgICAgICAgc3RkOjpzb3J0KGhv
bGRlcnMuYmVnaW4oKSwgaG9sZGVycy5lbmQoKSk7CiAgICAgICAgIGZvciAoYXV0byogaG9sZGVy
IDogaG9sZGVycykKLSAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgcmVz
dWx0LT5sZW5ndGgoKSwgaG9sZGVyKTsKKyAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCByZXN1bHQtPmxlbmd0aCgpLCBob2xkZXIpOwogICAgIH0KIAogICAg
IHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmgKaW5kZXggZmJkY2U0YTJhOWRkYzdlZThiOWRhZTRl
MDBhYjc0OWY4N2VlNjZiZS4uY2RmYzVmMGNjMWRiMGM2MzhjZDUxYmE5NjFlMTMyNDk2YWFlNWEy
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVk
U2NyaXB0SG9zdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmpl
Y3RlZFNjcmlwdEhvc3QuaApAQCAtNTYsMjUgKzU2LDI1IEBAIGNsYXNzIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0IGZpbmFsIDogcHVibGljIEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QgewogICAgIElu
amVjdGVkU2NyaXB0SG9zdCYgaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBlZDsgfQogCiAg
ICAgLy8gQXR0cmlidXRlcy4KLSAgICBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoSlNDOjpFeGVjU3Rh
dGUqKSBjb25zdDsKLSAgICBKU0M6OkpTVmFsdWUgc2F2ZWRSZXN1bHRBbGlhcyhKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KikgY29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIHNhdmVkUmVzdWx0QWxpYXMoSlNDOjpKU0ds
b2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgLy8gRnVuY3Rpb25zLgotICAgIEpTQzo6SlNWYWx1
ZSBldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihKU0M6OkV4ZWNTdGF0ZSopOwotICAgIEpTQzo6
SlNWYWx1ZSBpbnRlcm5hbENvbnN0cnVjdG9yTmFtZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIEpT
Qzo6SlNWYWx1ZSBpc0hUTUxBbGxDb2xsZWN0aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgSlND
OjpKU1ZhbHVlIGlzUHJvbWlzZVJlamVjdGVkV2l0aE5hdGl2ZUdldHRlclR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSopOwotICAgIEpTQzo6SlNWYWx1ZSBzdWJ0eXBlKEpTQzo6RXhlY1N0YXRlKik7
Ci0gICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uRGV0YWlscyhKU0M6OkV4ZWNTdGF0ZSopOwotICAg
IEpTQzo6SlNWYWx1ZSBnZXRJbnRlcm5hbFByb3BlcnRpZXMoSlNDOjpFeGVjU3RhdGUqKTsKLSAg
ICBKU0M6OkpTVmFsdWUgcHJveHlUYXJnZXRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIEpT
Qzo6SlNWYWx1ZSB3ZWFrTWFwU2l6ZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIEpTQzo6SlNWYWx1
ZSB3ZWFrTWFwRW50cmllcyhKU0M6OkV4ZWNTdGF0ZSopOwotICAgIEpTQzo6SlNWYWx1ZSB3ZWFr
U2V0U2l6ZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIEpTQzo6SlNWYWx1ZSB3ZWFrU2V0RW50cmll
cyhKU0M6OkV4ZWNTdGF0ZSopOwotICAgIEpTQzo6SlNWYWx1ZSBpdGVyYXRvckVudHJpZXMoSlND
OjpFeGVjU3RhdGUqKTsKLSAgICBKU0M6OkpTVmFsdWUgcXVlcnlJbnN0YW5jZXMoSlNDOjpFeGVj
U3RhdGUqKTsKLSAgICBKU0M6OkpTVmFsdWUgcXVlcnlIb2xkZXJzKEpTQzo6RXhlY1N0YXRlKik7
CisgICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworICAgIEpTQzo6SlNWYWx1ZSBpbnRlcm5hbENv
bnN0cnVjdG9yTmFtZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKKyAg
ICBKU0M6OkpTVmFsdWUgaXNIVE1MQWxsQ29sbGVjdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpDYWxsRnJhbWUqKTsKKyAgICBKU0M6OkpTVmFsdWUgaXNQcm9taXNlUmVqZWN0ZWRXaXRo
TmF0aXZlR2V0dGVyVHlwZUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFt
ZSopOworICAgIEpTQzo6SlNWYWx1ZSBzdWJ0eXBlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkNhbGxGcmFtZSopOworICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbkRldGFpbHMoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisgICAgSlNDOjpKU1ZhbHVlIGdldEludGVy
bmFsUHJvcGVydGllcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKKyAg
ICBKU0M6OkpTVmFsdWUgcHJveHlUYXJnZXRWYWx1ZShKU0M6OlZNJiwgSlNDOjpDYWxsRnJhbWUq
KTsKKyAgICBKU0M6OkpTVmFsdWUgd2Vha01hcFNpemUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6Q2FsbEZyYW1lKik7CisgICAgSlNDOjpKU1ZhbHVlIHdlYWtNYXBFbnRyaWVzKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworICAgIEpTQzo6SlNWYWx1ZSB3ZWFrU2V0
U2l6ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKKyAgICBKU0M6OkpT
VmFsdWUgd2Vha1NldEVudHJpZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1l
Kik7CisgICAgSlNDOjpKU1ZhbHVlIGl0ZXJhdG9yRW50cmllcyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpDYWxsRnJhbWUqKTsKKyAgICBKU0M6OkpTVmFsdWUgcXVlcnlJbnN0YW5jZXMoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisgICAgSlNDOjpKU1ZhbHVlIHF1
ZXJ5SG9sZGVycyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKIAogcHJv
dGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdFByb3Rv
dHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0UHJvdG90eXBlLmNwcAppbmRleCA3Y2ZjZjg4NGUyYzE5OTEwMWJkOWNkY2QwYjAxNjky
YTY0Zjc3NzVhLi4yZDRjMGJjZjVhM2YzMjM4YTJjMjVkNmQ1OTU1OGYyMjJjZjM5YjFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmNwcApAQCAtOTIsOSArOTIsOSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlQXR0cmli
dXRlRXZhbHVhdGUoSlNHbAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlz
VmFsdWUoKTsKICAgICBKU0luamVjdGVkU2NyaXB0SG9zdCogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNJbmplY3RlZFNjcmlwdEhvc3QqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoIWNh
c3RlZFRoaXMpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+ZXZhbHVhdGUoY2Fs
bEZyYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5ldmFsdWF0
ZShnbG9iYWxPYmplY3QpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0lu
amVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUF0dHJpYnV0ZVNhdmVkUmVzdWx0QWxpYXMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xMDUsOSAr
MTA1LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9z
dFByb3RvdHlwZUF0dHJpYnV0ZVNhdmVkUmVzdWx0QWwKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNJbmplY3RlZFNjcmlwdEhvc3QqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTSW5qZWN0ZWRTY3JpcHRIb3N0Kj4odm0sIHRoaXNWYWx1
ZSk7CiAgICAgaWYgKCFjYXN0ZWRUaGlzKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRo
aXMtPnNhdmVkUmVzdWx0QWxpYXMoY2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjYXN0ZWRUaGlzLT5zYXZlZFJlc3VsdEFsaWFzKGdsb2JhbE9iamVjdCkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
RnVuY3Rpb25JbnRlcm5hbENvbnN0cnVjdG9yTmFtZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTExOCw5ICsxMTgsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25J
bnRlcm5hbENvbnN0cgogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFs
dWUoKTsKICAgICBKU0luamVjdGVkU2NyaXB0SG9zdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNJbmplY3RlZFNjcmlwdEhvc3QqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoIWNhc3Rl
ZFRoaXMpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUp
OworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
IAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aW50ZXJuYWxDb25zdHJ1
Y3Rvck5hbWUoY2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT5pbnRlcm5hbENvbnN0cnVjdG9yTmFtZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJv
dG90eXBlRnVuY3Rpb25Jc0hUTUxBbGxDb2xsZWN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTMxLDkgKzEzMSw5IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlv
bklzSFRNTEFsbENvbGxlCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpOwogICAgIEpTSW5qZWN0ZWRTY3JpcHRIb3N0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU0luamVjdGVkU2NyaXB0SG9zdCo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmICghY2Fz
dGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUp
OwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pc0hUTUxBbGxDb2xs
ZWN0aW9uKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhp
cy0+aXNIVE1MQWxsQ29sbGVjdGlvbihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBl
RnVuY3Rpb25Jc1Byb21pc2VSZWplY3RlZFdpdGhOYXRpdmVHZXR0ZXJUeXBlRXJyb3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xNDQsOSAr
MTQ0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0luamVjdGVkU2NyaXB0SG9z
dFByb3RvdHlwZUZ1bmN0aW9uSXNQcm9taXNlUmVqZWMKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNJbmplY3RlZFNjcmlwdEhvc3QqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTSW5qZWN0ZWRTY3JpcHRIb3N0Kj4odm0sIHRoaXNWYWx1
ZSk7CiAgICAgaWYgKCFjYXN0ZWRUaGlzKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRo
aXMtPmlzUHJvbWlzZVJlamVjdGVkV2l0aE5hdGl2ZUdldHRlclR5cGVFcnJvcihjYWxsRnJhbWUp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmlzUHJvbWlzZVJlamVj
dGVkV2l0aE5hdGl2ZUdldHRlclR5cGVFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJv
dG90eXBlRnVuY3Rpb25Qcm94eVRhcmdldFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTU3LDkgKzE1Nyw5IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblBy
b3h5VGFyZ2V0VmFsCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpOwogICAgIEpTSW5qZWN0ZWRTY3JpcHRIb3N0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU0luamVjdGVkU2NyaXB0SG9zdCo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmICghY2FzdGVk
VGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5wcm94eVRhcmdldFZhbHVl
KGNhbGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+cHJv
eHlUYXJnZXRWYWx1ZSh2bSwgY2FsbEZyYW1lKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtNYXBTaXpl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAt
MTcwLDkgKzE3MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNj
cmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtNYXBTaXplKEpTCiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEpTSW5qZWN0ZWRTY3JpcHRIb3N0
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU0luamVjdGVkU2NyaXB0SG9zdCo+KHZtLCB0
aGlzVmFsdWUpOwogICAgIGlmICghY2FzdGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YXN0ZWRUaGlzLT53ZWFrTWFwU2l6ZShjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPndlYWtNYXBTaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQ
cm90b3R5cGVGdW5jdGlvbldlYWtNYXBFbnRyaWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTgzLDkgKzE4Myw5IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldl
YWtNYXBFbnRyaWVzCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpOwogICAgIEpTSW5qZWN0ZWRTY3JpcHRIb3N0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU0luamVjdGVkU2NyaXB0SG9zdCo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmICghY2FzdGVk
VGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT53ZWFrTWFwRW50cmllcyhj
YWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPndlYWtN
YXBFbnRyaWVzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtT
ZXRTaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQpAQCAtMTk2LDkgKzE5Niw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmpl
Y3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtTZXRTaXplKEpTCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU0luamVjdGVkU2NyaXB0SG9zdCo+
KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmICghY2FzdGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjYXN0ZWRUaGlzLT53ZWFrU2V0U2l6ZShjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPndlYWtTZXRTaXplKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGVGdW5jdGlvbldlYWtTZXRFbnRyaWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjA5LDkgKzIwOSw5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5j
dGlvbldlYWtTZXRFbnRyaWVzCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpOwogICAgIEpTSW5qZWN0ZWRTY3JpcHRIb3N0KiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU0luamVjdGVkU2NyaXB0SG9zdCo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmICgh
Y2FzdGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT53ZWFrU2V0RW50
cmllcyhjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMt
PndlYWtTZXRFbnRyaWVzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlv
bkl0ZXJhdG9yRW50cmllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKQEAgLTIyMiw5ICsyMjIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25JdGVyYXRvckVudHJpZQog
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBKU0lu
amVjdGVkU2NyaXB0SG9zdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNJbmplY3RlZFNj
cmlwdEhvc3QqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoIWNhc3RlZFRoaXMpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aXRlcmF0b3JFbnRyaWVzKGNhbGxGcmFtZSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aXRlcmF0b3JFbnRyaWVzKGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvblF1ZXJ5SW5zdGFuY2VzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjM1
LDkgKzIzNSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGVGdW5jdGlvblF1ZXJ5SW5zdGFuY2VzCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEpTSW5qZWN0ZWRTY3JpcHRIb3N0KiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU0luamVjdGVkU2NyaXB0SG9zdCo+KHZtLCB0aGlz
VmFsdWUpOwogICAgIGlmICghY2FzdGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0
ZWRUaGlzLT5xdWVyeUluc3RhbmNlcyhjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPnF1ZXJ5SW5zdGFuY2VzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhv
c3RQcm90b3R5cGVGdW5jdGlvblF1ZXJ5SG9sZGVycyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTI0OCw5ICsyNDgsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25R
dWVyeUhvbGRlcnMoSgogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFs
dWUoKTsKICAgICBKU0luamVjdGVkU2NyaXB0SG9zdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNJbmplY3RlZFNjcmlwdEhvc3QqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoIWNhc3Rl
ZFRoaXMpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUp
OworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
IAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+cXVlcnlIb2xkZXJzKGNh
bGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+cXVlcnlI
b2xkZXJzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRl
V2l0aFNjb3BlRXh0ZW5zaW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpAQCAtMjYxLDkgKzI2MSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFNj
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEpT
SW5qZWN0ZWRTY3JpcHRIb3N0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU0luamVjdGVk
U2NyaXB0SG9zdCo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmICghY2FzdGVkVGhpcykKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihj
YWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmV2YWx1
YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVG
dW5jdGlvblN1YnR5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCkBAIC0yNzQsOSArMjc0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZUZ1bmN0aW9uU3VidHlwZShKU0dsb2IKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNJbmpl
Y3RlZFNjcmlwdEhvc3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0Kj4odm0sIHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFjYXN0ZWRUaGlzKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1YnR5cGUoY2FsbEZyYW1lKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zdWJ0eXBlKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlw
dEhvc3RQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uRGV0YWlscyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTI4Nyw5ICsyODcsOSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVu
Y3Rpb25GdW5jdGlvbkRldGFpbAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50
aGlzVmFsdWUoKTsKICAgICBKU0luamVjdGVkU2NyaXB0SG9zdCogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNJbmplY3RlZFNjcmlwdEhvc3QqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAo
IWNhc3RlZFRoaXMpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwg
c2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+ZnVuY3Rpb25E
ZXRhaWxzKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhp
cy0+ZnVuY3Rpb25EZXRhaWxzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5j
dGlvbkdldEludGVybmFsUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTMwMCw5ICszMDAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25HZXRJbnRl
cm5hbFBybwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsK
ICAgICBKU0luamVjdGVkU2NyaXB0SG9zdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNJ
bmplY3RlZFNjcmlwdEhvc3QqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoIWNhc3RlZFRoaXMp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Z2V0SW50ZXJuYWxQcm9wZXJ0aWVz
KGNhbGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Z2V0
SW50ZXJuYWxQcm9wZXJ0aWVzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCmluZGV4IGViYmIyNTQ4M2MyYzE3
NmFlZjE0YzRhZDdkOTc5MzFlNDFiNzExYWEuLjA0MmQ3OWIwMDAzMjM5M2Y3YzVjODhkZTQzNTJm
MDMwYzNiMDRhMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKQEAgLTczLDIzICs3MywyMyBAQCBKU0ph
dmFTY3JpcHRDYWxsRnJhbWU6On5KU0phdmFTY3JpcHRDYWxsRnJhbWUoKQogICAgIHJlbGVhc2VJ
bXBsKCk7CiB9CiAKLUpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhT
Y29wZUV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxG
cmFtZTo6ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSBzY3JpcHRWYWx1ZSA9IGV4ZWMtPmFy
Z3VtZW50KDApOworICAgIEpTVmFsdWUgc2NyaXB0VmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOwogICAgIGlmICghc2NyaXB0VmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmV2YWx1YXRl
V2l0aFNjb3BlRXh0ZW5zaW9uIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIl9zKTsK
KyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJKU0ph
dmFTY3JpcHRDYWxsRnJhbWUuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24gZmlyc3QgYXJndW1l
bnQgbXVzdCBiZSBhIHN0cmluZy4iX3MpOwogCi0gICAgU3RyaW5nIHNjcmlwdCA9IGFzU3RyaW5n
KHNjcmlwdFZhbHVlKS0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIHNjcmlwdCA9IGFzU3RyaW5n
KHNjcmlwdFZhbHVlKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRp
b247Ci0gICAgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uID0gZXhlYy0+YXJndW1lbnQoMSkuZ2V0
T2JqZWN0KCk7CisgICAgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgxKS5nZXRPYmplY3QoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwoKS5ldmFsdWF0
ZVdpdGhTY29wZUV4dGVuc2lvbihzY3JpcHQsIHNjb3BlRXh0ZW5zaW9uLCBleGNlcHRpb24pOwog
ICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBl
eGNlcHRpb24pOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBl
eGNlcHRpb24pOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExMywyMyArMTEzLDIzIEBA
IHN0YXRpYyBKU1ZhbHVlIHZhbHVlRm9yU2NvcGVUeXBlKERlYnVnZ2VyU2NvcGUqIHNjb3BlKQog
ICAgIHJldHVybiBqc051bWJlcihKU0phdmFTY3JpcHRDYWxsRnJhbWU6OkNMT1NVUkVfU0NPUEUp
OwogfQogCi1zdGF0aWMgSlNWYWx1ZSB2YWx1ZUZvclNjb3BlTG9jYXRpb24oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBEZWJ1Z2dlckxvY2F0aW9uJiBsb2NhdGlvbikKK3N0YXRpYyBKU1ZhbHVlIHZh
bHVlRm9yU2NvcGVMb2NhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBE
ZWJ1Z2dlckxvY2F0aW9uJiBsb2NhdGlvbikKIHsKICAgICBpZiAobG9jYXRpb24uc291cmNlSUQg
PT0gbm9Tb3VyY2VJRCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgLy8gRGVidWdn
ZXIuTG9jYXRpb24gcHJvdG9jb2wgb2JqZWN0LgotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNjcmlwdElkIiksIGpzU3RyaW5nKHZtLCBTdHJp
bmc6Om51bWJlcihsb2NhdGlvbi5zb3VyY2VJRCkpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxpbmVOdW1iZXIiKSwganNOdW1iZXIobG9j
YXRpb24ubGluZSkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiY29sdW1uTnVtYmVyIiksIGpzTnVtYmVyKGxvY2F0aW9uLmNvbHVtbikpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpz
Y29wZURlc2NyaXB0aW9ucyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIEpTSmF2YVNjcmlwdENh
bGxGcmFtZTo6c2NvcGVEZXNjcmlwdGlvbnMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlQ2hhaW4gPSBpbXBsKCkuc2NvcGVDaGFpbigpOwpAQCAt
MTM3LDUwICsxMzcsNTAgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlRGVz
Y3JpcHRpb25zKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBpbnQgaW5kZXggPSAwOwotICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyKTsKKyAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyKTsKIAogICAgIERlYnVnZ2VyU2NvcGU6Oml0
ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwogICAgIGZvciAoRGVidWdnZXJTY29wZTo6
aXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKICAgICAgICAgRGVidWdnZXJTY29wZSogc2NvcGUgPSBpdGVyLmdldCgpOwotICAgICAgICBK
U09iamVjdCogZGVzY3JpcHRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAg
ICAgSlNPYmplY3QqIGRlc2NyaXB0aW9uID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInR5cGUiKSwgdmFsdWVGb3JTY29wZVR5cGUoc2NvcGUpKTsKICAgICAgICAg
ZGVzY3JpcHRpb24tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5h
bWUiKSwganNTdHJpbmcodm0sIHNjb3BlLT5uYW1lKCkpKTsKLSAgICAgICAgZGVzY3JpcHRpb24t
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImxvY2F0aW9uIiksIHZh
bHVlRm9yU2NvcGVMb2NhdGlvbihleGVjLCBzY29wZS0+bG9jYXRpb24oKSkpOwotICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgZGVzY3JpcHRpb24pOworICAgICAg
ICBkZXNjcmlwdGlvbi0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
bG9jYXRpb24iKSwgdmFsdWVGb3JTY29wZUxvY2F0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUtPmxv
Y2F0aW9uKCkpKTsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwg
aW5kZXgrKywgZGVzY3JpcHRpb24pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1KU1Zh
bHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6Y2FsbGVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
K0pTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjYWxsZXIoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KGV4ZWMtPnZtKCkpLCBpbXBsKCkuY2FsbGVyKCkpOworICAgIHJldHVybiB0b0pTKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXMtPmdsb2JhbE9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpKSwgaW1wbCgpLmNhbGxlcigpKTsKIH0KIAotSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxs
RnJhbWU6OnNvdXJjZUlEKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTSmF2YVNjcmlwdENh
bGxGcmFtZTo6c291cmNlSUQoSlNHbG9iYWxPYmplY3QqKSBjb25zdAogewogICAgIHJldHVybiBq
c051bWJlcihpbXBsKCkuc291cmNlSUQoKSk7CiB9CiAKLUpTVmFsdWUgSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lOjpsaW5lKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxG
cmFtZTo6bGluZShKU0dsb2JhbE9iamVjdCopIGNvbnN0CiB7CiAgICAgcmV0dXJuIGpzTnVtYmVy
KGltcGwoKS5saW5lKCkpOwogfQogCi1KU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6Y29s
dW1uKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6Y29s
dW1uKEpTR2xvYmFsT2JqZWN0KikgY29uc3QKIHsKICAgICByZXR1cm4ganNOdW1iZXIoaW1wbCgp
LmNvbHVtbigpKTsKIH0KIAotSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0aW9u
TmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZTo6ZnVuY3Rpb25OYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMtPnZtKCksIGltcGwoKS5mdW5jdGlvbk5hbWUoKSk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGdsb2JhbE9iamVjdC0+dm0oKSwgaW1wbCgpLmZ1bmN0aW9uTmFt
ZSgpKTsKIH0KIAotSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaW4oRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3Bl
Q2hhaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIWltcGwoKS5zY29w
ZUNoYWluKCkpCkBAIC0xOTksMjYgKzE5OSwyNiBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxG
cmFtZTo6c2NvcGVDaGFpbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgICAgICsraXRlcjsK
ICAgICB9IHdoaWxlIChpdGVyICE9IGVuZCk7CiAgICAgaWYgKFVOTElLRUxZKGxpc3QuaGFzT3Zl
cmZsb3dlZCgpKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUp
OworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4
ZWMsIG51bGxwdHIsIGdsb2JhbE9iamVjdCh2bSksIGxpc3QpOworICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheSh0aGlzLT5nbG9iYWxPYmplY3Qodm0pLCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRp
b25Qcm9maWxlKj4obnVsbHB0ciksIGxpc3QpOwogfQogCi1KU1ZhbHVlIEpTSmF2YVNjcmlwdENh
bGxGcmFtZTo6dGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdAorSlNWYWx1ZSBKU0phdmFTY3Jp
cHRDYWxsRnJhbWU6OnRoaXNPYmplY3QoSlNHbG9iYWxPYmplY3QqKSBjb25zdAogewogICAgIHJl
dHVybiBpbXBsKCkudGhpc1ZhbHVlKCk7CiB9CiAKLUpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lOjppc1RhaWxEZWxldGVkKEpTQzo6RXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWUgSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lOjppc1RhaWxEZWxldGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25z
dAogewogICAgIHJldHVybiBqc0Jvb2xlYW4oaW1wbCgpLmlzVGFpbERlbGV0ZWQoKSk7CiB9CiAK
LUpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0eXBlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0eXBlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgc3dpdGNoIChpbXBsKCkudHlwZSgpKSB7CiAg
ICAgY2FzZSBEZWJ1Z2dlckNhbGxGcmFtZTo6RnVuY3Rpb25UeXBlOgogICAgICAgICByZXR1cm4g
anNOb250cml2aWFsU3RyaW5nKHZtLCAiZnVuY3Rpb24iX3MpOwpAQCAtMjMwLDEyICsyMzAsMTIg
QEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSmF2YVNjcmlwdENhbGxGcmFtZSog
aW1wbCkKK0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSmF2YVNjcmlwdENhbGxGcmFtZSogaW1wbCkK
IHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBKU09iamVjdCogcHJvdG90eXBlID0gSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGVQ
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBK
U0phdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUpOwogICAgIEpTSmF2YVNjcmlwdENhbGxGcmFtZSogamF2YVNjcmlwdENhbGxGcmFt
ZSA9IEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsICppbXBsKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlw
dENhbGxGcmFtZS5oCmluZGV4IGUyMTdhNDRjZTlmYzRkM2JlNWIyNmJlMWNhODJkZjYyMWJhYTZh
MjguLmRlZDRjNzYwNmZjZmNjOWYxYjgxNzkyN2M2MDlmNjUwMjc5YmMzZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJh
bWUuaApAQCAtNTYsMTkgKzU2LDE5IEBAIGNsYXNzIEpTSmF2YVNjcmlwdENhbGxGcmFtZSBmaW5h
bCA6IHB1YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKICAgICB2b2lkIHJlbGVhc2VJ
bXBsKCk7CiAKICAgICAvLyBGdW5jdGlvbnMuCi0gICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlV2l0
aFNjb3BlRXh0ZW5zaW9uKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgSlNDOjpKU1ZhbHVlIHNjb3Bl
RGVzY3JpcHRpb25zKEpTQzo6RXhlY1N0YXRlKik7CisgICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRl
V2l0aFNjb3BlRXh0ZW5zaW9uKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSop
OworICAgIEpTQzo6SlNWYWx1ZSBzY29wZURlc2NyaXB0aW9ucyhKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7CiAKICAgICAvLyBBdHRyaWJ1dGVzLgotICAgIEpTQzo6SlNWYWx1ZSBjYWxsZXIoSlNDOjpF
eGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU0M6OkpTVmFsdWUgc291cmNlSUQoSlNDOjpFeGVjU3Rh
dGUqKSBjb25zdDsKLSAgICBKU0M6OkpTVmFsdWUgbGluZShKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0
OwotICAgIEpTQzo6SlNWYWx1ZSBjb2x1bW4oSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBK
U0M6OkpTVmFsdWUgZnVuY3Rpb25OYW1lKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlND
OjpKU1ZhbHVlIHNjb3BlQ2hhaW4oSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU0M6OkpT
VmFsdWUgdGhpc09iamVjdChKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpTQzo6SlNWYWx1
ZSB0eXBlKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNDOjpKU1ZhbHVlIGlzVGFpbERl
bGV0ZWQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU0M6OkpTVmFsdWUgY2FsbGVyKEpT
Qzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKyAgICBKU0M6OkpTVmFsdWUgc291cmNlSUQoSlND
OjpKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSBsaW5lKEpTQzo6SlNH
bG9iYWxPYmplY3QqKSBjb25zdDsKKyAgICBKU0M6OkpTVmFsdWUgY29sdW1uKEpTQzo6SlNHbG9i
YWxPYmplY3QqKSBjb25zdDsKKyAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25OYW1lKEpTQzo6SlNH
bG9iYWxPYmplY3QqKSBjb25zdDsKKyAgICBKU0M6OkpTVmFsdWUgc2NvcGVDaGFpbihKU0M6OkpT
R2xvYmFsT2JqZWN0KikgY29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIHRoaXNPYmplY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSB0eXBlKEpTQzo6SlNHbG9i
YWxPYmplY3QqKSBjb25zdDsKKyAgICBKU0M6OkpTVmFsdWUgaXNUYWlsRGVsZXRlZChKU0M6OkpT
R2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAgICAvLyBDb25zdGFudHMuCiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBzaG9ydCBHTE9CQUxfU0NPUEUgPSAwOwpAQCAtODksNiArODksNiBA
QCBjbGFzcyBKU0phdmFTY3JpcHRDYWxsRnJhbWUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdCB7CiAgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogbV9pbXBsOwogfTsKIAot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SmF2YVNjcmlwdENhbGxGcmFtZSopOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKYXZhU2NyaXB0Q2FsbEZyYW1lKik7CiAKIH0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuY3Bw
CmluZGV4IGY4ODdlYzc4M2UwNTFhZWU3OWE5MmQwZDkyMGJkNDg1NzI5MzEzNmMuLjUyNDFhN2U0
OGE0ZWZkNGE4MGRiZDBjMGUzMzEyOTE0NWVhNDM4N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5jcHAKQEAgLTgwLDkgKzgwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGVGdW5jdGlvbkV2YWx1YXRlV2l0aFMK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU0phdmFTY3Jp
cHRDYWxsRnJhbWUqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoIWNhc3RlZFRoaXMpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24o
Y2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5ldmFs
dWF0ZVdpdGhTY29wZUV4dGVuc2lvbihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlw
ZUZ1bmN0aW9uU2NvcGVEZXNjcmlwdGlvbnMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05Myw5ICs5Myw5IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlRnVuY3Rpb25TY29wZURl
c2NyaXB0CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwog
ICAgIEpTSmF2YVNjcmlwdENhbGxGcmFtZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNK
YXZhU2NyaXB0Q2FsbEZyYW1lKj4odm0sIHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFjYXN0ZWRUaGlz
KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnNjb3BlRGVzY3JpcHRpb25zKGNh
bGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+c2NvcGVE
ZXNjcmlwdGlvbnMoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlQ2FsbGVyKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTA2LDkgKzEwNiw5IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmli
dXRlQ2FsbGVyKEpTR2xvYmFsT2JqZWN0CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpOwogICAgIEpTSmF2YVNjcmlwdENhbGxGcmFtZSogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNKYXZhU2NyaXB0Q2FsbEZyYW1lKj4odm0sIHRoaXNWYWx1ZSk7CiAg
ICAgaWYgKCFjYXN0ZWRUaGlzKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxs
RnJhbWUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmNh
bGxlcihjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMt
PmNhbGxlcihnbG9iYWxPYmplY3QpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVTb3VyY2VJRChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTExOSw5ICsxMTksOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0
ZVNvdXJjZUlEKEpTR2xvYmFsT2JqZQogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1l
LT50aGlzVmFsdWUoKTsKICAgICBKU0phdmFTY3JpcHRDYWxsRnJhbWUqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTSmF2YVNjcmlwdENhbGxGcmFtZSo+KHZtLCB0aGlzVmFsdWUpOwogICAg
IGlmICghY2FzdGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZy
YW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zb3Vy
Y2VJRChjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMt
PnNvdXJjZUlEKGdsb2JhbE9iamVjdCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUxpbmUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xMzIsOSArMTMyLDkgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVM
aW5lKEpTR2xvYmFsT2JqZWN0KgogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50
aGlzVmFsdWUoKTsKICAgICBKU0phdmFTY3JpcHRDYWxsRnJhbWUqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTSmF2YVNjcmlwdENhbGxGcmFtZSo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlm
ICghY2FzdGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5saW5lKGNh
bGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+bGluZShn
bG9iYWxPYmplY3QpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFT
Y3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVDb2x1bW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xNDUsOSArMTQ1LDkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVDb2x1bW4oSlNH
bG9iYWxPYmplY3QKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCk7CiAgICAgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU0phdmFTY3JpcHRDYWxsRnJhbWUqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoIWNhc3Rl
ZFRoaXMpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUp
OworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
IAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y29sdW1uKGNhbGxGcmFt
ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y29sdW1uKGdsb2Jh
bE9iamVjdCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlw
dENhbGxGcmFtZUF0dHJpYnV0ZUZ1bmN0aW9uTmFtZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTE1OCw5ICsxNTgsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZUZ1bmN0aW9u
TmFtZShKU0dsb2JhbAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFs
dWUoKTsKICAgICBKU0phdmFTY3JpcHRDYWxsRnJhbWUqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTSmF2YVNjcmlwdENhbGxGcmFtZSo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmICghY2Fz
dGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUp
OwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5mdW5jdGlvbk5hbWUo
Y2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5mdW5j
dGlvbk5hbWUoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lQXR0cmlidXRlU2NvcGVDaGFpbihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTE3MSw5ICsxNzEsOSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJp
YnV0ZVNjb3BlQ2hhaW4oSlNHbG9iYWxPYgogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZy
YW1lLT50aGlzVmFsdWUoKTsKICAgICBKU0phdmFTY3JpcHRDYWxsRnJhbWUqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTSmF2YVNjcmlwdENhbGxGcmFtZSo+KHZtLCB0aGlzVmFsdWUpOwog
ICAgIGlmICghY2FzdGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2Fs
bEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5z
Y29wZUNoYWluKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVk
VGhpcy0+c2NvcGVDaGFpbihnbG9iYWxPYmplY3QpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVBdHRyaWJ1dGVUaGlzT2JqZWN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTg0LDkg
KzE4NCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZy
YW1lQXR0cmlidXRlVGhpc09iamVjdChKU0dsb2JhbE9iCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEpTSmF2YVNjcmlwdENhbGxGcmFtZSogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNKYXZhU2NyaXB0Q2FsbEZyYW1lKj4odm0sIHRoaXNW
YWx1ZSk7CiAgICAgaWYgKCFjYXN0ZWRUaGlzKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3Rl
ZFRoaXMtPnRoaXNPYmplY3QoY2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYXN0ZWRUaGlzLT50aGlzT2JqZWN0KGdsb2JhbE9iamVjdCkpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzSmF2YVNjcmlwdENhbGxGcmFtZUF0dHJpYnV0ZVR5cGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xOTcs
OSArMTk3LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxs
RnJhbWVBdHRyaWJ1dGVUeXBlKEpTR2xvYmFsT2JqZWN0KgogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBKU0phdmFTY3JpcHRDYWxsRnJhbWUqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTSmF2YVNjcmlwdENhbGxGcmFtZSo+KHZtLCB0aGlz
VmFsdWUpOwogICAgIGlmICghY2FzdGVkVGhpcykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0
ZWRUaGlzLT50eXBlKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fz
dGVkVGhpcy0+dHlwZShnbG9iYWxPYmplY3QpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc0phdmFTY3JpcHRDYWxsRnJhbWVJc1RhaWxEZWxldGVkKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjEwLDkgKzIxMCw5IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNKYXZhU2NyaXB0Q2FsbEZyYW1lSXNUYWls
RGVsZXRlZChKU0dsb2JhbE9iamVjdCoKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCk7CiAgICAgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU0phdmFTY3JpcHRDYWxsRnJhbWUqPih2bSwgdGhpc1ZhbHVlKTsKICAg
ICBpZiAoIWNhc3RlZFRoaXMpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxG
cmFtZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aXNU
YWlsRGVsZXRlZChjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3Rl
ZFRoaXMtPmlzVGFpbERlbGV0ZWQoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9T
Y3JpcHRBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3Jp
cHRBcmd1bWVudHMuY3BwCmluZGV4IDYxZmFkZjM3MTRmNmU3OTM2NzExYmUzOGFkMDE1YjhhNTU3
YmFlNWYuLjk2YTVkNTdmNzk2ZmNmNzA5NDM3MWM2NzYzOTc1MmE1M2IwNTk4NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0QXJndW1lbnRzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5jcHAK
QEAgLTM5LDEzICszOSwxMyBAQAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotUmVmPFNjcmlw
dEFyZ3VtZW50cz4gU2NyaXB0QXJndW1lbnRzOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpCitSZWY8U2Ny
aXB0QXJndW1lbnRzPiBTY3JpcHRBcmd1bWVudHM6OmNyZWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3Vt
ZW50cykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JpcHRBcmd1bWVudHMoc3RhdGUs
IFdURk1vdmUoYXJndW1lbnRzKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcmlwdEFy
Z3VtZW50cyhnbG9iYWxPYmplY3QsIFdURk1vdmUoYXJndW1lbnRzKSkpOwogfQogCi1TY3JpcHRB
cmd1bWVudHM6OlNjcmlwdEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFZlY3RvcjxK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50cykKLSAgICA6IG1fZ2xvYmFsT2Jq
ZWN0KHN0YXRlLnZtKCksIHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSkKK1NjcmlwdEFyZ3Vt
ZW50czo6U2NyaXB0QXJndW1lbnRzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKQorICAgIDogbV9n
bG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QpCiAgICAgLCBtX2Fy
Z3VtZW50cyhXVEZNb3ZlKGFyZ3VtZW50cykpCiB7CiB9CkBAIC01OCwxMiArNTgsOSBAQCBKU0M6
OkpTVmFsdWUgU2NyaXB0QXJndW1lbnRzOjphcmd1bWVudEF0KHNpemVfdCBpbmRleCkgY29uc3QK
ICAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhdLmdldCgpOwogfQogCi1KU0M6OkV4ZWNTdGF0
ZSogU2NyaXB0QXJndW1lbnRzOjpnbG9iYWxTdGF0ZSgpIGNvbnN0CitKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBTY3JpcHRBcmd1bWVudHM6Omdsb2JhbE9iamVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
Z2xvYmFsT2JqZWN0KQotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kj4obV9nbG9iYWxPYmplY3QuZ2V0KCkpLT5nbG9iYWxFeGVjKCk7Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CiB9CiAKIGJvb2wgU2Ny
aXB0QXJndW1lbnRzOjpnZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcoU3RyaW5nJiByZXN1bHQpIGNv
bnN0CkBAIC03MSwyMCArNjgsMjAgQEAgYm9vbCBTY3JpcHRBcmd1bWVudHM6OmdldEZpcnN0QXJn
dW1lbnRBc1N0cmluZyhTdHJpbmcmIHJlc3VsdCkgY29uc3QKICAgICBpZiAoIWFyZ3VtZW50Q291
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byogc3RhdGUgPSBnbG9iYWxT
dGF0ZSgpOwotICAgIGlmICghc3RhdGUpIHsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0aGlz
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGF1
dG8gdmFsdWUgPSBhcmd1bWVudEF0KDApOwotICAgIGlmIChKU0M6OmpzRHluYW1pY0Nhc3Q8SlND
OjpQcm94eU9iamVjdCo+KHN0YXRlLT52bSgpLCB2YWx1ZSkpIHsKKyAgICBpZiAoSlNDOjpqc0R5
bmFtaWNDYXN0PEpTQzo6UHJveHlPYmplY3QqPihnbG9iYWxPYmplY3QtPnZtKCksIHZhbHVlKSkg
ewogICAgICAgICByZXN1bHQgPSAiW29iamVjdCBQcm94eV0iX3M7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHN0YXRl
LT52bSgpKTsKLSAgICByZXN1bHQgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICBy
ZXN1bHQgPSB2YWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC05OSw4ICs5Niw4IEBAIGJvb2wg
U2NyaXB0QXJndW1lbnRzOjppc0VxdWFsKGNvbnN0IFNjcmlwdEFyZ3VtZW50cyYgb3RoZXIpIGNv
bnN0CiAgICAgaWYgKCFzaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGF1dG8qIHN0
YXRlID0gZ2xvYmFsU3RhdGUoKTsKLSAgICBpZiAoIXN0YXRlKQorICAgIGF1dG8qIGdsb2JhbE9i
amVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewpAQCAtMTEwLDggKzEwNyw4IEBAIGJvb2wgU2NyaXB0QXJndW1lbnRzOjppc0VxdWFsKGNv
bnN0IFNjcmlwdEFyZ3VtZW50cyYgb3RoZXIpIGNvbnN0CiAgICAgICAgICAgICBpZiAoYSAhPSBi
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAg
ICAgICAgICAgIGJvb2wgcmVzdWx0ID0gSlNDOjpKU1ZhbHVlOjpzdHJpY3RFcXVhbChzdGF0ZSwg
YSwgYik7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShnbG9i
YWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBKU0M6OkpTVmFsdWU6
OnN0cmljdEVxdWFsKGdsb2JhbE9iamVjdCwgYSwgYik7CiAgICAgICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9TY3JpcHRBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2Ny
aXB0QXJndW1lbnRzLmgKaW5kZXggNjAyYzhiYTRjNDg5N2I5ZTZjMjgwZGZiYjkxZTcyMzkzMDRl
NmIwMS4uYjY2MTBiMzE3ZmUwZmJjNWE0YWY0YzAyMzg4Y2ZmYWQzODU1OTNlMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRBcmd1bWVudHMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdEFyZ3VtZW50cy5oCkBAIC0z
OSwyNiArMzksMjUgQEAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3Mg
SlNHbG9iYWxPYmplY3Q7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiB9CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBTY3JpcHRBcmd1bWVu
dHMgOiBwdWJsaWMgUmVmQ291bnRlZDxTY3JpcHRBcmd1bWVudHM+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFNjcmlwdEFyZ3VtZW50cz4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlJiwgVmVjdG9y
PEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKTsKKyAgICBzdGF0aWMgUmVm
PFNjcmlwdEFyZ3VtZW50cz4gY3JlYXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBWZWN0b3I8SlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpOwogICAgIH5TY3JpcHRBcmd1bWVu
dHMoKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBhcmd1bWVudEF0KHNpemVfdCkgY29uc3Q7CiAgICAg
c2l6ZV90IGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7
IH0KIAotICAgIEpTQzo6RXhlY1N0YXRlKiBnbG9iYWxTdGF0ZSgpIGNvbnN0OworICAgIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0OwogCiAgICAgYm9vbCBnZXRGaXJz
dEFyZ3VtZW50QXNTdHJpbmcoU3RyaW5nJiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wgaXNFcXVh
bChjb25zdCBTY3JpcHRBcmd1bWVudHMmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBTY3JpcHRB
cmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
Pj4mJiBhcmd1bWVudHMpOworICAgIFNjcmlwdEFyZ3VtZW50cyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKTsKIAogICAg
IEpTQzo6U3Ryb25nPEpTQzo6SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIFZl
Y3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiBtX2FyZ3VtZW50czsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rv
cnkuY3BwCmluZGV4IDJjYzYwNjY2MzNlNTJjNmM0MWUyYzMzZjliZjJmZWEyMjc5ZGM1MjkuLjhh
NTY1NGM3ZGQ1Mjk1OWUwNTg0OTczYTFiMTkzZWJhZDA0YWMwZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5
LmNwcApAQCAtODQsMTUgKzg0LDE1IEBAIGNsYXNzIENyZWF0ZVNjcmlwdENhbGxTdGFja0Z1bmN0
b3IgewogICAgIG11dGFibGUgc2l6ZV90IG1fcmVtYWluaW5nQ2FwYWNpdHlGb3JGcmFtZUNhcHR1
cmU7CiB9OwogCi1SZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2soSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBtYXhTdGFja1NpemUpCitSZWY8U2NyaXB0Q2FsbFN0
YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2soSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBzaXplX3QgbWF4U3RhY2tTaXplKQogewotICAgIGlmICghZXhlYykKKyAgICBpZiAoIWds
b2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuIFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKCk7CiAK
LSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
Z2xvYmFsT2JqZWN0KTsKICAgICBWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiBmcmFtZXM7CiAKLSAg
ICBDYWxsRnJhbWUqIGZyYW1lID0gZXhlYy0+dm0oKS50b3BDYWxsRnJhbWU7CisgICAgQ2FsbEZy
YW1lKiBmcmFtZSA9IGdsb2JhbE9iamVjdC0+dm0oKS50b3BDYWxsRnJhbWU7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuIFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKCk7CiAgICAgQ3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrRnVuY3RvciBmdW5jdG9yKGZhbHNlLCBmcmFtZXMsIG1heFN0YWNr
U2l6ZSk7CkBAIC0xMDEsMTUgKzEwMSwxNSBAQCBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVT
Y3JpcHRDYWxsU3RhY2soSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBtYXhTdGFjawogICAg
IHJldHVybiBTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZShmcmFtZXMpOwogfQogCi1SZWY8U2NyaXB0
Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGb3JDb25zb2xlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBzaXplX3QgbWF4U3RhY2tTaXplKQorUmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRl
U2NyaXB0Q2FsbFN0YWNrRm9yQ29uc29sZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIHNpemVfdCBtYXhTdGFja1NpemUpCiB7Ci0gICAgaWYgKCFleGVjKQorICAgIGlmICghZ2xv
YmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoKTsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihn
bG9iYWxPYmplY3QpOwogICAgIFZlY3RvcjxTY3JpcHRDYWxsRnJhbWU+IGZyYW1lczsKIAotICAg
IENhbGxGcmFtZSogZnJhbWUgPSBleGVjLT52bSgpLnRvcENhbGxGcmFtZTsKKyAgICBDYWxsRnJh
bWUqIGZyYW1lID0gZ2xvYmFsT2JqZWN0LT52bSgpLnRvcENhbGxGcmFtZTsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gU2NyaXB0Q2FsbFN0YWNrOjpjcmVhdGUoKTsKICAgICBDcmVh
dGVTY3JpcHRDYWxsU3RhY2tGdW5jdG9yIGZ1bmN0b3IodHJ1ZSwgZnJhbWVzLCBtYXhTdGFja1Np
emUpOwpAQCAtMTIzLDkgKzEyMyw5IEBAIFJlZjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlw
dENhbGxTdGFja0ZvckNvbnNvbGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHNpemVfCiAgICAgcmV0
dXJuIFNjcmlwdENhbGxTdGFjazo6Y3JlYXRlKGZyYW1lcyk7CiB9CiAKLXN0YXRpYyBib29sIGV4
dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QsIGludCogbGluZU51bWJlciwgaW50KiBjb2x1bW5O
dW1iZXIsIFN0cmluZyogc291cmNlVVJMKQorc3RhdGljIGJvb2wgZXh0cmFjdFNvdXJjZUluZm9y
bWF0aW9uRnJvbUV4Y2VwdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBleGNlcHRpb25PYmplY3QsIGludCogbGluZU51bWJlciwgaW50KiBjb2x1bW5OdW1i
ZXIsIFN0cmluZyogc291cmNlVVJMKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUw
ODc+IFdlYiBJbnNwZWN0b3I6IFNob3VsZCBub3QgbmVlZCB0byBldmFsdWF0ZSBKYXZhU2NyaXB0
IGhhbmRsaW5nIGV4Y2VwdGlvbnMKQEAgLTEzNiw5ICsxMzYsOSBAQCBzdGF0aWMgYm9vbCBleHRy
YWN0U291cmNlSW5mb3JtYXRpb25Gcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVWYWx1ZSAmJiBs
aW5lVmFsdWUuaXNOdW1iZXIoKQogICAgICAgICAmJiBzb3VyY2VVUkxWYWx1ZSAmJiBzb3VyY2VV
UkxWYWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICpsaW5lTnVtYmVyID0gaW50KGxpbmVWYWx1
ZS50b051bWJlcihleGVjKSk7Ci0gICAgICAgICpjb2x1bW5OdW1iZXIgPSBjb2x1bW5WYWx1ZSAm
JiBjb2x1bW5WYWx1ZS5pc051bWJlcigpID8gaW50KGNvbHVtblZhbHVlLnRvTnVtYmVyKGV4ZWMp
KSA6IDA7Ci0gICAgICAgICpzb3VyY2VVUkwgPSBzb3VyY2VVUkxWYWx1ZS50b1dURlN0cmluZyhl
eGVjKTsKKyAgICAgICAgKmxpbmVOdW1iZXIgPSBpbnQobGluZVZhbHVlLnRvTnVtYmVyKGdsb2Jh
bE9iamVjdCkpOworICAgICAgICAqY29sdW1uTnVtYmVyID0gY29sdW1uVmFsdWUgJiYgY29sdW1u
VmFsdWUuaXNOdW1iZXIoKSA/IGludChjb2x1bW5WYWx1ZS50b051bWJlcihnbG9iYWxPYmplY3Qp
KSA6IDA7CisgICAgICAgICpzb3VyY2VVUkwgPSBzb3VyY2VVUkxWYWx1ZS50b1dURlN0cmluZyhn
bG9iYWxPYmplY3QpOwogICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoRXJy
b3JJbnN0YW5jZSogZXJyb3IgPSBqc0R5bmFtaWNDYXN0PEVycm9ySW5zdGFuY2UqPih2bSwgZXhj
ZXB0aW9uT2JqZWN0KSkgewogICAgICAgICB1bnNpZ25lZCB1bnNpZ25lZExpbmU7CkBAIC0xNTUs
MTEgKzE1NSwxMSBAQCBzdGF0aWMgYm9vbCBleHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZjxTY3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIHNp
emVfdCBtYXhTdGFja1NpemUpCitSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxs
U3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgc2l6ZV90IG1heFN0YWNrU2l6ZSkKIHsKICAgICBWZWN0
b3I8U2NyaXB0Q2FsbEZyYW1lPiBmcmFtZXM7CiAgICAgYXV0byYgc3RhY2tUcmFjZSA9IGV4Y2Vw
dGlvbi0+c3RhY2soKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YWNrVHJhY2Uu
c2l6ZSgpICYmIGkgPCBtYXhTdGFja1NpemU7IGkrKykgewogICAgICAgICB1bnNpZ25lZCBsaW5l
OwogICAgICAgICB1bnNpZ25lZCBjb2x1bW47CkBAIC0xNzAsMTMgKzE3MCwxMyBAQCBSZWY8U2Ny
aXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKUwogCiAgICAgLy8gRmFsbGJhY2sgdG8gZ2V0dGluZyBhdCBsZWFzdCB0
aGUgbGluZSBhbmQgc291cmNlVVJMIGZyb20gdGhlIGV4Y2VwdGlvbiBvYmplY3QgaWYgaXQgaGFz
IHZhbHVlcyBhbmQgdGhlIGV4Y2VwdGlvblN0YWNrIGRvZXNuJ3QuCiAgICAgaWYgKGV4Y2VwdGlv
bi0+dmFsdWUoKS5pc09iamVjdCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb25PYmpl
Y3QgPSBleGNlcHRpb24tPnZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgICAgIEpTT2JqZWN0
KiBleGNlcHRpb25PYmplY3QgPSBleGNlcHRpb24tPnZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbk9iamVjdCk7CiAgICAgICAgIGludCBsaW5l
TnVtYmVyOwogICAgICAgICBpbnQgY29sdW1uTnVtYmVyOwogICAgICAgICBTdHJpbmcgZXhjZXB0
aW9uU291cmNlVVJMOwogICAgICAgICBpZiAoIWZyYW1lcy5zaXplKCkpIHsKLSAgICAgICAgICAg
IGlmIChleHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bk9iamVjdCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1iZXIsICZleGNlcHRpb25Tb3VyY2VVUkwp
KQorICAgICAgICAgICAgaWYgKGV4dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb21FeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCBleGNlcHRpb25PYmplY3QsICZsaW5lTnVtYmVyLCAmY29sdW1uTnVtYmVy
LCAmZXhjZXB0aW9uU291cmNlVVJMKSkKICAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKFNj
cmlwdENhbGxGcmFtZShTdHJpbmcoKSwgZXhjZXB0aW9uU291cmNlVVJMLCBub1NvdXJjZUlELCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGUgdHlwaWNhbCBzdGFjayB0cmFjZSB3aWxsIGhhdmUgYSBuYXRpdmUgZnJh
bWUgYXQgdGhlIHRvcCwgYW5kIGNvbnN1bWVycyBvZgpAQCAtMTg2LDcgKzE4Niw3IEBAIFJlZjxT
Y3JpcHRDYWxsU3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NjYzCiAgICAgICAgICAgICBpZiAoIXN0YWNrVHJhY2VbMF0u
aGFzTGluZUFuZENvbHVtbkluZm8oKSB8fCBzdGFja1RyYWNlWzBdLnNvdXJjZVVSTCgpLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgZmlyc3RDYWxs
RnJhbWUgPSBmcmFtZXMuZmlyc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAoZXh0cmFjdFNvdXJj
ZUluZm9ybWF0aW9uRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb25PYmplY3QsICZsaW5lTnVt
YmVyLCAmY29sdW1uTnVtYmVyLCAmZXhjZXB0aW9uU291cmNlVVJMKSkKKyAgICAgICAgICAgICAg
ICBpZiAoZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbUV4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IGV4Y2VwdGlvbk9iamVjdCwgJmxpbmVOdW1iZXIsICZjb2x1bW5OdW1iZXIsICZleGNlcHRpb25T
b3VyY2VVUkwpKQogICAgICAgICAgICAgICAgICAgICBmcmFtZXNbMF0gPSBTY3JpcHRDYWxsRnJh
bWUoZmlyc3RDYWxsRnJhbWUuZnVuY3Rpb25OYW1lKCksIGV4Y2VwdGlvblNvdXJjZVVSTCwgc3Rh
Y2tUcmFjZVswXS5zb3VyY2VJRCgpLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xOTUsMTQgKzE5NSwxNCBAQCBSZWY8U2NyaXB0Q2FsbFN0
YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKUwogICAgIHJldHVybiBTY3JpcHRDYWxsU3RhY2s6OmNyZWF0ZShmcmFtZXMpOwogfQog
Ci1SZWY8U2NyaXB0QXJndW1lbnRzPiBjcmVhdGVTY3JpcHRBcmd1bWVudHMoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkKK1JlZjxTY3JpcHRBcmd1bWVu
dHM+IGNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50
KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4gYXJndW1lbnRz
OwotICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gc3RhdGUtPmFyZ3VtZW50Q291bnQoKTsKKyAg
ICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSBza2lwQXJndW1lbnRDb3VudDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh7IHZtLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoaSkgfSk7Ci0gICAgcmV0dXJuIFNjcmlwdEFyZ3VtZW50czo6Y3JlYXRlKCpzdGF0ZSwgV1RG
TW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh7IHZtLCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpIH0pOworICAgIHJldHVybiBTY3JpcHRBcmd1bWVudHM6
OmNyZWF0ZShnbG9iYWxPYmplY3QsIFdURk1vdmUoYXJndW1lbnRzKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaAppbmRleCAyM2JiMjE1ZGIyY2QxNDkxZWZi
MTJiMjZlZGYxZGY1YTVkOGVkZDEyLi40MGNhMjQ3NzY1NGNhYTczMTBlOWU3NzlhNzdlZDJjNTg4
NWVmMmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1Njcmlw
dENhbGxTdGFja0ZhY3RvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaApAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEpTVmFsdWU7Ci11
c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiB9CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpA
QCAtNDYsOSArNDUsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIFNjcmlwdEFyZ3Vt
ZW50czsKIAogLy8gRklYTUU6IFRoZSBzdWJ0bGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVzZSBz
aG91bGQgYmUgZWxpbWluYXRlZC4KLUpTX0VYUE9SVF9QUklWQVRFIFJlZjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFjayhKU0M6OkV4ZWNTdGF0ZSosIHNpemVfdCBtYXhTdGFj
a1NpemUgPSBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpOwotSlNf
RVhQT1JUX1BSSVZBVEUgUmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNr
Rm9yQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSosIHNpemVfdCBtYXhTdGFja1NpemUgPSBTY3JpcHRD
YWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpOwotSlNfRVhQT1JUX1BSSVZBVEUg
UmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKiwgc2l6ZV90IG1heFN0YWNrU2l6ZSA9IFNj
cmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSk7Ci1KU19FWFBPUlRfUFJJ
VkFURSBSZWY8U2NyaXB0QXJndW1lbnRzPiBjcmVhdGVTY3JpcHRBcmd1bWVudHMoSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCk7CitKU19FWFBPUlRfUFJJVkFURSBS
ZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2soSlNDOjpKU0dsb2JhbE9i
amVjdCosIHNpemVfdCBtYXhTdGFja1NpemUgPSBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFj
a1NpemVUb0NhcHR1cmUpOworSlNfRVhQT1JUX1BSSVZBVEUgUmVmPFNjcmlwdENhbGxTdGFjaz4g
Y3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9yQ29uc29sZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwgc2l6
ZV90IG1heFN0YWNrU2l6ZSA9IFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2Fw
dHVyZSk7CitKU19FWFBPUlRfUFJJVkFURSBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3Jp
cHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4Y2Vw
dGlvbiosIHNpemVfdCBtYXhTdGFja1NpemUgPSBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFj
a1NpemVUb0NhcHR1cmUpOworSlNfRVhQT1JUX1BSSVZBVEUgUmVmPFNjcmlwdEFyZ3VtZW50cz4g
Y3JlYXRlU2NyaXB0QXJndW1lbnRzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFt
ZSosIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERl
YnVnTGlzdGVuZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVi
dWdMaXN0ZW5lci5oCmluZGV4IDU2Yjg2Y2I2NzgxZjhhNDc0YmQ2ZDI5ZDk2NmE3ZTA5MzE5MjQw
MmIuLjNkOGJlZjQwZWZiYzJiMDdhYTZlN2Q1NmRmMDhlZTE1OGZkOGIwMTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5o
CkBAIC02MCwxMiArNjAsMTIgQEAgY2xhc3MgU2NyaXB0RGVidWdMaXN0ZW5lciB7CiAgICAgdmly
dHVhbCB2b2lkIHdpbGxSdW5NaWNyb3Rhc2soKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJ1
bk1pY3JvdGFzaygpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkpTVmFsdWUgY2FsbEZyYW1lcywgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRDb250aW51ZSgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBicmVha3Bv
aW50QWN0aW9uTG9nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Tb3VuZChp
bnQgYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYnJl
YWtwb2ludEFjdGlvblByb2JlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgU2NyaXB0QnJlYWtwb2lu
dEFjdGlvbiYsIHVuc2lnbmVkIGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBKU0M6OkpTVmFs
dWUgcmVzdWx0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9iZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYsIHVuc2ln
bmVkIGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBKU0M6OkpTVmFsdWUgcmVzdWx0KSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggYTU0Zjc3ZGY5
NTM3NTRiMTU0Y2FlMjc1ZGVhNzAyNjA0MjBkZDI4MC4uZjlmNjQ0ZDk0ODhmZmVkYjA5NjIxNTUw
OTBhZTUwNTc2ZDA5NWE1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFr
cG9pbnRBY3Rpb24mIGIKICAgICBzd2l0Y2ggKGJyZWFrcG9pbnRBY3Rpb24udHlwZSkgewogICAg
IGNhc2UgU2NyaXB0QnJlYWtwb2ludEFjdGlvblR5cGVMb2c6CiAgICAgICAgIGRpc3BhdGNoRnVu
Y3Rpb25Ub0xpc3RlbmVycyhbJl0gKFNjcmlwdERlYnVnTGlzdGVuZXImIGxpc3RlbmVyKSB7Ci0g
ICAgICAgICAgICBsaXN0ZW5lci5icmVha3BvaW50QWN0aW9uTG9nKCpkZWJ1Z2dlckNhbGxGcmFt
ZS5nbG9iYWxFeGVjKCksIGJyZWFrcG9pbnRBY3Rpb24uZGF0YSk7CisgICAgICAgICAgICBsaXN0
ZW5lci5icmVha3BvaW50QWN0aW9uTG9nKGRlYnVnZ2VyQ2FsbEZyYW1lLmdsb2JhbE9iamVjdCgp
LCBicmVha3BvaW50QWN0aW9uLmRhdGEpOwogICAgICAgICB9KTsKICAgICAgICAgYnJlYWs7CiAK
QEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFr
cG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYgogICAgICAgICBKU09i
amVjdCogc2NvcGVFeHRlbnNpb25PYmplY3QgPSBudWxscHRyOwogICAgICAgICBkZWJ1Z2dlckNh
bGxGcmFtZS5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihicmVha3BvaW50QWN0aW9uLmRhdGEs
IHNjb3BlRXh0ZW5zaW9uT2JqZWN0LCBleGNlcHRpb24pOwogICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGRlYnVnZ2VyQ2FsbEZyYW1lLmdsb2JhbEV4
ZWMoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihkZWJ1Z2dlckNh
bGxGcmFtZS5nbG9iYWxPYmplY3QoKSwgZXhjZXB0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCkBAIC0xMTYsMTIgKzExNiwxMiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0
ZUJyZWFrcG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYgogICAgICAg
ICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4Y2VwdGlvbjsKICAgICAgICAgSlNPYmplY3QqIHNjb3Bl
RXh0ZW5zaW9uT2JqZWN0ID0gbnVsbHB0cjsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBkZWJ1
Z2dlckNhbGxGcmFtZS5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihicmVha3BvaW50QWN0aW9u
LmRhdGEsIHNjb3BlRXh0ZW5zaW9uT2JqZWN0LCBleGNlcHRpb24pOwotICAgICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IGRlYnVnZ2VyQ2FsbEZyYW1lLmdsb2JhbEV4ZWMoKTsKKyAgICAgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZGVidWdnZXJDYWxsRnJhbWUuZ2xv
YmFsT2JqZWN0KCk7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICByZXBvcnRF
eGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAKICAgICAgICAgZGlzcGF0Y2hGdW5jdGlvblRvTGlz
dGVuZXJzKFsmXSAoU2NyaXB0RGVidWdMaXN0ZW5lciYgbGlzdGVuZXIpIHsKLSAgICAgICAgICAg
IGxpc3RlbmVyLmJyZWFrcG9pbnRBY3Rpb25Qcm9iZSgqZXhlYywgYnJlYWtwb2ludEFjdGlvbiwg
bV9jdXJyZW50UHJvYmVCYXRjaElkLCBtX25leHRQcm9iZVNhbXBsZUlkKyssIGV4Y2VwdGlvbiA/
IGV4Y2VwdGlvbi0+dmFsdWUoKSA6IHJlc3VsdCk7CisgICAgICAgICAgICBsaXN0ZW5lci5icmVh
a3BvaW50QWN0aW9uUHJvYmUoZ2xvYmFsT2JqZWN0LCBicmVha3BvaW50QWN0aW9uLCBtX2N1cnJl
bnRQcm9iZUJhdGNoSWQsIG1fbmV4dFByb2JlU2FtcGxlSWQrKywgZXhjZXB0aW9uID8gZXhjZXB0
aW9uLT52YWx1ZSgpIDogcmVzdWx0KTsKICAgICAgICAgfSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTEzMyw3ICsxMzMsNyBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJy
ZWFrcG9pbnRBY3Rpb24oY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYgogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQoRXhlY1N0
YXRlKiBleGVjLCBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIsIGludCBlcnJvckxpbmUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQordm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c291
cmNlUGFyc2VkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFNvdXJjZVByb3ZpZGVyKiBz
b3VyY2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
CiB7CiAgICAgLy8gUHJlZW1wdGl2ZWx5IGNoZWNrIHdoZXRoZXIgd2UgY2FuIGRpc3BhdGNoIHNv
IHRoYXQgd2UgZG9uJ3QgZG8gYW55IHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zLgogICAgIGlmICgh
Y2FuRGlzcGF0Y2hGdW5jdGlvblRvTGlzdGVuZXJzKCkpCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9p
ZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkKEV4ZWNTdGF0ZSogZXhlYywgU291cmNl
UHJvdmlkZXIqIHNvdXJjZVByb3YKICAgICBzY3JpcHQuc291cmNlID0gc291cmNlUHJvdmlkZXIt
PnNvdXJjZSgpLnRvU3RyaW5nKCk7CiAgICAgc2NyaXB0LnN0YXJ0TGluZSA9IHNvdXJjZVByb3Zp
ZGVyLT5zdGFydFBvc2l0aW9uKCkubV9saW5lLnplcm9CYXNlZEludCgpOwogICAgIHNjcmlwdC5z
dGFydENvbHVtbiA9IHNvdXJjZVByb3ZpZGVyLT5zdGFydFBvc2l0aW9uKCkubV9jb2x1bW4uemVy
b0Jhc2VkSW50KCk7Ci0gICAgc2NyaXB0LmlzQ29udGVudFNjcmlwdCA9IGlzQ29udGVudFNjcmlw
dChleGVjKTsKKyAgICBzY3JpcHQuaXNDb250ZW50U2NyaXB0ID0gaXNDb250ZW50U2NyaXB0KGds
b2JhbE9iamVjdCk7CiAgICAgc2NyaXB0LnNvdXJjZVVSTCA9IHNvdXJjZVByb3ZpZGVyLT5zb3Vy
Y2VVUkxEaXJlY3RpdmUoKTsKICAgICBzY3JpcHQuc291cmNlTWFwcGluZ1VSTCA9IHNvdXJjZVBy
b3ZpZGVyLT5zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlKCk7CiAKQEAgLTI0MCw5ICsyNDAsOSBA
QCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpoYW5kbGVCcmVha3BvaW50SGl0KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uKSBjb25zdAordm9pZCBTY3JpcHREZWJ1
Z1NlcnZlcjo6aGFuZGxlRXhjZXB0aW9uSW5CcmVha3BvaW50Q29uZGl0aW9uKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbikgY29uc3QK
IHsKLSAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICByZXBvcnRFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogfQogCiB2b2lkIFNjcmlwdERlYnVnU2Vy
dmVyOjpoYW5kbGVQYXVzZShKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdCwgRGVi
dWdnZXI6OlJlYXNvbkZvclBhdXNlKQpAQCAtMjUxLDkgKzI1MSw4IEBAIHZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmhhbmRsZVBhdXNlKEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0
LCBEZWJ1Z2dlCiAgICAgICAgIEFTU0VSVChpc1BhdXNlZCgpKTsKICAgICAgICAgYXV0byYgZGVi
dWdnZXJDYWxsRnJhbWUgPSBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKTsKICAgICAgICAgYXV0
byogZ2xvYmFsT2JqZWN0ID0gZGVidWdnZXJDYWxsRnJhbWUuc2NvcGUoKS0+Z2xvYmFsT2JqZWN0
KCk7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwot
ICAgICAgICBhdXRvIGpzQ2FsbEZyYW1lID0gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCwgSmF2
YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lKS5wdHIoKSk7Ci0gICAg
ICAgIGxpc3RlbmVyLmRpZFBhdXNlKHN0YXRlLCBqc0NhbGxGcmFtZSwgZXhjZXB0aW9uT3JDYXVn
aHRWYWx1ZSgmc3RhdGUpKTsKKyAgICAgICAgYXV0byBqc0NhbGxGcmFtZSA9IHRvSlMoZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIEphdmFTY3JpcHRDYWxsRnJhbWU6OmNyZWF0ZShkZWJ1Z2dl
ckNhbGxGcmFtZSkucHRyKCkpOworICAgICAgICBsaXN0ZW5lci5kaWRQYXVzZShnbG9iYWxPYmpl
Y3QsIGpzQ2FsbEZyYW1lLCBleGNlcHRpb25PckNhdWdodFZhbHVlKGdsb2JhbE9iamVjdCkpOwog
ICAgIH0pOwogCiAgICAgZGlkUGF1c2Uodm1FbnRyeUdsb2JhbE9iamVjdCk7CkBAIC0yOTEsNyAr
MjkwLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVi
dWdMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgaXNCZWkKICAgICAgICAgZGV0YWNoRGVidWdnZXIo
aXNCZWluZ0Rlc3Ryb3llZCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBTY3JpcHREZWJ1Z1NlcnZlcjo6
ZXhjZXB0aW9uT3JDYXVnaHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitKU0M6OkpTVmFs
dWUgU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbk9yQ2F1Z2h0VmFsdWUoSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIGlmIChyZWFzb25Gb3JQYXVzZSgpID09IFBh
dXNlZEZvckV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIGN1cnJlbnRFeGNlcHRpb24oKTsKQEAg
LTI5OSw3ICsyOTgsNyBAQCBKU0M6OkpTVmFsdWUgU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlv
bk9yQ2F1Z2h0VmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogICAgIGZvciAoUmVmUHRyPERl
YnVnZ2VyQ2FsbEZyYW1lPiBmcmFtZSA9ICZjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPmNhbGxlckZyYW1lKCkpIHsKICAgICAgICAgRGVidWdnZXJTY29w
ZSYgc2NvcGUgPSAqZnJhbWUtPnNjb3BlKCk7CiAgICAgICAgIGlmIChzY29wZS5pc0NhdGNoU2Nv
cGUoKSkKLSAgICAgICAgICAgIHJldHVybiBzY29wZS5jYXVnaHRWYWx1ZShzdGF0ZSk7CisgICAg
ICAgICAgICByZXR1cm4gc2NvcGUuY2F1Z2h0VmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICB9CiAK
ICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9TY3JpcHREZWJ1Z1NlcnZlci5oCmluZGV4IGI5Y2Y5ZmQxYTI0M2U4MTJiMjYzYjEzNGFjYmIw
NDgxZWIwZGYzYzQuLjE3YzExMGQ3NGMxMTMzYWI0ZmNmMzFmZmM0YjI1MjgwZmVkOTJiYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2Vy
dmVyLmgKQEAgLTQxLDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWxsRnJhbWU7
CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIFZNOwotdXNpbmcgRXhlY1N0YXRlID0gQ2Fs
bEZyYW1lOwogfQogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTcxLDggKzcwLDggQEAgY2xh
c3MgSlNfRVhQT1JUX1BSSVZBVEUgU2NyaXB0RGVidWdTZXJ2ZXIgOiBwdWJsaWMgSlNDOjpEZWJ1
Z2dlciB7CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50TG9vcFdoaWxlUGF1c2VkKCkgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RXhjZXB0aW9uKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRTY3JpcHQo
SlNDOjpKU0dsb2JhbE9iamVjdCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0
RXhjZXB0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4Y2VwdGlvbiopIGNvbnN0ID0g
MDsKIAogICAgIGJvb2wgZXZhbHVhdGVCcmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFr
cG9pbnRBY3Rpb24mKTsKIApAQCAtODQsMTUgKzgzLDE1IEBAIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIFNjcmlwdERlYnVnU2VydmVyIDogcHVibGljIEpTQzo6RGVidWdnZXIgewogcHJpdmF0ZToK
ICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDOjpCcmVha3BvaW50SUQsIEJyZWFrcG9pbnRBY3Rpb25z
PiBCcmVha3BvaW50SURUb0FjdGlvbnNNYXA7CiAKLSAgICB2b2lkIHNvdXJjZVBhcnNlZChKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6U291cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBT
dHJpbmcmIGVycm9yTXNnKSBmaW5hbDsKKyAgICB2b2lkIHNvdXJjZVBhcnNlZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0
cmluZyYgZXJyb3JNc2cpIGZpbmFsOwogICAgIHZvaWQgd2lsbFJ1bk1pY3JvdGFzaygpIGZpbmFs
OwogICAgIHZvaWQgZGlkUnVuTWljcm90YXNrKCkgZmluYWw7CiAgICAgdm9pZCBoYW5kbGVCcmVh
a3BvaW50SGl0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkJyZWFrcG9pbnQmKSBm
aW5hbDsKLSAgICB2b2lkIGhhbmRsZUV4Y2VwdGlvbkluQnJlYWtwb2ludENvbmRpdGlvbihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKikgY29uc3QgZmluYWw7CisgICAgdm9pZCBoYW5k
bGVFeGNlcHRpb25JbkJyZWFrcG9pbnRDb25kaXRpb24oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RXhjZXB0aW9uKikgY29uc3QgZmluYWw7CiAgICAgdm9pZCBoYW5kbGVQYXVzZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpEZWJ1Z2dlcjo6UmVhc29uRm9yUGF1c2UpIGZpbmFsOwogICAg
IHZvaWQgbm90aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygpIGZpbmFsOwogCi0gICAg
SlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbk9yQ2F1Z2h0VmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKKyAg
ICBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uT3JDYXVnaHRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7CiAKICAgICBCcmVha3BvaW50SURUb0FjdGlvbnNNYXAgbV9icmVha3BvaW50SURUb0FjdGlv
bnM7CiAgICAgSGFzaFNldDxTY3JpcHREZWJ1Z0xpc3RlbmVyKj4gbV9saXN0ZW5lcnM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JB
dWRpdEFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckF1ZGl0QWdlbnQuY3BwCmluZGV4IDlmMTM0NTMwMmRhMDU5Y2YwNGRlYjU0YjM0NTNj
ODMyMzllMjgwMWQuLmJiMWMwNTc5NDUwY2QyMDNlYzE0MzBiMzQ4Zjc1YzRkN2U3Y2NkNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckF1ZGl0QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3BwCkBAIC02OSwyMyArNjksMjMgQEAgdm9pZCBJbnNw
ZWN0b3JBdWRpdEFnZW50OjpzZXR1cChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGlu
dCogZXhlY3V0aW9uQ28KICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gaW5qZWN0ZWRT
Y3JpcHQuc2NyaXB0U3RhdGUoKTsKLSAgICBpZiAoIWV4ZWNTdGF0ZSkgeworICAgIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluamVjdGVkU2NyaXB0Lmdsb2JhbE9iamVjdCgp
OworICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9u
Q29udGV4dElkIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVk0mIHZtID0gZXhl
Y1N0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAotICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlY1N0YXRlKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbE9iamVjdCk7CiAKLSAgICBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1
ZS5zZXQodm0sIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWNTdGF0ZSkpOworICAgIG1faW5qZWN0
ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlLnNldCh2bSwgY29uc3RydWN0RW1wdHlPYmplY3QoZ2xv
YmFsT2JqZWN0KSk7CiAgICAgaWYgKCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkg
ewogICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdl
Ykluc3BlY3RvckF1ZGl0IG9iamVjdC4iX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBwb3B1bGF0ZUF1ZGl0T2JqZWN0KGV4ZWNTdGF0ZSwgbV9pbmplY3RlZFdlYkluc3BlY3RvckF1
ZGl0VmFsdWUpOworICAgIHBvcHVsYXRlQXVkaXRPYmplY3QoZ2xvYmFsT2JqZWN0LCBtX2luamVj
dGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2Vu
dDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0ZXN0LCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCkBAIC0xMzIsMTMg
KzEzMiwxMyBAQCBib29sIEluc3BlY3RvckF1ZGl0QWdlbnQ6Omhhc0FjdGl2ZUF1ZGl0KCkgY29u
c3QKICAgICByZXR1cm4gISFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6RXhlY1N0
YXRlKiBleGVjU3RhdGUsIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiBhdWRpdE9iamVjdCkK
K3ZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cG9wdWxhdGVBdWRpdE9iamVjdChKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiBhdWRp
dE9iamVjdCkKIHsKLSAgICBBU1NFUlQoZXhlY1N0YXRlKTsKLSAgICBpZiAoIWV4ZWNTdGF0ZSkK
KyAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSlNDOjpWTSYgdm0gPSBleGVjU3RhdGUtPnZtKCk7CisgICAgSlND
OjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CiAKICAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJWZXJzaW9uIiksIEpTQzo6SlNWYWx1ZShJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdWRpdDo6VkVSU0lPTikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oCmluZGV4IGUxYWMz
Y2JlNWZkYTM1YjM2M2YxM2JiN2M0MzBiMTQzZDBiM2ZmMTAuLjgzYmNjYTYyOTc1NDhkZTNmNjgw
MTlkZTVmZjUzMTNlZjc0YTI2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKQEAgLTYzLDcg
KzYzLDcgQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQXVkaXRBZ2VudCA6IHB1
YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYwogCiAgICAgdmlydHVhbCBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlQXVkaXRPYmpl
Y3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYgYXVkaXRPYmpl
Y3QpOworICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYgYXVkaXRPYmplY3QpOwogCiAgICAg
dmlydHVhbCB2b2lkIG11dGVDb25zb2xlKCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCB1bm11dGVD
b25zb2xlKCkgeyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5kZXggZDM2OWFj
MDdiNmY0MGMwODZmMzIyZDA1MTc0NDY1Mjk0NTYzNTYyOS4uZTE4Yjg2NTJjZDYzMDFkNjQyNWVh
OTQyYjFjZTAxNzZkZTk0ZGZmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBA
IC0xMjgsNyArMTI4LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VU
b0NvbnNvbGUoc3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPgogICAgIGFkZENvbnNvbGVN
ZXNzYWdlKFdURk1vdmUobWVzc2FnZSkpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6c3RhcnRUaW1pbmcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwp
Cit2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c3RhcnRUaW1pbmcoSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewogICAgIGlmICghbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXIuaW5zcGVjdG9yRW52aXJvbm1lbnQoKS5kZXZlbG9wZXJFeHRy
YXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MiwxMSArMTQyLDExIEBAIHZvaWQg
SW5zcGVjdG9yQ29uc29sZUFnZW50OjpzdGFydFRpbWluZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nJiBsYWJlCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAg
ICAvLyBGSVhNRTogU2VuZCBhbiBlbnVtIHRvIHRoZSBmcm9udGVuZCBmb3IgbG9jYWxpemF0aW9u
PwogICAgICAgICBTdHJpbmcgd2FybmluZyA9IG1ha2VTdHJpbmcoIlRpbWVyIFwiIiwgbGFiZWws
ICJcIiBhbHJlYWR5IGV4aXN0cyIpOwotICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKG1ha2VV
bmlxdWU8Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksIE1lc3NhZ2VU
eXBlOjpUaW1pbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgd2FybmluZywgY3JlYXRlU2NyaXB0
Q2FsbFN0YWNrRm9yQ29uc29sZShleGVjLCAxKSkpOworICAgICAgICBhZGRNZXNzYWdlVG9Db25z
b2xlKG1ha2VVbmlxdWU8Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEks
IE1lc3NhZ2VUeXBlOjpUaW1pbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgd2FybmluZywgY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrRm9yQ29uc29sZShnbG9iYWxPYmplY3QsIDEpKSk7CiAgICAgfQog
fQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6bG9nVGltaW5nKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3Vt
ZW50cykKK3ZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpsb2dUaW1pbmcoSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8U2NyaXB0QXJn
dW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKICAgICBpZiAoIW1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
Lmluc3BlY3RvckVudmlyb25tZW50KCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6
OmxvZ1RpbWluZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCwKICAg
ICBpZiAobGFiZWwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY2FsbFN0
YWNrID0gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9yQ29uc29sZShleGVjLCAxKTsKKyAgICBhdXRv
IGNhbGxTdGFjayA9IGNyZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUoZ2xvYmFsT2JqZWN0
LCAxKTsKIAogICAgIGF1dG8gaXQgPSBtX3RpbWVzLmZpbmQobGFiZWwpOwogICAgIGlmIChpdCA9
PSBtX3RpbWVzLmVuZCgpKSB7CkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmxvZ1RpbWluZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBs
YWJlbCwKICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKG1ha2VVbmlxdWU8Q29uc29sZU1lc3NhZ2U+
KE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksIE1lc3NhZ2VUeXBlOjpUaW1pbmcsIE1lc3NhZ2VM
ZXZlbDo6RGVidWcsIG1lc3NhZ2UsIFdURk1vdmUoYXJndW1lbnRzKSwgV1RGTW92ZShjYWxsU3Rh
Y2spKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzdG9wVGltaW5nKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsKQordm9pZCBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OnN0b3BUaW1pbmcoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBTdHJpbmcmIGxhYmVsKQogewogICAgIGlmICghbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
c3RvcFRpbWluZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbAogICAg
IGlmIChsYWJlbC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBjYWxsU3Rh
Y2sgPSBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGb3JDb25zb2xlKGV4ZWMsIDEpOworICAgIGF1dG8g
Y2FsbFN0YWNrID0gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9yQ29uc29sZShnbG9iYWxPYmplY3Qs
IDEpOwogCiAgICAgYXV0byBpdCA9IG1fdGltZXMuZmluZChsYWJlbCk7CiAgICAgaWYgKGl0ID09
IG1fdGltZXMuZW5kKCkpIHsKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6dGFrZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmIHRpdGxlKQogICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1wLCBzbmFwc2hvdERhdGEsIHRp
dGxlLmlzRW1wdHkoKSA/IG51bGxwdHIgOiAmdGl0bGUpOwogfQogCi12b2lkIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6Y291bnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFi
ZWwpCit2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y291bnQoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewogICAgIGlmICghbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaW5zcGVjdG9yRW52aXJvbm1lbnQoKS5kZXZlbG9wZXJFeHRyYXNF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyNiwxMCArMjI2LDEwIEBAIHZvaWQgSW5z
cGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3Ry
aW5nJiBsYWJlbCkKICAgICAvLyBGSVhNRTogV2ViIEluc3BlY3RvciBzaG91bGQgaGF2ZSBhIGJl
dHRlciBVSSBmb3IgY291bnRlcnMsIGJ1dCBmb3Igbm93IHdlIGp1c3QgbG9nIGFuIHVwZGF0ZWQg
Y291bnRlciB2YWx1ZS4KIAogICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZyhsYWJlbCwg
IjogIiwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgYWRkTWVzc2FnZVRvQ29uc29sZSht
YWtlVW5pcXVlPENvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCBNZXNz
YWdlVHlwZTo6TG9nLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCBtZXNzYWdlLCBjcmVhdGVTY3JpcHRD
YWxsU3RhY2tGb3JDb25zb2xlKGV4ZWMsIDEpKSk7CisgICAgYWRkTWVzc2FnZVRvQ29uc29sZSht
YWtlVW5pcXVlPENvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCBNZXNz
YWdlVHlwZTo6TG9nLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCBtZXNzYWdlLCBjcmVhdGVTY3JpcHRD
YWxsU3RhY2tGb3JDb25zb2xlKGdsb2JhbE9iamVjdCwgMSkpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OmNvdW50UmVzZXQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0
cmluZyYgbGFiZWwpCit2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y291bnRSZXNldChKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7CiAg
ICAgaWYgKCFtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmRl
dmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM4LDcgKzIzOCw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudFJlc2V0KEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsCiAgICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgp
KSB7CiAgICAgICAgIC8vIEZJWE1FOiBTZW5kIGFuIGVudW0gdG8gdGhlIGZyb250ZW5kIGZvciBs
b2NhbGl6YXRpb24/CiAgICAgICAgIFN0cmluZyB3YXJuaW5nID0gbWFrZVN0cmluZygiQ291bnRl
ciBcIiIsIGxhYmVsLCAiXCIgZG9lcyBub3QgZXhpc3QiKTsKLSAgICAgICAgYWRkTWVzc2FnZVRv
Q29uc29sZShtYWtlVW5pcXVlPENvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpDb25zb2xl
QVBJLCBNZXNzYWdlVHlwZTo6TG9nLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIHdhcm5pbmcsIGNy
ZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUoZXhlYywgMSkpKTsKKyAgICAgICAgYWRkTWVz
c2FnZVRvQ29uc29sZShtYWtlVW5pcXVlPENvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpD
b25zb2xlQVBJLCBNZXNzYWdlVHlwZTo6TG9nLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIHdhcm5p
bmcsIGNyZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNvbnNvbGUoZ2xvYmFsT2JqZWN0LCAxKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCmluZGV4
IGQzNTEwMDBlYWUyMjNjN2U3M2YzYThiNmFlYTY5NTljYjk5YzkxNTEuLjBkMTA2MDk3ZWIyNjM2
MWZjYjA3NmYzY2U0OTJiZDk1ZDg5ZmZjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5o
CkBAIC0zNyw3ICszNyw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbEZyYW1lOwot
dXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogfQogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
QEAgLTc1LDEyICs3NCwxMiBAQCBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JDb25z
b2xlQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaQogCiAgICAgdm9pZCBh
ZGRNZXNzYWdlVG9Db25zb2xlKHN0ZDo6dW5pcXVlX3B0cjxDb25zb2xlTWVzc2FnZT4pOwogCi0g
ICAgdm9pZCBzdGFydFRpbWluZyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgbGFiZWwp
OwotICAgIHZvaWQgbG9nVGltaW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJl
bCwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJik7Ci0gICAgdm9pZCBzdG9wVGltaW5nKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgdm9pZCBzdGFydFRpbWluZyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgdm9pZCBsb2dUaW1p
bmcoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFJlZjxTY3JpcHRB
cmd1bWVudHM+JiYpOworICAgIHZvaWQgc3RvcFRpbWluZyhKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJiBsYWJlbCk7CiAgICAgdm9pZCB0YWtlSGVhcFNuYXBzaG90KGNvbnN0IFN0
cmluZyYgdGl0bGUpOwotICAgIHZvaWQgY291bnQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmIGxhYmVsKTsKLSAgICB2b2lkIGNvdW50UmVzZXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIGxhYmVsKTsKKyAgICB2b2lkIGNvdW50KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTdHJpbmcmIGxhYmVsKTsKKyAgICB2b2lkIGNvdW50UmVzZXQoSlNDOjpKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhZGRDb25z
b2xlTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8Q29uc29sZU1lc3NhZ2U+KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggOWM4YzIxYmNmMjA0ODIyYzE4MmRhYTFjY2U0MTU0
M2JlZDAzNDk1Mi4uYjQwZThhM2I0NmU1MWVjYTM3NDU3NDA0ODBkYTFhNDYyMWY5YzA5ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpBc3luY0NhbGxJZGVudGlmaWVyIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmFzeW5jQ2FsbElkZQogICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oYXN5bmNDYWxsVHlwZSksIGNhbGxiYWNrSWQpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFNjaGVkdWxlQXN5bmNDYWxsKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBBc3luY0NhbGxUeXBlIGFzeW5jQ2FsbFR5cGUsIGludCBjYWxsYmFja0lkLCBib29sIHNp
bmdsZVNob3QpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFNjaGVkdWxlQXN5bmND
YWxsKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXN5bmNDYWxsVHlwZSBhc3lu
Y0NhbGxUeXBlLCBpbnQgY2FsbGJhY2tJZCwgYm9vbCBzaW5nbGVTaG90KQogewogICAgIGlmICgh
bV9hc3luY1N0YWNrVHJhY2VEZXB0aCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYwLDcgKzI2MCw3
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkU2NoZWR1bGVBc3luY0NhbGwoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEFzeW5jQ2FsCiAgICAgaWYgKCFtX3NjcmlwdERlYnVnU2VydmVy
LmJyZWFrcG9pbnRzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZjxTY3JpcHRD
YWxsU3RhY2s+IGNhbGxTdGFjayA9IGNyZWF0ZVNjcmlwdENhbGxTdGFjayhleGVjLCBtX2FzeW5j
U3RhY2tUcmFjZURlcHRoKTsKKyAgICBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2sgPSBj
cmVhdGVTY3JpcHRDYWxsU3RhY2soZ2xvYmFsT2JqZWN0LCBtX2FzeW5jU3RhY2tUcmFjZURlcHRo
KTsKICAgICBBU1NFUlQoY2FsbFN0YWNrLT5zaXplKCkpOwogICAgIGlmICghY2FsbFN0YWNrLT5z
aXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc1Nyw3ICs3NTcsNyBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKEVycm9yU3RyaW5nJikKIAogdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZXN1bWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogewotICAgIGlmICgh
bV9wYXVzZWRTY3JpcHRTdGF0ZSAmJiAhbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpIHsKKyAg
ICBpZiAoIW1fcGF1c2VkR2xvYmFsT2JqZWN0ICYmICFtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxl
ZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGJlIHBhdXNlZCBvciB3YWl0aW5nIHRv
IHBhdXNlIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA2MywxMyArMTA2MywxMyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFJ1bk1pY3JvdGFzaygpCiAgICAgICAg
IGNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGlkUGF1c2UoSlNDOjpFeGVjU3RhdGUmIHNjcmlwdFN0YXRlLCBKU0M6OkpTVmFs
dWUgY2FsbEZyYW1lcywgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbk9yQ2F1Z2h0VmFsdWUpCit2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIEpTQzo6SlNWYWx1ZSBleGNlcHRp
b25PckNhdWdodFZhbHVlKQogewotICAgIEFTU0VSVCghbV9wYXVzZWRTY3JpcHRTdGF0ZSk7Ci0g
ICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9ICZzY3JpcHRTdGF0ZTsKLSAgICBtX2N1cnJlbnRDYWxs
U3RhY2sgPSB7IHNjcmlwdFN0YXRlLnZtKCksIGNhbGxGcmFtZXMgfTsKKyAgICBBU1NFUlQoIW1f
cGF1c2VkR2xvYmFsT2JqZWN0KTsKKyAgICBtX3BhdXNlZEdsb2JhbE9iamVjdCA9IGdsb2JhbE9i
amVjdDsKKyAgICBtX2N1cnJlbnRDYWxsU3RhY2sgPSB7IGdsb2JhbE9iamVjdC0+dm0oKSwgY2Fs
bEZyYW1lcyB9OwogCi0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcigmc2NyaXB0U3RhdGUpOworICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5q
ZWN0ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKIAogICAgIC8vIElmIGEgaGlnaCBsZXZlbCBw
YXVzZSBwYXVzZSByZWFzb24gaXMgbm90IGFscmVhZHkgc2V0LCB0cnkgdG8gaW5mZXIgYSByZWFz
b24gZnJvbSB0aGUgZGVidWdnZXIuCiAgICAgaWYgKG1fcGF1c2VSZWFzb24gPT0gRGVidWdnZXJG
cm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6T3RoZXIpIHsKQEAgLTExNjMsOSArMTE2Myw5IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvblNvdW5kKGludCBi
cmVha3BvaW50QWN0aW9uSWRlbnRpZmllCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnBsYXlC
cmVha3BvaW50QWN0aW9uU291bmQoYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkV4
ZWNTdGF0ZSYgc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlv
biwgdW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIEpTQzo6SlNWYWx1ZSBzYW1w
bGUpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRB
Y3Rpb24mIGFjdGlvbiwgdW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIEpTQzo6
SlNWYWx1ZSBzYW1wbGUpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBt
X2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcigmc2NyaXB0U3RhdGUpOwor
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHBheWxvYWQgPSBp
bmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHNhbXBsZSwgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50
QWN0aW9uKGFjdGlvbiksIHRydWUpOwogICAgIGF1dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkRlYnVn
Z2VyOjpQcm9iZVNhbXBsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFByb2JlSWQoYWN0aW9uLmlk
ZW50aWZpZXIpCkBAIC0xMTg0LDcgKzExODQsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZENvbnRpbnVlKCkKICAgICAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5zcGVj
dG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2goKS0+c3RhcnQoKTsKICAgICB9CiAK
LSAgICBtX3BhdXNlZFNjcmlwdFN0YXRlID0gbnVsbHB0cjsKKyAgICBtX3BhdXNlZEdsb2JhbE9i
amVjdCA9IG51bGxwdHI7CiAgICAgbV9jdXJyZW50Q2FsbFN0YWNrID0geyB9OwogICAgIG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLnJlbGVhc2VPYmplY3RHcm91cChJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCk7CiAgICAgY2xlYXJQYXVzZURldGFpbHMoKTsKQEAg
LTEyMjEsNyArMTIyMSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJEZWJ1
Z2dlckJyZWFrcG9pbnRTdGF0ZSgpCiAgICAgICAgIG1fc2NyaXB0RGVidWdTZXJ2ZXIuY2xlYXJC
bGFja2JveCgpOwogICAgIH0KIAotICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSBudWxscHRyOwor
ICAgIG1fcGF1c2VkR2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKICAgICBtX2N1cnJlbnRDYWxsU3Rh
Y2sgPSB7IH07CiAgICAgbV9zY3JpcHRzLmNsZWFyKCk7CiAgICAgbV9icmVha3BvaW50SWRlbnRp
ZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLmNsZWFyKCk7CkBAIC0xMjUwLDcgKzEyNTAs
NyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENsZWFyR2xvYmFsT2JqZWN0KCkK
IAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nKQogewotICAgIGlmICghbV9wYXVzZWRTY3JpcHRTdGF0ZSkgeworICAgIGlm
ICghbV9wYXVzZWRHbG9iYWxPYmplY3QpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTXVzdCBi
ZSBwYXVzZWQiX3M7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmgKaW5kZXggN2U4NzI3NjY2YjE2NDAxNTU1YzA3MTY2YWE2MGZlNzQwY2Fm
NTlhMi4uYjZlMDk3MzE5YTNjNzg1ZjE0MGFlZjZjYzI1MjU1NzU3YTNhMmE4OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtOTIsMTAgKzkyLDEwIEBAIGNsYXNzIEpTX0VYUE9S
VF9QUklWQVRFIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRC
YXNlLCBwdWJsCiAgICAgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBmaW5hbDsKICAgICB2b2lkIHdpbGxSdW5NaWNyb3Rhc2so
KSBmaW5hbDsKICAgICB2b2lkIGRpZFJ1bk1pY3JvdGFzaygpIGZpbmFsOwotICAgIHZvaWQgZGlk
UGF1c2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgSlNDOjpKU1Zh
bHVlIGV4Y2VwdGlvbk9yQ2F1Z2h0VmFsdWUpIGZpbmFsOworICAgIHZvaWQgZGlkUGF1c2UoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBKU0M6OkpTVmFsdWUg
ZXhjZXB0aW9uT3JDYXVnaHRWYWx1ZSkgZmluYWw7CiAgICAgdm9pZCBkaWRDb250aW51ZSgpIGZp
bmFsOwogICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblNvdW5kKGludCBicmVha3BvaW50QWN0aW9u
SWRlbnRpZmllcikgZmluYWw7Ci0gICAgdm9pZCBicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpF
eGVjU3RhdGUmLCBjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiwgdW5zaWduZWQgYmF0Y2hJ
ZCwgdW5zaWduZWQgc2FtcGxlSWQsIEpTQzo6SlNWYWx1ZSBzYW1wbGUpIGZpbmFsOworICAgIHZv
aWQgYnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTY3Jp
cHRCcmVha3BvaW50QWN0aW9uJiwgdW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQs
IEpTQzo6SlNWYWx1ZSBzYW1wbGUpIGZpbmFsOwogCiAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0
OwogICAgIGJvb2wgYnJlYWtwb2ludHNBY3RpdmUoKSBjb25zdDsKQEAgLTExMSw3ICsxMTEsNyBA
QCBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGlj
IEluc3BlY3RvckFnZW50QmFzZSwgcHVibAogICAgICAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUs
CiAgICAgfTsKIAotICAgIHZvaWQgZGlkU2NoZWR1bGVBc3luY0NhbGwoSlNDOjpFeGVjU3RhdGUq
LCBBc3luY0NhbGxUeXBlLCBpbnQgY2FsbGJhY2tJZCwgYm9vbCBzaW5nbGVTaG90KTsKKyAgICB2
b2lkIGRpZFNjaGVkdWxlQXN5bmNDYWxsKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBBc3luY0NhbGxU
eXBlLCBpbnQgY2FsbGJhY2tJZCwgYm9vbCBzaW5nbGVTaG90KTsKICAgICB2b2lkIGRpZENhbmNl
bEFzeW5jQ2FsbChBc3luY0NhbGxUeXBlLCBpbnQgY2FsbGJhY2tJZCk7CiAgICAgdm9pZCB3aWxs
RGlzcGF0Y2hBc3luY0NhbGwoQXN5bmNDYWxsVHlwZSwgaW50IGNhbGxiYWNrSWQpOwogICAgIHZv
aWQgZGlkRGlzcGF0Y2hBc3luY0NhbGwoKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckFn
ZW50QmFzZSwgcHVibAogCiAgICAgSGFzaFNldDxMaXN0ZW5lcio+IG1fbGlzdGVuZXJzOwogCi0g
ICAgSlNDOjpFeGVjU3RhdGUqIG1fcGF1c2VkU2NyaXB0U3RhdGUgeyBudWxscHRyIH07CisgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCogbV9wYXVzZWRHbG9iYWxPYmplY3QgeyBudWxscHRyIH07CiAg
ICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRDYWxsU3RhY2s7CiAKICAgICBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPEpTQzo6QnJlYWtwb2ludElEPj4gbV9icmVha3BvaW50SWRl
bnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5j
cHAKaW5kZXggMzQ4OGIxYTc4ZWY4OWI1MmE5NjExMmIzZWEwZDY2NDBjNjFhODA5ZC4uMTE1ZWM2
OTNmZDUxNzVkMWM5NzNlMTljN2Q5NmI1YzU3YzZhOGFkZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdl
bnQuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBz
aG90KEVycm9yU3RyaW5nJiwgZG91YmxlKiB0aW1lc3RhbXAsIFN0cmluZyogc25hcHMKICAgICAq
c25hcHNob3REYXRhID0gc25hcHNob3RCdWlsZGVyLmpzb24oWyZdIChjb25zdCBIZWFwU25hcHNo
b3ROb2RlJiBub2RlKSB7CiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUu
Y2VsbC0+c3RydWN0dXJlKHZtKSkgewogICAgICAgICAgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtX2Vudmlyb25tZW50LmNhbkFjY2Vzc0luc3BlY3RlZFNjcmlwdFN0YXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKSkKKyAgICAgICAgICAgICAgICBpZiAoIW1fZW52aXJvbm1l
bnQuY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoZ2xvYmFsT2JqZWN0KSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0y
MDYsNyArMjA2LDcgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFByZXZpZXcoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjdElkLAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7
CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwogICAgIGlmIChpbmplY3RlZFNj
cmlwdC5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdl
dCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2NyaXB0Il9zOwogICAgICAgICByZXR1cm47CkBA
IC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFJlbW90ZU9iamVj
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBoZWFwT2JqZWMKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCkpOworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoaW5qZWN0
ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0
byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfczsKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5jcHAKaW5kZXggN2I5MzRjNWZkMGNk
ZTM1MzEyYTNhZmRjM2FkZjkwYTFiYmE3MzhkMi4uZmU1NzY1YmQ0MDRlMWEwMDExMzE4OTQ0Zjg1
YjJmZDE3NWFkODk2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCkBA
IC01Myw4ICs1Myw3IEBAIEluamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudDo6
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvCiAgICAgICAgIHJldHVybiBJ
bmplY3RlZFNjcmlwdCgpOwogICAgIH0KIAotICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSA9IG1fZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMoKTsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKHNj
cmlwdFN0YXRlKTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVk
U2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKCZtX2dsb2JhbE9iamVjdCk7CiAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
SW50ZXJuYWwgZXJyb3I6IG1haW4gd29ybGQgZXhlY3V0aW9uIGNvbnRleHQgbm90IGZvdW5kIl9z
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcAppbmRleCAyMTNl
OGQ5ZmZlZTljZjVjMWY1NzdkZGY1NmM4ZTdmMDJkMjBhZTRiLi5kNTU2ZTRhMTYxYjI4YzJkMzQ0
YzM5Y2M3ZjczM2RhMTEwM2QyM2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdn
ZXJBZ2VudC5jcHAKQEAgLTU0LDEzICs1NCwxMyBAQCBJbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9i
amVjdERlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZQog
ICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKICAgICB9CiAKLSAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyJj4oc2Ny
aXB0RGVidWdTZXJ2ZXIoKSkuZ2xvYmFsT2JqZWN0KCkuZ2xvYmFsRXhlYygpOwotICAgIHJldHVy
biBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihleGVjKTsKKyAgICBK
U0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3RT
Y3JpcHREZWJ1Z1NlcnZlciY+KHNjcmlwdERlYnVnU2VydmVyKCkpLmdsb2JhbE9iamVjdCgpOwor
ICAgIHJldHVybiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcigmZ2xv
YmFsT2JqZWN0KTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6OmJyZWFr
cG9pbnRBY3Rpb25Mb2coSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit2b2lkIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbkxv
ZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKIHsKLSAgICBtX2NvbnNvbGVBZ2VudC0+YWRkTWVzc2FnZVRvQ29uc29sZShtYWtlVW5pcXVl
PENvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZVR5cGU6OkxvZywgTWVz
c2FnZUxldmVsOjpMb2csIG1lc3NhZ2UsIGNyZWF0ZVNjcmlwdENhbGxTdGFjaygmc3RhdGUpLCAw
KSk7CisgICAgbV9jb25zb2xlQWdlbnQtPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWFrZVVuaXF1ZTxD
b25zb2xlTWVzc2FnZT4oTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VUeXBlOjpMb2csIE1lc3Nh
Z2VMZXZlbDo6TG9nLCBtZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxsU3RhY2soZ2xvYmFsT2JqZWN0
KSwgMCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxP
YmplY3REZWJ1Z2dlckFnZW50LmgKaW5kZXggMzU0NWYxODViZjNhYTI1OGQ3M2JjMTEyYTZjYmU4
ZjAyMTgwZjcyYy4uZDc2MDU3MTM3NTVmYTc4Yzk0ZGExMzIxZmRlZmI4ODc3NzczMjJmMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxP
YmplY3REZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmgKQEAgLTM5LDcgKzM5LDcgQEAg
Y2xhc3MgSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQgewogICAgIH5KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSBvdmVy
cmlkZTsKIAogICAgIC8vIFNjcmlwdERlYnVnTGlzdGVuZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRB
Y3Rpb25Mb2coSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBv
dmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAppbmRleCA4
ZjFiNGQxMjYyN2ZlNTdmMDM5MGI5ZTYwMGM3MjhjNzk3ZGIxODVmLi44NzdhY2Y3NjNhZGNiMTNk
NzlmNzBjNjdhNDg2OGQ2ZWM4NDYyZjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50
aW1lQWdlbnQuY3BwCkBAIC00OCw4ICs0OCw3IEBAIEluamVjdGVkU2NyaXB0IEpTR2xvYmFsT2Jq
ZWN0UnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVyCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChleGVjdXRpb25Db250ZXh0SWQsICFleGVjdXRpb25Db250ZXh0
SWQpOwogCi0gICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gbV9nbG9iYWxPYmplY3Qu
Z2xvYmFsRXhlYygpOwotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOworICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5q
ZWN0ZWRTY3JpcHRGb3IoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQu
aGFzTm9WYWx1ZSgpKQogICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV4ZWN1dGlvbiBj
b250ZXh0IGZvciBnaXZlbiBleGVjdXRpb25Db250ZXh0SWQuIl9zOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5jcHAKaW5kZXggZTUzMDExNGE4
NTllNzI3ZTA4OTFkYTk1MjdhODc0NGJhZWIwMGFkMi4uNmQ3ZmNlYWViN2ZiYjQ3OWI0OTBiNzFl
ZmUwY2Y0NzcyY2EzYWVkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0Fic3RyYWN0UEMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9BYnN0cmFjdFBDLmNwcApAQCAtMzMsMTQgKzMzLDE0IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1BYnN0cmFjdFBDOjpBYnN0cmFjdFBDKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorQWJz
dHJhY3RQQzo6QWJzdHJhY3RQQyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAg
IFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKFZNOjpjYW5V
c2VKSVQoKSkgewotICAgICAgICBtX3BvaW50ZXIgPSBleGVjLT5yZXR1cm5QQygpLnZhbHVlKCk7
CisgICAgICAgIG1fcG9pbnRlciA9IGNhbGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpOwogICAg
ICAgICBtX21vZGUgPSBKSVQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0UEMuaAppbmRleCA0MzU1YjIzNTRjYzQ5
NjA5OWM4ZGI1MmEzMmM2Nzg1ODU3OWVhMGQ4Li4zNTI3NTI0MTNmZjA5OTMwMzMxYzFjNmZjY2Mz
MzVkMThkMGQwZDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQWJzdHJhY3RQQy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9B
YnN0cmFjdFBDLmgKQEAgLTMxLDcgKzMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENh
bGxGcmFtZTsKIGNsYXNzIFZNOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogc3RydWN0
IEluc3RydWN0aW9uOwogCiBjbGFzcyBBYnN0cmFjdFBDIHsKQEAgLTQxLDcgKzQwLDcgQEAgY2xh
c3MgQWJzdHJhY3RQQyB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBBYnN0cmFjdFBDKFZNJiwg
RXhlY1N0YXRlKik7CisgICAgQWJzdHJhY3RQQyhWTSYsIENhbGxGcmFtZSopOwogICAgIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgQWJzdHJhY3RQQyhSZXR1cm5BZGRyZXNzUHRyIHB0cikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNoZWRDYWxsLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCmluZGV4IDgwZDc5
Nzc5NDQ0ODUxYWQ2ZDVmNjI5NzQ2NTVjNzVlZDFlOWI1N2YuLjAxZmQzYjlmMjEwY2UzM2Y5NWM1
NWI2ZDY0YjY1OTMwZWE5MDViYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWNoZWRDYWxsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhY2hlZENhbGwuaApAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkQ2FsbCk7CiAgICAgICAgIFdURl9GT1JC
SURfSEVBUF9BTExPQ0FUSU9OOwogICAgIHB1YmxpYzoKLSAgICAgICAgQ2FjaGVkQ2FsbChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIGludCBhcmd1bWVudENvdW50
KQorICAgICAgICBDYWNoZWRDYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgaW50IGFyZ3VtZW50Q291bnQp
CiAgICAgICAgICAgICA6IG1fdmFsaWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fdm0oY2FsbEZy
YW1lLT52bSgpKQorICAgICAgICAgICAgLCBtX3ZtKGdsb2JhbE9iamVjdC0+dm0oKSkKICAgICAg
ICAgICAgICwgbV9pbnRlcnByZXRlcihtX3ZtLmludGVycHJldGVyKQogICAgICAgICAgICAgLCBt
X2VudHJ5U2NvcGUobV92bSwgZnVuY3Rpb24tPnNjb3BlKCktPmdsb2JhbE9iamVjdChtX3ZtKSkK
ICAgICAgICAgewpAQCAtNTQsOSArNTQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
ICAgICBpZiAoTElLRUxZKCFtX2FyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAg
ICAgICAgICAgICBtX2Nsb3N1cmUgPSBtX2ludGVycHJldGVyLT5wcmVwYXJlRm9yUmVwZWF0Q2Fs
bChmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCksIGNhbGxGcmFtZSwgJm1fcHJvdG9DYWxsRnJhbWUs
IGZ1bmN0aW9uLCBhcmd1bWVudENvdW50ICsgMSwgZnVuY3Rpb24tPnNjb3BlKCksIG1fYXJndW1l
bnRzKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CiAgICAgICAgICAgICBtX3ZhbGlkID0gIXNjb3BlLmV4Y2VwdGlvbigpOwog
ICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmNwcAppbmRleCBhMzM4MzE2MzM5YTQ5OWUyNDkzYTdjOGY4NDhmYzAxMWMy
MTViOGUwLi5lMDE5ZDk5Zjc2Yjc3Yjk1NDkwOTRmY2NkYjVkMDcxOGI4Mzc2MmMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcApAQCAtMzgs
NyArMzgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBFeGVjU3RhdGU6OmluaXRHbG9i
YWxFeGVjKEV4ZWNTdGF0ZSogZ2xvYmFsRXhlYywgSlNDYWxsZWUqIGdsb2JhbENhbGxlZSkKK3Zv
aWQgQ2FsbEZyYW1lOjppbml0R2xvYmFsRXhlYyhDYWxsRnJhbWUqIGdsb2JhbEV4ZWMsIEpTQ2Fs
bGVlKiBnbG9iYWxDYWxsZWUpCiB7CiAgICAgZ2xvYmFsRXhlYy0+c2V0Q29kZUJsb2NrKG51bGxw
dHIpOwogICAgIGdsb2JhbEV4ZWMtPnNldENhbGxlckZyYW1lKG5vQ2FsbGVyKCkpOwpAQCAtMTkz
LDcgKzE5Myw3IEBAIEpTR2xvYmFsT2JqZWN0KiBDYWxsRnJhbWU6Ondhc21Bd2FyZUxleGljYWxH
bG9iYWxPYmplY3QoVk0mIHZtKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoIWNh
bGxlZSgpLmlzV2FzbSgpKQogICAgICAgICByZXR1cm4gbGV4aWNhbEdsb2JhbE9iamVjdCgpOwot
ICAgIHJldHVybiB2bS53YXNtQ29udGV4dC5sb2FkKCktPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0
YW5jZT4oKS0+Z2xvYmFsT2JqZWN0KHZtKTsKKyAgICByZXR1cm4gdm0ud2FzbUNvbnRleHQubG9h
ZCgpLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCktPmdsb2JhbE9iamVjdCgpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5k
ZXggZDAwYzNjOWI4Mjc3YzZiNzg0NWJkNTNmYzI0ZmUwN2MxNzIwYzQxMy4uOWNkMTY1ODgzZTBm
YzhlYjc5MjlhYzRjNjRmMTM2YjIxM2RlM2Q5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtNDEsOCArNDEsNiBAQCBuYW1lc3BhY2UgSlND
ICB7CiAKICAgICBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAKLSAgICB1c2luZyBFeGVjU3RhdGUgPSBD
YWxsRnJhbWU7Ci0KICAgICBjbGFzcyBDYWxsU2l0ZUluZGV4IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIENhbGxTaXRlSW5kZXgoKSA9IGRlZmF1bHQ7CkBAIC0xMzgsMTAgKzEzNiw2IEBAIG5hbWVz
cGFjZSBKU0MgIHsKICAgICAgICAgLy8gRGlmZmVycyBmcm9tIFZNOjp2bUVudHJ5R2xvYmFsT2Jq
ZWN0KCkgZHVyaW5nIGZ1bmN0aW9uIGNhbGxzIGFjcm9zcyB3ZWIgYnJvd3NlciBmcmFtZXMuCiAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KCkgY29uc3Q7CiAKLSAg
ICAgICAgLy8gRGlmZmVycyBmcm9tIGxleGljYWxHbG9iYWxPYmplY3QgYmVjYXVzZSB0aGlzIHdp
bGwgaGF2ZSBET00gd2luZG93IHNoZWxsIHJhdGhlciB0aGFuCi0gICAgICAgIC8vIHRoZSBhY3R1
YWwgRE9NIHdpbmRvdywgd2hpY2ggY2FuJ3QgYmUgInRoaXMiIGZvciBzZWN1cml0eSByZWFzb25z
LgotICAgICAgICBKU09iamVjdCogZ2xvYmFsVGhpc1ZhbHVlKCkgY29uc3Q7Ci0KICAgICAgICAg
Vk0mIHZtKCkgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIENhbGxGcmFtZSogY3JlYXRlKFJlZ2lz
dGVyKiBjYWxsRnJhbWVCYXNlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxDYWxsRnJhbWUqPihjYWxs
RnJhbWVCYXNlKTsgfQpAQCAtMzMzLDQgKzMyNywxMyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAg
ICAgIFNVUFBSRVNTX0FTQU4gY29uc3QgQ2FsbGVyRnJhbWVBbmRQQyYgdW5zYWZlQ2FsbGVyRnJh
bWVBbmRQQygpIGNvbnN0IHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IENhbGxlckZy
YW1lQW5kUEMqPih0aGlzKTsgfQogICAgIH07CiAKK1ZNJiBnZXRWTShKU0dsb2JhbE9iamVjdCop
OworCisjaWYgQ09NUElMRVIoTVNWQykKKyNkZWZpbmUgREVDTEFSRV9DQUxMX0ZSQU1FKHZtKSAo
KHZtKS50b3BDYWxsRnJhbWUpCisjZWxzZQorI2RlZmluZSBERUNMQVJFX0NBTExfRlJBTUUodm0p
IChiaXR3aXNlX2Nhc3Q8SlNDOjpDYWxsRnJhbWUqPihfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcygx
KSkpCisjZW5kaWYKKworCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGI2MDFkY2Y3MDNjZDll
YTRhM2I1M2U4OGJlZDhiM2M1MmQ0NWEzM2YuLjM5NGQ5NmEzZDdiNzkyNzdjYmNiMDVjZWZlOTNl
NmRlOTZhZTg4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcApAQCAtMTAxLDkgKzEwMSw5IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1KU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitKU1ZhbHVlIGV2YWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVk0m
IHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIWNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKQpAQCAtMTE0LDEyICsxMTQsMTEgQEAgSlNWYWx1ZSBl
dmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gcHJvZ3JhbTsKIAogICAg
IFRvcENhbGxGcmFtZVNldHRlciB0b3BDYWxsRnJhbWUodm0sIGNhbGxGcmFtZSk7Ci0gICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5ldmFsRW5hYmxlZCgpKSB7Ci0gICAgICAgIHRo
cm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIGNyZWF0ZUV2YWxFcnJvcihjYWxsRnJhbWUs
IGdsb2JhbE9iamVjdC0+ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKKyAgICAgICAgdGhy
b3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXZhbEVycm9yKGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgU3RyaW5nIHByb2dyYW1Tb3VyY2Ug
PSBhc1N0cmluZyhwcm9ncmFtKS0+dmFsdWUoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgcHJvZ3Jh
bVNvdXJjZSA9IGFzU3RyaW5nKHByb2dyYW0pLT52YWx1ZShnbG9iYWxPYmplY3QpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgCiAgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKQEAgLTE0OSwxMiArMTQ4
LDEyIEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAoIWV2YWwp
IHsKICAgICAgICAgaWYgKCFjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAg
ICAgICAgICBpZiAocHJvZ3JhbVNvdXJjZS5pczhCaXQoKSkgewotICAgICAgICAgICAgICAgIExp
dGVyYWxQYXJzZXI8TENoYXI+IHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hh
cmFjdGVyczgoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTm9uU3RyaWN0SlNPTik7CisgICAg
ICAgICAgICAgICAgTGl0ZXJhbFBhcnNlcjxMQ2hhcj4gcHJlcGFyc2VyKGdsb2JhbE9iamVjdCwg
cHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJzOCgpLCBwcm9ncmFtU291cmNlLmxlbmd0aCgpLCBOb25T
dHJpY3RKU09OLCBjYWxsZXJDb2RlQmxvY2spOwogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVl
IHBhcnNlZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRlcmFsUGFyc2UoKSkKICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwYXJzZWRPYmplY3QpOwogCiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExpdGVyYWxQYXJzZXI8VUNoYXI+IHBy
ZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVyczE2KCksIHByb2dyYW1T
b3VyY2UubGVuZ3RoKCksIE5vblN0cmljdEpTT04pOworICAgICAgICAgICAgICAgIExpdGVyYWxQ
YXJzZXI8VUNoYXI+IHByZXBhcnNlcihnbG9iYWxPYmplY3QsIHByb2dyYW1Tb3VyY2UuY2hhcmFj
dGVyczE2KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIE5vblN0cmljdEpTT04sIGNhbGxlckNv
ZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0gcHJl
cGFyc2VyLnRyeUxpdGVyYWxQYXJzZSgpKQogICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHBhcnNlZE9iamVjdCk7CiAKQEAgLTE2NCwyMCArMTYzLDIwIEBAIEpT
VmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgCiAgICAgICAgIFZhcmlh
YmxlRW52aXJvbm1lbnQgdmFyaWFibGVzVW5kZXJURFo7CiAgICAgICAgIEpTU2NvcGU6OmNvbGxl
Y3RDbG9zdXJlVmFyaWFibGVzVW5kZXJURFooY2FsbGVyU2NvcGVDaGFpbiwgdmFyaWFibGVzVW5k
ZXJURFopOwotICAgICAgICBldmFsID0gRGlyZWN0RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShjYWxs
RnJhbWUsIG1ha2VTb3VyY2UocHJvZ3JhbVNvdXJjZSwgY2FsbGVyQ29kZUJsb2NrLT5zb3VyY2Uo
KS5wcm92aWRlcigpLT5zb3VyY2VPcmlnaW4oKSksIGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RN
b2RlKCksIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgZXZhbENv
bnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgICAgICBldmFsID0gRGlyZWN0RXZh
bEV4ZWN1dGFibGU6OmNyZWF0ZShnbG9iYWxPYmplY3QsIG1ha2VTb3VyY2UocHJvZ3JhbVNvdXJj
ZSwgY2FsbGVyQ29kZUJsb2NrLT5zb3VyY2UoKS5wcm92aWRlcigpLT5zb3VyY2VPcmlnaW4oKSks
IGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNB
cnJvd0Z1bmN0aW9uQ29udGV4dCwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFop
OwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIWV2YWwp
OwogICAgICAgICBpZiAoIWV2YWwpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAotICAgICAgICBjYWxsZXJDb2RlQmxvY2stPmRpcmVjdEV2YWxDb2RlQ2FjaGUoKS5zZXQoY2Fs
bEZyYW1lLCBjYWxsZXJDb2RlQmxvY2ssIHByb2dyYW1Tb3VyY2UsIGNhbGxlckNhbGxTaXRlSW5k
ZXgsIGV2YWwpOworICAgICAgICBjYWxsZXJDb2RlQmxvY2stPmRpcmVjdEV2YWxDb2RlQ2FjaGUo
KS5zZXQoZ2xvYmFsT2JqZWN0LCBjYWxsZXJDb2RlQmxvY2ssIHByb2dyYW1Tb3VyY2UsIGNhbGxl
ckNhbGxTaXRlSW5kZXgsIGV2YWwpOwogICAgIH0KIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
Y2FsbGVyRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IHZtLmludGVycHJldGVyOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaW50ZXJwcmV0
ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4p
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGludGVycHJldGVyLT5leGVjdXRlKGV2
YWwsIGdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNoYWluKSk7CiB9CiAKLXVu
c2lnbmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJndW1l
bnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKK3Vuc2lnbmVkIHNpemVPZlZhcmFyZ3Mo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKIHsKICAgICBWTSYgdm0g
PSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwpAQCAtMTg2LDcgKzE4NSw3IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhCiAgICAgICAg
IGlmIChhcmd1bWVudHMuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBzY29wZSwgY3Jl
YXRlSW52YWxpZEZ1bmN0aW9uQXBwbHlQYXJhbWV0ZXJFcnJvcihjYWxsRnJhbWUsIGFyZ3VtZW50
cykpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVJ
bnZhbGlkRnVuY3Rpb25BcHBseVBhcmFtZXRlckVycm9yKGdsb2JhbE9iamVjdCwgYXJndW1lbnRz
KSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKQEAgLTE5NCwxMCArMTkzLDEwIEBA
IHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYXJn
dW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhCiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIHN3aXRj
aCAoY2VsbC0+dHlwZSgpKSB7CiAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNUeXBlOgotICAgICAg
ICBsZW5ndGggPSBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmxlbmd0aChjYWxsRnJh
bWUpOworICAgICAgICBsZW5ndGggPSBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCktPmxl
bmd0aChnbG9iYWxPYmplY3QpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNjb3BlZEFyZ3Vt
ZW50c1R5cGU6Ci0gICAgICAgIGxlbmd0aCA9IGpzQ2FzdDxTY29wZWRBcmd1bWVudHMqPihjZWxs
KS0+bGVuZ3RoKGNhbGxGcmFtZSk7CisgICAgICAgIGxlbmd0aCA9IGpzQ2FzdDxTY29wZWRBcmd1
bWVudHMqPihjZWxsKS0+bGVuZ3RoKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSlNGaXhlZEFycmF5VHlwZToKICAgICAgICAgbGVuZ3RoID0ganNDYXN0PEpTRml4ZWRB
cnJheSo+KGNlbGwpLT5zaXplKCk7CkBAIC0yMDgsMTIgKzIwNywxMiBAQCB1bnNpZ25lZCBzaXpl
T2ZWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMy
X3QgZmlyc3RWYQogICAgIGNhc2UgU3RyaW5nVHlwZToKICAgICBjYXNlIFN5bWJvbFR5cGU6CiAg
ICAgY2FzZSBCaWdJbnRUeXBlOgotICAgICAgICB0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHNj
b3BlLCBjcmVhdGVJbnZhbGlkRnVuY3Rpb25BcHBseVBhcmFtZXRlckVycm9yKGNhbGxGcmFtZSwg
IGFyZ3VtZW50cykpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3Bl
LCBjcmVhdGVJbnZhbGlkRnVuY3Rpb25BcHBseVBhcmFtZXRlckVycm9yKGdsb2JhbE9iamVjdCwg
IGFyZ3VtZW50cykpOwogICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRzLmlzT2JqZWN0KCkpOwotICAgICAgICBs
ZW5ndGggPSBjbGFtcFRvVW5zaWduZWQodG9MZW5ndGgoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKSkpOworICAgICAgICBsZW5ndGggPSBjbGFtcFRvVW5zaWduZWQodG9MZW5ndGgo
Z2xvYmFsT2JqZWN0LCBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKSkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CkBAIC0yMjYsNzMgKzIy
NSw3MyBAQCB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Zh
bHVlIGFyZ3VtZW50cywgdWludDMyX3QgZmlyc3RWYQogICAgIHJldHVybiBsZW5ndGg7CiB9CiAK
LXVuc2lnbmVkIHNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHMoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFZNJiB2bSwgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMpCit1bnNpZ25lZCBzaXplRnJh
bWVGb3JGb3J3YXJkQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBWTSYgdm0sIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzKQogewog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwogICAgIENhbGxGcmFtZSogY2Fs
bGVlRnJhbWUgPSBjYWxsZWVGcmFtZUZvclZhcmFyZ3MoY2FsbEZyYW1lLCBudW1Vc2VkU3RhY2tT
bG90cywgbGVuZ3RoICsgMSk7CiAgICAgaWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFja0NhcGFj
aXR5Rm9yKGNhbGxlZUZyYW1lLT5yZWdpc3RlcnMoKSkpKQotICAgICAgICB0aHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi11
bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWTSYgdm0s
IEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3Qg
Zmlyc3RWYXJBcmdPZmZzZXQpCit1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWTSYgdm0sIEpTVmFs
dWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RW
YXJBcmdPZmZzZXQpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc2l6ZU9mVmFyYXJncyhjYWxsRnJhbWUsIGFyZ3Vt
ZW50cywgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNpemVPZlZh
cmFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGFyZ3VtZW50cywgZmlyc3RWYXJBcmdPZmZz
ZXQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogCiAgICAgQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSA9IGNhbGxlZUZyYW1lRm9yVmFyYXJncyhjYWxsRnJhbWUsIG51bVVzZWRT
dGFja1Nsb3RzLCBsZW5ndGggKyAxKTsKICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gbWF4QXJn
dW1lbnRzIHx8ICF2bS5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKGNhbGxlZUZyYW1lLT5yZWdpc3Rl
cnMoKSkpKSB7Ci0gICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSwgc2Nv
cGUpOworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAgIHJldHVybiBsZW5ndGg7CiB9
CiAKLXZvaWQgbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1
aW50MzJfdCBsZW5ndGgpCit2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3Ro
KQogewogICAgIGlmIChVTkxJS0VMWSghYXJndW1lbnRzLmlzQ2VsbCgpKSB8fCAhbGVuZ3RoKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU0NlbGwqIGNlbGwgPSBhcmd1bWVudHMuYXNDZWxsKCk7CiAKICAg
ICBzd2l0Y2ggKGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToK
ICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRz
Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9m
ZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5j
b3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3Qs
IG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2NvcGVkQXJndW1l
bnRzVHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8U2NvcGVk
QXJndW1lbnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhjYWxsRnJhbWUsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+
KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNG
aXhlZEFycmF5VHlwZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8
SlNGaXhlZEFycmF5Kj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhjYWxsRnJhbWUsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PEpTRml4ZWRBcnJheSo+
KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxl
bWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJ
bW11dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAg
IGpzQ2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoY2Fs
bEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2Fz
dDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAg
ICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNP
YmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihj
ZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpKSB7CiAgICAgICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlU
b0FyZ3VtZW50cyhjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KS0+Y29weVRvQXJndW1lbnRzKGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsKICAg
ICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVpY2ts
eShpICsgb2Zmc2V0KTsgKytpKQogICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVu
dERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAg
ICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
b2JqZWN0LT5nZXQoY2FsbEZyYW1lLCBpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGkgKyBvZmZzZXQpOwogICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB2YWx1ZTsKICAgICAgICAgfQpAQCAtMzAw
LDExICsyOTksMTIgQEAgdm9pZCBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmly
dHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUKICAgICB9IH0KIH0KIAotdm9p
ZCBzZXR1cFZhcmFyZ3NGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbEZyYW1lKiBuZXdD
YWxsRnJhbWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxl
bmd0aCkKK3ZvaWQgc2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lLCBKU1ZhbHVl
IGFyZ3VtZW50cywgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpCiB7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGNhbGxlZUZyYW1lT2Zmc2V0KG5ld0NhbGxGcmFtZSAtIGNhbGxGcmFtZSk7
CiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCisgICAgICAgIGdsb2JhbE9iamVjdCwKICAgICAgICAg
Y2FsbEZyYW1lLAogICAgICAgICBjYWxsZWVGcmFtZU9mZnNldCArIENhbGxGcmFtZTo6YXJndW1l
bnRPZmZzZXQoMCksCiAgICAgICAgIGFyZ3VtZW50cywgb2Zmc2V0LCBsZW5ndGgpOwpAQCAtMzEy
LDEzICszMTIsMTMgQEAgdm9pZCBzZXR1cFZhcmFyZ3NGcmFtZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUsIEpTVmFsdWUgYXIKICAgICBuZXdDYWxsRnJhbWUt
PnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGxlbmd0aCArIDEpOwogfQogCi12b2lkIHNl
dHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbEZyYW1l
KiBuZXdDYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWlu
dDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKK3ZvaWQgc2V0dXBWYXJh
cmdzRnJhbWVBbmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3Qg
bGVuZ3RoKQogewotICAgIHNldHVwVmFyYXJnc0ZyYW1lKGNhbGxGcmFtZSwgbmV3Q2FsbEZyYW1l
LCBhcmd1bWVudHMsIGZpcnN0VmFyQXJnT2Zmc2V0LCBsZW5ndGgpOworICAgIHNldHVwVmFyYXJn
c0ZyYW1lKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBuZXdDYWxsRnJhbWUsIGFyZ3VtZW50cywg
Zmlyc3RWYXJBcmdPZmZzZXQsIGxlbmd0aCk7CiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRUaGlzVmFs
dWUodGhpc1ZhbHVlKTsKIH0KIAotdm9pZCBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShDYWxs
RnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgdWludDMyX3QgbGVuZ3Ro
KQordm9pZCBzZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCB1aW50MzJfdCBsZW5ndGgp
CiB7CiAgICAgQVNTRVJUKGxlbmd0aCA9PSBleGVjQ2FsbGVyLT5hcmd1bWVudENvdW50KCkpOwog
ICAgIHVuc2lnbmVkIG9mZnNldCA9IGV4ZWNDYWxsZXItPmFyZ3VtZW50T2Zmc2V0KDApICogc2l6
ZW9mKFJlZ2lzdGVyKTsKQEAgLTMyNiw5ICszMjYsOSBAQCB2b2lkIHNldHVwRm9yd2FyZEFyZ3Vt
ZW50c0ZyYW1lKENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCB1
aQogICAgIGV4ZWNDYWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGxlbmd0aCAr
IDEpOwogfQogCi12b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lQW5kU2V0VGhpcyhDYWxs
RnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIHVpbnQzMl90IGxlbmd0aCkKK3ZvaWQgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRT
ZXRUaGlzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogZXhlY0NhbGxl
ciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgdWludDMyX3QgbGVu
Z3RoKQogewotICAgIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKGV4ZWNDYWxsZXIsIGV4ZWND
YWxsZWUsIGxlbmd0aCk7CisgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUoZ2xvYmFsT2Jq
ZWN0LCBleGVjQ2FsbGVyLCBleGVjQ2FsbGVlLCBsZW5ndGgpOwogICAgIGV4ZWNDYWxsZWUtPnNl
dFRoaXNWYWx1ZSh0aGlzVmFsdWUpOwogfQogCkBAIC01MTUsOCArNTE1LDkgQEAgY2xhc3MgR2V0
Q2F0Y2hIYW5kbGVyRnVuY3RvciB7CiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbm90aWZ5
RGVidWdnZXJPZlVud2luZGluZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lKQogeworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPndhc21Bd2FyZUxleGlj
YWxHbG9iYWxPYmplY3Qodm0pOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwotICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSB2bS52bUVudHJ5R2xvYmFs
T2JqZWN0KGNhbGxGcmFtZSktPmRlYnVnZ2VyKCkpIHsKKyAgICBpZiAoRGVidWdnZXIqIGRlYnVn
Z2VyID0gdm0udm1FbnRyeUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpLT5kZWJ1Z2dlcigpKSB7
CiAgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZSBzY29wZSgmdm0pOwogICAgICAgICBpZiAo
Y2FsbEZyYW1lLT5pc0FueVdhc21DYWxsZWUoKQogICAgICAgICAgICAgfHwgKGNhbGxGcmFtZS0+
Y2FsbGVlKCkuaXNDZWxsKCkgJiYgY2FsbEZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKS0+aW5oZXJp
dHM8SlNGdW5jdGlvbj4odm0pKSkKQEAgLTYzMyw5ICs2MzQsOSBAQCBORVZFUl9JTkxJTkUgSGFu
ZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJh
bWUsIEV4YwogICAgIHJldHVybiBoYW5kbGVyOwogfQogCi12b2lkIEludGVycHJldGVyOjpub3Rp
ZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKK3ZvaWQgSW50ZXJwcmV0ZXI6Om5vdGlmeURlYnVn
Z2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewotICAg
IERlYnVnZ2VyKiBkZWJ1Z2dlciA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoY2FsbEZyYW1lKS0+
ZGVidWdnZXIoKTsKKyAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSB2bS52bUVudHJ5R2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdCktPmRlYnVnZ2VyKCk7CiAgICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVn
Z2VyLT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpICYmICFleGNlcHRpb24tPmRpZE5vdGlmeUlu
c3BlY3Rvck9mVGhyb3coKSkgewogICAgICAgICAvLyBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IGlm
IHRoZSBkZWJ1Z2dlciBpcyBlbmFibGVkIHRoZW4gdGhlcmUgaXMgbm8gaW5saW5pbmcuCiAgICAg
ICAgIC8vIElmIHRoYXQgYXNzdW1wdGlvbiB0dXJucyBvdXQgdG8gYmUgZmFsc2UgdGhlbiB3ZSds
bCBpZ25vcmUgdGhlIGlubGluZWQgY2FsbApAQCAtNjU5LDEzICs2NjAsMTQgQEAgdm9pZCBJbnRl
cnByZXRlcjo6bm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oVk0mIHZtLCBDYWxs
RnJhbWUqIGNhbGxGcmEKICAgICBleGNlcHRpb24tPnNldERpZE5vdGlmeUluc3BlY3Rvck9mVGhy
b3coKTsKIH0KIAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZVByb2dyYW0oY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmop
CitKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbShjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHRoaXNPYmopCiB7CiAgICAgSlNTY29w
ZSogc2NvcGUgPSB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGUoKTsKICAgICBW
TSYgdm0gPSBzY29wZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmds
b2JhbE9iamVjdCh2bSk7CiAKLSAgICBQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSA9IFByb2dy
YW1FeGVjdXRhYmxlOjpjcmVhdGUoY2FsbEZyYW1lLCBzb3VyY2UpOworICAgIFByb2dyYW1FeGVj
dXRhYmxlKiBwcm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShnbG9iYWxPYmplY3Qs
IHNvdXJjZSk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpIHx8
IHByb2dyYW0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIApA
QCAtNjc2LDIzICs2NzgsMjIgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZVByb2dyYW0o
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDYWxsRnJhbWUqIGNhbGxGcmEKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogCiAgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0
KCkpKQotICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cihjYWxsRnJhbWUsIHRocm93U2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4o
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiAKICAg
ICAvLyBGaXJzdCBjaGVjayBpZiB0aGUgInByb2dyYW0iIGlzIGFjdHVhbGx5IGp1c3QgYSBKU09O
IG9iamVjdC4gSWYgc28sCiAgICAgLy8gd2UnbGwgaGFuZGxlIHRoZSBKU09OIG9iamVjdCBoZXJl
LiBFbHNlLCB3ZSdsbCBoYW5kbGUgcmVhbCBKUyBjb2RlCiAgICAgLy8gYmVsb3cgYXQgZmFpbGVk
SlNPTlAuCiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2Jh
bE9iamVjdCh2bSk7CiAgICAgVmVjdG9yPEpTT05QRGF0YT4gSlNPTlBEYXRhOwogICAgIGJvb2wg
cGFyc2VSZXN1bHQ7CiAgICAgU3RyaW5nVmlldyBwcm9ncmFtU291cmNlID0gcHJvZ3JhbS0+c291
cmNlKCkudmlldygpOwogICAgIGlmIChwcm9ncmFtU291cmNlLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAocHJvZ3JhbVNvdXJjZS5pczhCaXQoKSkgewot
ICAgICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBsaXRlcmFsUGFyc2VyKGNhbGxGcmFtZSwgcHJv
Z3JhbVNvdXJjZS5jaGFyYWN0ZXJzOCgpLCBwcm9ncmFtU291cmNlLmxlbmd0aCgpLCBKU09OUCk7
CisgICAgICAgIExpdGVyYWxQYXJzZXI8TENoYXI+IGxpdGVyYWxQYXJzZXIoZ2xvYmFsT2JqZWN0
LCBwcm9ncmFtU291cmNlLmNoYXJhY3RlcnM4KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIEpT
T05QKTsKICAgICAgICAgcGFyc2VSZXN1bHQgPSBsaXRlcmFsUGFyc2VyLnRyeUpTT05QUGFyc2Uo
SlNPTlBEYXRhLCBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBv
cnRzUmljaFNvdXJjZUluZm8oZ2xvYmFsT2JqZWN0KSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
TGl0ZXJhbFBhcnNlcjxVQ2hhcj4gbGl0ZXJhbFBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3Vy
Y2UuY2hhcmFjdGVyczE2KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIEpTT05QKTsKKyAgICAg
ICAgTGl0ZXJhbFBhcnNlcjxVQ2hhcj4gbGl0ZXJhbFBhcnNlcihnbG9iYWxPYmplY3QsIHByb2dy
YW1Tb3VyY2UuY2hhcmFjdGVyczE2KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIEpTT05QKTsK
ICAgICAgICAgcGFyc2VSZXN1bHQgPSBsaXRlcmFsUGFyc2VyLnRyeUpTT05QUGFyc2UoSlNPTlBE
YXRhLCBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUmlj
aFNvdXJjZUluZm8oZ2xvYmFsT2JqZWN0KSk7CiAgICAgfQogCkBAIC03MDQsMTAgKzcwNSwxMCBA
QCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbShjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIENhbGxGcmFtZSogY2FsbEZyYQogICAgICAgICAgICAgSlNPTlBQYXRoLnN3YXAoSlNP
TlBEYXRhW2VudHJ5XS5tX3BhdGgpOwogICAgICAgICAgICAgSlNWYWx1ZSBKU09OUFZhbHVlID0g
SlNPTlBEYXRhW2VudHJ5XS5tX3ZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKEpTT05QUGF0
aC5zaXplKCkgPT0gMSAmJiBKU09OUFBhdGhbMF0ubV90eXBlID09IEpTT05QUGF0aEVudHJ5VHlw
ZURlY2xhcmVWYXIpIHsKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFkZFZhcihjYWxs
RnJhbWUsIEpTT05QUGF0aFswXS5tX3BhdGhFbnRyeU5hbWUpOworICAgICAgICAgICAgICAgIGds
b2JhbE9iamVjdC0+YWRkVmFyKGdsb2JhbE9iamVjdCwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5
TmFtZSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgSlNPTlBQYXRoWzBdLm1fcGF0aEVudHJ5TmFtZSwgSlNPTlBW
YWx1ZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPnB1dChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgSlNPTlBQYXRoWzBdLm1fcGF0aEVu
dHJ5TmFtZSwgSlNPTlBWYWx1ZSwgc2xvdCk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC03MjIsOCArNzIzLDggQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZVByb2dyYW0oY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBDYWxsRnJhbWUqIGNhbGxGcmEKIAogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBk
b0dldCA9IFsmXSAoSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogc2NvcGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNjb3BlLT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRo
RW50cnlOYW1lLCBzbG90KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUtPmdldFByb3BlcnR5U2xvdChn
bG9iYWxPYmplY3QsIEpTT05QUGF0aFtpXS5tX3BhdGhFbnRyeU5hbWUsIHNsb3QpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmpl
Y3QsIEpTT05QUGF0aFtpXS5tX3BhdGhFbnRyeU5hbWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9OwogCkBA
IC03NDIsMTYgKzc0MywxNiBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbShj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENhbGxGcmFtZSogY2FsbEZyYQogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwg
dGhyb3dTY29wZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIEpTT05Q
UGF0aFtpXS5tX3BhdGhFbnRyeU5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVVbmRl
ZmluZWRWYXJpYWJsZUVycm9yKGdsb2JhbE9iamVjdCwgSlNPTlBQYXRoW2ldLm1fcGF0aEVudHJ5
TmFtZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRKU09OUDsKICAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGJhc2VPYmplY3QgPSBiYXNl
T2JqZWN0LmdldChjYWxsRnJhbWUsIEpTT05QUGF0aFtpXS5tX3BhdGhFbnRyeU5hbWUpOworICAg
ICAgICAgICAgICAgICAgICBiYXNlT2JqZWN0ID0gYmFzZU9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0
LCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBK
U09OUFBhdGhFbnRyeVR5cGVMb29rdXA6IHsKLSAgICAgICAgICAgICAgICAgICAgYmFzZU9iamVj
dCA9IGJhc2VPYmplY3QuZ2V0KGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTT05Q
UGF0aFtpXS5tX3BhdGhJbmRleCkpOworICAgICAgICAgICAgICAgICAgICBiYXNlT2JqZWN0ID0g
YmFzZU9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNPTlBQ
YXRoW2ldLm1fcGF0aEluZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzY0LDcgKzc2NSw3IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGVQcm9ncmFtKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ2FsbEZyYW1l
KiBjYWxsRnJhCiAgICAgICAgICAgICBpZiAoSlNPTlBQYXRoLnNpemUoKSA9PSAxICYmIEpTT05Q
UGF0aC5sYXN0KCkubV90eXBlICE9IEpTT05QUGF0aEVudHJ5VHlwZUxvb2t1cCkgewogICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VPYmplY3QgPT0gZ2xvYmFsT2JqZWN0KTsKICAg
ICAgICAgICAgICAgICBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCogc2NvcGUgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpOwotICAgICAgICAgICAgICAgIGlmIChz
Y29wZS0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBKU09OUFBhdGgubGFzdCgpLm1fcGF0aEVudHJ5
TmFtZSkpCisgICAgICAgICAgICAgICAgaWYgKHNjb3BlLT5oYXNQcm9wZXJ0eShnbG9iYWxPYmpl
Y3QsIEpTT05QUGF0aC5sYXN0KCkubV9wYXRoRW50cnlOYW1lKSkKICAgICAgICAgICAgICAgICAg
ICAgYmFzZU9iamVjdCA9IHNjb3BlOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KQEAgLTc3MiwyNyArNzcz
LDI3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVQcm9ncmFtKGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgQ2FsbEZyYW1lKiBjYWxsRnJhCiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChiYXNlT2JqZWN0KTsKICAgICAgICAgICAgIHN3aXRjaCAoSlNPTlBQYXRoLmxhc3Qo
KS5tX3R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgSlNPTlBQYXRoRW50cnlUeXBlQ2FsbDogewot
ICAgICAgICAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBiYXNlT2JqZWN0LmdldChjYWxsRnJh
bWUsIEpTT05QUGF0aC5sYXN0KCkubV9wYXRoRW50cnlOYW1lKTsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlIGZ1bmN0aW9uID0gYmFzZU9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCBKU09OUFBhdGgu
bGFzdCgpLm1fcGF0aEVudHJ5TmFtZSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgICAgICAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
dm0sIGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlOjpOb25lKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRp
b24oY2FsbEZyYW1lLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihjYWxsRnJh
bWUsIGZ1bmN0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGdsb2Jh
bE9iamVjdCwgZnVuY3Rpb24pKTsKICAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBqc29uQXJnOwogICAgICAgICAgICAgICAgIGpzb25BcmcuYXBwZW5kKEpTT05QVmFsdWUpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVCghanNvbkFyZy5oYXNPdmVyZmxvd2VkKCkpOwogICAgICAg
ICAgICAgICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNPTlBQYXRoLnNpemUoKSA9PSAxID8ganNV
bmRlZmluZWQoKSA6IGJhc2VPYmplY3Q7Ci0gICAgICAgICAgICAgICAgSlNPTlBWYWx1ZSA9IEpT
Qzo6Y2FsbChjYWxsRnJhbWUsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1
ZSwganNvbkFyZyk7CisgICAgICAgICAgICAgICAgSlNPTlBWYWx1ZSA9IEpTQzo6Y2FsbChnbG9i
YWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwganNvbkFy
Zyk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1Zh
bHVlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBKU09OUFBhdGhFbnRyeVR5cGVEb3Q6IHsKLSAgICAgICAgICAgICAgICBiYXNlT2Jq
ZWN0LnB1dChjYWxsRnJhbWUsIEpTT05QUGF0aC5sYXN0KCkubV9wYXRoRW50cnlOYW1lLCBKU09O
UFZhbHVlLCBzbG90KTsKKyAgICAgICAgICAgICAgICBiYXNlT2JqZWN0LnB1dChnbG9iYWxPYmpl
Y3QsIEpTT05QUGF0aC5sYXN0KCkubV9wYXRoRW50cnlOYW1lLCBKU09OUFZhbHVlLCBzbG90KTsK
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIEpTVmFsdWUo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIEpTT05QUGF0aEVudHJ5VHlwZUxvb2t1cDogewotICAgICAgICAgICAgICAgIGJhc2VPYmpl
Y3QucHV0QnlJbmRleChjYWxsRnJhbWUsIEpTT05QUGF0aC5sYXN0KCkubV9wYXRoSW5kZXgsIEpT
T05QVmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgICAgIGJhc2VPYmpl
Y3QucHV0QnlJbmRleChnbG9iYWxPYmplY3QsIEpTT05QUGF0aC5sYXN0KCkubV9wYXRoSW5kZXgs
IEpTT05QVmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTgxMSwxMCArODEyLDEwIEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGVQcm9ncmFtKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ2FsbEZyYW1l
KiBjYWxsRnJhCiAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGdsb2JhbE9iamVjdCk7
CiAKICAgICAvLyBDb21waWxlIHNvdXJjZSB0byBieXRlY29kZSBpZiBuZWNlc3Nhcnk6Ci0gICAg
SlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXModm0s
IGNhbGxGcmFtZSwgc2NvcGUpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmluaXRp
YWxpemVHbG9iYWxQcm9wZXJ0aWVzKHZtLCBnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICBFWENF
UFRJT05fQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpIHx8ICFlcnJvcik7CiAgICAgaWYg
KFVOTElLRUxZKGVycm9yKSkKLSAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFeGNl
cHRpb24oY2FsbEZyYW1lLCB0aHJvd1Njb3BlLCBlcnJvcikpOworICAgICAgICByZXR1cm4gY2hl
Y2tlZFJldHVybih0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGVycm9y
KSk7CiAKICAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAgICAgewpAQCAtODI4LDcg
KzgyOSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVQcm9ncmFtKGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgQ2FsbEZyYW1lKiBjYWxsRnJhCiAKICAgICBWTVRyYXBzOjpNYXNrIG1h
c2soVk1UcmFwczo6TmVlZFRlcm1pbmF0aW9uLCBWTVRyYXBzOjpOZWVkV2F0Y2hkb2dDaGVjayk7
CiAgICAgaWYgKFVOTElLRUxZKHZtLm5lZWRUcmFwSGFuZGxpbmcobWFzaykpKSB7Ci0gICAgICAg
IHZtLmhhbmRsZVRyYXBzKGNhbGxGcmFtZSwgbWFzayk7CisgICAgICAgIHZtLmhhbmRsZVRyYXBz
KGdsb2JhbE9iamVjdCwgdm0udG9wQ2FsbEZyYW1lLCBtYXNrKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAK
QEAgLTg0Niw5ICs4NDcsOSBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlUHJvZ3JhbShj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENhbGxGcmFtZSogY2FsbEZyYQogICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVD
YWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogZnVuY3Rpb24sIENhbGxUeXBlIGNh
bGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ2FsbFR5
cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwor
ICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB0aHJvd1Njb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7CkBAIC04NzMsNyArODc0LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZUNhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ2FsbFQK
IAogICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIGlm
IChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkKLSAgICAgICAgcmV0dXJuIGNo
ZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLCB0aHJvd1Njb3Bl
KSk7CisgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9y
KGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogCiAgICAgaWYgKGlzSlNDYWxsKSB7CiAgICAg
ICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKQEAgLTg4OSw3ICs4OTAsNyBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGZ1
bmN0aW9uLCBDYWxsVAogCiAgICAgVk1UcmFwczo6TWFzayBtYXNrKFZNVHJhcHM6Ok5lZWRUZXJt
aW5hdGlvbiwgVk1UcmFwczo6TmVlZFdhdGNoZG9nQ2hlY2spOwogICAgIGlmIChVTkxJS0VMWSh2
bS5uZWVkVHJhcEhhbmRsaW5nKG1hc2spKSkgewotICAgICAgICB2bS5oYW5kbGVUcmFwcyhjYWxs
RnJhbWUsIG1hc2spOworICAgICAgICB2bS5oYW5kbGVUcmFwcyhnbG9iYWxPYmplY3QsIHZtLnRv
cENhbGxGcmFtZSwgbWFzayk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCkBAIC05MTEsOSArOTEyLDkgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
T2JqZWN0KiBmdW5jdGlvbiwgQ2FsbFQKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQp
OwogfQogCi1KU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlwZSBjb25zdHJ1
Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0
JiBhcmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKK0pTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0
ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVj
dERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTVmFsdWUgbmV3VGFy
Z2V0KQogewotICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwpAQCAt
OTIxLDcgKzkyMiw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGNvbnN0cnVjCiAgICAgLy8gV2UgdGhyb3cg
aW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2UgaGF2ZSB0byByZXR1cm4gc29tZXRoaW5nICJ2YWxpZCIg
YnV0IHdlJ3JlCiAgICAgLy8gYWxyZWFkeSBpbiBhbiBpbnZhbGlkIHN0YXRlLgogICAgIGlmIChV
TkxJS0VMWSh2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSkpIHsKLSAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLCB0aHJvd1Njb3BlKTsKKyAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtOTQyLDcgKzk0Myw3IEBAIEpT
T2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNPYmplY3QqIGNvbnN0cnVjCiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwg
Z2xvYmFsT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQo
KSkpIHsKLSAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLCB0aHJvd1Nj
b3BlKTsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC05NjAsNyArOTYx
LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU09iamVjdCogY29uc3RydWMKIAogICAgIFZNVHJhcHM6Ok1hc2sgbWFzayhW
TVRyYXBzOjpOZWVkVGVybWluYXRpb24sIFZNVHJhcHM6Ok5lZWRXYXRjaGRvZ0NoZWNrKTsKICAg
ICBpZiAoVU5MSUtFTFkodm0ubmVlZFRyYXBIYW5kbGluZyhtYXNrKSkpIHsKLSAgICAgICAgdm0u
aGFuZGxlVHJhcHMoY2FsbEZyYW1lLCBtYXNrKTsKKyAgICAgICAgdm0uaGFuZGxlVHJhcHMoZ2xv
YmFsT2JqZWN0LCB2bS50b3BDYWxsRnJhbWUsIG1hc2spOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIH0KIApAQCAtMTAxMCwyMSArMTAxMSwy
MiBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVwYXJlRm9yUmVwZWF0Q2FsbChG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpT
VmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNTY29wZSogc2NvcGUpCitKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFsLCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqIHNjb3Bl
KQogewogICAgIFZNJiB2bSA9IHNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgQVNTRVJUKCZ2bSA9PSAmY2FsbEZyYW1lLT52
bSgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGxleGljYWxHbG9iYWxPYmplY3QsICZ2bSA9PSAmbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwog
ICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSkKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogCi0gICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIHNjb3BlLT5n
bG9iYWxPYmplY3Qodm0pKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2Nv
cGUtPmdsb2JhbE9iamVjdCh2bSk7CisgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGds
b2JhbE9iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkp
KQotICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihj
YWxsRnJhbWUsIHRocm93U2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhy
b3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiAKICAgICB1
bnNpZ25lZCBudW1WYXJpYWJsZXMgPSBldmFsLT5udW1WYXJpYWJsZXMoKTsKICAgICB1bnNpZ25l
ZCBudW1Ub3BMZXZlbEZ1bmN0aW9uRGVjbHMgPSBldmFsLT5udW1Ub3BMZXZlbEZ1bmN0aW9uRGVj
bHMoKTsKQEAgLTEwMzIsNyArMTAzNCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUo
RXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlCiAKICAg
ICBKU1Njb3BlKiB2YXJpYWJsZU9iamVjdDsKICAgICBpZiAoKG51bVZhcmlhYmxlcyB8fCBudW1U
b3BMZXZlbEZ1bmN0aW9uRGVjbHMpICYmIGV2YWwtPmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAg
IHNjb3BlID0gU3RyaWN0RXZhbEFjdGl2YXRpb246OmNyZWF0ZSh2bSwgY2FsbEZyYW1lLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnN0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlKCksIHNjb3Bl
KTsKKyAgICAgICAgc2NvcGUgPSBTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QtPnN0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlKCksIHNjb3BlKTsKICAgICAg
ICAgdmFyaWFibGVPYmplY3QgPSBzY29wZTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKEpT
U2NvcGUqIG5vZGUgPSBzY29wZTsgOyBub2RlID0gbm9kZS0+bmV4dCgpKSB7CkBAIC0xMDY4LDE2
ICsxMDcwLDE2IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUq
IGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1WYXJpYWJsZXM7ICsraSkgewogICAgICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSB1bmxpbmtlZENvZGVCbG9jay0+dmFyaWFibGUoaSk7CiAgICAgICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwotICAgICAgICAgICAgaWYgKEpT
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LCBjYWxsRnJhbWUsIGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgICAg
IHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgdGhyb3dTY29w
ZSwgbWFrZVN0cmluZygiQ2FuJ3QgY3JlYXRlIGR1cGxpY2F0ZSBnbG9iYWwgdmFyaWFibGUgaW4g
ZXZhbDogJyIsIFN0cmluZyhpZGVudC5pbXBsKCkpLCAiJyIpKSk7CisgICAgICAgICAgICBpZiAo
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChnbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBtYWtlU3RyaW5nKCJDYW4ndCBjcmVhdGUgZHVwbGljYXRlIGdsb2JhbCB2YXJp
YWJsZSBpbiBldmFsOiAnIiwgU3RyaW5nKGlkZW50LmltcGwoKSksICInIikpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1U
b3BMZXZlbEZ1bmN0aW9uRGVjbHM7ICsraSkgewogICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbiA9IGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOwogICAgICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKLSAgICAgICAgICAgIGlmIChKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KGdsb2JhbExleGljYWxFbnZp
cm9ubWVudCwgY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBzbG90KSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgdGhy
b3dTY29wZSwgbWFrZVN0cmluZygiQ2FuJ3QgY3JlYXRlIGR1cGxpY2F0ZSBnbG9iYWwgdmFyaWFi
bGUgaW4gZXZhbDogJyIsIFN0cmluZyhmdW5jdGlvbi0+bmFtZSgpLmltcGwoKSksICInIikpKTsK
KyAgICAgICAgICAgIGlmIChKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVy
dHlTbG90KGdsb2JhbExleGljYWxFbnZpcm9ubWVudCwgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbi0+
bmFtZSgpLCBzbG90KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgbWFrZVN0cmluZygiQ2FuJ3Qg
Y3JlYXRlIGR1cGxpY2F0ZSBnbG9iYWwgdmFyaWFibGUgaW4gZXZhbDogJyIsIFN0cmluZyhmdW5j
dGlvbi0+bmFtZSgpLmltcGwoKSksICInIikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTEwOTIsMTMgKzEwOTQsMTMgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtVmFyaWFibGVzOyArK2kpIHsKICAg
ICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gdW5saW5rZWRDb2RlQmxvY2stPnZh
cmlhYmxlKGkpOwotICAgICAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHZhcmlhYmxlT2JqZWN0
LT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIGlkZW50KTsKKyAgICAgICAgICAgIGJvb2wgaGFzUHJv
cGVydHkgPSB2YXJpYWJsZU9iamVjdC0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudCk7
CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1
cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwogICAgICAgICAgICAgaWYgKCFoYXNQcm9wZXJ0
eSkgewogICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhcmlhYmxlT2JqZWN0
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlT2JqZWN0LT5pc0V4dGVuc2libGUoY2Fs
bEZyYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dU
eXBlRXJyb3IoY2FsbEZyYW1lLCB0aHJvd1Njb3BlLCBOb25FeHRlbnNpYmxlT2JqZWN0UHJvcGVy
dHlEZWZpbmVFcnJvcikpOwotICAgICAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPnB1dCh2YXJpYWJsZU9iamVjdCwgY2FsbEZyYW1lLCBpZGVudCwganNVbmRlZmlu
ZWQoKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZU9iamVjdC0+aXNFeHRl
bnNpYmxlKGdsb2JhbE9iamVjdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVja2Vk
UmV0dXJuKHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgTm9uRXh0ZW5z
aWJsZU9iamVjdFByb3BlcnR5RGVmaW5lRXJyb3IpKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJs
ZU9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQodmFyaWFibGVPYmplY3QsIGdsb2JhbE9iamVj
dCwgaWRlbnQsIGpzVW5kZWZpbmVkKCksIHNsb3QpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExMDgsMzIgKzExMTAsMzIgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUKICAgICAgICAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uID0gY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CiAgICAgICAgICAgICAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QodmFyaWFibGVPYmplY3QpOwogICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgY3JlYXRlIHRoaXMgdmFyaWFibGVzIGJlY2F1c2UgaXQgd2lsbCBiZSB1c2Vk
IHRvIGVtaXRzIGNvZGUgYnkgYnl0ZWNvZGUgZ2VuZXJhdG9yCi0gICAgICAgICAgICAgICAgdmFy
aWFibGVPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHZhcmlhYmxlT2JqZWN0LCBjYWxsRnJh
bWUsIGZ1bmN0aW9uLT5uYW1lKCksIGpzVW5kZWZpbmVkKCksIHNsb3QpOworICAgICAgICAgICAg
ICAgIHZhcmlhYmxlT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCh2YXJpYWJsZU9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBmdW5jdGlvbi0+bmFtZSgpLCBqc1VuZGVmaW5lZCgpLCBzbG90KTsKICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1
cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVRvcExldmVsRnVu
Y3Rpb25EZWNsczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbiA9IGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOwotICAgICAgICAgICAgICAgIEpT
VmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVu
Y0RlY2xJbkV2YWwoY2FsbEZyYW1lLCBzY29wZSwgZnVuY3Rpb24tPm5hbWUoKSk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9y
SG9pc3RpbmdGdW5jRGVjbEluRXZhbChnbG9iYWxPYmplY3QsIHNjb3BlLCBmdW5jdGlvbi0+bmFt
ZSgpKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNo
ZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwogICAgICAgICAgICAgICAgIGlm
IChyZXNvbHZlZFNjb3BlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBjaGVja2VkUmV0dXJuKHRocm93U3ludGF4RXJyb3IoY2FsbEZyYW1lLCB0aHJvd1Njb3BlLCBt
YWtlU3RyaW5nKCJDYW4ndCBjcmVhdGUgZHVwbGljYXRlIHZhcmlhYmxlIGluIGV2YWw6ICciLCBT
dHJpbmcoZnVuY3Rpb24tPm5hbWUoKS5pbXBsKCkpLCAiJyIpKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBtYWtlU3RyaW5nKCJDYW4ndCBjcmVhdGUgZHVwbGljYXRlIHZhcmlhYmxlIGlu
IGV2YWw6ICciLCBTdHJpbmcoZnVuY3Rpb24tPm5hbWUoKS5pbXBsKCkpLCAiJyIpKSk7CiAgICAg
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodmFyaWFibGVPYmplY3QpOwogICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgY3JlYXRlIHRoaXMgdmFyaWFibGVzIGJlY2F1c2UgaXQgd2ls
bCBiZSB1c2VkIHRvIGVtaXRzIGNvZGUgYnkgYnl0ZWNvZGUgZ2VuZXJhdG9yCi0gICAgICAgICAg
ICAgICAgdmFyaWFibGVPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHZhcmlhYmxlT2JqZWN0
LCBjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGpzVW5kZWZpbmVkKCksIHNsb3QpOworICAg
ICAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dCh2YXJpYWJs
ZU9iamVjdCwgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbi0+bmFtZSgpLCBqc1VuZGVmaW5lZCgpLCBz
bG90KTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNo
ZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNlcHRpb24oKSkpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnVuY3Rpb25Ib2lzdGluZ0Nh
bmRpZGF0ZXM7ICsraSkgewogICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uSG9pc3RpbmdDYW5kaWRhdGUoaSk7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3Bl
Rm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChjYWxsRnJhbWUsIHNjb3BlLCBpZGVudCk7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3Bl
Rm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CiAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBjaGVja2VkUmV0
dXJuKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc29s
dmVkU2NvcGUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGhhc1By
b3BlcnR5ID0gdmFyaWFibGVPYmplY3QtPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgaWRlbnQpOwor
ICAgICAgICAgICAgICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gdmFyaWFibGVPYmplY3QtPmhh
c1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgaWRlbnQpOwogICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGNoZWNrZWRSZXR1cm4odGhyb3dTY29wZS5leGNl
cHRpb24oKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3BlcnR5KSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh2YXJpYWJsZU9iamVjdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5wdXQodmFyaWFibGVPYmplY3QsIGNhbGxGcmFtZSwgaWRlbnQsIGpzVW5kZWZpbmVkKCksIHNs
b3QpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+cHV0KHZhcmlhYmxlT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCBqc1VuZGVmaW5l
ZCgpLCBzbG90KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgY2hlY2tlZFJldHVybih0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMTQzLDEzICsxMTQ1LDEy
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlCiAKICAgICBWTVRyYXBzOjpNYXNrIG1hc2soVk1U
cmFwczo6TmVlZFRlcm1pbmF0aW9uLCBWTVRyYXBzOjpOZWVkV2F0Y2hkb2dDaGVjayk7CiAgICAg
aWYgKFVOTElLRUxZKHZtLm5lZWRUcmFwSGFuZGxpbmcobWFzaykpKSB7Ci0gICAgICAgIHZtLmhh
bmRsZVRyYXBzKGNhbGxGcmFtZSwgbWFzayk7CisgICAgICAgIHZtLmhhbmRsZVRyYXBzKGdsb2Jh
bE9iamVjdCwgdm0udG9wQ2FsbEZyYW1lLCBtYXNrKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZv
ciAndGhpcycuCiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmds
b2JhbE9iamVjdCh2bSk7CiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CiAgICAg
cHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgSlNDYWxsZWU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzY29wZSksIHRoaXNWYWx1ZSwgMSk7CiAKQEAgLTExNjAs
MjEgKzExNjEsMjIgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJs
ZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUKICAgICByZXR1cm4gY2hlY2tl
ZFJldHVybihyZXN1bHQpOwogfQogCi1KU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlTW9kdWxl
UHJvZ3JhbShNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTTW9kdWxlRW52aXJvbm1lbnQqIHNjb3BlKQorSlNWYWx1ZSBJbnRlcnByZXRl
cjo6ZXhlY3V0ZU1vZHVsZVByb2dyYW0oTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU01vZHVsZUVudmlyb25t
ZW50KiBzY29wZSkKIHsKICAgICBWTSYgdm0gPSBzY29wZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEFTU0VSVCgmdm0gPT0gJmNh
bGxGcmFtZS0+dm0oKSk7CisgICAgQVNTRVJUX1VOVVNFRChsZXhpY2FsR2xvYmFsT2JqZWN0LCAm
dm0gPT0gJmxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKICAgICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRo
cmVhZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJ
TG9jaygpKTsKICAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpCiAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKIAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KHZtKTsKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29w
ZSh2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCh2bSkpOwogICAgIGlmIChVTkxJS0VMWSghdm0uaXNT
YWZlVG9SZWN1cnNlU29mdCgpKSkKLSAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dT
dGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLCB0aHJvd1Njb3BlKSk7CisgICAgICAgIHJldHVy
biBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSkpOwogCiAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrOwogICAg
IHsKQEAgLTExODgsNyArMTE5MCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVNb2R1
bGVQcm9ncmFtKE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDCiAKICAgICBW
TVRyYXBzOjpNYXNrIG1hc2soVk1UcmFwczo6TmVlZFRlcm1pbmF0aW9uLCBWTVRyYXBzOjpOZWVk
V2F0Y2hkb2dDaGVjayk7CiAgICAgaWYgKFVOTElLRUxZKHZtLm5lZWRUcmFwSGFuZGxpbmcobWFz
aykpKSB7Ci0gICAgICAgIHZtLmhhbmRsZVRyYXBzKGNhbGxGcmFtZSwgbWFzayk7CisgICAgICAg
IHZtLmhhbmRsZVRyYXBzKGdsb2JhbE9iamVjdCwgdm0udG9wQ2FsbEZyYW1lLCBtYXNrKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKTsKICAgICB9CiAKQEAgLTEyMDAsNyArMTIwMiw2IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGVNb2R1bGVQcm9ncmFtKE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxl
LCBDCiAgICAgLy8gVGhlIHx0aGlzfCBvZiB0aGUgbW9kdWxlIGlzIGFsd2F5cyBgdW5kZWZpbmVk
YC4KICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4w
LyNzZWMtbW9kdWxlLWVudmlyb25tZW50LXJlY29yZHMtaGFzdGhpc2JpbmRpbmcKICAgICAvLyBo
dHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxl
LWVudmlyb25tZW50LXJlY29yZHMtZ2V0dGhpc2JpbmRpbmcKLSAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCh2bSk7CiAgICAgUHJvdG9DYWxsRnJh
bWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIGds
b2JhbE9iamVjdCwgSlNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzY29wZSksIGpz
VW5kZWZpbmVkKCksIDEpOwogCkBAIC0xMjE1LDcgKzEyMTYsNyBAQCBORVZFUl9JTkxJTkUgdm9p
ZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIERlYnVnSG9va1R5cGUg
ZGVidWdIbwogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gdm0u
dm1FbnRyeUdsb2JhbE9iamVjdChjYWxsRnJhbWUpLT5kZWJ1Z2dlcigpOworICAgIERlYnVnZ2Vy
KiBkZWJ1Z2dlciA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoY2FsbEZyYW1lLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5kZWJ1Z2dlcigpOwogICAgIGlmICghZGVidWdnZXIpCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaAppbmRleCA0MmUxYTY5YTcxYTYzMWQ5YzMxZDIxOGJmNGJmZDU2ZWQ2OWUxZDZmLi42MjM5
ZmUxZDhjODYzY2ZkZDE5NWYxZGNhN2I3MzNmMjEwODA4NDNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMTA0LDE2ICsxMDQsMTYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGlzT3Bjb2RlKE9wY29kZSk7
CiAjZW5kaWYKIAotICAgICAgICBKU1ZhbHVlIGV4ZWN1dGVQcm9ncmFtKGNvbnN0IFNvdXJjZUNv
ZGUmLCBDYWxsRnJhbWUqLCBKU09iamVjdCogdGhpc09iaik7Ci0gICAgICAgIEpTVmFsdWUgZXhl
Y3V0ZU1vZHVsZVByb2dyYW0oTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBK
U01vZHVsZUVudmlyb25tZW50Kik7Ci0gICAgICAgIEpTVmFsdWUgZXhlY3V0ZUNhbGwoQ2FsbEZy
YW1lKiwgSlNPYmplY3QqIGZ1bmN0aW9uLCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwotICAgICAgICBKU09iamVjdCogZXhlY3V0
ZUNvbnN0cnVjdChDYWxsRnJhbWUqLCBKU09iamVjdCogZnVuY3Rpb24sIENvbnN0cnVjdFR5cGUs
IGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0JiwgSlNWYWx1ZSBuZXdUYXJnZXQp
OwotICAgICAgICBKU1ZhbHVlIGV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNTY29wZSopOworICAgICAgICBKU1ZhbHVlIGV4ZWN1dGVQcm9n
cmFtKGNvbnN0IFNvdXJjZUNvZGUmLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiB0aGlzT2Jq
KTsKKyAgICAgICAgSlNWYWx1ZSBleGVjdXRlTW9kdWxlUHJvZ3JhbShNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNNb2R1bGVFbnZpcm9ubWVudCopOworICAgICAg
ICBKU1ZhbHVlIGV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGZ1bmN0aW9u
LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYpOworICAgICAgICBKU09iamVjdCogZXhlY3V0ZUNvbnN0cnVjdChKU0dsb2JhbE9iamVj
dCosIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0
YSYsIGNvbnN0IEFyZ0xpc3QmLCBKU1ZhbHVlIG5ld1RhcmdldCk7CisgICAgICAgIEpTVmFsdWUg
ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTU2NvcGUqKTsKIAogICAgICAgICB2b2lkIGdldEFyZ3VtZW50c0RhdGEoQ2FsbEZyYW1l
KiwgSlNGdW5jdGlvbiomLCBwdHJkaWZmX3QmIGZpcnN0UGFyYW1ldGVySW5kZXgsIFJlZ2lzdGVy
KiYgYXJndiwgaW50JiBhcmdjKTsKIAogICAgICAgICBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8q
IHVud2luZChWTSYsIENhbGxGcmFtZSomLCBFeGNlcHRpb24qKTsKLSAgICAgICAgdm9pZCBub3Rp
ZnlEZWJ1Z2dlck9mRXhjZXB0aW9uVG9CZVRocm93bihWTSYsIENhbGxGcmFtZSosIEV4Y2VwdGlv
biopOworICAgICAgICB2b2lkIG5vdGlmeURlYnVnZ2VyT2ZFeGNlcHRpb25Ub0JlVGhyb3duKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBFeGNlcHRpb24qKTsKICAgICAgICAgTkVW
RVJfSU5MSU5FIHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rVHlwZSk7CiAgICAgICAg
IHN0YXRpYyBTdHJpbmcgc3RhY2tUcmFjZUFzU3RyaW5nKFZNJiwgY29uc3QgVmVjdG9yPFN0YWNr
RnJhbWU+Jik7CiAKQEAgLTE1MCw3ICsxNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZiAv
LyBFTkFCTEUoQ09NUFVURURfR09UT19PUENPREVTKQogICAgIH07CiAKLSAgICBKU1ZhbHVlIGV2
YWwoQ2FsbEZyYW1lKik7CisgICAgSlNWYWx1ZSBldmFsKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKik7CiAKICAgICBpbmxpbmUgQ2FsbEZyYW1lKiBjYWxsZWVGcmFtZUZvclZhcmFyZ3MoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1bnNpZ25lZCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKICAgICB7CkBAIC0xNjcsMTUgKzE2NywxNSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgLSBwYWRkZWRDYWxsZWVGcmFtZU9mZnNldCk7CiAgICAgfQogCi0gICAg
dW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWMsIEpTVmFsdWUgYXJndW1lbnRz
LCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgdW5zaWduZWQgc2l6ZU9mVmFyYXJn
cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJf
dCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhB
cmd1bWVudHMgPSAweDEwMDAwOwotICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoQ2Fs
bEZyYW1lKiBleGVjLCBWTSYsIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3Rh
Y2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwotICAgIHVuc2lnbmVkIHNpemVG
cmFtZUZvckZvcndhcmRBcmd1bWVudHMoQ2FsbEZyYW1lKiBleGVjLCBWTSYsIHVuc2lnbmVkIG51
bVVzZWRTdGFja1Nsb3RzKTsKLSAgICB2b2lkIGxvYWRWYXJhcmdzKENhbGxGcmFtZSogZXhlY0Nh
bGxlciwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgc291cmNlLCB1
aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7Ci0gICAgdm9pZCBzZXR1cFZhcmFyZ3NG
cmFtZShDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1
ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgp
OwotICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWVBbmRTZXRUaGlzKENhbGxGcmFtZSogZXhlY0Nh
bGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSBh
cmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwot
ICAgIHZvaWQgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUoQ2FsbEZyYW1lKiBleGVjQ2FsbGVy
LCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIHVpbnQzMl90IGxlbmd0aCk7Ci0gICAgdm9pZCBzZXR1
cEZvcndhcmRBcmd1bWVudHNGcmFtZUFuZFNldFRoaXMoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBD
YWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCB1aW50MzJfdCBsZW5ndGgp
OworICAgIHVuc2lnbmVkIHNpemVGcmFtZUZvclZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqLCBWTSYsIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90
cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIHVuc2lnbmVkIHNpemVGcmFtZUZv
ckZvcndhcmRBcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWTSYsIHVuc2ln
bmVkIG51bVVzZWRTdGFja1Nsb3RzKTsKKyAgICB2b2lkIGxvYWRWYXJhcmdzKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgSlNWYWx1ZSBzb3VyY2UsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsK
KyAgICB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBl
eGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50
MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3RoKTsKKyAgICB2b2lkIHNldHVw
VmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0Nh
bGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSBh
cmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwor
ICAgIHZvaWQgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqIGV4ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgdWludDMyX3QgbGVuZ3Ro
KTsKKyAgICB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lQW5kU2V0VGhpcyhKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSogZXhlY0NhbGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgdWludDMyX3QgbGVuZ3RoKTsKICAgICAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNjg5Yjk5NWI2OWNlYmJkYTZiODNmNWFmMTk2ZGZiM2Uy
YzQ0OTU0MC4uZTAyNDY1MjJiNjFmYWRmYWIxMjQxYzVmZGNkYjA3ZTdlMTE4OWE1MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVySW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlcklu
bGluZXMuaApAQCAtNzYsNyArNzYsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1lQ2xvc3VyZSYgY2xvc3VyZSkKIAogICAgIFZNVHJhcHM6Ok1h
c2sgbWFzayhWTVRyYXBzOjpOZWVkVGVybWluYXRpb24sIFZNVHJhcHM6Ok5lZWRXYXRjaGRvZ0No
ZWNrKTsKICAgICBpZiAoVU5MSUtFTFkodm0ubmVlZFRyYXBIYW5kbGluZyhtYXNrKSkpIHsKLSAg
ICAgICAgdm0uaGFuZGxlVHJhcHMoY2xvc3VyZS5vbGRDYWxsRnJhbWUsIG1hc2spOworICAgICAg
ICB2bS5oYW5kbGVUcmFwcyhjbG9zdXJlLnByb3RvQ2FsbEZyYW1lLT5nbG9iYWxPYmplY3QsIGNs
b3N1cmUub2xkQ2FsbEZyYW1lLCBtYXNrKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKaW5kZXggOWRkM2FjZTU4ZDAyZWJi
YWNhMDQ4YWRkNDRmMjFkOGMyYjNmNzM1Mi4uODA3M2FlOTczYTljMjg2YTVjNTlmMDA0OTQ2OWI4
ODlhYTE3ZGI2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1JlZ2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lz
dGVyLmgKQEAgLTQwLDggKzQwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNPYmpl
Y3Q7CiAgICAgY2xhc3MgSlNTY29wZTsKIAotICAgIHVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFt
ZTsKLQogICAgIGNsYXNzIFJlZ2lzdGVyIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1NoYWRvd0NoaWNrZW4uY3BwCmluZGV4IDIwZDNmNmFkNWNlMGJhOTY0ZDczZDE4N2Y5NmU3
ZjNmNThhMjU0MTkuLjljZmRhMDliMDY5ZjU4ZTI1N2UwNTU4OTM2ZmY3NWEyNjRlY2E3MTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5jcHAKQEAgLTk5LDE0ICs5OSwxNCBAQCBTaGFkb3dDaGlja2VuOjp+U2hhZG93Q2hpY2tlbigp
CiAgICAgZmFzdEZyZWUobV9sb2cpOwogfQogCi12b2lkIFNoYWRvd0NoaWNrZW46OmxvZyhWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUGFja2V0JiBwYWNrZXQpCit2b2lkIFNoYWRvd0No
aWNrZW46OmxvZyhWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBQYWNrZXQmIHBh
Y2tldCkKIHsKICAgICAvLyBUaGlzIHdyaXRlIGlzIGFsbG93ZWQgYmVjYXVzZSB3ZSBjb25zdHJ1
Y3QgdGhlIGxvZyB3aXRoIHNwYWNlIGZvciAxIGFkZGl0aW9uYWwgcGFja2V0LgogICAgICptX2xv
Z0N1cnNvcisrID0gcGFja2V0OwotICAgIHVwZGF0ZSh2bSwgZXhlYyk7CisgICAgdXBkYXRlKHZt
LCBjYWxsRnJhbWUpOwogfQogCi12b2lkIFNoYWRvd0NoaWNrZW46OnVwZGF0ZShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYykKK3ZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKFNoYWRvd0NoaWNrZW5JbnRlcm5hbDo6dmVyYm9z
ZSkgewogICAgICAgICBkYXRhTG9nKCJSdW5uaW5nIHVwZGF0ZSBvbjogIiwgKnRoaXMsICJcbiIp
OwpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBkYXRlKFZNJiB2bSwg
RXhlY1N0YXRlKiBleGVjKQogICAgIC8vIHdoZXJlIHdlIGJvdHRvbWVkIG91dCBhZnRlciBtYWtp
bmcgYW55IGNhbGwuIElmIHdlIGJvdHRvbWVkIG91dCBidXQgbWFkZSBubyBjYWxscyB0aGVuICdl
eGVjJwogICAgIC8vIHdpbGwgdGVsbCB1cy4gVGhhdCdzIHdoeSAiaGlnaGVzdFBvaW50U2luY2VM
YXN0VGltZSIgd2lsbCBnbyBubyBsb3dlciB0aGFuIGV4ZWMuIFRoZSB0aGlyZAogICAgIC8vIHJ1
bGUsIGJhc2VkIG9uIGNvbXBhcmluZyB0byB0aGUgY3VycmVudCByZWFsIHN0YWNrLCBpcyBleGVj
dXRlZCBpbiBhIGxhdGVyIGxvb3AuCi0gICAgQ2FsbEZyYW1lKiBoaWdoZXN0UG9pbnRTaW5jZUxh
c3RUaW1lID0gZXhlYzsKKyAgICBDYWxsRnJhbWUqIGhpZ2hlc3RQb2ludFNpbmNlTGFzdFRpbWUg
PSBjYWxsRnJhbWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbG9nQ3Vyc29ySW5kZXg7IGktLTsp
IHsKICAgICAgICAgUGFja2V0IHBhY2tldCA9IG1fbG9nW2ldOwogICAgICAgICBpZiAocGFja2V0
LmlzUHJvbG9ndWUoKSkgewpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6
dXBkYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChTaGFkb3dDaGlja2VuSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIiAgICBSZXZpc2VkIHN0YWNrOiAiLCBs
aXN0RHVtcChtX3N0YWNrKSwgIlxuIik7CiAgICAgCi0gICAgLy8gVGhlIGxvZy1iYXNlZCBhbmQg
ZXhlYy1iYXNlZCBydWxlcyByZXF1aXJlIHRoYXQgU2hhZG93Q2hpY2tlbiB3YXMgZW5hYmxlZC4g
VGhlIHBvaW50IG9mCisgICAgLy8gVGhlIGxvZy1iYXNlZCBhbmQgY2FsbEZyYW1lLWJhc2VkIHJ1
bGVzIHJlcXVpcmUgdGhhdCBTaGFkb3dDaGlja2VuIHdhcyBlbmFibGVkLiBUaGUgcG9pbnQgb2YK
ICAgICAvLyBTaGFkb3dDaGlja2VuIGlzIHRvIGdpdmUgc2Vuc2libGUtbG9va2luZyByZXN1bHRz
IGV2ZW4gaWYgd2UgaGFkIG5vdCBsb2dnZWQuIFRoaXMgbWVhbnMgdGhhdAogICAgIC8vIHdlIG5l
ZWQgdG8gcmVjb25jaWxlIHRoZSBzaGFkb3cgc3RhY2sgYW5kIHRoZSByZWFsIHN0YWNrIGJ5IGFj
dHVhbGx5IGxvb2tpbmcgYXQgdGhlIHJlYWwKICAgICAvLyBzdGFjay4gVGhpcyByZWNvbmNpbGlh
dGlvbiBhbGxvd3MgdGhlIHNoYWRvdyBzdGFjayB0byBoYXZlIGV4dHJhIHRhaWwtZGVsZXRlZCBm
cmFtZXMsIGJ1dCBpdApAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6dXBk
YXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICghbV9zdGFjay5pc0VtcHR5KCkp
IHsKICAgICAgICAgVmVjdG9yPEZyYW1lPiBzdGFja1JpZ2h0Tm93OwogICAgICAgICBTdGFja1Zp
c2l0b3I6OnZpc2l0KAotICAgICAgICAgICAgZXhlYywgJnZtLCBbJl0gKFN0YWNrVmlzaXRvciYg
dmlzaXRvcikgLT4gU3RhY2tWaXNpdG9yOjpTdGF0dXMgeworICAgICAgICAgICAgY2FsbEZyYW1l
LCAmdm0sIFsmXSAoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSAtPiBTdGFja1Zpc2l0b3I6OlN0YXR1
cyB7CiAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmlzSW5saW5lZEZyYW1lKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGlmICh2aXNpdG9yLT5pc1dhc21GcmFtZSgpKSB7CkBAIC0yOTQsNyArMjk0LDcgQEAg
dm9pZCBTaGFkb3dDaGlja2VuOjp1cGRhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
CiAgICAgVmVjdG9yPEZyYW1lPiB0b1B1c2g7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdCgKLSAg
ICAgICAgZXhlYywgJnZtLCBbJl0gKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgLT4gU3RhY2tWaXNp
dG9yOjpTdGF0dXMgeworICAgICAgICBjYWxsRnJhbWUsICZ2bSwgWyZdIChTdGFja1Zpc2l0b3Im
IHZpc2l0b3IpIC0+IFN0YWNrVmlzaXRvcjo6U3RhdHVzIHsKICAgICAgICAgICAgIGlmICh2aXNp
dG9yLT5pc0lubGluZWRGcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRs
ZSBpbmxpbmluZy4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTU1Njg2CkBAIC00ODQsMTcgKzQ4NCwxNyBAQCB2b2lkIFNoYWRvd0No
aWNrZW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBvdXQucHJpbnQoIl19Iik7
CiB9CiAKLUpTQXJyYXkqIFNoYWRvd0NoaWNrZW46OmZ1bmN0aW9uc09uU3RhY2soRXhlY1N0YXRl
KiBleGVjKQorSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjayhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNBcnJheSogcmVzdWx0
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKKyAgICBKU0FycmF5KiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBpdGVyYXRlKAotICAgICAgICB2bSwg
ZXhlYywKKyAgICAgICAgdm0sIGNhbGxGcmFtZSwKICAgICAgICAgWyZdIChjb25zdCBGcmFtZSYg
ZnJhbWUpIC0+IGJvb2wgewotICAgICAgICAgICAgcmVzdWx0LT5wdXNoKGV4ZWMsIGZyYW1lLmNh
bGxlZSk7CisgICAgICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBmcmFtZS5jYWxs
ZWUpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7IC8vIFRo
aXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0ZXN0cy4KICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU2hhZG93Q2hpY2tlbi5oCmluZGV4IDIwODgwYTYzYzk3NDVjOWVlYmVkYmE0MmI4OTNi
MDdjZWRiZDBkOTUuLjJkNGRhODZkMmZhZmNhZjRlMTRkNzAwNDhkMmQxM2U2NmI0MmRhNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4u
aApAQCAtNDQsOCArNDQsNiBAQCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBT
bG90VmlzaXRvcjsKIGNsYXNzIFZNOwogCi11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7Ci0K
IC8vIFNoYWRvd0NoaWNrZW4gaXMgYSBsb2cgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGEg
c2hhZG93IHN0YWNrIG9mIENISUNLRU4tc3R5bGUgc3RhY2sgZnJhbWVzLgogLy8gVGhpcyBlbmFi
bGVzIHRoZSBkZWJ1Z2dlciB0byBhbG1vc3QgYWx3YXlzIHNlZSB0aGUgdGFpbC1kZWxldGVkIHN0
YWNrIGZyYW1lcywgc28gbG9uZyBhcyB3ZSBoYXZlCiAvLyBtZW1vcnkgaW5zaWRlIFNoYWRvd0No
aWNrZW4gdG8gcmVtZW1iZXIgdGhlbS4KQEAgLTE4Niw5ICsxODQsOSBAQCBjbGFzcyBTaGFkb3dD
aGlja2VuIHsKICAgICBTaGFkb3dDaGlja2VuKCk7CiAgICAgflNoYWRvd0NoaWNrZW4oKTsKICAg
ICAKLSAgICB2b2lkIGxvZyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUGFja2V0Jik7
CisgICAgdm9pZCBsb2coVk0mIHZtLCBDYWxsRnJhbWUqLCBjb25zdCBQYWNrZXQmKTsKICAgICAK
LSAgICB2b2lkIHVwZGF0ZShWTSYsIEV4ZWNTdGF0ZSopOworICAgIHZvaWQgdXBkYXRlKFZNJiwg
Q2FsbEZyYW1lKik7CiAgICAgCiAgICAgLy8gRXhwZWN0cyB0aGlzIHNpZ25hdHVyZTogKGNvbnN0
IEZyYW1lJiBmcmFtZSkgLT4gYm9vbC4gUmV0dXJuIHRydWUgdG8ga2VlcCBpdGVyYXRpbmcuIFJl
dHVybiBmYWxzZSB0byBzdG9wIGl0ZXJhdGluZy4KICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5
IHdvcmtzIHJpZ2h0IHdpdGggaW5saW5pbmcgZGlzYWJsZWQsIGJ1dCB0aGF0J3MgT0sgc2luY2Ug
Zm9yIG5vdyB3ZQpAQCAtMTk2LDcgKzE5NCw3IEBAIGNsYXNzIFNoYWRvd0NoaWNrZW4gewogICAg
IC8vIGlubGluaW5nLCBhbmQgd291bGQgbW9zdGx5IHJlcXVpcmUgdGhhdCB3ZSBjYW4gcmVxdWVz
dCB0aGF0IFN0YWNrVmlzaXRvciBkb2Vzbid0IHNraXAgdGFpbAogICAgIC8vIGZyYW1lcy4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgaXRlcmF0ZShWTSYsIEV4ZWNT
dGF0ZSosIGNvbnN0IEZ1bmN0b3ImKTsKKyAgICB2b2lkIGl0ZXJhdGUoVk0mLCBDYWxsRnJhbWUq
LCBjb25zdCBGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CiAgICAgdm9pZCByZXNldCgpOwpAQCAtMjA5LDcgKzIwNyw3IEBAIGNsYXNzIFNoYWRv
d0NoaWNrZW4gewogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQXJyYXkqIGZ1bmN0aW9uc09uU3RhY2soRXhlY1N0
YXRlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNBcnJheSogZnVuY3Rpb25zT25TdGFjayhK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuSW5saW5lcy5oCmluZGV4IDZhYzZlMGQyMTRj
OTQ4Yzk3NmUyYWQ1M2UxMmM1ZGNkZGYwNjhhYmYuLjhkNDdjMmFhNzY3MDRjMWE0MTFhNTc5NDY0
OGU2MzMzNGRlOGNlYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9TaGFkb3dDaGlja2VuSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TaGFkb3dDaGlja2VuSW5saW5lcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBTaGFkb3dD
aGlja2VuOjppdGVyYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQordm9pZCBTaGFkb3dDaGlja2VuOjppdGVyYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwogCi0gICAgdXBkYXRlKHZtLCBleGVjKTsKKyAgICB1cGRhdGUodm0sIGNhbGxG
cmFtZSk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zdGFjay5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgaWYgKCFmdW5jdG9yKG1fc3RhY2tbaV0pKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA3ZTIzN2ZhZjE0
NTJjMTczYWFmNTY1ZTEyYzA1NDAyOWEzYzBlOTExLi41NTRlM2FkNmNmNzZiNmU0NTk4OTUyMzQz
NTY5Njk3MDIyZWUzMGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMzc0LDYgKzM3NCw4IEBAIENsb25lZEFyZ3VtZW50
cyogU3RhY2tWaXNpdG9yOjpGcmFtZTo6Y3JlYXRlQXJndW1lbnRzKCkKIHsKICAgICBBU1NFUlQo
bV9jYWxsRnJhbWUpOwogICAgIENhbGxGcmFtZSogcGh5c2ljYWxGcmFtZSA9IG1fY2FsbEZyYW1l
OworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLgorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBwaHlzaWNhbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgQ2xv
bmVkQXJndW1lbnRzKiBhcmd1bWVudHM7CiAgICAgQXJndW1lbnRzTW9kZSBtb2RlOwogICAgIGlm
IChPcHRpb25zOjp1c2VGdW5jdGlvbkRvdEFyZ3VtZW50cygpKQpAQCAtMzgzLDEwICszODUsMTAg
QEAgQ2xvbmVkQXJndW1lbnRzKiBTdGFja1Zpc2l0b3I6OkZyYW1lOjpjcmVhdGVBcmd1bWVudHMo
KQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChpc0lubGluZWRGcmFtZSgpKSB7CiAgICAg
ICAgIEFTU0VSVChtX2lubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIGFyZ3VtZW50cyA9IENsb25l
ZEFyZ3VtZW50czo6Y3JlYXRlV2l0aElubGluZUZyYW1lKHBoeXNpY2FsRnJhbWUsIHBoeXNpY2Fs
RnJhbWUsIG1faW5saW5lQ2FsbEZyYW1lLCBtb2RlKTsKKyAgICAgICAgYXJndW1lbnRzID0gQ2xv
bmVkQXJndW1lbnRzOjpjcmVhdGVXaXRoSW5saW5lRnJhbWUoZ2xvYmFsT2JqZWN0LCBwaHlzaWNh
bEZyYW1lLCBtX2lubGluZUNhbGxGcmFtZSwgbW9kZSk7CiAgICAgfSBlbHNlIAogI2VuZGlmCi0g
ICAgICAgIGFyZ3VtZW50cyA9IENsb25lZEFyZ3VtZW50czo6Y3JlYXRlV2l0aE1hY2hpbmVGcmFt
ZShwaHlzaWNhbEZyYW1lLCBwaHlzaWNhbEZyYW1lLCBtb2RlKTsKKyAgICAgICAgYXJndW1lbnRz
ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVXaXRoTWFjaGluZUZyYW1lKGdsb2JhbE9iamVjdCwg
cGh5c2ljYWxGcmFtZSwgbW9kZSk7CiAgICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCmluZGV4IGEz
NDFiN2E5ZDVjYzc5MTU3NGRjZWE2MGVhODVlMzYzZjU5Y2FlYWYuLmYxOTQyN2Q0ODZlNjM4NWQ0
YzhjY2Y0MzkyZmQyZWQxZDczZTY0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKQEAgLTQ1LDggKzQ1LDYgQEAgY2xhc3MgQ2xvbmVk
QXJndW1lbnRzOwogY2xhc3MgUmVnaXN0ZXI7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsK
IAotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwotCiBjbGFzcyBTdGFja1Zpc2l0b3Igewog
cHVibGljOgogICAgIGNsYXNzIEZyYW1lIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAppbmRleCAzYTgyOWMxNGRlYjRlOGMwNTAxYjVmNTRhMmYxMGY0
M2Q2Y2Q5NDJkLi5kNzU3OWI5MWVmMTUyMTUwMmE4MGMxN2UyOWJmN2MwYmE5YjU3NTNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCkBAIC02MjQs
OSArNjI0LDEwIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhCiAjZW5kaWYKIH0KIAotdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8q
IGluZm8pCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbChWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIENhbGwgY2Fs
bCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soCiAgICAgICAgIFs9LCAmdm1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAppbmRleCBjMWIwMTNmZmVhYTgzMjczNzZjODcyZTNlYzk5NzgxZTZkMDUxNGYw
Li4yNzYwZWQ2YzcyZTJlZDFmMzE1MGMzZmY5OWQxNTQwMDU1OTAyMTQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXR5cGVkZWYgdm9pZCAoKlZfRGVidWdPcGVyYXRpb25fRVBQKShF
eGVjU3RhdGUqLCB2b2lkKiwgdm9pZCopOwordHlwZWRlZiB2b2lkICgqVl9EZWJ1Z09wZXJhdGlv
bl9FUFApKENhbGxGcmFtZSosIHZvaWQqLCB2b2lkKik7CiAKIGNsYXNzIEFzc2VtYmx5SGVscGVy
cyA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7CiBwdWJsaWM6CkBAIC0xNzg3LDcgKzE3ODcsNyBA
QCBjbGFzcyBBc3NlbWJseUhlbHBlcnMgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXIgewogICAgICAg
ICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCwgdHJ1ZSk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgZW1pdER1bWJWaXJ0dWFsQ2FsbChWTSYsIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQg
ZW1pdER1bWJWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7
CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJl
Y2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuY3BwCmluZGV4IGRlMDYzYjk2NWU1NWRmZGU5NDA4MWY4YWQ5ZTZjYTY4Nzlk
Yzk2ZTYuLmI0YjQ2OTczYjkxNDNkNDI0ZDRlNDMxYWU0MmJhNGU0M2MzYzMyNjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKQEAgLTYwLDcgKzYwLDcgQEAg
dm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJS
ZWcgc2hhZG93UGFja2V0LCBHUFJSZWcKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoc2hhZG93Q2hp
Y2tlbi0+YWRkcmVzc09mTG9nQ3Vyc29yKCkpLCBzY3JhdGNoMU5vbkFyZ0dQUik7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSwgc2hhZG93UGFja2V0KTsKICAgICBKdW1w
IG9rID0gYnJhbmNoUHRyKEJlbG93LCBzaGFkb3dQYWNrZXQsIFRydXN0ZWRJbW1QdHIoc2hhZG93
Q2hpY2tlbi0+bG9nRW5kKCkpKTsKLSAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRp
b25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZyk+KCk7CisgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2cpPihUcnVzdGVkSW1tUHRyKCZ2bSkp
OwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZykpLCBzY3JhdGNoMU5vbkFyZ0dQUik7
CiAgICAgY2FsbChzY3JhdGNoMU5vbkFyZ0dQUiwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoc2hhZG93Q2hpY2tlbi0+YWRkcmVzc09mTG9nQ3Vyc29yKCkpLCBzY3Jh
dGNoMU5vbkFyZ0dQUik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaApp
bmRleCBjMGQ0MmJjNzk2ZGE2ZDc0OGE0YzE0OWJkYzgwYzlhZDk1ZmNmNzU0Li4xZWMwOTM3MTNl
ZDFiZmY0NGQyZmEzMGE0N2Y2ZmRkZDE3MDMwNjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmgKQEAgLTQzLDcgKzQzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIENhbGxGcmFtZTsKIGNsYXNzIFN0cnVjdHVyZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxG
cmFtZTsKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgUmVnaXN0ZXJlZFN0cnVjdHVyZTsKIH07CkBA
IC04NSw2ICs4NCwxNSBAQCBjbGFzcyBDQ2FsbEhlbHBlcnMgOiBwdWJsaWMgQXNzZW1ibHlIZWxw
ZXJzIHsKICAgICAgICAgcG9rZShHUFJJbmZvOjpub25BcmdHUFIwLCBQT0tFX0FSR1VNRU5UX09G
RlNFVCArIGFyZ3VtZW50SW5kZXggLSBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJz
KTsKICAgICB9CiAKKyAgICB2b2lkIHByZXBhcmVDYWxsT3BlcmF0aW9uKFZNJiB2bSkKKyAgICB7
CisjaWYgQ09NUElMRVIoTVNWQykKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJhbWUpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHZtKTsKKyNlbmRpZgorICAgIH0KKwogcHJpdmF0ZToKIAogICAgIHRlbXBsYXRlPHVuc2lnbmVk
IE51bWJlck9mUmVnaXN0ZXJzLCB0eXBlbmFtZSBSZWdUeXBlPgpAQCAtNjUxLDcgKzY1OSw3IEBA
IGNsYXNzIENDYWxsSGVscGVycyA6IHB1YmxpYyBBc3NlbWJseUhlbHBlcnMgewogI2RlZmluZSBG
SVJTVF9BUkdVTUVOVF9UWVBFIHR5cGVuYW1lIEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+
Ojp0ZW1wbGF0ZSBBcmd1bWVudFR5cGU8MD4KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgQUxXQVlTX0lOTElORSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTxGSVJTVF9BUkdVTUVOVF9UWVBFLCBFeGVjU3RhdGUqPjo6dmFs
dWU+IHNldHVwQXJndW1lbnRzKEFyZ3MuLi4gYXJncykKKyAgICBBTFdBWVNfSU5MSU5FIHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPEZJUlNUX0FSR1VNRU5UX1RZUEUsIENhbGxGcmFtZSo+
Ojp2YWx1ZT4gc2V0dXBBcmd1bWVudHMoQXJncy4uLiBhcmdzKQogICAgIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICAvLyBUaGlzIG9ubHkgcmVhbGx5IHdvcmtzIGZvciA2NC1iaXQgc2lu
Y2UganN2YWx1ZSByZWdzIG1lc3MgdGhpbmdzIHVwIGZvciAzMi1iaXQuLi4KQEAgLTY2MSw3ICs2
NjksNyBAQCBjbGFzcyBDQ2FsbEhlbHBlcnMgOiBwdWJsaWMgQXNzZW1ibHlIZWxwZXJzIHsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBB
cmdzPgotICAgIEFMV0FZU19JTkxJTkUgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPEZJ
UlNUX0FSR1VNRU5UX1RZUEUsIEV4ZWNTdGF0ZSo+Ojp2YWx1ZT4gc2V0dXBBcmd1bWVudHMoQXJn
cy4uLiBhcmdzKQorICAgIEFMV0FZU19JTkxJTkUgc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19z
YW1lPEZJUlNUX0FSR1VNRU5UX1RZUEUsIENhbGxGcmFtZSo+Ojp2YWx1ZT4gc2V0dXBBcmd1bWVu
dHMoQXJncy4uLiBhcmdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAvLyBU
aGlzIG9ubHkgcmVhbGx5IHdvcmtzIGZvciA2NC1iaXQgc2luY2UganN2YWx1ZSByZWdzIG1lc3Mg
dGhpbmdzIHVwIGZvciAzMi1iaXQuLi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwCmluZGV4IGEyMmM0MGQxMTMzMzNlYjU0NGI5ZTI3NWZk
OTIyNDMzYWIwOTlhZGMuLjgyNjU5ZTVhOWUyOTg0ZjQ2MGJjZTY3ODRiZGZlMjMxOTQ0OThmMmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Ib3N0Q2FsbFJldHVyblZhbHVl
LmNwcApAQCAtNDAsMTEgKzQwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogLy8gTm90ZTogZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoKSBuZWVkcyB0byBiZSBwbGFjZWQgYmVmb3Jl
IHRoZQogLy8gZGVmaW5pdGlvbiBvZiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlKCkgYmVsb3cgYmVj
YXVzZSB0aGUgV2luZG93cyBidWlsZAogLy8gcmVxdWlyZXMgaXQuCi1leHRlcm4gIkMiIEVuY29k
ZWRKU1ZhbHVlIEhPU1RfQ0FMTF9SRVRVUk5fVkFMVUVfT1BUSU9OIGdldEhvc3RDYWxsUmV0dXJu
VmFsdWVXaXRoRXhlY1N0YXRlKEV4ZWNTdGF0ZSogZXhlYykKK2V4dGVybiAiQyIgRW5jb2RlZEpT
VmFsdWUgSE9TVF9DQUxMX1JFVFVSTl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZVdpdGhFeGVjU3RhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgaWYgKCFleGVjKQor
ICAgIGlmICghY2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLmhvc3RDYWxsUmV0
dXJuVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLmhv
c3RDYWxsUmV0dXJuVmFsdWUpOwogfQogCiAjaWYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpICYm
IENQVShYODZfNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RD
YWxsUmV0dXJuVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSG9zdENhbGxSZXR1
cm5WYWx1ZS5oCmluZGV4IDUxOTg3ZWE4YTc0ZjNiYzE2OTg3ZTQwZjRlZmU5NmU0ZjY2Y2U1M2Eu
LjUxYmNkMjk5MDliYjBlOWI0Nzg5MjVkZmZiZGI5Zjk0MDhlYmRlNjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5oCkBAIC00MiwxMSArNDIs
MTEgQEAgZXh0ZXJuICJDIiBFbmNvZGVkSlNWYWx1ZSBIT1NUX0NBTExfUkVUVVJOX1ZBTFVFX09Q
VElPTiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlKCkKICNpZiBDT01QSUxFUihHQ0NfQ09NUEFUSUJM
RSkKIAogLy8gVGhpcyBpcyBhIHB1YmxpYyBkZWNsYXJhdGlvbiBvbmx5IHRvIGNvbnZpbmNlIENM
QU5HIG5vdCB0byBlbGlkZSBpdC4KLWV4dGVybiAiQyIgRW5jb2RlZEpTVmFsdWUgSE9TVF9DQUxM
X1JFVFVSTl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUo
RXhlY1N0YXRlKikgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CitleHRlcm4gIkMi
IEVuY29kZWRKU1ZhbHVlIEhPU1RfQ0FMTF9SRVRVUk5fVkFMVUVfT1BUSU9OIGdldEhvc3RDYWxs
UmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKENhbGxGcmFtZSopIFJFRkVSRU5DRURfRlJPTV9BU00g
V1RGX0lOVEVSTkFMOwogCiBpbmxpbmUgdm9pZCBpbml0aWFsaXplSG9zdENhbGxSZXR1cm5WYWx1
ZSgpCiB7Ci0gICAgZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUoMCk7CisgICAg
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUobnVsbHB0cik7CiB9CiAKICNlbHNl
IC8vIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmlu
ZGV4IGVmYWQ1NWMxZTQyMDIzYzBhMGE2M2IzMTU4M2U4YWFmYmZkMmQzZWIuLmQ0NDg5N2Q2NDcw
MjY4MDg1Yzg2MmEyYzhhNzU1ZmJjYTYzZjRlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hl
Y2soKQogCiAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgc2tp
cE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKSk7CiAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwog
ICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwpAQCAtNzYxLDcgKzc2MSw3IEBAIHZvaWQgSklU
Ojpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogCiAg
ICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFy
aXR5Q2hlY2spOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25F
eGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVj
dEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC05NDYsMTEgKzk0
NiwxMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAKICAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKIAotICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNh
bGxlckZyYW1lIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0
aGUgQ2FsbEZyYW1lKikuCi0KKyAgICAgICAgLy8gb3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFu
ZGxlckZyb21DYWxsZXJGcmFtZSBpcyBwYXNzZWQgb25lIGFyZ3VtZW50LCB0aGUgVk0qLgogICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOwotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9u
UHRyVGFnKSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUp
KSk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKCkpOworICAgICAgICBtX2NhbGxz
LmFwcGVuZChDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKSk7CiAgICAgICAgIGp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAgICAgfQogCkBAIC05NjAsMTAgKzk1OSwxMCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAKICAgICAgICAg
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRy
eUZyYW1lKTsKIAotICAgICAgICAvLyBsb29rdXBFeGNlcHRpb25IYW5kbGVyIGlzIHBhc3NlZCB0
d28gYXJndW1lbnRzLCB0aGUgVk0gYW5kIHRoZSBleGVjICh0aGUgQ2FsbEZyYW1lKikuCisgICAg
ICAgIC8vIG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIG9uZSBhcmd1
bWVudCwgdGhlIFZNKi4KICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJl
Y29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihsb29rdXBFeGNlcHRpb25IYW5k
bGVyKSkpOworICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSgpKTsKKyAgICAgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRp
b25IYW5kbGVyKHZtKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDQy
N2U5YWVkZjU5ODZhNDZkZDFmYmQ0NWFmMDUyZWRiMjc5MzU1MWYuLmY4MGFlMjhiMGEwNDgyZTVj
MWJhZTgzMzg2NjBiNmE0MDhjYjdhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNDk4
LDcgKzQ5OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci0gICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qLCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiwgRG91YmxlQ29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJP
ZmZzZXQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAK
aW5kZXggZjQyMGFlOTlkMGU1NzdhODUyZTQ2ZDU0NmFjZjQ3YTYzMmY0MTA5Ni4uNWZjZjg4OWQz
MThmNjY5ZGIwZTBhODIxZjUxODg1MGEyMzQyMTY2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRp
b25hbENvbmRpdGkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVD
b25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25k
aXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpbwog
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwogICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMwNyw3
ICszMDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpbwogICAgICAgICB9CiAKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvCiAgICAg
ICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91
YmxlQ29uZGl0aW8KICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBu
b3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMCwgcmVnVDEpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTY4Nyw5ICs2ODcsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogYwogICAgIGlm
ICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVn
cyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTc2MCw5ICs3NjAsOSBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVs
c2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVt
cHMpOwogCkBAIC04MDEsMTEgKzgwMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
VW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogYwogICAg
IEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAg
ICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBp
ZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VKTWljPihwcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1p
Yz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTg2NywxMSArODY3LDEx
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiog
bWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
aG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklU
T3BlcmF0aW9uX0VKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBh
dGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
Sk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0
aEVuZCA9IGxhYmVsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMzMl82NC5jcHAKaW5kZXggNGRlZjcwZWFhMDcxYTk0ZmQxZjFiZTNjOGFhNTRlZTRmY2Ez
OGRjNy4uYmY2NThiM2ZlNjRhMTU0MmJiZDc3NjY0YmVjNGU3NjRiN2U2YWM2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcApAQCAtMTQw
LDcgKzE0MCw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpCiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9O
ICpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSks
IGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVj
dGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbiko
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGlu
dmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX2xocy5vZmZzZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4
IGMxMGM0MGRjYThkYTI1ZWZlOTk3MTNkZmMxOGU5ODcxNTNkZDU5YjMuLjc4YTNhNDFhNGI5NzMw
YmM5M2VkZjZlYjU0NDU3ODJlY2QxNzg4MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcApAQCAtOTEsMjIgKzkxLDIyIEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCiAgICAgaW50IGZpcnN0VmFyQXJnT2Zm
c2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzLCByZWdUMSk7Ci0gICAgWl9KSVRPcGVyYXRpb25fRUpaWiBzaXplT3BlcmF0
aW9uOworICAgIFpfSklUT3BlcmF0aW9uX0dKWlogc2l6ZU9wZXJhdGlvbjsKICAgICBpZiAoT3A6
Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgc2l6
ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAg
ZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJn
czsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QxLCAtZmlyc3RGcmVlUmVn
aXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1m
aXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1l
KCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCBy
ZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMik7Ci0gICAgRl9KSVRPcGVyYXRpb25fRUZKWlogc2V0dXBPcGVyYXRp
b247CisgICAgRl9KSVRPcGVyYXRpb25fR0ZKWlogc2V0dXBPcGVyYXRpb247CiAgICAgaWYgKE9w
OjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIHNl
dHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAg
ZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1l
OwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QxLCByZWdUMiwgZmlyc3RW
YXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCByZWdUMiwg
Zmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdU
MSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTEzOCw3ICsxMzgs
NyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2Rl
KQogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSk7CiAK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAKQEAgLTE2Miw3ICsxNjIs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVn
aXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2
NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAg
IGVtaXREdW1iVmlydHVhbENhbGwodm0oKSwgaW5mbyk7CisgICAgZW1pdER1bWJWaXJ0dWFsQ2Fs
bCh2bSgpLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwogICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKQEAgLTI3OSw2ICsyNzksNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDMpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsKIAogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAppbmRleCBiNjdjNWJmZjZlZWRm
MmY5ZTE2YzZkNTU3NTMzNDg2OTRmMDYyNDE2Li5lOTFlN2Q3YmJjNjg5YzkwZWY5OWM3ZWU1NTMx
YTE2Y2JlNTg0N2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQu
Y3BwCkBAIC0yMjksNyArMjI5LDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBP
cENhbGxFdmFsJiBieXRlY29kZSkKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25DYWxsRXZhbCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2
YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEpOwogCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXMKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICog
c2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJl
Z1QxLCByZWdUMCk7Ci0gICAgZW1pdER1bWJWaXJ0dWFsQ2FsbCh2bSgpLCBpbmZvKTsKKyAgICBl
bWl0RHVtYlZpcnR1YWxDYWxsKHZtKCksIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5m
byk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIApAQCAtMzQy
LDYgKzM0Miw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IDY5MTZmYjFh
YTQwOTg3NGE2YmZkODlhNTc0ZTk4N2M1NmNjMmZlMTEuLmI3ZDBjYTIzNThiZTUyNTAxOGEzZjRl
OTYxNmQ5Y2I4NDhmZmY1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNl
cHRpb25zLmNwcApAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBn
ZW5lcmljVW53aW5kKFZNJiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUpCit2b2lkIGdlbmVyaWNV
bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgQ2FsbEZyYW1lKiB0b3BKU0NhbGxGcmFtZSA9
IHZtLnRvcEpTQ2FsbEZyYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEV4Y2VwdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5oCmluZGV4IGQwOTE3MjM4ZGVkYmEwMmZjZDY3MjYyZjEyNTk4NTQ0YjYzMmU0ODUuLjg5
NDU5ODU2ZDIyZTAyYTkyMmI0YzY3MzJiY2QzNmNiZGQ2YzM3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oCkBAIC0yOSw4ICsyOSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBWTTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENh
bGxGcmFtZTsKIAotdm9pZCBnZW5lcmljVW53aW5kKFZNJiwgRXhlY1N0YXRlKik7Cit2b2lkIGdl
bmVyaWNVbndpbmQoVk0mLCBDYWxsRnJhbWUqKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCAxMTMxYjk2NGUwMzM1ZWVj
YzM0NzU2MzA0OTkxMTJhZWMxYTM2YmJkLi5mM2FiNTlhYTk0MjM0ZWE0MTI4ZWI0OTVjMzkyY2U5
OTViNjYzMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAg
LTEyMiw3ICsxMjIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRh
Lm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1QdHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTE5MSw3ICsxOTEsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdl
biA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBy
ZWdUMiwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTM2Miw3ICsz
NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwgcmVnVDApOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNldCgpLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIHJlZ1QwLCByZWdUMSk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01
MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIp
OwogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCku
dG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVGhyb3csIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KIApAQCAt
NjMyLDcgKzYzMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJl
Z1QwLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC02NDIsNyArNjQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QwLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC02OTksNyAr
Njk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9m
aWxlcik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ2hlY2tJ
ZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxlciwgVHJ1c3RlZEltbVB0cigm
dm0oKSkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAg
ICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsKQEAgLTcyMCw5ICs3MjAsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1f
YnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsIG1fYnl0ZWNvZGVP
ZmZzZXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRj
aCwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsIG1fYnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRD
YXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAgIGF1dG8g
c2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwpAQCAtNzY0LDcgKzc2NCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIo
JnZtKCkpLCByZWdUMCwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC03ODEsNyArNzgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CiAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC03OTcsNyAr
Nzk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQpKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIHJlZ1QwLCB0YWJsZUlu
ZGV4KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3du
S2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOwogfQogCkBAIC04MDYsNyArODA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwogICAgIGxvYWQzMihjb2RlQmxvY2so
KS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dl
clJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlw
ZSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0
cy5saW5rKHRoaXMpOwogfQogCkBAIC05NjIsNyArOTYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUUKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
IHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtOTcyLDcgKzk3Miw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMCwgcmVnVDEpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKQEAgLTk4NCw3ICs5ODQsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTk0LDcgKzk5
NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMCwgcmVnVDEpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTAx
MSw3ICsxMDExLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25z
dHJ1Y3RvciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VW
YWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3Rv
bSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEwMzYsNyArMTAzNiw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsCiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdp
c3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRlY29kZU9mZnNl
dCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5
dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgSnVtcCBub09wdGltaXplZEVudHJ5ID0gYnJhbmNoVGVz
dFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVE
KSB7CiAgICAgICAgICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgcmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oMTAwMCkpKSk7CkBAIC0xMDc3LDcgKzEwNzcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDg1LDcgKzEwODUsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+
KCk7CiAgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgIGludCByZWdl
eHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChy
ZWdleHApKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTEwNSwxNCArMTEwNSwxNCBAQCB2b2lkIEpJVDo6ZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
biwgZHN0LCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwogICAg
IGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRv
cl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKICAgICB9CiB9CiAKQEAgLTExNTEsMTQgKzExNTEsMTQgQEAgdm9pZCBKSVQ6OmVt
aXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgZHN0LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwogICAg
IGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKICAgICBlbHNlIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsIHJlZ1QwLCBmdW5jdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKICAgICB9CiB9CiAKQEAgLTExOTAsNyArMTE5
MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGludCB2YWx1ZXNJbmRleCA9IGJ5dGVjb2RlLm1fYXJndi5v
ZmZzZXQoKTsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc0luZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9m
aWxlLCBkc3QsCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOwogfQog
CkBAIC0xMjAyLDExICsxMjAyLDExIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRo
X3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBpbnQgc2l6
ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGgub2Zmc2V0KCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKICAgICAgICAgJm1ldGFk
YXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0TG9h
ZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LAorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQpAQCAtMTMx
OCw3ICsxMzE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KICAgICAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZv
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9w
ZXJ0eURlZmF1bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwog
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVy
bkFkZHJlc3MgPSBjYWxsOwpAQCAtMTQ3Miw3ICsxNDcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
c3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9n
RW50cnlPZmZzZXQoKSkpOwogICAgIEp1bXAgc2tpcENsZWFyTG9nID0gYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUMSwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0
cigpKSk7CiAgICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBs
b2cuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2csICZ2bSgp
KTsKICAgICBza2lwQ2xlYXJMb2cubGluayh0aGlzKTsKIAogICAgIGp1bXBUb0VuZC5saW5rKHRo
aXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmlu
ZGV4IGM3YWQzYjAzNjEyNGZiMTU1M2MxZTU1YWNkODJlNGM1OWM0ZmIyNjIuLjc4ZDM0M2ZjOGRh
MGZkOTg4MDc1ZjlmMDY1NzkyMjdjY2UxNjA1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8UwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIHN0cnVj
dHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIFRydXN0ZWRJbW1Q
dHIoJnZtKCkpLCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CiAKQEAgLTg4Miw3ICs4ODIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNV
bmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVBy
b2ZpbGVyLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2Vw
dGlvbiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKICAgICBpc0NhdGNoYWJsZUV4Y2VwdGlvbi5saW5rKHRoaXMp
OwpAQCAtOTEyLDkgKzkxMiw5IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZl
ciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVu
dGVyQXRDYXRjaCwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAg
ZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFu
ZFZhbHVlUHJvZmlsZSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRl
Y29kZU9mZnNldCk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8s
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwpAQCAtOTU2LDcgKzk1Niw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CiAKICAgICBlbWl0TG9hZChz
Y3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxl
SW5kZXgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKCZ2bSgpKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
dGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQog
CkBAIC05OTgsNyArOTk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlYnVnPigpOwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdn
ZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3Rz
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlYnVnLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5
dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRo
aXMpOwogfQogCkBAIC0xMzUxLDcgKzEzNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxl
X3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBzdG9yZTMy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9m
ZnNldCgpKSk7CiAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKSk7CiAg
ICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBsb2cuCi0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2csICZ2bSgpKTsKIAogICAg
IGp1bXBUb0VuZC5saW5rKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKaW5kZXggYzNlZWM2NDY0NThlOWExYTU3MmI1NDlhNWMyNzJmMTUxYWVi
M2ExMi4uMmRkYmYxMWY1NWFiOWNjZjBmMTJkNzAxZTMzNWM4NzE4MzFhZTNmZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0xMDAsMTA5ICsxMDAs
MTE4IEBAIHZvaWQgKiBfUmV0dXJuQWRkcmVzcyh2b2lkKTsKICNlbmRpZgogCiAKLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4
ZWMsIENvZGVCbG9jayogY29kZUJsb2NrKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIC8vIFdl
IHBhc3MgaW4gb3VyIG93biBjb2RlIGJsb2NrLCBiZWNhdXNlIHRoZSBjYWxsZnJhbWUgaGFzbid0
IGJlZW4gcG9wdWxhdGVkLgogICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgZXhlYy0+Y29udmVydFRvU3RhY2tPdmVyZmxvd0Zy
YW1lKHZtLCBjb2RlQmxvY2spOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOwotICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICBj
YWxsRnJhbWUtPmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsKKyAg
ICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBzY29w
ZSk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21U
aHVuayhWTSogdm1Qb2ludGVyLCBFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpJVF9PUEVSQVRJT04g
dGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmsoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKLSAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgdGhyb3dTdGFja092ZXJmbG93RXJy
b3IoZXhlYywgc2NvcGUpOwotICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgIGdlbmVyaWNVbndp
bmQodm0sIGNhbGxGcmFtZSk7CiAgICAgQVNTRVJUKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
KTsKIH0KIAotaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKEV4
ZWNTdGF0ZSogZXhlYykKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQXJpdHlD
aGVjayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xv
d1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsIHZtLCBDb2RlRm9yQ2FsbCk7CisgICAgaW50MzJf
dCBtaXNzaW5nQXJnQ291bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3Iodm0sIGNh
bGxGcmFtZSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChVTkxJS0VMWShtaXNzaW5nQXJnQ291bnQg
PCAwKSkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IENvbW1vblNsb3dQYXRoczo6
Y29kZUJsb2NrRnJvbUNhbGxGcmFtZUNhbGxlZShleGVjLCBDb2RlRm9yQ2FsbCk7Ci0gICAgICAg
IGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsKLSAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKHZtLnRvcENhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IENvbW1vblNsb3dQYXRoczo6Y29kZUJsb2NrRnJvbUNhbGxGcmFt
ZUNhbGxlZShjYWxsRnJhbWUsIENvZGVGb3JDYWxsKTsKKyAgICAgICAgY2FsbEZyYW1lLT5jb252
ZXJ0VG9TdGFja092ZXJmbG93RnJhbWUodm0sIGNvZGVCbG9jayk7CisgICAgICAgIHRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgIH0KIAogICAgIHJldHVy
biBtaXNzaW5nQXJnQ291bnQ7CiB9CiAKLWludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25D
b25zdHJ1Y3RBcml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhlYykKK2ludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaW50MzJfdCBt
aXNzaW5nQXJnQ291bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgdm0s
IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9u
U2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKHZtLCBjYWxsRnJhbWUsIENvZGVGb3JDb25zdHJ1Y3Qp
OwogICAgIGlmIChVTkxJS0VMWShtaXNzaW5nQXJnQ291bnQgPCAwKSkgewotICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IENvbW1vblNsb3dQYXRoczo6Y29kZUJsb2NrRnJvbUNhbGxGcmFt
ZUNhbGxlZShleGVjLCBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgZXhlYy0+Y29udmVydFRv
U3RhY2tPdmVyZmxvd0ZyYW1lKHZtLCBjb2RlQmxvY2spOwotICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJy
b3Iodm0udG9wQ2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gQ29tbW9uU2xvd1BhdGhzOjpjb2RlQmxvY2tGcm9tQ2FsbEZyYW1lQ2FsbGVlKGNhbGxGcmFt
ZSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIGNhbGxGcmFtZS0+Y29udmVydFRvU3RhY2tP
dmVyZmxvd0ZyYW1lKHZtLCBjb2RlQmxvY2spOworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICB9CiAKICAgICByZXR1cm4gbWlzc2luZ0Fy
Z0NvdW50OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeUdl
dEJ5SWQoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29k
ZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeUdldEJ5SWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQp
OwogICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogCiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFz
ZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKLSAg
ICBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KTsKKyAgICBiYXNl
VmFsdWUuZ2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOwogCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzbG90LmdldFB1cmVSZXN1bHQoKSk7CiB9CiAKIAotRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlHZXRCeUlkR2VuZXJpYyhFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeUdldEJ5SWRHZW5lcmlj
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAK
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpWTUlucXVpcnkpOwotICAgIGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IHNsb3QpOworICAgIGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBpZGVu
dCwgc2xvdCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3QuZ2V0UHVyZVJlc3Vs
dCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlHZXRC
eUlkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRK
U1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQp
OwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5KTsKIAotICAgIGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
aWRlbnQsIHNsb3QpOworICAgIGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0
LCBpZGVudCwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKLSAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgZXhlYy0+
Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkgJiYgIXNsb3QuaXNUYWlu
dGVkQnlPcGFxdWVPYmplY3QoKSAmJiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5p
c0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNVbnNldCgpKSkKLSAgICAgICAgcmVwYXRjaEdl
dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBHZXRCeUlES2lu
ZDo6VHJ5KTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CisgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgYmFz
ZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgpKSAmJiAhc2xvdC5pc1RhaW50ZWRCeU9wYXF1ZU9iamVj
dCgpICYmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzQ2FjaGVhYmxlR2V0dGVy
KCkgfHwgc2xvdC5pc1Vuc2V0KCkpKQorICAgICAgICByZXBhdGNoR2V0QnlJRChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBHZXRCeUlE
S2luZDo6VHJ5KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xvdC5nZXRQdXJlUmVz
dWx0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVu
Y29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWREaXJlY3QoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBi
YXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBz
dHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKQEAgLTIxMCwxMDkgKzIxOSwxMTcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0KEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlU3QKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAKLSAgICBib29sIGZvdW5k
ID0gYmFzZVZhbHVlLmdldE93blByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7CisgICAg
Ym9vbCBmb3VuZCA9IGJhc2VWYWx1ZS5nZXRPd25Qcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBp
ZGVudCwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShm
b3VuZCA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDoganNVbmRlZmluZWQoKSkpOworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGZvdW5kID8gc2xvdC5n
ZXRWYWx1ZShnbG9iYWxPYmplY3QsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCkpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0R2VuZXJpYyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RH
ZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIElk
ZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCiAgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3du
UHJvcGVydHkpOwogCi0gICAgYm9vbCBmb3VuZCA9IGJhc2VWYWx1ZS5nZXRPd25Qcm9wZXJ0eVNs
b3QoZXhlYywgaWRlbnQsIHNsb3QpOworICAgIGJvb2wgZm91bmQgPSBiYXNlVmFsdWUuZ2V0T3du
UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoZm91bmQgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGlk
ZW50KSA6IGpzVW5kZWZpbmVkKCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVudCkg
OiBqc1VuZGVmaW5lZCgpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgdWlkKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGJhc2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKIAotICAgIGJvb2wgZm91
bmQgPSBiYXNlVmFsdWUuZ2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KTsKKyAg
ICBib29sIGZvdW5kID0gYmFzZVZhbHVlLmdldE93blByb3BlcnR5U2xvdChnbG9iYWxPYmplY3Qs
IGlkZW50LCBzbG90KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAotICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBleGVjLT5j
b2RlQmxvY2soKSwgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgpKSkKLSAgICAgICAgcmVwYXRj
aEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBHZXRCeUlE
S2luZDo6RGlyZWN0KTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CisgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9j
aywgYmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgpKSkKKyAgICAgICAgcmVwYXRjaEdldEJ5SUQo
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5m
bywgR2V0QnlJREtpbmQ6OkRpcmVjdCk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZShmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpIDoganNV
bmRlZmluZWQoKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKGZvdW5kID8gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIGlkZW50KSA6IGpzVW5kZWZp
bmVkKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eUlkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAgICAgCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAg
ICAgCiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCiAgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNs
b3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAg
ICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIGlkZW50LCBzbG90KTsK
IAogICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZCwgYmFzZVZhbHVlLmNsYXNz
SW5mb09yTnVsbCh2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7CiAK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkR2VuZXJpYyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAg
IElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOwog
ICAgIAogICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgYmFzZVZhbHVlID09IHNsb3Quc2xvdEJh
c2UoKSkpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
ICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCiAg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IFsmXSAoYm9vbCBmb3VuZCwgUHJvcGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2Jq
ZWN0LCBpZGVudCwgWyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIC0+IEpTVmFs
dWUgewogICAgICAgICAKICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgYmFzZVZhbHVl
ID09IHNsb3Quc2xvdEJhc2UoKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHN0dWJJbmZvLT5j
b25zaWRlckNhY2hpbmcodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBiYXNlVmFsdWUuc3RydWN0dXJl
T3JOdWxsKCkpKQotICAgICAgICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBp
ZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBHZXRCeUlES2luZDo6Tm9ybWFsKTsKLSAgICAgICAgcmV0
dXJuIGZvdW5kID8gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Cisg
ICAgICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKHZtLCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkpCisgICAgICAgICAgICByZXBhdGNoR2V0QnlJRChnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBH
ZXRCeUlES2luZDo6Tm9ybWFsKTsKKyAgICAgICAgcmV0dXJuIGZvdW5kID8gc2xvdC5nZXRWYWx1
ZShnbG9iYWxPYmplY3QsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgfSkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpcyhFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUg
YmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhpc0VuY29kZWQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpcyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNFbmNvZGVkLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNj
b3BlKGZhbHNlKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIElk
ZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogCiAgICAgc3R1
YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CkBAIC0zMjEsNTEgKzMzOCw1NSBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpcyhFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZQogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNFbmNvZGVkKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzVmFsdWUsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNH
ZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc0VuY29kZWQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc0dlbmVyaWMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c0VuY29kZWQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHVpZCk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzRW5jb2RlZCk7CiAg
ICAgUHJvcGVydHlTbG90IHNsb3QodGhpc1ZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6R2V0KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdl
dChleGVjLCBpZGVudCwgc2xvdCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZh
bHVlLmdldChnbG9iYWxPYmplY3QsIGlkZW50LCBzbG90KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUoRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2Us
IEVuY29kZWRKU1ZhbHVlIHRoaXNFbmNvZGVkLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRoaXNFbmNvZGVkLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
ICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKIAog
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNFbmNvZGVkKTsKIAogICAgIFByb3Bl
cnR5U2xvdCBzbG90KHRoaXNWYWx1ZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6
OkdldCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0UHJvcGVydHlT
bG90KGV4ZWMsIGlkZW50LCBzbG90LCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xv
dCkgLT4gSlNWYWx1ZSB7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0
UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QsIFsmXSAoYm9vbCBmb3VuZCwg
UHJvcGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpPcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09y
TnVsbCh2bSksIGlkZW50LCBiYXNlVmFsdWUgPT0gc2xvdC5zbG90QmFzZSgpKSk7CiAgICAgICAg
IAotICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgZXhlYy0+Y29kZUJs
b2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVPck51bGwoKSkpCi0gICAgICAgICAgICByZXBhdGNo
R2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIEdldEJ5SURL
aW5kOjpXaXRoVGhpcyk7Ci0gICAgICAgIHJldHVybiBmb3VuZCA/IHNsb3QuZ2V0VmFsdWUoZXhl
YywgaWRlbnQpIDoganNVbmRlZmluZWQoKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVy
Q2FjaGluZyh2bSwgY29kZUJsb2NrLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkpKQorICAg
ICAgICAgICAgcmVwYXRjaEdldEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1
ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgR2V0QnlJREtpbmQ6OldpdGhUaGlzKTsKKyAgICAg
ICAgcmV0dXJuIGZvdW5kID8gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIGlkZW50KSA6IGpz
VW5kZWZpbmVkKCk7CiAgICAgfSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkluQnlJZChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5CeUlkKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUg
YmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBz
dHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKQEAgLTM3NCw3ICszOTUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluQnlJZChFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZVN0dWJJbmZvKgogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSk7CiAgICAgaWYgKCFiYXNlVmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlSW52YWxpZEluUGFyYW1ldGVyRXJyb3IoZXhl
YywgYmFzZVZhbHVlKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIGNyZWF0ZUludmFsaWRJblBhcmFtZXRlckVycm9yKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVl
KSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTM4
MywyMiArNDA0LDIzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5C
eUlkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qCiAKICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihiYXNlT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNs
b3QpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iamVjdC0+
Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5CeUlkR2VuZXJpYyhFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluQnlJZEdlbmVyaWMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxz
ZSk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGJhc2UpOwogICAgIGlmICghYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUludmFsaWRJblBhcmFtZXRl
ckVycm9yKGV4ZWMsIGJhc2VWYWx1ZSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIHNjb3BlLCBjcmVhdGVJbnZhbGlkSW5QYXJhbWV0ZXJFcnJvcihnbG9iYWxPYmplY3Qs
IGJhc2VWYWx1ZSkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIH0KICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1
ZSk7CkBAIC00MDcsMjIgKzQyOSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkluQnlJZEdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYQogCiAgICAg
c2NvcGUucmVsZWFzZSgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZU9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
IGlkZW50LCBzbG90KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJh
c2VPYmplY3QtPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIGlkZW50LCBzbG90KSkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNW
YWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGJhc2UsIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAKICAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBpZiAoIWJhc2VWYWx1ZS5pc09i
amVjdCgpKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVJbnZh
bGlkSW5QYXJhbWV0ZXJFcnJvcihleGVjLCBiYXNlVmFsdWUpKTsKKyAgICAgICAgdGhyb3dFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSW52YWxpZEluUGFyYW1ldGVyRXJyb3Io
Z2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUpKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOwpAQCAtNDMxLDk2ICs0NTQsMTAzIEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmVTCiAKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFz
ZU9iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5KTsK
LSAgICBib29sIGZvdW5kID0gYmFzZU9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50
LCBzbG90KTsKLSAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgZXhlYy0+Y29k
ZUJsb2NrKCksIGJhc2VPYmplY3QtPnN0cnVjdHVyZSh2bSkpKQotICAgICAgICByZXBhdGNoSW5C
eUlEKGV4ZWMsIGJhc2VPYmplY3QsIGlkZW50LCBmb3VuZCwgc2xvdCwgKnN0dWJJbmZvKTsKKyAg
ICBib29sIGZvdW5kID0gYmFzZU9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwg
aWRlbnQsIHNsb3QpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgY29kZUJsb2Nr
LCBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkKKyAgICAgICAgcmVwYXRjaEluQnlJRChnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgaWRlbnQsIGZvdW5kLCBzbG90LCAqc3R1
YkluZm8pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZvdW5kKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5CeVZhbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbkJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQogewogICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGV4ZWMsIGJhc2UsIEpTVmFsdWU6OmRlY29k
ZShrZXkpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNs
b3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZSwgSlNWYWx1ZTo6ZGVjb2RlKGtl
eSkpKSk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICAKICAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAKICAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgUHV0UHJv
cGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJ
ZENvbnRleHQoKSk7Ci0gICAgYmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSwgdHJ1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7CisgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiAgICAgCiAgICAgTE9HX0lDKChJQ0V2ZW50
OjpPcGVyYXRpb25QdXRCeUlkU3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwg
aWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAg
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgc3R1YkluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBiYXNl
VmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgc2xvdCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBmYWxzZSwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgYmFzZVZhbHVlLnB1
dElubGluZShnbG9iYWxPYmplY3QsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgc2xvdCk7CiAKICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWROb25TdHJp
Y3QsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0g
YmFzZVZhbHVlKSk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKICAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0g
dHJ1ZTsKICAgICAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHVpZCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5j
b2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgQ29tbW9uU2xvd1BhdGhzOjpwdXRE
aXJlY3RXaXRoUmVpZnkodm0sIGV4ZWMsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIGlkZW50LCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QoYmFzZVZhbHVlLCB0cnVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4
dCgpKTsKKyAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFs
T2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHNsb3QpOwogCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIHNsb3Qu
YmFzZSgpID09IGJhc2VWYWx1ZSkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAg
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgc3R1YkluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1
ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBDb21t
b25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgYXNPYmplY3QoYmFzZVZh
bHVlKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdp
dGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBhc09iamVjdChiYXNlVmFsdWUpLCBpZGVudCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogCiAgICAgTE9HX0lDKChJQ0V2ZW50
OjpPcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JO
dWxsKHZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogfQogCi12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwogICAgIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZp
ZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwpAQCAtNTI4LDExICs1NTgs
MTEgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWIKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBjb2Rl
QmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkgOiBu
dWxscHRyOwotICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90
KTsKKyAgICBiYXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVlLCBz
bG90KTsKIAogICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09
IGJhc2VWYWx1ZSkpOwogCkBAIC01NDIsMTUgKzU3MiwxNiBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
U3R1YgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNh
Y2hpbmcodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkKLSAgICAgICAgcmVwYXRjaFB1dEJ5SUQo
ZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIE5vdERp
cmVjdCk7CisgICAgICAgIHJlcGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBi
YXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgTm90RGlyZWN0KTsK
IH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6
ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlk
KTsKQEAgLTU1OCwxMSArNTg5LDExIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkTm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTCiAKICAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgZmFsc2UsIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQoKSk7CiAKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKHZtKSA6IG51bGxwdHI7Ci0gICAgYmFzZVZhbHVlLnB1dElubGluZShleGVj
LCBpZGVudCwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2Jq
ZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QpOwogCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0p
LCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAKQEAgLTU3MiwxNSArNjAzLDE2
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKQot
ICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgaWRlbnQs
IHNsb3QsICpzdHViSW5mbywgTm90RGlyZWN0KTsKKyAgICAgICAgcmVwYXRjaFB1dEJ5SUQoZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwg
KnN0dWJJbmZvLCBOb3REaXJlY3QpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOwogICAgIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKICAgICBJZGVudGlmaWVyIGlk
ZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKQEAgLTU4OCwxMCArNjIwLDEwIEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVj
dChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCB0
cnVlLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbnVsbHB0cjsKLSAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2
bSwgZXhlYywgYmFzZU9iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90LCAmc3RydWN0dXJlKTsKKyAg
ICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZ2xvYmFsT2JqZWN0LCBi
YXNlT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QsICZzdHJ1Y3R1cmUpOwogCiAgICAgTE9HX0lD
KChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUsIGJhc2VPYmpl
Y3QtPmNsYXNzSW5mbyh2bSksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlT2JqZWN0KSk7CiAK
QEAgLTYwMSwxNSArNjMzLDE2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1CiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyh2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpKQotICAgICAgICByZXBhdGNoUHV0QnlJRChleGVjLCBiYXNlT2JqZWN0
LCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7CisgICAgICAgIHJl
cGF0Y2hQdXRCeUlEKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBzdHJ1Y3R1
cmUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIERpcmVjdCk7CiB9CiAKLXZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IAogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwpA
QCAtNjE3LDEwICs2NTAsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnUKIAogICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBKU09iamVjdCog
YmFzZU9iamVjdCA9IGFzT2JqZWN0KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOwotICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VPYmplY3QsIGZhbHNlLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0KCkpOwog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICBDb21tb25TbG93UGF0aHM6
OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgYmFzZU9iamVjdCwgaWRlbnQsIHZhbHVlLCBz
bG90LCAmc3RydWN0dXJlKTsKKyAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlm
eSh2bSwgZ2xvYmFsT2JqZWN0LCBiYXNlT2JqZWN0LCBpZGVudCwgdmFsdWUsIHNsb3QsICZzdHJ1
Y3R1cmUpOwogCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemUsIGJhc2VPYmplY3QtPmNsYXNzSW5mbyh2bSksIGlkZW50LCBzbG90LmJh
c2UoKSA9PSBiYXNlT2JqZWN0KSk7CiAKQEAgLTYzMCw3ICs2NjMsNyBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5jb25z
aWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSkKLSAgICAgICAgcmVwYXRjaFB1
dEJ5SUQoZXhlYywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZv
LCBEaXJlY3QpOworICAgICAgICByZXBhdGNoUHV0QnlJRChnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZU9iamVjdCwgc3RydWN0dXJlLCBpZGVudCwgc2xvdCwgKnN0dWJJbmZvLCBEaXJlY3Qp
OwogfQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzU3RyaW5nT3JTeW1ib2woSlNWYWx1
ZSB2YWx1ZSkKQEAgLTYzOCw5ICs2NzEsOSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlz
U3RyaW5nT3JTeW1ib2woSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gdmFsdWUuaXNTdHJpbmco
KSB8fCB2YWx1ZS5pc1N5bWJvbCgpOwogfQogCi1zdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1Zh
bHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyog
YnlWYWxJbmZvKQogewotICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKQEAgLTY1NCwxMiArNjg3LDEyIEBAIHN0
YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsCiAKICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9m
aWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBjYWxs
RnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmplY3Qs
IGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIGJhc2VWYWx1ZS5wdXRC
eUluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7
CiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKQEAgLTY2Nyw3ICs3MDAs
NyBAQCBzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBi
YXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LAogICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJh
eVByb2ZpbGUtPnNldE91dE9mQm91bmRzKCk7CiAgICAgfQogCi0gICAgYXV0byBwcm9wZXJ0eSA9
IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CisgICAgYXV0byBwcm9wZXJ0eSA9
IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgLy8gRG9uJ3QgcHV0
IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIApAQCAtNjc1LDE1ICs3MDgsMTUgQEAgc3Rh
dGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVl
LCBKU1ZhbHVlIHN1YnNjcmlwdCwKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0
cnVlOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwotICAgIGJh
c2VWYWx1ZS5wdXRJbmxpbmUoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOworICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSk7CisgICAgYmFzZVZhbHVlLnB1dElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5LCB2YWx1
ZSwgc2xvdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUg
dmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQorc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJ
bmZvKiBieVZhbEluZm8pCiB7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgYm9vbCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5pc1N0cmljdE1vZGUoKTsKKyAgICBib29sIGlzU3RyaWN0TW9kZSA9IGNvZGVCbG9jay0+
aXNTdHJpY3RNb2RlKCk7CiAKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkg
ewogICAgICAgICAvLyBEZXNwaXRlIGl0cyBuYW1lLCBKU1ZhbHVlOjppc1VJbnQzMiB3aWxsIHJl
dHVybiB0cnVlIG9ubHkgZm9yIHBvc2l0aXZlIGJveGVkIGludDMyX3Q7IGFsbCB0aG9zZSB2YWx1
ZXMgYXJlIHZhbGlkIGFycmF5IGluZGljZXMuCkBAIC03MDUsNyArNzM4LDcgQEAgc3RhdGljIHZv
aWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBKU1ZhbHVlIHMKICAgICAgICAgfQogCiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCBpbmRleCwgdmFsdWUs
IDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJ
bmRleFNob3VsZE5vdFRocm93KTsKKyAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgo
Z2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdElu
ZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtNzE1LDE5ICs3NDgsMTkgQEAgc3RhdGljIHZvaWQgZGlyZWN0
UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1Zh
bHVlIHMKICAgICAgICAgaWYgKHN1YnNjcmlwdEFzRG91YmxlID09IHN1YnNjcmlwdEFzVUludDMy
ICYmIGlzSW5kZXgoc3Vic2NyaXB0QXNVSW50MzIpKSB7CiAgICAgICAgICAgICBieVZhbEluZm8t
PnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChjYWxsRnJhbWUsIHN1YnNjcmlwdEFz
VUludDMyLCB2YWx1ZSwgMCwgaXNTdHJpY3RNb2RlID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJv
dyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOworICAgICAgICAgICAgYmFzZU9iamVj
dC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBzdWJzY3JpcHRBc1VJbnQzMiwgdmFsdWUs
IDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJ
bmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4g
ZXhjZXB0aW9uLgotICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShj
YWxsRnJhbWUpOworICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShn
bG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAK
ICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkp
IHsKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGNhbGxGcmFt
ZSwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdEluZGV4
U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKKyAgICAgICAgYmFz
ZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCB2YWx1
ZSwgMCwgaXNTdHJpY3RNb2RlID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVj
dEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03MzYs
NyArNzY5LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHMKIAogICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBpc1N0cmljdE1vZGUpOwot
ICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBjYWxsRnJhbWUsIGJh
c2VPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CisgICAgQ29tbW9uU2xvd1BhdGhzOjpw
dXREaXJlY3RXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgcHJvcGVydHks
IHZhbHVlLCBzbG90KTsKIH0KIAogZW51bSBjbGFzcyBPcHRpbWl6YXRpb25SZXN1bHQgewpAQCAt
NzQ2LDEyICs3NzksMTQgQEAgZW51bSBjbGFzcyBPcHRpbWl6YXRpb25SZXN1bHQgewogICAgIEdp
dmVVcCwKIH07CiAKLXN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwg
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3N0
YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKKyAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKwogICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQg
YWxsLgogICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBpc0Nv
cHlPbldyaXRlKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+aW5kZXhpbmdNb2RlKCkpKQpAQCAtNzYw
LDcgKzc5NSw3IEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlCiAgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmJ5dGVj
b2RlT2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgp
KTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKQEAgLTc2OCw3ICs4
MDMsNiBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeVB1dEJ5VmFsT3B0aW1pemUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZQogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0
byBvcHRpbWl6ZS4KICAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJh
eU1vZGVGb3JTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKICAgICAgICAgICAgIGlmIChqaXRBcnJheU1v
ZGVQZXJtaXRzUHV0KGFycmF5TW9kZSkgJiYgYXJyYXlNb2RlICE9IGJ5VmFsSW5mby0+YXJyYXlN
b2RlKSB7Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKGxvY2tlciwgdm0sIGNvZGVCbG9j
aywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwpAQCAtNzgyLDIxICs4MTYs
MjAgQEAgc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlQdXRCeVZhbE9wdGltaXplKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUKICAgICB9CiAKICAgICBpZiAoYmFzZVZhbHVl
LmlzT2JqZWN0KCkgJiYgaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpKSB7Ci0gICAgICAgIGNv
bnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhl
Yyk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRv
UHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApOwogICAgICAgICBpZiAoc3Vic2NyaXB0
LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAg
QVNTRVJUKGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxG
cmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUpOwogICAgICAgICAgICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewogICAgICAg
ICAgICAgICAgIGlmIChieVZhbEluZm8tPmNhY2hlZElkID09IHByb3BlcnR5TmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5
VmFsPih2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgTm90
RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQ
dXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsPih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIE5vdERpcmVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAg
ICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBs
aWtlIGEgZ2VuZXJpYyBwcm9wZXJ0eSBhY2Nlc3Mgc2l0ZS4KICAgICAgICAgICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAg
IGJ5VmFsSW5mby0+c2VlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNo
ZWRJZCA9IHByb3BlcnR5TmFtZTsKQEAgLTgyMCwzNSArODUzLDM5IEBAIHN0YXRpYyBPcHRpbWl6
YXRpb25SZXN1bHQgdHJ5UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlCiAgICAgcmV0dXJuIG9wdGltaXphdGlvblJlc3VsdDsKIH0KIAotdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBK
U1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgT3B0
aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0aW1pemUoZXhlYywgYmFzZVZh
bHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FE
RFJFU1MpKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CisgICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeVB1dEJ5VmFsT3B0aW1pemUo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmIChyZXN1bHQgPT0gT3B0
aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8g
b3B0aW1pemUuCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVS
Tl9BRERSRVNTKSwgb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKTsKICAgICB9Ci0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
dmFsdWUsIGJ5VmFsSW5mbykpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlW
YWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwg
YnlWYWxJbmZvKSk7CiB9CiAKLXN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTVmFsdWUg
c3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQorc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlEaXJlY3RQdXRCeVZhbE9wdGlt
aXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIG9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQs
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7
CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisKICAgICAvLyBTZWUgaWYgaXQncyB3b3J0
aCBvcHRpbWl6aW5nIGF0IGFsbC4KICAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9u
UmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7CiAKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoc3Vic2NyaXB0Lmlz
SW50MzIoKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAg
ICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICBBU1NFUlQo
IWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwpAQCAtODU2LDcgKzg5Myw2IEBAIHN0YXRpYyBPcHRp
bWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvCiAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAgICAg
ICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXREaXJlY3Qo
YXJyYXlNb2RlKSAmJiBhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKLSAgICAg
ICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2sp
OwogICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAKQEAgLTg2OSwyMSAr
OTA1LDIwIEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGlyZWN0UHV0QnlWYWxPcHRp
bWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvCiAgICAgICAgIGlmIChvcHRpbWl6YXRp
b25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1
Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKICAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3Vs
dCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwogICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdP
clN5bWJvbChzdWJzY3JpcHQpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlO
YW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgICAgIGNvbnN0IElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgT3B0aW1pemF0aW9uUmVzdWx0
OjpHaXZlVXApOwogICAgICAgICBpZiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgIXBhcnNlSW5k
ZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmJ5dGVjb2RlT2Zm
c2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7
CiAgICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwogICAgICAgICAg
ICAgaWYgKGJ5VmFsSW5mby0+c2VlbikgewogICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8t
PmNhY2hlZElkID09IHByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBKSVQ6OmNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxPcFB1dEJ5VmFsRGlyZWN0Pih2bSwgZXhlYy0+Y29k
ZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgRGlyZWN0LCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZDxP
cFB1dEJ5VmFsRGlyZWN0Pih2bSwgY29kZUJsb2NrLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IERpcmVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9u
UmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gU2VlbSBsaWtlIGEgZ2VuZXJpYyBwcm9w
ZXJ0eSBhY2Nlc3Mgc2l0ZS4KICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0
ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4
ZWMtPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c2VlbiA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IHByb3BlcnR5TmFt
ZTsKQEAgLTkwNywxMCArOTQyLDExIEBAIHN0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvCiAgICAgcmV0
dXJuIG9wdGltaXphdGlvblJlc3VsdDsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKQEAgLTkxOCw3ICs5
NTQsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6
ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlVmFsdWUu
aXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7
Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1p
emUoZXhlYywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihP
VVJfUkVUVVJOX0FERFJFU1MpKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CisgICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9IHRyeURpcmVj
dFB1dEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNvZGVCbG9jaywgb2Jq
ZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FE
RFJFU1MpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlm
IChyZXN1bHQgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9u
J3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCkBAIC05MjYsNTcgKzk2Myw1OCBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbAogICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJu
QWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdl
bmVyaWMpOwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGlyZWN0UHV0
QnlWYWwoZXhlYywgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8pKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRpcmVjdFB1dEJ5VmFsKGdsb2JhbE9iamVjdCwgY29k
ZUJsb2NrLCBvYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbykpOwogfQogCi12b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bykKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKICAgICAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAKLSAgICBwdXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
dmFsdWUsIGJ5VmFsSW5mbyk7CisgICAgcHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CiB9
CiAKIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlW
YWxJbmZvKiBieVZhbEluZm8pCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2VWYWx1ZS5pc09iamVjdCgpKTsKLSAgICBkaXJlY3RQdXRCeVZhbChleGVjLCBhc09iamVjdChi
YXNlVmFsdWUpLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8pOworICAgIGRpcmVjdFB1dEJ5
VmFsKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYXNPYmplY3QoYmFzZVZh
bHVlKSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2Fs
bEV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsZWVGcmFt
ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2soMCk7CisgICAgY2FsbGVlRnJhbWUtPnNldENvZGVC
bG9jaygwKTsKICAgICAKLSAgICBpZiAoIWlzSG9zdEZ1bmN0aW9uKGV4ZWNDYWxsZWUtPmd1YXJh
bnRlZWRKU1ZhbHVlQ2FsbGVlKCksIGdsb2JhbEZ1bmNFdmFsKSkKKyAgICBpZiAoIWlzSG9zdEZ1
bmN0aW9uKGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpLCBnbG9iYWxGdW5j
RXZhbCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAotICAg
IEpTVmFsdWUgcmVzdWx0ID0gZXZhbChleGVjQ2FsbGVlKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGV2YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RD
YWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1Zh
bHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7Ci0gICAgRXhlY1N0YXRl
KiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBleGVjQ2FsbGVlLT5zZXRDb2RlQmxvY2so
MCk7CisgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jaygwKTsKIAogICAgIGlmIChjYWxsTGlu
a0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgIENh
bGxEYXRhIGNhbGxEYXRhOwpAQCAtOTg1LDkgKzEwMjMsOSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxs
ZWUsCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6SlMpOwogICAgIAogICAg
ICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Okhvc3QpIHsKLSAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwotICAgICAgICAgICAgZXhl
Y0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICAgICAgdm0uaG9z
dENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rp
b24oYXNPYmplY3QoY2FsbGVlKS0+Z2xvYmFsT2JqZWN0KHZtKSwgZXhlY0NhbGxlZSkpOworICAg
ICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOwor
ICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAg
ICAgICAgICAgIHZtLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNh
bGxlZUZyYW1lKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAgICAgICAgICAgICAg
ICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCkBA
IC0xMDAwLDcgKzEwMzgsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RD
YWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsCiAgICAgICAgIH0KICAg
ICAKICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKTsKLSAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMs
IGNhbGxlZSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBj
cmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOwogICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KAogICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFn
PigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKQEAgLTEwMTQsOSArMTA1Miw5IEBAIHN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU1ZhbHVl
IGNhbGxlZSwKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBlOjpKUyk7
CiAgICAgCiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6SG9zdCkgewot
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKLSAg
ICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwotICAgICAgICB2
bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0
aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGV4ZWNDYWxs
ZWUpKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJh
bWUpOworICAgICAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwor
ICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVj
dERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSks
IGNhbGxlZUZyYW1lKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCiAgICAgICAgICAgICAgICAgdm0u
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCksCkBAIC0xMDI3LDI0
ICsxMDY1LDI0IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwKICAgICB9CiAgICAgCiAgICAgQVNT
RVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6Tm9uZSk7Ci0gICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxl
ZSkpOworICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFD
b25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CiAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdCgKICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OwogfQogCi1TbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2Fs
bChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQorU2xv
d1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoQ2FsbEZyYW1l
KiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8pCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2Fs
bGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5z
cGVjaWFsaXphdGlvbktpbmQoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzRGlyZWN0KCkpOwog
ICAgIAotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGV4ZWNDYWxsZWUtPmd1YXJhbnRlZWRK
U1ZhbHVlQ2FsbGVlKCk7CisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gY2FsbGVlRnJhbWUt
Pmd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCk7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYgKCFjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCkgewogICAgICAgICBpZiAoYXV0byogaW50ZXJuYWxGdW5jdGlvbiA9IGpzRHlu
YW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewpAQCAtMTA1
NCwxMiArMTA5MiwxMiBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaQogICAgICAgICAgICAgaWYg
KCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRTZWVuKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlua0Zvcihl
eGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2Rl
UHRyKTsKKyAgICAgICAgICAgICAgICBsaW5rRm9yKGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZv
LCBudWxscHRyLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKIAogICAgICAgICAgICAgdm9p
ZCogbGlua2VkVGFyZ2V0ID0gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhl
RnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1
ZSwgY2FsbExpbmtJbmZvKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVl
LCBjYWxsTGlua0luZm8pKTsKICAgICB9CiAKICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKQEAgLTEwODEsMTggKzExMTks
MTggQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwo
RXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGkKICAgICAgICAgfTsKIAogICAgICAgICBpZiAo
IWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9
PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4
ZWMsIGNhbGxlZSkpOworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGNhbGxl
ZSkpOwogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gZXhlY0NhbGxlZS0+YWRk
cmVzc09mQ29kZUJsb2NrKCk7CisgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBj
YWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7CiAgICAgICAgIEV4Y2VwdGlvbiogZXJy
b3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVj
dXRhYmxlPih2bSwgY2FsbGVlLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOwogICAgICAg
ICBFWENFUFRJT05fQVNTRVJUKHRocm93U2NvcGUuZXhjZXB0aW9uKCkgPT0gZXJyb3IpOwogICAg
ICAgICBpZiAoVU5MSUtFTFkoZXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93
RXhjZXB0aW9uKCk7CiAgICAgICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OwogICAgICAg
ICBBcml0eUNoZWNrTW9kZSBhcml0eTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICBpZiAo
Y2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFy
YXJncygpKQogICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CkBAIC0xMTAyLDcy
ICsxMTQwLDIxIEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpCiAgICAgaWYgKCFjYWxsTGlua0lu
Zm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVs
c2UKLSAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ss
IGNhbGxlZSwgY29kZVB0cik7CisgICAgICAgIGxpbmtGb3IoY2FsbGVlRnJhbWUsICpjYWxsTGlu
a0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyKTsKIAogICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZy
YW1lIDogS2VlcFRoZUZyYW1lKSk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25M
aW5rRGlyZWN0Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
LCBKU0Z1bmN0aW9uKiBjYWxsZWUpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCi0gICAg
UkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLT5pc0RpcmVjdCgpKTsKLSAgICAKLSAgICAvLyBU
aGlzIHdvdWxkIGhhcHBlbiBpZiB0aGUgZXhlY3V0YWJsZSBkaWVkIGR1cmluZyBHQyBidXQgdGhl
IENvZGVCbG9jayBkaWQgbm90IGRpZS4gVGhhdCBzaG91bGQKLSAgICAvLyBub3QgaGFwcGVuIGJl
Y2F1c2UgdGhlIENvZGVCbG9jayBzaG91bGQgaGF2ZSBhIHdlYWsgcmVmZXJlbmNlIHRvIGFueSBl
eGVjdXRhYmxlIGl0IHVzZXMgZm9yCi0gICAgLy8gdGhpcyBwdXJwb3NlLgotICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxMaW5rSW5mby0+ZXhlY3V0YWJsZSgpKTsKLSAgICAKLSAgICAvLyBIYXZpbmcg
YSBDb2RlQmxvY2sgaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBsaW5rZWQuIFdlIHNob3VsZG4ndCBi
ZSB0YWtpbmcgdGhpcyBwYXRoIGlmIGl0J3MKLSAgICAvLyBsaW5rZWQuCi0gICAgUkVMRUFTRV9B
U1NFUlQoIWNhbGxMaW5rSW5mby0+Y29kZUJsb2NrKCkpOwotICAgIAotICAgIC8vIFdlIGp1c3Qg
ZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldC4KLSAgICBSRUxFQVNFX0FTU0VSVCghY2FsbExpbmtJbmZv
LT5pc1ZhcmFyZ3MoKSk7Ci0gICAgCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBj
YWxsTGlua0luZm8tPmV4ZWN1dGFibGUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWUtPmV4
ZWN1dGFibGUoKSA9PSBjYWxsTGlua0luZm8tPmV4ZWN1dGFibGUoKSk7Ci0KLSAgICBKU1Njb3Bl
KiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAg
ICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJp
dHkpOwotICAgIGVsc2UgewotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwot
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQ2FsbChraW5kKSB8fCBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmNvbnN0cnVjdEFiaWxpdHkoKSAhPSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1
Y3QpOwotICAgICAgICAKLSAgICAgICAgRXhjZXB0aW9uKiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUs
IHNjb3BlLCBraW5kLCBjb2RlQmxvY2spOwotICAgICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNF
RCh0aHJvd1Njb3BlLCB0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09IGVycm9yKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKGVycm9yKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdW5zaWdu
ZWQgYXJndW1lbnRTdGFja1Nsb3RzID0gY2FsbExpbmtJbmZvLT5tYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpOwotICAgICAgICBpZiAoYXJndW1lbnRTdGFja1Nsb3RzIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCi0gICAgICAgICAgICBjb2Rl
UHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0Fy
aXR5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQpOwotICAgIH0K
LSAgICAKLSAgICBsaW5rRGlyZWN0Rm9yKGV4ZWMsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywg
Y29kZVB0cik7Ci19Ci0KLWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhG
dW5jdGlvbigKLSAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK2lubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywg
SlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0g
ZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0g
Y2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwogCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZXhlY0NhbGxl
ZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUg
PSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKICAgICBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpIHsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8
SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBjYWxsZWVBc1ZhbHVlKSkgewpAQCAtMTE3NSw3ICsxMTYy
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAog
ICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVG
cmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVl
LCBjYWxsTGlua0luZm8pKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IGhhbmRsZUhvc3RDYWxsKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxlZUFzVmFsdWUs
IGNhbGxMaW5rSW5mbykpOwogICAgIH0KICAgICAKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwpAQCAtMTE4NSwxMyAr
MTE3MiwxMyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKICAgICAgICAgaWYg
KCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkg
PT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7Ci0gICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihl
eGVjLCBmdW5jdGlvbikpOworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihnbG9iYWxPYmplY3QsIGZ1
bmN0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAogICAgICAgICAgICAg
ICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGV4ZWNDYWxsZWUt
PmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90
ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwogICAgICAgICBFeGNlcHRpb24q
IGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9u
RXhlY3V0YWJsZT4odm0sIGZ1bmN0aW9uLCBzY29wZSwga2luZCwgKmNvZGVCbG9ja1Nsb3QpOwog
ICAgICAgICBFWENFUFRJT05fQVNTRVJUKHRocm93U2NvcGUuZXhjZXB0aW9uKCkgPT0gZXJyb3Ip
OwogICAgICAgICBpZiAoVU5MSUtFTFkoZXJyb3IpKSB7CkBAIC0xMjA1LDczICsxMTkyLDc5IEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbigKICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENh
bGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogfQogCi1TbG93
UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxs
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCitTbG93
UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxs
KENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIEFTU0VSVChjYWxsTGlua0luZm8tPnNw
ZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsKTsKICAgICBKU0NlbGwqIGNhbGxlZUFz
RnVuY3Rpb25DZWxsOwotICAgIFNsb3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5jdGlvbkNl
bGwpOworICAgIFNsb3dQYXRoUmV0dXJuVHlwZSByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0
aW9uKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxMaW5rSW5mbywgY2FsbGVlQXNGdW5j
dGlvbkNlbGwpOwogCi0gICAgbGlua1BvbHltb3JwaGljQ2FsbChleGVjQ2FsbGVlLCAqY2FsbExp
bmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkpOworICAgIGxpbmtQb2x5
bW9ycGhpY0NhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgKmNhbGxMaW5rSW5mbywgQ2Fs
bFZhcmlhbnQoY2FsbGVlQXNGdW5jdGlvbkNlbGwpKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1TbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQor
U2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoQ2Fs
bEZyYW1lKiBjYWxsZWVGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bElnbm9yZWQ7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwg
Y2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOworICAgIHJldHVybiB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIGNhbGxMaW5r
SW5mbywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKIH0KIAotc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorc2l6ZV90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAKLSAgICByZXR1cm4ganNM
ZXNzPHRydWU+KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpKTsKKyAgICByZXR1cm4ganNMZXNzPHRydWU+KGdsb2JhbE9iamVjdCwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikp
OwogfQogCi1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKIAotICAgIHJldHVybiBqc0xlc3NFcTx0cnVlPihleGVjLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CisgICAgcmV0dXJuIGpz
TGVzc0VxPHRydWU+KGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCi1zaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgcmV0dXJuIGpzTGVzczxm
YWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMSkpOworICAgIHJldHVybiBqc0xlc3M8ZmFsc2U+KGdsb2JhbE9iamVjdCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkpOwog
fQogCi1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKIAotICAgIHJldHVybiBqc0xlc3NFcTxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkpOworICAgIHJldHVy
biBqc0xlc3NFcTxmYWxzZT4oZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MiksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSk7CiB9CiAKLXNpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlRXEoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplcXVh
bFNsb3dDYXNlSW5saW5lKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZXF1YWxTbG93Q2Fz
ZUlubGluZShnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1FbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkKICNlbHNlCi1zaXplX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGxlZnQsIEpTQ2VsbCogcmlnaHQpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlU3RyaW5nRXEoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBsZWZ0LCBK
U0NlbGwqIHJpZ2h0KQogI2VuZGlmCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CiAKLSAgICBib29sIHJlc3VsdCA9IGFzU3RyaW5nKGxlZnQpLT5lcXVhbChleGVjLCBhc1N0
cmluZyhyaWdodCkpOworICAgIGJvb2wgcmVzdWx0ID0gYXNTdHJpbmcobGVmdCktPmVxdWFsKGds
b2JhbE9iamVjdCwgYXNTdHJpbmcocmlnaHQpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOwogI2Vsc2UKQEAgLTEyNzks
NDAgKzEyNzIsNDEgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmlu
Z0VxKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBsZWZ0LCBKU0MKICNlbmRpZgogfQogCi1zaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQor
c2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAK
ICAgICBKU1ZhbHVlIHNyYzEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNW
YWx1ZSBzcmMyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCi0gICAgcmV0dXJuIEpT
VmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIHNyYzEsIHNyYzIpOworICAgIHJldHVybiBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChnbG9iYWxPYmplY3QsIHNyYzEsIHNyYzIpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUoRXhlY1N0YXRl
KiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBjb25zdCBKU1ZhbHVlKiB2
YWx1ZXMsIGludCBzaXplKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheVdpdGhQcm9maWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5QWxs
b2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgaW50IHNpemUp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEFy
cmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsIHByb2ZpbGUsIHZhbHVlcywgc2l6ZSkpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEFycmF5
TmVnYXRpdmVJbmRleGVkKGdsb2JhbE9iamVjdCwgcHJvZmlsZSwgdmFsdWVzLCBzaXplKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9m
aWxlLCBFbmNvZGVkSlNWYWx1ZSBzaXplKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBFbmNvZGVkSlNWYWx1ZSBz
aXplKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUg
c2l6ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHNpemUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKGV4ZWMsIHByb2ZpbGUsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgc2l6ZVZhbHVlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZ2xvYmFsT2JqZWN0LCBwcm9maWxlLCBz
aXplVmFsdWUpKTsKIH0KIAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uTmV3RnVuY3Rpb25Db21tb24oRXhlY1N0YXRl
KiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUsIGJvb2wg
aXNJbnZhbGlkYXRlZCkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBuZXdGdW5jdGlvbkNvbW1vbihW
TSYgdm0sIEpTU2NvcGUqIHNjb3BlLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSwgYm9vbCBp
c0ludmFsaWRhdGVkKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKGZ1
bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHM8RnVuY3Rpb25FeGVjdXRhYmxlPih2bSkpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwogICAgIGlmIChpc0ludmFs
aWRhdGVkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEZ1bmN0aW9uVHlwZTo6Y3Jl
YXRlV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCh2bSwgc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgc2NvcGUpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEZ1bmN0aW9uVHlwZTo6Y3JlYXRlKHZtLCBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOwpAQCAt
MTMyMCwxMjYgKzEzMTQsMTU5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25OZXdG
dW5jdGlvbkNvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlCiAKIGV4dGVybiAi
QyIgewogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRh
YmxlKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihW
TSogdm1Qb2ludGVyLCBKU1Njb3BlKiBzY29wZSwgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUp
CiB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbk5ld0Z1bmN0aW9uQ29tbW9uPEpTRnVuY3Rpb24+KGV4
ZWMsIHNjb3BlLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGZhbHNlKTsKKyAgICBWTSYgdm0gPSAqdm1Q
b2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAg
IHJldHVybiBuZXdGdW5jdGlvbkNvbW1vbjxKU0Z1bmN0aW9uPih2bSwgc2NvcGUsIGZ1bmN0aW9u
RXhlY3V0YWJsZSwgZmFsc2UpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChF
eGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRo
SW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KFZNKiB2bVBvaW50ZXIsIEpTU2NvcGUq
IHNjb3BlLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKIHsKLSAgICByZXR1cm4gb3BlcmF0
aW9uTmV3RnVuY3Rpb25Db21tb248SlNGdW5jdGlvbj4oZXhlYywgc2NvcGUsIGZ1bmN0aW9uRXhl
Y3V0YWJsZSwgdHJ1ZSk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gbmV3RnVuY3Rpb25Db21t
b248SlNGdW5jdGlvbj4odm0sIHNjb3BlLCBmdW5jdGlvbkV4ZWN1dGFibGUsIHRydWUpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpTQ2VsbCogZnVuY3Rpb25FeGVj
dXRhYmxlKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbihWTSogdm1Qb2ludGVyLCBKU1Njb3BlKiBzY29wZSwgSlNDZWxsKiBmdW5jdGlv
bkV4ZWN1dGFibGUpCiB7Ci0gICAgcmV0dXJuIG9wZXJhdGlvbk5ld0Z1bmN0aW9uQ29tbW9uPEpT
R2VuZXJhdG9yRnVuY3Rpb24+KGV4ZWMsIHNjb3BlLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGZhbHNl
KTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiBuZXdGdW5jdGlvbkNvbW1vbjxKU0dlbmVyYXRv
ckZ1bmN0aW9uPih2bSwgc2NvcGUsIGZ1bmN0aW9uRXhlY3V0YWJsZSwgZmFsc2UpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
V2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVjU3RhdGUqIGV4ZWMsIEpT
U2NvcGUqIHNjb3BlLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0
ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KFZNKiB2bVBvaW50ZXIsIEpTU2NvcGUqIHNjb3BlLCBK
U0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uTmV3RnVu
Y3Rpb25Db21tb248SlNHZW5lcmF0b3JGdW5jdGlvbj4oZXhlYywgc2NvcGUsIGZ1bmN0aW9uRXhl
Y3V0YWJsZSwgdHJ1ZSk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gbmV3RnVuY3Rpb25Db21t
b248SlNHZW5lcmF0b3JGdW5jdGlvbj4odm0sIHNjb3BlLCBmdW5jdGlvbkV4ZWN1dGFibGUsIHRy
dWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSlNDZWxsKiBmdW5jdGlv
bkV4ZWN1dGFibGUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Fz
eW5jRnVuY3Rpb24oVk0qIHZtUG9pbnRlciwgSlNTY29wZSogc2NvcGUsIEpTQ2VsbCogZnVuY3Rp
b25FeGVjdXRhYmxlKQogewotICAgIHJldHVybiBvcGVyYXRpb25OZXdGdW5jdGlvbkNvbW1vbjxK
U0FzeW5jRnVuY3Rpb24+KGV4ZWMsIHNjb3BlLCBmdW5jdGlvbkV4ZWN1dGFibGUsIGZhbHNlKTsK
KyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOworICAgIHJldHVybiBuZXdGdW5jdGlvbkNvbW1vbjxKU0FzeW5jRnVuY3Rp
b24+KHZtLCBzY29wZSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBmYWxzZSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbldpdGhJbnZhbGlk
YXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29w
ZSwgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25X
YXRjaHBvaW50KFZNKiB2bVBvaW50ZXIsIEpTU2NvcGUqIHNjb3BlLCBKU0NlbGwqIGZ1bmN0aW9u
RXhlY3V0YWJsZSkKIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uTmV3RnVuY3Rpb25Db21tb248SlNB
c3luY0Z1bmN0aW9uPihleGVjLCBzY29wZSwgZnVuY3Rpb25FeGVjdXRhYmxlLCB0cnVlKTsKKyAg
ICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOworICAgIHJldHVybiBuZXdGdW5jdGlvbkNvbW1vbjxKU0FzeW5jRnVuY3Rpb24+
KHZtLCBzY29wZSwgZnVuY3Rpb25FeGVjdXRhYmxlLCB0cnVlKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uKFZNKiB2bVBvaW50ZXIsIEpTU2NvcGUqIHNjb3BlLCBKU0NlbGwqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSkKIHsKLSAgICByZXR1cm4gb3BlcmF0aW9uTmV3RnVuY3Rpb25Db21tb248SlNBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uPihleGVjLCBzY29wZSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBmYWxz
ZSk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gbmV3RnVuY3Rpb25Db21tb248SlNBc3luY0dl
bmVyYXRvckZ1bmN0aW9uPih2bSwgc2NvcGUsIGZ1bmN0aW9uRXhlY3V0YWJsZSwgZmFsc2UpOwog
fQogICAgIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBc3luY0dl
bmVyYXRvckZ1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVj
U3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoVk0qIHZtUG9pbnRl
ciwgSlNTY29wZSogc2NvcGUsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQogewotICAgIHJl
dHVybiBvcGVyYXRpb25OZXdGdW5jdGlvbkNvbW1vbjxKU0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24+
KGV4ZWMsIHNjb3BlLCBmdW5jdGlvbkV4ZWN1dGFibGUsIHRydWUpOworICAgIFZNJiB2bSA9ICp2
bVBvaW50ZXI7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Cisg
ICAgcmV0dXJuIG5ld0Z1bmN0aW9uQ29tbW9uPEpTQXN5bmNHZW5lcmF0b3JGdW5jdGlvbj4odm0s
IHNjb3BlLCBmdW5jdGlvbkV4ZWN1dGFibGUsIHRydWUpOwogfQogICAgIAotdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
ZnVuY0NlbGwsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWROYW1lKQordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0NlbGwqIGZ1bmNDZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTmFtZSkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGZ1bmNDZWxsKTsKICAgICBKU1ZhbHVlIG5hbWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE5hbWUpOwotICAgIGZ1bmMtPnNldEZ1bmN0aW9uTmFtZShleGVjLCBuYW1l
KTsKKyAgICBmdW5jLT5zZXRGdW5jdGlvbk5hbWUoZ2xvYmFsT2JqZWN0LCBuYW1lKTsKIH0KIAot
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d09iamVjdChWTSogdm1Qb2ludGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhl
Yywgc3RydWN0dXJlKTsKKyAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3Qodm0sIHN0cnVj
dHVyZSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdQcm9taXNlKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3UHJvbWlzZShWTSogdm1Qb2ludGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICByZXR1cm4gSlNQcm9taXNl
OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdJbnRlcm5hbFByb21pc2UoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnRlcm5hbFByb21pc2Uo
Vk0qIHZtUG9pbnRlciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogCiAgICAgcmV0dXJuIEpTSW50ZXJuYWxQcm9taXNlOjpjcmVhdGUodm0sIHN0
cnVjdHVyZSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdHZW5lcmF0
b3IoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdHZW5lcmF0b3IoVk0qIHZtUG9pbnRlciwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgcmV0dXJuIEpT
R2VuZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yKFZNKiB2bVBvaW50ZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKIAogICAgIHJldHVybiBKU0FzeW5jR2VuZXJhdG9yOjpjcmVhdGUo
dm0sIHN0cnVjdHVyZSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdS
ZWdleHAoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIHJlZ2V4cFB0cikKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiByZWdleHBQdHIpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAg
UmVnRXhwKiByZWdleHAgPSBzdGF0aWNfY2FzdDxSZWdFeHAqPihyZWdleHBQdHIpOwogICAgIEFT
U0VSVChyZWdleHAtPmlzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRl
KHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdl
eHApOworICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5y
ZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnZXhwKTsKIH0KIAogLy8gVGhlIG9ubHkgcmVhc29uIGZvciBy
ZXR1cm5pbmcgYW4gVW51c2VkUHRyIChpbnN0ZWFkIG9mIHZvaWQpIGlzIHNvIHRoYXQgd2UgY2Fu
IHJldXNlIHRoZQogLy8gZXhpc3RpbmcgREZHIHNsb3cgcGF0aCBnZW5lcmF0b3IgbWFjaGluZXJ5
IHdoZW4gY3JlYXRpbmcgdGhlIHNsb3cgcGF0aCBmb3IgQ2hlY2tUcmFwcwogLy8gaW4gdGhlIERG
Ry4gSWYgYSBERkcgc2xvdyBwYXRoIGdlbmVyYXRvciB0aGF0IHN1cHBvcnRzIGEgdm9pZCByZXR1
cm4gdHlwZSBpcyBhZGRlZCBpbiB0aGUKIC8vIGZ1dHVyZSwgd2UgY2FuIHN3aXRjaCB0byB1c2lu
ZyB0aGF0IHRoZW4uCi1VbnVzZWRQdHIgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYW5kbGVUcmFw
cyhFeGVjU3RhdGUqIGV4ZWMpCitVbnVzZWRQdHIgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYW5k
bGVUcmFwcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEFTU0VSVCh2bS5uZWVkVHJhcEhhbmRsaW5nKCkpOwot
ICAgIHZtLmhhbmRsZVRyYXBzKGV4ZWMpOworICAgIHZtLmhhbmRsZVRyYXBzKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkRlYnVnKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBkZWJ1Z0hvb2tUeXBl
KQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlYnVnKFZNKiB2bVBvaW50ZXIsIGludDMy
X3QgZGVidWdIb29rVHlwZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50
ZXI7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICB2
bS5pbnRlcnByZXRlci0+ZGVidWcoZXhlYywgc3RhdGljX2Nhc3Q8RGVidWdIb29rVHlwZT4oZGVi
dWdIb29rVHlwZSkpOworICAgIHZtLmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIHN0YXRp
Y19jYXN0PERlYnVnSG9va1R5cGU+KGRlYnVnSG9va1R5cGUpKTsKIH0KIAogI2lmIEVOQUJMRShE
RkdfSklUKQpAQCAtMTQ0OSwxMCArMTQ3NiwxMSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVBbGxQcmVk
aWN0aW9uc0FuZE9wdGltaXplQWZ0ZXJXYXJtVXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAg
Y29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiB9CiAKLVNsb3dQYXRoUmV0dXJuVHlw
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgdWludDMy
X3QgYnl0ZWNvZGVJbmRleCkKK1Nsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9wdGltaXplKFZNKiB2bVBvaW50ZXIsIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgLy8gRGVmZXIgR0MgZm9yIGEgd2hpbGUg
c28gdGhhdCBpdCBkb2Vzbid0IHJ1biBiZXR3ZWVuIHdoZW4gd2UgZW50ZXIgaW50byB0aGlzCiAg
ICAgLy8gc2xvdyBwYXRoIGFuZCB3aGVuIHdlIGZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIG91ciBj
b2RlIGJsb2NrLiBUaGlzIHByZXZlbnRzCkBAIC0xNDcwLDcgKzE0OTgsNyBAQCBTbG93UGF0aFJl
dHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMs
IHVpbnQzMl90IGJ5dAogICAgIC8vIHN0YWNrLgogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
Qyh2bS5oZWFwKTsKICAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVC
bG9jaygpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKICAgICBpZiAoVU5MSUtFTFkoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKSB7CiAgICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBC
YXNlbGluZS0+REZHIHRpZXItdXA6ICIsICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTYyNSw3ICsxNjUzLDcgQEAgU2xvd1BhdGhS
ZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoRXhlY1N0YXRlKiBleGVj
LCB1aW50MzJfdCBieXQKICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVl
cy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBpZiAob3BlcmFuZElzTG9jYWwob3Bl
cmFuZCkgJiYgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSA8IGxvY2Fsc1VzZWRG
b3JDYWxsZWVTYXZlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG11
c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsK
KyAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
b3BlcmFuZCkuanNWYWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiByZXBs
YWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKQEAgLTE2NDIs
NyArMTY3MCw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9w
dGltaXplKEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgYnl0CiAgICAgQ29kZUJsb2NrKiBvcHRp
bWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CiAgICAgQVNTRVJUKG9w
dGltaXplZENvZGVCbG9jayAmJiBKSVRDb2RlOjppc09wdGltaXppbmdKSVQob3B0aW1pemVkQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAKLSAgICBpZiAodm9pZCogZGF0YUJ1ZmZlciA9IERG
Rzo6cHJlcGFyZU9TUkVudHJ5KGV4ZWMsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJbmRl
eCkpIHsKKyAgICBpZiAodm9pZCogZGF0YUJ1ZmZlciA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KHZt
LCBjYWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCkpIHsKICAgICAg
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChvcHRpbWl6ZWRDb2RlQmxvY2ssICJvc3JFbnRyeSIsICgi
YXQgYmMjIiwgYnl0ZWNvZGVJbmRleCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSkgewogICAgICAgICAgICAgZGF0YUxvZygKQEAgLTE2NTIsNyArMTY4MCw3
IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKEV4
ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgYnl0CiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVT
b29uKCk7CiAgICAgICAgIGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+c2V0RGlkT3B0
aW1pemUoVHJ1ZVRyaVN0YXRlKTsKICAgICAgICAgdm9pZCogdGFyZ2V0UEMgPSB2bS5nZXRDVElT
dHViKERGRzo6b3NyRW50cnlUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7Ci0gICAgICAgIHRhcmdldFBDID0gcmV0YWdDb2RlUHRyKHRhcmdldFBDLCBKSVRUaHVua1B0
clRhZywgYml0d2lzZV9jYXN0PFB0clRhZz4oZXhlYykpOworICAgICAgICB0YXJnZXRQQyA9IHJl
dGFnQ29kZVB0cih0YXJnZXRQQywgSklUVGh1bmtQdHJUYWcsIGJpdHdpc2VfY2FzdDxQdHJUYWc+
KGNhbGxGcmFtZSkpOwogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRhcmdldFBDLCBkYXRh
QnVmZmVyKTsKICAgICB9CiAKQEAgLTE2OTQsMTkgKzE3MjIsMjAgQEAgU2xvd1BhdGhSZXR1cm5U
eXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCB1aW50
MzJfdCBieXQKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KDAsIDApOwogfQogCi1jaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaChFeGVjU3RhdGUqIGV4ZWMsIHVp
bnQzMl90IGJ5dGVjb2RlSW5kZXgpCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaChWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRlY29kZUluZGV4KQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIENvZGVCbG9jayogb3B0aW1pemVkUmVw
bGFjZW1lbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+cmVwbGFjZW1lbnQoKTsKKyAgICBDb2RlQmxv
Y2sqIG9wdGltaXplZFJlcGxhY2VtZW50ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+cmVwbGFj
ZW1lbnQoKTsKICAgICBpZiAoVU5MSUtFTFkoIW9wdGltaXplZFJlcGxhY2VtZW50KSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2ggKG9wdGltaXplZFJlcGxhY2VtZW50LT5q
aXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAgICBjYXNlIEpJVFR5cGU6
OkZUTEpJVDogewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4gZW50cnkgPSBERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KGV4ZWMsIG9wdGltaXpl
ZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZHOjpwcmVwYXJlQ2F0Y2hPU1JF
bnRyeSh2bSwgY2FsbEZyYW1lLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwgYnl0ZWNvZGVJbmRleCk7
CiAgICAgICAgIHJldHVybiBlbnRyeS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKICAgICB9
CiAgICAgZGVmYXVsdDoKQEAgLTE3MTUsMTIgKzE3NDQsMTMgQEAgY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2goRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBi
eXRlY28KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCB1
aW50MzJfdCBieXRlY29kZUluZGV4KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlP
U1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qIHZtUG9pbnRlciwgdWludDMyX3QgYnl0
ZWNvZGVJbmRleCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZFJl
cGxhY2VtZW50ID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwogICAgIGlmIChVTkxJS0VMWSgh
b3B0aW1pemVkUmVwbGFjZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE3Mjgs
NyArMTc1OCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoQW5kVmFsdWVQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywKICAgICBzd2l0Y2ggKG9wdGltaXpl
ZFJlcGxhY2VtZW50LT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKICAg
ICBjYXNlIEpJVFR5cGU6OkZUTEpJVDogewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4gZW50cnkgPSBERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5
KGV4ZWMsIG9wdGltaXplZFJlcGxhY2VtZW50LCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IGVudHJ5ID0gREZHOjpw
cmVwYXJlQ2F0Y2hPU1JFbnRyeSh2bSwgY2FsbEZyYW1lLCBvcHRpbWl6ZWRSZXBsYWNlbWVudCwg
Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHJldHVybiBlbnRyeS5leGVjdXRhYmxlQWRkcmVzczxj
aGFyKj4oKTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTE3MzksNyArMTc2OSw3IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxl
KEV4ZWNTdGF0ZSogZXhlYywKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgbWV0YWRhdGEubV9idWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7Ci0gICAg
ICAgIHByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnVuY2hlY2tl
ZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CisgICAgICAgIHByb2ZpbGUubV9idWNr
ZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9maWxlLm1f
b3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIAogICAgIHJldHVybiBudWxscHRyOwpAQCAt
MTc0NywxNCArMTc3NywxNSBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVu
dGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsCiAKICNlbmRpZgogCi12
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRBcnJheVZhbHVlLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJbmRl
eChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJy
YXlWYWx1ZSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgSlNWYWx1ZSBhcnJheVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcnJheVZhbHVlKTsKICAgICBBU1NFUlQoaXNK
U0FycmF5KGFycmF5VmFsdWUpKTsKLSAgICBhc0FycmF5KGFycmF5VmFsdWUpLT5wdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIGFz
QXJyYXkoYXJyYXlWYWx1ZSktPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogZW51bSBjbGFzcyBBY2Nlc3NvclR5
cGUgewpAQCAtMTc2Miw2NSArMTc5Myw3MCBAQCBlbnVtIGNsYXNzIEFjY2Vzc29yVHlwZSB7CiAg
ICAgU2V0dGVyCiB9OwogCi1zdGF0aWMgdm9pZCBwdXRBY2Nlc3NvckJ5VmFsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgc3Vic2NyaXB0LCBpbnQzMl90IGF0dHJpYnV0
ZSwgSlNPYmplY3QqIGFjY2Vzc29yLCBBY2Nlc3NvclR5cGUgYWNjZXNzb3JUeXBlKQorc3RhdGlj
IHZvaWQgcHV0QWNjZXNzb3JCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09i
amVjdCogYmFzZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIGludDMyX3QgYXR0cmlidXRlLCBKU09iamVj
dCogYWNjZXNzb3IsIEFjY2Vzc29yVHlwZSBhY2Nlc3NvclR5cGUpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8gcHJvcGVydHlLZXkgPSBz
dWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBhdXRvIHByb3BlcnR5S2V5ID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIGlmIChhY2Nl
c3NvclR5cGUgPT0gQWNjZXNzb3JUeXBlOjpHZXR0ZXIpCi0gICAgICAgIGJhc2UtPnB1dEdldHRl
cihleGVjLCBwcm9wZXJ0eUtleSwgYWNjZXNzb3IsIGF0dHJpYnV0ZSk7CisgICAgICAgIGJhc2Ut
PnB1dEdldHRlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5S2V5LCBhY2Nlc3NvciwgYXR0cmlidXRl
KTsKICAgICBlbHNlCi0gICAgICAgIGJhc2UtPnB1dFNldHRlcihleGVjLCBwcm9wZXJ0eUtleSwg
YWNjZXNzb3IsIGF0dHJpYnV0ZSk7CisgICAgICAgIGJhc2UtPnB1dFNldHRlcihnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5S2V5LCBhY2Nlc3NvciwgYXR0cmlidXRlKTsKIH0KIAotdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEdldHRlckJ5SWQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgaW50MzJfdCBvcHRpb25zLCBKU0NlbGwqIGdl
dHRlcikKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJCeUlkKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCBpbnQzMl90IG9wdGlvbnMsIEpTQ2VsbCogZ2V0dGVyKQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgQVNTRVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2Jq
ZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gb2JqZWN0LT5nZXRPYmplY3QoKTsKIAog
ICAgIEFTU0VSVChnZXR0ZXItPmlzT2JqZWN0KCkpOwotICAgIGJhc2VPYmotPnB1dEdldHRlcihl
eGVjLCB1aWQsIGdldHRlciwgb3B0aW9ucyk7CisgICAgYmFzZU9iai0+cHV0R2V0dGVyKGdsb2Jh
bE9iamVjdCwgdWlkLCBnZXR0ZXIsIG9wdGlvbnMpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0U2V0dGVyQnlJZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBpbnQzMl90IG9wdGlvbnMsIEpTQ2VsbCogc2V0dGVyKQor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFNldHRlckJ5SWQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIGlu
dDMyX3Qgb3B0aW9ucywgSlNDZWxsKiBzZXR0ZXIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CiAKICAgICBBU1NFUlQob2JqZWN0ICYmIG9iamVjdC0+aXNPYmplY3QoKSk7
CiAgICAgSlNPYmplY3QqIGJhc2VPYmogPSBvYmplY3QtPmdldE9iamVjdCgpOwogCiAgICAgQVNT
RVJUKHNldHRlci0+aXNPYmplY3QoKSk7Ci0gICAgYmFzZU9iai0+cHV0U2V0dGVyKGV4ZWMsIHVp
ZCwgc2V0dGVyLCBvcHRpb25zKTsKKyAgICBiYXNlT2JqLT5wdXRTZXR0ZXIoZ2xvYmFsT2JqZWN0
LCB1aWQsIHNldHRlciwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRHZXR0ZXJCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCogZ2V0dGVy
KQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlckJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCogZ2V0dGVyKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgcHV0QWNjZXNzb3JCeVZhbChleGVjLCBh
c09iamVjdChiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLCBhdHRyaWJ1
dGUsIGFzT2JqZWN0KGdldHRlciksIEFjY2Vzc29yVHlwZTo6R2V0dGVyKTsKKyAgICBwdXRBY2Nl
c3NvckJ5VmFsKGdsb2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZSksIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkU3Vic2NyaXB0KSwgYXR0cmlidXRlLCBhc09iamVjdChnZXR0ZXIpLCBBY2Nlc3NvclR5
cGU6OkdldHRlcik7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRTZXR0ZXJC
eVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCogc2V0dGVyKQordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dFNldHRlckJ5VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgaW50
MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCogc2V0dGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOwogCi0gICAgcHV0QWNjZXNzb3JCeVZhbChleGVjLCBhc09iamVjdChiYXNl
KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLCBhdHRyaWJ1dGUsIGFzT2JqZWN0
KHNldHRlciksIEFjY2Vzc29yVHlwZTo6U2V0dGVyKTsKKyAgICBwdXRBY2Nlc3NvckJ5VmFsKGds
b2JhbE9iamVjdCwgYXNPYmplY3QoYmFzZSksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KSwgYXR0cmlidXRlLCBhc09iamVjdChzZXR0ZXIpLCBBY2Nlc3NvclR5cGU6OlNldHRlcik7
CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEdldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBpbnQzMl90IGF0dHJpYnV0ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEdl
dHRlclZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU2V0dGVyVmFsdWUpCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBpbnQzMl90IGF0
dHJpYnV0ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEdldHRlclZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkU2V0dGVyVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CiAKICAgICBBU1NFUlQob2JqZWN0ICYmIG9iamVjdC0+aXNPYmplY3QoKSk7CiAgICAgSlNP
YmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChvYmplY3QpOwpAQCAtMTgyOCwxNSArMTg2NCwx
NiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBvYmplY3QsIFVuaQogICAgIEpTVmFsdWUgZ2V0dGVyID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRHZXR0ZXJWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzZXR0ZXIgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFNldHRlclZhbHVlKTsKICAgICBBU1NFUlQoZ2V0dGVyLmlzT2Jq
ZWN0KCkgfHwgc2V0dGVyLmlzT2JqZWN0KCkpOwotICAgIEdldHRlclNldHRlciogYWNjZXNzb3Ig
PSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBn
ZXR0ZXIsIHNldHRlcik7Ci0gICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RBY2Nlc3Nvcldp
dGhSZWlmeSh2bSwgZXhlYywgYmFzZU9iamVjdCwgdWlkLCBhY2Nlc3NvciwgYXR0cmlidXRlKTsK
KyAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgZ2V0dGVyLCBzZXR0ZXIpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGly
ZWN0QWNjZXNzb3JXaXRoUmVpZnkodm0sIGdsb2JhbE9iamVjdCwgYmFzZU9iamVjdCwgdWlkLCBh
Y2Nlc3NvciwgYXR0cmlidXRlKTsKIH0KIAogI2Vsc2UKLXZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG9iamVjdCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCogZ2V0dGVyQ2Vs
bCwgSlNDZWxsKiBzZXR0ZXJDZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdl
dHRlclNldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCogZ2V0dGVy
Q2VsbCwgSlNDZWxsKiBzZXR0ZXJDZWxsKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwogCiAgICAgQVNTRVJUKG9iamVjdCAmJiBvYmplY3QtPmlzT2JqZWN0KCkpOwogICAg
IEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0KTsKQEAgLTE4NDQsNDggKzE4
ODEsNTEgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlclNldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogb2JqZWN0LCBVbmkKICAgICBBU1NFUlQoZ2V0dGVyQ2VsbCB8
fCBzZXR0ZXJDZWxsKTsKICAgICBKU09iamVjdCogZ2V0dGVyID0gZ2V0dGVyQ2VsbCA/IGdldHRl
ckNlbGwtPmdldE9iamVjdCgpIDogbnVsbHB0cjsKICAgICBKU09iamVjdCogc2V0dGVyID0gc2V0
dGVyQ2VsbCA/IHNldHRlckNlbGwtPmdldE9iamVjdCgpIDogbnVsbHB0cjsKLSAgICBHZXR0ZXJT
ZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgZ2V0dGVyLCBzZXR0ZXIpOwotICAgIENvbW1vblNsb3dQYXRoczo6cHV0
RGlyZWN0QWNjZXNzb3JXaXRoUmVpZnkodm0sIGV4ZWMsIGJhc2VPYmplY3QsIHVpZCwgYWNjZXNz
b3IsIGF0dHJpYnV0ZSk7CisgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRl
cjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdldHRlciwgc2V0dGVyKTsKKyAgICBDb21tb25T
bG93UGF0aHM6OnB1dERpcmVjdEFjY2Vzc29yV2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJh
c2VPYmplY3QsIHVpZCwgYWNjZXNzb3IsIGF0dHJpYnV0ZSk7CiB9CiAjZW5kaWYKIAotdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBz
Y29wZVJlZykKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHNjb3BlUmVnKQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNr
ZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBleGVjLT51bmNoZWNrZWRSKHNj
b3BlUmVnKSA9IHNjb3BlLT5uZXh0KCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihzY29wZVJlZykgPSBzY29wZS0+bmV4dCgpOwogfQogCi1pbnQzMl90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbShFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkSGFzSW5zdGFuY2UpCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SW5zdGFuY2VPZkN1c3RvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEhhc0luc3RhbmNlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkSGFz
SW5zdGFuY2UpOwogCi0gICAgaWYgKGNvbnN0cnVjdG9yLT5oYXNJbnN0YW5jZShleGVjLCB2YWx1
ZSwgaGFzSW5zdGFuY2VWYWx1ZSkpCisgICAgaWYgKGNvbnN0cnVjdG9yLT5oYXNJbnN0YW5jZShn
bG9iYWxPYmplY3QsIHZhbHVlLCBoYXNJbnN0YW5jZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIDE7
CiAgICAgcmV0dXJuIDA7CiB9CiAKIH0KIAotc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitzdGF0aWMgSlNW
YWx1ZSBnZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlw
dC5pc1N0cmluZygpKSkgewogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpiYXNlVmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChKU0NlbGw6OmNhblVzZUZh
c3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8QXRvbVN0
cmluZ0ltcGw+IGV4aXN0aW5nQXRvbVN0cmluZyA9IGFzU3RyaW5nKHN1YnNjcmlwdCktPnRvRXhp
c3RpbmdBdG9tU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgUmVmUHRyPEF0b21TdHJpbmdJbXBs
PiBleGlzdGluZ0F0b21TdHJpbmcgPSBhc1N0cmluZyhzdWJzY3JpcHQpLT50b0V4aXN0aW5nQXRv
bVN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChleGlzdGluZ0F0b21TdHJpbmcpIHsK
ICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCkt
PmZhc3RHZXRPd25Qcm9wZXJ0eSh2bSwgc3RydWN0dXJlLCBleGlzdGluZ0F0b21TdHJpbmcuZ2V0
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChleGVjLT5ieXRlY29kZU9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmIGJ5VmFs
SW5mby0+Y2FjaGVkSWQuaW1wbCgpICE9IGV4aXN0aW5nQXRvbVN0cmluZykKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE4OTUsMTQgKzE5MzUsMTQgQEAgc3RhdGljIEpT
VmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIEIKICAgICB9CiAKICAgICBpZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewot
ICAgICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChj
YWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7CiAKICAgICAgICAgaW50MzJfdCBpID0gc3Vic2NyaXB0LmFzSW50MzIoKTsK
ICAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgaWYgKGkg
Pj0gMCAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewogICAgICAgICAg
ICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBvcGVyYXRp
b25HZXRCeVZhbFN0cmluZyk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChleGVjLCBpKSk7CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJ
bmRleChnbG9iYWxPYmplY3QsIGkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJ5VmFs
SW5mby0+YXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAgICB9IGVsc2UgaWYg
KGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CkBAIC0xOTI4LDMzICsxOTY4LDMzIEBAIHN0YXRpYyBK
U1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgc3Vic2NyaXB0LCBCCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaSA+PSAwKQotICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBiYXNlVmFsdWUuZ2V0KGV4ZWMsIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihpKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkp
KSk7CiAgICAgfQogCi0gICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7
CisgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZ2xvYmFsT2JqZWN0KTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwotICAgIGF1dG8gcHJvcGVy
dHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBhdXRvIHByb3BlcnR5ID0g
c3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCi0gICAgQVNTRVJUKGV4ZWMtPmJ5dGVjb2RlT2Zm
c2V0KCkpOworICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgIGlm
IChieVZhbEluZm8tPnN0dWJJbmZvICYmICghaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8
IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpKQogICAgICAgICBieVZhbEluZm8tPnRv
b2tTbG93UGF0aCA9IHRydWU7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJhc2VW
YWx1ZS5nZXQoZXhlYywgcHJvcGVydHkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eSkpOwogfQogCi1zdGF0aWMgT3B0
aW1pemF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCitzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeUdldEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKICAg
ICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIHRoaXMgYXQgYWxsLgogICAgIE9wdGlt
aXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5v
dE9wdGltaXplZDsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigp
KSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogCi0g
ICAgICAgIEFTU0VSVChleGVjLT5ieXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGNh
bGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5z
dHViUm91dGluZSk7CiAKICAgICAgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0
LT5zdHJ1Y3R1cmUodm0pKSkgewpAQCAtMTk2NCw3ICsyMDA0LDcgQEAgc3RhdGljIE9wdGltaXph
dGlvblJlc3VsdCB0cnlHZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1v
ZGUpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIHRoaXMgY2FzZSwgd2UgZ290
IGFuIGludGVyZXN0aW5nIGFycmF5IG1vZGUgd2UgZGlkIG5vdCBleHBlY3Qgd2hlbiB3ZSBjb21w
aWxlZC4KICAgICAgICAgICAgICAgICAvLyBMZXQncyB1cGRhdGUgdGhlIHByb2ZpbGUgdG8gZG8g
YmV0dGVyIG5leHQgdGltZS4KLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBieVZhbElu
Zm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpOwogCkBAIC0xOTc5LDIxICsyMDE5LDIxIEBAIHN0YXRpYyBPcHRpbWl6
YXRpb25SZXN1bHQgdHJ5R2V0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlCiAgICAgfQogCiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIGlzU3Ry
aW5nT3JTeW1ib2woc3Vic2NyaXB0KSkgewotICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIE9wdGltaXphdGlvblJl
c3VsdDo6R2l2ZVVwKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdC5pc1N5bWJvbCgpIHx8ICFwYXJz
ZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5ieXRlY29k
ZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0
KCkpOwogICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKICAgICAg
ICAgICAgIGlmIChieVZhbEluZm8tPnNlZW4pIHsKICAgICAgICAgICAgICAgICBpZiAoYnlWYWxJ
bmZvLT5jYWNoZWRJZCA9PSBwcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgSklU
Ojpjb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZh
bEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAg
IEpJVDo6Y29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKHZtLCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAg
ICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1p
emVkOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNl
ZW0gbGlrZSBhIGdlbmVyaWMgcHJvcGVydHkgYWNjZXNzIHNpdGUuCiAgICAgICAgICAgICAgICAg
ICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5zZWVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBieVZh
bEluZm8tPmNhY2hlZElkID0gcHJvcGVydHlOYW1lOwpAQCAtMjAxOSwyNyArMjA1OSwyOSBAQCBz
dGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZQogCiBleHRlcm4gIkMiIHsKIAotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwg
QnlWYWxJbmZvKiBieVZhbEluZm8pCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2Up
OwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3Jp
cHQpOwogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1
YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JF
VFVSTl9BRERSRVNTKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
U3Vic2NyaXB0KTsKICAgICBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MgPSBSZXR1cm5B
ZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyk7Ci0gICAgT3B0aW1pemF0aW9uUmVzdWx0IHJl
c3VsdCA9IHRyeUdldEJ5VmFsT3B0aW1pemUoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5
VmFsSW5mbywgcmV0dXJuQWRkcmVzcyk7CisgICAgT3B0aW1pemF0aW9uUmVzdWx0IHJlc3VsdCA9
IHRyeUdldEJ5VmFsT3B0aW1pemUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGJhc2VWYWx1ZSwg
c3Vic2NyaXB0LCBieVZhbEluZm8sIHJldHVybkFkZHJlc3MpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKHJlc3VsdCA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KQEAgLTIw
NDcsMTMgKzIwODksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEoKICAgICAgICAgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIG9wZXJhdGlvbkdldEJ5VmFsR2Vu
ZXJpYyk7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoZ2V0QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0
dXJuQWRkcmVzcykpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShnZXRCeVZhbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3Jp
cHQsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0KEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRT
dWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgCkBAIC0yMDYzLDE0ICsyMTA2LDE0IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVs
dChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CiAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOwogCi0gICAgQVNTRVJUKGV4ZWMt
PmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEFTU0VSVChjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0
KCkpOwogICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CiAgICAgCiAgICAgaWYg
KGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkgewogICAgICAg
ICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVjdC0+c3RydWN0dXJlKHZtKSk7CiAgICAg
ICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKLSAgICAgICAgICAg
IEpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUp
OworICAgICAgICAgICAgSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KHZtLCBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9B
RERSRVNTKSwgYXJyYXlNb2RlKTsKICAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTIwOTQsMTMgKzIxMzcsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0KEV4ZWNTdGF0ZSog
ZXhlYywKIAogICAgIGlmICghQ29tbW9uU2xvd1BhdGhzOjpjYW5BY2Nlc3NBcmd1bWVudEluZGV4
UXVpY2tseSgqb2JqZWN0LCBpbmRleCkpCiAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxl
LT5zZXRPdXRPZkJvdW5kcygpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KG9iamVjdC0+aGFzUHJvcGVydHlHZW5lcmljKGV4ZWMsIGluZGV4LCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0
LCBpbmRleCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5
KSkpOwogfQogICAgIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJ
bmRleGVkUHJvcGVydHlHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlW
YWxJbmZvKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVk
UHJvcGVydHlHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAg
SlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAg
ICAgCkBAIC0yMTE0LDEzICsyMTU4LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsCiAKICAg
ICBpZiAoIUNvbW1vblNsb3dQYXRoczo6Y2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHkoKm9i
amVjdCwgaW5kZXgpKQogICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+c2V0T3V0T2ZC
b3VuZHMoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhh
c1Byb3BlcnR5R2VuZXJpYyhleGVjLCBpbmRleCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU6OkdldE93blByb3BlcnR5KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKG9iamVjdC0+aGFzUHJvcGVydHlHZW5lcmljKGdsb2JhbE9iamVjdCwgaW5kZXgsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkpKTsKIH0KICAg
ICAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2UpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJz
Y3JpcHQpOwpAQCAtMjEyOSwxODMgKzIxNzQsMjEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
CiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgdWludDMy
X3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNl
VmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKQotICAgICAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoYXNTdHJpbmcoYmFz
ZVZhbHVlKS0+Z2V0SW5kZXgoZXhlYywgaSkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4
KGdsb2JhbE9iamVjdCwgaSkpKTsKIAotICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4
ZWMsIGkpOworICAgICAgICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgaSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgICAgICBpZiAoIWlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewotICAgICAgICAgICAgQVNTRVJU
KGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+
Ynl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgICAgICBhdXRvIGdldEJ5VmFsRnVuY3Rpb24gPSBi
eVZhbEluZm8tPnN0dWJSb3V0aW5lID8gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljIDogb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZTsKICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGdldEJ5VmFsRnVuY3Rp
b24pOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYmFzZVZhbHVlLnJlcXVpcmVP
YmplY3RDb2VyY2libGUoZXhlYyk7CisgICAgICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29l
cmNpYmxlKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRv
UHJvcGVydHlLZXkoZXhlYyk7CisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Q
cm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAg
ICByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5KTsKKyAgICAgICAgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5KTsKICAgICB9CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgYmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3N0YXRpYyBib29sIGRl
bGV0ZUJ5SWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFZNJiB2bSwgSlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9wZXJhdGlvbkRlbGV0ZUJ5SWQoZXhl
YywgYmFzZSwgdWlkKSkpOwotfQotCi1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxl
dGVCeUlkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU09iamVjdCogYmFzZU9iaiA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZSkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2VP
YmogPSBiYXNlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgIGlmICghYmFzZU9iaikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGJvb2wgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCkpOwor
ICAgIGJvb2wgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVBy
b3BlcnR5KGJhc2VPYmosIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlk
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgIGlmICghY291
bGREZWxldGUgJiYgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKQotICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsK
KyAgICBpZiAoIWNvdWxkRGVsZXRlICYmIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0
TW9kZSgpKQorICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFi
bGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpOwogICAgIHJldHVybiBjb3VsZERlbGV0ZTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgIEVuY29kZWRKU1ZhbHVlIGtl
eSkKKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlkSlNS
ZXN1bHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4ob3BlcmF0aW9uRGVsZXRlQnlWYWwoZXhlYywgYmFzZSwga2V5KSkpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihkZWxldGVCeUlkKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCB2bSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRCYXNlKSwgdWlkKSkpOwogfQogCi1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25EZWxldGVCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkS2V5KQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRGVsZXRlQnlJZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CisgICAgcmV0dXJuIGRlbGV0ZUJ5SWQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHZt
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLCB1aWQpOworfQorCitzdGF0aWMgYm9vbCBk
ZWxldGVCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgVk0mIHZtLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUga2V5KQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNPYmpl
Y3QqIGJhc2VPYmogPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnRvT2JqZWN0KGV4ZWMp
OworICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYmFzZS50b09iamVjdChnbG9iYWxPYmplY3QpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICBKU1ZhbHVlIGtleSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBpZiAoIWJhc2VPYmopCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgY291bGREZWxldGU7CiAgICAgdWludDMyX3QgaW5k
ZXg7CiAgICAgaWYgKGtleS5nZXRVSW50MzIoaW5kZXgpKQotICAgICAgICBjb3VsZERlbGV0ZSA9
IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KGJhc2VPYmos
IGV4ZWMsIGluZGV4KTsKKyAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJs
ZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqLCBnbG9iYWxPYmplY3QsIGluZGV4
KTsKICAgICBlbHNlIHsKLSAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eSA9IGtleS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0ga2V5LnRvUHJvcGVy
dHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwotICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwgZXhlYywgcHJvcGVydHkpOworICAgICAgICBjb3VsZERl
bGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkoYmFzZU9iaiwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKLSAgICBpZiAoIWNvdWxkRGVsZXRlICYmIGV4ZWMtPmNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFVu
YWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CisgICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKICAg
ICByZXR1cm4gY291bGREZWxldGU7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXNoV2l0aFNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjdXJyZW50U2NvcGVDZWxs
LCBFbmNvZGVkSlNWYWx1ZSBvYmplY3RWYWx1ZSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRL
ZXkpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZGVsZXRlQnlWYWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIHZtLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEtleSkpKSk7Cit9CisKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkS2V5KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
KyAgICByZXR1cm4gZGVsZXRlQnlWYWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHZtLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSkpOwor
fQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHVzaFdpdGhTY29wZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIGN1cnJlbnRTY29wZUNlbGwsIEVuY29kZWRK
U1ZhbHVlIG9iamVjdFZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU09iamVjdCogb2JqZWN0ID0g
SlNWYWx1ZTo6ZGVjb2RlKG9iamVjdFZhbHVlKS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVj
dCogb2JqZWN0ID0gSlNWYWx1ZTo6ZGVjb2RlKG9iamVjdFZhbHVlKS50b09iamVjdChnbG9iYWxP
YmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
SlNTY29wZSogY3VycmVudFNjb3BlID0ganNDYXN0PEpTU2NvcGUqPihjdXJyZW50U2NvcGVDZWxs
KTsKIAotICAgIHJldHVybiBKU1dpdGhTY29wZTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGN1cnJlbnRTY29wZSwgb2JqZWN0KTsKKyAgICByZXR1cm4gSlNXaXRoU2Nv
cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIG9iamVjdCk7CiB9CiAK
LUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXNoV2l0aFNjb3BlT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjdXJyZW50U2NvcGVDZWxsLCBKU09iamVjdCogb2JqZWN0KQor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hXaXRoU2NvcGVPYmplY3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBjdXJyZW50U2NvcGVDZWxsLCBKU09iamVj
dCogb2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEpT
U2NvcGUqIGN1cnJlbnRTY29wZSA9IGpzQ2FzdDxKU1Njb3BlKj4oY3VycmVudFNjb3BlQ2VsbCk7
Ci0gICAgcmV0dXJuIEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgY3VycmVudFNjb3BlLCBvYmplY3QpOworICAgIHJldHVybiBKU1dpdGhTY29wZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgb2JqZWN0KTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
UHJvdG8pCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2Yo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvdG8pCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIEpTVmFsdWUgcHJvdG8gPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3Rv
KTsKICAgICAKLSAgICBib29sIHJlc3VsdCA9IEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2Uo
ZXhlYywgdmFsdWUsIHByb3RvKTsKKyAgICBib29sIHJlc3VsdCA9IEpTT2JqZWN0OjpkZWZhdWx0
SGFzSW5zdGFuY2UoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgcHJvdG8pOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRQcm90bykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSW5zdGFuY2VPZkdlbmVyaWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm90bykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgSlNWYWx1ZSBwcm90byA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvdG8p
OwogICAgIAogICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgIAotICAgIGJv
b2wgcmVzdWx0ID0gSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShleGVjLCB2YWx1ZSwgcHJv
dG8pOworICAgIGJvb2wgcmVzdWx0ID0gSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShnbG9i
YWxPYmplY3QsIHZhbHVlLCBwcm90byk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4ocmVzdWx0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm90bykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvdG8pCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBKU1ZhbHVlIHByb3RvID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm90byk7CiAgICAgCi0gICAgYm9vbCByZXN1bHQgPSBK
U09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKGV4ZWMsIHZhbHVlLCBwcm90byk7CisgICAgYm9v
bCByZXN1bHQgPSBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKGdsb2JhbE9iamVjdCwgdmFs
dWUsIHByb3RvKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpOwogICAgIAotICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNo
aW5nKHZtLCBleGVjLT5jb2RlQmxvY2soKSwgdmFsdWUuc3RydWN0dXJlT3JOdWxsKCkpKQotICAg
ICAgICByZXBhdGNoSW5zdGFuY2VPZihleGVjLCB2YWx1ZSwgcHJvdG8sICpzdHViSW5mbywgcmVz
dWx0KTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CisgICAgaWYgKHN0dWJJbmZvLT5jb25zaWRlckNhY2hpbmcodm0sIGNvZGVCbG9jaywgdmFsdWUu
c3RydWN0dXJlT3JOdWxsKCkpKQorICAgICAgICByZXBhdGNoSW5zdGFuY2VPZihnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgdmFsdWUsIHByb3RvLCAqc3R1YkluZm8sIHJlc3VsdCk7CiAgICAgCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7CiB9CiAKLWludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QgbnVtVXNlZFN0YWNrU2xvdHMs
IGludDMyX3QpCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9y
d2FyZEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSwgaW50MzJfdCBudW1Vc2VkU3RhY2tTbG90cywgaW50MzJfdCkKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIHJldHVybiBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKGV4ZWMsIHZtLCBudW1Vc2Vk
U3RhY2tTbG90cyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiBzaXplRnJhbWVG
b3JGb3J3YXJkQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCB2bSwgbnVtVXNlZFN0
YWNrU2xvdHMpOwogfQogCi1pbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVu
dHMsIGludDMyX3QgbnVtVXNlZFN0YWNrU2xvdHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQp
CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnRz
LCBpbnQzMl90IG51bVVzZWRTdGFja1Nsb3RzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgYXJndW1l
bnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudHMpOwotICAgIHJldHVybiBzaXpl
RnJhbWVGb3JWYXJhcmdzKGV4ZWMsIHZtLCBhcmd1bWVudHMsIG51bVVzZWRTdGFja1Nsb3RzLCBm
aXJzdFZhckFyZ09mZnNldCk7CisgICAgcmV0dXJuIHNpemVGcmFtZUZvclZhcmFyZ3MoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIHZtLCBhcmd1bWVudHMsIG51bVVzZWRTdGFja1Nsb3RzLCBmaXJz
dFZhckFyZ09mZnNldCk7CiB9CiAKLUNhbGxGcmFtZSogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
ZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZShFeGVjU3RhdGUqIGV4ZWMsIENhbGxGcmFtZSogbmV3
Q2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCBsZW5ndGgpCitDYWxs
RnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUsIEVu
Y29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90IGxlbmd0aCkKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwot
ICAgIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKGV4ZWMsIG5ld0NhbGxGcmFtZSwgbGVuZ3Ro
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG5ld0NhbGxGcmFtZSwgbGVuZ3RoKTsKICAgICByZXR1
cm4gbmV3Q2FsbEZyYW1lOwogfQogCi1DYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U2V0dXBWYXJhcmdzRnJhbWUoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIG5ld0NhbGxGcmFt
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFyZ09m
ZnNldCwgaW50MzJfdCBsZW5ndGgpCitDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBuZXdDYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIGludDMyX3Qg
Zmlyc3RWYXJBcmdPZmZzZXQsIGludDMyX3QgbGVuZ3RoKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRBcmd1bWVudHMpOwotICAgIHNldHVwVmFyYXJnc0ZyYW1lKGV4ZWMsIG5ld0NhbGxG
cmFtZSwgYXJndW1lbnRzLCBmaXJzdFZhckFyZ09mZnNldCwgbGVuZ3RoKTsKKyAgICBzZXR1cFZh
cmFyZ3NGcmFtZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgbmV3Q2FsbEZyYW1lLCBhcmd1bWVu
dHMsIGZpcnN0VmFyQXJnT2Zmc2V0LCBsZW5ndGgpOwogICAgIHJldHVybiBuZXdDYWxsRnJhbWU7
CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3du
S2V5VHlwZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRLZXksIHNpemVf
dCB0YWJsZUluZGV4KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRLZXksIHNpemVfdCB0YWJsZUluZGV4KQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICBTaW1wbGVK
dW1wVGFibGUmIGp1bXBUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIHZvaWQqIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CkBAIC0yMzEzLDcgKzIzODgsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZAog
ICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNT
dHJpbmcoa2V5KTsKICAgICAgICAgaWYgKHN0cmluZy0+bGVuZ3RoKCkgPT0gMSkgewotICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlID0gc3RyaW5nLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgIFN0
cmluZyB2YWx1ZSA9IHN0cmluZy0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXN1
bHQgPSBqdW1wVGFibGUuY3RpRm9yVmFsdWUodmFsdWVbMF0pLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CiAgICAgICAgIH0KQEAgLTIzMjMsMTIgKzIzOTgsMTMgQEAgY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2QKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkS2V5LCBzaXplX3QgdGFibGVJbmRl
eCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlU
eXBlKFZNKiB2bVBvaW50ZXIsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRLZXksIHNpemVfdCB0YWJs
ZUluZGV4KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIGtleSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKIAogICAgIFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlID0gY29kZUJs
b2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgdm9pZCogcmVzdWx0OwpAQCAt
MjM0MiwxOSArMjQxOCwyMCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaElt
bVdpdGhVbmtub3duS2V5VHlwZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZQogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZShFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRLZXksIHNpemVfdCB0YWJsZUluZGV4KQorY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEtleSwgc2l6ZV90
IHRhYmxlSW5kZXgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAg
SlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7Ci0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7CiAgICAgU3RyaW5nSnVtcFRh
YmxlJiBqdW1wVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewotICAgICAgICBTdHJpbmdJbXBsKiB2
YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGV4ZWMpLmltcGwoKTsKKyAgICAgICAgU3RyaW5n
SW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsK
IAogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCkBA
IC0yMzY2LDYwICsyNDQzLDYyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlKEV4ZWNTdGF0ZSogZXhlYywgRW5jCiAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RnJvbVNjb3BlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SW5zdHJ1Y3Rpb24qIHBjKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRGcm9tU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
R2V0RnJvbVNjb3BlPigpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nh
c3Q8SlNPYmplY3QqPihleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkp
LmpzVmFsdWUoKSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7
CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
aykubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGlzIGFsd2F5cyBjb252ZXJ0ZWQg
dG8gQ2xvc3VyZVZhciBmb3IgZ2V0X2Zyb21fc2NvcGUuCiAgICAgQVNTRVJUKGdldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKSAhPSBNb2R1bGVWYXIpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZShzY29wZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlk
ZW50LCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNWYWx1ZSB7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZShzY29wZS0+
Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQsIFsmXSAoYm9vbCBmb3VuZCwgUHJv
cGVydHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgaWYgKCFmb3VuZCkgewogICAg
ICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQp
Ci0gICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
VW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpOworICAgICAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVW5kZWZpbmVkVmFy
aWFibGVFcnJvcihnbG9iYWxPYmplY3QsIGlkZW50KSk7CiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1
ZSgpOwogICAgICAgICBpZiAoc2NvcGUtPmlzR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpIHsK
ICAgICAgICAgICAgIC8vIFdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBwcm92ZSB3ZSBuZWVkIGEg
VERaIGNoZWNrLCB3ZSBtdXN0IHBlcmZvcm0gdGhlIGNoZWNrIG9uIHRoZSBzbG93IHBhdGguCi0g
ICAgICAgICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVudCk7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0ID09IGpzVERaVmFsdWUoKSkgewotICAgICAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVREWkVycm9yKGV4ZWMpKTsKKyAgICAg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZVREWkVycm9yKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgQ29tbW9uU2xvd1Bh
dGhzOjp0cnlDYWNoZUdldEZyb21TY29wZUdsb2JhbChleGVjLCB2bSwgYnl0ZWNvZGUsIHNjb3Bl
LCBzbG90LCBpZGVudCk7CisgICAgICAgIENvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVHZXRGcm9t
U2NvcGVHbG9iYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZtLCBieXRlY29kZSwgc2NvcGUs
IHNsb3QsIGlkZW50KTsKIAogICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVy
biBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKKyAgICAgICAgICAgIHJldHVybiBzbG90Lmdl
dFZhbHVlKGdsb2JhbE9iamVjdCwgaWRlbnQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0pKSk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dFRvU2NvcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5z
dHJ1Y3Rpb24qIHBjKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcFB1dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2Fz
dDxKU09iamVjdCo+KGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSku
anNWYWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+cihieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpz
VmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpKS5qc1ZhbHVlKCk7CiAgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1l
dGFkYXRhLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRo
ZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCkBAIC0yNDMzLDUwICsyNTEyLDUy
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ym9vbCBoYXNQcm9wZXJ0eSA9IHNjb3BlLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCk7CisgICAg
Ym9vbCBoYXNQcm9wZXJ0eSA9IHNjb3BlLT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHZvaWQoKSk7CiAgICAgaWYg
KGhhc1Byb3BlcnR5CiAgICAgICAgICYmIHNjb3BlLT5pc0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpCiAgICAgICAgICYmICFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpKSB7CiAgICAgICAgIC8vIFdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBwcm92ZSB3
ZSBuZWVkIGEgVERaIGNoZWNrLCB3ZSBtdXN0IHBlcmZvcm0gdGhlIGNoZWNrIG9uIHRoZSBzbG93
IHBhdGguCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICAgICAgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQ6OmdldE93blByb3BlcnR5U2xvdChzY29wZSwgZXhlYywgaWRlbnQsIHNsb3QpOwotICAgICAg
ICBpZiAoc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkgPT0ganNURFpWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVURFpFcnJvcihl
eGVjKSk7CisgICAgICAgIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0
eVNsb3Qoc2NvcGUsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOworICAgICAgICBpZiAoc2xv
dC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIGlkZW50KSA9PSBqc1REWlZhbHVlKCkpIHsKKyAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVERa
RXJyb3IoZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICBpZiAoZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpID09IFRocm93SWZOb3RGb3Vu
ZCAmJiAhaGFzUHJvcGVydHkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpOworICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZVVuZGVmaW5l
ZFZhcmlhYmxlRXJyb3IoZ2xvYmFsT2JqZWN0LCBpZGVudCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJp
Y3RNb2RlKCksIFB1dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRp
b24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwotICAgIHNjb3BlLT5tZXRob2RU
YWJsZSh2bSktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICBzY29w
ZS0+bWV0aG9kVGFibGUodm0pLT5wdXQoc2NvcGUsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHZhbHVl
LCBzbG90KTsKICAgICAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHZvaWQo
KSk7CiAKLSAgICBDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVj
LCBjb2RlQmxvY2ssIGJ5dGVjb2RlLCBzY29wZSwgc2xvdCwgaWRlbnQpOworICAgIENvbW1vblNs
b3dQYXRoczo6dHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBieXRlY29kZSwgc2NvcGUsIHNsb3QsIGlkZW50KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRocm93KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEV4
Y2VwdGlvblZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRFeGNlcHRpb25WYWx1
ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRFeGNlcHRpb25WYWx1ZSk7Ci0gICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgc2NvcGUsIGV4Y2VwdGlvblZhbHVlKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHNjb3BlLCBleGNlcHRpb25WYWx1ZSk7CiAKICAgICAvLyBSZXN1bHRzIHN0
b3JlZCBvdXQtb2YtYmFuZCBpbiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyAmIHZtLmNhbGxG
cmFtZUZvckNhdGNoCi0gICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgZ2VuZXJpY1Vu
d2luZCh2bSwgY2FsbEZyYW1lKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0
eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5KFZNKiB2bVBvaW50ZXIsIEpTT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSh2bSkt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5h
bGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNp
dHkpOwpAQCAtMjQ4NCwxMTAgKzI1NjUsMTIzIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLWNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3Rv
cmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJv
cGVydHlTdG9yYWdlKFZNKiB2bVBvaW50ZXIsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdT
aXplKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0
cnVjdHVyZSh2bSktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOwogICAgIG9iamVjdC0+
bnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmVJRCgpLCBy
ZXN1bHQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQog
Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjZWxsKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRl
QmFycmllcihWTSogdm1Qb2ludGVyLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNlbGwpOwogfQogCi12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGNlbGwpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgoVk0qIHZtUG9pbnRlciwgSlNDZWxsKiBjZWxsKQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKICAgICB2bS5oZWFwLndyaXRlQmFycmllclNsb3dQYXRoKGNlbGwpOwogfQog
Ci12b2lkIEpJVF9PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSogdm1Qb2ludGVy
LCBFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9va3VwRXhj
ZXB0aW9uSGFuZGxlcihWTSogdm1Qb2ludGVyKQogewogICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgZ2VuZXJp
Y1Vud2luZCh2bSwgZXhlYyk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKICAgICBBU1NFUlQodm0u
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gbG9va3Vw
RXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZShWTSogdm0sIEV4ZWNTdGF0ZSogZXhlYykK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNh
bGxlckZyYW1lKFZNKiB2bVBvaW50ZXIpCiB7Ci0gICAgQVNTRVJUKGV4ZWMtPmlzU3RhY2tPdmVy
Zmxvd0ZyYW1lKCkpOwotICAgIEFTU0VSVChqc0Nhc3Q8RXJyb3JJbnN0YW5jZSo+KHZtLT5leGNl
cHRpb25Gb3JJbnNwZWN0aW9uKCktPnZhbHVlKCkuYXNDZWxsKCkpLT5pc1N0YWNrT3ZlcmZsb3dF
cnJvcigpKTsKLSAgICBsb29rdXBFeGNlcHRpb25IYW5kbGVyKHZtLCBleGVjKTsKKyAgICBWTSYg
dm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOworICAgIEFTU0VSVChjYWxsRnJhbWUtPmlzU3RhY2tPdmVyZmxvd0ZyYW1lKCkpOworICAg
IEFTU0VSVChqc0Nhc3Q8RXJyb3JJbnN0YW5jZSo+KHZtLmV4Y2VwdGlvbkZvckluc3BlY3Rpb24o
KS0+dmFsdWUoKS5hc0NlbGwoKSktPmlzU3RhY2tPdmVyZmxvd0Vycm9yKCkpOworICAgIGdlbmVy
aWNVbndpbmQodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKHZtLnRhcmdldE1hY2hpbmVQQ0Zv
clRocm93KTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25WTUhhbmRs
ZUV4Y2VwdGlvbihWTSogdm1Qb2ludGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgZ2VuZXJpY1Vu
d2luZCh2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBnZW5lcmljVW53aW5kKHZtLCBjYWxs
RnJhbWUpOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uICJzaG91bGQiIGp1c3QgdGFrZSB0aGUgRXhl
Y1N0YXRlKiwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQKKy8vIFRo
aXMgZnVuY3Rpb24gInNob3VsZCIganVzdCB0YWtlIHRoZSBKU0dsb2JhbE9iamVjdCosIGJ1dCBk
b2luZyBzbyB3b3VsZCBtYWtlIGl0IG1vcmUgZGlmZmljdWx0CiAvLyB0byBjYWxsIGZyb20gZXhj
ZXB0aW9uIGNoZWNrIHNpdGVzLiBTbywgdW5saWtlIGFsbCBvZiBvdXIgb3RoZXIgZnVuY3Rpb25z
LCB3ZSBhbGxvdwogLy8gb3Vyc2VsdmVzIHRvIHBsYXkgc29tZSBnbmFybHkgQUJJIHRyaWNrcyBq
dXN0IHRvIHNpbXBsaWZ5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uIFRoaXMgaXMKIC8vIHBhcnRp
Y3VsYXJseSBzYWZlIGhlcmUgc2luY2UgdGhpcyBpcyBuZXZlciBjYWxsZWQgb24gdGhlIGNyaXRp
Y2FsIHBhdGggLSBpdCdzIG9ubHkgZm9yCiAvLyB0ZXN0aW5nLgotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enooSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKICNpZiBD
T01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKICAgICB2b2lkKiByZXR1cm5QQyA9IF9fYnVpbHRpbl9y
ZXR1cm5fYWRkcmVzcygwKTsKLSAgICBkb0V4Y2VwdGlvbkZ1enppbmcoZXhlYywgc2NvcGUsICJK
SVRPcGVyYXRpb25zIiwgcmV0dXJuUEMpOworICAgIGRvRXhjZXB0aW9uRnV6emluZyhnbG9iYWxP
YmplY3QsIHNjb3BlLCAiSklUT3BlcmF0aW9ucyIsIHJldHVyblBDKTsKICNlbmRpZiAvLyBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgdW5wcm9maWxlZEFkZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVkQWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgSlNWYWx1ZSBv
cDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAgICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0FkZChleGVjLCBvcDEsIG9wMikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNB
ZGQoZ2xvYmFsT2JqZWN0LCBvcDEsIG9wMikpOwogfQogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBwcm9maWxlZEFkZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSYgYXJp
dGhQcm9maWxlKQorQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmlsZWRB
ZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgSlNWYWx1
ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBhcml0aFByb2ZpbGUub2JzZXJ2ZUxI
U0FuZFJIUyhvcDEsIG9wMik7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FkZChleGVjLCBvcDEs
IG9wMik7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FkZChnbG9iYWxPYmplY3QsIG9wMSwgb3Ay
KTsKICAgICBhcml0aFByb2ZpbGUub2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwogCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsK
LSAgICByZXR1cm4gdW5wcm9maWxlZEFkZChleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyKTsK
KyAgICByZXR1cm4gdW5wcm9maWxlZEFkZChnbG9iYWxPYmplY3QsIGVuY29kZWRPcDEsIGVuY29k
ZWRPcDIpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKIHsKICAg
ICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gcHJvZmlsZWRBZGQoZXhlYywgZW5j
b2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSk7CisgICAgcmV0dXJuIHByb2ZpbGVk
QWRkKGdsb2JhbE9iamVjdCwgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqIGFkZElDKQorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqIGFkZElDKQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDIpOwpAQCAtMjU5NiwzMiArMjY5MCwzNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsCiAg
ICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKG9wMSwgb3AyKTsKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWROb09wdGltaXplOwotICAgIGFkZElDLT5nZW5lcmF0ZU91dE9mTGluZShl
eGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAgICBhZGRJQy0+Z2VuZXJh
dGVPdXRPZkxpbmUoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsK
IAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQotICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1w
TWF0aElDU3RhdHMoKTsKKyAgICBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5kdW1wTWF0aElDU3Rh
dHMoKTsKICNlbmRpZgogICAgIAotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBZGQoZXhlYywgb3Ax
LCBvcDIpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBZGQoZ2xvYmFsT2JqZWN0LCBvcDEsIG9w
Mik7CiAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBK
SVRBZGRJQyogYWRkSUMpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWROb09wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVEFk
ZElDKiBhZGRJQykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAg
IEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYWRkSUMtPmFyaXRoUHJvZmlsZSgpOwogICAg
IEFTU0VSVChhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBwcm9maWxlZEFkZChleGVjLCBlbmNv
ZGVkT3AxLCBlbmNvZGVkT3AyLCAqYXJpdGhQcm9maWxlKTsKKyAgICByZXR1cm4gcHJvZmlsZWRB
ZGQoZ2xvYmFsT2JqZWN0LCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCAqYXJpdGhQcm9maWxlKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE9wdGlt
aXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqIGFkZElDKQorRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIsIEpJVEFkZElDKiBhZGRJQykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAg
IEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwpAQCAtMjYyOSwzOSAr
MjcyNSw0MCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRk
T3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSgogICAgIGF1dG8gbm9uT3B0aW1pemVW
YXJpYW50ID0gb3BlcmF0aW9uVmFsdWVBZGROb09wdGltaXplOwogICAgIGlmIChBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IGFkZElDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQ
cm9maWxlLT5vYnNlcnZlTEhTQW5kUkhTKG9wMSwgb3AyKTsKLSAgICBhZGRJQy0+Z2VuZXJhdGVP
dXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgYWRk
SUMtPmdlbmVyYXRlT3V0T2ZMaW5lKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXpl
VmFyaWFudCk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKLSAgICBleGVjLT5jb2RlQmxv
Y2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CisgICAgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+ZHVt
cE1hdGhJQ1N0YXRzKCk7CiAjZW5kaWYKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNB
ZGQoZXhlYywgb3AxLCBvcDIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQWRkKGds
b2JhbE9iamVjdCwgb3AxLCBvcDIpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYWx1ZUFkZE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRBZGRJQyopCitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm9PcHRpbWl6ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRBZGRJQyopCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMik7CiAgICAgCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FkZChleGVjLCBvcDEsIG9wMik7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FkZChnbG9iYWxPYmplY3QsIG9wMSwgb3AyKTsKIAog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotQUxXQVlTX0lOTElORSBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcm9maWxlZE11bChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitBTFdBWVNf
SU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVkTXVsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7CiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTXVsKGV4ZWMsIG9wMSwgb3AyKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc011bChnbG9iYWxPYmplY3QsIG9wMSwgb3AyKSk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2ZpbGVkTXVsKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMiwgQXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2JzZXJ2ZUxI
U0FuZFJIU1R5cGVzID0gdHJ1ZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IHByb2ZpbGVkTXVsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSYgYXJp
dGhQcm9maWxlLCBib29sIHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUpCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUg
b3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwpAQCAtMjY2OSwxMTEgKzI3NjYsMTE5IEBAIEFMV0FZ
U19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2ZpbGVkTXVsKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUKICAgICBpZiAoc2hvdWxkT2JzZXJ2ZUxIU0FuZFJIU1R5cGVzKQog
ICAgICAgICBhcml0aFByb2ZpbGUub2JzZXJ2ZUxIU0FuZFJIUyhvcDEsIG9wMik7CiAKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTXVsKGV4ZWMsIG9wMSwgb3AyKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTXVsKGdsb2JhbE9iamVjdCwgb3AxLCBvcDIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGFyaXRoUHJvZmlsZS5vYnNlcnZlUmVz
dWx0KHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKIAotICAgIHJldHVybiB1bnByb2ZpbGVkTXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRP
cDIpOworICAgIHJldHVybiB1bnByb2ZpbGVkTXVsKGdsb2JhbE9iamVjdCwgZW5jb2RlZE9wMSwg
ZW5jb2RlZE9wMik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmFsdWVNdWxOb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqKQorRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bE5vT3B0aW1pemUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwogCi0gICAgcmV0dXJuIHVucHJvZmlsZWRNdWwoZXhlYywgZW5jb2RlZE9wMSwgZW5j
b2RlZE9wMik7CisgICAgcmV0dXJuIHVucHJvZmlsZWRNdWwoZ2xvYmFsT2JqZWN0LCBlbmNvZGVk
T3AxLCBlbmNvZGVkT3AyKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYWx1ZU11bE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqIG11bElDKQorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElDKiBtdWxJQykKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3Bl
cmF0aW9uVmFsdWVNdWxOb09wdGltaXplOwogICAgIGlmIChBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG11bElDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNl
cnZlTEhTQW5kUkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDIpKTsKLSAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJs
b2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgbXVsSUMtPmdlbmVyYXRlT3V0T2ZMaW5l
KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CiAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKLSAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRz
KCk7CisgICAgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CiAjZW5k
aWYKIAotICAgIHJldHVybiB1bnByb2ZpbGVkTXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRP
cDIpOworICAgIHJldHVybiB1bnByb2ZpbGVkTXVsKGdsb2JhbE9iamVjdCwgZW5jb2RlZE9wMSwg
ZW5jb2RlZE9wMik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgQVNTRVJUKGFyaXRo
UHJvZmlsZSk7Ci0gICAgcmV0dXJuIHByb2ZpbGVkTXVsKGV4ZWMsIGVuY29kZWRPcDEsIGVuY29k
ZWRPcDIsICphcml0aFByb2ZpbGUpOworICAgIHJldHVybiBwcm9maWxlZE11bChnbG9iYWxPYmpl
Y3QsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsICphcml0aFByb2ZpbGUpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZShF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIsIEpJVE11bElDKiBtdWxJQykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIsIEpJVE11bElDKiBtdWxJQykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKIAogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbXVsSUMtPmFyaXRoUHJv
ZmlsZSgpOwogICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwogICAgIGFyaXRoUHJvZmlsZS0+b2Jz
ZXJ2ZUxIU0FuZFJIUyhKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKSk7CiAgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRpb25W
YWx1ZU11bFByb2ZpbGVkTm9PcHRpbWl6ZTsKLSAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxpbmUo
ZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgbXVsSUMtPmdlbmVy
YXRlT3V0T2ZMaW5lKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKLSAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVt
cE1hdGhJQ1N0YXRzKCk7CisgICAgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0
YXRzKCk7CiAjZW5kaWYKIAotICAgIHJldHVybiBwcm9maWxlZE11bChleGVjLCBlbmNvZGVkT3Ax
LCBlbmNvZGVkT3AyLCAqYXJpdGhQcm9maWxlLCBmYWxzZSk7CisgICAgcmV0dXJuIHByb2ZpbGVk
TXVsKGdsb2JhbE9iamVjdCwgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSwg
ZmFsc2UpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWROb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqIG11bElDKQorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkTm9PcHRp
bWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyogbXVsSUMpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IG11bElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBBU1NFUlQoYXJpdGhQcm9maWxl
KTsKLSAgICByZXR1cm4gcHJvZmlsZWRNdWwoZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwg
KmFyaXRoUHJvZmlsZSk7CisgICAgcmV0dXJuIHByb2ZpbGVkTXVsKGdsb2JhbE9iamVjdCwgZW5j
b2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIHVucHJvZmlsZWROZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFuZCkKK0FMV0FZU19JTkxJTkUgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIHVucHJvZmlsZWROZWdhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wZXJhbmQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
ICAgIAogICAgIEpTVmFsdWUgb3BlcmFuZCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3BlcmFu
ZCk7CiAgICAgCi0gICAgSlNWYWx1ZSBwcmltVmFsdWUgPSBvcGVyYW5kLnRvUHJpbWl0aXZlKGV4
ZWMsIFByZWZlck51bWJlcik7CisgICAgSlNWYWx1ZSBwcmltVmFsdWUgPSBvcGVyYW5kLnRvUHJp
bWl0aXZlKGdsb2JhbE9iamVjdCwgUHJlZmVyTnVtYmVyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAKICAgICBpZiAocHJpbVZhbHVlLmlz
QmlnSW50KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5
TWludXModm0sIGFzQmlnSW50KHByaW1WYWx1ZSkpKTsKICAgICAKLSAgICBkb3VibGUgbnVtYmVy
ID0gcHJpbVZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBudW1iZXIgPSBwcmltVmFs
dWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KC1udW1iZXIpKTsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJv
ZmlsZWROZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFu
ZCwgQXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBwcm9maWxlZE5lZ2F0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFuZCwgQXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcGVyYW5kKTsKICAgICBhcml0aFByb2ZpbGUub2JzZXJ2ZUxIUyhv
cGVyYW5kKTsKICAgICAKLSAgICBKU1ZhbHVlIHByaW1WYWx1ZSA9IG9wZXJhbmQudG9QcmltaXRp
dmUoZXhlYyk7CisgICAgSlNWYWx1ZSBwcmltVmFsdWUgPSBvcGVyYW5kLnRvUHJpbWl0aXZlKGds
b2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgCiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludCgpKSB7CkBAIC0yNzgzLDQy
ICsyODg4LDQzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2ZpbGVk
TmVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKLSAgICBkb3VibGUgbnVtYmVyID0gcHJpbVZh
bHVlLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBudW1iZXIgPSBwcmltVmFsdWUudG9OdW1i
ZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKC1udW1iZXIpOwogICAg
IGFyaXRoUHJvZmlsZS5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFyaXRoTmVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkKIHsKLSAgICBy
ZXR1cm4gdW5wcm9maWxlZE5lZ2F0ZShleGVjLCBvcGVyYW5kKTsKKyAgICByZXR1cm4gdW5wcm9m
aWxlZE5lZ2F0ZShnbG9iYWxPYmplY3QsIG9wZXJhbmQpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kLCBBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKIHsKICAgICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKLSAg
ICByZXR1cm4gcHJvZmlsZWROZWdhdGUoZXhlYywgb3BlcmFuZCwgKmFyaXRoUHJvZmlsZSk7Cisg
ICAgcmV0dXJuIHByb2ZpbGVkTmVnYXRlKGdsb2JhbE9iamVjdCwgb3BlcmFuZCwgKmFyaXRoUHJv
ZmlsZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhO
ZWdhdGVQcm9maWxlZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wZXJhbmQsIEpJVE5lZ0lDKiBuZWdJQykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcGVyYW5kLCBKSVROZWdJQyogbmVn
SUMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIEpTVmFsdWUgb3BlcmFuZCA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3BlcmFuZCk7CiAKICAgICBBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG5lZ0lDLT5hcml0aFByb2ZpbGUoKTsKICAgICBBU1NFUlQoYXJpdGhQcm9m
aWxlKTsKICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFMob3BlcmFuZCk7Ci0gICAgbmVnSUMt
PmdlbmVyYXRlT3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkKTsKKyAgICBuZWdJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCk7CiAKICNpZiBFTkFCTEUoTUFU
SF9JQ19TVEFUUykKLSAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7Cisg
ICAgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CiAjZW5kaWYKICAg
ICAKLSAgICBKU1ZhbHVlIHByaW1WYWx1ZSA9IG9wZXJhbmQudG9QcmltaXRpdmUoZXhlYyk7Cisg
ICAgSlNWYWx1ZSBwcmltVmFsdWUgPSBvcGVyYW5kLnRvUHJpbWl0aXZlKGdsb2JhbE9iamVjdCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
CiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludCgpKSB7CkBAIC0yODI3LDQ5ICsyOTMzLDUwIEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxl
ZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKICAgICB9CiAKLSAgICBkb3VibGUgbnVtYmVyID0gcHJpbVZhbHVlLnRvTnVtYmVy
KGV4ZWMpOworICAgIGRvdWJsZSBudW1iZXIgPSBwcmltVmFsdWUudG9OdW1iZXIoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKC1udW1iZXIpOwogICAgIGFyaXRoUHJvZmls
ZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5l
Z2F0ZU9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wZXJh
bmQsIEpJVE5lZ0lDKiBuZWdJQykKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFuZCwgSklUTmVnSUMqIG5lZ0lDKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKIAogICAgIEpTVmFsdWUgb3BlcmFuZCA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3BlcmFuZCk7CiAKICAgICBpZiAoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBuZWdJ
Qy0+YXJpdGhQcm9maWxlKCkpCiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIUyhvcGVy
YW5kKTsKLSAgICBuZWdJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlKTsKKyAgICBuZWdJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogCiAjaWYgRU5BQkxFKE1B
VEhfSUNfU1RBVFMpCi0gICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0cygpOwor
ICAgIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0cygpOwogI2VuZGlmCiAK
LSAgICBKU1ZhbHVlIHByaW1WYWx1ZSA9IG9wZXJhbmQudG9QcmltaXRpdmUoZXhlYyk7CisgICAg
SlNWYWx1ZSBwcmltVmFsdWUgPSBvcGVyYW5kLnRvUHJpbWl0aXZlKGdsb2JhbE9iamVjdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgCiAg
ICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBhc0JpZ0ludChwcmltVmFsdWUpKSk7CiAKLSAg
ICBkb3VibGUgbnVtYmVyID0gcHJpbVZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBu
dW1iZXIgPSBwcmltVmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKC1udW1iZXIpKTsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgdW5wcm9maWxlZFN1YihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCitBTFdBWVNfSU5MSU5FIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVkU3ViKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpCiB7CiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAg
ICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAgICAgCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YihleGVjLCBvcDEsIG9wMikpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdWIoZ2xvYmFsT2JqZWN0LCBvcDEsIG9wMikpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxlZFN1YihWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2JzZXJ2
ZUxIU0FuZFJIU1R5cGVzID0gdHJ1ZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIHByb2ZpbGVkU3ViKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQ
cm9maWxlJiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2JzZXJ2ZUxIU0FuZFJIU1R5cGVzID0g
dHJ1ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAg
LTI4NzksMTA2ICsyOTg2LDExNSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBwcm9maWxlZFN1YihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZAogICAgIGlmIChz
aG91bGRPYnNlcnZlTEhTQW5kUkhTVHlwZXMpCiAgICAgICAgIGFyaXRoUHJvZmlsZS5vYnNlcnZl
TEhTQW5kUkhTKG9wMSwgb3AyKTsKIAotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdWIoZXhlYywg
b3AxLCBvcDIpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdWIoZ2xvYmFsT2JqZWN0LCBvcDEs
IG9wMik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgYXJpdGhQcm9maWxlLm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmFsdWVTdWIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYWx1ZVN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0gICAgcmV0dXJuIHVucHJvZmlsZWRTdWIoZXhlYywgZW5jb2RlZE9wMSwgZW5j
b2RlZE9wMik7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiB1bnByb2ZpbGVkU3Vi
KGdsb2JhbE9iamVjdCwgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMik7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZChFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIs
IEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQogewogICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwog
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICByZXR1cm4gcHJvZmls
ZWRTdWIodm0sIGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsICphcml0aFByb2ZpbGUpOwor
ICAgIHJldHVybiBwcm9maWxlZFN1Yih2bSwgZ2xvYmFsT2JqZWN0LCBlbmNvZGVkT3AxLCBlbmNv
ZGVkT3AyLCAqYXJpdGhQcm9maWxlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUU3ViSUMqIHN1YklD
KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXpl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVFN1YklDKiBzdWJJQykKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50
ID0gb3BlcmF0aW9uVmFsdWVTdWJOb09wdGltaXplOwogICAgIGlmIChBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IHN1YklDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9maWxl
LT5vYnNlcnZlTEhTQW5kUkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDIpKTsKLSAgICBzdWJJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+
Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgc3ViSUMtPmdlbmVyYXRlT3V0
T2ZMaW5lKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKLSAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJ
Q1N0YXRzKCk7CisgICAgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7
CiAjZW5kaWYKIAotICAgIHJldHVybiB1bnByb2ZpbGVkU3ViKGV4ZWMsIGVuY29kZWRPcDEsIGVu
Y29kZWRPcDIpOworICAgIHJldHVybiB1bnByb2ZpbGVkU3ViKGdsb2JhbE9iamVjdCwgZW5jb2Rl
ZE9wMSwgZW5jb2RlZE9wMik7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVmFsdWVTdWJOb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUU3ViSUMqKQorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1Yk5vT3B0aW1pemUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUU3ViSUMqKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOwogCi0gICAgcmV0dXJuIHVucHJvZmlsZWRTdWIoZXhlYywgZW5jb2RlZE9w
MSwgZW5jb2RlZE9wMik7CisgICAgcmV0dXJuIHVucHJvZmlsZWRTdWIoZ2xvYmFsT2JqZWN0LCBl
bmNvZGVkT3AxLCBlbmNvZGVkT3AyKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRTdWJJ
Qyogc3ViSUMpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3Vi
UHJvZmlsZWRPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRTdWJJQyogc3Vi
SUMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHN1YklDLT5hcml0aFByb2ZpbGUoKTsKICAgICBBU1NFUlQo
YXJpdGhQcm9maWxlKTsKICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMoSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwogICAg
IGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE5vT3B0
aW1pemU7Ci0gICAgc3ViSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBu
b25PcHRpbWl6ZVZhcmlhbnQpOworICAgIHN1YklDLT5nZW5lcmF0ZU91dE9mTGluZShjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAjaWYgRU5BQkxFKE1BVEhf
SUNfU1RBVFMpCi0gICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0cygpOworICAg
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0cygpOwogI2VuZGlmCiAKLSAg
ICByZXR1cm4gcHJvZmlsZWRTdWIodm0sIGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsICph
cml0aFByb2ZpbGUsIGZhbHNlKTsKKyAgICByZXR1cm4gcHJvZmlsZWRTdWIodm0sIGdsb2JhbE9i
amVjdCwgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgKmFyaXRoUHJvZmlsZSwgZmFsc2UpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRO
b09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUU3ViSUMqIHN1YklDKQorRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkTm9PcHRpbWl6ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRTdWJJQyogc3ViSUMpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IHN1
YklDLT5hcml0aFByb2ZpbGUoKTsKICAgICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKLSAgICByZXR1
cm4gcHJvZmlsZWRTdWIodm0sIGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsICphcml0aFBy
b2ZpbGUpOworICAgIHJldHVybiBwcm9maWxlZFN1Yih2bSwgZ2xvYmFsT2JqZWN0LCBlbmNvZGVk
T3AxLCBlbmNvZGVkT3AyLCAqYXJpdGhQcm9maWxlKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2coRXhlY1N0YXRlKiBleGVjKQordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2coVk0qIHZtUG9pbnRl
cikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgdm0udHlwZVByb2ZpbGVyTG9n
KCktPnByb2Nlc3NMb2dFbnRyaWVzKHZtLCAiTG9nIEZ1bGwsIGNhbGxlZCBmcm9tIGluc2lkZSBi
YXNlbGluZSBKSVQiX3MpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vz
c1NoYWRvd0NoaWNrZW5Mb2coRXhlY1N0YXRlKiBleGVjKQordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nKFZNKiB2bVBvaW50ZXIpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLnNoYWRvd0NoaWNrZW4o
KSk7Ci0gICAgdm0uc2hhZG93Q2hpY2tlbigpLT51cGRhdGUodm0sIGV4ZWMpOworICAgIHZtLnNo
YWRvd0NoaWNrZW4oKS0+dXBkYXRlKHZtLCBjYWxsRnJhbWUpOwogfQogCi1pbnQzMl90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQ
cm9maWxlcihFeGVjU3RhdGUqIGV4ZWMpCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxlcihWTSogdm1Qb2lu
dGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoISFzY29wZS5leGNlcHRp
b24oKSk7CiAKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBzY29w
ZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAg
ICAgIGdlbmVyaWNVbndpbmQodm0sIGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVybiAxOwogICAg
IH0KICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgKaW5kZXggOWRiNjczNDE5MjNkZGUxMTUyMjRlMjBmZDVjODA1YTdjZDc4YjIzNi4uNzhmMDIy
ZWE2ZDk1YzU5NjYwOGI3Mzk0ZDgyOGM4ZjI3OGRjZjMzZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTY2LDggKzY2LDYgQEAgc3RydWN0IElubGluZUNh
bGxGcmFtZTsKIHN0cnVjdCBJbnN0cnVjdGlvbjsKIHN0cnVjdCBBcml0aFByb2ZpbGU7CiAKLXVz
aW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKLQogZXh0ZXJuICJDIiB7CiAKIHR5cGVkZWYgY2hh
ciogVW51c2VkUHRyOwpAQCAtODYsNyArODQsNiBAQCB0eXBlZGVmIGNoYXIqIFVudXNlZFB0cjsK
ICAgICBDYjogQ29kZUJsb2NrKgogICAgIENsaTogQ2FsbExpbmtJbmZvKgogICAgIEQ6IGRvdWJs
ZQotICAgIEU6IEV4ZWNTdGF0ZSoKICAgICBGOiBDYWxsRnJhbWUqCiAgICAgRzogSlNHbG9iYWxP
YmplY3QqCiAgICAgSTogVW5pcXVlZFN0cmluZ0ltcGwqCkBAIC0xMjAsMzkyICsxMTcsMzk1IEBA
IHR5cGVkZWYgY2hhciogVW51c2VkUHRyOwogICAgIFVpOiB1aW50MzJfdAogKi8KIAotdHlwZWRl
ZiBDYWxsRnJhbWUqIChKSVRfT1BFUkFUSU9OICpGX0pJVE9wZXJhdGlvbl9FRkpaWikoRXhlY1N0
YXRlKiwgQ2FsbEZyYW1lKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwotdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRSkoRXhl
Y1N0YXRlKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9w
ZXJhdGlvbl9FQSkoRXhlY1N0YXRlKiwgSlNBcnJheSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVj
dCosIGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9K
SVRPcGVyYXRpb25fRUFhcEopKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBF
bmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpK
X0pJVE9wZXJhdGlvbl9FQWFwSmNwWikoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSosIGNvbnN0IEpTVmFsdWUqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJ
VF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKLXR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VDQyko
RXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChK
SVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FQ0NaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBK
U0NlbGwqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04g
KkpfSklUT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0lt
cGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0
aW9uX0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUNaKShFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVS
QVRJT04gKkpfSklUT3BlcmF0aW9uX0VDWlopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3Qs
IGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRP
cGVyYXRpb25fRURBKShFeGVjU3RhdGUqLCBkb3VibGUsIEpTQXJyYXkqKTsKLXR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VFKShFeGVjU3RhdGUq
LCBFeGVjU3RhdGUqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpf
SklUT3BlcmF0aW9uX0VHUmVvSikoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBSZWdFeHBP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BF
UkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FR1Jlb0pzcykoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBSZWdFeHBPYmplY3QqLCBKU1N0cmluZyopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAo
SklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUdKSikoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUdSZUpzcykoRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBSZWdFeHAqLCBKU1N0cmluZyopOwotdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSosIFVu
aXF1ZWRTdHJpbmdJbXBsKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9O
ICpKX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpaKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBKU0NlbGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04g
KkpfSklUT3BlcmF0aW9uX0VKQSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQXJyYXkq
KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9u
X0VBUFopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB2b2lkKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkFycCkoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEFyaXRoUHJvZmlsZSopOwotdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpJKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
KEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVS
QVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAo
SklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsK
LXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VK
SkFwKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEFycmF5UHJv
ZmlsZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVy
YXRpb25fRUpKQXJwKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEFyaXRoUHJvZmlsZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAq
Sl9KSVRPcGVyYXRpb25fRUpKQnkpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgQnlWYWxJbmZvKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFU
SU9OICpKX0pJVE9wZXJhdGlvbl9FSkpNaWMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgdm9pZCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJB
VElPTiAqSl9KSVRPcGVyYXRpb25fRUpNaWMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCB2
b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJh
dGlvbl9FSnNjSSkoRXhlY1N0YXRlKiwgSlNTY29wZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7Ci10
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSnNz
WikoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSosIEpTU3Ry
aW5nKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJh
dGlvbl9FSnNzUmVvKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFJlZ0V4cE9iamVjdCopOwotdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpzc1Jl
b0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHBPYmplY3QqLCBKU1N0cmluZyopOwot
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpQ
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCopOwotdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUdQKShFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIHZvaWQqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJ
T04gKkpfSklUT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FUFApKEV4ZWNTdGF0ZSos
IHZvaWQqLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpK
X0pJVE9wZXJhdGlvbl9FUFBQKShFeGVjU3RhdGUqLCB2b2lkKiwgdm9pZCosIHZvaWQqKTsKLXR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VQUyko
RXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRf
T1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FUGMpKEV4ZWNTdGF0ZSosIEluc3RydWN0aW9uKik7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9F
SnNjQykoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpTQ2VsbCopOwotdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpzY0NKKShFeGVjU3RhdGUqLCBK
U1Njb3BlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRVJlb0opKEV4ZWNTdGF0ZSosIFJlZ0V4
cE9iamVjdCosIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9P
UEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VSZW9Kc3MpKEV4ZWNTdGF0ZSosIFJlZ0V4cE9iamVj
dCosIEpTU3RyaW5nKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpK
X0pJVE9wZXJhdGlvbl9FU1MpKEV4ZWNTdGF0ZSosIHNpemVfdCwgc2l6ZV90KTsKLXR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VTc2lDSSkoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCop
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25f
RVNzaUpJKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBV
bmlxdWVkU3RyaW5nSW1wbCopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElP
TiAqSl9KSVRPcGVyYXRpb25fRVNzaUpKKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FU3NpSkpJKShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0
cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklU
T3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VaSWNmWikoRXhlY1N0YXRlKiwgaW50
MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FWlopKEV4ZWNTdGF0ZSosIGludDMyX3Qs
IGludDMyX3QpOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRP
cGVyYXRpb25fRVpTeW10YWJKKShFeGVjU3RhdGUqLCBpbnQzMl90LCBTeW1ib2xUYWJsZSosIEVu
Y29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpf
SklUT3BlcmF0aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwotdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRU9JVWkpKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgVW5pcXVlZFN0cmluZ0ltcGwqLCB1aW50MzJfdCk7Ci10eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpJKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKik7Ci10
eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VQVWkpKEV4ZWNT
dGF0ZSosIHZvaWQqLCB1aW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04g
KkNfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BF
UkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVm
IEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBK
U0NlbGwqKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25f
RUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiAoSklU
X09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUNaQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50
MzJfdCwgSlNDZWxsKik7Ci10eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3Bl
cmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Ci10eXBlZGVmIEpTQ2Vs
bCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VHQykoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19K
SVRPcGVyYXRpb25fRUdKKShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUdK
SSkoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0
cmluZ0ltcGwqKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRp
b25fRUljZikoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10eXBlZGVmIEpTQ2VsbCog
KEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSk7Ci10eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VK
c2MpKEV4ZWNTdGF0ZSosIEpTU2NvcGUqKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElP
TiAqQ19KSVRPcGVyYXRpb25fRUpzY0MpKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKTsK
LXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUpaKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogKEpJVF9P
UEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKWkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBpbnQzMl90LCBKU0NlbGwqKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19K
SVRPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpOwotdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FSkpD
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCopOwot
dHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FSkpKKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsK
LXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUpzY1opKEV4
ZWNTdGF0ZSosIEpTU2NvcGUqLCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJB
VElPTiAqQ19KSVRPcGVyYXRpb25fRUpzc1N0KShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVj
dHVyZSopOwotdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9F
SnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7Ci10eXBlZGVmIHVpbnRw
dHJfdCAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fQl9FSnNzSnNzKShFeGVjU3RhdGUq
LCBKU1N0cmluZyosIEpTU3RyaW5nKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BF
UkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FKShKU0dsb2JhbE9iamVjdCopOwordHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUEpKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNBcnJheSopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAq
Sl9KSVRPcGVyYXRpb25fRU9aKShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgaW50MzJfdCk7
Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9F
QWFwSikoSlNHbG9iYWxPYmplY3QqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgRW5jb2RlZEpT
VmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVy
YXRpb25fRUFhcEpjcFopKEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSos
IGNvbnN0IEpTVmFsdWUqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9P
UEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VDKShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUND
KShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUNDWikoSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqLCBKU0NlbGwqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJ
VF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VDSSkoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwq
LCBVbmlxdWVkU3RyaW5nSW1wbCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJB
VElPTiAqSl9KSVRPcGVyYXRpb25fRUNKKShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklU
T3BlcmF0aW9uX0VDWikoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90KTsKK3R5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VDWlopKEpT
R2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJfdCwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FREEpKEpTR2xvYmFsT2Jq
ZWN0KiwgZG91YmxlLCBKU0FycmF5Kik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BF
UkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FRSkoSlNHbG9iYWxPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRp
b25fRUdSZW9KKShKU0dsb2JhbE9iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElP
TiAqSl9KSVRPcGVyYXRpb25fRUdSZW9Kc3MpKEpTR2xvYmFsT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBSZWdFeHBPYmplY3QqLCBKU1N0cmluZyopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAo
SklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUdKSikoSlNHbG9iYWxPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FR1JlSnNzKShKU0ds
b2JhbE9iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwKiwgSlNTdHJpbmcqKTsKK3R5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VJKShKU0ds
b2JhbE9iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSlopKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJB
VElPTiAqSl9KSVRPcGVyYXRpb25fRUpDKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBKU0NlbGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklU
T3BlcmF0aW9uX0VKQSkoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgSlNBcnJheSop
OwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25f
RUFQWikoSlNHbG9iYWxPYmplY3QqLCBKU0FycmF5Kiwgdm9pZCosIGludDMyX3QpOwordHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpBcnApKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEFyaXRoUHJvZmlsZSopOwordHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKKShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpKKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpK
SkopKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklU
X09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKQXApKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBBcnJheVByb2ZpbGUqKTsKK3R5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSkFycCkoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEFyaXRoUHJvZmlsZSopOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpK
QnkpKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZh
bEluZm8qKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3Bl
cmF0aW9uX0VKTWljKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7Cit0
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSnNj
SSkoSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKc3NaKShK
U0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSnNzKShKU0dsb2JhbE9iamVjdCos
IEpTU3RyaW5nKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJ
VE9wZXJhdGlvbl9FSnNzUmVvKShKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgUmVnRXhwT2Jq
ZWN0Kik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJh
dGlvbl9FSnNzUmVvSnNzKShKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgUmVnRXhwT2JqZWN0
KiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpf
SklUT3BlcmF0aW9uX0VKUCkoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCop
OwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25f
RVBTKShKU0dsb2JhbE9iamVjdCosIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRVBjKShKU0dsb2JhbE9iamVjdCos
IEluc3RydWN0aW9uKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpK
X0pJVE9wZXJhdGlvbl9FSnNjQykoSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKiwgSlNDZWxsKik7
Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9F
SnNjQ0opKEpTR2xvYmFsT2JqZWN0KiwgSlNTY29wZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9u
X0VSZW9KKShKU0dsb2JhbE9iamVjdCosIFJlZ0V4cE9iamVjdCosIEVuY29kZWRKU1ZhbHVlKTsK
K3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VS
ZW9Kc3MpKEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwT2JqZWN0KiwgSlNTdHJpbmcqKTsKK3R5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VTUykoSlNH
bG9iYWxPYmplY3QqLCBzaXplX3QsIHNpemVfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChK
SVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FU3NpQ0kpKEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwordHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRVNzaUpJKShKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRT
dHJpbmdJbXBsKik7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJ
VE9wZXJhdGlvbl9FU3NpSkopKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8qLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAo
SklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRVNzaUpKSSkoSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpf
SklUT3BlcmF0aW9uX0VaKShKU0dsb2JhbE9iamVjdCosIGludDMyX3QpOwordHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRVpJY2ZaKShKU0dsb2Jh
bE9iamVjdCosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpOwordHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRVpaKShKU0dsb2Jh
bE9iamVjdCosIGludDMyX3QsIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklU
X09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRVpTeW10YWJKKShKU0dsb2JhbE9iamVjdCosIGlu
dDMyX3QsIFN5bWJvbFRhYmxlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRU8pKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklU
T3BlcmF0aW9uX0VPSVVpKShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgVW5pcXVlZFN0cmlu
Z0ltcGwqLCB1aW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9O
ICpKX0pJVE9wZXJhdGlvbl9FSkpJKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklU
X09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVBVaSkoSlNHbG9iYWxPYmplY3QqLCB2b2lkKiwg
dWludDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlv
bl9FKShKU0dsb2JhbE9iamVjdCopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpD
X0pJVE9wZXJhdGlvbl9FWikoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KTsKK3R5cGVkZWYgSlND
ZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUMpKEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKik7Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9u
X0VDWikoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxs
KiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUNaQykoSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqLCBpbnQzMl90LCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElP
TiAqQ19KSVRPcGVyYXRpb25fRUNDKShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpTQ2VsbCop
OwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FR0MpKEpT
R2xvYmFsT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxs
KiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUdKKShKU0dsb2JhbE9iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BF
UkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FR0pJKShKU0dsb2JhbE9iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEpTQ2Vs
bCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VJY2YpKEpTR2xvYmFsT2JqZWN0Kiwg
SW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklU
T3BlcmF0aW9uX0VKKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYg
SlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUpzYykoSlNHbG9iYWxPYmpl
Y3QqLCBKU1Njb3BlKik7Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3Bl
cmF0aW9uX0VKc2NDKShKU0dsb2JhbE9iamVjdCosIEpTU2NvcGUqLCBKU0NlbGwqKTsKK3R5cGVk
ZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUpaKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09Q
RVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUpaQykoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgaW50MzJfdCwgSlNDZWxsKik7Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04g
KkNfSklUT3BlcmF0aW9uX0VKSikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJh
dGlvbl9FSkpDKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgSlNDZWxsKik7Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0
aW9uX0VKSkopKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklU
T3BlcmF0aW9uX0VKc2NaKShKU0dsb2JhbE9iamVjdCosIEpTU2NvcGUqLCBpbnQzMl90KTsKK3R5
cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUpzc1N0KShKU0ds
b2JhbE9iamVjdCosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7Cit0eXBlZGVmIEpTQ2VsbCogKEpJ
VF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc3NKc3MpKEpTR2xvYmFsT2JqZWN0KiwgSlNT
dHJpbmcqLCBKU1N0cmluZyopOwordHlwZWRlZiB1aW50cHRyX3QgKEpJVF9PUEVSQVRJT04gKkNf
SklUT3BlcmF0aW9uX0JfRUpzc0pzcykoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIEpTU3Ry
aW5nKik7CiB0eXBlZGVmIHVpbnRwdHJfdCAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25f
VFQpKFN0cmluZ0ltcGwqLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVS
QVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwg
SlNTdHJpbmcqLCBKU1N0cmluZyopOwotdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpD
X0pJVE9wZXJhdGlvbl9FTCkoRXhlY1N0YXRlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKLXR5
cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRU8pKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0Kik7Ci10eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3Bl
cmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKLXR5cGVkZWYgSlND
ZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25f
RVN0SnNjU3ltdGFiSikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgSlNTY29wZSosIFN5bWJvbFRh
YmxlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpD
X0pJVE9wZXJhdGlvbl9FU3RSWkpzZkwpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJlZ2lzdGVy
KiwgaW50MzJfdCwgSlNGdW5jdGlvbiosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7Ci10eXBlZGVm
IEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VTdFJaSnNmKShFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciosIGludDMyX3QsIEpTRnVuY3Rpb24qKTsKLXR5cGVk
ZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04g
KkNfSklUT3BlcmF0aW9uX0VTdFpaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBp
bnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25f
RVN0Q1MpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEpTQ2VsbCosIHNpemVfdCk7Ci10eXBlZGVm
IEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VDWlopKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIGludDMyX3QsIGludDMyX3QpOwotdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFU
SU9OICpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Ci10eXBlZGVmIEpT
Q2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc2NJKShFeGVjU3RhdGUqLCBK
U1Njb3BlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJB
VElPTiAqQ19KSVRPcGVyYXRpb25fRUNKWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpT
VmFsdWUsIGludDMyX3QpOwotdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9w
ZXJhdGlvbl9FQ0pKWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBpbnQzMl90KTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19K
SVRPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10
eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VDTykoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgSlNPYmplY3QqKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElP
TiAqQ19KSVRPcGVyYXRpb25fRUpzc1JlbykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHBP
YmplY3QqKTsKLXR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25f
RUpzc1Jlb0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHBPYmplY3QqLCBKU1N0cmlu
ZyopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FSnNz
SnNzSnNzKShKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyop
OwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FTCkoSlNH
bG9iYWxPYmplY3QqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwordHlwZWRlZiBKU0NlbGwqIChK
SVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FTykoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FT1op
KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiAo
SklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0KShKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9F
U3RKc2NTeW10YWJKKShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTU2NvcGUqLCBTeW1i
b2xUYWJsZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElP
TiAqQ19KSVRPcGVyYXRpb25fRVN0UlpKc2ZMKShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IFJlZ2lzdGVyKiwgaW50MzJfdCwgSlNGdW5jdGlvbiosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7
Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VTdFJaSnNm
KShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiwgaW50MzJfdCwgSlNGdW5j
dGlvbiopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9F
U3RaKShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGludDMyX3QpOwordHlwZWRlZiBKU0Nl
bGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FU3RaWikoSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09Q
RVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0Q1MpKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgSlNDZWxsKiwgc2l6ZV90KTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19K
SVRPcGVyYXRpb25fRUNaWikoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90LCBpbnQz
Ml90KTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVop
KEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJ
T04gKkNfSklUT3BlcmF0aW9uX0VKc2NJKShKU0dsb2JhbE9iamVjdCosIEpTU2NvcGUqLCBVbmlx
dWVkU3RyaW5nSW1wbCopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9w
ZXJhdGlvbl9FQ0paKShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBp
bnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25f
RUNKSlopKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRP
cGVyYXRpb25fRUNKKShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsK
K3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUNPKShKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCosIEpTT2JqZWN0Kik7Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9P
UEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc3NSZW8pKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJp
bmcqLCBSZWdFeHBPYmplY3QqKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19K
SVRPcGVyYXRpb25fRUpzc1Jlb0pzcykoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIFJlZ0V4
cE9iamVjdCosIEpTU3RyaW5nKik7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9K
SVRPcGVyYXRpb25fRCkoZG91YmxlKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpE
X0pJVE9wZXJhdGlvbl9HKShKU0dsb2JhbE9iamVjdCopOwogdHlwZWRlZiBkb3VibGUgKEpJVF9P
UEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0REKShkb3VibGUsIGRvdWJsZSk7CiB0eXBlZGVmIGRv
dWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRpb25fWlopKGludDMyX3QsIGludDMyX3Qp
OwotdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0VKKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAq
RF9KSVRPcGVyYXRpb25fRUopKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpOwogdHlw
ZWRlZiBpbnQ2NF90IChKSVRfT1BFUkFUSU9OICpRX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVkSlNW
YWx1ZSk7CiB0eXBlZGVmIGludDY0X3QgKEpJVF9PUEVSQVRJT04gKlFfSklUT3BlcmF0aW9uX0Qp
KGRvdWJsZSk7CiB0eXBlZGVmIGludDMyX3QgKEpJVF9PUEVSQVRJT04gKlpfSklUT3BlcmF0aW9u
X0QpKGRvdWJsZSk7Ci10eXBlZGVmIGludDMyX3QgKEpJVF9PUEVSQVRJT04gKlpfSklUT3BlcmF0
aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBpbnQzMl90IChKSVRfT1BFUkFUSU9OICpaX0pJ
VE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci10eXBlZGVmIGludDMyX3QgKEpJ
VF9PUEVSQVRJT04gKlpfSklUT3BlcmF0aW9uX0VHQykoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqKTsKLXR5cGVkZWYgaW50MzJfdCAoSklUX09QRVJBVElPTiAqWl9KSVRPcGVy
YXRpb25fRVNKc3MpKEV4ZWNTdGF0ZSosIHNpemVfdCwgSlNTdHJpbmcqKTsKLXR5cGVkZWYgaW50
MzJfdCAoSklUX09QRVJBVElPTiAqWl9KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlKTsKLXR5cGVkZWYgaW50MzJfdCAoSklUX09QRVJBVElPTiAqWl9KSVRPcGVyYXRp
b25fRUpPSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUpOwotdHlwZWRlZiBpbnQzMl90IChKSVRfT1BFUkFUSU9OICpaX0pJVE9wZXJhdGlvbl9F
SlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKLXR5cGVkZWYgaW50MzJf
dCAoSklUX09QRVJBVElPTiAqWl9KSVRPcGVyYXRpb25fRUpaWikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwotdHlwZWRlZiBpbnQzMl90IChKSVRfT1BFUkFU
SU9OICpaX0pJVE9wZXJhdGlvbl9FSlVpWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHVp
bnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgaW50MzJfdCAoSklUX09QRVJBVElPTiAqWl9KSVRP
cGVyYXRpb25fRU9JKShFeGVjU3RhdGUqLCBKU09iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBsKik7
Ci10eXBlZGVmIGludDMyX3QgKEpJVF9PUEVSQVRJT04gKlpfSklUT3BlcmF0aW9uX0VPSikoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIGludDMyX3QgKEpJ
VF9PUEVSQVRJT04gKlpfSklUT3BlcmF0aW9uX0VCSnNzWikoRXhlY1N0YXRlKiwgQnV0dGVyZmx5
KiwgSlNTdHJpbmcqLCBpbnQzMl90KTsKLXR5cGVkZWYgaW50MzJfdCAoSklUX09QRVJBVElPTiAq
Wl9KSVRPcGVyYXRpb25fRUJKWikoRXhlY1N0YXRlKiwgQnV0dGVyZmx5KiwgRW5jb2RlZEpTVmFs
dWUsIGludDMyX3QpOwotdHlwZWRlZiBzaXplX3QgKEpJVF9PUEVSQVRJT04gKlNfSklUT3BlcmF0
aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwotdHlwZWRlZiBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKlNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7
Ci10eXBlZGVmIHNpemVfdCAoSklUX09QRVJBVElPTiAqU19KSVRPcGVyYXRpb25fRUdDKShFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopOwotdHlwZWRlZiBzaXplX3QgKEpJVF9P
UEVSQVRJT04gKlNfSklUT3BlcmF0aW9uX0VHSkopKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpTX0pJVE9wZXJhdGlvbl9FR1Jlb0opKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgUmVnRXhwT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiBzaXplX3QgKEpJ
VF9PUEVSQVRJT04gKlNfSklUT3BlcmF0aW9uX0VHUmVvSnNzKShFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCosIFJlZ0V4cE9iamVjdCosIEpTU3RyaW5nKik7Ci10eXBlZGVmIHNpemVfdCAoSklU
X09QRVJBVElPTiAqU19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
KTsKLXR5cGVkZWYgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpTX0pJVE9wZXJhdGlvbl9FSkkpKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopOwotdHlwZWRlZiBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKlNfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpTX0pJVE9wZXJhdGlvbl9FT0pzcykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1N0cmlu
ZyopOwotdHlwZWRlZiBzaXplX3QgKEpJVF9PUEVSQVRJT04gKlNfSklUT3BlcmF0aW9uX0VSZW9K
KShFeGVjU3RhdGUqLCBSZWdFeHBPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHNp
emVfdCAoSklUX09QRVJBVElPTiAqU19KSVRPcGVyYXRpb25fRVJlb0pzcykoRXhlY1N0YXRlKiwg
UmVnRXhwT2JqZWN0KiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgaW50MzJfdCAoSklUX09QRVJBVElP
TiAqWl9KSVRPcGVyYXRpb25fRUMpKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKik7Cit0eXBlZGVm
IGludDMyX3QgKEpJVF9PUEVSQVRJT04gKlpfSklUT3BlcmF0aW9uX0VHQykoSlNHbG9iYWxPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopOwordHlwZWRlZiBpbnQzMl90IChKSVRfT1BF
UkFUSU9OICpaX0pJVE9wZXJhdGlvbl9FU0pzcykoSlNHbG9iYWxPYmplY3QqLCBzaXplX3QsIEpT
U3RyaW5nKik7Cit0eXBlZGVmIGludDMyX3QgKEpJVF9PUEVSQVRJT04gKlpfSklUT3BlcmF0aW9u
X0VKKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgaW50MzJfdCAo
SklUX09QRVJBVElPTiAqWl9KSVRPcGVyYXRpb25fRUpPSikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIGludDMyX3Qg
KEpJVF9PUEVSQVRJT04gKlpfSklUT3BlcmF0aW9uX0VKWikoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBlZGVmIGludDMyX3QgKEpJVF9PUEVSQVRJT04gKlpf
SklUT3BlcmF0aW9uX0VKVWlaKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCB1aW50
MzJfdCwgaW50MzJfdCk7Cit0eXBlZGVmIGludDMyX3QgKEpJVF9PUEVSQVRJT04gKlpfSklUT3Bl
cmF0aW9uX0VPSSkoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFVuaXF1ZWRTdHJpbmdJbXBs
Kik7Cit0eXBlZGVmIGludDMyX3QgKEpJVF9PUEVSQVRJT04gKlpfSklUT3BlcmF0aW9uX0VPSiko
SlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgaW50
MzJfdCAoSklUX09QRVJBVElPTiAqWl9KSVRPcGVyYXRpb25fRUJKc3NaKShKU0dsb2JhbE9iamVj
dCosIEJ1dHRlcmZseSosIEpTU3RyaW5nKiwgaW50MzJfdCk7Cit0eXBlZGVmIGludDMyX3QgKEpJ
VF9PUEVSQVRJT04gKlpfSklUT3BlcmF0aW9uX0VCSlopKEpTR2xvYmFsT2JqZWN0KiwgQnV0dGVy
Zmx5KiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwordHlwZWRlZiBzaXplX3QgKEpJVF9PUEVS
QVRJT04gKlNfSklUT3BlcmF0aW9uX0VPKShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7Cit0
eXBlZGVmIHNpemVfdCAoSklUX09QRVJBVElPTiAqU19KSVRPcGVyYXRpb25fRUNDKShKU0dsb2Jh
bE9iamVjdCosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBzaXplX3QgKEpJVF9PUEVSQVRJ
T04gKlNfSklUT3BlcmF0aW9uX0VHQykoSlNHbG9iYWxPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCopOwordHlwZWRlZiBzaXplX3QgKEpJVF9PUEVSQVRJT04gKlNfSklUT3BlcmF0aW9u
X0VHSkopKEpTR2xvYmFsT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBzaXplX3QgKEpJVF9PUEVSQVRJT04gKlNfSklUT3Bl
cmF0aW9uX0VHUmVvSikoSlNHbG9iYWxPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFJlZ0V4cE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpT
X0pJVE9wZXJhdGlvbl9FR1Jlb0pzcykoSlNHbG9iYWxPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFJlZ0V4cE9iamVjdCosIEpTU3RyaW5nKik7Cit0eXBlZGVmIHNpemVfdCAoSklUX09QRVJBVElP
TiAqU19KSVRPcGVyYXRpb25fRUopKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpOwor
dHlwZWRlZiBzaXplX3QgKEpJVF9PUEVSQVRJT04gKlNfSklUT3BlcmF0aW9uX0VKSSkoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpTX0pJVE9wZXJhdGlvbl9FSkopKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpTX0pJVE9wZXJhdGlvbl9FT0pzcykoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCosIEpTU3RyaW5nKik7Cit0eXBlZGVmIHNpemVfdCAoSklUX09QRVJBVElPTiAqU19KSVRPcGVy
YXRpb25fRVJlb0opKEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUpOwordHlwZWRlZiBzaXplX3QgKEpJVF9PUEVSQVRJT04gKlNfSklUT3BlcmF0aW9uX0VSZW9K
c3MpKEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwT2JqZWN0KiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpTX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7
Ci10eXBlZGVmIFNsb3dQYXRoUmV0dXJuVHlwZSAoSklUX09QRVJBVElPTiAqU3BydF9KSVRPcGVy
YXRpb25fRVVpKShFeGVjU3RhdGUqLCB1aW50MzJfdCk7Cit0eXBlZGVmIFNsb3dQYXRoUmV0dXJu
VHlwZSAoSklUX09QRVJBVElPTiAqU3BydF9KSVRPcGVyYXRpb25fRVVpKShKU0dsb2JhbE9iamVj
dCosIHVpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRp
b24pKCk7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0UpKEV4
ZWNTdGF0ZSopOwotdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9F
QykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZf
SklUT3BlcmF0aW9uX0VDYikoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKik7Ci10eXBlZGVmIHZvaWQg
KEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
SlNDZWxsKik7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VD
SWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKLXR5cGVkZWYgdm9p
ZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNJWkMpKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIFVuaXF1ZWRTdHJpbmdJbXBsKiwgaW50MzJfdCwgSlNDZWxsKik7Ci10eXBlZGVmIHZvaWQg
KEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VDSVpDQykoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgVW5pcXVlZFN0cmluZ0ltcGwqLCBpbnQzMl90LCBKU0NlbGwqLCBKU0NlbGwqKTsKLXR5cGVk
ZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNJWkpKKShFeGVjU3RhdGUq
LCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0
aW9uX0VDSlpDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwg
SlNDZWxsKik7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VD
Q0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Ci10
eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VDSikoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9O
ICpWX0pJVE9wZXJhdGlvbl9FQ0paKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSwgaW50MzJfdCk7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9u
X0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSk7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VDSkpaKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIGludDMy
X3QpOwotdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FQ1BTUFMp
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOwotdHlw
ZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FQ1opKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIGludDMyX3QpOwotdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9w
ZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwotdHlwZWRlZiB2b2lk
IChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FQ2xpSnNmKShFeGVjU3RhdGUqLCBDYWxs
TGlua0luZm8qLCBKU0Z1bmN0aW9uKik7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZf
SklUT3BlcmF0aW9uX0VDQ0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIEVuY29kZWRK
U1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUND
WikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwgaW50MzJfdCk7Ci10eXBlZGVmIHZvaWQg
KEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VDQ0paKShFeGVjU3RhdGUqLCBKU0NlbGwq
LCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Ci10eXBlZGVmIHZvaWQgKEpJVF9P
UEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VaU3ltdGFiSikoRXhlY1N0YXRlKiwgaW50MzJfdCwg
U3ltYm9sVGFibGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJ
T04gKlZfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBl
ZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VKQ0kpKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwotdHlwZWRlZiB2
b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9p
ZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUpKSkFwKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBBcnJheVByb2ZpbGUq
KTsKLXR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUpKSkJ5KShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBCeVZhbEluZm8qKTsKLXR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRp
b25fRUpQUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqLCB2b2lkKik7Ci10eXBl
ZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VKWkopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQg
KEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VKWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIGludDMyX3QpOwotdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJh
dGlvbl9FT1pEKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIGRvdWJsZSk7Ci10eXBl
ZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VPWkopKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIChKSVRf
T1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FUGMpKEV4ZWNTdGF0ZSosIEluc3RydWN0aW9uKik7
Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VQWkopKEV4ZWNT
dGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgKEpJ
VF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VTc2lKSkkpKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5n
SW1wbCopOwotdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FSkpK
SSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAq
Vl9KSVRPcGVyYXRpb25fRUpKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCAo
SklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9KSlopKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKLXR5cGVkZWYgdm9p
ZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9Kc3NKWikoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1N0cmluZyosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKLXR5cGVkZWYgdm9p
ZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9JSlopKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgVW5pcXVlZFN0cmluZ0ltcGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Ci10eXBl
ZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VPU3ltSlopKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgU3ltYm9sKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwotdHlwZWRl
ZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FT0pPT1opKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEpTT2JqZWN0KiwgSlNPYmplY3QqLCBpbnQzMl90
KTsKLXR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9Kc3NPT1op
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNTdHJpbmcqLCBKU09iamVjdCosIEpTT2JqZWN0Kiwg
aW50MzJfdCk7Ci10eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VP
SU9PWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBVbmlxdWVkU3RyaW5nSW1wbCosIEpTT2JqZWN0
KiwgSlNPYmplY3QqLCBpbnQzMl90KTsKLXR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9K
SVRPcGVyYXRpb25fRU9TeW1PT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU3ltYm9sKiwgSlNP
YmplY3QqLCBKU09iamVjdCosIGludDMyX3QpOwotdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9O
ICpWX0pJVE9wZXJhdGlvbl9FV3MpKEV4ZWNTdGF0ZSosIFdhdGNocG9pbnRTZXQqKTsKLXR5cGVk
ZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGlu
dDMyX3QpOwotdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FWkop
KEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCAoSklU
X09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRVpKWlpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCwgaW50MzJfdCk7Ci10eXBlZGVmIHZvaWQg
KEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VWbSkoRXhlY1N0YXRlKiwgVk0qKTsKK3R5
cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRSkoSlNHbG9iYWxPYmpl
Y3QqKTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUMpKEpT
R2xvYmFsT2JqZWN0KiwgSlNDZWxsKik7Cit0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZf
SklUT3BlcmF0aW9uX0VDQykoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5
cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNJY2YpKEpTR2xvYmFs
T2JqZWN0KiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7Cit0eXBlZGVmIHZvaWQgKEpJVF9P
UEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VDSVpDKShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCos
IFVuaXF1ZWRTdHJpbmdJbXBsKiwgaW50MzJfdCwgSlNDZWxsKik7Cit0eXBlZGVmIHZvaWQgKEpJ
VF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VDSVpDQykoSlNHbG9iYWxPYmplY3QqLCBKU0Nl
bGwqLCBVbmlxdWVkU3RyaW5nSW1wbCosIGludDMyX3QsIEpTQ2VsbCosIEpTQ2VsbCopOwordHlw
ZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FQ0laSkopKEpTR2xvYmFs
T2JqZWN0KiwgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwqLCBpbnQzMl90LCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJ
VE9wZXJhdGlvbl9FQ0paQykoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSwgaW50MzJfdCwgSlNDZWxsKik7Cit0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklU
T3BlcmF0aW9uX0VDQ0ljZikoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxp
bmVDYWxsRnJhbWUqKTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRp
b25fRUNKKShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVk
ZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNKWikoSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBlZGVmIHZvaWQgKEpJ
VF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VDSkopKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCAoSklUX09Q
RVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNKSlopKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCAo
SklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNQU1BTKShKU0dsb2JhbE9iamVjdCosIEpT
Q2VsbCosIHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiB2b2lkIChKSVRf
T1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FQ1opKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwg
aW50MzJfdCk7Cit0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VD
QykoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgdm9pZCAoSklU
X09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNsaUpzZikoSlNHbG9iYWxPYmplY3QqLCBDYWxs
TGlua0luZm8qLCBKU0Z1bmN0aW9uKik7Cit0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZf
SklUT3BlcmF0aW9uX0VDQ0opKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNDZWxsKiwgRW5j
b2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlv
bl9FQ0NaKShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpTQ2VsbCosIGludDMyX3QpOwordHlw
ZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FQ0NKWikoSlNHbG9iYWxP
YmplY3QqLCBKU0NlbGwqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBl
ZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VaU3ltdGFiSikoSlNHbG9i
YWxPYmplY3QqLCBpbnQzMl90LCBTeW1ib2xUYWJsZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVk
ZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUopKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9w
ZXJhdGlvbl9FSkNJKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqLCBV
bmlxdWVkU3RyaW5nSW1wbCopOwordHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9w
ZXJhdGlvbl9FSkpKKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJ
VE9wZXJhdGlvbl9FSkpKQXApKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQXJyYXlQcm9maWxlKik7Cit0eXBlZGVmIHZvaWQg
KEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VKSkpCeSkoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8q
KTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUpQUCkoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCosIHZvaWQqKTsKK3R5cGVkZWYgdm9p
ZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUpaSikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIChK
SVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FSlopKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIGludDMyX3QpOwordHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9w
ZXJhdGlvbl9FT1pEKShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgaW50MzJfdCwgZG91Ymxl
KTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9aSikoSlNH
bG9iYWxPYmplY3QqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVk
ZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRVBjKShKU0dsb2JhbE9iamVj
dCosIEluc3RydWN0aW9uKik7Cit0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3Bl
cmF0aW9uX0VQWkopKEpTR2xvYmFsT2JqZWN0Kiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1Zh
bHVlKTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRVNzaUpK
SSkoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgdm9pZCAoSklUX09Q
RVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUpKSkkpKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwq
KTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUpKSkopKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJ
VE9wZXJhdGlvbl9FT0pKWikoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJ
T04gKlZfSklUT3BlcmF0aW9uX0VPSnNzSlopKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBK
U1N0cmluZyosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCAoSklUX09Q
RVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9JSlopKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
LCBVbmlxdWVkU3RyaW5nSW1wbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVkZWYg
dm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9TeW1KWikoSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCosIFN5bWJvbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVk
ZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9KT09aKShKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEpTT2JqZWN0KiwgSlNPYmplY3QqLCBp
bnQzMl90KTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRU9K
c3NPT1opKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBKU1N0cmluZyosIEpTT2JqZWN0Kiwg
SlNPYmplY3QqLCBpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRP
cGVyYXRpb25fRU9JT09aKShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgVW5pcXVlZFN0cmlu
Z0ltcGwqLCBKU09iamVjdCosIEpTT2JqZWN0KiwgaW50MzJfdCk7Cit0eXBlZGVmIHZvaWQgKEpJ
VF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VPU3ltT09aKShKU0dsb2JhbE9iamVjdCosIEpT
T2JqZWN0KiwgU3ltYm9sKiwgSlNPYmplY3QqLCBKU09iamVjdCosIGludDMyX3QpOwordHlwZWRl
ZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FV3MpKEpTR2xvYmFsT2JqZWN0
KiwgV2F0Y2hwb2ludFNldCopOwordHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9w
ZXJhdGlvbl9FWikoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCAoSklU
X09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRVpKKShKU0dsb2JhbE9iamVjdCosIGludDMyX3Qs
IEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVy
YXRpb25fRVpKWlpaKShKU0dsb2JhbE9iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlLCBp
bnQzMl90LCBpbnQzMl90LCBpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAq
Vl9KSVRPcGVyYXRpb25fRVZtKShKU0dsb2JhbE9iamVjdCosIFZNKik7CiB0eXBlZGVmIHZvaWQg
KEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fWikoaW50MzJfdCk7Ci10eXBl
ZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VKc3NVaSkoRXhlY1N0YXRl
KiwgSlNTdHJpbmcqLCB1aW50MzJfdCk7Ci10eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04g
KkNfSklUT3BlcmF0aW9uX0VSVWlVaSkoRXhlY1N0YXRlKiwgUmVnaXN0ZXIqLCB1aW50MzJfdCwg
dWludDMyX3QpOwotdHlwZWRlZiB2b2lkIChKSVRfT1BFUkFUSU9OICpWX0pJVE9wZXJhdGlvbl9F
T0pJVWkpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJp
bmdJbXBsKiwgdWludDMyX3QpOwotdHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQ
X0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci10eXBlZGVmIGNoYXIqIChK
SVRfT1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FQ2xpKShFeGVjU3RhdGUqLCBDYWxsTGlua0lu
Zm8qKTsKLXR5cGVkZWYgY2hhciogKEpJVF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0VKUyko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIqIChKSVRf
T1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKLXR5
cGVkZWYgY2hhciogKEpJVF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0VPUykoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9K
SVRPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwotdHlwZWRl
ZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2
b2lkKiwgc2l6ZV90KTsKLXR5cGVkZWYgY2hhciogKEpJVF9PUEVSQVRJT04gKlBfSklUT3BlcmF0
aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElP
TiAqUF9KSVRPcGVyYXRpb25fRVNKc3MpKEV4ZWNTdGF0ZSosIHNpemVfdCwgSlNTdHJpbmcqKTsK
LXR5cGVkZWYgY2hhciogKEpJVF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0VTdCkoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKik7Ci10eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9w
ZXJhdGlvbl9FU3RKKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10
eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FU3RQUykoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7Ci10eXBlZGVmIGNoYXIqIChKSVRfT1BF
UkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FU3RTUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgc2l6
ZV90LCBzaXplX3QpOwotdHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRp
b25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Ci10eXBlZGVmIGNoYXIq
IChKSVRfT1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FU3RaQikoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgaW50MzJfdCwgQnV0dGVyZmx5Kik7Ci10eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9O
ICpQX0pJVE9wZXJhdGlvbl9FU3RaUCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCwg
Y2hhciopOwotdHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRpb25fRVpa
KShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKLXR5cGVkZWYgY2hhciogKEpJVF9PUEVS
QVRJT04gKlBfSklUT3BlcmF0aW9uX0VRWikoRXhlY1N0YXRlKiwgaW50NjRfdCwgaW50MzJfdCk7
Ci10eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FRFopKEV4ZWNT
dGF0ZSosIGRvdWJsZSwgaW50MzJfdCk7Ci10eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQ
X0pJVE9wZXJhdGlvbl9FVWkpKEV4ZWNTdGF0ZSosIHVpbnQzMl90KTsKLXR5cGVkZWYgU2xvd1Bh
dGhSZXR1cm5UeXBlIChKSVRfT1BFUkFUSU9OICpTcHJ0X0pJVE9wZXJhdGlvbl9FQ2xpKShFeGVj
U3RhdGUqLCBDYWxsTGlua0luZm8qKTsKLXR5cGVkZWYgU3RyaW5nSW1wbCogKEpJVF9PUEVSQVRJ
T04gKlRfSklUT3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7Ci10eXBlZGVm
IEpTU3RyaW5nKiAoSklUX09QRVJBVElPTiAqSnNzX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRl
KiwgaW50MzJfdCk7Ci10eXBlZGVmIEpTU3RyaW5nKiAoSklUX09QRVJBVElPTiAqSnNzX0pJVE9w
ZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgSlNTdHJpbmcqIChKSVRfT1BFUkFUSU9OICpKc3Nf
SklUT3BlcmF0aW9uX0VKc3NVaSkoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCB1aW50MzJfdCk7Cit0
eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9uX0VKc3NVaSkoSlNHbG9i
YWxPYmplY3QqLCBKU1N0cmluZyosIHVpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09Q
RVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVJVaVVpKShKU0dsb2JhbE9iamVjdCosIFJlZ2lzdGVy
KiwgdWludDMyX3QsIHVpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9K
SVRPcGVyYXRpb25fRU9KSVVpKShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKiwgdWludDMyX3QpOwordHlwZWRlZiBjaGFyKiAoSklU
X09QRVJBVElPTiAqUF9KSVRPcGVyYXRpb25fRSkoSlNHbG9iYWxPYmplY3QqKTsKK3R5cGVkZWYg
Y2hhciogKEpJVF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0VDKShKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCopOwordHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRpb25f
RUNsaSkoSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKK3R5cGVkZWYgY2hhciogKEpJ
VF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0VKUykoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogKEpJVF9PUEVSQVRJT04gKlBfSklUT3Bl
cmF0aW9uX0VPKShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7Cit0eXBlZGVmIGNoYXIqIChK
SVRfT1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FT1MpKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmpl
Y3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRp
b25fRU9aKShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgaW50MzJfdCk7Cit0eXBlZGVmIGNo
YXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FUFMpKEpTR2xvYmFsT2JqZWN0Kiwg
dm9pZCosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9wZXJh
dGlvbl9FUykoSlNHbG9iYWxPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiAoSklUX09Q
RVJBVElPTiAqUF9KSVRPcGVyYXRpb25fRVNKc3MpKEpTR2xvYmFsT2JqZWN0Kiwgc2l6ZV90LCBK
U1N0cmluZyopOwordHlwZWRlZiBjaGFyKiAoSklUX09QRVJBVElPTiAqUF9KSVRPcGVyYXRpb25f
RVN0KShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwordHlwZWRlZiBjaGFyKiAoSklUX09Q
RVJBVElPTiAqUF9KSVRPcGVyYXRpb25fRVN0SikoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9w
ZXJhdGlvbl9FU3RQUykoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90
KTsKK3R5cGVkZWYgY2hhciogKEpJVF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0VTdFNTKShK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KTsKK3R5cGVkZWYgY2hh
ciogKEpJVF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0VTdFopKEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgaW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJ
VE9wZXJhdGlvbl9FU3RaUCkoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBj
aGFyKik7Cit0eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FWlop
KEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCwgaW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIChKSVRf
T1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9FUVopKEpTR2xvYmFsT2JqZWN0KiwgaW50NjRfdCwg
aW50MzJfdCk7Cit0eXBlZGVmIGNoYXIqIChKSVRfT1BFUkFUSU9OICpQX0pJVE9wZXJhdGlvbl9F
RFopKEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlLCBpbnQzMl90KTsKK3R5cGVkZWYgY2hhciogKEpJ
VF9PUEVSQVRJT04gKlBfSklUT3BlcmF0aW9uX0VVaSkoSlNHbG9iYWxPYmplY3QqLCB1aW50MzJf
dCk7Cit0eXBlZGVmIFNsb3dQYXRoUmV0dXJuVHlwZSAoSklUX09QRVJBVElPTiAqU3BydF9KSVRP
cGVyYXRpb25fRUNsaSkoSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKK3R5cGVkZWYg
U3RyaW5nSW1wbCogKEpJVF9PUEVSQVRJT04gKlRfSklUT3BlcmF0aW9uX0VKc3MpKEpTR2xvYmFs
T2JqZWN0KiwgSlNTdHJpbmcqKTsKK3R5cGVkZWYgSlNTdHJpbmcqIChKSVRfT1BFUkFUSU9OICpK
c3NfSklUT3BlcmF0aW9uX0VaKShKU0dsb2JhbE9iamVjdCosIGludDMyX3QpOwordHlwZWRlZiBK
U1N0cmluZyogKEpJVF9PUEVSQVRJT04gKkpzc19KSVRPcGVyYXRpb25fRUpKSikoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsK
K3R5cGVkZWYgSlNTdHJpbmcqIChKSVRfT1BFUkFUSU9OICpKc3NfSklUT3BlcmF0aW9uX0VKc3NV
aSkoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIHVpbnQzMl90KTsKKwordXNpbmcgSl9KSVRP
cGVyYXRpb25fR0pNaWMgPSBFbmNvZGVkSlNWYWx1ZShKSVRfT1BFUkFUSU9OICopKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKK3VzaW5nIEpfSklUT3BlcmF0aW9uX0dQ
ID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElPTiAqKShKU0dsb2JhbE9iamVjdCosIHZvaWQq
KTsKK3VzaW5nIEpfSklUT3BlcmF0aW9uX0dQUCA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJ
T04gKikoSlNHbG9iYWxPYmplY3QqLCB2b2lkKiwgdm9pZCopOwordXNpbmcgSl9KSVRPcGVyYXRp
b25fR1BQUCA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT04gKikoSlNHbG9iYWxPYmplY3Qq
LCB2b2lkKiwgdm9pZCosIHZvaWQqKTsKK3VzaW5nIEpfSklUT3BlcmF0aW9uX0dKSk1pYyA9IEVu
Y29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT04gKikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKK3VzaW5nIEpfSklUT3BlcmF0aW9uX0VHUCA9
IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT04gKikoQ2FsbEZyYW1lKiwgSlNHbG9iYWxPYmpl
Y3QqLCB2b2lkKik7Cit1c2luZyBaX0pJVE9wZXJhdGlvbl9HSlpaID0gaW50MzJfdChKSVRfT1BF
UkFUSU9OICopKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMy
X3QpOwordXNpbmcgRl9KSVRPcGVyYXRpb25fR0ZKWlogPSBDYWxsRnJhbWUqKEpJVF9PUEVSQVRJ
T04gKikoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJf
dCwgaW50MzJfdCk7Cit1c2luZyBTcHJ0X0pJVE9wZXJhdGlvbl9FR0NsaSA9IFNsb3dQYXRoUmV0
dXJuVHlwZShKSVRfT1BFUkFUSU9OICopKENhbGxGcmFtZSosIEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bExpbmtJbmZvKik7Cit1c2luZyBWX0pJVE9wZXJhdGlvbl9DYiA9IHZvaWQoSklUX09QRVJBVElP
TiAqKShDb2RlQmxvY2sqKTsKK3VzaW5nIFpfSklUT3BlcmF0aW9uX0cgPSBpbnQzMl90IChKSVRf
T1BFUkFUSU9OICopKEpTR2xvYmFsT2JqZWN0Kik7Cit1c2luZyBQX0pJVE9wZXJhdGlvbl9WbVN0
WkIgPSBjaGFyKihKSVRfT1BFUkFUSU9OICopKFZNKiwgU3RydWN0dXJlKiwgaW50MzJfdCwgQnV0
dGVyZmx5Kik7Cit1c2luZyBQX0pJVE9wZXJhdGlvbl9HU3RaQiA9IGNoYXIqKEpJVF9PUEVSQVRJ
T04gKikoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBCdXR0ZXJmbHkqKTsK
K3VzaW5nIEpfSklUT3BlcmF0aW9uX0dKID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElPTiAq
KShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlKTsKK3VzaW5nIEpfSklUT3BlcmF0aW9u
X0dKSSA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT04gKikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKIAogLy8gVGhpcyBtZXRob2QgaXMg
dXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlv
biwgd2hpY2ggaXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxz
IG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgogCi12b2lkIEpJVF9P
UEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihWTSosIEV4ZWNTdGF0ZSopIFdURl9JTlRF
Uk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxl
ckZyYW1lKFZNKiwgRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLXZv
aWQgSklUX09QRVJBVElPTiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuayhWTSosIEV4
ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb29r
dXBFeGNlcHRpb25IYW5kbGVyKFZNKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUoVk0qKSBXVEZf
SU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVk1IYW5kbGVFeGNlcHRpb24o
Vk0qKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gdGhyb3dTdGFja092ZXJmbG93
RXJyb3JGcm9tVGh1bmsoSlNHbG9iYWxPYmplY3QqKSBXVEZfSU5URVJOQUw7CiAKLXZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqLCBD
b2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7Ci1pbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q2FsbEFyaXR5Q2hlY2soRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2soRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlHZXRCeUlkKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25UcnlHZXRCeUlkR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVl
ZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdU
Rl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJ
ZEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpcyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc0dlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUoRXhlY1N0
YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0R2VuZXJp
YyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVl
LCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSW5CeUlkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwg
RW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbkJ5SWRHZW5lcmljKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemUoRXhlY1N0YXRl
KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklu
T3B0aW1pemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBKU0NlbGwqLCBVbmlxdWVk
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uSW4oRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBKU0NlbGwqLCBVbmlx
dWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSW5CeVZhbChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Qo
RXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9J
TlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdChF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdU
Rl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0
aW1pemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCop
IFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlx
dWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1
YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRF
Uk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0
QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0lt
cGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxP
cHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5URVJO
QUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFs
SW5mbyopIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChFeGVjU3RhdGUqLCBFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7Ci1TbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7Ci12b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0RpcmVjdENhbGwoRXhlY1N0YXRlKiwgQ2FsbExp
bmtJbmZvKiwgSlNGdW5jdGlvbiopIFdURl9JTlRFUk5BTDsKLVNsb3dQYXRoUmV0dXJuVHlwZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwotU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKENvZGVCbG9jayopIFdURl9JTlRFUk5BTDsKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25DYWxsQXJpdHlDaGVjayhKU0dsb2JhbE9iamVjdCopIFdURl9JTlRFUk5BTDsKK2ludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrKEpTR2xvYmFsT2Jq
ZWN0KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UcnlHZXRCeUlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVk
SlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeUdldEJ5SWRHZW5lcmljKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUoSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVk
U3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlJZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5j
b2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkR2VuZXJpYyhKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5SWRXaXRoVGhpcyhKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZv
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdU
Rl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzR2VuZXJpYyhKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVTdHViSW5m
byosIEVuY29kZWRKU1ZhbHVlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5CeUlkKEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklu
QnlJZEdlbmVyaWMoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmlu
Z0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkluQnlJZE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8qLCBF
bmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluT3B0aW1pemUoSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEpTQ2VsbCosIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbihKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklu
QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVS
TkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Qo
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikg
V1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlU3R1
YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUoSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dEJ1aWxkTGlzdChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdEJ1aWxkTGlzdChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZv
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdEJ1aWxkTGlzdChKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBX
VEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6
ZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbEdlbmVyaWMoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOworU2xvd1BhdGhSZXR1cm5UeXBlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoQ2FsbEZyYW1lKiwgSlNHbG9iYWxPYmplY3Qq
LCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitTbG93UGF0aFJldHVyblR5cGUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKENhbGxGcmFtZSosIEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoQ2FsbEZyYW1lKiwgSlNHbG9iYWxP
YmplY3QqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiAKLXNpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKLXNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVh
dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLXNp
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNvbXBhcmVMZXNzKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlTGVzc0VxKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlcihKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJF
cShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUVxKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Citz
aXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKICNpZiBV
U0UoSlNWQUxVRTY0KQotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlU3RyaW5nRXEoRXhlY1N0YXRlKiwgSlNDZWxsKiBsZWZ0LCBKU0NlbGwqIHJpZ2h0KSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVT
dHJpbmdFcShKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RG
X0lOVEVSTkFMOwogI2Vsc2UKLXNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVT
dHJpbmdFcShFeGVjU3RhdGUqLCBKU0NlbGwqIGxlZnQsIEpTQ2VsbCogcmlnaHQpIFdURl9JTlRF
Uk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcShKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCogbGVmdCwgSlNDZWxsKiByaWdodCkgV1RGX0lOVEVSTkFMOwog
I2VuZGlmCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0
aFByb2ZpbGUoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIGNvbnN0IEpTVmFs
dWUqIHZhbHVlcywgaW50MzJfdCBzaXplKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlKEV4ZWNTdGF0
ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBFbmNvZGVkSlNWYWx1ZSBzaXplKSBXVEZfSU5U
RVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9u
KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVh
bGxvY2F0aW9uV2F0Y2hwb2ludChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxsKikgV1RGX0lO
VEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
bldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxsKikg
V1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVjU3Rh
dGUqLCBKU1Njb3BlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRS
ZWFsbG9jYXRpb25XYXRjaHBvaW50KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSop
IFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdQcm9taXNl
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdJbnRlcm5hbFByb21pc2UoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikg
V1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0dlbmVyYXRv
cihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3IoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikg
V1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChF
eGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci1VbnVzZWRQdHIgSklUX09QRVJBVElP
TiBvcGVyYXRpb25IYW5kbGVUcmFwcyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3coRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWJ1ZyhFeGVjU3RhdGUq
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUoSlNHbG9iYWxPYmplY3QqLCBBcnJheUFsbG9jYXRp
b25Qcm9maWxlKiwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCBpbnQzMl90IHNpemUpIFdURl9JTlRF
Uk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUoSlNHbG9iYWxPYmplY3QqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwg
RW5jb2RlZEpTVmFsdWUgc2l6ZSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihWTSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0
aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChWTSosIEpTU2NvcGUqLCBK
U0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uKFZNKiwgSlNTY29wZSosIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3R2VuZXJhdG9y
RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KFZNKiwgSlNTY29w
ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbihWTSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5U
RVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KFZNKiwgSlNTY29wZSos
IEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbihWTSosIEpTU2NvcGUqLCBKU0NlbGwqKSBX
VEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Fz
eW5jR2VuZXJhdG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50
KFZNKiwgSlNTY29wZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld09iamVjdChWTSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdQcm9taXNlKFZNKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFM
OworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludGVybmFsUHJvbWlzZShWTSos
IFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdHZW5lcmF0b3IoVk0qLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3IoVk0qLCBTdHJ1Y3R1cmUqKSBX
VEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEpT
R2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworVW51c2VkUHRyIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uSGFuZGxlVHJhcHMoSlNHbG9iYWxPYmplY3QqKSBXVEZfSU5URVJOQUw7
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3coSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRl
YnVnKFZNKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwogI2lmIEVOQUJMRShERkdfSklUKQotU2xv
d1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoRXhlY1N0YXRl
KiwgdWludDMyX3QpIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoKEV4ZWNTdGF0ZSosIHVpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1j
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJv
ZmlsZShFeGVjU3RhdGUqLCB1aW50MzJfdCkgV1RGX0lOVEVSTkFMOworU2xvd1BhdGhSZXR1cm5U
eXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT3B0aW1pemUoVk0qLCB1aW50MzJfdCkgV1RGX0lO
VEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2go
Vk0qLCB1aW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUoVk0qLCB1aW50MzJfdCkgV1RGX0lO
VEVSTkFMOwogI2VuZGlmCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJbmRleChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwotdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRlckJ5SWQoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgVW5pcXVlZFN0cmluZ0ltcGwqLCBpbnQzMl90IG9wdGlvbnMsIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRTZXR0ZXJCeUlkKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIFVuaXF1ZWRTdHJpbmdJbXBsKiwgaW50MzJfdCBvcHRpb25zLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0R2V0dGVyQnlW
YWwoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QgYXR0cmlidXRl
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
U2V0dGVyQnlWYWwoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3Qg
YXR0cmlidXRlLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJbmRleChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90
LCBFbmNvZGVkSlNWYWx1ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0R2V0dGVy
QnlJZChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIFVuaXF1ZWRTdHJpbmdJbXBsKiwgaW50MzJf
dCBvcHRpb25zLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0U2V0dGVyQnlJZChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIFVuaXF1ZWRTdHJp
bmdJbXBsKiwgaW50MzJfdCBvcHRpb25zLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwoSlNHbG9iYWxPYmplY3QqLCBKU0Nl
bGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbChKU0dsb2Jh
bE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90IGF0dHJpYnV0ZSwgSlND
ZWxsKikgV1RGX0lOVEVSTkFMOwogI2lmIFVTRShKU1ZBTFVFNjQpCi12b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFVuaXF1ZWRT
dHJpbmdJbXBsKiwgaW50MzJfdCBhdHRyaWJ1dGUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdldHRl
clNldHRlcihKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIFVuaXF1ZWRTdHJpbmdJbXBsKiwgaW50
MzJfdCBhdHRyaWJ1dGUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOwogI2Vsc2UKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIo
RXhlY1N0YXRlKiwgSlNDZWxsKiwgVW5pcXVlZFN0cmluZ0ltcGwqLCBpbnQzMl90IGF0dHJpYnV0
ZSwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEdldHRlclNldHRlcihKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIFVuaXF1ZWRT
dHJpbmdJbXBsKiwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKICNlbmRpZgotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1c2hGdW5jdGlvbk5h
bWVTY29wZShFeGVjU3RhdGUqLCBpbnQzMl90LCBTeW1ib2xUYWJsZSosIEVuY29kZWRKU1ZhbHVl
KSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wU2NvcGUoRXhl
Y1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8q
KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwot
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0KEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEJ5
VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRGVsZXRlQnlJZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBVbmlx
dWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0YXJnZXQpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRhcmdldCkgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1c2hXaXRoU2NvcGUoRXhlY1N0YXRlKiwgSlNDZWxsKiBjdXJy
ZW50U2NvcGVDZWxsLCBFbmNvZGVkSlNWYWx1ZSBvYmplY3QpIFdURl9JTlRFUk5BTDsKLUpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXNoV2l0aFNjb3BlT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBjdXJyZW50U2NvcGVDZWxsLCBKU09iamVjdCogb2JqZWN0KSBXVEZfSU5U
RVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0UE5hbWVzKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25JbnN0YW5jZU9mKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBwcm90bykgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25JbnN0YW5jZU9mR2VuZXJpYyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIHZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm90bykgV1RG
X0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnN0YW5j
ZU9mT3B0aW1pemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSwgRW5jb2RlZEpTVmFsdWUgcHJvdG8pIFdURl9JTlRFUk5BTDsKLWludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBudW1Vc2VkU3RhY2tTbG90cywg
aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkgV1RGX0lOVEVSTkFMOwotaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IG51bVVzZWRTdGFja1Nsb3RzLCBpbnQzMl90IGZpcnN0
VmFyQXJnT2Zmc2V0KSBXVEZfSU5URVJOQUw7Ci1DYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWUoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwg
RW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QgbGVuZ3RoKSBXVEZfSU5URVJOQUw7Ci1D
YWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUoRXhlY1N0
YXRlKiwgQ2FsbEZyYW1lKiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0
VmFyQXJnT2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1c2hGdW5jdGlvbk5hbWVTY29wZShKU0dsb2JhbE9iamVjdCosIGlu
dDMyX3QsIFN5bWJvbFRhYmxlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3BTY29wZShKU0dsb2JhbE9iamVjdCosIGludDMyX3Qp
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8qKSBXVEZfSU5URVJO
QUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJp
YyhKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRT
dWJzY3JpcHQsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdChKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vi
c2NyaXB0LCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1bHQoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK3NpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5SWQoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdChKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIHRhcmdldCkgV1RG
X0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlWYWwoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSB0YXJnZXQp
IFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXNoV2l0aFNj
b3BlKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBjdXJyZW50U2NvcGVDZWxsLCBFbmNvZGVkSlNW
YWx1ZSBvYmplY3QpIFdURl9JTlRFUk5BTDsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXNoV2l0aFNjb3BlT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2Vs
bCogY3VycmVudFNjb3BlQ2VsbCwgSlNPYmplY3QqIG9iamVjdCkgV1RGX0lOVEVSTkFMOworSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFBOYW1lcyhKU0dsb2JhbE9iamVjdCosIEpT
T2JqZWN0KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25JbnN0YW5jZU9mKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIHByb3RvKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSwgRW5jb2RlZEpTVmFsdWUgcHJvdG8p
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5z
dGFuY2VPZk9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNv
ZGVkSlNWYWx1ZSB2YWx1ZSwgRW5jb2RlZEpTVmFsdWUgcHJvdG8pIFdURl9JTlRFUk5BTDsKK2lu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRz
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IG51bVVz
ZWRTdGFja1Nsb3RzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KSBXVEZfSU5URVJOQUw7Citp
bnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBudW1Vc2VkU3RhY2tT
bG90cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkgV1RGX0lOVEVSTkFMOworQ2FsbEZyYW1l
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3Qg
bGVuZ3RoKSBXVEZfSU5URVJOQUw7CitDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U2V0dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBFbmNvZGVkSlNW
YWx1ZSBhcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIGludDMyX3QgbGVuZ3Ro
KSBXVEZfSU5URVJOQUw7CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoQ2hh
cldpdGhVbmtub3duS2V5VHlwZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVf
dCB0YWJsZUluZGV4KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBr
ZXksIHNpemVfdCB0YWJsZUluZGV4KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZyb21TY29wZShFeGVjU3RhdGUqLCBj
b25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoRXhlY1N0YXRlKiwgY29uc3QgSW5zdHJ1Y3Rpb24q
IGJ5dGVjb2RlUEMpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgpIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlKFZNKiwgRW5jb2RlZEpT
VmFsdWUga2V5LCBzaXplX3QgdGFibGVJbmRleCkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSBXVEZfSU5URVJO
QUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZyb21TY29wZShK
U0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSBXVEZfSU5URVJO
QUw7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShKU0dsb2JhbE9iamVj
dCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSBXVEZfSU5URVJOQUw7CiAKLWNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5
U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5U
RVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlU
b0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6
ZSkgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRl
QnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShWTSosIEpT
T2JqZWN0KikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKFZNKiwgSlNPYmplY3QqLCBzaXpl
X3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgoRXhlY1N0YXRlKiwgSlNDZWxsKik7Ci12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKFZNKiwgSlNDZWxs
Kik7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKFZNKiwgSlND
ZWxsKik7CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25FeGNlcHRpb25GdXp6KEV4ZWNT
dGF0ZSopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enooSlNHbG9i
YWxPYmplY3QqKTsKIAotaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNoZWNrSWZFeGNl
cHRpb25Jc1VuY2F0Y2hhYmxlQW5kTm90aWZ5UHJvZmlsZXIoRXhlY1N0YXRlKik7Ci1pbnQzMl90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKSBXVEZfSU5URVJOQUw7CitpbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9m
aWxlcihWTSopOworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0
b20oSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTT2JqZWN0
KiBjb25zdHJ1Y3RvciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEhhc0luc3RhbmNlKSBXVEZfSU5U
RVJOQUw7CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYWx1ZUFkZFByb2ZpbGVkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSopIFdURl9JTlRFUk5B
TDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxl
ZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIsIEpJVEFkZElDKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkTm9PcHRpbWl6ZShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AyLCBKSVRBZGRJQyopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRBZGRJQyopIFdURl9JTlRF
Uk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGROb09w
dGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIsIEpJVEFkZElDKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7Ci1F
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemUoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMiwgSklUTXVsSUMqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZhbHVlTXVsTm9PcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyopIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQ
cm9maWxlZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVE11bElDKikgV1RGX0lOVEVSTkFMOwotRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkTm9PcHRpbWl6
ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyLCBKSVRNdWxJQyopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUq
KSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoTmVnYXRlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpOwotRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQsIEFyaXRoUHJvZmlsZSopOwotRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wZXJhbmQsIEpJVE5lZ0lDKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wZXJhbmQsIEpJVE5lZ0lDKik7Ci1FbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9J
TlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWJQ
cm9maWxlZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklU
U3ViSUMqKSBXVEZfSU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlU3ViTm9PcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRTdWJJQyopIFdURl9JTlRFUk5BTDsK
LUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9w
dGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIsIEpJVFN1YklDKikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkTm9PcHRpbWl6ZShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
LCBKSVRTdWJJQyopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmFsdWVBZGQoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
LCBBcml0aFByb2ZpbGUqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVEFk
ZElDKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25WYWx1ZUFkZFByb2ZpbGVkTm9PcHRpbWl6ZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVEFkZElDKikgV1RG
X0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZUFk
ZE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUQWRkSUMqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm9PcHRpbWl6ZShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIsIEpJVEFkZElDKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYWx1ZU11bChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIsIEpJVE11bElDKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYWx1ZU11bE5vT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRNdWxJQyop
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFs
dWVNdWxQcm9maWxlZE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqKSBXVEZfSU5URVJO
QUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmls
ZWROb09wdGltaXplKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUTXVsSUMqKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyLCBBcml0aFByb2ZpbGUqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUgb3BlcmFuZCk7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoTmVnYXRlUHJvZmlsZWQoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5k
LCBBcml0aFByb2ZpbGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wZXJhbmQsIEpJVE5lZ0lDKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3BlcmFuZCwgSklUTmVnSUMqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWIoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQoSlNH
bG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBKSVRT
dWJJQyopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVTdWJOb09wdGltaXplKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgSklUU3ViSUMqKSBXVEZfSU5URVJO
QUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViUHJvZmls
ZWRPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJVFN1YklDKikgV1RGX0lOVEVSTkFMOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkTm9PcHRpbWl6
ZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIsIEpJVFN1YklDKikgV1RGX0lOVEVSTkFMOwogCi12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZyhFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5M
b2coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blByb2Nlc3NUeXBlUHJvZmlsZXJMb2coVk0qKSBXVEZfSU5URVJOQUw7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2coVk0qKSBXVEZfSU5URVJOQUw7
CiAKIH0gLy8gZXh0ZXJuICJDIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnNNU1ZDNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zTVNWQzY0LmNwcAppbmRleCAwYTM3YmY3NmMxZjI2ZTkzMGJiOGY2NmZmMWZm
ZTRlNThjODY2MjNlLi5iYTVmMzEzN2U2YTAzZjg3OThkYjhjNzBiOTRjMDNjNDYxMWU4MjhiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnNNU1ZDNjQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9uc01TVkM2NC5j
cHAKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBGSVhNRTogVGhlIGZvbGxv
d2luZyBpcyBhIHdvcmthcm91bmQgdGhhdCBpcyBvbmx5IG5lZWRlZCBiZWNhdXNlIEpJVFN0dWJz
TVNWQzY0LmFzbQogLy8gaXMgYnVpbHQgdW5jb25kaXRpb25hbGx5IGV2ZW4gd2hlbiB0aGUgSklU
IGlzIGRpc2FibGUsIGFuZCBpdCByZWZlcmVuY2VzIHRoaXMgZnVuY3Rpb24uCiAvLyBXZSBvbmx5
IG5lZWQgdG8gcHJvdmlkZSBhIHN0dWIgdG8gc2F0aXNmeSB0aGUgbGlua2FnZS4gSXQgd2lsbCBu
ZXZlciBiZSBjYWxsZWQuCi1leHRlcm4gIkMiIEVuY29kZWRKU1ZhbHVlIGdldEhvc3RDYWxsUmV0
dXJuVmFsdWVXaXRoRXhlY1N0YXRlKEV4ZWNTdGF0ZSopCitleHRlcm4gIkMiIEVuY29kZWRKU1Zh
bHVlIGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KikK
IHsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDBiN2I5NjA5
NmJmOWI0ZTQ5M2ZhZTFjZmZmODJmZTYzNjAxODIxOGEuLjllZDIzNzdjMGFhMDRjZjAxZWUzYmZl
YmQ1YzkwZGZmNGViMjczMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgSklUR2V0QnlJZEdlbmVyYXRv
ciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3BH
ZXRCeVYKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBnZW4uc2xvd1Bh
dGhKdW1wKCkubGluayh0aGlzKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgZHN0LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKICAgICBzbG93RG9uZUNhc2UgPSBqdW1wKCk7CiAKQEAgLTE4OCw3
ICsxODgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYnlW
YWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CkBAIC0z
ODQsNyArMzg0LDcgQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhD
YWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWMKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKICAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKIAot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwg
cmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCkBA
IC00MTcsNyArNDE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDAsIHJl
Z1QxLCByZWdUMiwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlz
RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7
CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0
dXJuQWRkcmVzcyA9IGNhbGw7CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdU
MCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCks
IHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCBy
ZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0OSw3ICs0NDksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0
ZXIub2Zmc2V0KCksIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJTZXR0ZXIsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00NTksNyArNDU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2
OSw3ICs0NjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ3OSw3ICs0NzksNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKICAgICBpbnQgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVz
dWx0LCBkc3QsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgp
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDkwLDcgKzQ5MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5Lm9mZnNldCgpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG8KIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTY2LDcgKzU2Niw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CkBAIC02MzYsNyArNjM2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2wKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC02
NTMsNyArNjUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBpZGVudC0+aW1wbCgp
KTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CkBAIC02OTcsNyArNjk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwog
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdU
MCwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQpAQCAtNzM1LDcgKzczNSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IGlkZW50LT5pbXBsKCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KQEAgLTEwMTAsNyArMTAxMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKTsKICAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQq
IHNldCkKQEAgLTExNzAsNyArMTE3MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yCiAgICAg
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJy
b3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMTQsNyArMTIxNCw3IEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAK
ICAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCks
IHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJT
bG93UGF0aCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOwogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKQEAgLTEyODAsNyArMTI4MCw3IEBAIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CiAKICAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJh
bmNoKHZtKCksIHJlZ1QxLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMSk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKQEAgLTEzMDgsNyArMTMwOCw3IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyKQogewogICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2godm0oKSwgb3duZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoLCBvd25lcik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKICAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKaW5kZXggZWRhNjM5
NWRjNjA2MDU3MDNjYmU4ZjZmY2QxZDE1YTMwNTk0ODU1NS4uY2ZhNmY5ODVlM2IxNTM3YTNmM2Ux
MjEzYTc4NGJjN2ZjMDNkZTI3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAg
dm9pZCBQb2x5bW9ycGhpY0NhbGxDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB9
CiAKIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjpQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+
JiBjb2RlUmVmLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogY2FsbGVy
RnJhbWUsCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiYgY29kZVJlZiwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lLAogICAgIENhbGxMaW5rSW5mbyYgaW5mbywgY29uc3QgVmVjdG9yPFBvbHltb3Jw
aGljQ2FsbENhc2U+JiBjYXNlcywKICAgICBVbmlxdWVBcnJheTx1aW50MzJfdD4mJiBmYXN0Q291
bnRzKQogICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGVSZWYsIHZtKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
CmluZGV4IDBlNWM3NzM0ZGRlMGI5ODAxNDQ1OTQ5YjdjMTFmMzNkMjIyMjhmNjEuLjA1YmY3YTQy
MmU3YmE3ZDBlYWRiMTFmNGUyZjk0NWIwMDRiMDE3ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKQEAgLTg0LDcg
Kzg0LDcgQEAgY2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lIHsKIHB1YmxpYzoKICAgICBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZSgKICAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwKLSAgICAgICAgRXhlY1N0YXRlKiBjYWxs
ZXJGcmFtZSwgQ2FsbExpbmtJbmZvJiwgY29uc3QgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+
JiwKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvJiwgY29uc3Qg
VmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+JiwKICAgICAgICAgVW5pcXVlQXJyYXk8dWludDMy
X3Q+JiYgZmFzdENvdW50cyk7CiAgICAgCiAgICAgdmlydHVhbCB+UG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDAzMDRi
Nzg2MzA4OWJiNjlkMDkxNjZmYTZmOGQzNzIwNGQyM2M5MDYuLjczYTYzYTBhNGVhOGFkZmY2NDMz
N2FhNmE3NTllMGExNjVjMzdlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cApAQCAtMTMyLDcgKzEzMiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb25Gb3JD
ZWxsKFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsKIH0K
IAotc3RhdGljIGJvb2wgZm9yY2VJQ0ZhaWx1cmUoRXhlY1N0YXRlKikKK3N0YXRpYyBib29sIGZv
cmNlSUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKIHsKICAgICByZXR1cm4gT3B0aW9uczo6Zm9y
Y2VJQ0ZhaWx1cmUoKTsKIH0KQEAgLTE3NywxNSArMTc3LDE1IEBAIGlubGluZSBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2V0QnlJZEZ1bmN0aW9uKEdldEJ5SURLaW5k
IGtpbmQpCiAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWQ7CiB9CiAKLXN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgR2V0QnlJREtpbmQga2luZCkKK3N0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUlES2luZCBraW5kKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwogCiAgICAgewotICAgICAgICBHQ1NhZmVDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMtPnZt
KCkuaGVhcCk7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKTsKIAotICAgICAgICBpZiAoZm9y
Y2VJQ0ZhaWx1cmUoZXhlYykpCisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmpl
Y3QpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgIAogICAgICAg
ICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgpAQCAtMTkz
LDggKzE5Myw2IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKICAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0Nl
bGwoKTsKIAotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwogCiAgICAg
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CkBAIC0y
OTksNyArMjk3LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb24KICAgICAgICAgICAgICAgICAv
LyBJZiBhIGtpbmQgaXMgR2V0QnlJREtpbmQ6OkRpcmVjdCwgd2UgZG8gbm90IG5lZWQgdG8gaW52
ZXN0aWdhdGUgcHJvdG90eXBlIGNoYWlucyBmdXJ0aGVyLgogICAgICAgICAgICAgICAgIC8vIENh
Y2hlYWJpbGl0eSBqdXN0IGRlcGVuZHMgb24gdGhlIGhlYWQgc3RydWN0dXJlLgogICAgICAgICAg
ICAgICAgIGlmIChraW5kICE9IEdldEJ5SURLaW5kOjpEaXJlY3QpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVQcm90b3R5cGVDaGFpbkZvckNhY2hpbmco
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBiYXNlQ2VsbCwgc2xvdCk7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlUHJvdG90eXBlQ2hhaW5Gb3JDYWNo
aW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNhY2hlU3RhdHVzKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAKQEAgLTMwOSw3ICszMDcsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbgogICAg
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVz
LT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nl
c3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjpjcmVhdGUoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBiYXNlQ2VsbCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90
b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjpjcmVhdGUoZ2xvYmFsT2Jq
ZWN0LCBiYXNlQ2VsbCwgc2xvdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3Rv
dHlwZUFjY2Vzc0NoYWluKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5p
c0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVj
dHVyZShzdHJ1Y3R1cmUpLT5nZXQodm0sIHByb3BlcnR5TmFtZSkgPT0gb2Zmc2V0KTsKQEAgLTMy
MSwxNSArMzE5LDE1IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjE1
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5
SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVj
LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJh
c2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNvbmRpdGlv
blNldC5pc1ZhbGlkKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0
KCkgPT0gb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpLCBzbG90LmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAKQEAgLTM5OCwxOSArMzk2LDE3IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgY29uCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0
dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGV4ZWMtPmNvZGVCbG9jaygpLCByZXN1bHQpOworICAg
IGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJs
b2NrLCByZXN1bHQpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdp
dmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9CiAKLXZvaWQgcmVwYXRjaEdldEJ5SUQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgR2V0QnlJREtpbmQga2luZCkKK3ZvaWQgcmVwYXRjaEdldEJ5SUQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZh
bHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUlES2luZCBraW5kKQogewog
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAg
ICBpZiAodHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkgewotICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIGlmICh0cnlDYWNoZUdldEJ5SUQo
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKICAgICAgICAgZnRsVGh1bmtBd2FyZVJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBw
cm9wcmlhdGVHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwotICAgIH0KIH0KIAogc3RhdGljIFZfSklU
T3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKGNvbnN0
IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQpAQCAtNDM3LDE4ICs0MzMs
MTYgQEAgc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVPcHRpbWl6aW5n
UHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3AKICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtp
bmQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CiAgICAgewotICAg
ICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5t
X2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKTsKIAot
ICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZXhlYykpCisgICAgICAgIGlmIChmb3JjZUlDRmFp
bHVyZShnbG9iYWxPYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAg
ICAgICAgIAotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotCiAgICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQogICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgIApAQCAtNTE4LDE4ICs1MTIsMTggQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBTdHIKICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOwogICAgICAgICAgICAgICAgIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKICAgICAgICAgICAgICAgICBpZiAo
cHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0
YXR1cyA9IHByZXBhcmVQcm90b3R5cGVDaGFpbkZvckNhY2hpbmcoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBiYXNlQ2VsbCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y2FjaGVTdGF0dXMgPSBwcmVwYXJlUHJvdG90eXBlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVj
dCwgYmFzZUNlbGwsIG51bGxwdHIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3Rh
dHVzKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vz
c0NoYWluOjpjcmVhdGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBiYXNlQ2VsbCwgbnVs
bHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBv
bHlQcm90b0FjY2Vzc0NoYWluOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0
cik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBl
QWNjZXNzQ2hhaW4gPSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
U2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRl
bnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBn
bG9iYWxPYmplY3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtNTQzLDE4ICs1MzcsMTggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0
QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIKICAgICAgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluOwogCiAgICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZVByb3RvdHlw
ZUNoYWluRm9yQ2FjaGluZyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGJhc2VDZWxsLCBz
bG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVw
YXJlUHJvdG90eXBlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3Qu
YmFzZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6Y3JlYXRl
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNj
ZXNzQ2hhaW46OmNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNz
Q2hhaW4gPSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0g
Z2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90
LmJhc2UoKSwgaWRlbnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRy
aWJ1dGU6Ok5vbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTU2OSwyMSArNTYzLDIxIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAg
ICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKIAog
ICAgICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVQcm90b3R5cGVDaGFpbkZvckNh
Y2hpbmcoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkp
OworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZVByb3RvdHlw
ZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hl
U3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFJldHJ5Q2FjaGVMYXRlcjsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0
dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OmNyZWF0ZShleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjpjcmVhdGUo
Z2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dCA9IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZShiYXNlQ2VsbC0+c3Ry
dWN0dXJlKHZtKSktPmdldCh2bSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0g
bnVsbHB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50
LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCkBAIC02MTIsMzEgKzYw
NiwyOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cgogICAgICAgICB9CiAgICAgfQogCi0gICAg
ZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBleGVjLT5j
b2RlQmxvY2soKSwgcmVzdWx0KTsKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5l
ZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKIAogICAgIHJldHVybiByZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwog
fQogCi12b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRLaW5kIHB1dEtpbmQpCit2b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtp
bmQgcHV0S2luZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVw
T25DYWNoZSkgewotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOworICAgIGlmICh0cnlDYWNoZVB1dEJ5SUQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJh
c2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5k
KSA9PSBHaXZlVXBPbkNhY2hlKQogICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZUdlbmVy
aWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwotICAgIH0KIH0KIAogc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeUlEKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LAorICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsCiAgICAgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CiAKICAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgdm0uaGVhcCk7Ci0g
ICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShleGVjKSkKKyAgICAgICAgR0NTYWZlQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0uaGVhcCk7CisgICAgICAgIGlm
IChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CiAgICAgICAgIAogICAgICAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSh2bSktPnBy
b3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0ZvdW5kICYmICFiYXNlLT5zdHJ1
Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlRm9yQWJzZW5jZSgpKSkKQEAg
LTY0Nyw3ICs2MzksNiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5SUQo
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKICAgICAg
ICAgCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90
eXBlQWNjZXNzQ2hhaW47CkBAIC02NzQsMzkgKzY2NSwzOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVJbkJ5SUQoCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChz
bG90LnNsb3RCYXNlKCkgIT0gYmFzZSkgewotICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0
dXMgPSBwcmVwYXJlUHJvdG90eXBlQ2hhaW5Gb3JDYWNoaW5nKGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgYmFzZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9
IHByZXBhcmVQcm90b3R5cGVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90
KTsKICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMt
PmZsYXR0ZW5lZERpY3Rpb25hcnkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNh
Y2hlTGF0ZXI7CiAKICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJv
dG8pIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJv
dG9BY2Nlc3NDaGFpbjo6Y3JlYXRlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgYmFzZSwg
c2xvdCk7CisgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVBy
b3RvQWNjZXNzQ2hhaW46OmNyZWF0ZShnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBwcm90b3R5cGVBY2Nlc3NDaGFp
bi0+c2xvdEJhc2VTdHJ1Y3R1cmUoc3RydWN0dXJlKS0+Z2V0KHZtLCBpZGVudC5pbXBsKCkpID09
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKICAgICAgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNs
b3RCYXNlKCksIGlkZW50LmltcGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwogICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVh
YmxlQ3VzdG9tKCkgfHwgY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2Zmc2V0KCkg
PT0gc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBh
cmVQcm90b3R5cGVDaGFpbkZvckNhY2hpbmcoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBi
YXNlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlUHJv
dG90eXBlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgbnVsbHB0cik7CiAgICAg
ICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQogICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwogCiAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsK
LSAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0No
YWluOjpjcmVhdGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBiYXNlLCBzbG90KTsKKyAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWlu
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKICAgICAgICAgICAgICAgICBpZiAo
IXByb3RvdHlwZUFjY2Vzc0NoYWluKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcHJvdG90eXBl
QWNjZXNzQ2hhaW4gPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAgdm0s
IGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAg
ICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQuaW1w
bCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQpAQCAt
NzI3LDMyICs3MTgsMjkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeUlE
KAogICAgICAgICB9CiAgICAgfQogCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZO
ZWVkZWQodm0sIHN0dWJJbmZvLCBleGVjLT5jb2RlQmxvY2soKSwgcmVzdWx0KTsKKyAgICBmaXJl
V2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywg
cmVzdWx0KTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2
ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKIH0KIAotdm9pZCByZXBhdGNoSW5CeUlEKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2VPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIHJlcGF0Y2hJbkJ5SUQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGJvb2wgd2FzRm91bmQsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAg
IFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAotICAgIGlmICh0
cnlDYWNoZUluQnlJRChleGVjLCBiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHdhc0ZvdW5kLCBz
bG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkgewotICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIGlmICh0cnlDYWNoZUluQnlJRChnbG9i
YWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lLCB3YXNGb3VuZCwg
c2xvdCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCiAgICAgICAgIGZ0bFRodW5rQXdhcmVS
ZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIG9w
ZXJhdGlvbkluQnlJZCk7Ci0gICAgfQogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVJbnN0YW5jZU9mKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZVZhbHVl
LCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sCisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLAogICAgIGJvb2wgd2FzRm91bmQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IHJlc3VsdDsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVCh2YWx1ZVZhbHVlLmlzQ2VsbCgpKTsg
Ly8gc2hvdWxkQ29uc2lkZXJDYWNoaW5nIHJlamVjdHMgbm9uLWNlbGxzLgogICAgIAotICAgIGlm
IChmb3JjZUlDRmFpbHVyZShleGVjKSkKKyAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2Jq
ZWN0KSkKICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgewpAQCAtNzcw
LDkgKzc1OCw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluc3RhbmNlT2Yo
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+cHJvdG90eXBlUXVlcmllc0FyZUNh
Y2hlYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgdG8gZG8g
cG9seSBwcm90by4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg1NjYzCi0gICAgICAgICAgICAgICAgcHJlcGFyZVByb3RvdHlwZUNo
YWluRm9yQ2FjaGluZyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHZhbHVlLCB3YXNGb3Vu
ZCA/IHByb3RvdHlwZSA6IG51bGxwdHIpOworICAgICAgICAgICAgICAgIHByZXBhcmVQcm90b3R5
cGVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgd2FzRm91bmQgPyBwcm90b3R5
cGUgOiBudWxscHRyKTsKICAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JJbnN0YW5jZU9mKAotICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZSwg
d2FzRm91bmQpOworICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgcHJvdG90eXBlLCB3YXNGb3VuZCk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6OmNyZWF0ZSgKQEAgLTgwNywxMiArNzk1LDEyIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluc3RhbmNlT2YoCiB9CiAKIHZvaWQgcmVw
YXRjaEluc3RhbmNlT2YoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlVmFsdWUs
IEpTVmFsdWUgcHJvdG90eXBlVmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSB2YWx1ZVZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sCiAgICAgYm9vbCB3YXNGb3VuZCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29w
ZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgaWYgKHRyeUNhY2hlSW5zdGFuY2VPZihl
eGVjLCB2YWx1ZVZhbHVlLCBwcm90b3R5cGVWYWx1ZSwgc3R1YkluZm8sIHdhc0ZvdW5kKSA9PSBH
aXZlVXBPbkNhY2hlKQotICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIG9wZXJhdGlvbkluc3Rh
bmNlT2ZHZW5lcmljKTsKKyAgICBpZiAodHJ5Q2FjaGVJbnN0YW5jZU9mKGdsb2JhbE9iamVjdCwg
Y29kZUJsb2NrLCB2YWx1ZVZhbHVlLCBwcm90b3R5cGVWYWx1ZSwgc3R1YkluZm8sIHdhc0ZvdW5k
KSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBvcGVyYXRpb25JbnN0YW5j
ZU9mR2VuZXJpYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0
clRhZz4gY29kZVJlZikKQEAgLTg0NSwxMiArODMzLDEyIEBAIHN0YXRpYyBKU0NlbGwqIHdlYkFz
c2VtYmx5T3duZXIoSlNDZWxsKiBjYWxsZWUpCiB9CiAKIHZvaWQgbGlua0ZvcigKLSAgICBFeGVj
U3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxl
ZUNvZGVCbG9jaywKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAogICAgIEpTT2JqZWN0KiBjYWxs
ZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQogewogICAg
IEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAKLSAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lID0gZXhlYy0+Y2FsbGVyRnJhbWUoKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0g
Y2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIC8vIE91ciBjYWxsZXIgbXVzdCBoYXZlIGEg
Y2VsbCBmb3IgYSBjYWxsZWUuIFdoZW4gY2FsbGluZwogICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3
ZSBlbnN1cmUgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCiAgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5j
YWxsZWUoKS5pc0NlbGwoKSk7CkBAIC04ODMsMTIgKzg3MSwxMiBAQCB2b2lkIGxpbmtGb3IoCiB9
CiAKIHZvaWQgbGlua0RpcmVjdEZvcigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2Fs
bGVlQ29kZUJsb2NrLAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBj
b2RlUHRyKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAgICAgCi0gICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKICAgICBW
TSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCkBAIC05MDIsMTMgKzg5MCwxMiBA
QCB2b2lkIGxpbmtEaXJlY3RGb3IoCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQ
dHJUYWc+KGNvZGVQdHIpKTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNh
bGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLCAmY2FsbExpbmtJbmZvKTsKKyAg
ICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxGcmFtZSwgJmNhbGxM
aW5rSW5mbyk7CiB9CiAKLXZvaWQgbGlua1Nsb3dGb3IoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3ZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIENvZGVCbG9jayog
Y2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CisgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNv
ZGVCbG9jaygpOwogICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAKICAg
ICBsaW5rU2xvd0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKQEAgLTk0OSwxMCArOTM2LDkgQEAgdm9p
ZCB1bmxpbmtGb3IoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKICAgICByZXZl
cnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQogCi1zdGF0aWMgdm9p
ZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvKQorc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSA9IGV4ZWMtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gY2FsbGVyRnJhbWUt
PnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJh
bWUoKTsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2Rl
QmxvY2soKTsKIAogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJs
b2NrKSkKQEAgLTk3MSwxMiArOTU3LDExIEBAIHN0cnVjdCBDYWxsVG9Db2RlUHRyIHsKIH07CiB9
IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCiAKLXZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFu
dCBuZXdWYXJpYW50KQordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm8uYWxsb3dTdHVicygpKTsKIAotICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBl
eGVjLT5jYWxsZXJGcmFtZSgpOworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCk7CiAgICAgVk0mIHZtID0gY2FsbGVyRnJhbWUtPnZtKCk7CiAKICAg
ICAvLyBEdXJpbmcgZXhlY3V0aW9uIG9mIGxpbmtQb2x5bW9ycGhpY0NhbGwsIHdlIHN0cm9uZ2x5
IGFzc3VtZSB0aGF0IHdlIG5ldmVyIGRvIEdDLgpAQCAtOTg0LDcgKzk2OSw3IEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbCgKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0NGb3JBV2hpbGUo
dm0uaGVhcCk7CiAgICAgCiAgICAgaWYgKCFuZXdWYXJpYW50KSB7Ci0gICAgICAgIGxpbmtWaXJ0
dWFsRm9yKGV4ZWMsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBj
YWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEw
MzMsOCArMTAxOCw4IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAgICAgIGNv
ZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y29kZUJs
b2NrRm9yQ2FsbCgpOwogICAgICAgICAgICAgLy8gSWYgd2UgY2Fubm90IGhhbmRsZSBhIGNhbGxl
ZSwgZWl0aGVyIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIENvZGVCbG9jayBvciBiZWNhdXNlIGFy
aXR5IG1pc21hdGNoLAogICAgICAgICAgICAgLy8gYXNzdW1lIHRoYXQgaXQncyBiZXR0ZXIgZm9y
IHRoaXMgd2hvbGUgdGhpbmcgdG8gYmUgYSB2aXJ0dWFsIGNhbGwuCi0gICAgICAgICAgICBpZiAo
IWNvZGVCbG9jayB8fCBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZv
LmlzVmFyYXJncygpKSB7Ci0gICAgICAgICAgICAgICAgbGlua1ZpcnR1YWxGb3IoZXhlYywgY2Fs
bExpbmtJbmZvKTsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5pc1ZhcmFyZ3MoKSkgeworICAgICAg
ICAgICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDgz
LDcgKzEwNjgsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAKICAgICAvLyBXZSB1c2Ug
bGlzdC5zaXplKCkgaW5zdGVhZCBvZiBjYWxsQ2FzZXMuc2l6ZSgpIGJlY2F1c2Ugd2UgcmVzcGVj
dCBDYWxsVmFyaWFudCBzaXplIGZvciBub3cuCiAgICAgaWYgKGxpc3Quc2l6ZSgpID4gbWF4UG9s
eW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKSB7Ci0gICAgICAgIGxpbmtWaXJ0dWFsRm9yKGV4
ZWMsIGNhbGxMaW5rSW5mbyk7CisgICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUs
IGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyMDksNiArMTE5
NCw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAgc3R1YkppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdU
MSk7CiAjZW5kaWYKICAgICB9CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CiAgICAgc3R1YkppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSks
IEdQUkluZm86OnJlZ1Q0KTsKICAgICAKQEAgLTEyMTcsNyArMTIwMyw3IEBAIHZvaWQgbGlua1Bv
bHltb3JwaGljQ2FsbCgKICAgICAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHVi
Sml0LCBvd25lciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAocGF0Y2hCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAgICBsaW5rVmlydHVhbEZvcihleGVjLCBjYWxs
TGlua0luZm8pOworICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlu
a0luZm8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTI0NSw3ICsxMjMxLDcg
QEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICAgICAgIlBvbHltb3JwaGljIGNh
bGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCiAgICAgICAgICAg
ICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNv
ZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxB
dE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLAotICAgICAgICB2bSwgb3duZXIsIGV4ZWMt
PmNhbGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAorICAgICAgICB2bSwgb3du
ZXIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExpbmtJbmZvLCBjYWxsQ2FzZXMsCiAg
ICAgICAgIFdURk1vdmUoZmFzdENvdW50cykpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwbGFjZVdpdGhKdW1wKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAppbmRleCAwMmRi
MTIwMmJlYmJkZTRkZDViNWU5NzgwODc1YjM4OTBkNzk2MWZmLi5mYWJjM2ZhNzQ4YTM4OTVmNzNl
MDlkZWIzODJiZDRkYmYzNzM5OGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaApA
QCAtMzksMTggKzM5LDE1IEBAIGVudW0gY2xhc3MgR2V0QnlJREtpbmQgewogICAgIERpcmVjdAog
fTsKIAotdm9pZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUlE
S2luZCk7Ci12b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12
b2lkIGJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQg
cmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgU3RydWN0dXJlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCk7Ci12b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgU3RydWN0
dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgUHV0S2luZCk7Ci12b2lkIHJlcGF0Y2hJbkJ5SUQoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaEluc3RhbmNlT2YoRXhlY1N0
YXRlKiwgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGUsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgYm9vbCB3YXNGb3VuZCk7Ci12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZv
JiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua0RpcmVjdEZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4pOwot
dm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mKTsKK3ZvaWQgcmVwYXRj
aEdldEJ5SUQoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUlE
S2luZCk7Cit2b2lkIHJlcGF0Y2hQdXRCeUlEKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwg
SlNWYWx1ZSwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5
U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIHJlcGF0Y2hJbkJ5SUQo
SlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXIm
LCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owordm9pZCByZXBhdGNoSW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpT
VmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIGJvb2wg
d2FzRm91bmQpOwordm9pZCBsaW5rRm9yKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVC
bG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPik7Cit2b2lkIGxpbmtEaXJlY3RGb3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29k
ZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKK3ZvaWQgbGlu
a1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0ZvcihWTSYs
IENhbGxMaW5rSW5mbyYpOwotdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKK3ZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50KTsKIHZv
aWQgcmVzZXRHZXRCeUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlJREtp
bmQpOwogdm9pZCByZXNldFB1dEJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
IHZvaWQgcmVzZXRJbkJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU25pcHBldFNsb3dQYXRoQ2FsbHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU25pcHBldFNsb3dQYXRoQ2FsbHMuaAppbmRleCBk
MmUwMmU5ZWFkNTFiOGY1ZWY2MzVlMzJkMDM1ZTU2ODA1ZWQ0ODQ2Li42YWIyNDIzNWQ2NWYyZmQ3
MGI2NzZjYzQzODE2ZjJlMTYzYjQ4M2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NuaXBwZXRTbG93UGF0aENhbGxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbmlwcGV0U2xvd1BhdGhDYWxscy5oCkBAIC0zMCw3ICszMCw2IEBACiAKIC8vIG1hY3Jv
KE9wZXJhdGlvblR5cGUsIEFyZ1R5cGUxLCBBcmdUeXBlMiwgLi4uKQogI2RlZmluZSBTTklQUEVU
X1NMT1dfUEFUSF9DQUxMUyhtYWNybykgXAotICAgIG1hY3JvKEpfSklUT3BlcmF0aW9uX0VQLCBK
U1ZhbHVlUmVncywgR1BSUmVnKSBcCi0gICAgbWFjcm8oSl9KSVRPcGVyYXRpb25fRUdQLCBKU1Zh
bHVlUmVncywgR1BSUmVnLCBHUFJSZWcpIFwKKyAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9HUCwg
SlNWYWx1ZVJlZ3MsIEdQUlJlZywgR1BSUmVnKSBcCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IGI3OWUwOGNmNTkwYWQwZWQ5
Mjk0N2FmZWMwOTljODkxYjRmNjI4NDkuLmIwODVhYzFiMDdkZjg4MjVlNTY2ZGJkMzJjMzBiY2Vl
N2MxZDI1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiTWF0aENvbW1vbi5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
LmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oIgogI2luY2x1ZGUgPHd0Zi9JbmxpbmVBU00uaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5n
UHJpbnRTdHJlYW0uaD4KQEAgLTcwLDggKzcxLDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0K
IAogICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bS50b3BFbnRyeUZyYW1lKTsKIAotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShsb29r
dXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4obG9va3VwRXhjZXB0
aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVu
dHM8ZGVjbHR5cGUob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmdm0pKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0p
OworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CiAgICAgaml0LmNhbGwoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcih2bSk7CkBAIC04MCw3ICs4Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNCiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiVGhyb3cg
ZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAotc3RhdGljIHZvaWQg
c2xvd1BhdGhGb3IoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgU3BydF9KSVRPcGVyYXRpb25f
RUNsaSBzbG93UGF0aEZ1bmN0aW9uKQorc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoQ0NhbGxIZWxw
ZXJzJiBqaXQsIFZNJiB2bSwgU3BydF9KSVRPcGVyYXRpb25fRUdDbGkgc2xvd1BhdGhGdW5jdGlv
bikKIHsKICAgICBqaXQuc2FuaXRpemVTdGFja0lubGluZSh2bSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7CiAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CkBAIC05MSw3ICs5MywxMSBAQCBz
dGF0aWMgdm9pZCBzbG93UGF0aEZvcihDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBTcHJ0X0pJ
VE9wZXJhdGlvbl9FQ2xpIHNsb3dQYQogICAgIC8vIE1vdmluZyB0aGUgc3RhY2sgZG93biBtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCBieXRlcyBnaXZlcyB1cyByb29tIGZvciBvdXIgMyBh
cmd1bWVudHMKICAgICAvLyBhbmQgc3BhY2UgZm9yIHRoZSAxNiBieXRlIHJldHVybiBhcmVhLgog
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGlu
dDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIENDYWxsSGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGppdC5tb3ZlKEdQUkluZm86OnJlZ1QyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoR1BSSW5mbzo6cmVnVDIgIT0gR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEdQUkluZm86OnJlZ1QzICE9
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmVnVDIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmVnVDMsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMik7CisgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMzIpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihzbG93UGF0aEZ1bmN0
aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMTAzLDcgKzEwOSw3IEBAIHN0YXRpYyB2
b2lkIHNsb3dQYXRoRm9yKENDYWxsSGVscGVycyYgaml0LCBWTSYgdm0sIFNwcnRfSklUT3BlcmF0
aW9uX0VDbGkgc2xvd1BhCiAjZWxzZQogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtbWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoc2xvd1BhdGhGdW5jdGlv
bik+KEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoc2xv
d1BhdGhGdW5jdGlvbik+KEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9u
UHRyVGFnKTsKICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOwpAQCAtMzE3LDEyICszMjMsMTEgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gbmF0aXZlRm9yR2VuZXJhdG9yKFZNJiB2bSwgVGh1bmtGdW4KIAogICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BF
bnRyeUZyYW1lKTsKICAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJl
Z2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKLQogI2lmIE9TKFdJTkRPV1MpCiAgICAgLy8gQWxs
b2NhdGUgc3BhY2Ugb24gc3RhY2sgZm9yIHRoZSA0IHBhcmFtZXRlciByZWdpc3RlcnMuCiAgICAg
aml0LnN1YlB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDQgKiBzaXplb2YoaW50NjRf
dCkpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmCi0gICAg
aml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVyZmFjZUpJ
VDo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJnZtKSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0Lm1vdmUoSlNJ
bnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uVk1IYW5kbGVFeGNlcHRpb24pKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsK
ICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6cmVnVDMsIE9wZXJhdGlvblB0clRhZyk7CiAj
aWYgT1MoV0lORE9XUykKQEAgLTExNjIsMTEgKzExNjcsMTMgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3Io
Vk0mIHYKICAgICAKICAgICBqaXQubmVnUHRyKEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsK
KyAgICBqaXQubG9hZENlbGwoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSksIEdQUkluZm86OnJlZ1QzKTsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGF2ZVN0
YWNrU3BhY2UgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBDQ2Fs
bEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwg
R1BSSW5mbzo6cmVnVDIpOwogCiAgICAgLy8gVGhyb3cgU3RhY2sgT3ZlcmZsb3cgZXhjZXB0aW9u
CiAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
LnRvcEVudHJ5RnJhbWUpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZSh0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuayk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigm
dm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBKU0JvdW5kRnVuY3Rpb246Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LnNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKT4oR1BSSW5mbzo6cmVn
VDMpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaykp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOwogICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CkBAIC0xMTc3LDggKzExODQsNiBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kVGhpc05vQXJnc0Z1bmN0
aW9uQ2FsbEdlbmVyYXRvcihWTSYgdgogCiAgICAgLy8gRG8gYmFzaWMgY2FsbGVlIGZyYW1lIHNl
dHVwLCBpbmNsdWRpbmcgJ3RoaXMnLgogICAgIAotICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBl
cnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDMpOwot
CiAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJh
bWVQYXlsb2FkU2xvdChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CiAgICAgCiAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdz
KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCBmOWIzYzhjYzY3YWFlMmJjZTEyOTA5MDljYzUx
Y2MxZGRhNDE0MWM1Li5mODYxZWU4ODQ5YmMxZGVlMWMzNTZmYWRmMDQxZDM1NDY1YTE3M2JiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTM3LDcg
KzM3LDYgQEAgY2xhc3MgVk07CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gbGlua0NhbGxUaHVuayhWTSosIENhbGxM
aW5rSW5mbyYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvcihWTSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDAyNGE4M2VkMjVmNzQ0OGM2MDQz
ODk1NDM0ODVjZWQxMWNjNWYxNDMuLmE2NjJkY2E5MDFiYjg2ODY1YzQwNTAyNmJjZWFkMzMzMDM3
MTdkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0yMzYsNyArMjM2LDcgQEAgY2xhc3MgV29y
a2VyczsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGludCBydW5KU0MoY29uc3QgQ29tbWFu
ZExpbmUmLCBib29sIGlzV29ya2VyLCBjb25zdCBGdW5jJik7Ci1zdGF0aWMgdm9pZCBjaGVja0V4
Y2VwdGlvbihFeGVjU3RhdGUqLCBHbG9iYWxPYmplY3QqLCBib29sIGlzTGFzdEZpbGUsIGJvb2wg
aGFzRXhjZXB0aW9uLCBKU1ZhbHVlLCBDb21tYW5kTGluZSYsIGJvb2wmIHN1Y2Nlc3MpOworc3Rh
dGljIHZvaWQgY2hlY2tFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiwgYm9vbCBpc0xhc3RGaWxlLCBi
b29sIGhhc0V4Y2VwdGlvbiwgSlNWYWx1ZSwgQ29tbWFuZExpbmUmLCBib29sJiBzdWNjZXNzKTsK
IAogY2xhc3MgTWVzc2FnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXNzYWdlPiB7
CiBwdWJsaWM6CkBAIC02MDMsOSArNjAzLDkgQEAgY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGlj
IEpTR2xvYmFsT2JqZWN0IHsKICNlbmRpZgogCiAgICAgICAgIGlmICghYXJndW1lbnRzLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGdsb2JhbEV4ZWMoKSwgMCk7CisgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkodGhpcywgMCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0
SW5kZXgoZ2xvYmFsRXhlYygpLCBpLCBqc1N0cmluZyh2bSwgYXJndW1lbnRzW2ldKSk7CisgICAg
ICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KHRoaXMsIGksIGpzU3RyaW5nKHZtLCBh
cmd1bWVudHNbaV0pKTsKICAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImFyZ3VtZW50cyIpLCBhcnJheSk7CiAgICAgICAgIH0KIApAQCAtNjYwLDEw
ICs2NjAsMTAgQEAgY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsK
ICAgICAgICAgYWRkRnVuY3Rpb24odm0sIHRoaXMsIG5hbWUsIGZ1bmN0aW9uLCBhcmd1bWVudHMp
OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRl
ckltcG9ydE1vZHVsZShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVy
KiwgSlNTdHJpbmcqLCBKU1ZhbHVlLCBjb25zdCBTb3VyY2VPcmlnaW4mKTsKLSAgICBzdGF0aWMg
SWRlbnRpZmllciBtb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRl
KiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLSAgICBzdGF0
aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU1ZhbHVlLCBKU1ZhbHVlKTsK
LSAgICBzdGF0aWMgSlNPYmplY3QqIG1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0
aWVzKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVl
LCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlz
ZSogbW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiwgSlNNb2R1bGVMb2Fk
ZXIqLCBKU1N0cmluZyosIEpTVmFsdWUsIGNvbnN0IFNvdXJjZU9yaWdpbiYpOworICAgIHN0YXRp
YyBJZGVudGlmaWVyIG1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVs
ZUxvYWRlciosIEpTVmFsdWUsIEpTVmFsdWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU0ludGVy
bmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUsIEpTVmFsdWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU09iamVjdCog
bW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqLCBK
U01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7CiB9Owog
CiBzdGF0aWMgYm9vbCBzdXBwb3J0c1JpY2hTb3VyY2VJbmZvID0gdHJ1ZTsKQEAgLTgyMSw0OCAr
ODIxLDQ4IEBAIHN0YXRpYyBTdHJpbmcgYWJzb2x1dGVQYXRoKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpCiAgICAgcmV0dXJuIHJlc29sdmVQYXRoKGRpcmVjdG9yeU5hbWUudmFsdWUoKSwgTW9kdWxl
TmFtZShmaWxlTmFtZS5pbXBsKCkpKTsKIH0KIAotSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9i
amVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1N0cmluZyogbW9kdWxlTmFt
ZVZhbHVlLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIGNvbnN0IFNvdXJjZU9yaWdpbiYgc291cmNlT3Jp
Z2luKQorSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0
TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTTW9kdWxlTG9hZGVyKiwgSlNT
dHJpbmcqIG1vZHVsZU5hbWVWYWx1ZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VP
cmlnaW4mIHNvdXJjZU9yaWdpbikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBh
dXRvKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVj
LCBnbG9iYWxPYmplY3QpOworICAgIGF1dG8qIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VE
ZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBudWxscHRyKTsKIAogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIGF1dG8gcmVqZWN0ID0gWyZdIChKU1ZhbHVlIHJlamVjdGlv
blJlYXNvbikgewogICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAg
IGF1dG8gcmVzdWx0ID0gZGVmZXJyZWQtPnJlamVjdChleGVjLCByZWplY3Rpb25SZWFzb24pOwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IGRlZmVycmVkLT5yZWplY3QoZ2xvYmFsT2JqZWN0LCByZWpl
Y3Rpb25SZWFzb24pOwogICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfTsKIAogICAgIGlmIChzb3VyY2VPcmlnaW4uaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBy
ZXNvbHZlIHRoZSBtb2R1bGUgc3BlY2lmaWVyLiJfcykpOworICAgICAgICByZXR1cm4gcmVqZWN0
KGNyZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgIkNvdWxkIG5vdCByZXNvbHZlIHRoZSBtb2R1bGUg
c3BlY2lmaWVyLiJfcykpOwogCiAgICAgYXV0byByZWZlcnJlciA9IHNvdXJjZU9yaWdpbi5zdHJp
bmcoKTsKLSAgICBhdXRvIG1vZHVsZU5hbWUgPSBtb2R1bGVOYW1lVmFsdWUtPnZhbHVlKGV4ZWMp
OworICAgIGF1dG8gbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWVWYWx1ZS0+dmFsdWUoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAg
IGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHJl
amVjdChjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIGF1dG8gZGlyZWN0b3J5TmFtZSA9
IGV4dHJhY3REaXJlY3RvcnlOYW1lKHJlZmVycmVyLmltcGwoKSk7CiAgICAgaWYgKCFkaXJlY3Rv
cnlOYW1lKQotICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsIG1ha2VTdHJp
bmcoIkNvdWxkIG5vdCByZXNvbHZlIHRoZSByZWZlcnJlciBuYW1lICciLCBTdHJpbmcocmVmZXJy
ZXIuaW1wbCgpKSwgIicuIikpKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihn
bG9iYWxPYmplY3QsIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCByZXNvbHZlIHRoZSByZWZlcnJlciBu
YW1lICciLCBTdHJpbmcocmVmZXJyZXIuaW1wbCgpKSwgIicuIikpKTsKIAotICAgIGF1dG8gcmVz
dWx0ID0gSlNDOjppbXBvcnRNb2R1bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVzb2x2ZVBhdGgoZGlyZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKG1vZHVsZU5hbWUp
KSksIHBhcmFtZXRlcnMsIGpzVW5kZWZpbmVkKCkpOworICAgIGF1dG8gcmVzdWx0ID0gSlNDOjpp
bXBvcnRNb2R1bGUoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZXNv
bHZlUGF0aChkaXJlY3RvcnlOYW1lLnZhbHVlKCksIE1vZHVsZU5hbWUobW9kdWxlTmFtZSkpKSwg
cGFyYW1ldGVycywganNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gcmVqZWN0KGNhdGNoU2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUlkZW50aWZpZXIgR2xvYmFsT2JqZWN0Ojpt
b2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVy
cmVyVmFsdWUsIEpTVmFsdWUpCitJZGVudGlmaWVyIEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVy
UmVzb2x2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU01vZHVsZUxvYWRlciosIEpT
VmFsdWUga2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciBrZXkgPSBrZXlWYWx1ZS50b1Byb3BlcnR5S2V5KGV4ZWMpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIga2V5ID0ga2V5VmFsdWUudG9Qcm9wZXJ0eUtleShnbG9iYWxP
YmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAo
a2V5LmlzU3ltYm9sKCkpCkBAIC04NzEsMTkgKzg3MSwxOSBAQCBJZGVudGlmaWVyIEdsb2JhbE9i
amVjdDo6bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
eGVjUwogICAgIGlmIChyZWZlcnJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgYXV0
byBkaXJlY3RvcnlOYW1lID0gY3VycmVudFdvcmtpbmdEaXJlY3RvcnkoKTsKICAgICAgICAgaWYg
KCFkaXJlY3RvcnlOYW1lKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCByZXNvbHZlIHRoZSBjdXJyZW50IHdvcmtp
bmcgZGlyZWN0b3J5LiJfcykpOworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiQ291bGQgbm90IHJlc29sdmUg
dGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIl9zKSk7CiAgICAgICAgICAgICByZXR1cm4g
eyB9OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1lLnZhbHVlKCksIE1vZHVsZU5hbWUoa2V5LmltcGwo
KSkpKTsKICAgICB9CiAKLSAgICBjb25zdCBJZGVudGlmaWVyIHJlZmVycmVyID0gcmVmZXJyZXJW
YWx1ZS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGNvbnN0IElkZW50aWZpZXIgcmVmZXJyZXIg
PSByZWZlcnJlclZhbHVlLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKHJlZmVycmVyLmlzU3ltYm9sKCkp
IHsKICAgICAgICAgYXV0byBkaXJlY3RvcnlOYW1lID0gY3VycmVudFdvcmtpbmdEaXJlY3Rvcnko
KTsKICAgICAgICAgaWYgKCFkaXJlY3RvcnlOYW1lKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCByZXNvbHZlIHRo
ZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiJfcykpOworICAgICAgICAgICAgdGhyb3dFeGNl
cHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiQ291
bGQgbm90IHJlc29sdmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIl9zKSk7CiAgICAg
ICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZXNvbHZlUGF0aChkaXJlY3RvcnlOYW1lLnZhbHVlKCksIE1vZHVs
ZU5hbWUoa2V5LmltcGwoKSkpKTsKQEAgLTg5Miw3ICs4OTIsNyBAQCBJZGVudGlmaWVyIEdsb2Jh
bE9iamVjdDo6bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFeGVjUwogICAgIC8vIElmIHRoZSByZWZlcnJlciBleGlzdHMsIHdlIGFzc3VtZSB0aGF0IHRo
ZSByZWZlcnJlciBpcyB0aGUgY29ycmVjdCBhYnNvbHV0ZSBwYXRoLgogICAgIGF1dG8gZGlyZWN0
b3J5TmFtZSA9IGV4dHJhY3REaXJlY3RvcnlOYW1lKHJlZmVycmVyLmltcGwoKSk7CiAgICAgaWYg
KCFkaXJlY3RvcnlOYW1lKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBj
cmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgcmVmZXJy
ZXIgbmFtZSAnIiwgU3RyaW5nKHJlZmVycmVyLmltcGwoKSksICInLiIpKSk7CisgICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGdsb2JhbE9iamVj
dCwgbWFrZVN0cmluZygiQ291bGQgbm90IHJlc29sdmUgdGhlIHJlZmVycmVyIG5hbWUgJyIsIFN0
cmluZyhyZWZlcnJlci5pbXBsKCkpLCAiJy4iKSkpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVzb2x2ZVBhdGgoZGly
ZWN0b3J5TmFtZS52YWx1ZSgpLCBNb2R1bGVOYW1lKGtleS5pbXBsKCkpKSk7CkBAIC0xMTU4LDI5
ICsxMTU4LDI5IEBAIHN0YXRpYyBib29sIGZldGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5c3RlbShj
b25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3ImIGJ1ZmZlCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2go
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUga2V5LCBKU1ZhbHVlLCBKU1ZhbHVlKQorSlNJbnRlcm5hbFByb21pc2Uq
IEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSwgSlNWYWx1ZSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCog
ZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgZ2xv
YmFsT2JqZWN0KTsKKyAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKICAgICBhdXRvIGNhdGNo
U2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBhdXRvIHJlamVjdCA9IFsmXSAo
SlNWYWx1ZSByZWplY3Rpb25SZWFzb24pIHsKICAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IGRlZmVycmVkLT5yZWplY3QoZXhlYywgcmVq
ZWN0aW9uUmVhc29uKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVqZWN0KGds
b2JhbE9iamVjdCwgcmVqZWN0aW9uUmVhc29uKTsKICAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH07CiAKLSAgICBTdHJpbmcg
bW9kdWxlS2V5ID0ga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOworICAgIFN0cmluZyBtb2R1bGVLZXkg
PSBrZXkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoY2F0Y2hT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiByZWplY3QoY2F0Y2hTY29wZS5leGNl
cHRpb24oKSk7CiAKICAgICAvLyBIZXJlLCBub3cgd2UgY29uc2lkZXIgbW9kdWxlS2V5IGFzIHRo
ZSBmaWxlTmFtZS4KICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwogICAgIGlmICghZmV0Y2hN
b2R1bGVGcm9tTG9jYWxGaWxlU3lzdGVtKG1vZHVsZUtleSwgYnVmZmVyKSkKLSAgICAgICAgcmV0
dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgb3BlbiBm
aWxlICciLCBtb2R1bGVLZXksICInLiIpKSk7CisgICAgICAgIHJldHVybiByZWplY3QoY3JlYXRl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgb3BlbiBmaWxlICciLCBt
b2R1bGVLZXksICInLiIpKSk7CiAKIAogICAgIFVSTCBtb2R1bGVVUkwgPSBVUkwoeyB9LCBtb2R1
bGVLZXkpOwpAQCAtMTE5Miw3ICsxMTkyLDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9i
amVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAg
ICAgICAgICAgIGNhdGNoU2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAg
ICAgICBhdXRvIHNvdXJjZUNvZGUgPSBKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwgV1RGTW92ZShz
b3VyY2UpKTsKICAgICAgICAgICAgIGNhdGNoU2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9u
KCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGRlZmVycmVkLT5yZXNvbHZlKGV4ZWMsIHNv
dXJjZUNvZGUpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVzb2x2ZShn
bG9iYWxPYmplY3QsIHNvdXJjZUNvZGUpOwogICAgICAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQpAQCAtMTIw
MSwxNyArMTIwMSwxNyBAQCBKU0ludGVybmFsUHJvbWlzZSogR2xvYmFsT2JqZWN0Ojptb2R1bGVM
b2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiAgICAgYXV0byBzb3Vy
Y2VDb2RlID0gSlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIGpzY1NvdXJjZShzdHJpbmdGcm9tVVRG
KGJ1ZmZlciksIFNvdXJjZU9yaWdpbiB7IG1vZHVsZUtleSB9LCBXVEZNb3ZlKG1vZHVsZVVSTCks
IFRleHRQb3NpdGlvbigpLCBTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkpOwogICAg
IGNhdGNoU2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgYXV0byByZXN1bHQg
PSBkZWZlcnJlZC0+cmVzb2x2ZShleGVjLCBzb3VyY2VDb2RlKTsKKyAgICBhdXRvIHJlc3VsdCA9
IGRlZmVycmVkLT5yZXNvbHZlKGdsb2JhbE9iamVjdCwgc291cmNlQ29kZSk7CiAgICAgY2F0Y2hT
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTT2JqZWN0
KiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2Fk
ZXIqLCBKU1ZhbHVlIGtleSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKQorSlNPYmplY3QqIEds
b2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNN
b2R1bGVSZWNvcmQqLCBKU1ZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIEpTT2JqZWN0KiBtZXRhUHJvcGVydGllcyA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVj
dHVyZSgpKTsKKyAgICBKU09iamVjdCogbWV0YVByb3BlcnRpZXMgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCh2bSwgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgbWV0YVByb3Bl
cnRpZXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpbGVuYW1l
IiksIGtleSk7CkBAIC0xMjIwLDIwICsxMjIwLDIwIEBAIEpTT2JqZWN0KiBHbG9iYWxPYmplY3Q6
Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiBn
CiAgICAgcmV0dXJuIG1ldGFQcm9wZXJ0aWVzOwogfQogCi1zdGF0aWMgQ1N0cmluZyBjU3RyaW5n
RnJvbVZpZXdXaXRoU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIFN0
cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyYgdmlld1dpdGhTdHJpbmcpCitzdGF0aWMgQ1N0
cmluZyBjU3RyaW5nRnJvbVZpZXdXaXRoU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmdWaWV3V2l0aFVuZGVybHlpbmdTdHJpbmcmIHZp
ZXdXaXRoU3RyaW5nKQogewogICAgIEV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJy
b3I+IGV4cGVjdGVkU3RyaW5nID0gdmlld1dpdGhTdHJpbmcudmlldy50cnlHZXRVdGY4KCk7CiAg
ICAgaWYgKGV4cGVjdGVkU3RyaW5nKQogICAgICAgICByZXR1cm4gZXhwZWN0ZWRTdHJpbmcudmFs
dWUoKTsKICAgICBzd2l0Y2ggKGV4cGVjdGVkU3RyaW5nLmVycm9yKCkpIHsKICAgICBjYXNlIFVU
RjhDb252ZXJzaW9uRXJyb3I6Ok91dE9mTWVtb3J5OgotICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVVRGOENvbnZlcnNpb25F
cnJvcjo6SWxsZWdhbFNvdXJjZToKLSAgICAgICAgc2NvcGUudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlRXJyb3IoZXhlYywgIklsbGVnYWwgc291cmNlIGVuY291bnRlcmVkIGR1cmluZyBVVEY4
IGNvbnZlcnNpb24iKSk7CisgICAgICAgIHNjb3BlLnRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiSWxsZWdhbCBzb3VyY2UgZW5jb3VudGVyZWQg
ZHVyaW5nIFVURjggY29udmVyc2lvbiIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVVEY4
Q29udmVyc2lvbkVycm9yOjpTb3VyY2VFeGhhdXN0ZWQ6Ci0gICAgICAgIHNjb3BlLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJTb3VyY2UgZXhoYXVzdGVkIGR1cmluZyBV
VEY4IGNvbnZlcnNpb24iKSk7CisgICAgICAgIHNjb3BlLnRocm93RXhjZXB0aW9uKGdsb2JhbE9i
amVjdCwgY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiU291cmNlIGV4aGF1c3RlZCBkdXJpbmcg
VVRGOCBjb252ZXJzaW9uIikpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTI0MSwyNyArMTI0MSwyNyBAQCBz
dGF0aWMgQ1N0cmluZyBjU3RyaW5nRnJvbVZpZXdXaXRoU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
VGhyb3dTY29wZSYgc2NvcGUsIFN0cgogICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRklMRSogb3V0KQorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIHByaW50SW50ZXJuYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEZJTEUqIG91dCkKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoYXN5bmNUZXN0RXhwZWN0
ZWRQYXNzZXMpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwot
ICAgICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSAmJiBXVEY6OmVxdWFsKGFzU3RyaW5nKHZhbHVl
KS0+dmFsdWUoZXhlYykuaW1wbCgpLCAiVGVzdDI2MjpBc3luY1Rlc3RDb21wbGV0ZSIpKSB7Cisg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgICAgICBp
ZiAodmFsdWUuaXNTdHJpbmcoKSAmJiBXVEY6OmVxdWFsKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUo
Z2xvYmFsT2JqZWN0KS5pbXBsKCksICJUZXN0MjYyOkFzeW5jVGVzdENvbXBsZXRlIikpIHsKICAg
ICAgICAgICAgIGFzeW5jVGVzdFBhc3NlcysrOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAg
ICAgICAgIGlmIChpKQogICAgICAgICAgICAgaWYgKEVPRiA9PSBmcHV0YygnICcsIG91dCkpCiAg
ICAgICAgICAgICAgICAgZ290byBmYWlsOwogCi0gICAgICAgIGF1dG8gdmlld1dpdGhTdHJpbmcg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b1N0cmluZyhleGVjKS0+dmlld1dpdGhVbmRl
cmx5aW5nU3RyaW5nKGV4ZWMpOworICAgICAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudChpKS50b1N0cmluZyhnbG9iYWxPYmplY3QpLT52aWV3V2l0
aFVuZGVybHlpbmdTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgIGF1dG8gc3RyaW5nID0gY1N0
cmluZ0Zyb21WaWV3V2l0aFN0cmluZyhleGVjLCBzY29wZSwgdmlld1dpdGhTdHJpbmcpOworICAg
ICAgICBhdXRvIHN0cmluZyA9IGNTdHJpbmdGcm9tVmlld1dpdGhTdHJpbmcoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgdmlld1dpdGhTdHJpbmcpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKGZwcmludGYob3V0LCAiJXMiLCBz
dHJpbmcuZGF0YSgpKSA8IDApCiAgICAgICAgICAgICBnb3RvIGZhaWw7CkBAIC0xMjczLDE2ICsx
MjczLDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcmludEludGVybmFsKEV4ZWNTdGF0ZSog
ZXhlYywgRklMRSogb3V0KQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0ZE91
dChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBwcmludElu
dGVybmFsKGNhbGxGcmFtZSwgc3Rkb3V0KTsgfQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblByaW50U3RkRXJyKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpIHsgcmV0dXJuIHByaW50SW50ZXJuYWwoY2FsbEZyYW1lLCBzdGRlcnIpOyB9CitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnRTdGRPdXQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIHByaW50SW50ZXJu
YWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHN0ZG91dCk7IH0KK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25QcmludFN0ZEVycihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gcHJpbnRJbnRlcm5hbChnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgc3RkZXJyKTsgfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRGVidWcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHZpZXdXaXRoU3Ry
aW5nID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b1N0cmluZyhjYWxsRnJhbWUpLT52aWV3V2l0
aFVuZGVybHlpbmdTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b1N0cmluZyhnbG9iYWxPYmplY3QpLT52aWV3V2l0aFVu
ZGVybHlpbmdTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHN0cmluZyA9IGNTdHJpbmdGcm9tVmll
d1dpdGhTdHJpbmcoY2FsbEZyYW1lLCBzY29wZSwgdmlld1dpdGhTdHJpbmcpOworICAgIGF1dG8g
c3RyaW5nID0gY1N0cmluZ0Zyb21WaWV3V2l0aFN0cmluZyhnbG9iYWxPYmplY3QsIHNjb3BlLCB2
aWV3V2l0aFN0cmluZyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIHN0cmluZy5kYXRhKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMzEzLDcg
KzEzMTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2xlZXBTZWNv
bmRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
ID49IDEpIHsKLSAgICAgICAgU2Vjb25kcyBzZWNvbmRzID0gU2Vjb25kcyhjYWxsRnJhbWUtPmFy
Z3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpOworICAgICAgICBTZWNvbmRzIHNlY29uZHMg
PSBTZWNvbmRzKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgICAgICBzbGVlcChzZWNvbmRzKTsKICAgICB9CkBAIC0xNDY1LDE4ICsxNDY1LDE4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFN0cmluZyBm
aWxlTmFtZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsK
KyAgICBTdHJpbmcgZmlsZU5hbWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZldGNoU2NyaXB0
RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHNjb3BlLCBjcmVhdGVFcnJv
cihjYWxsRnJhbWUsICJDb3VsZCBub3Qgb3BlbiBmaWxlLiJfcykpKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVFcnJvcihnbG9iYWxPYmplY3QsICJDb3VsZCBub3Qgb3BlbiBmaWxlLiJfcykpKTsKIAogICAg
IEdsb2JhbE9iamVjdCogcmVhbG0gPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGpzTnVsbCgpKSwgVmVjdG9yPFN0cmluZz4oKSk7CiAK
LSAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkocmVhbG0tPmdsb2JhbEV4
ZWMoKSwgMCk7CisgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KHJlYWxt
LCAwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7
ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgocmVhbG0tPmdsb2JhbEV4ZWMo
KSwgaSAtIDEsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBhcnJh
eS0+cHV0RGlyZWN0SW5kZXgocmVhbG0sIGkgLSAxLCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgfQogICAgIHJlYWxtLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJhcmd1bWVudHMiKSwgYXJyYXkpOwpAQCAtMTQ4NCwxMSArMTQ4NCwxMSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZQogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXhjZXB0aW9u
OwogICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAgc3RvcFdhdGNoLnN0YXJ0KCk7Ci0gICAg
ZXZhbHVhdGUocmVhbG0tPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgU291cmNlT3Jp
Z2luIHsgYWJzb2x1dGVQYXRoKGZpbGVOYW1lKSB9LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXhj
ZXB0aW9uKTsKKyAgICBldmFsdWF0ZShyZWFsbSwganNjU291cmNlKHNjcmlwdCwgU291cmNlT3Jp
Z2luIHsgYWJzb2x1dGVQYXRoKGZpbGVOYW1lKSB9LCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXhj
ZXB0aW9uKTsKICAgICBzdG9wV2F0Y2guc3RvcCgpOwogCiAgICAgaWYgKGV4Y2VwdGlvbikgewot
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihyZWFsbS0+Z2xvYmFsRXhlYygpLCBzY29wZSwgZXhjZXB0
aW9uKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24ocmVhbG0sIHNjb3BlLCBleGNlcHRpb24pOwog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAg
ICAKQEAgLTE1MDAsMjQgKzE1MDAsMjQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblJ1blN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWwKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgU3RyaW5nIHNvdXJjZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgc291cmNlID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgR2xvYmFsT2JqZWN0KiBy
ZWFsbSA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5nPigpKTsKIAotICAgIEpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShyZWFsbS0+Z2xvYmFsRXhlYygpLCAwKTsKKyAgICBK
U0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkocmVhbG0sIDApOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChyZWFsbS0+Z2xvYmFsRXhlYygpLCBpIC0gMSwgY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChyZWFsbSwgaSAtIDEsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAg
ICAgcmVhbG0tPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFyZ3Vt
ZW50cyIpLCBhcnJheSk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4Y2VwdGlvbjsKLSAg
ICBldmFsdWF0ZShyZWFsbS0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc291cmNlLCBjYWxsRnJh
bWUtPmNhbGxlclNvdXJjZU9yaWdpbigpKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOworICAgIGV2
YWx1YXRlKHJlYWxtLCBqc2NTb3VyY2Uoc291cmNlLCBjYWxsRnJhbWUtPmNhbGxlclNvdXJjZU9y
aWdpbigpKSwgSlNWYWx1ZSgpLCBleGNlcHRpb24pOwogCiAgICAgaWYgKGV4Y2VwdGlvbikgewot
ICAgICAgICBzY29wZS50aHJvd0V4Y2VwdGlvbihyZWFsbS0+Z2xvYmFsRXhlYygpLCBleGNlcHRp
b24pOworICAgICAgICBzY29wZS50aHJvd0V4Y2VwdGlvbihyZWFsbSwgZXhjZXB0aW9uKTsKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAg
CkBAIC0xNTI5LDE2ICsxNTI5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Mb2FkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtCiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIFN0cmluZyBmaWxlTmFtZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgZmlsZU5hbWUgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNj
cmlwdDsKICAgICBpZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwg
c2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihj
YWxsRnJhbWUsIHNjb3BlLCBjcmVhdGVFcnJvcihjYWxsRnJhbWUsICJDb3VsZCBub3Qgb3BlbiBm
aWxlLiJfcykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsICJDb3VsZCBu
b3Qgb3BlbiBmaWxlLiJfcykpKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlv
bkV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBTb3VyY2VPcmlnaW4geyBhYnNvbHV0ZVBh
dGgoZmlsZU5hbWUpIH0sIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9u
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdCwganNjU291cmNl
KHNjcmlwdCwgU291cmNlT3JpZ2luIHsgYWJzb2x1dGVQYXRoKGZpbGVOYW1lKSB9LCBmaWxlTmFt
ZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25F
eGNlcHRpb24pCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIGV2YWx1
YXRpb25FeGNlcHRpb24pOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNj
b3BlLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKQEAgLTE1NDcsMTMgKzE1NDcsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkxvYWRTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2EKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgU3RyaW5nIHNvdXJjZUNvZGUgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgU3RyaW5nIHNvdXJj
ZUNvZGUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAg
ICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25FeGNlcHRpb247Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNv
dXJjZUNvZGUsIGNhbGxGcmFtZS0+Y2FsbGVyU291cmNlT3JpZ2luKCkpLCBKU1ZhbHVlKCksIGV2
YWx1YXRpb25FeGNlcHRpb24pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoZ2xvYmFs
T2JqZWN0LCBqc2NTb3VyY2Uoc291cmNlQ29kZSwgY2FsbEZyYW1lLT5jYWxsZXJTb3VyY2VPcmln
aW4oKSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1YXRp
b25FeGNlcHRpb24pCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIGV2
YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKQEAgLTE1NjIsMjEgKzE1NjIsMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblJlYWRGaWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGwKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgU3RyaW5nIGZpbGVOYW1lID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhjYWxsRnJhbWUpOworICAgIFN0cmluZyBmaWxl
TmFtZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IGJvb2wgaXNCaW5hcnkgPSBmYWxzZTsKICAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPiAxKSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKS50
b1dURlN0cmluZyhjYWxsRnJhbWUpOworICAgICAgICBTdHJpbmcgdHlwZSA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmICh0eXBlICE9
ICJiaW5hcnkiKQotICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIHNj
b3BlLCAiRXhwZWN0ZWQgJ2JpbmFyeScgYXMgc2Vjb25kIGFyZ3VtZW50LiIpOworICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRXhwZWN0ZWQgJ2Jp
bmFyeScgYXMgc2Vjb25kIGFyZ3VtZW50LiIpOwogICAgICAgICBpc0JpbmFyeSA9IHRydWU7CiAg
ICAgfQogCiAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGNvbnRlbnQgPSBmaWxsQnVmZmVyV2l0aENv
bnRlbnRzT2ZGaWxlKGZpbGVOYW1lKTsKICAgICBpZiAoIWNvbnRlbnQpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIik7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkNvdWxk
IG5vdCBvcGVuIGZpbGUuIik7CiAKICAgICBpZiAoIWlzQmluYXJ5KQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZh
bGxiYWNrKGNvbnRlbnQtPmRhdGEoKSwgY29udGVudC0+bGVuZ3RoKCkpKSk7CkBAIC0xNTkzLDIx
ICsxNTkzLDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGVja1N5
bnRheChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIFN0cmluZyBmaWxlTmFtZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9XVEZTdHJp
bmcoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgZmlsZU5hbWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBp
ZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHNj
b3BlLCBjcmVhdGVFcnJvcihjYWxsRnJhbWUsICJDb3VsZCBub3Qgb3BlbiBmaWxlLiJfcykpKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsICJDb3VsZCBub3Qgb3BlbiBmaWxl
LiJfcykpKTsKIAogICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAgc3RvcFdhdGNoLnN0YXJ0
KCk7CiAKICAgICBKU1ZhbHVlIHN5bnRheEV4Y2VwdGlvbjsKLSAgICBib29sIHZhbGlkU3ludGF4
ID0gY2hlY2tTeW50YXgoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3Jp
cHQsIFNvdXJjZU9yaWdpbiB7IGFic29sdXRlUGF0aChmaWxlTmFtZSkgfSwgZmlsZU5hbWUpLCAm
c3ludGF4RXhjZXB0aW9uKTsKKyAgICBib29sIHZhbGlkU3ludGF4ID0gY2hlY2tTeW50YXgoZ2xv
YmFsT2JqZWN0LCBqc2NTb3VyY2Uoc2NyaXB0LCBTb3VyY2VPcmlnaW4geyBhYnNvbHV0ZVBhdGgo
ZmlsZU5hbWUpIH0sIGZpbGVOYW1lKSwgJnN5bnRheEV4Y2VwdGlvbik7CiAgICAgc3RvcFdhdGNo
LnN0b3AoKTsKIAogICAgIGlmICghdmFsaWRTeW50YXgpCi0gICAgICAgIHRocm93RXhjZXB0aW9u
KGNhbGxGcmFtZSwgc2NvcGUsIHN5bnRheEV4Y2VwdGlvbik7CisgICAgICAgIHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIHN5bnRheEV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihzdG9wV2F0Y2guZ2V0RWxhcHNlZE1TKCkpKTsKIH0KIApA
QCAtMTYxNSw3ICsxNjE1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkNoZWNrU3ludGF4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgZmxh
ZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkp
LnRvTnVtYmVyKGNhbGxGcmFtZSkpOworICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9OdW1iZXIoZ2xv
YmFsT2JqZWN0KSk7CiAgICAgICAgIGlmICgoZmxhZyA+PSAxKSAmJiAoZmxhZyA8PSAzMikpCiAg
ICAgICAgICAgICBTYW1wbGluZ0ZsYWdzOjpzZXRGbGFnKGZsYWcpOwogICAgIH0KQEAgLTE2MjUs
NyArMTYyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1w
bGluZ0ZsYWdzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgZmxhZyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVt
YmVyKGNhbGxGcmFtZSkpOworICAgICAgICB1bnNpZ25lZCBmbGFnID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9OdW1iZXIoZ2xvYmFsT2Jq
ZWN0KSk7CiAgICAgICAgIGlmICgoZmxhZyA+PSAxKSAmJiAoZmxhZyA8PSAzMikpCiAgICAgICAg
ICAgICBTYW1wbGluZ0ZsYWdzOjpjbGVhckZsYWcoZmxhZyk7CiAgICAgfQpAQCAtMTY0Myw3ICsx
NjQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFJhbmRvbVNl
ZWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgdW5zaWduZWQgc2VlZCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9VSW50MzIoY2FsbEZy
YW1lKTsKKyAgICB1bnNpZ25lZCBzZWVkID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b1VJbnQz
MihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGdsb2JhbE9iamVjdC0+d2Vha1JhbmRvbSgpLnNldFNlZWQoc2VlZCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTE2ODUsMTQg
KzE2ODUsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByZWNpc2VU
aW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKikKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk5ldmVySW5saW5l
RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25OZXZlcklubGluZUZ1bmN0aW9uKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoc2V0TmV2ZXJJbmxpbmUoY2FsbEZyYW1lKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShzZXROZXZlcklubGluZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9ERkcoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Ob0RGRyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldE5ldmVyT3B0
aW1pemUoY2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXROZXZlck9w
dGltaXplKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Ob0ZUTChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQpAQCAtMTcwNSwxOSArMTcwNSwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uTm9GVEwoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZQog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Ob09TUkV4aXRGdXp6aW5nKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTm9PU1JFeGl0RnV6emluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldENh
bm5vdFVzZU9TUkV4aXRGdXp6aW5nKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc2V0Q2Fubm90VXNlT1NSRXhpdEZ1enppbmcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk9wdGltaXplTmV4
dEludm9jYXRpb24oSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25PcHRpbWl6ZU5leHRJbnZvY2F0aW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3B0aW1pemVOZXh0SW52b2NhdGlvbihjYWxsRnJhbWUp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9wdGltaXplTmV4dEludm9jYXRpb24oZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbk51bWJlck9mREZHQ29tcGlsZXMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25OdW1iZXJP
ZkRGR0NvbXBpbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyT2ZERkdDb21waWxl
cyhjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlck9mREZHQ29t
cGlsZXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkNhbGxlcklzT01HQ29tcGlsZWQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xNzMxLDcgKzE3MzEsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2FsbGVySXNPTUdDb21waWxlZChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIENhbGxlckZ1bmN0b3Igd2FzbVRvSlNGcmFtZTsK
ICAgICBTdGFja1Zpc2l0b3I6OnZpc2l0KGNhbGxGcmFtZSwgJnZtLCB3YXNtVG9KU0ZyYW1lKTsK
ICAgICBpZiAoIXdhc21Ub0pTRnJhbWUuY2FsbGVyRnJhbWUoKS0+aXNBbnlXYXNtQ2FsbGVlKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgImNhbGxlciBp
cyBub3QgYSB3YXNtLT5qcyBpbXBvcnQgZnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiY2FsbGVyIGlzIG5vdCBhIHdhc20tPmpzIGlt
cG9ydCBmdW5jdGlvbiIpOwogCiAgICAgLy8gV2UgaGF2ZSBhIHdyYXBwZXIgZnJhbWUgdGhhdCB3
ZSBnZW5lcmF0ZSBmb3IgaW1wb3J0cy4gSWYgd2UgZXZlciBjYW4gZGlyZWN0IGNhbGwgZnJvbSB3
YXNtIHdlIHdvdWxkIG5lZWQgdG8gY2hhbmdlIHRoaXMuCiAgICAgQVNTRVJUKCF3YXNtVG9KU0Zy
YW1lLmNhbGxlckZyYW1lKCktPmNhbGxlZSgpLmlzV2FzbSgpKTsKQEAgLTE4NjgsMTkgKzE4Njgs
MTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckV2YWxTY3Jp
cHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
U3RyaW5nIHNvdXJjZUNvZGUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGNh
bGxGcmFtZSk7CisgICAgU3RyaW5nIHNvdXJjZUNvZGUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgCiAgICAgR2xvYmFsT2JqZWN0KiByZWFsbSA9IGpz
RHluYW1pY0Nhc3Q8R2xvYmFsT2JqZWN0Kj4odm0sCi0gICAgICAgIGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkuZ2V0KGNhbGxGcmFtZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImdsb2JhbCIp
KSk7CisgICAgICAgIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkuZ2V0KGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImdsb2JhbCIpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKCFyZWFsbSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHNjb3BlLCBj
cmVhdGVFcnJvcihjYWxsRnJhbWUsICJFeHBlY3RlZCBnbG9iYWwgdG8gcG9pbnQgdG8gYSBnbG9i
YWwgb2JqZWN0Il9zKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgIkV4
cGVjdGVkIGdsb2JhbCB0byBwb2ludCB0byBhIGdsb2JhbCBvYmplY3QiX3MpKSk7CiAgICAgCiAg
ICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gZXZhbHVhdGUocmVhbG0tPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNvdXJjZUNv
ZGUsIGNhbGxGcmFtZS0+Y2FsbGVyU291cmNlT3JpZ2luKCkpLCBKU1ZhbHVlKCksIGV2YWx1YXRp
b25FeGNlcHRpb24pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUocmVhbG0sIGpzY1Nv
dXJjZShzb3VyY2VDb2RlLCBjYWxsRnJhbWUtPmNhbGxlclNvdXJjZU9yaWdpbigpKSwgSlNWYWx1
ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikK
LSAgICAgICAgdGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBzY29wZSwgZXZhbHVhdGlvbkV4Y2Vw
dGlvbik7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGV2YWx1
YXRpb25FeGNlcHRpb24pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0K
IApAQCAtMTg4OSw3ICsxODg5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkRvbGxhckFnZW50U3RhcnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgU3RyaW5nIHNvdXJjZUNvZGUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApLnRvV1RGU3RyaW5nKGNhbGxGcmFtZSkuaXNvbGF0ZWRDb3B5KCk7CisgICAgU3RyaW5nIHNv
dXJjZUNvZGUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVj
dCkuaXNvbGF0ZWRDb3B5KCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgCiAgICAgTG9jayBkaWRTdGFydExvY2s7CkBAIC0xOTEzLDEwICsx
OTEzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2Vu
dFN0YXJ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplCiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25FeGNlcHRp
b247CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNvdXJjZUNvZGUsIFNvdXJjZU9yaWdpbigid29ya2VyIl9zKSksIEpTVmFsdWUoKSwgZXZh
bHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWx1YXRl
KGdsb2JhbE9iamVjdCwganNjU291cmNlKHNvdXJjZUNvZGUsIFNvdXJjZU9yaWdpbigid29ya2Vy
Il9zKSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
Y2hlY2tFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdCwg
dHJ1ZSwgZXZhbHVhdGlvbkV4Y2VwdGlvbiwgcmVzdWx0LCBjb21tYW5kTGluZSwgc3VjY2Vzcyk7
CisgICAgICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdHJ1ZSwg
ZXZhbHVhdGlvbkV4Y2VwdGlvbiwgcmVzdWx0LCBjb21tYW5kTGluZSwgc3VjY2Vzcyk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgICAgICAgICAgICAgIGV4
aXQoMSk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xOTQwLDcgKzE5NDAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRSZWNlaXZlQnJvYWRjYXN0
KEpTR2xvYmFsT2JqZWN0KgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIGNhbGxiYWNrLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlOjpOb25lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIGNyZWF0ZUVycm9yKGNhbGxGcmFtZSwg
IkV4cGVjdGVkIGNhbGxiYWNrIl9zKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGdsb2JhbE9i
amVjdCwgIkV4cGVjdGVkIGNhbGxiYWNrIl9zKSkpOwogICAgIAogICAgIFJlZlB0cjxNZXNzYWdl
PiBtZXNzYWdlOwogICAgIHsKQEAgLTE5NTYsOCArMTk1Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Eb2xsYXJBZ2VudFJlY2VpdmVCcm9hZGNhc3QoSlNHbG9iYWxP
YmplY3QqCiAgICAgYXJncy5hcHBlbmQoanNCdWZmZXIpOwogICAgIGFyZ3MuYXBwZW5kKGpzTnVt
YmVyKG1lc3NhZ2UtPmluZGV4KCkpKTsKICAgICBpZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVyZmxv
d2VkKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlF
cnJvcihjYWxsRnJhbWUsIHNjb3BlKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUoY2FsbChjYWxsRnJhbWUsIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGpzTnVsbCgpLCBhcmdzKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKSk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoY2FsbChnbG9iYWxPYmplY3QsIGNhbGxi
YWNrLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzTnVsbCgpLCBhcmdzKSkpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRSZXBvcnQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xOTY1LDcgKzE5
NjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRS
ZXBvcnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBTdHJpbmcgcmVwb3J0ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhjYWxs
RnJhbWUpOworICAgIFN0cmluZyByZXBvcnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgCiAgICAgV29ya2Vyczo6c2luZ2xldG9uKCkucmVwb3J0KHJl
cG9ydCk7CkBAIC0xOTc5LDcgKzE5NzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRG9sbGFyQWdlbnRTbGVlcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA+PSAxKSB7Ci0gICAgICAgIFNlY29uZHMgc2Vjb25kcyA9IFNl
Y29uZHM6OmZyb21NaWxsaXNlY29uZHMoY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihj
YWxsRnJhbWUpKTsKKyAgICAgICAgU2Vjb25kcyBzZWNvbmRzID0gU2Vjb25kczo6ZnJvbU1pbGxp
c2Vjb25kcyhjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICAgICAgc2xlZXAoc2Vjb25kcyk7CiAgICAgfQpAQCAtMTk5Myw5ICsxOTkzLDkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRvbGxhckFnZW50QnJvYWRjYXN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWwKIAogICAgIEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5h
bWljQ2FzdDxKU0FycmF5QnVmZmVyKj4odm0sIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAg
IGlmICghanNCdWZmZXIgfHwgIWpzQnVmZmVyLT5pc1NoYXJlZCgpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIGNyZWF0ZUVy
cm9yKGNhbGxGcmFtZSwgIkV4cGVjdGVkIFNoYXJlZEFycmF5QnVmZmVyIl9zKSkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIGNyZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgIkV4cGVjdGVkIFNoYXJlZEFycmF5QnVmZmVy
Il9zKSkpOwogICAgIAotICAgIGludDMyX3QgaW5kZXggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEp
LnRvSW50MzIoY2FsbEZyYW1lKTsKKyAgICBpbnQzMl90IGluZGV4ID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgxKS50b0ludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgCiAgICAgV29ya2Vyczo6c2luZ2xldG9uKCku
YnJvYWRjYXN0KApAQCAtMjA1OSw3ICsyMDU5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkZsYXNoSGVhcEFjY2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMK
ICAgICAKICAgICBkb3VibGUgc2xlZXBUaW1lTXMgPSAwOwogICAgIGlmIChjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA+PSAxKSB7Ci0gICAgICAgIHNsZWVwVGltZU1zID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKS50b051bWJlcihjYWxsRnJhbWUpOworICAgICAgICBzbGVlcFRpbWVNcyA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCkBAIC0y
MTA0LDEwICsyMTA0LDEwIEBAIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZnVuZGFt
ZW50YWw8VmFsdWVUeXBlPjo6dmFsdWU+Ojp0eXBlIGFkZE9wdGlvbihWCiAgICAgb3B0aW9uc09i
amVjdC0+cHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBKU1ZhbHVlKHZhbHVlKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0NPcHRpb25zKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpTQ09wdGlvbnMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgSlNPYmplY3QqIG9wdGlvbnNPYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChjYWxsRnJh
bWUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zT2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
Z2xvYmFsT2JqZWN0KTsKICNkZWZpbmUgUkVBRF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0
VmFsdWVfLCBhdmFpbGFiaWxpdHlfLCBkZXNjcmlwdGlvbl8pIFwKICAgICBhZGRPcHRpb24odm0s
IG9wdGlvbnNPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICNuYW1lXyksIE9wdGlv
bnM6Om5hbWVfKCkpOwogICAgIEZPUl9FQUNIX0pTQ19PUFRJT04oUkVBRF9PUFRJT04pCkBAIC0y
MTMzLDExICsyMTMzLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25U
cmFuc2ZlckFycmF5QnVmZmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihjYWxsRnJhbWUsIHNjb3BlLCBjcmVhdGVFcnJvcihjYWxsRnJhbWUsICJOb3QgZW5vdWdo
IGFyZ3VtZW50cyJfcykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsICJO
b3QgZW5vdWdoIGFyZ3VtZW50cyJfcykpKTsKICAgICAKICAgICBKU0FycmF5QnVmZmVyKiBidWZm
ZXIgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPih2bSwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSk7CiAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlRXJyb3IoY2FsbEZyYW1lLCAi
RXhwZWN0ZWQgYW4gYXJyYXkgYnVmZmVyIl9zKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGds
b2JhbE9iamVjdCwgIkV4cGVjdGVkIGFuIGFycmF5IGJ1ZmZlciJfcykpKTsKICAgICAKICAgICBB
cnJheUJ1ZmZlckNvbnRlbnRzIGR1bW15Q29udGVudHM7CiAgICAgYnVmZmVyLT5pbXBsKCktPnRy
YW5zZmVyVG8odm0sIGR1bW15Q29udGVudHMpOwpAQCAtMjI1NSwxOSArMjI1NSwxOSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tNb2R1bGVTeW50YXgoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iagogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBTdHJpbmcgc291
cmNlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhjYWxsRnJhbWUpOworICAg
IFN0cmluZyBzb3VyY2UgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGdsb2Jh
bE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAgIHN0b3BXYXRjaC5zdGFydCgpOwog
CiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7Ci0gICAgYm9vbCB2YWxpZFN5bnRheCA9IGNoZWNrTW9k
dWxlU3ludGF4KGNhbGxGcmFtZSwganNjU291cmNlKHNvdXJjZSwgeyB9LCBVUkwoKSwgVGV4dFBv
c2l0aW9uKCksIFNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKSwgZXJyb3IpOworICAg
IGJvb2wgdmFsaWRTeW50YXggPSBjaGVja01vZHVsZVN5bnRheChnbG9iYWxPYmplY3QsIGpzY1Nv
dXJjZShzb3VyY2UsIHsgfSwgVVJMKCksIFRleHRQb3NpdGlvbigpLCBTb3VyY2VQcm92aWRlclNv
dXJjZVR5cGU6Ok1vZHVsZSksIGVycm9yKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBzdG9wV2F0Y2guc3RvcCgpOwogCiAgICAgaWYgKCF2
YWxpZFN5bnRheCkKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBzY29wZSwganNO
b250cml2aWFsU3RyaW5nKHZtLCB0b1N0cmluZygiU3ludGF4RXJyb3I6ICIsIGVycm9yLm1lc3Nh
Z2UoKSwgIjoiLCBlcnJvci5saW5lKCkpKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgdG9TdHJpbmcoIlN5bnRheEVy
cm9yOiAiLCBlcnJvci5tZXNzYWdlKCksICI6IiwgZXJyb3IubGluZSgpKSkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RvcFdhdGNoLmdldEVsYXBzZWRNUygpKSk7CiB9
CiAKQEAgLTIyODAsNyArMjI4MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25QbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlcihKU0dsb2JhbE9iCiAjZW5kaWYK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbmVyYXRlSGVhcFNu
YXBzaG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBz
aG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAg
LTIyOTAsNyArMjI5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25H
ZW5lcmF0ZUhlYXBTbmFwc2hvdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgc25hcHNob3RC
dWlsZGVyLmJ1aWxkU25hcHNob3QoKTsKIAogICAgIFN0cmluZyBqc29uU3RyaW5nID0gc25hcHNo
b3RCdWlsZGVyLmpzb24oKTsKLSAgICBFbmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjpl
bmNvZGUoSlNPTlBhcnNlKGNhbGxGcmFtZSwganNvblN0cmluZykpOworICAgIEVuY29kZWRKU1Zh
bHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFyc2UoZ2xvYmFsT2JqZWN0LCBqc29u
U3RyaW5nKSk7CiAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTIzMzksMTYgKzIzMzksMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblN0YXJ0U2FtcGxpbmdQcm9maWxlcihKU0dsb2JhbE9iamVjdCog
Z2xvYmEKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNr
VHJhY2VzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNhbXBsaW5nUHJvZmlsZXJT
dGFja1RyYWNlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIXZtLnNhbXBsaW5nUHJvZmlsZXIoKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHNj
b3BlLCBjcmVhdGVFcnJvcihjYWxsRnJhbWUsICJTYW1wbGluZyBwcm9maWxlciB3YXMgbmV2ZXIg
c3RhcnRlZCJfcykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsICJTYW1w
bGluZyBwcm9maWxlciB3YXMgbmV2ZXIgc3RhcnRlZCJfcykpKTsKIAogICAgIFN0cmluZyBqc29u
U3RyaW5nID0gdm0uc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNPTigpOwotICAg
IEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFyc2UoY2FsbEZy
YW1lLCBqc29uU3RyaW5nKSk7CisgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6
ZW5jb2RlKEpTT05QYXJzZShnbG9iYWxPYmplY3QsIGpzb25TdHJpbmcpKTsKICAgICBzY29wZS5y
ZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjM2
Niw3ICsyMzY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFzeW5j
VGVzdFN0YXJ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKIAogICAgIEpTVmFsdWUgbnVt
YmVyT2ZBc3luY1Bhc3NlcyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFudW1i
ZXJPZkFzeW5jUGFzc2VzLmlzVUludDMyKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSwgIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgdWludDMy
Il9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
RXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgYSB1aW50MzIiX3MpOwogCiAgICAgYXN5bmNU
ZXN0RXhwZWN0ZWRQYXNzZXMgKz0gbnVtYmVyT2ZBc3luY1Bhc3Nlcy5hc1VJbnQzMigpOwogICAg
IHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKQEAgLTIzODYsNyArMjM4Niw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uV2ViQXNzZW1ibHlNZW1vcnlN
b2RlKEpTR2xvYmFsT2JqZWN0CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIAogICAgIGlmICghV2FzbTo6aXNTdXBwb3J0ZWQoKSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIldlYkFzc2VtYmx5TWVtb3J5TW9k
ZSBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIHVzZVdlYkFzc2VtYmx5IG9wdGlvbiBpcyBz
ZXQiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiV2ViQXNzZW1ibHlNZW1vcnlNb2RlIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUg
dXNlV2ViQXNzZW1ibHkgb3B0aW9uIGlzIHNldCJfcyk7CiAKICAgICBpZiAoSlNPYmplY3QqIG9i
amVjdCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuZ2V0T2JqZWN0KCkpIHsKICAgICAgICAgaWYg
KGF1dG8qIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZtLCBv
YmplY3QpKQpAQCAtMjM5NSw3ICsyMzk1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25XZWJBc3NlbWJseU1lbW9yeU1vZGUoSlNHbG9iYWxPYmplY3QKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIG1ha2VTdHJpbmco
aW5zdGFuY2UtPm1lbW9yeU1vZGUoKSkpKTsKICAgICB9CiAKLSAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiV2ViQXNzZW1ibHlNZW1vcnlNb2RlIGV4cGVjdHMg
ZWl0aGVyIGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9yIFdlYkFzc2VtYmx5Lkluc3RhbmNlIl9zKTsK
KyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNz
ZW1ibHlNZW1vcnlNb2RlIGV4cGVjdHMgZWl0aGVyIGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9yIFdl
YkFzc2VtYmx5Lkluc3RhbmNlIl9zKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKQEAgLTI0MDcsNyArMjQwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25TZXRVbmhhbmRsZWRSZWplY3Rpb25DYWxsYmFjayhKU0dsb2JhbE9iamVjCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKCFvYmplY3QgfHwg
IW9iamVjdC0+aXNGdW5jdGlvbih2bSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKIAogICAgIGdsb2JhbE9iamVjdC0+c2V0VW5oYW5kbGVkUmVqZWN0
aW9uQ2FsbGJhY2sodm0sIG9iamVjdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTI1MTYsNyArMjUxNiw3IEBAIHN0YXRpYyB2b2lkIGR1bXBFeGNlcHRp
b24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZXhjZXB0aW9uKQogICAgICAg
ICB9IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAotICAgIGF1dG8gZXhjZXB0aW9uU3RyaW5nID0g
ZXhjZXB0aW9uLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKKyAgICBh
dXRvIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvbi50b1dURlN0cmluZyhnbG9iYWxPYmplY3Qp
OwogICAgIEV4cGVjdGVkPENTdHJpbmcsIFVURjhDb252ZXJzaW9uRXJyb3I+IGV4cGVjdGVkQ1N0
cmluZyA9IGV4Y2VwdGlvblN0cmluZy50cnlHZXRVdGY4KCk7CiAgICAgaWYgKGV4cGVjdGVkQ1N0
cmluZykKICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBleHBlY3RlZENTdHJpbmcu
dmFsdWUoKS5kYXRhKCkpOwpAQCAtMjUzMiwyNSArMjUzMiwyNSBAQCBzdGF0aWMgdm9pZCBkdW1w
RXhjZXB0aW9uKEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbikK
ICAgICBJZGVudGlmaWVyIHN0YWNrSUQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3Rh
Y2siKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKIAotICAgIEpTVmFsdWUgbmFtZVZhbHVlID0g
ZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmFtZUlEKTsKKyAgICBK
U1ZhbHVlIG5hbWVWYWx1ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFsT2JqZWN0LCBuYW1lSUQpOwog
ICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgZmlsZU5hbWVWYWx1ZSA9IGV4Y2Vw
dGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZpbGVOYW1lSUQpOworICAgIEpT
VmFsdWUgZmlsZU5hbWVWYWx1ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFsT2JqZWN0LCBmaWxlTmFt
ZUlEKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIGxpbmVOdW1iZXJWYWx1
ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxpbmVOdW1iZXJJ
RCk7CisgICAgSlNWYWx1ZSBsaW5lTnVtYmVyVmFsdWUgPSBleGNlcHRpb24uZ2V0KGdsb2JhbE9i
amVjdCwgbGluZU51bWJlcklEKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVl
IHN0YWNrVmFsdWUgPSBleGNlcHRpb24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBz
dGFja0lEKTsKKyAgICBKU1ZhbHVlIHN0YWNrVmFsdWUgPSBleGNlcHRpb24uZ2V0KGdsb2JhbE9i
amVjdCwgc3RhY2tJRCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgCi0gICAgaWYgKG5h
bWVWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkgPT0gIlN5bnRh
eEVycm9yIgorICAgIGlmIChuYW1lVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KSA9PSAi
U3ludGF4RXJyb3IiCiAgICAgICAgICYmICghZmlsZU5hbWVWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpIHx8ICFsaW5lTnVtYmVyVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkpIHsKICAgICAgICAg
cHJpbnRmKAogICAgICAgICAgICAgImF0ICVzOiVzXG4iLAotICAgICAgICAgICAgZmlsZU5hbWVW
YWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEo
KSwKLSAgICAgICAgICAgIGxpbmVOdW1iZXJWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBmaWxlTmFtZVZhbHVl
LnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgIGxp
bmVOdW1iZXJWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIH0KICAgICAKICAgICBpZiAoIXN0YWNrVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewot
ICAgICAgICBhdXRvIHN0YWNrU3RyaW5nID0gc3RhY2tWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgICAgIGF1dG8gc3RhY2tTdHJpbmcgPSBzdGFja1Zh
bHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGlmIChzdGFja1N0cmluZy5s
ZW5ndGgoKSkKICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHN0YWNrU3RyaW5nLnV0ZjgoKS5k
YXRhKCkpOwogICAgIH0KQEAgLTI1NjgsMTQgKzI1NjgsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tV
bmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTVmFsdWUgZXhjZXB0aW9uQ2xh
c3MgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBl
eHBlY3RlZEV4Y2VwdGlvbk5hbWUpKTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbkNsYXNzID0gZ2xv
YmFsT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBl
eHBlY3RlZEV4Y2VwdGlvbk5hbWUpKTsKICAgICBpZiAoIWV4Y2VwdGlvbkNsYXNzLmlzT2JqZWN0
KCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCB1bmNh
dWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlvbiBjbGFzcyBp
cyBub3QgZGVmaW5lZFxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5kYXRhKCkpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBpc0luc3RhbmNlT2ZFeHBl
Y3RlZEV4Y2VwdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGV4Y2VwdGlvbkNsYXNzKS0+aGFzSW5z
dGFuY2UoZXhlYywgZXhjZXB0aW9uKTsKKyAgICBib29sIGlzSW5zdGFuY2VPZkV4cGVjdGVkRXhj
ZXB0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9uQ2xhc3MpLT5oYXNJbnN0YW5jZShn
bG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CiAg
ICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGggbmFtZSAnJXMn
IGJ1dCBnaXZlbiBleGNlcHRpb24gY2xhc3MgZmFpbHMgcGVyZm9ybWluZyBoYXNJbnN0YW5jZVxu
IiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yNTkxLDcgKzI1OTAsNyBAQCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhj
ZXB0aW9uKFZNJiB2bSwgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCBpc0xhc3RGaWxlLCBib29s
IGhhc0V4Y2VwdGlvbiwgSlNWYWx1ZSB2YWx1ZSwgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGJvb2wm
IHN1Y2Nlc3MpCitzdGF0aWMgdm9pZCBjaGVja0V4Y2VwdGlvbihHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgYm9vbCBpc0xhc3RGaWxlLCBib29sIGhhc0V4Y2VwdGlvbiwgSlNWYWx1ZSB2YWx1
ZSwgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGJvb2wmIHN1Y2Nlc3MpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogCkBAIC0yNjAzLDcgKzI2MDIsNyBAQCBzdGF0aWMgdm9pZCBj
aGVja0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBib29sIGlzTAogICAgIGlmICghb3B0aW9ucy5tX3VuY2F1Z2h0RXhjZXB0aW9uTmFtZSB8fCAh
aXNMYXN0RmlsZSkgewogICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiAhaGFzRXhjZXB0aW9u
OwogICAgICAgICBpZiAob3B0aW9ucy5tX2R1bXAgJiYgIWhhc0V4Y2VwdGlvbikKLSAgICAgICAg
ICAgIHByaW50ZigiRW5kOiAlc1xuIiwgdmFsdWUudG9XVEZTdHJpbmcoZXhlYykudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBwcmludGYoIkVuZDogJXNcbiIsIHZhbHVlLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGlmIChoYXNFeGNlcHRpb24p
CiAgICAgICAgICAgICBkdW1wRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0g
ZWxzZQpAQCAtMjYzMiw3ICsyNjMxLDcgQEAgc3RhdGljIHZvaWQgcnVuV2l0aE9wdGlvbnMoR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvbW1hbmRMaW5lJiBvcHRpb25zLCBib28KICAgICAg
ICAgICAgICAgICBzY3JpcHRCdWZmZXIuYXBwZW5kKCJcInVzZSBzdHJpY3RcIjtcbiIsIHN0cmxl
bigiXCJ1c2Ugc3RyaWN0XCI7XG4iKSk7CiAKICAgICAgICAgICAgIGlmIChpc01vZHVsZSkgewot
ICAgICAgICAgICAgICAgIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksIGZpbGVOYW1lLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgICAgICAgICBwcm9taXNlID0gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGdsb2Jh
bE9iamVjdCwgZmlsZU5hbWUsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICAgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5
c3RlbShmaWxlTmFtZSwgc2NyaXB0QnVmZmVyKSkgewpAQCAtMjY1MSwzMCArMjY1MCwzMCBAQCBz
dGF0aWMgdm9pZCBydW5XaXRoT3B0aW9ucyhHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29t
bWFuZExpbmUmIG9wdGlvbnMsIGJvbwogICAgICAgICBpZiAoaXNNb2R1bGUpIHsKICAgICAgICAg
ICAgIGlmICghcHJvbWlzZSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCB1c2UgYW4gYWJzb2x1dGUgZmlsZSBVUkwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5MzA3NwotICAgICAgICAgICAgICAgIHByb21pc2UgPSBsb2FkQW5kRXZhbHVh
dGVNb2R1bGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzdHJpbmdGcm9t
VVRGKHNjcmlwdEJ1ZmZlciksIFNvdXJjZU9yaWdpbiB7IGFic29sdXRlUGF0aChmaWxlTmFtZSkg
fSwgVVJMKHsgfSwgZmlsZU5hbWUpLCBUZXh0UG9zaXRpb24oKSwgU291cmNlUHJvdmlkZXJTb3Vy
Y2VUeXBlOjpNb2R1bGUpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICBwcm9taXNl
ID0gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGdsb2JhbE9iamVjdCwganNjU291cmNlKHN0cmluZ0Zy
b21VVEYoc2NyaXB0QnVmZmVyKSwgU291cmNlT3JpZ2luIHsgYWJzb2x1dGVQYXRoKGZpbGVOYW1l
KSB9LCBVUkwoeyB9LCBmaWxlTmFtZSksIFRleHRQb3NpdGlvbigpLCBTb3VyY2VQcm92aWRlclNv
dXJjZVR5cGU6Ok1vZHVsZSksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgICAgICAgICAgSlNGdW5jdGlvbiog
ZnVsZmlsbEhhbmRsZXIgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgMSwgU3RyaW5nKCksIFsmc3VjY2VzcywgJm9wdGlvbnMsIGlzTGFzdEZpbGVdKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgY2hlY2tFeGNlcHRpb24oY2FsbEZyYW1lLCBqc0Nhc3Q8R2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSwgaXNMYXN0RmlsZSwgZmFsc2UsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCks
IG9wdGlvbnMsIHN1Y2Nlc3MpOworICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGpzQ2Fz
dDxHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBpc0xhc3RGaWxlLCBmYWxzZSwgY2FsbEZy
YW1lLT5hcmd1bWVudCgwKSwgb3B0aW9ucywgc3VjY2Vzcyk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0pOwogCiAg
ICAgICAgICAgICBKU0Z1bmN0aW9uKiByZWplY3RIYW5kbGVyID0gSlNOYXRpdmVTdGRGdW5jdGlv
bjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsIFN0cmluZygpLCBbJnN1Y2Nlc3MsICZvcHRp
b25zLCBpc0xhc3RGaWxlXShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkgewotICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGNhbGxGcmFtZSwg
anNDYXN0PEdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIGlzTGFzdEZpbGUsIHRydWUsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMCksIG9wdGlvbnMsIHN1Y2Nlc3MpOworICAgICAgICAgICAgICAg
IGNoZWNrRXhjZXB0aW9uKGpzQ2FzdDxHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBpc0xh
c3RGaWxlLCB0cnVlLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBvcHRpb25zLCBzdWNjZXNzKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIHByb21pc2UtPnRoZW4oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIGZ1bGZpbGxIYW5kbGVyLCByZWplY3RIYW5kbGVyKTsKKyAgICAgICAg
ICAgIHByb21pc2UtPnRoZW4oZ2xvYmFsT2JqZWN0LCBmdWxmaWxsSGFuZGxlciwgcmVqZWN0SGFu
ZGxlcik7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAg
ICAgICAgICAgIHZtLmRyYWluTWljcm90YXNrcygpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICAg
ICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpLCBqc2NTb3VyY2Uoc2NyaXB0QnVmZmVyLCBTb3VyY2VPcmlnaW4geyBhYnNvbHV0ZVBhdGgo
ZmlsZU5hbWUpIH0sIGZpbGVOYW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsK
KyAgICAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3Qs
IGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIFNvdXJjZU9yaWdpbiB7IGFic29sdXRlUGF0aChmaWxl
TmFtZSkgfSwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRpb24pOwogICAg
ICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIGlmIChldmFs
dWF0aW9uRXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZXZhbHVhdGlv
bkV4Y2VwdGlvbi0+dmFsdWUoKTsKLSAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QsIGlzTGFzdEZpbGUsIGV2YWx1YXRpb25F
eGNlcHRpb24sIHJldHVyblZhbHVlLCBvcHRpb25zLCBzdWNjZXNzKTsKKyAgICAgICAgICAgIGNo
ZWNrRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgaXNMYXN0RmlsZSwgZXZhbHVhdGlvbkV4Y2VwdGlv
biwgcmV0dXJuVmFsdWUsIG9wdGlvbnMsIHN1Y2Nlc3MpOwogICAgICAgICB9CiAKICAgICAgICAg
c2NyaXB0QnVmZmVyLmNsZWFyKCk7CkBAIC0yNzI3LDcgKzI3MjYsNyBAQCBzdGF0aWMgdm9pZCBy
dW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgCiAgICAg
ICAgIAogICAgICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25FeGNlcHRpb247Ci0g
ICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwganNjU291cmNlKHNvdXJjZSwgc291cmNlT3JpZ2luKSwgSlNWYWx1ZSgpLCBldmFs
dWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRl
KGdsb2JhbE9iamVjdCwganNjU291cmNlKHNvdXJjZSwgc291cmNlT3JpZ2luKSwgSlNWYWx1ZSgp
LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKICNlbHNlCiAgICAgICAgIHByaW50ZigiJXMiLCBpbnRl
cmFjdGl2ZVByb21wdCk7CiAgICAgICAgIFZlY3RvcjxjaGFyLCAyNTY+IGxpbmU7CkBAIC0yNzQy
LDEyICsyNzQxLDEyIEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgTmFrZWRQdHI8RXhj
ZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVl
ID0gZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShsaW5lLCBz
b3VyY2VPcmlnaW4sIHNvdXJjZU9yaWdpbi5zdHJpbmcoKSksIEpTVmFsdWUoKSwgZXZhbHVhdGlv
bkV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9i
YWxPYmplY3QsIGpzY1NvdXJjZShsaW5lLCBzb3VyY2VPcmlnaW4sIHNvdXJjZU9yaWdpbi5zdHJp
bmcoKSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAjZW5kaWYKICAgICAgICAg
aWYgKGV2YWx1YXRpb25FeGNlcHRpb24pCi0gICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjog
JXNcbiIsIGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCkudG9XVEZTdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcHJpbnRmKCJF
eGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJl
dHVyblZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCkudXRmOCgpLmRhdGEoKSk7CiAKICAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgdm0uZHJhaW5NaWNyb3Rhc2tz
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3Bw
CmluZGV4IDhjMzgyZmUzM2RjMzkzYjkyZDY1MWM1MTc1Mzg1MzVmNzllZWI2MzUuLmNiOGQ2YzI1
MjZhMjUxMTVhY2EyYjU1MjAxNDIzMGQyOTFlZTMzZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCkBAIC0zOSwyNiArMzksMjQgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKLUluc3RydWN0aW9uKiByZXR1cm5U
b1Rocm93KEV4ZWNTdGF0ZSogZXhlYykKK0luc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KFZNJiB2
bSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKICNp
ZiBMTElOVF9UUkFDSU5HCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlTExJbnRTbG93
UGF0aCgpKSkgewotICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRp
b24gIiwgSlNWYWx1ZShzY29wZS5leGNlcHRpb24oKSksICIgKHJldHVyblRvVGhyb3cpLlxuIik7
CiAgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50OjpleGNlcHRpb25JbnN0cnVjdGlvbnMo
KTsKIH0KIAotdm9pZCogY2FsbFRvVGhyb3coRXhlY1N0YXRlKiBleGVjKQordm9pZCogY2FsbFRv
VGhyb3coVk0mIHZtKQogewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFS
QU0odm0pOwogI2lmIExMSU5UX1RSQUNJTkcKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJh
Y2VMTEludFNsb3dQYXRoKCkpKSB7Ci0gICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSgqdm0pOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgICAgIGRhdGFMb2coIlRocm93
aW5nIGV4Y2VwdGlvbiAiLCBKU1ZhbHVlKHNjb3BlLmV4Y2VwdGlvbigpKSwgIiAoY2FsbFRvVGhy
b3cpLlxuIik7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRFeGNlcHRpb25zLmgKaW5kZXggMmEzZTc1ZGM0YTdkOGVlZTUwZWRhY2MwNmMyNzc2MTI1
YTFmZDUyNS4uY2U0Y2U2MWM0MjFjYTY0ZTM5NTQxODQwYjM5MmQ3M2Q2ZjQ3ZmE2OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuaApAQCAtMzAsNyAr
MzAsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxGcmFtZTsKLXVzaW5nIEV4ZWNT
dGF0ZSA9IENhbGxGcmFtZTsKIHN0cnVjdCBJbnN0cnVjdGlvbjsKIAogbmFtZXNwYWNlIExMSW50
IHsKQEAgLTM4LDkgKzM3LDkgQEAgbmFtZXNwYWNlIExMSW50IHsKIC8vIEdpdmVzIHlvdSBhIFBD
IHRoYXQgeW91IGNhbiB0ZWxsIHRoZSBpbnRlcnByZXRlciB0byBnbyB0bywgd2hpY2ggd2hlbiBh
ZHZhbmNlZAogLy8gYmV0d2VlbiAxIGFuZCA5IHNsb3RzIHdpbGwgZ2l2ZSB5b3UgYW4gImluc3Ry
dWN0aW9uIiB0aGF0IHRocmVhZHMgdG8gdGhlCiAvLyBpbnRlcnByZXRlcidzIGV4Y2VwdGlvbiBo
YW5kbGVyLgotSW5zdHJ1Y3Rpb24qIHJldHVyblRvVGhyb3coRXhlY1N0YXRlKik7CitJbnN0cnVj
dGlvbiogcmV0dXJuVG9UaHJvdyhWTSYpOwogCiAvLyBVc2UgdGhpcyB3aGVuIHlvdSdyZSB0aHJv
d2luZyB0byBhIGNhbGwgdGh1bmsuCi12b2lkKiBjYWxsVG9UaHJvdyhFeGVjU3RhdGUqKTsKK3Zv
aWQqIGNhbGxUb1Rocm93KFZNJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggZWIx
OGI0MTIzY2FjNzM1NjY3ODhjNDg0MzUwNmE3YjAxODMzZDg4OS4uOTlkODQ2N2ZiYjAxMDc4YjVh
MGMyOGU1ODBmZmU2NGZlY2VhZTcwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC03NiwxOCArNzYsMjAgQEAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgTExJbnQgewogCiAjZGVmaW5lIExMSU5UX0JFR0lOX05PX1NFVF9QQygpIFwK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOyAgICAgIFwKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsgXAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsgXAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOyBcCisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgp
OyBcCisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsgXAog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pCiAKICNpZm5kZWYg
TkRFQlVHCiAjZGVmaW5lIExMSU5UX1NFVF9QQ19GT1JfU1RVQlMoKSBkbyB7IFwKLSAgICAgICAg
ZXhlYy0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KHBjKTsgXAotICAgICAgICBleGVjLT5z
ZXRDdXJyZW50VlBDKHBjKTsgXAorICAgICAgICBjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBj
KTsgXAorICAgICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOyBcCiAgICAgfSB3aGls
ZSAoZmFsc2UpCiAjZWxzZQogI2RlZmluZSBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCkgZG8geyBc
Ci0gICAgICAgIGV4ZWMtPnNldEN1cnJlbnRWUEMocGMpOyBcCisgICAgICAgIGNhbGxGcmFtZS0+
c2V0Q3VycmVudFZQQyhwYyk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKICNlbmRpZgogCkBAIC05
NSwyNSArOTcsMjUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAgICAgTExJ
TlRfQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgTExJTlRfU0VU
X1BDX0ZPUl9TVFVCUygpCiAKLWlubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4g
ZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kLm9mZnNldCgpKS5qc1ZhbHVlKCk7IH0KLWlubGluZSBK
U1ZhbHVlIGdldE9wZXJhbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWaXJ0dWFsUmVnaXN0ZXIm
IG9wZXJhbmQpIHsgcmV0dXJuIGV4ZWMtPnIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9
CitpbmxpbmUgSlNWYWx1ZSBnZXROb25Db25zdGFudE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIGNvbnN0IFZpcnR1YWxSZWdpc3RlciYgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0KCkpLmpzVmFsdWUoKTsgfQoraW5saW5lIEpTVmFsdWUg
Z2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBv
cGVyYW5kKSB7IHJldHVybiBjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgp
OyB9CiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAg
IFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwK
ICAgICB9IHdoaWxlIChmYWxzZSkKIAotI2RlZmluZSBMTElOVF9FTkRfSU1QTCgpIExMSU5UX1JF
VFVSTl9UV08ocGMsIDApCisjZGVmaW5lIExMSU5UX0VORF9JTVBMKCkgTExJTlRfUkVUVVJOX1RX
TyhwYywgbnVsbHB0cikKIAogI2RlZmluZSBMTElOVF9USFJPVyhleGNlcHRpb25Ub1Rocm93KSBk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBleGNlcHRpb25Ub1Rocm93KTsgICAgICAgXAotICAgICAgICBwYyA9IHJl
dHVyblRvVGhyb3coZXhlYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvblRv
VGhyb3cpOyAgICAgICBcCisgICAgICAgIHBjID0gcmV0dXJuVG9UaHJvdyh2bSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBMTElOVF9FTkRfSU1QTCgpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNl
KQogCiAjZGVmaW5lIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpIGRvIHsgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgZG9FeGNlcHRpb25GdXp6aW5nSWZFbmFibGVkKGV4ZWMsIHRocm93U2Nv
cGUsICJMTEludFNsb3dQYXRocyIsIHBjKTsgICAgXAorICAgICAgICBkb0V4Y2VwdGlvbkZ1enpp
bmdJZkVuYWJsZWQoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAiTExJbnRTbG93UGF0aHMiLCBw
Yyk7ICAgIFwKICAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKSB7
ICAgICAgICAgXAotICAgICAgICAgICAgcGMgPSByZXR1cm5Ub1Rocm93KGV4ZWMpOyAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBwYyA9IHJldHVyblRvVGhyb3codm0pOyAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICBMTElOVF9FTkRfSU1QTCgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQpAQCAtMTI0LDcgKzEyNiw3IEBA
IGlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWaXJ0dWFs
UmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0CiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUg
SlVNUF9PRkZTRVQodGFyZ2V0T2Zmc2V0KSBcCi0gICAgKCh0YXJnZXRPZmZzZXQpID8gKHRhcmdl
dE9mZnNldCkgOiBleGVjLT5jb2RlQmxvY2soKS0+b3V0T2ZMaW5lSnVtcE9mZnNldChwYykpCisg
ICAgKCh0YXJnZXRPZmZzZXQpID8gKHRhcmdldE9mZnNldCkgOiBjb2RlQmxvY2stPm91dE9mTGlu
ZUp1bXBPZmZzZXQocGMpKQogCiAjZGVmaW5lIEpVTVBfVE8odGFyZ2V0KSBkbyB7IFwKICAgICAg
ICAgcGMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4ocGMpICsgKHRhcmdldCkpOyBcCkBAIC0xNDMsNTAgKzE0NSw0
OSBAQCBpbmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmly
dHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldAogI2RlZmluZSBMTElOVF9SRVRVUk4odmFsdWUp
IGRvIHsgICAgICAgICAgICAgICAgXAogICAgICAgICBKU1ZhbHVlIF9fcl9yZXR1cm5WYWx1ZSA9
ICh2YWx1ZSk7ICAgICAgXAogICAgICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsgICAgICAg
ICAgICAgICAgXAotICAgICAgICBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZHN0KSA9IF9f
cl9yZXR1cm5WYWx1ZTsgICAgICAgICAgXAorICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
Ynl0ZWNvZGUubV9kc3QpID0gX19yX3JldHVyblZhbHVlOyAgICAgICAgICBcCiAgICAgICAgIExM
SU5UX0VORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFs
c2UpCiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX1BST0ZJTEVEKHZhbHVlKSBkbyB7ICAgICAgICAg
ICAgICAgXAogICAgICAgICBKU1ZhbHVlIF9fcnBfcmV0dXJuVmFsdWUgPSAodmFsdWUpOyAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGV4ZWMtPnVuY2hlY2tlZFIoYnl0
ZWNvZGUubV9kc3QpID0gX19ycF9yZXR1cm5WYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9kc3QpID0gX19ycF9y
ZXR1cm5WYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBMTElOVF9QUk9G
SUxFX1ZBTFVFKF9fcnBfcmV0dXJuVmFsdWUpOyAgICAgICAgICBcCiAgICAgICAgIExMSU5UX0VO
RF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0g
d2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX1BST0ZJTEVfVkFMVUUodmFsdWUpIGRvIHsg
XAotICAgICAgICBieXRlY29kZS5tZXRhZGF0YShleGVjKS5tX3Byb2ZpbGUubV9idWNrZXRzWzBd
ID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spLm1fcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUp
OyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKLSNkZWZpbmUgTExJTlRfQ0FMTF9FTkRfSU1QTChl
eGVjLCBjYWxsVGFyZ2V0LCBjYWxsVGFyZ2V0VGFnKSBcCi0gICAgTExJTlRfUkVUVVJOX1RXTyhy
ZXRhZ0NvZGVQdHIoKGNhbGxUYXJnZXQpLCBjYWxsVGFyZ2V0VGFnLCBTbG93UGF0aFB0clRhZyks
IChleGVjKSkKKyNkZWZpbmUgTExJTlRfQ0FMTF9FTkRfSU1QTChjYWxsRnJhbWUsIGNhbGxUYXJn
ZXQsIGNhbGxUYXJnZXRUYWcpIFwKKyAgICBMTElOVF9SRVRVUk5fVFdPKHJldGFnQ29kZVB0cigo
Y2FsbFRhcmdldCksIGNhbGxUYXJnZXRUYWcsIFNsb3dQYXRoUHRyVGFnKSwgKGNhbGxGcmFtZSkp
CiAKLSNkZWZpbmUgTExJTlRfQ0FMTF9USFJPVyhleGVjLCBleGNlcHRpb25Ub1Rocm93KSBkbyB7
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgRXhlY1N0YXRlKiBfX2N0X2V4ZWMgPSAoZXhl
Yyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdGhyb3dFeGNl
cHRpb24oX19jdF9leGVjLCB0aHJvd1Njb3BlLCBleGNlcHRpb25Ub1Rocm93KTsgICAgICAgIFwK
LSAgICAgICAgTExJTlRfQ0FMTF9FTkRfSU1QTCgwLCBjYWxsVG9UaHJvdyhfX2N0X2V4ZWMpLCBF
eGNlcHRpb25IYW5kbGVyUHRyVGFnKTsgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgTExJTlRf
Q0FMTF9USFJPVyhnbG9iYWxPYmplY3QsIGV4Y2VwdGlvblRvVGhyb3cpIGRvIHsgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBKU0dsb2JhbE9iamVjdCogX19jdF9nbG9iYWxPYmplY3QgPSAo
Z2xvYmFsT2JqZWN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihfX2N0X2dsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9u
VG9UaHJvdyk7ICAgICAgICBcCisgICAgICAgIExMSU5UX0NBTExfRU5EX0lNUEwobnVsbHB0ciwg
Y2FsbFRvVGhyb3codm0pLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsgICAgICAgICAgICAgICAg
IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAotI2RlZmluZSBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQ
VElPTihleGVjLCBleGVjQ2FsbGVlKSBkbyB7ICAgICAgICAgICAgICAgXAotICAgICAgICBFeGVj
U3RhdGUqIF9fY2NlX2V4ZWMgPSAoZXhlYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBFeGVjU3RhdGUqIF9fY2NlX2V4ZWNDYWxsZWUgPSAoZXhlY0NhbGxlZSk7
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkb0V4Y2VwdGlvbkZ1enppbmdJZkVuYWJs
ZWQoX19jY2VfZXhlYywgdGhyb3dTY29wZSwgIkxMSW50U2xvd1BhdGhzL2NhbGwiLCBudWxscHRy
KTsgXAorI2RlZmluZSBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3QpIGRv
IHsgICAgICAgICAgICAgICBcCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBfX2NjZV9nbG9iYWxP
YmplY3QgPSAoZ2xvYmFsT2JqZWN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIGRvRXhjZXB0aW9uRnV6emluZ0lmRW5hYmxlZChfX2NjZV9nbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsICJMTEludFNsb3dQYXRocy9jYWxsIiwgbnVsbHB0cik7IFwKICAgICAgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIExMSU5UX0NBTExfRU5EX0lNUEwoMCwgY2FsbFRvVGhyb3co
X19jY2VfZXhlY0NhbGxlZSksIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOyBcCisgICAgICAgICAg
ICBMTElOVF9DQUxMX0VORF9JTVBMKG51bGxwdHIsIGNhbGxUb1Rocm93KHZtKSwgRXhjZXB0aW9u
SGFuZGxlclB0clRhZyk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAotI2RlZmluZSBMTElOVF9D
QUxMX1JFVFVSTihleGVjLCBleGVjQ2FsbGVlLCBjYWxsVGFyZ2V0LCBjYWxsVGFyZ2V0VGFnKSBk
byB7IFwKLSAgICAgICAgRXhlY1N0YXRlKiBfX2NyX2V4ZWMgPSAoZXhlYyk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgRXhlY1N0YXRlKiBfX2NyX2V4ZWNDYWxs
ZWUgPSAoZXhlY0NhbGxlZSk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdm9pZCog
X19jcl9jYWxsVGFyZ2V0ID0gKGNhbGxUYXJnZXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJT04oX19jcl9leGVjLCBfX2NyX2V4
ZWNDYWxsZWUpOyAgICAgICAgIFwKLSAgICAgICAgTExJTlRfQ0FMTF9FTkRfSU1QTChfX2NyX2V4
ZWNDYWxsZWUsIF9fY3JfY2FsbFRhcmdldCwgY2FsbFRhcmdldFRhZyk7IFwKKyNkZWZpbmUgTExJ
TlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgY2FsbFRhcmdldCwgY2Fs
bFRhcmdldFRhZykgZG8geyBcCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBfX2NyX2dsb2JhbE9i
amVjdCA9IChnbG9iYWxPYmplY3QpOyBcCisgICAgICAgIENhbGxGcmFtZSogX19jcl9jYWxsZWVG
cmFtZSA9IChjYWxsZWVGcmFtZSk7IFwKKyAgICAgICAgdm9pZCogX19jcl9jYWxsVGFyZ2V0ID0g
KGNhbGxUYXJnZXQpOyBcCisgICAgICAgIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKF9fY3Jf
Z2xvYmFsT2JqZWN0KTsgICAgICAgICBcCisgICAgICAgIExMSU5UX0NBTExfRU5EX0lNUEwoX19j
cl9jYWxsZWVGcmFtZSwgX19jcl9jYWxsVGFyZ2V0LCBjYWxsVGFyZ2V0VGFnKTsgXAogICAgIH0g
d2hpbGUgKGZhbHNlKQogCi0jZGVmaW5lIExMSU5UX1JFVFVSTl9DQUxMRUVfRlJBTUUoZXhlY0Nh
bGxlZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEV4ZWNTdGF0ZSogX19y
Y2ZfZXhlYyA9IChleGVjQ2FsbGVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIExMSU5UX1JFVFVSTl9UV08ocGMsIF9fcmNmX2V4ZWMpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisjZGVmaW5lIExMSU5UX1JFVFVSTl9DQUxMRUVfRlJBTUUoY2FsbGVlRnJh
bWUpIGRvIHsgXAorICAgICAgICBDYWxsRnJhbWUqIF9fcmNmX2NhbGxlZUZyYW1lID0gKGNhbGxl
ZUZyYW1lKTsgXAorICAgICAgICBMTElOVF9SRVRVUk5fVFdPKHBjLCBfX3JjZl9jYWxsZWVGcmFt
ZSk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAogI2lmIExMSU5UX1RSQUNJTkcKQEAgLTIyMiw3
ICsyMjMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gdm9pZCBzbG93UGF0aExvZ0Yo
Y29uc3QgY2hhciosIGNvbnN0IFR5cGVzJi4uLikgeyB9CiAKICNlbmRpZiAvLyBMTElOVF9UUkFD
SU5HCiAKLWV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX29wZXJhbmQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIGludCBmcm9tV2hlcmUsIGlu
dCBvcGVyYW5kKQorZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdHJhY2Vfb3Bl
cmFuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBpbnQgZnJv
bVdoZXJlLCBpbnQgb3BlcmFuZCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnRyYWNlTExJbnRFeGVj
dXRpb24oKSkKICAgICAgICAgTExJTlRfRU5EX0lNUEwoKTsKQEAgLTIzMSwyMSArMjMyLDIxIEBA
IGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNlX29wZXJhbmQoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjCiAgICAgZGF0YUxvZ0YoCiAgICAgICAgICI8JXA+ICVw
IC8gJXA6IGV4ZWN1dGluZyBiYyMlenUsIG9wIyV1OiBUcmFjZSglZCk6ICVkXG4iLAogICAgICAg
ICAmVGhyZWFkOjpjdXJyZW50KCksCi0gICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLAotICAgICAg
ICBleGVjLAotICAgICAgICBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oZXhlYy0+Y29kZUJsb2NrKCkt
PmJ5dGVjb2RlT2Zmc2V0KHBjKSksCisgICAgICAgIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksCisg
ICAgICAgIGdsb2JhbE9iamVjdCwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KHBjKSksCiAgICAgICAgIHBjLT5vcGNv
ZGVJRCgpLAogICAgICAgICBmcm9tV2hlcmUsCiAgICAgICAgIG9wZXJhbmQpOwogICAgIExMSU5U
X0VORCgpOwogfQogCi1leHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV92
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9uKiBwYywgaW50IGZyb21XaGVy
ZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF90cmFjZV92YWx1ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjLCBpbnQgZnJvbVdoZXJlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKIHsKICAgICBp
ZiAoIU9wdGlvbnM6OnRyYWNlTExJbnRFeGVjdXRpb24oKSkKICAgICAgICAgTExJTlRfRU5EX0lN
UEwoKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRPcGVyYW5kKGV4ZWMsIG9wZXJhbmQpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgb3BlcmFuZCk7CiAgICAg
dW5pb24gewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgdWludDMyX3QgdGFnOwpAQCAt
MjU3LDkgKzI1OCw5IEBAIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3RyYWNl
X3ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3RpCiAgICAgZGF0YUxvZ0YoCiAg
ICAgICAgICI8JXA+ICVwIC8gJXA6IGV4ZWN1dGluZyBiYyMlenUsIG9wIyV1OiBUcmFjZSglZCk6
ICVkOiAlMDh4OiUwOHg6ICVzXG4iLAogICAgICAgICAmVGhyZWFkOjpjdXJyZW50KCksCi0gICAg
ICAgIGV4ZWMtPmNvZGVCbG9jaygpLAotICAgICAgICBleGVjLAotICAgICAgICBzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4oZXhlYy0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KHBjKSksCisgICAg
ICAgIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksCisgICAgICAgIGNhbGxGcmFtZSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zm
c2V0KHBjKSksCiAgICAgICAgIHBjLT5vcGNvZGVJRCgpLAogICAgICAgICBmcm9tV2hlcmUsCiAg
ICAgICAgIG9wZXJhbmQub2Zmc2V0KCksCkBAIC0yNzQsNDYgKzI3NSw0NyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTCh0cmFjZV9wcm9sb2d1ZSkKICAgICBpZiAoIU9wdGlvbnM6OnRyYWNlTExJbnRF
eGVjdXRpb24oKSkKICAgICAgICAgTExJTlRfRU5EX0lNUEwoKTsKIAotICAgIGRhdGFMb2dGKCI8
JXA+ICVwIC8gJXA6IGluIHByb2xvZ3VlIG9mICIsICZUaHJlYWQ6OmN1cnJlbnQoKSwgZXhlYy0+
Y29kZUJsb2NrKCksIGV4ZWMpOwotICAgIGRhdGFMb2coZXhlYy0+Y29kZUJsb2NrKCksICJcbiIp
OworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAg
ICBkYXRhTG9nRigiPCVwPiAlcCAvICVwOiBpbiBwcm9sb2d1ZSBvZiAiLCAmVGhyZWFkOjpjdXJy
ZW50KCksIGNvZGVCbG9jaywgY2FsbEZyYW1lKTsKKyAgICBkYXRhTG9nKGNvZGVCbG9jaywgIlxu
Iik7CiAgICAgTExJTlRfRU5EX0lNUEwoKTsKIH0KIAotc3RhdGljIHZvaWQgdHJhY2VGdW5jdGlv
blByb2xvZ3VlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogY29tbWVudCwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQorc3RhdGljIHZvaWQgdHJhY2VGdW5jdGlvblByb2xvZ3VlKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBjaGFyKiBjb21tZW50LCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCiB7CiAgICAgaWYgKCFPcHRpb25zOjp0cmFjZUxMSW50RXhlY3V0aW9uKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganND
YXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+anNFeGVjdXRhYmxlKCk7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7Ci0gICAgZGF0
YUxvZ0YoIjwlcD4gJXAgLyAlcDogaW4gJXMgb2YgIiwgJlRocmVhZDo6Y3VycmVudCgpLCBjb2Rl
QmxvY2ssIGV4ZWMsIGNvbW1lbnQpOworICAgIGRhdGFMb2dGKCI8JXA+ICVwIC8gJXA6IGluICVz
IG9mICIsICZUaHJlYWQ6OmN1cnJlbnQoKSwgY29kZUJsb2NrLCBjYWxsRnJhbWUsIGNvbW1lbnQp
OwogICAgIGRhdGFMb2coY29kZUJsb2NrKTsKICAgICBkYXRhTG9nRigiIGZ1bmN0aW9uICVwLCBl
eGVjdXRhYmxlICVwOyBudW1WYXJzID0gJXUsIG51bVBhcmFtZXRlcnMgPSAldSwgbnVtQ2FsbGVl
TG9jYWxzID0gJXUsIGNhbGxlciA9ICVwLlxuIiwKLSAgICAgICAgY2FsbGVlLCBleGVjdXRhYmxl
LCBjb2RlQmxvY2stPm51bVZhcnMoKSwgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGNvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIGV4ZWMtPmNhbGxlckZyYW1lKCkpOworICAgICAgICBj
YWxsZWUsIGV4ZWN1dGFibGUsIGNvZGVCbG9jay0+bnVtVmFycygpLCBjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSwgY2FsbEZyYW1lLT5jYWxs
ZXJGcmFtZSgpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wodHJhY2VfcHJvbG9ndWVfZnVu
Y3Rpb25fZm9yX2NhbGwpCiB7Ci0gICAgdHJhY2VGdW5jdGlvblByb2xvZ3VlKGV4ZWMsICJjYWxs
IHByb2xvZ3VlIiwgQ29kZUZvckNhbGwpOworICAgIHRyYWNlRnVuY3Rpb25Qcm9sb2d1ZShjYWxs
RnJhbWUsICJjYWxsIHByb2xvZ3VlIiwgQ29kZUZvckNhbGwpOwogICAgIExMSU5UX0VORF9JTVBM
KCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHRyYWNlX3Byb2xvZ3VlX2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3QpCiB7Ci0gICAgdHJhY2VGdW5jdGlvblByb2xvZ3VlKGV4ZWMsICJjb25zdHJ1
Y3QgcHJvbG9ndWUiLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICB0cmFjZUZ1bmN0aW9uUHJvbG9n
dWUoY2FsbEZyYW1lLCAiY29uc3RydWN0IHByb2xvZ3VlIiwgQ29kZUZvckNvbnN0cnVjdCk7CiAg
ICAgTExJTlRfRU5EX0lNUEwoKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wodHJhY2VfYXJp
dHlDaGVja19mb3JfY2FsbCkKIHsKLSAgICB0cmFjZUZ1bmN0aW9uUHJvbG9ndWUoZXhlYywgImNh
bGwgYXJpdHkgY2hlY2siLCBDb2RlRm9yQ2FsbCk7CisgICAgdHJhY2VGdW5jdGlvblByb2xvZ3Vl
KGNhbGxGcmFtZSwgImNhbGwgYXJpdHkgY2hlY2siLCBDb2RlRm9yQ2FsbCk7CiAgICAgTExJTlRf
RU5EX0lNUEwoKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wodHJhY2VfYXJpdHlDaGVja19m
b3JfY29uc3RydWN0KQogewotICAgIHRyYWNlRnVuY3Rpb25Qcm9sb2d1ZShleGVjLCAiY29uc3Ry
dWN0IGFyaXR5IGNoZWNrIiwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgdHJhY2VGdW5jdGlvblBy
b2xvZ3VlKGNhbGxGcmFtZSwgImNvbnN0cnVjdCBhcml0eSBjaGVjayIsIENvZGVGb3JDb25zdHJ1
Y3QpOwogICAgIExMSU5UX0VORF9JTVBMKCk7CiB9CiAKQEAgLTMyMiwyMSArMzI0LDIyIEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHRyYWNlKQogICAgIGlmICghT3B0aW9uczo6dHJhY2VMTEludEV4
ZWN1dGlvbigpKQogICAgICAgICBMTElOVF9FTkRfSU1QTCgpOwogCisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gcGMtPm9wY29kZUlEKCk7CiAgICAgZGF0YUxvZ0YoIjwlcD4gJXAgLyAlcDogZXhlY3V0aW5n
IGJjIyV6dSwgJXMsIHBjID0gJXBcbiIsCiAgICAgICAgICAgICAmVGhyZWFkOjpjdXJyZW50KCks
Ci0gICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwKLSAgICAgICAgICAgIGV4ZWMsCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oZXhlYy0+Y29kZUJsb2NrKCktPmJ5dGVjb2Rl
T2Zmc2V0KHBjKSksCisgICAgICAgICAgICBjb2RlQmxvY2ssCisgICAgICAgICAgICBjYWxsRnJh
bWUsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrLT5ieXRlY29k
ZU9mZnNldChwYykpLAogICAgICAgICAgICAgcGMtPm5hbWUoKSwKICAgICAgICAgICAgIHBjKTsK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfZW50ZXIpIHsKLSAgICAgICAgZGF0YUxvZ0YoIkZyYW1l
IHdpbGwgZXZlbnR1YWxseSByZXR1cm4gdG8gJXBcbiIsIGV4ZWMtPnJldHVyblBDKCkudmFsdWUo
KSk7Ci0gICAgICAgICpyZW1vdmVDb2RlUHRyVGFnPHZvbGF0aWxlIGNoYXIqPihleGVjLT5yZXR1
cm5QQygpLnZhbHVlKCkpOworICAgICAgICBkYXRhTG9nRigiRnJhbWUgd2lsbCBldmVudHVhbGx5
IHJldHVybiB0byAlcFxuIiwgY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCkpOworICAgICAg
ICAqcmVtb3ZlQ29kZVB0clRhZzx2b2xhdGlsZSBjaGFyKj4oY2FsbEZyYW1lLT5yZXR1cm5QQygp
LnZhbHVlKCkpOwogICAgIH0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfcmV0KSB7Ci0gICAgICAg
IGRhdGFMb2dGKCJXaWxsIGJlIHJldHVybmluZyB0byAlcFxuIiwgZXhlYy0+cmV0dXJuUEMoKS52
YWx1ZSgpKTsKLSAgICAgICAgZGF0YUxvZ0YoIlRoZSBuZXcgY2ZyIHdpbGwgYmUgJXBcbiIsIGV4
ZWMtPmNhbGxlckZyYW1lKCkpOworICAgICAgICBkYXRhTG9nRigiV2lsbCBiZSByZXR1cm5pbmcg
dG8gJXBcbiIsIGNhbGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgpKTsKKyAgICAgICAgZGF0YUxv
Z0YoIlRoZSBuZXcgY2ZyIHdpbGwgYmUgJXBcbiIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSk7
CiAgICAgfQogICAgIExMSU5UX0VORF9JTVBMKCk7CiB9CkBAIC0zNjUsOSArMzY4LDggQEAgaW5s
aW5lIGJvb2wgc2hvdWxkSklUKENvZGVCbG9jayogY29kZUJsb2NrKQogfQogCiAvLyBSZXR1cm5z
IHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCi1pbmxpbmUgYm9vbCBqaXRDb21waWxlQW5k
U2V0SGV1cmlzdGljcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IDApCitpbmxpbmUgYm9vbCBqaXRDb21w
aWxlQW5kU2V0SGV1cmlzdGljcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25l
ZCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IDApCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15IGNhbGxl
cnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0MgaGVyZSBh
dCBhbGwuCiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAgICAgCkBAIC00MDAsNyArNDAy
LDcgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEV4ZWNTdGF0ZSogZXhlYywgdW4KICAgICB9CiB9CiAKLXN0YXRpYyBTbG93UGF0
aFJldHVyblR5cGUgZW50cnlPU1IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbios
IENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkK
K3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGNvbnN0IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQogewogICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKQEAgLTQxMCw1NiArNDEyLDYyIEBAIHN0
YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
bnN0cnVjdGlvbiosIENvZGVCbG9jCiAgICAgCiAgICAgaWYgKCFzaG91bGRKSVQoY29kZUJsb2Nr
KSkgewogICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwotICAgICAgICBM
TElOVF9SRVRVUk5fVFdPKDAsIDApOworICAgICAgICBMTElOVF9SRVRVUk5fVFdPKG51bGxwdHIs
IG51bGxwdHIpOwogICAgIH0KLSAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKGNv
ZGVCbG9jaywgZXhlYykpCi0gICAgICAgIExMSU5UX1JFVFVSTl9UV08oMCwgMCk7CisgICAgVk0m
IHZtID0gY29kZUJsb2NrLT52bSgpOworICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3Rp
Y3Modm0sIGNvZGVCbG9jaykpCisgICAgICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgCiAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJPU1IgZW50
cnkiLCAoImluIHByb2xvZ3VlIikpOwogICAgIAogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQot
ICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxl
QWRkcmVzcygpLCAwKTsKKyAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKGtpbmQgPT0g
QXJpdHlDaGVjayk7Ci0gICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+
YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIDApOwor
ICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlKCktPmFkZHJlc3NGb3JDYWxs
KE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpLCBudWxscHRyKTsKIH0KICNlbHNl
IC8vIEVOQUJMRShKSVQpCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29u
c3QgY2hhciosIEVudHJ5S2luZCkKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1Io
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IGNoYXIqLCBFbnRyeUtpbmQpCiB7CiAgICAgY29k
ZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKDAsIGV4
ZWMpOworICAgIExMSU5UX1JFVFVSTl9UV08obnVsbHB0ciwgY2FsbEZyYW1lKTsKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3IpCiB7Ci0g
ICAgcmV0dXJuIGVudHJ5T1NSKGV4ZWMsIHBjLCBleGVjLT5jb2RlQmxvY2soKSwgImVudHJ5X29z
ciIsIFByb2xvZ3VlKTsKKyAgICBVTlVTRURfUEFSQU0ocGMpOworICAgIHJldHVybiBlbnRyeU9T
UihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAiZW50cnlfb3NyIiwgUHJvbG9ndWUpOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwpCiB7Ci0gICAg
cmV0dXJuIGVudHJ5T1NSKGV4ZWMsIHBjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmpzQ2Fs
bGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ2FsbCgpLCAiZW50cnlfb3NyX2Z1
bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUpOworICAgIFVOVVNFRF9QQVJBTShwYyk7CisgICAg
cmV0dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgp
KS0+anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlv
bl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QpCiB7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGV4ZWMs
IHBjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUo
KS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdCIsIFByb2xvZ3VlKTsKKyAgICBVTlVTRURfUEFSQU0ocGMpOworICAgIHJldHVybiBlbnRy
eU9TUihqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmpzRXhlY3V0
YWJsZSgpLT5jb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0IiwgUHJvbG9ndWUpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9v
c3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjaykKIHsKLSAgICByZXR1cm4gZW50cnlPU1Io
ZXhlYywgcGMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSktPmpzRXhlY3V0
YWJsZSgpLT5jb2RlQmxvY2tGb3JDYWxsKCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxf
YXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIFVOVVNFRF9QQVJBTShwYyk7CisgICAgcmV0
dXJuIGVudHJ5T1NSKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+
anNFeGVjdXRhYmxlKCktPmNvZGVCbG9ja0ZvckNhbGwoKSwgImVudHJ5X29zcl9mdW5jdGlvbl9m
b3JfY2FsbF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2spCiB7Ci0gICAg
cmV0dXJuIGVudHJ5T1NSKGV4ZWMsIHBjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmpzQ2Fs
bGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29uc3RydWN0KCksICJlbnRyeV9v
c3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlDaGVjayk7CisgICAg
VU5VU0VEX1BBUkFNKHBjKTsKKyAgICByZXR1cm4gZW50cnlPU1IoanNDYXN0PEpTRnVuY3Rpb24q
PihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Y29kZUJsb2NrRm9yQ29u
c3RydWN0KCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwg
QXJpdHlDaGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogewogICAg
IExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKSB7CkBAIC00NzUsNyArNDgzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0wobG9vcF9vc3IpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oMCwgMCk7CiAgICAgfQogICAg
IAotICAgIGlmICghaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoY29kZUJsb2NrLCBleGVjLCBs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkpCisgICAgaWYgKCFqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyh2bSwgY29kZUJsb2NrLCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCkpCiAgICAg
ICAgIExMSU5UX1JFVFVSTl9UV08oMCwgMCk7CiAgICAgCiAgICAgQ09ERUJMT0NLX0xPR19FVkVO
VChjb2RlQmxvY2ssICJvc3JFbnRyeSIsICgiYXQgYmMjIiwgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQpKTsKQEAgLTQ4OSw3ICs0OTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29z
cikKICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gY29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAgICAgQVNTRVJUKGp1bXBUYXJnZXQpOwogICAgIAotICAgIExMSU5UX1JFVFVSTl9UV08o
anVtcFRhcmdldCwgZXhlYy0+dG9wT2ZGcmFtZSgpKTsKKyAgICBMTElOVF9SRVRVUk5fVFdPKGp1
bXBUYXJnZXQsIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKICNlbHNlIC8vIEVOQUJMRShKSVQp
CiAgICAgVU5VU0VEX1BBUkFNKHBjKTsKICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29v
bigpOwpAQCAtNTAxLDcgKzUwOSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHJlcGxhY2UpCiB7
CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKQEAgLTUxMSw3ICs1MTksNyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChyZXBsYWNlKQogICAgIH0KICAgICAKICAgICBpZiAoc2hvdWxkSklUKGNvZGVCbG9j
aykpCi0gICAgICAgIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKGNvZGVCbG9jaywgZXhlYyk7
CisgICAgICAgIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKHZtLCBjb2RlQmxvY2spOwogICAg
IGVsc2UKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGltZVNvb24oKTsKICAgICBMTElO
VF9FTkRfSU1QTCgpOwpAQCAtNTIzLDE4ICs1MzEsMTkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
cmVwbGFjZSkKIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc3RhY2tfY2hlY2spCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gSXQncyBv
ayB0byBjcmVhdGUgdGhlIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciBoZXJlIGJlZm9yZSB3ZQogICAg
IC8vIGNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSgpIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBp
cyBhbHdheXMgY2FsbGVkCiAgICAgLy8gYWZ0ZXIgdGhlIGZyYW1lIGhhcyBiZWVuIHByb3B1bGF0
ZWQgd2l0aCBhIHByb3BlciBDb2RlQmxvY2sgYW5kIGNhbGxlZS4KLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgTExJTlRfU0VUX1BDX0ZPUl9TVFVCUygpOwogCi0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBzbG93UGF0
aExvZ0YoIkNoZWNraW5nIHN0YWNrIGhlaWdodCB3aXRoIGV4ZWMgPSAlcC5cbiIsIGV4ZWMpOwor
ICAgIHNsb3dQYXRoTG9nRigiQ2hlY2tpbmcgc3RhY2sgaGVpZ2h0IHdpdGggY2FsbEZyYW1lID0g
JXAuXG4iLCBjYWxsRnJhbWUpOwogICAgIHNsb3dQYXRoTG9nKCJDb2RlQmxvY2sgPSAiLCBjb2Rl
QmxvY2ssICJcbiIpOwogICAgIGlmIChjb2RlQmxvY2spIHsKICAgICAgICAgc2xvd1BhdGhMb2dG
KCJOdW0gY2FsbGVlIHJlZ2lzdGVycyA9ICV1LlxuIiwgY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSk7CkBAIC01NTMsNjEgKzU2Miw2MSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzdGFja19j
aGVjaykKICAgICAvLyBIZW5jZSwgaWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2Uga25vdyBhIHN0YWNr
IG92ZXJmbG93IGlzIGltbWluZW50LiBTbywganVzdAogICAgIC8vIHRocm93IHRoZSBTdGFja092
ZXJmbG93RXJyb3IgdW5jb25kaXRpb25hbGx5LgogI2lmIEVOQUJMRShDX0xPT1ApCi0gICAgUmVn
aXN0ZXIqIHRvcE9mRnJhbWUgPSBleGVjLT50b3BPZkZyYW1lKCk7Ci0gICAgaWYgKExJS0VMWSh0
b3BPZkZyYW1lIDwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KGV4ZWMpKSkgeworICAgIFJl
Z2lzdGVyKiB0b3BPZkZyYW1lID0gY2FsbEZyYW1lLT50b3BPZkZyYW1lKCk7CisgICAgaWYgKExJ
S0VMWSh0b3BPZkZyYW1lIDwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KGNhbGxGcmFtZSkp
KSB7CiAgICAgICAgIEFTU0VSVCghdm0uaW50ZXJwcmV0ZXItPmNsb29wU3RhY2soKS5jb250YWlu
c0FkZHJlc3ModG9wT2ZGcmFtZSkpOwogICAgICAgICBpZiAoTElLRUxZKHZtLmVuc3VyZVN0YWNr
Q2FwYWNpdHlGb3IodG9wT2ZGcmFtZSkpKQogICAgICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhw
YywgMCk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBleGVjLT5jb252ZXJ0VG9TdGFja092ZXJmbG93
RnJhbWUodm0sIGNvZGVCbG9jayk7CisgICAgY2FsbEZyYW1lLT5jb252ZXJ0VG9TdGFja092ZXJm
bG93RnJhbWUodm0sIGNvZGVCbG9jayk7CiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2Nv
cGUodm0pOwotICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHRocm93U2NvcGUpOwot
ICAgIHBjID0gcmV0dXJuVG9UaHJvdyhleGVjKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKHBjLCBl
eGVjKTsKKyAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOworICAgIHBjID0gcmV0dXJuVG9UaHJvdyh2bSk7CisgICAgTExJTlRfUkVUVVJOX1RXTyhw
YywgY2FsbEZyYW1lKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19v
YmplY3QpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
ZXhlYyk7Ci0gICAgTExJTlRfUkVUVVJOKGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIG1ldGFk
YXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCkpKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgTExJTlRfUkVUVVJO
KGNvbnN0cnVjdEVtcHR5T2JqZWN0KHZtLCBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLnN0cnVjdHVyZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9u
ZXdfYXJyYXkpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShleGVjKTsKLSAgICBMTElOVF9SRVRVUk4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQo
ZXhlYywgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigmZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX2FyZ3YpKSwgYnl0ZWNvZGUubV9h
cmdjKSk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OworICAgIExMSU5UX1JFVFVSTihjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChnbG9iYWxP
YmplY3QsICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oJmNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2FyZ3YpKSwgYnl0ZWNv
ZGUubV9hcmdjKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJy
YXlfd2l0aF9zaXplKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBMTElOVF9SRVRVUk4oY29uc3RydWN0QXJyYXlXaXRo
U2l6ZVF1aXJrKGV4ZWMsICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2xlbmd0
aCkpKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7
CisgICAgTExJTlRfUkVUVVJOKGNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhnbG9iYWxPYmpl
Y3QsICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGdldE9wZXJhbmQoY2FsbEZy
YW1lLCBieXRlY29kZS5tX2xlbmd0aCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX25ld19yZWdleHApCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIFJlZ0V4cCogcmVnRXhwID0ganNDYXN0
PFJlZ0V4cCo+KGdldE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9yZWdleHApKTsKKyAgICBSZWdF
eHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHAqPihnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNv
ZGUubV9yZWdleHApKTsKICAgICBBU1NFUlQocmVnRXhwLT5pc1ZhbGlkKCkpOwotICAgIExMSU5U
X1JFVFVSTihSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7CisgICAgTExJTlRfUkVUVVJOKFJlZ0V4
cE9iamVjdDo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdF
eHApKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2luc3RhbmNlb2YpCiB7
CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSW5zdGFu
Y2VvZj4oKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5t
X3ZhbHVlKTsKLSAgICBKU1ZhbHVlIHByb3RvID0gZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5t
X3Byb3RvdHlwZSk7Ci0gICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbihKU09iamVjdDo6ZGVmYXVs
dEhhc0luc3RhbmNlKGV4ZWMsIHZhbHVlLCBwcm90bykpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
Z2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdmFsdWUpOworICAgIEpTVmFsdWUgcHJv
dG8gPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9wcm90b3R5cGUpOworICAgIExM
SU5UX1JFVFVSTihqc0Jvb2xlYW4oSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShnbG9iYWxP
YmplY3QsIHZhbHVlLCBwcm90bykpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2luc3RhbmNlb2ZfY3VzdG9tKQpAQCAtNjE1LDE0ICs2MjQsMTQgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2luc3RhbmNlb2ZfY3VzdG9tKQogICAgIExMSU5UX0JFR0lOKCk7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAg
ICBKU1ZhbHVlIHZhbHVlID0gZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX3ZhbHVlKTsKLSAg
ICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2NvbnN0
cnVjdG9yKTsKLSAgICBKU1ZhbHVlIGhhc0luc3RhbmNlVmFsdWUgPSBnZXRPcGVyYW5kKGV4ZWMs
IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldE9w
ZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3ZhbHVlKTsKKyAgICBKU1ZhbHVlIGNvbnN0cnVj
dG9yID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY29uc3RydWN0b3IpOworICAg
IEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29k
ZS5tX2hhc0luc3RhbmNlVmFsdWUpOwogCiAgICAgQVNTRVJUKGNvbnN0cnVjdG9yLmlzT2JqZWN0
KCkpOwotICAgIEFTU0VSVChoYXNJbnN0YW5jZVZhbHVlICE9IGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSB8fCAhY29u
c3RydWN0b3IuZ2V0T2JqZWN0KCktPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW1wbGVtZW50
c0RlZmF1bHRIYXNJbnN0YW5jZSgpKTsKKyAgICBBU1NFUlQoaGFzSW5zdGFuY2VWYWx1ZSAhPSBn
bG9iYWxPYmplY3QtPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkgfHwg
IWNvbnN0cnVjdG9yLmdldE9iamVjdCgpLT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSk7CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9v
bGVhbihjb25zdHJ1Y3Rvci5nZXRPYmplY3QoKS0+aGFzSW5zdGFuY2UoZXhlYywgdmFsdWUsIGhh
c0luc3RhbmNlVmFsdWUpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihjb25zdHJ1
Y3Rvci5nZXRPYmplY3QoKS0+aGFzSW5zdGFuY2UoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgaGFzSW5z
dGFuY2VWYWx1ZSkpOwogICAgIExMSU5UX1JFVFVSTihyZXN1bHQpOwogfQogCkBAIC02MzAsMTIg
KzYzOSwxMSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdHJ5X2dldF9ieV9pZCkK
IHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUcnlH
ZXRCeUlkPigpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBnZXRPcGVyYW5kKGV4
ZWMsIGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBnZXRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9iYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
VmFsdWUsIFByb3BlcnR5U2xvdDo6UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZN
SW5xdWlyeSk7CiAKLSAgICBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBz
bG90KTsKKyAgICBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQs
IHNsb3QpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gc2xvdC5nZXRQdXJlUmVzdWx0KCk7CiAKICAg
ICBMTElOVF9SRVRVUk5fUFJPRklMRUQocmVzdWx0KTsKQEAgLTY0NSwxOCArNjUzLDE3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWRfZGlyZWN0KQogewogICAgIExM
SU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEJ5SWREaXJlY3Q+
KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGdldE9wZXJhbmQoZXhlYywgYnl0
ZWNvZGUubV9iYXNlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZy
YW1lLCBieXRlY29kZS5tX2Jhc2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwg
UHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJv
cGVydHkpOwogCi0gICAgYm9vbCBmb3VuZCA9IGJhc2VWYWx1ZS5nZXRPd25Qcm9wZXJ0eVNsb3Qo
ZXhlYywgaWRlbnQsIHNsb3QpOworICAgIGJvb2wgZm91bmQgPSBiYXNlVmFsdWUuZ2V0T3duUHJv
cGVydHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOwogICAgIExMSU5UX0NIRUNLX0VY
Q0VQVElPTigpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZm91bmQgPyBzbG90LmdldFZhbHVlKGV4
ZWMsIGlkZW50KSA6IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBmb3VuZCA/
IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVudCkgOiBqc1VuZGVmaW5lZCgpOwogICAg
IExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNT
X1NMT1cgJiYgc2xvdC5pc0NhY2hlYWJsZSgpKSB7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoZXhlYyk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKICAgICAgICAgewogICAgICAgICAgICAgU3RydWN0dXJl
SUQgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZUlEOwogICAgICAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZUlEKSB7CkBAIC02OTIsOSArNjk5LDggQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZF9kaXJlY3QpCiB9CiAKIAotc3RhdGljIHZvaWQgc2V0
dXBHZXRCeUlkUHJvdG90eXBlQ2FjaGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIGNvbnN0IElu
c3RydWN0aW9uKiBwYywgT3BHZXRCeUlkOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTQ2VsbCogYmFz
ZUNlbGwsIFByb3BlcnR5U2xvdCYgc2xvdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCitzdGF0
aWMgdm9pZCBzZXR1cEdldEJ5SWRQcm90b3R5cGVDYWNoZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbiog
cGMsIE9wR2V0QnlJZDo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU0NlbGwqIGJhc2VDZWxsLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogewotICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKIAogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCkBAIC03MDksMTMgKzcxNSwxMyBAQCBz
dGF0aWMgdm9pZCBzZXR1cEdldEJ5SWRQcm90b3R5cGVDYWNoZShFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSwgY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9u
YXJ5U3RydWN0dXJlKHZtLCBqc0Nhc3Q8SlNPYmplY3QqPihiYXNlQ2VsbCkpOwogICAgIH0KIAot
ICAgIHByZXBhcmVQcm90b3R5cGVDaGFpbkZvckNhY2hpbmcoZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBiYXNlQ2VsbCwgc2xvdCk7CisgICAgcHJlcGFyZVByb3RvdHlwZUNoYWluRm9yQ2Fj
aGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90KTsKIAogICAgIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGNvbmRpdGlvbnM7CiAgICAgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAg
ICBjb25kaXRpb25zID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlNaXNzKHZtLCBjb2Rl
QmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgY29uZGl0aW9u
cyA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICBlbHNlCi0gICAgICAgIGNv
bmRpdGlvbnMgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCh2bSwg
Y29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgp
KTsKKyAgICAgICAgY29uZGl0aW9ucyA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVBy
b3BlcnR5SGl0KHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzbG90LnNs
b3RCYXNlKCksIGlkZW50LmltcGwoKSk7CiAKICAgICBpZiAoIWNvbmRpdGlvbnMuaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm47CkBAIC03NTUsMTUgKzc2MSwxNCBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfZ2V0X2J5X2lkKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29k
ZUJsb2NrKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGdldE9w
ZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9iYXNlKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGdl
dE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2Jhc2UpOwogICAgIFByb3BlcnR5U2xvdCBz
bG90KGJhc2VWYWx1ZSwgUHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6R2V0KTsKIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBp
ZGVudCwgc2xvdCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGdsb2JhbE9i
amVjdCwgaWRlbnQsIHNsb3QpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwotICAgIGV4
ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9kc3QpID0gcmVzdWx0OworICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihieXRlY29kZS5tX2RzdCkgPSByZXN1bHQ7CiAgICAgCiAgICAgaWYgKCFMTElO
VF9BTFdBWVNfQUNDRVNTX1NMT1cKICAgICAgICAgJiYgYmFzZVZhbHVlLmlzQ2VsbCgpCkBAIC04
MTMsNyArODE4LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZCkK
ICAgICAgICAgICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCkgIT0gYmFzZVZhbHVlKTsKIAogICAg
ICAgICAgICAgaWYgKCEoLS1tZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5oaXRDb3VudEZvckxMSW50
Q2FjaGluZykpCi0gICAgICAgICAgICAgICAgc2V0dXBHZXRCeUlkUHJvdG90eXBlQ2FjaGUoZXhl
Yywgdm0sIHBjLCBtZXRhZGF0YSwgYmFzZUNlbGwsIHNsb3QsIGlkZW50KTsKKyAgICAgICAgICAg
ICAgICBzZXR1cEdldEJ5SWRQcm90b3R5cGVDYWNoZShnbG9iYWxPYmplY3QsIHZtLCBjb2RlQmxv
Y2ssIHBjLCBtZXRhZGF0YSwgYmFzZUNlbGwsIHNsb3QsIGlkZW50KTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBpc0pTQXJyYXkoYmFzZVZh
bHVlKSAmJiBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKICAgICAgICAgewpA
QCAtODMyLDE2ICs4MzcsMTUgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9i
eV9pZCkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BQdXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoZXhl
Yyk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSk7CiAgICAgCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBnZXRPcGVyYW5kKGV4ZWMsIGJ5
dGVjb2RlLm1fYmFzZSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBnZXRPcGVyYW5kKGNhbGxG
cmFtZSwgYnl0ZWNvZGUubV9iYXNlKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGNvZGVCbG9jay0+cHV0QnlJZENvbnRleHQo
KSk7CiAgICAgaWYgKGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpCi0gICAgICAg
IENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBleGVjLCBhc09iamVjdChi
YXNlVmFsdWUpLCBpZGVudCwgZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX3ZhbHVlKSwgc2xv
dCk7CisgICAgICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9i
YWxPYmplY3QsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIGlkZW50LCBnZXRPcGVyYW5kKGNhbGxGcmFt
ZSwgYnl0ZWNvZGUubV92YWx1ZSksIHNsb3QpOwogICAgIGVsc2UKLSAgICAgICAgYmFzZVZhbHVl
LnB1dElubGluZShleGVjLCBpZGVudCwgZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX3ZhbHVl
KSwgc2xvdCk7CisgICAgICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpZGVu
dCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdmFsdWUpLCBzbG90KTsKICAgICBM
TElOVF9DSEVDS19FWENFUFRJT04oKTsKICAgICAKICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NF
U1NfU0xPVwpAQCAtODc5LDE0ICs4ODMsMTQgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3B1dF9ieV9pZCkKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJl
dmlvdXNJRCgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsK
IAogICAgICAgICAgICAgICAgICAgICBib29sIHNhd1BvbHlQcm90byA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMs
IGJhc2VDZWxsLCBzYXdQb2x5UHJvdG8pOworICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNhd1Bv
bHlQcm90byk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxpZFByb3Rv
dHlwZUNoYWluICYmICFzYXdQb2x5UHJvdG8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKS0+aXNPYmplY3QoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBtZXRhZGF0YS5tX29sZFN0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5wcmV2aW91
c0lEKCktPmlkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9
IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5t
X25ld1N0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnBy
b3RvdHlwZUNoYWluKGV4ZWMsIGFzT2JqZWN0KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihnbG9iYWxPYmplY3QsIGFzT2JqZWN0KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
ZXRhZGF0YS5tX3N0cnVjdHVyZUNoYWluLnNldCh2bSwgY29kZUJsb2NrLCBjaGFpbik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CkBAIC05MTIsMjYgKzkxNiwyMyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfZGVsX2J5X2lkKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcERlbEJ5SWQ+KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGdl
dE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9iYXNlKS50b09iamVjdChleGVjKTsKKyAgICBKU09i
amVjdCogYmFzZU9iamVjdCA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2Jhc2Up
LnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0g
ICAgYm9vbCBjb3VsZERlbGV0ZSA9IGJhc2VPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRl
UHJvcGVydHkoYmFzZU9iamVjdCwgZXhlYywgY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBib29sIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBnbG9iYWxPYmplY3QsIGNvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAgICAgTExJTlRfQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBjb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKQotICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywgVW5hYmxl
VG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CisgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcikpOwogICAgIExM
SU5UX1JFVFVSTihqc0Jvb2xlYW4oY291bGREZWxldGUpKTsKIH0KIAotc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBnZXRCeVZhbChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgT3BHZXRCeVZh
bCBieXRlY29kZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0QnlWYWwoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBPcEdldEJ5VmFsIGJ5dGVjb2RlKQog
ewotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2Jh
c2UpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5t
X3Byb3BlcnR5KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmco
KSkpIHsKICAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoSlNDZWxsOjpjYW5Vc2VGYXN0R2V0T3duUHJv
cGVydHkoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBl
eGlzdGluZ0F0b21TdHJpbmcgPSBhc1N0cmluZyhzdWJzY3JpcHQpLT50b0V4aXN0aW5nQXRvbVN0
cmluZyhleGVjKTsKKyAgICAgICAgICAgIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gZXhpc3RpbmdB
dG9tU3RyaW5nID0gYXNTdHJpbmcoc3Vic2NyaXB0KS0+dG9FeGlzdGluZ0F0b21TdHJpbmcoZ2xv
YmFsT2JqZWN0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFs
dWUoKSk7CiAgICAgICAgICAgICBpZiAoZXhpc3RpbmdBdG9tU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3du
UHJvcGVydHkodm0sIHN0cnVjdHVyZSwgZXhpc3RpbmdBdG9tU3RyaW5nLmdldCgpKSkKQEAgLTk0
MiwxMyArOTQzLDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0QnlWYWwoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIE9wR2V0QnlWYWwgYnl0ZWNvCiAgICAgCiAgICAgaWYgKHN1
YnNjcmlwdC5pc1VJbnQzMigpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNV
SW50MzIoKTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVj
KTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OwogICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKIAogICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpKSB7CiAgICAgICAg
ICAgICBpZiAoYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKICAgICAgICAg
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFzU3RyaW5n
KGJhc2VWYWx1ZSktPmdldEluZGV4KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIHJldHVybiBh
c1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5zZXRPdXRPZkJvdW5kcygpOwogICAgICAg
ICB9IGVsc2UgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CkBAIC05NzAsMjIgKzk3MSwyNCBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldEJ5VmFsKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBPcEdldEJ5VmFsIGJ5dGVjbwogICAgICAgICB9CiAKICAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOwotICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChleGVjLCBpKTsKKyAgICAgICAg
cmV0dXJuIGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICB9CiAKLSAgICBiYXNl
VmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKKyAgICBiYXNlVmFsdWUucmVxdWly
ZU9iamVjdENvZXJjaWJsZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7Ci0gICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGV4ZWMpOworICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtl
eShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUo
KSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGV4ZWMs
IHByb3BlcnR5KTsKKyAgICByZXR1cm4gYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHByb3Bl
cnR5KTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV92YWwpCiB7
CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0QnlW
YWw+KCk7Ci0gICAgTExJTlRfUkVUVVJOX1BST0ZJTEVEKGdldEJ5VmFsKHZtLCBleGVjLCBieXRl
Y29kZSkpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5
dGVjb2RlLm1fYmFzZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBnZXRPcGVyYW5kKGNhbGxG
cmFtZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgTExJTlRfUkVUVVJOX1BST0ZJTEVEKGdl
dEJ5VmFsKHZtLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IGJ5dGVjb2RlKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlf
dmFsKQpAQCAtOTkzLDEwICs5OTYsMTAgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV92YWwpCiAgICAgTExJTlRfQkVHSU4oKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wUHV0QnlWYWw+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBnZXRPcGVy
YW5kKGV4ZWMsIGJ5dGVjb2RlLm1fYmFzZSk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBnZXRP
cGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fcHJvcGVydHkpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBn
ZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fdmFsdWUpOwotICAgIGJvb2wgaXNTdHJpY3RNb2Rl
ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpOworICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3Zh
bHVlKTsKKyAgICBib29sIGlzU3RyaWN0TW9kZSA9IGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCk7
CiAgICAgCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAg
dWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwpAQCAtMTAwNSwxNyArMTAwOCwxNyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbCkKICAgICAgICAgICAg
IGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShpLCB2YWx1ZSkpCiAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleChv
YmplY3QsIGV4ZWMsIGksIHZhbHVlLCBpc1N0cmljdE1vZGUpOworICAgICAgICAgICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
LCB2YWx1ZSwgaXNTdHJpY3RNb2RlKTsKICAgICAgICAgICAgIExMSU5UX0VORCgpOwogICAgICAg
ICB9Ci0gICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGV4ZWMsIGksIHZhbHVlLCBpc1N0cmlj
dE1vZGUpOworICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChnbG9iYWxPYmplY3QsIGksIHZh
bHVlLCBpc1N0cmljdE1vZGUpOwogICAgICAgICBMTElOVF9FTkQoKTsKICAgICB9CiAKLSAgICBh
dXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgYXV0byBw
cm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgTExJ
TlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
LCBpc1N0cmljdE1vZGUpOwotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgcHJvcGVydHksIHZhbHVl
LCBzbG90KTsKKyAgICBiYXNlVmFsdWUucHV0KGdsb2JhbE9iamVjdCwgcHJvcGVydHksIHZhbHVl
LCBzbG90KTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApAQCAtMTAyNCwxNiArMTAyNywxNiBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbF9kaXJlY3QpCiAgICAgTExJ
TlRfQkVHSU4oKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUHV0QnlWYWxE
aXJlY3Q+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVj
b2RlLm1fYmFzZSk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBnZXRPcGVyYW5kKGV4ZWMsIGJ5
dGVjb2RlLm1fcHJvcGVydHkpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRPcGVyYW5kKGV4ZWMs
IGJ5dGVjb2RlLm1fdmFsdWUpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gZ2V0T3BlcmFuZChj
YWxsRnJhbWUsIGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBnZXRP
cGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3ZhbHVlKTsKICAgICBSRUxFQVNF
X0FTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmplY3Qg
PSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gZXhlYy0+Y29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpOworICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gY29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigp
KSkgewogICAgICAgICAvLyBEZXNwaXRlIGl0cyBuYW1lLCBKU1ZhbHVlOjppc1VJbnQzMiB3aWxs
IHJldHVybiB0cnVlIG9ubHkgZm9yIHBvc2l0aXZlIGJveGVkIGludDMyX3Q7IGFsbCB0aG9zZSB2
YWx1ZXMgYXJlIHZhbGlkIGFycmF5IGluZGljZXMuCiAgICAgICAgIEFTU0VSVChpc0luZGV4KHN1
YnNjcmlwdC5hc1VJbnQzMigpKSk7Ci0gICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4
KGV4ZWMsIHN1YnNjcmlwdC5hc1VJbnQzMigpLCB2YWx1ZSwgMCwgaXNTdHJpY3RNb2RlID8gUHV0
RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwor
ICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIHN1YnNjcmlw
dC5hc1VJbnQzMigpLCB2YWx1ZSwgMCwgaXNTdHJpY3RNb2RlID8gUHV0RGlyZWN0SW5kZXhTaG91
bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICBMTElOVF9F
TkQoKTsKICAgICB9CiAKQEAgLTEwNDEsMjEgKzEwNDQsMjEgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3B1dF9ieV92YWxfZGlyZWN0KQogICAgICAgICBkb3VibGUgc3Vic2NyaXB0
QXNEb3VibGUgPSBzdWJzY3JpcHQuYXNEb3VibGUoKTsKICAgICAgICAgdWludDMyX3Qgc3Vic2Ny
aXB0QXNVSW50MzIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3Vic2NyaXB0QXNEb3VibGUpOwog
ICAgICAgICBpZiAoc3Vic2NyaXB0QXNEb3VibGUgPT0gc3Vic2NyaXB0QXNVSW50MzIgJiYgaXNJ
bmRleChzdWJzY3JpcHRBc1VJbnQzMikpIHsKLSAgICAgICAgICAgIGJhc2VPYmplY3QtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIHN1YnNjcmlwdEFzVUludDMyLCB2YWx1ZSwgMCwgaXNTdHJpY3RNb2Rl
ID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhy
b3cpOworICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0
LCBzdWJzY3JpcHRBc1VJbnQzMiwgdmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdElu
ZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAg
ICAgIExMSU5UX0VORCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRG9uJ3QgcHV0IHRv
IGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCi0gICAgYXV0byBwcm9w
ZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGF1dG8gcHJvcGVydHkg
PSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgTExJTlRfRU5EKCk7CiAKICAgICBp
ZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpCi0gICAg
ICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LnZhbHVlKCksIHZhbHVl
LCAwLCBpc1N0cmljdE1vZGUgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0
SW5kZXhTaG91bGROb3RUaHJvdyk7CisgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4
KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/IFB1
dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsK
ICAgICBlbHNlIHsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgaXNT
dHJpY3RNb2RlKTsKLSAgICAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRoUmVpZnko
dm0sIGV4ZWMsIGJhc2VPYmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIENv
bW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBnbG9iYWxPYmplY3QsIGJhc2VP
YmplY3QsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiAgICAgfQogICAgIExMSU5UX0VORCgpOwog
fQpAQCAtMTA2NCwyNyArMTA2NywyNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
ZGVsX2J5X3ZhbCkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGdldE9wZXJhbmQo
ZXhlYywgYnl0ZWNvZGUubV9iYXNlKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGJhc2VW
YWx1ZS50b09iamVjdChleGVjKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IGdldE9wZXJhbmQo
Y2FsbEZyYW1lLCBieXRlY29kZS5tX2Jhc2UpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0g
YmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAKLSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IGdldE9wZXJhbmQoZXhlYywgYnl0ZWNv
ZGUubV9wcm9wZXJ0eSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBnZXRPcGVyYW5kKGNhbGxG
cmFtZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgCiAgICAgYm9vbCBjb3VsZERlbGV0ZTsK
ICAgICAKICAgICB1aW50MzJfdCBpOwogICAgIGlmIChzdWJzY3JpcHQuZ2V0VUludDMyKGkpKQot
ICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KGJhc2VPYmplY3QsIGV4ZWMsIGkpOworICAgICAgICBjb3VsZERlbGV0
ZSA9IGJhc2VPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KGJh
c2VPYmplY3QsIGdsb2JhbE9iamVjdCwgaSk7CiAgICAgZWxzZSB7CiAgICAgICAgIExMSU5UX0NI
RUNLX0VYQ0VQVElPTigpOwotICAgICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJv
cGVydHlLZXkoZXhlYyk7CisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9w
ZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsK
LSAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5KGJhc2VPYmplY3QsIGV4ZWMsIHByb3BlcnR5KTsKKyAgICAgICAgY291bGREZWxl
dGUgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHkpOwogICAgIH0KICAgICBMTElOVF9DSEVDS19FWENF
UFRJT04oKTsKIAotICAgIGlmICghY291bGREZWxldGUgJiYgZXhlYy0+Y29kZUJsb2NrKCktPmlz
U3RyaWN0TW9kZSgpKQotICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywg
VW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CisgICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBj
b2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQorICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVUeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpKTsKICAgICAK
ICAgICBMTElOVF9SRVRVUk4oanNCb29sZWFuKGNvdWxkRGVsZXRlKSk7CiB9CkBAIC0xMDkzLDE1
ICsxMDk2LDE1IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2V0dGVyX2J5
X2lkKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgQVNTRVJUKGdldE5vbkNvbnN0YW50T3BlcmFuZChleGVj
LCBieXRlY29kZS5tX2Jhc2UpLmlzT2JqZWN0KCkpOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqID0g
YXNPYmplY3QoZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fYmFzZSkpOwor
ICAgIEFTU0VSVChnZXROb25Db25zdGFudE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2Jh
c2UpLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoZ2V0Tm9u
Q29uc3RhbnRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9iYXNlKSk7CiAKICAgICB1bnNp
Z25lZCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogCi0gICAgSlNWYWx1ZSBnZXR0
ZXIgPSBnZXROb25Db25zdGFudE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9hY2Nlc3Nvcik7Cisg
ICAgSlNWYWx1ZSBnZXR0ZXIgPSBnZXROb25Db25zdGFudE9wZXJhbmQoY2FsbEZyYW1lLCBieXRl
Y29kZS5tX2FjY2Vzc29yKTsKICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkpOwogCi0gICAg
YmFzZU9iai0+cHV0R2V0dGVyKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLCBhc09iamVjdChnZXR0ZXIpLCBvcHRpb25zKTsKKyAgICBiYXNl
T2JqLT5wdXRHZXR0ZXIoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSksIGFzT2JqZWN0KGdldHRlciksIG9wdGlvbnMpOwogICAgIExMSU5UX0VO
RCgpOwogfQogCkBAIC0xMTA5LDE1ICsxMTEyLDE1IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9wdXRfc2V0dGVyX2J5X2lkKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgQVNTRVJUKGdldE5v
bkNvbnN0YW50T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2Jhc2UpLmlzT2JqZWN0KCkpOwotICAg
IEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGV4ZWMs
IGJ5dGVjb2RlLm1fYmFzZSkpOworICAgIEFTU0VSVChnZXROb25Db25zdGFudE9wZXJhbmQoY2Fs
bEZyYW1lLCBieXRlY29kZS5tX2Jhc2UpLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNl
T2JqID0gYXNPYmplY3QoZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV9iYXNlKSk7CiAKICAgICB1bnNpZ25lZCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogCi0gICAgSlNWYWx1ZSBzZXR0ZXIgPSBnZXROb25Db25zdGFudE9wZXJhbmQoZXhlYywgYnl0
ZWNvZGUubV9hY2Nlc3Nvcik7CisgICAgSlNWYWx1ZSBzZXR0ZXIgPSBnZXROb25Db25zdGFudE9w
ZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2FjY2Vzc29yKTsKICAgICBBU1NFUlQoc2V0dGVy
LmlzT2JqZWN0KCkpOwogCi0gICAgYmFzZU9iai0+cHV0U2V0dGVyKGV4ZWMsIGV4ZWMtPmNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLCBhc09iamVjdChzZXR0ZXIp
LCBvcHRpb25zKTsKKyAgICBiYXNlT2JqLT5wdXRTZXR0ZXIoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSksIGFzT2JqZWN0KHNldHRlciksIG9w
dGlvbnMpOwogICAgIExMSU5UX0VORCgpOwogfQogCkBAIC0xMTI1LDE1ICsxMTI4LDE1IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCkKIHsK
ICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRHZXR0
ZXJTZXR0ZXJCeUlkPigpOwotICAgIEFTU0VSVChnZXROb25Db25zdGFudE9wZXJhbmQoZXhlYywg
Ynl0ZWNvZGUubV9iYXNlKS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9
IGFzT2JqZWN0KGdldE5vbkNvbnN0YW50T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2Jhc2UpKTsK
KyAgICBBU1NFUlQoZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9i
YXNlKS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGdl
dE5vbkNvbnN0YW50T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fYmFzZSkpOwogCi0gICAg
SlNWYWx1ZSBnZXR0ZXIgPSBnZXROb25Db25zdGFudE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9n
ZXR0ZXIpOwotICAgIEpTVmFsdWUgc2V0dGVyID0gZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGV4ZWMs
IGJ5dGVjb2RlLm1fc2V0dGVyKTsKKyAgICBKU1ZhbHVlIGdldHRlciA9IGdldE5vbkNvbnN0YW50
T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fZ2V0dGVyKTsKKyAgICBKU1ZhbHVlIHNldHRl
ciA9IGdldE5vbkNvbnN0YW50T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fc2V0dGVyKTsK
ICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0dGVyLmlzT2JqZWN0KCkpOwotICAg
IEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnZXR0ZXIsIHNldHRlcik7CisgICAgR2V0dGVyU2V0dGVy
KiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdldHRl
ciwgc2V0dGVyKTsKIAotICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0QWNjZXNzb3JXaXRo
UmVpZnkodm0sIGV4ZWMsIGJhc2VPYmplY3QsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLCBhY2Nlc3NvciwgYnl0ZWNvZGUubV9hdHRyaWJ1dGVzKTsK
KyAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdEFjY2Vzc29yV2l0aFJlaWZ5KHZtLCBnbG9i
YWxPYmplY3QsIGJhc2VPYmplY3QsIGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSwgYWNjZXNzb3IsIGJ5dGVjb2RlLm1fYXR0cmlidXRlcyk7CiAgICAgTExJTlRfRU5E
KCk7CiB9CiAKQEAgLTExNDEsMTkgKzExNDQsMTkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3B1dF9nZXR0ZXJfYnlfdmFsKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIEFTU0VSVChnZXRO
b25Db25zdGFudE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9iYXNlKS5pc09iamVjdCgpKTsKLSAg
ICBKU09iamVjdCogYmFzZU9iaiA9IGFzT2JqZWN0KGdldE5vbkNvbnN0YW50T3BlcmFuZChleGVj
LCBieXRlY29kZS5tX2Jhc2UpKTsKLSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IGdldE9wZXJhbmQo
ZXhlYywgYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgQVNTRVJUKGdldE5vbkNvbnN0YW50T3Bl
cmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fYmFzZSkuaXNPYmplY3QoKSk7CisgICAgSlNPYmpl
Y3QqIGJhc2VPYmogPSBhc09iamVjdChnZXROb25Db25zdGFudE9wZXJhbmQoY2FsbEZyYW1lLCBi
eXRlY29kZS5tX2Jhc2UpKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IGdldE9wZXJhbmQoY2Fs
bEZyYW1lLCBieXRlY29kZS5tX3Byb3BlcnR5KTsKIAogICAgIHVuc2lnbmVkIG9wdGlvbnMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAKLSAgICBKU1ZhbHVlIGdldHRlciA9IGdldE5vbkNvbnN0
YW50T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2FjY2Vzc29yKTsKKyAgICBKU1ZhbHVlIGdldHRl
ciA9IGdldE5vbkNvbnN0YW50T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fYWNjZXNzb3Ip
OwogICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSk7CiAKLSAgICBhdXRvIHByb3BlcnR5ID0g
c3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNj
cmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAKLSAgICBiYXNlT2JqLT5wdXRHZXR0ZXIoZXhlYywgcHJvcGVydHksIGFzT2JqZWN0
KGdldHRlciksIG9wdGlvbnMpOworICAgIGJhc2VPYmotPnB1dEdldHRlcihnbG9iYWxPYmplY3Qs
IHByb3BlcnR5LCBhc09iamVjdChnZXR0ZXIpLCBvcHRpb25zKTsKICAgICBMTElOVF9FTkQoKTsK
IH0KIApAQCAtMTE2MSwxOSArMTE2NCwxOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcHV0X3NldHRlcl9ieV92YWwpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgQVNTRVJUKGdldE5vbkNv
bnN0YW50T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2Jhc2UpLmlzT2JqZWN0KCkpOwotICAgIEpT
T2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGV4ZWMsIGJ5
dGVjb2RlLm1fYmFzZSkpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gZ2V0T3BlcmFuZChleGVj
LCBieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICBBU1NFUlQoZ2V0Tm9uQ29uc3RhbnRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9iYXNlKS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCog
YmFzZU9iaiA9IGFzT2JqZWN0KGdldE5vbkNvbnN0YW50T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fYmFzZSkpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gZ2V0T3BlcmFuZChjYWxsRnJh
bWUsIGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogCiAgICAgdW5zaWduZWQgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKIAotICAgIEpTVmFsdWUgc2V0dGVyID0gZ2V0Tm9uQ29uc3RhbnRP
cGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fYWNjZXNzb3IpOworICAgIEpTVmFsdWUgc2V0dGVyID0g
Z2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9hY2Nlc3Nvcik7CiAg
ICAgQVNTRVJUKHNldHRlci5pc09iamVjdCgpKTsKIAotICAgIGF1dG8gcHJvcGVydHkgPSBzdWJz
Y3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0
LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04o
KTsKIAotICAgIGJhc2VPYmotPnB1dFNldHRlcihleGVjLCBwcm9wZXJ0eSwgYXNPYmplY3Qoc2V0
dGVyKSwgb3B0aW9ucyk7CisgICAgYmFzZU9iai0+cHV0U2V0dGVyKGdsb2JhbE9iamVjdCwgcHJv
cGVydHksIGFzT2JqZWN0KHNldHRlciksIG9wdGlvbnMpOwogICAgIExMSU5UX0VORCgpOwogfQog
CkBAIC0xMTgxLDExMyArMTE4NCwxMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2p0cnVlKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcEp0cnVlPigpOwotICAgIExMSU5UX0JSQU5DSChnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2Rl
Lm1fY29uZGl0aW9uKS50b0Jvb2xlYW4oZXhlYykpOworICAgIExMSU5UX0JSQU5DSChnZXRPcGVy
YW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9jb25kaXRpb24pLnRvQm9vbGVhbihnbG9iYWxPYmpl
Y3QpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pmYWxzZSkKIHsKICAg
ICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKZmFsc2U+KCk7
Ci0gICAgTExJTlRfQlJBTkNIKCFnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fY29uZGl0aW9u
KS50b0Jvb2xlYW4oZXhlYykpOworICAgIExMSU5UX0JSQU5DSCghZ2V0T3BlcmFuZChjYWxsRnJh
bWUsIGJ5dGVjb2RlLm1fY29uZGl0aW9uKS50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbGVzcykKIHsKICAgICBMTElOVF9CRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKbGVzcz4oKTsKLSAgICBMTElOVF9C
UkFOQ0goanNMZXNzPHRydWU+KGV4ZWMsIGdldE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9saHMp
LCBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fcmhzKSkpOworICAgIExMSU5UX0JSQU5DSChq
c0xlc3M8dHJ1ZT4oZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV9saHMpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9yaHMpKSk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbmxlc3MpCiB7CiAgICAgTExJTlRfQkVHSU4o
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSm5sZXNzPigpOwotICAgIExMSU5UX0JS
QU5DSCghanNMZXNzPHRydWU+KGV4ZWMsIGdldE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9saHMp
LCBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fcmhzKSkpOworICAgIExMSU5UX0JSQU5DSCgh
anNMZXNzPHRydWU+KGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2Rl
Lm1fbGhzKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fcmhzKSkpOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfamdyZWF0ZXIpCiB7CiAgICAgTExJTlRfQkVH
SU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSmdyZWF0ZXI+KCk7Ci0gICAgTExJ
TlRfQlJBTkNIKGpzTGVzczxmYWxzZT4oZXhlYywgZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5t
X3JocyksIGdldE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9saHMpKSk7CisgICAgTExJTlRfQlJB
TkNIKGpzTGVzczxmYWxzZT4oZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0
ZWNvZGUubV9yaHMpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9saHMpKSk7CiB9
CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbmdyZWF0ZXIpCiB7CiAgICAgTExJ
TlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSm5ncmVhdGVyPigpOwot
ICAgIExMSU5UX0JSQU5DSCghanNMZXNzPGZhbHNlPihleGVjLCBnZXRPcGVyYW5kKGV4ZWMsIGJ5
dGVjb2RlLm1fcmhzKSwgZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2xocykpKTsKKyAgICBM
TElOVF9CUkFOQ0goIWpzTGVzczxmYWxzZT4oZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxG
cmFtZSwgYnl0ZWNvZGUubV9yaHMpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9s
aHMpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbGVzc2VxKQogewog
ICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEpsZXNzZXE+
KCk7Ci0gICAgTExJTlRfQlJBTkNIKGpzTGVzc0VxPHRydWU+KGV4ZWMsIGdldE9wZXJhbmQoZXhl
YywgYnl0ZWNvZGUubV9saHMpLCBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fcmhzKSkpOwor
ICAgIExMSU5UX0JSQU5DSChqc0xlc3NFcTx0cnVlPihnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQo
Y2FsbEZyYW1lLCBieXRlY29kZS5tX2xocyksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29k
ZS5tX3JocykpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pubGVzc2Vx
KQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEpu
bGVzc2VxPigpOwotICAgIExMSU5UX0JSQU5DSCghanNMZXNzRXE8dHJ1ZT4oZXhlYywgZ2V0T3Bl
cmFuZChleGVjLCBieXRlY29kZS5tX2xocyksIGdldE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9y
aHMpKSk7CisgICAgTExJTlRfQlJBTkNIKCFqc0xlc3NFcTx0cnVlPihnbG9iYWxPYmplY3QsIGdl
dE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2xocyksIGdldE9wZXJhbmQoY2FsbEZyYW1l
LCBieXRlY29kZS5tX3JocykpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2pncmVhdGVyZXEpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wSmdyZWF0ZXJlcT4oKTsKLSAgICBMTElOVF9CUkFOQ0goanNMZXNzRXE8ZmFsc2U+
KGV4ZWMsIGdldE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9yaHMpLCBnZXRPcGVyYW5kKGV4ZWMs
IGJ5dGVjb2RlLm1fbGhzKSkpOworICAgIExMSU5UX0JSQU5DSChqc0xlc3NFcTxmYWxzZT4oZ2xv
YmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9yaHMpLCBnZXRPcGVy
YW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9saHMpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9qbmdyZWF0ZXJlcSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKbmdyZWF0ZXJlcT4oKTsKLSAgICBMTElOVF9CUkFOQ0go
IWpzTGVzc0VxPGZhbHNlPihleGVjLCBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fcmhzKSwg
Z2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2xocykpKTsKKyAgICBMTElOVF9CUkFOQ0goIWpz
TGVzc0VxPGZhbHNlPihnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29k
ZS5tX3JocyksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2xocykpKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2plcSkKIHsKICAgICBMTElOVF9CRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKZXE+KCk7Ci0gICAgTExJTlRfQlJBTkNI
KEpTVmFsdWU6OmVxdWFsKGV4ZWMsIGdldE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9saHMpLCBn
ZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fcmhzKSkpOworICAgIExMSU5UX0JSQU5DSChKU1Zh
bHVlOjplcXVhbChnbG9iYWxPYmplY3QsIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5t
X2xocyksIGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3JocykpKTsKIH0KIAogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2puZXEpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSm5lcT4oKTsKLSAgICBMTElOVF9CUkFOQ0go
IUpTVmFsdWU6OmVxdWFsKGV4ZWMsIGdldE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9saHMpLCBn
ZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fcmhzKSkpOworICAgIExMSU5UX0JSQU5DSCghSlNW
YWx1ZTo6ZXF1YWwoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUu
bV9saHMpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9yaHMpKSk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qc3RyaWN0ZXEpCiB7CiAgICAgTExJTlRfQkVH
SU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSnN0cmljdGVxPigpOwotICAgIExM
SU5UX0JSQU5DSChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBnZXRPcGVyYW5kKGV4ZWMsIGJ5
dGVjb2RlLm1fbGhzKSwgZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX3JocykpKTsKKyAgICBM
TElOVF9CUkFOQ0goSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZ2xvYmFsT2JqZWN0LCBnZXRPcGVyYW5k
KGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9saHMpLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNv
ZGUubV9yaHMpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbnN0cmlj
dGVxKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cEpuc3RyaWN0ZXE+KCk7Ci0gICAgTExJTlRfQlJBTkNIKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChl
eGVjLCBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fbGhzKSwgZ2V0T3BlcmFuZChleGVjLCBi
eXRlY29kZS5tX3JocykpKTsKKyAgICBMTElOVF9CUkFOQ0goIUpTVmFsdWU6OnN0cmljdEVxdWFs
KGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fbGhzKSwgZ2V0
T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fcmhzKSkpOwogfQogCiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfc3dpdGNoX2ltbSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BTd2l0Y2hJbW0+KCk7Ci0gICAgSlNWYWx1ZSBzY3J1
dGluZWUgPSBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fc2NydXRpbmVlKTsKKyAgICBKU1Zh
bHVlIHNjcnV0aW5lZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3NjcnV0aW5l
ZSk7CiAgICAgQVNTRVJUKHNjcnV0aW5lZS5pc0RvdWJsZSgpKTsKICAgICBkb3VibGUgdmFsdWUg
PSBzY3J1dGluZWUuYXNEb3VibGUoKTsKICAgICBpbnQzMl90IGludFZhbHVlID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4odmFsdWUpOwogICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gSlVNUF9PRkZTRVQo
Ynl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICBpZiAodmFsdWUgPT0gaW50VmFsdWUpIHsK
LSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBp
ZiAodmFsdWUgPT0gaW50VmFsdWUpCiAgICAgICAgIEpVTVBfVE8oY29kZUJsb2NrLT5zd2l0Y2hK
dW1wVGFibGUoYnl0ZWNvZGUubV90YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZShpbnRWYWx1ZSwg
ZGVmYXVsdE9mZnNldCkpOwotICAgIH0gZWxzZQorICAgIGVsc2UKICAgICAgICAgSlVNUF9UTyhk
ZWZhdWx0T2Zmc2V0KTsKICAgICBMTElOVF9FTkQoKTsKIH0KQEAgLTEyOTYsMTMgKzEyOTgsMTIg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3N3aXRjaF9jaGFyKQogewogICAgIExM
SU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFN3aXRjaENoYXI+KCk7
Ci0gICAgSlNWYWx1ZSBzY3J1dGluZWUgPSBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlKTsKKyAgICBKU1ZhbHVlIHNjcnV0aW5lZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBi
eXRlY29kZS5tX3NjcnV0aW5lZSk7CiAgICAgQVNTRVJUKHNjcnV0aW5lZS5pc1N0cmluZygpKTsK
ICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoc2NydXRpbmVlKTsKICAgICBBU1NFUlQo
c3RyaW5nLT5sZW5ndGgoKSA9PSAxKTsKICAgICBpbnQgZGVmYXVsdE9mZnNldCA9IEpVTVBfT0ZG
U0VUKGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0
cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7CisgICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmluZy0+dmFsdWUoZ2xv
YmFsT2JqZWN0KS5pbXBsKCk7CiAgICAgSlVNUF9UTyhjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZShieXRlY29kZS5tX3RhYmxlSW5kZXgpLm9mZnNldEZvclZhbHVlKCgqaW1wbClbMF0sIGRlZmF1
bHRPZmZzZXQpKTsKICAgICBMTElOVF9FTkQoKTsKIH0KQEAgLTEzMTEsMTcgKzEzMTIsMTUgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3N3aXRjaF9zdHJpbmcpCiB7CiAgICAgTExJ
TlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wU3dpdGNoU3RyaW5nPigp
OwotICAgIEpTVmFsdWUgc2NydXRpbmVlID0gZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX3Nj
cnV0aW5lZSk7CisgICAgSlNWYWx1ZSBzY3J1dGluZWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwg
Ynl0ZWNvZGUubV9zY3J1dGluZWUpOwogICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gSlVNUF9PRkZT
RVQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKICAgICBpZiAoIXNjcnV0aW5lZS5pc1N0cmlu
ZygpKQogICAgICAgICBKVU1QX1RPKGRlZmF1bHRPZmZzZXQpOwogICAgIGVsc2UgewotICAgICAg
ICBTdHJpbmdJbXBsKiBzY3J1dGluZWVTdHJpbmdJbXBsID0gYXNTdHJpbmcoc2NydXRpbmVlKS0+
dmFsdWUoZXhlYykuaW1wbCgpOworICAgICAgICBTdHJpbmdJbXBsKiBzY3J1dGluZWVTdHJpbmdJ
bXBsID0gYXNTdHJpbmcoc2NydXRpbmVlKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CiAK
ICAgICAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLQogICAgICAgICBKVU1QX1RPKGNvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGJ5dGVjb2RlLm1fdGFibGVJbmRleCkub2Zmc2V0Rm9y
VmFsdWUoc2NydXRpbmVlU3RyaW5nSW1wbCwgZGVmYXVsdE9mZnNldCkpOwogICAgIH0KICAgICBM
TElOVF9FTkQoKTsKQEAgLTEzMzEsOCArMTMzMCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9uZXdfZnVuYykKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BOZXdGdW5jPigpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5
dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgp
OwogICAgIHNsb3dQYXRoTG9nRigiQ3JlYXRpbmcgZnVuY3Rpb24hXG4iKTsKICAgICBMTElOVF9S
RVRVUk4oSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCksIHNjb3BlKSk7CiB9CkBAIC0xMzQxLDggKzEzMzksNyBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2dlbmVyYXRvcl9mdW5jKQogewogICAg
IExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0dlbmVyYXRv
ckZ1bmM+KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSku
UmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgc2xvd1BhdGhM
b2dGKCJDcmVhdGluZyBmdW5jdGlvbiFcbiIpOwogICAgIExMSU5UX1JFVFVSTihKU0dlbmVyYXRv
ckZ1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKSwgc2NvcGUpKTsKIH0KQEAgLTEzNTEsOCArMTM0OCw3IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZnVuYykKIHsKICAgICBMTElOVF9CRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBc3luY0Z1bmM+KCk7Ci0gICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU1Njb3BlKiBz
Y29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3Bl
KCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgc2xvd1BhdGhMb2dGKCJDcmVhdGluZyBh
c3luYyBmdW5jdGlvbiFcbiIpOwogICAgIExMSU5UX1JFVFVSTihKU0FzeW5jRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wp
LCBzY29wZSkpOwogfQpAQCAtMTM2MSw4ICsxMzU3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX25ld19hc3luY19nZW5lcmF0b3JfZnVuYykKIHsKICAgICBMTElOVF9CRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBc3luY0dlbmVyYXRvckZ1bmM+KCk7
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU1Nj
b3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6
OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0
ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgc2xvd1BhdGhMb2dGKCJDcmVh
dGluZyBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24hXG4iKTsKICAgICBMTElOVF9SRVRVUk4oSlNB
c3luY0dlbmVyYXRvckZ1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNs
KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSwgc2NvcGUpKTsKIH0KQEAgLTEzNzIsOCArMTM2Nyw3
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfZnVuY19leHApCiAgICAgTExJ
TlRfQkVHSU4oKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3RnVuY0V4
cD4oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAg
IEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1
bmN0aW9uRGVjbCk7CiAgICAgCiAgICAgTExJTlRfUkVUVVJOKEpTRnVuY3Rpb246OmNyZWF0ZSh2
bSwgZXhlY3V0YWJsZSwgc2NvcGUpKTsKQEAgLTEzODQsOCArMTM3OCw3IEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQogICAgIExMSU5UX0JF
R0lOKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3R2VuZXJhdG9yRnVuY0V4
cD4oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAg
IEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1
bmN0aW9uRGVjbCk7CiAKICAgICBMTElOVF9SRVRVUk4oSlNHZW5lcmF0b3JGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBleGVjdXRhYmxlLCBzY29wZSkpOwpAQCAtMTM5Niw4ICsxMzg5LDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hc3luY19mdW5jX2V4cCkKICAgICBMTElOVF9C
RUdJTigpOwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBc3luY0Z1bmNF
eHA+KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAg
ICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVn
aXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpOwogICAgIAogICAgIExMSU5UX1JFVFVSTihKU0FzeW5jRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZXhlY3V0YWJsZSwgc2NvcGUpKTsKQEAgLTE0MDgsOCArMTQwMCw3IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKQog
ICAgIExMSU5UX0JFR0lOKCk7CiAgICAgICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BOZXdBc3luY0dlbmVyYXRvckZ1bmNFeHA+KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tl
ZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2Nv
cGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNj
b3BlKCk7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5m
dW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgICAgICAKICAgICBMTElO
VF9SRVRVUk4oSlNBc3luY0dlbmVyYXRvckZ1bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWN1dGFibGUs
IHNjb3BlKSk7CkBAIC0xNDE5LDIyICsxNDEwLDI0IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9zZXRfZnVuY3Rpb25fbmFtZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgSlNGdW5jdGlv
biogZnVuYyA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGV4ZWMs
IGJ5dGVjb2RlLm1fZnVuY3Rpb24pKTsKLSAgICBKU1ZhbHVlIG5hbWUgPSBnZXRPcGVyYW5kKGV4
ZWMsIGJ5dGVjb2RlLm1fbmFtZSk7Ci0gICAgZnVuYy0+c2V0RnVuY3Rpb25OYW1lKGV4ZWMsIG5h
bWUpOworICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGdldE5vbkNv
bnN0YW50T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fZnVuY3Rpb24pKTsKKyAgICBKU1Zh
bHVlIG5hbWUgPSBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9uYW1lKTsKKyAgICBm
dW5jLT5zZXRGdW5jdGlvbk5hbWUoZ2xvYmFsT2JqZWN0LCBuYW1lKTsKICAgICBMTElOVF9FTkQo
KTsKIH0KIAotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCitzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsKENhbGxGcmFtZSog
Y2FsbGVlRnJhbWUsIEpTVmFsdWUgY2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CiB7CiAgICAgc2xvd1BhdGhMb2coIlBlcmZvcm1pbmcgaG9zdCBjYWxsLlxuIik7CiAgICAgCi0g
ICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUt
PmNhbGxlckZyYW1lKCk7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxs
ZXJDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9j
ay0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKLSAgICBleGVjQ2FsbGVlLT5jbGVh
clJldHVyblBDKCk7CisgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhudWxscHRyKTsKKyAg
ICBjYWxsZWVGcmFtZS0+Y2xlYXJSZXR1cm5QQygpOwogCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZv
ckNhbGwpIHsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC0xNDQzLDE2ICsxNDM2LDE2
IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwKICAgICAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENh
bGxUeXBlOjpKUyk7CiAgICAgCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6SG9z
dCkgewotICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlY0Nh
bGxlZSk7Ci0gICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVl
KSk7Ci0gICAgICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qo
dm0pLCBleGVjQ2FsbGVlKSk7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2Fs
bGVlLCBleGVjQ2FsbGVlLCBMTEludDo6Z2V0Q29kZVB0cihnZXRIb3N0Q2FsbFJldHVyblZhbHVl
KSwgQ0Z1bmN0aW9uUHRyVGFnKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxs
ZWUoYXNPYmplY3QoY2FsbGVlKSk7CisgICAgICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxs
ZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSkpOworICAgICAgICAgICAgTExJTlRf
Q0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgTExJbnQ6OmdldENvZGVQdHIo
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSksIENGdW5jdGlvblB0clRhZyk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHNsb3dQYXRoTG9nKCJDYWxsIGNhbGxlZSBpcyBub3QgYSBmdW5jdGlv
bjogIiwgY2FsbGVlLCAiXG4iKTsKIAogICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5
cGU6Ok5vbmUpOwotICAgICAgICBMTElOVF9DQUxMX1RIUk9XKGV4ZWMsIGNyZWF0ZU5vdEFGdW5j
dGlvbkVycm9yKGV4ZWMsIGNhbGxlZSkpOworICAgICAgICBMTElOVF9DQUxMX1RIUk9XKGdsb2Jh
bE9iamVjdCwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsK
ICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKQEAgLTE0NjMs
MjUgKzE0NTYsMjcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLAogICAgIEFTU0VSVChjb25zdHJ1
Y3RUeXBlICE9IENvbnN0cnVjdFR5cGU6OkpTKTsKICAgICAKICAgICBpZiAoY29uc3RydWN0VHlw
ZSA9PSBDb25zdHJ1Y3RUeXBlOjpIb3N0KSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWNDYWxsZWUpOwotICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUo
YXNPYmplY3QoY2FsbGVlKSk7Ci0gICAgICAgIHZtLmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oYXNPYmplY3QoY2FsbGVl
KS0+Z2xvYmFsT2JqZWN0KHZtKSwgZXhlY0NhbGxlZSkpOwotICAgICAgICBMTElOVF9DQUxMX1JF
VFVSTihleGVjQ2FsbGVlLCBleGVjQ2FsbGVlLCBMTEludDo6Z2V0Q29kZVB0cihnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKSwgQ0Z1bmN0aW9uUHRyVGFnKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOworICAgICAgICBjYWxsZWVGcmFtZS0+c2V0
Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOworICAgICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0
KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKSk7CisgICAgICAgIExMSU5U
X0NBTExfUkVUVVJOKGdsb2JhbE9iamVjdCwgY2FsbGVlRnJhbWUsIExMSW50OjpnZXRDb2RlUHRy
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpLCBDRnVuY3Rpb25QdHJUYWcpOwogICAgIH0KICAgICAK
ICAgICBzbG93UGF0aExvZygiQ29uc3RydWN0b3IgY2FsbGVlIGlzIG5vdCBhIGZ1bmN0aW9uOiAi
LCBjYWxsZWUsICJcbiIpOwogCiAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0
VHlwZTo6Tm9uZSk7Ci0gICAgTExJTlRfQ0FMTF9USFJPVyhleGVjLCBjcmVhdGVOb3RBQ29uc3Ry
dWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKKyAgICBMTElOVF9DQUxMX1RIUk9XKGdsb2JhbE9i
amVjdCwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBjYWxsZWUpKTsK
IH0KIAotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTVmFsdWUgY2FsbGVlQXNWYWx1
ZSwgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IG51bGxwdHIpCitpbmxpbmUgU2xv
d1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSwgTExJbnRDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA9IG51bGxwdHIpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0g
ZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZXJDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpOworICAgIFZNJiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIHNsb3dQYXRoTG9nRigi
UGVyZm9ybWluZyBjYWxsIHdpdGggcmVjb3JkZWQgUEMgPSAlcFxuIiwgZXhlYy0+Y3VycmVudFZQ
QygpKTsKKyAgICBzbG93UGF0aExvZ0YoIlBlcmZvcm1pbmcgY2FsbCB3aXRoIHJlY29yZGVkIFBD
ID0gJXBcbiIsIGNhbGxGcmFtZS0+Y3VycmVudFZQQygpKTsKICAgICAKICAgICBKU0NlbGwqIGNh
bGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKICAgICBp
ZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7CkBAIC0xNDkwLDQwICsxNDg1LDM4IEBAIGlubGlu
ZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luCiAgICAgICAgICAgICBBU1NFUlQoISFjb2RlUHRyKTsKIAogICAg
ICAgICAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7
Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLQogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2Fs
bGVyQ29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGlu
ayh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uLCBjb2RlUHRyKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgSlNFbnRyeVB0clRhZyk7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JF
VFVSTihleGVjLCBleGVjQ2FsbGVlLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIEpTRW50
cnlQdHJUYWcpOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZ2xvYmFsT2JqZWN0LCBj
YWxsZWVGcmFtZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsK
ICAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxl
SG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCkpOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgaGFuZGxlSG9zdENhbGwoY2FsbGVlRnJhbWUsIGNh
bGxlZUFzVmFsdWUsIGtpbmQpKTsKICAgICB9CiAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganND
YXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgSlNTY29wZSogc2Nv
cGUgPSBjYWxsZWUtPnNjb3BlVW5jaGVja2VkKCk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1
dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CiAgICAgaWYgKGV4ZWN1dGFibGUt
PmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIAogICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBm
dW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5ub3RDb25zdHJ1Y3QpCi0gICAgICAgICAgICBMTElOVF9DQUxMX1RIUk9XKGV4ZWMsIGNy
ZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOworICAgICAgICAgICAgTExJ
TlRfQ0FMTF9USFJPVyhnbG9iYWxPYmplY3QsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGds
b2JhbE9iamVjdCwgY2FsbGVlKSk7CiAKLSAgICAgICAgQ29kZUJsb2NrKiogY29kZUJsb2NrU2xv
dCA9IGV4ZWNDYWxsZWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAgICBDb2RlQmxvY2sq
KiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwogICAg
ICAgICBFeGNlcHRpb24qIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhl
Y3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsICpjb2Rl
QmxvY2tTbG90KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpID09IGVycm9yKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGVycm9yKSkKLSAgICAgICAgICAg
IExMSU5UX0NBTExfVEhST1coZXhlYywgZXJyb3IpOworICAgICAgICAgICAgTExJTlRfQ0FMTF9U
SFJPVyhnbG9iYWxPYmplY3QsIGVycm9yKTsKICAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9j
a1Nsb3Q7CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgICAgICBBcml0eUNoZWNrTW9k
ZSBhcml0eTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkK
KyAgICAgICAgaWYgKGNhbGxlZUZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCiAgICAgICAg
ICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBh
cml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKQEAgLTE1MzMsMjAgKzE1MjYsMTggQEAgaW5s
aW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW4KICAgICBBU1NFUlQoISFjb2RlUHRyKTsKICAgICAKICAgICBp
ZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8pIHsKLSAgICAgICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLQogICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKICAg
ICAgICAgY2FsbExpbmtJbmZvLT5saW5rKHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSwgY29k
ZVB0cik7CiAgICAgICAgIGlmIChjb2RlQmxvY2spCi0gICAgICAgICAgICBjb2RlQmxvY2stPmxp
bmtJbmNvbWluZ0NhbGwoZXhlYywgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+bGlua0luY29taW5nQ2FsbChjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CiAgICAgfQogCiAg
ICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgSlNFbnRy
eVB0clRhZyk7Ci0gICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwgY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBMTElOVF9DQUxMX1JF
VFVSTihnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIEpTRW50cnlQdHJUYWcpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgZ2VuZXJpY0NhbGwoRXhlY1N0YXRlKiBleGVjLCBPcCYmIGJ5dGVj
b2RlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitpbmxpbmUgU2xvd1BhdGhSZXR1cm5U
eXBlIGdlbmVyaWNDYWxsKENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgT3AmJiBieXRlY29kZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8v
IFRoaXMgbmVlZHMgdG86CiAgICAgLy8gLSBTZXQgdXAgYSBjYWxsIGZyYW1lLgpAQCAtMTU1NCwz
NCArMTU0NSwzNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVyaWNDYWxsKEV4ZWNT
dGF0ZSogZXhlYywgT3AmJiBieXRlY29kZSwgQ29kZVNwZWNpYQogICAgIC8vIC0gSWYgcG9zc2li
bGUsIGxpbmsgdGhlIGNhbGwncyBpbmxpbmUgY2FjaGUuCiAgICAgLy8gLSBSZXR1cm4gYSB0dXBs
ZSBvZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUu
CiAgICAgCi0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChleGVjLCBieXRl
Y29kZS5tX2NhbGxlZSk7CisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChj
YWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKTsKICAgICAKLSAgICBFeGVjU3RhdGUqIGV4ZWND
YWxsZWUgPSBleGVjIC0gYnl0ZWNvZGUubV9hcmd2OworICAgIENhbGxGcmFtZSogY2FsbGVlRnJh
bWUgPSBjYWxsRnJhbWUgLSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgCi0gICAgZXhlY0NhbGxlZS0+
c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBleGVj
Q2FsbGVlLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVl
OwotICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlckZyYW1lKGV4ZWMpOworICAgIGNhbGxlZUZyYW1l
LT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOworICAgIGNh
bGxlZUZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1Zh
bHVlOworICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJhbWUpOwogICAgIAot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoZXhlYyk7Ci0gICAgcmV0dXJu
IHNldFVwQ2FsbChleGVjQ2FsbGVlLCBraW5kLCBjYWxsZWVBc1ZhbHVlLCAmbWV0YWRhdGEubV9j
YWxsTGlua0luZm8pOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29k
ZUJsb2NrKTsKKyAgICByZXR1cm4gc2V0VXBDYWxsKGNhbGxlZUZyYW1lLCBraW5kLCBjYWxsZWVB
c1ZhbHVlLCAmbWV0YWRhdGEubV9jYWxsTGlua0luZm8pOwogfQogCiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfY2FsbCkKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoZXhlYywgcGMtPmFz
PE9wQ2FsbD4oKSwgQ29kZUZvckNhbGwpKTsKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgZ2VuZXJpY0NhbGwoY29kZUJs
b2NrLCBjYWxsRnJhbWUsIHBjLT5hczxPcENhbGw+KCksIENvZGVGb3JDYWxsKSk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGwpCiB7CiAgICAgTExJTlRfQkVH
SU5fTk9fU0VUX1BDKCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVy
aWNDYWxsKGV4ZWMsIHBjLT5hczxPcFRhaWxDYWxsPigpLCBDb2RlRm9yQ2FsbCkpOworICAgIFVO
VVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBnZW5lcmljQ2FsbChjb2RlQmxvY2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wVGFpbENhbGw+
KCksIENvZGVGb3JDYWxsKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
b25zdHJ1Y3QpCiB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7Ci0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIGdlbmVyaWNDYWxsKGV4ZWMsIHBjLT5hczxPcENvbnN0cnVj
dD4oKSwgQ29kZUZvckNvbnN0cnVjdCkpOworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBnZW5lcmljQ2FsbChjb2RlQmxv
Y2ssIGNhbGxGcmFtZSwgcGMtPmFzPE9wQ29uc3RydWN0PigpLCBDb2RlRm9yQ29uc3RydWN0KSk7
CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl92YXJh
cmdzKQpAQCAtMTU5NywzNSArMTU5MSwzNSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfc2l6ZV9mcmFtZV9mb3JfdmFyYXJncykKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogewog
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCk7CiAgICAgICAg
IG51bVVzZWRTdGFja1Nsb3RzID0gLWJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgpOwotICAg
ICAgICBhcmd1bWVudHMgPSBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fYXJndW1lbnRzKTsK
KyAgICAgICAgYXJndW1lbnRzID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fYXJn
dW1lbnRzKTsKICAgICAgICAgZmlyc3RWYXJBcmcgPSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczogewog
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVGFpbENhbGxWYXJhcmdzPigpOwogICAg
ICAgICBudW1Vc2VkU3RhY2tTbG90cyA9IC1ieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsK
LSAgICAgICAgYXJndW1lbnRzID0gZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2FyZ3VtZW50
cyk7CisgICAgICAgIGFyZ3VtZW50cyA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5t
X2FyZ3VtZW50cyk7CiAgICAgICAgIGZpcnN0VmFyQXJnID0gYnl0ZWNvZGUubV9maXJzdFZhckFy
ZzsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCk7
CiAgICAgICAgIG51bVVzZWRTdGFja1Nsb3RzID0gLWJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNl
dCgpOwotICAgICAgICBhcmd1bWVudHMgPSBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fYXJn
dW1lbnRzKTsKKyAgICAgICAgYXJndW1lbnRzID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVj
b2RlLm1fYXJndW1lbnRzKTsKICAgICAgICAgZmlyc3RWYXJBcmcgPSBieXRlY29kZS5tX2ZpcnN0
VmFyQXJnOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0g
c2l6ZUZyYW1lRm9yVmFyYXJncyhleGVjLCB2bSwgYXJndW1lbnRzLCBudW1Vc2VkU3RhY2tTbG90
cywgZmlyc3RWYXJBcmcpOwotICAgIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIGV4
ZWMpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNpemVGcmFtZUZvclZhcmFyZ3MoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIHZtLCBhcmd1bWVudHMsIG51bVVzZWRTdGFja1Nsb3RzLCBmaXJzdFZh
ckFyZyk7CisgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJT04oZ2xvYmFsT2JqZWN0KTsKICAg
ICAKLSAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUgPSBjYWxsZWVGcmFtZUZvclZhcmFyZ3MoZXhl
YywgbnVtVXNlZFN0YWNrU2xvdHMsIGxlbmd0aCArIDEpOworICAgIENhbGxGcmFtZSogY2FsbGVl
RnJhbWUgPSBjYWxsZWVGcmFtZUZvclZhcmFyZ3MoY2FsbEZyYW1lLCBudW1Vc2VkU3RhY2tTbG90
cywgbGVuZ3RoICsgMSk7CiAgICAgdm0udmFyYXJnc0xlbmd0aCA9IGxlbmd0aDsKLSAgICB2bS5u
ZXdDYWxsRnJhbWVSZXR1cm5WYWx1ZSA9IGV4ZWNDYWxsZWU7CisgICAgdm0ubmV3Q2FsbEZyYW1l
UmV0dXJuVmFsdWUgPSBjYWxsZWVGcmFtZTsKIAotICAgIExMSU5UX1JFVFVSTl9DQUxMRUVfRlJB
TUUoZXhlY0NhbGxlZSk7CisgICAgTExJTlRfUkVUVVJOX0NBTExFRV9GUkFNRShjYWxsZWVGcmFt
ZSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW1lX2Zvcl9m
b3J3YXJkX2FyZ3VtZW50cykKQEAgLTE2MzcsMTUgKzE2MzEsMTUgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbWVfZm9yX2ZvcndhcmRfYXJndW1lbnRzKQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KCk7CiAgICAg
dW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMgPSAtYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0
KCk7CiAKLSAgICB1bnNpZ25lZCBhcmd1bWVudHMgPSBzaXplRnJhbWVGb3JGb3J3YXJkQXJndW1l
bnRzKGV4ZWMsIHZtLCBudW1Vc2VkU3RhY2tTbG90cyk7Ci0gICAgTExJTlRfQ0FMTF9DSEVDS19F
WENFUFRJT04oZXhlYywgZXhlYyk7CisgICAgdW5zaWduZWQgYXJndW1lbnRzID0gc2l6ZUZyYW1l
Rm9yRm9yd2FyZEFyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgdm0sIG51bVVzZWRT
dGFja1Nsb3RzKTsKKyAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihnbG9iYWxPYmplY3Qp
OwogCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gY2FsbGVlRnJhbWVGb3JWYXJhcmdzKGV4
ZWMsIG51bVVzZWRTdGFja1Nsb3RzLCBhcmd1bWVudHMgKyAxKTsKKyAgICBDYWxsRnJhbWUqIGNh
bGxlZUZyYW1lID0gY2FsbGVlRnJhbWVGb3JWYXJhcmdzKGNhbGxGcmFtZSwgbnVtVXNlZFN0YWNr
U2xvdHMsIGFyZ3VtZW50cyArIDEpOwogCiAgICAgdm0udmFyYXJnc0xlbmd0aCA9IGFyZ3VtZW50
czsKLSAgICB2bS5uZXdDYWxsRnJhbWVSZXR1cm5WYWx1ZSA9IGV4ZWNDYWxsZWU7CisgICAgdm0u
bmV3Q2FsbEZyYW1lUmV0dXJuVmFsdWUgPSBjYWxsZWVGcmFtZTsKIAotICAgIExMSU5UX1JFVFVS
Tl9DQUxMRUVfRlJBTUUoZXhlY0NhbGxlZSk7CisgICAgTExJTlRfUkVUVVJOX0NBTExFRV9GUkFN
RShjYWxsZWVGcmFtZSk7CiB9CiAKIGVudW0gY2xhc3MgU2V0QXJndW1lbnRzV2l0aCB7CkBAIC0x
NjU0LDEzMiArMTY0OCwxMzMgQEAgZW51bSBjbGFzcyBTZXRBcmd1bWVudHNXaXRoIHsKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdz
U2V0dXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgU2V0QXJndW1lbnRzV2l0aCBzZXQpCitpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSW5zdHJ1
Y3Rpb24qIHBjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFNldEFyZ3VtZW50c1dpdGgg
c2V0KQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOworCiAgICAgLy8gVGhpcyBuZWVk
cyB0bzoKICAgICAvLyAtIEZpZ3VyZSBvdXQgd2hhdCB0byBjYWxsIGFuZCBjb21waWxlIGl0IGlm
IG5lY2Vzc2FyeS4KICAgICAvLyAtIFJldHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRy
ZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcgY2FsbCBmcmFtZS4KIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3A+KCk7Ci0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0T3BlcmFuZChl
eGVjLCBieXRlY29kZS5tX2NhbGxlZSk7CisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gZ2V0
T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKTsKIAotICAgIEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSA9IHZtLm5ld0NhbGxGcmFtZVJldHVyblZhbHVlOworICAgIENhbGxGcmFtZSog
Y2FsbGVlRnJhbWUgPSB2bS5uZXdDYWxsRnJhbWVSZXR1cm5WYWx1ZTsKIAogICAgIGlmIChzZXQg
PT0gU2V0QXJndW1lbnRzV2l0aDo6T2JqZWN0KSB7Ci0gICAgICAgIHNldHVwVmFyYXJnc0ZyYW1l
QW5kU2V0VGhpcyhleGVjLCBleGVjQ2FsbGVlLCBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlKSwgZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX2FyZ3VtZW50cyksIGJ5dGVj
b2RlLm1fZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgpOwotICAgICAgICBMTElOVF9DQUxM
X0NIRUNLX0VYQ0VQVElPTihleGVjLCBleGVjKTsKKyAgICAgICAgc2V0dXBWYXJhcmdzRnJhbWVB
bmRTZXRUaGlzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgZ2V0T3BlcmFu
ZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUs
IGJ5dGVjb2RlLm1fYXJndW1lbnRzKSwgYnl0ZWNvZGUubV9maXJzdFZhckFyZywgdm0udmFyYXJn
c0xlbmd0aCk7CisgICAgICAgIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGdsb2JhbE9iamVj
dCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lQW5kU2V0
VGhpcyhleGVjLCBleGVjQ2FsbGVlLCBnZXRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlKSwgdm0udmFyYXJnc0xlbmd0aCk7CisgICAgICAgIHNldHVwRm9yd2FyZEFyZ3VtZW50c0Zy
YW1lQW5kU2V0VGhpcyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FsbGVlRnJhbWUsIGdldE9w
ZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3RoaXNWYWx1ZSksIHZtLnZhcmFyZ3NMZW5ndGgp
OwogCi0gICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVyRnJhbWUoZXhlYyk7Ci0gICAgZXhlY0NhbGxl
ZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKLSAg
ICBleGVjLT5zZXRDdXJyZW50VlBDKHBjKTsKKyAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJh
bWUoY2FsbEZyYW1lKTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMo
cGMpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIHNldFVwQ2FsbChleGVj
Q2FsbGVlLCBraW5kLCBjYWxsZWVBc1ZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIHNldFVwQ2FsbChjYWxsZWVGcmFtZSwga2luZCwgY2FsbGVlQXNWYWx1ZSkpOwog
fQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhcmdzKQogewotICAg
IHJldHVybiB2YXJhcmdzU2V0dXA8T3BDYWxsVmFyYXJncz4oZXhlYywgcGMsIENvZGVGb3JDYWxs
LCBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpOworICAgIHJldHVybiB2YXJhcmdzU2V0dXA8T3BD
YWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6
Ok9iamVjdCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90YWlsX2NhbGxf
dmFyYXJncykKIHsKLSAgICByZXR1cm4gdmFyYXJnc1NldHVwPE9wVGFpbENhbGxWYXJhcmdzPihl
eGVjLCBwYywgQ29kZUZvckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0
dXJuIHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsVmFyYXJncz4oY2FsbEZyYW1lLCBwYywgQ29kZUZv
ckNhbGwsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiB7Ci0gICAgcmV0dXJu
IHZhcmFyZ3NTZXR1cDxPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cz4oZXhlYywgcGMsIENvZGVG
b3JDYWxsLCBTZXRBcmd1bWVudHNXaXRoOjpDdXJyZW50QXJndW1lbnRzKTsKKyAgICByZXR1cm4g
dmFyYXJnc1NldHVwPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjYWxsRnJhbWUsIHBjLCBD
b2RlRm9yQ2FsbCwgU2V0QXJndW1lbnRzV2l0aDo6Q3VycmVudEFyZ3VtZW50cyk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfdmFyYXJncykKIHsKLSAgICBy
ZXR1cm4gdmFyYXJnc1NldHVwPE9wQ29uc3RydWN0VmFyYXJncz4oZXhlYywgcGMsIENvZGVGb3JD
b25zdHJ1Y3QsIFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CisgICAgcmV0dXJuIHZhcmFyZ3NT
ZXR1cDxPcENvbnN0cnVjdFZhcmFyZ3M+KGNhbGxGcmFtZSwgcGMsIENvZGVGb3JDb25zdHJ1Y3Qs
IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCk7CiB9CiAKLWlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgY29tbW9uQ2FsbEV2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiogcGMs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiByZXR1cm5Qb2ludCkKK2lubGlu
ZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IGNvbnN0IEluc3RydWN0aW9uKiBwYywgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IHJldHVyblBvaW50KQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBKU1ZhbHVlIGNhbGxlZUFz
VmFsdWUgPSBnZXROb25Db25zdGFudE9wZXJhbmQoZXhlYywgYnl0ZWNvZGUubV9jYWxsZWUpOwor
ICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGdldE5vbkNvbnN0YW50T3BlcmFuZChjYWxsRnJh
bWUsIGJ5dGVjb2RlLm1fY2FsbGVlKTsKICAgICAKLSAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUg
PSBleGVjIC0gYnl0ZWNvZGUubV9hcmd2OworICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBj
YWxsRnJhbWUgLSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgCi0gICAgZXhlY0NhbGxlZS0+c2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsKLSAgICBleGVjQ2FsbGVl
LT5zZXRDYWxsZXJGcmFtZShleGVjKTsKLSAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOwotICAgIGV4ZWNDYWxsZWUtPnNldFJl
dHVyblBDKHJldHVyblBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgIGV4ZWNDYWxsZWUt
PnNldENvZGVCbG9jaygwKTsKLSAgICBleGVjLT5zZXRDdXJyZW50VlBDKHBjKTsKKyAgICBjYWxs
ZWVGcmFtZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0ZWNvZGUubV9hcmdjKTsK
KyAgICBjYWxsZWVGcmFtZS0+c2V0Q2FsbGVyRnJhbWUoY2FsbEZyYW1lKTsKKyAgICBjYWxsZWVG
cmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsK
KyAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9pbnQuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgY2FsbGVlRnJhbWUtPnNldENvZGVCbG9jayhudWxscHRyKTsKKyAgICBjYWxs
RnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwogICAgIAogICAgIGlmICghaXNIb3N0RnVuY3Rpb24o
Y2FsbGVlQXNWYWx1ZSwgZ2xvYmFsRnVuY0V2YWwpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgc2V0VXBDYWxsKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVB
c1ZhbHVlKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBzZXRVcENh
bGwoY2FsbGVlRnJhbWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc1ZhbHVlKSk7CiAgICAgCi0gICAg
dm0uaG9zdENhbGxSZXR1cm5WYWx1ZSA9IGV2YWwoZXhlY0NhbGxlZSk7Ci0gICAgTExJTlRfQ0FM
TF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZSksIENGdW5jdGlvblB0clRhZyk7CisgICAgdm0uaG9zdENhbGxSZXR1cm5WYWx1
ZSA9IGV2YWwoZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSk7CisgICAgTExJTlRfQ0FMTF9SRVRV
Uk4oZ2xvYmFsT2JqZWN0LCBjYWxsZWVGcmFtZSwgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENh
bGxSZXR1cm5WYWx1ZSksIENGdW5jdGlvblB0clRhZyk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQogewotICAgIHJldHVybiBjb21tb25DYWxsRXZh
bChleGVjLCBwYywgTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4obGxpbnRfZ2VuZXJp
Y19yZXR1cm5fcG9pbnQpKTsKKyAgICByZXR1cm4gY29tbW9uQ2FsbEV2YWwoY2FsbEZyYW1lLCBw
YywgTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4obGxpbnRfZ2VuZXJpY19yZXR1cm5f
cG9pbnQpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfZXZhbF93
aWRlMTYpCiB7Ci0gICAgcmV0dXJuIGNvbW1vbkNhbGxFdmFsKGV4ZWMsIHBjLCBMTEludDo6Z2V0
V2lkZTE2Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9nZW5lcmljX3JldHVybl9wb2ludCkp
OworICAgIHJldHVybiBjb21tb25DYWxsRXZhbChjYWxsRnJhbWUsIHBjLCBMTEludDo6Z2V0V2lk
ZTE2Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihsbGludF9nZW5lcmljX3JldHVybl9wb2ludCkpOwog
fQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsX3dpZGUzMikKIHsK
LSAgICByZXR1cm4gY29tbW9uQ2FsbEV2YWwoZXhlYywgcGMsIExMSW50OjpnZXRXaWRlMzJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+KGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50KSk7CisgICAgcmV0
dXJuIGNvbW1vbkNhbGxFdmFsKGNhbGxGcmFtZSwgcGMsIExMSW50OjpnZXRXaWRlMzJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+KGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50KSk7CiB9CiAKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wU3RyY2F0PigpOwotICAgIExMSU5UX1JFVFVS
Tihqc1N0cmluZ0Zyb21SZWdpc3RlckFycmF5KGV4ZWMsICZleGVjLT51bmNoZWNrZWRSKGJ5dGVj
b2RlLm1fc3JjKSwgYnl0ZWNvZGUubV9jb3VudCkpOworICAgIExMSU5UX1JFVFVSTihqc1N0cmlu
Z0Zyb21SZWdpc3RlckFycmF5KGdsb2JhbE9iamVjdCwgJmNhbGxGcmFtZS0+dW5jaGVja2VkUihi
eXRlY29kZS5tX3NyYyksIGJ5dGVjb2RlLm1fY291bnQpKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBMTElOVF9SRVRV
Uk4oZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX3NyYykudG9QcmltaXRpdmUoZXhlYykpOwor
ICAgIExMSU5UX1JFVFVSTihnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV9zcmMpLnRv
UHJpbWl0aXZlKGdsb2JhbE9iamVjdCkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfdGhyb3cpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wVGhyb3c+KCk7Ci0gICAgTExJTlRfVEhST1coZ2V0T3BlcmFuZChleGVjLCBieXRl
Y29kZS5tX3ZhbHVlKSk7CisgICAgTExJTlRfVEhST1coZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5
dGVjb2RlLm1fdmFsdWUpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2hh
bmRsZV90cmFwcykKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKICAgICBBU1NFUlQo
dm0ubmVlZFRyYXBIYW5kbGluZygpKTsKLSAgICB2bS5oYW5kbGVUcmFwcyhleGVjKTsKKyAgICB2
bS5oYW5kbGVUcmFwcyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHBjKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKHRocm93U2NvcGUuZXhjZXB0aW9uKCksIGV4ZWMp
OworICAgIExMSU5UX1JFVFVSTl9UV08odGhyb3dTY29wZS5leGNlcHRpb24oKSwgZ2xvYmFsT2Jq
ZWN0KTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlYnVnKQogewogICAg
IExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcERlYnVnPigpOwot
ICAgIHZtLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBieXRlY29kZS5tX2RlYnVnSG9va1R5cGUp
OworICAgIHZtLmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fZGVidWdI
b29rVHlwZSk7CiAgICAgCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9oYW5kbGVfZXhjZXB0aW9uKQogewotICAgIExMSU5UX0JFR0lOX05PX1NF
VF9QQygpOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBnZW5lcmljVW53aW5k
KHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBnZW5lcmljVW53aW5kKHZt
LCBjYWxsRnJhbWUpOwogICAgIExMSU5UX0VORF9JTVBMKCk7CiB9CiAKQEAgLTE3ODcsMzIgKzE3
ODIsMzIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKQog
ewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEZy
b21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMp
OwotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09i
amVjdCo+KGdldE5vbkNvbnN0YW50T3BlcmFuZChleGVjLCBieXRlY29kZS5tX3Njb3BlKSk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
dmFyKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXROb25Db25z
dGFudE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3Njb3BlKSk7CiAKICAgICAvLyBNb2R1
bGVWYXIgaXMgYWx3YXlzIGNvbnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29w
ZS4KICAgICBBU1NFUlQobWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgIT0gTW9k
dWxlVmFyKTsKIAotICAgIExMSU5UX1JFVFVSTihzY29wZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
IGlkZW50LCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNWYWx1ZSB7
CisgICAgTExJTlRfUkVUVVJOKHNjb3BlLT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBp
ZGVudCwgWyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIC0+IEpTVmFsdWUgewog
ICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBpZiAobWV0YWRhdGEubV9nZXRQdXRJ
bmZvLnJlc29sdmVNb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVVbmRlZmluZWRWYXJp
YWJsZUVycm9yKGV4ZWMsIGlkZW50KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVF
cnJvcihnbG9iYWxPYmplY3QsIGlkZW50KSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZSgpOwog
ICAgICAgICBpZiAoc2NvcGUtPmlzR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpIHsKICAgICAg
ICAgICAgIC8vIFdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBwcm92ZSB3ZSBuZWVkIGEgVERaIGNo
ZWNrLCB3ZSBtdXN0IHBlcmZvcm0gdGhlIGNoZWNrIG9uIHRoZSBzbG93IHBhdGguCi0gICAgICAg
ICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVudCk7CiAgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IGpzVERaVmFsdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVERaRXJyb3IoZXhlYykpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZVREWkVycm9yKGdsb2JhbE9iamVjdCkpOwogICAgICAgICB9CiAKLSAgICAgICAgQ29t
bW9uU2xvd1BhdGhzOjp0cnlDYWNoZUdldEZyb21TY29wZUdsb2JhbChleGVjLCB2bSwgYnl0ZWNv
ZGUsIHNjb3BlLCBzbG90LCBpZGVudCk7CisgICAgICAgIENvbW1vblNsb3dQYXRoczo6dHJ5Q2Fj
aGVHZXRGcm9tU2NvcGVHbG9iYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZtLCBieXRlY29k
ZSwgc2NvcGUsIHNsb3QsIGlkZW50KTsKIAogICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
ICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50KTsKKyAgICAgICAgICAgIHJldHVy
biBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgaWRlbnQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0pKTsKIH0KQEAgLTE4MjIsMTEgKzE4MTcsMTAgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSkKICAgICBMTElOVF9CRUdJTigpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0
PEpTT2JqZWN0Kj4oZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGV4ZWMsIGJ5dGVjb2RlLm1fc2NvcGUp
KTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0T3BlcmFuZChleGVjLCBieXRlY29kZS5tX3ZhbHVl
KTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXROb25Db25zdGFu
dE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3Njb3BlKSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IGdldE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX3ZhbHVlKTsKICAgICBpZiAobWV0
YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAg
ICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVudCA9IGpzQ2FzdDxKU0xleGlj
YWxFbnZpcm9ubWVudCo+KHNjb3BlKTsKICAgICAgICAgZW52aXJvbm1lbnQtPnZhcmlhYmxlQXQo
U2NvcGVPZmZzZXQobWV0YWRhdGEubV9vcGVyYW5kKSkuc2V0KHZtLCBlbnZpcm9ubWVudCwgdmFs
dWUpOwpAQCAtMTgzOSwyNSArMTgzMywyNSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcHV0X3RvX3Njb3BlKQogICAgICAgICBMTElOVF9FTkQoKTsKICAgICB9CiAKLSAgICBib29s
IGhhc1Byb3BlcnR5ID0gc2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KTsKKyAgICBib29s
IGhhc1Byb3BlcnR5ID0gc2NvcGUtPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgaWRlbnQpOwog
ICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIGlmIChoYXNQcm9wZXJ0eQogICAgICAg
ICAmJiBzY29wZS0+aXNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKQogICAgICAgICAmJiAhaXNJ
bml0aWFsaXphdGlvbihtZXRhZGF0YS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkp
KSB7CiAgICAgICAgIC8vIFdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBwcm92ZSB3ZSBuZWVkIGEg
VERaIGNoZWNrLCB3ZSBtdXN0IHBlcmZvcm0gdGhlIGNoZWNrIG9uIHRoZSBzbG93IHBhdGguCiAg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6R2V0KTsKLSAgICAgICAgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93
blByb3BlcnR5U2xvdChzY29wZSwgZXhlYywgaWRlbnQsIHNsb3QpOwotICAgICAgICBpZiAoc2xv
dC5nZXRWYWx1ZShleGVjLCBpZGVudCkgPT0ganNURFpWYWx1ZSgpKQotICAgICAgICAgICAgTExJ
TlRfVEhST1coY3JlYXRlVERaRXJyb3IoZXhlYykpOworICAgICAgICBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KHNjb3BlLCBnbG9iYWxPYmplY3QsIGlkZW50
LCBzbG90KTsKKyAgICAgICAgaWYgKHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBpZGVudCkg
PT0ganNURFpWYWx1ZSgpKQorICAgICAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVERaRXJyb3Io
Z2xvYmFsT2JqZWN0KSk7CiAgICAgfQogCiAgICAgaWYgKG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5y
ZXNvbHZlTW9kZSgpID09IFRocm93SWZOb3RGb3VuZCAmJiAhaGFzUHJvcGVydHkpCi0gICAgICAg
IExMSU5UX1RIUk9XKGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpKTsK
KyAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihnbG9iYWxP
YmplY3QsIGlkZW50KSk7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSwgY29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSwgUHV0UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCwgaXNJ
bml0aWFsaXphdGlvbihtZXRhZGF0YS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkp
KTsKLSAgICBzY29wZS0+bWV0aG9kVGFibGUodm0pLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCB2
YWx1ZSwgc2xvdCk7CisgICAgc2NvcGUtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHNjb3BlLCBnbG9i
YWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgQ29tbW9uU2xvd1BhdGhz
Ojp0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoZXhlYywgY29kZUJsb2NrLCBieXRlY29kZSwgc2Nv
cGUsIHNsb3QsIGlkZW50KTsKKyAgICBDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29w
ZUdsb2JhbChnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgYnl0ZWNvZGUsIHNjb3BlLCBzbG90LCBp
ZGVudCk7CiAKICAgICBMTElOVF9FTkQoKTsKIH0KQEAgLTE4NjUsMTEgKzE4NTksMTIgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSkKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9jaGVja19pZl9leGNlcHRpb25faXNfdW5jYXRjaGFibGVfYW5kX25v
dGlmeV9wcm9maWxlcikKIHsKICAgICBMTElOVF9CRUdJTigpOworICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwogICAgIFJFTEVBU0VfQVNTRVJUKCEhdGhyb3dTY29wZS5leGNlcHRpb24o
KSk7CiAKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCB0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgYml0d2lzZV9j
YXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKSk7Ci0gICAgTExJTlRfUkVUVVJO
X1RXTyhwYywgMCk7CisgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgbnVsbHB0cik7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUp
CkBAIC0xODc3LDEwICsxODcyLDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAgTExJTlRfQkVHSU4oKTsKICAgICAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwot
ICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBTaGFkb3dDaGlj
a2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwogICAgIFJFTEVBU0VfQVNT
RVJUKHNoYWRvd0NoaWNrZW4pOwotICAgIHNoYWRvd0NoaWNrZW4tPmxvZyh2bSwgZXhlYywgU2hh
ZG93Q2hpY2tlbjo6UGFja2V0Ojpwcm9sb2d1ZShleGVjLT5qc0NhbGxlZSgpLCBleGVjLCBleGVj
LT5jYWxsZXJGcmFtZSgpLCBzY29wZSkpOworICAgIHNoYWRvd0NoaWNrZW4tPmxvZyh2bSwgY2Fs
bEZyYW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnByb2xvZ3VlKGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSwgY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCksIHNjb3BlKSk7CiAgICAg
CiAgICAgTExJTlRfRU5EKCk7CiB9CkBAIC0xODkwLDE3ICsxODg1LDE3IEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKICAgICBMTElOVF9C
RUdJTigpOwogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5U
YWlsPigpOwotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKGV4
ZWMsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVu
Y2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBnZXROb25Db25zdGFudE9wZXJhbmQoY2FsbEZyYW1lLCBieXRlY29kZS5t
X3RoaXNWYWx1ZSk7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
Ynl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgoZXhlYy0+Y29kZUJsb2NrKCkt
PmJ5dGVjb2RlT2Zmc2V0KHBjKSk7CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KGNv
ZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQocGMpKTsKICNlbHNlCiAgICAgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KHBjKTsKICNlbmRpZgogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNr
ZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoc2hhZG93Q2hpY2tl
bik7Ci0gICAgc2hhZG93Q2hpY2tlbi0+bG9nKHZtLCBleGVjLCBTaGFkb3dDaGlja2VuOjpQYWNr
ZXQ6OnRhaWwoZXhlYywgdGhpc1ZhbHVlLCBzY29wZSwgZXhlYy0+Y29kZUJsb2NrKCksIGNhbGxT
aXRlSW5kZXgpKTsKKyAgICBzaGFkb3dDaGlja2VuLT5sb2codm0sIGNhbGxGcmFtZSwgU2hhZG93
Q2hpY2tlbjo6UGFja2V0Ojp0YWlsKGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29wZSwgY29kZUJs
b2NrLCBjYWxsU2l0ZUluZGV4KSk7CiAgICAgCiAgICAgTExJTlRfRU5EKCk7CiB9CkBAIC0xOTA5
LDEyICsxOTA0LDEyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX2Nh
dGNoKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAKLSAgICBleGVjLT5jb2RlQmxvY2soKS0+ZW5z
dXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNldChleGVjLT5ieXRlY29k
ZU9mZnNldCgpKTsKKyAgICBjb2RlQmxvY2stPmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVk
Rm9yQnl0ZWNvZGVPZmZzZXQoY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldCgpKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDYXRjaD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKTsKICAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKLSAgICAgICAgcHJvZmlsZS5tX2J1Y2tl
dHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFu
ZCkuanNWYWx1ZSgpKTsKKyAgICAgICAgcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjpl
bmNvZGUoY2FsbEZyYW1lLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkp
OwogICAgIH0pOwogCiAgICAgTExJTlRfRU5EKCk7CkBAIC0xOTI0LDcgKzE5MTksNyBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3VwZXJfc2FtcGxlcl9iZWdpbikKIHsKICAgICAv
LyBGSVhNRTogSXQgc2VlbXMgbGlrZSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyB0aGlzIGluIGFz
bSBidXQgbGxpbnQgZG9lc24ndCBzZWVtIHRvIGxpa2UgZ2xvYmFsIHZhcmlhYmxlcy4KICAgICAv
LyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk0MzgKLSAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAg
Z19zdXBlclNhbXBsZXJDb3VudCsrOwogICAgIExMSU5UX0VORF9JTVBMKCk7CiB9CkBAIC0xOTMz
LDI2ICsxOTI4LDI5IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdXBlcl9zYW1w
bGVyX2VuZCkKIHsKICAgICAvLyBGSVhNRTogSXQgc2VlbXMgbGlrZSB3ZSBzaG91bGQgYmUgYWJs
ZSB0byBkbyB0aGlzIGluIGFzbSBidXQgbGxpbnQgZG9lc24ndCBzZWVtIHRvIGxpa2UgZ2xvYmFs
IHZhcmlhYmxlcy4KICAgICAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzk0MzgKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgZ19zdXBlclNhbXBsZXJDb3VudC0tOwogICAgIExMSU5UX0VORF9J
TVBMKCk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGluZV9q
dW1wX3RhcmdldCkKIHsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwotICAgIHBjID0gY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wVGFyZ2V0KHBjKTsKKyAgICBw
YyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm91dE9mTGluZUp1bXBUYXJnZXQocGMpOwogICAg
IExMSU5UX0VORF9JTVBMKCk7CiB9CiAKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxs
aW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vycm9yKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHBy
b3RvRnJhbWUpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdm0tPnRvcENhbGxGcmFtZTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BDYWxsRnJhbWU7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAotICAgIGlmICghZXhlYykKLSAgICAgICAg
ZXhlYyA9IHByb3RvRnJhbWUtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKnZtKS0+Z2xvYmFsRXhl
YygpOwotICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAvLyBG
SVhNRTogV3JvbmcuCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG51bGxwdHI7
CisgICAgaWYgKGNhbGxGcmFtZSkKKyAgICAgICAgZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgZWxzZQorICAgICAgICBnbG9iYWxPYmplY3QgPSBw
cm90b0ZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCp2bSk7CisgICAgdGhyb3dTdGFja092
ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dCgwLCAwKTsKIH0KIApAQCAtMTk2NCw5ICsxOTYyLDkgQEAgZXh0ZXJuICJDIiBTbG93UGF0aFJl
dHVyblR5cGUgbGxpbnRfc3RhY2tfY2hlY2tfYXRfdm1fZW50cnkoVk0qIHZtLCBSZWdpc3Rlciog
bmUKIH0KICNlbmRpZgogCi1leHRlcm4gIkMiIHZvaWQgbGxpbnRfd3JpdGVfYmFycmllcl9zbG93
KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQorZXh0ZXJuICJDIiB2b2lkIGxsaW50X3dy
aXRlX2JhcnJpZXJfc2xvdyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNDZWxsKiBjZWxsKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+dm0oKTsKICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjZWxsKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAppbmRleCBhZTc4ZjRhOGM1
YzBhZGU2ODU4NWVhZDNhY2RiNDMzYTg4ZDJiNmUyLi4yZmYyOGIwMDZiYzIyMzMzMGNjNjc4NjVh
MTY3OTRhOTBlN2U3YWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuaApAQCAtMzEsMTggKzMxLDE3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
Q2FsbEZyYW1lOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogc3RydWN0IEluc3RydWN0
aW9uOwogc3RydWN0IFByb3RvQ2FsbEZyYW1lOwogCiBuYW1lc3BhY2UgTExJbnQgewogCi1leHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV9vcGVyYW5kKEV4ZWNTdGF0ZSos
IGNvbnN0IEluc3RydWN0aW9uKiwgaW50IGZyb21XaGVyZSwgaW50IG9wZXJhbmQpOwotZXh0ZXJu
ICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdHJhY2VfdmFsdWUoRXhlY1N0YXRlKiwgY29u
c3QgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdoZXJlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCk7
Ci1leHRlcm4gIkMiIHZvaWQgbGxpbnRfd3JpdGVfYmFycmllcl9zbG93KEV4ZWNTdGF0ZSosIEpT
Q2VsbCopIFdURl9JTlRFUk5BTDsKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50
X3RyYWNlX29wZXJhbmQoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qLCBpbnQgZnJvbVdo
ZXJlLCBpbnQgb3BlcmFuZCk7CitleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90
cmFjZV92YWx1ZShDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiosIGludCBmcm9tV2hlcmUs
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKTsKK2V4dGVybiAiQyIgdm9pZCBsbGludF93cml0ZV9i
YXJyaWVyX3Nsb3coQ2FsbEZyYW1lKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogCiAjZGVmaW5l
IExMSU5UX1NMT1dfUEFUSF9ERUNMKG5hbWUpIFwKLSAgICBleHRlcm4gIkMiIFNsb3dQYXRoUmV0
dXJuVHlwZSBsbGludF8jI25hbWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiog
cGMpCisgICAgZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfIyNuYW1lKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVjdGlvbiogcGMpCiAKICNkZWZpbmUgTExJTlRf
U0xPV19QQVRIX0hJRERFTl9ERUNMKG5hbWUpIFwKICAgICBMTElOVF9TTE9XX1BBVEhfREVDTChu
YW1lKSBXVEZfSU5URVJOQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCAzZjYwODE3OTQzZGFiMjZlMDYwNTcyZGI4N2E3
MWJkYjk4NGIzYzI5Li5iY2ZhMjUyZTRlZjBkNzYyN2JmZTRhMWJjMmVmNzBhYzlhNGM1YjkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCkBAIC01NzUsNyArNTc1LDcgQEAgZW5kCiAjCiAjICAgICBwcm9iZSgKICMgICAgICAg
ICBtYWNybygpCi0jICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMCAjIHBhc3MgdGhlIEV4ZWNTdGF0
ZSogYXMgYXJnMC4KKyMgICAgICAgICAgICAgbW92ZSBjZnIsIGEwICMgcGFzcyB0aGUgQ2FsbEZy
YW1lKiBhcyBhcmcwLgogIyAgICAgICAgICAgICBtb3ZlIHQwLCBhMSAjIHBhc3MgdGhlIHZhbHVl
IG9mIHJlZ2lzdGVyIHQwIGFzIGFyZzEuCiAjICAgICAgICAgICAgIGNhbGwgX2NQcm9iZUNhbGxi
YWNrRnVuY3Rpb24gIyB0byBkbyB3aGF0ZXZlciB5b3Ugd2FudC4KICMgICAgICAgICBlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNw
cAppbmRleCBkZjU3MTZmMTBkYzVkYTAyOTRmNjI3NWU2ZmM0YjYxZTg1YmZkNDA0Li45YjVkNzY4
MWNhMTc4Mjg2OWRiM2UxNDNhYjFiYWJkZmNjODA4NzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNTYsNyArMTU2
LDcgQEAgY2xhc3MgQ0xvb3BSZWdpc3RlciB7CiAjZW5kaWYKICAgICBBTFdBWVNfSU5MSU5FIE9w
Y29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8T3Bjb2RlPihtX3ZhbHVl
KTsgfQogCi0gICAgb3BlcmF0b3IgRXhlY1N0YXRlKigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxF
eGVjU3RhdGUqPihtX3ZhbHVlKTsgfQorICAgIG9wZXJhdG9yIENhbGxGcmFtZSooKSB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8Q2FsbEZyYW1lKj4obV92YWx1ZSk7IH0KICAgICBvcGVyYXRvciBjb25z
dCBJbnN0cnVjdGlvbiooKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24q
PihtX3ZhbHVlKTsgfQogICAgIG9wZXJhdG9yIEpTQ2VsbCooKSB7IHJldHVybiBiaXR3aXNlX2Nh
c3Q8SlNDZWxsKj4obV92YWx1ZSk7IH0KICAgICBvcGVyYXRvciBQcm90b0NhbGxGcmFtZSooKSB7
IHJldHVybiBiaXR3aXNlX2Nhc3Q8UHJvdG9DYWxsRnJhbWUqPihtX3ZhbHVlKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcAppbmRleCAyZTYx
YzkwNjFkNGQ1YzY3MTE0ZDI5OTQ4MDVkYmQ3MDYyNzYxMTFhLi4wMjg1NWQzYmJkNzYyMjc1OTM1
NjlhNzFlYmY2ZmQ4ZDJmZTM5Zjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL01vZHVsZUFuYWx5emVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL01vZHVsZUFuYWx5emVyLmNwcApAQCAtMzUsOSArMzUsOSBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIAotTW9kdWxlQW5hbHl6ZXI6Ok1vZHVsZUFuYWx5emVyKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBkZWNsYXJlZFZhcmlhYmxlcywgY29uc3QgVmFyaWFi
bGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcykKLSAgICA6IG1fdm0oZXhlYy0+dm0oKSkK
LSAgICAsIG1fbW9kdWxlUmVjb3JkKG1fdm0sIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywg
bV92bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUo
KSwgbW9kdWxlS2V5LCBzb3VyY2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlh
YmxlcykpCitNb2R1bGVBbmFseXplcjo6TW9kdWxlQW5hbHl6ZXIoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2VDb2RlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBkZWNsYXJlZFZhcmlhYmxl
cywgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcykKKyAgICA6IG1f
dm0oZ2xvYmFsT2JqZWN0LT52bSgpKQorICAgICwgbV9tb2R1bGVSZWNvcmQobV92bSwgSlNNb2R1
bGVSZWNvcmQ6OmNyZWF0ZShnbG9iYWxPYmplY3QsIG1fdm0sIGdsb2JhbE9iamVjdC0+bW9kdWxl
UmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJs
ZXMsIGxleGljYWxWYXJpYWJsZXMpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL01vZHVsZUFuYWx5emVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL01vZHVsZUFuYWx5emVyLmgKaW5kZXggNmY2M2FjNjM4NmE2MGMxNzAzZWY2OWJmYmQw
ZWNiYzQxNDEwNzczYS4uNGNlNDA4MWFkNmFmZDI1ODVmYWRiODkwOGJmMDYzZmM2ZjNjMDgyZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuaApAQCAt
MzUsNyArMzUsNyBAQCBjbGFzcyBTb3VyY2VDb2RlOwogY2xhc3MgTW9kdWxlQW5hbHl6ZXIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1vZHVsZUFuYWx5emVyKTsKIHB1YmxpYzoKLSAgICBN
b2R1bGVBbmFseXplcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNv
bnN0IFNvdXJjZUNvZGUmLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBkZWNsYXJlZFZhcmlh
YmxlcywgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcyk7CisgICAg
TW9kdWxlQW5hbHl6ZXIoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVL
ZXksIGNvbnN0IFNvdXJjZUNvZGUmLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBkZWNsYXJl
ZFZhcmlhYmxlcywgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcyk7
CiAKICAgICBKU01vZHVsZVJlY29yZCogYW5hbHl6ZShNb2R1bGVQcm9ncmFtTm9kZSYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckVycm9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckVycm9yLmgKaW5kZXggNTk4Y2Y2NGNj
MGE2MDRiZWE2MmNkZjExODIzOWYzMWZmNjZhMmRlNC4uMDJkM2ExOTY5MjczYjEzOTJkMTcwOGIy
YzZhMjM3NDU4MDQ3OGI0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXJFcnJvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
RXJyb3IuaApAQCAtOTAsMjMgKzkwLDIyIEBAIGNsYXNzIFBhcnNlckVycm9yIHsKICAgICAgICAg
U291cmNlQ29kZSBzb3VyY2UsIC8vIE5vdGU6IFdlIG11c3QgY29weSB0aGUgc291cmNlIGhlcmUs
IHNpbmNlIHRoZSBvYmplY3RzIHRoYXQgcGFzcyBpbiB0aGVpciBTb3VyY2VDb2RlIGZpZWxkIG1h
eSBiZSBkZXN0cm95ZWQgaW4gYWRkRXJyb3JJbmZvLgogICAgICAgICBpbnQgb3ZlcnJpZGVMaW5l
TnVtYmVyID0gLTEpCiAgICAgewotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2Fz
ZSBFcnJvck5vbmU6CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgY2FzZSBT
eW50YXhFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBhZGRFcnJvckluZm8oCi0gICAgICAgICAg
ICAgICAgZXhlYywgCi0gICAgICAgICAgICAgICAgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgbV9t
ZXNzYWdlKSwgCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLCAKKyAgICAgICAg
ICAgICAgICBjcmVhdGVTeW50YXhFcnJvcihnbG9iYWxPYmplY3QsIG1fbWVzc2FnZSksIAogICAg
ICAgICAgICAgICAgIG92ZXJyaWRlTGluZU51bWJlciA9PSAtMSA/IG1fbGluZSA6IG92ZXJyaWRl
TGluZU51bWJlciwgc291cmNlKTsKICAgICAgICAgY2FzZSBFdmFsRXJyb3I6Ci0gICAgICAgICAg
ICByZXR1cm4gY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgbV9tZXNzYWdlKTsKKyAgICAgICAgICAg
IHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihnbG9iYWxPYmplY3QsIG1fbWVzc2FnZSk7CiAgICAg
ICAgIGNhc2UgU3RhY2tPdmVyZmxvdzogewotICAgICAgICAgICAgRXJyb3JIYW5kbGluZ1Njb3Bl
IGVycm9yU2NvcGUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAgICAgIHJldHVybiBjcmVh
dGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisgICAgICAgICAgICBFcnJvckhhbmRsaW5nU2Nv
cGUgZXJyb3JTY29wZShnZXRWTShnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIHJldHVybiBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIE91dE9mTWVtb3J5OgotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU91dE9mTWVtb3J5
RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihn
bG9iYWxPYmplY3QpOwogICAgICAgICB9CiAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyQnl0ZWNvZGUuY3BwCmluZGV4IDQ2ZTdmNTgzMDQ5NWNjMjk3YWY1MzQzNDg1MDU4ZjMzZmFi
N2M4MDguLmE4ZmViNzZhMDk2MjNhZWM2ZTgxZGEwM2RmMzRmZDA1NTg3MTc3YmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5jcHAK
QEAgLTMzLDEwICszMywxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFByb2ZpbGVy
IHsKIAotSlNWYWx1ZSBCeXRlY29kZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1Zh
bHVlIEJ5dGVjb2RlOjp0b0pTKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3Qp
OwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRlY29kZUlu
ZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+b3Bjb2RlLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRG
OChvcGNvZGVOYW1lc1ttX29wY29kZUlEXSkpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+ZGVzY3JpcHRpb24sIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21V
VEY4KG1fZGVzY3JpcHRpb24pKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQnl0ZWNvZGUuaAppbmRleCA3MmM2NmM1YzM0ZTg0MmNiNDZlOTcyMzJhNTFh
OTI1MTYxOTQ5NWFlLi4wN2JiOWU1NjI1YTE4Y2YxZTczMzg4NWE4NzZlYWJhMjM1ZDBjZjA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29k
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rl
LmgKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgQnl0ZWNvZGUgewogICAgIE9wY29kZUlEIG9wY29k
ZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGVJRDsgfQogICAgIGNvbnN0IENTdHJpbmcmIGRl
c2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQogICAgIAotICAgIEpT
VmFsdWUgdG9KUyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxP
YmplY3QqKSBjb25zdDsKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4Owog
ICAgIE9wY29kZUlEIG1fb3Bjb2RlSUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCmluZGV4IDQ3Zjk0
NzI2OWFhMDcwMzFkNjA3MGQ4NzRiOTJjZjI5MDBiZWRmOWIuLjhhODZjMmY5MWE1ODQ5MjdkZWY0
MTUzNjMzYTc0MGZjMmQxOTE2MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCkBAIC03NiwyMiAr
NzYsMjIgQEAgY29uc3QgQnl0ZWNvZGUmIEJ5dGVjb2RlU2VxdWVuY2U6OmZvckJ5dGVjb2RlSW5k
ZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKICAgICByZXR1cm4gYXQoaW5kZXhGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpKTsKIH0KIAotdm9pZCBCeXRlY29kZVNlcXVlbmNl
OjphZGRTZXF1ZW5jZVByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcmVzdWx0
KSBjb25zdAordm9pZCBCeXRlY29kZVNlcXVlbmNlOjphZGRTZXF1ZW5jZVByb3BlcnRpZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHJlc3VsdCkgY29uc3QKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNBcnJheSog
aGVhZGVyID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKKyAgICBKU0FycmF5KiBoZWFk
ZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgMCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9oZWFkZXIuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChtX2hlYWRlcltpXSkpKTsKKyAg
ICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGksIGpzU3RyaW5nKHZt
LCBTdHJpbmc6OmZyb21VVEY4KG1faGVhZGVyW2ldKSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+aGVhZGVyLCBoZWFkZXIpOwogICAgIAotICAgIEpTQXJyYXkqIHNl
cXVlbmNlID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKKyAgICBKU0FycmF5KiBzZXF1
ZW5jZSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCAwKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3NlcXVlbmNlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHNlcXVlbmNlLT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBtX3NlcXVlbmNlW2ldLnRvSlMoZXhlYykpOworICAgICAgICBzZXF1ZW5j
ZS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCBtX3NlcXVlbmNlW2ldLnRvSlMoZ2xv
YmFsT2JqZWN0KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgfQogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ieXRl
Y29kZSwgc2VxdWVuY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oCmluZGV4IGEzMmEyY2JmMjczNWYxZDcx
NmM5ZjA2NTNlNmY3YzYwNDk3ZTY2OTQuLjM4ODk0NGZmOTVhMmQxNDc5MjE0YjA1OWIyYTY4NTcx
MzM2ZWRkZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlckJ5dGVjb2RlU2VxdWVuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgQnl0
ZWNvZGVTZXF1ZW5jZSB7CiAgICAgY29uc3QgQnl0ZWNvZGUmIGZvckJ5dGVjb2RlSW5kZXgodW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGFkZFNl
cXVlbmNlUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZvaWQg
YWRkU2VxdWVuY2VQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKSBjb25zdDsK
ICAgICAKIHByaXZhdGU6CiAgICAgVmVjdG9yPENTdHJpbmc+IG1faGVhZGVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5jcHAKaW5k
ZXggOWE0NDFlMTE0NDQ2YTg0MTAzZTRlMDQyMjAwNGU0NWQ1MGZlYTQ5OC4uYjhmY2ZiOWIyMDNi
OTgzZWNiNTVkNTk1MzdkMmE4ZGZiYmVhYWE1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZXMuY3BwCkBAIC01MSwxNyArNTEsMTcg
QEAgdm9pZCBCeXRlY29kZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBvdXQu
cHJpbnQoIiMiLCBtX2hhc2gsICIoIiwgbV9pZCwgIikiKTsKIH0KIAotSlNWYWx1ZSBCeXRlY29k
ZXM6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBCeXRlY29kZXM6OnRvSlMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNPYmplY3QqIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgCiAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJlciht
X2lkKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmluZmVy
cmVkTmFtZSwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgobV9pbmZlcnJlZE5hbWUpKSk7
CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZUNvZGUs
IGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG1fc291cmNlQ29kZSkpKTsKICAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aGFzaCwganNTdHJpbmcodm0sIFN0
cmluZzo6ZnJvbVVURjgodG9DU3RyaW5nKG1faGFzaCkpKSk7CiAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmluc3RydWN0aW9uQ291bnQsIGpzTnVtYmVyKG1faW5z
dHJ1Y3Rpb25Db3VudCkpOwotICAgIGFkZFNlcXVlbmNlUHJvcGVydGllcyhleGVjLCByZXN1bHQp
OworICAgIGFkZFNlcXVlbmNlUHJvcGVydGllcyhnbG9iYWxPYmplY3QsIHJlc3VsdCk7CiAgICAg
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVzLmgKaW5kZXggYjg1OTM2ZGEwYzQwOGJhMWU2OWI5ODJl
OTgyYWQ2OTAyYzM1OWI4YS4uODhmNjZiNjEwOGU2NmRmZDQwNmRkMzU5ZTQ2NGJjNWM1YTUzNDFj
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0
ZWNvZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0
ZWNvZGVzLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgQnl0ZWNvZGVzIDogcHVibGljIEJ5dGVj
b2RlU2VxdWVuY2UgewogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAg
Ci0gICAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTVmFsdWUgdG9KUyhK
U0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIAogcHJpdmF0ZToKICAgICBzaXplX3QgbV9pZDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBp
bGF0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBp
bGF0aW9uLmNwcAppbmRleCBlNDRlY2I2ZTE3NTI5NTc2OWFiNzE4ZmViNDc3ZTA1ZjdjZTcyZDcx
Li41NmQzOTUwYWViZDNjNzUxNjU0MjY0YzczOTZkMjA4ZjI0YmI4OGU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3Bw
CkBAIC0xMTIsNjMgKzExMiw2MyBAQCB2b2lkIENvbXBpbGF0aW9uOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiAgICAgb3V0LnByaW50KCJDb21wIiwgbV91aWQpOwogfQogCi1KU1ZhbHVl
IENvbXBpbGF0aW9uOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgQ29tcGls
YXRpb246OnRvSlMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb21waWxhdGlvbktpbmQsIGpz
U3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2tpbmQpKSkpOwogICAgIAot
ICAgIEpTQXJyYXkqIHByb2ZpbGVkQnl0ZWNvZGVzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwKTsKKyAgICBKU0FycmF5KiBwcm9maWxlZEJ5dGVjb2RlcyA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZ2xvYmFsT2JqZWN0LCAwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2ZpbGVkQnl0ZWNvZGVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBtX3Byb2ZpbGVkQnl0ZWNvZGVzW2ldLnRv
SlMoZXhlYyk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBtX3Byb2ZpbGVkQnl0ZWNvZGVzW2ldLnRv
SlMoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICAgICAgcHJvZmlsZWRCeXRlY29kZXMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHZh
bHVlKTsKKyAgICAgICAgcHJvZmlsZWRCeXRlY29kZXMtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9i
amVjdCwgaSwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgIH0KICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
ZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKICAgICAKLSAgICBKU0FycmF5KiBk
ZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOworICAgIEpTQXJyYXkq
IGRlc2NyaXB0aW9ucyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCAwKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2Rlc2NyaXB0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVl
ID0gbV9kZXNjcmlwdGlvbnNbaV0udG9KUyhleGVjKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IG1f
ZGVzY3JpcHRpb25zW2ldLnRvSlMoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgZGVzY3JpcHRpb25zLT5wdXREaXJlY3RJbmRl
eChleGVjLCBpLCB2YWx1ZSk7CisgICAgICAgIGRlc2NyaXB0aW9ucy0+cHV0RGlyZWN0SW5kZXgo
Z2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5kZXNjcmlwdGlvbnMsIGRlc2NyaXB0aW9ucyk7CiAgICAgCi0gICAgSlNBcnJheSogY291
bnRlcnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOworICAgIEpTQXJyYXkqIGNvdW50
ZXJzID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIDApOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgZm9yIChhdXRvIGl0ID0gbV9jb3VudGVycy5i
ZWdpbigpLCBlbmQgPSBtX2NvdW50ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgSlNPYmplY3QqIGNvdW50ZXJFbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwor
ICAgICAgICBKU09iamVjdCogY291bnRlckVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xv
YmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgYXV0byB2YWx1ZSA9IGl0LT5rZXkudG9KUyhleGVjKTsKKyAgICAgICAgYXV0byB2YWx1
ZSA9IGl0LT5rZXkudG9KUyhnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBjb3VudGVyRW50cnktPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+b3JpZ2luLCB2YWx1ZSk7CiAgICAgICAgIGNvdW50ZXJFbnRyeS0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5leGVjdXRpb25Db3VudCwganNOdW1iZXIoaXQt
PnZhbHVlLT5jb3VudCgpKSk7Ci0gICAgICAgIGNvdW50ZXJzLT5wdXNoKGV4ZWMsIGNvdW50ZXJF
bnRyeSk7CisgICAgICAgIGNvdW50ZXJzLT5wdXNoKGdsb2JhbE9iamVjdCwgY291bnRlckVudHJ5
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvdW50ZXJzLCBjb3VudGVy
cyk7CiAgICAgCi0gICAgSlNBcnJheSogZXhpdFNpdGVzID0gY29uc3RydWN0RW1wdHlBcnJheShl
eGVjLCAwKTsKKyAgICBKU0FycmF5KiBleGl0U2l0ZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGds
b2JhbE9iamVjdCwgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vc3JFeGl0U2l0ZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgYXV0byB2YWx1ZSA9IG1fb3NyRXhpdFNpdGVzW2ldLnRvSlMoZXhlYyk7CisgICAg
ICAgIGF1dG8gdmFsdWUgPSBtX29zckV4aXRTaXRlc1tpXS50b0pTKGdsb2JhbE9iamVjdCk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgIGV4aXRTaXRl
cy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdmFsdWUpOworICAgICAgICBleGl0U2l0ZXMtPnB1
dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+b3NyRXhpdFNpdGVzLCBleGl0U2l0ZXMpOwogICAgIAotICAgIEpT
QXJyYXkqIGV4aXRzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKKyAgICBKU0FycmF5
KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCAwKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX29zckV4aXRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGV4aXRzLT5wdXREaXJlY3RJbmRl
eChleGVjLCBpLCBtX29zckV4aXRzW2ldLnRvSlMoZXhlYykpOworICAgICAgICBleGl0cy0+cHV0
RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCBtX29zckV4aXRzW2ldLnRvSlMoZ2xvYmFsT2Jq
ZWN0KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQog
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vc3JFeGl0cywgZXhp
dHMpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogICAgIGlmICghbV9hZGRpdGlvbmFsSmV0dGlzb25SZWFzb24uaXNO
dWxsKCkpCiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5h
ZGRpdGlvbmFsSmV0dGlzb25SZWFzb24sIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KG1f
YWRkaXRpb25hbEpldHRpc29uUmVhc29uKSkpOwogICAgIAotICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT51aWQsIG1fdWlkLnRvSlMoZXhlYykpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT51aWQsIG1fdWlkLnRvSlMoZ2xvYmFs
T2JqZWN0KSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5oCmluZGV4IDliZjQ3
NjcyMWZkNjJhYmYzY2VlODA1OWEzNGZkOGZhOGYxZTgxZjUuLjRmMzZmNTYwMjRkOTZjMWQ3Y2Rj
NDdiODA4YWEzYmIwMzQzNWZkMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uaApAQCAtNzgsNyArNzgsNyBAQCBjbGFzcyBD
b21waWxhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPENvbXBpbGF0aW9uPiB7CiAgICAgVUlEIHVp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7Ci0gICAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpT
VmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIAogcHJpdmF0ZToKICAgICBD
b21waWxhdGlvbktpbmQgbV9raW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcAppbmRleCAzM2U4MzFm
YmM1ZjI3M2JiY2JkMjAzMGIwZmJiMmEzMzEyMjYzZjQ2Li44YzIwZTUwMmQwMzFiMzFlNGE3YTU1
YTQ0YmZjNzYxOTIzOTFkZTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcApAQCAtNDIsMTIgKzQy
LDEyIEBAIENvbXBpbGVkQnl0ZWNvZGU6On5Db21waWxlZEJ5dGVjb2RlKCkKIHsKIH0KIAotSlNW
YWx1ZSBDb21waWxlZEJ5dGVjb2RlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFs
dWUgQ29tcGlsZWRCeXRlY29kZTo6dG9KUyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBj
b25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNPYmplY3QqIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KTsKICAgICAKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+b3JpZ2luLCBtX29yaWdpbi50b0pTKGV4ZWMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+b3JpZ2luLCBtX29yaWdpbi50b0pTKGdsb2JhbE9iamVjdCkp
OwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZXNjcmlwdGlv
biwganNTdHJpbmcodm0sIFN0cmluZzo6ZnJvbVVURjgobV9kZXNjcmlwdGlvbikpKTsKICAgICAK
ICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oCmluZGV4IDVmOGU0ZGZlNTY1ZGM0
ZDdhMDA2ODhjZmJmMGU0NGVkNDBkMTY5YzUuLmQ2Mzc1OWZjOGFhNzFjNGQ3MmY5NTlkMTRhZjFl
Mzc0NzVlMGYwYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3Mg
Q29tcGlsZWRCeXRlY29kZSB7CiAgICAgY29uc3QgT3JpZ2luU3RhY2smIG9yaWdpblN0YWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KICAgICBjb25zdCBDU3RyaW5nJiBkZXNjcmlwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KICAgICAKLSAgICBKU1ZhbHVlIHRv
SlMoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0Kikg
Y29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIE9yaWdpblN0YWNrIG1fb3JpZ2luOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCmlu
ZGV4IDBhNzhiMGNjOWRjY2FmYWUwZmQxYTQyOTBiMzU1NmYxZGNhZDIwZjUuLmQ0NTY0MGU2ZjZj
ZWEzZTZlNWQxODAwYTcyYTA2Y2FmM2Y3YzY1MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAKQEAgLTk2LDM4ICs5NiwzOCBA
QCB2b2lkIERhdGFiYXNlOjphZGRDb21waWxhdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmVm
PENvbXBpbGF0aW9uPiYmIGNvbXBpbGF0aQogICAgIG1fY29tcGlsYXRpb25NYXAuc2V0KGNvZGVC
bG9jaywgV1RGTW92ZShjb21waWxhdGlvbikpOwogfQogCi1KU1ZhbHVlIERhdGFiYXNlOjp0b0pT
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgRGF0YWJhc2U6OnRvSlMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChnbG9iYWxPYmplY3QpOwogICAgIAotICAgIEpTQXJyYXkqIGJ5dGVjb2RlcyA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgMCk7CisgICAgSlNBcnJheSogYnl0ZWNvZGVzID0gY29uc3RydWN0
RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnl0ZWNvZGVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBtX2J5dGVjb2Rlc1tpXS50b0pTKGV4ZWMp
OworICAgICAgICBhdXRvIHZhbHVlID0gbV9ieXRlY29kZXNbaV0udG9KUyhnbG9iYWxPYmplY3Qp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICBieXRl
Y29kZXMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgYnl0ZWNvZGVz
LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGksIHZhbHVlKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2RlcywgYnl0ZWNvZGVzKTsKICAgICAKLSAgICBK
U0FycmF5KiBjb21waWxhdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOworICAg
IEpTQXJyYXkqIGNvbXBpbGF0aW9ucyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0
LCAwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2NvbXBpbGF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBh
dXRvIHZhbHVlID0gbV9jb21waWxhdGlvbnNbaV0tPnRvSlMoZXhlYyk7CisgICAgICAgIGF1dG8g
dmFsdWUgPSBtX2NvbXBpbGF0aW9uc1tpXS0+dG9KUyhnbG9iYWxPYmplY3QpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICBjb21waWxhdGlvbnMtPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgY29tcGlsYXRpb25zLT5wdXRE
aXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGksIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmNvbXBpbGF0aW9ucywgY29tcGlsYXRpb25zKTsKICAgICAKLSAgICBK
U0FycmF5KiBldmVudHMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOworICAgIEpTQXJy
YXkqIGV2ZW50cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCAwKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gbV9ldmVu
dHNbaV0udG9KUyhleGVjKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IG1fZXZlbnRzW2ldLnRvSlMo
Z2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LSAgICAgICAgZXZlbnRzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB2YWx1ZSk7CisgICAgICAg
IGV2ZW50cy0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5ldmVudHMsIGV2ZW50cyk7CkBAIC0xNDEsOSAr
MTQxLDkgQEAgU3RyaW5nIERhdGFiYXNlOjp0b0pTT04oKSBjb25zdAogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKAogICAgICAgICBtX3Zt
LCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKG1fdm0sIGpzTnVsbCgpKSk7CiAKLSAg
ICBhdXRvIHZhbHVlID0gdG9KUyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgYXV0
byB2YWx1ZSA9IHRvSlMoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBTdHJpbmcoKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09OU3RyaW5n
aWZ5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCB2YWx1ZSwgMCkpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNPTlN0cmluZ2lmeShnbG9iYWxPYmplY3QsIHZhbHVlLCAwKSk7
CiB9CiAKIGJvb2wgRGF0YWJhc2U6OnNhdmUoY29uc3QgY2hhciogZmlsZW5hbWUpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFz
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuaApp
bmRleCBmNDJlY2FmNThiZGJhYmJhMGZlYTJlZDU5ZGViZDhjYzMyN2YxZjY3Li5hZTc4NWU0ZTNk
Y2I3YzNlMDgwMjg3YmI0NTk5N2ExMzJjMjg1ZGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmgKQEAgLTUyLDEwICs1MiwxMCBAQCBj
bGFzcyBEYXRhYmFzZSB7CiAgICAgdm9pZCBhZGRDb21waWxhdGlvbihDb2RlQmxvY2sqLCBSZWY8
Q29tcGlsYXRpb24+JiYpOwogICAgIAogICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhYmFzZSB0byBh
IEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgaXMgc3VpdGFibGUgZm9yIEpTT04gc3RyaW5naWZpY2F0
aW9uLgotICAgIC8vIE5vdGUgdGhhdCBpdCdzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIHVzZSBh
biBFeGVjU3RhdGUqIGFzc29jaWF0ZWQgd2l0aCBhIGdsb2JhbAorICAgIC8vIE5vdGUgdGhhdCBp
dCdzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIHVzZSBhbiBDYWxsRnJhbWUqIGFzc29jaWF0ZWQg
d2l0aCBhIGdsb2JhbAogICAgIC8vIG9iamVjdCB0aGF0IGlzICJjbGVhbiIgLSBpLmUuIGFycmF5
IGFuZCBvYmplY3QgcHJvdG90eXBlcyBoYXZlbid0IGhhZCBzdHJhbmdlIHRoaW5ncwogICAgIC8v
IGRvbmUgdG8gdGhlbS4gQW5kIHllcywgaXQgc2hvdWxkIGJlIGFwcHJvcHJpYXRlIHRvIGp1c3Qg
dXNlIGEgZ2xvYmFsRXhlYyBoZXJlLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRvSlMo
SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICAKICAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YWJh
c2UgdG8gYSBKYXZhU2NyaXB0IG9iamVjdCB1c2luZyBhIHByaXZhdGUgdGVtcG9yYXJ5IGdsb2Jh
bCBvYmplY3QsCiAgICAgLy8gYW5kIHRoZW4gcmV0dXJucyB0aGUgSlNPTiByZXByZXNlbnRhdGlv
biBvZiB0aGF0IG9iamVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlckV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlckV2ZW50LmNwcAppbmRleCA4OTM2MTI5NjUxODA1YmU4NzE3ODdiOTQ0NzgzOGY4ZWY4
YjJiMGVmLi43OTZkMTliMzU5YzRlNTYxYWU2ODFjOTcxN2JjNWNjOGQ3ZmQ4NjI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRXZlbnQuY3BwCkBAIC00
NCwxNSArNDQsMTUgQEAgdm9pZCBFdmVudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgICAgICBvdXQucHJpbnQoIiAoIiwgbV9kZXRhaWwsICIpIik7CiB9CiAKLUpTVmFsdWUgRXZl
bnQ6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBFdmVudDo6dG9KUyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICAKICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dGltZSwganNOdW1iZXIobV90aW1lLnNlY29u
ZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5ieXRlY29kZXNJRCwganNOdW1iZXIobV9ieXRlY29kZXMtPmlkKCkpKTsK
ICAgICBpZiAobV9jb21waWxhdGlvbikKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmNvbXBpbGF0aW9uVUlELCBtX2NvbXBpbGF0aW9uLT51aWQoKS50b0pT
KGV4ZWMpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmNvbXBpbGF0aW9uVUlELCBtX2NvbXBpbGF0aW9uLT51aWQoKS50b0pTKGdsb2JhbE9iamVjdCkp
OwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdW1tYXJ5LCBq
c1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChtX3N1bW1hcnkpKSk7CiAgICAgaWYgKG1fZGV0
YWlsLmxlbmd0aCgpKQogICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+ZGV0YWlsLCBqc1N0cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChtX2RldGFpbCkpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckV2ZW50
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJFdmVudC5oCmluZGV4
IGQyYjZkYTZlYzExM2MyYjg4ZjljNDg5OWU4NzJmMTllNTM4YmNlN2EuLmM3OTgzMWU4OGZkY2Q0
ZmM5MWZmNDZmNGFjNjg3OGRmZTFjMjRmN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlckV2ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyRXZlbnQuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBFdmVudCB7
CiAgICAgY29uc3QgQ1N0cmluZyYgZGV0YWlsKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhaWw7IH0K
ICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICBKU1ZhbHVlIHRv
SlMoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0Kikg
Y29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIFdhbGxUaW1lIG1fdGltZSB7IH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXQuY3BwCmluZGV4
IGNmNGQ5MThmOWFhMmQyYTM1MWU1NzJlNGY1ZTc0OGYxOGJmNDg2NzkuLmRjYzczNDQ1YzBjNDEx
MWFjODVlMzk1MDc0YzE3MGU4NGI3ODdjYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXQuY3BwCkBAIC00NSwxMiArNDUsMTIgQEAgT1NS
RXhpdDo6fk9TUkV4aXQoKQogewogfQogCi1KU1ZhbHVlIE9TUkV4aXQ6OnRvSlMoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAorSlNWYWx1ZSBPU1JFeGl0Ojp0b0pTKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChnbG9iYWxPYmplY3QpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5pZCwganNOdW1iZXIobV9pZCkpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5vcmlnaW4sIG1fb3JpZ2luLnRvSlMoZXhlYykpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5vcmlnaW4sIG1fb3JpZ2luLnRvSlMo
Z2xvYmFsT2JqZWN0KSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmV4aXRLaW5kLCBqc1N0cmluZyh2bSwgZXhpdEtpbmRUb1N0cmluZyhtX2V4aXRLaW5kKSkp
OwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pc1dhdGNocG9p
bnQsIGpzQm9vbGVhbihtX2lzV2F0Y2hwb2ludCkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jb3VudCwganNOdW1iZXIobV9jb3VudGVyKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0LmgKaW5kZXggMGY3
NzliM2ZjNzgyODVlODBhMmE1MmZkNTM1ZmZkNDFiODJlMTQ3ZS4uNzQwNDIyNDc0ZDU4ODU2YTQ1
ODI1OTUzZDMyNGEwMDkxN2NkZDA3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlck9TUkV4aXQuaApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBPU1JFeGl0
IHsKICAgICB1aW50NjRfdCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlcjsgfQogICAg
IHZvaWQgaW5jQ291bnQoKSB7IG1fY291bnRlcisrOyB9CiAKLSAgICBKU1ZhbHVlIHRvSlMoRXhl
Y1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgT3JpZ2luU3RhY2sgbV9vcmlnaW47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAKaW5kZXgg
M2Q4ZWM0OWEzMGYxNWM1ODk4ZDQ1NjRiYzU0NmM4ZmMyMTUwNDhjYi4uOTI3YzllMjBhZTlhM2I1
YTYwOWUzN2NhZWY3YmRhMTQ1NThlYjkyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcApAQCAtMzQsMTQgKzM0LDE0
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgUHJvZmlsZXIgewogCi1KU1ZhbHVlIE9T
UkV4aXRTaXRlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgT1NSRXhpdFNp
dGU6OnRvSlMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNBcnJheSogcmVzdWx0
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKKyAgICBKU0FycmF5KiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQWRk
cmVzc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaSwganNTdHJpbmcodm0sIHRvU3RyaW5nKFJhd1BvaW50ZXIobV9jb2RlQWRkcmVzc2VzW2ld
LmRhdGFMb2NhdGlvbigpKSkpKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChnbG9i
YWxPYmplY3QsIGksIGpzU3RyaW5nKHZtLCB0b1N0cmluZyhSYXdQb2ludGVyKG1fY29kZUFkZHJl
c3Nlc1tpXS5kYXRhTG9jYXRpb24oKSkpKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuaAppbmRleCBlMzk0
MWFiYjkzNzVjMWU1NGVmOWRhYzM0YWYxOWE4Yjc4MGU4Y2I1Li5lODExODE4ZWVhMWQ1ODYyOTdl
ZWY2Zjc4ODFjMzU3NGFhYjZiNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3Mg
T1NSRXhpdFNpdGUgewogICAgIAogICAgIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNJbnRlcm5hbFB0clRhZz4+JiBjb2RlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUFkZHJlc3NlczsgfQogICAgIAotICAgIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqKSBjb25zdDsK
KyAgICBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+PiBtX2NvZGVB
ZGRyZXNzZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
T3JpZ2luLmNwcAppbmRleCA4ZDdjNWJkYTg1M2VkZjkxNTc3NzI5MTM4OGVmNTI5OTdlOTVjNmNk
Li4xMDIyMmEyMzk2YzcxZTJiYzkyNDNmOGUyYWQyODViYzU3NjA0OWU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpbi5jcHAKQEAgLTQ1LDEw
ICs0NSwxMCBAQCB2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAg
IG91dC5wcmludCgqbV9ieXRlY29kZXMsICI6YmMjIiwgbV9ieXRlY29kZUluZGV4KTsKIH0KIAot
SlNWYWx1ZSBPcmlnaW46OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBPcmln
aW46OnRvSlMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNPYmpl
Y3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVjb2Rlc0lELCBqc051bWJl
cihtX2J5dGVjb2Rlcy0+aWQoKSkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5ieXRlY29kZUluZGV4LCBqc051bWJlcihtX2J5dGVjb2RlSW5kZXgpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW4uaAppbmRleCBmMmZjYmMwMzE0MGVhY2YxZTMyMzAzYTc5NGJkZTBiNzYyYjEx
OWNmLi44NjgyNjYxNzllMTUzOTQwYTE5NzJlNWNlY2RkN2U2NTk1ZTU1ZjNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW4uaApAQCAtNzEsNyAr
NzEsNyBAQCBjbGFzcyBPcmlnaW4gewogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAgICBK
U1ZhbHVlIHRvSlMoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFs
T2JqZWN0KikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQnl0ZWNvZGVzKiBtX2J5dGVjb2RlczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdp
blN0YWNrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdp
blN0YWNrLmNwcAppbmRleCA0YjVjMzFlNWMyNjlmZmY5MzFlNTZhNGFkNjQwODBkZTdkZDMxNjRh
Li4yMjIwOTg4OTk4OWRhZWI0MDM2NDEyMzQ4ZGRmMjhjOGQ2NzdmODVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3Bw
CkBAIC05OCwxNSArOTgsMTUgQEAgdm9pZCBPcmlnaW5TdGFjazo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogICAgIH0KIH0KIAotSlNWYWx1ZSBPcmlnaW5TdGFjazo6dG9KUyhFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIE9yaWdpblN0YWNrOjp0b0pTKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgMCk7CisgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9i
YWxPYmplY3QsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAg
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhY2suc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3N0YWNrW2ldLnRvSlMoZXhl
YykpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgbV9z
dGFja1tpXS50b0pTKGdsb2JhbE9iamVjdCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5oCmluZGV4IDNiZWQyMzgwMTgwMzg2NTEx
ZDg4YWY2MDBmNjYyYmNjNGFiMTQzZWEuLjBkMDllYTY1ZGQzODNiMTBhZWFlZjk2Yzg3Y2JmMTJj
MmY5YzBlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlck9yaWdpblN0YWNrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyT3JpZ2luU3RhY2suaApAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBPcmlnaW5TdGFjayB7
CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0OwogICAgIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUq
KSBjb25zdDsKKyAgICBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICAK
IHByaXZhdGU6CiAgICAgVmVjdG9yPE9yaWdpbiwgMT4gbV9zdGFjazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclByb2ZpbGVkQnl0ZWNv
ZGVzLmNwcAppbmRleCA5NGFkNDViMzA5NTE0MGFkMmMzZDkzYmFjYTNiZjQ5MGU3MGRjOWU5Li5j
MDAzOTRjMjA0MWUzODg1YWZhOGVlY2RjZmIxNmRkMmNlOWU3NjFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyUHJvZmlsZWRCeXRl
Y29kZXMuY3BwCkBAIC00MiwxMyArNDIsMTMgQEAgUHJvZmlsZWRCeXRlY29kZXM6On5Qcm9maWxl
ZEJ5dGVjb2RlcygpCiB7CiB9CiAKLUpTVmFsdWUgUHJvZmlsZWRCeXRlY29kZXM6OnRvSlMoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBQcm9maWxlZEJ5dGVjb2Rlczo6dG9KUyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICAKICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0
ZWNvZGVzLT5pZCgpKSk7Ci0gICAgYWRkU2VxdWVuY2VQcm9wZXJ0aWVzKGV4ZWMsIHJlc3VsdCk7
CisgICAgYWRkU2VxdWVuY2VQcm9wZXJ0aWVzKGdsb2JhbE9iamVjdCwgcmVzdWx0KTsKICAgICAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmgKaW5kZXggMDc4NzcyMmM3
NWM4MmEyOGQ5MmQ1MWNkYWI1MzhiY2QxZTlmNTU4NC4uNTI4YzE0YWQ4OWYxNWRjMGQ2YTJkM2I0
YThiZjMxYTMzMmExZTE3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5oCkBAIC0zNyw3ICszNyw3IEBA
IGNsYXNzIFByb2ZpbGVkQnl0ZWNvZGVzIDogcHVibGljIEJ5dGVjb2RlU2VxdWVuY2UgewogICAg
IAogICAgIGNvbnN0IEJ5dGVjb2RlcyogYnl0ZWNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
Y29kZXM7IH0KICAgICAKLSAgICBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKikgY29uc3Q7CisgICAg
SlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQnl0
ZWNvZGVzKiBtX2J5dGVjb2RlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlclVJRC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXJVSUQuY3BwCmluZGV4IDY1ZTc4MjNiZTkzZWY0ZTY2YzdiZGNmODE2Zjg2OWM2YTNm
MGNhODkuLjVjYjE5ZGVkMTRkNjNmZDNmZmMxM2ZlMGUyYjcwN2NmNDg2ZDBiZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclVJRC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyVUlELmNwcApAQCAtNDcsOSAr
NDcsOSBAQCB2b2lkIFVJRDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIG91dC5w
cmludChtX3VpZCk7CiB9CiAKLUpTVmFsdWUgVUlEOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWUgVUlEOjp0b0pTKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMtPnZtKCksIHRvU3RyaW5nKCp0aGlzKSk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGdsb2JhbE9iamVjdC0+dm0oKSwgdG9TdHJpbmcoKnRoaXMpKTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OlByb2ZpbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJVSUQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlclVJRC5oCmluZGV4IDFmM2EzMWYyOWQyMjc3ZWIyMjZkYmQ2
NGY2YTliMGEzNThkMzU5ODIuLmFhNTQ4ODcyNzZlMTczOWIyMjc3MTA0NGZiYTZlODM2ZDg3Njkx
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclVJ
RC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlclVJRC5oCkBA
IC04Miw3ICs4Miw3IEBAIGNsYXNzIFVJRCB7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwotICAgIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqKSBjb25zdDsK
KyAgICBKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICAKIHByaXZhdGU6
CiAgICAgdWludDY0X3QgbV91aWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5jcHAKaW5kZXggMDZiZWZkYmU2OWIzZTNjNWFh
NWI1OWRjOTJhNTYwYTEzYjE0NGM0NS4uNjg5NjAxMmM1OTI2NmQ3YjQzZTFkNzMzNWQyZjMxYjgw
ODczMTdiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJh
Y3RNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fi
c3RyYWN0TW9kdWxlUmVjb3JkLmNwcApAQCAtNTYsMTMgKzU2LDEzIEBAIHZvaWQgQWJzdHJhY3RN
b2R1bGVSZWNvcmQ6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkFic3Ry
YWN0TW9kdWxlUmVjb3JkOjp+QWJzdHJhY3RNb2R1bGVSZWNvcmQoKTsKIH0KIAotdm9pZCBBYnN0
cmFjdE1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0p
Cit2b2lkIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUo
ZXhlYywgdm0sIGdsb2JhbE9iamVjdCh2bSktPm1hcFN0cnVjdHVyZSgpKTsKKyAgICBKU01hcCog
bWFwID0gSlNNYXA6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0
cnVjdHVyZSgpKTsKICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBt
X2RlcGVuZGVuY2llc01hcC5zZXQodm0sIHRoaXMsIG1hcCk7CiAgICAgcHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVwZW5kZW5jaWVzTWFwIl9zKSwgbV9kZXBlbmRl
bmNpZXNNYXAuZ2V0KCkpOwpAQCAtMTQxLDE5ICsxNDEsMTkgQEAgYXV0byBBYnN0cmFjdE1vZHVs
ZVJlY29yZDo6UmVzb2x1dGlvbjo6YW1iaWd1b3VzKCkgLT4gUmVzb2x1dGlvbgogICAgIHJldHVy
biBSZXNvbHV0aW9uIHsgVHlwZTo6QW1iaWd1b3VzLCBudWxscHRyLCBJZGVudGlmaWVyKCkgfTsK
IH0KIAotQWJzdHJhY3RNb2R1bGVSZWNvcmQqIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpob3N0UmVz
b2x2ZUltcG9ydGVkTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbW9k
dWxlTmFtZSkKK0Fic3RyYWN0TW9kdWxlUmVjb3JkKiBBYnN0cmFjdE1vZHVsZVJlY29yZDo6aG9z
dFJlc29sdmVJbXBvcnRlZE1vZHVsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1vZHVsZU5hbWVWYWx1ZSA9IGlkZW50aWZp
ZXJUb0pTVmFsdWUodm0sIG1vZHVsZU5hbWUpOwotICAgIEpTVmFsdWUgZW50cnkgPSBtX2RlcGVu
ZGVuY2llc01hcC0+SlNNYXA6OmdldChleGVjLCBtb2R1bGVOYW1lVmFsdWUpOworICAgIEpTVmFs
dWUgZW50cnkgPSBtX2RlcGVuZGVuY2llc01hcC0+SlNNYXA6OmdldChnbG9iYWxPYmplY3QsIG1v
ZHVsZU5hbWVWYWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc0Nhc3Q8QWJzdHJhY3RNb2R1bGVSZWNv
cmQqPihlbnRyeS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1vZHVsZSIp
KSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNDYXN0PEFic3RyYWN0TW9kdWxl
UmVjb3JkKj4oZW50cnkuZ2V0KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIm1vZHVsZSIpKSkpOwogfQogCi1hdXRvIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpyZXNvbHZl
SW1wb3J0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbG9jYWxOYW1lKSAtPiBS
ZXNvbHV0aW9uCithdXRvIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpyZXNvbHZlSW1wb3J0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIGxvY2FsTmFtZSkgLT4g
UmVzb2x1dGlvbgogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIE9wdGlvbmFsPEltcG9ydEVudHJ5PiBvcHRpb25hbEltcG9ydEVudHJ5ID0gdHJ5
R2V0SW1wb3J0RW50cnkobG9jYWxOYW1lLmltcGwoKSk7CkBAIC0xNjQsOSArMTY0LDkgQEAgYXV0
byBBYnN0cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUltcG9ydChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIGxvY2EKICAgICBpZiAoaW1wb3J0RW50cnkudHlwZSA9PSBBYnN0cmFj
dE1vZHVsZVJlY29yZDo6SW1wb3J0RW50cnlUeXBlOjpOYW1lc3BhY2UpCiAgICAgICAgIHJldHVy
biBSZXNvbHV0aW9uOjpub3RGb3VuZCgpOwogCi0gICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIGlt
cG9ydGVkTW9kdWxlID0gaG9zdFJlc29sdmVJbXBvcnRlZE1vZHVsZShleGVjLCBpbXBvcnRFbnRy
eS5tb2R1bGVSZXF1ZXN0KTsKKyAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogaW1wb3J0ZWRNb2R1
bGUgPSBob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxlKGdsb2JhbE9iamVjdCwgaW1wb3J0RW50cnku
bW9kdWxlUmVxdWVzdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmVzb2x1dGlv
bjo6ZXJyb3IoKSk7Ci0gICAgcmV0dXJuIGltcG9ydGVkTW9kdWxlLT5yZXNvbHZlRXhwb3J0KGV4
ZWMsIGltcG9ydEVudHJ5LmltcG9ydE5hbWUpOworICAgIHJldHVybiBpbXBvcnRlZE1vZHVsZS0+
cmVzb2x2ZUV4cG9ydChnbG9iYWxPYmplY3QsIGltcG9ydEVudHJ5LmltcG9ydE5hbWUpOwogfQog
CiBzdHJ1Y3QgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdmVRdWVyeSB7CkBAIC0yNDgsOSAr
MjQ4LDkgQEAgdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6Y2FjaGVSZXNvbHV0aW9uKFVuaXF1
ZWRTdHJpbmdJbXBsKiBleHBvcnROYW1lLCBjb25zdAogICAgIG1fcmVzb2x1dGlvbkNhY2hlLmFk
ZChleHBvcnROYW1lLCByZXNvbHV0aW9uKTsKIH0KIAotYXV0byBBYnN0cmFjdE1vZHVsZVJlY29y
ZDo6cmVzb2x2ZUV4cG9ydEltcGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBSZXNvbHZlUXVlcnkm
IHJvb3QpIC0+IFJlc29sdXRpb24KK2F1dG8gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnJlc29sdmVF
eHBvcnRJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFJlc29sdmVRdWVy
eSYgcm9vdCkgLT4gUmVzb2x1dGlvbgogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChBYnN0cmFjdE1vZHVsZVJlY29yZEludGVybmFsOjp2
ZXJib3NlKQpAQCAtNTI3LDcgKzUyNyw3IEBAIGF1dG8gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OnJl
c29sdmVFeHBvcnRJbXBsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUmVzb2x2ZVF1ZXJ5CiAgICAg
ICAgIC8vIHNlY3Rpb24gMTUuMi4xLjE2LjMsIHN0ZXAgNgogICAgICAgICAvLyBJZiB0aGUgImRl
ZmF1bHQiIG5hbWUgaXMgbm90IHJlc29sdmVkIGluIHRoZSBjdXJyZW50IG1vZHVsZSwgd2UgbmVl
ZCB0byB0aHJvdyBhbiBlcnJvciBhbmQgc3RvcCByZXNvbHV0aW9uIGltbWVkaWF0ZWx5LAogICAg
ICAgICAvLyBSYXRpb25hbGUgdG8gdGhpcyBlcnJvcjogQSBkZWZhdWx0IGV4cG9ydCBjYW5ub3Qg
YmUgcHJvdmlkZWQgYnkgYW4gZXhwb3J0ICouCi0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpZiAocXVlcnkuZXhwb3J0TmFt
ZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5kZWZhdWx0S2V5d29yZC5pbXBsKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC01NDEsNyArNTQxLDcgQEAgYXV0byBBYnN0cmFjdE1vZHVsZVJl
Y29yZDo6cmVzb2x2ZUV4cG9ydEltcGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBSZXNvbHZlUXVl
cnkKICAgICAgICAgLy8gRW5xdWV1ZSB0aGUgdGFza3MgaW4gcmV2ZXJzZSBvcmRlci4KICAgICAg
ICAgZm9yIChhdXRvIGl0ZXJhdG9yID0gcXVlcnkubW9kdWxlUmVjb3JkLT5zdGFyRXhwb3J0RW50
cmllcygpLnJiZWdpbigpLCBlbmQgPSBxdWVyeS5tb2R1bGVSZWNvcmQtPnN0YXJFeHBvcnRFbnRy
aWVzKCkucmVuZCgpOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpIHsKICAgICAgICAgICAg
IGNvbnN0IFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4mIHN0YXJNb2R1bGVOYW1lID0gKml0ZXJh
dG9yOwotICAgICAgICAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIGltcG9ydGVkTW9kdWxlUmVj
b3JkID0gcXVlcnkubW9kdWxlUmVjb3JkLT5ob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxlKGV4ZWMs
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHN0YXJNb2R1bGVOYW1lLmdldCgpKSk7CisgICAgICAg
ICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogaW1wb3J0ZWRNb2R1bGVSZWNvcmQgPSBxdWVyeS5t
b2R1bGVSZWNvcmQtPmhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoZ2xvYmFsT2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCBzdGFyTW9kdWxlTmFtZS5nZXQoKSkpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgcGVuZGluZ1Rh
c2tzLmFwcGVuZChUYXNrIHsgUmVzb2x2ZVF1ZXJ5KGltcG9ydGVkTW9kdWxlUmVjb3JkLCBxdWVy
eS5leHBvcnROYW1lLmdldCgpKSwgVHlwZTo6UXVlcnkgfSk7CiAgICAgICAgIH0KQEAgLTYyOCw3
ICs2MjgsNyBAQCBhdXRvIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpyZXNvbHZlRXhwb3J0SW1wbChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFJlc29sdmVRdWVyeQogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBjYXNlIEV4cG9ydEVudHJ5OjpUeXBlOjpJbmRpcmVjdDogewotICAgICAgICAgICAg
ICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVsZVJlY29yZCA9IG1vZHVsZVJl
Y29yZC0+aG9zdFJlc29sdmVJbXBvcnRlZE1vZHVsZShleGVjLCBleHBvcnRFbnRyeS5tb2R1bGVO
YW1lKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogaW1wb3J0ZWRNb2R1
bGVSZWNvcmQgPSBtb2R1bGVSZWNvcmQtPmhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoZ2xvYmFs
T2JqZWN0LCBleHBvcnRFbnRyeS5tb2R1bGVOYW1lKTsKICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBSZXNvbHV0aW9uOjplcnJvcigpKTsKIAogICAgICAgICAgICAg
ICAgIC8vIFdoZW4gdGhlIGltcG9ydGVkIG1vZHVsZSBkb2VzIG5vdCBwcm9kdWNlIGFueSByZXNv
bHZlZCBiaW5kaW5nLCB3ZSBuZWVkIHRvIGxvb2sgaW50byB0aGUgc3RhcnMgaW4gdGhlICpjdXJy
ZW50KgpAQCAtNjg5LDE3ICs2ODksMTcgQEAgYXV0byBBYnN0cmFjdE1vZHVsZVJlY29yZDo6cmVz
b2x2ZUV4cG9ydEltcGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBSZXNvbHZlUXVlcnkKICAgICBy
ZXR1cm4gZnJhbWVzWzBdOwogfQogCi1hdXRvIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpyZXNvbHZl
RXhwb3J0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgZXhwb3J0TmFtZSkgLT4g
UmVzb2x1dGlvbgorYXV0byBBYnN0cmFjdE1vZHVsZVJlY29yZDo6cmVzb2x2ZUV4cG9ydChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBleHBvcnROYW1lKSAt
PiBSZXNvbHV0aW9uCiB7CiAgICAgLy8gTG9vayB1cCB0aGUgY2FjaGVkIHJlc29sdXRpb24gZmly
c3QgYmVmb3JlIGVudGVyaW5nIHRoZSByZXNvbHZpbmcgbG9vcCwgc2luY2UgdGhlIGxvb3Agc2V0
dXAgdGFrZXMgc29tZSBjb3N0LgogICAgIGlmIChPcHRpb25hbDxSZXNvbHV0aW9uPiBjYWNoZWRS
ZXNvbHV0aW9uID0gdHJ5R2V0Q2FjaGVkUmVzb2x1dGlvbihleHBvcnROYW1lLmltcGwoKSkpCiAg
ICAgICAgIHJldHVybiAqY2FjaGVkUmVzb2x1dGlvbjsKLSAgICByZXR1cm4gcmVzb2x2ZUV4cG9y
dEltcGwoZXhlYywgUmVzb2x2ZVF1ZXJ5KHRoaXMsIGV4cG9ydE5hbWUuaW1wbCgpKSk7CisgICAg
cmV0dXJuIHJlc29sdmVFeHBvcnRJbXBsKGdsb2JhbE9iamVjdCwgUmVzb2x2ZVF1ZXJ5KHRoaXMs
IGV4cG9ydE5hbWUuaW1wbCgpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldEV4cG9ydGVkTmFtZXMo
RXhlY1N0YXRlKiBleGVjLCBBYnN0cmFjdE1vZHVsZVJlY29yZCogcm9vdCwgSWRlbnRpZmllclNl
dCYgZXhwb3J0ZWROYW1lcykKK3N0YXRpYyB2b2lkIGdldEV4cG9ydGVkTmFtZXMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHJvb3QsIElkZW50aWZp
ZXJTZXQmIGV4cG9ydGVkTmFtZXMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSGFzaFNldDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+IGV4cG9y
dFN0YXJTZXQ7CkBAIC03MjAsMzkgKzcyMCwzOCBAQCBzdGF0aWMgdm9pZCBnZXRFeHBvcnRlZE5h
bWVzKEV4ZWNTdGF0ZSogZXhlYywgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHJvb3QsIElkZW50aQog
ICAgICAgICB9CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGFyTW9kdWxlTmFtZSA6IG1v
ZHVsZVJlY29yZC0+c3RhckV4cG9ydEVudHJpZXMoKSkgewotICAgICAgICAgICAgQWJzdHJhY3RN
b2R1bGVSZWNvcmQqIHJlcXVlc3RlZE1vZHVsZVJlY29yZCA9IG1vZHVsZVJlY29yZC0+aG9zdFJl
c29sdmVJbXBvcnRlZE1vZHVsZShleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBzdGFyTW9k
dWxlTmFtZS5nZXQoKSkpOworICAgICAgICAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIHJlcXVl
c3RlZE1vZHVsZVJlY29yZCA9IG1vZHVsZVJlY29yZC0+aG9zdFJlc29sdmVJbXBvcnRlZE1vZHVs
ZShnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHN0YXJNb2R1bGVOYW1lLmdl
dCgpKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgICAgICAgICAgcGVuZGluZ01vZHVsZXMuYXBwZW5kKHJlcXVlc3RlZE1vZHVsZVJlY29yZCk7
CiAgICAgICAgIH0KICAgICB9CiB9CiAKLUpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBBYnN0cmFj
dE1vZHVsZVJlY29yZDo6Z2V0TW9kdWxlTmFtZXNwYWNlKEV4ZWNTdGF0ZSogZXhlYykKK0pTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0KiBBYnN0cmFjdE1vZHVsZVJlY29yZDo6Z2V0TW9kdWxlTmFtZXNw
YWNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVy
bmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWdldG1vZHVsZW5hbWVzcGFjZQogICAgIGlm
IChtX21vZHVsZU5hbWVzcGFjZU9iamVjdCkKICAgICAgICAgcmV0dXJuIG1fbW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmdldCgpOwogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJZGVudGlmaWVyU2V0IGV4cG9ydGVkTmFt
ZXM7Ci0gICAgZ2V0RXhwb3J0ZWROYW1lcyhleGVjLCB0aGlzLCBleHBvcnRlZE5hbWVzKTsKKyAg
ICBnZXRFeHBvcnRlZE5hbWVzKGdsb2JhbE9iamVjdCwgdGhpcywgZXhwb3J0ZWROYW1lcyk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBWZWN0b3I8c3Rk
OjpwYWlyPElkZW50aWZpZXIsIFJlc29sdXRpb24+PiByZXNvbHV0aW9uczsKICAgICBmb3IgKGF1
dG8mIG5hbWUgOiBleHBvcnRlZE5hbWVzKSB7CiAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBuYW1lLmdldCgpKTsKLSAgICAgICAgY29uc3QgUmVzb2x1
dGlvbiByZXNvbHV0aW9uID0gcmVzb2x2ZUV4cG9ydChleGVjLCBpZGVudCk7CisgICAgICAgIGNv
bnN0IFJlc29sdXRpb24gcmVzb2x1dGlvbiA9IHJlc29sdmVFeHBvcnQoZ2xvYmFsT2JqZWN0LCBp
ZGVudCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAg
ICAgICBzd2l0Y2ggKHJlc29sdXRpb24udHlwZSkgewogICAgICAgICBjYXNlIFJlc29sdXRpb246
OlR5cGU6Ok5vdEZvdW5kOgotICAgICAgICAgICAgdGhyb3dTeW50YXhFcnJvcihleGVjLCBzY29w
ZSwgbWFrZVN0cmluZygiRXhwb3J0ZWQgYmluZGluZyBuYW1lICciLCBTdHJpbmcobmFtZS5nZXQo
KSksICInIGlzIG5vdCBmb3VuZC4iKSk7CisgICAgICAgICAgICB0aHJvd1N5bnRheEVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIG1ha2VTdHJpbmcoIkV4cG9ydGVkIGJpbmRpbmcgbmFtZSAnIiwg
U3RyaW5nKG5hbWUuZ2V0KCkpLCAiJyBpcyBub3QgZm91bmQuIikpOwogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICAgICAgY2FzZSBSZXNvbHV0aW9uOjpUeXBlOjpFcnJvcjoKLSAg
ICAgICAgICAgIHRocm93U3ludGF4RXJyb3IoZXhlYywgc2NvcGUsIG1ha2VTdHJpbmcoIkV4cG9y
dGVkIGJpbmRpbmcgbmFtZSAnZGVmYXVsdCcgY2Fubm90IGJlIHJlc29sdmVkIGJ5IHN0YXIgZXhw
b3J0IGVudHJpZXMuIikpOworICAgICAgICAgICAgdGhyb3dTeW50YXhFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBtYWtlU3RyaW5nKCJFeHBvcnRlZCBiaW5kaW5nIG5hbWUgJ2RlZmF1bHQnIGNh
bm5vdCBiZSByZXNvbHZlZCBieSBzdGFyIGV4cG9ydCBlbnRyaWVzLiIpKTsKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGNhc2UgUmVzb2x1dGlvbjo6VHlwZTo6QW1iaWd1
b3VzOgpAQCAtNzY0LDMyICs3NjMsMzIgQEAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIEFic3Ry
YWN0TW9kdWxlUmVjb3JkOjpnZXRNb2R1bGVOYW1lc3BhY2UoRXhlY1N0YXRlKiBleGUKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGF1dG8qIG1vZHVsZU5hbWVzcGFjZU9iamVjdCA9IEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qt
Pm1vZHVsZU5hbWVzcGFjZU9iamVjdFN0cnVjdHVyZSgpLCB0aGlzLCBXVEZNb3ZlKHJlc29sdXRp
b25zKSk7CisgICAgYXV0byogbW9kdWxlTmFtZXNwYWNlT2JqZWN0ID0gSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q6OmNyZWF0ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+bW9kdWxlTmFtZXNw
YWNlT2JqZWN0U3RydWN0dXJlKCksIHRoaXMsIFdURk1vdmUocmVzb2x1dGlvbnMpKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBtX21vZHVsZU5hbWVzcGFj
ZU9iamVjdC5zZXQodm0sIHRoaXMsIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgcmV0dXJu
IG1vZHVsZU5hbWVzcGFjZU9iamVjdDsKIH0KIAotdm9pZCBBYnN0cmFjdE1vZHVsZVJlY29yZDo6
bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKK3ZvaWQgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQ6OmxpbmsoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBzY3JpcHRGZXRjaGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlmIChhdXRvKiBqc01vZHVsZVJlY29yZCA9IGpz
RHluYW1pY0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPih2bSwgdGhpcykpCi0gICAgICAgIHJldHVybiBq
c01vZHVsZVJlY29yZC0+bGluayhleGVjLCBzY3JpcHRGZXRjaGVyKTsKKyAgICAgICAgcmV0dXJu
IGpzTW9kdWxlUmVjb3JkLT5saW5rKGdsb2JhbE9iamVjdCwgc2NyaXB0RmV0Y2hlcik7CiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIGlmIChhdXRvKiB3YXNtTW9kdWxlUmVjb3JkID0ganNE
eW5hbWljQ2FzdDxXZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KHZtLCB0aGlzKSkKLSAgICAgICAg
cmV0dXJuIHdhc21Nb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgc2NyaXB0RmV0Y2hlciwgbnVsbHB0
ciwgV2FzbTo6Q3JlYXRpb25Nb2RlOjpGcm9tTW9kdWxlTG9hZGVyKTsKKyAgICAgICAgcmV0dXJu
IHdhc21Nb2R1bGVSZWNvcmQtPmxpbmsoZ2xvYmFsT2JqZWN0LCBzY3JpcHRGZXRjaGVyLCBudWxs
cHRyLCBXYXNtOjpDcmVhdGlvbk1vZGU6OkZyb21Nb2R1bGVMb2FkZXIpOwogI2VuZGlmCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotSlNfRVhQT1JUX1BSSVZBVEUgSlNW
YWx1ZSBBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQorSlNf
RVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBBYnN0cmFjdE1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBpZiAoYXV0byoganNNb2R1bGVS
ZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4odm0sIHRoaXMpKQotICAgICAg
ICByZXR1cm4ganNNb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOworICAgICAgICByZXR1cm4g
anNNb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGdsb2JhbE9iamVjdCk7CiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogICAgIGlmIChhdXRvKiB3YXNtTW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2FzdDxX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZCo+KHZtLCB0aGlzKSkKLSAgICAgICAgcmV0dXJuIHdhc21N
b2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOworICAgICAgICByZXR1cm4gd2FzbU1vZHVsZVJl
Y29yZC0+ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0KTsKICNlbmRpZgogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQWJzdHJhY3RNb2R1bGVSZWNvcmQuaAppbmRleCA4
MmE0M2EyNDc3ZWExMjUyOTY2NWJlYmVhMGRjYjc4MmE0Nzk1MmIxLi42ZTkzOTQzMGJkMjZkZTdm
ZmEzZWNiNDA2ZTJmNGYxYmUxNjEyZTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BYnN0cmFjdE1vZHVsZVJlY29yZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Fic3RyYWN0TW9kdWxlUmVjb3JkLmgKQEAgLTEwMSwxMiArMTAxLDEyIEBA
IGNsYXNzIEFic3RyYWN0TW9kdWxlUmVjb3JkIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IHsKICAgICAgICAgSWRlbnRpZmllciBsb2NhbE5hbWU7CiAgICAgfTsKIAotICAgIFJlc29sdXRp
b24gcmVzb2x2ZUV4cG9ydChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBleHBvcnROYW1l
KTsKLSAgICBSZXNvbHV0aW9uIHJlc29sdmVJbXBvcnQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgbG9jYWxOYW1lKTsKKyAgICBSZXNvbHV0aW9uIHJlc29sdmVFeHBvcnQoSlNHbG9iYWxP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBleHBvcnROYW1lKTsKKyAgICBSZXNvbHV0aW9uIHJl
c29sdmVJbXBvcnQoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBsb2NhbE5hbWUp
OwogCi0gICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIGhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSk7CisgICAgQWJzdHJhY3RN
b2R1bGVSZWNvcmQqIGhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKTsKIAotICAgIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KiBnZXRNb2R1bGVOYW1lc3BhY2UoRXhlY1N0YXRlKik7CisgICAgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QqIGdldE1vZHVsZU5hbWVzcGFjZShKU0dsb2JhbE9iamVjdCopOwogICAgIAogICAg
IEpTTW9kdWxlRW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50KCkKICAgICB7CkBAIC0xMTks
MTIgKzExOSwxMiBAQCBjbGFzcyBBYnN0cmFjdE1vZHVsZVJlY29yZCA6IHB1YmxpYyBKU0Rlc3Ry
dWN0aWJsZU9iamVjdCB7CiAgICAgICAgIHJldHVybiBtX21vZHVsZUVudmlyb25tZW50LmdldCgp
OwogICAgIH0KIAotICAgIHZvaWQgbGluayhFeGVjU3RhdGUqLCBKU1ZhbHVlIHNjcmlwdEZldGNo
ZXIpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKik7
CisgICAgdm9pZCBsaW5rKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEpTR2xvYmFsT2JqZWN0Kik7
CiAKIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZChWTSYsIFN0cnVjdHVyZSos
IGNvbnN0IElkZW50aWZpZXImKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSos
IFZNJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCosIFZNJik7CiAK
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBjbGFz
cyBBYnN0cmFjdE1vZHVsZVJlY29yZCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAK
IHByaXZhdGU6CiAgICAgc3RydWN0IFJlc29sdmVRdWVyeTsKLSAgICBzdGF0aWMgUmVzb2x1dGlv
biByZXNvbHZlRXhwb3J0SW1wbChFeGVjU3RhdGUqLCBjb25zdCBSZXNvbHZlUXVlcnkmKTsKKyAg
ICBzdGF0aWMgUmVzb2x1dGlvbiByZXNvbHZlRXhwb3J0SW1wbChKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFJlc29sdmVRdWVyeSYpOwogICAgIE9wdGlvbmFsPFJlc29sdXRpb24+IHRyeUdldENhY2hl
ZFJlc29sdXRpb24oVW5pcXVlZFN0cmluZ0ltcGwqIGV4cG9ydE5hbWUpOwogICAgIHZvaWQgY2Fj
aGVSZXNvbHV0aW9uKFVuaXF1ZWRTdHJpbmdJbXBsKiBleHBvcnROYW1lLCBjb25zdCBSZXNvbHV0
aW9uJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xp
c3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAppbmRleCAxZWMz
MWE0MTE4ODQyYWVkNmMyNmFmMzdjOTNkOTgyMTljY2I1Y2RkLi44NDBmODliODhkNDIwY2MzYjc1
YzgzZDZjNTc4MjQxNTQwMmYzMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcmdMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
TGlzdC5oCkBAIC0xODEsOSArMTgxLDkgQEAgY2xhc3MgQXJnTGlzdCB7CiAgICAgewogICAgIH0K
IAotICAgIEFyZ0xpc3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICA6IG1fYXJncyhyZWludGVy
cHJldF9jYXN0PEpTVmFsdWUqPigmZXhlY1tDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApXSkp
Ci0gICAgICAgICwgbV9hcmdDb3VudChleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgQXJnTGlz
dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAgICAgICAgOiBtX2FyZ3MocmVpbnRlcnByZXRfY2Fz
dDxKU1ZhbHVlKj4oJmNhbGxGcmFtZVtDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApXSkpCisg
ICAgICAgICwgbV9hcmdDb3VudChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSkKICAgICB7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmll
dy5oCmluZGV4IGY4OWJmZWRjZTNmYWZmNjM1NzRjNDE1YmJlOTMwNWFlNjBlMjkzOWIuLjE1ZGRk
ZDgzN2YwNzA3YmZiOTFjZWQxZjMxMDE5ODdlNDdiZGZjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCkBAIC0zNyw3ICszNyw2IEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBKU0dsb2JhbE9i
amVjdDsKIGNsYXNzIENhbGxGcmFtZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIAog
Y2xhc3MgQXJyYXlCdWZmZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3
PiB7CiBwdWJsaWM6CkBAIC0xMTEsNyArMTEwLDcgQEAgY2xhc3MgQXJyYXlCdWZmZXJWaWV3IDog
cHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3PiB7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXJWaWV3KiB3cmFwKEV4ZWNT
dGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgPSAwOworICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlclZp
ZXcqIHdyYXAoSlNHbG9iYWxPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopID0gMDsKICAgICAKIHBy
b3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUmVmUHRyPEFy
cmF5QnVmZmVyPiYmLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5j
cHAKaW5kZXggOGQwMDkwNjI0MmU4OWZkZTUxMzEzYzkyOWY2MTUyOWQwMTEzNDQwZC4uYzBkYjE5
NDMzMTQzZjc0Y2RhMjAzNDM0YWQ2MzFlMGJhN2U1NThlMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKQEAgLTY5LDUxICs2OSw1
MSBAQCB2b2lkIEFycmF5Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU0FycmF5
KiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9j
YXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQpCitKU0FycmF5KiBjb25zdHJ1Y3RBcnJheVdp
dGhTaXplUXVpcmsoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSogcHJvZmlsZSwgSlNWYWx1ZSBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0KQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoIWxl
bmd0aC5pc051bWJlcigpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0
cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsIHByb2ZpbGUsIGdsb2JhbE9iamVjdCwgJmxl
bmd0aCwgMSwgbmV3VGFyZ2V0KSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
Y29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZ2xvYmFsT2JqZWN0LCBwcm9maWxlLCAmbGVu
Z3RoLCAxLCBuZXdUYXJnZXQpKTsKICAgICAKLSAgICB1aW50MzJfdCBuID0gbGVuZ3RoLnRvVUlu
dDMyKGV4ZWMpOwotICAgIGlmIChuICE9IGxlbmd0aC50b051bWJlcihleGVjKSkgewotICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJy
YXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iX3MpKTsKKyAg
ICB1aW50MzJfdCBuID0gbGVuZ3RoLnRvVUludDMyKGdsb2JhbE9iamVjdCk7CisgICAgaWYgKG4g
IT0gbGVuZ3RoLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpIHsKKyAgICAgICAgdGhyb3dFeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsICJB
cnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiJfcykpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIHByb2ZpbGUsIGdsb2JhbE9iamVjdCwgbiwg
bmV3VGFyZ2V0KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3RFbXB0
eUFycmF5KGdsb2JhbE9iamVjdCwgcHJvZmlsZSwgbiwgbmV3VGFyZ2V0KSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywg
SlNWYWx1ZSBuZXdUYXJnZXQpCitzdGF0aWMgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5
V2l0aFNpemVRdWlyayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0
JiBhcmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKIHsKICAgICAvLyBhIHNpbmdsZSBudW1lcmljIGFy
Z3VtZW50IGRlbm90ZXMgdGhlIGFycmF5IHNpemUgKCEpCiAgICAgaWYgKGFyZ3Muc2l6ZSgpID09
IDEpCi0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgbnVs
bHB0ciwgZ2xvYmFsT2JqZWN0LCBhcmdzLmF0KDApLCBuZXdUYXJnZXQpOworICAgICAgICByZXR1
cm4gY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKGdsb2JhbE9iamVjdCwgbnVsbHB0ciwgYXJn
cy5hdCgwKSwgbmV3VGFyZ2V0KTsKIAogICAgIC8vIG90aGVyd2lzZSB0aGUgYXJyYXkgaXMgY29u
c3RydWN0ZWQgd2l0aCB0aGUgYXJndW1lbnRzIGluIGl0Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEFy
cmF5KGV4ZWMsIG51bGxwdHIsIGdsb2JhbE9iamVjdCwgYXJncywgbmV3VGFyZ2V0KTsKKyAgICBy
ZXR1cm4gY29uc3RydWN0QXJyYXkoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9j
YXRpb25Qcm9maWxlKj4obnVsbHB0ciksIGFyZ3MsIG5ld1RhcmdldCk7CiB9CiAKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhBcnJheUNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewog
ICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBhcmdz
LCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
b25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZ2xvYmFsT2JqZWN0LCBhcmdzLCBjYWxsRnJhbWUt
Pm5ld1RhcmdldCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxBcnJheUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewogICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKGNhbGxGcmFt
ZSwgZ2xvYmFsT2JqZWN0LCBhcmdzLCBKU1ZhbHVlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNvbnN0cnVjdEFycmF5V2l0aFNpemVRdWlyayhnbG9iYWxPYmplY3QsIGFyZ3MsIEpT
VmFsdWUoKSkpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzQXJyYXlTbG93SW5s
aW5lKEV4ZWNTdGF0ZSogZXhlYywgUHJveHlPYmplY3QqIHByb3h5KQorc3RhdGljIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0FycmF5U2xvd0lubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm94eU9iamVjdCogcHJveHkpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKHByb3h5LT5p
c1Jldm9rZWQoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJB
cnJheS5pc0FycmF5IGNhbm5vdCBiZSBjYWxsZWQgb24gYSBQcm94eSB0aGF0IGhhcyBiZWVuIHJl
dm9rZWQiX3MpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIkFycmF5LmlzQXJyYXkgY2Fubm90IGJlIGNhbGxlZCBvbiBhIFByb3h5IHRoYXQgaGFzIGJl
ZW4gcmV2b2tlZCJfcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgSlNPYmplY3QqIGFyZ3VtZW50ID0gcHJveHktPnRhcmdldCgpOwpAQCAtMTMwLDkgKzEz
MCw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNBcnJheVNsb3dJbmxpbmUoRXhlY1N0
YXRlKiBleGVjLCBQcm94eU9iamVjdCogcHJveHkpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLWJvb2wgaXNBcnJheVNsb3coRXhlY1N0YXRlKiBleGVjLCBQcm94eU9iamVjdCogYXJn
dW1lbnQpCitib29sIGlzQXJyYXlTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3h5T2JqZWN0KiBhcmd1bWVudCkKIHsKLSAgICByZXR1cm4gaXNBcnJheVNsb3dJbmxpbmUoZXhl
YywgYXJndW1lbnQpOworICAgIHJldHVybiBpc0FycmF5U2xvd0lubGluZShnbG9iYWxPYmplY3Qs
IGFyZ3VtZW50KTsKIH0KIAogLy8gRVM2IDcuMi4yCkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBp
c0FycmF5U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3h5T2JqZWN0KiBhcmd1bWVudCkKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJh
eVNsb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7CiAgICAgQVNTRVJUX1VOVVNFRChnbG9iYWxPYmplY3QsIGpzRHluYW1pY0Nhc3Q8UHJveHlP
YmplY3QqPihnbG9iYWxPYmplY3QtPnZtKCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0FycmF5U2xvd0lubGluZShjYWxs
RnJhbWUsIGpzQ2FzdDxQcm94eU9iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzQXJyYXlTbG93
SW5saW5lKGdsb2JhbE9iamVjdCwganNDYXN0PFByb3h5T2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSkpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCmluZGV4IDc3MjMz
YWRlN2IzOWFlZDVlZThmMTZjMDk4MDM4YjAxMThiMmJjNzIuLjdhMDg1MzM0ZmY2MWIyMjhkODcx
MzhkNjM5ZjBlNmM3NWQ1NjI0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUNvbnN0cnVjdG9yLmgKQEAgLTU2LDE0ICs1NiwxNCBAQCBjbGFzcyBBcnJheUNv
bnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIEFycmF5Q29u
c3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKIH07CiAKLUpTQXJyYXkqIGNvbnN0cnVjdEFycmF5
V2l0aFNpemVRdWlyayhFeGVjU3RhdGUqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIGxlbmd0aCwgSlNWYWx1ZSBwcm90b3R5cGUgPSBKU1ZhbHVlKCkp
OworSlNBcnJheSogY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKEpTR2xvYmFsT2JqZWN0Kiwg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIEpTVmFsdWUgbGVuZ3RoLCBKU1ZhbHVlIHByb3RvdHlw
ZSA9IEpTVmFsdWUoKSk7CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlDb25z
dHJ1Y3RvclByaXZhdGVGdW5jSXNBcnJheVNsb3coSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
KTsKLWJvb2wgaXNBcnJheVNsb3coRXhlY1N0YXRlKiwgUHJveHlPYmplY3QqIGFyZ3VtZW50KTsK
K2Jvb2wgaXNBcnJheVNsb3coSlNHbG9iYWxPYmplY3QqLCBQcm94eU9iamVjdCogYXJndW1lbnQp
OwogCiAvLyBFUzYgNy4yLjIKIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LWlzYXJyYXkKLWlubGluZSBib29sIGlzQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGFy
Z3VtZW50VmFsdWUpCitpbmxpbmUgYm9vbCBpc0FycmF5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgYXJndW1lbnRWYWx1ZSkKIHsKICAgICBpZiAoIWFyZ3VtZW50VmFsdWUu
aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzQsNyArNzQsNyBAQCBpbmxp
bmUgYm9vbCBpc0FycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhcmd1bWVudFZhbHVlKQog
CiAgICAgaWYgKGFyZ3VtZW50LT50eXBlKCkgIT0gUHJveHlPYmplY3RUeXBlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzQXJyYXlTbG93KGV4ZWMsIGpzQ2FzdDxQcm94eU9i
amVjdCo+KGFyZ3VtZW50KSk7CisgICAgcmV0dXJuIGlzQXJyYXlTbG93KGdsb2JhbE9iamVjdCwg
anNDYXN0PFByb3h5T2JqZWN0Kj4oYXJndW1lbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAK
aW5kZXggNzk0ODQyMWFhNWVjN2U1OTgyYTcwZTBkZTk4YmIyODFkNDBjNDVkYy4uNGQ4OGZmYjJh
YTQ1ZmQxNzMxNjU1Mzk1N2RmMTA4ZWNhOWYxYTYwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIHZv
aWQgQXJyYXlQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1ByaXZhdGVOYW1lKCksIGdldERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTsKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkudmFsdWVzUHJpdmF0ZU5hbWUoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvVmFsdWVz
RnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSkpOwogCi0gICAgSlNPYmplY3QqIHVuc2NvcGFibGVzID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlw
ZU9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBKU09iamVjdCogdW5zY29wYWJsZXMgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdCh2bSwgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0
dXJlKCkpOwogICAgIHVuc2NvcGFibGVzLT5jb252ZXJ0VG9EaWN0aW9uYXJ5KHZtKTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBjb25zdCB1bnNjb3BhYmxlTmFtZXNbXSA9IHsKICAgICAgICAgJnZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmNvcHlXaXRoaW5QdWJsaWNOYW1lKCksCkBA
IC0xNDQsOSArMTQ0LDkgQEAgdm9pZCBBcnJheVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRQcm9wZXJ0eShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIGluZGV4KQorc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBnZXRQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgCiAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0g
b2JqZWN0LT50cnlHZXRJbmRleFF1aWNrbHkoaW5kZXgpKQpAQCAtMTU2LDUxICsxNTYsNTAgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvYmplY3QsIHVuc2kKICAgICAvLyBvbmx5IHRpbWUgaXQgaXMgb2JzZXJ2YWJs
ZSBpcyB3aGVuIHdlIGVuY291bnRlciBhbiBvcGFxdWUgb2JqZWN0cyAoUHJveHlPYmplY3QgYW5k
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KQogICAgIC8vIHNvbWV3aGVyZSBpbiB0aGUgcHJvdG90
eXBlIGNoYWluLgogICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5KTsKLSAgICBib29sIGhhc1Byb3BlcnR5ID0g
b2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpOworICAgIGJvb2wgaGFz
UHJvcGVydHkgPSBvYmplY3QtPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIGluZGV4LCBz
bG90KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhaGFzUHJv
cGVydHkpOwogICAgIGlmICghaGFzUHJvcGVydHkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
aWYgKFVOTElLRUxZKHNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSkpCi0gICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb2JqZWN0LT5nZXQoZXhlYywgaW5kZXgpKTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGlu
ZGV4KSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHNsb3QuZ2V0VmFsdWUoZXhl
YywgaW5kZXgpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHNsb3QuZ2V0VmFsdWUo
Z2xvYmFsT2JqZWN0LCBpbmRleCkpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNPYmplY3QqIG9iaiwgSlNWYWx1ZSB2
YWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0TGVuZ3RoKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNPYmplY3QqIG9iaiwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3Qob2JqKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBvYmotPm1ldGhvZFRhYmxlKHZt
KS0+cHV0KG9iaiwgZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCB2YWx1ZSwgc2xvdCk7
CisgICAgYm9vbCBzdWNjZXNzID0gb2JqLT5tZXRob2RUYWJsZSh2bSktPnB1dChvYmosIGdsb2Jh
bE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCB2YWx1ZSwgc2xvdCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nl
c3MpKQotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU09iamVjdCogb2JqLCB1
bnNpZ25lZCB2YWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TGVuZ3RoKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNPYmplY3QqIG9iaiwgdW5zaWduZWQg
dmFsdWUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IHRydWU7CiAgICAgaWYgKGlz
SlNBcnJheShvYmopKSB7Ci0gICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+c2V0TGVuZ3Ro
KGV4ZWMsIHZhbHVlLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4o
b2JqKS0+c2V0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdmFsdWUsIHRocm93RXhjZXB0aW9uKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgIHB1dExlbmd0aChleGVjLCB2bSwgb2JqLCBqc051bWJlcih2YWx1
ZSkpOworICAgIHB1dExlbmd0aChnbG9iYWxPYmplY3QsIHZtLCBvYmosIGpzTnVtYmVyKHZhbHVl
KSk7CiB9CiAKIG5hbWVzcGFjZSBBcnJheVByb3RvdHlwZUludGVybmFsIHsKIHN0YXRpYyBib29s
IHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIHNwZWNpZXNXYXRjaHBv
aW50SXNWYWxpZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0KQorQUxXQVlT
X0lOTElORSBib29sIHNwZWNpZXNXYXRjaHBvaW50SXNWYWxpZChWTSYgdm0sIEpTT2JqZWN0KiB0
aGlzT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCh2bSk7CiAgICAgQXJy
YXlQcm90b3R5cGUqIGFycmF5UHJvdG90eXBlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVByb3RvdHlw
ZSgpOwogCiAgICAgaWYgKGdsb2JhbE9iamVjdC0+YXJyYXlTcGVjaWVzV2F0Y2hwb2ludFNldCgp
LnN0YXRlT25KU1RocmVhZCgpID09IENsZWFyV2F0Y2hwb2ludCkgewogICAgICAgICBkYXRhTG9n
TG5JZihBcnJheVByb3RvdHlwZUludGVybmFsOjp2ZXJib3NlLCAiSW5pdGlhbGl6aW5nIEFycmF5
IHNwZWNpZXMgd2F0Y2hwb2ludHMgZm9yIEFycmF5LnByb3RvdHlwZTogIiwgcG9pbnRlckR1bXAo
YXJyYXlQcm90b3R5cGUpLCAiIHdpdGggc3RydWN0dXJlOiAiLCBwb2ludGVyRHVtcChhcnJheVBy
b3RvdHlwZS0+c3RydWN0dXJlKHZtKSksICJcbmFuZCBBcnJheTogIiwgcG9pbnRlckR1bXAoZ2xv
YmFsT2JqZWN0LT5hcnJheUNvbnN0cnVjdG9yKCkpLCAiIHdpdGggc3RydWN0dXJlOiAiLCBwb2lu
dGVyRHVtcChnbG9iYWxPYmplY3QtPmFycmF5Q29uc3RydWN0b3IoKS0+c3RydWN0dXJlKHZtKSkp
OwotICAgICAgICBnbG9iYWxPYmplY3QtPnRyeUluc3RhbGxBcnJheVNwZWNpZXNXYXRjaHBvaW50
KGV4ZWMpOworICAgICAgICBnbG9iYWxPYmplY3QtPnRyeUluc3RhbGxBcnJheVNwZWNpZXNXYXRj
aHBvaW50KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmFycmF5
U3BlY2llc1dhdGNocG9pbnRTZXQoKS5zdGF0ZU9uSlNUaHJlYWQoKSAhPSBDbGVhcldhdGNocG9p
bnQpOwogICAgIH0KIApAQCAtMjE1LDkgKzIxNCw5IEBAIGVudW0gY2xhc3MgU3BlY2llc0NvbnN0
cnVjdFJlc3VsdCB7CiAgICAgQ3JlYXRlZE9iamVjdAogfTsKIAotc3RhdGljIEFMV0FZU19JTkxJ
TkUgc3RkOjpwYWlyPFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2JqZWN0Kj4gc3BlY2llc0Nv
bnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIHVpbnQ2
NF90IGxlbmd0aCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3Ry
dWN0UmVzdWx0LCBKU09iamVjdCo+IHNwZWNpZXNDb25zdHJ1Y3RBcnJheShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iamVjdCwgdWludDY0X3QgbGVuZ3RoKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1
dG8gZXhjZXB0aW9uUmVzdWx0ID0gW10gKCkgewpAQCAtMjI2LDI3ICsyMjUsMjcgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2JqZWN0
Kj4gc3BlY2llc0NvbnN0cnUKIAogICAgIC8vIEVDTUEgOS40LjIuMzogaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlCiAgICAgSlNWYWx1ZSBjb25z
dHJ1Y3RvciA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgYm9vbCB0aGlzSXNBcnJheSA9IGlzQXJyYXko
ZXhlYywgdGhpc09iamVjdCk7CisgICAgYm9vbCB0aGlzSXNBcnJheSA9IGlzQXJyYXkoZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBleGNl
cHRpb25SZXN1bHQoKSk7CiAgICAgaWYgKExJS0VMWSh0aGlzSXNBcnJheSkpIHsKICAgICAgICAg
Ly8gRmFzdCBwYXRoIGluIHRoZSBub3JtYWwgY2FzZSB3aGVyZSB0aGUgdXNlciBoYXMgbm90IHNl
dCBhbiBvd24gY29uc3RydWN0b3IgYW5kIHRoZSBBcnJheS5wcm90b3R5cGUuY29uc3RydWN0b3Ig
aXMgbm9ybWFsLgogICAgICAgICAvLyBXZSBuZWVkIHByb3RvdHlwZSBjaGVjayBmb3Igc3ViY2xh
c3NlcyBvZiBBcnJheSwgd2hpY2ggYXJlIEFycmF5IG9iamVjdHMgYnV0IGhhdmUgYSBkaWZmZXJl
bnQgcHJvdG90eXBlIGJ5IGRlZmF1bHQuCi0gICAgICAgIGJvb2wgaXNWYWxpZCA9IHNwZWNpZXNX
YXRjaHBvaW50SXNWYWxpZChleGVjLCB0aGlzT2JqZWN0KTsKKyAgICAgICAgYm9vbCBpc1ZhbGlk
ID0gc3BlY2llc1dhdGNocG9pbnRJc1ZhbGlkKHZtLCB0aGlzT2JqZWN0KTsKICAgICAgICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgaWYgKExJS0VMWShpc1ZhbGlkKSkKICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpG
YXN0UGF0aCwgbnVsbHB0cik7CiAKLSAgICAgICAgY29uc3RydWN0b3IgPSB0aGlzT2JqZWN0LT5n
ZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IpOworICAgICAgICBjb25zdHJ1
Y3RvciA9IHRoaXNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmNv
bnN0cnVjdG9yKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZXhjZXB0aW9u
UmVzdWx0KCkpOwogICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNDb25zdHJ1Y3Rvcih2bSkpIHsK
ICAgICAgICAgICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3Rvck9iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGNvbnN0cnVjdG9yKTsKLSAgICAgICAgICAgIGJvb2wgaXNBcnJheUNvbnN0cnVjdG9yRnJv
bUFub3RoZXJSZWFsbSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSAhPSBjb25zdHJ1Y3Rv
ck9iamVjdC0+Z2xvYmFsT2JqZWN0KHZtKQorICAgICAgICAgICAgYm9vbCBpc0FycmF5Q29uc3Ry
dWN0b3JGcm9tQW5vdGhlclJlYWxtID0gZ2xvYmFsT2JqZWN0ICE9IGNvbnN0cnVjdG9yT2JqZWN0
LT5nbG9iYWxPYmplY3Qodm0pCiAgICAgICAgICAgICAgICAgJiYgY29uc3RydWN0b3JPYmplY3Qt
PmluaGVyaXRzPEFycmF5Q29uc3RydWN0b3I+KHZtKTsKICAgICAgICAgICAgIGlmIChpc0FycmF5
Q29uc3RydWN0b3JGcm9tQW5vdGhlclJlYWxtKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzT2JqZWN0KCkpIHsKLSAgICAgICAg
ICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3IuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMt
PnNwZWNpZXNTeW1ib2wpOworICAgICAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5n
ZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5zcGVjaWVzU3ltYm9sKTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGV4Y2VwdGlvblJlc3VsdCgpKTsKICAg
ICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc051bGwoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGgsIG51bGxw
dHIpOwpAQCAtMjYyLDcgKzI2MSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxT
cGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09iamVjdCo+IHNwZWNpZXNDb25zdHJ1CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihsZW5ndGgp
KTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBKU09iamVjdCogbmV3
T2JqZWN0ID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdzLCAiU3BlY2llcyBjb25z
dHJ1Y3Rpb24gZGlkIG5vdCBnZXQgYSB2YWxpZCBjb25zdHJ1Y3RvciIpOworICAgIEpTT2JqZWN0
KiBuZXdPYmplY3QgPSBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3RvciwgYXJncywg
IlNwZWNpZXMgY29uc3RydWN0aW9uIGRpZCBub3QgZ2V0IGEgdmFsaWQgY29uc3RydWN0b3IiKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBleGNlcHRpb25SZXN1bHQoKSk7CiAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkNyZWF0ZWRPYmpl
Y3QsIG5ld09iamVjdCk7CiB9CkBAIC0yNzQsNyArMjczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NwZWNpZXNDcmVhdGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE8KICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CiAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuYXNOdW1iZXIoKSk7CiAKLSAgICBz
dGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0
ID0gc3BlY2llc0NvbnN0cnVjdEFycmF5KGNhbGxGcmFtZSwgb2JqZWN0LCBsZW5ndGgpOworICAg
IHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09iamVjdCo+IHNwZWNpZXNSZXN1
bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIGxlbmd0aCk7
CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09IChzcGVjaWVzUmVz
dWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpOwogICAgIGlm
IChVTkxJS0VMWShzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6
OkV4Y2VwdGlvbikpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0yODIsMjAgKzI4MSwxOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3BlY2llc0NyZWF0ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNw
ZWNpZXNSZXN1bHQuc2Vjb25kKTsKIAogICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkpIHsKLSAgICAgICAgdGhyb3dSYW5nZUVycm9yKGNhbGxGcmFt
ZSwgc2NvcGUsICJBcnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRl
Z2VyLiJfcyk7CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
QXJyYXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iX3MpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoY2FsbEZyYW1lLCBudWxscHRy
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVj
dCwgbnVsbHB0ciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkpKSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChFeGVj
U3RhdGUqIGV4ZWMsIGludCBhcmd1bWVudCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB1bmRl
ZmluZWRWYWx1ZSA9IDApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGFyZ3VtZW50Q2xhbXBlZElu
ZGV4RnJvbVN0YXJ0T3JFbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB1bmRlZmluZWRWYWx1ZSA9IDApCiB7Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFZhbHVlOwogCi0gICAg
ZG91YmxlIGluZGV4RG91YmxlID0gdmFsdWUudG9JbnRlZ2VyKGV4ZWMpOworICAgIGRvdWJsZSBp
bmRleERvdWJsZSA9IHZhbHVlLnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwogICAgIGlmIChpbmRl
eERvdWJsZSA8IDApIHsKICAgICAgICAgaW5kZXhEb3VibGUgKz0gbGVuZ3RoOwogICAgICAgICBy
ZXR1cm4gaW5kZXhEb3VibGUgPCAwID8gMCA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleERv
dWJsZSk7CkBAIC0zMTksOSArMzE3LDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBhcmd1bWVu
dENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKEV4ZWNTdGF0ZSogZXhlYywgaW50IGEKIC8vIG11
c3QgYmUgaW50cm9kdWNpbmcgbmV3IHZhbHVlcy4KIAogdGVtcGxhdGU8SlNBcnJheTo6U2hpZnRD
b3VudE1vZGUgc2hpZnRDb3VudE1vZGU+Ci12b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1
bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBzaGlmdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVy
LCB1bnNpZ25lZCBjdXJyZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBs
ZW5ndGgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudENvdW50ID4gcmVzdWx0Q291bnQpOwpAQCAtMzMy
LDQxICszMzAsNDEgQEAgdm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnQKIAogICAgIGlmIChpc0pTQXJy
YXkodGhpc09iaikpIHsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmop
OwotICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0aCAmJiBhcnJheS0+c2hpZnRD
b3VudDxzaGlmdENvdW50TW9kZT4oZXhlYywgaGVhZGVyLCBjb3VudCkpCisgICAgICAgIGlmIChh
cnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFycmF5LT5zaGlmdENvdW50PHNoaWZ0Q291bnRN
b2RlPihnbG9iYWxPYmplY3QsIGhlYWRlciwgY291bnQpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgayA9IGhlYWRlcjsgayA8IGxlbmd0aCAtIGN1cnJl
bnRDb3VudDsgKytrKSB7CiAgICAgICAgIHVuc2lnbmVkIGZyb20gPSBrICsgY3VycmVudENvdW50
OwogICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudDsKLSAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGZyb20pOworICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBmcm9tKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKHZh
bHVlKSB7Ci0gICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2
YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGdsb2Jh
bE9iamVjdCwgdG8sIHZhbHVlLCB0cnVlKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzT2JqLCBleGVjLCB0byk7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5t
ZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmpl
Y3QsIHRvKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKKyAgICAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFibGVUb0RlbGV0
ZVByb3BlcnR5RXJyb3IpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSBsZW5ndGg7IGsgPiBsZW5n
dGggLSBjb3VudDsgLS1rKSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmotPm1ldGhv
ZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGsgLSAxKTsK
KyAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZ2xvYmFsT2JqZWN0LCBrIC0gMSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlmICghc3VjY2Vzcykg
ewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFVuYWJsZVRvRGVsZXRl
UHJvcGVydHlFcnJvcik7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQogfQogCiB0ZW1wbGF0ZTxKU0FycmF5OjpTaGlmdENvdW50TW9k
ZSBzaGlmdENvdW50TW9kZT4KLXZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5zaWdu
ZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgdW5zaGlmdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1
bnNpZ25lZCBjdXJyZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5n
dGgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0Q291bnQgPiBjdXJyZW50Q291bnQpOwpAQCAtMzc3LDE0
ICszNzUsMTQgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmUKIAogICAgIC8vIEd1YXJkIGFnYWlu
c3Qgb3ZlcmZsb3cuCiAgICAgaWYgKGNvdW50ID4gVUlOVF9NQVggLSBsZW5ndGgpIHsKLSAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBhcnJh
eSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVu
Z3RoKSB7Ci0gICAgICAgICAgICBib29sIGhhbmRsZWQgPSBhcnJheS0+dW5zaGlmdENvdW50PHNo
aWZ0Q291bnRNb2RlPihleGVjLCBoZWFkZXIsIGNvdW50KTsKKyAgICAgICAgICAgIGJvb2wgaGFu
ZGxlZCA9IGFycmF5LT51bnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGdsb2JhbE9iamVjdCwg
aGVhZGVyLCBjb3VudCk7CiAgICAgICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSB8fCBoYW5kbGVkKTsKICAgICAgICAgICAgIGlmIChoYW5kbGVkKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTM5NCwxNiArMzkyLDE2IEBAIHZvaWQgdW5zaGlmdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1
cnJlCiAgICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVh
ZGVyOyAtLWspIHsKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAx
OwogICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7Ci0gICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKTsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgZnJvbSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlm
ICh2YWx1ZSkgewotICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCB0
bywgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShn
bG9iYWxPYmplY3QsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgodGhpc09iaiwgZXhlYywgdG8pOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09i
ai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZ2xvYmFs
T2JqZWN0LCB0byk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lk
KCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgewotICAgICAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJy
b3IpOworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NDksOSArNDQ3LDkgQEAgaW5saW5lIGJvb2wg
Y29udGFpbnNIb2xlKFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTT2JqZWN0
KiB0aGlzT2JqZWN0LCBTdHJpbmdWaWV3IHNlcGFyYXRvciwgdW5zaWduZWQgbGVuZ3RoLCBib29s
KiBzYXdIb2xlcyA9IG51bGxwdHIpCitpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iamVjdCwgU3RyaW5nVmlldyBzZXBh
cmF0b3IsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCogc2F3SG9sZXMgPSBudWxscHRyKQogewotICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHN3aXRjaCAo
dGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTQ1OSw3ICs0NTcsNyBAQCBpbmxpbmUg
SlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUmIHN0YXRlLCBKU09iamVjdCogdGhpc09iamVjdCwg
U3RyaW5nVmlldyBzZXBhcgogICAgICAgICBhdXRvJiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+
YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBidXR0ZXJmbHkucHVi
bGljTGVuZ3RoKCkpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEpTU3RyaW5nSm9pbmVy
IGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOworICAgICAgICBKU1N0cmluZ0pvaW5l
ciBqb2luZXIoZ2xvYmFsT2JqZWN0LCBzZXBhcmF0b3IsIGxlbmd0aCk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRlcmZs
eS5jb250aWd1b3VzKCkuZGF0YSgpOwogICAgICAgICBib29sIGhvbGVzS25vd25Ub0JlT0sgPSBm
YWxzZTsKQEAgLTQ3OCwxOSArNDc2LDE5IEBAIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBTdHJpbmdWaWV3IHNlcGFyCiAgICAg
ICAgICAgICAgICAgam9pbmVyLmFwcGVuZEVtcHR5U3RyaW5nKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqb2luZXIuam9pbihz
dGF0ZSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpvaW5lci5qb2luKGds
b2JhbE9iamVjdCkpOwogICAgIH0KICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgIGF1dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2JqZWN0LT5idXR0ZXJmbHko
KTsKICAgICAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IGJ1dHRlcmZseS5wdWJsaWNMZW5ndGgo
KSkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0
YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7CisgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihn
bG9iYWxPYmplY3QsIHNlcGFyYXRvciwgbGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3Vv
dXMoKS5kYXRhKCk7CiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IGlmIChKU1ZhbHVlIHZhbHVlID0gZGF0YVtpXS5nZXQoKSkgewotICAgICAgICAgICAgICAgIGlm
ICgham9pbmVyLmFwcGVuZFdpdGhvdXRTaWRlRWZmZWN0cyhzdGF0ZSwgdmFsdWUpKQorICAgICAg
ICAgICAgICAgIGlmICgham9pbmVyLmFwcGVuZFdpdGhvdXRTaWRlRWZmZWN0cyhnbG9iYWxPYmpl
Y3QsIHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKHNhd0hvbGVzKQpAQCAtNTAzLDEz
ICs1MDEsMTMgQEAgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNP
YmplY3QqIHRoaXNPYmplY3QsIFN0cmluZ1ZpZXcgc2VwYXIKICAgICAgICAgICAgICAgICBqb2lu
ZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpvaW5lci5qb2luKHN0YXRlKSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgam9pbmVyLmpvaW4oZ2xvYmFsT2JqZWN0KSk7CiAg
ICAgfQogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBhdXRv
JiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpKQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5n
dGgpOworICAgICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoZ2xvYmFsT2JqZWN0LCBzZXBhcmF0
b3IsIGxlbmd0aCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAg
ICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwog
ICAgICAgICBib29sIGhvbGVzS25vd25Ub0JlT0sgPSBmYWxzZTsKQEAgLTUyOCw3ICs1MjYsNyBA
QCBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUmIHN0YXRlLCBKU09iamVjdCogdGhp
c09iamVjdCwgU3RyaW5nVmlldyBzZXBhcgogICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmRF
bXB0eVN0cmluZygpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgam9pbmVyLmpvaW4oc3RhdGUpKTsKKyAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBqb2luZXIuam9pbihnbG9iYWxPYmplY3QpKTsKICAgICB9CiAgICAg
Y2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChsZW5ndGgg
JiYgaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCB0aGlzT2JqZWN0KSkKQEAgLTU0MCw4
ICs1MzgsOCBAQCBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUmIHN0YXRlLCBKU09i
amVjdCogdGhpc09iamVjdCwgU3RyaW5nVmlldyBzZXBhcgogICAgICAgICAgICAgaWYgKGxlbmd0
aCA8PSAxKQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNFbXB0
eVN0cmluZyh2bSkpOwogICAgICAgICAgICAgaWYgKHNlcGFyYXRvci5pczhCaXQoKSkKLSAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlcGVhdENoYXJhY3RlcihzdGF0
ZSwgc2VwYXJhdG9yLmNoYXJhY3RlcnM4KClbMF0sIGxlbmd0aCAtIDEpKTsKLSAgICAgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVwZWF0Q2hhcmFjdGVyKHN0YXRlLCBzZXBhcmF0
b3IuY2hhcmFjdGVyczE2KClbMF0sIGxlbmd0aCAtIDEpKTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlcGVhdENoYXJhY3RlcihnbG9iYWxPYmplY3QsIHNlcGFy
YXRvci5jaGFyYWN0ZXJzOCgpWzBdLCBsZW5ndGggLSAxKSk7CisgICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHJlcGVhdENoYXJhY3RlcihnbG9iYWxPYmplY3QsIHNlcGFyYXRv
ci5jaGFyYWN0ZXJzMTYoKVswXSwgbGVuZ3RoIC0gMSkpOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGpzRW1wdHlTdHJpbmcodm0pOwogICAgICAgICAg
ICAgaWYgKGxlbmd0aCA8PSAxKQpAQCAtNTUyLDEzICs1NTAsMTMgQEAgaW5saW5lIEpTVmFsdWUg
ZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNPYmplY3QqIHRoaXNPYmplY3QsIFN0cmluZ1Zp
ZXcgc2VwYXIKICAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gbGVuZ3RoIC0gMTsKICAgICAg
ICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAgICBpZiAoY291bnQgJiAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzU3RyaW5nKCZzdGF0ZSwgcmVzdWx0LCBvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ganNTdHJpbmcoZ2xvYmFsT2JqZWN0LCBy
ZXN1bHQsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb3VudCA+
Pj0gMTsKICAgICAgICAgICAgICAgICBpZiAoIWNvdW50KQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIG9wZXJhbmQgPSBqc1N0cmluZygmc3RhdGUs
IG9wZXJhbmQsIG9wZXJhbmQpOworICAgICAgICAgICAgICAgIG9wZXJhbmQgPSBqc1N0cmluZyhn
bG9iYWxPYmplY3QsIG9wZXJhbmQsIG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU2
NywxNSArNTY1LDE1IEBAIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBTdHJpbmdWaWV3IHNlcGFyCiAgICAgfQogCiBnZW5lcmFs
Q2FzZToKLSAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3Ro
KTsKKyAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoZ2xvYmFsT2JqZWN0LCBzZXBhcmF0b3IsIGxl
bmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgam9pbmVyLmFwcGVuZChzdGF0
ZSwgZWxlbWVudCk7CisgICAgICAgIGpvaW5lci5hcHBlbmQoZ2xvYmFsT2JqZWN0LCBlbGVtZW50
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9Ci0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqb2luZXIuam9pbihzdGF0ZSkpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgam9pbmVyLmpvaW4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIGlu
bGluZSBib29sIGNhblVzZURlZmF1bHRBcnJheUpvaW5Gb3JUb1N0cmluZyhWTSYgdm0sIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0KQpAQCAtNTk3LDE1ICs1OTUsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoY2FsbEZyYW1lLCBTdHJpY3RNb2RlKTsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGdsb2JhbE9i
amVjdCwgU3RyaWN0TW9kZSk7CiAKICAgICAvLyAxLiBMZXQgYXJyYXkgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIFRvT2JqZWN0IG9uIHRoZSB0aGlzIHZhbHVlLgotICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmICghY2FuVXNl
RGVmYXVsdEFycmF5Sm9pbkZvclRvU3RyaW5nKHZtLCB0aGlzT2JqZWN0KSkgewogICAgICAgICAv
LyAyLiBMZXQgZnVuYyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJu
YWwgbWV0aG9kIG9mIGFycmF5IHdpdGggYXJndW1lbnQgImpvaW4iLgotICAgICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gSlNWYWx1ZSh0aGlzT2JqZWN0KS5nZXQoY2FsbEZyYW1lLCB2bS5wcm9wZXJ0
eU5hbWVzLT5qb2luKTsKKyAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IEpTVmFsdWUodGhpc09i
amVjdCkuZ2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+am9pbik7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgICAg
IC8vIDMuIElmIElzQ2FsbGFibGUoZnVuYykgaXMgZmFsc2UsIHRoZW4gbGV0IGZ1bmMgYmUgdGhl
IHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICgxNS4y
LjQuMikuCkBAIC02MTgsMTEgKzYxNiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAg
ICAgICAgICAgY3VzdG9tSm9pbkNhc2UgPSB0cnVlOwogCiAgICAgICAgIGlmIChVTkxJS0VMWShj
dXN0b21Kb2luQ2FzZSkpCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGNhbGxGcmFtZSwgIltvYmplY3Qg
IiwgdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5jbGFzc05hbWUodGhpc09iamVjdCwgdm0p
LCAiXSIpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGdsb2JhbE9iamVjdCwgIltvYmplY3QgIiwg
dGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5jbGFzc05hbWUodGhpc09iamVjdCwgdm0pLCAi
XSIpKSk7CiAKICAgICAgICAgLy8gNC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUg
W1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mIGZ1bmMgcHJvdmlkaW5nIGFycmF5IGFzIHRoZSB0
aGlzIHZhbHVlIGFuZCBhbiBlbXB0eSBhcmd1bWVudHMgbGlzdC4KICAgICAgICAgaWYgKCFpc0pT
QXJyYXkodGhpc09iamVjdCkgfHwgY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Okhvc3QgfHwgY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uICE9IGFycmF5UHJvdG9GdW5jSm9pbikKLSAgICAgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoY2FsbEZyYW1lLCBm
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzT2JqZWN0LCAqdm0uZW1wdHlMaXN0KSkp
OworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
Y2FsbChnbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNPYmpl
Y3QsICp2bS5lbXB0eUxpc3QpKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKGlzSlNBcnJheSh0aGlz
VmFsdWUpKTsKQEAgLTYzMCw3ICs2MjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc0FycmF5LT5sZW5ndGgoKTsKIAotICAgIFN0cmluZ1Jl
Y3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihjYWxsRnJhbWUsIHRoaXNBcnJheSk7CisgICAgU3RyaW5n
UmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGdsb2JhbE9iamVjdCwgdGhpc0FycmF5KTsKICAgICBF
WENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVhcmx5UmV0dXJu
VmFsdWUoKSk7CiAgICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIuZWFy
bHlSZXR1cm5WYWx1ZSgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0
dXJuVmFsdWUpOwpAQCAtNjQ5LDcgKzY0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAg
ICAgICAgIH0KIAogICAgICAgICBib29sIHNhd0hvbGVzID0gZmFsc2U7Ci0gICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gZmFzdEpvaW4oKmNhbGxGcmFtZSwgdGhpc0FycmF5LCB7ICZjb21tYSwgMSB9
LCBsZW5ndGgsICZzYXdIb2xlcyk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZmFzdEpvaW4o
Z2xvYmFsT2JqZWN0LCB0aGlzQXJyYXksIHsgJmNvbW1hLCAxIH0sIGxlbmd0aCwgJnNhd0hvbGVz
KTsKIAogICAgICAgICBpZiAoIXNhd0hvbGVzICYmIHJlc3VsdCAmJiBpc0pTU3RyaW5nKHJlc3Vs
dCkgJiYgaXNDb1cpIHsKICAgICAgICAgICAgIEFTU0VSVChKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
ZnJvbUJ1dHRlcmZseSh0aGlzQXJyYXktPmJ1dHRlcmZseSgpKSA9PSBpbW11dGFibGVCdXR0ZXJm
bHkpOwpAQCAtNjU5LDczICs2NTcsNzMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIEpTU3RyaW5n
Sm9pbmVyIGpvaW5lcigqY2FsbEZyYW1lLCAnLCcsIGxlbmd0aCk7CisgICAgSlNTdHJpbmdKb2lu
ZXIgam9pbmVyKGdsb2JhbE9iamVjdCwgJywnLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNBcnJh
eS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAg
ICAgICAgIGVsZW1lbnQgPSB0aGlzQXJyYXktPmdldChjYWxsRnJhbWUsIGkpOworICAgICAgICAg
ICAgZWxlbWVudCA9IHRoaXNBcnJheS0+Z2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAg
fQotICAgICAgICBqb2luZXIuYXBwZW5kKCpjYWxsRnJhbWUsIGVsZW1lbnQpOworICAgICAgICBq
b2luZXIuYXBwZW5kKGdsb2JhbE9iamVjdCwgZWxlbWVudCk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIAotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpvaW5lci5qb2luKCpjYWxsRnJhbWUp
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoam9pbmVy
LmpvaW4oZ2xvYmFsT2JqZWN0KSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGNhbGxGcmFtZSwg
U3RyaWN0TW9kZSk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3QsIFN0cmljdE1vZGUpOwogCi0gICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoY2FsbEZyYW1lKTsKKyAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHRvTGVuZ3RoKGNhbGxGcmFtZSwgdGhpc09iamVjdCk7CisgICAgdW5zaWduZWQgbGVu
Z3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIFN0cmluZ1JlY3Vyc2lv
bkNoZWNrZXIgY2hlY2tlcihjYWxsRnJhbWUsIHRoaXNPYmplY3QpOworICAgIFN0cmluZ1JlY3Vy
c2lvbkNoZWNrZXIgY2hlY2tlcihnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwogICAgIEVYQ0VQ
VElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1
ZSgpKTsKICAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJl
dHVyblZhbHVlKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5W
YWx1ZSk7CiAKLSAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoKmNhbGxGcmFtZSwgJywn
LCBsZW5ndGgpOworICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcihnbG9iYWxPYmplY3Qs
ICcsJywgbGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogI2lmIEVOQUJMRShJTlRMKQogICAgIEFyZ0xpc3QgYXJndW1lbnRzKGNhbGxG
cmFtZSk7CiAjZW5kaWYKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoY2FsbEZy
YW1lLCBpKTsKKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgo
Z2xvYmFsT2JqZWN0LCBpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkp
CiAgICAgICAgICAgICBlbGVtZW50ID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24gPSBlbGVtZW50LmdldChj
YWxsRnJhbWUsIHZtLnByb3BlcnR5TmFtZXMtPnRvTG9jYWxlU3RyaW5nKTsKKyAgICAgICAgICAg
IEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZ2xvYmFsT2JqZWN0LCB2
bS5wcm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0cmluZyk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2
bSwgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgICAgICBpZiAoY2FsbFR5
cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICNpZiBFTkFCTEUoSU5UTCkKLSAgICAgICAgICAgICAg
ICBlbGVtZW50ID0gY2FsbChjYWxsRnJhbWUsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBlbGVtZW50LCBhcmd1bWVudHMpOworICAgICAgICAgICAgICAgIGVsZW1lbnQg
PSBjYWxsKGdsb2JhbE9iamVjdCwgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGVsZW1lbnQsIGFyZ3VtZW50cyk7CiAjZWxzZQotICAgICAgICAgICAgICAgIGVsZW1lbnQg
PSBjYWxsKGNhbGxGcmFtZSwgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IGVsZW1lbnQsICp2bS5lbXB0eUxpc3QpOworICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBjYWxs
KGdsb2JhbE9iamVjdCwgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVs
ZW1lbnQsICp2bS5lbXB0eUxpc3QpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqY2FsbEZyYW1lLCBlbGVtZW50KTsK
KyAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChnbG9iYWxPYmplY3QsIGVsZW1lbnQpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9
CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShzdHJpbmdK
b2luZXIuam9pbigqY2FsbEZyYW1lKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0pvaW5lci5qb2luKGdsb2JhbE9iamVjdCkpKTsKIH0KIAot
c3RhdGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLCBKU09iamVjdCogdGhpc09i
amVjdCwgSlNTdHJpbmcqIHNlcGFyYXRvciwgdWludDY0X3QgbGVuZ3RoKQorc3RhdGljIEpTVmFs
dWUgc2xvd0pvaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHRoaXNP
YmplY3QsIEpTU3RyaW5nKiBzZXBhcmF0b3IsIHVpbnQ2NF90IGxlbmd0aCkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDUuIElmIGxlbiBp
cyB6ZXJvLCByZXR1cm4gdGhlIGVtcHR5IFN0cmluZy4KQEAgLTczMyw3ICs3MzEsNyBAQCBzdGF0
aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0
LCBKU1N0cmluZyogc2VwYXJhdAogICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyh2bSk7CiAK
ICAgICAvLyA2LiBMZXQgZWxlbWVudDAgYmUgR2V0KE8sICIwIikuCi0gICAgSlNWYWx1ZSBlbGVt
ZW50MCA9IHRoaXNPYmplY3QtPmdldEluZGV4KCZleGVjLCAwKTsKKyAgICBKU1ZhbHVlIGVsZW1l
bnQwID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoZ2xvYmFsT2JqZWN0LCAwKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gNy4gSWYgZWxlbWVudDAgaXMgdW5k
ZWZpbmVkIG9yIG51bGwsIGxldCBSIGJlIHRoZSBlbXB0eSBTdHJpbmc7IG90aGVyd2lzZSwgbGV0
IFIgYmUgPyBUb1N0cmluZyhlbGVtZW50MCkuCkBAIC03NDEsNyArNzM5LDcgQEAgc3RhdGljIEpT
VmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNT
dHJpbmcqIHNlcGFyYXQKICAgICBpZiAoZWxlbWVudDAuaXNVbmRlZmluZWRPck51bGwoKSkKICAg
ICAgICAgciA9IGpzRW1wdHlTdHJpbmcodm0pOwogICAgIGVsc2UKLSAgICAgICAgciA9IGVsZW1l
bnQwLnRvU3RyaW5nKCZleGVjKTsKKyAgICAgICAgciA9IGVsZW1lbnQwLnRvU3RyaW5nKGdsb2Jh
bE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8v
IDguIExldCBrIGJlIDEuCkBAIC03NDksNyArNzQ3LDcgQEAgc3RhdGljIEpTVmFsdWUgc2xvd0pv
aW4oRXhlY1N0YXRlJiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNTdHJpbmcqIHNlcGFy
YXQKICAgICAvLyA5LmUgSW5jcmVhc2UgayBieSAxLi4KICAgICBmb3IgKHVpbnQ2NF90IGsgPSAx
OyBrIDwgbGVuZ3RoOyArK2spIHsKICAgICAgICAgLy8gYi4gTGV0IGVsZW1lbnQgYmUgPyBHZXQo
TywgISBUb1N0cmluZyhrKSkuCi0gICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3Qt
PmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgQXRvbVN0cmluZzo6bnVtYmVy
KGspKSk7CisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldChnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIEF0b21TdHJpbmc6Om51bWJlcihrKSkp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIC8v
IGMuIElmIGVsZW1lbnQgaXMgdW5kZWZpbmVkIG9yIG51bGwsIGxldCBuZXh0IGJlIHRoZSBlbXB0
eSBTdHJpbmc7IG90aGVyd2lzZSwgbGV0IG5leHQgYmUgPyBUb1N0cmluZyhlbGVtZW50KS4KQEAg
LTc1OSwxMiArNzU3LDEyIEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhl
YywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTU3RyaW5nKiBzZXBhcmF0CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBuZXh0ID0ganNFbXB0eVN0cmluZyh2bSk7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgbmV4dCA9IGVsZW1lbnQudG9TdHJpbmcoJmV4ZWMpOwor
ICAgICAgICAgICAgbmV4dCA9IGVsZW1lbnQudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgICAgICAvLyBhLiBMZXQg
UyBiZSB0aGUgU3RyaW5nIHZhbHVlIHByb2R1Y2VkIGJ5IGNvbmNhdGVuYXRpbmcgUiBhbmQgc2Vw
LgogICAgICAgICAvLyBkLiBMZXQgUiBiZSBhIFN0cmluZyB2YWx1ZSBwcm9kdWNlZCBieSBjb25j
YXRlbmF0aW5nIFMgYW5kIG5leHQuCi0gICAgICAgIHIgPSBqc1N0cmluZygmZXhlYywgciwgc2Vw
YXJhdG9yLCBuZXh0KTsKKyAgICAgICAgciA9IGpzU3RyaW5nKGdsb2JhbE9iamVjdCwgciwgc2Vw
YXJhdG9yLCBuZXh0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgLy8gMTAuIFJldHVybiBSLgpAQCAtNzc3LDE4ICs3NzUsMTggQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICAvLyAxLiBMZXQgTyBiZSA/IFRvT2JqZWN0KHRoaXMgdmFsdWUpLgotICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoY2FsbEZy
YW1lLCBTdHJpY3RNb2RlKS50b09iamVjdChjYWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoZ2xvYmFsT2JqZWN0LCBTdHJp
Y3RNb2RlKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFz
Y29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlz
T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoY2FsbEZyYW1lLCB0aGlzT2JqZWN0KTsKKyAgICBTdHJp
bmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKICAg
ICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBjaGVja2VyLmVhcmx5UmV0
dXJuVmFsdWUoKSk7CiAgICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1cm5WYWx1ZSA9IGNoZWNrZXIu
ZWFybHlSZXR1cm5WYWx1ZSgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5
UmV0dXJuVmFsdWUpOwogCiAgICAgLy8gMi4gTGV0IGxlbiBiZSA/IFRvTGVuZ3RoKD8gR2V0KE8s
ICJsZW5ndGgiKSkuCi0gICAgZG91YmxlIGxlbmd0aCA9IHRvTGVuZ3RoKGNhbGxGcmFtZSwgdGhp
c09iamVjdCk7CisgICAgZG91YmxlIGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhp
c09iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICAvLyAzLiBJZiBzZXBhcmF0b3IgaXMgdW5kZWZpbmVkLCBsZXQgc2VwYXJhdG9y
IGJlIHRoZSBzaW5nbGUtZWxlbWVudCBTdHJpbmcgIiwiLgpAQCAtODAyLDMwICs4MDAsMzAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2EKICAgICAgICAgICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRv
ciA9IGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHZtLCBjb21tYSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoc2xvd0pvaW4oKmNhbGxG
cmFtZSwgdGhpc09iamVjdCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KSkpOworICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoc2xvd0pvaW4oZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwgbGVuZ3RoNjQpKSk7CiAgICAgICAgIH0K
IAogICAgICAgICB1bnNpZ25lZCB1bnNpZ25lZExlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihsZW5ndGgpOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPih1bnNpZ25lZExl
bmd0aCkgPT0gbGVuZ3RoKTsKIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShmYXN0Sm9pbigqY2FsbEZyYW1lLCB0aGlzT2JqZWN0LCB7ICZjb21tYSwg
MSB9LCB1bnNpZ25lZExlbmd0aCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoZmFzdEpvaW4oZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB7ICZj
b21tYSwgMSB9LCB1bnNpZ25lZExlbmd0aCkpKTsKICAgICB9CiAKICAgICAvLyA0LiBMZXQgc2Vw
IGJlID8gVG9TdHJpbmcoc2VwYXJhdG9yKS4KLSAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBz
ZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhjYWxsRnJhbWUpOworICAgIEpTU3RyaW5nKiBqc1NlcGFy
YXRvciA9IHNlcGFyYXRvclZhbHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoVU5MSUtF
TFkobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIHx8ICFjYW5V
c2VGYXN0Sm9pbih0aGlzT2JqZWN0KSkpIHsKICAgICAgICAgdWludDY0X3QgbGVuZ3RoNjQgPSBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoKTsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGRvdWJsZT4obGVuZ3RoNjQpID09IGxlbmd0aCk7CiAKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoc2xvd0pvaW4oKmNhbGxGcmFtZSwgdGhpc09iamVj
dCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShzbG93Sm9pbihnbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qs
IGpzU2VwYXJhdG9yLCBsZW5ndGg2NCkpKTsKICAgICB9CiAKLSAgICBhdXRvIHZpZXdXaXRoU3Ry
aW5nID0ganNTZXBhcmF0b3ItPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhjYWxsRnJhbWUpOwor
ICAgIGF1dG8gdmlld1dpdGhTdHJpbmcgPSBqc1NlcGFyYXRvci0+dmlld1dpdGhVbmRlcmx5aW5n
U3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShmYXN0Sm9pbigqY2FsbEZyYW1lLCB0aGlzT2JqZWN0LCB2aWV3V2l0aFN0cmluZy52
aWV3LCBsZW5ndGgpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoZmFzdEpvaW4oZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB2aWV3V2l0aFN0cmluZy52
aWV3LCBsZW5ndGgpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNQb3AoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCkBAIC04MzMsMzQgKzgzMSwzNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jUG9wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbAogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkudG9UaGlzKGNhbGxGcmFtZSwgU3RyaWN0TW9kZSk7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3QsIFN0cmlj
dE1vZGUpOwogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlzVmFsdWUpKQotICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShhc0FycmF5KHRoaXNWYWx1ZSktPnBv
cChjYWxsRnJhbWUpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKGFzQXJyYXkodGhpc1ZhbHVlKS0+cG9wKGdsb2JhbE9iamVjdCkpKTsKIAotICAg
IEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAg
ICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAg
IGlmIChVTkxJS0VMWSghdGhpc09iaikpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgp
OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGNhbGxGcmFtZSwgdGhpc09iaik7Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlm
IChsZW5ndGggPT0gMCkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHB1dExl
bmd0aChjYWxsRnJhbWUsIHZtLCB0aGlzT2JqLCBqc051bWJlcihsZW5ndGgpKTsKKyAgICAgICAg
cHV0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdm0sIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCkpOwog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGNhbGxGcmFtZSwgbGVuZ3RoIC0gMSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqLT5nZXQoZ2xvYmFsT2JqZWN0LCBsZW5ndGgg
LSAxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
LSAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzT2JqLCBjYWxsRnJhbWUsIGxlbmd0aCAtIDEpOworICAgIGJvb2wgc3Vj
Y2VzcyA9IHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRo
aXNPYmosIGdsb2JhbE9iamVjdCwgbGVuZ3RoIC0gMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkg
ewotICAgICAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBVbmFibGVUb0RlbGV0
ZVByb3BlcnR5RXJyb3IpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCBVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpOwogICAgICAgICByZXR1cm4gZW5jb2Rl
ZEpTVmFsdWUoKTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHB1dExlbmd0aChj
YWxsRnJhbWUsIHZtLCB0aGlzT2JqLCBqc051bWJlcihsZW5ndGggLSAxKSk7CisgICAgcHV0TGVu
Z3RoKGdsb2JhbE9iamVjdCwgdm0sIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKQEAgLTg2OCwzNyArODY2LDM3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGNhbGxGcmFt
ZSwgU3RyaWN0TW9kZSk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3QsIFN0cmljdE1vZGUpOwogCiAgICAgaWYgKExJS0VM
WShpc0pTQXJyYXkodGhpc1ZhbHVlKSAmJiBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA9PSAx
KSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc1ZhbHVlKTsKICAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBhcnJheS0+cHVzaElubGluZShjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgICAgICBhcnJheS0+cHVzaElu
bGluZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwog
ICAgIH0KICAgICAKLSAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b09iamVjdChj
YWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09
ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1cm4g
ZW5jb2RlZEpTVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChjYWxsRnJh
bWUsIHRoaXNPYmopOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVj
dCwgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCk7IG4rKykgewogICAgICAgICAvLyBDaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdzsg
d2hlcmUgc2FmZSB3ZSBjYW4gZG8gYSBmYXN0IHB1dCBieSBpbmRleC4KICAgICAgICAgaWYgKGxl
bmd0aCArIG4gPj0gbGVuZ3RoKQotICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFibGUodm0p
LT5wdXRCeUluZGV4KHRoaXNPYmosIGNhbGxGcmFtZSwgbGVuZ3RoICsgbiwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudChuKSwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RU
YWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpc09iaiwgZ2xvYmFsT2JqZWN0LCBsZW5ndGggKyBuLCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KG4pLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqKTsKLSAgICAgICAgICAgIElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgSlNWYWx1
ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikp
LnRvV1RGU3RyaW5nKGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFi
bGUodm0pLT5wdXQodGhpc09iaiwgY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQobiksIHNsb3QpOworICAgICAgICAgICAgSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBKU1ZhbHVlKHN0YXRpY19jYXN0
PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9XVEZTdHJpbmco
Z2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPnB1
dCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIAogICAgIEpTVmFsdWUg
bmV3TGVuZ3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2
NF90PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSkpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICBwdXRMZW5ndGgoY2FsbEZyYW1lLCB2bSwgdGhpc09iaiwgbmV3TGVuZ3RoKTsKKyAgICBw
dXRMZW5ndGgoZ2xvYmFsT2JqZWN0LCB2bSwgdGhpc09iaiwgbmV3TGVuZ3RoKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG5ld0xlbmd0aCk7CiB9CiAKQEAgLTkwNywxMiArOTA1LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNSZXZlcnNlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoY2FsbEZyYW1l
LCBTdHJpY3RNb2RlKS50b09iamVjdChjYWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoZ2xvYmFsT2JqZWN0LCBTdHJpY3RN
b2RlKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFzY29w
ZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2Jq
ZWN0KSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0b0xlbmd0aChjYWxsRnJhbWUsIHRoaXNPYmplY3QpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB0aGlzT2JqZWN0LT5l
bnN1cmVXcml0YWJsZSh2bSk7CkBAIC05NTcsNDIgKzk1NSw0MiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUmV2ZXJzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LAogICAgIHVuc2lnbmVkIG1pZGRsZSA9IGxlbmd0aCAvIDI7CiAgICAgZm9yICh1bnNp
Z25lZCBsb3dlciA9IDA7IGxvd2VyIDwgbWlkZGxlOyBsb3dlcisrKSB7CiAgICAgICAgIHVuc2ln
bmVkIHVwcGVyID0gbGVuZ3RoIC0gbG93ZXIgLSAxOwotICAgICAgICBib29sIGxvd2VyRXhpc3Rz
ID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoY2FsbEZyYW1lLCBsb3dlcik7CisgICAgICAgIGJv
b2wgbG93ZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGxv
d2VyKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgICAgIEpTVmFsdWUgbG93ZXJWYWx1ZTsKICAgICAgICAgaWYgKGxvd2VyRXhpc3Rz
KSB7Ci0gICAgICAgICAgICBsb3dlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGNhbGxGcmFtZSwg
bG93ZXIpOworICAgICAgICAgICAgbG93ZXJWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChnbG9iYWxP
YmplY3QsIGxvd2VyKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCB1cHBlckV4aXN0cyA9
IHRoaXNPYmplY3QtPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgdXBwZXIpOworICAgICAgICBib29s
IHVwcGVyRXhpc3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB1cHBl
cik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgICAgICBKU1ZhbHVlIHVwcGVyVmFsdWU7CiAgICAgICAgIGlmICh1cHBlckV4aXN0cykg
ewotICAgICAgICAgICAgdXBwZXJWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChjYWxsRnJhbWUsIHVw
cGVyKTsKKyAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZ2xvYmFsT2Jq
ZWN0LCB1cHBlcik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh1cHBlckV4aXN0cykgewot
ICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElubGluZShjYWxsRnJhbWUsIGxvd2Vy
LCB1cHBlclZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJ
bmxpbmUoZ2xvYmFsT2JqZWN0LCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGNhbGxGcmFtZSwgbG93
ZXIpOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBsb3dl
cik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKLSAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBVbmFibGVUb0RlbGV0ZVByb3Bl
cnR5RXJyb3IpOworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAobG93ZXJFeGlzdHMpIHsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJ
bmxpbmUoY2FsbEZyYW1lLCB1cHBlciwgbG93ZXJWYWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICB0
aGlzT2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgdXBwZXIsIGxvd2VyVmFs
dWUsIHRydWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlz
T2JqZWN0LCBjYWxsRnJhbWUsIHVwcGVyKTsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgdXBwZXIpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXN1
Y2Nlc3MpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKKyAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3Ip
OwogICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0xMDA0LDI1ICsxMDAyLDI1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU09iamVjdCogdGhpc09iaiA9IGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGNhbGxGcmFtZSwgU3RyaWN0TW9kZSkudG9PYmplY3Qo
Y2FsbEZyYW1lKTsKKyAgICBKU09iamVjdCogdGhpc09iaiA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkudG9UaGlzKGdsb2JhbE9iamVjdCwgU3RyaWN0TW9kZSkudG9PYmplY3QoZ2xvYmFsT2JqZWN0
KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmop
OwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNW
YWx1ZSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGNhbGxGcmFtZSwgdGhpc09i
aik7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2Jq
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAog
ICAgIGlmIChsZW5ndGggPT0gMCkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAg
IHB1dExlbmd0aChjYWxsRnJhbWUsIHZtLCB0aGlzT2JqLCBqc051bWJlcihsZW5ndGgpKTsKKyAg
ICAgICAgcHV0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdm0sIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0
aCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0SW5kZXgoY2FsbEZyYW1lLCAw
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRoaXNPYmotPmdldEluZGV4KGdsb2JhbE9iamVjdCwg
MCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihjYWxsRnJhbWUsIHRoaXNPYmos
IDAsIDEsIDAsIGxlbmd0aCk7CisgICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0
PihnbG9iYWxPYmplY3QsIHRoaXNPYmosIDAsIDEsIDAsIGxlbmd0aCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgIHB1dExlbmd0aChjYWxsRnJhbWUsIHZtLCB0aGlzT2JqLCBqc051bWJlcihsZW5ndGgg
LSAxKSk7CisgICAgcHV0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdm0sIHRoaXNPYmosIGpzTnVtYmVy
KGxlbmd0aCAtIDEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
QEAgLTEwMzEsMzAgKzEwMjksMzAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY1NsaWNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKICAgICAvLyBo
dHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2UK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gY2FsbEZyYW1lLT50
aGlzVmFsdWUoKS50b1RoaXMoY2FsbEZyYW1lLCBTdHJpY3RNb2RlKS50b09iamVjdChjYWxsRnJh
bWUpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1Ro
aXMoZ2xvYmFsT2JqZWN0LCBTdHJpY3RNb2RlKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAg
IEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAg
aWYgKFVOTElLRUxZKCF0aGlzT2JqKSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSB0b0xlbmd0aChjYWxsRnJhbWUsIHRoaXNPYmopOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFt
cGVkSW5kZXhGcm9tU3RhcnRPckVuZChjYWxsRnJhbWUsIDAsIGxlbmd0aCk7CisgICAgdW5zaWdu
ZWQgYmVnaW4gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgbGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotICAgIHVuc2lnbmVkIGVuZCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4
RnJvbVN0YXJ0T3JFbmQoY2FsbEZyYW1lLCAxLCBsZW5ndGgsIGxlbmd0aCk7CisgICAgdW5zaWdu
ZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+YXJndW1lbnQoMSksIGxlbmd0aCwgbGVuZ3RoKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmIChlbmQgPCBiZWdpbikKICAgICAgICAgZW5k
ID0gYmVnaW47CiAKLSAgICBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmpl
Y3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2llc0NvbnN0cnVjdEFycmF5KGNhbGxGcmFtZSwgdGhp
c09iaiwgZW5kIC0gYmVnaW4pOworICAgIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0
LCBKU09iamVjdCo+IHNwZWNpZXNSZXN1bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqLCBlbmQgLSBiZWdpbik7CiAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IGFu
IGV4Y2VwdGlvbiBpZiB3ZSBjYWxsIHNvbWUgdXNlciBmdW5jdGlvbi4KICAgICBFWENFUFRJT05f
QVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3Bl
Y2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSk7CiAgICAgaWYgKFVOTElLRUxZKHNwZWNp
ZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGJvb2wgb2tUb0RvRmFzdFBhdGggPSBzcGVjaWVzUmVz
dWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoICYmIGlzSlNBcnJh
eSh0aGlzT2JqKSAmJiBsZW5ndGggPT0gdG9MZW5ndGgoY2FsbEZyYW1lLCB0aGlzT2JqKTsKKyAg
ICBib29sIG9rVG9Eb0Zhc3RQYXRoID0gc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29u
c3RydWN0UmVzdWx0OjpGYXN0UGF0aCAmJiBpc0pTQXJyYXkodGhpc09iaikgJiYgbGVuZ3RoID09
IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICBpZiAoTElLRUxZKG9rVG9Eb0Zhc3RQYXRoKSkgewotICAgICAg
ICBpZiAoSlNBcnJheSogcmVzdWx0ID0gYXNBcnJheSh0aGlzT2JqKS0+ZmFzdFNsaWNlKCpjYWxs
RnJhbWUsIGJlZ2luLCBlbmQgLSBiZWdpbikpCisgICAgICAgIGlmIChKU0FycmF5KiByZXN1bHQg
PSBhc0FycmF5KHRoaXNPYmopLT5mYXN0U2xpY2UoZ2xvYmFsT2JqZWN0LCBiZWdpbiwgZW5kIC0g
YmVnaW4pKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAg
IH0KIApAQCAtMTA2Miw3ICsxMDYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1NsaWNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKICAgICBp
ZiAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpDcmVhdGVk
T2JqZWN0KQogICAgICAgICByZXN1bHQgPSBzcGVjaWVzUmVzdWx0LnNlY29uZDsKICAgICBlbHNl
IHsKLSAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShjYWxsRnJhbWUsIG51bGxw
dHIsIGVuZCAtIGJlZ2luKTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShn
bG9iYWxPYmplY3QsIG51bGxwdHIsIGVuZCAtIGJlZ2luKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAKQEAgLTEwNzIsMTUgKzEwNzAsMTUgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NsaWNlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEMKIAogICAgIHVuc2lnbmVkIG4gPSAwOwogICAgIGZvciAodW5z
aWduZWQgayA9IGJlZ2luOyBrIDwgZW5kOyBrKyssIG4rKykgewotICAgICAgICBKU1ZhbHVlIHYg
PSBnZXRQcm9wZXJ0eShjYWxsRnJhbWUsIHRoaXNPYmosIGspOworICAgICAgICBKU1ZhbHVlIHYg
PSBnZXRQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHRoaXNPYmosIGspOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAodikgewotICAgICAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3RJbmRleChjYWxsRnJhbWUsIG4sIHYsIDAsIFB1dERpcmVjdEluZGV4
U2hvdWxkVGhyb3cpOworICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChnbG9iYWxP
YmplY3QsIG4sIHYsIDAsIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgfQogICAgIH0KICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgc2V0TGVuZ3RoKGNhbGxGcmFtZSwgdm0sIHJlc3VsdCwgbik7
CisgICAgc2V0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdm0sIHJlc3VsdCwgbik7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC0xMDkxLDE1ICsxMDg5LDE1IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNTcGxpY2UoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNPYmplY3Qq
IHRoaXNPYmogPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhjYWxsRnJhbWUsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3QsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlv
bigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChj
YWxsRnJhbWUsIHRoaXNPYmopOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2Jh
bE9iamVjdCwgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKSB7Ci0g
ICAgICAgIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09iamVjdCo+IHNwZWNp
ZXNSZXN1bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCB0aGlzT2JqLCAwKTsK
KyAgICAgICAgc3RkOjpwYWlyPFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2JqZWN0Kj4gc3Bl
Y2llc1Jlc3VsdCA9IHNwZWNpZXNDb25zdHJ1Y3RBcnJheShnbG9iYWxPYmplY3QsIHRoaXNPYmos
IDApOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gKHNw
ZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSk7
CiAgICAgICAgIGlmIChVTkxJS0VMWShzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25z
dHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFs
dWUoKTsKQEAgLTExMDgsMjMgKzExMDYsMjMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY1NwbGljZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAg
ICAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpD
cmVhdGVkT2JqZWN0KQogICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShjYWxsRnJhbWUsIG51bGxwdHIpOworICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBz
ZXRMZW5ndGgoY2FsbEZyYW1lLCB2bSwgcmVzdWx0LCAwKTsKKyAgICAgICAgc2V0TGVuZ3RoKGds
b2JhbE9iamVjdCwgdm0sIHJlc3VsdCwgMCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgIHNldExlbmd0aChjYWxsRnJhbWUsIHZtLCB0aGlzT2JqLCBsZW5ndGgpOworICAgICAgICBz
ZXRMZW5ndGgoZ2xvYmFsT2JqZWN0LCB2bSwgdGhpc09iaiwgbGVuZ3RoKTsKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGFjdHVh
bFN0YXJ0ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChjYWxsRnJhbWUsIDAs
IGxlbmd0aCk7CisgICAgdW5zaWduZWQgYWN0dWFsU3RhcnQgPSBhcmd1bWVudENsYW1wZWRJbmRl
eEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgbGVu
Z3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
IAogICAgIHVuc2lnbmVkIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuZ3RoIC0gYWN0dWFsU3RhcnQ7
CiAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID4gMSkgewotICAgICAgICBkb3Vi
bGUgZGVsZXRlQ291bnQgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50ZWdl
cihjYWxsRnJhbWUpOworICAgICAgICBkb3VibGUgZGVsZXRlQ291bnQgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKGRl
bGV0ZUNvdW50IDwgMCkKICAgICAgICAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gMDsKQEAgLTEx
MzQsMTYgKzExMzIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RnVuY1NwbGljZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgICAgICAgICAgYWN0
dWFsRGVsZXRlQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsZXRlQ291bnQpOwogICAg
IH0KIAotICAgIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0UmVzdWx0LCBKU09iamVjdCo+IHNw
ZWNpZXNSZXN1bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCB0aGlzT2JqLCBh
Y3R1YWxEZWxldGVDb3VudCk7CisgICAgc3RkOjpwYWlyPFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQs
IEpTT2JqZWN0Kj4gc3BlY2llc1Jlc3VsdCA9IHNwZWNpZXNDb25zdHJ1Y3RBcnJheShnbG9iYWxP
YmplY3QsIHRoaXNPYmosIGFjdHVhbERlbGV0ZUNvdW50KTsKICAgICBFWENFUFRJT05fQVNTRVJU
KCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0Nv
bnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKSk7CiAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3Qg
PT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IG51
bGxwdHI7Ci0gICAgYm9vbCBva1RvRG9GYXN0UGF0aCA9IHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0g
U3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RmFzdFBhdGggJiYgaXNKU0FycmF5KHRoaXNPYmopICYm
IGxlbmd0aCA9PSB0b0xlbmd0aChjYWxsRnJhbWUsIHRoaXNPYmopOworICAgIGJvb2wgb2tUb0Rv
RmFzdFBhdGggPSBzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6
OkZhc3RQYXRoICYmIGlzSlNBcnJheSh0aGlzT2JqKSAmJiBsZW5ndGggPT0gdG9MZW5ndGgoZ2xv
YmFsT2JqZWN0LCB0aGlzT2JqKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoTElLRUxZKG9rVG9Eb0Zhc3RQYXRoKSkKLSAgICAgICAg
cmVzdWx0ID0gYXNBcnJheSh0aGlzT2JqKS0+ZmFzdFNsaWNlKCpjYWxsRnJhbWUsIGFjdHVhbFN0
YXJ0LCBhY3R1YWxEZWxldGVDb3VudCk7CisgICAgICAgIHJlc3VsdCA9IGFzQXJyYXkodGhpc09i
aiktPmZhc3RTbGljZShnbG9iYWxPYmplY3QsIGFjdHVhbFN0YXJ0LCBhY3R1YWxEZWxldGVDb3Vu
dCk7CiAKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJz
dCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpDcmVhdGVkT2JqZWN0KQpAQCAtMTE1MSwzNSAr
MTE0OSwzNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU3Bs
aWNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lk
ZWQpLCBhY3R1YWxEZWxldGVDb3VudCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3Vs
dCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBh
Y3R1YWxEZWxldGVDb3VudDsgKytrKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9w
ZXJ0eShjYWxsRnJhbWUsIHRoaXNPYmosIGsgKyBhY3R1YWxTdGFydCk7CisgICAgICAgICAgICBK
U1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHRoaXNPYmosIGsgKyBhY3R1YWxT
dGFydCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGNhbGxGcmFtZSwg
aywgdiwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CisgICAgICAgICAgICByZXN1bHQt
PnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaywgdiwgMCwgUHV0RGlyZWN0SW5kZXhTaG91
bGRUaHJvdyk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHVuc2lnbmVkIGl0ZW1Db3VudCA9
IHN0ZDo6bWF4PGludD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBp
ZiAoaXRlbUNvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHsKLSAgICAgICAgc2hpZnQ8SlNBcnJh
eTo6U2hpZnRDb3VudEZvclNwbGljZT4oY2FsbEZyYW1lLCB0aGlzT2JqLCBhY3R1YWxTdGFydCwg
YWN0dWFsRGVsZXRlQ291bnQsIGl0ZW1Db3VudCwgbGVuZ3RoKTsKKyAgICAgICAgc2hpZnQ8SlNB
cnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBhY3R1YWxT
dGFydCwgYWN0dWFsRGVsZXRlQ291bnQsIGl0ZW1Db3VudCwgbGVuZ3RoKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfSBlbHNlIGlm
IChpdGVtQ291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkgewotICAgICAgICB1bnNoaWZ0PEpTQXJy
YXk6OlNoaWZ0Q291bnRGb3JTcGxpY2U+KGNhbGxGcmFtZSwgdGhpc09iaiwgYWN0dWFsU3RhcnQs
IGFjdHVhbERlbGV0ZUNvdW50LCBpdGVtQ291bnQsIGxlbmd0aCk7CisgICAgICAgIHVuc2hpZnQ8
SlNBcnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBhY3R1
YWxTdGFydCwgYWN0dWFsRGVsZXRlQ291bnQsIGl0ZW1Db3VudCwgbGVuZ3RoKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBpdGVtQ291bnQ7ICsraykgewotICAgICAgICB0aGlz
T2JqLT5wdXRCeUluZGV4SW5saW5lKGNhbGxGcmFtZSwgayArIGFjdHVhbFN0YXJ0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KGsgKyAyKSwgdHJ1ZSk7CisgICAgICAgIHRoaXNPYmotPnB1
dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBrICsgYWN0dWFsU3RhcnQsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoayArIDIpLCB0cnVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIAogICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICBzZXRMZW5ndGgoY2FsbEZyYW1lLCB2bSwgdGhpc09iaiwgbGVuZ3RoIC0g
YWN0dWFsRGVsZXRlQ291bnQgKyBpdGVtQ291bnQpOworICAgIHNldExlbmd0aChnbG9iYWxPYmpl
Y3QsIHZtLCB0aGlzT2JqLCBsZW5ndGggLSBhY3R1YWxEZWxldGVDb3VudCArIGl0ZW1Db3VudCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC0xMTg5LDM0ICsx
MTg3LDM0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNo
aWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDE1LjQuNC4xMwogCi0gICAgSlNPYmplY3QqIHRo
aXNPYmogPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhjYWxsRnJhbWUsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3QsIFN0cmljdE1vZGUpLnRvT2JqZWN0
KGdsb2JhbE9iamVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigp
ID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1
cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICBkb3VibGUgZG91YmxlTGVuZ3RoID0gdG9MZW5ndGgo
Y2FsbEZyYW1lLCB0aGlzT2JqKTsKKyAgICBkb3VibGUgZG91YmxlTGVuZ3RoID0gdG9MZW5ndGgo
Z2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBkb3VibGVMZW5n
dGg7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
ICAgICB1bnNpZ25lZCBuckFyZ3MgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBp
ZiAobnJBcmdzKSB7CiAgICAgICAgIGlmIChVTkxJS0VMWShkb3VibGVMZW5ndGggKyBzdGF0aWNf
Y2FzdDxkb3VibGU+KG5yQXJncykgPiBtYXhTYWZlSW50ZWdlcigpKSkKLSAgICAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJDYW5ub3Qgc2hpZnQgdG8g
b2Zmc2V0IGdyZWF0ZXIgdGhhbiAoMiAqKiA1MykgLSAxIl9zKTsKLSAgICAgICAgdW5zaGlmdDxK
U0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGNhbGxGcmFtZSwgdGhpc09iaiwgMCwgMCwgbnJB
cmdzLCBsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIkNhbm5vdCBzaGlmdCB0byBvZmZzZXQgZ3JlYXRlciB0aGFuICgyICoq
IDUzKSAtIDEiX3MpOworICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlm
dD4oZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KICAg
ICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbnJBcmdzOyArK2spIHsKLSAgICAgICAgdGhpc09i
ai0+cHV0QnlJbmRleElubGluZShjYWxsRnJhbWUsIGssIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoayksIHRydWUpOworICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGdsb2Jh
bE9iamVjdCwgaywgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChrKSwgdHJ1ZSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0K
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGxlbmd0aCArIG5yQXJncyk7CiAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgIHB1dExlbmd0aChjYWxsRnJhbWUsIHZtLCB0aGlzT2JqLCByZXN1
bHQpOworICAgIHB1dExlbmd0aChnbG9iYWxPYmplY3QsIHZtLCB0aGlzT2JqLCByZXN1bHQpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogZW51bSBjbGFzcyBJbmRl
eE9mRGlyZWN0aW9uIHsgRm9yd2FyZCwgQmFja3dhcmQgfTsKIHRlbXBsYXRlPEluZGV4T2ZEaXJl
Y3Rpb24gZGlyZWN0aW9uPgotQUxXQVlTX0lOTElORSBKU1ZhbHVlIGZhc3RJbmRleE9mKEV4ZWNT
dGF0ZSogZXhlYywgVk0mIHZtLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoLCBKU1Zh
bHVlIHNlYXJjaEVsZW1lbnQsIHVuc2lnbmVkIGluZGV4KQorQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGZhc3RJbmRleE9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNBcnJh
eSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBzZWFyY2hFbGVtZW50LCB1bnNpZ25l
ZCBpbmRleCkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
QEAgLTEyNjcsNyArMTI2NSw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBmYXN0SW5kZXhPZihF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNBcnJheSogYXJyYXksIHVuc2lnCiAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRhdGFbaW5kZXhdLmdldCgpOwogICAgICAgICAgICAgICAg
IGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIGJvb2wgaXNFcXVhbCA9IEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIHNlYXJjaEVsZW1l
bnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBib29sIGlzRXF1YWwgPSBKU1ZhbHVlOjpzdHJp
Y3RFcXVhbChnbG9iYWxPYmplY3QsIHNlYXJjaEVsZW1lbnQsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgICAgIGlm
IChpc0VxdWFsKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5kZXgpOwpA
QCAtMTI3OCw3ICsxMjc2LDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGZhc3RJbmRleE9mKEV4
ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0FycmF5KiBhcnJheSwgdW5zaWcKICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gZGF0YVtpbmRleF0uZ2V0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgYm9vbCBpc0VxdWFsID0gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVu
dCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJvb2wgaXNFcXVhbCA9IEpTVmFsdWU6OnN0cmlj
dEVxdWFsKGdsb2JhbE9iamVjdCwgc2VhcmNoRWxlbWVudCwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAgICAgaWYg
KGlzRXF1YWwpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihpbmRleCk7CkBA
IC0xMzIxLDMwICsxMzE5LDMwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNJbmRleE9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMTUuNC40LjE0Ci0gICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhjYWxs
RnJhbWUsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3QsIFN0
cmljdE1vZGUpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCgh
IXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoIXRo
aXNPYmplY3QpKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRv
TGVuZ3RoKGNhbGxGcmFtZSwgdGhpc09iamVjdCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdG9M
ZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCi0gICAgdW5zaWduZWQgaW5kZXggPSBhcmd1bWVudENsYW1wZWRJbmRl
eEZyb21TdGFydE9yRW5kKGNhbGxGcmFtZSwgMSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDEpLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc09iamVjdCkpIHsKLSAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBmYXN0SW5kZXhPZjxJbmRleE9mRGlyZWN0aW9uOjpGb3J3YXJkPihjYWxsRnJh
bWUsIHZtLCBhc0FycmF5KHRoaXNPYmplY3QpLCBsZW5ndGgsIHNlYXJjaEVsZW1lbnQsIGluZGV4
KTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBmYXN0SW5kZXhPZjxJbmRleE9mRGlyZWN0aW9u
OjpGb3J3YXJkPihnbG9iYWxPYmplY3QsIHZtLCBhc0FycmF5KHRoaXNPYmplY3QpLCBsZW5ndGgs
IHNlYXJjaEVsZW1lbnQsIGluZGV4KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsr
aW5kZXgpIHsKLSAgICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoY2FsbEZyYW1lLCB0aGlz
T2JqZWN0LCBpbmRleCk7CisgICAgICAgIEpTVmFsdWUgZSA9IGdldFByb3BlcnR5KGdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCwgaW5kZXgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgYm9vbCBpc0VxdWFsID0gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoY2FsbEZyYW1lLCBzZWFyY2hF
bGVtZW50LCBlKTsKKyAgICAgICAgYm9vbCBpc0VxdWFsID0gSlNWYWx1ZTo6c3RyaWN0RXF1YWwo
Z2xvYmFsT2JqZWN0LCBzZWFyY2hFbGVtZW50LCBlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKGlzRXF1YWwpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7CkBAIC0xMzU5LDE4ICsxMzU3LDE4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhP
ZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgLy8gMTUuNC40LjE1Ci0gICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhjYWxsRnJhbWUsIFN0cmljdE1vZGUp
LnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3QsIFN0cmljdE1vZGUpLnRvT2JqZWN0
KGdsb2JhbE9iamVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigp
ID09ICF0aGlzT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQogICAgICAg
ICByZXR1cm4geyB9OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGNhbGxGcmFtZSwg
dGhpc09iamVjdCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0
LCB0aGlzT2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8ICFs
ZW5ndGgpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKIAog
ICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKICAgICBpZiAoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPj0gMikgewogICAgICAgICBKU1ZhbHVlIGZyb21WYWx1ZSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7Ci0gICAgICAgIGRvdWJsZSBmcm9tRG91YmxlID0gZnJv
bVZhbHVlLnRvSW50ZWdlcihjYWxsRnJhbWUpOworICAgICAgICBkb3VibGUgZnJvbURvdWJsZSA9
IGZyb21WYWx1ZS50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKGZyb21Eb3VibGUgPCAwKSB7CiAgICAg
ICAgICAgICBmcm9tRG91YmxlICs9IGxlbmd0aDsKQEAgLTEzODQsNyArMTM4Miw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqCiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc09iamVjdCkpIHsKLSAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBmYXN0SW5kZXhPZjxJbmRleE9mRGlyZWN0aW9uOjpCYWNrd2Fy
ZD4oY2FsbEZyYW1lLCB2bSwgYXNBcnJheSh0aGlzT2JqZWN0KSwgbGVuZ3RoLCBzZWFyY2hFbGVt
ZW50LCBpbmRleCk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZmFzdEluZGV4T2Y8SW5kZXhP
ZkRpcmVjdGlvbjo6QmFja3dhcmQ+KGdsb2JhbE9iamVjdCwgdm0sIGFzQXJyYXkodGhpc09iamVj
dCksIGxlbmd0aCwgc2VhcmNoRWxlbWVudCwgaW5kZXgpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMTM5MiwxMSArMTM5MCwxMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iagogCiAgICAgZG8gewogICAgICAgICBBU1NFUlQoaW5kZXggPCBs
ZW5ndGgpOwotICAgICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShjYWxsRnJhbWUsIHRoaXNP
YmplY3QsIGluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqZWN0LCBpbmRleCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBib29sIGlzRXF1YWwgPSBKU1ZhbHVlOjpzdHJpY3RFcXVhbChjYWxsRnJhbWUsIHNlYXJjaEVs
ZW1lbnQsIGUpOworICAgICAgICBib29sIGlzRXF1YWwgPSBKU1ZhbHVlOjpzdHJpY3RFcXVhbChn
bG9iYWxPYmplY3QsIHNlYXJjaEVsZW1lbnQsIGUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAoaXNFcXVhbCkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKQEAgLTE0MDUsNyArMTQwMyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcigtMSkpOwogfQogCi1zdGF0aWMgYm9vbCBtb3ZlRWxlbWVudHMoRXhlY1N0YXRlKiBleGVj
LCBWTSYgdm0sIEpTQXJyYXkqIHRhcmdldCwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBKU0FycmF5
KiBzb3VyY2UsIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCkKK3N0YXRpYyBib29sIG1vdmVFbGVtZW50
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTQXJyYXkqIHRhcmdldCwg
dW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBKU0FycmF5KiBzb3VyY2UsIHVuc2lnbmVkIHNvdXJjZUxl
bmd0aCkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAg
LTE0MTMsMTYgKzE0MTEsMTYgQEAgc3RhdGljIGJvb2wgbW92ZUVsZW1lbnRzKEV4ZWNTdGF0ZSog
ZXhlYywgVk0mIHZtLCBKU0FycmF5KiB0YXJnZXQsIHVuc2lnbmVkIHRhcmcKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gc291cmNlLT50cnlHZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgICAg
ICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEluZGV4KGV4
ZWMsIHRhcmdldE9mZnNldCArIGksIHZhbHVlLCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93
KTsKKyAgICAgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwg
dGFyZ2V0T2Zmc2V0ICsgaSwgdmFsdWUsIDAsIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cpOwog
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHNvdXJjZSwgaSk7CisgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gZ2V0UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBzb3VyY2UsIGkpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgaWYgKHZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RJbmRleChleGVjLCB0YXJnZXRP
ZmZzZXQgKyBpLCB2YWx1ZSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CisgICAgICAg
ICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIHRhcmdldE9mZnNl
dCArIGksIHZhbHVlLCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE0MzAsNyArMTQyOCw3IEBAIHN0YXRpYyBib29sIG1vdmVFbGVtZW50cyhF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNBcnJheSogdGFyZ2V0LCB1bnNpZ25lZCB0YXJnCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25jYXRBcHBlbmRP
bmUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTQXJyYXkqIGZpcnN0LCBKU1ZhbHVlIHNlY29u
ZCkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25jYXRBcHBlbmRPbmUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBKU0FycmF5KiBmaXJzdCwgSlNWYWx1ZSBzZWNvbmQpCiB7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0xNDQyLDcg
KzE0NDAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY29uY2F0QXBwZW5kT25lKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtLCBKU0FycmF5KiBmaXJzdCwgSgogICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkUmVzdWx0U2l6ZSA9IGZpcnN0QXJyYXlTaXplOwogICAg
IGNoZWNrZWRSZXN1bHRTaXplICs9IDE7CiAgICAgaWYgKFVOTElLRUxZKGNoZWNrZWRSZXN1bHRT
aXplLmhhc092ZXJmbG93ZWQoKSkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOwogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB9CiAKQEAgLTE0
NTIsMjYgKzE0NTAsMjYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNvbmNhdEFwcGVuZE9uZShF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNBcnJheSogZmlyc3QsIEoKICAgICBpZiAodHlwZSA9
PSBOb25BcnJheSkKICAgICAgICAgdHlwZSA9IGZpcnN0LT5pbmRleGluZ1R5cGUoKTsKIAotICAg
IFN0cnVjdHVyZSogcmVzdWx0U3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24odHlwZSk7Cisg
ICAgU3RydWN0dXJlKiByZXN1bHRTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbih0eXBlKTsKICAgICBKU0FycmF5KiBy
ZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGUodm0sIHJlc3VsdFN0cnVjdHVyZSwgcmVzdWx0U2l6
ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAg
fQogCi0gICAgYm9vbCBzdWNjZXNzID0gcmVzdWx0LT5hcHBlbmRNZW1jcHkoZXhlYywgdm0sIDAs
IGZpcnN0KTsKKyAgICBib29sIHN1Y2Nlc3MgPSByZXN1bHQtPmFwcGVuZE1lbWNweShnbG9iYWxP
YmplY3QsIHZtLCAwLCBmaXJzdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkgfHwgIXN1Y2Nlc3MpOwogICAgIGlmICghc3VjY2VzcykgewogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgICAgICBib29sIHN1
Y2Nlc3MgPSBtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgMCwgZmlyc3QsIGZpcnN0QXJy
YXlTaXplKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gbW92ZUVsZW1lbnRzKGdsb2JhbE9iamVj
dCwgdm0sIHJlc3VsdCwgMCwgZmlyc3QsIGZpcnN0QXJyYXlTaXplKTsKICAgICAgICAgRVhDRVBU
SU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgPT0gc3VjY2Vzcyk7CiAgICAgICAgIGlmIChV
TkxJS0VMWSghc3VjY2VzcykpCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsK
ICAgICB9CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChleGVjLCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdElu
ZGV4KGdsb2JhbE9iamVjdCwgZmlyc3RBcnJheVNpemUsIHNlY29uZCk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogCiB9CkBAIC0xNTE1LDE0ICsxNTEzLDE0IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1ByaXZhdGVGdW5jQ29uY2F0TWVtY3B5
KEpTR2xvYmFsT2JqZWN0KiBnCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpOwogCiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGUgc3BlY2llcyBjb25zdHJ1Y3RvciBo
ZXJlIHNpbmNlIGNoZWNraW5nIGl0IGluIHRoZSBKUyB3cmFwcGVyIGlzIHRvbyBleHBlbnNpdmUg
Zm9yIHRoZSBub24tb3B0aW1pemluZyB0aWVycy4KLSAgICBib29sIGlzVmFsaWQgPSBzcGVjaWVz
V2F0Y2hwb2ludElzVmFsaWQoY2FsbEZyYW1lLCBmaXJzdEFycmF5KTsKKyAgICBib29sIGlzVmFs
aWQgPSBzcGVjaWVzV2F0Y2hwb2ludElzVmFsaWQodm0sIGZpcnN0QXJyYXkpOwogICAgIHNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgaWYgKFVOTElLRUxZKCFpc1ZhbGlkKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBKU1ZhbHVlIHNlY29u
ZCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CiAgICAgaWYgKCFpc0pTQXJyYXko
c2Vjb25kKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25jYXRBcHBlbmRP
bmUoY2FsbEZyYW1lLCB2bSwgZmlyc3RBcnJheSwgc2Vjb25kKSk7CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgY29uY2F0QXBwZW5kT25lKGdsb2JhbE9iamVjdCwgdm0sIGZpcnN0
QXJyYXksIHNlY29uZCkpOwogCiAgICAgSlNBcnJheSogc2Vjb25kQXJyYXkgPSBqc0Nhc3Q8SlNB
cnJheSo+KHNlY29uZCk7CiAgICAgCkBAIC0xNTM2LDcgKzE1MzQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9Qcml2YXRlRnVuY0NvbmNhdE1lbWNweShKU0dsb2Jh
bE9iamVjdCogZwogICAgIGNoZWNrZWRSZXN1bHRTaXplICs9IHNlY29uZEFycmF5U2l6ZTsKIAog
ICAgIGlmIChVTkxJS0VMWShjaGVja2VkUmVzdWx0U2l6ZS5oYXNPdmVyZmxvd2VkKCkpKSB7Ci0g
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1
cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB9CiAKQEAgLTE1NDUsMTQgKzE1NDMsMTQgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvUHJpdmF0ZUZ1bmNDb25jYXRNZW1j
cHkoSlNHbG9iYWxPYmplY3QqIGcKICAgICBJbmRleGluZ1R5cGUgc2Vjb25kVHlwZSA9IHNlY29u
ZEFycmF5LT5pbmRleGluZ1R5cGUoKTsKICAgICBJbmRleGluZ1R5cGUgdHlwZSA9IGZpcnN0QXJy
YXktPm1lcmdlSW5kZXhpbmdUeXBlRm9yQ29weWluZyhzZWNvbmRUeXBlKTsKICAgICBpZiAodHlw
ZSA9PSBOb25BcnJheSB8fCAhZmlyc3RBcnJheS0+Y2FuRmFzdENvcHkodm0sIHNlY29uZEFycmF5
KSB8fCByZXN1bHRTaXplID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKLSAgICAgICAgSlNB
cnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShjYWxsRnJhbWUsIG51bGxwdHIsIHJl
c3VsdFNpemUpOworICAgICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGdsb2JhbE9iamVjdCwgbnVsbHB0ciwgcmVzdWx0U2l6ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgICAgIGJvb2wgc3VjY2Vz
cyA9IG1vdmVFbGVtZW50cyhjYWxsRnJhbWUsIHZtLCByZXN1bHQsIDAsIGZpcnN0QXJyYXksIGZp
cnN0QXJyYXlTaXplKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gbW92ZUVsZW1lbnRzKGdsb2Jh
bE9iamVjdCwgdm0sIHJlc3VsdCwgMCwgZmlyc3RBcnJheSwgZmlyc3RBcnJheVNpemUpOwogICAg
ICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9PSBzdWNjZXNzKTsKICAg
ICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVk
SlNWYWx1ZSgpOwotICAgICAgICBzdWNjZXNzID0gbW92ZUVsZW1lbnRzKGNhbGxGcmFtZSwgdm0s
IHJlc3VsdCwgZmlyc3RBcnJheVNpemUsIHNlY29uZEFycmF5LCBzZWNvbmRBcnJheVNpemUpOwor
ICAgICAgICBzdWNjZXNzID0gbW92ZUVsZW1lbnRzKGdsb2JhbE9iamVjdCwgdm0sIHJlc3VsdCwg
Zmlyc3RBcnJheVNpemUsIHNlY29uZEFycmF5LCBzZWNvbmRBcnJheVNpemUpOwogICAgICAgICBF
WENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9PSBzdWNjZXNzKTsKICAgICAgICAg
aWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1
ZSgpOwpAQCAtMTU2OCw3ICsxNTY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvUHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHkoSlNHbG9iYWxPYmplY3QqIGcKICAgICBP
YmplY3RJbml0aWFsaXphdGlvblNjb3BlIGluaXRpYWxpemF0aW9uU2NvcGUodm0pOwogICAgIEpT
QXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZXN0cmljdGVk
KGluaXRpYWxpemF0aW9uU2NvcGUsIHJlc3VsdFN0cnVjdHVyZSwgcmVzdWx0U2l6ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihj
YWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB9CiAK
QEAgLTE1OTgsMTMgKzE1OTYsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvUHJpdmF0ZUZ1bmNBcHBlbmRNZW1jcHkoSlNHbG9iYWxPYmplY3QqIGcKICAgICBKU1Zh
bHVlIHN0YXJ0VmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpOwogICAgIEFT
U0VSVChzdGFydFZhbHVlLmlzVUludDMyQXNBbnlJbnQoKSk7CiAgICAgdW5zaWduZWQgc3RhcnRJ
bmRleCA9IHN0YXJ0VmFsdWUuYXNVSW50MzJBc0FueUludCgpOwotICAgIGJvb2wgc3VjY2VzcyA9
IHJlc3VsdEFycmF5LT5hcHBlbmRNZW1jcHkoY2FsbEZyYW1lLCB2bSwgc3RhcnRJbmRleCwgb3Ro
ZXJBcnJheSk7CisgICAgYm9vbCBzdWNjZXNzID0gcmVzdWx0QXJyYXktPmFwcGVuZE1lbWNweShn
bG9iYWxPYmplY3QsIHZtLCBzdGFydEluZGV4LCBvdGhlckFycmF5KTsKICAgICBFWENFUFRJT05f
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhc3VjY2Vzcyk7CiAgICAgaWYgKHN1Y2Nlc3Mp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgc2NvcGUucmVs
ZWFzZSgpOwotICAgIG1vdmVFbGVtZW50cyhjYWxsRnJhbWUsIHZtLCByZXN1bHRBcnJheSwgc3Rh
cnRJbmRleCwgb3RoZXJBcnJheSwgb3RoZXJBcnJheS0+bGVuZ3RoKCkpOworICAgIG1vdmVFbGVt
ZW50cyhnbG9iYWxPYmplY3QsIHZtLCByZXN1bHRBcnJheSwgc3RhcnRJbmRleCwgb3RoZXJBcnJh
eSwgb3RoZXJBcnJheS0+bGVuZ3RoKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bc3luY0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCmluZGV4IDdiOGZhYWJkMDNjOWVj
ZGNiNTE2M2NlNjM1YTQxNmI0ZWE5YmJlZWEuLmVmY2VlZDc5NDBiNDdmNWQxNDE2OTNkZTEyYTU3
NGQ4MjRhOTc1ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fz
eW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcApAQCAtMzksMTMgKzM5LDEzIEBAIGNv
bnN0IENsYXNzSW5mbyBBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkFzeW5j
RnVuY3Rpb24iLCAmQmFzZTo6c19pCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rpb24oY2FsbEZyYW1l
LCBnbG9iYWxPYmplY3QsIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6QXN5bmMpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEZ1bmN0aW9uKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBhcmdzLCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6OkFzeW5jKSk7CiB9
CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFzeW5jRnVu
Y3Rpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKICAgICBBcmdMaXN0IGFyZ3MoY2FsbEZyYW1lKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEZ1bmN0aW9uKGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0
LCBhcmdzLCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6OkFzeW5jKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjb25zdHJ1Y3RGdW5jdGlvbihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
YXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpBc3luYykpOwogfQogCiBBc3luY0Z1bmN0
aW9uQ29uc3RydWN0b3I6OkFzeW5jRnVuY3Rpb25Db25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXN5bmNHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FzeW5jR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKaW5kZXgg
OGY3YTgyZDFkMjA1OTQzN2MyYmE2MWE2MTJhMTZiZmU0YzFiMTdjNy4uZThjZjYxZGFhNDUyOWFh
YjM1ZjlhMGY5ZTdiZmIxZTBhNDAwZTZkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXN5bmNHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bc3luY0dlbmVyYXRvckZ1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCkBAIC0zOSwxMyArMzksMTMgQEAgY29uc3QgQ2xhc3NJbmZvIEFzeW5jR2VuZXJh
dG9yRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiQXN5bmNHZW5lcmF0b3JGdW4KIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxBc3luY0dlbmVyYXRvckZ1bmN0
aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjb25zdHJ1Y3RGdW5jdGlvbihjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwg
YXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpBc3luY0dlbmVyYXRvcikpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6QXN5bmNHZW5lcmF0b3IpKTsK
IH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rpb24oY2FsbEZyYW1lLCBn
bG9iYWxPYmplY3QsIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6QXN5bmNHZW5lcmF0
b3IpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEZ1bmN0aW9uKGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLCBhcmdzLCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6OkFzeW5j
R2VuZXJhdG9yKSk7CiB9CiAKIEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3Bw
CmluZGV4IGE2ZDA5NzQ1N2U5NDM5MzIzMjIwMDQ3NjlhOTJiOTUxNGE1OWMxYmUuLmEzOWFjYmZk
ZTA3MDRiNDFkNDFlZWE0YWI2Y2VkYmRiNjM4YzY1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwCkBAIC04OSwxMyArODksMTMgQEAgdm9p
ZCBBdG9taWNzT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiBuYW1lc3BhY2UgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yLCB0
eXBlbmFtZSBGdW5jPgotRW5jb2RlZEpTVmFsdWUgYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3NDYXNl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNWYWx1ZSogYXJncywgVGhyb3dTY29wZSYgc2NvcGUs
IEpTQXJyYXlCdWZmZXJWaWV3KiB0eXBlZEFycmF5VmlldywgdW5zaWduZWQgYWNjZXNzSW5kZXgs
IGNvbnN0IEZ1bmMmIGZ1bmMpCitFbmNvZGVkSlNWYWx1ZSBhdG9taWNPcGVyYXRpb25XaXRoQXJn
c0Nhc2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSogYXJncywg
VGhyb3dTY29wZSYgc2NvcGUsIEpTQXJyYXlCdWZmZXJWaWV3KiB0eXBlZEFycmF5VmlldywgdW5z
aWduZWQgYWNjZXNzSW5kZXgsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4qIHR5cGVkQXJyYXkgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj4qPih0eXBlZEFycmF5Vmlldyk7CiAgICAgCiAgICAgZG91YmxlIGV4
dHJhQXJnc1tGdW5jOjpudW1FeHRyYUFyZ3MgKyAxXTsgLy8gQWRkIDEgdG8gYXZvaWQgMCBzaXpl
IGFycmF5IGVycm9yIGluIFZTLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGdW5jOjpu
dW1FeHRyYUFyZ3M7ICsraSkgewotICAgICAgICBkb3VibGUgdmFsdWUgPSBhcmdzWzIgKyBpXS50
b0ludGVnZXIoZXhlYyk7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGFyZ3NbMiArIGldLnRvSW50
ZWdlcihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpOwogICAgICAgICBleHRyYUFyZ3NbaV0gPSB2
YWx1ZTsKICAgICB9CkBAIC0xMDMsMTggKzEwMywxOCBAQCBFbmNvZGVkSlNWYWx1ZSBhdG9taWNP
cGVyYXRpb25XaXRoQXJnc0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU1ZhbHVlKiBhcmdz
LAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZnVuYyh0eXBlZEFycmF5LT50eXBlZFZlY3Rv
cigpICsgYWNjZXNzSW5kZXgsIGV4dHJhQXJncykpOwogfQogCi11bnNpZ25lZCB2YWxpZGF0ZWRB
Y2Nlc3NJbmRleChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhY2Nlc3NJbmRleFZh
bHVlLCBKU0FycmF5QnVmZmVyVmlldyogdHlwZWRBcnJheVZpZXcpCit1bnNpZ25lZCB2YWxpZGF0
ZWRBY2Nlc3NJbmRleChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgYWNjZXNzSW5kZXhWYWx1ZSwgSlNBcnJheUJ1ZmZlclZpZXcqIHR5cGVkQXJyYXlWaWV3KQog
ewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5M
SUtFTFkoIWFjY2Vzc0luZGV4VmFsdWUuaXNJbnQzMigpKSkgewotICAgICAgICBkb3VibGUgYWNj
ZXNzSW5kZXhEb3VibGUgPSBhY2Nlc3NJbmRleFZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICBkb3VibGUgYWNjZXNzSW5kZXhEb3VibGUgPSBhY2Nlc3NJbmRleFZhbHVlLnRvTnVtYmVyKGds
b2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAg
ICAgICBpZiAoYWNjZXNzSW5kZXhEb3VibGUgPT0gMCkKICAgICAgICAgICAgIGFjY2Vzc0luZGV4
VmFsdWUgPSBqc051bWJlcigwKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhY2Nlc3NJ
bmRleFZhbHVlID0ganNOdW1iZXIoYWNjZXNzSW5kZXhEb3VibGUpOwogICAgICAgICAgICAgaWYg
KCFhY2Nlc3NJbmRleFZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIHRocm93UmFu
Z2VFcnJvcihleGVjLCBzY29wZSwgIkFjY2VzcyBpbmRleCBpcyBub3QgYW4gaW50ZWdlci4iX3Mp
OworICAgICAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
QWNjZXNzIGluZGV4IGlzIG5vdCBhbiBpbnRlZ2VyLiJfcyk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEyMyw3ICsxMjMsNyBAQCB1bnNp
Z25lZCB2YWxpZGF0ZWRBY2Nlc3NJbmRleChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBhY2Nlc3NJbmRleFZhbHVlLAogICAgIAogICAgIEFTU0VSVCh0eXBlZEFycmF5Vmlldy0+bGVu
Z3RoKCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGFjY2Vzc0luZGV4KSA+PSB0eXBlZEFycmF5Vmlldy0+bGVuZ3RoKCkp
IHsKLSAgICAgICAgdGhyb3dSYW5nZUVycm9yKGV4ZWMsIHNjb3BlLCAiQWNjZXNzIGluZGV4IG91
dCBvZiBib3VuZHMgZm9yIGF0b21pYyBhY2Nlc3MuIl9zKTsKKyAgICAgICAgdGhyb3dSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJBY2Nlc3MgaW5kZXggb3V0IG9mIGJvdW5kcyBmb3Ig
YXRvbWljIGFjY2Vzcy4iX3MpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCkBAIC0x
MzEsMTMgKzEzMSwxMyBAQCB1bnNpZ25lZCB2YWxpZGF0ZWRBY2Nlc3NJbmRleChWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhY2Nlc3NJbmRleFZhbHVlLAogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgotRW5jb2RlZEpTVmFsdWUgYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTVmFsdWUqIGFyZ3MsIGNvbnN0IEZ1bmMmIGZ1
bmMpCitFbmNvZGVkSlNWYWx1ZSBhdG9taWNPcGVyYXRpb25XaXRoQXJncyhWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEpTVmFsdWUqIGFyZ3MsIGNvbnN0IEZ1bmMm
IGZ1bmMpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgSlNWYWx1ZSB0eXBlZEFycmF5VmFsdWUgPSBhcmdzWzBdOwogICAgIGlmICghdHlwZWRBcnJh
eVZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAi
VHlwZWQgYXJyYXkgYXJndW1lbnQgbXVzdCBiZSBhIGNlbGwuIl9zKTsKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlR5cGVkIGFycmF5IGFyZ3VtZW50IG11c3Qg
YmUgYSBjZWxsLiJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogICAgIApAQCAtMTUzLDMyICsxNTMsMzIgQEAgRW5jb2RlZEpTVmFsdWUg
YXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
VmFsdWUqIGEKICAgICBjYXNlIFVpbnQzMkFycmF5VHlwZToKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJUeXBlZCBhcnJh
eSBhcmd1bWVudCBtdXN0IGJlIGFuIEludDhBcnJheSwgSW50MTZBcnJheSwgSW50MzJBcnJheSwg
VWludDhBcnJheSwgVWludDE2QXJyYXksIG9yIFVpbnQzMkFycmF5LiJfcyk7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUeXBlZCBhcnJheSBhcmd1bWVudCBt
dXN0IGJlIGFuIEludDhBcnJheSwgSW50MTZBcnJheSwgSW50MzJBcnJheSwgVWludDhBcnJheSwg
VWludDE2QXJyYXksIG9yIFVpbnQzMkFycmF5LiJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogICAgIAogICAgIEpTQXJyYXlCdWZmZXJW
aWV3KiB0eXBlZEFycmF5VmlldyA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHR5cGVkQXJy
YXlDZWxsKTsKICAgICBpZiAoIXR5cGVkQXJyYXlWaWV3LT5pc1NoYXJlZCgpKSB7Ci0gICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiVHlwZWQgYXJyYXkgYXJndW1lbnQgbXVzdCB3
cmFwIGEgU2hhcmVkQXJyYXlCdWZmZXIuIl9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIlR5cGVkIGFycmF5IGFyZ3VtZW50IG11c3Qgd3JhcCBhIFNoYXJl
ZEFycmF5QnVmZmVyLiJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGFjY2Vzc0luZGV4ID0gdmFsaWRh
dGVkQWNjZXNzSW5kZXgodm0sIGV4ZWMsIGFyZ3NbMV0sIHR5cGVkQXJyYXlWaWV3KTsKKyAgICB1
bnNpZ25lZCBhY2Nlc3NJbmRleCA9IHZhbGlkYXRlZEFjY2Vzc0luZGV4KHZtLCBnbG9iYWxPYmpl
Y3QsIGFyZ3NbMV0sIHR5cGVkQXJyYXlWaWV3KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpOwogICAgIAogICAgIHN3aXRjaCAo
dHlwZSkgewogICAgIGNhc2UgSW50OEFycmF5VHlwZToKLSAgICAgICAgcmV0dXJuIGF0b21pY09w
ZXJhdGlvbldpdGhBcmdzQ2FzZTxJbnQ4QWRhcHRvcj4oZXhlYywgYXJncywgc2NvcGUsIHR5cGVk
QXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwgZnVuYyk7CisgICAgICAgIHJldHVybiBhdG9taWNPcGVy
YXRpb25XaXRoQXJnc0Nhc2U8SW50OEFkYXB0b3I+KGdsb2JhbE9iamVjdCwgYXJncywgc2NvcGUs
IHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwgZnVuYyk7CiAgICAgY2FzZSBJbnQxNkFycmF5
VHlwZToKLSAgICAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzQ2FzZTxJbnQxNkFk
YXB0b3I+KGV4ZWMsIGFyZ3MsIHNjb3BlLCB0eXBlZEFycmF5VmlldywgYWNjZXNzSW5kZXgsIGZ1
bmMpOworICAgICAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3NDYXNlPEludDE2QWRh
cHRvcj4oZ2xvYmFsT2JqZWN0LCBhcmdzLCBzY29wZSwgdHlwZWRBcnJheVZpZXcsIGFjY2Vzc0lu
ZGV4LCBmdW5jKTsKICAgICBjYXNlIEludDMyQXJyYXlUeXBlOgotICAgICAgICByZXR1cm4gYXRv
bWljT3BlcmF0aW9uV2l0aEFyZ3NDYXNlPEludDMyQWRhcHRvcj4oZXhlYywgYXJncywgc2NvcGUs
IHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwgZnVuYyk7CisgICAgICAgIHJldHVybiBhdG9t
aWNPcGVyYXRpb25XaXRoQXJnc0Nhc2U8SW50MzJBZGFwdG9yPihnbG9iYWxPYmplY3QsIGFyZ3Ms
IHNjb3BlLCB0eXBlZEFycmF5VmlldywgYWNjZXNzSW5kZXgsIGZ1bmMpOwogICAgIGNhc2UgVWlu
dDhBcnJheVR5cGU6Ci0gICAgICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnc0Nhc2U8
VWludDhBZGFwdG9yPihleGVjLCBhcmdzLCBzY29wZSwgdHlwZWRBcnJheVZpZXcsIGFjY2Vzc0lu
ZGV4LCBmdW5jKTsKKyAgICAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzQ2FzZTxV
aW50OEFkYXB0b3I+KGdsb2JhbE9iamVjdCwgYXJncywgc2NvcGUsIHR5cGVkQXJyYXlWaWV3LCBh
Y2Nlc3NJbmRleCwgZnVuYyk7CiAgICAgY2FzZSBVaW50MTZBcnJheVR5cGU6Ci0gICAgICAgIHJl
dHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnc0Nhc2U8VWludDE2QWRhcHRvcj4oZXhlYywgYXJn
cywgc2NvcGUsIHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwgZnVuYyk7CisgICAgICAgIHJl
dHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJnc0Nhc2U8VWludDE2QWRhcHRvcj4oZ2xvYmFsT2Jq
ZWN0LCBhcmdzLCBzY29wZSwgdHlwZWRBcnJheVZpZXcsIGFjY2Vzc0luZGV4LCBmdW5jKTsKICAg
ICBjYXNlIFVpbnQzMkFycmF5VHlwZToKLSAgICAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldp
dGhBcmdzQ2FzZTxVaW50MzJBZGFwdG9yPihleGVjLCBhcmdzLCBzY29wZSwgdHlwZWRBcnJheVZp
ZXcsIGFjY2Vzc0luZGV4LCBmdW5jKTsKKyAgICAgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldp
dGhBcmdzQ2FzZTxVaW50MzJBZGFwdG9yPihnbG9iYWxPYmplY3QsIGFyZ3MsIHNjb3BlLCB0eXBl
ZEFycmF5VmlldywgYWNjZXNzSW5kZXgsIGZ1bmMpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xODYsMTIgKzE4NiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBh
dG9taWNPcGVyYXRpb25XaXRoQXJncyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNW
YWx1ZSogYQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotRW5jb2RlZEpTVmFsdWUgYXRv
bWljT3BlcmF0aW9uV2l0aEFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IEZ1bmMmIGZ1bmMpCitFbmNvZGVkSlNWYWx1ZSBhdG9taWNP
cGVyYXRpb25XaXRoQXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBKU1ZhbHVlIGFyZ3NbMiArIEZ1
bmM6Om51bUV4dHJhQXJnc107CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMiArIEZ1bmM6Om51bUV4
dHJhQXJnczsgaS0tOykKICAgICAgICAgYXJnc1tpXSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoaSk7
Ci0gICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKGdsb2JhbE9iamVjdC0+dm0oKSwg
Y2FsbEZyYW1lLCBhcmdzLCBmdW5jKTsKKyAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFy
Z3MoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGFyZ3MsIGZ1bmMpOwogfQogCiBz
dHJ1Y3QgQWRkRnVuYyB7CkBAIC0yODksMTIgKzI4OSwxMiBAQCBzdHJ1Y3QgWG9yRnVuYyB7CiAg
ICAgfQogfTsKIAotRW5jb2RlZEpTVmFsdWUgaXNMb2NrRnJlZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYXJnKQorRW5jb2RlZEpTVmFsdWUgaXNMb2NrRnJlZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGFyZykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBpbnQzMl90IHNpemUgPSBhcmcudG9JbnQzMihleGVjKTsK
KyAgICBpbnQzMl90IHNpemUgPSBhcmcudG9JbnQzMihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSk7CiAg
ICAgCiAgICAgYm9vbCByZXN1bHQ7CkBAIC0zMTUsNDcgKzMxNSw0NyBAQCBFbmNvZGVkSlNWYWx1
ZSBpc0xvY2tGcmVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhcmcpCiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNBZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGF0b21pY09wZXJhdGlv
bldpdGhBcmdzKGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBBZGRGdW5jKCkpOworICAgIHJldHVy
biBhdG9taWNPcGVyYXRpb25XaXRoQXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgQWRkRnVu
YygpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY0FuZChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3Qs
IEFuZEZ1bmMoKSk7CisgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBBbmRGdW5jKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGF0b21pY3NGdW5jQ29tcGFyZUV4Y2hhbmdlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBhdG9taWNPcGVyYXRp
b25XaXRoQXJncyhjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgQ29tcGFyZUV4Y2hhbmdlRnVuYygp
KTsKKyAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIENvbXBhcmVFeGNoYW5nZUZ1bmMoKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXRvbWljc0Z1bmNFeGNoYW5nZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0
aEFyZ3MoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIEV4Y2hhbmdlRnVuYygpKTsKKyAgICByZXR1
cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIEV4Y2hh
bmdlRnVuYygpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVu
Y0lzTG9ja0ZyZWUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNJc0xvY2tGcmVlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBp
c0xvY2tGcmVlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgcmV0dXJu
IGlzTG9ja0ZyZWUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY0xvYWQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGF0
b21pY09wZXJhdGlvbldpdGhBcmdzKGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBMb2FkRnVuYygp
KTsKKyAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIExvYWRGdW5jKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0
b21pY3NGdW5jT3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKGNhbGxGcmFtZSwg
Z2xvYmFsT2JqZWN0LCBPckZ1bmMoKSk7CisgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhB
cmdzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBPckZ1bmMoKSk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNTdG9yZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gYXRvbWljT3BlcmF0
aW9uV2l0aEFyZ3MoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIFN0b3JlRnVuYygpKTsKKyAgICBy
ZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIFN0
b3JlRnVuYygpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVu
Y1N1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKLSAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3MoY2FsbEZyYW1lLCBnbG9iYWxP
YmplY3QsIFN1YkZ1bmMoKSk7CisgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLCBTdWJGdW5jKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGF0b21pY3NGdW5jV2FpdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTM2NSwyOCArMzY1LDI4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXRvbWljc0Z1bmNXYWl0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGCiAgICAgCiAgICAgSlNJbnQzMkFycmF5KiB0eXBlZEFycmF5ID0ganNEeW5h
bWljQ2FzdDxKU0ludDMyQXJyYXkqPih2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAgICAg
aWYgKCF0eXBlZEFycmF5KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2Nv
cGUsICJUeXBlZCBhcnJheSBmb3Igd2FpdC93YWtlIG11c3QgYmUgYW4gSW50MzJBcnJheS4iX3Mp
OworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVHlwZWQgYXJy
YXkgZm9yIHdhaXQvd2FrZSBtdXN0IGJlIGFuIEludDMyQXJyYXkuIl9zKTsKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KCF0eXBlZEFycmF5LT5pc1NoYXJlZCgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxG
cmFtZSwgc2NvcGUsICJUeXBlZCBhcnJheSBmb3Igd2FpdC93YWtlIG11c3Qgd3JhcCBhIFNoYXJl
ZEFycmF5QnVmZmVyLiJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJUeXBlZCBhcnJheSBmb3Igd2FpdC93YWtlIG11c3Qgd3JhcCBhIFNoYXJlZEFycmF5
QnVmZmVyLiJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgYWNjZXNzSW5kZXggPSB2YWxpZGF0ZWRBY2Nlc3NJ
bmRleCh2bSwgY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLCB0eXBlZEFycmF5KTsK
KyAgICB1bnNpZ25lZCBhY2Nlc3NJbmRleCA9IHZhbGlkYXRlZEFjY2Vzc0luZGV4KHZtLCBnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMSksIHR5cGVkQXJyYXkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSk7CiAg
ICAgCiAgICAgaW50MzJfdCogcHRyID0gdHlwZWRBcnJheS0+dHlwZWRWZWN0b3IoKSArIGFjY2Vz
c0luZGV4OwogICAgIAotICAgIGludDMyX3QgZXhwZWN0ZWRWYWx1ZSA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMikudG9JbnQzMihjYWxsRnJhbWUpOworICAgIGludDMyX3QgZXhwZWN0ZWRWYWx1ZSA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMikudG9JbnQzMihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSk7CiAg
ICAgCi0gICAgZG91YmxlIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMykudG9OdW1iZXIoY2FsbEZyYW1lKTsKKyAgICBkb3VibGUgdGltZW91dEluTWlsbGlzZWNv
bmRzID0gY2FsbEZyYW1lLT5hcmd1bWVudCgzKS50b051bWJlcihnbG9iYWxPYmplY3QpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSk7CiAgICAgCiAgICAgaWYgKCF2bS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLT5pc0F0b21pY3NX
YWl0QWxsb3dlZE9uQ3VycmVudFRocmVhZCgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNh
bGxGcmFtZSwgc2NvcGUsICJBdG9taWNzLndhaXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIHRoZSBj
dXJyZW50IHRocmVhZC4iX3MpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiQXRvbWljcy53YWl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSB0aGUgY3VycmVudCB0
aHJlYWQuIl9zKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9CiAgICAgCkBAIC00MzUsMTYgKzQzNSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGF0b21pY3NGdW5jV2FrZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRgogICAgIAogICAgIEpTSW50MzJBcnJheSogdHlwZWRBcnJheSA9IGpzRHluYW1pY0Nhc3Q8
SlNJbnQzMkFycmF5Kj4odm0sIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIGlmICghdHlw
ZWRBcnJheSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiVHlw
ZWQgYXJyYXkgZm9yIHdhaXQvd2FrZSBtdXN0IGJlIGFuIEludDMyQXJyYXkuIl9zKTsKKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlR5cGVkIGFycmF5IGZvciB3
YWl0L3dha2UgbXVzdCBiZSBhbiBJbnQzMkFycmF5LiJfcyk7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogICAgIAogICAgIGlmICghdHlwZWRB
cnJheS0+aXNTaGFyZWQoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNj
b3BlLCAiVHlwZWQgYXJyYXkgZm9yIHdhaXQvd2FrZSBtdXN0IHdyYXAgYSBTaGFyZWRBcnJheUJ1
ZmZlci4iX3MpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
VHlwZWQgYXJyYXkgZm9yIHdhaXQvd2FrZSBtdXN0IHdyYXAgYSBTaGFyZWRBcnJheUJ1ZmZlci4i
X3MpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KIAotICAgIHVuc2lnbmVkIGFjY2Vzc0luZGV4ID0gdmFsaWRhdGVkQWNjZXNzSW5kZXgodm0s
IGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSwgdHlwZWRBcnJheSk7CisgICAgdW5z
aWduZWQgYWNjZXNzSW5kZXggPSB2YWxpZGF0ZWRBY2Nlc3NJbmRleCh2bSwgZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLCB0eXBlZEFycmF5KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpOwogICAgIAogICAg
IGludDMyX3QqIHB0ciA9IHR5cGVkQXJyYXktPnR5cGVkVmVjdG9yKCkgKyBhY2Nlc3NJbmRleDsK
QEAgLTQ1Miw3ICs0NTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGF0b21pY3NG
dW5jV2FrZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgogICAgIEpTVmFsdWUg
Y291bnRWYWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMik7CiAgICAgdW5zaWduZWQgY291bnQg
PSBVSU5UX01BWDsKICAgICBpZiAoIWNvdW50VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICBpbnQzMl90IGNvdW50SW50ID0gY291bnRWYWx1ZS50b0ludDMyKGNhbGxGcmFtZSk7CisgICAg
ICAgIGludDMyX3QgY291bnRJbnQgPSBjb3VudFZhbHVlLnRvSW50MzIoZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKTsKICAgICAgICAgY291bnQgPSBzdGQ6Om1heCgwLCBjb3VudEludCk7CiAgICAg
fQpAQCAtNDYyLDg2ICs0NjIsOTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9t
aWNzRnVuY1dha2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEYKIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhdG9taWNzRnVuY1hvcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gYXRvbWljT3Bl
cmF0aW9uV2l0aEFyZ3MoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIFhvckZ1bmMoKSk7CisgICAg
cmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBY
b3JGdW5jKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0
b21pY3NBZGQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNW
YWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc0FkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgb3BlcmFuZCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBK
U1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShp
bmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5kKX07Ci0gICAgcmV0dXJuIGF0b21pY09wZXJh
dGlvbldpdGhBcmdzKHZtLCBleGVjLCBhcmdzLCBBZGRGdW5jKCkpOworICAgIHJldHVybiBhdG9t
aWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZ2xvYmFsT2JqZWN0LCBhcmdzLCBBZGRGdW5jKCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NBbmQoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwg
RW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXRvbWljc0FuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIGFyZ3Nb
XSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFs
dWU6OmRlY29kZShvcGVyYW5kKX07Ci0gICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdz
KHZtLCBleGVjLCBhcmdzLCBBbmRGdW5jKCkpOworICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25X
aXRoQXJncyh2bSwgZ2xvYmFsT2JqZWN0LCBhcmdzLCBBbmRGdW5jKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NDb21wYXJlRXhjaGFuZ2UoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwg
RW5jb2RlZEpTVmFsdWUgZXhwZWN0ZWQsIEVuY29kZWRKU1ZhbHVlIG5ld1ZhbHVlKQorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzQ29tcGFyZUV4Y2hhbmdlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRK
U1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBleHBlY3RlZCwgRW5jb2RlZEpTVmFsdWUgbmV3
VmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1
ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgp
LCBKU1ZhbHVlOjpkZWNvZGUoZXhwZWN0ZWQpLCBKU1ZhbHVlOjpkZWNvZGUobmV3VmFsdWUpfTsK
LSAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIENvbXBh
cmVFeGNoYW5nZUZ1bmMoKSk7CisgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZt
LCBnbG9iYWxPYmplY3QsIGFyZ3MsIENvbXBhcmVFeGNoYW5nZUZ1bmMoKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc0V4Y2hhbmdlKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIG9wZXJhbmQpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkF0b21pY3NFeGNoYW5nZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIGFyZ3Nb
XSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFs
dWU6OmRlY29kZShvcGVyYW5kKX07Ci0gICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdz
KHZtLCBleGVjLCBhcmdzLCBFeGNoYW5nZUZ1bmMoKSk7CisgICAgcmV0dXJuIGF0b21pY09wZXJh
dGlvbldpdGhBcmdzKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3MsIEV4Y2hhbmdlRnVuYygpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzSXNMb2NrRnJl
ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHNpemUpCitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NJc0xvY2tGcmVlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHNpemUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICBy
ZXR1cm4gaXNMb2NrRnJlZShleGVjLCBKU1ZhbHVlOjpkZWNvZGUoc2l6ZSkpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKKyAgICByZXR1cm4gaXNMb2NrRnJlZShnbG9iYWxPYmplY3QsIEpTVmFsdWU6
OmRlY29kZShzaXplKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXRvbWljc0xvYWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBpbmRleCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QXRvbWljc0xvYWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
YmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBK
U1ZhbHVlOjpkZWNvZGUoaW5kZXgpfTsKLSAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFy
Z3Modm0sIGV4ZWMsIGFyZ3MsIExvYWRGdW5jKCkpOworICAgIHJldHVybiBhdG9taWNPcGVyYXRp
b25XaXRoQXJncyh2bSwgZ2xvYmFsT2JqZWN0LCBhcmdzLCBMb2FkRnVuYygpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzT3IoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgb3BlcmFuZCkKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRv
bWljc09yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2Us
IEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFs
dWU6OmRlY29kZShiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2Rl
KG9wZXJhbmQpfTsKLSAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0sIGV4ZWMs
IGFyZ3MsIE9yRnVuYygpKTsKKyAgICByZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0s
IGdsb2JhbE9iamVjdCwgYXJncywgT3JGdW5jKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NTdG9yZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5k
KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzU3RvcmUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpT
VmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7SlNWYWx1ZTo6ZGVjb2Rl
KGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUob3BlcmFuZCl9
OwotICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZXhlYywgYXJncywgU3Rv
cmVGdW5jKCkpOworICAgIHJldHVybiBhdG9taWNPcGVyYXRpb25XaXRoQXJncyh2bSwgZ2xvYmFs
T2JqZWN0LCBhcmdzLCBTdG9yZUZ1bmMoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXRvbWljc1N1YihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzU3ViKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGlu
ZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6OmRlY29kZShiYXNlKSwg
SlNWYWx1ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKG9wZXJhbmQpfTsKLSAgICBy
ZXR1cm4gYXRvbWljT3BlcmF0aW9uV2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIFN1YkZ1bmMoKSk7
CisgICAgcmV0dXJuIGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZtLCBnbG9iYWxPYmplY3QsIGFy
Z3MsIFN1YkZ1bmMoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXRvbWljc1hvcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQorRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwog
ICAgIEpTVmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6OmRlY29kZShiYXNlKSwgSlNWYWx1ZTo6ZGVj
b2RlKGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKG9wZXJhbmQpfTsKLSAgICByZXR1cm4gYXRvbWlj
T3BlcmF0aW9uV2l0aEFyZ3Modm0sIGV4ZWMsIGFyZ3MsIFhvckZ1bmMoKSk7CisgICAgcmV0dXJu
IGF0b21pY09wZXJhdGlvbldpdGhBcmdzKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3MsIFhvckZ1bmMo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXRvbWljc09iamVjdC5oCmluZGV4IDRhNTVmNDk3ZmE3MGI1YjBjNzQ3NzRiMDZhMWU4
ZTE5MDg1ZDVkY2MuLjNkZWY4YzgwYjlhYWNkZTkwOGNjNmZmNzgyYWRkODI1MDU3MTQ2YmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BdG9taWNzT2JqZWN0LmgKQEAgLTQ2
LDE2ICs0NiwxNiBAQCBjbGFzcyBBdG9taWNzT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCop
OwogfTsKIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzQWRk
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5k
ZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25BdG9taWNzQW5kKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFz
ZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpOwotRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzQ29tcGFyZUV4Y2hhbmdlKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGV4cGVjdGVkLCBFbmNvZGVkSlNWYWx1ZSBuZXdWYWx1ZSk7Ci1FbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NFeGNoYW5nZShFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBvcGVyYW5kKTsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXRvbWljc0lzTG9ja0ZyZWUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBzaXpl
KTsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc0xvYWQoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCk7
Ci1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0b21pY3NPcihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBvcGVyYW5kKTsKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXRvbWljc1N0b3JlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5j
b2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpOwotRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzU3ViKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9w
ZXJhbmQpOwotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzWG9y
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5k
ZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25BdG9taWNzQWRkKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgYmFz
ZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzQW5kKEpTR2xvYmFsT2JqZWN0
KiwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1Zh
bHVlIG9wZXJhbmQpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9t
aWNzQ29tcGFyZUV4Y2hhbmdlKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgYmFzZSwg
RW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGV4cGVjdGVkLCBFbmNvZGVkSlNW
YWx1ZSBuZXdWYWx1ZSk7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkF0
b21pY3NFeGNoYW5nZShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKTsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc0lzTG9ja0ZyZWUoSlNHbG9iYWxPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSBzaXplKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXRvbWljc0xvYWQoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBF
bmNvZGVkSlNWYWx1ZSBpbmRleCk7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkF0b21pY3NPcihKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKTsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXRvbWljc1N0b3JlKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9w
ZXJhbmQpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BdG9taWNzU3Vi
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5k
ZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25BdG9taWNzWG9yKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgYmFz
ZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpOwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQmlnSW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QmlnSW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDlhYTY1ODdhMTE3NmE3ODc2ZGE2MzY3NzdlNjBk
NzIyNWQzYzQ2YjkuLmM5OWIwYzE5M2JmNjM4Y2VmYzBhM2ZlZWIzYTVkMzE3YzI3NTdjNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENvbnN0cnVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rv
ci5jcHAKQEAgLTg3LDEwICs4NywxMCBAQCBzdGF0aWMgYm9vbCBpc1NhZmVJbnRlZ2VyKEpTVmFs
dWUgYXJndW1lbnQpCiAgICAgcmV0dXJuIHRydW5jKG51bWJlcikgPT0gbnVtYmVyICYmIHN0ZDo6
YWJzKG51bWJlcikgPD0gbWF4U2FmZUludGVnZXIoKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIHRvQmlnSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgYXJndW1lbnQpCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgdG9CaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBhcmd1bWVudCkKIHsKICAgICBBU1NFUlQoYXJndW1lbnQuaXNQcmltaXRpdmUoKSk7Ci0g
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgCiAgICAgaWYgKGFyZ3VtZW50LmlzQmlnSW50KCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYXJndW1lbnQpOwpAQCAtMTAxLDEyICsxMDEsMTIgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIHRvQmlnSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgYXJndW1lbnQpCiAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50
OjpjcmVhdGVGcm9tKHZtLCBhcmd1bWVudC5hc0Jvb2xlYW4oKSkpKTsKICAgICAKICAgICBpZiAo
YXJndW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSB8fCBhcmd1bWVudC5pc051bWJlcigpIHx8IGFy
Z3VtZW50LmlzU3ltYm9sKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUsICJJbnZhbGlkIGFyZ3VtZW50IHR5cGUgaW4gVG9CaWdJbnQgb3BlcmF0aW9uIl9z
KTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IkludmFsaWQgYXJndW1lbnQgdHlwZSBpbiBUb0JpZ0ludCBvcGVyYXRpb24iX3MpOwogICAgIAog
ICAgIEFTU0VSVChhcmd1bWVudC5pc1N0cmluZygpKTsKICAgICAKLSAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIHRvU3RyaW5nVmlldygmc3RhdGUsIGFyZ3VtZW50LCBbJl0gKFN0cmluZ1Zp
ZXcgdmlldykgewotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50OjpwYXJz
ZUludCgmc3RhdGUsIHZpZXcpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRvU3Ry
aW5nVmlldyhnbG9iYWxPYmplY3QsIGFyZ3VtZW50LCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgewor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50OjpwYXJzZUludChnbG9iYWxP
YmplY3QsIHZpZXcpKTsKICAgICB9KSk7CiB9CiAKQEAgLTExNiwxMiArMTE2LDEyIEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCaWdJbnRDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwot
ICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdmFsdWUudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKKyAg
ICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHZhbHVlLnRvUHJpbWl0aXZlKGdsb2JhbE9iamVjdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBp
ZiAocHJpbWl0aXZlLmlzTnVtYmVyKCkpIHsKICAgICAgICAgaWYgKCFpc1NhZmVJbnRlZ2VyKHBy
aW1pdGl2ZSkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgc2Nv
cGUsIGNyZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiTm90IHNhZmUgaW50ZWdlciJfcykpOwor
ICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIk5vdCBzYWZlIGludGVnZXIiX3MpKTsKICAgICAg
ICAgCiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZS5pc0lu
dDMyKCkpCkBAIC0xMzMsNyArMTMzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbEJpZ0ludENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4ocHJpbWl0aXZlLmFzRG91YmxlKCkpKSk7CiAgICAgfQogICAgIAotICAg
IEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IHRvQmlnSW50KCpjYWxsRnJhbWUsIHByaW1pdGl2ZSk7
CisgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0gdG9CaWdJbnQoZ2xvYmFsT2JqZWN0LCBwcmlt
aXRpdmUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CaWdJbnRPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQmlnSW50T2JqZWN0LmNwcAppbmRleCAzYzE0OTgyYzRkNmU3ZDNhNTQ0OTgyZDU3MzhkNTY1
MzE3MmY3ODRhLi5lZTAwNDVkYWM5NjNlN2RkNmY2NDhiZDNlNDk3NTYwNGQ1ZTllMzhiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludE9iamVjdC5jcHAKQEAgLTU2
LDEyICs1NiwxMiBAQCB2b2lkIEJpZ0ludE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBK
U0JpZ0ludCogYmlnSW50KQogICAgIHNldEludGVybmFsVmFsdWUodm0sIGJpZ0ludCk7CiB9CiAK
LVN0cmluZyBCaWdJbnRPYmplY3Q6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNT
dGF0ZSopCitTdHJpbmcgQmlnSW50T2JqZWN0Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCopCiB7CiAgICAgcmV0dXJuICJPYmplY3QiX3M7CiB9CiAKLUpTVmFs
dWUgQmlnSW50T2JqZWN0OjpkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkKK0pTVmFsdWUgQmlnSW50T2JqZWN0Ojpk
ZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKQogewogICAgIGNvbnN0IEJpZ0ludE9iamVjdCogYmlnSW50T2Jq
ZWN0ID0ganNDYXN0PGNvbnN0IEJpZ0ludE9iamVjdCo+KG9iamVjdCk7CiAgICAgcmV0dXJuIGJp
Z0ludE9iamVjdC0+aW50ZXJuYWxWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQmlnSW50T2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CaWdJbnRPYmplY3QuaAppbmRleCAwZjljZTVjYmYwNzc3M2FlOTEyNTc1NzZlOWI1NDhh
ZDI2OWU0ZDI1Li41YjMyZWFjMTY3MTgwZmIyMDM0ZmUwOTM1MjBiNzM1Njg1Zjc0OGVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRPYmplY3QuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRPYmplY3QuaApAQCAtNDYsOSAr
NDYsOSBAQCBjbGFzcyBCaWdJbnRPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0
IHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOworICAgIHN0YXRpYyBKU1ZhbHVl
IGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSk7CiAKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBK
U09iamVjdCosIEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNv
bnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKIAogcHJvdGVjdGVkOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0JpZ0ludCopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHAKaW5kZXgg
YmEwY2U3MzkxNzAwMzZmNWM5MWIzMTVlZTMzNDg0OGE1NmFkYTBlNC4uZDQ2MzgzYzk1M2U5MTYz
OGI0MzE4ZTlhZmU4YjQzYjNhNGRhMGNmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwCkBAIC05NywxNCArOTcsMTQgQEAgc3RhdGlj
IEpTVmFsdWUgYmlnSW50UHJvdG9GdW5jVG9TdHJpbmdJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmEKIAogICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZh
bHVlKHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXZhbHVlKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIid0aGlzJyB2YWx1ZSBt
dXN0IGJlIGEgQmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBC
aWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKIAogICAgIEFTU0VSVCh2YWx1ZSk7CiAKLSAgICBp
bnQzMl90IHJhZGl4ID0gZXh0cmFjdFRvU3RyaW5nUmFkaXhBcmd1bWVudChjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMCksIHNjb3BlKTsKKyAgICBpbnQzMl90IHJhZGl4ID0gZXh0cmFj
dFRvU3RyaW5nUmFkaXhBcmd1bWVudChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCksIHNjb3BlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAg
U3RyaW5nIHJlc3VsdFN0cmluZyA9IHZhbHVlLT50b1N0cmluZyhjYWxsRnJhbWUsIHJhZGl4KTsK
KyAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gdmFsdWUtPnRvU3RyaW5nKGdsb2JhbE9iamVjdCwg
cmFkaXgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUu
cmVsZWFzZSgpOwogICAgIGlmIChyZXN1bHRTdHJpbmcubGVuZ3RoKCkgPT0gMSkKQEAgLTEzMCw3
ICsxMzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJpZ0ludFByb3RvRnVuY1Zh
bHVlT2YoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHZhbHVlKTsKICAgICAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwg
Iid0aGlzJyB2YWx1ZSBtdXN0IGJlIGEgQmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CisgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIid0aGlzJyB2YWx1
ZSBtdXN0IGJlIGEgQmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
bkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5D
b25zdHJ1Y3Rvci5jcHAKaW5kZXggNTk5Yjg4NTRlOGY1YTlhNTEwOGFlZWMwMzA2ZmFiNDQ4ZDA2
YjYwZS4uZTBkYWY4ZmVjYWQwNWE2MGRlYjJjNmUxMzM5ZjgwNzA5ZDE5MTU1YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3Bw
CkBAIC0zMiw5ICszMiw5IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJM
RShCb29sZWFuQ29uc3RydWN0b3IpOwogY29uc3QgQ2xhc3NJbmZvIEJvb2xlYW5Db25zdHJ1Y3Rv
cjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEJvb2xlYW5Db25zdHJ1Y3RvcikgfTsKIAogLy8gRUNNQSAx
NS42LjEKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCb29sZWFuQ29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCb29sZWFuQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b0Jv
b2xlYW4oY2FsbEZyYW1lKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGdsb2JhbE9iamVjdCkpKTsKIH0KIAog
Ly8gRUNNQSAxNS42LjIKQEAgLTQyLDggKzQyLDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0V2l0aEJvb2xlYW5Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamUK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgYm9vbGVhbiA9IGpzQm9vbGVhbihj
YWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihjYWxsRnJhbWUpKTsKLSAgICBTdHJ1Y3R1
cmUqIGJvb2xlYW5TdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+
Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBKU1ZhbHVlIGJvb2xlYW4gPSBqc0Jvb2xl
YW4oY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KSk7CisgICAg
U3RydWN0dXJlKiBib29sZWFuU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3Vi
Y2xhc3NTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCksIGNhbGxG
cmFtZS0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUodm0sIGJvb2xlYW5T
dHJ1Y3R1cmUpOwogICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgYm9vbGVhbik7CkBAIC02
Miw3ICs2Miw3IEBAIHZvaWQgQm9vbGVhbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEJvb2xlYW5Qcm90b3R5cGUqIGJvb2xlYW5Qcm90b3R5CiAgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIFBy
b3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CiB9CiAKLUpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBpbW1lZGlhdGVC
b29sZWFuVmFsdWUpCitKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29s
ZWFuKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgaW1tZWRpYXRlQm9vbGVh
blZhbHVlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBCb29sZWFu
T2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+Ym9v
bGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgKaW5kZXggYjk2MzY1NjU1OTVhYTRhYzZlZWEwNzJi
YWE3YWNjYzQwZDI5MzhlZC4uNDYxZTcxNDJhNzdmZTYzYjA1YmJiNDNmOTFiMzZkMGYxNzY3MTRm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmgKQEAgLTUyLDYgKzUyLDYgQEAgY2xhc3MgQm9vbGVhbkNvbnN0cnVjdG9yIGZpbmFs
IDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIEJvb2xlYW5Db25zdHJ1Y3RvcihWTSYs
IFN0cnVjdHVyZSopOwogfTsKIAotSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRp
YXRlQm9vbGVhbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworSlNPYmpl
Y3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRlQm9vbGVhbihKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKaW5kZXggM2Y5YjVkZmRiZmQ4NTRk
NDQxZDdiNjkyMTA0YWMzNzg0OTYzNDBjMS4uNjgzZTE5YjQ5OTI3NWU1NDg5Y2M3Nzk1YjI2NDA5
Zjg3N2E2NTJhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhblByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhblByb3RvdHlwZS5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amUKIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEJvb2xlYW5PYmplY3Qq
Pih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKICAgICBpZiAodGhp
c09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpID09IGpzQm9vbGVhbihmYWxzZSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodm0uc21hbGxTdHJpbmdzLmZhbHNlU3RyaW5nKCkpOwpAQCAt
OTcsNyArOTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Qcm90b0Z1
bmNWYWx1ZU9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogCiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8Qm9vbGVhbk9iamVjdCo+KHZtLCB0aGlzVmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09i
amVjdC0+aW50ZXJuYWxWYWx1ZSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhbGxEYXRhLmNwcAppbmRleCAxMzgzYTU0YzZmNjk2YTZhZGMyZjQ1ZTgxZDM3NjM4MTM0Y2E3
YjJmLi4xN2JjOWRiZmI2NTk5MWM2YjYzM2VjN2M5MjM3NWVhZDc1MWY2MDAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCkBAIC0zNCwzNiArMzQsMzYgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9y
TWVzc2FnZSkKK0pTVmFsdWUgY2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJv
ck1lc3NhZ2UpCiB7Ci0gICAgcmV0dXJuIGNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGZ1bmN0
aW9uT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworICAgIHJldHVybiBjYWxsKGdsb2JhbE9i
amVjdCwgZnVuY3Rpb25PYmplY3QsIGZ1bmN0aW9uT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2Up
OwogfQogCi1KU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciog
ZXJyb3JNZXNzYWdlKQorSlNWYWx1ZSBjYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb25PYmplY3QsIGNhbGxE
YXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCi0gICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7CiAK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3Qs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBjYWxsKGdsb2JhbE9iamVjdCwgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBl
LCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKSk7CiB9CiAKLUpTVmFsdWUgY2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25z
dCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQorSlNWYWx1ZSBjYWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
ZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERh
dGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEFT
U0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6SlMgfHwgY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Okhv
c3QpOwotICAgIHJldHVybiB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZUNhbGwoZXhlYywgYXNPYmpl
Y3QoZnVuY3Rpb25PYmplY3QpLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7
CisgICAgcmV0dXJuIHZtLmludGVycHJldGVyLT5leGVjdXRlQ2FsbChnbG9iYWxPYmplY3QsIGFz
T2JqZWN0KGZ1bmN0aW9uT2JqZWN0KSwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFy
Z3MpOwogfQogCi1KU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9u
T2JqZWN0LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgTmFrZWRQdHI8RXhjZXB0aW9uPiYg
cmV0dXJuZWRFeGNlcHRpb24pCitKU1ZhbHVlIGNhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENh
bGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGNh
bGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBh
cmdzKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbk9i
amVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOwogICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBz
Y29wZS5leGNlcHRpb24oKTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKQEAgLTcz
LDE4ICs3MywxOCBAQCBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0
aW9uT2JqZWN0LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUpTVmFsdWUgcHJvZmlsZWRDYWxsKEV4ZWNTdGF0ZSogZXhlYywgUHJvZmlsaW5nUmVh
c29uIHJlYXNvbiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNv
bnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCitKU1ZhbHVlIHByb2ZpbGVkQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9maWxpbmdSZWFzb24gcmVhc29uLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlw
ZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFNj
cmlwdFByb2ZpbGluZ1Njb3BlIHByb2ZpbGluZ1Njb3BlKHZtLnZtRW50cnlHbG9iYWxPYmplY3Qo
ZXhlYyksIHJlYXNvbik7Ci0gICAgcmV0dXJuIGNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgU2NyaXB0UHJvZmlsaW5nU2NvcGUgcHJvZmlsaW5nU2NvcGUodm0u
dm1FbnRyeUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpLCByZWFzb24pOworICAgIHJldHVybiBj
YWxsKGdsb2JhbE9iamVjdCwgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhp
c1ZhbHVlLCBhcmdzKTsKIH0KIAotSlNWYWx1ZSBwcm9maWxlZENhbGwoRXhlY1N0YXRlKiBleGVj
LCBQcm9maWxpbmdSZWFzb24gcmVhc29uLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlw
ZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncywgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRp
b24pCitKU1ZhbHVlIHByb2ZpbGVkQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9maWxpbmdSZWFzb24gcmVhc29uLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSBj
YWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncywgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24p
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBTY3JpcHRQcm9maWxpbmdTY29wZSBw
cm9maWxpbmdTY29wZSh2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLCByZWFzb24pOwotICAg
IHJldHVybiBjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRo
aXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNlcHRpb24pOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBTY3JpcHRQcm9maWxpbmdTY29wZSBwcm9maWxpbmdTY29wZSh2bS52
bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCksIHJlYXNvbik7CisgICAgcmV0dXJuIGNh
bGwoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
VmFsdWUsIGFyZ3MsIHJldHVybmVkRXhjZXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAppbmRleCBlOTcxNDg4NTJk
MGI4ZTY3NDU0NzhlZmY5MjA1MzNhNGM1YjNhZjY0Li5mNWFiZjRkZjRmZTM1ZDE2ZWY0MGU0NTU0
M2E1ZTEyMGEzOTI4ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWxsRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRh
LmgKQEAgLTM5LDcgKzM5LDYgQEAgY2xhc3MgRXhjZXB0aW9uOwogY2xhc3MgRnVuY3Rpb25FeGVj
dXRhYmxlOwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBKU1Njb3BlOwotdXNpbmcgRXhlY1N0YXRl
ID0gQ2FsbEZyYW1lOwogCiBlbnVtIGNsYXNzIENhbGxUeXBlIDogdW5zaWduZWQgewogICAgIE5v
bmUsCkBAIC02NiwxMyArNjUsMTMgQEAgZW51bSBjbGFzcyBQcm9maWxpbmdSZWFzb24gewogfTsK
IAogLy8gQ29udmVuaWVuY2Ugd3JhcHBlciBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGgg
Q2FsbERhdGEgYW5kIENhbGxUeXBlIHVubGVzcyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVtLgot
SlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rp
b25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOwotSlNf
RVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25P
YmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJy
b3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOwogCi1KU19FWFBPUlRfUFJJVkFURSBK
U1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUs
IGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKLUpT
X0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1bmN0aW9u
T2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKK0pT
X0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgZnVu
Y3Rpb25PYmplY3QsIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7CitKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERh
dGEmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYsIE5ha2VkUHRyPEV4Y2VwdGlv
bj4mIHJldHVybmVkRXhjZXB0aW9uKTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBwcm9m
aWxlZENhbGwoRXhlY1N0YXRlKiwgUHJvZmlsaW5nUmVhc29uLCBKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3Qg
QXJnTGlzdCYpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBwcm9maWxlZENhbGwoRXhlY1N0
YXRlKiwgUHJvZmlsaW5nUmVhc29uLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwg
Y29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYsIE5ha2Vk
UHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpT
VmFsdWUgcHJvZmlsZWRDYWxsKEpTR2xvYmFsT2JqZWN0KiwgUHJvZmlsaW5nUmVhc29uLCBKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBwcm9m
aWxlZENhbGwoSlNHbG9iYWxPYmplY3QqLCBQcm9maWxpbmdSZWFzb24sIEpTVmFsdWUgZnVuY3Rp
b25PYmplY3QsIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0JiwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pOwog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJ
bmZvLmgKaW5kZXggMmRlYTk2M2U5YmU3MjNiNjA1YjUzY2I0OTkyZjZjYzJlNjUwN2UyMC4uNzgx
NWU0MjJkNmI4NmNjOGQ5YzY5NjMyZDdiMTk0ZWQ1YTc2ZmYzZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKQEAgLTU0LDQzICs1NCw0MyBAQCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogICAgIHVzaW5nIEdldENvbnN0cnVjdERhdGFGdW5jdGlvblB0ciA9IENvbnN0
cnVjdFR5cGUgKCopKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBHZXRDb25zdHJ1Y3RE
YXRhRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldENvbnN0cnVjdERhdGEpOwogCi0g
ICAgdXNpbmcgUHV0RnVuY3Rpb25QdHIgPSBib29sICgqKShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICB1c2luZyBQdXRGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CiAgICAgUHV0RnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHB1dCk7CiAKLSAgICB1c2lu
ZyBQdXRCeUluZGV4RnVuY3Rpb25QdHIgPSBib29sICgqKShKU0NlbGwqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHVz
aW5nIFB1dEJ5SW5kZXhGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
ICAgICBQdXRCeUluZGV4RnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHB1dEJ5SW5kZXgp
OwogCi0gICAgdXNpbmcgRGVsZXRlUHJvcGVydHlGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgdXNpbmcgRGVsZXRlUHJvcGVydHlG
dW5jdGlvblB0ciA9IGJvb2wgKCopKEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lKTsKICAgICBEZWxldGVQcm9wZXJ0eUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShk
ZWxldGVQcm9wZXJ0eSk7CiAKLSAgICB1c2luZyBEZWxldGVQcm9wZXJ0eUJ5SW5kZXhGdW5jdGlv
blB0ciA9IGJvb2wgKCopKEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKKyAgICB1c2lu
ZyBEZWxldGVQcm9wZXJ0eUJ5SW5kZXhGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwogICAgIERlbGV0ZVByb3BlcnR5QnlJbmRleEZ1bmN0
aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOwogCi0gICAg
dXNpbmcgR2V0T3duUHJvcGVydHlTbG90RnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgdXNpbmcgR2V0
T3duUHJvcGVydHlTbG90RnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBHZXRPd25Qcm9wZXJ0
eVNsb3RGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duUHJvcGVydHlTbG90KTsK
IAotICAgIHVzaW5nIEdldE93blByb3BlcnR5U2xvdEJ5SW5kZXhGdW5jdGlvblB0ciA9IGJvb2wg
KCopKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOworICAg
IHVzaW5nIEdldE93blByb3BlcnR5U2xvdEJ5SW5kZXhGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7CiAgICAg
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KTsKIAotICAgIHVzaW5nIERvUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgdXNpbmcgRG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2tGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIERvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGRvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrKTsKIAotICAgIHVzaW5nIFRvVGhpc0Z1bmN0aW9uUHRyID0gSlNWYWx1ZSAo
KikoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1vZGUpOworICAgIHVzaW5nIFRvVGhpc0Z1bmN0
aW9uUHRyID0gSlNWYWx1ZSAoKikoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBFQ01BTW9kZSk7
CiAgICAgVG9UaGlzRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHRvVGhpcyk7CiAKLSAg
ICB1c2luZyBEZWZhdWx0VmFsdWVGdW5jdGlvblB0ciA9IEpTVmFsdWUgKCopKGNvbnN0IEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CisgICAgdXNpbmcgRGVm
YXVsdFZhbHVlRnVuY3Rpb25QdHIgPSBKU1ZhbHVlICgqKShjb25zdCBKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgRGVmYXVsdFZhbHVlRnVu
Y3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGRlZmF1bHRWYWx1ZSk7CiAKLSAgICB1c2luZyBH
ZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICB1c2luZyBH
ZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEdl
dE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duUHJv
cGVydHlOYW1lcyk7CiAKLSAgICB1c2luZyBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5j
dGlvblB0ciA9IHZvaWQgKCopKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHVzaW5nIEdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lc0Z1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBHZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKTsKIAotICAgIHVzaW5nIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciA9
IHZvaWQgKCopKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIHVzaW5nIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciA9IHZv
aWQgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIE1FVEhPRF9U
QUJMRV9FTlRSWShnZXRQcm9wZXJ0eU5hbWVzKTsKIAotICAgIHVzaW5nIEdldEVudW1lcmFibGVM
ZW5ndGhGdW5jdGlvblB0ciA9IHVpbnQzMl90ICgqKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwor
ICAgIHVzaW5nIEdldEVudW1lcmFibGVMZW5ndGhGdW5jdGlvblB0ciA9IHVpbnQzMl90ICgqKShK
U0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7CiAgICAgR2V0RW51bWVyYWJsZUxlbmd0aEZ1bmN0
aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRFbnVtZXJhYmxlTGVuZ3RoKTsKIAogICAgIEdl
dFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0U3RydWN0dXJl
UHJvcGVydHlOYW1lcyk7CkBAIC05OSwyNSArOTksMjUgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsK
ICAgICB1c2luZyBDbGFzc05hbWVGdW5jdGlvblB0ciA9IFN0cmluZyAoKikoY29uc3QgSlNPYmpl
Y3QqLCBWTSYpOwogICAgIENsYXNzTmFtZUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShj
bGFzc05hbWUpOwogCi0gICAgdXNpbmcgVG9TdHJpbmdOYW1lRnVuY3Rpb25QdHIgPSBTdHJpbmcg
KCopKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7CisgICAgdXNpbmcgVG9TdHJpbmdOYW1l
RnVuY3Rpb25QdHIgPSBTdHJpbmcgKCopKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
KTsKICAgICBUb1N0cmluZ05hbWVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkodG9TdHJp
bmdOYW1lKTsKIAotICAgIHVzaW5nIEN1c3RvbUhhc0luc3RhbmNlRnVuY3Rpb25QdHIgPSBib29s
ICgqKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIHVzaW5nIEN1c3RvbUhh
c0luc3RhbmNlRnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSk7CiAgICAgQ3VzdG9tSGFzSW5zdGFuY2VGdW5jdGlvblB0ciBNRVRIT0RfVEFC
TEVfRU5UUlkoY3VzdG9tSGFzSW5zdGFuY2UpOwogCi0gICAgdXNpbmcgRGVmaW5lT3duUHJvcGVy
dHlGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sKTsKKyAgICB1c2luZyBEZWZpbmVP
d25Qcm9wZXJ0eUZ1bmN0aW9uUHRyID0gYm9vbCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCk7CiAgICAg
RGVmaW5lT3duUHJvcGVydHlGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVmaW5lT3du
UHJvcGVydHkpOwogCi0gICAgdXNpbmcgUHJldmVudEV4dGVuc2lvbnNGdW5jdGlvblB0ciA9IGJv
b2wgKCopKEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7CisgICAgdXNpbmcgUHJldmVudEV4dGVuc2lv
bnNGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKICAg
ICBQcmV2ZW50RXh0ZW5zaW9uc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShwcmV2ZW50
RXh0ZW5zaW9ucyk7CiAKLSAgICB1c2luZyBJc0V4dGVuc2libGVGdW5jdGlvblB0ciA9IGJvb2wg
KCopKEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7CisgICAgdXNpbmcgSXNFeHRlbnNpYmxlRnVuY3Rp
b25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgSXNFeHRl
bnNpYmxlRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGlzRXh0ZW5zaWJsZSk7CiAKLSAg
ICB1c2luZyBTZXRQcm90b3R5cGVGdW5jdGlvblB0ciA9IGJvb2wgKCopKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CisgICAgdXNpbmcg
U2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgPSBib29sICgqKShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgU2V0UHJvdG90
eXBlRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKHNldFByb3RvdHlwZSk7CiAKLSAgICB1
c2luZyBHZXRQcm90b3R5cGVGdW5jdGlvblB0ciA9IEpTVmFsdWUgKCopKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKik7CisgICAgdXNpbmcgR2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgPSBKU1ZhbHVlICgq
KShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgR2V0UHJvdG90eXBlRnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldFByb3RvdHlwZSk7CiAKICAgICB1c2luZyBEdW1wVG9T
dHJlYW1GdW5jdGlvblB0ciA9IHZvaWQgKCopKGNvbnN0IEpTQ2VsbCosIFByaW50U3RyZWFtJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVu
dHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNw
cAppbmRleCA4YjA3NGIyZDdkNzk5YTMzNThkOTdjMmMyZmFiM2U5ZDY4NjQ2NDcwLi4xYWUzZjYy
NWY2Zjk4MTZjNDE1Y2Y4NjkxNGUzMTNkNTE2NTQ5MDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKQEAgLTc0LDE3ICs3NCwxNyBA
QCBDbG9uZWRBcmd1bWVudHMqIENsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotQ2xvbmVkQXJndW1lbnRzKiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0
ZUVtcHR5KEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogY2FsbGVlLCB1bnNpZ25lZCBsZW5n
dGgpCitDbG9uZWRBcmd1bWVudHMqIENsb25lZEFyZ3VtZW50czo6Y3JlYXRlRW1wdHkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNGdW5jdGlvbiogY2FsbGVlLCB1bnNpZ25lZCBsZW5n
dGgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgLy8gTkIuIFNvbWUgY2xpZW50cyBtaWdodCBleHBlY3QgdGhhdCB0aGUg
Z2xvYmFsIG9iamVjdCBvZiBvZiB0aGlzIG9iamVjdCBpcyB0aGUgZ2xvYmFsIG9iamVjdAogICAg
IC8vIG9mIHRoZSBjYWxsZWUuIFdlIGRvbid0IGRvIHRoaXMgZm9yIG5vdywgYnV0IG1heWJlIHdl
IHNob3VsZC4KLSAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZUVtcHR5KHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBj
YWxsZWUsIGxlbmd0aCk7CisgICAgQ2xvbmVkQXJndW1lbnRzKiByZXN1bHQgPSBjcmVhdGVFbXB0
eSh2bSwgZ2xvYmFsT2JqZWN0LT5jbG9uZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgY2FsbGVlLCBs
ZW5ndGgpOwogICAgIEFTU0VSVCghcmVzdWx0LT5uZWVkc1Nsb3dQdXRJbmRleGluZyh2bSkgfHwg
c2hvdWxkVXNlU2xvd1B1dChyZXN1bHQtPnN0cnVjdHVyZSh2bSktPmluZGV4aW5nVHlwZSgpKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ2xvbmVkQXJndW1lbnRzKiBDbG9uZWRBcmd1bWVu
dHM6OmNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSog
dGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBBcmd1bWVudHNN
b2RlIG1vZGUpCitDbG9uZWRBcmd1bWVudHMqIENsb25lZEFyZ3VtZW50czo6Y3JlYXRlV2l0aElu
bGluZUZyYW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogdGFyZ2V0
RnJhbWUsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlIG1v
ZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwogICAgIApAQCAtMTA0LDQ2ICsxMDQsNDYg
QEAgQ2xvbmVkQXJndW1lbnRzKiBDbG9uZWRBcmd1bWVudHM6OmNyZWF0ZVdpdGhJbmxpbmVGcmFt
ZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWMKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBsZW5ndGggPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
OwogICAgICAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVFbXB0
eShteUZyYW1lLCBjYWxsZWUsIGxlbmd0aCk7CisgICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVF
bXB0eShnbG9iYWxPYmplY3QsIGNhbGxlZSwgbGVuZ3RoKTsKIAogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAgICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0SW5kZXgobXlGcmFtZSwgaSwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXBb
aSArIDFdLnJlY292ZXIodGFyZ2V0RnJhbWUpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1
dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNX
aXRoRml4dXBbaSArIDFdLnJlY292ZXIodGFyZ2V0RnJhbWUpKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGxlbmd0aCA9IHRhcmdldEZyYW1lLT5hcmd1bWVudENvdW50KCk7Ci0gICAg
ICAgICAgICByZXN1bHQgPSBjcmVhdGVFbXB0eShteUZyYW1lLCBjYWxsZWUsIGxlbmd0aCk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVFbXB0eShnbG9iYWxPYmplY3QsIGNhbGxlZSwgbGVu
Z3RoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQotICAg
ICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgobXlGcmFtZSwgaSwgdGFyZ2V0RnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgdGFyZ2V0RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KGkpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgQXJndW1lbnRzTW9kZTo6RmFrZVZhbHVlczogewotICAgICAgICByZXN1bHQgPSBjcmVhdGVF
bXB0eShteUZyYW1lLCBjYWxsZWUsIDApOworICAgICAgICByZXN1bHQgPSBjcmVhdGVFbXB0eShn
bG9iYWxPYmplY3QsIGNhbGxlZSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0gfQogCi0gICAg
QVNTRVJUKG15RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2xvbmVkQXJndW1lbnRzU3Ry
dWN0dXJlKCkgPT0gcmVzdWx0LT5zdHJ1Y3R1cmUobXlGcmFtZS0+dm0oKSkpOwotICAgIEFTU0VS
VCghcmVzdWx0LT5uZWVkc1Nsb3dQdXRJbmRleGluZyhteUZyYW1lLT52bSgpKSB8fCBzaG91bGRV
c2VTbG93UHV0KHJlc3VsdC0+c3RydWN0dXJlKG15RnJhbWUtPnZtKCkpLT5pbmRleGluZ1R5cGUo
KSkpOworICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmNsb25lZEFyZ3VtZW50c1N0cnVjdHVyZSgp
ID09IHJlc3VsdC0+c3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dm0oKSkpOworICAgIEFTU0VSVCgh
cmVzdWx0LT5uZWVkc1Nsb3dQdXRJbmRleGluZyhnbG9iYWxPYmplY3QtPnZtKCkpIHx8IHNob3Vs
ZFVzZVNsb3dQdXQocmVzdWx0LT5zdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+aW5kZXhp
bmdUeXBlKCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1DbG9uZWRBcmd1bWVudHMqIENs
b25lZEFyZ3VtZW50czo6Y3JlYXRlV2l0aE1hY2hpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUs
IEV4ZWNTdGF0ZSogdGFyZ2V0RnJhbWUsIEFyZ3VtZW50c01vZGUgbW9kZSkKK0Nsb25lZEFyZ3Vt
ZW50cyogQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVXaXRoTWFjaGluZUZyYW1lKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogdGFyZ2V0RnJhbWUsIEFyZ3VtZW50c01vZGUg
bW9kZSkKIHsKLSAgICBDbG9uZWRBcmd1bWVudHMqIHJlc3VsdCA9IGNyZWF0ZVdpdGhJbmxpbmVG
cmFtZShteUZyYW1lLCB0YXJnZXRGcmFtZSwgbnVsbHB0ciwgbW9kZSk7Ci0gICAgQVNTRVJUKCFy
ZXN1bHQtPm5lZWRzU2xvd1B1dEluZGV4aW5nKG15RnJhbWUtPnZtKCkpIHx8IHNob3VsZFVzZVNs
b3dQdXQocmVzdWx0LT5zdHJ1Y3R1cmUobXlGcmFtZS0+dm0oKSktPmluZGV4aW5nVHlwZSgpKSk7
CisgICAgQ2xvbmVkQXJndW1lbnRzKiByZXN1bHQgPSBjcmVhdGVXaXRoSW5saW5lRnJhbWUoZ2xv
YmFsT2JqZWN0LCB0YXJnZXRGcmFtZSwgbnVsbHB0ciwgbW9kZSk7CisgICAgQVNTRVJUKCFyZXN1
bHQtPm5lZWRzU2xvd1B1dEluZGV4aW5nKGdsb2JhbE9iamVjdC0+dm0oKSkgfHwgc2hvdWxkVXNl
U2xvd1B1dChyZXN1bHQtPnN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnZtKCkpLT5pbmRleGluZ1R5
cGUoKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENsb25lZEFyZ3VtZW50cyogQ2xvbmVk
QXJndW1lbnRzOjpjcmVhdGVCeUNvcHlpbmdGcm9tKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgsCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsCiAgICAgSlNGdW5j
dGlvbiogY2FsbGVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRl
RW1wdHkodm0sIHN0cnVjdHVyZSwgY2FsbGVlLCBsZW5ndGgpOwogICAgIAogICAgIGZvciAodW5z
aWduZWQgaSA9IGxlbmd0aDsgaS0tOykKLSAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCBhcmd1bWVudFN0YXJ0W2ldLmpzVmFsdWUoKSk7CisgICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpLCBhcmd1bWVudFN0YXJ0W2ldLmpzVmFsdWUoKSk7
CiAgICAgQVNTRVJUKCFyZXN1bHQtPm5lZWRzU2xvd1B1dEluZGV4aW5nKHZtKSB8fCBzaG91bGRV
c2VTbG93UHV0KHJlc3VsdC0+c3RydWN0dXJlKHZtKS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtMTcxLDEwICsxNzEsMTAgQEAgU3RydWN0dXJlKiBDbG9uZWRB
cmd1bWVudHM6OmNyZWF0ZVNsb3dQdXRTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmEKICAgICByZXR1cm4gY3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7CiB9CiAKLWJvb2wgQ2xvbmVk
QXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgQ2xv
bmVkQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25l
ZEFyZ3VtZW50cyo+KG9iamVjdCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBpZiAoIXRoaXNPYmplY3QtPnNwZWNpYWxz
TWF0ZXJpYWxpemVkKCkpIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXNPYmplY3QtPm1fY2FsbGVlLT5leGVj
dXRhYmxlKCkpOwpAQCAtMTk1LDc3ICsxOTUsNzcgQEAgYm9vbCBDbG9uZWRBcmd1bWVudHM6Omdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3AK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpZGVudCwgc2xvdCk7CiB9CiAK
LXZvaWQgQ2xvbmVkQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3ZvaWQgQ2xvbmVkQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgQ2xvbmVkQXJndW1l
bnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+KG9iamVjdCk7Ci0gICAg
dGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGV4ZWMpOwotICAgIEJh
c2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOwor
ICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShnbG9iYWxPYmpl
Y3QpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBhcnJheSwgbW9kZSk7CiB9CiAKLWJvb2wgQ2xvbmVkQXJndW1lbnRzOjpwdXQoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBDbG9uZWRBcmd1bWVudHM6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBpZGVu
dCwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIENsb25lZEFy
Z3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1bWVudHMqPihjZWxsKTsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICAKICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCiAgICAgICAg
IHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKSB7Ci0gICAgICAg
IHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShleGVjKTsKKyAgICAg
ICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGdsb2JhbE9iamVj
dCk7CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBkdW1teSA9IHNsb3Q7IC8vIFNoYWRvdyB0aGUg
Z2l2ZW4gUHV0UHJvcGVydHlTbG90IHRvIHByZXZlbnQgY2FjaGluZy4KLSAgICAgICAgcmV0dXJu
IEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwgdmFsdWUsIGR1bW15KTsKKyAgICAg
ICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1
ZSwgZHVtbXkpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3Qs
IGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLWJvb2wgQ2xvbmVk
QXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIGlkZW50KQorYm9vbCBDbG9uZWRBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
IGlkZW50KQogewogICAgIENsb25lZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9u
ZWRBcmd1bWVudHMqPihjZWxsKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAKICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+Y2FsbGVlCiAgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yU3ltYm9sKQotICAgICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZO
ZWNlc3NhcnkoZXhlYyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJ
Zk5lY2Vzc2FyeShnbG9iYWxPYmplY3QpOwogICAgIAotICAgIHJldHVybiBCYXNlOjpkZWxldGVQ
cm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCk7CisgICAgcmV0dXJuIEJhc2U6OmRlbGV0
ZVByb3BlcnR5KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQpOwogfQogCi1ib29sIENs
b25lZEFyZ3VtZW50czo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgaWRlbnQsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgQ2xvbmVkQXJndW1lbnRzOjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBDbG9uZWRBcmd1bWVudHMqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8Q2xvbmVkQXJndW1lbnRzKj4ob2JqZWN0KTsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAKICAgICBpZiAo
aWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlCiAgICAgICAgIHx8IGlkZW50ID09IHZt
LnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKQotICAgICAgICB0aGlzT2JqZWN0LT5tYXRl
cmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZXhlYyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1h
dGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShnbG9iYWxPYmplY3QpOwogICAgIAotICAgIHJl
dHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIGlkZW50LCBkZXNjcmlw
dG9yLCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBpZGVudCwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQog
Ci12b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFscyhFeGVjU3RhdGUqIGV4
ZWMpCit2b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFscyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFzcGVjaWFsc01hdGVy
aWFsaXplZCgpKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jYWxsZWUtPmV4ZWN1dGFibGUoKSk7CiAg
ICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKTsKICAgICAK
ICAgICBpZiAoaXNTdHJpY3RNb2RlKQotICAgICAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIGdsb2JhbE9iamVjdCh2bSktPnRocm93VHlwZUVycm9y
QXJndW1lbnRzQ2FsbGVlQW5kQ2FsbGVyR2V0dGVyU2V0dGVyKCksIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkFjY2Vzc29yKTsKKyAgICAgICAgcHV0RGlyZWN0QWNjZXNzb3IoZ2xvYmFsT2JqZWN0
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIHRoaXMtPmdsb2JhbE9iamVjdCh2bSktPnRocm93
VHlwZUVycm9yQXJndW1lbnRzQ2FsbGVlQW5kQ2FsbGVyR2V0dGVyU2V0dGVyKCksIFByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKTsKICAgICBlbHNlCiAgICAgICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBKU1ZhbHVlKG1fY2FsbGVlLmdldCgpKSk7CiAK
LSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9i
YWxPYmplY3Qodm0pLT5hcnJheVByb3RvVmFsdWVzRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIHRoaXMtPmdsb2JhbE9iamVjdCh2bSkt
PmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCiAgICAgbV9jYWxsZWUuY2xlYXIoKTsKIH0K
IAotdm9pZCBDbG9uZWRBcmd1bWVudHM6Om1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShF
eGVjU3RhdGUqIGV4ZWMpCit2b2lkIENsb25lZEFyZ3VtZW50czo6bWF0ZXJpYWxpemVTcGVjaWFs
c0lmTmVjZXNzYXJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgaWYgKCFz
cGVjaWFsc01hdGVyaWFsaXplZCgpKQotICAgICAgICBtYXRlcmlhbGl6ZVNwZWNpYWxzKGV4ZWMp
OworICAgICAgICBtYXRlcmlhbGl6ZVNwZWNpYWxzKGdsb2JhbE9iamVjdCk7CiB9CiAKIHZvaWQg
Q2xvbmVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3Vt
ZW50cy5oCmluZGV4IDFmOTY3MmM4NWRhNzY4YjAxMmZiNThlNDA2ZDBhNmE2MTI3NDUxZDQuLmMw
MDQ3Y2UwNWE2NGEyMTZiNGJlZjk4MjI2ZTUxOTdmNmI0MjU2ODggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCkBAIC00NywxMCArNDcsMTAg
QEAgY2xhc3MgQ2xvbmVkQXJndW1lbnRzIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogCiBwdWJsaWM6CiAgICAgc3RhdGljIENsb25lZEFyZ3VtZW50cyogY3JlYXRlRW1wdHkoVk0m
LCBTdHJ1Y3R1cmUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIENsb25lZEFyZ3VtZW50cyogY3JlYXRlRW1wdHkoRXhlY1N0YXRlKiwgSlNGdW5jdGlv
biogY2FsbGVlLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBDbG9uZWRBcmd1bWVudHMq
IGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShFeGVjU3RhdGUqIG15RnJhbWUsIEV4ZWNTdGF0ZSogdGFy
Z2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSosIEFyZ3VtZW50c01vZGUpOwotICAgIHN0YXRpYyBD
bG9uZWRBcmd1bWVudHMqIGNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoRXhlY1N0YXRlKiBteUZyYW1l
LCBFeGVjU3RhdGUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlKTsKLSAgICBzdGF0aWMgQ2xv
bmVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9tKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IFJlZ2lzdGVyKiBhcmd1bWVudHNTdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBKU0Z1bmN0aW9uKiBj
YWxsZWUpOworICAgIHN0YXRpYyBDbG9uZWRBcmd1bWVudHMqIGNyZWF0ZUVtcHR5KEpTR2xvYmFs
T2JqZWN0KiwgSlNGdW5jdGlvbiogY2FsbGVlLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRp
YyBDbG9uZWRBcmd1bWVudHMqIGNyZWF0ZVdpdGhJbmxpbmVGcmFtZShKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSogdGFyZ2V0RnJhbWUsIElubGluZUNhbGxGcmFtZSosIEFyZ3VtZW50c01vZGUp
OworICAgIHN0YXRpYyBDbG9uZWRBcmd1bWVudHMqIGNyZWF0ZVdpdGhNYWNoaW5lRnJhbWUoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIHRhcmdldEZyYW1lLCBBcmd1bWVudHNNb2RlKTsKKyAg
ICBzdGF0aWMgQ2xvbmVkQXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmdGcm9tKEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgsIEpTRnVuY3Rpb24qIGNhbGxlZSk7CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU2xvd1B1dFN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwpAQCAtNjIsMTUgKzYyLDE1IEBAIGNsYXNzIENs
b25lZEFyZ3VtZW50cyBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHByaXZhdGU6
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgSW5kZXhpbmdUeXBlKTsKIAotICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
LSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUp
OworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hv
dWxkVGhyb3cpOwogICAgIAogICAgIGJvb2wgc3BlY2lhbHNNYXRlcmlhbGl6ZWQoKSBjb25zdCB7
IHJldHVybiAhbV9jYWxsZWU7IH0KLSAgICB2b2lkIG1hdGVyaWFsaXplU3BlY2lhbHMoRXhlY1N0
YXRlKik7Ci0gICAgdm9pZCBtYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoRXhlY1N0YXRl
Kik7CisgICAgdm9pZCBtYXRlcmlhbGl6ZVNwZWNpYWxzKEpTR2xvYmFsT2JqZWN0Kik7CisgICAg
dm9pZCBtYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoSlNHbG9iYWxPYmplY3QqKTsKICAg
ICAKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbV9jYWxsZWU7IC8vIFNldCB0byBudWxs
cHRyIHdoZW4gd2UgbWF0ZXJpYWxpemUgYWxsIG9mIG91ciBzcGVjaWFsIHByb3BlcnRpZXMuCiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKaW5kZXggOTI0ZjdlNWIzNTI1MmI0MzgxYTZiMjI4MjE2YjhkNzYwNzhkODExMi4uOTBjM2Rl
N2EzNDMwYmM3MTg5Yjk2ZjAzODkwNzNmNThhZDBjMWU3OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC03NCw0NyArNzQsNDkg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIEJFR0lOX05PX1NFVF9QQygpIFwKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOyAgICAgIFwKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsgXAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsgXAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOyBcCisgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOyBcCisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsgXAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOyBcCiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpCiAKICNpZm5kZWYgTkRFQlVHCiAjZGVmaW5lIFNFVF9QQ19GT1JfU1RV
QlMoKSBkbyB7IFwKLSAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmJ5dGVjb2RlT2Zmc2V0KHBj
KTsgXAotICAgICAgICBleGVjLT5zZXRDdXJyZW50VlBDKHBjKTsgXAorICAgICAgICBjb2RlQmxv
Y2stPmJ5dGVjb2RlT2Zmc2V0KHBjKTsgXAorICAgICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRW
UEMocGMpOyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAjZWxzZQogI2RlZmluZSBTRVRfUENfRk9S
X1NUVUJTKCkgZG8geyBcCi0gICAgICAgIGV4ZWMtPnNldEN1cnJlbnRWUEMocGMpOyBcCisgICAg
ICAgIGNhbGxGcmFtZS0+c2V0Q3VycmVudFZQQyhwYyk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkK
ICNlbmRpZgogCi0jZGVmaW5lIFJFVFVSTl9UT19USFJPVyhleGVjLCBwYykgICBwYyA9IExMSW50
OjpyZXR1cm5Ub1Rocm93KGV4ZWMpCisjZGVmaW5lIFJFVFVSTl9UT19USFJPVyhwYykgICBwYyA9
IExMSW50OjpyZXR1cm5Ub1Rocm93KHZtKQogCiAjZGVmaW5lIEJFR0lOKCkgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgQkVHSU5fTk9fU0VUX1BDKCk7ICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgU0VUX1BDX0ZPUl9TVFVCUygpCiAKLSNkZWZpbmUgR0VUKG9wZXJhbmQpIChleGVj
LT51bmNoZWNrZWRSKG9wZXJhbmQub2Zmc2V0KCkpKQotI2RlZmluZSBHRVRfQyhvcGVyYW5kKSAo
ZXhlYy0+cihvcGVyYW5kLm9mZnNldCgpKSkKKyNkZWZpbmUgR0VUKG9wZXJhbmQpIChjYWxsRnJh
bWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCisjZGVmaW5lIEdFVF9DKG9wZXJhbmQp
IChjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCiAKICNkZWZpbmUgUkVUVVJOX1RXTyhm
aXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChm
aXJzdCwgc2Vjb25kKTsgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAotI2RlZmluZSBF
TkRfSU1QTCgpIFJFVFVSTl9UV08ocGMsIGV4ZWMpCisjZGVmaW5lIEVORF9JTVBMKCkgUkVUVVJO
X1RXTyhwYywgY2FsbEZyYW1lKQogCiAjZGVmaW5lIFRIUk9XKGV4Y2VwdGlvblRvVGhyb3cpIGRv
IHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGV4Y2VwdGlvblRvVGhyb3cpOyBcCi0gICAgICAgIFJFVFVSTl9UT19USFJP
VyhleGVjLCBwYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXhjZXB0aW9uVG9UaHJvdyk7IFwKKyAg
ICAgICAgUkVUVVJOX1RPX1RIUk9XKHBjKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgRU5EX0lNUEwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBDSEVDS19FWENFUFRJT04oKSBkbyB7
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRvRXhjZXB0aW9uRnV6emluZ0lmRW5hYmxl
ZChleGVjLCB0aHJvd1Njb3BlLCAiQ29tbW9uU2xvd1BhdGhzIiwgcGMpOyAgIFwKKyAgICAgICAg
ZG9FeGNlcHRpb25GdXp6aW5nSWZFbmFibGVkKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIkNv
bW1vblNsb3dQYXRocyIsIHBjKTsgICBcCiAgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkgeyAgIFwKLSAgICAgICAgICAgIFJFVFVSTl9UT19USFJPVyhleGVjLCBw
Yyk7ICAgICAgICAgICAgXAorICAgICAgICAgICAgUkVUVVJOX1RPX1RIUk9XKHBjKTsgICAgICAg
ICAgICBcCiAgICAgICAgICAgICBFTkRfSU1QTCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIH0gd2hpbGUgKGZhbHNlKQpAQCAtMTMwLDcgKzEzMiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBpZiAoYkNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgcGMgPSBieXRlY29kZS5tX3RhcmdldExhYmVsIFwKICAgICAg
ICAgICAgICAgICA/IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwYykgKyBieXRlY29kZS5tX3RhcmdldExhYmVsKSBc
Ci0gICAgICAgICAgICAgICAgOiBleGVjLT5jb2RlQmxvY2soKS0+b3V0T2ZMaW5lSnVtcFRhcmdl
dChwYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDog
Y29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wVGFyZ2V0KHBjKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBwYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwYykg
KyBwYy0+c2l6ZSgpKTsgXAogICAgICAgICBFTkRfSU1QTCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTUzLDIzICsxNTUsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHZhbHVlX18sIFBST0ZJTEVfVkFMVUUocmV0
dXJuVmFsdWVfXykpCiAKICNkZWZpbmUgUFJPRklMRV9WQUxVRSh2YWx1ZSkgZG8geyBcCi0gICAg
ICAgIGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpLm1fcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1Zh
bHVlOjplbmNvZGUodmFsdWUpOyBcCisgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
aykubV9wcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7IFwKICAg
ICB9IHdoaWxlIChmYWxzZSkKIAotI2RlZmluZSBDQUxMX0VORF9JTVBMKGV4ZWMsIGNhbGxUYXJn
ZXQsIGNhbGxUYXJnZXRUYWcpIFwKLSAgICBSRVRVUk5fVFdPKHJldGFnQ29kZVB0cigoY2FsbFRh
cmdldCksIGNhbGxUYXJnZXRUYWcsIFNsb3dQYXRoUHRyVGFnKSwgKGV4ZWMpKQotCi0jZGVmaW5l
IENBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIHBjKSBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIEV4ZWNTdGF0ZSogY2NlRXhlYyA9IChleGVjKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEluc3RydWN0aW9uKiBjY2VQQyA9IChwYyk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBDQUxMX0VORF9JTVBMKGNjZUV4ZWMsIExMSW50OjpjYWxsVG9UaHJvdyhjY2VFeGVj
KSwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7IFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQotc3Rh
dGljIHZvaWQgdGhyb3dBcml0eUNoZWNrU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhl
YywgVGhyb3dTY29wZSYgc2NvcGUpCitzdGF0aWMgdm9pZCB0aHJvd0FyaXR5Q2hlY2tTdGFja092
ZXJmbG93RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2Nv
cGUpCiB7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4
ZWMpOwotICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcik7CisgICAgSlNPYmpl
Y3QqIGVycm9yID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCk7CisgICAg
dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3IpOwogI2lmIExMSU5UX1RS
QUNJTkcKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VMTEludFNsb3dQYXRoKCkpKQog
ICAgICAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgSlNWYWx1ZShzY29wZS5leGNl
cHRpb24oKSksICIuXG4iKTsKQEAgLTE3OSwxNSArMTcxLDE1IEBAIHN0YXRpYyB2b2lkIHRocm93
QXJpdHlDaGVja1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUm
IHNjb3BlCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9hcml0eUNoZWNrKQogewogICAg
IEJFR0lOKCk7Ci0gICAgaW50IHNsb3RzVG9BZGQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hl
Y2tGb3IoZXhlYywgdm0sIENvZGVGb3JDYWxsKTsKKyAgICBpbnQgc2xvdHNUb0FkZCA9IENvbW1v
blNsb3dQYXRoczo6YXJpdHlDaGVja0Zvcih2bSwgY2FsbEZyYW1lLCBDb2RlRm9yQ2FsbCk7CiAg
ICAgaWYgKFVOTElLRUxZKHNsb3RzVG9BZGQgPCAwKSkgewotICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IENvbW1vblNsb3dQYXRoczo6Y29kZUJsb2NrRnJvbUNhbGxGcmFtZUNhbGxlZShl
eGVjLCBDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIGV4ZWMtPmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dG
cmFtZSh2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgZXhlYyk7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gQ29tbW9uU2xvd1Bh
dGhzOjpjb2RlQmxvY2tGcm9tQ2FsbEZyYW1lQ2FsbGVlKGNhbGxGcmFtZSwgQ29kZUZvckNhbGwp
OworICAgICAgICBjYWxsRnJhbWUtPmNvbnZlcnRUb1N0YWNrT3ZlcmZsb3dGcmFtZSh2bSwgY29k
ZUJsb2NrKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKICAgICAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUodm0pOwogICAgICAg
ICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgdGhyb3dBcml0eUNoZWNrU3RhY2tPdmVy
Zmxvd0Vycm9yKGV4ZWMsIHRocm93U2NvcGUpOwotICAgICAgICBSRVRVUk5fVFdPKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSksIGV4ZWMpOworICAgICAgICB0
aHJvd0FyaXR5Q2hlY2tTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgUkVUVVJOX1RXTyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oMSkpLCBjYWxsRnJhbWUpOwogICAgIH0KICAgICBSRVRVUk5fVFdPKDAsIGJpdHdp
c2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihzbG90c1RvQWRkKSkpOwogfQpA
QCAtMTk1LDE0ICsxODcsMTQgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfYXJpdHlD
aGVjaykKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsK
ICAgICBCRUdJTigpOwotICAgIGludCBzbG90c1RvQWRkID0gQ29tbW9uU2xvd1BhdGhzOjphcml0
eUNoZWNrRm9yKGV4ZWMsIHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICBpbnQgc2xvdHNUb0Fk
ZCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0Zvcih2bSwgY2FsbEZyYW1lLCBDb2RlRm9y
Q29uc3RydWN0KTsKICAgICBpZiAoVU5MSUtFTFkoc2xvdHNUb0FkZCA8IDApKSB7Ci0gICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gQ29tbW9uU2xvd1BhdGhzOjpjb2RlQmxvY2tGcm9tQ2Fs
bEZyYW1lQ2FsbGVlKGV4ZWMsIENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICBleGVjLT5jb252
ZXJ0VG9TdGFja092ZXJmbG93RnJhbWUodm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IENvbW1vblNsb3dQYXRoczo6Y29kZUJsb2NrRnJvbUNhbGxGcmFtZUNhbGxlZShjYWxs
RnJhbWUsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICBjYWxsRnJhbWUtPmNvbnZlcnRUb1N0
YWNrT3ZlcmZsb3dGcmFtZSh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAgICAgRXJyb3JIYW5kbGluZ1Njb3Bl
IGVycm9yU2NvcGUodm0pOwotICAgICAgICB0aHJvd0FyaXR5Q2hlY2tTdGFja092ZXJmbG93RXJy
b3IoZXhlYywgdGhyb3dTY29wZSk7Ci0gICAgICAgIFJFVFVSTl9UV08oYml0d2lzZV9jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKSwgZXhlYyk7CisgICAgICAgIHRocm93QXJp
dHlDaGVja1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAg
ICAgICBSRVRVUk5fVFdPKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90
PigxKSksIGNhbGxGcmFtZSk7CiAgICAgfQogICAgIFJFVFVSTl9UV08oMCwgYml0d2lzZV9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHNsb3RzVG9BZGQpKSk7CiB9CkBAIC0yMTEs
NyArMjAzLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9kaXJlY3RfYXJndW1l
bnRzKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENyZWF0
ZURpcmVjdEFyZ3VtZW50cz4oKTsKLSAgICBSRVRVUk4oRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVC
eUNvcHlpbmcoZXhlYykpOworICAgIFJFVFVSTihEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZUJ5Q29w
eWluZyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCkBAIC0yMjAsMTQgKzIxMiwxNCBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKTsKICAgICBKU0xleGlj
YWxFbnZpcm9ubWVudCogc2NvcGUgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihHRVQo
Ynl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSog
dGFibGUgPSBzY29wZS0+c3ltYm9sVGFibGUoKS0+YXJndW1lbnRzKCk7Ci0gICAgUkVUVVJOKFNj
b3BlZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKGV4ZWMsIHRhYmxlLCBzY29wZSkpOworICAg
IFJFVFVSTihTY29wZWRBcmd1bWVudHM6OmNyZWF0ZUJ5Q29weWluZyhnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgdGFibGUsIHNjb3BlKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
cmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BDcmVhdGVDbG9uZWRBcmd1bWVudHM+KCk7Ci0gICAgUkVUVVJOKENsb25l
ZEFyZ3VtZW50czo6Y3JlYXRlV2l0aE1hY2hpbmVGcmFtZShleGVjLCBleGVjLCBBcmd1bWVudHNN
b2RlOjpDbG9uZWQpKTsKKyAgICBSRVRVUk4oQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVXaXRoTWFj
aGluZUZyYW1lKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBBcmd1bWVudHNNb2RlOjpDbG9uZWQp
KTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQpAQCAtMjM4LDMy
ICsyMzAsMzIgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogICAgIEpT
T2JqZWN0KiBjb25zdHJ1Y3RvckFzT2JqZWN0ID0gYXNPYmplY3QoR0VUKGJ5dGVjb2RlLm1fY2Fs
bGVlKS5qc1ZhbHVlKCkpOwogICAgIEpTRnVuY3Rpb24qIGNvbnN0cnVjdG9yID0ganNEeW5hbWlj
Q2FzdDxKU0Z1bmN0aW9uKj4odm0sIGNvbnN0cnVjdG9yQXNPYmplY3QpOwogICAgIGlmIChjb25z
dHJ1Y3RvciAmJiBjb25zdHJ1Y3Rvci0+Y2FuVXNlQWxsb2NhdGlvblByb2ZpbGUoKSkgewotICAg
ICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiYgY2FjaGVkQ2FsbGVlID0gYnl0ZWNvZGUubWV0YWRh
dGEoZXhlYykubV9jYWNoZWRDYWxsZWU7CisgICAgICAgIFdyaXRlQmFycmllcjxKU0NlbGw+JiBj
YWNoZWRDYWxsZWUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fY2FjaGVkQ2FsbGVl
OwogICAgICAgICBpZiAoIWNhY2hlZENhbGxlZSkKLSAgICAgICAgICAgIGNhY2hlZENhbGxlZS5z
ZXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBjYWNo
ZWRDYWxsZWUuc2V0KHZtLCBjb2RlQmxvY2ssIGNvbnN0cnVjdG9yKTsKICAgICAgICAgZWxzZSBp
ZiAoY2FjaGVkQ2FsbGVlLnVudmFsaWRhdGVkR2V0KCkgIT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVD
YWxsZWVPYmplY3RzKCkgJiYgY2FjaGVkQ2FsbGVlLmdldCgpICE9IGNvbnN0cnVjdG9yKQogICAg
ICAgICAgICAgY2FjaGVkQ2FsbGVlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNDZWxsOjpzZWVu
TXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpOwogCiAgICAgICAgIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSA9IGJ5dGVjb2RlLm1faW5saW5lQ2FwYWNpdHk7Ci0gICAgICAgIE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlV2l0aFByb3RvdHlwZSogYWxsb2NhdGlvblByb2ZpbGUgPSBjb25zdHJ1Y3Rvci0+ZW5z
dXJlUmFyZURhdGFBbmRBbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVDYXBhY2l0eSktPm9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKCk7CisgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
V2l0aFByb3RvdHlwZSogYWxsb2NhdGlvblByb2ZpbGUgPSBjb25zdHJ1Y3Rvci0+ZW5zdXJlUmFy
ZURhdGFBbmRBbGxvY2F0aW9uUHJvZmlsZShnbG9iYWxPYmplY3QsIGlubGluZUNhcGFjaXR5KS0+
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKTsKICAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlQXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhbGxvY2F0
aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNQb2x5UHJv
dG8oKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFsbG9jYXRpb25Qcm9m
aWxlLT5wcm90b3R5cGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChwcm90b3R5cGUgPT0gY29uc3Ry
dWN0b3ItPnByb3RvdHlwZUZvckNvbnN0cnVjdGlvbih2bSwgZXhlYykpOworICAgICAgICAgICAg
QVNTRVJUKHByb3RvdHlwZSA9PSBjb25zdHJ1Y3Rvci0+cHJvdG90eXBlRm9yQ29uc3RydWN0aW9u
KHZtLCBnbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBr
bm93blBvbHlQcm90b09mZnNldCwgcHJvdG90eXBlKTsKICAgICAgICAgICAgIHByb3RvdHlwZS0+
ZGlkQmVjb21lUHJvdG90eXBlKCk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFo
YXNJbmRleGVkUHJvcGVydGllcyhyZXN1bHQtPmluZGV4aW5nVHlwZSgpKSwgIldlIHJlbHkgb24g
SlNGaW5hbE9iamVjdCBub3Qgc3RhcnRpbmcgb3V0IHdpdGggYW4gaW5kZXhpbmcgdHlwZSBvdGhl
cndpc2Ugd2Ugd291bGQgcG90ZW50aWFsbHkgbmVlZCB0byBjb252ZXJ0IHRvIHNsb3cgcHV0IHN0
b3JhZ2UiKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIGh0dHA6Ly9lY21h
LWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9yZGluYXJ5Y3JlYXRlZnJvbWNv
bnN0cnVjdG9yCi0gICAgICAgIEpTVmFsdWUgcHJvdG8gPSBjb25zdHJ1Y3RvckFzT2JqZWN0LT5n
ZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKKyAgICAgICAgSlNWYWx1ZSBw
cm90byA9IGNvbnN0cnVjdG9yQXNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSk7CiAgICAgICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICBp
ZiAocHJvdG8uaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMsIGFzT2JqZWN0KHByb3RvKSk7CisgICAgICAgICAgICByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KHByb3RvKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsK
ICAgICB9CiAgICAgUkVUVVJOKHJlc3VsdCk7CiB9CkBAIC0yNzIsMjUgKzI2NCwyNCBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3Byb21pc2UpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlUHJvbWlzZT4oKTsKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAg
IEpTT2JqZWN0KiBjb25zdHJ1Y3RvckFzT2JqZWN0ID0gYXNPYmplY3QoR0VUKGJ5dGVjb2RlLm1f
Y2FsbGVlKS5qc1ZhbHVlKCkpOwogCiAgICAgSlNQcm9taXNlKiByZXN1bHQgPSBudWxscHRyOwog
ICAgIGlmIChieXRlY29kZS5tX2lzSW50ZXJuYWxQcm9taXNlKSB7Ci0gICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUo
ZXhlYywgZ2xvYmFsT2JqZWN0LT5pbnRlcm5hbFByb21pc2VDb25zdHJ1Y3RvcigpLCBjb25zdHJ1
Y3RvckFzT2JqZWN0LCBnbG9iYWxPYmplY3QtPmludGVybmFsUHJvbWlzZVN0cnVjdHVyZSgpKTsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+aW50ZXJuYWxQcm9t
aXNlQ29uc3RydWN0b3IoKSwgY29uc3RydWN0b3JBc09iamVjdCwgZ2xvYmFsT2JqZWN0LT5pbnRl
cm5hbFByb21pc2VTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAg
ICAgICByZXN1bHQgPSBKU0ludGVybmFsUHJvbWlzZTo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5j
dGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LT5wcm9taXNl
Q29uc3RydWN0b3IoKSwgY29uc3RydWN0b3JBc09iamVjdCwgZ2xvYmFsT2JqZWN0LT5wcm9taXNl
U3RydWN0dXJlKCkpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVu
Y3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT5wcm9taXNlQ29uc3RydWN0b3IoKSwgY29uc3RydWN0b3JBc09iamVjdCwgZ2xvYmFsT2JqZWN0
LT5wcm9taXNlU3RydWN0dXJlKCkpOwogICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAg
ICAgcmVzdWx0ID0gSlNQcm9taXNlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgfQogCiAg
ICAgSlNGdW5jdGlvbiogY29uc3RydWN0b3IgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2
bSwgY29uc3RydWN0b3JBc09iamVjdCk7CiAgICAgaWYgKGNvbnN0cnVjdG9yICYmIGNvbnN0cnVj
dG9yLT5jYW5Vc2VBbGxvY2F0aW9uUHJvZmlsZSgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxK
U0NlbGw+JiBjYWNoZWRDYWxsZWUgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKS5tX2NhY2hlZENh
bGxlZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4mIGNhY2hlZENhbGxlZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9jYWNoZWRDYWxsZWU7CiAgICAgICAgIGlmICghY2Fj
aGVkQ2FsbGVlKQotICAgICAgICAgICAgY2FjaGVkQ2FsbGVlLnNldCh2bSwgZXhlYy0+Y29kZUJs
b2NrKCksIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGxlZS5zZXQodm0sIGNv
ZGVCbG9jaywgY29uc3RydWN0b3IpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRDYWxsZWUudW52
YWxpZGF0ZWRHZXQoKSAhPSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSAmJiBj
YWNoZWRDYWxsZWUuZ2V0KCkgIT0gY29uc3RydWN0b3IpCiAgICAgICAgICAgICBjYWNoZWRDYWxs
ZWUuc2V0V2l0aG91dFdyaXRlQmFycmllcihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVj
dHMoKSk7CiAgICAgfQpAQCAtMzAzLDI4ICsyOTQsMjYgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25ld19wcm9taXNlKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdQcm9taXNl
PigpOwogICAgIEpTUHJvbWlzZSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICBpZiAoYnl0ZWNvZGUu
bV9pc0ludGVybmFsUHJvbWlzZSkKLSAgICAgICAgcmVzdWx0ID0gSlNJbnRlcm5hbFByb21pc2U6
OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5pbnRlcm5hbFByb21pc2VT
dHJ1Y3R1cmUoKSk7CisgICAgICAgIHJlc3VsdCA9IEpTSW50ZXJuYWxQcm9taXNlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdC0+aW50ZXJuYWxQcm9taXNlU3RydWN0dXJlKCkpOwogICAgIGVsc2UK
LSAgICAgICAgcmVzdWx0ID0gSlNQcm9taXNlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+cHJvbWlzZVN0cnVjdHVyZSgpKTsKKyAgICAgICAgcmVzdWx0ID0gSlNQcm9t
aXNlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+cHJvbWlzZVN0cnVjdHVyZSgpKTsKICAgICBS
RVRVUk4ocmVzdWx0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcywgdHlwZW5hbWUg
Qnl0ZWNvZGU+Ci1zdGF0aWMgSlNDbGFzcyogY3JlYXRlSW50ZXJuYWxGaWVsZE9iamVjdChFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTdHJ1Y3R1cmUq
IGJhc2VTdHJ1Y3R1cmUpCitzdGF0aWMgSlNDbGFzcyogY3JlYXRlSW50ZXJuYWxGaWVsZE9iamVj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvckFzT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yQXNPYmplY3Qg
PSBhc09iamVjdChHRVQoYnl0ZWNvZGUubV9jYWxsZWUpLmpzVmFsdWUoKSk7Ci0KLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIG51bGxwdHIsIGNvbnN0cnVjdG9yQXNPYmplY3QsIGJhc2VTdHJ1Y3R1cmUpOwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBudWxscHRyLCBjb25zdHJ1Y3RvckFzT2JqZWN0LCBi
YXNlU3RydWN0dXJlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
ICAgICBKU0NsYXNzKiByZXN1bHQgPSBKU0NsYXNzOjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAK
ICAgICBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvciA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+
KHZtLCBjb25zdHJ1Y3RvckFzT2JqZWN0KTsKICAgICBpZiAoY29uc3RydWN0b3IgJiYgY29uc3Ry
dWN0b3ItPmNhblVzZUFsbG9jYXRpb25Qcm9maWxlKCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PEpTQ2VsbD4mIGNhY2hlZENhbGxlZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpLm1fY2FjaGVk
Q2FsbGVlOworICAgICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiYgY2FjaGVkQ2FsbGVlID0gYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2NhY2hlZENhbGxlZTsKICAgICAgICAgaWYgKCFj
YWNoZWRDYWxsZWUpCi0gICAgICAgICAgICBjYWNoZWRDYWxsZWUuc2V0KHZtLCBleGVjLT5jb2Rl
QmxvY2soKSwgY29uc3RydWN0b3IpOworICAgICAgICAgICAgY2FjaGVkQ2FsbGVlLnNldCh2bSwg
Y29kZUJsb2NrLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIGVsc2UgaWYgKGNhY2hlZENhbGxlZS51
bnZhbGlkYXRlZEdldCgpICE9IEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpICYm
IGNhY2hlZENhbGxlZS5nZXQoKSAhPSBjb25zdHJ1Y3RvcikKICAgICAgICAgICAgIGNhY2hlZENh
bGxlZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2Jq
ZWN0cygpKTsKICAgICB9CkBAIC0zMzUsMjEgKzMyNCwyMSBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfY3JlYXRlX2dlbmVyYXRvcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BDcmVhdGVHZW5lcmF0b3I+KCk7Ci0gICAgUkVUVVJOKGNyZWF0ZUludGVy
bmFsRmllbGRPYmplY3Q8SlNHZW5lcmF0b3I+KGV4ZWMsIHZtLCBieXRlY29kZSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5nZW5lcmF0b3JTdHJ1Y3R1cmUoKSkpOworICAgIFJFVFVSTihj
cmVhdGVJbnRlcm5hbEZpZWxkT2JqZWN0PEpTR2VuZXJhdG9yPihnbG9iYWxPYmplY3QsIHZtLCBj
b2RlQmxvY2ssIGJ5dGVjb2RlLCBhc09iamVjdChHRVQoYnl0ZWNvZGUubV9jYWxsZWUpLmpzVmFs
dWUoKSksIGdsb2JhbE9iamVjdC0+Z2VuZXJhdG9yU3RydWN0dXJlKCkpKTsKIH0KIAogU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9hc3luY19nZW5lcmF0b3IpCiB7CiAgICAgQkVHSU4o
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlQXN5bmNHZW5lcmF0b3I+KCk7
Ci0gICAgUkVUVVJOKGNyZWF0ZUludGVybmFsRmllbGRPYmplY3Q8SlNBc3luY0dlbmVyYXRvcj4o
ZXhlYywgdm0sIGJ5dGVjb2RlLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFzeW5jR2Vu
ZXJhdG9yU3RydWN0dXJlKCkpKTsKKyAgICBSRVRVUk4oY3JlYXRlSW50ZXJuYWxGaWVsZE9iamVj
dDxKU0FzeW5jR2VuZXJhdG9yPihnbG9iYWxPYmplY3QsIHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2Rl
LCBhc09iamVjdChHRVQoYnl0ZWNvZGUubV9jYWxsZWUpLmpzVmFsdWUoKSksIGdsb2JhbE9iamVj
dC0+YXN5bmNHZW5lcmF0b3JTdHJ1Y3R1cmUoKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfbmV3X2dlbmVyYXRvcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BOZXdHZW5lcmF0b3I+KCk7Ci0gICAgSlNHZW5lcmF0b3IqIHJlc3VsdCA9IEpT
R2VuZXJhdG9yOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2VuZXJh
dG9yU3RydWN0dXJlKCkpOworICAgIEpTR2VuZXJhdG9yKiByZXN1bHQgPSBKU0dlbmVyYXRvcjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmdlbmVyYXRvclN0cnVjdHVyZSgpKTsKICAgICBSRVRV
Uk4ocmVzdWx0KTsKIH0KIApAQCAtMzU3LDcgKzM0Niw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF90b190aGlzKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4
ZWMpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsK
ICAgICBKU1ZhbHVlIHYxID0gR0VUKGJ5dGVjb2RlLm1fc3JjRHN0KS5qc1ZhbHVlKCk7CiAgICAg
aWYgKHYxLmlzQ2VsbCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZUlEIG15U3RydWN0dXJlSUQgPSB2
MS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKTsKQEAgLTM2Niw3ICszNTUsNyBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfdG9fdGhpcykKICAgICAgICAgICAgIGlmIChvdGhlclN0cnVjdHVyZUlE
KQogICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fdG9UaGlzU3RhdHVzID0gVG9UaGlzQ29uZmxp
Y3RlZDsKICAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQgPSBteVN0cnVj
dHVyZUlEOwotICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoZXhlYy0+Y29kZUJsb2Nr
KCksIHZtLmdldFN0cnVjdHVyZShteVN0cnVjdHVyZUlEKSk7CisgICAgICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihjb2RlQmxvY2ssIHZtLmdldFN0cnVjdHVyZShteVN0cnVjdHVyZUlEKSk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBtZXRhZGF0YS5tX3RvVGhpc1N0YXR1
cyA9IFRvVGhpc0NvbmZsaWN0ZWQ7CkBAIC0zNzgsMTEwICszNjcsMTEwIEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF90b190aGlzKQogICAgIC8vIGRpZmZlcmVudCBvYmplY3QgdGhhdCBzdGls
bCBoYXMgdGhlIHNhbWUgc3RydWN0dXJlIG9uIHRoZSBmYXN0IHBhdGggc2luY2UgaXQnbGwgcHJv
ZHVjZQogICAgIC8vIHRoZSBzYW1lIFNwZWN1bGF0ZWRUeXBlLiBUaGVyZWZvcmUsIHdlIGRvbid0
IG5lZWQgdG8gd29ycnkgYWJvdXQgdmFsdWUgcHJvZmlsaW5nIG9uIHRoZQogICAgIC8vIGZhc3Qg
cGF0aC4KLSAgICBhdXRvIHZhbHVlID0gdjEudG9UaGlzKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlKTsKKyAgICBhdXRv
IHZhbHVlID0gdjEudG9UaGlzKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlKTsKICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJ
TkdfQ1VTVE9NKGJ5dGVjb2RlLm1fc3JjRHN0LCB2YWx1ZSwgUFJPRklMRV9WQUxVRSh2YWx1ZSkp
OwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhyb3dfdGR6X2Vycm9yKQogewogICAg
IEJFR0lOKCk7Ci0gICAgVEhST1coY3JlYXRlVERaRXJyb3IoZXhlYykpOworICAgIFRIUk9XKGNy
ZWF0ZVREWkVycm9yKGdsb2JhbE9iamVjdCkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfY2hlY2tfdGR6KQogewogICAgIEJFR0lOKCk7Ci0gICAgVEhST1coY3JlYXRlVERaRXJyb3Io
ZXhlYykpOworICAgIFRIUk9XKGNyZWF0ZVREWkVycm9yKGdsb2JhbE9iamVjdCkpOwogfQogCiBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVy
dHlfd3JpdGVfZXJyb3IpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBUSFJPVyhjcmVhdGVUeXBlRXJy
b3IoZXhlYywgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKKyAgICBUSFJPVyhjcmVhdGVU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogfQog
CiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbm90KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcE5vdD4oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKCFHRVRf
QyhieXRlY29kZS5tX29wZXJhbmQpLmpzVmFsdWUoKS50b0Jvb2xlYW4oZXhlYykpKTsKKyAgICBS
RVRVUk4oanNCb29sZWFuKCFHRVRfQyhieXRlY29kZS5tX29wZXJhbmQpLmpzVmFsdWUoKS50b0Jv
b2xlYW4oZ2xvYmFsT2JqZWN0KSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZXEp
CiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRXE+KCk7Ci0g
ICAgUkVUVVJOKGpzQm9vbGVhbihKU1ZhbHVlOjplcXVhbChleGVjLCBHRVRfQyhieXRlY29kZS5t
X2xocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSkpOworICAg
IFJFVFVSTihqc0Jvb2xlYW4oSlNWYWx1ZTo6ZXF1YWwoZ2xvYmFsT2JqZWN0LCBHRVRfQyhieXRl
Y29kZS5tX2xocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSkp
OwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVxKQogewogICAgIEJFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5lcT4oKTsKLSAgICBSRVRVUk4oanNCb29sZWFu
KCFKU1ZhbHVlOjplcXVhbChleGVjLCBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBH
RVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4o
IUpTVmFsdWU6OmVxdWFsKGdsb2JhbE9iamVjdCwgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFs
dWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3N0cmljdGVxKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcFN0cmljdGVxPigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oSlNWYWx1
ZTo6c3RyaWN0RXF1YWwoZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgR0VU
X0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKEpT
VmFsdWU6OnN0cmljdEVxdWFsKGdsb2JhbE9iamVjdCwgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpz
VmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX25zdHJpY3RlcSkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BOc3RyaWN0ZXE+KCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbigh
SlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUo
KSwgR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKKyAgICBSRVRVUk4oanNCb29s
ZWFuKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChnbG9iYWxPYmplY3QsIEdFVF9DKGJ5dGVjb2RlLm1f
bGhzKS5qc1ZhbHVlKCksIEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKSk7CiB9CiAK
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sZXNzKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcExlc3M+KCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihqc0xl
c3M8dHJ1ZT4oZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0
ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGpzTGVzczx0
cnVlPihnbG9iYWxPYmplY3QsIEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCksIEdFVF9D
KGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9sZXNzZXEpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wTGVzc2VxPigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oanNMZXNzRXE8dHJ1ZT4oZXhlYywg
R0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpz
VmFsdWUoKSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGpzTGVzc0VxPHRydWU+KGdsb2JhbE9i
amVjdCwgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9y
aHMpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dyZWF0ZXIp
CiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR3JlYXRlcj4o
KTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGpzTGVzczxmYWxzZT4oZXhlYywgR0VUX0MoYnl0ZWNv
ZGUubV9yaHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSkpKTsK
KyAgICBSRVRVUk4oanNCb29sZWFuKGpzTGVzczxmYWxzZT4oZ2xvYmFsT2JqZWN0LCBHRVRfQyhi
eXRlY29kZS5tX3JocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgp
KSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ3JlYXRlcmVxKQogewogICAgIEJF
R0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdyZWF0ZXJlcT4oKTsKLSAgICBS
RVRVUk4oanNCb29sZWFuKGpzTGVzc0VxPGZhbHNlPihleGVjLCBHRVRfQyhieXRlY29kZS5tX3Jo
cykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpKSkpOworICAgIFJF
VFVSTihqc0Jvb2xlYW4oanNMZXNzRXE8ZmFsc2U+KGdsb2JhbE9iamVjdCwgR0VUX0MoYnl0ZWNv
ZGUubV9yaHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSkpKTsK
IH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2luYykKIHsKICAgICBCRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJbmM+KCk7Ci0gICAgUkVUVVJOX1dJVEhfUFJPRklM
SU5HX0NVU1RPTShieXRlY29kZS5tX3NyY0RzdCwganNOdW1iZXIoR0VUKGJ5dGVjb2RlLm1fc3Jj
RHN0KS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYykgKyAxKSwgeyB9KTsKKyAgICBSRVRVUk5fV0lU
SF9QUk9GSUxJTkdfQ1VTVE9NKGJ5dGVjb2RlLm1fc3JjRHN0LCBqc051bWJlcihHRVQoYnl0ZWNv
ZGUubV9zcmNEc3QpLmpzVmFsdWUoKS50b051bWJlcihnbG9iYWxPYmplY3QpICsgMSksIHsgfSk7
CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWMpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRGVjPigpOwotICAgIFJFVFVSTl9XSVRIX1BST0ZJ
TElOR19DVVNUT00oYnl0ZWNvZGUubV9zcmNEc3QsIGpzTnVtYmVyKEdFVChieXRlY29kZS5tX3Ny
Y0RzdCkuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpIC0gMSksIHsgfSk7CisgICAgUkVUVVJOX1dJ
VEhfUFJPRklMSU5HX0NVU1RPTShieXRlY29kZS5tX3NyY0RzdCwganNOdW1iZXIoR0VUKGJ5dGVj
b2RlLm1fc3JjRHN0KS5qc1ZhbHVlKCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSAtIDEpLCB7IH0p
OwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fc3RyaW5nKQogewogICAgIEJFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFJFVFVS
TihHRVRfQyhieXRlY29kZS5tX29wZXJhbmQpLmpzVmFsdWUoKS50b1N0cmluZyhleGVjKSk7Cisg
ICAgUkVUVVJOKEdFVF9DKGJ5dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpLnRvU3RyaW5nKGds
b2JhbE9iamVjdCkpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTUyMyw5ICs1MTIsOSBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVnYXRlKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcE5lZ2F0ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKTsKICAgICBKU1ZhbHVlIG9wZXJhbmQgPSBHRVRfQyhieXRlY29kZS5t
X29wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHByaW1WYWx1ZSA9IG9wZXJhbmQudG9Q
cmltaXRpdmUoZXhlYywgUHJlZmVyTnVtYmVyKTsKKyAgICBKU1ZhbHVlIHByaW1WYWx1ZSA9IG9w
ZXJhbmQudG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0LCBQcmVmZXJOdW1iZXIpOwogICAgIENIRUNL
X0VYQ0VQVElPTigpOwogCiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludCgpKSB7CkBAIC01MzUs
NyArNTI0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25lZ2F0ZSkKICAgICAgICAgfSk7
CiAgICAgfQogICAgIAotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoLXByaW1WYWx1ZS50
b051bWJlcihleGVjKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcigtcHJpbVZhbHVl
LnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIFJF
VFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxl
Rm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwpAQCAtNTQzLDkgKzUz
Miw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZWdhdGUpCiB9CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKLXN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvckJpbmFyeUFyaXRoT3Ao
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvbiogcGMsIEpTVmFsdWUgcmVzdWx0LCBK
U1ZhbHVlIGxlZnQsIEpTVmFsdWUgcmlnaHQpCitzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2Zp
bGVGb3JCaW5hcnlBcml0aE9wKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGNvbnN0IEluc3RydWN0aW9uKiBwYywgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUgbGVmdCwgSlNW
YWx1ZSByaWdodCkKIHsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwogICAgIEFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICpjb2RlQmxvY2stPmFyaXRoUHJvZmls
ZUZvclBDKHBjKTsKIAogICAgIGlmIChyZXN1bHQuaXNOdW1iZXIoKSkgewpAQCAtNTc0LDcgKzU2
Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvckJpbmFyeUFyaXRoT3AoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIHByb2ZpbGUuc2V0T2JzZXJ2
ZWROb25OdW1lcmljKCk7CiB9CiAjZWxzZQotc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxl
Rm9yQmluYXJ5QXJpdGhPcChFeGVjU3RhdGUqLCBjb25zdCBJbnN0cnVjdGlvbiosIEpTVmFsdWUs
IEpTVmFsdWUsIEpTVmFsdWUpIHsgfQorc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9y
QmluYXJ5QXJpdGhPcChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIGNvbnN0IEluc3RydWN0
aW9uKiwgSlNWYWx1ZSwgSlNWYWx1ZSwgSlNWYWx1ZSkgeyB9CiAjZW5kaWYKIAogU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3RvX251bWJlcikKQEAgLTU4Miw3ICs1NzAsNyBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfdG9fbnVtYmVyKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcFRvTnVtYmVyPigpOwogICAgIEpTVmFsdWUgYXJndW1lbnQgPSBHRVRfQyhi
eXRlY29kZS5tX29wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGFyZ3VtZW50LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGFyZ3VtZW50LnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpOwogICAgIFJFVFVSTl9QUk9GSUxF
RChyZXN1bHQpOwogfQogCkBAIC01OTIsMTEgKzU4MCwxMSBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfdG9fb2JqZWN0KQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUb09iamVjdD4o
KTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5qc1Zh
bHVlKCk7CiAgICAgaWYgKFVOTElLRUxZKGFyZ3VtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpKSB7
Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9tZXNzYWdlKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9tZXNzYWdlKTsKICAgICAg
ICAgaWYgKCFpZGVudC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBUSFJPVyhjcmVhdGVUeXBlRXJy
b3IoZXhlYywgaWRlbnQuaW1wbCgpKSk7CisgICAgICAgICAgICBUSFJPVyhjcmVhdGVUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBpZGVudC5pbXBsKCkpKTsKICAgICB9Ci0gICAgSlNPYmplY3QqIHJl
c3VsdCA9IGFyZ3VtZW50LnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBh
cmd1bWVudC50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9QUk9GSUxFRChyZXN1
bHQpOwogfQogCkBAIC02MDcsMTkgKzU5NSwxOSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
YWRkKQogICAgIEpTVmFsdWUgdjEgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpOwog
ICAgIEpTVmFsdWUgdjIgPSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpOwogCi0gICAg
QXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSAqZXhlYy0+Y29kZUJsb2NrKCktPmFyaXRoUHJv
ZmlsZUZvclBDKHBjKTsKKyAgICBBcml0aFByb2ZpbGUmIGFyaXRoUHJvZmlsZSA9ICpjb2RlQmxv
Y2stPmFyaXRoUHJvZmlsZUZvclBDKHBjKTsKICAgICBhcml0aFByb2ZpbGUub2JzZXJ2ZUxIU0Fu
ZFJIUyh2MSwgdjIpOwogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FkZChleGVjLCB2MSwgdjIp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBZGQoZ2xvYmFsT2JqZWN0LCB2MSwgdjIpOwogCiAg
ICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewotICAgICAgICB1cGRhdGVBcml0aFBy
b2ZpbGVGb3JCaW5hcnlBcml0aE9wKGV4ZWMsIHBjLCByZXN1bHQsIHYxLCB2Mik7CisgICAgICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZUZvckJpbmFyeUFyaXRoT3AoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIHBjLCByZXN1bHQsIHYxLCB2Mik7CiAgICAgfSk7CiB9CiAKIC8vIFRoZSBmb2xsb3dpbmcg
YXJpdGhtZXRpYyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIG5lZWQgdG8gYmUgc3VyZSB0byBydW4K
IC8vIHRvTnVtYmVyKCkgb24gdGhlaXIgb3BlcmFuZHMgaW4gb3JkZXIuICAoQSBjYWxsIHRvIHRv
TnVtYmVyKCkgaXMgaWRlbXBvdGVudAotLy8gaWYgYW4gZXhjZXB0aW9uIGlzIGFscmVhZHkgc2V0
IG9uIHRoZSBFeGVjU3RhdGUuKQorLy8gaWYgYW4gZXhjZXB0aW9uIGlzIGFscmVhZHkgc2V0IG9u
IHRoZSBDYWxsRnJhbWUuKQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbXVsKQogewpAQCAt
NjI3LDEwICs2MTUsMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX211bCkKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wTXVsPigpOwogICAgIEpTVmFsdWUgbGVmdCA9IEdFVF9DKGJ5
dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IEdFVF9DKGJ5dGVj
b2RlLm1fcmhzKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc011bChleGVjLCBs
ZWZ0LCByaWdodCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc011bChnbG9iYWxPYmplY3QsIGxl
ZnQsIHJpZ2h0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBSRVRVUk5fV0lUSF9QUk9G
SUxJTkcocmVzdWx0LCB7Ci0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZvckJpbmFyeUFyaXRo
T3AoZXhlYywgcGMsIHJlc3VsdCwgbGVmdCwgcmlnaHQpOworICAgICAgICB1cGRhdGVBcml0aFBy
b2ZpbGVGb3JCaW5hcnlBcml0aE9wKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBwYywgcmVzdWx0
LCBsZWZ0LCByaWdodCk7CiAgICAgfSk7CiB9CiAKQEAgLTY0MCwyNiArNjI4LDI2IEBAIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9zdWIpCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFN1
Yj4oKTsKICAgICBKU1ZhbHVlIGxlZnQgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgp
OwogICAgIEpTVmFsdWUgcmlnaHQgPSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpOwot
ICAgIGF1dG8gbGVmdE51bWVyaWMgPSBsZWZ0LnRvTnVtZXJpYyhleGVjKTsKKyAgICBhdXRvIGxl
ZnROdW1lcmljID0gbGVmdC50b051bWVyaWMoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENF
UFRJT04oKTsKLSAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IHJpZ2h0LnRvTnVtZXJpYyhleGVjKTsK
KyAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IHJpZ2h0LnRvTnVtZXJpYyhnbG9iYWxPYmplY3QpOwog
ICAgIENIRUNLX0VYQ0VQVElPTigpOwogCiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0lu
dCo+KHJpZ2h0TnVtZXJpYykpIHsKICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0lu
dCo+KHJpZ2h0TnVtZXJpYykpIHsKLSAgICAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0Jp
Z0ludDo6c3ViKGV4ZWMsIFdURjo6Z2V0PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpLCBXVEY6Omdl
dDxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpOworICAgICAgICAgICAgSlNCaWdJbnQqIHJlc3Vs
dCA9IEpTQmlnSW50OjpzdWIoZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnRO
dW1lcmljKSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKTsKICAgICAgICAgICAg
IENIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJl
c3VsdCwgewotICAgICAgICAgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZvckJpbmFyeUFyaXRo
T3AoZXhlYywgcGMsIHJlc3VsdCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIHVwZGF0
ZUFyaXRoUHJvZmlsZUZvckJpbmFyeUFyaXRoT3AoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHBj
LCByZXN1bHQsIGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKLSAg
ICAgICAgVEhST1coY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQg
YW5kIG90aGVyIHR5cGUgaW4gc3VidHJhY3Rpb24uIikpOworICAgICAgICBUSFJPVyhjcmVhdGVU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0
eXBlIGluIHN1YnRyYWN0aW9uLiIpKTsKICAgICB9CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKFdURjo6Z2V0PGRvdWJsZT4obGVmdE51bWVyaWMpIC0gV1RGOjpnZXQ8ZG91YmxlPihy
aWdodE51bWVyaWMpKTsKICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcocmVzdWx0LCB7Ci0gICAg
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZvckJpbmFyeUFyaXRoT3AoZXhlYywgcGMsIHJlc3VsdCwg
bGVmdCwgcmlnaHQpOworICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGVGb3JCaW5hcnlBcml0aE9w
KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBwYywgcmVzdWx0LCBsZWZ0LCByaWdodCk7CiAgICAg
fSk7CiB9CiAKQEAgLTY2OSwyOCArNjU3LDI4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9k
aXYpCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcERpdj4oKTsKICAgICBKU1ZhbHVlIGxl
ZnQgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmlnaHQg
PSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpOwotICAgIGF1dG8gbGVmdE51bWVyaWMg
PSBsZWZ0LnRvTnVtZXJpYyhleGVjKTsKKyAgICBhdXRvIGxlZnROdW1lcmljID0gbGVmdC50b051
bWVyaWMoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBhdXRvIHJp
Z2h0TnVtZXJpYyA9IHJpZ2h0LnRvTnVtZXJpYyhleGVjKTsKKyAgICBhdXRvIHJpZ2h0TnVtZXJp
YyA9IHJpZ2h0LnRvTnVtZXJpYyhnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigp
OwogCiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJp
YykgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsK
ICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJp
YykgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsK
LSAgICAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6ZGl2aWRlKGV4ZWMsIFdU
Rjo6Z2V0PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpLCBXVEY6OmdldDxKU0JpZ0ludCo+KHJpZ2h0
TnVtZXJpYykpOworICAgICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50OjpkaXZp
ZGUoZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSwgV1RGOjpn
ZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKTsKICAgICAgICAgICAgIENIRUNLX0VYQ0VQVElP
TigpOwogICAgICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewotICAgICAg
ICAgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZvckJpbmFyeUFyaXRoT3AoZXhlYywgcGMsIHJl
c3VsdCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZv
ckJpbmFyeUFyaXRoT3AoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHBjLCByZXN1bHQsIGxlZnQs
IHJpZ2h0KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgVEhST1coY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUg
aW4gZGl2aXNpb24uIikpOworICAgICAgICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGRpdmlzaW9uLiIp
KTsKICAgICB9CiAKICAgICBkb3VibGUgYSA9IFdURjo6Z2V0PGRvdWJsZT4obGVmdE51bWVyaWMp
OwogICAgIGRvdWJsZSBiID0gV1RGOjpnZXQ8ZG91YmxlPihyaWdodE51bWVyaWMpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAvIGIpOwogICAgIFJFVFVSTl9XSVRIX1BST0ZJTElO
RyhyZXN1bHQsIHsKLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yQmluYXJ5QXJpdGhPcChl
eGVjLCBwYywgcmVzdWx0LCBsZWZ0LCByaWdodCk7CisgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmls
ZUZvckJpbmFyeUFyaXRoT3AoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHBjLCByZXN1bHQsIGxl
ZnQsIHJpZ2h0KTsKICAgICB9KTsKIH0KIApAQCAtNzAwLDE5ICs2ODgsMTkgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX21vZCkKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTW9kPigp
OwogICAgIEpTVmFsdWUgbGVmdCA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCk7CiAg
ICAgSlNWYWx1ZSByaWdodCA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCk7Ci0gICAg
YXV0byBsZWZ0TnVtZXJpYyA9IGxlZnQudG9OdW1lcmljKGV4ZWMpOworICAgIGF1dG8gbGVmdE51
bWVyaWMgPSBsZWZ0LnRvTnVtZXJpYyhnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElP
TigpOwotICAgIGF1dG8gcmlnaHROdW1lcmljID0gcmlnaHQudG9OdW1lcmljKGV4ZWMpOworICAg
IGF1dG8gcmlnaHROdW1lcmljID0gcmlnaHQudG9OdW1lcmljKGdsb2JhbE9iamVjdCk7CiAgICAg
Q0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgCiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0lu
dCo+KHJpZ2h0TnVtZXJpYykpIHsKICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0lu
dCo+KHJpZ2h0TnVtZXJpYykpIHsKLSAgICAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0Jp
Z0ludDo6cmVtYWluZGVyKGV4ZWMsIFdURjo6Z2V0PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpLCBX
VEY6OmdldDxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpOworICAgICAgICAgICAgSlNCaWdJbnQq
IHJlc3VsdCA9IEpTQmlnSW50OjpyZW1haW5kZXIoZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxKU0Jp
Z0ludCo+KGxlZnROdW1lcmljKSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKTsK
ICAgICAgICAgICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgUkVUVVJOKHJlc3Vs
dCk7CiAgICAgICAgIH0KIAotICAgICAgICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklu
dmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiByZW1haW5kZXIgb3BlcmF0aW9u
LiIpKTsKKyAgICAgICAgVEhST1coY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgIkludmFs
aWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiByZW1haW5kZXIgb3BlcmF0aW9uLiIp
KTsKICAgICB9CiAgICAgCiAgICAgZG91YmxlIGEgPSBXVEY6OmdldDxkb3VibGU+KGxlZnROdW1l
cmljKTsKQEAgLTcyNiwxOSArNzE0LDE5IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wb3cp
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFBvdz4oKTsKICAgICBKU1ZhbHVlIGxlZnQg
PSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmlnaHQgPSBH
RVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpOwotICAgIGF1dG8gbGVmdE51bWVyaWMgPSBs
ZWZ0LnRvTnVtZXJpYyhleGVjKTsKKyAgICBhdXRvIGxlZnROdW1lcmljID0gbGVmdC50b051bWVy
aWMoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBhdXRvIHJpZ2h0
TnVtZXJpYyA9IHJpZ2h0LnRvTnVtZXJpYyhleGVjKTsKKyAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9
IHJpZ2h0LnRvTnVtZXJpYyhnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwog
CiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykg
fHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAg
ICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykg
JiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKLSAg
ICAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlKGV4ZWMs
IFdURjo6Z2V0PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpLCBXVEY6OmdldDxKU0JpZ0ludCo+KHJp
Z2h0TnVtZXJpYykpOworICAgICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojpl
eHBvbmVudGlhdGUoZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1lcmlj
KSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKTsKICAgICAgICAgICAgIENIRUNL
X0VYQ0VQVElPTigpOwogICAgICAgICAgICAgUkVUVVJOKHJlc3VsdCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkludmFsaWQgbWl4IG9mIEJpZ0lu
dCBhbmQgb3RoZXIgdHlwZSBpbiBleHBvbmVudGlhdGlvbiBvcGVyYXRpb24uIikpOworICAgICAg
ICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiSW52YWxpZCBtaXggb2YgQmln
SW50IGFuZCBvdGhlciB0eXBlIGluIGV4cG9uZW50aWF0aW9uIG9wZXJhdGlvbi4iKSk7CiAgICAg
fQogICAgIAogICAgIGRvdWJsZSBhID0gV1RGOjpnZXQ8ZG91YmxlPihsZWZ0TnVtZXJpYyk7CkBA
IC03NTMsMTkgKzc0MSwxOSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbHNoaWZ0KQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BMc2hpZnQ+KCk7CiAgICAgSlNWYWx1ZSBsZWZ0ID0g
R0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VU
X0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKTsKLSAgICBhdXRvIGxlZnROdW1lcmljID0gbGVm
dC50b0JpZ0ludE9ySW50MzIoZXhlYyk7CisgICAgYXV0byBsZWZ0TnVtZXJpYyA9IGxlZnQudG9C
aWdJbnRPckludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAg
YXV0byByaWdodE51bWVyaWMgPSByaWdodC50b0JpZ0ludE9ySW50MzIoZXhlYyk7CisgICAgYXV0
byByaWdodE51bWVyaWMgPSByaWdodC50b0JpZ0ludE9ySW50MzIoZ2xvYmFsT2JqZWN0KTsKICAg
ICBDSEVDS19FWENFUFRJT04oKTsKIAogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpT
QmlnSW50Kj4obGVmdE51bWVyaWMpIHx8IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQq
PihyaWdodE51bWVyaWMpKSB7CiAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpT
QmlnSW50Kj4obGVmdE51bWVyaWMpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQq
PihyaWdodE51bWVyaWMpKSB7Ci0gICAgICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJ
bnQ6OmxlZnRTaGlmdChleGVjLCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSwgV1RG
OjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKTsKKyAgICAgICAgICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8SlNCaWdJ
bnQqPihsZWZ0TnVtZXJpYyksIFdURjo6Z2V0PEpTQmlnSW50Kj4ocmlnaHROdW1lcmljKSk7CiAg
ICAgICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxF
RChyZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgVEhST1coY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gbGVmdCBzaGlmdCBv
cGVyYXRpb24uIikpOworICAgICAgICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGxlZnQgc2hpZnQgb3Bl
cmF0aW9uLiIpKTsKICAgICB9CiAKICAgICBSRVRVUk5fUFJPRklMRUQoanNOdW1iZXIoV1RGOjpn
ZXQ8aW50MzJfdD4obGVmdE51bWVyaWMpIDw8IChXVEY6OmdldDxpbnQzMl90PihyaWdodE51bWVy
aWMpICYgMzEpKSk7CkBAIC03NzcsMTkgKzc2NSwxOSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcnNoaWZ0KQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSc2hpZnQ+KCk7CiAgICAg
SlNWYWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKTsKICAgICBKU1Zh
bHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKTsKLSAgICBhdXRvIGxl
ZnROdW1lcmljID0gbGVmdC50b0JpZ0ludE9ySW50MzIoZXhlYyk7CisgICAgYXV0byBsZWZ0TnVt
ZXJpYyA9IGxlZnQudG9CaWdJbnRPckludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhD
RVBUSU9OKCk7Ci0gICAgYXV0byByaWdodE51bWVyaWMgPSByaWdodC50b0JpZ0ludE9ySW50MzIo
ZXhlYyk7CisgICAgYXV0byByaWdodE51bWVyaWMgPSByaWdodC50b0JpZ0ludE9ySW50MzIoZ2xv
YmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKIAogICAgIGlmIChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVmdE51bWVyaWMpIHx8IFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSB7CiAgICAgICAgIGlmIChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVmdE51bWVyaWMpICYmIFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSB7Ci0gICAgICAgICAgICBKU0JpZ0ludCog
cmVzdWx0ID0gSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoZXhlYywgV1RGOjpnZXQ8SlNCaWdJ
bnQqPihsZWZ0TnVtZXJpYyksIFdURjo6Z2V0PEpTQmlnSW50Kj4ocmlnaHROdW1lcmljKSk7Cisg
ICAgICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQo
Z2xvYmFsT2JqZWN0LCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSwgV1RGOjpnZXQ8
SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKTsKICAgICAgICAgICAgIENIRUNLX0VYQ0VQVElPTigp
OwogICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBh
bmQgb3RoZXIgdHlwZSBpbiBzaWduZWQgcmlnaHQgc2hpZnQgb3BlcmF0aW9uLiJfcykpOworICAg
ICAgICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiSW52YWxpZCBtaXggb2Yg
QmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHNpZ25lZCByaWdodCBzaGlmdCBvcGVyYXRpb24uIl9z
KSk7CiAgICAgfQogCiAgICAgUkVUVVJOX1BST0ZJTEVEKGpzTnVtYmVyKFdURjo6Z2V0PGludDMy
X3Q+KGxlZnROdW1lcmljKSA+PiAoV1RGOjpnZXQ8aW50MzJfdD4ocmlnaHROdW1lcmljKSAmIDMx
KSkpOwpAQCAtNzk5LDEwICs3ODcsMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Vyc2hp
ZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVXJzaGlm
dD4oKTsKLSAgICB1aW50MzJfdCBhID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKS50
b1VJbnQzMihleGVjKTsKKyAgICB1aW50MzJfdCBhID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpz
VmFsdWUoKS50b1VJbnQzMihnbG9iYWxPYmplY3QpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7Ci0gICAgdWludDMy
X3QgYiA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhlYyk7Cisg
ICAgdWludDMyX3QgYiA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9VSW50MzIo
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk4oanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
YSA+PiAoYiAmIDMxKSkpKTsKIH0KIApAQCAtODEwLDcgKzc5OCw3IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF91bnNpZ25lZCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICB1aW50MzJfdCBhID0gR0VUX0MoYnl0ZWNvZGUu
bV9vcGVyYW5kKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhlYyk7CisgICAgdWludDMyX3QgYSA9IEdF
VF9DKGJ5dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpLnRvVUludDMyKGdsb2JhbE9iamVjdCk7
CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEpKTsKIH0KIApAQCAtODE4LDExICs4MDYsMTEgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2JpdG5vdCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgYXV0byBvcGVyYW5kTnVtZXJpYyA9
IEdFVF9DKGJ5dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVj
KTsKKyAgICBhdXRvIG9wZXJhbmROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5q
c1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAKICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KG9wZXJh
bmROdW1lcmljKSkgewotICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmJpdHdp
c2VOb3QoZXhlYywgV1RGOjpnZXQ8SlNCaWdJbnQqPihvcGVyYW5kTnVtZXJpYykpOworICAgICAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmJpdHdpc2VOb3QoZ2xvYmFsT2JqZWN0LCBX
VEY6OmdldDxKU0JpZ0ludCo+KG9wZXJhbmROdW1lcmljKSk7CiAgICAgICAgIENIRUNLX0VYQ0VQ
VElPTigpOwogICAgICAgICBSRVRVUk5fUFJPRklMRUQocmVzdWx0KTsKICAgICB9CkBAIC04MzQs
MTggKzgyMiwxOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfYml0YW5kKQogewogICAgIEJF
R0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEJpdGFuZD4oKTsKLSAgICBhdXRv
IGxlZnROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKS50b0JpZ0ludE9y
SW50MzIoZXhlYyk7CisgICAgYXV0byBsZWZ0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhz
KS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhD
RVBUSU9OKCk7Ci0gICAgYXV0byByaWdodE51bWVyaWMgPSBHRVRfQyhieXRlY29kZS5tX3Jocyku
anNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVjKTsKKyAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9
IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGdsb2JhbE9i
amVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxK
U0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxK
U0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKLSAgICAgICAgICAgIEpTQmlnSW50KiByZXN1bHQg
PSBKU0JpZ0ludDo6Yml0d2lzZUFuZChleGVjLCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1l
cmljKSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKTsKKyAgICAgICAgICAgIEpT
QmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Yml0d2lzZUFuZChnbG9iYWxPYmplY3QsIFdURjo6
Z2V0PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpLCBXVEY6OmdldDxKU0JpZ0ludCo+KHJpZ2h0TnVt
ZXJpYykpOwogICAgICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBSRVRV
Uk5fUFJPRklMRUQocmVzdWx0KTsKICAgICAgICAgfQogCi0gICAgICAgIFRIUk9XKGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGJp
dHdpc2UgJ2FuZCcgb3BlcmF0aW9uLiIpKTsKKyAgICAgICAgVEhST1coY3JlYXRlVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBi
aXR3aXNlICdhbmQnIG9wZXJhdGlvbi4iKSk7CiAgICAgfQogCiAgICAgUkVUVVJOX1BST0ZJTEVE
KGpzTnVtYmVyKFdURjo6Z2V0PGludDMyX3Q+KGxlZnROdW1lcmljKSAmIFdURjo6Z2V0PGludDMy
X3Q+KHJpZ2h0TnVtZXJpYykpKTsKQEAgLTg1NSwxOCArODQzLDE4IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9iaXRvcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BCaXRvcj4oKTsKLSAgICBhdXRvIGxlZnROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUu
bV9saHMpLmpzVmFsdWUoKS50b0JpZ0ludE9ySW50MzIoZXhlYyk7CisgICAgYXV0byBsZWZ0TnVt
ZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGds
b2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgYXV0byByaWdodE51bWVy
aWMgPSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVj
KTsKKyAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVl
KCkudG9CaWdJbnRPckludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykg
fHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAg
ICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykg
JiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKLSAg
ICAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Yml0d2lzZU9yKGV4ZWMsIFdU
Rjo6Z2V0PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpLCBXVEY6OmdldDxKU0JpZ0ludCo+KHJpZ2h0
TnVtZXJpYykpOworICAgICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50OjpiaXR3
aXNlT3IoZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSwgV1RG
OjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKTsKICAgICAgICAgICAgIENIRUNLX0VYQ0VQ
VElPTigpOwogICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKHJlc3VsdCk7CiAgICAgICAgIH0K
IAotICAgICAgICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkludmFsaWQgbWl4IG9mIEJp
Z0ludCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICdvcicgb3BlcmF0aW9uLiIpKTsKKyAgICAg
ICAgVEhST1coY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgIkludmFsaWQgbWl4IG9mIEJp
Z0ludCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICdvcicgb3BlcmF0aW9uLiIpKTsKICAgICB9
CiAKICAgICBSRVRVUk5fUFJPRklMRUQoanNOdW1iZXIoV1RGOjpnZXQ8aW50MzJfdD4obGVmdE51
bWVyaWMpIHwgV1RGOjpnZXQ8aW50MzJfdD4ocmlnaHROdW1lcmljKSkpOwpAQCAtODc2LDE4ICs4
NjQsMTggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2JpdHhvcikKIHsKICAgICBCRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BCaXR4b3I+KCk7Ci0gICAgYXV0byBsZWZ0
TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMy
KGV4ZWMpOworICAgIGF1dG8gbGVmdE51bWVyaWMgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNW
YWx1ZSgpLnRvQmlnSW50T3JJbnQzMihnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElP
TigpOwotICAgIGF1dG8gcmlnaHROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFs
dWUoKS50b0JpZ0ludE9ySW50MzIoZXhlYyk7CisgICAgYXV0byByaWdodE51bWVyaWMgPSBHRVRf
QyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihnbG9iYWxPYmplY3Qp
OwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpIHx8IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJ
bnQqPihyaWdodE51bWVyaWMpKSB7CiAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJ
bnQqPihyaWdodE51bWVyaWMpKSB7Ci0gICAgICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNC
aWdJbnQ6OmJpdHdpc2VYb3IoZXhlYywgV1RGOjpnZXQ8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYyks
IFdURjo6Z2V0PEpTQmlnSW50Kj4ocmlnaHROdW1lcmljKSk7CisgICAgICAgICAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gSlNCaWdJbnQ6OmJpdHdpc2VYb3IoZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxK
U0JpZ0ludCo+KGxlZnROdW1lcmljKSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMp
KTsKICAgICAgICAgICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgUkVUVVJOX1BS
T0ZJTEVEKHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICBUSFJPVyhjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNl
ICd4b3InIG9wZXJhdGlvbi4iKSk7CisgICAgICAgIFRIUk9XKGNyZWF0ZVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gYml0d2lz
ZSAneG9yJyBvcGVyYXRpb24uIikpOwogICAgIH0KIAogICAgIFJFVFVSTl9QUk9GSUxFRChqc051
bWJlcihXVEY6OmdldDxpbnQzMl90PihsZWZ0TnVtZXJpYykgXiBXVEY6OmdldDxpbnQzMl90Pihy
aWdodE51bWVyaWMpKSk7CkBAIC04OTcsMTQgKzg4NSwxNCBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfdHlwZW9mKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcFR5cGVvZj4oKTsKLSAgICBSRVRVUk4oanNUeXBlU3RyaW5nRm9yVmFsdWUoZXhlYywgR0VU
X0MoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpKSk7CisgICAgUkVUVVJOKGpzVHlwZVN0cmlu
Z0ZvclZhbHVlKGdsb2JhbE9iamVjdCwgR0VUX0MoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgp
KSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pc19vYmplY3Rfb3JfbnVsbCkKIHsK
ICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJc09iamVjdE9yTnVs
bD4oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGpzSXNPYmplY3RUeXBlT3JOdWxsKGV4ZWMsIEdF
VF9DKGJ5dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKSkpOworICAgIFJFVFVSTihqc0Jvb2xl
YW4oanNJc09iamVjdFR5cGVPck51bGwoZ2xvYmFsT2JqZWN0LCBHRVRfQyhieXRlY29kZS5tX29w
ZXJhbmQpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2lzX2Z1
bmN0aW9uKQpAQCAtOTE4LDggKzkwNiw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pbl9i
eV92YWwpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSW5C
eVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwot
ICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZXhlYywgR0VU
X0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCksIEdFVF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmpzVmFsdWUoKSwgJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlKSkpOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICBSRVRVUk4oanNCb29sZWFu
KENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgR0VUX0MoYnl0ZWNvZGUu
bV9iYXNlKS5qc1ZhbHVlKCksIEdFVF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKSwg
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfaW5fYnlfaWQpCkBAIC05MjksOSArOTE3LDkgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2luX2J5X2lkKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKICAg
ICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICBUSFJPVyhjcmVhdGVJbnZhbGlk
SW5QYXJhbWV0ZXJFcnJvcihleGVjLCBiYXNlVmFsdWUpKTsKKyAgICAgICAgVEhST1coY3JlYXRl
SW52YWxpZEluUGFyYW1ldGVyRXJyb3IoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUpKTsKIAotICAg
IFJFVFVSTihqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZVZhbHVlKS0+aGFzUHJvcGVydHkoZXhlYywg
ZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpKSk7Cisg
ICAgUkVUVVJOKGpzQm9vbGVhbihhc09iamVjdChiYXNlVmFsdWUpLT5oYXNQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSkpKTsK
IH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YWwpCkBAIC05MzksNyArOTI3
LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YWwpCiAgICAgQkVHSU4oKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRGVsQnlWYWw+KCk7CiAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBKU09iamVj
dCogYmFzZU9iamVjdCA9IGJhc2VWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVjdCog
YmFzZU9iamVjdCA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENIRUNL
X0VYQ0VQVElPTigpOwogICAgIAogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gR0VUX0MoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwpAQCAtOTQ4LDE2ICs5MzYsMTYgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YWwpCiAgICAgCiAgICAgdWludDMyX3QgaTsKICAgICBp
ZiAoc3Vic2NyaXB0LmdldFVJbnQzMihpKSkKLSAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqZWN0LCBl
eGVjLCBpKTsKKyAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqZWN0LCBnbG9iYWxPYmplY3QsIGkpOwog
ICAgIGVsc2UgewogICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgYXV0byBwcm9w
ZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgICAgICBhdXRvIHByb3Bl
cnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBleGVjLCBwcm9wZXJ0eSk7Cisg
ICAgICAgIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQ
cm9wZXJ0eShiYXNlT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5KTsKICAgICB9CiAgICAg
Ci0gICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2Rl
KCkpCi0gICAgICAgIFRIUk9XKGNyZWF0ZVR5cGVFcnJvcihleGVjLCBVbmFibGVUb0RlbGV0ZVBy
b3BlcnR5RXJyb3IpKTsKKyAgICBpZiAoIWNvdWxkRGVsZXRlICYmIGNvZGVCbG9jay0+aXNTdHJp
Y3RNb2RlKCkpCisgICAgICAgIFRIUk9XKGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIFVu
YWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcikpOwogICAgIAogICAgIFJFVFVSTihqc0Jvb2xlYW4o
Y291bGREZWxldGUpKTsKIH0KQEAgLTk2NiwyMCArOTU0LDE5IEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9zdHJjYXQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wU3RyY2F0PigpOwotICAgIFJFVFVSTihqc1N0cmluZ0Zyb21SZWdpc3RlckFycmF5KGV4
ZWMsICZHRVQoYnl0ZWNvZGUubV9zcmMpLCBieXRlY29kZS5tX2NvdW50KSk7CisgICAgUkVUVVJO
KGpzU3RyaW5nRnJvbVJlZ2lzdGVyQXJyYXkoZ2xvYmFsT2JqZWN0LCAmR0VUKGJ5dGVjb2RlLm1f
c3JjKSwgYnl0ZWNvZGUubV9jb3VudCkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dG9fcHJpbWl0aXZlKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcFRvUHJpbWl0aXZlPigpOwotICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5tX3NyYykuanNW
YWx1ZSgpLnRvUHJpbWl0aXZlKGV4ZWMpKTsKKyAgICBSRVRVUk4oR0VUX0MoYnl0ZWNvZGUubV9z
cmMpLmpzVmFsdWUoKS50b1ByaW1pdGl2ZShnbG9iYWxPYmplY3QpKTsKIH0KIAogU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2VudGVyKQogewogICAgIEJFR0lOKCk7Ci0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBIZWFwOjpoZWFwKGNvZGVCbG9jaykt
PndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgIEVORCgpOwogfQpAQCAtMTAwMSwyMCArOTg4
LDIwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKIHsK
ICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNJbmRleGVkUHJv
cGVydHk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsK
LSAgICBKU09iamVjdCogYmFzZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09i
amVjdChleGVjKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVC
bG9jayk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVl
KCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBK
U1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKICAg
ICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlKGJhc2UtPnN0cnVjdHVy
ZSh2bSkpOwogICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMkFzQW55SW50KCkpOwotICAgIFJF
VFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHlHZW5lcmljKGV4ZWMsIHByb3BlcnR5LmFz
VUludDMyQXNBbnlJbnQoKSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93
blByb3BlcnR5KSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHlHZW5l
cmljKGdsb2JhbE9iamVjdCwgcHJvcGVydHkuYXNVSW50MzJBc0FueUludCgpLCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpKSk7CiB9CiAKIFNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQogewogICAgIEJFR0lOKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOwot
ICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2Jq
ZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUKGJ5dGVjb2RlLm1fYmFzZSkuanNW
YWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAg
ICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7
CiAgICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwpAQCAtMTAyMiwyMyArMTAwOSwyMyBA
QCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICBp
ZiAoYmFzZS0+c3RydWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1
cmVJRCgpKQogICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKICAgICBKU1N0cmluZyog
c3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3Ry
aW5nLT50b0lkZW50aWZpZXIoZXhlYyk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmct
PnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAg
IFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHlHZW5lcmljKGV4ZWMsIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KSkp
OworICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHlHZW5lcmljKGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0
T3duUHJvcGVydHkpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfZ2VuZXJp
Y19wcm9wZXJ0eSkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BIYXNHZW5lcmljUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVQoYnl0ZWNv
ZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2Ug
PSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsK
ICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmco
KSk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKLSAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGV4ZWMpOworICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVD
S19FWENFUFRJT04oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5R2Vu
ZXJpYyhleGVjLCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXRPd25Qcm9wZXJ0eSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3Bl
cnR5R2VuZXJpYyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSkKQEAgLTEwNDksOSArMTAzNiw5IEBAIFNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKQogICAgIEpTVmFsdWUgcHJvcGVydHkg
PSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChwcm9wZXJ0
eS5pc1N0cmluZygpKTsKICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkp
OwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZXhlYyk7Cisg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3Qp
OwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVSTihiYXNlVmFsdWUuZ2V0KGV4ZWMs
IHByb3BlcnR5TmFtZSkpOworICAgIFJFVFVSTihiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfcHJvcGVy
dHlfZW51bWVyYXRvcikKQEAgLTEwNjIsMTAgKzEwNDksMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQogICAgIGlmIChiYXNlVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKICAgICAgICAgUkVUVVJOKHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVy
YXRvcigpKTsKIAotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMp
OworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7
CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4ocHJvcGVydHlOYW1lRW51bWVy
YXRvcihleGVjLCBiYXNlKSk7CisgICAgUkVUVVJOKHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xv
YmFsT2JqZWN0LCBiYXNlKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9lbnVtZXJh
dG9yX3N0cnVjdHVyZV9wbmFtZSkKQEAgLTExMjIsMTEgKzExMDksMTEgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KQogICAgIEJFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudD4oKTsK
ICAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwotICAgIEpTU2Nv
cGUqIGN1cnJlbnRTY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoc2NvcGVSZWcpLlJlZ2lzdGVyOjpz
Y29wZSgpOworICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oR0VUX0MoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZSku
anNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIGluaXRpYWxWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1f
aW5pdGlhbFZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGluaXRpYWxWYWx1ZSA9PSBqc1Vu
ZGVmaW5lZCgpIHx8IGluaXRpYWxWYWx1ZSA9PSBqc1REWlZhbHVlKCkpOwotICAgIEpTU2NvcGUq
IG5ld1Njb3BlID0gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUp
OworICAgIEpTU2NvcGUqIG5ld1Njb3BlID0gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBjdXJyZW50U2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUp
OwogICAgIFJFVFVSTihuZXdTY29wZSk7CiB9CiAKQEAgLTExMzQsMjEgKzExMjEsMjEgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0aF9zY29wZSkKIHsKICAgICBCRUdJTigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQdXNoV2l0aFNjb3BlPigpOwotICAgIEpTT2Jq
ZWN0KiBuZXdTY29wZSA9IEdFVF9DKGJ5dGVjb2RlLm1fbmV3U2NvcGUpLmpzVmFsdWUoKS50b09i
amVjdChleGVjKTsKKyAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRlY29kZS5tX25l
d1Njb3BlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENF
UFRJT04oKTsKIAogICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlLm9m
ZnNldCgpOwotICAgIEpTU2NvcGUqIGN1cnJlbnRTY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoc2Nv
cGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIFJFVFVSTihKU1dpdGhTY29wZTo6Y3JlYXRl
KHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGN1cnJlbnRTY29wZSwgbmV3U2NvcGUp
KTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2Nv
cGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIFJFVFVSTihKU1dpdGhTY29wZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgbmV3U2NvcGUpKTsKIH0KIAogU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9p
bl9ldmFsKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJl
c29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+KCk7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgSlNWYWx1ZSByZXNvbHZl
ZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChl
eGVjLCBzY29wZSwgaWRlbnQpOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgIEpTU2NvcGUqIHNjb3Bl
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lz
dGVyOjpzY29wZSgpOworICAgIEpTVmFsdWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRl
bnQpOwogCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKQEAgLTExNTksMTEgKzExNDYsMTAgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCiB7CiAgICAgQkVHSU4oKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoZXhlYyk7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpTU2NvcGUqIHNjb3BlID0g
ZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2Nv
cGUoKTsKLSAgICBKU09iamVjdCogcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmUoZXhl
Yywgc2NvcGUsIGlkZW50KTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBK
U09iamVjdCogcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgaWRlbnQpOwogICAgIC8vIFByb3h5IGNhbiB0aHJvdyBhbiBlcnJvciBoZXJlLCBlLmcu
IFByb3h5IGluIHdpdGggc3RhdGVtZW50J3MgQHVuc2NvcGFibGVzLgogICAgIENIRUNLX0VYQ0VQ
VElPTigpOwogCkBAIC0xMTc5LDcgKzExNjUsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cmVzb2x2ZV9zY29wZSkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgaWYgKHJlc29sdmVkU2NvcGUtPmlzR2xvYmFsT2JqZWN0KCkp
IHsKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNH
bG9iYWxPYmplY3QqPihyZXNvbHZlZFNjb3BlKTsKLSAgICAgICAgICAgIGJvb2wgaGFzUHJvcGVy
dHkgPSBnbG9iYWxPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KTsKKyAgICAgICAgICAg
IGJvb2wgaGFzUHJvcGVydHkgPSBnbG9iYWxPYmplY3QtPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVj
dCwgaWRlbnQpOwogICAgICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgICAgICBp
ZiAoaGFzUHJvcGVydHkpIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKQEAgLTEyMDcsMjIgKzExOTMsMjEgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9yZXN0KQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcENyZWF0ZVJlc3Q+KCk7CiAgICAgdW5zaWduZWQgYXJyYXlTaXplID0g
R0VUX0MoYnl0ZWNvZGUubV9hcnJheVNpemUpLmpzVmFsdWUoKS5hc1VJbnQzMigpOwotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnJlc3RQYXJhbWV0ZXJT
dHJ1Y3R1cmUoKTsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251
bVBhcmFtZXRlcnNUb1NraXA7Ci0gICAgSlNWYWx1ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0g
ZXhlYy0+YWRkcmVzc09mQXJndW1lbnRzU3RhcnQoKSArIG51bVBhcmFtc1RvU2tpcDsKLSAgICBS
RVRVUk4oY29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCBhcmd1bWVudHNUb0NvcHlSZWdp
b24sIGFycmF5U2l6ZSkpOworICAgIEpTVmFsdWUqIGFyZ3VtZW50c1RvQ29weVJlZ2lvbiA9IGNh
bGxGcmFtZS0+YWRkcmVzc09mQXJndW1lbnRzU3RhcnQoKSArIG51bVBhcmFtc1RvU2tpcDsKKyAg
ICBSRVRVUk4oY29uc3RydWN0QXJyYXkoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGFyZ3VtZW50
c1RvQ29weVJlZ2lvbiwgYXJyYXlTaXplKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9nZXRfYnlfaWRfd2l0aF90aGlzKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
OworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNv
ZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsID0gR0VUX0MoYnl0ZWNv
ZGUubV90aGlzVmFsdWUpLmpzVmFsdWUoKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzVmFs
LCBQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNs
b3QpOwogICAgIFJFVFVSTl9QUk9GSUxFRChyZXN1bHQpOwogfQogCkBAIC0xMjM4LDcgKzEyMjMs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCiAgICAg
aWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7
CiAgICAgICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0gKmJhc2VWYWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKHZtKTsKICAgICAgICAgaWYgKEpTQ2VsbDo6Y2FuVXNlRmFzdEdldE93blByb3BlcnR5
KHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gZXhpc3Rp
bmdBdG9tU3RyaW5nID0gYXNTdHJpbmcoc3Vic2NyaXB0KS0+dG9FeGlzdGluZ0F0b21TdHJpbmco
ZXhlYyk7CisgICAgICAgICAgICBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IGV4aXN0aW5nQXRvbVN0
cmluZyA9IGFzU3RyaW5nKHN1YnNjcmlwdCktPnRvRXhpc3RpbmdBdG9tU3RyaW5nKGdsb2JhbE9i
amVjdCk7CiAgICAgICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAgICAgIGlmIChl
eGlzdGluZ0F0b21TdHJpbmcpIHsKICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQg
PSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eSh2bSwgc3RydWN0dXJlLCBl
eGlzdGluZ0F0b21TdHJpbmcuZ2V0KCkpKQpAQCAtMTI1MSwyOSArMTIzNiwyOCBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCiAgICAgaWYgKHN1YnNjcmlw
dC5pc1VJbnQzMigpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIo
KTsKICAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBhc1N0cmluZyhiYXNlVmFs
dWUpLT5jYW5HZXRJbmRleChpKSkKLSAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChhc1N0cmlu
ZyhiYXNlVmFsdWUpLT5nZXRJbmRleChleGVjLCBpKSk7CisgICAgICAgICAgICBSRVRVUk5fUFJP
RklMRUQoYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpKSk7CiAg
ICAgICAgIAotICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldChleGVjLCBpLCBz
bG90KSk7CisgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVj
dCwgaSwgc2xvdCkpOwogICAgIH0KIAotICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNp
YmxlKGV4ZWMpOworICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGdsb2JhbE9i
amVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNj
cmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQu
dG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAg
IFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5LCBzbG90KSk7Cisg
ICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eSwg
c2xvdCkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkX3dpdGhfdGhp
cykKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRCeUlk
V2l0aFRoaXM+KCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVj
b2RlLm1fYmFzZSkuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgdGhpc1ZhbCA9IEdFVF9DKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBwdXRWYWx1ZSA9IEdFVF9D
KGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzVmFsLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250
ZXh0KCkpOwotICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIHB1dFZhbHVlLCBz
bG90KTsKKyAgICBiYXNlVmFsdWUucHV0SW5saW5lKGdsb2JhbE9iamVjdCwgaWRlbnQsIHB1dFZh
bHVlLCBzbG90KTsKICAgICBFTkQoKTsKIH0KIApAQCAtMTI4NiwxMCArMTI3MCwxMCBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbF93aXRoX3RoaXMpCiAgICAgSlNWYWx1ZSBz
dWJzY3JpcHQgPSBHRVRfQyhieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAgICAKLSAg
ICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgYXV0
byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAg
Q0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpc1ZhbHVlLCBl
eGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwotICAgIGJhc2VWYWx1ZS5wdXQoZXhl
YywgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlz
VmFsdWUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOworICAgIGJhc2VWYWx1ZS5wdXQoZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogICAgIEVORCgpOwogfQogCkBAIC0x
MzAzLDExICsxMjg3LDExIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWZpbmVfZGF0YV9w
cm9wZXJ0eSkKICAgICBKU1ZhbHVlIGF0dHJpYnV0ZXMgPSBHRVRfQyhieXRlY29kZS5tX2F0dHJp
YnV0ZXMpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoYXR0cmlidXRlcy5pc0ludDMyKCkpOwogCi0g
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3Qp
OwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yID0gdG9Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZp
bmVkKCksIERlZmluZVByb3BlcnR5QXR0cmlidXRlcyhhdHRyaWJ1dGVzLmFzSW50MzIoKSkpOwog
ICAgIEFTU0VSVCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
QWNjZXNzb3IpIHx8ICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSk7Ci0gICAg
YmFzZS0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShiYXNlLCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRydWUpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+
ZGVmaW5lT3duUHJvcGVydHkoYmFzZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIHRydWUpOwogICAgIEVORCgpOwogfQogCkBAIC0xMzIyLDExICsxMzA2LDExIEBAIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCiAgICAgSlNW
YWx1ZSBhdHRyaWJ1dGVzID0gR0VUX0MoYnl0ZWNvZGUubV9hdHRyaWJ1dGVzKS5qc1ZhbHVlKCk7
CiAgICAgQVNTRVJUKGF0dHJpYnV0ZXMuaXNJbnQzMigpKTsKIAotICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENF
UFRJT04oKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHRvUHJvcGVydHlE
ZXNjcmlwdG9yKGpzVW5kZWZpbmVkKCksIGdldHRlciwgc2V0dGVyLCBEZWZpbmVQcm9wZXJ0eUF0
dHJpYnV0ZXMoYXR0cmlidXRlcy5hc0ludDMyKCkpKTsKICAgICBBU1NFUlQoKGRlc2NyaXB0b3Iu
YXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKSB8fCAoIWRlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwotICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+
ZGVmaW5lT3duUHJvcGVydHkoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0
cnVlKTsKKyAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KGJhc2Us
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0cnVlKTsKICAgICBFTkQo
KTsKIH0KIApAQCAtMTMzNiw5ICsxMzIwLDkgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Ro
cm93X3N0YXRpY19lcnJvcikKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVGhyb3dTdGF0
aWNFcnJvcj4oKTsKICAgICBKU1ZhbHVlIGVycm9yTWVzc2FnZVZhbHVlID0gR0VUX0MoYnl0ZWNv
ZGUubV9tZXNzYWdlKS5qc1ZhbHVlKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXJyb3JNZXNzYWdl
VmFsdWUuaXNTdHJpbmcoKSk7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGFzU3RyaW5nKGVy
cm9yTWVzc2FnZVZhbHVlKS0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9
IGFzU3RyaW5nKGVycm9yTWVzc2FnZVZhbHVlKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICBF
cnJvclR5cGUgZXJyb3JUeXBlID0gYnl0ZWNvZGUubV9lcnJvclR5cGU7Ci0gICAgVEhST1coY3Jl
YXRlRXJyb3IoZXhlYywgZXJyb3JUeXBlLCBlcnJvck1lc3NhZ2UpKTsKKyAgICBUSFJPVyhjcmVh
dGVFcnJvcihnbG9iYWxPYmplY3QsIGVycm9yVHlwZSwgZXJyb3JNZXNzYWdlKSk7CiB9CiAKIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQpCkBAIC0xMzQ3LDcg
KzEzMzEsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X3dpdGhfc3ByZWFk
KQogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBcnJheVdpdGhTcHJlYWQ+KCk7CiAg
ICAgaW50IG51bUl0ZW1zID0gYnl0ZWNvZGUubV9hcmdjOwogICAgIEFTU0VSVChudW1JdGVtcyA+
PSAwKTsKLSAgICBjb25zdCBCaXRWZWN0b3ImIGJpdFZlY3RvciA9IGV4ZWMtPmNvZGVCbG9jaygp
LT51bmxpbmtlZENvZGVCbG9jaygpLT5iaXRWZWN0b3IoYnl0ZWNvZGUubV9iaXRWZWN0b3IpOwor
ICAgIGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpLT5iaXRWZWN0b3IoYnl0ZWNvZGUubV9iaXRWZWN0b3IpOwogCiAgICAgSlNWYWx1ZSog
dmFsdWVzID0gYml0d2lzZV9jYXN0PEpTVmFsdWUqPigmR0VUKGJ5dGVjb2RlLm1fYXJndikpOwog
CkBAIC0xMzYxLDE4ICsxMzQ1LDE3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJy
YXlfd2l0aF9zcHJlYWQpCiAgICAgICAgICAgICBjaGVja2VkQXJyYXlTaXplICs9IDE7CiAgICAg
fQogICAgIGlmIChVTkxJS0VMWShjaGVja2VkQXJyYXlTaXplLmhhc092ZXJmbG93ZWQoKSkpCi0g
ICAgICAgIFRIUk9XKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgICAgICBUSFJP
VyhjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCkpOwogCiAgICAgdW5zaWduZWQg
YXJyYXlTaXplID0gY2hlY2tlZEFycmF5U2l6ZS51bnNhZmVHZXQoKTsKICAgICBpZiAoVU5MSUtF
TFkoYXJyYXlTaXplID49IE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKQot
ICAgICAgICBUSFJPVyhjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICAgICAgVEhS
T1coY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QpKTsKIAotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKTsKIAogICAgIEpT
QXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6OnRyeUNyZWF0ZSh2bSwgc3RydWN0dXJlLCBhcnJheVNp
emUpOwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAgVEhST1coY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihleGVjKSk7CisgICAgICAgIFRIUk9XKGNyZWF0ZU91dE9mTWVtb3J5RXJy
b3IoZ2xvYmFsT2JqZWN0KSk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKICAgICB1bnNpZ25l
ZCBpbmRleCA9IDA7CkBAIC0xMzgzLDEzICsxMzY2LDEzIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQpCiAgICAgICAgICAgICBKU0ZpeGVkQXJyYXkqIGFy
cmF5ID0ganNDYXN0PEpTRml4ZWRBcnJheSo+KHZhbHVlKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcnJheS0+c2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChhcnJheS0+Z2V0KGkpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQtPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBhcnJheS0+Z2V0KGkpKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgsIGFycmF5LT5nZXQo
aSkpOwogICAgICAgICAgICAgICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICAgICAgICAg
ICsraW5kZXg7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBXZSBhcmUgbm90IHNwcmVhZGluZy4KLSAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUpOwogICAgICAgICAgICAgQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICB9CkBAIC0xNDAyLDEyICsxMzg1
LDEyIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfYnVmZmVyKQogewogICAg
IEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVmZmVyPigp
OwotICAgIEFTU0VSVChleGVjLT5jb2RlQmxvY2soKS0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
Ynl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpKTsKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRl
cmZseS5vZmZzZXQoKSkpOwogICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0
ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29k
ZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBhdXRvJiBw
cm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoZXhlYykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
OworICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZTsKIAogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGUgPSBw
cm9maWxlLnNlbGVjdEluZGV4aW5nVHlwZSgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdNb2RlKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKGluZGV4aW5nTW9kZSk7CiAgICAgQVNTRVJUKGlzQ29weU9uV3JpdGUoaW5kZXhpbmdN
b2RlKSk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogCkBA
IC0xNDE2LDcgKzEzOTksNiBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1
ZmZlcikKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGltbXV0YWJsZUJ1dHRlcmZs
eS0+bGVuZ3RoKCk7ICsraSkKICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+c2V0SW5kZXgodm0s
IGksIGltbXV0YWJsZUJ1dHRlcmZseS0+Z2V0KGkpKTsKICAgICAgICAgaW1tdXRhYmxlQnV0dGVy
Zmx5ID0gbmV3QnV0dGVyZmx5OwotICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGtpbmRhIGdyb3NzIGFu
ZCBvbmx5IHdvcmtzIGJlY2F1c2Ugd2UgY2FuJ3QgaW5saW5lIG5ld19hcnJheV9idWZmZmVyIGlu
IHRoZSBiYXNlbGluZS4KICAgICAgICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcg
YnV0dGVyZmx5IGZyb20gY29tcGlsYXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8g
YWxsb2NhdGUgY2VsbHMgZnJvbQpAQCAtMTQyNyw3ICsxNDA5LDcgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpCiAgICAgfQogCiAgICAgSlNBcnJheSogcmVzdWx0
ID0gQ29tbW9uU2xvd1BhdGhzOjphbGxvY2F0ZU5ld0FycmF5QnVmZmVyKHZtLCBzdHJ1Y3R1cmUs
IGltbXV0YWJsZUJ1dHRlcmZseSk7Ci0gICAgQVNTRVJUKGlzQ29weU9uV3JpdGUocmVzdWx0LT5p
bmRleGluZ01vZGUoKSkgfHwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FC
YWRUaW1lKCkpOworICAgIEFTU0VSVChpc0NvcHlPbldyaXRlKHJlc3VsdC0+aW5kZXhpbmdNb2Rl
KCkpIHx8IGdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpKTsKICAgICBBcnJheUFsbG9j
YXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcigmcHJvZmlsZSwgcmVzdWx0KTsK
ICAgICBSRVRVUk4ocmVzdWx0KTsKIH0KQEAgLTE0NDUsMTIgKzE0MjcsMTAgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3NwcmVhZCkKICAgICAgICAgICAgIC8vIEpTRml4ZWRBcnJheTo6Y3Jl
YXRlRnJvbUFycmF5IGRvZXMgbm90IGNvbnN1bHQgdGhlIHByb3RvdHlwZSBjaGFpbiwKICAgICAg
ICAgICAgIC8vIHNvIHdlIG11c3QgYmUgc3VyZSB0aGF0IG5vdCBjb25zdWx0aW5nIHRoZSBwcm90
b3R5cGUgY2hhaW4gd291bGQKICAgICAgICAgICAgIC8vIHByb2R1Y2UgdGhlIHNhbWUgdmFsdWUg
ZHVyaW5nIGl0ZXJhdGlvbi4KLSAgICAgICAgICAgIFJFVFVSTihKU0ZpeGVkQXJyYXk6OmNyZWF0
ZUZyb21BcnJheShleGVjLCB2bSwgYXJyYXkpKTsKKyAgICAgICAgICAgIFJFVFVSTihKU0ZpeGVk
QXJyYXk6OmNyZWF0ZUZyb21BcnJheShnbG9iYWxPYmplY3QsIHZtLCBhcnJheSkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKLQogICAgIEpTQXJyYXkqIGFycmF5OwogICAgIHsKICAgICAg
ICAgSlNGdW5jdGlvbiogaXRlcmF0aW9uRnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPml0ZXJhdG9y
UHJvdG9jb2xGdW5jdGlvbigpOwpAQCAtMTQ2MSwxMiArMTQ0MSwxMiBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfc3ByZWFkKQogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVu
dHM7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoaXRlcmFibGUpOwogICAgICAgICBBU1NFUlQo
IWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICBKU1ZhbHVlIGFycmF5UmVzdWx0
ID0gY2FsbChleGVjLCBpdGVyYXRpb25GdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc051
bGwoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgSlNWYWx1ZSBhcnJheVJlc3VsdCA9IGNhbGwoZ2xv
YmFsT2JqZWN0LCBpdGVyYXRpb25GdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc051bGwo
KSwgYXJndW1lbnRzKTsKICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIGFycmF5
ID0ganNDYXN0PEpTQXJyYXkqPihhcnJheVJlc3VsdCk7CiAgICAgfQogCi0gICAgUkVUVVJOKEpT
Rml4ZWRBcnJheTo6Y3JlYXRlRnJvbUFycmF5KGV4ZWMsIHZtLCBhcnJheSkpOworICAgIFJFVFVS
TihKU0ZpeGVkQXJyYXk6OmNyZWF0ZUZyb21BcnJheShnbG9iYWxPYmplY3QsIHZtLCBhcnJheSkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKaW5kZXggMWY3NWNiNTA5ZWE2MzVhYmUyMzc1NTEwNzVh
MmExNTQyNTJlM2I1Ni4uYTJkODUwYTFlYTQ0NWZlODViOGFkZjM0ZGVmMTNhMTIyMDRlZTZjNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgK
QEAgLTcyLDMyICs3MiwzMiBAQCBBTFdBWVNfSU5MSU5FIGludCBudW1iZXJPZlN0YWNrUGFkZGlu
Z1Nsb3RzV2l0aEV4dHJhU2xvdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssCiAgICAgcmV0dXJuIG51
bWJlck9mU3RhY2tQYWRkaW5nU2xvdHMoY29kZUJsb2NrLCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykgKyBudW1iZXJPZkV4dHJhU2xvdHMoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwog
fQogCi1BTFdBWVNfSU5MSU5FIENvZGVCbG9jayogY29kZUJsb2NrRnJvbUNhbGxGcmFtZUNhbGxl
ZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK0FMV0FZU19J
TkxJTkUgQ29kZUJsb2NrKiBjb2RlQmxvY2tGcm9tQ2FsbEZyYW1lQ2FsbGVlKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0gICAgSlNGdW5jdGlv
biogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5qc0NhbGxlZSgpKTsKKyAgICBK
U0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSk7CiAgICAgQVNTRVJUKCFjYWxsZWUtPmlzSG9zdEZ1bmN0aW9uKCkpOwogICAgIHJldHVy
biBjYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tGb3Ioa2luZCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgaW50IGFyaXR5Q2hlY2tGb3IoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKK0FMV0FZU19JTkxJTkUgaW50IGFyaXR5Q2hlY2tGb3Io
Vk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQogewotICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gY29kZUJsb2NrRnJvbUNhbGxGcmFt
ZUNhbGxlZShleGVjLCBraW5kKTsKLSAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihuZXdDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkpOwotICAgIGludCBwYWRkaW5nID0gbnVtYmVyT2ZTdGFja1BhZGRpbmdTbG90c1dp
dGhFeHRyYVNsb3RzKG5ld0NvZGVCbG9jaywgZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSk7CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSBjb2RlQmxvY2tGcm9tQ2FsbEZy
YW1lQ2FsbGVlKGNhbGxGcmFtZSwga2luZCk7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihuZXdDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSkpOworICAgIGludCBwYWRkaW5nID0gbnVtYmVyT2ZTdGFja1Bh
ZGRpbmdTbG90c1dpdGhFeHRyYVNsb3RzKG5ld0NvZGVCbG9jaywgY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpKTsKICAgICAKLSAgICBSZWdpc3RlciogbmV3U3RhY2sgPSBl
eGVjLT5yZWdpc3RlcnMoKSAtIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpLCBwYWRkaW5nKTsKKyAgICBSZWdpc3RlciogbmV3U3RhY2sgPSBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpIC0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIHBhZGRpbmcpOwogCiAgICAgaWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFj
a0NhcGFjaXR5Rm9yKG5ld1N0YWNrKSkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4g
cGFkZGluZzsKIH0KIAotaW5saW5lIGJvb2wgb3BJbkJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsLCBKU1ZhbHVlIHByb3BOYW1lLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmls
ZSA9IG51bGxwdHIpCitpbmxpbmUgYm9vbCBvcEluQnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBiYXNlVmFsLCBKU1ZhbHVlIHByb3BOYW1lLCBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IG51bGxwdHIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoIWJhc2VWYWwuaXNPYmplY3QoKSkgewotICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlSW52YWxpZEluUGFyYW1ldGVyRXJy
b3IoZXhlYywgYmFzZVZhbCkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBjcmVhdGVJbnZhbGlkSW5QYXJhbWV0ZXJFcnJvcihnbG9iYWxPYmplY3QsIGJhc2VW
YWwpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTA5LDIwICsxMDksMjAg
QEAgaW5saW5lIGJvb2wgb3BJbkJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
LCBKU1ZhbHVlIHByb3BOYW1lLCBBcnJheVAKICAgICBpZiAocHJvcE5hbWUuZ2V0VUludDMyKGkp
KSB7CiAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCiAgICAgICAgICAgICBhcnJheVByb2ZpbGUt
Pm9ic2VydmVJbmRleGVkUmVhZCh2bSwgYmFzZU9iaiwgaSk7Ci0gICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgYmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywgaSkpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJhc2VPYmotPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVj
dCwgaSkpOwogICAgIH0KIAotICAgIGF1dG8gcHJvcGVydHkgPSBwcm9wTmFtZS50b1Byb3BlcnR5
S2V5KGV4ZWMpOworICAgIGF1dG8gcHJvcGVydHkgPSBwcm9wTmFtZS50b1Byb3BlcnR5S2V5KGds
b2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywgcHJv
cGVydHkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHkpKTsKIH0KIAogaW5saW5lIHZvaWQgdHJ5Q2FjaGVQ
dXRUb1Njb3BlR2xvYmFsKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIE9wUHV0VG9TY29wZSYgYnl0ZWNvZGUsIEpTT2JqZWN0KiBzY29wZSwKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3BQdXRUb1Njb3Bl
JiBieXRlY29kZSwgSlNPYmplY3QqIHNjb3BlLAogICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gQ292ZXJzIGltcGxpY2l0IGdsb2Jh
bHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3ZSBk
aWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRpbWUuCi0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKQEAgLTE1OCw3ICsxNTgsNyBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZVB1
dFRvU2NvcGVHbG9iYWwoCiAgICAgfQogCiAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFBy
b3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBn
ZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVj
dCA9PSBzY29wZSB8fCBnbG9iYWxPYmplY3QtPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+aGFz
QmVlbkludmFsaWRhdGVkKCkpOwogICAgICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKQpA
QCAtMTgyLDkgKzE4Miw5IEBAIGlubGluZSB2b2lkIHRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbCgK
IH0KIAogaW5saW5lIHZvaWQgdHJ5Q2FjaGVHZXRGcm9tU2NvcGVHbG9iYWwoCi0gICAgRXhlY1N0
YXRlKiBleGVjLCBWTSYgdm0sIE9wR2V0RnJvbVNjb3BlJiBieXRlY29kZSwgSlNPYmplY3QqIHNj
b3BlLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBWTSYgdm0s
IE9wR2V0RnJvbVNjb3BlJiBieXRlY29kZSwgSlNPYmplY3QqIHNjb3BlLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogewotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoZXhlYyk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRh
dGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CkBAIC0xOTMsNyArMTkzLDcgQEAgaW5saW5lIHZvaWQgdHJ5Q2FjaGVHZXRGcm9tU2NvcGVH
bG9iYWwoCiAgICAgICAgIGlmIChzY29wZS0+aXNHbG9iYWxPYmplY3QoKSkgewogICAgICAgICAg
ICAgUmVzb2x2ZVR5cGUgbmV3UmVzb2x2ZVR5cGUgPSBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxQcm9wZXJ0eTsKICAgICAgICAgICAgIHJlc29sdmVUeXBlID0gbmV3UmVzb2x2ZVR5cGU7IC8v
IEFsbG93IGJlbG93IGNhY2hpbmcgbWVjaGFuaXNtIHRvIGtpY2sgaW4uCi0gICAgICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAg
ICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1ldGFkYXRhLm1f
Z2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0yMDcsNyArMjA3LDcgQEAgaW5saW5lIHZvaWQgdHJ5Q2FjaGVHZXRGcm9tU2NvcGVH
bG9iYWwoCiAgICAgICAgICAgICBSZXNvbHZlVHlwZSBuZXdSZXNvbHZlVHlwZSA9IG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcjsKICAgICAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCktPmdl
dChpZGVudC5pbXBsKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0g
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5t
X2xvY2spOworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jayk7CiAgICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZv
KG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0
YWRhdGEubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKICAgICAgICAg
ICAgIG1ldGFkYXRhLm1fb3BlcmFuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihnbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuc2xv
dCgpKTsKQEAgLTIyMSw4ICsyMjEsNiBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZUdldEZyb21TY29w
ZUdsb2JhbCgKIAogICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5IGRv
bid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0IGtub3cgaG93IHRv
IGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxQcm9wZXJ0eSB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIEFTU0VSVChzY29wZSA9PSBnbG9iYWxPYmplY3QgfHwg
Z2xvYmFsT2JqZWN0LT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmhhc0JlZW5JbnZhbGlkYXRl
ZCgpKTsKICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmIHNsb3Quc2xvdEJh
c2UoKSA9PSBzY29wZSAmJiBzY29wZSA9PSBnbG9iYWxPYmplY3QgJiYgc2NvcGUtPnN0cnVjdHVy
ZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkgewogICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBzY29wZS0+c3RydWN0dXJlKHZtKTsKQEAgLTI1NywxMSArMjU1
LDExIEBAIGlubGluZSBib29sIGNhbkFjY2Vzc0FyZ3VtZW50SW5kZXhRdWlja2x5KEpTT2JqZWN0
JiBvYmplY3QsIHVpbnQzMl90IGluZGV4KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGlj
IEFMV0FZU19JTkxJTkUgdm9pZCBwdXREaXJlY3RXaXRoUmVpZnkoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZSoqIHJlc3VsdCA9
IG51bGxwdHIpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dERpcmVjdFdpdGhSZWlmeShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZSoqIHJlc3VsdCA9IG51bGxwdHIpCiB7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChiYXNlT2JqZWN0LT5pbmhlcml0
czxKU0Z1bmN0aW9uPih2bSkpIHsKLSAgICAgICAganNDYXN0PEpTRnVuY3Rpb24qPihiYXNlT2Jq
ZWN0KS0+cmVpZnlMYXp5UHJvcGVydHlJZk5lZWRlZCh2bSwgZXhlYywgcHJvcGVydHlOYW1lKTsK
KyAgICAgICAganNDYXN0PEpTRnVuY3Rpb24qPihiYXNlT2JqZWN0KS0+cmVpZnlMYXp5UHJvcGVy
dHlJZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KICAgICBpZiAocmVzdWx0KQpA
QCAtMjcwLDE1ICsyNjgsMTUgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBwdXREaXJlY3RX
aXRoUmVpZnkoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KgogICAgIGJhc2VPYmpl
Y3QtPnB1dERpcmVjdCh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXN0YXRp
YyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0RGlyZWN0QWNjZXNzb3JXaXRoUmVpZnkoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yLCB1bnNpZ25lZCBhdHRyaWJ1dGUpCitzdGF0
aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dERpcmVjdEFjY2Vzc29yV2l0aFJlaWZ5KFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEdldHRlclNldHRlciogYWNjZXNzb3IsIHVuc2lnbmVkIGF0
dHJpYnV0ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgaWYgKGJhc2VPYmplY3QtPmluaGVyaXRzPEpTRnVuY3Rpb24+KHZtKSkgewotICAgICAgICBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGJhc2VPYmplY3QpLT5yZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVk
KHZtLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBqc0Nhc3Q8SlNGdW5jdGlvbio+KGJh
c2VPYmplY3QpLT5yZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgfQogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGUpOworICAgIGJh
c2VPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBh
Y2Nlc3NvciwgYXR0cmlidXRlKTsKIH0KIAogaW5saW5lIEpTQXJyYXkqIGFsbG9jYXRlTmV3QXJy
YXlCdWZmZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNJbW11dGFibGVCdXR0ZXJm
bHkqIGltbXV0YWJsZUJ1dHRlcmZseSkKQEAgLTMwNywxMyArMzA1LDEyIEBAIGlubGluZSBKU0Fy
cmF5KiBhbGxvY2F0ZU5ld0FycmF5QnVmZmVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTSW1tdXRhYmxlCiB9IC8vIG5hbWVzcGFjZSBDb21tb25TbG93UGF0aHMKIAogY2xhc3MgQ2Fs
bEZyYW1lOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogc3RydWN0IEluc3RydWN0aW9u
OwogCiAjZGVmaW5lIFNMT1dfUEFUSAogICAgIAogI2RlZmluZSBTTE9XX1BBVEhfREVDTChuYW1l
KSBcCi1leHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBTTE9XX1BBVEggbmFtZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEluc3RydWN0aW9uKiBwYykKK2V4dGVybiAiQyIgU2xvd1BhdGhSZXR1
cm5UeXBlIFNMT1dfUEFUSCBuYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJbnN0cnVj
dGlvbiogcGMpCiAgICAgCiAjZGVmaW5lIFNMT1dfUEFUSF9ISURERU5fREVDTChuYW1lKSBcCiBT
TE9XX1BBVEhfREVDTChuYW1lKSBXVEZfSU5URVJOQUwKQEAgLTQwMSw2ICszOTgsNiBAQCBTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV93aXRoX3NwcmVhZCk7CiBTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZXIpOwogU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zcHJlYWQpOwogCi11c2luZyBTbG93UGF0aEZ1bmN0aW9u
ID0gU2xvd1BhdGhSZXR1cm5UeXBlKFNMT1dfUEFUSCAqKShFeGVjU3RhdGUqLCBjb25zdCBJbnN0
cnVjdGlvbiopOwordXNpbmcgU2xvd1BhdGhGdW5jdGlvbiA9IFNsb3dQYXRoUmV0dXJuVHlwZShT
TE9XX1BBVEggKikoQ2FsbEZyYW1lKiwgY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3Bw
CmluZGV4IDkyY2Y4Zjc1ZmU3Zjk3OGIwMjE4YmYxODAyODVhMjExZmJlYmE2OGEuLmVlMDZlZTc4
ZTlkNzViZWUyMWY0MmZiYzU1NjFjZjljNDViOGZjM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCkBAIC01Myw5ICs1Myw5IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBjaGVja1N5bnRheEludGVybmFsKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBQYXJzZXJFCiAgICAgICAgIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBKU1Bh
cnNlclNjcmlwdE1vZGU6OkNsYXNzaWMsIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGUsIFN1
cGVyQmluZGluZzo6Tm90TmVlZGVkLCBlcnJvcik7CiB9CiAKLWJvb2wgY2hlY2tTeW50YXgoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUqIHJldHVybmVk
RXhjZXB0aW9uKQorYm9vbCBjaGVja1N5bnRheChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5h
dG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7
CiAKQEAgLTY0LDcgKzY0LDcgQEAgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGMKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgQVNTRVJUKGVycm9yLmlzVmFsaWQoKSk7CiAgICAgaWYgKHJldHVybmVk
RXhjZXB0aW9uKQotICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2Jq
ZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlKTsKKyAgICAgICAgKnJldHVy
bmVkRXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChnbG9iYWxPYmplY3QsIHNvdXJjZSk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC03NSw5ICs3NSw5IEBAIGJvb2wgY2hlY2tTeW50
YXgoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckVycm9yJiBlcnJvcikK
ICAgICByZXR1cm4gY2hlY2tTeW50YXhJbnRlcm5hbCh2bSwgc291cmNlLCBlcnJvcik7CiB9CiAK
LWJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIFBhcnNlckVycm9yJiBlcnJvcikKK2Jvb2wgY2hlY2tNb2R1bGVTeW50YXgoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJz
ZXJFcnJvciYgZXJyb3IpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIFJF
TEVBU0VfQVNTRVJUKHZtLmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0
b21TdHJpbmdUYWJsZSgpKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlUHJvZ3JhbU5vZGU+
IG1vZHVsZVByb2dyYW1Ob2RlID0gcGFyc2U8TW9kdWxlUHJvZ3JhbU5vZGU+KApAQCAtODcsNyAr
ODcsNyBAQCBib29sIGNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBQcml2YXRlTmFtZSBwcml2YXRlTmFtZShQcml2YXRlTmFtZTo6RGVzY3JpcHRpb24sICJF
bnRyeVBvaW50TW9kdWxlIik7Ci0gICAgTW9kdWxlQW5hbHl6ZXIgbW9kdWxlQW5hbHl6ZXIoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVVpZChwcml2YXRlTmFtZSksIHNvdXJjZSwgbW9kdWxlUHJvZ3Jh
bU5vZGUtPnZhckRlY2xhcmF0aW9ucygpLCBtb2R1bGVQcm9ncmFtTm9kZS0+bGV4aWNhbFZhcmlh
YmxlcygpKTsKKyAgICBNb2R1bGVBbmFseXplciBtb2R1bGVBbmFseXplcihnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21VaWQocHJpdmF0ZU5hbWUpLCBzb3VyY2UsIG1vZHVsZVByb2dyYW1O
b2RlLT52YXJEZWNsYXJhdGlvbnMoKSwgbW9kdWxlUHJvZ3JhbU5vZGUtPmxleGljYWxWYXJpYWJs
ZXMoKSk7CiAgICAgbW9kdWxlQW5hbHl6ZXIuYW5hbHl6ZSgqbW9kdWxlUHJvZ3JhbU5vZGUpOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTMxLDkgKzEzMSw5IEBAIFJlZlB0cjxDYWNoZWRCeXRl
Y29kZT4gZ2VuZXJhdGVNb2R1bGVCeXRlY29kZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwKICAgICByZXR1cm4gc2VyaWFsaXplQnl0ZWNvZGUodm0sIHVubGlua2VkQ29kZUJsb2Nr
LCBzb3VyY2UsIFNvdXJjZUNvZGVUeXBlOjpNb2R1bGVUeXBlLCBzdHJpY3RNb2RlLCBzY3JpcHRN
b2RlLCBmZCwgZXJyb3IsIHsgfSk7CiB9CiAKLUpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0
cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKK0pTVmFsdWUgZXZhbHVhdGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9
PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7CkBAIC0xNDIsOSArMTQyLDkg
QEAgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIE4KICAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291
cmNlKTsKIAogICAgIGlmICghdGhpc1ZhbHVlIHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICB0aGlzVmFsdWUgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOwot
ICAgIEpTT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhp
cyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnBy
ZXRlci0+ZXhlY3V0ZVByb2dyYW0oc291cmNlLCBleGVjLCB0aGlzT2JqKTsKKyAgICAgICAgdGhp
c1ZhbHVlID0gdm0udm1FbnRyeUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpOworICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhpcyhnbG9iYWxP
YmplY3QsIE5vdFN0cmljdE1vZGUpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHZtLmludGVycHJl
dGVyLT5leGVjdXRlUHJvZ3JhbShzb3VyY2UsIGdsb2JhbE9iamVjdCwgdGhpc09iaik7CiAKICAg
ICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBz
Y29wZS5leGNlcHRpb24oKTsKQEAgLTE1NiwyNyArMTU2LDI3IEBAIEpTVmFsdWUgZXZhbHVhdGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBOCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBwcm9maWxlZEV2YWx1YXRl
KEV4ZWNTdGF0ZSogZXhlYywgUHJvZmlsaW5nUmVhc29uIHJlYXNvbiwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJu
ZWRFeGNlcHRpb24pCitKU1ZhbHVlIHByb2ZpbGVkRXZhbHVhdGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvZmlsaW5nUmVhc29uIHJlYXNvbiwgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNl
cHRpb24pCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBTY3JpcHRQcm9maWxpbmdT
Y29wZSBwcm9maWxpbmdTY29wZSh2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLCByZWFzb24p
OwotICAgIHJldHVybiBldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgcmV0dXJuZWRF
eGNlcHRpb24pOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBTY3JpcHRQ
cm9maWxpbmdTY29wZSBwcm9maWxpbmdTY29wZSh2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdCksIHJlYXNvbik7CisgICAgcmV0dXJuIGV2YWx1YXRlKGdsb2JhbE9iamVjdCwgc291
cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKIH0KIAotSlNWYWx1ZSBldmFsdWF0
ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uT2JqZWN0LCBOYWtlZFB0cjxFeGNlcHRpb24+
JiByZXR1cm5lZEV4Y2VwdGlvbikKK0pTVmFsdWUgZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBK
U09iamVjdCogc2NvcGVFeHRlbnNpb25PYmplY3QsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVy
bmVkRXhjZXB0aW9uKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5
R2xvYmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpOwogCiAg
ICAgaWYgKHNjb3BlRXh0ZW5zaW9uT2JqZWN0KSB7Ci0gICAgICAgIEpTU2NvcGUqIGlnbm9yZWRQ
cmV2aW91c1Njb3BlID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpOwotICAgICAgICBnbG9i
YWxPYmplY3QtPnNldEdsb2JhbFNjb3BlRXh0ZW5zaW9uKEpTV2l0aFNjb3BlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgaWdub3JlZFByZXZpb3VzU2NvcGUsIHNjb3BlRXh0ZW5zaW9uT2JqZWN0
KSk7CisgICAgICAgIEpTU2NvcGUqIGlnbm9yZWRQcmV2aW91c1Njb3BlID0gdm1FbnRyeUdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGUoKTsKKyAgICAgICAgdm1FbnRyeUdsb2JhbE9iamVjdC0+c2V0
R2xvYmFsU2NvcGVFeHRlbnNpb24oSlNXaXRoU2NvcGU6OmNyZWF0ZSh2bSwgdm1FbnRyeUdsb2Jh
bE9iamVjdCwgaWdub3JlZFByZXZpb3VzU2NvcGUsIHNjb3BlRXh0ZW5zaW9uT2JqZWN0KSk7CiAg
ICAgfQogCi0gICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwgZ2xvYmFsT2JqZWN0LCByZXR1cm5lZEV4Y2VwdGlv
bik7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUodm1FbnRyeUdsb2Jh
bE9iamVjdCwgc291cmNlLCB2bUVudHJ5R2xvYmFsT2JqZWN0LCByZXR1cm5lZEV4Y2VwdGlvbik7
CiAKICAgICBpZiAoc2NvcGVFeHRlbnNpb25PYmplY3QpCi0gICAgICAgIGdsb2JhbE9iamVjdC0+
Y2xlYXJHbG9iYWxTY29wZUV4dGVuc2lvbigpOworICAgICAgICB2bUVudHJ5R2xvYmFsT2JqZWN0
LT5jbGVhckdsb2JhbFNjb3BlRXh0ZW5zaW9uKCk7CiAKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7
CiB9CkBAIC0xODgsNDMgKzE4OCw0NSBAQCBzdGF0aWMgU3ltYm9sKiBjcmVhdGVTeW1ib2xGb3JF
bnRyeVBvaW50TW9kdWxlKFZNJiB2bSkKICAgICByZXR1cm4gU3ltYm9sOjpjcmVhdGUodm0sIHBy
aXZhdGVOYW1lLnVpZCgpKTsKIH0KIAotc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiByZWplY3RQ
cm9taXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3N0
YXRpYyBKU0ludGVybmFsUHJvbWlzZSogcmVqZWN0UHJvbWlzZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKLSAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQ
cm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIEpTSW50
ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCk7CiAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhj
ZXB0aW9uKCk7Ci0gICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOworICAgIGRl
ZmVycmVkLT5yZWplY3QoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogICAgIHNjb3BlLnJlbGVh
c2VBc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwog
fQogCi1KU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSog
ZXhlYywgU3ltYm9sKiBtb2R1bGVJZCwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlw
dEZldGNoZXIpCitKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN5bWJvbCogbW9kdWxlSWQsIEpTVmFsdWUgcGFyYW1l
dGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6
OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlz
Q29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKIAotICAgIHJldHVybiB2bS52bUVudHJ5
R2xvYmFsT2JqZWN0KGV4ZWMpLT5tb2R1bGVMb2FkZXIoKS0+bG9hZEFuZEV2YWx1YXRlTW9kdWxl
KGV4ZWMsIG1vZHVsZUlkLCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRjaGVyKTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdCA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZ2xv
YmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdm1FbnRyeUdsb2JhbE9iamVjdC0+bW9kdWxlTG9hZGVy
KCktPmxvYWRBbmRFdmFsdWF0ZU1vZHVsZSh2bUVudHJ5R2xvYmFsT2JqZWN0LCBtb2R1bGVJZCwg
cGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7CiB9CiAKLUpTSW50ZXJuYWxQcm9taXNlKiBsb2Fk
QW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5h
bWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQorSlNJbnRlcm5h
bFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1
ZSBzY3JpcHRGZXRjaGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBS
RUxFQVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5h
dG9tU3RyaW5nVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVz
eU9uQ3VycmVudFRocmVhZCgpKTsKIAotICAgIHJldHVybiB2bS52bUVudHJ5R2xvYmFsT2JqZWN0
KGV4ZWMpLT5tb2R1bGVMb2FkZXIoKS0+bG9hZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIGlkZW50
aWZpZXJUb0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG1vZHVsZU5hbWUp
KSwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7CisgICAgSlNHbG9iYWxPYmplY3QqIHZtRW50
cnlHbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCk7Cisg
ICAgcmV0dXJuIHZtRW50cnlHbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5sb2FkQW5kRXZh
bHVhdGVNb2R1bGUodm1FbnRyeUdsb2JhbE9iamVjdCwgaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbW9kdWxlTmFtZSkpLCBwYXJhbWV0ZXJzLCBzY3Jp
cHRGZXRjaGVyKTsKIH0KIAotSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVs
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSBzY3Jp
cHRGZXRjaGVyKQorSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFs
dWUgc2NyaXB0RmV0Y2hlcikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFJFTEVBU0VfQVNTRVJU
KHZtLmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJs
ZSgpKTsKQEAgLTIzMiwyOCArMjM0LDI5IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZh
bHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyCiAKICAg
ICBTeW1ib2wqIGtleSA9IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnRNb2R1bGUodm0pOwogCi0g
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3Qo
ZXhlYyk7CisgICAgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QgPSB2bS52bUVu
dHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAKICAgICAvLyBJbnNlcnQgdGhlIGdpdmVu
IHNvdXJjZSBjb2RlIHRvIHRoZSBNb2R1bGVMb2FkZXIgcmVnaXN0cnkgYXMgdGhlIGZldGNoZWQg
cmVnaXN0cnkgZW50cnkuCi0gICAgZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+cHJvdmlk
ZUZldGNoKGV4ZWMsIGtleSwgc291cmNlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCByZWplY3RQcm9taXNlKGV4ZWMsIGdsb2JhbE9iamVjdCkpOworICAgIHZtRW50cnlHbG9iYWxP
YmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92aWRlRmV0Y2godm1FbnRyeUdsb2JhbE9iamVjdCwg
a2V5LCBzb3VyY2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlamVjdFByb21p
c2UoZ2xvYmFsT2JqZWN0KSk7CiAKLSAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2Fk
ZXIoKS0+bG9hZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIGtleSwganNVbmRlZmluZWQoKSwgc2Ny
aXB0RmV0Y2hlcik7CisgICAgcmV0dXJuIHZtRW50cnlHbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRl
cigpLT5sb2FkQW5kRXZhbHVhdGVNb2R1bGUodm1FbnRyeUdsb2JhbE9iamVjdCwga2V5LCBqc1Vu
ZGVmaW5lZCgpLCBzY3JpcHRGZXRjaGVyKTsKIH0KIAotSlNJbnRlcm5hbFByb21pc2UqIGxvYWRN
b2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUsIEpTVmFsdWUg
cGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQorSlNJbnRlcm5hbFByb21pc2UqIGxv
YWRNb2R1bGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtb2R1
bGVOYW1lLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbVN0
cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAK
LSAgICByZXR1cm4gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+bW9kdWxlTG9hZGVyKCkt
PmxvYWRNb2R1bGUoZXhlYywgaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgbW9kdWxlTmFtZSkpLCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRjaGVyKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdCA9IHZtLnZtRW50cnlHbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdm1FbnRyeUdsb2JhbE9iamVjdC0+bW9k
dWxlTG9hZGVyKCktPmxvYWRNb2R1bGUodm1FbnRyeUdsb2JhbE9iamVjdCwgaWRlbnRpZmllclRv
SlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbW9kdWxlTmFtZSkpLCBwYXJh
bWV0ZXJzLCBzY3JpcHRGZXRjaGVyKTsKIH0KIAotSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1
bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgc2Ny
aXB0RmV0Y2hlcikKK0pTSW50ZXJuYWxQcm9taXNlKiBsb2FkTW9kdWxlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSBzY3JpcHRG
ZXRjaGVyKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbVN0
cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpOwpAQCAt
MjYxLDM1ICsyNjQsMzYgQEAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUKIAogICAgIFN5bWJvbCog
a2V5ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1vZHVsZSh2bSk7CiAKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdCA9IHZtLnZtRW50cnlHbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KTsKIAogICAgIC8vIEluc2VydCB0aGUgZ2l2ZW4gc291cmNlIGNv
ZGUgdG8gdGhlIE1vZHVsZUxvYWRlciByZWdpc3RyeSBhcyB0aGUgZmV0Y2hlZCByZWdpc3RyeSBl
bnRyeS4KICAgICAvLyBGSVhNRTogSW50cm9kdWNlIEpTU291cmNlQ29kZSBvYmplY3QgdG8gd3Jh
cCBhcm91bmQgdGhpcyBzb3VyY2UuCi0gICAgZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+
cHJvdmlkZUZldGNoKGV4ZWMsIGtleSwgc291cmNlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCByZWplY3RQcm9taXNlKGV4ZWMsIGdsb2JhbE9iamVjdCkpOworICAgIHZtRW50cnlH
bG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92aWRlRmV0Y2godm1FbnRyeUdsb2JhbE9i
amVjdCwga2V5LCBzb3VyY2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlamVj
dFByb21pc2UoZ2xvYmFsT2JqZWN0KSk7CiAKLSAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5tb2R1
bGVMb2FkZXIoKS0+bG9hZE1vZHVsZShleGVjLCBrZXksIGpzVW5kZWZpbmVkKCksIHNjcmlwdEZl
dGNoZXIpOworICAgIHJldHVybiB2bUVudHJ5R2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+
bG9hZE1vZHVsZSh2bUVudHJ5R2xvYmFsT2JqZWN0LCBrZXksIGpzVW5kZWZpbmVkKCksIHNjcmlw
dEZldGNoZXIpOwogfQogCi1KU1ZhbHVlIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVy
KQorSlNWYWx1ZSBsaW5rQW5kRXZhbHVhdGVNb2R1bGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIFJFTEVBU0VfQVNTRVJUKHZt
LmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgp
KTsKICAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFk
KCkpOwogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZtLnZtRW50cnlHbG9i
YWxPYmplY3QoZXhlYyk7Ci0gICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+bW9kdWxlTG9hZGVyKCkt
PmxpbmtBbmRFdmFsdWF0ZU1vZHVsZShleGVjLCBpZGVudGlmaWVyVG9KU1ZhbHVlKHZtLCBtb2R1
bGVLZXkpLCBzY3JpcHRGZXRjaGVyKTsKKyAgICBKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2Jh
bE9iamVjdCA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gdm1FbnRyeUdsb2JhbE9iamVjdC0+bW9kdWxlTG9hZGVyKCktPmxpbmtBbmRFdmFsdWF0ZU1v
ZHVsZSh2bUVudHJ5R2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyVG9KU1ZhbHVlKHZtLCBtb2R1bGVL
ZXkpLCBzY3JpcHRGZXRjaGVyKTsKIH0KIAotSlNJbnRlcm5hbFByb21pc2UqIGltcG9ydE1vZHVs
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgSlNWYWx1ZSBw
YXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCitKU0ludGVybmFsUHJvbWlzZSogaW1w
b3J0TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IG1vZHVsZUtleSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0
b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkp
OwogCi0gICAgcmV0dXJuIHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPm1vZHVsZUxvYWRl
cigpLT5yZXF1ZXN0SW1wb3J0TW9kdWxlKGV4ZWMsIG1vZHVsZUtleSwgcGFyYW1ldGVycywgc2Ny
aXB0RmV0Y2hlcik7CisgICAgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QgPSB2
bS52bUVudHJ5R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHZtRW50cnlH
bG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5yZXF1ZXN0SW1wb3J0TW9kdWxlKHZtRW50cnlH
bG9iYWxPYmplY3QsIG1vZHVsZUtleSwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxl
dGlvbi5oCmluZGV4IDIxNmQ2NmRjNzE4Y2IyZmE5NTM2ZDk5ZWI2OTgyZTM4YjZjNmU0MjQuLjc1
ZjUyMWRhODlmMjY4MDExMTM2NDc4MDhjMjkyYjMxZDFiOTFhZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgKQEAgLTM5LDQzICszOSw0MiBAQCBjbGFzcyBT
b3VyY2VDb2RlOwogY2xhc3MgU3ltYm9sOwogY2xhc3MgVk07CiBjbGFzcyBKU0ludGVybmFsUHJv
bWlzZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIAogSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBjaGVja1N5bnRheChWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOwot
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgSlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7Ci1KU19FWFBPUlRfUFJJVkFURSBib29s
IGNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJF
cnJvciYpOworSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVja1N5bnRheChKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKK0pTX0VYUE9S
VF9QUklWQVRFIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
b3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPENh
Y2hlZEJ5dGVjb2RlPiBnZW5lcmF0ZVByb2dyYW1CeXRlY29kZShWTSYsIGNvbnN0IFNvdXJjZUNv
ZGUmLCBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQsIEJ5dGVjb2RlQ2FjaGVFcnJv
ciYpOwogSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPENhY2hlZEJ5dGVjb2RlPiBnZW5lcmF0ZU1v
ZHVsZUJ5dGVjb2RlKFZNJiwgY29uc3QgU291cmNlQ29kZSYsIEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSBmZCwgQnl0ZWNvZGVDYWNoZUVycm9yJik7CiAKLUpTX0VYUE9SVF9QUklWQVRF
IEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7Ci1pbmxp
bmUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZUNvZGUsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgpKQorSlNfRVhQT1JUX1BSSVZB
VEUgSlNWYWx1ZSBldmFsdWF0ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24p
OworaW5saW5lIEpTVmFsdWUgZXZhbHVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgSlNWYWx1ZSB0aGlzVmFsdWUgPSBKU1ZhbHVl
KCkpCiB7CiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiB1bnVzZWQ7Ci0gICAgcmV0dXJuIGV2YWx1
YXRlKGV4ZWMsIHNvdXJjZUNvZGUsIHRoaXNWYWx1ZSwgdW51c2VkKTsKKyAgICByZXR1cm4gZXZh
bHVhdGUoZ2xvYmFsT2JqZWN0LCBzb3VyY2VDb2RlLCB0aGlzVmFsdWUsIHVudXNlZCk7CiB9CiAK
LUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgcHJvZmlsZWRFdmFsdWF0ZShFeGVjU3RhdGUqLCBQ
cm9maWxpbmdSZWFzb24sIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFr
ZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pOwotaW5saW5lIEpTVmFsdWUgcHJv
ZmlsZWRFdmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb2ZpbGluZ1JlYXNvbiByZWFzb24sIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTVmFsdWUgdGhpc1ZhbHVlID0gSlNWYWx1ZSgp
KQorSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBwcm9maWxlZEV2YWx1YXRlKEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvZmlsaW5nUmVhc29uLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSB0aGlzVmFs
dWUsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKK2lubGluZSBKU1Zh
bHVlIHByb2ZpbGVkRXZhbHVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvZmls
aW5nUmVhc29uIHJlYXNvbiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBKU1ZhbHVlKCkpCiB7CiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiB1bnVzZWQ7
Ci0gICAgcmV0dXJuIHByb2ZpbGVkRXZhbHVhdGUoZXhlYywgcmVhc29uLCBzb3VyY2VDb2RlLCB0
aGlzVmFsdWUsIHVudXNlZCk7CisgICAgcmV0dXJuIHByb2ZpbGVkRXZhbHVhdGUoZ2xvYmFsT2Jq
ZWN0LCByZWFzb24sIHNvdXJjZUNvZGUsIHRoaXNWYWx1ZSwgdW51c2VkKTsKIH0KIAotSlNfRVhQ
T1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uLCBOYWtlZFB0cjxF
eGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7CitKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVl
IGV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNl
Q29kZSYsIEpTT2JqZWN0KiBzY29wZUV4dGVuc2lvbiwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0
dXJuZWRFeGNlcHRpb24pOwogCiAvLyBMb2FkIHRoZSBtb2R1bGUgc291cmNlIGFuZCBldmFsdWF0
ZSBpdC4KLUpTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVh
dGVNb2R1bGUoRXhlY1N0YXRlKiwgU3ltYm9sKiBtb2R1bGVJZCwgSlNWYWx1ZSBwYXJhbWV0ZXJz
LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFBy
b21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIG1v
ZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKLUpT
X0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUo
RXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CitK
U19FWFBPUlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxl
KEpTR2xvYmFsT2JqZWN0KiwgU3ltYm9sKiBtb2R1bGVJZCwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBK
U1ZhbHVlIHNjcmlwdEZldGNoZXIpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21p
c2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYg
bW9kdWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwor
SlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVs
ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHNjcmlwdEZldGNo
ZXIpOwogCiAvLyBGZXRjaCB0aGUgbW9kdWxlIHNvdXJjZSwgYW5kIGluc3RhbnRpYXRlIHRoZSBt
b2R1bGUgcmVjb3JkLgotSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRN
b2R1bGUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lLCBKU1ZhbHVlIHBhcmFt
ZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7Ci1KU19FWFBPUlRfUFJJVkFURSBKU0ludGVy
bmFsUHJvbWlzZSogbG9hZE1vZHVsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNW
YWx1ZSBzY3JpcHRGZXRjaGVyKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNl
KiBsb2FkTW9kdWxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lLCBK
U1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CitKU19FWFBPUlRfUFJJ
VkFURSBKU0ludGVybmFsUHJvbWlzZSogbG9hZE1vZHVsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0
IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCiAvLyBMaW5rIGFuZCBldmFs
dWF0ZSB0aGUgYWxyZWFkeSBsaW5rZWQgbW9kdWxlLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBp
biBhIHN5bmMgbWFubmVyLgotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBsaW5rQW5kRXZhbHVh
dGVNb2R1bGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1ZhbHVl
IHNjcmlwdEZldGNoZXIpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBsaW5rQW5kRXZhbHVh
dGVNb2R1bGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpT
VmFsdWUgc2NyaXB0RmV0Y2hlcik7CiAKLUpTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9t
aXNlKiBpbXBvcnRNb2R1bGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5
LCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CitKU19FWFBPUlRf
UFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogaW1wb3J0TW9kdWxlKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUg
c2NyaXB0RmV0Y2hlcik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcAppbmRleCA2MGUzMTI5MTc5NTAxOGE2
YWEyNzEyOTliYTdjMTBiMDM5NjVkOWY2Li5iMzdiZjNiNWU2NmU4YzBiMjRiY2M0YjRlMjU4ZTA1
M2U3ZjgwMTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25z
b2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xl
Q2xpZW50LmNwcApAQCAtMTQ3LDExICsxNDcsMTEgQEAgdm9pZCBDb25zb2xlQ2xpZW50Ojpwcmlu
dENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLAog
ICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBidWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVu
dHMoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBs
ZXZlbCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1l
bnRzKQordm9pZCBDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50
cyhNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxl
dmVsLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxTY3JpcHRBcmd1bWVu
dHM+JiYgYXJndW1lbnRzKQogewogICAgIGJvb2wgaXNUcmFjZU1lc3NhZ2UgPSB0eXBlID09IE1l
c3NhZ2VUeXBlOjpUcmFjZTsKICAgICBzaXplX3Qgc3RhY2tTaXplID0gaXNUcmFjZU1lc3NhZ2Ug
PyBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUgOiAxOwotICAgIFJl
ZjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayA9IGNyZWF0ZVNjcmlwdENhbGxTdGFja0ZvckNv
bnNvbGUoZXhlYywgc3RhY2tTaXplKTsKKyAgICBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3Rh
Y2sgPSBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGb3JDb25zb2xlKGdsb2JhbE9iamVjdCwgc3RhY2tT
aXplKTsKICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RDYWxsZXIgPSBjYWxsU3RhY2st
PmF0KDApOwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwpAQCAtMTY0LDkgKzE2NCw5IEBA
IHZvaWQgQ29uc29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVz
c2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhCiAgICAgYXBwZW5kTWVzc2FnZVByZWZpeChidWlsZGVy
LCBzb3VyY2UsIHR5cGUsIGxldmVsKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3Vt
ZW50cy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAn
KTsKLSAgICAgICAgYXV0byogc3RhdGUgPSBhcmd1bWVudHMtPmdsb2JhbFN0YXRlKCk7Ci0gICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoYXJndW1lbnRzLT5hcmd1bWVudEF0KGkpLnRvV1RGU3RyaW5nKHN0
YXRlKSk7CisgICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGFyZ3VtZW50cy0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9i
amVjdC0+dm0oKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3VtZW50cy0+YXJndW1lbnRB
dChpKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpKTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKICAgICB9CiAKQEAgLTE5Miw2MiArMTkyLDYyIEBAIHZvaWQgQ29uc29sZUNsaWVu
dDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhCiAgICAgfQogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OmludGVybmFsTWVzc2FnZVdp
dGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMsIEFyZ3Vt
ZW50UmVxdWlyZW1lbnQgYXJndW1lbnRSZXF1aXJlbWVudCkKK3ZvaWQgQ29uc29sZUNsaWVudDo6
aW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFNjcmlw
dEFyZ3VtZW50cz4mJiBhcmd1bWVudHMsIEFyZ3VtZW50UmVxdWlyZW1lbnQgYXJndW1lbnRSZXF1
aXJlbWVudCkKIHsKICAgICBpZiAoYXJndW1lbnRSZXF1aXJlbWVudCA9PSBBcmd1bWVudFJlcXVp
cmVkICYmICFhcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwodHlwZSwgbGV2ZWwsIGV4ZWMsIFdURk1vdmUoYXJn
dW1lbnRzKSk7CisgICAgbWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwodHlwZSwgbGV2ZWwsIGdsb2Jh
bE9iamVjdCwgV1RGTW92ZShhcmd1bWVudHMpKTsKIH0KIAotdm9pZCBDb25zb2xlQ2xpZW50Ojps
b2dXaXRoTGV2ZWwoRXhlY1N0YXRlKiBleGVjLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3Vt
ZW50cywgTWVzc2FnZUxldmVsIGxldmVsKQordm9pZCBDb25zb2xlQ2xpZW50Ojpsb2dXaXRoTGV2
ZWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiBh
cmd1bWVudHMsIE1lc3NhZ2VMZXZlbCBsZXZlbCkKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRo
VHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBleGVjLCBXVEZNb3ZlKGFyZ3Vt
ZW50cyksIEFyZ3VtZW50UmVxdWlyZWQpOworICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5k
TGV2ZWwoTWVzc2FnZVR5cGU6OkxvZywgbGV2ZWwsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShhcmd1
bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25zb2xlQ2xpZW50OjpjbGVh
cihFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIENvbnNvbGVDbGllbnQ6OmNsZWFyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZl
bChNZXNzYWdlVHlwZTo6Q2xlYXIsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVjLCBTY3JpcHRBcmd1
bWVudHM6OmNyZWF0ZSgqZXhlYywgeyB9KSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CisgICAgaW50
ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6Q2xlYXIsIE1lc3NhZ2VM
ZXZlbDo6TG9nLCBnbG9iYWxPYmplY3QsIFNjcmlwdEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbE9i
amVjdCwgeyB9KSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVu
dDo6ZGlyKEV4ZWNTdGF0ZSogZXhlYywgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMp
Cit2b2lkIENvbnNvbGVDbGllbnQ6OmRpcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VX
aXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpEaXIsIE1lc3NhZ2VMZXZlbDo6TG9nLCBleGVj
LCBXVEZNb3ZlKGFyZ3VtZW50cyksIEFyZ3VtZW50UmVxdWlyZWQpOworICAgIGludGVybmFsTWVz
c2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkRpciwgTWVzc2FnZUxldmVsOjpMb2cs
IGdsb2JhbE9iamVjdCwgV1RGTW92ZShhcmd1bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsKIH0K
IAotdm9pZCBDb25zb2xlQ2xpZW50OjpkaXJYTUwoRXhlY1N0YXRlKiBleGVjLCBSZWY8U2NyaXB0
QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZUNsaWVudDo6ZGlyWE1MKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRz
KQogewotICAgIGludGVybmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkRp
clhNTCwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSwgQXJndW1l
bnRSZXF1aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdl
VHlwZTo6RGlyWE1MLCBNZXNzYWdlTGV2ZWw6OkxvZywgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGFy
Z3VtZW50cyksIEFyZ3VtZW50UmVxdWlyZWQpOwogfQogCi12b2lkIENvbnNvbGVDbGllbnQ6OnRh
YmxlKEV4ZWNTdGF0ZSogZXhlYywgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCit2
b2lkIENvbnNvbGVDbGllbnQ6OnRhYmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGludGVybmFsTWVzc2FnZVdp
dGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OlRhYmxlLCBNZXNzYWdlTGV2ZWw6OkxvZywgZXhl
YywgV1RGTW92ZShhcmd1bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsKKyAgICBpbnRlcm5hbE1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpUYWJsZSwgTWVzc2FnZUxldmVsOjpM
b2csIGdsb2JhbE9iamVjdCwgV1RGTW92ZShhcmd1bWVudHMpLCBBcmd1bWVudFJlcXVpcmVkKTsK
IH0KIAotdm9pZCBDb25zb2xlQ2xpZW50Ojp0cmFjZShFeGVjU3RhdGUqIGV4ZWMsIFJlZjxTY3Jp
cHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQordm9pZCBDb25zb2xlQ2xpZW50Ojp0cmFjZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50
cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpU
cmFjZSwgTWVzc2FnZUxldmVsOjpMb2csIGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSwgQXJndW1l
bnROb3RSZXF1aXJlZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNz
YWdlVHlwZTo6VHJhY2UsIE1lc3NhZ2VMZXZlbDo6TG9nLCBnbG9iYWxPYmplY3QsIFdURk1vdmUo
YXJndW1lbnRzKSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVu
dDo6YXNzZXJ0aW9uKEV4ZWNTdGF0ZSogZXhlYywgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1
bWVudHMpCit2b2lkIENvbnNvbGVDbGllbnQ6OmFzc2VydGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRl
cm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpBc3NlcnQsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIGV4ZWMsIFdURk1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnROb3RSZXF1aXJl
ZCk7CisgICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6QXNz
ZXJ0LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoYXJndW1lbnRz
KSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CiB9CiAKLXZvaWQgQ29uc29sZUNsaWVudDo6Z3JvdXAo
RXhlY1N0YXRlKiBleGVjLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKK3ZvaWQg
Q29uc29sZUNsaWVudDo6Z3JvdXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFNj
cmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgaW50ZXJuYWxNZXNzYWdlV2l0aFR5
cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6U3RhcnRHcm91cCwgTWVzc2FnZUxldmVsOjpMb2csIGV4
ZWMsIFdURk1vdmUoYXJndW1lbnRzKSwgQXJndW1lbnROb3RSZXF1aXJlZCk7CisgICAgaW50ZXJu
YWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZTo6U3RhcnRHcm91cCwgTWVzc2Fn
ZUxldmVsOjpMb2csIGdsb2JhbE9iamVjdCwgV1RGTW92ZShhcmd1bWVudHMpLCBBcmd1bWVudE5v
dFJlcXVpcmVkKTsKIH0KIAotdm9pZCBDb25zb2xlQ2xpZW50Ojpncm91cENvbGxhcHNlZChFeGVj
U3RhdGUqIGV4ZWMsIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQordm9pZCBDb25z
b2xlQ2xpZW50Ojpncm91cENvbGxhcHNlZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKIHsKLSAgICBpbnRlcm5hbE1lc3NhZ2VX
aXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFydEdyb3VwQ29sbGFwc2VkLCBNZXNzYWdl
TGV2ZWw6OkxvZywgZXhlYywgV1RGTW92ZShhcmd1bWVudHMpLCBBcmd1bWVudE5vdFJlcXVpcmVk
KTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpTdGFy
dEdyb3VwQ29sbGFwc2VkLCBNZXNzYWdlTGV2ZWw6OkxvZywgZ2xvYmFsT2JqZWN0LCBXVEZNb3Zl
KGFyZ3VtZW50cyksIEFyZ3VtZW50Tm90UmVxdWlyZWQpOwogfQogCi12b2lkIENvbnNvbGVDbGll
bnQ6Omdyb3VwRW5kKEV4ZWNTdGF0ZSogZXhlYywgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1
bWVudHMpCit2b2lkIENvbnNvbGVDbGllbnQ6Omdyb3VwRW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewotICAgIGludGVy
bmFsTWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGU6OkVuZEdyb3VwLCBNZXNzYWdl
TGV2ZWw6OkxvZywgZXhlYywgV1RGTW92ZShhcmd1bWVudHMpLCBBcmd1bWVudE5vdFJlcXVpcmVk
KTsKKyAgICBpbnRlcm5hbE1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlOjpFbmRH
cm91cCwgTWVzc2FnZUxldmVsOjpMb2csIGdsb2JhbE9iamVjdCwgV1RGTW92ZShhcmd1bWVudHMp
LCBBcmd1bWVudE5vdFJlcXVpcmVkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmgKaW5kZXggOTgzOGQ5NTI4
M2QwODM3ZjUxNjdmZTkyYjNjZTE0ZTNlYTZhZjZlYi4uZWExZjc5YzE4NGJiYmY5NjRiMzhlZTI3
NDJjMjg4YTQ0ZDVmOGNlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uc29sZUNsaWVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bnNvbGVDbGllbnQuaApAQCAtMzUsNDMgKzM1LDQzIEBAIGNsYXNzIFNjcmlwdEFyZ3VtZW50czsK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDYWxsRnJhbWU7Ci11c2luZyBFeGVjU3RhdGUgPSBD
YWxsRnJhbWU7CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKIAogY2xhc3MgQ29uc29sZUNsaWVudCB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q29uc29sZUNsaWVudCgpIHsgfQogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHJpbnRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
LCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgdXJsLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHByaW50Q29uc29sZU1lc3NhZ2VX
aXRoQXJndW1lbnRzKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpT
Qzo6RXhlY1N0YXRlKiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3Vt
ZW50cyhNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKIAotICAgIHZv
aWQgbG9nV2l0aExldmVsKEV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50
cz4mJiwgTWVzc2FnZUxldmVsKTsKLSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSopOwotICAgIHZv
aWQgZGlyKEV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7Ci0g
ICAgdm9pZCBkaXJYTUwoRXhlY1N0YXRlKiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRz
PiYmKTsKLSAgICB2b2lkIHRhYmxlKEV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFy
Z3VtZW50cz4mJik7Ci0gICAgdm9pZCB0cmFjZShFeGVjU3RhdGUqLCBSZWY8SW5zcGVjdG9yOjpT
Y3JpcHRBcmd1bWVudHM+JiYpOwotICAgIHZvaWQgYXNzZXJ0aW9uKEV4ZWNTdGF0ZSosIFJlZjxJ
bnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7Ci0gICAgdm9pZCBncm91cChFeGVjU3RhdGUq
LCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwotICAgIHZvaWQgZ3JvdXBDb2xs
YXBzZWQoRXhlY1N0YXRlKiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKLSAg
ICB2b2lkIGdyb3VwRW5kKEV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50
cz4mJik7CisgICAgdm9pZCBsb2dXaXRoTGV2ZWwoSlNHbG9iYWxPYmplY3QqLCBSZWY8SW5zcGVj
dG9yOjpTY3JpcHRBcmd1bWVudHM+JiYsIE1lc3NhZ2VMZXZlbCk7CisgICAgdm9pZCBjbGVhcihK
U0dsb2JhbE9iamVjdCopOworICAgIHZvaWQgZGlyKEpTR2xvYmFsT2JqZWN0KiwgUmVmPEluc3Bl
Y3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICB2b2lkIGRpclhNTChKU0dsb2JhbE9iamVj
dCosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CisgICAgdm9pZCB0YWJsZShK
U0dsb2JhbE9iamVjdCosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7CisgICAg
dm9pZCB0cmFjZShKU0dsb2JhbE9iamVjdCosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50
cz4mJik7CisgICAgdm9pZCBhc3NlcnRpb24oSlNHbG9iYWxPYmplY3QqLCBSZWY8SW5zcGVjdG9y
OjpTY3JpcHRBcmd1bWVudHM+JiYpOworICAgIHZvaWQgZ3JvdXAoSlNHbG9iYWxPYmplY3QqLCBS
ZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOworICAgIHZvaWQgZ3JvdXBDb2xsYXBz
ZWQoSlNHbG9iYWxPYmplY3QqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOwor
ICAgIHZvaWQgZ3JvdXBFbmQoSlNHbG9iYWxPYmplY3QqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+JiYpOwogCi0gICAgdmlydHVhbCB2b2lkIG1lc3NhZ2VXaXRoVHlwZUFuZExldmVs
KE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwgUmVmPEluc3BlY3Rv
cjo6U2NyaXB0QXJndW1lbnRzPiYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KEV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYgbGFiZWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnRS
ZXNldChFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHByb2ZpbGUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBwcm9maWxlRW5kKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmIHRpdGxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRpbWUoRXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJiBsYWJlbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0aW1lTG9nKEV4ZWNTdGF0
ZSosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4m
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0aW1lRW5kKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgbGFiZWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdGltZVN0YW1wKEV4ZWNTdGF0ZSosIFJl
ZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmQoRXhlY1N0YXRlKiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZChFeGVjU3RhdGUqLCBSZWY8SW5zcGVjdG9yOjpT
Y3JpcHRBcmd1bWVudHM+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NyZWVuc2hvdChFeGVj
U3RhdGUqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4m
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3VudChKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cmluZyYgbGFiZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY291bnRSZXNldChKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvZmls
ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJvZmlsZUVuZChKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFN0cmluZyYgdGl0bGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGltZShKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGltZUxv
ZyhKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFJlZjxJbnNwZWN0b3I6OlNj
cmlwdEFyZ3VtZW50cz4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0aW1lRW5kKEpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0aW1l
U3RhbXAoSlNHbG9iYWxPYmplY3QqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkKEpTR2xvYmFsT2JqZWN0KiwgUmVmPEluc3Bl
Y3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEVu
ZChKU0dsb2JhbE9iamVjdCosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzY3JlZW5zaG90KEpTR2xvYmFsT2JqZWN0KiwgUmVmPEluc3Bl
Y3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSA9IDA7CiAKIHByaXZhdGU6CiAgICAgZW51bSBBcmd1
bWVudFJlcXVpcmVtZW50IHsgQXJndW1lbnRSZXF1aXJlZCwgQXJndW1lbnROb3RSZXF1aXJlZCB9
OwotICAgIHZvaWQgaW50ZXJuYWxNZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSwg
TWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3Vt
ZW50cz4mJiwgQXJndW1lbnRSZXF1aXJlbWVudCk7CisgICAgdm9pZCBpbnRlcm5hbE1lc3NhZ2VX
aXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYsIEFyZ3VtZW50UmVxdWly
ZW1lbnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCmluZGV4IDZhNzIxMzFmNjI2OTc3NmViMmVh
ZTk2OGNiZGFjNjBhYWYwNzNkZGMuLmNjODBhZjZhYWY3YTU0NzM5OWE5YmE4ZGNjMDdiNDZmZmYz
OTI2YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmpl
Y3QuY3BwCkBAIC0zNCwxNiArMzQsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBT
dHJpbmcgdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMg
U3RyaW5nIHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA8IDEpCisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAg
ICAgcmV0dXJuICJkZWZhdWx0Il9zOwogCi0gICAgYXV0byB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50
KDApOworICAgIGF1dG8gdmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gImRlZmF1bHQiX3M7CiAKLSAgICBy
ZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3Ry
aW5nKGdsb2JhbE9iamVjdCk7CiB9CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RS
VUNUSUJMRShDb25zb2xlT2JqZWN0KTsKQEAgLTExOSw1NSArMTE5LDU1IEBAIHZvaWQgQ29uc29s
ZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJzY3JlZW5z
aG90IiwgY29uc29sZVByb3RvRnVuY1NjcmVlbnNob3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSksIDApOwogfQogCi1zdGF0aWMgU3RyaW5nIHZhbHVlVG9T
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlKQorc3RhdGljIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIHZhbHVlLnRvV1RG
U3RyaW5nKGdsb2JhbE9iamVjdCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjb25zb2xl
TG9nV2l0aExldmVsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBNZXNzYWdlTGV2ZWwgbGV2ZWwpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY29uc29s
ZUxvZ1dpdGhMZXZlbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgTWVzc2FnZUxldmVsIGxldmVsKQogewogICAgIENvbnNvbGVDbGllbnQqIGNsaWVu
dCA9IGdsb2JhbE9iamVjdC0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgY2xpZW50
LT5sb2dXaXRoTGV2ZWwoY2FsbEZyYW1lLCBJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50
cyhjYWxsRnJhbWUsIDApLCBsZXZlbCk7CisgICAgY2xpZW50LT5sb2dXaXRoTGV2ZWwoZ2xvYmFs
T2JqZWN0LCBJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgMCksIGxldmVsKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xl
UHJvdG9GdW5jRGVidWcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGNvbnNvbGVMb2dXaXRoTGV2ZWwoY2FsbEZyYW1lLCBn
bG9iYWxPYmplY3QsIE1lc3NhZ2VMZXZlbDo6RGVidWcpOworICAgIHJldHVybiBjb25zb2xlTG9n
V2l0aExldmVsKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBNZXNzYWdlTGV2ZWw6OkRlYnVnKTsK
IH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVu
Y0Vycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIHJldHVybiBjb25zb2xlTG9nV2l0aExldmVsKGNhbGxGcmFtZSwgZ2xvYmFsT2Jq
ZWN0LCBNZXNzYWdlTGV2ZWw6OkVycm9yKTsKKyAgICByZXR1cm4gY29uc29sZUxvZ1dpdGhMZXZl
bChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgTWVzc2FnZUxldmVsOjpFcnJvcik7CiB9CiAKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNMb2coSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
cmV0dXJuIGNvbnNvbGVMb2dXaXRoTGV2ZWwoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIE1lc3Nh
Z2VMZXZlbDo6TG9nKTsKKyAgICByZXR1cm4gY29uc29sZUxvZ1dpdGhMZXZlbChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgTWVzc2FnZUxldmVsOjpMb2cpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jSW5mbyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gY29uc29s
ZUxvZ1dpdGhMZXZlbChjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgTWVzc2FnZUxldmVsOjpJbmZv
KTsKKyAgICByZXR1cm4gY29uc29sZUxvZ1dpdGhMZXZlbChnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgTWVzc2FnZUxldmVsOjpJbmZvKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1dhcm4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGNvbnNvbGVMb2dXaXRoTGV2
ZWwoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIE1lc3NhZ2VMZXZlbDo6V2FybmluZyk7CisgICAg
cmV0dXJuIGNvbnNvbGVMb2dXaXRoTGV2ZWwoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIE1lc3Nh
Z2VMZXZlbDo6V2FybmluZyk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnNvbGVQcm90b0Z1bmNDbGVhcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnNvbGVQcm90b0Z1bmNDbGVhcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqKQogewogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGdsb2JhbE9iamVjdC0+Y29u
c29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgY2xpZW50LT5jbGVhcihjYWxsRnJhbWUpOwor
ICAgIGNsaWVudC0+Y2xlYXIoZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0xNzcsNyArMTc3LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0RpcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2IKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIGNsaWVudC0+ZGlyKGNhbGxGcmFtZSwgSW5zcGVj
dG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoY2FsbEZyYW1lLCAwKSk7CisgICAgY2xpZW50LT5k
aXIoZ2xvYmFsT2JqZWN0LCBJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgMCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKQEAgLTE4Nyw3ICsxODcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jRGlyWE1MKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YQogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCi0gICAgY2xpZW50LT5kaXJYTUwoY2FsbEZyYW1lLCBJbnNwZWN0b3I6OmNy
ZWF0ZVNjcmlwdEFyZ3VtZW50cyhjYWxsRnJhbWUsIDApKTsKKyAgICBjbGllbnQtPmRpclhNTChn
bG9iYWxPYmplY3QsIEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCAwKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIApAQCAtMTk3LDcgKzE5Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUYWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAg
ICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKLSAgICBjbGllbnQtPnRhYmxlKGNhbGxGcmFtZSwgSW5zcGVjdG9yOjpjcmVhdGVT
Y3JpcHRBcmd1bWVudHMoY2FsbEZyYW1lLCAwKSk7CisgICAgY2xpZW50LT50YWJsZShnbG9iYWxP
YmplY3QsIEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCAwKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIApAQCAtMjA3LDcgKzIwNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnNvbGVQcm90b0Z1bmNUcmFjZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgaWYg
KCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKLSAgICBjbGllbnQtPnRyYWNlKGNhbGxGcmFtZSwgSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRB
cmd1bWVudHMoY2FsbEZyYW1lLCAwKSk7CisgICAgY2xpZW50LT50cmFjZShnbG9iYWxPYmplY3Qs
IEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCAwKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApA
QCAtMjE5LDEzICsyMTksMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc29sZVByb3RvRnVuY0Fzc2VydChKU0dsb2JhbE9iamVjdCogZ2xvYmEKICAgICBpZiAoIWNs
aWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAot
ICAgIGJvb2wgY29uZGl0aW9uID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oY2Fs
bEZyYW1lKTsKKyAgICBib29sIGNvbmRpdGlvbiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9C
b29sZWFuKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoY29uZGl0aW9uKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgY2xpZW50LT5hc3NlcnRpb24oY2Fs
bEZyYW1lLCBJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhjYWxsRnJhbWUsIDEpKTsK
KyAgICBjbGllbnQtPmFzc2VydGlvbihnbG9iYWxPYmplY3QsIEluc3BlY3Rvcjo6Y3JlYXRlU2Ny
aXB0QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCAxKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMjM2LDEwICsyMzYsMTAgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0NvdW50
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIGF1dG8gbGFiZWwgPSB2YWx1
ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgYXV0byBsYWJlbCA9IHZhbHVl
T3JEZWZhdWx0TGFiZWxTdHJpbmcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgY2xpZW50LT5j
b3VudChjYWxsRnJhbWUsIGxhYmVsKTsKKyAgICBjbGllbnQtPmNvdW50KGdsb2JhbE9iamVjdCwg
bGFiZWwpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
QEAgLTI1MCwxMCArMjUwLDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnNvbGVQcm90b0Z1bmNDb3VudFJlc2V0KEpTR2xvYmFsT2JqZWN0KiBnCiAgICAgaWYgKCFj
bGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
LSAgICBhdXRvIGxhYmVsID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhjYWxsRnJhbWUpOwor
ICAgIGF1dG8gbGFiZWwgPSB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAotICAgIGNsaWVudC0+Y291bnRSZXNldChjYWxsRnJhbWUsIGxhYmVsKTsKKyAgICBj
bGllbnQtPmNvdW50UmVzZXQoZ2xvYmFsT2JqZWN0LCBsYWJlbCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMjY3LDE0ICsyNjcsMTQgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGUo
SlNHbG9iYWxPYmplY3QqIGdsb2IKIAogICAgIHNpemVfdCBhcmdzQ291bnQgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAoIWFyZ3NDb3VudCkgewotICAgICAgICBjbGllbnQt
PnByb2ZpbGUoY2FsbEZyYW1lLCBTdHJpbmcoKSk7CisgICAgICAgIGNsaWVudC0+cHJvZmlsZShn
bG9iYWxPYmplY3QsIFN0cmluZygpKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9T
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApKSk7CisgICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2YWx1ZVRvU3RyaW5nV2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAg
Y2xpZW50LT5wcm9maWxlKGNhbGxGcmFtZSwgdGl0bGUpOworICAgIGNsaWVudC0+cHJvZmlsZShn
bG9iYWxPYmplY3QsIHRpdGxlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCkBAIC0yODgsMTQgKzI4OCwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZUVuZChKU0dsb2JhbE9iamVjdCog
ZwogCiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwog
ICAgIGlmICghYXJnc0NvdW50KSB7Ci0gICAgICAgIGNsaWVudC0+cHJvZmlsZUVuZChjYWxsRnJh
bWUsIFN0cmluZygpKTsKKyAgICAgICAgY2xpZW50LT5wcm9maWxlRW5kKGdsb2JhbE9iamVjdCwg
U3RyaW5nKCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIH0KIAotICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKTsKKyAg
ICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBjbGllbnQtPnByb2Zp
bGVFbmQoY2FsbEZyYW1lLCB0aXRsZSk7CisgICAgY2xpZW50LT5wcm9maWxlRW5kKGdsb2JhbE9i
amVjdCwgdGl0bGUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKQEAgLTMwOSwxNCArMzA5LDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUYWtlSGVhcFNuYXBzaG90KEpTR2xvYmFsT2JqCiAKICAg
ICBzaXplX3QgYXJnc0NvdW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYg
KCFhcmdzQ291bnQpIHsKLSAgICAgICAgY2xpZW50LT50YWtlSGVhcFNuYXBzaG90KGNhbGxGcmFt
ZSwgU3RyaW5nKCkpOworICAgICAgICBjbGllbnQtPnRha2VIZWFwU25hcHNob3QoZ2xvYmFsT2Jq
ZWN0LCBTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogCi0gICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2YWx1ZVRvU3RyaW5nV2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkp
OworICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51
bGxDaGVjayhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIGNsaWVudC0+
dGFrZUhlYXBTbmFwc2hvdChjYWxsRnJhbWUsIHRpdGxlKTsKKyAgICBjbGllbnQtPnRha2VIZWFw
U25hcHNob3QoZ2xvYmFsT2JqZWN0LCB0aXRsZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMzI3LDEwICszMjcsMTAgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE8KICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIGF1dG8gbGFiZWwgPSB2YWx1ZU9yRGVmYXVsdExh
YmVsU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgYXV0byBsYWJlbCA9IHZhbHVlT3JEZWZhdWx0TGFi
ZWxTdHJpbmcoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgY2xpZW50LT50aW1lKGNhbGxGcmFt
ZSwgbGFiZWwpOworICAgIGNsaWVudC0+dGltZShnbG9iYWxPYmplY3QsIGxhYmVsKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0zNDEsMTAgKzM0
MSwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9G
dW5jVGltZUxvZyhKU0dsb2JhbE9iamVjdCogZ2xvYgogICAgIGlmICghY2xpZW50KQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgYXV0byBsYWJl
bCA9IHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBhdXRvIGxhYmVs
ID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBj
bGllbnQtPnRpbWVMb2coY2FsbEZyYW1lLCBsYWJlbCwgSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRB
cmd1bWVudHMoY2FsbEZyYW1lLCAxKSk7CisgICAgY2xpZW50LT50aW1lTG9nKGdsb2JhbE9iamVj
dCwgbGFiZWwsIEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCAxKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIApAQCAtMzU1LDEwICszNTUsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWVFbmQoSlNHbG9iYWxPYmplY3QqIGdsb2IKICAg
ICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAotICAgIGF1dG8gbGFiZWwgPSB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGNhbGxG
cmFtZSk7CisgICAgYXV0byBsYWJlbCA9IHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogCi0gICAgY2xpZW50LT50aW1lRW5kKGNhbGxGcmFtZSwgbGFiZWwpOwor
ICAgIGNsaWVudC0+dGltZUVuZChnbG9iYWxPYmplY3QsIGxhYmVsKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0zNjgsNyArMzY4LDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWVTdGFt
cChKU0dsb2JhbE9iamVjdCogZ2wKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIGNsaWVudC0+dGltZVN0YW1wKGNh
bGxGcmFtZSwgSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRBcmd1bWVudHMoY2FsbEZyYW1lLCAwKSk7
CisgICAgY2xpZW50LT50aW1lU3RhbXAoZ2xvYmFsT2JqZWN0LCBJbnNwZWN0b3I6OmNyZWF0ZVNj
cmlwdEFyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgMCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTM3OCw3ICszNzgsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jR3JvdXAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgY2xpZW50LT5ncm91cChjYWxs
RnJhbWUsIEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGNhbGxGcmFtZSwgMCkpOwor
ICAgIGNsaWVudC0+Z3JvdXAoZ2xvYmFsT2JqZWN0LCBJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFy
Z3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgMCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTM4OCw3ICszODgsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jR3JvdXBDb2xsYXBz
ZWQoSlNHbG9iYWxPYmplYwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgY2xpZW50LT5ncm91cENvbGxhcHNlZChj
YWxsRnJhbWUsIEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGNhbGxGcmFtZSwgMCkp
OworICAgIGNsaWVudC0+Z3JvdXBDb2xsYXBzZWQoZ2xvYmFsT2JqZWN0LCBJbnNwZWN0b3I6OmNy
ZWF0ZVNjcmlwdEFyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgMCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTM5OCw3ICszOTgs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5j
R3JvdXBFbmQoSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIGlmICghY2xpZW50KQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgY2xpZW50LT5ncm91
cEVuZChjYWxsRnJhbWUsIEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGNhbGxGcmFt
ZSwgMCkpOworICAgIGNsaWVudC0+Z3JvdXBFbmQoZ2xvYmFsT2JqZWN0LCBJbnNwZWN0b3I6OmNy
ZWF0ZVNjcmlwdEFyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgMCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTQwOCw3ICs0MDgs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5j
UmVjb3JkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYQogICAgIGlmICghY2xpZW50KQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgY2xpZW50LT5yZWNv
cmQoY2FsbEZyYW1lLCBJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhjYWxsRnJhbWUs
IDApKTsKKyAgICBjbGllbnQtPnJlY29yZChnbG9iYWxPYmplY3QsIEluc3BlY3Rvcjo6Y3JlYXRl
U2NyaXB0QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCAwKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtNDE4LDcgKzQxOCw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNSZWNv
cmRFbmQoSlNHbG9iYWxPYmplY3QqIGdsCiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBjbGllbnQtPnJlY29yZEVu
ZChjYWxsRnJhbWUsIEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGNhbGxGcmFtZSwg
MCkpOworICAgIGNsaWVudC0+cmVjb3JkRW5kKGdsb2JhbE9iamVjdCwgSW5zcGVjdG9yOjpjcmVh
dGVTY3JpcHRBcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIDApKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC00MjgsNyArNDI4LDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Nj
cmVlbnNob3QoSlNHbG9iYWxPYmplY3QqIGcKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIGNsaWVudC0+c2NyZWVu
c2hvdChjYWxsRnJhbWUsIEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGNhbGxGcmFt
ZSwgMCkpOworICAgIGNsaWVudC0+c2NyZWVuc2hvdChnbG9iYWxPYmplY3QsIEluc3BlY3Rvcjo6
Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCAwKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAppbmRleCBkOTliYjQ4ODQ0
OWVmMmEyZjY2YTg3N2IzNTUwYmUzNTc2ZmEwNGJmLi41ZDNlODUxMWQ1ZjdiNTY0M2M2NjY5YjI5
MzAyYzQ3ZmJjN2MxNDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25zdHJ1Y3REYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25zdHJ1Y3REYXRhLmNwcApAQCAtMzQsMzQgKzM0LDM0IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1KU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb25zdHJ1Y3Rv
ck9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQor
SlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJv
ck1lc3NhZ2UpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUg
Y29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNvbnN0cnVjdG9yT2JqZWN0LCBj
b25zdHJ1Y3REYXRhKTsKICAgICBpZiAoVU5MSUtFTFkoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1
Y3RUeXBlOjpOb25lKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgZXJy
b3JNZXNzYWdlKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
ZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZXhlYywgY29uc3RydWN0b3JPYmplY3Qs
IGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCBj
b25zdHJ1Y3Rvck9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncywgY29u
c3RydWN0b3JPYmplY3QpKTsKIH0KIAogCi1KU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RU
eXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBh
cmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKK0pTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlw
ZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25z
dCBBcmdMaXN0JiBhcmdzLCBKU1ZhbHVlIG5ld1RhcmdldCkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBBU1NFUlQoY29u
c3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlOjpKUyB8fCBjb25zdHJ1Y3RUeXBlID09IENvbnN0
cnVjdFR5cGU6Okhvc3QpOwotICAgIHJldHVybiB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZUNvbnN0
cnVjdChleGVjLCBhc09iamVjdChjb25zdHJ1Y3Rvck9iamVjdCksIGNvbnN0cnVjdFR5cGUsIGNv
bnN0cnVjdERhdGEsIGFyZ3MsIG5ld1RhcmdldCk7CisgICAgcmV0dXJuIHZtLmludGVycHJldGVy
LT5leGVjdXRlQ29uc3RydWN0KGdsb2JhbE9iamVjdCwgYXNPYmplY3QoY29uc3RydWN0b3JPYmpl
Y3QpLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBuZXdUYXJnZXQpOwogfQog
Ci1KU09iamVjdCogcHJvZmlsZWRDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBQcm9maWxpbmdS
ZWFzb24gcmVhc29uLCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNv
bnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MsIEpTVmFsdWUgbmV3VGFyZ2V0KQorSlNPYmplY3QqIHByb2ZpbGVkQ29uc3Ry
dWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb2ZpbGluZ1JlYXNvbiByZWFzb24s
IEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwg
Y29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncywg
SlNWYWx1ZSBuZXdUYXJnZXQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBTY3Jp
cHRQcm9maWxpbmdTY29wZSBwcm9maWxpbmdTY29wZSh2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4
ZWMpLCByZWFzb24pOwotICAgIHJldHVybiBjb25zdHJ1Y3QoZXhlYywgY29uc3RydWN0b3JPYmpl
Y3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIG5ld1RhcmdldCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFNjcmlwdFByb2ZpbGluZ1Njb3BlIHBy
b2ZpbGluZ1Njb3BlKHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KSwgcmVhc29u
KTsKKyAgICByZXR1cm4gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3Qs
IGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIG5ld1RhcmdldCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uc3RydWN0RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3Ry
dWN0RGF0YS5oCmluZGV4IDk2NzM1ODUxNGIxZDgzMDRlOTJiZGM2OTAzYTRkYzBmYjVlZTQzMTku
LmQwYWUwMGJhMTFkN2NlZTI0ZGZmYWU5MTkxMTk2N2UwMmFhNmVkZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmgKQEAgLTM5LDcgKzM5LDYgQEAg
Y2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgSlNPYmpl
Y3Q7CiBjbGFzcyBKU1Njb3BlOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogCiBlbnVt
IGNsYXNzIENvbnN0cnVjdFR5cGUgOiB1bnNpZ25lZCB7CiAgICAgTm9uZSwKQEAgLTYwLDE5ICs1
OSwxOSBAQCBzdHJ1Y3QgQ29uc3RydWN0RGF0YSB7CiB9OwogCiAvLyBDb252ZW5pZW5jZSB3cmFw
cGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBDYWxsRGF0YSBhbmQgQ2FsbFR5cGUg
dW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCi1KU19FWFBPUlRfUFJJVkFURSBKU09i
amVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0
IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOwotSlNfRVhQT1JUX1BSSVZBVEUg
SlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25z
dHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUg
bmV3VGFyZ2V0KTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiwgY29uc3Qg
Y2hhciogZXJyb3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1
Y3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlLCBj
b25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUgbmV3VGFyZ2V0KTsK
IAotQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25z
dCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorQUxX
QVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlw
ZSwgY29uc3QgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKLSAgICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25z
dHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBjb25zdHJ1Y3Rvck9iamVjdCk7CisgICAg
cmV0dXJuIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1
Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzLCBjb25zdHJ1Y3Rvck9iamVjdCk7CiB9CiAKLUpT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBwcm9maWxlZENvbnN0cnVjdChFeGVjU3RhdGUqLCBQ
cm9maWxpbmdSZWFzb24sIEpTVmFsdWUgY29uc3RydWN0b3IsIENvbnN0cnVjdFR5cGUsIGNvbnN0
IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0JiwgSlNWYWx1ZSBuZXdUYXJnZXQpOworSlNf
RVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHByb2ZpbGVkQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0
KiwgUHJvZmlsaW5nUmVhc29uLCBKU1ZhbHVlIGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RUeXBlLCBj
b25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYsIEpTVmFsdWUgbmV3VGFyZ2V0KTsK
IAotQUxXQVlTX0lOTElORSBKU09iamVjdCogcHJvZmlsZWRDb25zdHJ1Y3QoRXhlY1N0YXRlKiBl
eGVjLCBQcm9maWxpbmdSZWFzb24gcmVhc29uLCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBD
b25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVj
dERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBwcm9m
aWxlZENvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9maWxpbmdSZWFz
b24gcmVhc29uLCBKU1ZhbHVlIGNvbnN0cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0
cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIHByb2ZpbGVkQ29uc3RydWN0KGV4ZWMsIHJlYXNvbiwg
Y29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNv
bnN0cnVjdG9yT2JqZWN0KTsKKyAgICByZXR1cm4gcHJvZmlsZWRDb25zdHJ1Y3QoZ2xvYmFsT2Jq
ZWN0LCByZWFzb24sIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3RE
YXRhLCBhcmdzLCBjb25zdHJ1Y3Rvck9iamVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0
dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRl
ci5jcHAKaW5kZXggNDIwYzVlNzAzODQwYTkyZGMxOGI2NDdjMjBiMDAwYzQ2NzllMmU0NS4uODRi
MTFmYTczOWVjZDAwZmI4YWQ4NTY5MWZhMjAzOGMwNjZhZTlhNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuY3BwCkBAIC0zNSwx
NyArMzUsMTcgQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEN1c3Rv
bUdldHRlclNldHRlcik7CiAKIGNvbnN0IENsYXNzSW5mbyBDdXN0b21HZXR0ZXJTZXR0ZXI6OnNf
aW5mbyA9IHsgIkN1c3RvbUdldHRlclNldHRlciIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoQ3VzdG9tR2V0dGVyU2V0dGVyKSB9OwogCi1ib29sIGNhbGxD
dXN0b21TZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OkN1c3RvbVNl
dHRlciBzZXR0ZXIsIGJvb2wgaXNBY2Nlc3NvciwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpCitib29sIGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpDdXN0b21TZXR0ZXIgc2V0dGVyLCBib29sIGlzQWNjZXNz
b3IsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVChzZXR0
ZXIpOwotICAgIGJvb2wgcmVzdWx0ID0gc2V0dGVyKGV4ZWMsIEpTVmFsdWU6OmVuY29kZSh0aGlz
VmFsdWUpLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKKyAgICBib29sIHJlc3VsdCA9IHNldHRl
cihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKTsKICAgICAvLyBBbHdheXMgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBzZXR0
ZXIgYW5kIGl0IGlzIG9ic2VydmVkIGFzIGFuIGFjY2Vzc29yIHRvIHVzZXJzLgogICAgIGlmIChp
c0FjY2Vzc29yKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1ib29sIGNhbGxDdXN0b21TZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGN1c3RvbUdl
dHRlclNldHRlciwgYm9vbCBpc0FjY2Vzc29yLCBKU09iamVjdCogYmFzZSwgSlNWYWx1ZSB0aGlz
VmFsdWUsIEpTVmFsdWUgdmFsdWUpCitib29sIGNhbGxDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjdXN0b21HZXR0ZXJTZXR0ZXIsIGJvb2wgaXNBY2Nl
c3NvciwgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciA9IGpzQ2FzdDxD
dXN0b21HZXR0ZXJTZXR0ZXIqPihjdXN0b21HZXR0ZXJTZXR0ZXIpLT5zZXR0ZXIoKTsKICAgICAv
LyBSZXR1cm4gZmFsc2Ugc2luY2UgdGhlcmUgaXMgbm8gc2V0dGVyLgpAQCAtNTUsNyArNTUsNyBA
QCBib29sIGNhbGxDdXN0b21TZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGN1c3RvbUdl
dHRlclNldHRlciwgYm9vbCBpc0FjY2VzcwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTgwMTQKICAgICBpZiAoIWlzQWNjZXNzb3IpCiAgICAgICAgIHRo
aXNWYWx1ZSA9IGJhc2U7Ci0gICAgcmV0dXJuIGNhbGxDdXN0b21TZXR0ZXIoZXhlYywgc2V0dGVy
LCBpc0FjY2Vzc29yLCB0aGlzVmFsdWUsIHZhbHVlKTsKKyAgICByZXR1cm4gY2FsbEN1c3RvbVNl
dHRlcihnbG9iYWxPYmplY3QsIHNldHRlciwgaXNBY2Nlc3NvciwgdGhpc1ZhbHVlLCB2YWx1ZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAppbmRleCAyZTQzNmNmMThiMGVjZjM1NjFkNmEy
YTQ2ZjE0ZmZlMDg3ZDQwN2M1Li5iODgzNzYzNzFjNzE4MzQzYzdjZjkzZDc5YTEwMzg5M2YxYWRm
NjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0
ZXJTZXR0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0
ZXJTZXR0ZXIuaApAQCAtNzAsNyArNzAsNyBAQCBjbGFzcyBDdXN0b21HZXR0ZXJTZXR0ZXIgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICBDdXN0b21TZXR0ZXIgbV9zZXR0ZXI7CiB9OwogCi1KU19FWFBP
UlRfUFJJVkFURSBib29sIGNhbGxDdXN0b21TZXR0ZXIoRXhlY1N0YXRlKiwgQ3VzdG9tR2V0dGVy
U2V0dGVyOjpDdXN0b21TZXR0ZXIsIGJvb2wgaXNBY2Nlc3NvciwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUpOwotSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYWxsQ3VzdG9tU2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCBib29sIGlzQWNjZXNzb3IsIEpTT2Jq
ZWN0KiBzbG90QmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUpOworSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBjYWxsQ3VzdG9tU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiwgQ3VzdG9tR2V0dGVy
U2V0dGVyOjpDdXN0b21TZXR0ZXIsIGJvb2wgaXNBY2Nlc3NvciwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUpOworSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYWxsQ3VzdG9tU2V0dGVyKEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBjdXN0b21HZXR0ZXJTZXR0ZXIsIGJvb2wgaXNBY2Nlc3Nvciwg
SlNPYmplY3QqIHNsb3RCYXNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSk7CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0YVZpZXcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
CmluZGV4IDVlMDczZjU0Zjc5MTA4NzM5MjliYWY5ZmQwOTdhNDgzMTBiZjU4YTUuLmFkN2QxZTFl
ZTE4ODM2MGQ3NGNiOGE2OTUzMmI4MmMzMzE4Y2MzZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRhVmlldy5jcHAKQEAgLTQ5LDEwICs0OSwxMCBAQCBSZWY8RGF0YVZpZXc+
IERhdGFWaWV3OjpjcmVhdGUoUmVmUHRyPEFycmF5QnVmZmVyPiYmIGJ1ZmZlcikKICAgICByZXR1
cm4gY3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgMCwgYnl0ZUxlbmd0aCk7CiB9CiAKLUpTQXJyYXlC
dWZmZXJWaWV3KiBEYXRhVmlldzo6d3JhcChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCitKU0FycmF5QnVmZmVyVmlldyogRGF0YVZpZXc6OndyYXAoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgcmV0dXJuIEpTRGF0YVZpZXc6OmNyZWF0ZSgKLSAgICAgICAgZXhlYywgZ2xv
YmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKFR5cGVEYXRhVmlldyksIHBvc3NpYmx5U2hh
cmVkQnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwKKyAgICAgICAgbGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKFR5cGVEYXRhVmlldyksIHBvc3NpYmx5
U2hhcmVkQnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwKICAgICAgICAgYnl0ZUxlbmd0aCgpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKaW5kZXggMjJhMjNmZGJi
OGM2MjY0Y2IwOGNjYzgzZGEwMzk2ZmMxZTVjMmZkNi4uNGQxNmE1YjU2YjFjMzlkZjQ1MGEyZTBh
NjFiNWI0NGE0ZWJiOGMzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0YVZpZXcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmll
dy5oCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVy
VmlldyB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7CiAgICAgfQogCi0gICAgSlNBcnJh
eUJ1ZmZlclZpZXcqIHdyYXAoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZTsK
KyAgICBKU0FycmF5QnVmZmVyVmlldyogd3JhcChKU0dsb2JhbE9iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0Kikgb3ZlcnJpZGU7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUIGdl
dCh1bnNpZ25lZCBvZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBib29sKiBzdGF0dXMgPSAwKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAK
aW5kZXggZjBjNWIyMDk5OWRjNGUxMWI1YTA2ZWEyODRiNDUyMGUxZTNjNWU0Zi4uOWQ3ZjEwNGJi
YmQxNTU0MTJiZGQwYTI4MzFiYmFkMTI2NGQ2NDhhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCkBAIC04NCw5ICs4NCw5IEBAIHZv
aWQgRGF0ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIERhdGVQcm90b3R5cGUq
IGRhdGVQcm90b3R5cGUpCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoNyksIFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiB9CiAKLXN0YXRpYyBkb3VibGUg
bWlsbGlzZWNvbmRzRnJvbUNvbXBvbmVudHMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzLCBXVEY6OlRpbWVUeXBlIHRpbWVUeXBlKQorc3RhdGljIGRvdWJsZSBtaWxsaXNlY29u
ZHNGcm9tQ29tcG9uZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdM
aXN0JiBhcmdzLCBXVEY6OlRpbWVUeXBlIHRpbWVUeXBlKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIEluaXRpYWxpemUgZG91YmxlQXJn
dW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMuCkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyBkb3Vi
bGUgbWlsbGlzZWNvbmRzRnJvbUNvbXBvbmVudHMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzLCBXCiAgICAgfTsKICAgICB1bnNpZ25lZCBudW1iZXJPZlVzZWRBcmd1bWVudHMg
PSBzdGQ6Om1heChzdGQ6Om1pbjx1bnNpZ25lZD4oN1UsIGFyZ3Muc2l6ZSgpKSwgMVUpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlVzZWRBcmd1bWVudHM7ICsraSkgewot
ICAgICAgICBkb3VibGVBcmd1bWVudHNbaV0gPSBhcmdzLmF0KGkpLnRvTnVtYmVyKGV4ZWMpOwor
ICAgICAgICBkb3VibGVBcmd1bWVudHNbaV0gPSBhcmdzLmF0KGkpLnRvTnVtYmVyKGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIH0KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZVc2VkQXJndW1lbnRzOyArK2kpIHsK
QEAgLTExNiw5ICsxMTYsOSBAQCBzdGF0aWMgZG91YmxlIG1pbGxpc2Vjb25kc0Zyb21Db21wb25l
bnRzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgVwogfQogCiAvLyBFQ01B
IDE1LjkuMwotSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYg
YXJncykKK0pTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpbnQgbnVtQXJncyA9IGFy
Z3Muc2l6ZSgpOwogCkBAIC0xMzEsMjEgKzEzMSwyMSBAQCBKU09iamVjdCogY29uc3RydWN0RGF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
bgogICAgICAgICBpZiAoYXV0byogZGF0ZUluc3RhbmNlID0ganNEeW5hbWljQ2FzdDxEYXRlSW5z
dGFuY2UqPih2bSwgYXJnMCkpCiAgICAgICAgICAgICB2YWx1ZSA9IGRhdGVJbnN0YW5jZS0+aW50
ZXJuYWxOdW1iZXIoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHByaW1p
dGl2ZSA9IGFyZzAudG9QcmltaXRpdmUoZXhlYyk7CisgICAgICAgICAgICBKU1ZhbHVlIHByaW1p
dGl2ZSA9IGFyZzAudG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2
ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByaW1pdGl2ZVN0cmluZyA9
IGFzU3RyaW5nKHByaW1pdGl2ZSktPnZhbHVlKGV4ZWMpOworICAgICAgICAgICAgICAgIFN0cmlu
ZyBwcmltaXRpdmVTdHJpbmcgPSBhc1N0cmluZyhwcmltaXRpdmUpLT52YWx1ZShnbG9iYWxPYmpl
Y3QpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OwotICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VEYXRlKGV4ZWMsIHZtLCBwcmltaXRpdmVT
dHJpbmcpOworICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VEYXRlKGdsb2JhbE9iamVjdCwg
dm0sIHByaW1pdGl2ZVN0cmluZyk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9IHByaW1pdGl2ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
IHByaW1pdGl2ZS50b051bWJlcihnbG9iYWxPYmplY3QpOwogICAgICAgICB9CiAgICAgfSBlbHNl
Ci0gICAgICAgIHZhbHVlID0gbWlsbGlzZWNvbmRzRnJvbUNvbXBvbmVudHMoZXhlYywgYXJncywg
V1RGOjpMb2NhbFRpbWUpOworICAgICAgICB2YWx1ZSA9IG1pbGxpc2Vjb25kc0Zyb21Db21wb25l
bnRzKGdsb2JhbE9iamVjdCwgYXJncywgV1RGOjpMb2NhbFRpbWUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgU3RydWN0dXJlKiBkYXRlU3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgbmV3VGFy
Z2V0LCBnbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSk7CisgICAgU3RydWN0dXJlKiBkYXRl
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmRhdGVDb25zdHJ1Y3RvcigpLCBuZXdUYXJnZXQsIGds
b2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKIAogICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZSh2bSwgZGF0
ZVN0cnVjdHVyZSwgdmFsdWUpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1
Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBuCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRo
RGF0ZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewogICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RGF0ZShjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT5uZXdUYXJnZXQoKSwgYXJncykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y29uc3RydWN0RGF0ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGFyZ3Mp
KTsKIH0KIAogLy8gRUNNQSAxNS45LjIKQEAgLTE3MCw5ICsxNzAsOSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBTdHJpbmcgZGF0ZVN0ciA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcg
ZGF0ZVN0ciA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJz
ZURhdGUoY2FsbEZyYW1lLCB2bSwgZGF0ZVN0cikpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocGFyc2VEYXRlKGdsb2JhbE9iamVjdCwg
dm0sIGRhdGVTdHIpKSkpOwogfQogCiBKU1ZhbHVlIGRhdGVOb3dJbXBsKCkKQEAgLTE4NSw5ICsx
ODUsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVOb3coSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoanND
dXJyZW50VGltZSgpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVVU
QyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlVVRDKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIGRvdWJsZSBtcyA9IG1pbGxpc2Vjb25kc0Zyb21Db21w
b25lbnRzKGNhbGxGcmFtZSwgQXJnTGlzdChjYWxsRnJhbWUpLCBXVEY6OlVUQ1RpbWUpOworICAg
IGRvdWJsZSBtcyA9IG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzKGdsb2JhbE9iamVjdCwgQXJn
TGlzdChjYWxsRnJhbWUpLCBXVEY6OlVUQ1RpbWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIodGltZUNsaXAobXMpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgKaW5kZXggYmVjNDBhNWMzMDhmODI5OTQ3YjI2
NWRmODQ3NDMxMmEzOTUyMjg5OC4uOTJmZDEzNmEyYzRjZjVkMTc1NzU4NjgzNGMwNjNhYTBhN2Zj
NmRkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0
cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVj
dG9yLmgKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgRGF0ZUNvbnN0cnVjdG9yIGZpbmFsIDogcHVi
bGljIEludGVybmFsRnVuY3Rpb24gewogICAgIERhdGVDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVy
ZSopOwogfTsKIAotSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYpOworSlNPYmplY3QqIGNv
bnN0cnVjdERhdGUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJn
TGlzdCYpOwogSlNWYWx1ZSBkYXRlTm93SW1wbCgpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwCmluZGV4IDll
MmRkMjA0N2ViOTYyNTA3NmM0NGQzNTlmNGNmOTA0YzY0NWY1ZWEuLjdiNGU0NWNlYTQxOTlhMTg3
MjM3OTE0MWNkNWUyMmUxNzZkMzRlNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUluc3RhbmNlLmNwcApAQCAtNTcsMTMgKzU3LDEzIEBAIHZvaWQgRGF0ZUluc3Rh
bmNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2Uq
PihjZWxsKS0+RGF0ZUluc3RhbmNlOjp+RGF0ZUluc3RhbmNlKCk7CiB9CiAKLWNvbnN0IEdyZWdv
cmlhbkRhdGVUaW1lKiBEYXRlSW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1lKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKK2NvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBEYXRlSW5zdGFu
Y2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpIGNvbnN0CiB7CiAgICAgZG91YmxlIG1pbGxpID0gaW50ZXJuYWxOdW1iZXIoKTsKICAgICBp
ZiAoc3RkOjppc25hbihtaWxsaSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgaWYgKCFt
X2RhdGEpCiAgICAgICAgIG1fZGF0YSA9IHZtLmRhdGVJbnN0YW5jZUNhY2hlLmFkZChtaWxsaSk7
CiAKQEAgLTc0LDEzICs3NCwxMyBAQCBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogRGF0ZUluc3Rh
bmNlOjpjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZShFeGVjU3RhdGUqIGV4ZQogICAgIHJldHVy
biAmbV9kYXRhLT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVUaW1lOwogfQogCi1jb25zdCBHcmVnb3Jp
YW5EYXRlVGltZSogRGF0ZUluc3RhbmNlOjpjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZVVUQyhF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0Citjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogRGF0ZUluc3Rh
bmNlOjpjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZVVUQyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KSBjb25zdAogewogICAgIGRvdWJsZSBtaWxsaSA9IGludGVybmFsTnVtYmVyKCk7CiAg
ICAgaWYgKHN0ZDo6aXNuYW4obWlsbGkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlm
ICghbV9kYXRhKQogICAgICAgICBtX2RhdGEgPSB2bS5kYXRlSW5zdGFuY2VDYWNoZS5hZGQobWls
bGkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5z
dGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCmlu
ZGV4IGNhZDc0OGQxZTkxN2ZhYmU5MzU2YmRmNTE2ZTk2ZTk0NGMwOGQ1MTcuLjM1NzhhYjgyYTQ2
NTM2MDFjMDlkODBkZDA0NTQ0NWViODA0MjljNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCkBAIC01NCwxOCArNTQsMTggQEAgY2xhc3MgRGF0ZUlu
c3RhbmNlIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIAogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFu
RGF0ZVRpbWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVU
aW1lKiBncmVnb3JpYW5EYXRlVGltZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKG1fZGF0YSAmJiBtX2RhdGEtPm1fZ3JlZ29yaWFuRGF0ZVRp
bWVDYWNoZWRGb3JNUyA9PSBpbnRlcm5hbE51bWJlcigpKQogICAgICAgICAgICAgcmV0dXJuICZt
X2RhdGEtPm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWU7Ci0gICAgICAgIHJldHVybiBjYWxjdWxh
dGVHcmVnb3JpYW5EYXRlVGltZShleGVjKTsKKyAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUdyZWdv
cmlhbkRhdGVUaW1lKGdsb2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgY29uc3QgR3JlZ29yaWFu
RGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lVVRDKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAg
ICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWVVVEMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2RhdGEgJiYg
bV9kYXRhLT5tX2dyZWdvcmlhbkRhdGVUaW1lVVRDQ2FjaGVkRm9yTVMgPT0gaW50ZXJuYWxOdW1i
ZXIoKSkKICAgICAgICAgICAgIHJldHVybiAmbV9kYXRhLT5tX2NhY2hlZEdyZWdvcmlhbkRhdGVU
aW1lVVRDOwotICAgICAgICByZXR1cm4gY2FsY3VsYXRlR3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhl
Yyk7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZVVUQyhnbG9iYWxP
YmplY3QpOwogICAgIH0KIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpA
QCAtNzQsOCArNzQsOCBAQCBjbGFzcyBEYXRlSW5zdGFuY2UgZmluYWwgOiBwdWJsaWMgSlNEZXN0
cnVjdGlibGVPYmplY3QgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogY2FsY3VsYXRlR3JlZ29yaWFuRGF0ZVRpbWUoRXhl
Y1N0YXRlKikgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgR3JlZ29yaWFuRGF0
ZVRpbWUqIGNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1lVVRDKEV4ZWNTdGF0ZSopIGNvbnN0Owor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBjYWxjdWxhdGVH
cmVnb3JpYW5EYXRlVGltZShKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGlt
ZVVUQyhKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgZG91YmxlIG1faW50ZXJuYWxOdW1i
ZXIgeyBQTmFOIH07CiAgICAgbXV0YWJsZSBSZWZQdHI8RGF0ZUluc3RhbmNlRGF0YT4gbV9kYXRh
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcApp
bmRleCA5MTc3MTZkMWUxNjgwODg5NzI1ZTM1NWEyMzdmNTFlZjA2OWRiZGZmLi4yMzllOTMyZWVk
YzRmYWQ1MDdiZWExODM0ZjdkNDk3NWU2OWYxMmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcApAQCAtMTQyLDI1ICsxNDIsMjUgQEAgc3Rh
dGljIENGRGF0ZUZvcm1hdHRlclN0eWxlIHN0eWxlRnJvbUFyZ1N0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgQ0ZEYXRlRm9ybWEKICAgICByZXR1cm4gZGVmYXVsdFN0eWxlOwogfQogCi1zdGF0
aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSogZXhlYywgRGF0ZUluc3RhbmNl
KiwgZG91YmxlIHRpbWVJbk1pbGxpc2Vjb25kcywgTG9jYWxlRGF0ZVRpbWVGb3JtYXQgZm9ybWF0
KQorc3RhdGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRGF0ZUluc3RhbmNlKiwgZG91YmxlIHRpbWVJ
bk1pbGxpc2Vjb25kcywgTG9jYWxlRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENG
RGF0ZUZvcm1hdHRlclN0eWxlIGRhdGVTdHlsZSA9IChmb3JtYXQgIT0gTG9jYWxlVGltZSA/IGtD
RkRhdGVGb3JtYXR0ZXJMb25nU3R5bGUgOiBrQ0ZEYXRlRm9ybWF0dGVyTm9TdHlsZSk7CiAgICAg
Q0ZEYXRlRm9ybWF0dGVyU3R5bGUgdGltZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVEYXRlID8g
a0NGRGF0ZUZvcm1hdHRlckxvbmdTdHlsZSA6IGtDRkRhdGVGb3JtYXR0ZXJOb1N0eWxlKTsKIAog
ICAgIGJvb2wgdXNlQ3VzdG9tRm9ybWF0ID0gZmFsc2U7CiAgICAgU3RyaW5nIGN1c3RvbUZvcm1h
dFN0cmluZzsKIAotICAgIFN0cmluZyBhcmcwU3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGFyZzBTdHJpbmcgPT0gImN1c3RvbSIgJiYgIWV4ZWMt
PmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICBTdHJpbmcgYXJnMFN0cmluZyA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
YXJnMFN0cmluZyA9PSAiY3VzdG9tIiAmJiAhY2FsbEZyYW1lLT5hcmd1bWVudCgxKS5pc1VuZGVm
aW5lZCgpKSB7CiAgICAgICAgIHVzZUN1c3RvbUZvcm1hdCA9IHRydWU7Ci0gICAgICAgIGN1c3Rv
bUZvcm1hdFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAg
IH0gZWxzZSBpZiAoZm9ybWF0ID09IExvY2FsZURhdGVBbmRUaW1lICYmICFleGVjLT5hcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGN1c3RvbUZvcm1hdFN0cmluZyA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICB9IGVsc2Ug
aWYgKGZvcm1hdCA9PSBMb2NhbGVEYXRlQW5kVGltZSAmJiAhY2FsbEZyYW1lLT5hcmd1bWVudCgx
KS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGRhdGVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmlu
ZyhhcmcwU3RyaW5nLCBkYXRlU3R5bGUpOwotICAgICAgICB0aW1lU3R5bGUgPSBzdHlsZUZyb21B
cmdTdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZXhlYyksIHRpbWVTdHlsZSk7
Ci0gICAgfSBlbHNlIGlmIChmb3JtYXQgIT0gTG9jYWxlVGltZSAmJiAhZXhlYy0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgdGltZVN0eWxlID0gc3R5bGVGcm9tQXJnU3RyaW5n
KGNhbGxGcmFtZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KSwgdGltZVN0
eWxlKTsKKyAgICB9IGVsc2UgaWYgKGZvcm1hdCAhPSBMb2NhbGVUaW1lICYmICFjYWxsRnJhbWUt
PmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIGRhdGVTdHlsZSA9IHN0eWxlRnJv
bUFyZ1N0cmluZyhhcmcwU3RyaW5nLCBkYXRlU3R5bGUpOwotICAgIGVsc2UgaWYgKGZvcm1hdCAh
PSBMb2NhbGVEYXRlICYmICFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKQorICAgIGVs
c2UgaWYgKGZvcm1hdCAhPSBMb2NhbGVEYXRlICYmICFjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkpCiAgICAgICAgIHRpbWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcw
U3RyaW5nLCB0aW1lU3R5bGUpOwogCiAgICAgQ0ZBYnNvbHV0ZVRpbWUgYWJzb2x1dGVUaW1lID0g
Zmxvb3IodGltZUluTWlsbGlzZWNvbmRzIC8gbXNQZXJTZWNvbmQpIC0ga0NGQWJzb2x1dGVUaW1l
SW50ZXJ2YWxTaW5jZTE5NzA7CkBAIC0xNzMsOSArMTczLDkgQEAgc3RhdGljIEpTQ2VsbCogZm9y
bWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVJbnN0YW5jZSosIGRvdWJsZSB0aW1l
SW5NaWwKIAogI2VsaWYgIVVDT05GSUdfTk9fRk9STUFUVElORwogCi1zdGF0aWMgSlNDZWxsKiBm
b3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSogZXhlYywgRGF0ZUluc3RhbmNlKiwgZG91YmxlIHRp
bWVJbk1pbGxpc2Vjb25kcywgTG9jYWxlRGF0ZVRpbWVGb3JtYXQgZm9ybWF0KQorc3RhdGljIEpT
Q2VsbCogZm9ybWF0TG9jYWxlRGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqLCBEYXRlSW5zdGFuY2UqLCBkb3VibGUgdGltZUluTWlsbGlzZWNvbmRzLCBMb2NhbGVE
YXRlVGltZUZvcm1hdCBmb3JtYXQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgVURhdGVGb3JtYXRTdHlsZSB0aW1lU3R5
bGUgPSAoZm9ybWF0ICE9IExvY2FsZURhdGUgPyBVREFUX0xPTkcgOiBVREFUX05PTkUpOwogICAg
IFVEYXRlRm9ybWF0U3R5bGUgZGF0ZVN0eWxlID0gKGZvcm1hdCAhPSBMb2NhbGVUaW1lID8gVURB
VF9MT05HIDogVURBVF9OT05FKTsKIApAQCAtMTk2LDkgKzE5Niw5IEBAIHN0YXRpYyBKU0NlbGwq
IGZvcm1hdExvY2FsZURhdGUoRXhlY1N0YXRlKiBleGVjLCBEYXRlSW5zdGFuY2UqLCBkb3VibGUg
dGltZUluTWlsCiAKICNlbHNlCiAKLXN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSYgZ2R0LCBMb2NhbGVEYXRlVGlt
ZUZvcm1hdCBmb3JtYXQpCitzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBHcmVnb3Jp
YW5EYXRlVGltZSYgZ2R0LCBMb2NhbGVEYXRlVGltZUZvcm1hdCBmb3JtYXQpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAjaWYg
T1MoV0lORE9XUykKICAgICBTWVNURU1USU1FIHN5c3RlbVRpbWU7CiAgICAgbWVtc2V0KCZzeXN0
ZW1UaW1lLCAwLCBzaXplb2Yoc3lzdGVtVGltZSkpOwpAQCAtMzEwLDI5ICszMTAsMjkgQEAgc3Rh
dGljIEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEdyZWdv
cmlhbkRhdGVUaW1lJiBnZHQsIEwKICNlbmRpZiAvLyBPUyhXSU5ET1dTKQogfQogCi1zdGF0aWMg
SlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0ZSogZXhlYywgRGF0ZUluc3RhbmNlKiBk
YXRlT2JqZWN0LCBkb3VibGUsIExvY2FsZURhdGVUaW1lRm9ybWF0IGZvcm1hdCkKK3N0YXRpYyBK
U0NlbGwqIGZvcm1hdExvY2FsZURhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIERhdGVJbnN0YW5jZSogZGF0ZU9iamVjdCwgZG91YmxlLCBMb2Nh
bGVEYXRlVGltZUZvcm1hdCBmb3JtYXQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlT2JqZWN0
LT5ncmVnb3JpYW5EYXRlVGltZShleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0
ZU9iamVjdC0+Z3JlZ29yaWFuRGF0ZVRpbWUoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIWdyZWdv
cmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAiSW52
YWxpZCBEYXRlIl9zKTsKLSAgICByZXR1cm4gZm9ybWF0TG9jYWxlRGF0ZShleGVjLCAqZ3JlZ29y
aWFuRGF0ZVRpbWUsIGZvcm1hdCk7CisgICAgcmV0dXJuIGZvcm1hdExvY2FsZURhdGUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsICpncmVnb3JpYW5EYXRlVGltZSwgZm9ybWF0KTsKIH0KIAogI2Vu
ZGlmIC8vIE9TKERBUldJTikgJiYgVVNFKENGKQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgZm9y
bWF0ZURhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVUaW1lRm9ybWF0IGZvcm1hdCwg
Ym9vbCBhc1VUQ1ZhcmlhbnQpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZm9ybWF0ZURhdGVJbnN0
YW5jZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
RGF0ZVRpbWVGb3JtYXQgZm9ybWF0LCBib29sIGFzVVRDVmFyaWFudCkKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCk7CiAgICAgYXV0byogdGhpc0RhdGVPYmogPSBqc0R5bmFtaWNDYXN0PERhdGVJ
bnN0YW5jZSo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmop
KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgY29u
c3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gYXNVVENWYXJpYW50Ci0g
ICAgICAgID8gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGV4ZWMpCi0gICAgICAg
IDogdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOworICAgICAgICA/IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhnbG9iYWxPYmplY3QpCisgICAgICAgIDogdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKCFncmVn
b3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZp
YWxTdHJpbmcodm0sIFN0cmluZygiSW52YWxpZCBEYXRlIl9zKSkpOwogCkBAIC0zNDMsMTUgKzM0
MywxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZm9ybWF0ZURhdGVJbnN0YW5jZShFeGVjU3Rh
dGUqIGV4ZWMsIERhdGVUaW1lRm9ybWF0IGZvcm1hdAogLy8gbXMgKHJlcHJlc2VudGluZyBtaWxs
aXNlY29uZHMpIGFuZCB0IChyZXByZXNlbnRpbmcgdGhlIHJlc3Qgb2YgdGhlIGRhdGUgc3RydWN0
dXJlKSBhcHByb3ByaWF0ZWx5LgogLy8KIC8vIEZvcm1hdCBvZiBtZW1iZXIgZnVuY3Rpb246IGYo
W2hvdXIsXSBbbWluLF0gW3NlYyxdIFttc10pCi1zdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1Vz
aW5nVGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbWF4QXJncywgZG91YmxlKiBtcywgR3Jl
Z29yaWFuRGF0ZVRpbWUqIHQpCitzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFy
Z3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGlu
dCBtYXhBcmdzLCBkb3VibGUqIG1zLCBHcmVnb3JpYW5EYXRlVGltZSogdCkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBkb3VibGUgbWlsbGlz
ZWNvbmRzID0gMDsKICAgICBib29sIG9rID0gdHJ1ZTsKICAgICBpbnQgaWR4ID0gMDsKLSAgICBp
bnQgbnVtQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBpbnQgbnVtQXJncyA9IGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwogICAgIAogICAgIC8vIEpTIGFsbG93cyBleHRyYSB0
cmFpbGluZyBhcmd1bWVudHMgLS0gaWdub3JlIHRoZW0KICAgICBpZiAobnVtQXJncyA+IG1heEFy
Z3MpCkBAIC0zNjAsNyArMzYwLDcgQEAgc3RhdGljIGJvb2wgZmlsbFN0cnVjdHVyZXNVc2luZ1Rp
bWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50IG1heEFyZ3MsIGRvdWJsZSogbXMKICAgICAvLyBo
b3VycwogICAgIGlmIChtYXhBcmdzID49IDQgJiYgaWR4IDwgbnVtQXJncykgewogICAgICAgICB0
LT5zZXRIb3VyKDApOwotICAgICAgICBkb3VibGUgaG91cnMgPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudChpZHgrKykudG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7CisgICAgICAgIGRvdWJsZSBo
b3VycyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaWR4KyspLnRvSW50ZWdlclByZXNl
cnZlTmFOKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGZhbHNlKTsKICAgICAgICAgb2sgPSBzdGQ6OmlzZmluaXRlKGhvdXJzKTsKICAgICAgICAgbWls
bGlzZWNvbmRzICs9IGhvdXJzICogbXNQZXJIb3VyOwpAQCAtMzY5LDcgKzM2OSw3IEBAIHN0YXRp
YyBib29sIGZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludCBt
YXhBcmdzLCBkb3VibGUqIG1zCiAgICAgLy8gbWludXRlcwogICAgIGlmIChtYXhBcmdzID49IDMg
JiYgaWR4IDwgbnVtQXJncyAmJiBvaykgewogICAgICAgICB0LT5zZXRNaW51dGUoMCk7Ci0gICAg
ICAgIGRvdWJsZSBtaW51dGVzID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaWR4KyspLnRvSW50
ZWdlclByZXNlcnZlTmFOKGV4ZWMpOworICAgICAgICBkb3VibGUgbWludXRlcyA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoaWR4KyspLnRvSW50ZWdlclByZXNlcnZlTmFOKGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgb2sgPSBzdGQ6OmlzZmluaXRlKG1pbnV0ZXMpOwogICAgICAgICBtaWxsaXNlY29uZHMgKz0g
bWludXRlcyAqIG1zUGVyTWludXRlOwpAQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRpYyBib29sIGZp
bGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludCBtYXhBcmdzLCBk
b3VibGUqIG1zCiAgICAgLy8gc2Vjb25kcwogICAgIGlmIChtYXhBcmdzID49IDIgJiYgaWR4IDwg
bnVtQXJncyAmJiBvaykgewogICAgICAgICB0LT5zZXRTZWNvbmQoMCk7Ci0gICAgICAgIGRvdWJs
ZSBzZWNvbmRzID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaWR4KyspLnRvSW50ZWdlclByZXNl
cnZlTmFOKGV4ZWMpOworICAgICAgICBkb3VibGUgc2Vjb25kcyA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoaWR4KyspLnRvSW50ZWdlclByZXNlcnZlTmFOKGdsb2JhbE9iamVjdCk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgb2sgPSBz
dGQ6OmlzZmluaXRlKHNlY29uZHMpOwogICAgICAgICBtaWxsaXNlY29uZHMgKz0gc2Vjb25kcyAq
IG1zUGVyU2Vjb25kOwpAQCAtMzg5LDcgKzM4OSw3IEBAIHN0YXRpYyBib29sIGZpbGxTdHJ1Y3R1
cmVzVXNpbmdUaW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGludCBtYXhBcmdzLCBkb3VibGUqIG1z
CiAgICAgICAgIAogICAgIC8vIG1pbGxpc2Vjb25kcwogICAgIGlmIChpZHggPCBudW1BcmdzKSB7
Ci0gICAgICAgIGRvdWJsZSBtaWxsaXMgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpZHgpLnRv
SW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOworICAgICAgICBkb3VibGUgbWlsbGlzID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudChpZHgpLnRvSW50ZWdlclByZXNlcnZlTmFOKGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgb2sgPSBzdGQ6OmlzZmluaXRlKG1pbGxpcyk7CiAgICAgICAgIG1pbGxpc2Vjb25kcyArPSBt
aWxsaXM7CkBAIC00MDQsMTQgKzQwNCwxNCBAQCBzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1Vz
aW5nVGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbWF4QXJncywgZG91YmxlKiBtcwogLy8g
bXMgKHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMpIGFuZCB0IChyZXByZXNlbnRpbmcgdGhlIHJl
c3Qgb2YgdGhlIGRhdGUgc3RydWN0dXJlKSBhcHByb3ByaWF0ZWx5LgogLy8KIC8vIEZvcm1hdCBv
ZiBtZW1iZXIgZnVuY3Rpb246IGYoW3llYXJzLF0gW21vbnRocyxdIFtkYXlzXSkKLXN0YXRpYyBi
b29sIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhFeGVjU3RhdGUgKmV4ZWMsIGludCBtYXhB
cmdzLCBkb3VibGUgKm1zLCBHcmVnb3JpYW5EYXRlVGltZSAqdCkKK3N0YXRpYyBib29sIGZpbGxT
dHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgaW50IG1heEFyZ3MsIGRvdWJsZSAqbXMsIEdyZWdvcmlhbkRhdGVU
aW1lICp0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIGludCBpZHggPSAwOwogICAgIGJvb2wgb2sgPSB0cnVlOwotICAgIGludCBudW1Bcmdz
ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGludCBudW1BcmdzID0gY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCk7CiAgIAogICAgIC8vIEpTIGFsbG93cyBleHRyYSB0cmFpbGluZyBhcmd1
bWVudHMgLS0gaWdub3JlIHRoZW0KICAgICBpZiAobnVtQXJncyA+IG1heEFyZ3MpCkBAIC00MTks
MjEgKzQxOSwyMSBAQCBzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoRXhl
Y1N0YXRlICpleGVjLCBpbnQgbWF4QXJncywgZG91YmxlICptcwogICAKICAgICAvLyB5ZWFycwog
ICAgIGlmIChtYXhBcmdzID49IDMgJiYgaWR4IDwgbnVtQXJncykgewotICAgICAgICBkb3VibGUg
eWVhcnMgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpZHgrKykudG9JbnRlZ2VyUHJlc2VydmVO
YU4oZXhlYyk7CisgICAgICAgIGRvdWJsZSB5ZWFycyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoaWR4KyspLnRvSW50ZWdlclByZXNlcnZlTmFOKGdsb2JhbE9iamVjdCk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgb2sgPSBzdGQ6Omlz
ZmluaXRlKHllYXJzKTsKICAgICAgICAgdC0+c2V0WWVhcih0b0ludDMyKHllYXJzKSk7CiAgICAg
fQogICAgIC8vIG1vbnRocwogICAgIGlmIChtYXhBcmdzID49IDIgJiYgaWR4IDwgbnVtQXJncyAm
JiBvaykgewotICAgICAgICBkb3VibGUgbW9udGhzID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
aWR4KyspLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOworICAgICAgICBkb3VibGUgbW9udGhz
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpZHgrKykudG9JbnRlZ2VyUHJlc2VydmVO
YU4oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwogICAgICAgICBvayA9IHN0ZDo6aXNmaW5pdGUobW9udGhzKTsKICAgICAgICAgdC0+c2V0
TW9udGgodG9JbnQzMihtb250aHMpKTsKICAgICB9CiAgICAgLy8gZGF5cwogICAgIGlmIChpZHgg
PCBudW1BcmdzICYmIG9rKSB7Ci0gICAgICAgIGRvdWJsZSBkYXlzID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoaWR4KyspLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOworICAgICAgICBkb3Vi
bGUgZGF5cyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaWR4KyspLnRvSW50ZWdlclBy
ZXNlcnZlTmFOKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKICAgICAgICAgb2sgPSBzdGQ6OmlzZmluaXRlKGRheXMpOwogICAgICAgICB0
LT5zZXRNb250aERheSgwKTsKQEAgLTUyNSwxNiArNTI1LDE2IEBAIHZvaWQgRGF0ZVByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
CiAvLyBGdW5jdGlvbnMKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIGNvbnN0IGJv
b2wgYXNVVENWYXJpYW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZvcm1hdGVEYXRlSW5zdGFuY2Uo
Y2FsbEZyYW1lLCBEYXRlVGltZUZvcm1hdERhdGVBbmRUaW1lLCBhc1VUQ1ZhcmlhbnQpOworICAg
IHJldHVybiBmb3JtYXRlRGF0ZUluc3RhbmNlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBEYXRl
VGltZUZvcm1hdERhdGVBbmRUaW1lLCBhc1VUQ1ZhcmlhbnQpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1VUQ1N0cmluZyhKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jVG9VVENTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgY29uc3QgYm9vbCBhc1VUQ1ZhcmlhbnQgPSB0cnVlOwot
ICAgIHJldHVybiBmb3JtYXRlRGF0ZUluc3RhbmNlKGNhbGxGcmFtZSwgRGF0ZVRpbWVGb3JtYXRE
YXRlQW5kVGltZSwgYXNVVENWYXJpYW50KTsKKyAgICByZXR1cm4gZm9ybWF0ZURhdGVJbnN0YW5j
ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgRGF0ZVRpbWVGb3JtYXREYXRlQW5kVGltZSwgYXNV
VENWYXJpYW50KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9G
dW5jVG9JU09TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCkBAIC01NDQsMTIgKzU0NCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNUb0lTT1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQog
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBhdXRv
KiB0aGlzRGF0ZU9iaiA9IGpzRHluYW1pY0Nhc3Q8RGF0ZUluc3RhbmNlKj4odm0sIHRoaXNWYWx1
ZSk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAKICAgICBpZiAoIXN0ZDo6aXNmaW5p
dGUodGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCkpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiSW52
YWxpZCBEYXRlIl9zKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsICJJbnZhbGlkIERhdGUiX3Mp
KTsKIAotICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRo
aXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyhjYWxsRnJhbWUpOworICAgIGNvbnN0IEdy
ZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3Jp
YW5EYXRlVGltZVVUQyhnbG9iYWxPYmplY3QpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBT
dHJpbmcoIkludmFsaWQgRGF0ZSJfcykpKTsKICAgICAvLyBNYXhpbXVtIGFtb3VudCBvZiBzcGFj
ZSB3ZSBuZWVkIGluIGJ1ZmZlcjogNyAobWF4LiBkaWdpdHMgaW4geWVhcikgKyAyICogNSAoMiBj
aGFyYWN0ZXJzIGVhY2ggZm9yIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSArIDQg
KC4gKyAzIGRpZ2l0cyBmb3IgbWlsbGlzZWNvbmRzKQpAQCAtNTczLDE2ICs1NzMsMTYgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgU3RyaW5nKGJ1ZmZlciwgY2hhcmFjdGVyc1dyaXR0ZW4pKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvRGF0ZVN0cmluZyhK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9EYXRlU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIGNvbnN0IGJvb2wgYXNVVENW
YXJpYW50ID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZvcm1hdGVEYXRlSW5zdGFuY2UoY2FsbEZyYW1l
LCBEYXRlVGltZUZvcm1hdERhdGUsIGFzVVRDVmFyaWFudCk7CisgICAgcmV0dXJuIGZvcm1hdGVE
YXRlSW5zdGFuY2UoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIERhdGVUaW1lRm9ybWF0RGF0ZSwg
YXNVVENWYXJpYW50KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9UaW1lU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb1RpbWVTdHJpbmco
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAg
ICAgY29uc3QgYm9vbCBhc1VUQ1ZhcmlhbnQgPSBmYWxzZTsKLSAgICByZXR1cm4gZm9ybWF0ZURh
dGVJbnN0YW5jZShjYWxsRnJhbWUsIERhdGVUaW1lRm9ybWF0VGltZSwgYXNVVENWYXJpYW50KTsK
KyAgICByZXR1cm4gZm9ybWF0ZURhdGVJbnN0YW5jZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
RGF0ZVRpbWVGb3JtYXRUaW1lLCBhc1VUQ1ZhcmlhbnQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU5Miw5ICs1OTIsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1l
LT50aGlzVmFsdWUoKTsKICAgICBhdXRvKiB0aGlzRGF0ZU9iaiA9IGpzRHluYW1pY0Nhc3Q8RGF0
ZUluc3RhbmNlKj4odm0sIHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9i
aikpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOwor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZm9ybWF0TG9jYWxlRGF0ZShjYWxsRnJhbWUsIHRo
aXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1iZXIoKSwgTG9jYWxlRGF0ZUFuZFRp
bWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGZvcm1hdExvY2FsZURhdGUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIHRoaXNEYXRlT2JqLCB0aGlzRGF0ZU9iai0+aW50ZXJuYWxOdW1i
ZXIoKSwgTG9jYWxlRGF0ZUFuZFRpbWUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jVG9Mb2NhbGVEYXRlU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNjA0LDkgKzYwNCw5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlRGF0ZVN0cmluZyhK
U0dsb2JhbE9iamVjdCogZ2xvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNEYXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5z
dGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShmb3JtYXRMb2NhbGVEYXRlKGNhbGxGcmFtZSwgdGhpc0Rh
dGVPYmosIHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51bWJlcigpLCBMb2NhbGVEYXRlKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShmb3JtYXRMb2NhbGVEYXRlKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCB0aGlzRGF0ZU9iaiwgdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCksIExvY2Fs
ZURhdGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5j
VG9Mb2NhbGVUaW1lU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpAQCAtNjE2LDkgKzYxNiw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY1RvTG9jYWxlVGltZVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xv
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1
dG8qIHRoaXNEYXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShmb3JtYXRMb2NhbGVEYXRlKGNhbGxGcmFtZSwgdGhpc0RhdGVPYmosIHRoaXNEYXRlT2Jq
LT5pbnRlcm5hbE51bWJlcigpLCBMb2NhbGVUaW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShmb3JtYXRMb2NhbGVEYXRlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCB0aGlzRGF0ZU9i
aiwgdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCksIExvY2FsZVRpbWUpKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9QcmltaXRpdmVTeW1ib2wo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC02
MjcsMjAgKzYyNywyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNUb1ByaW1pdGl2ZVN5bWJvbChKU0dsb2JhbE9iamVjdCogZ2xvYgogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIkRhdGUucHJvdG90
eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0gZXhwZWN0ZWQgfHRoaXN8IHRvIGJlIGFuIG9iamVjdC4i
KTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IkRhdGUucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0gZXhwZWN0ZWQgfHRoaXN8IHRvIGJl
IGFuIG9iamVjdC4iKTsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KHRoaXNWYWx1ZSk7CiAKICAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiRGF0ZS5w
cm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSBleHBlY3RlZCBhIGZpcnN0IGFyZ3VtZW50LiIp
OworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
RGF0ZS5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSBleHBlY3RlZCBhIGZpcnN0IGFyZ3Vt
ZW50LiIpOwogCiAgICAgSlNWYWx1ZSBoaW50VmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwotICAgIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgdHlwZSA9IHRvUHJlZmVycmVk
UHJpbWl0aXZlVHlwZShjYWxsRnJhbWUsIGhpbnRWYWx1ZSk7CisgICAgUHJlZmVycmVkUHJpbWl0
aXZlVHlwZSB0eXBlID0gdG9QcmVmZXJyZWRQcmltaXRpdmVUeXBlKGdsb2JhbE9iamVjdCwgaGlu
dFZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIGlmICh0eXBlID09IE5vUHJlZmVyZW5jZSkKICAgICAgICAgdHlwZSA9IFByZWZl
clN0cmluZzsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KHRoaXNPYmplY3QtPm9yZGluYXJ5VG9QcmltaXRpdmUoY2FsbEZyYW1lLCB0eXBlKSkpOworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPm9y
ZGluYXJ5VG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0LCB0eXBlKSkpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRUaW1lKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNjUwLDcgKzY1MCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRpbWUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCk7CiAgICAgYXV0byogdGhpc0RhdGVPYmogPSBqc0R5bmFtaWNDYXN0PERhdGVJ
bnN0YW5jZSo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmop
KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRoaXNEYXRlT2JqLT5pbnRlcm5hbE51
bWJlcigpKSk7CiB9CkBAIC02NjIsOSArNjYyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUK
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgYXV0
byogdGhpc0RhdGVPYmogPSBqc0R5bmFtaWNDYXN0PERhdGVJbnN0YW5jZSo+KHZtLCB0aGlzVmFs
dWUpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQotICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRl
VGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUo
Y2FsbEZyYW1lKTsKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRp
bWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZ2xvYmFsT2JqZWN0KTsKICAgICBp
ZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0
ZVRpbWUtPnllYXIoKSkpOwpAQCAtNjc3LDkgKzY3Nyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0Z1bGxZZWFyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAg
IGF1dG8qIHRoaXNEYXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhp
c1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFu
RGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVU
aW1lVVRDKGNhbGxGcmFtZSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlh
bkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGdsb2JhbE9iamVj
dCk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdy
ZWdvcmlhbkRhdGVUaW1lLT55ZWFyKCkpKTsKQEAgLTY5Miw5ICs2OTIsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRNb250aChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFs
dWUoKTsKICAgICBhdXRvKiB0aGlzRGF0ZU9iaiA9IGpzRHluYW1pY0Nhc3Q8RGF0ZUluc3RhbmNl
Kj4odm0sIHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIGNvbnN0
IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVn
b3JpYW5EYXRlVGltZShjYWxsRnJhbWUpOworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBn
cmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShnbG9iYWxP
YmplY3QpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihncmVnb3JpYW5EYXRlVGltZS0+bW9udGgoKSkpOwpAQCAtNzA3LDkgKzcwNyw5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ01vbnRoKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNEYXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5z
dGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAg
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmot
PmdyZWdvcmlhbkRhdGVUaW1lVVRDKGNhbGxGcmFtZSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0
ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1l
VVRDKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aCgpKSk7CkBAIC03MjIsOSArNzIy
LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0RGF0ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBhdXRvKiB0aGlzRGF0ZU9iaiA9IGpzRHluYW1pY0Nh
c3Q8RGF0ZUluc3RhbmNlKj4odm0sIHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlz
RGF0ZU9iaikpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
KTsKIAotICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRo
aXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShjYWxsRnJhbWUpOworICAgIGNvbnN0IEdyZWdv
cmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5E
YXRlVGltZShnbG9iYWxPYmplY3QpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bW9udGhEYXkoKSkpOwpAQCAtNzM3
LDkgKzczNyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dl
dFVUQ0RhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNEYXRlT2JqID0ganNE
eW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZy
YW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVU
aW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGNhbGxGcmFtZSk7CisgICAg
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmot
PmdyZWdvcmlhbkRhdGVUaW1lVVRDKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKCFncmVnb3JpYW5E
YXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5tb250aERh
eSgpKSk7CkBAIC03NTIsOSArNzUyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jR2V0RGF5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgYXV0byogdGhp
c0RhdGVPYmogPSBqc0R5bmFtaWNDYXN0PERhdGVJbnN0YW5jZSo+KHZtLCB0aGlzVmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSog
Z3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoY2FsbEZy
YW1lKTsKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0
aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIWdy
ZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUt
PndlZWtEYXkoKSkpOwpAQCAtNzY3LDkgKzc2Nyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnVuY0dldFVUQ0RheShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1
dG8qIHRoaXNEYXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0
ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1l
VVRDKGNhbGxGcmFtZSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRh
dGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGdsb2JhbE9iamVjdCk7
CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdv
cmlhbkRhdGVUaW1lLT53ZWVrRGF5KCkpKTsKQEAgLTc4Miw5ICs3ODIsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRIb3VycyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFs
dWUoKTsKICAgICBhdXRvKiB0aGlzRGF0ZU9iaiA9IGpzRHluYW1pY0Nhc3Q8RGF0ZUluc3RhbmNl
Kj4odm0sIHRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIGNvbnN0
IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVn
b3JpYW5EYXRlVGltZShjYWxsRnJhbWUpOworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBn
cmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShnbG9iYWxP
YmplY3QpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihncmVnb3JpYW5EYXRlVGltZS0+aG91cigpKSk7CkBAIC03OTcsOSArNzk3LDkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jR2V0VVRDSG91cnMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamUKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCk7CiAgICAgYXV0byogdGhpc0RhdGVPYmogPSBqc0R5bmFtaWNDYXN0PERhdGVJbnN0
YW5jZSo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+
Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoY2FsbEZyYW1lKTsKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRl
VGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVV
VEMoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPmhvdXIoKSkpOwpAQCAtODEyLDkgKzgxMiw5
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbnV0ZXMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNEYXRlT2JqID0ganNEeW5hbWljQ2Fz
dDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNE
YXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUp
OwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGNhbGxGcmFtZSk7CisgICAgY29uc3QgR3JlZ29y
aWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRh
dGVUaW1lKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5taW51dGUoKSkpOwpAQCAtODI3LDkg
KzgyNyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFVU
Q01pbnV0ZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNEYXRlT2JqID0ganNEeW5h
bWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFko
IXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1l
ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGNhbGxGcmFtZSk7CisgICAgY29u
c3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdy
ZWdvcmlhbkRhdGVUaW1lVVRDKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRl
VGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5taW51dGUoKSkp
OwpAQCAtODQyLDkgKzg0Miw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY0dldFNlY29uZHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNEYXRl
T2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdv
cmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGNhbGxGcmFtZSk7
CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0Rh
dGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKCFncmVnb3Jp
YW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5zZWNv
bmQoKSkpOwpAQCAtODU3LDkgKzg1Nyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0ZVByb3RvRnVuY0dldFVUQ1NlY29uZHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1dG8qIHRo
aXNEYXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUq
IGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGNh
bGxGcmFtZSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1l
ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGdsb2JhbE9iamVjdCk7CiAgICAg
aWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRh
dGVUaW1lLT5zZWNvbmQoKSkpOwpAQCAtODcyLDcgKzg3Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldE1pbGxpU2Vjb25kcyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwog
ICAgIGF1dG8qIHRoaXNEYXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwg
dGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgZG91YmxlIG1pbGxp
ID0gdGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKHN0ZDo6aXNuYW4obWls
bGkpKQpAQCAtODkwLDcgKzg5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY0dldFVUQ01pbGxpc2Vjb25kcyhKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNE
YXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgZG91YmxlIG1pbGxpID0gdGhpc0RhdGVPYmot
PmludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKHN0ZDo6aXNuYW4obWlsbGkpKQpAQCAtOTA4LDkg
KzkwOCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY0dldFRp
bWV6b25lT2Zmc2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNEYXRlT2JqID0ganNEeW5h
bWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFko
IXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1l
ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGNhbGxGcmFtZSk7CisgICAgY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdv
cmlhbkRhdGVUaW1lKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC1ncmVnb3JpYW5EYXRlVGltZS0+dXRjT2Zmc2V0KCkgLyBt
aW51dGVzUGVySG91cikpOwpAQCAtOTIzLDI2ICs5MjMsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VGltZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKICAg
ICBhdXRvKiB0aGlzRGF0ZU9iaiA9IGpzRHluYW1pY0Nhc3Q8RGF0ZUluc3RhbmNlKj4odm0sIHRo
aXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIGRvdWJsZSBtaWxsaSA9
IHRpbWVDbGlwKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoY2FsbEZyYW1lKSk7Cisg
ICAgZG91YmxlIG1pbGxpID0gdGltZUNsaXAoY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJl
cihnbG9iYWxPYmplY3QpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxOdW1iZXIobWlsbGkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobWlsbGkpKTsKIH0KIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywg
aW50IG51bUFyZ3NUb1VzZSwgV1RGOjpUaW1lVHlwZSBpbnB1dFRpbWVUeXBlKQorc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBpbnQgbnVtQXJnc1RvVXNlLCBXVEY6OlRp
bWVUeXBlIGlucHV0VGltZVR5cGUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1
dG8qIHRoaXNEYXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAogICAgIGRvdWJsZSBtaWxsaSA9IHRoaXNEYXRl
T2JqLT5pbnRlcm5hbE51bWJlcigpOwogCi0gICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkg
fHwgc3RkOjppc25hbihtaWxsaSkpIHsKKyAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIHx8IHN0ZDo6aXNuYW4obWlsbGkpKSB7CiAgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRl
cm5hbE51bWJlcihQTmFOKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigp
KTsKICAgICB9CkBAIC05NTEsMTQgKzk1MSwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgc2V0
TmV3VmFsdWVGcm9tVGltZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbnVtQXJnc1RvVXNlLAog
ICAgIGRvdWJsZSBtcyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOwogCiAgICAgY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUqIG90aGVyID0gaW5wdXRUaW1lVHlwZSA9PSBXVEY6OlVUQ1RpbWUK
LSAgICAgICAgPyB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYykKLSAgICAg
ICAgOiB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZXhlYyk7CisgICAgICAgID8gdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiB0
aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIW90
aGVyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogCiAgICAgR3Jl
Z29yaWFuRGF0ZVRpbWUgZ3JlZ29yaWFuRGF0ZVRpbWU7CiAgICAgZ3JlZ29yaWFuRGF0ZVRpbWUu
Y29weUZyb20oKm90aGVyKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmaWxsU3RydWN0dXJlc1VzaW5n
VGltZUFyZ3MoZXhlYywgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5EYXRlVGltZSk7Cisg
ICAgYm9vbCBzdWNjZXNzID0gZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBudW1BcmdzVG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAo
IXN1Y2Nlc3MpIHsKICAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsTnVtYmVyKFBOYU4p
OwpAQCAtOTcxLDE2ICs5NzEsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVl
RnJvbVRpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgaW50IG51bUFyZ3NUb1VzZSwKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdCkpOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbnVt
QXJnc1RvVXNlLCBXVEY6OlRpbWVUeXBlIGlucHV0VGltZVR5cGUpCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGludCBudW1BcmdzVG9Vc2UsIFdURjo6VGltZVR5cGUg
aW5wdXRUaW1lVHlwZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgYXV0byogdGhp
c0RhdGVPYmogPSBqc0R5bmFtaWNDYXN0PERhdGVJbnN0YW5jZSo+KHZtLCB0aGlzVmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsK
KyAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgIHRoaXNEYXRl
T2JqLT5zZXRJbnRlcm5hbE51bWJlcihQTmFOKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc05hTigpKTsKICAgICB9CkBAIC05OTQsMTQgKzk5NCwxNCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoRXhlY1N0YXRlKiBleGVjLCBpbnQgbnVt
QXJnc1RvVXNlLAogICAgIGVsc2UgeyAKICAgICAgICAgbXMgPSBtaWxsaSAtIGZsb29yKG1pbGxp
IC8gbXNQZXJTZWNvbmQpICogbXNQZXJTZWNvbmQ7IAogICAgICAgICBjb25zdCBHcmVnb3JpYW5E
YXRlVGltZSogb3RoZXIgPSBpbnB1dFRpbWVUeXBlID09IFdURjo6VVRDVGltZQotICAgICAgICAg
ICAgPyB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYykKLSAgICAgICAgICAg
IDogdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGV4ZWMpOworICAgICAgICAgICAgPyB0
aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZ2xvYmFsT2JqZWN0KQorICAgICAgICAg
ICAgOiB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgaWYgKCFvdGhlcikKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4o
KSk7CiAgICAgICAgIGdyZWdvcmlhbkRhdGVUaW1lLmNvcHlGcm9tKCpvdGhlcik7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgc3VjY2VzcyA9IGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhleGVj
LCBudW1BcmdzVG9Vc2UsICZtcywgJmdyZWdvcmlhbkRhdGVUaW1lKTsKKyAgICBib29sIHN1Y2Nl
c3MgPSBmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IG51bUFyZ3NUb1VzZSwgJm1zLCAmZ3JlZ29yaWFuRGF0ZVRpbWUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmICghc3VjY2Vzcykgewog
ICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxOdW1iZXIoUE5hTik7CkBAIC0xMDE0LDc0
ICsxMDE0LDc0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21EYXRlQXJn
cyhFeGVjU3RhdGUqIGV4ZWMsIGludCBudW1BcmdzVG9Vc2UsCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihyZXN1bHQpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRlUHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNTZXRNaWxsaVNlY29uZHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGNhbGxG
cmFtZSwgMSwgV1RGOjpMb2NhbFRpbWUpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1l
QXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgMSwgV1RGOjpMb2NhbFRpbWUpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaWxsaXNlY29u
ZHMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ01pbGxpc2Vjb25kcyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4g
c2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoY2FsbEZyYW1lLCAxLCBXVEY6OlVUQ1RpbWUpOworICAg
IHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
MSwgV1RGOjpVVENUaW1lKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRl
UHJvdG9GdW5jU2V0U2Vjb25kcyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1l
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0U2Vjb25kcyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoY2FsbEZyYW1lLCAyLCBXVEY6OkxvY2Fs
VGltZSk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCAyLCBXVEY6OkxvY2FsVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ1NlY29uZHMoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1NldFVUQ1NlY29uZHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGNhbGxG
cmFtZSwgMiwgV1RGOjpVVENUaW1lKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFy
Z3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIDIsIFdURjo6VVRDVGltZSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1NldE1pbnV0ZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVB
cmdzKGNhbGxGcmFtZSwgMywgV1RGOjpMb2NhbFRpbWUpOworICAgIHJldHVybiBzZXROZXdWYWx1
ZUZyb21UaW1lQXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgMywgV1RGOjpMb2NhbFRpbWUp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENN
aW51dGVzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENNaW51dGVzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBz
ZXROZXdWYWx1ZUZyb21UaW1lQXJncyhjYWxsRnJhbWUsIDMsIFdURjo6VVRDVGltZSk7CisgICAg
cmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCAz
LCBXVEY6OlVUQ1RpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQ
cm90b0Z1bmNTZXRIb3VycyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0SG91cnMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0
dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGNhbGxGcmFtZSwgNCwgV1RGOjpMb2NhbFRpbWUp
OworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgNCwgV1RGOjpMb2NhbFRpbWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1bmNTZXRVVENIb3VycyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0
VVRDSG91cnMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGNhbGxGcmFtZSwgNCwg
V1RGOjpVVENUaW1lKTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIDQsIFdURjo6VVRDVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldERhdGUoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnVuY1NldERhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGNhbGxGcmFtZSwg
MSwgV1RGOjpMb2NhbFRpbWUpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncyhn
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgMSwgV1RGOjpMb2NhbFRpbWUpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRVVENEYXRlKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNTZXRVVENEYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRlQXJn
cyhjYWxsRnJhbWUsIDEsIFdURjo6VVRDVGltZSk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJv
bURhdGVBcmdzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCAxLCBXVEY6OlVUQ1RpbWUpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRNb250aChKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0TW9udGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURh
dGVBcmdzKGNhbGxGcmFtZSwgMiwgV1RGOjpMb2NhbFRpbWUpOworICAgIHJldHVybiBzZXROZXdW
YWx1ZUZyb21EYXRlQXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgMiwgV1RGOjpMb2NhbFRp
bWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRV
VENNb250aChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0VVRDTW9udGgoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIHNl
dE5ld1ZhbHVlRnJvbURhdGVBcmdzKGNhbGxGcmFtZSwgMiwgV1RGOjpVVENUaW1lKTsKKyAgICBy
ZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIDIs
IFdURjo6VVRDVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBy
b3RvRnVuY1NldEZ1bGxZZWFyKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoY2FsbEZyYW1lLCAzLCBXVEY6OkxvY2Fs
VGltZSk7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCAzLCBXVEY6OkxvY2FsVGltZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFVUQ0Z1bGxZZWFyKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90
b0Z1bmNTZXRVVENGdWxsWWVhcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoY2Fs
bEZyYW1lLCAzLCBXVEY6OlVUQ1RpbWUpOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21EYXRl
QXJncyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgMywgV1RGOjpVVENUaW1lKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jU2V0WWVhcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTEwOTEsNyArMTA5
MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllYXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgYXV0byogdGhpc0RhdGVPYmogPSBqc0R5bmFtaWND
YXN0PERhdGVJbnN0YW5jZSo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghdGhp
c0RhdGVPYmopKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7CiAKICAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKSB7IAogICAgICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxOdW1iZXIoUE5hTik7CkBAIC0xMTA5LDExICsxMTA5LDEx
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1NldFllYXIoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBlbHNlIHsKICAgICAgICAgZG91YmxlIHNl
Y3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKICAgICAgICAgbXMgPSBtaWxsaSAtIHNl
Y3MgKiBtc1BlclNlY29uZDsKLSAgICAgICAgaWYgKGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBv
dGhlciA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShjYWxsRnJhbWUpKQorICAgICAg
ICBpZiAoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIG90aGVyID0gdGhpc0RhdGVPYmotPmdyZWdv
cmlhbkRhdGVUaW1lKGdsb2JhbE9iamVjdCkpCiAgICAgICAgICAgICBncmVnb3JpYW5EYXRlVGlt
ZS5jb3B5RnJvbSgqb3RoZXIpOwogICAgIH0KIAotICAgIGRvdWJsZSB5ZWFyID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihjYWxsRnJhbWUpOworICAgIGRvdWJs
ZSB5ZWFyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihnbG9i
YWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGlmICghc3RkOjppc2Zpbml0ZSh5ZWFyKSkgewogICAgICAgICB0aGlzRGF0ZU9i
ai0+c2V0SW50ZXJuYWxOdW1iZXIoUE5hTik7CkBAIC0xMTM0LDkgKzExMzQsOSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNHZXRZZWFyKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpOwogICAgIGF1dG8qIHRoaXNEYXRlT2JqID0ganNEeW5hbWljQ2FzdDxEYXRlSW5zdGFu
Y2UqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29u
c3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdy
ZWdvcmlhbkRhdGVUaW1lKGNhbGxGcmFtZSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUq
IGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKGdsb2Jh
bE9iamVjdCk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc05hTigpKTsKIApAQCAtMTE0OSwyMyArMTE0OSwyMyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0pTT04oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlz
VmFsdWUudG9PYmplY3QoY2FsbEZyYW1lKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpc1Zh
bHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBKU1ZhbHVlIHRpbWVWYWx1ZSA9IG9iamVjdC0+
dG9QcmltaXRpdmUoY2FsbEZyYW1lLCBQcmVmZXJOdW1iZXIpOworICAgIEpTVmFsdWUgdGltZVZh
bHVlID0gb2JqZWN0LT50b1ByaW1pdGl2ZShnbG9iYWxPYmplY3QsIFByZWZlck51bWJlcik7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYg
KHRpbWVWYWx1ZS5pc051bWJlcigpICYmICFzdGQ6OmlzZmluaXRlKHRpbWVWYWx1ZS5hc051bWJl
cigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKLSAgICBK
U1ZhbHVlIHRvSVNPVmFsdWUgPSBvYmplY3QtPmdldChjYWxsRnJhbWUsIHZtLnByb3BlcnR5TmFt
ZXMtPnRvSVNPU3RyaW5nKTsKKyAgICBKU1ZhbHVlIHRvSVNPVmFsdWUgPSBvYmplY3QtPmdldChn
bG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIHRvSVNPVmFs
dWUsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJ0b0lTT1N0cmlu
ZyBpcyBub3QgYSBmdW5jdGlvbiJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJ0b0lTT1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiJfcyk7
CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoY2FsbEZyYW1lLCBhc09iamVjdCh0b0lTT1Zh
bHVlKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsICp2bS5lbXB0eUxpc3QpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KHRvSVNPVmFsdWUpLCBj
YWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwgKnZtLmVtcHR5TGlzdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAKaW5kZXggM2VlODc2YmU3MjgzN2U3NzhkNzAxZGEyMTEyYWU0
NWIzYWIzNzAyMi4uYTY3OTVkYTFlZGNjZjMxMDIyYWMyZGQ5YWVmYWZkNDNhMDFhNWM4NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
CkBAIC02NiwxOSArNjYsMTkgQEAgRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6OmNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLURpcmVjdEFyZ3VtZW50cyogRGlyZWN0QXJndW1lbnRzOjpjcmVhdGVCeUNv
cHlpbmcoRXhlY1N0YXRlKiBleGVjKQorRGlyZWN0QXJndW1lbnRzKiBEaXJlY3RBcmd1bWVudHM6
OmNyZWF0ZUJ5Q29weWluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBleGVjLT5hcmd1
bWVudENvdW50KCk7Ci0gICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihleGVjLT5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpIC0g
MSkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwor
ICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gc3RkOjptYXgobGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpIC0gMSkpOwogICAg
IERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKLSAgICAgICAg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJl
KCksIGxlbmd0aCwgY2FwYWNpdHkpOworICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LT5kaXJlY3RB
cmd1bWVudHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBhY2l0eSk7CiAgICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gY2FwYWNpdHk7IGktLTspCi0gICAgICAgIHJlc3VsdC0+c3RvcmFnZSgpW2ld
LnNldCh2bSwgcmVzdWx0LCBleGVjLT5nZXRBcmd1bWVudFVuc2FmZShpKSk7CisgICAgICAgIHJl
c3VsdC0+c3RvcmFnZSgpW2ldLnNldCh2bSwgcmVzdWx0LCBjYWxsRnJhbWUtPmdldEFyZ3VtZW50
VW5zYWZlKGkpKTsKICAgICAKLSAgICByZXN1bHQtPnNldENhbGxlZSh2bSwganNDYXN0PEpTRnVu
Y3Rpb24qPihleGVjLT5qc0NhbGxlZSgpKSk7CisgICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKSk7CiAgICAgCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTEzNywyMCArMTM3LDIwIEBAIHZvaWQgRGlyZWN0QXJndW1lbnRz
Ojp1bm1hcEFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiAgICAgbV9tYXBwZWRBcmd1
bWVudHMuYXQoaW5kZXgsIGludGVybmFsTGVuZ3RoKCkpID0gdHJ1ZTsKIH0KIAotdm9pZCBEaXJl
Y3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3ZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVs
ZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAo
IW1fbWFwcGVkQXJndW1lbnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4o
bGVuZ3RoICsgb2Zmc2V0LCBtX2xlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IGZpcnN0RWxlbWVudERlc3QgLSBvZmZzZXQ7CiAgICAg
ICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGxpbWl0OyArK2kpCi0gICAgICAgICAgICBleGVjLT5y
KHN0YXJ0ICsgaSkgPSBzdG9yYWdlKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBjYWxsRnJhbWUt
PnIoc3RhcnQgKyBpKSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKICAgICAgICAgZm9yICg7IGkgPCBs
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGV4ZWMtPnIoc3RhcnQgKyBpKSA9IGdldChleGVjLCBp
KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cihzdGFydCArIGkpID0gZ2V0KGdsb2JhbE9iamVj
dCwgaSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHZW5lcmljQXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMoZXhlYywgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwor
ICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCiB1bnNpZ25lZCBE
aXJlY3RBcmd1bWVudHM6Om1hcHBlZEFyZ3VtZW50c1NpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAppbmRleCBlODc3NTAxMGU4ZmY3NzMy
M2YxOTEzNTIwODBkMTBlYTcwNzVkNzE1Li4wYTZiMWEwNjYwOTBlMmNhNWY1NmY1MGE5YzUzYTJj
ZmNlNzcyZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBEaXJlY3RBcmd1bWVudHMgZmluYWwg
OiBwdWJsaWMgR2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+IHsKICAgICBzdGF0aWMg
RGlyZWN0QXJndW1lbnRzKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkIGNhcGFjaXR5KTsKICAgICAKICAgICAvLyBDcmVhdGVzIGFuIGFyZ3VtZW50cyBv
YmplY3QgYnkgY29weWluZyB0aGUgYXJndW1uZXRzIGZyb20gdGhlIHN0YWNrLgotICAgIHN0YXRp
YyBEaXJlY3RBcmd1bWVudHMqIGNyZWF0ZUJ5Q29weWluZyhFeGVjU3RhdGUqKTsKKyAgICBzdGF0
aWMgRGlyZWN0QXJndW1lbnRzKiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYp
OwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
QEAgLTcyLDE0ICs3MiwxNCBAQCBjbGFzcyBEaXJlY3RBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMg
R2VuZXJpY0FyZ3VtZW50czxEaXJlY3RBcmd1bWVudHM+IHsKICAgICAgICAgcmV0dXJuIG1fbGVu
Z3RoOwogICAgIH0KICAgICAKLSAgICB1aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAorICAgIHVpbnQzMl90IGxlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKG1fbWFwcGVkQXJndW1lbnRzKSkgewot
ICAgICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGdl
dFZNKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0KGV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0KGds
b2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCB2YWx1ZS50b1VJbnQzMihleGVjKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIHZhbHVlLnRvVUludDMyKGdsb2JhbE9iamVjdCkpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBtX2xlbmd0aDsKICAgICB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgY2xhc3Mg
RGlyZWN0QXJndW1lbnRzIGZpbmFsIDogcHVibGljIEdlbmVyaWNBcmd1bWVudHM8RGlyZWN0QXJn
dW1lbnRzPiB7CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50
cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fbGVuZ3RoKTsKICAgICB9
CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBWaXJ0dWFsUmVnaXN0ZXIg
Zmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcAppbmRleCA3MzMwOWFl
MWIxNjM5NTlmMDI5NTcyY2M0N2Y2NGY5ZGQwMzAxN2VmLi42YjA4NTE4MGExNDZiZmJjNmI0MGJm
NmFlMzE1MTIwYWQ2MDdjZjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0RXZhbEV4ZWN1dGFibGUuY3BwCkBAIC0zNSwxOCArMzUsMTcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLURpcmVjdEV2YWxFeGVjdXRhYmxlKiBEaXJlY3RFdmFsRXhlY3V0
YWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBi
b29sIGlzSW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRU
eXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29u
dGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVyVERaKQor
RGlyZWN0RXZhbEV4ZWN1dGFibGUqIERpcmVjdEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlz
SW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBi
b29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5
cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVyVERaKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAg
aWYgKCFnbG9iYWxPYmplY3QtPmV2YWxFbmFibGVkKCkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRp
b24oZXhlYywgc2NvcGUsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPmV2YWxE
aXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9i
amVjdCwgc2NvcGUsIGNyZWF0ZUV2YWxFcnJvcihnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgYXV0byogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERpcmVj
dEV2YWxFeGVjdXRhYmxlPih2bS5oZWFwKSkgRGlyZWN0RXZhbEV4ZWN1dGFibGUoZXhlYywgc291
cmNlLCBpc0luU3RyaWN0Q29udGV4dCwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rp
b25Db250ZXh0LCBldmFsQ29udGV4dFR5cGUpOworICAgIGF1dG8qIGV4ZWN1dGFibGUgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEaXJlY3RFdmFsRXhlY3V0YWJsZT4odm0uaGVhcCkpIERp
cmVjdEV2YWxFeGVjdXRhYmxlKGdsb2JhbE9iamVjdCwgc291cmNlLCBpc0luU3RyaWN0Q29udGV4
dCwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBldmFsQ29udGV4
dFR5cGUpOwogICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKIAogICAgIFBhcnNl
ckVycm9yIGVycm9yOwpAQCAtNTgsMTAgKzU3LDEwIEBAIERpcmVjdEV2YWxFeGVjdXRhYmxlKiBE
aXJlY3RFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNl
CiAgICAgICAgIHZtLCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0TW9k
ZSwgSlNQYXJzZXJTY3JpcHRNb2RlOjpDbGFzc2ljLCBjb2RlR2VuZXJhdGlvbk1vZGUsIGVycm9y
LCBldmFsQ29udGV4dFR5cGUsIHZhcmlhYmxlc1VuZGVyVERaKTsKIAogICAgIGlmIChnbG9iYWxP
YmplY3QtPmhhc0RlYnVnZ2VyKCkpCi0gICAgICAgIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKS0+
c291cmNlUGFyc2VkKGV4ZWMsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGVycm9y
LmxpbmUoKSwgZXJyb3IubWVzc2FnZSgpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dl
cigpLT5zb3VyY2VQYXJzZWQoZ2xvYmFsT2JqZWN0LCBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92
aWRlcigpLCBlcnJvci5saW5lKCksIGVycm9yLm1lc3NhZ2UoKSk7CiAKICAgICBpZiAoZXJyb3Iu
aXNWYWxpZCgpKSB7Ci0gICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgZXJyb3IudG9F
cnJvck9iamVjdChnbG9iYWxPYmplY3QsIGV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CisgICAgICAg
IHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvci50b0Vycm9yT2JqZWN0KGds
b2JhbE9iamVjdCwgZXhlY3V0YWJsZS0+c291cmNlKCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCkBAIC03MCw4ICs2OSw4IEBAIERpcmVjdEV2YWxFeGVjdXRhYmxlKiBEaXJl
Y3RFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlCiAg
ICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKLURpcmVjdEV2YWxFeGVjdXRhYmxlOjpEaXJlY3RF
dmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Ym9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5
cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250
ZXh0VHlwZSkKLSAgICA6IEV2YWxFeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSwgaW5TdHJpY3RDb250
ZXh0LCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250
ZXh0VHlwZSkKK0RpcmVjdEV2YWxFeGVjdXRhYmxlOjpEaXJlY3RFdmFsRXhlY3V0YWJsZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wg
aW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBi
b29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5
cGUpCisgICAgOiBFdmFsRXhlY3V0YWJsZShnbG9iYWxPYmplY3QsIHNvdXJjZSwgaW5TdHJpY3RD
b250ZXh0LCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGV2YWxD
b250ZXh0VHlwZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmgKaW5kZXggODk0OGQ0NWI1ODJlYzY1YzY4ZGNkYzNl
YjRmZGNlMThmOTdlNThiZC4uYTA4ZmE1NjJhMjdlZDAzZDRiNDk1NzU1NDQ2ZDMxMjBiYmQwMDAw
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0RXZhbEV4
ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RFdmFs
RXhlY3V0YWJsZS5oCkBAIC0zMSw5ICszMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBE
aXJlY3RFdmFsRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBFdmFsRXhlY3V0YWJsZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIERpcmVjdEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwg
Y29uc3QgU291cmNlQ29kZSYsIGJvb2wgaXNJblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0
VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUsIGNvbnN0
IFZhcmlhYmxlRW52aXJvbm1lbnQqKTsKKyAgICBzdGF0aWMgRGlyZWN0RXZhbEV4ZWN1dGFibGUq
IGNyZWF0ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGlzSW5TdHJp
Y3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4
dCwgRXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50Kik7CiBwcml2YXRl
OgotICAgIERpcmVjdEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUm
LCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dG
dW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSk7CisgICAgRGlyZWN0RXZhbEV4ZWN1dGFi
bGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRl
eHQsIERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFs
Q29udGV4dFR5cGUpOwogfTsKIAogc3RhdGljX2Fzc2VydChzaXplb2YoRGlyZWN0RXZhbEV4ZWN1
dGFibGUpID09IHNpemVvZihFdmFsRXhlY3V0YWJsZSksICIiKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yLmNwcAppbmRleCA2Y2Q4Y2NlZjkxNGMzMTEzYTAzODI5ODYwMzAwZTY3
NTFlMzFmZTBiLi4xZTBlMzM4Yjc4ZGViOTE2YjcyZDE5ODJlNzg5ODIyMGVmNGE3YjgwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCkBAIC00Miw5MiArNDIsNzkgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIg
YXBwZW5kZXIpCitKU09iamVjdCogY3JlYXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRl
ciBhcHBlbmRlcikKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwot
ICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT52bSgp
LCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBl
Tm90aGluZywgdHJ1ZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZSgp
LCBtZXNzYWdlLCBhcHBlbmRlciwgVHlwZU5vdGhpbmcsIHRydWUpOwogfQogCi1KU09iamVjdCog
Y3JlYXRlRXZhbEVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBF
cnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKK0pTT2JqZWN0KiBjcmVhdGVF
dmFsRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAgICBBU1NF
UlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNl
OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3Ry
dWN0dXJlKEVycm9yVHlwZTo6RXZhbEVycm9yKSwgbWVzc2FnZSwgYXBwZW5kZXIsIFR5cGVOb3Ro
aW5nLCB0cnVlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0dXJlKEVycm9y
VHlwZTo6RXZhbEVycm9yKSwgbWVzc2FnZSwgYXBwZW5kZXIsIFR5cGVOb3RoaW5nLCB0cnVlKTsK
IH0KIAotSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyKQot
ewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7Ci0gICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0
LCBtZXNzYWdlLCBhcHBlbmRlcik7Ci19Ci0KLUpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKK0pTT2Jq
ZWN0KiBjcmVhdGVSYW5nZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIp
CiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXJy
b3JTdHJ1Y3R1cmUoRXJyb3JUeXBlOjpSYW5nZUVycm9yKSwgbWVzc2FnZSwgYXBwZW5kZXIsIFR5
cGVOb3RoaW5nLCB0cnVlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0dXJl
KEVycm9yVHlwZTo6UmFuZ2VFcnJvciksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGluZywg
dHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VFcnJvcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIg
YXBwZW5kZXIpCitKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3Vy
Y2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsK
LSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0dXJlKEVycm9yVHlwZTo6UmVmZXJl
bmNlRXJyb3IpLCBtZXNzYWdlLCBhcHBlbmRlciwgVHlwZU5vdGhpbmcsIHRydWUpOworICAgIHJl
dHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZt
KCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoRXJyb3JUeXBlOjpSZWZlcmVuY2VFcnJv
ciksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGluZywgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0
KiBjcmVhdGVTeW50YXhFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCitKU09iamVjdCogY3Jl
YXRlU3ludGF4RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAg
ICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBFcnJvcklu
c3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmVy
cm9yU3RydWN0dXJlKEVycm9yVHlwZTo6U3ludGF4RXJyb3IpLCBtZXNzYWdlLCBhcHBlbmRlciwg
VHlwZU5vdGhpbmcsIHRydWUpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1
cmUoRXJyb3JUeXBlOjpTeW50YXhFcnJvciksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGlu
ZywgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFw
cGVuZGVyLCBSdW50aW1lVHlwZSB0eXBlKQorSlNPYmplY3QqIGNyZWF0ZVR5cGVFcnJvcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5z
dGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyLCBSdW50aW1lVHlwZSB0eXBlKQogewogICAg
IEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJuIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXJy
b3JTdHJ1Y3R1cmUoRXJyb3JUeXBlOjpUeXBlRXJyb3IpLCBtZXNzYWdlLCBhcHBlbmRlciwgdHlw
ZSwgdHJ1ZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZShFcnJvclR5
cGU6OlR5cGVFcnJvciksIG1lc3NhZ2UsIGFwcGVuZGVyLCB0eXBlLCB0cnVlKTsKIH0KIAotSlNP
YmplY3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJy
b3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCitKU09iamVjdCogY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXJyb3JJ
bnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiX3MsIGFwcGVuZGVyLCBUeXBlTm90
aGluZyk7CisgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJOb3QgZW5v
dWdoIGFyZ3VtZW50cyJfcywgYXBwZW5kZXIsIFR5cGVOb3RoaW5nKTsKIH0KIAotSlNPYmplY3Qq
IGNyZWF0ZVVSSUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBF
cnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKK0pTT2JqZWN0KiBjcmVhdGVV
UklFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyKQogewogICAgIEFTU0VS
VCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1
Y3R1cmUoRXJyb3JUeXBlOjpVUklFcnJvciksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGlu
ZywgdHJ1ZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZShFcnJvclR5
cGU6OlVSSUVycm9yKSwgbWVzc2FnZSwgYXBwZW5kZXIsIFR5cGVOb3RoaW5nLCB0cnVlKTsKIH0K
IAotSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JUeXBlIGVycm9y
VHlwZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZUVycm9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVycm9yVHlwZSBlcnJvclR5cGUsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKIHsKICAgICBzd2l0Y2ggKGVycm9yVHlwZSkgewogICAgIGNhc2UgRXJyb3JU
eXBlOjpFcnJvcjoKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOwor
ICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlKTsKICAgICBj
YXNlIEVycm9yVHlwZTo6RXZhbEVycm9yOgotICAgICAgICByZXR1cm4gY3JlYXRlRXZhbEVycm9y
KGV4ZWMsIG1lc3NhZ2UpOworICAgICAgICByZXR1cm4gY3JlYXRlRXZhbEVycm9yKGdsb2JhbE9i
amVjdCwgbWVzc2FnZSk7CiAgICAgY2FzZSBFcnJvclR5cGU6OlJhbmdlRXJyb3I6Ci0gICAgICAg
IHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOworICAgICAgICByZXR1cm4g
Y3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIG1lc3NhZ2UpOwogICAgIGNhc2UgRXJyb3JU
eXBlOjpSZWZlcmVuY2VFcnJvcjoKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVJlZmVyZW5jZUVycm9y
KGV4ZWMsIG1lc3NhZ2UpOworICAgICAgICByZXR1cm4gY3JlYXRlUmVmZXJlbmNlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBtZXNzYWdlKTsKICAgICBjYXNlIEVycm9yVHlwZTo6U3ludGF4RXJyb3I6Ci0g
ICAgICAgIHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBtZXNzYWdlKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbWVzc2FnZSk7CiAgICAgY2Fz
ZSBFcnJvclR5cGU6OlR5cGVFcnJvcjoKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBtZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIG1lc3NhZ2UpOwogICAgIGNhc2UgRXJyb3JUeXBlOjpVUklFcnJvcjoKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZVVSSUVycm9yKGV4ZWMsIG1lc3NhZ2UpOworICAgICAgICByZXR1cm4gY3JlYXRl
VVJJRXJyb3IoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVHZXR0
ZXJUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09i
amVjdCogY3JlYXRlR2V0dGVyVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgp
KTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpOwotICAgIGF1dG8qIGVycm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMs
IGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZShFcnJvclR5
cGU6OlR5cGVFcnJvciksIG1lc3NhZ2UpOworICAgIGF1dG8qIGVycm9yID0gRXJyb3JJbnN0YW5j
ZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3Qt
PmVycm9yU3RydWN0dXJlKEVycm9yVHlwZTo6VHlwZUVycm9yKSwgbWVzc2FnZSk7CiAgICAgZXJy
b3ItPnNldE5hdGl2ZUdldHRlclR5cGVFcnJvcigpOwogICAgIHJldHVybiBlcnJvcjsKIH0KQEAg
LTE2Nyw3ICsxNTQsNyBAQCBjbGFzcyBGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tG
dW5jdG9yIHsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW5kZXg7CiB9OwogCi1zdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPFN0YWNrRnJhbWU+PiBnZXRTdGFja1RyYWNlKEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtLCBKU09iamVjdCogb2JqLCBib29sIHVzZUN1cnJlbnRGcmFtZSkKK3N0ZDo6dW5pcXVl
X3B0cjxWZWN0b3I8U3RhY2tGcmFtZT4+IGdldFN0YWNrVHJhY2UoSlNHbG9iYWxPYmplY3QqLCBW
TSYgdm0sIEpTT2JqZWN0KiBvYmosIGJvb2wgdXNlQ3VycmVudEZyYW1lKQogewogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBvYmotPmdsb2JhbE9iamVjdCh2bSk7CiAgICAgaWYg
KCFnbG9iYWxPYmplY3QtPnN0YWNrVHJhY2VMaW1pdCgpKQpAQCAtMTc2LDE0ICsxNjMsMTYgQEAg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdGFja0ZyYW1lPj4gZ2V0U3RhY2tUcmFjZShFeGVjU3Rh
dGUqIGV4ZWMsIFZNJiB2bSwgSlNPYmoKICAgICBzaXplX3QgZnJhbWVzVG9Ta2lwID0gdXNlQ3Vy
cmVudEZyYW1lID8gMCA6IDE7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdGFja0ZyYW1l
Pj4gc3RhY2tUcmFjZSA9IG1ha2VVbmlxdWU8VmVjdG9yPFN0YWNrRnJhbWU+PigpOwogICAgIHZt
LmludGVycHJldGVyLT5nZXRTdGFja1RyYWNlKG9iaiwgKnN0YWNrVHJhY2UsIGZyYW1lc1RvU2tp
cCwgZ2xvYmFsT2JqZWN0LT5zdGFja1RyYWNlTGltaXQoKS52YWx1ZSgpKTsKLSAgICBpZiAoIXN0
YWNrVHJhY2UtPmlzRW1wdHkoKSkKLSAgICAgICAgQVNTRVJUX1VOVVNFRChleGVjLCBleGVjID09
IHZtLnRvcENhbGxGcmFtZSB8fCBleGVjLT5pc0dsb2JhbEV4ZWMoKSk7CisgICAgaWYgKCFzdGFj
a1RyYWNlLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gRklYTUUKKyAgICAgICAgLy8gQVNTRVJU
X1VOVVNFRChnbG9iYWxPYmplY3QsIGV4ZWMgPT0gdm0udG9wQ2FsbEZyYW1lIHx8IGdsb2JhbE9i
amVjdC0+aXNHbG9iYWxFeGVjKCkpOworICAgIH0KICAgICByZXR1cm4gc3RhY2tUcmFjZTsKIH0K
IAotdm9pZCBnZXRCeXRlY29kZU9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgVmVjdG9y
PFN0YWNrRnJhbWU+KiBzdGFja1RyYWNlLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIHVuc2lnbmVk
JiBieXRlY29kZU9mZnNldCkKK3ZvaWQgZ2V0Qnl0ZWNvZGVPZmZzZXQoVk0mIHZtLCBDYWxsRnJh
bWUqIHN0YXJ0Q2FsbEZyYW1lLCBWZWN0b3I8U3RhY2tGcmFtZT4qIHN0YWNrVHJhY2UsIENhbGxG
cmFtZSomIGNhbGxGcmFtZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0KQogewotICAgIEZpbmRG
aXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IgZnVuY3RvcihleGVjKTsKKyAgICBG
aW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yIGZ1bmN0b3Ioc3RhcnRDYWxs
RnJhbWUpOwogICAgIFN0YWNrVmlzaXRvcjo6dmlzaXQodm0udG9wQ2FsbEZyYW1lLCAmdm0sIGZ1
bmN0b3IpOwogICAgIGNhbGxGcmFtZSA9IGZ1bmN0b3IuZm91bmRDYWxsRnJhbWUoKTsKICAgICB1
bnNpZ25lZCBzdGFja0luZGV4ID0gZnVuY3Rvci5pbmRleCgpOwpAQCAtMjM3LDE2ICsyMjYsMTUg
QEAgYm9vbCBhZGRFcnJvckluZm8oVk0mIHZtLCBWZWN0b3I8U3RhY2tGcmFtZT4qIHN0YWNrVHJh
Y2UsIEpTT2JqZWN0KiBvYmopCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIGFkZEVycm9y
SW5mbyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmosIGJvb2wgdXNlQ3VycmVudEZyYW1l
KQordm9pZCBhZGRFcnJvckluZm8oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIG9iaiwgYm9vbCB1c2VDdXJyZW50RnJhbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0YWNrRnJhbWU+PiBzdGFja1RyYWNlID0g
Z2V0U3RhY2tUcmFjZShleGVjLCB2bSwgb2JqLCB1c2VDdXJyZW50RnJhbWUpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFN0YWNr
RnJhbWU+PiBzdGFja1RyYWNlID0gZ2V0U3RhY2tUcmFjZShnbG9iYWxPYmplY3QsIHZtLCBvYmos
IHVzZUN1cnJlbnRGcmFtZSk7CiAgICAgYWRkRXJyb3JJbmZvKHZtLCBzdGFja1RyYWNlLmdldCgp
LCBvYmopOwogfQogCi1KU09iamVjdCogYWRkRXJyb3JJbmZvKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBKU09iamVjdCogZXJyb3IsIGludCBsaW5lLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCitK
U09iamVjdCogYWRkRXJyb3JJbmZvKFZNJiB2bSwgSlNPYmplY3QqIGVycm9yLCBpbnQgbGluZSwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlKQogewotICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0o
KTsKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCA9IHNvdXJjZS5wcm92aWRlcigpLT51cmwo
KTsKICAgICAKICAgICAvLyBUaGUgcHV0RGlyZWN0KCkgY2FsbHMgYmVsb3cgc2hvdWxkIHJlYWxs
eSBiZSBwdXQoKSBzbyB0aGF0IHRoZXkgdHJpZ2dlciBtYXRlcmlhbGl6YXRpb24gb2YKQEAgLTI2
OSwxMDcgKzI1NywxMDIgQEAgSlNPYmplY3QqIGFkZEVycm9ySW5mbyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNPYmplY3QqIGVycm9yLCBpbnQgbGluZSwgY29uc3QgU28KICAgICByZXR1cm4gZXJy
b3I7CiB9CiAKLUV4Y2VwdGlvbiogdGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5j
dGlvblR5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBjb25zdHJ1Y3Rvck5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBtYWtlU3RyaW5nKCJjYWxsaW5nICIsIGNvbnN0cnVjdG9yTmFtZSwgIiBjb25zdHJ1
Y3RvciB3aXRob3V0IG5ldyBpcyBpbnZhbGlkIikpOwotfQotCi1FeGNlcHRpb24qIHRocm93VHlw
ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUpCitFeGNlcHRpb24qIHRo
cm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGNvbnN0
cnVjdG9yTmFtZSkKIHsKLSAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjKSk7CisgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIG1ha2VTdHJpbmcoImNhbGxpbmcgIiwgY29uc3RydWN0b3JOYW1lLCAiIGNv
bnN0cnVjdG9yIHdpdGhvdXQgbmV3IGlzIGludmFsaWQiKSk7CiB9CiAKLUV4Y2VwdGlvbiogdGhy
b3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgQVNDSUlMaXRl
cmFsIGVycm9yTWVzc2FnZSkKK0V4Y2VwdGlvbiogdGhyb3dUeXBlRXJyb3IoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2NvcGUpCiB7Ci0gICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBTdHJpbmcoZXJyb3JNZXNzYWdlKSk7CisgICAgcmV0dXJu
IHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihnbG9i
YWxPYmplY3QpKTsKIH0KIAotRXhjZXB0aW9uKiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4
ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitFeGNlcHRpb24q
IHRocm93VHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRocm93U2NvcGUm
IHNjb3BlLCBBU0NJSUxpdGVyYWwgZXJyb3JNZXNzYWdlKQogewotICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKKyAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgU3RyaW5nKGVycm9y
TWVzc2FnZSkpOwogfQogCi1FeGNlcHRpb24qIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRlKiBl
eGVjLCBUaHJvd1Njb3BlJiBzY29wZSkKK0V4Y2VwdGlvbiogdGhyb3dUeXBlRXJyb3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIHsKLSAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0
ZVN5bnRheEVycm9yKGV4ZWMsICJTeW50YXggZXJyb3IiX3MpKTsKKyAgICByZXR1cm4gdGhyb3dF
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgbWVzc2FnZSkpOwogfQogCi1FeGNlcHRpb24qIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRl
KiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorRXhjZXB0
aW9uKiB0aHJvd1N5bnRheEVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRocm93
U2NvcGUmIHNjb3BlKQogewotICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwg
Y3JlYXRlU3ludGF4RXJyb3IoZXhlYywgbWVzc2FnZSkpOworICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihnbG9iYWxPYmplY3Qs
ICJTeW50YXggZXJyb3IiX3MpKTsKIH0KIAotRXhjZXB0aW9uKiB0aHJvd0dldHRlclR5cGVFcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCitFeGNlcHRpb24qIHRocm93U3ludGF4RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUdldHRlclR5cGVFcnJvcihl
eGVjLCBtZXNzYWdlKSk7CisgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
c2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbWVzc2FnZSkpOwogfQogCi1K
U1ZhbHVlIHRocm93RE9NQXR0cmlidXRlR2V0dGVyVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywg
VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQorRXhjZXB0aW9uKiB0aHJvd0dldHRlclR5cGVFcnJvcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewotICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcihleGVjLCBzY29wZSwg
bWFrZVN0cmluZygiVGhlICIsIGNsYXNzSW5mby0+Y2xhc3NOYW1lLCAnLicsIFN0cmluZyhwcm9w
ZXJ0eU5hbWUudWlkKCkpLCAiIGdldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBv
ZiAiLCBjbGFzc0luZm8tPmNsYXNzTmFtZSkpOworICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVHZXR0ZXJUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBt
ZXNzYWdlKSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK0pTVmFsdWUgdGhyb3dET01BdHRyaWJ1dGVHZXR0ZXJUeXBl
RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2NvcGUsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewot
ICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCBtZXNzYWdlLCBudWxscHRyKTsKKyAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgbWFrZVN0cmluZygi
VGhlICIsIGNsYXNzSW5mby0+Y2xhc3NOYW1lLCAnLicsIFN0cmluZyhwcm9wZXJ0eU5hbWUudWlk
KCkpLCAiIGdldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBjbGFzc0lu
Zm8tPmNsYXNzTmFtZSkpOwogfQogCi1KU09iamVjdCogY3JlYXRlRXZhbEVycm9yKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZUVycm9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRXZhbEVycm9yKGV4ZWMsIG1lc3NhZ2UsIG51bGxwdHIpOworICAgIHJl
dHVybiBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsIG1lc3NhZ2UsIG51bGxwdHIpOwogfQogCi1K
U09iamVjdCogY3JlYXRlUmFuZ2VFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIHJldHVybiBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsIG1lc3NhZ2UsIG51bGxwdHIpOworICAgIHJldHVybiBjcmVhdGVFdmFsRXJy
b3IoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlLCBudWxscHRyKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0
ZVJhbmdlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09iamVjdCogY3JlYXRlUmFuZ2VFcnJvcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlLCBudWxs
cHRyKTsKKyAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIG1lc3NhZ2Us
IG51bGxwdHIpOwogfQogCi1KU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09iamVjdCogY3JlYXRlUmVmZXJlbmNl
RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogewotICAgIHJldHVybiBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBtZXNzYWdlLCBudWxs
cHRyKTsKKyAgICByZXR1cm4gY3JlYXRlUmVmZXJlbmNlRXJyb3IoZ2xvYmFsT2JqZWN0LCBtZXNz
YWdlLCBudWxscHRyKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZVN5bnRheEVycm9yKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZVN5bnRheEVy
cm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKLSAgICByZXR1cm4gY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgbWVzc2FnZSwgbnVsbHB0cik7
CisgICAgcmV0dXJuIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbWVzc2FnZSwgbnVs
bHB0cik7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjKQor
SlNPYmplY3QqIGNyZWF0ZVR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewotICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlR5cGUgZXJyb3IiX3MpOworICAg
IHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiVHlwZSBlcnJvciJfcyk7CiB9
CiAKLUpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCitKU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICByZXR1cm4gY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nKTsKKyAgICByZXR1
cm4gY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5v
dGhpbmcpOwogfQogCi1KU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoRXhl
Y1N0YXRlKiBleGVjKQorSlNPYmplY3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMsIG51bGxwdHIpOworICAgIHJldHVybiBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihnbG9iYWxPYmplY3QsIG51bGxwdHIpOwogfQogCi1KU09iamVjdCog
Y3JlYXRlVVJJRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitK
U09iamVjdCogY3JlYXRlVVJJRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIHJldHVybiBjcmVhdGVVUklFcnJvcihleGVjLCBt
ZXNzYWdlLCBudWxscHRyKTsKKyAgICByZXR1cm4gY3JlYXRlVVJJRXJyb3IoZ2xvYmFsT2JqZWN0
LCBtZXNzYWdlLCBudWxscHRyKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZU91dE9mTWVtb3J5RXJy
b3IoRXhlY1N0YXRlKiBleGVjKQorSlNPYmplY3QqIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBhdXRvKiBlcnJvciA9IGNyZWF0ZUVy
cm9yKGV4ZWMsICJPdXQgb2YgbWVtb3J5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvKiBlcnJvciA9
IGNyZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgIk91dCBvZiBtZW1vcnkiX3MsIG51bGxwdHIpOwog
ICAgIGpzQ2FzdDxFcnJvckluc3RhbmNlKj4oZXJyb3IpLT5zZXRPdXRPZk1lbW9yeUVycm9yKCk7
CiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1KU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVh
dGVPdXRPZk1lbW9yeUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKIHsKICAgICAKLSAgICBhdXRvKiBlcnJvciA9IGNyZWF0ZUVycm9yKGV4
ZWMsIG1ha2VTdHJpbmcoIk91dCBvZiBtZW1vcnk6ICIsIG1lc3NhZ2UpLCBudWxscHRyKTsKKyAg
ICBhdXRvKiBlcnJvciA9IGNyZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgbWFrZVN0cmluZygiT3V0
IG9mIG1lbW9yeTogIiwgbWVzc2FnZSksIG51bGxwdHIpOwogICAgIGpzQ2FzdDxFcnJvckluc3Rh
bmNlKj4oZXJyb3IpLT5zZXRPdXRPZk1lbW9yeUVycm9yKCk7CiAgICAgcmV0dXJuIGVycm9yOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKaW5kZXggN2I4ZDUyMWMyYjkxMTZm
ZjIwZjBhYjhlMDExMTUzYWNhM2Y1NjAxMS4uY2I3YmYzYWY1ZDkxZjYzZDZhZGUzODg2OTA4MGIw
NmIxODM3ZDMzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCkBAIC0zOSw2
NyArMzksNjMgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNz
IFNvdXJjZUNvZGU7CiBjbGFzcyBTdHJ1Y3R1cmU7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJh
bWU7Ci0KLS8vIEV4ZWNTdGF0ZSB3cmFwcGVycy4KLUpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7Ci1K
U09iamVjdCogY3JlYXRlRXZhbEVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEVycm9y
SW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKLUpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsK
LUpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOwotSlNPYmplY3Qq
IGNyZWF0ZVJlZmVyZW5jZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEVycm9ySW5z
dGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKLUpTT2JqZWN0KiBjcmVhdGVTeW50YXhFcnJvcihFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7Ci1K
U09iamVjdCogY3JlYXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEVycm9y
SW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyLCBSdW50aW1lVHlwZSk7Ci1KU09iamVjdCogY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JJbnN0YW5jZTo6U291cmNl
QXBwZW5kZXIpOwotSlNPYmplY3QqIGNyZWF0ZVVSSUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKLQotCi1KU19FWFBPUlRfUFJJ
VkFURSBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci1K
U19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlRXZhbEVycm9yKEV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJy
b3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci1KU19FWFBPUlRfUFJJVkFURSBKU09iamVj
dCogY3JlYXRlUmFuZ2VFcnJvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cmluZyYpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5jZUVycm9y
KEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3Qq
IGNyZWF0ZVN5bnRheEVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotSlNfRVhQT1JU
X1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVR5cGVFcnJvcihFeGVjU3RhdGUqKTsKLUpTX0VYUE9S
VF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJik7Ci1KU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoRXhlY1N0YXRlKik7Ci1KU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRl
VVJJRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci1KU19FWFBPUlRfUFJJVkFURSBK
U09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihFeGVjU3RhdGUqKTsKLUpTX0VYUE9SVF9Q
UklWQVRFIEpTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0
IFN0cmluZyYpOwotCi1KU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhl
Y1N0YXRlKiwgRXJyb3JUeXBlLCBjb25zdCBTdHJpbmcmKTsKLQotSlNPYmplY3QqIGNyZWF0ZUdl
dHRlclR5cGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLQotc3RkOjp1bmlxdWVf
cHRyPFZlY3RvcjxTdGFja0ZyYW1lPj4gZ2V0U3RhY2tUcmFjZShFeGVjU3RhdGUqLCBWTSYsIEpT
T2JqZWN0KiwgYm9vbCB1c2VDdXJyZW50RnJhbWUpOwotdm9pZCBnZXRCeXRlY29kZU9mZnNldChF
eGVjU3RhdGUqLCBWTSYsIFZlY3RvcjxTdGFja0ZyYW1lPiosIENhbGxGcmFtZSomLCB1bnNpZ25l
ZCYgYnl0ZWNvZGVPZmZzZXQpOworCitKU09iamVjdCogY3JlYXRlRXJyb3IoSlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CitKU09i
amVjdCogY3JlYXRlRXZhbEVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiwgRXJy
b3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOworSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3Io
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBl
bmRlcik7CitKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CitKU09iamVjdCog
Y3JlYXRlU3ludGF4RXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmLCBFcnJvcklu
c3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CitKU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEpTR2xv
YmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIs
IFJ1bnRpbWVUeXBlKTsKK0pTT2JqZWN0KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihK
U0dsb2JhbE9iamVjdCosIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKK0pTT2JqZWN0
KiBjcmVhdGVVUklFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYsIEVycm9ySW5z
dGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKKworCitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
Y3JlYXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKK0pTX0VYUE9SVF9Q
UklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
dHJpbmcmKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVj
dCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsK
K0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVTeW50YXhFcnJvcihKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFN0cmluZyYpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0
ZVR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCopOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3Qq
IGNyZWF0ZVR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOworSlNfRVhQ
T1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKEpTR2xv
YmFsT2JqZWN0Kik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlVVJJRXJyb3Io
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2Jq
ZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEpTR2xvYmFsT2JqZWN0Kik7CitKU19FWFBPUlRf
UFJJVkFURSBKU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihKU0dsb2JhbE9iamVjdCos
IGNvbnN0IFN0cmluZyYpOworCitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlRXJy
b3IoSlNHbG9iYWxPYmplY3QqLCBFcnJvclR5cGUsIGNvbnN0IFN0cmluZyYpOworCitKU09iamVj
dCogY3JlYXRlR2V0dGVyVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7
CisKK3N0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8U3RhY2tGcmFtZT4+IGdldFN0YWNrVHJhY2UoSlNH
bG9iYWxPYmplY3QqLCBWTSYsIEpTT2JqZWN0KiwgYm9vbCB1c2VDdXJyZW50RnJhbWUpOwordm9p
ZCBnZXRCeXRlY29kZU9mZnNldChWTSYsIENhbGxGcmFtZSosIFZlY3RvcjxTdGFja0ZyYW1lPios
IENhbGxGcmFtZSomLCB1bnNpZ25lZCYgYnl0ZWNvZGVPZmZzZXQpOwogYm9vbCBnZXRMaW5lQ29s
dW1uQW5kU291cmNlKFZlY3RvcjxTdGFja0ZyYW1lPiogc3RhY2tUcmFjZSwgdW5zaWduZWQmIGxp
bmUsIHVuc2lnbmVkJiBjb2x1bW4sIFN0cmluZyYgc291cmNlVVJMKTsKIGJvb2wgYWRkRXJyb3JJ
bmZvKFZNJiwgVmVjdG9yPFN0YWNrRnJhbWU+KiwgSlNPYmplY3QqKTsKLUpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkRXJyb3JJbmZvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgYm9vbCk7Ci1KU09i
amVjdCogYWRkRXJyb3JJbmZvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBlcnJvciwgaW50IGxpbmUs
IGNvbnN0IFNvdXJjZUNvZGUmKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkRXJyb3JJbmZv
KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBib29sKTsKK0pTT2JqZWN0KiBhZGRFcnJvcklu
Zm8oVk0mLCBKU09iamVjdCogZXJyb3IsIGludCBsaW5lLCBjb25zdCBTb3VyY2VDb2RlJik7CiAK
IC8vIE1ldGhvZHMgdG8gdGhyb3cgRXJyb3JzLgogCiAvLyBDb252ZW5pZW5jZSB3cmFwcGVycywg
Y3JlYXRlIGFuIHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoIGEgZGVmYXVsdCBtZXNzYWdlLgotSlNf
RVhQT1JUX1BSSVZBVEUgRXhjZXB0aW9uKiB0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRB
c0Z1bmN0aW9uVHlwZUVycm9yKEV4ZWNTdGF0ZSosIFRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBj
b25zdHJ1Y3Rvck5hbWUpOwotSlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0aW9uKiB0aHJvd1R5cGVF
cnJvcihFeGVjU3RhdGUqLCBUaHJvd1Njb3BlJik7Ci1KU19FWFBPUlRfUFJJVkFURSBFeGNlcHRp
b24qIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSosIFRocm93U2NvcGUmLCBBU0NJSUxpdGVyYWwg
ZXJyb3JNZXNzYWdlKTsKLUpTX0VYUE9SVF9QUklWQVRFIEV4Y2VwdGlvbiogdGhyb3dUeXBlRXJy
b3IoRXhlY1N0YXRlKiwgVGhyb3dTY29wZSYsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsK
LUpTX0VYUE9SVF9QUklWQVRFIEV4Y2VwdGlvbiogdGhyb3dTeW50YXhFcnJvcihFeGVjU3RhdGUq
LCBUaHJvd1Njb3BlJik7Ci1KU19FWFBPUlRfUFJJVkFURSBFeGNlcHRpb24qIHRocm93U3ludGF4
RXJyb3IoRXhlY1N0YXRlKiwgVGhyb3dTY29wZSYsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KTsKLWlubGluZSBFeGNlcHRpb24qIHRocm93UmFuZ2VFcnJvcihFeGVjU3RhdGUqIHN0YXRlLCBU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIHRo
cm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihzdGF0ZSwgZXJyb3JN
ZXNzYWdlKSk7IH0KK0pTX0VYUE9SVF9QUklWQVRFIEV4Y2VwdGlvbiogdGhyb3dDb25zdHJ1Y3Rv
ckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCosIFRocm93
U2NvcGUmLCBjb25zdCBjaGFyKiBjb25zdHJ1Y3Rvck5hbWUpOworSlNfRVhQT1JUX1BSSVZBVEUg
RXhjZXB0aW9uKiB0aHJvd1R5cGVFcnJvcihKU0dsb2JhbE9iamVjdCosIFRocm93U2NvcGUmKTsK
K0pTX0VYUE9SVF9QUklWQVRFIEV4Y2VwdGlvbiogdGhyb3dUeXBlRXJyb3IoSlNHbG9iYWxPYmpl
Y3QqLCBUaHJvd1Njb3BlJiwgQVNDSUlMaXRlcmFsIGVycm9yTWVzc2FnZSk7CitKU19FWFBPUlRf
UFJJVkFURSBFeGNlcHRpb24qIHRocm93VHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgVGhyb3dT
Y29wZSYsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEV4
Y2VwdGlvbiogdGhyb3dTeW50YXhFcnJvcihKU0dsb2JhbE9iamVjdCosIFRocm93U2NvcGUmKTsK
K0pTX0VYUE9SVF9QUklWQVRFIEV4Y2VwdGlvbiogdGhyb3dTeW50YXhFcnJvcihKU0dsb2JhbE9i
amVjdCosIFRocm93U2NvcGUmLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CitpbmxpbmUg
RXhjZXB0aW9uKiB0aHJvd1JhbmdlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7IHJldHVybiB0
aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2Jh
bE9iamVjdCwgZXJyb3JNZXNzYWdlKSk7IH0KIAotSlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0aW9u
KiB0aHJvd0dldHRlclR5cGVFcnJvcihFeGVjU3RhdGUqLCBUaHJvd1Njb3BlJiwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aHJvd0RPTUF0
dHJpYnV0ZUdldHRlclR5cGVFcnJvcihFeGVjU3RhdGUqLCBUaHJvd1Njb3BlJiwgY29uc3QgQ2xh
c3NJbmZvKiwgUHJvcGVydHlOYW1lKTsKK0pTX0VYUE9SVF9QUklWQVRFIEV4Y2VwdGlvbiogdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBUaHJvd1Njb3BlJiwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aHJvd0RPTUF0
dHJpYnV0ZUdldHRlclR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCosIFRocm93U2NvcGUmLCBjb25z
dCBDbGFzc0luZm8qLCBQcm9wZXJ0eU5hbWUpOwogCiAvLyBDb252ZW5pZW5jZSB3cmFwcGVycywg
d3JhcCByZXN1bHQgYXMgYW4gRW5jb2RlZEpTVmFsdWUuCi1pbmxpbmUgdm9pZCB0aHJvd1ZNRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgRXhjZXB0aW9uKiBleGNlcHRp
b24pIHsgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGV4Y2VwdGlvbik7IH0KLWlubGluZSBF
bmNvZGVkSlNWYWx1ZSB0aHJvd1ZNRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBz
Y29wZSwgSlNWYWx1ZSBlcnJvcikgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcikpOyB9Ci1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dW
TUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGVy
cm9yTWVzc2FnZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMs
IHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpKSk7IH0KLWlubGluZSBFbmNv
ZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYg
c2NvcGUpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSkpOyB9Ci1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVR5cGVFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBBU0NJSUxpdGVyYWwgZXJyb3JNZXNzYWdlKSB7IHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIGVycm9yTWVz
c2FnZSkpOyB9Ci1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVR5cGVFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkg
eyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBlcnJv
ck1lc3NhZ2UpKTsgfQotaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1SYW5nZUVycm9yKEV4
ZWNTdGF0ZSogc3RhdGUsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93UmFuZ2VFcnJvcihzdGF0ZSwgc2Nv
cGUsIGVycm9yTWVzc2FnZSkpOyB9Ci1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTUdldHRl
clR5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93R2V0dGVyVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBlcnJvck1lc3NhZ2UpKTsgfQotaW5saW5lIEVuY29kZWRKU1Zh
bHVlIHRocm93Vk1ET01BdHRyaWJ1dGVHZXR0ZXJUeXBlRXJyb3IoRXhlY1N0YXRlKiBzdGF0ZSwg
VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dET01BdHRyaWJ1
dGVHZXR0ZXJUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBjbGFzc0luZm8sIHByb3BlcnR5TmFtZSkp
OyB9CitpbmxpbmUgdm9pZCB0aHJvd1ZNRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVGhyb3dTY29wZSYgc2NvcGUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGV4Y2VwdGlvbik7IH0KK2lubGluZSBFbmNvZGVkSlNW
YWx1ZSB0aHJvd1ZNRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29w
ZSYgc2NvcGUsIEpTVmFsdWUgZXJyb3IpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvcikpOyB9CitpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgdGhyb3dWTUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9i
YWxPYmplY3QsIGVycm9yTWVzc2FnZSkpKTsgfQoraW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93
Vk1UeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2Nv
cGUpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlKSk7IH0KK2lubGluZSBFbmNvZGVkSlNWYWx1ZSB0aHJvd1ZNVHlwZUVycm9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHNjb3BlLCBBU0NJSUxpdGVyYWwg
ZXJyb3JNZXNzYWdlKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKSk7IH0KK2lubGluZSBFbmNvZGVkSlNWYWx1
ZSB0aHJvd1ZNVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSkp
OyB9CitpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhyb3dWTVJhbmdlRXJyb3IoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dSYW5nZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSkpOyB9CitpbmxpbmUgRW5jb2RlZEpTVmFsdWUgdGhy
b3dWTUdldHRlclR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUaHJvd1Nj
b3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0dldHRlclR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1l
c3NhZ2UpKTsgfQoraW5saW5lIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1ET01BdHRyaWJ1dGVHZXR0
ZXJUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2Nv
cGUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dET01BdHRyaWJ1dGVHZXR0ZXJUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY2xhc3NJbmZvLCBwcm9wZXJ0eU5hbWUpKTsgfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JDb25zdHJ1Y3Rvci5jcHAKaW5kZXggM2VjNjM3NzZjOTA5MDA1MmQ2OTZhY2RhOTY5ZTE5
MDAxNTY3NjRlOC4uOGI5ZmIzNGU3ZWJlY2ExZmRlMmNmMDU0ODU3YjM5ZTJjMjBkMmY4OSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5j
cHAKQEAgLTU3LDIxICs1NywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEVycm9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
LSAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpLCBnbG9i
YWxPYmplY3QtPmVycm9yU3RydWN0dXJlKCkpOworICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1
cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwgZ2xvYmFs
T2JqZWN0LT5lcnJvclN0cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoY2FsbEZyYW1lLCBlcnJvclN0cnVjdHVy
ZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSkpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShn
bG9iYWxPYmplY3QsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBlTm90aGlu
ZywgZmFsc2UpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEVycm9y
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
ICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVj
dHVyZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGNhbGxGcmFtZSwgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5n
LCBmYWxzZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3Jl
YXRlKGdsb2JhbE9iamVjdCwgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVO
b3RoaW5nLCBmYWxzZSkpOwogfQogCi1ib29sIEVycm9yQ29uc3RydWN0b3I6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBFcnJvckNvbnN0cnVjdG9yOjpw
dXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgRXJyb3JDb25zdHJ1Y3RvciogdGhpc09iamVjdCA9IGpzQ2FzdDxFcnJvckNvbnN0
cnVjdG9yKj4oY2VsbCk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFt
ZXMtPnN0YWNrVHJhY2VMaW1pdCkgewpAQCAtODQsMTggKzg0LDE4IEBAIGJvb2wgRXJyb3JDb25z
dHJ1Y3Rvcjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+c2V0U3Rh
Y2tUcmFjZUxpbWl0KFdURjo6bnVsbG9wdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEJhc2U6OnB1
dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICByZXR1
cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7CiB9CiAKLWJvb2wgRXJyb3JDb25zdHJ1Y3Rvcjo6ZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiti
b29sIEVycm9yQ29uc3RydWN0b3I6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBFcnJvckNvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEVycm9yQ29uc3RydWN0
b3IqPihjZWxsKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+
c3RhY2tUcmFjZUxpbWl0KQogICAgICAgICB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+c2V0
U3RhY2tUcmFjZUxpbWl0KFdURjo6bnVsbG9wdCk7CiAKLSAgICByZXR1cm4gQmFzZTo6ZGVsZXRl
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gQmFz
ZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAppbmRleCA2ZWRlZTczMDA2NmY3NWJhZjViNmFjNjA3
Mzk3NjBlMzI0Yjc4NmJjLi44NzM1MThiNGM0ODkwZTkzMGFiZTE5ZDZiZWFiOGIwNDY0ZTI1ZmU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVj
dG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rv
ci5oCkBAIC00OCw4ICs0OCw4IEBAIGNsYXNzIEVycm9yQ29uc3RydWN0b3IgZmluYWwgOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbiB7CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIEVycm9yUHJvdG90eXBlKik7CiAKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOworICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpOwog
CiBwcml2YXRlOgogICAgIEVycm9yQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKaW5kZXggNDFj
NTc1ZGJjZjZlOWM3YzM1NjEyZWViNTg4YWYzY2NkYTNjZjBlOS4uNmRmNjhkYmRmYzNiYzgwYTE4
N2E0ZTVkZjkyNDkyOTE2MTEyMWY0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKQEAgLTM5LDE2ICszOSwxNiBAQCBFcnJvckluc3RhbmNl
OjpFcnJvckluc3RhbmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiB9CiAKLUVy
cm9ySW5zdGFuY2UqIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBtZXNzYWdlLCBTb3VyY2VBcHBlbmRlciBhcHBlbmRl
ciwgUnVudGltZVR5cGUgdHlwZSwgYm9vbCB1c2VDdXJyZW50RnJhbWUpCitFcnJvckluc3RhbmNl
KiBFcnJvckluc3RhbmNlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgbWVzc2FnZSwgU291cmNlQXBwZW5kZXIgYXBwZW5k
ZXIsIFJ1bnRpbWVUeXBlIHR5cGUsIGJvb2wgdXNlQ3VycmVudEZyYW1lKQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2VT
dHJpbmcgPSBtZXNzYWdlLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IG1lc3NhZ2UudG9XVEZT
dHJpbmcoc3RhdGUpOworICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS5pc1VuZGVm
aW5lZCgpID8gU3RyaW5nKCkgOiBtZXNzYWdlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGNyZWF0
ZShzdGF0ZSwgdm0sIHN0cnVjdHVyZSwgbWVzc2FnZVN0cmluZywgYXBwZW5kZXIsIHR5cGUsIHVz
ZUN1cnJlbnRGcmFtZSk7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBzdHJ1
Y3R1cmUsIG1lc3NhZ2VTdHJpbmcsIGFwcGVuZGVyLCB0eXBlLCB1c2VDdXJyZW50RnJhbWUpOwog
fQogCi1zdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBFcnJvckluc3RhbmNlKiBleGNlcHRpb24sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorc3Rh
dGljIHZvaWQgYXBwZW5kU291cmNlVG9FcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXJyb3JJbnN0YW5jZSogZXhjZXB0aW9uLCB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKIHsKICAgICBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBh
cHBlbmRlciA9IGV4Y2VwdGlvbi0+c291cmNlQXBwZW5kZXIoKTsKICAgICBleGNlcHRpb24tPmNs
ZWFyU291cmNlQXBwZW5kZXIoKTsKQEAgLTgwLDEyICs4MCwxMiBAQCBzdGF0aWMgdm9pZCBhcHBl
bmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFcnJvckluc3RhbmNlKiBleGNl
cHRpb24sCiAgICAgaWYgKCFleHByZXNzaW9uU3RvcCB8fCBleHByZXNzaW9uU3RhcnQgPiBzdGF0
aWNfY2FzdDxpbnQ+KHNvdXJjZVN0cmluZy5sZW5ndGgoKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIEpTVmFsdWUganNNZXNzYWdlID0gZXhjZXB0aW9uLT5nZXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UpOwogICAgIGlmICghanNNZXNzYWdlIHx8ICFq
c01lc3NhZ2UuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFN0cmluZyBt
ZXNzYWdlID0gYXNTdHJpbmcoanNNZXNzYWdlKS0+dmFsdWUoY2FsbEZyYW1lKTsKKyAgICBTdHJp
bmcgbWVzc2FnZSA9IGFzU3RyaW5nKGpzTWVzc2FnZSktPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAg
ICAgaWYgKGV4cHJlc3Npb25TdGFydCA8IGV4cHJlc3Npb25TdG9wKQogICAgICAgICBtZXNzYWdl
ID0gYXBwZW5kZXIobWVzc2FnZSwgY29kZUJsb2NrLT5zb3VyY2UoKS5wcm92aWRlcigpLT5nZXRS
YW5nZShleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25TdG9wKS50b1N0cmluZygpLCB0eXBlLCBF
cnJvckluc3RhbmNlOjpGb3VuZEV4YWN0U291cmNlKTsKICAgICBlbHNlIHsKQEAgLTEwOSwxNCAr
MTA5LDE0IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3IoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEVycm9ySW5zdGFuY2UqIGV4Y2VwdGlvbiwKIAogfQogCi12b2lkIEVycm9ySW5zdGFu
Y2U6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIGJvb2wgdXNlQ3VycmVudEZyYW1lKQordm9pZCBFcnJvckluc3RhbmNlOjpmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgYm9vbCB1c2VDdXJyZW50RnJhbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiAgICAgaWYg
KCFtZXNzYWdlLmlzTnVsbCgpKQogICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKHZtLCBtZXNzYWdlKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFZl
Y3RvcjxTdGFja0ZyYW1lPj4gc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoZXhlYywgdm0sIHRo
aXMsIHVzZUN1cnJlbnRGcmFtZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdGFja0Zy
YW1lPj4gc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoZ2xvYmFsT2JqZWN0LCB2bSwgdGhpcywg
dXNlQ3VycmVudEZyYW1lKTsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
Y2VsbExvY2soKSk7CiAgICAgICAgIG1fc3RhY2tUcmFjZSA9IFdURk1vdmUoc3RhY2tUcmFjZSk7
CkBAIC0xMjYsMTAgKzEyNiwxMCBAQCB2b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBjb25zdCBTdHJpbmcmIG1lc3NhZwogICAgIGlmICht
X3N0YWNrVHJhY2UgJiYgIW1fc3RhY2tUcmFjZS0+aXNFbXB0eSgpICYmIGhhc1NvdXJjZUFwcGVu
ZGVyKCkpIHsKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lOwotICAgICAgICBnZXRCeXRlY29kZU9mZnNldChleGVjLCB2bSwgbV9z
dGFja1RyYWNlLmdldCgpLCBjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgZ2V0
Qnl0ZWNvZGVPZmZzZXQodm0sIHZtLnRvcENhbGxGcmFtZSwgbV9zdGFja1RyYWNlLmdldCgpLCBj
YWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Y2Fs
bGVlKCkuaXNXYXNtKCkpOwotICAgICAgICAgICAgYXBwZW5kU291cmNlVG9FcnJvcihjYWxsRnJh
bWUsIHRoaXMsIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIGFwcGVuZFNvdXJjZVRvRXJy
b3IoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHRoaXMsIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTE0Miw5ICsxNDIsOSBAQCB2b2lkIEVycm9ySW5zdGFuY2U6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQogLy8gQmFzZWQgb24gRXJyb3JQcm90b3R5cGUncyBlcnJvclBy
b3RvRnVuY1RvU3RyaW5nKCksIGJ1dCBpcyBtb2RpZmllZCB0bwogLy8gaGF2ZSBubyBvYnNlcnZh
YmxlIHNpZGUgZWZmZWN0cyB0byB0aGUgdXNlciAoaS5lLiBkb2VzIG5vdCBjYWxsIHByb3hpZXMs
CiAvLyBhbmQgZ2V0dGVycykuCi1TdHJpbmcgRXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkVG9TdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQorU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRvU3Ry
aW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBuYW1lVmFsdWU7CkBAIC0x
NTksOCArMTU5LDggQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRvU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykKICAgICAvLyBhIG5hbWUgcHJvcGVydHkgZm9yIHRoZSB0eXBlIG9mIGVy
cm9yIGUuZy4gIlN5bnRheEVycm9yIi4KICAgICB3aGlsZSAoY3VycmVudE9iai5pc0NlbGwoKSAm
JiBwcm90b3R5cGVEZXB0aCsrIDwgMikgewogICAgICAgICBKU09iamVjdCogb2JqID0ganNDYXN0
PEpTT2JqZWN0Kj4oY3VycmVudE9iaik7Ci0gICAgICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KG9iaiwgZXhlYywgbmFtZVByb3BlcnROYW1lLCBuYW1lU2xvdCkgJiYgbmFtZVNs
b3QuaXNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBuYW1lVmFsdWUgPSBuYW1lU2xvdC5nZXRWYWx1
ZShleGVjLCBuYW1lUHJvcGVydE5hbWUpOworICAgICAgICBpZiAoSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdChvYmosIGdsb2JhbE9iamVjdCwgbmFtZVByb3BlcnROYW1lLCBuYW1lU2xvdCkg
JiYgbmFtZVNsb3QuaXNWYWx1ZSgpKSB7CisgICAgICAgICAgICBuYW1lVmFsdWUgPSBuYW1lU2xv
dC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIG5hbWVQcm9wZXJ0TmFtZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjdXJyZW50T2JqID0gb2JqLT5nZXRQcm90b3R5cGVE
aXJlY3Qodm0pOwpAQCAtMTcxLDIyICsxNzEsMjIgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNh
bml0aXplZFRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoIW5hbWVWYWx1ZSkKICAg
ICAgICAgbmFtZVN0cmluZyA9ICJFcnJvciJfczsKICAgICBlbHNlIHsKLSAgICAgICAgbmFtZVN0
cmluZyA9IG5hbWVWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKKyAgICAgICAgbmFtZVN0cmluZyA9
IG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBTdHJpbmcoKSk7CiAgICAgfQogCiAgICAgSlNWYWx1ZSBtZXNzYWdl
VmFsdWU7CiAgICAgYXV0byBtZXNzYWdlUHJvcGVydE5hbWUgPSB2bS5wcm9wZXJ0eU5hbWVzLT5t
ZXNzYWdlOwogICAgIFByb3BlcnR5U2xvdCBtZXNzYWdlU2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKLSAgICBpZiAoSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzLCBleGVjLCBtZXNzYWdlUHJvcGVydE5hbWUsIG1lc3NhZ2VTbG90
KSAmJiBtZXNzYWdlU2xvdC5pc1ZhbHVlKCkpCi0gICAgICAgIG1lc3NhZ2VWYWx1ZSA9IG1lc3Nh
Z2VTbG90LmdldFZhbHVlKGV4ZWMsIG1lc3NhZ2VQcm9wZXJ0TmFtZSk7CisgICAgaWYgKEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUHJvcGVy
dE5hbWUsIG1lc3NhZ2VTbG90KSAmJiBtZXNzYWdlU2xvdC5pc1ZhbHVlKCkpCisgICAgICAgIG1l
c3NhZ2VWYWx1ZSA9IG1lc3NhZ2VTbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgbWVzc2FnZVBy
b3BlcnROYW1lKTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCiAgICAgU3RyaW5n
IG1lc3NhZ2VTdHJpbmc7CiAgICAgaWYgKCFtZXNzYWdlVmFsdWUpCiAgICAgICAgIG1lc3NhZ2VT
dHJpbmcgPSBTdHJpbmcoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1l
c3NhZ2VWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKKyAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1l
c3NhZ2VWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBTdHJpbmcoKSk7CiAgICAgfQogCkBAIC0yNjIsNTQgKzI2Miw1NCBA
QCBib29sIEVycm9ySW5zdGFuY2U6Om1hdGVyaWFsaXplRXJyb3JJbmZvSWZOZWVkZWQoVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBF
cnJvckluc3RhbmNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Citib29sIEVycm9ySW5zdGFuY2U6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgRXJyb3JJbnN0YW5jZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxFcnJvckluc3RhbmNlKj4ob2JqZWN0KTsKICAgICB0aGlzT2JqZWN0LT5tYXRl
cmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtLCBwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiBC
YXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBFcnJvckluc3RhbmNl
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9u
TW9kZSBlbnVtZXJhdGlvbk1vZGUpCit2b2lkIEVycm9ySW5zdGFuY2U6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9k
ZSBlbnVtZXJhdGlvbk1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgRXJyb3JJbnN0YW5jZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxFcnJvckluc3RhbmNlKj4ob2JqZWN0KTsKICAgICB0aGlzT2JqZWN0LT5tYXRlcmlh
bGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtKTsKLSAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lQXJyYXksIGVudW1lcmF0aW9u
TW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3Qs
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lQXJyYXksIGVudW1lcmF0aW9uTW9kZSk7CiB9CiAK
LXZvaWQgRXJyb3JJbnN0YW5jZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVB
cnJheSwgRW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgRXJyb3JJbnN0YW5j
ZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXks
IEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgRXJyb3JJbnN0YW5j
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxFcnJvckluc3RhbmNlKj4ob2JqZWN0KTsKICAgICB0aGlz
T2JqZWN0LT5tYXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtKTsKLSAgICBCYXNlOjpnZXRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZUFycmF5
LCBlbnVtZXJhdGlvbk1vZGUpOworICAgIEJhc2U6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVBcnJheSwgZW51bWVyYXRpb25N
b2RlKTsKIH0KIAotYm9vbCBFcnJvckluc3RhbmNlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK2Jv
b2wgRXJyb3JJbnN0YW5jZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIEVycm9ySW5zdGFuY2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXJyb3JJbnN0YW5jZSo+
KG9iamVjdCk7CiAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVFcnJvckluZm9JZk5lZWRlZCh2
bSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cisg
ICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKLWJvb2wgRXJy
b3JJbnN0YW5jZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiti
b29sIEVycm9ySW5zdGFuY2U6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBFcnJvckluc3RhbmNlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEVycm9ySW5zdGFuY2UqPihjZWxsKTsKICAgICBib29sIG1hdGVyaWFsaXplZFByb3Bl
cnRpZXMgPSB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtLCBwcm9w
ZXJ0eU5hbWUpOwogICAgIGlmIChtYXRlcmlhbGl6ZWRQcm9wZXJ0aWVzKQogICAgICAgICBzbG90
LmRpc2FibGVDYWNoaW5nKCk7Ci0gICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNP
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLWJv
b2wgRXJyb3JJbnN0YW5jZTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEVycm9ySW5zdGFuY2U6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBFcnJvckluc3RhbmNlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEVycm9ySW5zdGFuY2UqPihjZWxsKTsKICAgICB0aGlzT2JqZWN0LT5t
YXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtLCBwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVy
biBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwor
ICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCmluZGV4IDk3YTg5ZGFmOGMyNjMxMjc0
N2Y4MTE2OGY1OTE2MzNhZjI1OWEyZGQuLjQ3OTMyMTBmYzRkYWQ3MjBkMDYzNmI2ODIwNWYzODMw
MTU2M2RlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
SW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3Rh
bmNlLmgKQEAgLTQxLDE2ICs0MSwxNiBAQCBjbGFzcyBFcnJvckluc3RhbmNlIDogcHVibGljIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRXJyb3JJbnN0YW5j
ZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTb3VyY2VBcHBlbmRlciBhcHBlbmRlciA9IG51bGxwdHIs
IFJ1bnRpbWVUeXBlIHR5cGUgPSBUeXBlTm90aGluZywgYm9vbCB1c2VDdXJyZW50RnJhbWUgPSB0
cnVlKQorICAgIHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBTb3VyY2VBcHBlbmRlciBhcHBlbmRlciA9IG51bGxwdHIsIFJ1bnRpbWVUeXBlIHR5
cGUgPSBUeXBlTm90aGluZywgYm9vbCB1c2VDdXJyZW50RnJhbWUgPSB0cnVlKQogICAgIHsKICAg
ICAgICAgRXJyb3JJbnN0YW5jZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxFcnJvckluc3RhbmNlPih2bS5oZWFwKSkgRXJyb3JJbnN0YW5jZSh2bSwgc3RydWN0dXJlKTsK
ICAgICAgICAgaW5zdGFuY2UtPm1fc291cmNlQXBwZW5kZXIgPSBhcHBlbmRlcjsKICAgICAgICAg
aW5zdGFuY2UtPm1fcnVudGltZVR5cGVGb3JDYXVzZSA9IHR5cGU7Ci0gICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSwgbWVzc2FnZSwgdXNlQ3VycmVudEZyYW1lKTsKKyAg
ICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCwgdm0sIG1lc3NhZ2Us
IHVzZUN1cnJlbnRGcmFtZSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEpT
VmFsdWUgbWVzc2FnZSwgU291cmNlQXBwZW5kZXIgPSBudWxscHRyLCBSdW50aW1lVHlwZSA9IFR5
cGVOb3RoaW5nLCBib29sIHVzZUN1cnJlbnRGcmFtZSA9IHRydWUpOworICAgIHN0YXRpYyBFcnJv
ckluc3RhbmNlKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIG1l
c3NhZ2UsIFNvdXJjZUFwcGVuZGVyID0gbnVsbHB0ciwgUnVudGltZVR5cGUgPSBUeXBlTm90aGlu
ZywgYm9vbCB1c2VDdXJyZW50RnJhbWUgPSB0cnVlKTsKIAogICAgIGJvb2wgaGFzU291cmNlQXBw
ZW5kZXIoKSBjb25zdCB7IHJldHVybiAhIW1fc291cmNlQXBwZW5kZXI7IH0KICAgICBTb3VyY2VB
cHBlbmRlciBzb3VyY2VBcHBlbmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQXBwZW5kZXI7
IH0KQEAgLTY4LDcgKzY4LDcgQEAgY2xhc3MgRXJyb3JJbnN0YW5jZSA6IHB1YmxpYyBKU0Rlc3Ry
dWN0aWJsZU9iamVjdCB7CiAgICAgdm9pZCBzZXROYXRpdmVHZXR0ZXJUeXBlRXJyb3IoKSB7IG1f
bmF0aXZlR2V0dGVyVHlwZUVycm9yID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNOYXRpdmVHZXR0ZXJU
eXBlRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUdldHRlclR5cGVFcnJvcjsgfQogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNhbml0aXplZFRvU3RyaW5nKEV4ZWNTdGF0ZSop
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzYW5pdGl6ZWRUb1N0cmluZyhKU0dsb2Jh
bE9iamVjdCopOwogICAgIAogICAgIFZlY3RvcjxTdGFja0ZyYW1lPiogc3RhY2tUcmFjZSgpIHsg
cmV0dXJuIG1fc3RhY2tUcmFjZS5nZXQoKTsgfQogCkBAIC04NiwxNSArODYsMTUgQEAgY2xhc3Mg
RXJyb3JJbnN0YW5jZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwcm90ZWN0ZWQ6
CiAgICAgZXhwbGljaXQgRXJyb3JJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSopOwogCi0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBWTSYsIGNvbnN0IFN0cmluZyYsIGJvb2wgdXNl
Q3VycmVudEZyYW1lID0gdHJ1ZSk7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9i
amVjdCosIFZNJiwgY29uc3QgU3RyaW5nJiwgYm9vbCB1c2VDdXJyZW50RnJhbWUgPSB0cnVlKTsK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBz
dGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Ci0g
ICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHko
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUpOwogCiAgICAgdm9pZCBjb21wdXRlRXJyb3JJbmZvKFZNJik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAppbmRleCA2MWM0ZjQx
YTBmYTM4MDNjMTRkMGZjNGZjYWQxZjAwMDc5MTIwZjQ0Li4wMmM0NTExOTY0ODA5OWQ2YjAzYWFi
Njg3NDkxMTRmOGQzZjM0ZGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvclByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JQcm90b3R5cGUuY3BwCkBAIC04MSwxNyArODEsMTcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QKIAogICAgIC8vIDIuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBU
eXBlRXJyb3IgZXhjZXB0aW9uLgogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICBKU09iamVj
dCogdGhpc09iaiA9IGFzT2JqZWN0KHRoaXNWYWx1ZSk7CiAKICAgICAvLyBHdWFyZCBhZ2FpbnN0
IHJlY3Vyc2lvbiEKLSAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoY2FsbEZyYW1l
LCB0aGlzT2JqKTsKKyAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZ2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqKTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8
fCBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSk7CiAgICAgaWYgKEpTVmFsdWUgZWFybHlSZXR1
cm5WYWx1ZSA9IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwogCiAgICAgLy8gMy4gTGV0IG5hbWUgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdp
dGggYXJndW1lbnQgIm5hbWUiLgotICAgIEpTVmFsdWUgbmFtZSA9IHRoaXNPYmotPmdldChjYWxs
RnJhbWUsIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUpOworICAgIEpTVmFsdWUgbmFtZSA9IHRoaXNP
YmotPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gNC4gSWYg
bmFtZSBpcyB1bmRlZmluZWQsIHRoZW4gbGV0IG5hbWUgYmUgIkVycm9yIjsgZWxzZSBsZXQgbmFt
ZSBiZSBUb1N0cmluZyhuYW1lKS4KQEAgLTk5LDEyICs5OSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdAogICAgIGlmIChuYW1lLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5hbWVTdHJpbmcg
PSAiRXJyb3IiX3M7CiAgICAgZWxzZSB7Ci0gICAgICAgIG5hbWVTdHJpbmcgPSBuYW1lLnRvV1RG
U3RyaW5nKGNhbGxGcmFtZSk7CisgICAgICAgIG5hbWVTdHJpbmcgPSBuYW1lLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIH0KIAogICAgIC8vIDUuIExldCBtc2cgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQg
Im1lc3NhZ2UiLgotICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNPYmotPmdldChjYWxsRnJhbWUs
IHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UpOworICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNP
YmotPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gKHNp
YykKQEAgLTExNCw3ICsxMTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9y
UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgIGlmICht
ZXNzYWdlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBTdHJpbmcoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UudG9XVEZTdHJpbmco
Y2FsbEZyYW1lKTsKKyAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UudG9XVEZTdHJpbmco
Z2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgfQogCkBAIC0xMjcsNyArMTI3LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuYW1lLmlzU3RyaW5nKCkg
PyBuYW1lIDoganNTdHJpbmcodm0sIG5hbWVTdHJpbmcpKTsKIAogICAgIC8vIDEwLiBSZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb25jYXRlbmF0aW5nIG5hbWUsICI6IiwgYSBzaW5nbGUgc3BhY2UgY2hh
cmFjdGVyLCBhbmQgbXNnLgotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoY2FsbEZyYW1lLCBuYW1lU3RyaW5nLCAiOiAi
LCBtZXNzYWdlU3RyaW5nKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZ2xvYmFsT2JqZWN0LCBuYW1lU3RyaW5n
LCAiOiAiLCBtZXNzYWdlU3RyaW5nKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAppbmRleCBl
MmNhNDA4MWRhMzI4NTVjMmZhYTEzMDAxMTU0NjY2NTY1OTQwMTc5Li45NDdlMjdmZjNjOGM3MjYy
ZDhjNWQ3YzUzZTA3ODU3YmFkNzY0YTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCkBAIC0zMyw4ICszMyw4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2YWxF
eGVjdXRhYmxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShFdmFsRXhlY3V0YWJsZSkgfTsKIAotRXZhbEV4ZWN1dGFibGU6OkV2YWxFeGVjdXRh
YmxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGluU3Ry
aWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBp
c0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlKQot
ICAgIDogQmFzZShleGVjLT52bSgpLmV2YWxFeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBleGVj
LT52bSgpLCBzb3VyY2UsIGluU3RyaWN0Q29udGV4dCwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0Fy
cm93RnVuY3Rpb25Db250ZXh0LCBldmFsQ29udGV4dFR5cGUsIE5vSW50cmluc2ljKQorRXZhbEV4
ZWN1dGFibGU6OkV2YWxFeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250
ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwg
RXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0
LT52bSgpLmV2YWxFeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBnbG9iYWxPYmplY3QtPnZtKCks
IHNvdXJjZSwgaW5TdHJpY3RDb250ZXh0LCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5j
dGlvbkNvbnRleHQsIGV2YWxDb250ZXh0VHlwZSwgTm9JbnRyaW5zaWMpCiB7CiAgICAgQVNTRVJU
KHNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2VUeXBlKCkgPT0gU291cmNlUHJvdmlkZXJTb3VyY2VU
eXBlOjpQcm9ncmFtKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V2YWxFeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFs
RXhlY3V0YWJsZS5oCmluZGV4IDM1MzA2NTk3ZDMxMjk2NTQ0N2NkYTc0YTA0NTkzZDZlYmViYWY1
NjEuLjE2NDQ0NWUwMzAyOTgzZWRlNWE2M2Y4MjRmMTJkN2Y2NTIxMjM2NzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaApAQCAtNzYsNyArNzYs
NyBAQCBjbGFzcyBFdmFsRXhlY3V0YWJsZSA6IHB1YmxpYyBHbG9iYWxFeGVjdXRhYmxlIHsKICAg
ICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKIAogICAgIHVzaW5nIEJhc2U6OmZpbmlz
aENyZWF0aW9uOwotICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNv
ZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJy
b3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSk7CisgICAgRXZhbEV4ZWN1dGFibGUo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQs
IERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29u
dGV4dFR5cGUpOwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25GdXp6LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkZ1enouY3BwCmluZGV4IDZhMTQ4NDUwZGZiNTkxNDhlMzdhZjkzMGQ5NjNhMmRhNmJiNTMwOGEu
LmZkNzM1MzRiYWU2NWRmOGMwYjc3ODVhZThmMjAxMjBmMDYzYzEwNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCkBAIC0zNiw3ICszNiw3
IEBAIHN0YXRpYyB1bnNpZ25lZCBzX251bWJlck9mRXhjZXB0aW9uRnV6ekNoZWNrczsKIHVuc2ln
bmVkIG51bWJlck9mRXhjZXB0aW9uRnV6ekNoZWNrcygpIHsgcmV0dXJuIHNfbnVtYmVyT2ZFeGNl
cHRpb25GdXp6Q2hlY2tzOyB9CiAKIC8vIENhbGwgdGhpcyBvbmx5IGlmIHlvdSBrbm93IHRoYXQg
ZXhjZXB0aW9uIGZ1enppbmcgaXMgZW5hYmxlZC4KLXZvaWQgZG9FeGNlcHRpb25GdXp6aW5nKEV4
ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIHdoZXJlLCBjb25z
dCB2b2lkKiByZXR1cm5QQykKK3ZvaWQgZG9FeGNlcHRpb25GdXp6aW5nKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiB3aGVyZSwgY29u
c3Qgdm9pZCogcmV0dXJuUEMpCiB7CiAgICAgVk0mIHZtID0gc2NvcGUudm0oKTsKICAgICBBU1NF
UlQoT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKTsKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBk
b0V4Y2VwdGlvbkZ1enppbmcoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgY29u
c3QgY2hhciogd2hlcmUsIGMKICAgICAKICAgICB1bnNpZ25lZCBmaXJlVGFyZ2V0ID0gT3B0aW9u
czo6ZmlyZUV4Y2VwdGlvbkZ1enpBdCgpOwogICAgIGlmIChmaXJlVGFyZ2V0ID09IHNfbnVtYmVy
T2ZFeGNlcHRpb25GdXp6Q2hlY2tzKSB7Ci0gICAgICAgIHByaW50ZigiSlNDIEVYQ0VQVElPTiBG
VVpaOiBUaHJvd2luZyBmdXp6IGV4Y2VwdGlvbiB3aXRoIGNhbGwgZnJhbWUgJXAsIHNlZW4gaW4g
JXMgYW5kIHJldHVybiBhZGRyZXNzICVwLlxuIiwgZXhlYywgd2hlcmUsIHJldHVyblBDKTsKKyAg
ICAgICAgcHJpbnRmKCJKU0MgRVhDRVBUSU9OIEZVWlo6IFRocm93aW5nIGZ1enogZXhjZXB0aW9u
IHdpdGggY2FsbCBmcmFtZSAlcCwgc2VlbiBpbiAlcyBhbmQgcmV0dXJuIGFkZHJlc3MgJXAuXG4i
LCBnbG9iYWxPYmplY3QsIHdoZXJlLCByZXR1cm5QQyk7CiAgICAgICAgIGZmbHVzaChzdGRvdXQp
OwogCiAgICAgICAgIC8vIFRoZSBUaHJvd1Njb3BlIGFsc28gY2hlY2tzIGZvciB1bmNoZWNrZWQg
c2ltdWxhdGVkIGV4Y2VwdGlvbnMgYmVmb3JlIHRocm93aW5nIGEKQEAgLTU4LDcgKzU4LDcgQEAg
dm9pZCBkb0V4Y2VwdGlvbkZ1enppbmcoRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgY2hhciogd2hlcmUsIGMKICAgICAgICAgLy8gdG8gcGxhY2F0ZSB0aGUgZXhjZXB0
aW9uIGNoZWNrIHZlcmlmaWVyIGhlcmUuCiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAotICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgIkV4Y2VwdGlvbiBGdXp6Il9zKSk7
CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9y
KGdsb2JhbE9iamVjdCwgIkV4Y2VwdGlvbiBGdXp6Il9zKSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25GdXp6LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25GdXp6LmgKaW5kZXggZDE4ZjlhNzQ1
NDY3NGNmN2UxMDQ1ZmUzNDYwOTY5N2E0N2VlMTdmOS4uMjc5NjUwZWJjZWVmOTExM2IxMTM5NTFk
YzdlMWU1NjgyOWM5ODk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uRnV6ei5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkZ1enouaApAQCAtMzEsMTcgKzMxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBDYWxsRnJhbWU7CiBjbGFzcyBUaHJvd1Njb3BlOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZy
YW1lOwogCiAvLyBDYWxsIHRoaXMgb25seSBpZiB5b3Uga25vdyB0aGF0IGV4Y2VwdGlvbiBmdXp6
aW5nIGlzIGVuYWJsZWQuCi12b2lkIGRvRXhjZXB0aW9uRnV6emluZyhFeGVjU3RhdGUqLCBUaHJv
d1Njb3BlJiwgY29uc3QgY2hhciogd2hlcmUsIGNvbnN0IHZvaWQqIHJldHVyblBDKTsKK3ZvaWQg
ZG9FeGNlcHRpb25GdXp6aW5nKEpTR2xvYmFsT2JqZWN0KiwgVGhyb3dTY29wZSYsIGNvbnN0IGNo
YXIqIHdoZXJlLCBjb25zdCB2b2lkKiByZXR1cm5QQyk7CiAKIC8vIFRoaXMgaXMgd2hhdCB5b3Ug
c2hvdWxkIGNhbGwgaWYgeW91IGRvbid0IGtub3cgaWYgZnV6emluZyBpcyBlbmFibGVkLgotQUxX
QVlTX0lOTElORSB2b2lkIGRvRXhjZXB0aW9uRnV6emluZ0lmRW5hYmxlZChFeGVjU3RhdGUqIGV4
ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiB3aGVyZSwgY29uc3Qgdm9pZCogcmV0
dXJuUEMpCitBTFdBWVNfSU5MSU5FIHZvaWQgZG9FeGNlcHRpb25GdXp6aW5nSWZFbmFibGVkKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFy
KiB3aGVyZSwgY29uc3Qgdm9pZCogcmV0dXJuUEMpCiB7CiAgICAgaWYgKExJS0VMWSghT3B0aW9u
czo6dXNlRXhjZXB0aW9uRnV6eigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGRvRXhjZXB0aW9u
RnV6emluZyhleGVjLCBzY29wZSwgd2hlcmUsIHJldHVyblBDKTsKKyAgICBkb0V4Y2VwdGlvbkZ1
enppbmcoZ2xvYmFsT2JqZWN0LCBzY29wZSwgd2hlcmUsIHJldHVyblBDKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2Vw
dGlvbkhlbHBlcnMuY3BwCmluZGV4IDNkYzMwOTQ4OGIyMWMxOTJlMmVlYzFkZjNhNGIyNTFiNWQ0
YjY0YzcuLmVlZDQ0OTY0M2YzMWI2N2VmMTljNGJhMDA3NzRmNDhhMmNkZmM3ZGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCkBA
IC00NywxMCArNDcsMTAgQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxF
KFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcik7CiAKIGNvbnN0IENsYXNzSW5mbyBUZXJtaW5hdGVk
RXhlY3V0aW9uRXJyb3I6OnNfaW5mbyA9IHsgIlRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVybWlu
YXRlZEV4ZWN1dGlvbkVycm9yKSB9OwogCi1KU1ZhbHVlIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJv
cjo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlIGhpbnQpCitKU1ZhbHVlIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6
ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KQogewogICAgIGlmIChoaW50ID09IFByZWZl
clN0cmluZykKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLT52bSgpLCBT
dHJpbmcoIkphdmFTY3JpcHQgZXhlY3V0aW9uIHRlcm1pbmF0ZWQuIl9zKSk7CisgICAgICAgIHJl
dHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZ2xvYmFsT2JqZWN0LT52bSgpLCBTdHJpbmcoIkphdmFT
Y3JpcHQgZXhlY3V0aW9uIHRlcm1pbmF0ZWQuIl9zKSk7CiAgICAgcmV0dXJuIEpTVmFsdWUoUE5h
Tik7CiB9CiAKQEAgLTY3LDI5ICs2NywyNCBAQCBib29sIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4
Y2VwdGlvbihWTSYgdm0sIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogICAgIHJldHVybiBleGNlcHRp
b24tPnZhbHVlKCkuaW5oZXJpdHM8VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yPih2bSk7CiB9CiAK
LUpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjKQorSlNP
YmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogewotICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLX0KLQotSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZs
b3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17
Ci0gICAgYXV0byogZXJyb3IgPSBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIGdsb2JhbE9iamVjdCwg
Ik1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLiJfcyk7CisgICAgYXV0byogZXJyb3Ig
PSBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIk1heGltdW0gY2FsbCBzdGFjayBzaXpl
IGV4Y2VlZGVkLiJfcyk7CiAgICAganNDYXN0PEVycm9ySW5zdGFuY2UqPihlcnJvciktPnNldFN0
YWNrT3ZlcmZsb3dFcnJvcigpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIAotSlNPYmplY3QqIGNy
ZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCkKK0pTT2JqZWN0KiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogewogICAg
IGlmIChpZGVudC5pc1ByaXZhdGVOYW1lKCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVSZWZlcmVu
Y2VFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDYW4ndCBmaW5kIHByaXZhdGUgdmFyaWFibGU6IFBy
aXZhdGVTeW1ib2wuIiwgaWRlbnQuc3RyaW5nKCkpKTsKLSAgICByZXR1cm4gY3JlYXRlUmVmZXJl
bmNlRXJyb3IoZXhlYywgbWFrZVN0cmluZygiQ2FuJ3QgZmluZCB2YXJpYWJsZTogIiwgaWRlbnQu
c3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGdsb2JhbE9i
amVjdCwgbWFrZVN0cmluZygiQ2FuJ3QgZmluZCBwcml2YXRlIHZhcmlhYmxlOiBQcml2YXRlU3lt
Ym9sLiIsIGlkZW50LnN0cmluZygpKSk7CisgICAgcmV0dXJuIGNyZWF0ZVJlZmVyZW5jZUVycm9y
KGdsb2JhbE9iamVjdCwgbWFrZVN0cmluZygiQ2FuJ3QgZmluZCB2YXJpYWJsZTogIiwgaWRlbnQu
c3RyaW5nKCkpKTsKIH0KICAgICAKLVN0cmluZyBlcnJvckRlc2NyaXB0aW9uRm9yVmFsdWUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpCitTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbkZvclZhbHVl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdikKIHsKICAgICBpZiAodi5p
c1N0cmluZygpKSB7Ci0gICAgICAgIFN0cmluZyBzdHJpbmcgPSBhc1N0cmluZyh2KS0+dmFsdWUo
ZXhlYyk7CisgICAgICAgIFN0cmluZyBzdHJpbmcgPSBhc1N0cmluZyh2KS0+dmFsdWUoZ2xvYmFs
T2JqZWN0KTsKICAgICAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gc3RyaW5n
OwogICAgICAgICByZXR1cm4gdHJ5TWFrZVN0cmluZygnIicsIHN0cmluZywgJyInKTsKQEAgLTk4
LDE0ICs5MywxNCBAQCBTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbkZvclZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2KQogICAgIGlmICh2LmlzU3ltYm9sKCkpCiAgICAgICAgIHJldHVybiBh
c1N5bWJvbCh2KS0+ZGVzY3JpcHRpdmVTdHJpbmcoKTsKICAgICBpZiAodi5pc09iamVjdCgpKSB7
Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdCh2KTsKICAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZSkKLSAg
ICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKS0+dmFsdWUo
ZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5n
KCktPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIHJldHVybiBKU09iamVjdDo6Y2FsY3Vs
YXRlZENsYXNzTmFtZShvYmplY3QpOwogICAgIH0KLSAgICByZXR1cm4gdi50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CisgICAgcmV0dXJuIHYudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KS0+dmFs
dWUoZ2xvYmFsT2JqZWN0KTsKIH0KICAgICAKIHN0YXRpYyBTdHJpbmcgZGVmYXVsdEFwcHJveGlt
YXRlU291cmNlRXJyb3IoY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1lc3NhZ2UsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVGV4dCkKQEAgLTI2NSw4OSArMjYwLDg5IEBAIHN0YXRpYyBTdHJpbmcgaW52YWxp
ZFBhcmFtZXRlckluc3RhbmNlb2ZoYXNJbnN0YW5jZVZhbHVlTm90RnVuY3Rpb25Tb3VyY2VBcHBl
bmRlCiAgICAgcmV0dXJuIGludmFsaWRQYXJhbWV0ZXJJbnN0YW5jZW9mU291cmNlQXBwZW5kZXIo
IltTeW1ib2wuaGFzSW5zdGFuY2VdIGlzIG5vdCBhIGZ1bmN0aW9uLCB1bmRlZmluZWQsIG9yIG51
bGwiX3MsIG9yaWdpbmFsTWVzc2FnZSwgc291cmNlVGV4dCwgcnVudGltZVR5cGUsIG9jY3VycmVu
Y2UpOwogfQogCi1KU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVu
ZGVyIGFwcGVuZGVyKQorSlNPYmplY3QqIGNyZWF0ZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0
YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24gPSBl
cnJvckRlc2NyaXB0aW9uRm9yVmFsdWUoZXhlYywgdmFsdWUpOworICAgIFN0cmluZyB2YWx1ZURl
c2NyaXB0aW9uID0gZXJyb3JEZXNjcmlwdGlvbkZvclZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCAhIXZhbHVlRGVzY3JpcHRpb24pOwog
ICAgIGlmICghdmFsdWVEZXNjcmlwdGlvbikgewogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwotICAgICAgICByZXR1cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0KTsKICAgICB9CiAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRyeU1ha2VTdHJpbmcodmFsdWVEZXNjcmlwdGlvbiwg
JyAnLCBtZXNzYWdlKTsKICAgICBpZiAoIWVycm9yTWVzc2FnZSkKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBjcmVhdGVPdXRPZk1l
bW9yeUVycm9yKGdsb2JhbE9iamVjdCk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
LSAgICBKU09iamVjdCogZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGV4ZWMsIGVycm9yTWVz
c2FnZSwgYXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUodm0sIHZhbHVlKSk7CisgICAgSlNP
YmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIGVycm9yTWVz
c2FnZSwgYXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUodm0sIHZhbHVlKSk7CiAgICAgQVNT
RVJUKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkpOwogCiAgICAgcmV0dXJuIGV4Y2VwdGlv
bjsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZUludmFsaWRGdW5jdGlvbkFwcGx5UGFyYW1ldGVyRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorSlNPYmplY3QqIGNyZWF0ZUludmFs
aWRGdW5jdGlvbkFwcGx5UGFyYW1ldGVyRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJz
ZWNvbmQgYXJndW1lbnQgdG8gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5IG11c3QgYmUgYW4gQXJy
YXktbGlrZSBvYmplY3QiX3MsIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShleGVjLT52bSgpLCB2YWx1ZSkpOworICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCAic2Vjb25kIGFyZ3VtZW50IHRvIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSBt
dXN0IGJlIGFuIEFycmF5LWxpa2Ugb2JqZWN0Il9zLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1
bnRpbWVUeXBlRm9yVmFsdWUoZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZSkpOwogfQogCi1KU09i
amVjdCogY3JlYXRlSW52YWxpZEluUGFyYW1ldGVyRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHZhbHVlKQorSlNPYmplY3QqIGNyZWF0ZUludmFsaWRJblBhcmFtZXRlckVycm9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUVycm9yKGV4ZWMsIHZhbHVlLCAiaXMgbm90IGFuIE9iamVjdC4iX3MsIGludmFsaWRQYXJh
bWV0ZXJJblNvdXJjZUFwcGVuZGVyKTsKKyAgICByZXR1cm4gY3JlYXRlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSwgImlzIG5vdCBhbiBPYmplY3QuIl9zLCBpbnZhbGlkUGFyYW1ldGVySW5Tb3Vy
Y2VBcHBlbmRlcik7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkSW5zdGFuY2VvZlBhcmFt
ZXRlckVycm9yTm90RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorSlNP
YmplY3QqIGNyZWF0ZUludmFsaWRJbnN0YW5jZW9mUGFyYW1ldGVyRXJyb3JOb3RGdW5jdGlvbihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBjcmVhdGVFcnJvcihleGVjLCB2YWx1ZSwgIiBpcyBub3QgYSBmdW5jdGlvbiJfcywgaW52YWxp
ZFBhcmFtZXRlckluc3RhbmNlb2ZOb3RGdW5jdGlvblNvdXJjZUFwcGVuZGVyKTsKKyAgICByZXR1
cm4gY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgIiBpcyBub3QgYSBmdW5jdGlvbiJf
cywgaW52YWxpZFBhcmFtZXRlckluc3RhbmNlb2ZOb3RGdW5jdGlvblNvdXJjZUFwcGVuZGVyKTsK
IH0KIAotSlNPYmplY3QqIGNyZWF0ZUludmFsaWRJbnN0YW5jZW9mUGFyYW1ldGVyRXJyb3JIYXNJ
bnN0YW5jZVZhbHVlTm90RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQor
SlNPYmplY3QqIGNyZWF0ZUludmFsaWRJbnN0YW5jZW9mUGFyYW1ldGVyRXJyb3JIYXNJbnN0YW5j
ZVZhbHVlTm90RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhlYywgdmFsdWUsICJbU3ltYm9sLmhh
c0luc3RhbmNlXSBpcyBub3QgYSBmdW5jdGlvbiwgdW5kZWZpbmVkLCBvciBudWxsIl9zLCBpbnZh
bGlkUGFyYW1ldGVySW5zdGFuY2VvZmhhc0luc3RhbmNlVmFsdWVOb3RGdW5jdGlvblNvdXJjZUFw
cGVuZGVyKTsKKyAgICByZXR1cm4gY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgIltT
eW1ib2wuaGFzSW5zdGFuY2VdIGlzIG5vdCBhIGZ1bmN0aW9uLCB1bmRlZmluZWQsIG9yIG51bGwi
X3MsIGludmFsaWRQYXJhbWV0ZXJJbnN0YW5jZW9maGFzSW5zdGFuY2VWYWx1ZU5vdEZ1bmN0aW9u
U291cmNlQXBwZW5kZXIpOwogfQogCi1KU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorSlNPYmplY3QqIGNyZWF0ZU5vdEFD
b25zdHJ1Y3RvckVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZhbHVlLCAiaXMgbm90IGEgY29u
c3RydWN0b3IiX3MsIGRlZmF1bHRTb3VyY2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVy
cm9yKGdsb2JhbE9iamVjdCwgdmFsdWUsICJpcyBub3QgYSBjb25zdHJ1Y3RvciJfcywgZGVmYXVs
dFNvdXJjZUFwcGVuZGVyKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK0pTT2JqZWN0KiBjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCB2YWx1ZSwgImlzIG5vdCBhIGZ1bmN0aW9u
Il9zLCBub3RBRnVuY3Rpb25Tb3VyY2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVycm9y
KGdsb2JhbE9iamVjdCwgdmFsdWUsICJpcyBub3QgYSBmdW5jdGlvbiJfcywgbm90QUZ1bmN0aW9u
U291cmNlQXBwZW5kZXIpOwogfQogCi1KU09iamVjdCogY3JlYXRlTm90QW5PYmplY3RFcnJvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitKU09iamVjdCogY3JlYXRlTm90QW5PYmpl
Y3RFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCB2YWx1ZSwgImlzIG5vdCBhbiBvYmplY3QiX3Ms
IGRlZmF1bHRTb3VyY2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGdsb2JhbE9i
amVjdCwgdmFsdWUsICJpcyBub3QgYW4gb2JqZWN0Il9zLCBkZWZhdWx0U291cmNlQXBwZW5kZXIp
OwogfQogCi1KU09iamVjdCogY3JlYXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQorSlNPYmplY3QqIGNy
ZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZVJlZmVyZW5jZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIlN0cmljdCBtb2RlIGZvcmJpZHMgaW1w
bGljaXQgY3JlYXRpb24gb2YgZ2xvYmFsIHByb3BlcnR5ICciLCBwcm9wZXJ0eU5hbWUsICdcJycp
KTsKKyAgICByZXR1cm4gY3JlYXRlUmVmZXJlbmNlRXJyb3IoZ2xvYmFsT2JqZWN0LCBtYWtlU3Ry
aW5nKCJTdHJpY3QgbW9kZSBmb3JiaWRzIGltcGxpY2l0IGNyZWF0aW9uIG9mIGdsb2JhbCBwcm9w
ZXJ0eSAnIiwgcHJvcGVydHlOYW1lLCAnXCcnKSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVURFpF
cnJvcihFeGVjU3RhdGUqIGV4ZWMpCitKU09iamVjdCogY3JlYXRlVERaRXJyb3IoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gY3JlYXRlUmVmZXJlbmNlRXJyb3Io
ZXhlYywgIkNhbm5vdCBhY2Nlc3MgdW5pbml0aWFsaXplZCB2YXJpYWJsZS4iKTsKKyAgICByZXR1
cm4gY3JlYXRlUmVmZXJlbmNlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiQ2Fubm90IGFjY2VzcyB1bmlu
aXRpYWxpemVkIHZhcmlhYmxlLiIpOwogfQogCi1FeGNlcHRpb24qIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlKQorRXhjZXB0aW9uKiB0aHJv
d091dE9mTWVtb3J5RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29w
ZSYgc2NvcGUpCiB7Ci0gICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVh
dGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKKyAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZ2xv
YmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QpKTsK
IH0KIAotRXhjZXB0aW9uKiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IFRocm93U2NvcGUmIHNjb3BlKQorRXhjZXB0aW9uKiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUaHJvd1Njb3BlJiBzY29wZSkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSh2bSk7Ci0gICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOworICAg
IHJldHVybiB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUV4Y2VwdGlvbiogdGhyb3dUZXJtaW5h
dGVkRXhlY3V0aW9uRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUp
CitFeGNlcHRpb24qIHRocm93VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBUaHJvd1Njb3BlJiBzY29wZSkKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBFcnJvckhh
bmRsaW5nU2NvcGUgZXJyb3JTY29wZSh2bSk7Ci0gICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4
ZWMsIHNjb3BlLCBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKCZ2bSkpOworICAg
IHJldHVybiB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVUZXJtaW5h
dGVkRXhlY3V0aW9uRXhjZXB0aW9uKCZ2bSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAppbmRl
eCAxMmJmNzA5MWNjNGI5NzI0OTI0ZTFmYTI3NzlkZjNkYmJmMGUyNWQyLi4zNWFkMTI1NTRjNzAx
MjdlNGJmYjc1NTFlYmIzYzE3OGVlYjRjNmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCkBAIC0zNSwzMCArMzUsMjkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLXR5cGVkZWYgSlNPYmplY3QqICgqRXJyb3JGYWN0b3J5KShFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7Cit0eXBl
ZGVmIEpTT2JqZWN0KiAoKkVycm9yRmFjdG9yeSkoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJp
bmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiAKIFN0cmluZyBkZWZhdWx0U291
cmNlQXBwZW5kZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUnVudGltZVR5cGUsIEVy
cm9ySW5zdGFuY2U6OlNvdXJjZVRleHRXaGVyZUVycm9yT2NjdXJyZWQpOwogCiBKU09iamVjdCog
Y3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihWTSopOwogSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oVk0mLCBFeGNlcHRpb24qKTsK
LUpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7Ci1KU19F
WFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0
ZSopOwotSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCopOwotSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwotSlNPYmplY3QqIGNyZWF0ZVREWkVycm9yKEV4
ZWNTdGF0ZSopOwotSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwg
SlNWYWx1ZSk7Ci1KU09iamVjdCogY3JlYXRlSW52YWxpZEZ1bmN0aW9uQXBwbHlQYXJhbWV0ZXJF
cnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLUpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkSW5QYXJh
bWV0ZXJFcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLUpTT2JqZWN0KiBjcmVhdGVJbnZhbGlk
SW5zdGFuY2VvZlBhcmFtZXRlckVycm9yTm90RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSk7
Ci1KU09iamVjdCogY3JlYXRlSW52YWxpZEluc3RhbmNlb2ZQYXJhbWV0ZXJFcnJvckhhc0luc3Rh
bmNlVmFsdWVOb3RGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLUpTT2JqZWN0KiBjcmVh
dGVOb3RBQ29uc3RydWN0b3JFcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLUpTT2JqZWN0KiBj
cmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLUpTT2JqZWN0KiBj
cmVhdGVFcnJvckZvckludmFsaWRHbG9iYWxBc3NpZ25tZW50KEV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYpOwotU3RyaW5nIGVycm9yRGVzY3JpcHRpb25Gb3JWYWx1ZShFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKLQotSlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0aW9uKiB0aHJvd091dE9mTWVtb3J5RXJy
b3IoRXhlY1N0YXRlKiwgVGhyb3dTY29wZSYpOwotSlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0aW9u
KiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqLCBUaHJvd1Njb3BlJik7Ci1KU19F
WFBPUlRfUFJJVkFURSBFeGNlcHRpb24qIHRocm93VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlv
bihFeGVjU3RhdGUqLCBUaHJvd1Njb3BlJik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
Y3JlYXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBTdHJpbmcmLCBFcnJv
ckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEpTR2xvYmFsT2JqZWN0Kik7CitKU09iamVjdCogY3Jl
YXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IElkZW50aWZp
ZXImKTsKK0pTT2JqZWN0KiBjcmVhdGVURFpFcnJvcihKU0dsb2JhbE9iamVjdCopOworSlNPYmpl
Y3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKK0pT
T2JqZWN0KiBjcmVhdGVJbnZhbGlkRnVuY3Rpb25BcHBseVBhcmFtZXRlckVycm9yKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSk7CitKU09iamVjdCogY3JlYXRlSW52YWxpZEluUGFyYW1ldGVyRXJy
b3IoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKK0pTT2JqZWN0KiBjcmVhdGVJbnZhbGlkSW5z
dGFuY2VvZlBhcmFtZXRlckVycm9yTm90RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KTsKK0pTT2JqZWN0KiBjcmVhdGVJbnZhbGlkSW5zdGFuY2VvZlBhcmFtZXRlckVycm9ySGFzSW5z
dGFuY2VWYWx1ZU5vdEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CitKU09iamVj
dCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsK
K0pTT2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOworSlNPYmplY3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKK1N0cmluZyBlcnJvckRlc2NyaXB0aW9uRm9y
VmFsdWUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworSlNfRVhQT1JUX1BSSVZBVEUgRXhj
ZXB0aW9uKiB0aHJvd091dE9mTWVtb3J5RXJyb3IoSlNHbG9iYWxPYmplY3QqLCBUaHJvd1Njb3Bl
Jik7CitKU19FWFBPUlRfUFJJVkFURSBFeGNlcHRpb24qIHRocm93U3RhY2tPdmVyZmxvd0Vycm9y
KEpTR2xvYmFsT2JqZWN0KiwgVGhyb3dTY29wZSYpOworSlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0
aW9uKiB0aHJvd1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxPYmplY3QqLCBU
aHJvd1Njb3BlJik7CiAKIAogY2xhc3MgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yIGZpbmFsIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewpAQCAtODYsNyArODUsNyBAQCBjbGFzcyBUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAg
ewogICAgIH0KIAotICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOworICAgIHN0YXRpYyBKU1Zh
bHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZSk7CiAKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKaW5kZXggNmNmYzRiZWUzMDQ2ZmY4
OTFlMzY3MTRkOWRiNzI3MmYwNDk0ZWNhYi4uZWNlYWE1NTVhZjRhOWI2M2U4ZmYzYWNiMWZlZDNj
NDU0NDBkZWE4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKQEAgLTQxLDE0ICs0MSwxNCBAQCBjb25zdCBDbGFzc0lu
Zm8gRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6c19p
bmZvLCBudWxscAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
V2l0aEZ1bmN0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RGdW5jdGlvbihjYWxsRnJhbWUsIGdsb2Jh
bE9iamVjdCwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpGdW5jdGlvbiwgY2FsbEZy
YW1lLT5uZXdUYXJnZXQoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0
RnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0
aW9uTW9kZTo6RnVuY3Rpb24sIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpKTsKIH0KIAogLy8gRUNN
QSAxNS4zLjEgVGhlIEZ1bmN0aW9uIENvbnN0cnVjdG9yIENhbGxlZCBhcyBhIEZ1bmN0aW9uCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsRnVuY3Rpb25Db25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
ICAgICBBcmdMaXN0IGFyZ3MoY2FsbEZyYW1lKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNvbnN0cnVjdEZ1bmN0aW9uKGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBhcmdzKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RGdW5jdGlvbihnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgYXJncykpOwogfQogCiBGdW5jdGlvbkNvbnN0cnVjdG9yOjpGdW5jdGlvbkNvbnN0
cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC02NCwyNCArNjQsMjQgQEAg
dm9pZCBGdW5jdGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEZ1bmN0aW9u
UHJvdG90eXBlKiBmdW5jdGlvblByb3QKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9u
IENvbnN0cnVjdG9yCi1KU09iamVjdCogY29uc3RydWN0RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25z
dCBJZGVudGlmaWVyJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFNvdXJjZU9yaWdpbiYgc291cmNlT3Jp
Z2luLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlv
biwgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlIGZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZSwgSlNW
YWx1ZSBuZXdUYXJnZXQpCitKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb24oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgSWRlbnRpZmllciYg
ZnVuY3Rpb25OYW1lLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRpb24sIEZ1bmN0aW9uQ29u
c3RydWN0aW9uTW9kZSBmdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGUsIEpTVmFsdWUgbmV3VGFyZ2V0
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IGlmIChVTkxJS0VMWSghZ2xvYmFsT2JqZWN0LT5ldmFsRW5hYmxlZCgpKSkgewotICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2JhbE9i
amVjdC0+ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKKyAgICAgICAgdGhyb3dFeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXZhbEVycm9yKGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3RG
dW5jdGlvblNraXBwaW5nRXZhbEVuYWJsZWRDaGVjayhleGVjLCBnbG9iYWxPYmplY3QsIGFyZ3Ms
IGZ1bmN0aW9uTmFtZSwgc291cmNlT3JpZ2luLCBzb3VyY2VVUkwsIHBvc2l0aW9uLCAtMSwgZnVu
Y3Rpb25Db25zdHJ1Y3Rpb25Nb2RlLCBuZXdUYXJnZXQpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRW5hYmxlZENoZWNrKGdsb2Jh
bE9iamVjdCwgYXJncywgZnVuY3Rpb25OYW1lLCBzb3VyY2VPcmlnaW4sIHNvdXJjZVVSTCwgcG9z
aXRpb24sIC0xLCBmdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGUsIG5ld1RhcmdldCkpOwogfQogCiBK
U09iamVjdCogY29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2soCi0gICAg
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdM
aXN0JiBhcmdzLCAKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdM
aXN0JiBhcmdzLCAKICAgICBjb25zdCBJZGVudGlmaWVyJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFNv
dXJjZU9yaWdpbiYgc291cmNlT3JpZ2luLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgCiAgICAg
Y29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgRnVu
Y3Rpb25Db25zdHJ1Y3Rpb25Nb2RlIGZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZSwgSlNWYWx1ZSBu
ZXdUYXJnZXQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgY29uc3QgY2hhciogcHJlZml4ID0gbnVsbHB0cjsKQEAgLTEwNywzNyArMTA3LDM3
IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZhbEVuYWJsZWRDaGVjaygK
ICAgICBpZiAoYXJncy5pc0VtcHR5KCkpCiAgICAgICAgIHByb2dyYW0gPSBtYWtlU3RyaW5nKHBy
ZWZpeCwgZnVuY3Rpb25OYW1lLnN0cmluZygpLCAiKCkge1xuXG59Iik7CiAgICAgZWxzZSBpZiAo
YXJncy5zaXplKCkgPT0gMSkgewotICAgICAgICBhdXRvIGJvZHkgPSBhcmdzLmF0KDApLnRvV1RG
U3RyaW5nKGV4ZWMpOworICAgICAgICBhdXRvIGJvZHkgPSBhcmdzLmF0KDApLnRvV1RGU3RyaW5n
KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogICAgICAgICBwcm9ncmFtID0gdHJ5TWFrZVN0cmluZyhwcmVmaXgsIGZ1bmN0aW9uTmFt
ZS5zdHJpbmcoKSwgIigpIHtcbiIsIGJvZHksICJcbn0iKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KCFwcm9ncmFtKSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNj
b3BlKTsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyKFN0cmluZ0J1aWxkZXI6Ok92ZXJmbG93
SGFuZGxlcjo6UmVjb3JkT3ZlcmZsb3cpOwogICAgICAgICBidWlsZGVyLmFwcGVuZChwcmVmaXgs
IGZ1bmN0aW9uTmFtZS5zdHJpbmcoKSwgJygnKTsKIAotICAgICAgICBhdXRvIHZpZXdXaXRoU3Ry
aW5nID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKS0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5n
KGV4ZWMpOworICAgICAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gYXJncy5hdCgwKS50b1N0cmlu
ZyhnbG9iYWxPYmplY3QpLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHZpZXdXaXRoU3RyaW5nLnZpZXcpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMTsgIWJ1aWxkZXIuaGFzT3ZlcmZsb3dlZCgpICYmIGkgPCBhcmdzLnNpemUoKSAtIDE7IGkr
KykgewotICAgICAgICAgICAgYXV0byB2aWV3V2l0aFN0cmluZyA9IGFyZ3MuYXQoaSkudG9TdHJp
bmcoZXhlYyktPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgIGF1
dG8gdmlld1dpdGhTdHJpbmcgPSBhcmdzLmF0KGkpLnRvU3RyaW5nKGdsb2JhbE9iamVjdCktPnZp
ZXdXaXRoVW5kZXJseWluZ1N0cmluZyhnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiLCAiLCB2aWV3V2l0aFN0cmluZy52aWV3KTsKICAgICAgICAgfQogICAgICAgICBpZiAoVU5M
SUtFTFkoYnVpbGRlci5oYXNPdmVyZmxvd2VkKCkpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0
aW9uID0gYnVpbGRlci5sZW5ndGgoKSArIDE7CiAKLSAgICAgICAgYXV0byBib2R5ID0gYXJncy5h
dChhcmdzLnNpemUoKSAtIDEpLnRvU3RyaW5nKGV4ZWMpLT52aWV3V2l0aFVuZGVybHlpbmdTdHJp
bmcoZXhlYyk7CisgICAgICAgIGF1dG8gYm9keSA9IGFyZ3MuYXQoYXJncy5zaXplKCkgLSAxKS50
b1N0cmluZyhnbG9iYWxPYmplY3QpLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIpIHtcbiIsIGJvZHkudmlldywgIlxufSIpOwogICAgICAgICBp
ZiAoVU5MSUtFTFkoYnVpbGRlci5oYXNPdmVyZmxvd2VkKCkpKSB7Ci0gICAgICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIH0KICAgICAgICAgcHJvZ3JhbSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKQEAg
LTE0NSwxMCArMTQ1LDEwIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZh
bEVuYWJsZWRDaGVjaygKIAogICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShwcm9n
cmFtLCBzb3VyY2VPcmlnaW4sIFVSTCh7IH0sIHNvdXJjZVVSTCksIHBvc2l0aW9uKTsKICAgICBK
U09iamVjdCogZXhjZXB0aW9uID0gbnVsbHB0cjsKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShmdW5jdGlvbk5hbWUs
ICpleGVjLCBzb3VyY2UsIGV4Y2VwdGlvbiwgb3ZlcnJpZGVMaW5lTnVtYmVyLCBmdW5jdGlvbkNv
bnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uID0gRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShmdW5jdGlvbk5h
bWUsIGdsb2JhbE9iamVjdCwgc291cmNlLCBleGNlcHRpb24sIG92ZXJyaWRlTGluZU51bWJlciwg
ZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbik7CiAgICAgaWYgKFVOTElL
RUxZKCFmdW5jdGlvbikpIHsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBleGNlcHRpb24pOworICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBleGNlcHRpb24pOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKQEAgLTE2OCw3ICsxNjgsNyBAQCBKU09iamVjdCogY29uc3RydWN0RnVu
Y3Rpb25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2soCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIFN0cnVjdHVyZSogc3ViY2xhc3NTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJnZXQsIHN0cnVjdHVyZSk7CisgICAgU3Ry
dWN0dXJlKiBzdWJjbGFzc1N0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvbkNvbnN0cnVj
dG9yKCksIG5ld1RhcmdldCwgc3RydWN0dXJlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKIAogICAgIHN3aXRjaCAoZnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlKSB7
CkBAIC0xODcsMTAgKzE4NywxMCBAQCBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb25Ta2lwcGlu
Z0V2YWxFbmFibGVkQ2hlY2soCiB9CiAKIC8vIEVDTUEgMTUuMy4yIFRoZSBGdW5jdGlvbiBDb25z
dHJ1Y3RvcgotSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgRnVuY3Rpb25D
b25zdHJ1Y3Rpb25Nb2RlIGZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZSwgSlNWYWx1ZSBuZXdUYXJn
ZXQpCitKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEZ1bmN0aW9u
Q29uc3RydWN0aW9uTW9kZSBmdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGUsIEpTVmFsdWUgbmV3VGFy
Z2V0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICByZXR1cm4gY29u
c3RydWN0RnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBhcmdzLCB2bS5wcm9wZXJ0eU5hbWVz
LT5hbm9ueW1vdXMsIGV4ZWMtPmNhbGxlclNvdXJjZU9yaWdpbigpLCBTdHJpbmcoKSwgVGV4dFBv
c2l0aW9uKCksIGZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZSwgbmV3VGFyZ2V0KTsKKyAgICByZXR1
cm4gY29uc3RydWN0RnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBhcmdzLCB2bS5wcm9wZXJ0eU5hbWVz
LT5hbm9ueW1vdXMsIGNhbGxGcmFtZS0+Y2FsbGVyU291cmNlT3JpZ2luKCksIFN0cmluZygpLCBU
ZXh0UG9zaXRpb24oKSwgZnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlLCBuZXdUYXJnZXQpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAppbmRleCBhMDIyZTJkNjJkZmQ0OTcyNTAyM2NjMjdl
MGYzMmFjMDBiMDc3NWNmLi5mNjQ1NTlhNTNmM2ExNWMyODk4YjQ4YmYzZDFjN2U0ZGUxYTQ2ZmNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0
cnVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25z
dHJ1Y3Rvci5oCkBAIC02MCwxMSArNjAsMTEgQEAgZW51bSBjbGFzcyBGdW5jdGlvbkNvbnN0cnVj
dGlvbk1vZGUgewogICAgIEFzeW5jR2VuZXJhdG9yLAogfTsKIAotSlNPYmplY3QqIGNvbnN0cnVj
dEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYsIGNv
bnN0IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSwgY29uc3QgU291cmNlT3JpZ2luJiwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFdURjo6VGV4dFBvc2l0aW9uJiwgRnVuY3Rpb25Db25z
dHJ1Y3Rpb25Nb2RlID0gRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpGdW5jdGlvbiwgSlNWYWx1
ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpOwotSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYsIEZ1bmN0aW9uQ29uc3Ry
dWN0aW9uTW9kZSA9IEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6RnVuY3Rpb24sIEpTVmFsdWUg
bmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKTsKK0pTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvbihKU0ds
b2JhbE9iamVjdCosIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBJZGVudGlmaWVyJiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFNvdXJjZU9yaWdpbiYsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBjb25zdCBX
VEY6OlRleHRQb3NpdGlvbiYsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZSA9IEZ1bmN0aW9uQ29u
c3RydWN0aW9uTW9kZTo6RnVuY3Rpb24sIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKTsK
K0pTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvbihKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSos
IGNvbnN0IEFyZ0xpc3QmLCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGUgPSBGdW5jdGlvbkNvbnN0
cnVjdGlvbk1vZGU6OkZ1bmN0aW9uLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSk7CiAK
IEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZh
bEVuYWJsZWRDaGVjaygKLSAgICBFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IEFy
Z0xpc3QmLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlT3JpZ2luJiwKKyAgICBKU0ds
b2JhbE9iamVjdCosIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291
cmNlT3JpZ2luJiwKICAgICBjb25zdCBTdHJpbmcmLCBjb25zdCBXVEY6OlRleHRQb3NpdGlvbiYs
IGludCBvdmVycmlkZUxpbmVOdW1iZXIgPSAtMSwKICAgICBGdW5jdGlvbkNvbnN0cnVjdGlvbk1v
ZGUgPSBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6OkZ1bmN0aW9uLCBKU1ZhbHVlIG5ld1Rhcmdl
dCA9IEpTVmFsdWUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCmluZGV4IGVmMmU4MzA4NzQxYjg4NTJlNTYyMzI2Zjk2
MjU3YzlkMDI5MzVkMzMuLjQ1MmIxMDA1MTQzMGMwNzFjYWRlOGUwMDY2NWMxOTVjM2I3Y2M5ODQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcApAQCAtOTUsMTYgKzk1LDE2IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB9CiAKIEZ1
bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKLSAg
ICBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgCisgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdCom
IGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlciwgT3B0aW9uYWw8aW50PiBmdW5jdGlv
bkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKQogewogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSAKICAgICAgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKAotICAgICAgICAgICAgbmFtZSwgZXhlYywg
c291cmNlLCBleGNlcHRpb24sIG92ZXJyaWRlTGluZU51bWJlciwgZnVuY3Rpb25Db25zdHJ1Y3Rv
clBhcmFtZXRlcnNFbmRQb3NpdGlvbik7CisgICAgICAgICAgICBuYW1lLCBnbG9iYWxPYmplY3Qs
IHNvdXJjZSwgZXhjZXB0aW9uLCBvdmVycmlkZUxpbmVOdW1iZXIsIGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwogICAgIGlmICghdW5saW5rZWRFeGVjdXRhYmxlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB1bmxpbmtlZEV4ZWN1dGFibGUt
PmxpbmsoZXhlYy52bSgpLCBudWxscHRyLCBzb3VyY2UsIG92ZXJyaWRlTGluZU51bWJlcik7Cisg
ICAgcmV0dXJuIHVubGlua2VkRXhlY3V0YWJsZS0+bGluayhnbG9iYWxPYmplY3QtPnZtKCksIG51
bGxwdHIsIHNvdXJjZSwgb3ZlcnJpZGVMaW5lTnVtYmVyKTsKIH0KIAogRnVuY3Rpb25FeGVjdXRh
YmxlOjpSYXJlRGF0YSYgRnVuY3Rpb25FeGVjdXRhYmxlOjplbnN1cmVSYXJlRGF0YVNsb3coKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
aAppbmRleCBmNjMyMzMyNTgwMTY0MDk3OTdmNzllMDliYmE3MzNlYjNhNzkxODAxLi40YjMyYzQw
Njk3OGFiNzQ2YzA5MGEzMjllYTJkYjUyOGQxOTExNWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtNTUsNyArNTUsNyBA
QCBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJs
ZSB7CiAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgIH0KICAgICBzdGF0aWMgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmcm9tR2xvYmFsQ29kZSgKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgRXhlY1N0YXRlJiwgY29uc3QgU291cmNlQ29kZSYsIAorICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCAKICAgICAg
ICAgSlNPYmplY3QqJiBleGNlcHRpb24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIsIE9wdGlvbmFs
PGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbik7CiAKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCmluZGV4IDI1MjYwZDk5MzY5Yjk0NTIw
OThmMDMwMDNjNGQ1ZDZhNjQ1ZmM0NzIuLmUxZDc4ZmNjNWJjNDg1YjMyZDhlM2M1OTU5NDAxYWQ4
OWRmNDQ4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblByb3RvdHlwZS5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmoKICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzPEpTRnVuY3Rpb24+KHZtKSkgewogICAgICAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odGhpc1ZhbHVlKTsK
ICAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpKQotICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9u
dHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJmdW5jdGlvbiAiLCBmdW5jdGlvbi0+bmFtZSh2bSks
ICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGds
b2JhbE9iamVjdCwgImZ1bmN0aW9uICIsIGZ1bmN0aW9uLT5uYW1lKHZtKSwgIigpIHtcbiAgICBb
bmF0aXZlIGNvZGVdXG59IikpKTsKIAogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CiAgICAgICAgIGlmIChleGVjdXRhYmxl
LT5pc0NsYXNzKCkpCkBAIC0xMzQsMjEgKzEzNCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
agogICAgICAgICBTdHJpbmdWaWV3IHNvdXJjZSA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3Zp
ZGVyKCktPmdldFJhbmdlKAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+cGFyYW1ldGVyc1N0YXJ0
T2Zmc2V0KCksCiAgICAgICAgICAgICBleGVjdXRhYmxlLT5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQo
KSArIGV4ZWN1dGFibGUtPnNvdXJjZSgpLmxlbmd0aCgpKTsKLSAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhjYWxs
RnJhbWUsIGZ1bmN0aW9uSGVhZGVyLCBmdW5jdGlvbi0+bmFtZSh2bSksIHNvdXJjZSkpKTsKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9u
dHJpdmlhbFN0cmluZyhnbG9iYWxPYmplY3QsIGZ1bmN0aW9uSGVhZGVyLCBmdW5jdGlvbi0+bmFt
ZSh2bSksIHNvdXJjZSkpKTsKICAgICB9CiAKICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzPElu
dGVybmFsRnVuY3Rpb24+KHZtKSkgewogICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlv
biA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odGhpc1ZhbHVlKTsKLSAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmlu
ZyhjYWxsRnJhbWUsICJmdW5jdGlvbiAiLCBmdW5jdGlvbi0+bmFtZSgpLCAiKCkge1xuICAgIFtu
YXRpdmUgY29kZV1cbn0iKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGdsb2JhbE9iamVjdCwgImZ1bmN0
aW9uICIsIGZ1bmN0aW9uLT5uYW1lKCksICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpKSk7
CiAgICAgfQogCiAgICAgaWYgKHRoaXNWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdCh0aGlzVmFsdWUpOwogICAgICAgICBpZiAob2JqZWN0LT5p
c0Z1bmN0aW9uKHZtKSkKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoY2FsbEZyYW1lLCAiZnVuY3Rpb24g
Iiwgb2JqZWN0LT5jbGFzc0luZm8odm0pLT5jbGFzc05hbWUsICIoKSB7XG4gICAgW25hdGl2ZSBj
b2RlXVxufSIpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGdsb2JhbE9iamVjdCwgImZ1bmN0aW9u
ICIsIG9iamVjdC0+Y2xhc3NJbmZvKHZtKS0+Y2xhc3NOYW1lLCAiKCkge1xuICAgIFtuYXRpdmUg
Y29kZV1cbn0iKSkpOwogICAgIH0KIAotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxG
cmFtZSwgc2NvcGUpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAppbmRleCBlYTA1YWY4YWEzYjljMzE0ODJm
OWRmODI3N2ExZDk1OWVlZWJkNDhkLi5iOGRkYmM3MzY0NzI2Y2M2MDI0N2EzNzlmOTcxZTFmNWUx
MDNmYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
blJhcmVEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25S
YXJlRGF0YS5oCkBAIC04OSwxMCArODksMTAgQEAgY2xhc3MgRnVuY3Rpb25SYXJlRGF0YSBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIGJvb2wgaXNPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlu
aXRpYWxpemVkKCkgeyByZXR1cm4gIW1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaXNOdWxsKCk7
IH0KIAogICAgIFN0cnVjdHVyZSogaW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25TdHJ1Y3R1cmUo
KSB7IHJldHVybiBtX2ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUo
KTsgfQotICAgIFN0cnVjdHVyZSogY3JlYXRlSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25TdHJ1
Y3R1cmVGcm9tQmFzZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSkKKyAgICBTdHJ1Y3R1cmUq
IGNyZWF0ZUludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2UoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogYmFzZUdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwg
U3RydWN0dXJlKiBiYXNlU3RydWN0dXJlKQogICAgIHsKICAgICAgICAgaW5pdGlhbGl6ZUFsbG9j
YXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpOwotICAgICAgICByZXR1cm4gbV9pbnRlcm5hbEZ1
bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuY3JlYXRlQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNl
KHZtLCBnbG9iYWxPYmplY3QsIHRoaXMsIHByb3RvdHlwZSwgYmFzZVN0cnVjdHVyZSk7CisgICAg
ICAgIHJldHVybiBtX2ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5jcmVhdGVBbGxv
Y2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uodm0sIGJhc2VHbG9iYWxPYmplY3QsIHRoaXMsIHByb3Rv
dHlwZSwgYmFzZVN0cnVjdHVyZSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJJbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblByb2ZpbGUoY29uc3QgY2hhciogcmVhc29uKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyYXRvckZ1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rp
b25Db25zdHJ1Y3Rvci5jcHAKaW5kZXggNjQ2Mjg2ZDY0M2MzNjEyOWRjMzFkZWEwMjkwZDUwMzhk
NTgyOWJiNy4uMGU4MTYyNzk4NmQxOTVjOTQ2Y2ZkZmFiMTg4ZjQxMjUyZmY5ZTY1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9yRnVuY3Rpb25Db25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJhdG9y
RnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKQEAgLTM5LDEzICszOSwxMyBAQCBjb25zdCBDbGFzc0lu
Zm8gR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiR2VuZXJhdG9yRnVu
Y3Rpb24iLCAmQgogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEdlbmVy
YXRvckZ1bmN0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RGdW5jdGlvbihjYWxsRnJhbWUsIGdsb2Jh
bE9iamVjdCwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rpb25Nb2RlOjpHZW5lcmF0b3IpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEZ1bmN0aW9uKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLCBhcmdzLCBGdW5jdGlvbkNvbnN0cnVjdGlvbk1vZGU6OkdlbmVyYXRvcikpOwog
fQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZW5lcmF0
b3JGdW5jdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewogICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0RnVuY3Rpb24oY2FsbEZyYW1lLCBnbG9iYWxP
YmplY3QsIGFyZ3MsIEZ1bmN0aW9uQ29uc3RydWN0aW9uTW9kZTo6R2VuZXJhdG9yLCBjYWxsRnJh
bWUtPm5ld1RhcmdldCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RG
dW5jdGlvbihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgYXJncywgRnVuY3Rpb25Db25zdHJ1Y3Rp
b25Nb2RlOjpHZW5lcmF0b3IsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpKTsKIH0KIAogR2VuZXJh
dG9yRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6R2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3RvcihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCmluZGV4IDQyYjQxMDUxNGQ4YmIxZDNjNjIyY2Y1OTg5
MDZkNGE1MGVlYjM3YWIuLmIzMWI3MGFiZDAwY2VlYWY1ZWJiN2VlMWQ0NjdkYTQ4ODcwZDUxYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
LmgKQEAgLTQ1LDIxICs0NSwyMSBAQCBjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIGJvb2wgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0g
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBz
dGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOwogICAgIAogICAgIHZvaWQgaW5pdE1vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvcihWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgdm9pZCBpbml0TW9kaWZpZWRBcmd1
bWVudHNEZXNjcmlwdG9ySWZOZWNlc3NhcnkoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHZv
aWQgc2V0TW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoVk0mLCB1bnNpZ25lZCBpbmRleCwgdW5z
aWduZWQgbGVuZ3RoKTsKICAgICBib29sIGlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IodW5z
aWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50
cyhFeGVjU3RhdGUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHVzaW5nIE1vZGlmaWVk
QXJndW1lbnRzUHRyID0gQ2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+
OwogICAgIE1vZGlmaWVkQXJndW1lbnRzUHRyIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9y
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1
bWVudHNJbmxpbmVzLmgKaW5kZXggNjliZDZjZTU3YjdkYWFlOTZmNzFkNjM2NzQ2M2UxZmVjYmQ3
N2Q4Mi4uN2UwNzI1ODE1MDMxYmIzOTM0ZDM1N2FhZGZmZTE2ZDc1MTg3Njc3NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5s
aW5lcy5oCkBAIC00MiwxMCArNDIsMTAgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG8KIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLWJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIGlkZW50LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAg
ICAKICAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkpIHsKICAgICAgICAgaWYg
KGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgewpAQCAtNjMsMTMgKzYzLDEzIEBA
IGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlCiAgICAgfQogICAgIAogICAgIGlmIChPcHRpb25hbDx1
aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KGlkZW50KSkKLSAgICAgICAgcmV0dXJuIEdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwg
ZXhlYywgKmluZGV4LCBzbG90KTsKKyAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCAq
aW5kZXgsIHNsb3QpOwogCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBleGVjLCBpZGVudCwgc2xvdCk7CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCBzbG90KTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLWJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwogICAg
IApAQCAtNzgsNyArNzgsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAgIGJvb2wgcmVz
dWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGdsb2JhbE9iamVj
dCwgaW5kZXgsIHNsb3QpOwogICAgIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc01hcHBlZEFyZ3Vt
ZW50KGluZGV4KSkgewogICAgICAgICBBU1NFUlQocmVzdWx0KTsKQEAgLTkwLDkgKzkwLDkgQEAg
Ym9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGEKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZv
aWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAg
ICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKIAogICAgIGlmIChh
cnJheS5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygpKSB7CkBAIC0xMDksMTQgKzEwOSwxNCBAQCB2
b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleAogICAgICAgICBpZiAoYXJyYXkuaW5jbHVkZVN5bWJvbFBy
b3BlcnRpZXMoKSkKICAgICAgICAgICAgIGFycmF5LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5pdGVy
YXRvclN5bWJvbCk7CiAgICAgfQotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBhcnJheSwgbW9kZSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+Ci1ib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIGlkZW50LCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1dChK
U0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBp
ZGVudCwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFR5cGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KGNlbGwpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICAKICAgICBpZiAoIXRo
aXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkKICAgICAgICAgJiYgKGlkZW50ID09IHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aApAQCAtMTI0LDEzICsxMjQsMTMgQEAgYm9vbCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBpZGUKICAgICAgICAgICAgIHx8IGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9y
U3ltYm9sKSkgewogICAgICAgICB0aGlzT2JqZWN0LT5vdmVycmlkZVRoaW5ncyh2bSk7CiAgICAg
ICAgIFB1dFByb3BlcnR5U2xvdCBkdW1teSA9IHNsb3Q7IC8vIFRoaXMgcHV0IGlzIG5vdCBjYWNo
ZWFibGUsIHNvIHdlIHNoYWRvdyB0aGUgc2xvdCB0aGF0IHdhcyBnaXZlbiB0byB1cy4KLSAgICAg
ICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCwgdmFsdWUsIGR1bW15
KTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlk
ZW50LCB2YWx1ZSwgZHVtbXkpOwogICAgIH0KIAogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTI2Mi8jc2VjLWFyZ3VtZW50cy1leG90aWMtb2JqZWN0cy1zZXQtcC12LXJlY2VpdmVy
CiAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBPcmRpbmFyeVNldCB3aGVuIHRoZSByZWNlaXZlciBp
cyBhbHRlcmVkIGZyb20gdGhlIHRoaXNPYmplY3QuCiAgICAgaWYgKFVOTElLRUxZKGlzVGhpc1Zh
bHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIHJldHVybiBvcmRpbmFyeVNl
dFNsb3coZXhlYywgdGhpc09iamVjdCwgaWRlbnQsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBz
bG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QsIGlkZW50LCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xv
dC5pc1N0cmljdE1vZGUoKSk7CiAgICAgCiAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0g
cGFyc2VJbmRleChpZGVudCk7CiAgICAgaWYgKGluZGV4ICYmIHRoaXNPYmplY3QtPmlzTWFwcGVk
QXJndW1lbnQoaW5kZXgudmFsdWUoKSkpIHsKQEAgLTEzOCwyOCArMTM4LDI4IEBAIGJvb2wgR2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgaWRlCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBy
ZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7Cisg
ICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCB2YWx1
ZSwgc2xvdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1ib29sIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQorYm9vbCBHZW5l
cmljQXJndW1lbnRzPFR5cGU+OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4oY2VsbCk7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmpl
Y3QpOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQoaW5kZXgpKSB7CiAg
ICAgICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIHJldHVybiBCYXNlOjpwdXRCeUlu
ZGV4KGNlbGwsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHJldHVybiBC
YXNlOjpwdXRCeUluZGV4KGNlbGwsIGdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRU
aHJvdyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1ib29sIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgaWRlbnQpCitib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lIGlkZW50KQogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KGNl
bGwpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKICAgICAKICAgICBpZiAoIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkKICAg
ICAgICAgJiYgKGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aApAQCAtMTY4LDIxICsx
NjgsMjEgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGUKICAgICAgICAgdGhpc09iamVjdC0+b3Zl
cnJpZGVUaGluZ3Modm0pOwogICAgIAogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXgg
PSBwYXJzZUluZGV4KGlkZW50KSkKLSAgICAgICAgcmV0dXJuIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCAqaW5kZXgpOworICAg
ICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgKmluZGV4KTsKIAotICAgIHJldHVybiBCYXNlOjpk
ZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBpZGVudCk7CisgICAgcmV0dXJuIEJhc2U6
OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGluZGV4KQorYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBp
bmRleCkKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihjZWxsKTsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7
CiAKICAgICBib29sIHByb3BlcnR5TWlnaHRCZUluSlNPYmplY3RTdG9yYWdlID0gdGhpc09iamVj
dC0+aXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcihpbmRleCkgfHwgIXRoaXNPYmplY3QtPmlz
TWFwcGVkQXJndW1lbnQoaW5kZXgpOwogICAgIGJvb2wgZGVsZXRlZFByb3BlcnR5ID0gdHJ1ZTsK
ICAgICBpZiAocHJvcGVydHlNaWdodEJlSW5KU09iamVjdFN0b3JhZ2UpCi0gICAgICAgIGRlbGV0
ZWRQcm9wZXJ0eSA9IEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChjZWxsLCBleGVjLCBpbmRl
eCk7CisgICAgICAgIGRlbGV0ZWRQcm9wZXJ0eSA9IEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChjZWxsLCBnbG9iYWxPYmplY3QsIGluZGV4KTsKIAogICAgIGlmIChkZWxldGVkUHJvcGVydHkp
IHsKICAgICAgICAgLy8gRGVsZXRpbmcgYW4gaW5kZXhlZCBwcm9wZXJ0eSB1bmNvbmRpdGlvbmFs
bHkgdW5tYXBzIGl0LgpAQCAtMTk3LDEwICsxOTcsMTAgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRz
PFR5cGU+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLWJvb2wgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIGlkZW50LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxU
eXBlKj4ob2JqZWN0KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdl
dFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIAogICAgIGlmIChpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKQEAg
LTIyNyw3ICsyMjcsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBpdCBpcyBhIG5ldyBlbnRyeSwgd2UgbmVlZCB0byBwdXQgZGlyZWN0IHRvIGlu
aXRpYWxpemUgYXJndW1lbnRbaV0gZGVzY3JpcHRvciBwcm9wZXJseQogICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
b2JqZWN0LT5wdXREaXJlY3RNYXlCZUluZGV4KGV4ZWMsIGlkZW50LCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0TWF5QmVJbmRleChnbG9iYWxPYmplY3QsIGlk
ZW50LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7CiAKICAgICAgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+c2V0TW9kaWZpZWRBcmd1bWVu
dERlc2NyaXB0b3Iodm0sIGluZGV4KTsKQEAgLTI0Myw3ICsyNDMsNyBAQCBib29sIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYwogICAgICAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXRE
aXJlY3RNYXlCZUluZGV4KGV4ZWMsIGlkZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgoZ2xvYmFsT2JqZWN0LCBpZGVudCwgdmFs
dWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT51
bm1hcEFyZ3VtZW50KHZtLCBpbmRleCk7CkBAIC0yNTQsNyArMjU0LDcgQEAgYm9vbCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMKICAgICB9CiAKICAgICAvLyBOb3cganVzdCBsZXQgdGhlIG5vcm1hbCBvYmpl
Y3QgbWFjaGluZXJ5IGRvIGl0cyB0aGluZy4KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgaWRlbnQsIGRlc2NyaXB0b3Is
IHNob3VsZFRocm93KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpkZWZp
bmVPd25Qcm9wZXJ0eShvYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIGRlc2NyaXB0b3IsIHNo
b3VsZFRocm93KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0yOTcsMTcgKzI5
NywxNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmlzTW9kaWZpZWRBcmd1bWVudERl
c2NyaXB0b3IodW5zaWduZWQgaW5kZXgsIHVuc2lnbgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgotdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0
YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmNvcHlU
b0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRo
aXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICBpZiAodGhpc09iamVjdC0+aXNNYXBwZWRBcmd1bWVudChpICsgb2Zmc2V0KSkKLSAgICAgICAg
ICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdGhpc09iamVjdC0+Z2V0SW5kZXhR
dWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVu
dERlc3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9
IGdldChleGVjLCBpICsgb2Zmc2V0KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVs
ZW1lbnREZXN0ICsgaSkgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRB
cnJheVZpZXcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oCmluZGV4IDgyZmRmYTFmNDRhMDA4Nzg2NTY2N2JjNDVkYTY0NWQ4Njk0YjEyNTQu
LjgxZWQwOGE0NjdlNjk1ZGExNDliYmRlMWQwOGEzZDAxZjJkOTg2ZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCkBA
IC0xMTgsNyArMTE4LDcgQEAgY2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGZpbmFsIDogcHVi
bGljIEFycmF5QnVmZmVyVmlldyB7CiAgICAgICAgIHJldHVybiBBZGFwdG9yOjp0eXBlVmFsdWU7
CiAgICAgfQogCi0gICAgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqKSBvdmVycmlkZTsKKyAgICBKU0FycmF5QnVmZmVyVmlldyogd3JhcChKU0dsb2Jh
bE9iamVjdCosIEpTR2xvYmFsT2JqZWN0Kikgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAppbmRleCA3NDZjYmUyZmJlYjA3Y2UxZjlhYjM2
OTJhNDRkYWJlOWM4YmEyZmJlLi4zZjdhNmQxODQ5YTBkZTVlZWI3YTg0ZTM4NTVkYmVjYWZlM2U4
YWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCkBAIC0xMzYsMTEgKzEzNiwxMCBAQCBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KLUpTQXJyYXlCdWZmZXJWaWV3
KiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OndyYXAoCi0gICAgRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorSlNBcnJheUJ1ZmZlclZpZXcqIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6d3JhcChKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1
cm4gQWRhcHRvcjo6SlNWaWV3VHlwZTo6Y3JlYXRlKAotICAgICAgICBleGVjLT52bSgpLCBnbG9i
YWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoQWRhcHRvcjo6dHlwZVZhbHVlKSwgdGhpcyk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBBZGFw
dG9yOjpKU1ZpZXdUeXBlOjpjcmVhdGUoZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0
LT50eXBlZEFycmF5U3RydWN0dXJlKEFkYXB0b3I6OnR5cGVWYWx1ZSksIHRoaXMpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dldHRlclNldHRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0
ZXJTZXR0ZXIuY3BwCmluZGV4IGM4ZWE4YmVmNmE4YjU1NjEzNzI2MDUyZTMxZDQzMDJhODg3MTMy
NzMuLjVmOWY4NWUxZWNkYzgxMzQ3ZDg5NzQwNmU2MjExNGQwNjU0NzI3OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcApAQCAtNDUsOSArNDUs
OSBAQCB2b2lkIEdldHRlclNldHRlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2V0dGVy
KTsKIH0KIAotSlNWYWx1ZSBjYWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
LCBKU1ZhbHVlIGdldHRlclNldHRlcikKK0pTVmFsdWUgY2FsbEdldHRlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyBGSVhN
RTogU29tZSBjYWxsZXJzIG1heSBpbnZva2UgZ2V0KCkgd2l0aG91dCBjaGVja2luZyBmb3IgYW4g
ZXhjZXB0aW9uIGZpcnN0LgogICAgIC8vIFdlIHdvcmsgYXJvdW5kIHRoYXQgYnkgY2hlY2tpbmcg
aGVyZS4KQEAgLTU3LDE4ICs1NywxOCBAQCBKU1ZhbHVlIGNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBjYWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBiYXNlLCBBcmdM
aXN0KCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGwoZ2xvYmFsT2JqZWN0
LCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYmFzZSwgQXJnTGlzdCgpKSk7CiB9CiAKLWJv
b2wgY2FsbFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0
ZXJTZXR0ZXIsIEpTVmFsdWUgdmFsdWUsIEVDTUFNb2RlIGVjbWFNb2RlKQorYm9vbCBjYWxsU2V0
dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBn
ZXR0ZXJTZXR0ZXIsIEpTVmFsdWUgdmFsdWUsIEVDTUFNb2RlIGVjbWFNb2RlKQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEdldHRlclNldHRl
ciogZ2V0dGVyU2V0dGVyT2JqID0ganNDYXN0PEdldHRlclNldHRlcio+KGdldHRlclNldHRlcik7
CiAKICAgICBpZiAoZ2V0dGVyU2V0dGVyT2JqLT5pc1NldHRlck51bGwoKSkKLSAgICAgICAgcmV0
dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgZWNtYU1vZGUgPT0gU3RyaWN0TW9kZSwgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIGVjbWFNb2RlID09IFN0cmljdE1vZGUsIFJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKIAogICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBnZXR0ZXJTZXR0ZXJPYmotPnNldHRl
cigpOwogCkBAIC03OSw3ICs3OSw3IEBAIGJvb2wgY2FsbFNldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIsIEpTVmFsdWUgdmFsCiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7CiAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJhc2UsIGFy
Z3MpOworICAgIGNhbGwoZ2xvYmFsT2JqZWN0LCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
YmFzZSwgYXJncyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKaW5kZXggNjdmM2Y2MzM4Nzk0OWE0ODYyZmNjMzg5
ZTA5MmJmYjIzNTlkNTEzMy4uYTM5Y2U3OTMyNzg1NTk5ZTE4Y2MzZjQ0MjVjYTJhMzk0NzBlOGQ5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKQEAg
LTExNiwxOSArMTE2LDE5IEBAIGNsYXNzIEdldHRlclNldHRlciBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0K
LSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBmYWxzZTsgfQotICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgYm9vbCkgeyBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KLSAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCkgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
ZmFsc2U7IH0KLSAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IGZhbHNlOyB9CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpIHsgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGJvb2wgcHV0
KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsg
fQorICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCkgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIGJvb2wpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCkgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSkgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gZmFsc2U7IH0KIAogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1f
Z2V0dGVyOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9zZXR0ZXI7ICAKIH07CiAKLUpT
VmFsdWUgY2FsbEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVy
U2V0dGVyKTsKLUpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FsbFNldHRlcihFeGVjU3RhdGUqLCBK
U1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyLCBKU1ZhbHVlLCBFQ01BTW9kZSk7CitK
U1ZhbHVlIGNhbGxHZXR0ZXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUg
Z2V0dGVyU2V0dGVyKTsKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgY2FsbFNldHRlcihKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIsIEpTVmFsdWUsIEVD
TUFNb2RlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGFzaE1hcEltcGwuaAppbmRleCA4ZGVhNjhmMWU5MGM5NGE1NDIyYWIyNWUyOTViNDdh
NzQ2YTI4ZjUyLi40MjQzZmUyN2U0YTEyNWZhMmI4YmMyMGEzYjIwNmM1ZTMyMWJhYWI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKQEAgLTIwNCwxMyAr
MjA0LDEzIEBAIGNsYXNzIEhhc2hNYXBCdWZmZXIgewogICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEJ1Y2tldFR5cGUqKj4odGhpcyk7CiAgICAgfQogCi0gICAgc3RhdGljIEhhc2hNYXBCdWZm
ZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNDZWxsKiwgdWludDMyX3QgY2Fw
YWNpdHkpCisgICAgc3RhdGljIEhhc2hNYXBCdWZmZXIqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTQ2VsbCosIHVpbnQzMl90IGNhcGFjaXR5KQogICAgIHsK
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFwQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShjYXBh
Y2l0eSk7CiAgICAgICAgIHZvaWQqIGRhdGEgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIWRhdGEpIHsKLSAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCkBAIC0yMjUsMTMgKzIyNSwxMyBAQCBjbGFz
cyBIYXNoTWFwQnVmZmVyIHsKICAgICB9CiB9OwogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGFyZUtleXNFcXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQorQUxX
QVlTX0lOTElORSBzdGF0aWMgYm9vbCBhcmVLZXlzRXF1YWwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCiB7CiAgICAgLy8gV2Ugd2FudCArMCBhbmQg
LTAgdG8gYmUgY29tcGFyZWQgdG8gdHJ1ZSBoZXJlLiBzYW1lVmFsdWUoKSBpdHNlbGYgZG9lc24n
dAogICAgIC8vIGd1YXJhbnRlZSB0aGF0LCBob3dldmVyLCB3ZSBub3JtYWxpemUgYWxsIGtleXMg
YmVmb3JlIGNvbXBhcmluZyBhbmQgc3RvcmluZwogICAgIC8vIHRoZW0gaW4gdGhlIG1hcC4gVGhl
IG5vcm1hbGl6YXRpb24gd2lsbCBjb252ZXJ0IC0wLjAgYW5kIDAuMCB0byB0aGUgaW50ZWdlcgog
ICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciAwLgotICAgIHJldHVybiBzYW1lVmFsdWUoZXhlYywg
YSwgYik7CisgICAgcmV0dXJuIHNhbWVWYWx1ZShnbG9iYWxPYmplY3QsIGEsIGIpOwogfQogCiAv
LyBOb3RlIHRoYXQgbm9ybWFsaXphdGlvbiBpcyBpbmxpbmVkIGluIERGRydzIE5vcm1hbGl6ZU1h
cEtleS4KQEAgLTI3MSwxMyArMjcxLDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90
IHdhbmdzSW50NjRIYXNoKHVpbnQ2NF90IGtleSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGtleSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdWludDMyX3QganNNYXBIYXNoKEV4ZWNT
dGF0ZSogZXhlYywgVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQorQUxXQVlTX0lOTElORSB1aW50MzJf
dCBqc01hcEhhc2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uobm9ybWFsaXplTWFwS2V5KHZhbHVl
KSA9PSB2YWx1ZSwgIldlIGV4cGVjdCBub3JtYWxpemVkIHZhbHVlcyBmbG93aW5nIGludG8gdGhp
cyBmdW5jdGlvbi4iKTsKIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CiAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgY29uc3QgU3RyaW5n
JiB3dGZTdHJpbmcgPSBhc1N0cmluZyh2YWx1ZSktPnZhbHVlKGV4ZWMpOworICAgICAgICBjb25z
dCBTdHJpbmcmIHd0ZlN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVUlOVF9NQVgpOwogICAgICAg
ICByZXR1cm4gd3RmU3RyaW5nLmltcGwoKS0+aGFzaCgpOwogICAgIH0KQEAgLTM3MiwyMCArMzcy
LDIwIEBAIGNsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAg
ICAgICByZXR1cm4gbV9idWZmZXItPmJ1ZmZlcigpOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCiAgICAgewogICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Ojpv
ZmZzZXRPZktleSgpID09IEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46
Om9mZnNldE9mS2V5KCksICJXZSBhc3N1bWUgdGhpcyB0byBiZSB0cnVlIGluIHRoZSBERkcgYW5k
IEZUTCBKSVQuIik7CiAKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAKLSAgICAgICAgbWFrZUFu
ZFNldE5ld0J1ZmZlcihleGVjLCB2bSk7CisgICAgICAgIG1ha2VBbmRTZXROZXdCdWZmZXIoZ2xv
YmFsT2JqZWN0LCB2bSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAKLSAgICAgICAgc2V0VXBIZWFkQW5kVGFpbChleGVjLCB2bSk7CisgICAgICAgIHNldFVw
SGVhZEFuZFRhaWwoZ2xvYmFsT2JqZWN0LCB2bSk7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSGFzaE1hcEltcGwqIGJhc2UpCisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0s
IEhhc2hNYXBJbXBsKiBiYXNlKQogICAgIHsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC0z
OTUsMTUgKzM5NSwxNSBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FwYWNpdHkgPD0gKDFVIDw8IDMxKSk7CiAg
ICAgICAgIGNhcGFjaXR5ID0gc3RkOjptYXg8dWludDMyX3Q+KFdURjo6cm91bmRVcFRvUG93ZXJP
ZlR3byhjYXBhY2l0eSksIDRVKTsKICAgICAgICAgbV9jYXBhY2l0eSA9IGNhcGFjaXR5OwotICAg
ICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsKKyAgICAgICAgbWFrZUFuZFNldE5l
d0J1ZmZlcihnbG9iYWxPYmplY3QsIHZtKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKIAotICAgICAgICBzZXRVcEhlYWRBbmRUYWlsKGV4ZWMsIHZtKTsKKyAg
ICAgICAgc2V0VXBIZWFkQW5kVGFpbChnbG9iYWxPYmplY3QsIHZtKTsKIAogICAgICAgICBIYXNo
TWFwQnVja2V0VHlwZSogYnVja2V0ID0gYmFzZS0+bV9oZWFkLmdldCgpLT5uZXh0KCk7CiAgICAg
ICAgIHdoaWxlIChidWNrZXQpIHsKICAgICAgICAgICAgIGlmICghYnVja2V0LT5kZWxldGVkKCkp
IHsKLSAgICAgICAgICAgICAgICBhZGROb3JtYWxpemVkTm9uRXhpc3RpbmdGb3JDbG9uaW5nKGV4
ZWMsIGJ1Y2tldC0+a2V5KCksIEhhc2hNYXBCdWNrZXRUeXBlOjpleHRyYWN0VmFsdWUoKmJ1Y2tl
dCkpOworICAgICAgICAgICAgICAgIGFkZE5vcm1hbGl6ZWROb25FeGlzdGluZ0ZvckNsb25pbmco
Z2xvYmFsT2JqZWN0LCBidWNrZXQtPmtleSgpLCBIYXNoTWFwQnVja2V0VHlwZTo6ZXh0cmFjdFZh
bHVlKCpidWNrZXQpKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0LT5u
ZXh0KCk7CkBAIC00MzEsNjUgKzQzMSw2NSBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIGJ1Y2tldCA9PSBkZWxldGVkVmFsdWUo
KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1
Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIEFMV0FZU19JTkxJTkUgSGFz
aE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUga2V5KQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAg
ICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBrZXkgPSBub3JtYWxpemVNYXBLZXkoa2V5
KTsKLSAgICAgICAgdWludDMyX3QgaGFzaCA9IGpzTWFwSGFzaChleGVjLCB2bSwga2V5KTsKKyAg
ICAgICAgdWludDMyX3QgaGFzaCA9IGpzTWFwSGFzaChnbG9iYWxPYmplY3QsIHZtLCBrZXkpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmV0
dXJuIGZpbmRCdWNrZXQoZXhlYywga2V5LCBoYXNoKTsKKyAgICAgICAgcmV0dXJuIGZpbmRCdWNr
ZXQoZ2xvYmFsT2JqZWN0LCBrZXksIGhhc2gpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXksIHVpbnQzMl90IGhhc2gpCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoq
IGZpbmRCdWNrZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXksIHVp
bnQzMl90IGhhc2gpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5vcm1hbGl6
ZU1hcEtleShrZXkpID09IGtleSwgIldlIGV4cGVjdCBub3JtYWxpemVkIHZhbHVlcyBmbG93aW5n
IGludG8gdGhpcyBmdW5jdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuIGZpbmRCdWNrZXRBbHJlYWR5
SGFzaGVkQW5kTm9ybWFsaXplZChleGVjLCBrZXksIGhhc2gpOworICAgICAgICByZXR1cm4gZmlu
ZEJ1Y2tldEFscmVhZHlIYXNoZWRBbmROb3JtYWxpemVkKGdsb2JhbE9iamVjdCwga2V5LCBoYXNo
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IEhhc2hNYXBCdWNrZXRUeXBl
PgotICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1ZSwgSlNW
YWx1ZT46OnR5cGUgZ2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgQUxXQVlT
X0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1
Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZhbHVlLCBKU1ZhbHVlPjo6dHlwZSBn
ZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXkpCiAgICAgewotICAg
ICAgICBpZiAoSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtl
eSkpCisgICAgICAgIGlmIChIYXNoTWFwQnVja2V0VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQo
Z2xvYmFsT2JqZWN0LCBrZXkpKQogICAgICAgICAgICAgcmV0dXJuICgqYnVja2V0KS0+dmFsdWUo
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBoYXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBrZXkp
CiAgICAgewotICAgICAgICByZXR1cm4gISFmaW5kQnVja2V0KGV4ZWMsIGtleSk7CisgICAgICAg
IHJldHVybiAhIWZpbmRCdWNrZXQoZ2xvYmFsT2JqZWN0LCBrZXkpOwogICAgIH0KIAotICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBhZGQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZSgpKQogICAgIHsKICAgICAgICAga2V5ID0gbm9ybWFsaXplTWFwS2V5KGtleSk7Ci0gICAgICAg
IGFkZE5vcm1hbGl6ZWRJbnRlcm5hbChleGVjLCBrZXksIHZhbHVlLCBbJl0gKEhhc2hNYXBCdWNr
ZXRUeXBlKiBidWNrZXQpIHsKLSAgICAgICAgICAgIHJldHVybiAhaXNEZWxldGVkKGJ1Y2tldCkg
JiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwgYnVja2V0LT5rZXkoKSk7CisgICAgICAgIGFkZE5v
cm1hbGl6ZWRJbnRlcm5hbChnbG9iYWxPYmplY3QsIGtleSwgdmFsdWUsIFsmXSAoSGFzaE1hcEJ1
Y2tldFR5cGUqIGJ1Y2tldCkgeworICAgICAgICAgICAgcmV0dXJuICFpc0RlbGV0ZWQoYnVja2V0
KSAmJiBhcmVLZXlzRXF1YWwoZ2xvYmFsT2JqZWN0LCBrZXksIGJ1Y2tldC0+a2V5KCkpOwogICAg
ICAgICB9KTsKICAgICAgICAgaWYgKHNob3VsZFJlaGFzaEFmdGVyQWRkKCkpCi0gICAgICAgICAg
ICByZWhhc2goZXhlYyk7CisgICAgICAgICAgICByZWhhc2goZ2xvYmFsT2JqZWN0KTsKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiBhZGROb3JtYWxpemVkKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUsIHVpbnQzMl90IGhhc2gp
CisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSogYWRkTm9ybWFsaXplZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSwgdWlu
dDMyX3QgaGFzaCkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uobm9ybWFsaXpl
TWFwS2V5KGtleSkgPT0ga2V5LCAiV2UgZXhwZWN0IG5vcm1hbGl6ZWQgdmFsdWVzIGZsb3dpbmcg
aW50byB0aGlzIGZ1bmN0aW9uLiIpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGpzTWFw
SGFzaChleGVjLCBleGVjLT52bSgpLCBrZXkpID09IGhhc2gsICJXZSBleHBlY3QgaGFzaCB2YWx1
ZSBpcyB3aGF0IHdlIGV4cGVjdC4iKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShqc01h
cEhhc2goZ2xvYmFsT2JqZWN0LCBnZXRWTShnbG9iYWxPYmplY3QpLCBrZXkpID09IGhhc2gsICJX
ZSBleHBlY3QgaGFzaCB2YWx1ZSBpcyB3aGF0IHdlIGV4cGVjdC4iKTsKIAotICAgICAgICBhdXRv
KiBidWNrZXQgPSBhZGROb3JtYWxpemVkSW50ZXJuYWwoZXhlYy0+dm0oKSwga2V5LCB2YWx1ZSwg
aGFzaCwgWyZdIChIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0KSB7Ci0gICAgICAgICAgICByZXR1
cm4gIWlzRGVsZXRlZChidWNrZXQpICYmIGFyZUtleXNFcXVhbChleGVjLCBrZXksIGJ1Y2tldC0+
a2V5KCkpOworICAgICAgICBhdXRvKiBidWNrZXQgPSBhZGROb3JtYWxpemVkSW50ZXJuYWwoZ2V0
Vk0oZ2xvYmFsT2JqZWN0KSwga2V5LCB2YWx1ZSwgaGFzaCwgWyZdIChIYXNoTWFwQnVja2V0VHlw
ZSogYnVja2V0KSB7CisgICAgICAgICAgICByZXR1cm4gIWlzRGVsZXRlZChidWNrZXQpICYmIGFy
ZUtleXNFcXVhbChnbG9iYWxPYmplY3QsIGtleSwgYnVja2V0LT5rZXkoKSk7CiAgICAgICAgIH0p
OwogICAgICAgICBpZiAoc2hvdWxkUmVoYXNoQWZ0ZXJBZGQoKSkKLSAgICAgICAgICAgIHJlaGFz
aChleGVjKTsKKyAgICAgICAgICAgIHJlaGFzaChnbG9iYWxPYmplY3QpOwogICAgICAgICByZXR1
cm4gYnVja2V0OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCByZW1vdmUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcmVtb3ZlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5KQogICAgIHsKLSAgICAgICAg
SGFzaE1hcEJ1Y2tldFR5cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtleSk7CisgICAg
ICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVja2V0ID0gZmluZEJ1Y2tldChnbG9iYWxPYmplY3Qs
IGtleSk7CiAgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9IGdldFZNKGds
b2JhbE9iamVjdCk7CiAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBpbXBsID0gKmJ1Y2tldDsK
ICAgICAgICAgaW1wbC0+bmV4dCgpLT5zZXRQcmV2KHZtLCBpbXBsLT5wcmV2KCkpOwogICAgICAg
ICBpbXBsLT5wcmV2KCktPnNldE5leHQodm0sIGltcGwtPm5leHQoKSk7CkBAIC01MDIsNyArNTAy
LDcgQEAgY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAg
ICAgIC0tbV9rZXlDb3VudDsKIAogICAgICAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCi0gICAgICAg
ICAgICByZWhhc2goZXhlYyk7CisgICAgICAgICAgICByZWhhc2goZ2xvYmFsT2JqZWN0KTsKIAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01MTIsOSArNTEyLDkgQEAgY2xhc3MgSGFz
aE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIHJldHVybiBtX2tl
eUNvdW50OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhcihFeGVjU3RhdGUq
IGV4ZWMpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiAgICAgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBW
TSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBtX2tleUNvdW50ID0gMDsKICAg
ICAgICAgbV9kZWxldGVDb3VudCA9IDA7CiAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBoZWFk
ID0gbV9oZWFkLmdldCgpOwpAQCAtNTMwLDcgKzUzMCw3IEBAIGNsYXNzIEhhc2hNYXBJbXBsIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBtX2hlYWQtPnNldE5leHQodm0sIG1f
dGFpbC5nZXQoKSk7CiAgICAgICAgIG1fdGFpbC0+c2V0UHJldih2bSwgbV9oZWFkLmdldCgpKTsK
ICAgICAgICAgbV9jYXBhY2l0eSA9IDQ7Ci0gICAgICAgIG1ha2VBbmRTZXROZXdCdWZmZXIoZXhl
Yywgdm0pOworICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGdsb2JhbE9iamVjdCwgdm0pOwog
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogCkBAIC01NzcsNyArNTc3LDcgQEAg
Y2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIHJl
dHVybiBKU0M6OnNob3VsZFNocmluayhtX2NhcGFjaXR5LCBtX2tleUNvdW50KTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VXBIZWFkQW5kVGFpbChFeGVjU3RhdGUqLCBWTSYg
dm0pCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFVwSGVhZEFuZFRhaWwoSlNHbG9iYWxPYmpl
Y3QqLCBWTSYgdm0pCiAgICAgewogICAgICAgICBtX2hlYWQuc2V0KHZtLCB0aGlzLCBIYXNoTWFw
QnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7CiAgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIEhh
c2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsKQEAgLTU4OCwyMCArNTg4LDIwIEBAIGNsYXNz
IEhhc2hNYXBJbXBsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBBU1NFUlQo
bV90YWlsLT5kZWxldGVkKCkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGRO
b3JtYWxpemVkTm9uRXhpc3RpbmdGb3JDbG9uaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXksIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlKCkpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFk
ZE5vcm1hbGl6ZWROb25FeGlzdGluZ0ZvckNsb25pbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlKCkpCiAgICAgewotICAg
ICAgICBhZGROb3JtYWxpemVkSW50ZXJuYWwoZXhlYywga2V5LCB2YWx1ZSwgWyZdIChIYXNoTWFw
QnVja2V0VHlwZSopIHsKKyAgICAgICAgYWRkTm9ybWFsaXplZEludGVybmFsKGdsb2JhbE9iamVj
dCwga2V5LCB2YWx1ZSwgWyZdIChIYXNoTWFwQnVja2V0VHlwZSopIHsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2FuVXNlQnVja2V0PgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGROb3JtYWxpemVkSW50ZXJu
YWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgQ2Fu
VXNlQnVja2V0JiBjYW5Vc2VCdWNrZXQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZE5vcm1h
bGl6ZWRJbnRlcm5hbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwg
SlNWYWx1ZSB2YWx1ZSwgY29uc3QgQ2FuVXNlQnVja2V0JiBjYW5Vc2VCdWNrZXQpCiAgICAgewot
ICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBnZXRWTShnbG9i
YWxPYmplY3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICAgICAgdWludDMyX3QgaGFzaCA9IGpzTWFwSGFzaChleGVjLCB2bSwga2V5KTsKKyAg
ICAgICAgdWludDMyX3QgaGFzaCA9IGpzTWFwSGFzaChnbG9iYWxPYmplY3QsIHZtLCBrZXkpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7CiAgICAgICAgIGFkZE5vcm1hbGl6ZWRJbnRlcm5hbCh2bSwga2V5LCB2YWx1
ZSwgaGFzaCwgY2FuVXNlQnVja2V0KTsKQEAgLTY0MCw3ICs2NDAsNyBAQCBjbGFzcyBIYXNoTWFw
SW1wbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIG5ld0VudHJ5
OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVj
a2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1hbGl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtl
eSwgdWludDMyX3QgaGFzaCkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiog
ZmluZEJ1Y2tldEFscmVhZHlIYXNoZWRBbmROb3JtYWxpemVkKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUga2V5LCB1aW50MzJfdCBoYXNoKQogICAgIHsKICAgICAgICAgY29u
c3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOwogICAgICAgICB1aW50MzJfdCBpbmRl
eCA9IGhhc2ggJiBtYXNrOwpAQCAtNjQ4LDcgKzY0OCw3IEBAIGNsYXNzIEhhc2hNYXBJbXBsIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVj
a2V0ID0gYnVmZmVyW2luZGV4XTsKIAogICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkg
ewotICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBhcmVLZXlzRXF1YWwoZXhl
Yywga2V5LCBidWNrZXQtPmtleSgpKSkKKyAgICAgICAgICAgIGlmICghaXNEZWxldGVkKGJ1Y2tl
dCkgJiYgYXJlS2V5c0VxdWFsKGdsb2JhbE9iamVjdCwga2V5LCBidWNrZXQtPmtleSgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyICsgaW5kZXg7CiAgICAgICAgICAgICBpbmRleCA9
IChpbmRleCArIDEpICYgbWFzazsKICAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07
CkBAIC02NTYsMTYgKzY1NiwxNiBAQCBjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgdm9pZCBy
ZWhhc2goRXhlY1N0YXRlKiBleGVjKQorICAgIHZvaWQgcmVoYXNoKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiAgICAgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAg
ICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgdWludDMyX3Qgb2xkQ2FwYWNpdHkgPSBt
X2NhcGFjaXR5OwogICAgICAgICBtX2NhcGFjaXR5ID0gbmV4dENhcGFjaXR5KG1fY2FwYWNpdHks
IG1fa2V5Q291bnQpOwogCiAgICAgICAgIGlmIChtX2NhcGFjaXR5ICE9IG9sZENhcGFjaXR5KSB7
Ci0gICAgICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsKKyAgICAgICAgICAg
IG1ha2VBbmRTZXROZXdCdWZmZXIoZ2xvYmFsT2JqZWN0LCB2bSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgbV9idWZmZXItPnJlc2V0KG1fY2FwYWNpdHkpOwpAQCAtNjc4LDcgKzY3OCw3IEBAIGNs
YXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghKG1fY2FwYWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7CiAgICAgICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7CiAgICAgICAgIHdoaWxl
IChpdGVyICE9IGVuZCkgewotICAgICAgICAgICAgdWludDMyX3QgaW5kZXggPSBqc01hcEhhc2go
ZXhlYywgdm0sIGl0ZXItPmtleSgpKSAmIG1hc2s7CisgICAgICAgICAgICB1aW50MzJfdCBpbmRl
eCA9IGpzTWFwSGFzaChnbG9iYWxPYmplY3QsIHZtLCBpdGVyLT5rZXkoKSkgJiBtYXNrOwogICAg
ICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVF9XSVRIX01FU1NBR0UoIXNjb3BlLmV4Y2VwdGlvbigp
LCAiQWxsIGtleXMgc2hvdWxkIGFscmVhZHkgYmUgaGFzaGVkIGJlZm9yZSwgc28gdGhpcyBzaG91
bGQgbm90IHRocm93IGJlY2F1c2UgaXQgd29uJ3QgcmVzb2x2ZSByb3Blcy4iKTsKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVmZmVy
W2luZGV4XTsKQEAgLTcxMCwxMSArNzEwLDExIEBAIGNsYXNzIEhhc2hNYXBJbXBsIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBtYWtlQW5k
U2V0TmV3QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAgIHZvaWQgbWFrZUFuZFNl
dE5ld0J1ZmZlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCiAgICAgewog
ICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOwogCi0gICAg
ICAgIEhhc2hNYXBCdWZmZXJUeXBlKiBidWZmZXIgPSBIYXNoTWFwQnVmZmVyVHlwZTo6Y3JlYXRl
KGV4ZWMsIHZtLCB0aGlzLCBtX2NhcGFjaXR5KTsKKyAgICAgICAgSGFzaE1hcEJ1ZmZlclR5cGUq
IGJ1ZmZlciA9IEhhc2hNYXBCdWZmZXJUeXBlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgdGhp
cywgbV9jYXBhY2l0eSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkKICAgICAgICAg
ICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SWRlbnRpZmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5o
CmluZGV4IDAyYTNiNWI4Nzg4MjQ3OTJmMmZkYTQwOTZlNmM5YjExZTVmYWJkYzYuLjQ1YjI2NjFl
ODg2NjZiYmIyZTc0ZmUzNTVkMGJjZmU2YTcwNWM2Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JZGVudGlmaWVyLmgKQEAgLTMwLDcgKzMwLDYgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBDYWxsRnJhbWU7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIEFM
V0FZU19JTkxJTkUgYm9vbCBpc0luZGV4KHVpbnQzMl90IGluZGV4KQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNw
cAppbmRleCBkYWQ5MDJjODNkZTU0NjlmNmUyNTE1NDg3NThmNjYzMWViMmFlMGE2Li41MTgxNmU1
ZDkyOTc4ZTQ5NzBlYjg5NzRhMGQ3NWEyODY3ODJhOGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmNwcApAQCAt
MzUsMTggKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1JbmRpcmVjdEV2YWxFeGVjdXRh
YmxlKiBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQsIERlcml2ZWRDb250
ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwg
RXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSkKK0luZGlyZWN0RXZhbEV4ZWN1dGFibGUq
IEluZGlyZWN0RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQsIERl
cml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSkKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIGlmICghZ2xv
YmFsT2JqZWN0LT5ldmFsRW5hYmxlZCgpKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHNjb3BlLCBjcmVhdGVFdmFsRXJyb3IoZXhlYywgZ2xvYmFsT2JqZWN0LT5ldmFsRGlzYWJsZWRF
cnJvck1lc3NhZ2UoKSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNj
b3BlLCBjcmVhdGVFdmFsRXJyb3IoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmV2YWxEaXNh
YmxlZEVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGF1
dG8qIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmRpcmVjdEV2YWxF
eGVjdXRhYmxlPih2bS5oZWFwKSkgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2Us
IGlzSW5TdHJpY3RDb250ZXh0LCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQsIGV2YWxDb250ZXh0VHlwZSk7CisgICAgYXV0byogZXhlY3V0YWJsZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEluZGlyZWN0RXZhbEV4ZWN1dGFibGU+KHZtLmhlYXApKSBJbmRp
cmVjdEV2YWxFeGVjdXRhYmxlKGdsb2JhbE9iamVjdCwgc291cmNlLCBpc0luU3RyaWN0Q29udGV4
dCwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBldmFsQ29udGV4
dFR5cGUpOwogICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKIAogICAgIFBhcnNl
ckVycm9yIGVycm9yOwpAQCAtNTcsMTAgKzU2LDEwIEBAIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUq
IEluZGlyZWN0RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNv
CiAgICAgICAgIHZtLCBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5zb3VyY2UoKSwgc3RyaWN0TW9k
ZSwgY29kZUdlbmVyYXRpb25Nb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlKTsKIAogICAgIGlm
IChnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkpCi0gICAgICAgIGdsb2JhbE9iamVjdC0+ZGVi
dWdnZXIoKS0+c291cmNlUGFyc2VkKGV4ZWMsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVy
KCksIGVycm9yLmxpbmUoKSwgZXJyb3IubWVzc2FnZSgpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0
LT5kZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoZ2xvYmFsT2JqZWN0LCBleGVjdXRhYmxlLT5zb3Vy
Y2UoKS5wcm92aWRlcigpLCBlcnJvci5saW5lKCksIGVycm9yLm1lc3NhZ2UoKSk7CiAKICAgICBp
ZiAoZXJyb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwg
ZXJyb3IudG9FcnJvck9iamVjdChnbG9iYWxPYmplY3QsIGV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7
CisgICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvci50b0Vycm9y
T2JqZWN0KGdsb2JhbE9iamVjdCwgZXhlY3V0YWJsZS0+c291cmNlKCkpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC02OSw4ICs2OCw4IEBAIEluZGlyZWN0RXZhbEV4ZWN1
dGFibGUqIEluZGlyZWN0RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFNvCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKLUluZGlyZWN0RXZhbEV4ZWN1dGFi
bGU6OkluZGlyZWN0RXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUgZGVy
aXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0
VHlwZSBldmFsQ29udGV4dFR5cGUpCi0gICAgOiBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2Us
IGluU3RyaWN0Q29udGV4dCwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rpb25Db250
ZXh0LCBldmFsQ29udGV4dFR5cGUpCitJbmRpcmVjdEV2YWxFeGVjdXRhYmxlOjpJbmRpcmVjdEV2
YWxFeGVjdXRhYmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJp
dmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRU
eXBlIGV2YWxDb250ZXh0VHlwZSkKKyAgICA6IEV2YWxFeGVjdXRhYmxlKGdsb2JhbE9iamVjdCwg
c291cmNlLCBpblN0cmljdENvbnRleHQsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0
aW9uQ29udGV4dCwgZXZhbENvbnRleHRUeXBlKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmgKaW5kZXggMWVk
ZTFhOGNkZTk5ZTFmYzc1YmVjMWY1ODAzNWNhMWNkNWE1ZjNlNS4uYzE5OTJmZGIxYTQyNTA1NGFl
OWJjNDU3NTEyOGU2ZjUwODZjYTliYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuaApAQCAtMzEsOSArMzEsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZSBmaW5hbCA6IHB1
YmxpYyBFdmFsRXhlY3V0YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEluZGlyZWN0RXZhbEV4
ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpc0lu
U3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQsIEV2YWxDb250ZXh0VHlwZSk7CisgICAgc3RhdGljIEluZGlyZWN0RXZhbEV4ZWN1dGFi
bGUqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGlzSW5T
dHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dCwgRXZhbENvbnRleHRUeXBlKTsKIHByaXZhdGU6Ci0gICAgSW5kaXJlY3RFdmFsRXhlY3V0
YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQs
IERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29u
dGV4dFR5cGUpOworICAgIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlw
ZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUpOwogfTsKIAog
c3RhdGljX2Fzc2VydChzaXplb2YoSW5kaXJlY3RFdmFsRXhlY3V0YWJsZSkgPT0gc2l6ZW9mKEV2
YWxFeGVjdXRhYmxlKSwgIiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAKaW5kZXgg
NWUyNDk5YzkzZWM5NTAwYzEzM2U3NmQ3YTU3NDA3OTM0Zjc2MWE3Yy4uYzljOGJmNTUxM2M5MzY4
OWZjN2QxNTU3OWQ3ODVhZTJmNjc4ZjM2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3Qu
Y3BwCkBAIC04Niw3ICs4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0TG9nKEpTR2xvYmFsT2JqZWN0KiBnCiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBKU1ZhbHVlIHRhcmdldCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0g
ICAgU3RyaW5nIHZhbHVlID0gdGFyZ2V0LnRvV1RGU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgU3Ry
aW5nIHZhbHVlID0gdGFyZ2V0LnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgZGF0YUxvZyh2YWx1
ZSwgIlxuIik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAK
aW5kZXggMDA5ODIwYzJkNzM5ODY5ZjgyNjAzYzljOTQ0MGViOGM3N2IzYTIzYy4uNjJkNTk5M2Iz
ODA5Y2YxMmNiYmNhOGM2M2NjNjMxZTEzNzAwNzI2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKQEAgLTQwLDcgKzQwLDcgQEAg
SW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBOYXRpdmVGdW5jdGlvbgogICAgICwgbV9mdW5jdGlvbkZvckNvbnN0cnVjdChmdW5j
dGlvbkZvckNvbnN0cnVjdCA/IGZ1bmN0aW9uRm9yQ29uc3RydWN0IDogY2FsbEhvc3RGdW5jdGlv
bkFzQ29uc3RydWN0b3IpCiAgICAgLCBtX2dsb2JhbE9iamVjdCh2bSwgdGhpcywgc3RydWN0dXJl
LT5nbG9iYWxPYmplY3QoKSkKIHsKLSAgICAvLyBleGVjLT52bSgpIHdhbnRzIGNhbGxlZXMgdG8g
bm90IGJlIGxhcmdlIGFsbG9jYXRpb25zLgorICAgIC8vIGdsb2JhbE9iamVjdC0+dm0oKSB3YW50
cyBjYWxsZWVzIHRvIG5vdCBiZSBsYXJnZSBhbGxvY2F0aW9ucy4KICAgICBSRUxFQVNFX0FTU0VS
VCghaXNMYXJnZUFsbG9jYXRpb24oKSk7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2Z1bmN0
aW9uRm9yQ2FsbCwgIltbQ2FsbF1dIG11c3QgYmUgaW1wbGVtZW50ZWQiKTsKICAgICBBU1NFUlQo
bV9mdW5jdGlvbkZvckNvbnN0cnVjdCk7CkBAIC0xMTYsMzQgKzExNiwzNCBAQCBjb25zdCBTdHJp
bmcgSW50ZXJuYWxGdW5jdGlvbjo6Y2FsY3VsYXRlZERpc3BsYXlOYW1lKFZNJiB2bSkKICAgICBy
ZXR1cm4gbmFtZSgpOwogfQogCi1TdHJ1Y3R1cmUqIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1
YmNsYXNzU3RydWN0dXJlU2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbmV3VGFyZ2V0LCBT
dHJ1Y3R1cmUqIGJhc2VDbGFzcykKK1N0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmVTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgbmV3VGFyZ2V0LCBTdHJ1Y3R1cmUqIGJhc2VDbGFzcykKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQoYmFzZUNsYXNzLT5oYXNN
b25vUHJvdG8oKSk7CiAKICAgICAvLyBuZXdUYXJnZXQgbWF5IGJlIGFuIEludGVybmFsRnVuY3Rp
b24gaWYgd2Ugd2VyZSBjYWxsZWQgZnJvbSBSZWZsZWN0LmNvbnN0cnVjdC4KICAgICBKU0Z1bmN0
aW9uKiB0YXJnZXRGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBuZXdU
YXJnZXQpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBiYXNlQ2xhc3MtPmds
b2JhbE9iamVjdCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBiYXNlR2xvYmFsT2JqZWN0ID0gYmFz
ZUNsYXNzLT5nbG9iYWxPYmplY3QoKTsKIAogICAgIGlmIChMSUtFTFkodGFyZ2V0RnVuY3Rpb24p
KSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGFyZ2V0RnVuY3Rpb24tPnJhcmVE
YXRhKHZtKS0+aW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25TdHJ1Y3R1cmUoKTsKLSAgICAgICAg
aWYgKExJS0VMWShzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSBiYXNlQ2xh
c3MtPmNsYXNzSW5mbygpICYmIHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkgPT0gZ2xvYmFsT2Jq
ZWN0KSkKKyAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSA9PSBiYXNlQ2xhc3MtPmNsYXNzSW5mbygpICYmIHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0
KCkgPT0gYmFzZUdsb2JhbE9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlOwog
CiAgICAgICAgIC8vIE5vdGUsIFJlZmxlY3QuY29uc3RydWN0IG1pZ2h0IGNhdXNlIHRoZSBwcm9m
aWxlIHRvIGNodXJuIGJ1dCB3ZSBkb24ndCBjYXJlLgotICAgICAgICBKU1ZhbHVlIHByb3RvdHlw
ZVZhbHVlID0gdGFyZ2V0RnVuY3Rpb24tPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUpOworICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlID0gdGFyZ2V0RnVuY3Rpb24t
PmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBpZiAoSlNPYmpl
Y3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgcHJvdG90eXBlVmFs
dWUpKQotICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLT5yYXJlRGF0YSh2bSktPmNy
ZWF0ZUludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBiYXNlQ2xhc3MpOworICAgICAgICAgICAgcmV0dXJuIHRhcmdl
dEZ1bmN0aW9uLT5yYXJlRGF0YSh2bSktPmNyZWF0ZUludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9u
U3RydWN0dXJlRnJvbUJhc2Uodm0sIGJhc2VHbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZUNs
YXNzKTsKICAgICB9IGVsc2UgewotICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlID0gbmV3
VGFyZ2V0LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOworICAgICAgICBK
U1ZhbHVlIHByb3RvdHlwZVZhbHVlID0gbmV3VGFyZ2V0LmdldChnbG9iYWxPYmplY3QsIHZtLnBy
b3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogICAgICAgICBpZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNPYmplY3QqPih2bSwgcHJvdG90eXBlVmFsdWUpKSB7CiAgICAgICAgICAgICAvLyBU
aGlzIG9ubHkgaGFwcGVucyBpZiBzb21lb25lIFJlZmxlY3QuY29uc3RydWN0cyBvdXIgYnVpbHRp
biBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgYnVpbHRpbiBjb25zdHJ1Y3RvciBhcyB0aGUgbmV3
LnRhcmdldC4KICAgICAgICAgICAgIC8vIFRodXMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGNv
c3Qgb2YgbG9va2luZyB1cCB0aGUgc3RydWN0dXJlIGZyb20gb3VyIGhhc2ggdGFibGUgZXZlcnkg
dGltZS4KLSAgICAgICAgICAgIHJldHVybiB2bS5zdHJ1Y3R1cmVDYWNoZS5lbXB0eVN0cnVjdHVy
ZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBi
YXNlQ2xhc3MpOworICAgICAgICAgICAgcmV0dXJuIHZtLnN0cnVjdHVyZUNhY2hlLmVtcHR5U3Ry
dWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoYmFzZUdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBiYXNlQ2xhc3MpOwogICAgICAgICB9CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5oCmluZGV4IGFhMmU5NWE4
YzIzOWZmOTMyYmI2YjBiZWQwNjEzMTU2NjRmMDUyNDQuLjdkZmRhMDhkNTljMWNjOTQyNDA5MGRh
ZjAyMDFjYTZkNGQ2ZTIyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVybmFsRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlcm5hbEZ1bmN0aW9uLmgKQEAgLTU3LDggKzU3LDcgQEAgY2xhc3MgSW50ZXJuYWxGdW5j
dGlvbiA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oSW50ZXJuYWxG
dW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCiAgICAgfQogCi0gICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoRXhlY1N0YXRlKiwgSlNWYWx1
ZSBuZXdUYXJnZXQsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN1
YmNsYXNzU3RydWN0dXJlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBiYXNlQ2FsbGVlLCBKU1ZhbHVl
IG5ld1RhcmdldCwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Vi
Y2xhc3NTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZUNhbGxlZSwgSlNW
YWx1ZSBuZXdUYXJnZXQsIFN0cnVjdHVyZSopOwogCiAgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24g
bmF0aXZlRnVuY3Rpb25Gb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgIHsKQEAg
LTkwLDcgKzg5LDcgQEAgY2xhc3MgSW50ZXJuYWxGdW5jdGlvbiA6IHB1YmxpYyBKU0Rlc3RydWN0
aWJsZU9iamVjdCB7CiAgICAgZW51bSBjbGFzcyBOYW1lQWRkaXRpb25Nb2RlIHsgV2l0aFN0cnVj
dHVyZVRyYW5zaXRpb24sIFdpdGhvdXRTdHJ1Y3R1cmVUcmFuc2l0aW9uIH07CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIGNvbnN0IFN0cmluZyYgbmFtZSwg
TmFtZVZpc2liaWxpdHkgPSBOYW1lVmlzaWJpbGl0eTo6VmlzaWJsZSwgTmFtZUFkZGl0aW9uTW9k
ZSA9IE5hbWVBZGRpdGlvbk1vZGU6OldpdGhTdHJ1Y3R1cmVUcmFuc2l0aW9uKTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN1YmNsYXNzU3RydWN0dXJl
U2xvdyhFeGVjU3RhdGUqLCBKU1ZhbHVlIG5ld1RhcmdldCwgU3RydWN0dXJlKik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmVT
bG93KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBuZXdUYXJnZXQsIFN0cnVjdHVyZSopOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0
YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CkBAIC0xMDEsMTcgKzEw
MCwxMiBAQCBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0Owog
fTsKIAotQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmUqIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1
YmNsYXNzU3RydWN0dXJlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXdUYXJnZXQsIFN0cnVj
dHVyZSogYmFzZUNsYXNzKQotewotICAgIHJldHVybiBjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShl
eGVjLCBleGVjLT5qc0NhbGxlZSgpLCBuZXdUYXJnZXQsIGJhc2VDbGFzcyk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlQ2FsbGVlLCBKU1ZhbHVlIG5ld1Rh
cmdldCwgU3RydWN0dXJlKiBiYXNlQ2xhc3MpCitBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2VDYWxsZWUsIEpTVmFsdWUgbmV3VGFyZ2V0LCBTdHJ1
Y3R1cmUqIGJhc2VDbGFzcykKIHsKICAgICAvLyBXZSBhbGxvdyBuZXdUYXJnZXQgPT0gSlNWYWx1
ZSgpIGJlY2F1c2UgdGhlIEFQSSBuZWVkcyB0byBiZSBhYmxlIHRvIGNyZWF0ZSBjbGFzc2VzIHdp
dGhvdXQgaGF2aW5nIGEgcmVhbCBKUyBmcmFtZS4KLSAgICAvLyBTaW5jZSB3ZSBkb24ndCBhbGxv
dyBzdWJjbGFzc2luZyBpbiB0aGUgQVBJIHdlIGp1c3QgdHJlYXQgbmV3VGFyZ2V0ID09IEpTVmFs
dWUoKSBhcyBuZXdUYXJnZXQgPT0gZXhlYy0+anNDYWxsZWUoKQorICAgIC8vIFNpbmNlIHdlIGRv
bid0IGFsbG93IHN1YmNsYXNzaW5nIGluIHRoZSBBUEkgd2UganVzdCB0cmVhdCBuZXdUYXJnZXQg
PT0gSlNWYWx1ZSgpIGFzIG5ld1RhcmdldCA9PSBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkKICAgICBp
ZiAobmV3VGFyZ2V0ICYmIG5ld1RhcmdldCAhPSBiYXNlQ2FsbGVlKQotICAgICAgICByZXR1cm4g
Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmVTbG93KGV4ZWMsIG5ld1RhcmdldCwgYmFzZUNsYXNzKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlU2xvdyhnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCwgYmFzZUNsYXNzKTsKICAgICByZXR1cm4gYmFzZUNsYXNzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAppbmRleCBhYTk0
M2U2MWFjYTllM2E3YTc1YTIwZTUzMTI4NDg3NTlhZTcxMTY3Li4yNjQzOTI0YjgyZThlOGUwZDJj
YTAxZDM3NjI5ZTliZWMyYjVhMGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxDb2xsYXRvci5jcHAKQEAgLTE3MywyNiArMTczLDI2IEBAIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBzZWFyY2hMb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIHNpemVfdCBrZXlJbmRleCkK
ICAgICByZXR1cm4ga2V5TG9jYWxlRGF0YTsKIH0KIAotdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRp
YWxpemVDb2xsYXRvcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUg
b3B0aW9uc1ZhbHVlKQordm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9u
c1ZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIC8vIDEwLjEuMSBJbml0aWFsaXplQ29sbGF0b3IgKGNvbGxhdG9yLCBsb2NhbGVzLCBv
cHRpb25zKSAoRUNNQS00MDIpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAy
LyNzZWMtaW5pdGlhbGl6ZWNvbGxhdG9yCiAKLSAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBj
YW5vbmljYWxpemVMb2NhbGVMaXN0KHN0YXRlLCBsb2NhbGVzKTsKKyAgICBhdXRvIHJlcXVlc3Rl
ZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgbG9jYWxlcyk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIEpTT2JqZWN0
KiBvcHRpb25zOwogICAgIGlmIChvcHRpb25zVmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAg
b3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSwgc3RhdGUubGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpOworICAgICAgICBvcHRp
b25zID0gY29uc3RydWN0RW1wdHlPYmplY3Qodm0sIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlw
ZU9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgb3B0aW9ucyA9IG9wdGlv
bnNWYWx1ZS50b09iamVjdCgmc3RhdGUpOworICAgICAgICBvcHRpb25zID0gb3B0aW9uc1ZhbHVl
LnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgfQogCi0gICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gaW50bFN0cmlu
Z09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+dXNhZ2UsIHsgInNvcnQi
LCAic2VhcmNoIiB9LCAidXNhZ2UgbXVzdCBiZSBlaXRoZXIgXCJzb3J0XCIgb3IgXCJzZWFyY2hc
IiIsICJzb3J0Iik7CisgICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihn
bG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdlLCB7ICJzb3J0Iiwg
InNlYXJjaCIgfSwgInVzYWdlIG11c3QgYmUgZWl0aGVyIFwic29ydFwiIG9yIFwic2VhcmNoXCIi
LCAic29ydCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAg
aWYgKHVzYWdlU3RyaW5nID09ICJzb3J0IikKICAgICAgICAgbV91c2FnZSA9IFVzYWdlOjpTb3J0
OwpAQCAtMjA1LDE0ICsyMDUsMTQgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xs
YXRvcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUKIAogICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IG9wdDsKIAotICAgIFN0cmluZyBtYXRjaGVyID0gaW50bFN0
cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hl
ciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhl
ciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOworICAgIFN0cmluZyBt
YXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3Bl
cnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIgfSwgImxvY2Fs
ZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiLCAiYmVz
dCBmaXQiKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIG9w
dC5hZGQoImxvY2FsZU1hdGNoZXIiX3MsIG1hdGNoZXIpOwogCiAgICAgewogICAgICAgICBTdHJp
bmcgbnVtZXJpY1N0cmluZzsKICAgICAgICAgYm9vbCB1c2VzRmFsbGJhY2s7Ci0gICAgICAgIGJv
b2wgbnVtZXJpYyA9IGludGxCb29sZWFuT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2spOworICAgICAgICBib29sIG51bWVyaWMgPSBp
bnRsQm9vbGVhbk9wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
Pm51bWVyaWMsIHVzZXNGYWxsYmFjayk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgICAgIGlmICghdXNlc0ZhbGxiYWNrKQogICAgICAgICAgICAgbnVt
ZXJpY1N0cmluZyA9IG51bWVyaWMgPyAidHJ1ZSJfcyA6ICJmYWxzZSJfczsKQEAgLTIyMCwxOCAr
MjIwLDE4IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlCiAgICAgICAgICAgICBvcHQuYWRkKCJr
biJfcywgbnVtZXJpY1N0cmluZyk7CiAgICAgfQogICAgIHsKLSAgICAgICAgU3RyaW5nIGNhc2VG
aXJzdCA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
PmNhc2VGaXJzdCwgeyAidXBwZXIiLCAibG93ZXIiLCAiZmFsc2UiIH0sICJjYXNlRmlyc3QgbXVz
dCBiZSBlaXRoZXIgXCJ1cHBlclwiLCBcImxvd2VyXCIsIG9yIFwiZmFsc2VcIiIsIG51bGxwdHIp
OworICAgICAgICBTdHJpbmcgY2FzZUZpcnN0ID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmpl
Y3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwgeyAidXBwZXIiLCAibG93
ZXIiLCAiZmFsc2UiIH0sICJjYXNlRmlyc3QgbXVzdCBiZSBlaXRoZXIgXCJ1cHBlclwiLCBcImxv
d2VyXCIsIG9yIFwiZmFsc2VcIiIsIG51bGxwdHIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBpZiAoIWNhc2VGaXJzdC5pc051bGwoKSkKICAg
ICAgICAgICAgIG9wdC5hZGQoImtmIl9zLCBjYXNlRmlyc3QpOwogICAgIH0KIAotICAgIGF1dG8m
IGF2YWlsYWJsZUxvY2FsZXMgPSBzdGF0ZS5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3Qodm0pLT5p
bnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7Ci0gICAgYXV0byByZXN1bHQgPSByZXNvbHZl
TG9jYWxlKHN0YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHQsIHJl
bGV2YW50Q29sbGF0b3JFeHRlbnNpb25LZXlzLCBXVEZfQVJSQVlfTEVOR1RIKHJlbGV2YW50Q29s
bGF0b3JFeHRlbnNpb25LZXlzKSwgbG9jYWxlRGF0YSk7CisgICAgYXV0byYgYXZhaWxhYmxlTG9j
YWxlcyA9IGdsb2JhbE9iamVjdC0+aW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOworICAg
IGF1dG8gcmVzdWx0ID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdCwgcmVsZXZhbnRDb2xsYXRvckV4dGVuc2lvbktleXMs
IFdURl9BUlJBWV9MRU5HVEgocmVsZXZhbnRDb2xsYXRvckV4dGVuc2lvbktleXMpLCBsb2NhbGVE
YXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzdWx0LmdldCgibG9jYWxlIl9zKTsKICAgICBpZiAo
bV9sb2NhbGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBDb2xsYXRvciBkdWUgdG8gaW52YWxpZCBsb2NhbGUi
X3MpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVk
IHRvIGluaXRpYWxpemUgQ29sbGF0b3IgZHVlIHRvIGludmFsaWQgbG9jYWxlIl9zKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQgSW50bENvbGxhdG9y
Ojppbml0aWFsaXplQ29sbGF0b3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBsb2NhbGVzLCBK
U1ZhbHVlCiAgICAgZWxzZQogICAgICAgICBtX2Nhc2VGaXJzdCA9IENhc2VGaXJzdDo6RmFsc2U7
CiAKLSAgICBTdHJpbmcgc2Vuc2l0aXZpdHlTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRl
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZW5zaXRpdml0eSwgeyAiYmFzZSIsICJhY2Nl
bnQiLCAiY2FzZSIsICJ2YXJpYW50IiB9LCAic2Vuc2l0aXZpdHkgbXVzdCBiZSBlaXRoZXIgXCJi
YXNlXCIsIFwiYWNjZW50XCIsIFwiY2FzZVwiLCBvciBcInZhcmlhbnRcIiIsIG51bGxwdHIpOwor
ICAgIFN0cmluZyBzZW5zaXRpdml0eVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZW5zaXRpdml0eSwgeyAiYmFzZSIsICJh
Y2NlbnQiLCAiY2FzZSIsICJ2YXJpYW50IiB9LCAic2Vuc2l0aXZpdHkgbXVzdCBiZSBlaXRoZXIg
XCJiYXNlXCIsIFwiYWNjZW50XCIsIFwiY2FzZVwiLCBvciBcInZhcmlhbnRcIiIsIG51bGxwdHIp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKHNlbnNp
dGl2aXR5U3RyaW5nID09ICJiYXNlIikKICAgICAgICAgbV9zZW5zaXRpdml0eSA9IFNlbnNpdGl2
aXR5OjpCYXNlOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlCiAg
ICAgICAgIG1fc2Vuc2l0aXZpdHkgPSBTZW5zaXRpdml0eTo6VmFyaWFudDsKIAogICAgIGJvb2wg
dXNlc0ZhbGxiYWNrOwotICAgIGJvb2wgaWdub3JlUHVuY3R1YXRpb24gPSBpbnRsQm9vbGVhbk9w
dGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aWdub3JlUHVuY3R1YXRpb24s
IHVzZXNGYWxsYmFjayk7CisgICAgYm9vbCBpZ25vcmVQdW5jdHVhdGlvbiA9IGludGxCb29sZWFu
T3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aWdub3JlUHVu
Y3R1YXRpb24sIHVzZXNGYWxsYmFjayk7CiAgICAgaWYgKHVzZXNGYWxsYmFjaykKICAgICAgICAg
aWdub3JlUHVuY3R1YXRpb24gPSBmYWxzZTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwpAQCAtMjY4LDE0ICsyNjgsMTQgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRp
YWxpemVDb2xsYXRvcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUK
ICAgICBtX2luaXRpYWxpemVkQ29sbGF0b3IgPSB0cnVlOwogfQogCi12b2lkIEludGxDb2xsYXRv
cjo6Y3JlYXRlQ29sbGF0b3IoRXhlY1N0YXRlJiBzdGF0ZSkKK3ZvaWQgSW50bENvbGxhdG9yOjpj
cmVhdGVDb2xsYXRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBBU1NFUlQoIW1fY29sbGF0
b3IpOwogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkQ29sbGF0b3IpIHsKLSAgICAgICAgaW5pdGlh
bGl6ZUNvbGxhdG9yKHN0YXRlLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgaW5pdGlhbGl6ZUNvbGxhdG9yKGdsb2JhbE9iamVjdCwganNVbmRlZmluZWQoKSwganNVbmRl
ZmluZWQoKSk7CiAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgfQogCkBA
IC0zMjksMTYgKzMyOSwxNiBAQCB2b2lkIEludGxDb2xsYXRvcjo6Y3JlYXRlQ29sbGF0b3IoRXhl
Y1N0YXRlJiBzdGF0ZSkKICAgICBtX2NvbGxhdG9yID0gV1RGTW92ZShjb2xsYXRvcik7CiB9CiAK
LUpTVmFsdWUgSW50bENvbGxhdG9yOjpjb21wYXJlU3RyaW5ncyhFeGVjU3RhdGUmIHN0YXRlLCBT
dHJpbmdWaWV3IHgsIFN0cmluZ1ZpZXcgeSkKK0pTVmFsdWUgSW50bENvbGxhdG9yOjpjb21wYXJl
U3RyaW5ncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmdWaWV3IHgsIFN0cmlu
Z1ZpZXcgeSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICAvLyAxMC4zLjQgQ29tcGFyZVN0cmluZ3MgYWJzdHJhY3Qgb3BlcmF0aW9uIChFQ01B
LTQwMiAyLjApCiAgICAgaWYgKCFtX2NvbGxhdG9yKSB7Ci0gICAgICAgIGNyZWF0ZUNvbGxhdG9y
KHN0YXRlKTsKKyAgICAgICAgY3JlYXRlQ29sbGF0b3IoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
aWYgKCFtX2NvbGxhdG9yKQotICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKCZzdGF0ZSwgIkZhaWxlZCB0byBjb21wYXJlIHN0cmluZ3Mu
Il9zKSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiRmFpbGVkIHRvIGNvbXBhcmUgc3RyaW5n
cy4iX3MpKTsKICAgICB9CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsK
QEAgLTM0Niw3ICszNDYsNyBAQCBKU1ZhbHVlIEludGxDb2xsYXRvcjo6Y29tcGFyZVN0cmluZ3Mo
RXhlY1N0YXRlJiBzdGF0ZSwgU3RyaW5nVmlldyB4LCBTdHJpbmdWaWV3CiAgICAgVUNoYXJJdGVy
YXRvciBpdGVyYXRvclkgPSBjcmVhdGVJdGVyYXRvcih5KTsKICAgICBhdXRvIHJlc3VsdCA9IHVj
b2xfc3RyY29sbEl0ZXIobV9jb2xsYXRvci5nZXQoKSwgJml0ZXJhdG9yWCwgJml0ZXJhdG9yWSwg
JnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQotICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3IoJnN0YXRlLCAiRmFpbGVkIHRv
IGNvbXBhcmUgc3RyaW5ncy4iX3MpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgIkZhaWxlZCB0byBj
b21wYXJlIHN0cmluZ3MuIl9zKSk7CiAgICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CiB9CiAK
QEAgLTM5Miw5ICszOTIsOSBAQCBBU0NJSUxpdGVyYWwgSW50bENvbGxhdG9yOjpjYXNlRmlyc3RT
dHJpbmcoQ2FzZUZpcnN0IGNhc2VGaXJzdCkKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxs
KCk7CiB9CiAKLUpTT2JqZWN0KiBJbnRsQ29sbGF0b3I6OnJlc29sdmVkT3B0aW9ucyhFeGVjU3Rh
dGUmIHN0YXRlKQorSlNPYmplY3QqIEludGxDb2xsYXRvcjo6cmVzb2x2ZWRPcHRpb25zKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMTAuMy41IEludGwuQ29sbGF0b3IucHJvdG90eXBl
LnJlc29sdmVkT3B0aW9ucygpIChFQ01BLTQwMiAyLjApCkBAIC00MDcsMTEgKzQwNywxMSBAQCBK
U09iamVjdCogSW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlJiBzdGF0ZSkK
ICAgICAvLyBJbnRsLkNvbGxhdG9yLgogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkQ29sbGF0b3Ip
IHsKLSAgICAgICAgaW5pdGlhbGl6ZUNvbGxhdG9yKHN0YXRlLCBqc1VuZGVmaW5lZCgpLCBqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgaW5pdGlhbGl6ZUNvbGxhdG9yKGdsb2JhbE9iamVjdCwganNV
bmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgfQogCi0gICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmc3RhdGUpOworICAgIEpTT2JqZWN0KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxvY2FsZSwganNTdHJpbmcodm0sIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCB1c2FnZVN0cmluZyhtX3VzYWdlKSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+c2Vuc2l0aXZpdHksIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgc2Vuc2l0
aXZpdHlTdHJpbmcobV9zZW5zaXRpdml0eSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yLmgKaW5kZXggZTcwN2Q5ODY3OWI3ZDlmZDljMGNiNzcxNTIyZjU2
OTU1NzA2OWUxMS4uMmNkMGZlMDJiOTdjYWFhNzcxNmQ1OThmMmZkYWFkMGM2NDdhYzBiMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmgKQEAgLTQ1LDkg
KzQ1LDkgQEAgY2xhc3MgSW50bENvbGxhdG9yIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0IHsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbGxh
dG9yKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgbG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpOwot
ICAgIEpTVmFsdWUgY29tcGFyZVN0cmluZ3MoRXhlY1N0YXRlJiwgU3RyaW5nVmlldywgU3RyaW5n
Vmlldyk7Ci0gICAgSlNPYmplY3QqIHJlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUmKTsKKyAgICB2
b2lkIGluaXRpYWxpemVDb2xsYXRvcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbG9jYWxlcywg
SlNWYWx1ZSBvcHRpb25zVmFsdWUpOworICAgIEpTVmFsdWUgY29tcGFyZVN0cmluZ3MoSlNHbG9i
YWxPYmplY3QqLCBTdHJpbmdWaWV3LCBTdHJpbmdWaWV3KTsKKyAgICBKU09iamVjdCogcmVzb2x2
ZWRPcHRpb25zKEpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5k
Q29tcGFyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRDb21wYXJlLmdldCgpOyB9CiAgICAgdm9p
ZCBzZXRCb3VuZENvbXBhcmUoVk0mLCBKU0JvdW5kRnVuY3Rpb24qKTsKQEAgLTY3LDcgKzY3LDcg
QEAgY2xhc3MgSW50bENvbGxhdG9yIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IHsKICAgICAgICAgdm9pZCBvcGVyYXRvcigpKFVDb2xsYXRvciopIGNvbnN0OwogICAgIH07CiAK
LSAgICB2b2lkIGNyZWF0ZUNvbGxhdG9yKEV4ZWNTdGF0ZSYpOworICAgIHZvaWQgY3JlYXRlQ29s
bGF0b3IoSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgQVNDSUlMaXRlcmFsIHVzYWdlU3Ry
aW5nKFVzYWdlKTsKICAgICBzdGF0aWMgQVNDSUlMaXRlcmFsIHNlbnNpdGl2aXR5U3RyaW5nKFNl
bnNpdGl2aXR5KTsKICAgICBzdGF0aWMgQVNDSUlMaXRlcmFsIGNhc2VGaXJzdFN0cmluZyhDYXNl
Rmlyc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCmluZGV4IDkwNTllNmIzN2E1YTMxMmYyMjM3MTc0MDBi
YjA3MmE2MWE0OTc3YjcuLmNiZmE0OWYzOGIwOWQ5ZTkxZDNmZTVmNmVkOTM1MDljNTQ0OTU3MDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3JDb25zdHJ1Y3Rvci5jcHAKQEAgLTkzLDE0ICs5MywxNCBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsQ29sbGF0b3IoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbAogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1bmRlZmluZWQsIGxldCBuZXdUYXJn
ZXQgYmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVsc2UgbGV0IG5ld1RhcmdldCBiZSBO
ZXdUYXJnZXQuCiAgICAgLy8gMi4gTGV0IGNvbGxhdG9yIGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNv
bnN0cnVjdG9yKG5ld1RhcmdldCwgJUNvbGxhdG9yUHJvdG90eXBlJSkuCiAgICAgLy8gMy4gUmV0
dXJuSWZBYnJ1cHQoY29sbGF0b3IpLgotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
Pm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bENvbGxhdG9yQ29uc3RydWN0b3IqPihjYWxsRnJhbWUt
PmpzQ2FsbGVlKCkpLT5jb2xsYXRvclN0cnVjdHVyZSh2bSkpOworICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCksIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGpz
Q2FzdDxJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmNv
bGxhdG9yU3RydWN0dXJlKHZtKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgSW50bENvbGxhdG9yKiBjb2xsYXRvciA9IEludGxDb2xsYXRv
cjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChjb2xsYXRvcik7CiAKICAgICAv
LyA0LiBSZXR1cm4gSW5pdGlhbGl6ZUNvbGxhdG9yKGNvbGxhdG9yLCBsb2NhbGVzLCBvcHRpb25z
KS4KICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgY29sbGF0b3ItPmluaXRpYWxpemVDb2xsYXRv
cigqY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDEpKTsKKyAgICBjb2xsYXRvci0+aW5pdGlhbGl6ZUNvbGxhdG9yKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjb2xsYXRvcik7CiB9CiAKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSW50bENvbGxhdG9yKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplYwogICAgIEFTU0VSVChjb2xsYXRvcik7CiAKICAgICAvLyA0LiBS
ZXR1cm4gSW5pdGlhbGl6ZUNvbGxhdG9yKGNvbGxhdG9yLCBsb2NhbGVzLCBvcHRpb25zKS4KLSAg
ICBjb2xsYXRvci0+aW5pdGlhbGl6ZUNvbGxhdG9yKCpjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOworICAgIGNvbGxhdG9yLT5pbml0aWFs
aXplQ29sbGF0b3IoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbGxhdG9yKTsK
IH0KIApAQCAtMTMzLDEzICsxMzMsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJ
bnRsQ29sbGF0b3JDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoSlNHbG8KICAgICAv
LyAxMC4yLjIgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRp
b25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJl
IENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCi0gICAgVmVjdG9yPFN0cmluZz4gcmVx
dWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKmNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5hcmd1bWVudCgwKSk7CisgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9
IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8g
My4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2FsZXNd
XSwgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcygqY2FsbEZyYW1lLCBnbG9iYWxP
YmplY3QtPmludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKSwgcmVxdWVzdGVkTG9jYWxlcywg
Y2FsbEZyYW1lLT5hcmd1bWVudCgxKSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCksIHJlcXVlc3RlZExvY2FsZXMsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMSkpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlw
ZS5jcHAKaW5kZXggNWE1NGNhNTg0Njg1ZTJiNjBjMTQ0MmNjMzZjNzI5YmRmNTMwODQ4ZS4uMDU5
NzU0MjMzMGI5MDQxNDdkMzNiMzhhY2JkMjM5ZmFhMWQ0NDEwZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCkBA
IC05MCwyMSArOTAsMjEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50
bENvbGxhdG9yRnVuY0NvbXBhcmUoSlNHbG9iYWxPYmplY3QqIGdsb2IKICAgICAvLyAzLiBJZiB4
IGlzIG5vdCBwcm92aWRlZCwgbGV0IHggYmUgdW5kZWZpbmVkLgogICAgIC8vIDQuIElmIHkgaXMg
bm90IHByb3ZpZGVkLCBsZXQgeSBiZSB1bmRlZmluZWQuCiAgICAgLy8gNS4gTGV0IFggYmUgVG9T
dHJpbmcoeCkuCi0gICAgSlNTdHJpbmcqIHggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGNhbGxGcmFtZSk7CisgICAgSlNTdHJpbmcqIHggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgLy8gNi4gUmV0dXJuSWZBYnJ1cHQoWCkuCiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAv
LyA3LiBMZXQgWSBiZSBUb1N0cmluZyh5KS4KLSAgICBKU1N0cmluZyogeSA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMSkudG9TdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBKU1N0cmluZyogeSA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMSkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAvLyA4LiBSZXR1
cm5JZkFicnVwdChZKS4KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgIC8vIDkuIFJldHVybiBDb21wYXJlU3RyaW5ncyhjb2xsYXRvciwgWCwg
WSkuCi0gICAgYXV0byB4Vmlld1dpdGhTdHJpbmcgPSB4LT52aWV3V2l0aFVuZGVybHlpbmdTdHJp
bmcoY2FsbEZyYW1lKTsKKyAgICBhdXRvIHhWaWV3V2l0aFN0cmluZyA9IHgtPnZpZXdXaXRoVW5k
ZXJseWluZ1N0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8geVZpZXdXaXRoU3RyaW5nID0geS0+dmll
d1dpdGhVbmRlcmx5aW5nU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgYXV0byB5Vmlld1dpdGhTdHJp
bmcgPSB5LT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShjb2xsYXRvci0+Y29tcGFyZVN0cmluZ3Mo
KmNhbGxGcmFtZSwgeFZpZXdXaXRoU3RyaW5nLnZpZXcsIHlWaWV3V2l0aFN0cmluZy52aWV3KSkp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGNvbGxhdG9y
LT5jb21wYXJlU3RyaW5ncyhnbG9iYWxPYmplY3QsIHhWaWV3V2l0aFN0cmluZy52aWV3LCB5Vmll
d1dpdGhTdHJpbmcudmlldykpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJ
bnRsQ29sbGF0b3JQcm90b3R5cGVHZXR0ZXJDb21wYXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTE2LDcgKzExNiw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yUHJvdG90eXBlR2V0dGVyQ29tcGFyZShK
U0dsb2JhbE9iamVjdCoKICAgICAvLyAxLiBMZXQgY29sbGF0b3IgYmUgdGhpcyBDb2xsYXRvciBv
YmplY3QuCiAgICAgSW50bENvbGxhdG9yKiBjb2xsYXRvciA9IGpzRHluYW1pY0Nhc3Q8SW50bENv
bGxhdG9yKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghY29sbGF0b3Ip
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSwgIkludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUgY2FsbGVkIG9uIHZhbHVl
IHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgQ29sbGF0b3IiX3MpKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29tcGFyZSBjYWxsZWQgb24gdmFsdWUg
dGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBDb2xsYXRvciJfcykpOwogCiAg
ICAgSlNCb3VuZEZ1bmN0aW9uKiBib3VuZENvbXBhcmUgPSBjb2xsYXRvci0+Ym91bmRDb21wYXJl
KCk7CiAgICAgLy8gMi4gSWYgY29sbGF0b3IuW1tib3VuZENvbXBhcmVdXSBpcyB1bmRlZmluZWQs
CkBAIC0xMjcsNyArMTI3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29s
bGF0b3JQcm90b3R5cGVHZXR0ZXJDb21wYXJlKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBKU0Z1
bmN0aW9uKiB0YXJnZXRPYmplY3QgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgMiwgImNvbXBhcmUiX3MsIEludGxDb2xsYXRvckZ1bmNDb21wYXJlLCBOb0ludHJpbnNpYyk7
CiAKICAgICAgICAgLy8gYy4gTGV0IGJjIGJlIEJvdW5kRnVuY3Rpb25DcmVhdGUoRiwgwqt0aGlz
IHZhbHVlwrspLgotICAgICAgICBib3VuZENvbXBhcmUgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0
ZSh2bSwgY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgY29sbGF0b3IsIG51
bGxwdHIsIDIsICJjb21wYXJlIl9zKTsKKyAgICAgICAgYm91bmRDb21wYXJlID0gSlNCb3VuZEZ1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBjb2xsYXRvciwg
bnVsbHB0ciwgMiwgImNvbXBhcmUiX3MpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgLy8gZC4gU2V0IGNvbGxhdG9yLltbYm91
bmRDb21wYXJlXV0gdG8gYmMuCiAgICAgICAgIGNvbGxhdG9yLT5zZXRCb3VuZENvbXBhcmUodm0s
IGJvdW5kQ29tcGFyZSk7CkBAIC0xNDQsOSArMTQ0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsQ29sbGF0b3JQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEpTR2xvYmFs
T2IKICAgICAvLyAxMC4zLjUgSW50bC5Db2xsYXRvci5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25z
KCkgKEVDTUEtNDAyIDIuMCkKICAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0ganNEeW5hbWlj
Q2FzdDxJbnRsQ29sbGF0b3IqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYg
KCFjb2xsYXRvcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJv
cihjYWxsRnJhbWUsIHNjb3BlLCAiSW50bC5Db2xsYXRvci5wcm90b3R5cGUucmVzb2x2ZWRPcHRp
b25zIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBh
IENvbGxhdG9yIl9zKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkludGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29s
dmVkT3B0aW9ucyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6
ZWQgYXMgYSBDb2xsYXRvciJfcykpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUoY29sbGF0b3ItPnJlc29sdmVkT3B0aW9ucygqY2FsbEZyYW1lKSkpOwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGNvbGxhdG9yLT5y
ZXNvbHZlZE9wdGlvbnMoZ2xvYmFsT2JqZWN0KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZv
cm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXQuY3BwCmluZGV4IDQzNzhiNDAzY2M5ZjAwZjVkODI0MTAyY2JiNGNhOWNmZDBhNmM2NDMuLmQy
ZDdiMTM5ZWM3OWE1YmM2ODc3NzA2NmZjZGEwOTA2MGI2MDcxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcApAQCAtMjM4
LDEwICsyMzgsMTAgQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGxvY2FsZURhdGEoY29uc3QgU3Ry
aW5nJiBsb2NhbGUsIHNpemVfdCBrZXlJbmRleCkKICAgICByZXR1cm4ga2V5TG9jYWxlRGF0YTsK
IH0KIAotc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdGUoRXhlY1N0YXRl
JiBleGVjLCBKU1ZhbHVlIG9yaWdpbmFsT3B0aW9ucykKK3N0YXRpYyBKU09iamVjdCogdG9EYXRl
VGltZU9wdGlvbnNBbnlEYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
b3JpZ2luYWxPcHRpb25zKQogewogICAgIC8vIDEyLjEuMSBUb0RhdGVUaW1lT3B0aW9ucyBhYnN0
cmFjdCBvcGVyYXRpb24gKEVDTUEtNDAyIDIuMCkKLSAgICBWTSYgdm0gPSBleGVjLnZtKCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDEuIElmIG9wdGlvbnMgaXMgdW5kZWZpbmVkLCB0
aGVuIGxldCBvcHRpb25zIGJlIG51bGwsIGVsc2UgbGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0
aW9ucykuCkBAIC0yNDksMTEgKzI0OSwxMSBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVP
cHRpb25zQW55RGF0ZShFeGVjU3RhdGUmIGV4ZWMsIEpTVmFsdWUgb3JpZ2luYWxPcHRpbwogICAg
IC8vIDMuIExldCBvcHRpb25zIGJlIE9iamVjdENyZWF0ZShvcHRpb25zKS4KICAgICBKU09iamVj
dCogb3B0aW9uczsKICAgICBpZiAob3JpZ2luYWxPcHRpb25zLmlzVW5kZWZpbmVkKCkpCi0gICAg
ICAgIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYywgZXhlYy5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG9w
dGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCh2bSwgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90
eXBlT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIGVsc2UgewotICAgICAgICBKU09iamVjdCogb3Jp
Z2luYWxUb09iamVjdCA9IG9yaWdpbmFsT3B0aW9ucy50b09iamVjdCgmZXhlYyk7CisgICAgICAg
IEpTT2JqZWN0KiBvcmlnaW5hbFRvT2JqZWN0ID0gb3JpZ2luYWxPcHRpb25zLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OwotICAgICAgICBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMsIG9yaWdpbmFs
VG9PYmplY3QpOworICAgICAgICBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0LCBvcmlnaW5hbFRvT2JqZWN0KTsKICAgICB9CiAKICAgICAvLyA0LiBMZXQgbmVlZERl
ZmF1bHRzIGJlIHRydWUuCkBAIC0yNjcsMjIgKzI2NywyMiBAQCBzdGF0aWMgSlNPYmplY3QqIHRv
RGF0ZVRpbWVPcHRpb25zQW55RGF0ZShFeGVjU3RhdGUmIGV4ZWMsIEpTVmFsdWUgb3JpZ2luYWxP
cHRpbwogICAgIC8vIGlpLiBMZXQgdmFsdWUgYmUgR2V0KG9wdGlvbnMsIHByb3ApLgogICAgIC8v
IGlpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgogICAgIC8vIGl2LiBJZiB2YWx1ZSBpcyBub3Qg
dW5kZWZpbmVkLCB0aGVuIGxldCBuZWVkRGVmYXVsdHMgYmUgZmFsc2UuCi0gICAgSlNWYWx1ZSB3
ZWVrZGF5ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT53ZWVrZGF5KTsK
KyAgICBKU1ZhbHVlIHdlZWtkYXkgPSBvcHRpb25zLT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9w
ZXJ0eU5hbWVzLT53ZWVrZGF5KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKICAgICBpZiAoIXdlZWtkYXkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1
bHRzID0gZmFsc2U7CiAKLSAgICBKU1ZhbHVlIHllYXIgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPnllYXIpOworICAgIEpTVmFsdWUgeWVhciA9IG9wdGlvbnMtPmdldChn
bG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnllYXIpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlmICgheWVhci5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAotICAgIEpTVmFsdWUgbW9udGggPSBvcHRpb25z
LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRoKTsKKyAgICBKU1ZhbHVlIG1vbnRo
ID0gb3B0aW9ucy0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+bW9udGgpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlmICghbW9udGgu
aXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKLSAgICBKU1Zh
bHVlIGRheSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+ZGF5KTsKKyAg
ICBKU1ZhbHVlIGRheSA9IG9wdGlvbnMtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFt
ZXMtPmRheSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
aWYgKCFkYXkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CkBA
IC0yOTUsMTcgKzI5NSwxNyBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55
RGF0ZShFeGVjU3RhdGUmIGV4ZWMsIEpTVmFsdWUgb3JpZ2luYWxPcHRpbwogICAgIC8vIGlpLiBM
ZXQgdmFsdWUgYmUgR2V0KG9wdGlvbnMsIHByb3ApLgogICAgIC8vIGlpaS4gUmV0dXJuSWZBYnJ1
cHQodmFsdWUpLgogICAgIC8vIGl2LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuIGxl
dCBuZWVkRGVmYXVsdHMgYmUgZmFsc2UuCi0gICAgSlNWYWx1ZSBob3VyID0gb3B0aW9ucy0+Z2V0
KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyKTsKKyAgICBKU1ZhbHVlIGhvdXIgPSBvcHRp
b25zLT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAoIWhvdXIuaXNVbmRlZmlu
ZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKLSAgICBKU1ZhbHVlIG1pbnV0
ZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bWludXRlKTsKKyAgICBK
U1ZhbHVlIG1pbnV0ZSA9IG9wdGlvbnMtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFt
ZXMtPm1pbnV0ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAg
ICAgaWYgKCFtaW51dGUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFs
c2U7CiAKLSAgICBKU1ZhbHVlIHNlY29uZCA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+c2Vjb25kKTsKKyAgICBKU1ZhbHVlIHNlY29uZCA9IG9wdGlvbnMtPmdldChnbG9i
YWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnNlY29uZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgaWYgKCFzZWNvbmQuaXNVbmRlZmluZWQoKSkKICAg
ICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CkBAIC00NDEsMzEgKzQ0MSwzMSBAQCB2b2lkIElu
dGxEYXRlVGltZUZvcm1hdDo6c2V0Rm9ybWF0c0Zyb21QYXR0ZXJuKGNvbnN0IFN0cmluZ1ZpZXcm
IHBhdHRlcm4pCiAgICAgfQogfQogCi12b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVl
IG9yaWdpbmFsT3B0aW9ucykKK3ZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0
ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhbGVz
LCBKU1ZhbHVlIG9yaWdpbmFsT3B0aW9ucykKIHsKLSAgICBWTSYgdm0gPSBleGVjLnZtKCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDEyLjEuMSBJbml0aWFsaXplRGF0ZVRpbWVGb3Jt
YXQgKGRhdGVUaW1lRm9ybWF0LCBsb2NhbGVzLCBvcHRpb25zKSAoRUNNQS00MDIpCiAgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtaW5pdGlhbGl6ZWRhdGV0aW1lZm9y
bWF0CiAKLSAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXpl
TG9jYWxlTGlzdChleGVjLCBsb2NhbGVzKTsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRM
b2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBKU09iamVjdCog
b3B0aW9ucyA9IEludGxEVEZJbnRlcm5hbDo6dG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKGV4ZWMs
IG9yaWdpbmFsT3B0aW9ucyk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBJbnRsRFRGSW50ZXJu
YWw6OnRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZShnbG9iYWxPYmplY3QsIG9yaWdpbmFsT3B0aW9u
cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IG9wdDsKIAotICAgIFN0cmluZyBsb2NhbGVNYXRjaGVyID0gaW50
bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRj
aGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0
aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CisgICAgU3RyaW5n
IGxvY2FsZU1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywg
dm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9
LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRc
IiIsICJiZXN0IGZpdCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgb3B0LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLnN0cmluZygpLCBs
b2NhbGVNYXRjaGVyKTsKIAogICAgIGJvb2wgaXNIb3VyMTJVbmRlZmluZWQ7Ci0gICAgYm9vbCBo
b3VyMTIgPSBpbnRsQm9vbGVhbk9wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5ob3VyMTIsIGlzSG91cjEyVW5kZWZpbmVkKTsKKyAgICBib29sIGhvdXIxMiA9IGludGxCb29s
ZWFuT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91cjEy
LCBpc0hvdXIxMlVuZGVmaW5lZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKIAotICAgIFN0cmluZyBob3VyQ3ljbGUgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9w
dGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmhvdXJDeWNsZSwgeyAiaDExIiwgImgxMiIsICJoMjMi
LCAiaDI0IiB9LCAiaG91ckN5Y2xlIG11c3QgYmUgXCJoMTFcIiwgXCJoMTJcIiwgXCJoMjNcIiwg
b3IgXCJoMjRcIiIsIG51bGxwdHIpOworICAgIFN0cmluZyBob3VyQ3ljbGUgPSBpbnRsU3RyaW5n
T3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91ckN5Y2xl
LCB7ICJoMTEiLCAiaDEyIiwgImgyMyIsICJoMjQiIH0sICJob3VyQ3ljbGUgbXVzdCBiZSBcImgx
MVwiLCBcImgxMlwiLCBcImgyM1wiLCBvciBcImgyNFwiIiwgbnVsbHB0cik7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBpZiAoaXNIb3VyMTJVbmRlZmluZWQp
IHsKICAgICAgICAgLy8gU2V0IGhvdXIxMiBoZXJlIHRvIHNpbXBsaWZ5IGhvdXIgbG9naWMgbGF0
ZXIuCkBAIC00NzUsMTIgKzQ3NSwxMiBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlh
bGl6ZURhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSBsb2NhbAogICAgIH0g
ZWxzZQogICAgICAgICBvcHQuYWRkKCJoYyJfcywgU3RyaW5nKCkpOwogCi0gICAgY29uc3QgSGFz
aFNldDxTdHJpbmc+IGF2YWlsYWJsZUxvY2FsZXMgPSBleGVjLmpzQ2FsbGVlKCktPmdsb2JhbE9i
amVjdCh2bSktPmludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKLSAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZXhlYywgYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0LCBJbnRsRFRGSW50ZXJuYWw6OnJlbGV2
YW50RXh0ZW5zaW9uS2V5cywgV1RGX0FSUkFZX0xFTkdUSChJbnRsRFRGSW50ZXJuYWw6OnJlbGV2
YW50RXh0ZW5zaW9uS2V5cyksIEludGxEVEZJbnRlcm5hbDo6bG9jYWxlRGF0YSk7CisgICAgY29u
c3QgSGFzaFNldDxTdHJpbmc+IGF2YWlsYWJsZUxvY2FsZXMgPSBnbG9iYWxPYmplY3QtPmludGxE
YXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2Nh
bGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHQsIEludGxEVEZJbnRlcm5hbDo6cmVsZXZhbnRFeHRl
bnNpb25LZXlzLCBXVEZfQVJSQVlfTEVOR1RIKEludGxEVEZJbnRlcm5hbDo6cmVsZXZhbnRFeHRl
bnNpb25LZXlzKSwgSW50bERURkludGVybmFsOjpsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxl
ID0gcmVzb2x2ZWQuZ2V0KHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZS5zdHJpbmcoKSk7CiAgICAg
aWYgKG1fbG9jYWxlLmlzRW1wdHkoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmZXhlYywg
c2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBEYXRlVGltZUZvcm1hdCBkdWUgdG8gaW52YWxp
ZCBsb2NhbGUiX3MpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgRGF0ZVRpbWVGb3JtYXQgZHVlIHRvIGludmFsaWQgbG9j
YWxlIl9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDk2LDE1ICs0OTYsMTUgQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdChFeGVjU3Rh
dGUmIGV4ZWMsIEpTVmFsdWUgbG9jYWwKICAgICBtX251bWJlcmluZ1N5c3RlbSA9IHJlc29sdmVk
LmdldCgibnUiX3MpOwogICAgIFN0cmluZyBkYXRhTG9jYWxlID0gcmVzb2x2ZWQuZ2V0KCJkYXRh
TG9jYWxlIl9zKTsKIAotICAgIEpTVmFsdWUgdHpWYWx1ZSA9IG9wdGlvbnMtPmdldCgmZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+dGltZVpvbmUpOworICAgIEpTVmFsdWUgdHpWYWx1ZSA9IG9wdGlv
bnMtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIFN0cmluZyB0ejsKICAgICBp
ZiAoIXR6VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBTdHJpbmcgb3JpZ2luYWxUeiA9
IHR6VmFsdWUudG9XVEZTdHJpbmcoJmV4ZWMpOworICAgICAgICBTdHJpbmcgb3JpZ2luYWxUeiA9
IHR6VmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgdHogPSBjYW5vbmljYWxpemVUaW1lWm9u
ZU5hbWUob3JpZ2luYWxUeik7CiAgICAgICAgIGlmICh0ei5pc051bGwoKSkgewotICAgICAgICAg
ICAgdGhyb3dSYW5nZUVycm9yKCZleGVjLCBzY29wZSwgImludmFsaWQgdGltZSB6b25lOiAiICsg
b3JpZ2luYWxUeik7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgImludmFsaWQgdGltZSB6b25lOiAiICsgb3JpZ2luYWxUeik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTUxNyw3ICs1MTcsNyBAQCB2b2lkIElu
dGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSYgZXhl
YywgSlNWYWx1ZSBsb2NhbAogICAgIGF1dG8gdHdvRGlnaXROdW1lcmljTmFycm93U2hvcnRMb25n
ID0geyAiMi1kaWdpdCIsICJudW1lcmljIiwgIm5hcnJvdyIsICJzaG9ydCIsICJsb25nIiB9Owog
ICAgIGF1dG8gc2hvcnRMb25nID0geyAic2hvcnQiLCAibG9uZyIgfTsKIAotICAgIFN0cmluZyB3
ZWVrZGF5ID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT53ZWVrZGF5LCBuYXJyb3dTaG9ydExvbmcsICJ3ZWVrZGF5IG11c3QgYmUgXCJuYXJyb3dcIiwg
XCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51bGxwdHIpOworICAgIFN0cmluZyB3ZWVrZGF5ID0g
aW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
PndlZWtkYXksIG5hcnJvd1Nob3J0TG9uZywgIndlZWtkYXkgbXVzdCBiZSBcIm5hcnJvd1wiLCBc
InNob3J0XCIsIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICBpZiAoIXdlZWtkYXkuaXNOdWxsKCkpIHsKICAgICAgICAg
aWYgKHdlZWtkYXkgPT0gIm5hcnJvdyIpCkBAIC01MjgsNyArNTI4LDcgQEAgdm9pZCBJbnRsRGF0
ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdChFeGVjU3RhdGUmIGV4ZWMsIEpT
VmFsdWUgbG9jYWwKICAgICAgICAgICAgIHNrZWxldG9uQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJF
RUVFIik7CiAgICAgfQogCi0gICAgU3RyaW5nIGVyYSA9IGludGxTdHJpbmdPcHRpb24oZXhlYywg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+ZXJhLCBuYXJyb3dTaG9ydExvbmcsICJlcmEgbXVz
dCBiZSBcIm5hcnJvd1wiLCBcInNob3J0XCIsIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7CisgICAg
U3RyaW5nIGVyYSA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5lcmEsIG5hcnJvd1Nob3J0TG9uZywgImVyYSBtdXN0IGJlIFwibmFycm93
XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIiLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmICghZXJhLmlzTnVsbCgpKSB7CiAgICAgICAg
IGlmIChlcmEgPT0gIm5hcnJvdyIpCkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBJbnRsRGF0ZVRp
bWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdChFeGVjU3RhdGUmIGV4ZWMsIEpTVmFs
dWUgbG9jYWwKICAgICAgICAgICAgIHNrZWxldG9uQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJHR0dH
Iik7CiAgICAgfQogCi0gICAgU3RyaW5nIHllYXIgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9w
dGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIHR3b0RpZ2l0TnVtZXJpYywgInllYXIgbXVz
dCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOworICAgIFN0cmluZyB5
ZWFyID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5
TmFtZXMtPnllYXIsIHR3b0RpZ2l0TnVtZXJpYywgInllYXIgbXVzdCBiZSBcIjItZGlnaXRcIiBv
ciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAgICAgaWYgKCF5ZWFyLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh5ZWFyID09
ICIyLWRpZ2l0IikKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSBsb2NhbAog
ICAgICAgICAgICAgc2tlbGV0b25CdWlsZGVyLmFwcGVuZCgneScpOwogICAgIH0KIAotICAgIFN0
cmluZyBtb250aCA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlO
YW1lcy0+bW9udGgsIHR3b0RpZ2l0TnVtZXJpY05hcnJvd1Nob3J0TG9uZywgIm1vbnRoIG11c3Qg
YmUgXCIyLWRpZ2l0XCIsIFwibnVtZXJpY1wiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIG9yIFwi
bG9uZ1wiIiwgbnVsbHB0cik7CisgICAgU3RyaW5nIG1vbnRoID0gaW50bFN0cmluZ09wdGlvbihn
bG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRoLCB0d29EaWdpdE51
bWVyaWNOYXJyb3dTaG9ydExvbmcsICJtb250aCBtdXN0IGJlIFwiMi1kaWdpdFwiLCBcIm51bWVy
aWNcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51bGxwdHIpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKCFtb250aC5pc051
bGwoKSkgewogICAgICAgICBpZiAobW9udGggPT0gIjItZGlnaXQiKQpAQCAtNTYzLDcgKzU2Myw3
IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoRXhl
Y1N0YXRlJiBleGVjLCBKU1ZhbHVlIGxvY2FsCiAgICAgICAgICAgICBza2VsZXRvbkJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiTU1NTSIpOwogICAgIH0KIAotICAgIFN0cmluZyBkYXkgPSBpbnRsU3Ry
aW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmRheSwgdHdvRGlnaXRO
dW1lcmljLCAiZGF5IG11c3QgYmUgXCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRy
KTsKKyAgICBTdHJpbmcgZGF5ID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlv
bnMsIHZtLnByb3BlcnR5TmFtZXMtPmRheSwgdHdvRGlnaXROdW1lcmljLCAiZGF5IG11c3QgYmUg
XCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmICghZGF5LmlzTnVsbCgpKSB7CiAgICAgICAg
IGlmIChkYXkgPT0gIjItZGlnaXQiKQpAQCAtNTcyLDcgKzU3Miw3IEBAIHZvaWQgSW50bERhdGVU
aW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlJiBleGVjLCBKU1Zh
bHVlIGxvY2FsCiAgICAgICAgICAgICBza2VsZXRvbkJ1aWxkZXIuYXBwZW5kKCdkJyk7CiAgICAg
fQogCi0gICAgU3RyaW5nIGhvdXIgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZt
LnByb3BlcnR5TmFtZXMtPmhvdXIsIHR3b0RpZ2l0TnVtZXJpYywgImhvdXIgbXVzdCBiZSBcIjIt
ZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOworICAgIFN0cmluZyBob3VyID0gaW50
bFN0cmluZ09wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmhv
dXIsIHR3b0RpZ2l0TnVtZXJpYywgImhvdXIgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVy
aWNcIiIsIG51bGxwdHIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgaWYgKGhvdXIgPT0gIjItZGlnaXQiKSB7CiAgICAgICAgIGlmIChpc0hvdXIxMlVuZGVm
aW5lZCAmJiBtX2hvdXJDeWNsZS5pc051bGwoKSkKQEAgLTU5MSw3ICs1OTEsNyBAQCB2b2lkIElu
dGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSYgZXhl
YywgSlNWYWx1ZSBsb2NhbAogICAgIH0gZWxzZQogICAgICAgICBtX2hvdXJDeWNsZSA9IFN0cmlu
ZygpOwogCi0gICAgU3RyaW5nIG1pbnV0ZSA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9u
cywgdm0ucHJvcGVydHlOYW1lcy0+bWludXRlLCB0d29EaWdpdE51bWVyaWMsICJtaW51dGUgbXVz
dCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOworICAgIFN0cmluZyBt
aW51dGUgPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVy
dHlOYW1lcy0+bWludXRlLCB0d29EaWdpdE51bWVyaWMsICJtaW51dGUgbXVzdCBiZSBcIjItZGln
aXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKCFtaW51dGUuaXNOdWxsKCkpIHsKICAgICAgICAgaWYg
KG1pbnV0ZSA9PSAiMi1kaWdpdCIpCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBJbnRsRGF0ZVRp
bWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdChFeGVjU3RhdGUmIGV4ZWMsIEpTVmFs
dWUgbG9jYWwKICAgICAgICAgICAgIHNrZWxldG9uQnVpbGRlci5hcHBlbmQoJ20nKTsKICAgICB9
CiAKLSAgICBTdHJpbmcgc2Vjb25kID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2
bS5wcm9wZXJ0eU5hbWVzLT5zZWNvbmQsIHR3b0RpZ2l0TnVtZXJpYywgInNlY29uZCBtdXN0IGJl
IFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0cik7CisgICAgU3RyaW5nIHNlY29u
ZCA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT5zZWNvbmQsIHR3b0RpZ2l0TnVtZXJpYywgInNlY29uZCBtdXN0IGJlIFwiMi1kaWdpdFwi
IG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0cik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICBpZiAoIXNlY29uZC5pc051bGwoKSkgewogICAgICAgICBpZiAoc2Vj
b25kID09ICIyLWRpZ2l0IikKQEAgLTYwOSw3ICs2MDksNyBAQCB2b2lkIEludGxEYXRlVGltZUZv
cm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSBs
b2NhbAogICAgICAgICAgICAgc2tlbGV0b25CdWlsZGVyLmFwcGVuZCgncycpOwogICAgIH0KIAot
ICAgIFN0cmluZyB0aW1lWm9uZU5hbWUgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lTmFtZSwgc2hvcnRMb25nLCAidGltZVpvbmVOYW1l
IG11c3QgYmUgXCJzaG9ydFwiIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7CisgICAgU3RyaW5nIHRp
bWVab25lTmFtZSA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT50aW1lWm9uZU5hbWUsIHNob3J0TG9uZywgInRpbWVab25lTmFtZSBtdXN0
IGJlIFwic2hvcnRcIiBvciBcImxvbmdcIiIsIG51bGxwdHIpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKCF0aW1lWm9uZU5hbWUuaXNOdWxsKCkpIHsK
ICAgICAgICAgaWYgKHRpbWVab25lTmFtZSA9PSAic2hvcnQiKQpAQCAtNjE4LDE0ICs2MTgsMTQg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdChFeGVj
U3RhdGUmIGV4ZWMsIEpTVmFsdWUgbG9jYWwKICAgICAgICAgICAgIHNrZWxldG9uQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJ6enp6Iik7CiAgICAgfQogCi0gICAgaW50bFN0cmluZ09wdGlvbihleGVj
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5mb3JtYXRNYXRjaGVyLCB7ICJiYXNpYyIsICJi
ZXN0IGZpdCIgfSwgImZvcm1hdE1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJiYXNpY1wiIG9yIFwi
YmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOworICAgIGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5mb3JtYXRNYXRjaGVyLCB7ICJiYXNpYyIs
ICJiZXN0IGZpdCIgfSwgImZvcm1hdE1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJiYXNpY1wiIG9y
IFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAKICAgICAvLyBBbHdheXMgdXNlIElDVSBkYXRlIGZvcm1hdCBnZW5lcmF0
b3IsIHJhdGhlciB0aGFuIG91ciBvd24gcGF0dGVybiBsaXN0IGFuZCBtYXRjaGVyLgogICAgIFVF
cnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgIFVEYXRlVGltZVBhdHRlcm5HZW5l
cmF0b3IqIGdlbmVyYXRvciA9IHVkYXRwZ19vcGVuKGRhdGFMb2NhbGUudXRmOCgpLmRhdGEoKSwg
JnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7Ci0gICAgICAgIHRocm93VHlw
ZUVycm9yKCZleGVjLCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIERhdGVUaW1lRm9ybWF0
Il9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxl
ZCB0byBpbml0aWFsaXplIERhdGVUaW1lRm9ybWF0Il9zKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtNjQxLDcgKzY0MSw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFs
aXplRGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIGxvY2FsCiAgICAgfQog
ICAgIHVkYXRwZ19jbG9zZShnZW5lcmF0b3IpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkg
ewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmZXhlYywgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlh
bGl6ZSBEYXRlVGltZUZvcm1hdCJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBEYXRlVGltZUZvcm1hdCJfcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY3Nyw3ICs2NzcsNyBAQCB2b2lkIEludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSYgZXhlYywgSlNW
YWx1ZSBsb2NhbAogICAgIFN0cmluZ1ZpZXcgdGltZVpvbmVWaWV3KG1fdGltZVpvbmUpOwogICAg
IG1fZGF0ZUZvcm1hdCA9IHN0ZDo6dW5pcXVlX3B0cjxVRGF0ZUZvcm1hdCwgVURhdGVGb3JtYXRE
ZWxldGVyPih1ZGF0X29wZW4oVURBVF9QQVRURVJOLCBVREFUX1BBVFRFUk4sIG1fbG9jYWxlLnV0
ZjgoKS5kYXRhKCksIHRpbWVab25lVmlldy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKSwgdGltZVpv
bmVWaWV3Lmxlbmd0aCgpLCBwYXR0ZXJuLnVwY29udmVydGVkQ2hhcmFjdGVycygpLCBwYXR0ZXJu
Lmxlbmd0aCgpLCAmc3RhdHVzKSk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7Ci0gICAg
ICAgIHRocm93VHlwZUVycm9yKCZleGVjLCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIERh
dGVUaW1lRm9ybWF0Il9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIERhdGVUaW1lRm9ybWF0Il9zKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtODM0LDIwICs4MzQsMjAgQEAgQVNDSUlMaXRlcmFsIEludGxE
YXRlVGltZUZvcm1hdDo6dGltZVpvbmVOYW1lU3RyaW5nKFRpbWVab25lTmFtZSB0aW1lWm9uZU5h
bWUpCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbDo6bnVsbCgpOwogfQogCi1KU09iamVjdCogSW50
bERhdGVUaW1lRm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlJiBleGVjKQorSlNPYmpl
Y3QqIEludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICAvLyAxMi4zLjUgSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUucmVzb2x2
ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJucyBh
IG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBhcmUgc2V0IGFzIGlm
IGNvbnN0cnVjdGVkIGJ5IGFuIG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRo
ZSBmb2xsb3dpbmcgcHJvcGVydGllcyB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW50
ZXJuYWwgc2xvdCBvZiB0aGlzIERhdGVUaW1lRm9ybWF0IG9iamVjdCAoc2VlIDEyLjQpOiBsb2Nh
bGUsIGNhbGVuZGFyLCBudW1iZXJpbmdTeXN0ZW0sIHRpbWVab25lLCBob3VyMTIsIHdlZWtkYXks
IGVyYSwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGFuZCB0aW1lWm9u
ZU5hbWUuIFByb3BlcnRpZXMgd2hvc2UgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBzbG90cyBhcmUg
bm90IHByZXNlbnQgYXJlIG5vdCBhc3NpZ25lZC4KICAgICAvLyBOb3RlOiBJbiB0aGlzIHZlcnNp
b24gb2YgdGhlIEVDTUFTY3JpcHQgMjAxNSBJbnRlcm5hdGlvbmFsaXphdGlvbiBBUEksIHRoZSB0
aW1lWm9uZSBwcm9wZXJ0eSB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHRpbWUgem9u
ZSBpZiBubyB0aW1lWm9uZSBwcm9wZXJ0eSB3YXMgcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMgb2Jq
ZWN0IHByb3ZpZGVkIHRvIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yLiBUaGUg
cHJldmlvdXMgdmVyc2lvbiBsZWZ0IHRoZSB0aW1lWm9uZSBwcm9wZXJ0eSB1bmRlZmluZWQgaW4g
dGhpcyBjYXNlLgogICAgIGlmICghbV9pbml0aWFsaXplZERhdGVUaW1lRm9ybWF0KSB7Ci0gICAg
ICAgIGluaXRpYWxpemVEYXRlVGltZUZvcm1hdChleGVjLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgaW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGdsb2JhbE9iamVjdCwg
anNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7CiAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhj
ZXB0aW9uKCk7CiAgICAgfQogCi0gICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdCgmZXhlYyk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChnbG9iYWxPYmplY3QpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bG9jYWxlLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIG1fbG9jYWxlKSk7CiAgICAg
b3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxlbmRhciwganNOb250
cml2aWFsU3RyaW5nKHZtLCBtX2NhbGVuZGFyKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5udW1iZXJpbmdTeXN0ZW0sIGpzTm9udHJpdmlhbFN0cmluZyh2
bSwgbV9udW1iZXJpbmdTeXN0ZW0pKTsKQEAgLTg4OCwyMCArODg4LDIwIEBAIEpTT2JqZWN0KiBJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OnJlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUmIGV4ZWMpCiAgICAg
cmV0dXJuIG9wdGlvbnM7CiB9CiAKLUpTVmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXQo
RXhlY1N0YXRlJiBleGVjLCBkb3VibGUgdmFsdWUpCitKU1ZhbHVlIEludGxEYXRlVGltZUZvcm1h
dDo6Zm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSB2YWx1ZSkKIHsK
LSAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDEy
LjMuNCBGb3JtYXREYXRlVGltZSBhYnN0cmFjdCBvcGVyYXRpb24gKEVDTUEtNDAyIDIuMCkKICAg
ICBpZiAoIW1faW5pdGlhbGl6ZWREYXRlVGltZUZvcm1hdCkgewotICAgICAgICBpbml0aWFsaXpl
RGF0ZVRpbWVGb3JtYXQoZXhlYywganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7CisgICAg
ICAgIGluaXRpYWxpemVEYXRlVGltZUZvcm1hdChnbG9iYWxPYmplY3QsIGpzVW5kZWZpbmVkKCks
IGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAg
IH0KIAogICAgIC8vIDEuIElmIHggaXMgbm90IGEgZmluaXRlIE51bWJlciwgdGhlbiB0aHJvdyBh
IFJhbmdlRXJyb3IgZXhjZXB0aW9uLgogICAgIGlmICghc3RkOjppc2Zpbml0ZSh2YWx1ZSkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1JhbmdlRXJyb3IoJmV4ZWMsIHNjb3BlLCAiZGF0ZSB2YWx1ZSBp
cyBub3QgZmluaXRlIGluIERhdGVUaW1lRm9ybWF0IGZvcm1hdCgpIl9zKTsKKyAgICAgICAgcmV0
dXJuIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZGF0ZSB2YWx1ZSBpcyBu
b3QgZmluaXRlIGluIERhdGVUaW1lRm9ybWF0IGZvcm1hdCgpIl9zKTsKIAogICAgIC8vIERlbGVn
YXRlIHJlbWFpbmluZyBzdGVwcyB0byBJQ1UuCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pF
Uk9fRVJST1I7CkBAIC05MTMsNyArOTEzLDcgQEAgSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6
OmZvcm1hdChFeGVjU3RhdGUmIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKICAgICAgICAgdWRhdF9mb3Jt
YXQobV9kYXRlRm9ybWF0LmdldCgpLCB2YWx1ZSwgcmVzdWx0LmRhdGEoKSwgcmVzdWx0TGVuZ3Ro
LCBudWxscHRyLCAmc3RhdHVzKTsKICAgICB9CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQot
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJmV4ZWMsIHNjb3BlLCAiZmFpbGVkIHRvIGZv
cm1hdCBkYXRlIHZhbHVlIl9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gZm9ybWF0IGRhdGUgdmFsdWUiX3MpOwogCiAgICAg
cmV0dXJuIGpzU3RyaW5nKHZtLCBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0TGVuZ3RoKSk7
CiB9CkBAIC05ODUsMjEgKzk4NSwyMSBAQCBBU0NJSUxpdGVyYWwgSW50bERhdGVUaW1lRm9ybWF0
OjpwYXJ0VHlwZVN0cmluZyhVRGF0ZUZvcm1hdEZpZWxkIGZpZWxkKQogfQogCiAKLUpTVmFsdWUg
SW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEV4ZWNTdGF0ZSYgZXhlYywgZG91Ymxl
IHZhbHVlKQorSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFRvUGFydHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgZG91YmxlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4
ZWMudm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMTIuMS44IEZvcm1hdERhdGVU
aW1lVG9QYXJ0cyAoRUNNQS00MDIgNC4wKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTQwMi8jc2VjLWZvcm1hdGRhdGV0aW1ldG9wYXJ0cwogCiAgICAgaWYgKCFzdGQ6OmlzZmlu
aXRlKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRocm93UmFuZ2VFcnJvcigmZXhlYywgc2NvcGUs
ICJkYXRlIHZhbHVlIGlzIG5vdCBmaW5pdGUgaW4gRGF0ZVRpbWVGb3JtYXQgZm9ybWF0VG9QYXJ0
cygpIl9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiZGF0ZSB2YWx1ZSBpcyBub3QgZmluaXRlIGluIERhdGVUaW1lRm9ybWF0IGZvcm1hdFRv
UGFydHMoKSJfcyk7CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAg
ICBhdXRvIGZpZWxkcyA9IHN0ZDo6dW5pcXVlX3B0cjxVRmllbGRQb3NpdGlvbkl0ZXJhdG9yLCBV
RmllbGRQb3NpdGlvbkl0ZXJhdG9yRGVsZXRlcj4odWZpZWxkcG9zaXRlcl9vcGVuKCZzdGF0dXMp
KTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcigmZXhlYywgc2NvcGUsICJmYWlsZWQgdG8gb3BlbiBmaWVsZCBwb3NpdGlvbiBpdGVyYXRv
ciJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiZmFpbGVkIHRvIG9wZW4gZmllbGQgcG9zaXRpb24gaXRlcmF0b3IiX3MpOwogCiAgICAgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOwogICAgIFZlY3RvcjxVQ2hhciwgMzI+IHJlc3VsdCgzMik7CkBA
IC0xMDEwLDEyICsxMDEwLDExIEBAIEpTVmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRU
b1BhcnRzKEV4ZWNTdGF0ZSYgZXhlYywgZG91YmxlIHZhbHVlKQogICAgICAgICB1ZGF0X2Zvcm1h
dEZvckZpZWxkcyhtX2RhdGVGb3JtYXQuZ2V0KCksIHZhbHVlLCByZXN1bHQuZGF0YSgpLCByZXN1
bHRMZW5ndGgsIGZpZWxkcy5nZXQoKSwgJnN0YXR1cyk7CiAgICAgfQogICAgIGlmIChVX0ZBSUxV
UkUoc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZleGVjLCBzY29wZSwg
ImZhaWxlZCB0byBmb3JtYXQgZGF0ZSB2YWx1ZSJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBkYXRlIHZhbHVl
Il9zKTsKIAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLmpzQ2FsbGVl
KCktPmdsb2JhbE9iamVjdCh2bSk7CiAgICAgSlNBcnJheSogcGFydHMgPSBKU0FycmF5Ojp0cnlD
cmVhdGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpLCAwKTsKICAgICBpZiAoIXBhcnRzKQot
ICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZleGVjLCBzY29wZSk7CisgICAg
ICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAK
ICAgICBhdXRvIHJlc3VsdFN0cmluZyA9IFN0cmluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHRMZW5n
dGgpOwogICAgIGF1dG8gdHlwZVByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ0eXBlIik7CkBAIC0xMDMxLDEwICsxMDMwLDEwIEBAIEpTVmFsdWUgSW50bERhdGVUaW1l
Rm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEV4ZWNTdGF0ZSYgZXhlYywgZG91YmxlIHZhbHVlKQogCiAg
ICAgICAgIGlmIChwcmV2aW91c0VuZEluZGV4IDwgYmVnaW5JbmRleCkgewogICAgICAgICAgICAg
YXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKHByZXZpb3Vz
RW5kSW5kZXgsIGJlZ2luSW5kZXggLSBwcmV2aW91c0VuZEluZGV4KSk7Ci0gICAgICAgICAgICBK
U09iamVjdCogcGFydCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjKTsKKyAgICAgICAgICAg
IEpTT2JqZWN0KiBwYXJ0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAg
ICAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdHlwZVByb3BlcnR5TmFtZSwgbGl0ZXJhbFN0
cmluZyk7CiAgICAgICAgICAgICBwYXJ0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnZhbHVlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBwYXJ0cy0+cHVzaCgmZXhlYywgcGFydCk7Cisg
ICAgICAgICAgICBwYXJ0cy0+cHVzaChnbG9iYWxPYmplY3QsIHBhcnQpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgfQogICAgICAgICBwcmV2
aW91c0VuZEluZGV4ID0gZW5kSW5kZXg7CkBAIC0xMDQyLDEwICsxMDQxLDEwIEBAIEpTVmFsdWUg
SW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEV4ZWNTdGF0ZSYgZXhlYywgZG91Ymxl
IHZhbHVlKQogICAgICAgICBpZiAoZmllbGRUeXBlID49IDApIHsKICAgICAgICAgICAgIGF1dG8g
dHlwZSA9IGpzU3RyaW5nKHZtLCBwYXJ0VHlwZVN0cmluZyhVRGF0ZUZvcm1hdEZpZWxkKGZpZWxk
VHlwZSkpKTsKICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3Ry
aW5nLnN1YnN0cmluZyhiZWdpbkluZGV4LCBlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKLSAgICAg
ICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOworICAg
ICAgICAgICAgSlNPYmplY3QqIHBhcnQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmpl
Y3QpOwogICAgICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZtLCB0eXBlUHJvcGVydHlOYW1lLCB0
eXBlKTsKICAgICAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dmFsdWUsIHZhbHVlKTsKLSAgICAgICAgICAgIHBhcnRzLT5wdXNoKCZleGVjLCBwYXJ0KTsKKyAg
ICAgICAgICAgIHBhcnRzLT5wdXNoKGdsb2JhbE9iamVjdCwgcGFydCk7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAppbmRl
eCBiZmIyNmZhYTRjNWVkNzY3Zjk1M2UyNzFlNDZhOTJlMGNlNmNhZjMzLi4wY2M5MTVkNGM3NmI2
NTFhNTJiNDNlMDdkZmMxNTgzMDEzOWIwMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuaApAQCAtNDcsMTIgKzQ3LDEyIEBAIGNs
YXNzIEludGxEYXRlVGltZUZvcm1hdCBmaW5hbCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVj
dCB7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICB2b2lkIGluaXRpYWxpemVEYXRlVGltZUZv
cm1hdChFeGVjU3RhdGUmLCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9ucyk7Ci0gICAg
SlNWYWx1ZSBmb3JtYXQoRXhlY1N0YXRlJiwgZG91YmxlIHZhbHVlKTsKKyAgICB2b2lkIGluaXRp
YWxpemVEYXRlVGltZUZvcm1hdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbG9jYWxlcywgSlNW
YWx1ZSBvcHRpb25zKTsKKyAgICBKU1ZhbHVlIGZvcm1hdChKU0dsb2JhbE9iamVjdCosIGRvdWJs
ZSB2YWx1ZSk7CiAjaWYgSlNDX0lDVV9IQVNfVUZJRUxEUE9TSVRFUgotICAgIEpTVmFsdWUgZm9y
bWF0VG9QYXJ0cyhFeGVjU3RhdGUmLCBkb3VibGUgdmFsdWUpOworICAgIEpTVmFsdWUgZm9ybWF0
VG9QYXJ0cyhKU0dsb2JhbE9iamVjdCosIGRvdWJsZSB2YWx1ZSk7CiAjZW5kaWYKLSAgICBKU09i
amVjdCogcmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSYpOworICAgIEpTT2JqZWN0KiByZXNvbHZl
ZE9wdGlvbnMoSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIEpTQm91bmRGdW5jdGlvbiogYm91bmRG
b3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kRm9ybWF0LmdldCgpOyB9CiAgICAgdm9pZCBz
ZXRCb3VuZEZvcm1hdChWTSYsIEpTQm91bmRGdW5jdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCmluZGV4IDdhNGIwNzcwZTQ4MTMyOTJlNjJhZTQ2ZmM5MWE0ZWVjNDdlOTkzMzAu
LjAwMDYzOGYwMjA2ZjQ0MTFjZjY2YjNhMWQzNzUxNGM2M2JmNDE1NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTkzLDE4ICs5MywxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3JtYXQoSlNHbG9iYWxPYmpl
Y3QqCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBi
ZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1Rh
cmdldC4KICAgICAvLyAyLiBMZXQgZGF0ZVRpbWVGb3JtYXQgYmUgT3JkaW5hcnlDcmVhdGVGcm9t
Q29uc3RydWN0b3IobmV3VGFyZ2V0LCAlRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUlKS4KICAgICAv
LyAzLiBSZXR1cm5JZkFicnVwdChkYXRlVGltZUZvcm1hdCkuCi0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxJbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPmRhdGVUaW1lRm9ybWF0U3RydWN0dXJl
KHZtKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSwg
Y2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+ZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUodm0p
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRhdGVUaW1lRm9ybWF0ID0gSW50bERhdGVUaW1lRm9ybWF0
OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgQVNTRVJUKGRhdGVUaW1lRm9ybWF0KTsKIAog
ICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZGF0ZVRpbWVGb3JtYXQs
IGxvY2FsZXMsIG9wdGlvbnMpLgogICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBkYXRlVGltZUZv
cm1hdC0+aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KCpjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOworICAgIGRhdGVUaW1lRm9ybWF0LT5p
bml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGRhdGVUaW1lRm9ybWF0KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbEludGxEYXRlVGltZUZvcm1hdChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEludGxEYXRl
VGltZUZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKICAgICAvLyAxMi4xLjIgSW50bC5EYXRlVGltZUZvcm1hdCAoW2xvY2FsZXMgWywg
b3B0aW9uc11dKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1bmRl
ZmluZWQsIGxldCBuZXdUYXJnZXQgYmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVsc2Ug
bGV0IG5ld1RhcmdldCBiZSBOZXdUYXJnZXQuCkBAIC0xMTQsMTQgKzExNCwxNCBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSW50bERhdGVUaW1lRm9ybWF0KEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbAogCiAgICAgLy8gRklYTUU6IFdvcmthcm91bmQgdG8gcHJvdmlkZSBj
b21wYXRpYmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwvYXBwbHkgcGF0dGVybnMuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzY3OQotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0SW50bEluc3RhbmNlV2l0aFdvcmthcm91bmRG
b3JMZWdhY3lJbnRsQ29uc3RydWN0b3I8SW50bERhdGVUaW1lRm9ybWF0PigqY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpLCBjYWxsZWUsIFsmXSAoVk0mIHZtKSB7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RJbnRsSW5zdGFuY2VXaXRoV29ya2Fyb3VuZEZvckxl
Z2FjeUludGxDb25zdHJ1Y3RvcjxJbnRsRGF0ZVRpbWVGb3JtYXQ+KGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSwgY2FsbGVlLCBbJl0gKFZNJiB2bSkgewogICAgICAgICAvLyAy
LiBMZXQgZGF0ZVRpbWVGb3JtYXQgYmUgT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3IobmV3
VGFyZ2V0LCAlRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUlKS4KICAgICAgICAgLy8gMy4gUmV0dXJu
SWZBYnJ1cHQoZGF0ZVRpbWVGb3JtYXQpLgogICAgICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRh
dGVUaW1lRm9ybWF0ID0gSW50bERhdGVUaW1lRm9ybWF0OjpjcmVhdGUodm0sIGNhbGxlZS0+ZGF0
ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUodm0pKTsKICAgICAgICAgQVNTRVJUKGRhdGVUaW1lRm9ybWF0
KTsKIAogICAgICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGRhdGVU
aW1lRm9ybWF0LCBsb2NhbGVzLCBvcHRpb25zKS4KLSAgICAgICAgZGF0ZVRpbWVGb3JtYXQtPmlu
aXRpYWxpemVEYXRlVGltZUZvcm1hdCgqY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKKyAgICAgICAgZGF0ZVRpbWVGb3JtYXQtPmluaXRp
YWxpemVEYXRlVGltZUZvcm1hdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCks
IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwogICAgICAgICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQ7
CiAgICAgfSkpOwogfQpAQCAtMTM2LDExICsxMzYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVz
T2YKICAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4gYXZhaWxhYmxlTG9jYWxlcyA9IGdsb2JhbE9i
amVjdC0+aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4g
TGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4K
LSAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxl
TGlzdCgqY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2Fs
ZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCi0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcygq
Y2FsbEZyYW1lLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDEpKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCBy
ZXF1ZXN0ZWRMb2NhbGVzLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKSkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCmluZGV4IDNhOGYwMWQwMjlhODVh
NGVkMGE2ZjE3YjA3ZmQyMzVlNGZhZTViNDcuLmQyOTAyN2JlYzNkMDViMTVkMzQ1MzZkMzgwMjk3
NzY3MTY2NDFlODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcApAQCAtMTA1LDEzICsxMDUs
MTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9y
bWF0RnVuY0Zvcm1hdERhdGVUaW1lKEpTR2xvYmEKICAgICBkb3VibGUgdmFsdWU7CiAKICAgICBp
ZiAoZGF0ZS5pc1VuZGVmaW5lZCgpKQotICAgICAgICB2YWx1ZSA9IGRhdGVOb3dJbXBsKCkudG9O
dW1iZXIoY2FsbEZyYW1lKTsKKyAgICAgICAgdmFsdWUgPSBkYXRlTm93SW1wbCgpLnRvTnVtYmVy
KGdsb2JhbE9iamVjdCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHZhbHVlID0gV1RGOjp0aW1lQ2xp
cChkYXRlLnRvTnVtYmVyKGNhbGxGcmFtZSkpOworICAgICAgICB2YWx1ZSA9IFdURjo6dGltZUNs
aXAoZGF0ZS50b051bWJlcihnbG9iYWxPYmplY3QpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoZm9ybWF0LT5mb3JtYXQoKmNhbGxGcmFtZSwg
dmFsdWUpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
Zm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0x
MjYsMTQgKzEyNiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGlt
ZUZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChKU0dsb2JhbE9iagogICAgIC8vIEZJWE1FOiBX
b3JrYXJvdW5kIHRvIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIEVDTUEtNDAyIDEuMCBjYWxs
L2FwcGx5IHBhdHRlcm5zLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTM2NzkKICAgICBpZiAoIWR0ZikgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKS5nZXQoY2FsbEZyYW1lLCB2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5pbnRsU3Vic3RpdHV0ZVZhbHVlUHJpdmF0ZU5hbWUoKSk7CisgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLmdldChnbG9iYWxPYmplY3Qs
IHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmludGxTdWJzdGl0dXRlVmFsdWVQcml2
YXRlTmFtZSgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgICAgIGR0ZiA9IGpzRHluYW1pY0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0
Kj4odm0sIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChkdGYpLgog
ICAgIGlmICghZHRmKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVy
cm9yKGNhbGxGcmFtZSwgc2NvcGUsICJJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3Jt
YXQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEg
RGF0ZVRpbWVGb3JtYXQiX3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiSW50bC5EYXRlVGltZUZvcm1hdC5wcm90
b3R5cGUuZm9ybWF0IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFs
aXplZCBhcyBhIERhdGVUaW1lRm9ybWF0Il9zKSk7CiAKICAgICBKU0JvdW5kRnVuY3Rpb24qIGJv
dW5kRm9ybWF0ID0gZHRmLT5ib3VuZEZvcm1hdCgpOwogICAgIC8vIDMuIElmIHRoZSBbW2JvdW5k
Rm9ybWF0XV0gaW50ZXJuYWwgc2xvdCBvZiB0aGlzIERhdGVUaW1lRm9ybWF0IG9iamVjdCBpcyB1
bmRlZmluZWQsCkBAIC0xNDMsNyArMTQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQoSlNHbG9iYWxPYmoKICAg
ICAgICAgLy8gYi4gVGhlIHZhbHVlIG9mIEbigJlzIGxlbmd0aCBwcm9wZXJ0eSBpcyAxLiAoTm90
ZTogRuKAmXMgbGVuZ3RoIHByb3BlcnR5IHdhcyAwIGluIEVDTUEtNDAyIDEuMCkKICAgICAgICAg
SlNGdW5jdGlvbiogdGFyZ2V0T2JqZWN0ID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIDEsICJmb3JtYXQiX3MsIEludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGlt
ZSwgTm9JbnRyaW5zaWMpOwogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91bmRGdW5jdGlvbkNy
ZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCi0gICAgICAgIGJvdW5kRm9ybWF0ID0gSlNCb3VuZEZ1
bmN0aW9uOjpjcmVhdGUodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRPYmplY3Qs
IGR0ZiwgbnVsbHB0ciwgMSwgImZvcm1hdCJfcyk7CisgICAgICAgIGJvdW5kRm9ybWF0ID0gSlNC
b3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBkdGYs
IG51bGxwdHIsIDEsICJmb3JtYXQiX3MpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgLy8gZC4gU2V0IGR0Zi5bW2JvdW5kRm9y
bWF0XV0gdG8gYmYuCiAgICAgICAgIGR0Zi0+c2V0Qm91bmRGb3JtYXQodm0sIGJvdW5kRm9ybWF0
KTsKQEAgLTE2MywxOSArMTYzLDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50
bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlRnVuY0Zvcm1hdFRvUGFydHMoSlNHbG9iCiAKICAgICBJ
bnRsRGF0ZVRpbWVGb3JtYXQqIGRhdGVUaW1lRm9ybWF0ID0ganNEeW5hbWljQ2FzdDxJbnRsRGF0
ZVRpbWVGb3JtYXQqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRl
VGltZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJv
cihjYWxsRnJhbWUsIHNjb3BlLCAiSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0
VG9QYXJ0cyBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQg
YXMgYSBEYXRlVGltZUZvcm1hdCJfcykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJJbnRsLkRhdGVUaW1lRm9ybWF0
LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIERhdGVUaW1lRm9ybWF0Il9zKSk7CiAKICAgICBKU1ZhbHVl
IGRhdGUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGRvdWJsZSB2YWx1ZTsKIAogICAg
IGlmIChkYXRlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHZhbHVlID0gZGF0ZU5vd0ltcGwoKS50
b051bWJlcihjYWxsRnJhbWUpOworICAgICAgICB2YWx1ZSA9IGRhdGVOb3dJbXBsKCkudG9OdW1i
ZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBlbHNlIHsKLSAgICAgICAgdmFsdWUgPSBXVEY6OnRpbWVD
bGlwKGRhdGUudG9OdW1iZXIoY2FsbEZyYW1lKSk7CisgICAgICAgIHZhbHVlID0gV1RGOjp0aW1l
Q2xpcChkYXRlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShkYXRlVGltZUZvcm1hdC0+Zm9ybWF0VG9Q
YXJ0cygqY2FsbEZyYW1lLCB2YWx1ZSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZShkYXRlVGltZUZvcm1hdC0+Zm9ybWF0VG9QYXJ0cyhnbG9iYWxPYmpl
Y3QsIHZhbHVlKSkpOwogfQogI2VuZGlmCiAKQEAgLTE5MCwxNSArMTkwLDE1IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29s
dmVkT3B0aW9ucyhKU0dsCiAgICAgLy8gRklYTUU6IFdvcmthcm91bmQgdG8gcHJvdmlkZSBjb21w
YXRpYmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwvYXBwbHkgcGF0dGVybnMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzY3OQogICAgIGlmICgh
ZGF0ZVRpbWVGb3JtYXQpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkuZ2V0KGNhbGxGcmFtZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
aW50bFN1YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5pbnRsU3Vic3RpdHV0ZVZhbHVlUHJpdmF0ZU5hbWUoKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
ICAgICBkYXRlVGltZUZvcm1hdCA9IGpzRHluYW1pY0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Kj4o
dm0sIHZhbHVlKTsKICAgICB9CiAKICAgICBpZiAoIWRhdGVUaW1lRm9ybWF0KQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJJ
bnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMgY2FsbGVkIG9uIHZh
bHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRGF0ZVRpbWVGb3JtYXQi
X3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRP
cHRpb25zIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBh
cyBhIERhdGVUaW1lRm9ybWF0Il9zKSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZShkYXRlVGltZUZvcm1hdC0+cmVzb2x2ZWRPcHRpb25zKCpjYWxsRnJh
bWUpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoZGF0
ZVRpbWVGb3JtYXQtPnJlc29sdmVkT3B0aW9ucyhnbG9iYWxPYmplY3QpKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0LmNwcAppbmRleCBmN2E4NWM0YTMxNTY3YWFhOGMxMTE2NjQ0ZDc0YTM4ZDg1
NTdlZjcxLi5kYjczOWFiZTI3OWYzYmMyZGRjNjM1N2IzZmYxYjBhODkzNDJiYjE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcApA
QCAtMTU5LDQzICsxNTksNDMgQEAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVDdXJyZW5jeURpZ2l0
cyhjb25zdCBTdHJpbmcmIGN1cnJlbmN5KQogICAgIHJldHVybiAyOwogfQogCi12b2lkIEludGxO
dW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGb3JtYXQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkKK3ZvaWQgSW50bE51bWJlckZvcm1h
dDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDExLjEuMiBJbml0aWFsaXpl
TnVtYmVyRm9ybWF0IChudW1iZXJGb3JtYXQsIGxvY2FsZXMsIG9wdGlvbnMpIChFQ01BLTQwMikK
ICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1pbml0aWFsaXplbnVt
YmVyZm9ybWF0CiAKLSAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2Nh
bGVMaXN0KHN0YXRlLCBsb2NhbGVzKTsKKyAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5v
bmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgbG9jYWxlcyk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIEpTT2JqZWN0KiBvcHRpb25zOwogICAg
IGlmIChvcHRpb25zVmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgb3B0aW9ucyA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSwgc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udWxs
UHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpOworICAgICAgICBvcHRpb25zID0gY29uc3RydWN0
RW1wdHlPYmplY3Qodm0sIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVy
ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNWYWx1ZS50b09iamVj
dCgmc3RhdGUpOworICAgICAgICBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2JqZWN0KGdsb2Jh
bE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgfQogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gb3B0OwogCi0gICAgU3RyaW5nIG1h
dGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVy
IG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7
CisgICAgU3RyaW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0
aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3Qg
Zml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVz
dCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CiAgICAgb3B0LmFkZCgibG9jYWxlTWF0Y2hlciJfcywgbWF0Y2hlcik7CiAKLSAgICBh
dXRvJiBhdmFpbGFibGVMb2NhbGVzID0gc3RhdGUuanNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KHZt
KS0+aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKLSAgICBhdXRvIHJlc3VsdCA9
IHJlc29sdmVMb2NhbGUoc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IG9wdCwgcmVsZXZhbnROdW1iZXJFeHRlbnNpb25LZXlzLCBXVEZfQVJSQVlfTEVOR1RIKHJlbGV2
YW50TnVtYmVyRXh0ZW5zaW9uS2V5cyksIEludGxORkludGVybmFsOjpsb2NhbGVEYXRhKTsKKyAg
ICBhdXRvJiBhdmFpbGFibGVMb2NhbGVzID0gZ2xvYmFsT2JqZWN0LT5pbnRsTnVtYmVyRm9ybWF0
QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGF1dG8gcmVzdWx0ID0gcmVzb2x2ZUxvY2FsZShnbG9i
YWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdCwgcmVsZXZh
bnROdW1iZXJFeHRlbnNpb25LZXlzLCBXVEZfQVJSQVlfTEVOR1RIKHJlbGV2YW50TnVtYmVyRXh0
ZW5zaW9uS2V5cyksIEludGxORkludGVybmFsOjpsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxl
ID0gcmVzdWx0LmdldCgibG9jYWxlIl9zKTsKICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlh
bGl6ZSBOdW1iZXJGb3JtYXQgZHVlIHRvIGludmFsaWQgbG9jYWxlIl9zKTsKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIE51
bWJlckZvcm1hdCBkdWUgdG8gaW52YWxpZCBsb2NhbGUiX3MpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgbV9udW1iZXJpbmdTeXN0ZW0gPSByZXN1bHQuZ2V0KCJudSJfcyk7CiAKLSAg
ICBTdHJpbmcgc3R5bGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3R5bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50
IiwgImN1cnJlbmN5IiB9LCAic3R5bGUgbXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVy
Y2VudFwiLCBvciBcImN1cnJlbmN5XCIiLCAiZGVjaW1hbCIpOworICAgIFN0cmluZyBzdHlsZVN0
cmluZyA9IGludGxTdHJpbmdPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAic3R5bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50IiwgImN1cnJl
bmN5IiB9LCAic3R5bGUgbXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2VudFwiLCBv
ciBcImN1cnJlbmN5XCIiLCAiZGVjaW1hbCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgaWYgKHN0eWxlU3RyaW5nID09ICJkZWNpbWFsIikKICAgICAgICAg
bV9zdHlsZSA9IFN0eWxlOjpEZWNpbWFsOwpAQCAtMjA2LDExICsyMDYsMTEgQEAgdm9pZCBJbnRs
TnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgbG9jYWxlcywKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
Ci0gICAgU3RyaW5nIGN1cnJlbmN5ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImN1cnJlbmN5IiksIHsgfSwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgU3RyaW5nIGN1cnJlbmN5ID0gaW50bFN0cmluZ09wdGlvbihnbG9iYWxPYmpl
Y3QsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjdXJyZW5jeSIpLCB7IH0s
IG51bGxwdHIsIG51bGxwdHIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7CiAgICAgaWYgKCFjdXJyZW5jeS5pc051bGwoKSkgewogICAgICAgICBpZiAoY3VycmVuY3ku
bGVuZ3RoKCkgIT0gMyB8fCAhY3VycmVuY3kuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJ
QWxwaGE+KCkpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZVJhbmdlRXJyb3IoJnN0YXRlLCAiY3VycmVuY3kgaXMgbm90IGEgd2VsbC1mb3JtZWQgY3Vy
cmVuY3kgY29kZSJfcykpOworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsICJjdXJyZW5jeSBpcyBub3Qg
YSB3ZWxsLWZvcm1lZCBjdXJyZW5jeSBjb2RlIl9zKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0
Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgbG9jYWxl
cywKICAgICB1bnNpZ25lZCBjdXJyZW5jeURpZ2l0cyA9IDA7CiAgICAgaWYgKG1fc3R5bGUgPT0g
U3R5bGU6OkN1cnJlbmN5KSB7CiAgICAgICAgIGlmIChjdXJyZW5jeS5pc051bGwoKSkgewotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgImN1cnJlbmN5IG11c3QgYmUg
YSBzdHJpbmciX3MpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgImN1cnJlbmN5IG11c3QgYmUgYSBzdHJpbmciX3MpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6
OmluaXRpYWxpemVOdW1iZXJGb3JtYXQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBsb2NhbGVz
LAogICAgICAgICBjdXJyZW5jeURpZ2l0cyA9IGNvbXB1dGVDdXJyZW5jeURpZ2l0cyhjdXJyZW5j
eSk7CiAgICAgfQogCi0gICAgU3RyaW5nIGN1cnJlbmN5RGlzcGxheVN0cmluZyA9IGludGxTdHJp
bmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjdXJy
ZW5jeURpc3BsYXkiKSwgeyAiY29kZSIsICJzeW1ib2wiLCAibmFtZSIgfSwgImN1cnJlbmN5RGlz
cGxheSBtdXN0IGJlIGVpdGhlciBcImNvZGVcIiwgXCJzeW1ib2xcIiwgb3IgXCJuYW1lXCIiLCAi
c3ltYm9sIik7CisgICAgU3RyaW5nIGN1cnJlbmN5RGlzcGxheVN0cmluZyA9IGludGxTdHJpbmdP
cHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
Y3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3ltYm9sIiwgIm5hbWUiIH0sICJjdXJyZW5j
eURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIsIFwic3ltYm9sXCIsIG9yIFwibmFtZVwi
IiwgInN5bWJvbCIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5KSB7CiAgICAgICAgIGlmIChjdXJyZW5j
eURpc3BsYXlTdHJpbmcgPT0gImNvZGUiKQpAQCAtMjQwLDEzICsyNDAsMTMgQEAgdm9pZCBJbnRs
TnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgbG9jYWxlcywKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
IAotICAgIHVuc2lnbmVkIG1pbmltdW1JbnRlZ2VyRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihz
dGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1JbnRlZ2Vy
RGlnaXRzIiksIDEsIDIxLCAxKTsKKyAgICB1bnNpZ25lZCBtaW5pbXVtSW50ZWdlckRpZ2l0cyA9
IGludGxOdW1iZXJPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9taW5pbXVtSW50ZWdlckRpZ2l0
cyA9IG1pbmltdW1JbnRlZ2VyRGlnaXRzOwogCiAgICAgdW5zaWduZWQgbWluaW11bUZyYWN0aW9u
RGlnaXRzRGVmYXVsdCA9IChtX3N0eWxlID09IFN0eWxlOjpDdXJyZW5jeSkgPyBjdXJyZW5jeURp
Z2l0cyA6IDA7CiAKLSAgICB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVt
YmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWlu
aW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0
KTsKKyAgICB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9u
KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmlt
dW1GcmFjdGlvbkRpZ2l0cyIpLCAwLCAyMCwgbWluaW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBtX21pbmltdW1G
cmFjdGlvbkRpZ2l0cyA9IG1pbmltdW1GcmFjdGlvbkRpZ2l0czsKIApAQCAtMjU4LDI3ICsyNTgs
MjcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgbG9jYWxlcywKICAgICBlbHNlCiAgICAgICAgIG1heGltdW1G
cmFjdGlvbkRpZ2l0c0RlZmF1bHQgPSBzdGQ6Om1heChtaW5pbXVtRnJhY3Rpb25EaWdpdHMsIDN1
KTsKIAotICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRp
b24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtRnJh
Y3Rpb25EaWdpdHMiKSwgbWluaW11bUZyYWN0aW9uRGlnaXRzLCAyMCwgbWF4aW11bUZyYWN0aW9u
RGlnaXRzRGVmYXVsdCk7CisgICAgdW5zaWduZWQgbWF4aW11bUZyYWN0aW9uRGlnaXRzID0gaW50
bE51bWJlck9wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiKSwgbWluaW11bUZyYWN0aW9uRGlnaXRzLCAy
MCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICBtX21heGltdW1GcmFjdGlvbkRpZ2l0cyA9IG1heGltdW1G
cmFjdGlvbkRpZ2l0czsKIAotICAgIEpTVmFsdWUgbWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFs
dWUgPSBvcHRpb25zLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWlu
aW11bVNpZ25pZmljYW50RGlnaXRzIikpOworICAgIEpTVmFsdWUgbWluaW11bVNpZ25pZmljYW50
RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBKU1ZhbHVlIG1heGltdW1TaWduaWZpY2Fu
dERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpKTsKKyAgICBKU1ZhbHVlIG1heGltdW1T
aWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KGdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgaWYgKCFtaW5pbXVtU2ln
bmlmaWNhbnREaWdpdHNWYWx1ZS5pc1VuZGVmaW5lZCgpIHx8ICFtYXhpbXVtU2lnbmlmaWNhbnRE
aWdpdHNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIG1pbmltdW1TaWdu
aWZpY2FudERpZ2l0cyA9IGludGxEZWZhdWx0TnVtYmVyT3B0aW9uKHN0YXRlLCBtaW5pbXVtU2ln
bmlmaWNhbnREaWdpdHNWYWx1ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1T
aWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwgMSk7CisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1T
aWduaWZpY2FudERpZ2l0cyA9IGludGxEZWZhdWx0TnVtYmVyT3B0aW9uKGdsb2JhbE9iamVjdCwg
bWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSwgMSwgMjEsIDEpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICB1bnNpZ25lZCBtYXhpbXVtU2ln
bmlmaWNhbnREaWdpdHMgPSBpbnRsRGVmYXVsdE51bWJlck9wdGlvbihzdGF0ZSwgbWF4aW11bVNp
Z25pZmljYW50RGlnaXRzVmFsdWUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVt
U2lnbmlmaWNhbnREaWdpdHMiKSwgbWluaW11bVNpZ25pZmljYW50RGlnaXRzLCAyMSwgMjEpOwor
ICAgICAgICB1bnNpZ25lZCBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsRGVmYXVsdE51
bWJlck9wdGlvbihnbG9iYWxPYmplY3QsIG1heGltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIG1p
bmltdW1TaWduaWZpY2FudERpZ2l0cywgMjEsIDIxKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgbV9taW5pbXVtU2lnbmlmaWNhbnREaWdpdHMg
PSBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHM7CiAgICAgICAgIG1fbWF4aW11bVNpZ25pZmljYW50
RGlnaXRzID0gbWF4aW11bVNpZ25pZmljYW50RGlnaXRzOwogICAgIH0KIAogICAgIGJvb2wgdXNl
c0ZhbGxiYWNrOwotICAgIGJvb2wgdXNlR3JvdXBpbmcgPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0
ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVzZUdyb3VwaW5nIiksIHVz
ZXNGYWxsYmFjayk7CisgICAgYm9vbCB1c2VHcm91cGluZyA9IGludGxCb29sZWFuT3B0aW9uKGds
b2JhbE9iamVjdCwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVzZUdyb3Vw
aW5nIiksIHVzZXNGYWxsYmFjayk7CiAgICAgaWYgKHVzZXNGYWxsYmFjaykKICAgICAgICAgdXNl
R3JvdXBpbmcgPSB0cnVlOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CkBAIC0zMTQsMTQgKzMxNCwxNCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVO
dW1iZXJGb3JtYXQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBsb2NhbGVzLAogICAgIFVFcnJv
ckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwogICAgIG1fbnVtYmVyRm9ybWF0ID0gc3RkOjp1
bmlxdWVfcHRyPFVOdW1iZXJGb3JtYXQsIFVOdW1iZXJGb3JtYXREZWxldGVyPih1bnVtX29wZW4o
c3R5bGUsIG51bGxwdHIsIDAsIG1fbG9jYWxlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIsICZzdGF0
dXMpKTsKICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIE51bWJlckZvcm1hdCJfcyk7
CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8g
aW5pdGlhbGl6ZSBOdW1iZXJGb3JtYXQiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5KSB7CiAgICAgICAgIHVudW1fc2V0VGV4
dEF0dHJpYnV0ZShtX251bWJlckZvcm1hdC5nZXQoKSwgVU5VTV9DVVJSRU5DWV9DT0RFLCBTdHJp
bmdWaWV3KG1fY3VycmVuY3kpLnVwY29udmVydGVkQ2hhcmFjdGVycygpLCBtX2N1cnJlbmN5Lmxl
bmd0aCgpLCAmc3RhdHVzKTsKICAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7Ci0gICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCAiZmFpbGVkIHRvIGluaXRpYWxp
emUgTnVtYmVyRm9ybWF0Il9zKTsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBOdW1iZXJGb3JtYXQiX3MpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMzQwLDE0ICszNDAsMTQgQEAg
dm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgbG9jYWxlcywKICAgICBtX2luaXRpYWxpemVkTnVtYmVyRm9ybWF0ID0g
dHJ1ZTsKIH0KIAotSlNWYWx1ZSBJbnRsTnVtYmVyRm9ybWF0Ojpmb3JtYXROdW1iZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgZG91YmxlIG51bWJlcikKK0pTVmFsdWUgSW50bE51bWJlckZvcm1hdDo6Zm9y
bWF0TnVtYmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSBudW1iZXIpCiB7
Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8g
MTEuMy40IEZvcm1hdE51bWJlciBhYnN0cmFjdCBvcGVyYXRpb24gKEVDTUEtNDAyIDIuMCkKICAg
ICBpZiAoIW1faW5pdGlhbGl6ZWROdW1iZXJGb3JtYXQpCi0gICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlLCAiSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmZvcm1h
dCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBO
dW1iZXJGb3JtYXQiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQgY2FsbGVkIG9u
IHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9ybWF0
Il9zKTsKIAogICAgIC8vIE1hcCBuZWdhdGl2ZSB6ZXJvIHRvIHBvc2l0aXZlIHplcm8uCiAgICAg
aWYgKCFudW1iZXIpCkBAIC0zNjIsNyArMzYyLDcgQEAgSlNWYWx1ZSBJbnRsTnVtYmVyRm9ybWF0
Ojpmb3JtYXROdW1iZXIoRXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIG51bWJlcikKICAgICAgICAg
dW51bV9mb3JtYXREb3VibGUobV9udW1iZXJGb3JtYXQuZ2V0KCksIG51bWJlciwgYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoLCBudWxscHRyLCAmc3RhdHVzKTsKICAgICB9CiAgICAgaWYgKFVfRkFJTFVS
RShzdGF0dXMpKQotICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlRXJyb3IoJnN0YXRlLCAiRmFpbGVkIHRvIGZvcm1hdCBhIG51bWJlci4iX3MpKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVy
cm9yKGdsb2JhbE9iamVjdCwgIkZhaWxlZCB0byBmb3JtYXQgYSBudW1iZXIuIl9zKSk7CiAKICAg
ICByZXR1cm4ganNTdHJpbmcodm0sIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKIH0K
QEAgLTM5NSw5ICszOTUsOSBAQCBBU0NJSUxpdGVyYWwgSW50bE51bWJlckZvcm1hdDo6Y3VycmVu
Y3lEaXNwbGF5U3RyaW5nKEN1cnJlbmN5RGlzcGxheSBjdXJyZW5jeURpcwogICAgIHJldHVybiBB
U0NJSUxpdGVyYWw6Om51bGwoKTsKIH0KIAotSlNPYmplY3QqIEludGxOdW1iZXJGb3JtYXQ6OnJl
c29sdmVkT3B0aW9ucyhFeGVjU3RhdGUmIHN0YXRlKQorSlNPYmplY3QqIEludGxOdW1iZXJGb3Jt
YXQ6OnJlc29sdmVkT3B0aW9ucyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDExLjMu
NSBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAy
IDIuMCkKQEAgLTQxMCwxMSArNDEwLDExIEBAIEpTT2JqZWN0KiBJbnRsTnVtYmVyRm9ybWF0Ojpy
ZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlJiBzdGF0ZSkKICAgICAvLyBzbG90cyBhcmUgbm90IHBy
ZXNlbnQgYXJlIG5vdCBhc3NpZ25lZC4KIAogICAgIGlmICghbV9pbml0aWFsaXplZE51bWJlckZv
cm1hdCkgewotICAgICAgICBpbml0aWFsaXplTnVtYmVyRm9ybWF0KHN0YXRlLCBqc1VuZGVmaW5l
ZCgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgaW5pdGlhbGl6ZU51bWJlckZvcm1hdChnbG9i
YWxPYmplY3QsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBzY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwogICAgIH0KIAotICAgIEpTT2JqZWN0KiBvcHRpb25zID0gY29u
c3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUsIGpzU3RyaW5nKHZtLCBtX2xvY2FsZSkpOwogICAg
IG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bWJl
cmluZ1N5c3RlbSIpLCBqc1N0cmluZyh2bSwgbV9udW1iZXJpbmdTeXN0ZW0pKTsKICAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHlsZSIpLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sIHN0eWxlU3RyaW5nKG1fc3R5bGUpKSk7CkBAIC00ODMsOSAr
NDgzLDkgQEAgQVNDSUlMaXRlcmFsIEludGxOdW1iZXJGb3JtYXQ6OnBhcnRUeXBlU3RyaW5nKFVO
dW1iZXJGb3JtYXRGaWVsZHMgZmllbGQsIGRvdWJsZQogICAgIHJldHVybiAidW5rbm93biJfczsK
IH0KIAotSlNWYWx1ZSBJbnRsTnVtYmVyRm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEV4ZWNTdGF0ZSYg
ZXhlYywgZG91YmxlIHZhbHVlKQorSlNWYWx1ZSBJbnRsTnVtYmVyRm9ybWF0Ojpmb3JtYXRUb1Bh
cnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIEZvcm1hdE51
bWJlclRvUGFydHMgKEVDTUEtNDAyKQpAQCAtNDkzLDEyICs0OTMsMTIgQEAgSlNWYWx1ZSBJbnRs
TnVtYmVyRm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEV4ZWNTdGF0ZSYgZXhlYywgZG91YmxlIHZhbHVl
KQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLXBhcnRpdGlvbm51
bWJlcnBhdHRlcm4KIAogICAgIGlmICghbV9pbml0aWFsaXplZE51bWJlckZvcm1hdCkKLSAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZleGVjLCBzY29wZSwgIkludGwuTnVtYmVyRm9ybWF0
LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9i
amVjdCBpbml0aWFsaXplZCBhcyBhIE51bWJlckZvcm1hdCJfcyk7CisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiSW50bC5OdW1iZXJGb3JtYXQucHJv
dG90eXBlLmZvcm1hdFRvUGFydHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9ybWF0Il9zKTsKIAogICAgIFVFcnJvckNvZGUgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOwogICAgIGF1dG8gZmllbGRJdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8
VUZpZWxkUG9zaXRpb25JdGVyYXRvciwgVUZpZWxkUG9zaXRpb25JdGVyYXRvckRlbGV0ZXI+KHVm
aWVsZHBvc2l0ZXJfb3Blbigmc3RhdHVzKSk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQot
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJmV4ZWMsIHNjb3BlLCAiZmFpbGVkIHRvIG9w
ZW4gZmllbGQgcG9zaXRpb24gaXRlcmF0b3IiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBvcGVuIGZpZWxkIHBvc2l0aW9u
IGl0ZXJhdG9yIl9zKTsKIAogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBWZWN0b3I8
VUNoYXIsIDMyPiByZXN1bHQoMzIpOwpAQCAtNTA5LDcgKzUwOSw3IEBAIEpTVmFsdWUgSW50bE51
bWJlckZvcm1hdDo6Zm9ybWF0VG9QYXJ0cyhFeGVjU3RhdGUmIGV4ZWMsIGRvdWJsZSB2YWx1ZSkK
ICAgICAgICAgdW51bV9mb3JtYXREb3VibGVGb3JGaWVsZHMobV9udW1iZXJGb3JtYXQuZ2V0KCks
IHZhbHVlLCByZXN1bHQuZGF0YSgpLCByZXN1bHRMZW5ndGgsIGZpZWxkSXRyLmdldCgpLCAmc3Rh
dHVzKTsKICAgICB9CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQotICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoJmV4ZWMsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBhIG51bWJlci4i
X3MpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
ImZhaWxlZCB0byBmb3JtYXQgYSBudW1iZXIuIl9zKTsKIAogICAgIGludDMyX3QgbGl0ZXJhbEZp
ZWxkVHlwZSA9IC0xOwogICAgIGF1dG8gbGl0ZXJhbEZpZWxkID0gSW50bE51bWJlckZvcm1hdEZp
ZWxkKGxpdGVyYWxGaWVsZFR5cGUsIHJlc3VsdExlbmd0aCk7CkBAIC01MjcsMTAgKzUyNyw5IEBA
IEpTVmFsdWUgSW50bE51bWJlckZvcm1hdDo6Zm9ybWF0VG9QYXJ0cyhFeGVjU3RhdGUmIGV4ZWMs
IGRvdWJsZSB2YWx1ZSkKICAgICAgICAgZmllbGRUeXBlID0gdWZpZWxkcG9zaXRlcl9uZXh0KGZp
ZWxkSXRyLmdldCgpLCAmYmVnaW5JbmRleCwgJmVuZEluZGV4KTsKICAgICB9CiAKLSAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3Qo
dm0pOwogICAgIEpTQXJyYXkqIHBhcnRzID0gSlNBcnJheTo6dHJ5Q3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJh
eVdpdGhDb250aWd1b3VzKSwgMCk7CiAgICAgaWYgKCFwYXJ0cykKLSAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcigmZXhlYywgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKIAogICAgIGF1dG8gcmVzdWx0U3RyaW5nID0gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJl
c3VsdExlbmd0aCk7CkBAIC01NDUsMTAgKzU0NCwxMCBAQCBKU1ZhbHVlIEludGxOdW1iZXJGb3Jt
YXQ6OmZvcm1hdFRvUGFydHMoRXhlY1N0YXRlJiBleGVjLCBkb3VibGUgdmFsdWUpCiAgICAgICAg
ICAgICArK2N1cnJlbnRJbmRleDsKICAgICAgICAgYXV0byBwYXJ0VHlwZSA9IGZpZWxkVHlwZSA9
PSBsaXRlcmFsRmllbGRUeXBlID8gbGl0ZXJhbFN0cmluZyA6IGpzU3RyaW5nKHZtLCBwYXJ0VHlw
ZVN0cmluZyhVTnVtYmVyRm9ybWF0RmllbGRzKGZpZWxkVHlwZSksIHZhbHVlKSk7CiAgICAgICAg
IGF1dG8gcGFydFZhbHVlID0ganNTdWJzdHJpbmcodm0sIHJlc3VsdFN0cmluZywgc3RhcnRJbmRl
eCwgY3VycmVudEluZGV4IC0gc3RhcnRJbmRleCk7Ci0gICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOworICAgICAgICBKU09iamVjdCogcGFydCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIHBhcnQtPnB1dERpcmVj
dCh2bSwgdHlwZVByb3BlcnR5TmFtZSwgcGFydFR5cGUpOwogICAgICAgICBwYXJ0LT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCBwYXJ0VmFsdWUpOwotICAgICAgICBwYXJ0
cy0+cHV0RGlyZWN0SW5kZXgoJmV4ZWMsIGluZGV4KyssIHBhcnQpOworICAgICAgICBwYXJ0cy0+
cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCBwYXJ0KTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaAppbmRleCA4ZjYxNDM3YzU2NGEx
NmVmZWQwMjJjMmUzMzg1Y2FiMWQ1ZTBmN2VhLi5lNTQ1MGI0NGY1NzQ5OGFjNjQ1NjExNTdiOTRk
NDJkNjQwODhhZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdC5oCkBAIC00NywxMiArNDcsMTIgQEAgY2xhc3MgSW50bE51bWJlckZvcm1h
dCBmaW5hbCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAKICAgICBERUNMQVJFX0lO
Rk87CiAKLSAgICB2b2lkIGluaXRpYWxpemVOdW1iZXJGb3JtYXQoRXhlY1N0YXRlJiwgSlNWYWx1
ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBmb3JtYXROdW1i
ZXIoRXhlY1N0YXRlJiwgZG91YmxlIG51bWJlcik7CisgICAgdm9pZCBpbml0aWFsaXplTnVtYmVy
Rm9ybWF0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnNW
YWx1ZSk7CisgICAgSlNWYWx1ZSBmb3JtYXROdW1iZXIoSlNHbG9iYWxPYmplY3QqLCBkb3VibGUg
bnVtYmVyKTsKICNpZiBIQVZFKElDVV9GT1JNQVRfRE9VQkxFX0ZPUl9GSUVMRFMpCi0gICAgSlNW
YWx1ZSBmb3JtYXRUb1BhcnRzKEV4ZWNTdGF0ZSYsIGRvdWJsZSB2YWx1ZSk7CisgICAgSlNWYWx1
ZSBmb3JtYXRUb1BhcnRzKEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlIHZhbHVlKTsKICNlbmRpZgot
ICAgIEpTT2JqZWN0KiByZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlJik7CisgICAgSlNPYmplY3Qq
IHJlc29sdmVkT3B0aW9ucyhKU0dsb2JhbE9iamVjdCopOwogCiAgICAgSlNCb3VuZEZ1bmN0aW9u
KiBib3VuZEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRGb3JtYXQuZ2V0KCk7IH0KICAg
ICB2b2lkIHNldEJvdW5kRm9ybWF0KFZNJiwgSlNCb3VuZEZ1bmN0aW9uKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENv
bnN0cnVjdG9yLmNwcAppbmRleCA5ZGU4ZDVlZThmYmZhMjcxY2JiYWZjY2ExMmFiZGYwZDUyZDg2
MjJlLi43NjQ3M2ZjYjIyYmRiNmE2ZTgxZWEwZGEyMTRkN2FiNjJjZjcwNTBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTkzLDE4ICs5MywxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsTnVtYmVyRm9ybWF0KEpTR2xvYmFsT2JqZWN0
KiBnbAogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1bmRlZmluZWQsIGxldCBuZXdUYXJnZXQg
YmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVsc2UgbGV0IG5ld1RhcmdldCBiZSBOZXdU
YXJnZXQuCiAgICAgLy8gMi4gTGV0IG51bWJlckZvcm1hdCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21D
b25zdHJ1Y3RvcihuZXdUYXJnZXQsICVOdW1iZXJGb3JtYXRQcm90b3R5cGUlKS4KICAgICAvLyAz
LiBSZXR1cm5JZkFicnVwdChudW1iZXJGb3JtYXQpLgotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9y
Kj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKHZtKSk7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1l
LT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcio+KGNhbGxG
cmFtZS0+anNDYWxsZWUoKSktPm51bWJlckZvcm1hdFN0cnVjdHVyZSh2bSkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIEludGxOdW1iZXJG
b3JtYXQqIG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0
dXJlKTsKICAgICBBU1NFUlQobnVtYmVyRm9ybWF0KTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0
aWFsaXplTnVtYmVyRm9ybWF0KG51bWJlckZvcm1hdCwgbG9jYWxlcywgb3B0aW9ucykuCiAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgIG51bWJlckZvcm1hdC0+aW5pdGlhbGl6ZU51bWJlckZvcm1h
dCgqY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDEpKTsKKyAgICBudW1iZXJGb3JtYXQtPmluaXRpYWxpemVOdW1iZXJGb3JtYXQoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlckZvcm1hdCk7CiB9CiAKLXN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxJbnRsTnVtYmVyRm9ybWF0KEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsSW50bE51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICAvLyAxMS4xLjIgSW50bC5OdW1iZXJGb3Jt
YXQgKFtsb2NhbGVzIFssIG9wdGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJZiBO
ZXdUYXJnZXQgaXMgdW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUgZnVuY3Rp
b24gb2JqZWN0LCBlbHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0LgpAQCAtMTE0LDE0ICsx
MTQsMTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEludGxOdW1i
ZXJGb3JtYXQoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnIKIAogICAgIC8vIEZJWE1FOiBXb3JrYXJv
dW5kIHRvIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIEVDTUEtNDAyIDEuMCBjYWxsL2FwcGx5
IHBhdHRlcm5zLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTM2NzkKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEludGxJbnN0YW5j
ZVdpdGhXb3JrYXJvdW5kRm9yTGVnYWN5SW50bENvbnN0cnVjdG9yPEludGxOdW1iZXJGb3JtYXQ+
KCpjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCksIGNhbGxlZSwgWyZdIChWTSYgdm0p
IHsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEludGxJbnN0YW5jZVdpdGhX
b3JrYXJvdW5kRm9yTGVnYWN5SW50bENvbnN0cnVjdG9yPEludGxOdW1iZXJGb3JtYXQ+KGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSwgY2FsbGVlLCBbJl0gKFZNJiB2bSkgewog
ICAgICAgICAvLyAyLiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0
cnVjdG9yKG5ld1RhcmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgogICAgICAgICAvLyAz
LiBSZXR1cm5JZkFicnVwdChudW1iZXJGb3JtYXQpLgogICAgICAgICBJbnRsTnVtYmVyRm9ybWF0
KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUodm0sIGNhbGxlZS0+bnVt
YmVyRm9ybWF0U3RydWN0dXJlKHZtKSk7CiAgICAgICAgIEFTU0VSVChudW1iZXJGb3JtYXQpOwog
CiAgICAgICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplTnVtYmVyRm9ybWF0KG51bWJlckZvcm1h
dCwgbG9jYWxlcywgb3B0aW9ucykuCi0gICAgICAgIG51bWJlckZvcm1hdC0+aW5pdGlhbGl6ZU51
bWJlckZvcm1hdCgqY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDEpKTsKKyAgICAgICAgbnVtYmVyRm9ybWF0LT5pbml0aWFsaXplTnVtYmVyRm9y
bWF0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1
bWVudCgxKSk7CiAgICAgICAgIHJldHVybiBudW1iZXJGb3JtYXQ7CiAgICAgfSkpOwogfQpAQCAt
MTM2LDExICsxMzYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVy
Rm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEoKICAgICBjb25zdCBIYXNo
U2V0PFN0cmluZz4gYXZhaWxhYmxlTG9jYWxlcyA9IGdsb2JhbE9iamVjdC0+aW50bE51bWJlckZv
cm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVz
IGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCi0gICAgVmVjdG9yPFN0cmluZz4g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKmNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxl
cyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMs
IHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpLgotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoKmNhbGxGcmFtZSwgYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSkpKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2Nh
bGVzKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgY2Fs
bEZyYW1lLT5hcmd1bWVudCgxKSkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90
eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGUuY3BwCmluZGV4IDVkMWY4NDRlOGNkMjlmNTJmYjcwNjAyNWFkZTNiNjViNDFhMjkw
NDMuLjcxYjczNGJhNzI2MjQwYWFkMjU2OWU2YjM1MDhkNzhlYjg0MjRlODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGUuY3BwCkBAIC0xMDAsMTIgKzEwMCwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlcihKU0dsb2JhbE9i
agogCiAgICAgLy8gMy4gSWYgdmFsdWUgaXMgbm90IHByb3ZpZGVkLCBsZXQgdmFsdWUgYmUgdW5k
ZWZpbmVkLgogICAgIC8vIDQuIExldCB4IGJlIFRvTnVtYmVyKHZhbHVlKS4KLSAgICBkb3VibGUg
bnVtYmVyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihjYWxsRnJhbWUpOworICAg
IGRvdWJsZSBudW1iZXIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9i
amVjdCk7CiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoeCkuCiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyA2LiBSZXR1cm4gRm9ybWF0
TnVtYmVyKG5mLCB4KS4KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShudW1iZXJGb3JtYXQtPmZvcm1hdE51bWJlcigqY2FsbEZyYW1lLCBudW1iZXIpKSk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUobnVtYmVyRm9ybWF0
LT5mb3JtYXROdW1iZXIoZ2xvYmFsT2JqZWN0LCBudW1iZXIpKSk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTEy
MCwxMyArMTIwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZv
cm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChKU0dsb2JhbE9iamVjCiAgICAgLy8gRklYTUU6IFdv
cmthcm91bmQgdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwv
YXBwbHkgcGF0dGVybnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MzY3OQogICAgIGlmICghbmYpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkuZ2V0KGNhbGxGcmFtZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkuaW50bFN1YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCkpOworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS5nZXQoZ2xvYmFsT2JqZWN0LCB2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pbnRsU3Vic3RpdHV0ZVZhbHVlUHJpdmF0
ZU5hbWUoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgICAgICBuZiA9IGpzRHluYW1pY0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KHZt
LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgaWYgKCFuZikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiSW50bC5OdW1iZXJGb3Jt
YXQucHJvdG90eXBlLmZvcm1hdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3Qg
aW5pdGlhbGl6ZWQgYXMgYSBOdW1iZXJGb3JtYXQiX3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiSW50bC5OdW1i
ZXJGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBv
YmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBOdW1iZXJGb3JtYXQiX3MpKTsKICAgICAKICAgICBKU0Jv
dW5kRnVuY3Rpb24qIGJvdW5kRm9ybWF0ID0gbmYtPmJvdW5kRm9ybWF0KCk7CiAgICAgLy8gMi4g
SWYgbmYuW1tib3VuZEZvcm1hdF1dIGlzIHVuZGVmaW5lZCwKQEAgLTEzNiw3ICsxMzYsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVHZXR0
ZXJGb3JtYXQoSlNHbG9iYWxPYmplYwogICAgICAgICAvLyBiLiBUaGUgdmFsdWUgb2YgRuKAmXMg
bGVuZ3RoIHByb3BlcnR5IGlzIDEuCiAgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldE9iamVjdCA9
IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAiZm9ybWF0Il9zLCBJbnRs
TnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlciwgTm9JbnRyaW5zaWMpOwogICAgICAgICAvLyBj
LiBMZXQgYmYgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCi0gICAg
ICAgIGJvdW5kRm9ybWF0ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGNhbGxGcmFtZSwg
Z2xvYmFsT2JqZWN0LCB0YXJnZXRPYmplY3QsIG5mLCBudWxscHRyLCAxLCAiZm9ybWF0Il9zKTsK
KyAgICAgICAgYm91bmRGb3JtYXQgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCB0YXJnZXRPYmplY3QsIG5mLCBudWxscHRyLCAxLCAiZm9ybWF0Il9zKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAg
IC8vIGQuIFNldCBuZi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIG5mLT5zZXRCb3Vu
ZEZvcm1hdCh2bSwgYm91bmRGb3JtYXQpOwpAQCAtMTU2LDEyICsxNTYsMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlRnVuY0Zvcm1hdFRv
UGFydHMoSlNHbG9iYWwKIAogICAgIEludGxOdW1iZXJGb3JtYXQqIG51bWJlckZvcm1hdCA9IGpz
RHluYW1pY0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKICAgICBpZiAoIW51bWJlckZvcm1hdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiSW50bC5OdW1iZXJGb3JtYXQucHJv
dG90eXBlLmZvcm1hdFRvUGFydHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9ybWF0Il9zKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkludGwuTnVt
YmVyRm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mg
bm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIE51bWJlckZvcm1hdCJfcykpOwogCi0gICAg
ZG91YmxlIHZhbHVlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihjYWxsRnJhbWUp
OworICAgIGRvdWJsZSB2YWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xv
YmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG51
bWJlckZvcm1hdC0+Zm9ybWF0VG9QYXJ0cygqY2FsbEZyYW1lLCB2YWx1ZSkpKTsKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShudW1iZXJGb3JtYXQtPmZvcm1h
dFRvUGFydHMoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpKTsKIH0KICNlbmRpZgogCkBAIC0xNzYsMTUg
KzE3NiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEpTR2xvYgogICAgIC8vIEZJWE1FOiBXb3JrYXJv
dW5kIHRvIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIEVDTUEtNDAyIDEuMCBjYWxsL2FwcGx5
IHBhdHRlcm5zLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTM2NzkKICAgICBpZiAoIW51bWJlckZvcm1hdCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS5nZXQoY2FsbEZyYW1lLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5pbnRsU3Vic3RpdHV0ZVZhbHVlUHJpdmF0ZU5hbWUoKSk7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLmdldChnbG9iYWxPYmpl
Y3QsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmludGxTdWJzdGl0dXRlVmFsdWVQ
cml2YXRlTmFtZSgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgICAgIG51bWJlckZvcm1hdCA9IGpzRHluYW1pY0Nhc3Q8SW50bE51
bWJlckZvcm1hdCo+KHZtLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgaWYgKCFudW1iZXJGb3JtYXQp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSwgIkludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMgY2Fs
bGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgTnVtYmVy
Rm9ybWF0Il9zKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5yZXNv
bHZlZE9wdGlvbnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxp
emVkIGFzIGEgTnVtYmVyRm9ybWF0Il9zKSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShudW1iZXJGb3JtYXQtPnJlc29sdmVkT3B0aW9ucygqY2FsbEZy
YW1lKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG51
bWJlckZvcm1hdC0+cmVzb2x2ZWRPcHRpb25zKGdsb2JhbE9iamVjdCkpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
Y3BwCmluZGV4IDRlOGRkM2M4NDRiOTA5ZmQyZTNhYTc5ZmZjMWU2NTkzOWUzZTBiYzAuLjI0ZmY3
NmJjYTYyNjMxMDdkNzhiZGMyM2E3YTZmYzk4ZWQ4ZTgxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC0xNDMsMjIgKzE0MywyMiBAQCBTdHJp
bmcgY29udmVydElDVUxvY2FsZVRvQkNQNDdMYW5ndWFnZVRhZyhjb25zdCBjaGFyKiBsb2NhbGVJ
RCkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGJv
b2wmIHVzZXNGYWxsYmFjaykKK2Jvb2wgaW50bEJvb2xlYW5PcHRpb24oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGJv
b2wmIHVzZXNGYWxsYmFjaykKIHsKICAgICAvLyBHZXRPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5
LCB0eXBlPSJib29sZWFuIiwgdmFsdWVzLCBmYWxsYmFjaykKICAgICAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWE0MDIvI3NlYy1nZXRvcHRpb24KIAotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50
b09iamVjdCgmc3RhdGUpOworICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09iamVjdChn
bG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAot
ICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRlLCBwcm9wZXJ0eSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IG9wdHMtPmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBpZiAoIXZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKLSAgICAgICAgYm9vbCBib29sZWFuVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oJnN0
YXRlKTsKKyAgICAgICAgYm9vbCBib29sZWFuVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oZ2xvYmFs
T2JqZWN0KTsKICAgICAgICAgdXNlc0ZhbGxiYWNrID0gZmFsc2U7CiAgICAgICAgIHJldHVybiBi
b29sZWFuVmFsdWU7CiAgICAgfQpAQCAtMTY4LDI2ICsxNjgsMjYgQEAgYm9vbCBpbnRsQm9vbGVh
bk9wdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0cmluZyBpbnRsU3RyaW5nT3B0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5
LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IHZhbHVlcywgY29uc3QgY2hhciog
bm90Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNrKQorU3RyaW5nIGludGxTdHJpbmdPcHRpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHksIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFsdWVzLCBj
b25zdCBjaGFyKiBub3RGb3VuZCwgY29uc3QgY2hhciogZmFsbGJhY2spCiB7CiAgICAgLy8gR2V0
T3B0aW9uIChvcHRpb25zLCBwcm9wZXJ0eSwgdHlwZT0ic3RyaW5nIiwgdmFsdWVzLCBmYWxsYmFj
aykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1nZXRvcHRpb24K
IAotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpT
T2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09iamVjdCgmc3RhdGUpOworICAgIEpTT2JqZWN0KiBv
cHRzID0gb3B0aW9ucy50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIFN0cmluZygpKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQo
JnN0YXRlLCBwcm9wZXJ0eSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldChnbG9iYWxP
YmplY3QsIHByb3BlcnR5KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBTdHJpbmco
KSk7CiAKICAgICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgU3RyaW5nIHN0
cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICAgICAgU3RyaW5nIHN0
cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgU3RyaW5nKCkpOwogCiAgICAgICAgIGlmICh2YWx1ZXMu
c2l6ZSgpICYmIHN0ZDo6ZmluZCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLmVuZCgpLCBzdHJpbmdW
YWx1ZSkgPT0gdmFsdWVzLmVuZCgpKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKCZzdGF0ZSwgbm90Rm91bmQpKTsKKyAgICAgICAg
ICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBub3RGb3VuZCkpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWU7CkBAIC0xOTYsMzcgKzE5NiwzNyBAQCBT
dHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIG9wdGlvbnMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eQogICAgIHJldHVybiBmYWxsYmFjazsKIH0KIAotdW5zaWdu
ZWQgaW50bE51bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIG9wdGlvbnMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eSwgdW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwg
dW5zaWduZWQgZmFsbGJhY2spCit1bnNpZ25lZCBpbnRsTnVtYmVyT3B0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5
LCB1bnNpZ25lZCBtaW5pbXVtLCB1bnNpZ25lZCBtYXhpbXVtLCB1bnNpZ25lZCBmYWxsYmFjaykK
IHsKICAgICAvLyBHZXROdW1iZXJPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCBtaW5pbXVtLCBt
YXhpbXVtLCBmYWxsYmFjaykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIv
I3NlYy1nZXRudW1iZXJvcHRpb24KIAotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09iamVjdCgmc3Rh
dGUpOworICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09iamVjdChnbG9iYWxPYmplY3Qp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogCi0gICAgSlNWYWx1ZSB2YWx1
ZSA9IG9wdHMtPmdldCgmc3RhdGUsIHByb3BlcnR5KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gb3B0
cy0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIDApOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBpbnRsRGVmYXVsdE51
bWJlck9wdGlvbihzdGF0ZSwgdmFsdWUsIHByb3BlcnR5LCBtaW5pbXVtLCBtYXhpbXVtLCBmYWxs
YmFjaykpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaW50bERlZmF1bHROdW1iZXJP
cHRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgcHJvcGVydHksIG1pbmltdW0sIG1heGltdW0sIGZh
bGxiYWNrKSk7CiB9CiAKLXVuc2lnbmVkIGludGxEZWZhdWx0TnVtYmVyT3B0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSwgdW5zaWduZWQg
bWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgdW5zaWduZWQgZmFsbGJhY2spCit1bnNpZ25lZCBp
bnRsRGVmYXVsdE51bWJlck9wdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIHVuc2lnbmVkIG1pbmltdW0sIHVuc2ln
bmVkIG1heGltdW0sIHVuc2lnbmVkIGZhbGxiYWNrKQogewogICAgIC8vIERlZmF1bHROdW1iZXJP
cHRpb24gKHZhbHVlLCBtaW5pbXVtLCBtYXhpbXVtLCBmYWxsYmFjaykKICAgICAvLyBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1kZWZhdWx0bnVtYmVyb3B0aW9uCiAKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIXZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUudG9OdW1i
ZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7
CiAKICAgICAgICAgaWYgKCEoZG91YmxlVmFsdWUgPj0gbWluaW11bSAmJiBkb3VibGVWYWx1ZSA8
PSBtYXhpbXVtKSkgewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlUmFuZ2VFcnJvcigmc3RhdGUsICpwcm9wZXJ0eS5wdWJsaWNOYW1lKCkgKyAiIGlzIG91
dCBvZiByYW5nZSIpKTsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
c2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAqcHJvcGVydHkucHVibGljTmFt
ZSgpICsgIiBpcyBvdXQgb2YgcmFuZ2UiKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZVZhbHVlKTsK
QEAgLTQ5NSwxNSArNDk1LDE0IEBAIHN0YXRpYyBTdHJpbmcgY2Fub25pY2FsaXplTGFuZ3VhZ2VU
YWcoY29uc3QgU3RyaW5nJiBsb2NhbGUpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1WZWN0
b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgbG9jYWxlcykKK1ZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsb2NhbGVzKQogewogICAgIC8vIENhbm9u
aWNhbGl6ZUxvY2FsZUxpc3QgKGxvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hNDAyLyNzZWMtY2Fub25pY2FsaXplbG9jYWxlbGlzdAogCi0gICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHN0YXRlLmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCh2bSk7CiAgICAgVmVjdG9y
PFN0cmluZz4gc2VlbjsKIAogICAgIGlmIChsb2NhbGVzLmlzVW5kZWZpbmVkKCkpCkBAIC01MTMs
NDggKzUxMiw0OCBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgbG9jYWxlcykKICAgICBpZiAobG9jYWxlcy5pc1N0cmluZygp
KSB7CiAgICAgICAgIEpTQXJyYXkqIGxvY2FsZXNBcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24oQXJyYXlXaXRoQ29udGlndW91cykpOwogICAgICAgICBpZiAoIWxvY2FsZXNBcnJheSkg
ewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAg
ICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAg
ICAgICAgIH0KLSAgICAgICAgbG9jYWxlc0FycmF5LT5wdXNoKCZzdGF0ZSwgbG9jYWxlcyk7Cisg
ICAgICAgIGxvY2FsZXNBcnJheS0+cHVzaChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBWZWN0b3I8U3RyaW5nPigpKTsKIAogICAgICAg
ICBsb2NhbGVzT2JqZWN0ID0gbG9jYWxlc0FycmF5OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGxv
Y2FsZXNPYmplY3QgPSBsb2NhbGVzLnRvT2JqZWN0KCZzdGF0ZSk7CisgICAgICAgIGxvY2FsZXNP
YmplY3QgPSBsb2NhbGVzLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxTdHJpbmc+KCkpOwogICAgIH0KIAogICAgIC8vIDYu
IExldCBsZW4gYmUgVG9MZW5ndGgoR2V0KE8sICJsZW5ndGgiKSkuCi0gICAgSlNWYWx1ZSBsZW5n
dGhQcm9wZXJ0eSA9IGxvY2FsZXNPYmplY3QtPmdldCgmc3RhdGUsIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCk7CisgICAgSlNWYWx1ZSBsZW5ndGhQcm9wZXJ0eSA9IGxvY2FsZXNPYmplY3QtPmdl
dChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAKLSAgICBkb3VibGUgbGVuZ3Ro
ID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoJnN0YXRlKTsKKyAgICBkb3VibGUgbGVuZ3RoID0g
bGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBWZWN0b3I8U3RyaW5nPigpKTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBz
ZWVuU2V0OwogICAgIGZvciAoZG91YmxlIGsgPSAwOyBrIDwgbGVuZ3RoOyArK2spIHsKLSAgICAg
ICAgYm9vbCBrUHJlc2VudCA9IGxvY2FsZXNPYmplY3QtPmhhc1Byb3BlcnR5KCZzdGF0ZSwgayk7
CisgICAgICAgIGJvb2wga1ByZXNlbnQgPSBsb2NhbGVzT2JqZWN0LT5oYXNQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIGspOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBWZWN0b3I8
U3RyaW5nPigpKTsKIAogICAgICAgICBpZiAoa1ByZXNlbnQpIHsKLSAgICAgICAgICAgIEpTVmFs
dWUga1ZhbHVlID0gbG9jYWxlc09iamVjdC0+Z2V0KCZzdGF0ZSwgayk7CisgICAgICAgICAgICBK
U1ZhbHVlIGtWYWx1ZSA9IGxvY2FsZXNPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGspOwogICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAK
ICAgICAgICAgICAgIGlmICgha1ZhbHVlLmlzU3RyaW5nKCkgJiYgIWtWYWx1ZS5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgImxvY2Fs
ZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCJfcyk7CisgICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImxvY2FsZSB2YWx1ZSBtdXN0IGJl
IGEgc3RyaW5nIG9yIG9iamVjdCJfcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxT
dHJpbmc+KCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEpTU3RyaW5nKiB0YWcgPSBr
VmFsdWUudG9TdHJpbmcoJnN0YXRlKTsKKyAgICAgICAgICAgIEpTU3RyaW5nKiB0YWcgPSBrVmFs
dWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIFZlY3RvcjxTdHJpbmc+KCkpOwogCi0gICAgICAgICAgICBhdXRvIHRhZ1ZhbHVl
ID0gdGFnLT52YWx1ZSgmc3RhdGUpOworICAgICAgICAgICAgYXV0byB0YWdWYWx1ZSA9IHRhZy0+
dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIFZlY3RvcjxTdHJpbmc+KCkpOwogCiAgICAgICAgICAgICBTdHJpbmcgY2Fub25pY2FsaXpl
ZFRhZyA9IGNhbm9uaWNhbGl6ZUxhbmd1YWdlVGFnKHRhZ1ZhbHVlKTsKICAgICAgICAgICAgIGlm
IChjYW5vbmljYWxpemVkVGFnLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcigmc3RhdGUsICJpbnZhbGlkIGxh
bmd1YWdlIHRhZzogIiArIHRhZ1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsICJp
bnZhbGlkIGxhbmd1YWdlIHRhZzogIiArIHRhZ1ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAgICAgICAgICAgICB9CiAKQEAgLTU4OSw3ICs1ODgsNyBA
QCBTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWls
YWJsZUxvY2FsZXMsIGNvbnN0IFN0cmluZwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3Ry
aW5nIGRlZmF1bHRMb2NhbGUoRXhlY1N0YXRlJiBzdGF0ZSkKK1N0cmluZyBkZWZhdWx0TG9jYWxl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgLy8gRGVmYXVsdExvY2FsZSAo
KQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWRlZmF1bHRsb2Nh
bGUKQEAgLTU5Nyw4ICs1OTYsNyBAQCBTdHJpbmcgZGVmYXVsdExvY2FsZShFeGVjU3RhdGUmIHN0
YXRlKQogICAgIC8vIFdlYkNvcmUncyBnbG9iYWwgb2JqZWN0cyB3aWxsIGhhdmUgdGhlaXIgb3du
IGlkZWFzIG9mIGhvdyB0byBkZXRlcm1pbmUgdGhlIGxhbmd1YWdlLiBJdCBtYXkKICAgICAvLyBi
ZSBkZXRlcm1pbmVkIGJ5IFdlYkNvcmUtc3BlY2lmaWMgbG9naWMgbGlrZSBzb21lIFdLIHNldHRp
bmdzLiBVc3VhbGx5IHRoaXMgd2lsbCByZXR1cm4gdGhlCiAgICAgLy8gc2FtZSB0aGluZyBhcyB1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKClbMF0uCi0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICBpZiAoYXV0byBkZWZhdWx0TGFuZ3VhZ2UgPSBzdGF0ZS5qc0NhbGxlZSgpLT5nbG9iYWxPYmpl
Y3Qodm0pLT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5kZWZhdWx0TGFuZ3VhZ2UpIHsKKyAg
ICBpZiAoYXV0byBkZWZhdWx0TGFuZ3VhZ2UgPSBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPmRlZmF1bHRMYW5ndWFnZSkgewogICAgICAgICBTdHJpbmcgbG9jYWxlID0g
Y2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcoZGVmYXVsdExhbmd1YWdlKCkpOwogICAgICAgICBpZiAo
IWxvY2FsZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gbG9jYWxlOwpAQCAtNjQ0LDcg
KzY0Miw3IEBAIFN0cmluZyByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyYgbG9jYWxlKQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBN
YXRjaGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVz
dGVkTG9jYWxlcykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2Nh
bGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKIHsKICAgICAvLyBM
b29rdXBNYXRjaGVyIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWxvb2t1cG1hdGNoZXIKQEAgLTY4
MSwxNyArNjc5LDE3IEBAIHN0YXRpYyBNYXRjaGVyUmVzdWx0IGxvb2t1cE1hdGNoZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpCiAgICAgICAgICAgICByZXN1
bHQuZXh0ZW5zaW9uSW5kZXggPSBleHRlbnNpb25JbmRleDsKICAgICAgICAgfQogICAgIH0gZWxz
ZQotICAgICAgICByZXN1bHQubG9jYWxlID0gZGVmYXVsdExvY2FsZShzdGF0ZSk7CisgICAgICAg
IHJlc3VsdC5sb2NhbGUgPSBkZWZhdWx0TG9jYWxlKGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIE1hdGNoZXJSZXN1bHQgYmVzdEZpdE1hdGNoZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcykKK3N0YXRpYyBNYXRjaGVyUmVzdWx0
IGJlc3RGaXRNYXRjaGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVl
c3RlZExvY2FsZXMpCiB7CiAgICAgLy8gQmVzdEZpdE1hdGNoZXIgKGF2YWlsYWJsZUxvY2FsZXMs
IHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAy
LyNzZWMtYmVzdGZpdG1hdGNoZXIKIAogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5n
IGJldHRlciB0aGFuIGxvb2t1cC4KLSAgICByZXR1cm4gbG9va3VwTWF0Y2hlcihzdGF0ZSwgYXZh
aWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7CisgICAgcmV0dXJuIGxvb2t1cE1hdGNo
ZXIoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKIH0K
IAogc3RhdGljIHZvaWQgdW5pY29kZUV4dGVuc2lvblN1YlRhZ3MoY29uc3QgU3RyaW5nJiBleHRl
bnNpb24sIFZlY3RvcjxTdHJpbmc+JiBzdWJ0YWdzKQpAQCAtNzMzLDE1ICs3MzEsMTUgQEAgc3Rh
dGljIHZvaWQgdW5pY29kZUV4dGVuc2lvblN1YlRhZ3MoY29uc3QgU3RyaW5nJiBleHRlbnNpb24s
IFZlY3RvcjxTdHJpbmc+JiBzdWIKICAgICBzdWJ0YWdzLmFwcGVuZChleHRlbnNpb24uc3Vic3Ry
aW5nKHZhbHVlU3RhcnQsIGV4dGVuc2lvbkxlbmd0aCAtIHZhbHVlU3RhcnQpKTsKIH0KIAotSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gcmVzb2x2ZUxvY2FsZShFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiByZXF1ZXN0ZWRMb2NhbGVzLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgb3B0aW9u
cywgY29uc3QgY2hhciogY29uc3QgcmVsZXZhbnRFeHRlbnNpb25LZXlzW10sIHNpemVfdCByZWxl
dmFudEV4dGVuc2lvbktleUNvdW50LCBWZWN0b3I8U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0
IFN0cmluZyYsIHNpemVfdCkpCitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiByZXNvbHZlTG9jYWxl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZh
aWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBvcHRpb25zLCBjb25zdCBjaGFyKiBjb25zdCBy
ZWxldmFudEV4dGVuc2lvbktleXNbXSwgc2l6ZV90IHJlbGV2YW50RXh0ZW5zaW9uS2V5Q291bnQs
IFZlY3RvcjxTdHJpbmc+ICgqbG9jYWxlRGF0YSkoY29uc3QgU3RyaW5nJiwgc2l6ZV90KSkKIHsK
ICAgICAvLyBSZXNvbHZlTG9jYWxlIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVz
LCBvcHRpb25zLCByZWxldmFudEV4dGVuc2lvbktleXMsIGxvY2FsZURhdGEpCiAgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtcmVzb2x2ZWxvY2FsZQogCiAgICAgY29u
c3QgU3RyaW5nJiBtYXRjaGVyID0gb3B0aW9ucy5nZXQoImxvY2FsZU1hdGNoZXIiX3MpOwogICAg
IE1hdGNoZXJSZXN1bHQgbWF0Y2hlclJlc3VsdCA9IChtYXRjaGVyID09ICJsb29rdXAiKQotICAg
ICAgICA/IGxvb2t1cE1hdGNoZXIoc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExv
Y2FsZXMpCi0gICAgICAgIDogYmVzdEZpdE1hdGNoZXIoc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMs
IHJlcXVlc3RlZExvY2FsZXMpOworICAgICAgICA/IGxvb2t1cE1hdGNoZXIoZ2xvYmFsT2JqZWN0
LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQorICAgICAgICA6IGJlc3RGaXRN
YXRjaGVyKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7
CiAKICAgICBTdHJpbmcgZm91bmRMb2NhbGUgPSBtYXRjaGVyUmVzdWx0LmxvY2FsZTsKIApAQCAt
ODAwLDE5ICs3OTgsMTggQEAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcmVzb2x2ZUxvY2FsZShF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGEKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQorc3RhdGljIEpTQXJyYXkqIGxvb2t1
cFN1cHBvcnRlZExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVx
dWVzdGVkTG9jYWxlcykKIHsKICAgICAvLyBMb29rdXBTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTQwMi8jc2VjLWxvb2t1cHN1cHBvcnRlZGxvY2FsZXMKIAotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHNpemVfdCBsZW4gPSByZXF1ZXN0
ZWRMb2NhbGVzLnNpemUoKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3Rh
dGUuanNDYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KHZtKTsKICAgICBKU0FycmF5KiBzdWJzZXQgPSBK
U0FycmF5Ojp0cnlDcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOwogICAgIGlm
ICghc3Vic2V0KSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTgyMiw3ICs4MTksNyBAQCBzdGF0
aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBIYXNoU2V0PFN0cmluZz4mCiAgICAgICAgIFN0cmluZyBub0V4dGVuc2lvbnNMb2NhbGUgPSBy
ZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGxvY2FsZSk7CiAgICAgICAgIFN0cmluZyBhdmFp
bGFibGVMb2NhbGUgPSBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0
ZW5zaW9uc0xvY2FsZSk7CiAgICAgICAgIGlmICghYXZhaWxhYmxlTG9jYWxlLmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICBzdWJzZXQtPnB1dERpcmVjdEluZGV4KCZzdGF0ZSwgaW5kZXgrKywganNT
dHJpbmcodm0sIGxvY2FsZSkpOworICAgICAgICAgICAgc3Vic2V0LT5wdXREaXJlY3RJbmRleChn
bG9iYWxPYmplY3QsIGluZGV4KyssIGpzU3RyaW5nKHZtLCBsb2NhbGUpKTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICB9CiAgICAgfQpA
QCAtODMwLDM3ICs4MjcsMzcgQEAgc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JgogICAgIHJldHVybiBz
dWJzZXQ7CiB9CiAKLXN0YXRpYyBKU0FycmF5KiBiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyhFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzKQorc3RhdGljIEpTQXJyYXkqIGJl
c3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHJlcXVlc3RlZExvY2FsZXMpCiB7CiAgICAgLy8gQmVzdEZpdFN1cHBvcnRlZExvY2FsZXMgKGF2
YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCiAgICAgLy8gaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hNDAyLyNzZWMtYmVzdGZpdHN1cHBvcnRlZGxvY2FsZXMKIAogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIGJldHRlciB0aGFuIGxvb2t1cC4KLSAgICByZXR1cm4g
bG9va3VwU3VwcG9ydGVkTG9jYWxlcyhzdGF0ZSwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVk
TG9jYWxlcyk7CisgICAgcmV0dXJuIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZ2xvYmFsT2JqZWN0
LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKIH0KIAotSlNWYWx1ZSBzdXBw
b3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZh
aWxhYmxlTG9jYWxlcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMsIEpT
VmFsdWUgb3B0aW9ucykKK0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpCiB7
CiAgICAgLy8gU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgb3B0aW9ucykKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3Nl
Yy1zdXBwb3J0ZWRsb2NhbGVzCiAKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgU3RyaW5nIG1hdGNoZXI7CiAKICAgICBpZiAoIW9wdGlvbnMuaXNVbmRl
ZmluZWQoKSkgewotICAgICAgICBtYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0
aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3Qg
Zml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVz
dCBmaXRcIiIsICJiZXN0IGZpdCIpOworICAgICAgICBtYXRjaGVyID0gaW50bFN0cmluZ09wdGlv
bihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIs
IHsgImxvb2t1cCIsICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIg
XCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQiKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgbWF0
Y2hlciA9ICJiZXN0IGZpdCJfczsKIAogICAgIEpTQXJyYXkqIHN1cHBvcnRlZExvY2FsZXMgPSAo
bWF0Y2hlciA9PSAiYmVzdCBmaXQiKQotICAgICAgICA/IGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVz
KHN0YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQotICAgICAgICA6IGxv
b2t1cFN1cHBvcnRlZExvY2FsZXMoc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExv
Y2FsZXMpOworICAgICAgICA/IGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKGdsb2JhbE9iamVjdCwg
YXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKKyAgICAgICAgOiBsb29rdXBTdXBw
b3J0ZWRMb2NhbGVzKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAg
IFByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFBy
aXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICBzdXBwb3J0ZWRMb2NhbGVzLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5cywgRW51bWVyYXRpb25N
b2RlKCkpOworICAgIHN1cHBvcnRlZExvY2FsZXMtPmdldE93blByb3BlcnR5TmFtZXMoc3VwcG9y
dGVkTG9jYWxlcywgZ2xvYmFsT2JqZWN0LCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIFByb3BlcnR5RGVz
Y3JpcHRvciBkZXNjOwpAQCAtODY5LDEwICs4NjYsMTAgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2Nh
bGVzKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9j
YWwKIAogICAgIHNpemVfdCBsZW4gPSBrZXlzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIHN1cHBvcnRlZExvY2FsZXMtPmRlZmluZU93blBy
b3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5c1tpXSwgZGVzYywgdHJ1ZSk7Cisg
ICAgICAgIHN1cHBvcnRlZExvY2FsZXMtPmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRlZExvY2Fs
ZXMsIGdsb2JhbE9iamVjdCwga2V5c1tpXSwgZGVzYywgdHJ1ZSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgfQotICAgIHN1cHBvcnRlZExvY2Fs
ZXMtPmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBkZXNjLCB0cnVlKTsKKyAgICBzdXBwb3J0ZWRMb2NhbGVzLT5kZWZp
bmVPd25Qcm9wZXJ0eShzdXBwb3J0ZWRMb2NhbGVzLCBnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwgZGVzYywgdHJ1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgSlNWYWx1ZSgpKTsKIAogICAgIHJldHVybiBzdXBwb3J0ZWRMb2NhbGVzOwpAQCAtOTI1LDE4
ICs5MjIsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpbnRsT2JqZWN0RnVuY0dl
dENhbm9uaWNhbExvY2FsZXMoSlNHbG9iYWxPYmplY3QqIGcKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgVmVjdG9yPFN0cmluZz4gbG9jYWxlTGlzdCA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
KmNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgVmVjdG9yPFN0cmluZz4g
bG9jYWxlTGlzdCA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBhdXRvIGxlbmd0aCA9IGxvY2FsZUxpc3Quc2l6ZSgpOwogCiAgICAg
SlNBcnJheSogbG9jYWxlQXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGUodm0sIGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0
aENvbnRpZ3VvdXMpLCBsZW5ndGgpOwogICAgIGlmICghbG9jYWxlQXJyYXkpIHsKLSAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgbG9jYWxlQXJyYXktPnB1dERpcmVjdEluZGV4KGNhbGxGcmFtZSwg
aSwganNTdHJpbmcodm0sIGxvY2FsZUxpc3RbaV0pKTsKKyAgICAgICAgbG9jYWxlQXJyYXktPnB1
dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwganNTdHJpbmcodm0sIGxvY2FsZUxpc3RbaV0p
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobG9jYWxlQXJyYXkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCmluZGV4IGRmZjNlMTVhY2NmNWRi
MzBiM2RmZjUwNzZlNWNiNTliZWQwZWRhMTEuLjg5MDU3MTE0YTEwODIxMjIwZjc1YjViY2Y4Nzhh
Y2I1N2ExZTgwMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0
LmgKQEAgLTU2LDE1ICs1NiwxNSBAQCBjbGFzcyBJbnRsT2JqZWN0IGZpbmFsIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogICAgIEludGxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKIH07CiAK
LVN0cmluZyBkZWZhdWx0TG9jYWxlKEV4ZWNTdGF0ZSYpOworU3RyaW5nIGRlZmF1bHRMb2NhbGUo
SlNHbG9iYWxPYmplY3QqKTsKIFN0cmluZyBjb252ZXJ0SUNVTG9jYWxlVG9CQ1A0N0xhbmd1YWdl
VGFnKGNvbnN0IGNoYXIqIGxvY2FsZUlEKTsKLWJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhlY1N0
YXRlJiwgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5hbWUsIGJvb2wmIHVzZXNGYWxsYmFjayk7
Ci1TdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUmLCBKU1ZhbHVlIG9wdGlvbnMsIFBy
b3BlcnR5TmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIqPiB2YWx1ZXMsIGNv
bnN0IGNoYXIqIG5vdEZvdW5kLCBjb25zdCBjaGFyKiBmYWxsYmFjayk7Ci11bnNpZ25lZCBpbnRs
TnVtYmVyT3B0aW9uKEV4ZWNTdGF0ZSYsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBtaW5pbXVtLCB1bnNpZ25lZCBtYXhpbXVtLCB1bnNpZ25lZCBmYWxsYmFjayk7Ci11
bnNpZ25lZCBpbnRsRGVmYXVsdE51bWJlck9wdGlvbihFeGVjU3RhdGUmLCBKU1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIG1pbmltdW0sIHVuc2lnbmVkIG1heGltdW0sIHVuc2lnbmVkIGZh
bGxiYWNrKTsKLVZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXhlY1N0YXRl
JiwgSlNWYWx1ZSBsb2NhbGVzKTsKLUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHJlc29sdmVMb2Nh
bGUoRXhlY1N0YXRlJiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIG9wdGlvbnMsIGNvbnN0IGNoYXIqIGNvbnN0IHJlbGV2YW50RXh0ZW5zaW9u
S2V5c1tdLCBzaXplX3QgcmVsZXZhbnRFeHRlbnNpb25LZXlDb3VudCwgVmVjdG9yPFN0cmluZz4g
KCpsb2NhbGVEYXRhKShjb25zdCBTdHJpbmcmLCBzaXplX3QpKTsKLUpTVmFsdWUgc3VwcG9ydGVk
TG9jYWxlcyhFeGVjU3RhdGUmLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2Fs
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlv
bnMpOworYm9vbCBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgb3B0
aW9ucywgUHJvcGVydHlOYW1lLCBib29sJiB1c2VzRmFsbGJhY2spOworU3RyaW5nIGludGxTdHJp
bmdPcHRpb24oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG9wdGlvbnMsIFByb3BlcnR5TmFtZSwg
c3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIqPiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5v
dEZvdW5kLCBjb25zdCBjaGFyKiBmYWxsYmFjayk7Cit1bnNpZ25lZCBpbnRsTnVtYmVyT3B0aW9u
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IG1pbmltdW0sIHVuc2lnbmVkIG1heGltdW0sIHVuc2lnbmVkIGZhbGxiYWNrKTsKK3Vuc2lnbmVk
IGludGxEZWZhdWx0TnVtYmVyT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBtaW5pbXVtLCB1bnNpZ25lZCBtYXhpbXVtLCB1bnNpZ25lZCBmYWxs
YmFjayk7CitWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBsb2NhbGVzKTsKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHJlc29sdmVM
b2NhbGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxv
Y2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBjb25zdCBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYgb3B0aW9ucywgY29uc3QgY2hhciogY29uc3QgcmVsZXZhbnRF
eHRlbnNpb25LZXlzW10sIHNpemVfdCByZWxldmFudEV4dGVuc2lvbktleUNvdW50LCBWZWN0b3I8
U3RyaW5nPiAoKmxvY2FsZURhdGEpKGNvbnN0IFN0cmluZyYsIHNpemVfdCkpOworSlNWYWx1ZSBz
dXBwb3J0ZWRMb2NhbGVzKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBh
dmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywg
SlNWYWx1ZSBvcHRpb25zKTsKIFN0cmluZyByZW1vdmVVbmljb2RlTG9jYWxlRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbG9jYWxlKTsKIFN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiByZXF1ZXN0ZWRM
b2NhbGUpOwogVmVjdG9yPFN0cmluZz4gbnVtYmVyaW5nU3lzdGVtc0ZvckxvY2FsZShjb25zdCBT
dHJpbmcmIGxvY2FsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsT2JqZWN0SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE9iamVjdElubGluZXMuaAppbmRleCBkODc1Y2YxOGYzNDAxNzNhMDViYzdhYmFmMjMxY2M1NzM5
YjI2NzVmLi5iZmNmMzIxNjM2MTNhNGM4ZmVkNjViMjgyMjkyNDdmOWUxYjU0ODkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3RJbmxpbmVzLmgKQEAg
LTM1LDE5ICszNSwxOSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIElu
dGxJbnN0YW5jZSwgdHlwZW5hbWUgQ29uc3RydWN0b3IsIHR5cGVuYW1lIEZhY3Rvcnk+Ci1KU1Zh
bHVlIGNvbnN0cnVjdEludGxJbnN0YW5jZVdpdGhXb3JrYXJvdW5kRm9yTGVnYWN5SW50bENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBDb25zdHJ1Y3Rvciog
Y2FsbGVlLCBGYWN0b3J5IGZhY3RvcnkpCitKU1ZhbHVlIGNvbnN0cnVjdEludGxJbnN0YW5jZVdp
dGhXb3JrYXJvdW5kRm9yTGVnYWN5SW50bENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBDb25zdHJ1Y3RvciogY2FsbGVlLCBGYWN0b3J5
IGZhY3RvcnkpCiB7CiAgICAgLy8gRklYTUU6IFdvcmthcm91bmQgdG8gcHJvdmlkZSBjb21wYXRp
YmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwvYXBwbHkgcGF0dGVybnMuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzY3OQotICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICghanNEeW5hbWljQ2Fz
dDxJbnRsSW5zdGFuY2UqPih2bSwgdGhpc1ZhbHVlKSkgewogICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IGNhbGxlZS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUp
OwotICAgICAgICBib29sIGhhc0luc3RhbmNlID0gSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5j
ZSgmc3RhdGUsIHRoaXNWYWx1ZSwgcHJvdG90eXBlKTsKKyAgICAgICAgYm9vbCBoYXNJbnN0YW5j
ZSA9IEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IHByb3RvdHlwZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUo
KSk7CiAgICAgICAgIGlmIChoYXNJbnN0YW5jZSkgewotICAgICAgICAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKKyAgICAgICAgICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgICAg
ICAgICBJbnRsSW5zdGFuY2UqIGluc3RhbmNlID0gZmFjdG9yeSh2bSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzLmNwcAppbmRleCA5NjAwMTAy
YmI5ODk3Nzc3MjZiODhhZjk4NmQ3OWE2ODExNjhhOGE2Li5hNDFkODBjMjIwOWQ3YWExYjcwYzkw
NDg3OWQzMWI1MmJhMzJjYmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsUGx1cmFsUnVsZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxQbHVyYWxSdWxlcy5jcHAKQEAgLTEwMyw2NSArMTAzLDY1IEBAIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiBsb2NhbGVEYXRhKGNvbnN0IFN0cmluZyYsIHNpemVfdCkKIH0KIH0KIAotdm9p
ZCBJbnRsUGx1cmFsUnVsZXM6OmluaXRpYWxpemVQbHVyYWxSdWxlcyhFeGVjU3RhdGUmIGV4ZWMs
IEpTVmFsdWUgbG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCit2b2lkIEludGxQbHVyYWxS
dWxlczo6aW5pdGlhbGl6ZVBsdXJhbFJ1bGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgbG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAxMy4xLjEgSW5pdGlhbGl6
ZVBsdXJhbFJ1bGVzIChwbHVyYWxSdWxlcywgbG9jYWxlcywgb3B0aW9ucykKICAgICAvLyBodHRw
czovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1pbml0aWFsaXplcGx1cmFscnVsZXMKLSAg
ICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlz
dChleGVjLCBsb2NhbGVzKTsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0g
Y2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGxvY2FsZXMpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBKU09iamVjdCogb3B0aW9uczsK
ICAgICBpZiAob3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIG9wdGlvbnMgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYywgZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51
bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG9wdGlvbnMgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdCh2bSwgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0
dXJlKCkpOwogICAgIGVsc2UgewotICAgICAgICBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2Jq
ZWN0KCZleGVjKTsKKyAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNWYWx1ZS50b09iamVjdChnbG9i
YWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgIH0KIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGxvY2FsZU9wdDsKLSAgICBTdHJp
bmcgbG9jYWxlTWF0Y2hlciA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJv
cGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9j
YWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJi
ZXN0IGZpdCIpOworICAgIFN0cmluZyBsb2NhbGVNYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihn
bG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsg
Imxvb2t1cCIsICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJs
b29rdXBcIiBvciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQiKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGxvY2FsZU9wdC5hZGQodm0ucHJvcGVydHlOYW1l
cy0+bG9jYWxlTWF0Y2hlci5zdHJpbmcoKSwgbG9jYWxlTWF0Y2hlcik7CiAKLSAgICBjb25zdCBI
YXNoU2V0PFN0cmluZz4gYXZhaWxhYmxlTG9jYWxlcyA9IGV4ZWMuanNDYWxsZWUoKS0+Z2xvYmFs
T2JqZWN0KHZtKS0+aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKLSAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiByZXNvbHZlZCA9IHJlc29sdmVMb2NhbGUoZXhlYywgYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlT3B0LCBudWxscHRyLCAwLCBJbnRs
UFJJbnRlcm5hbDo6bG9jYWxlRGF0YSk7CisgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+IGF2YWls
YWJsZUxvY2FsZXMgPSBnbG9iYWxPYmplY3QtPmludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcmVzb2x2ZWQgPSByZXNvbHZlTG9j
YWxlKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9j
YWxlT3B0LCBudWxscHRyLCAwLCBJbnRsUFJJbnRlcm5hbDo6bG9jYWxlRGF0YSk7CiAgICAgbV9s
b2NhbGUgPSByZXNvbHZlZC5nZXQodm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLnN0cmluZygpKTsK
ICAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZl
eGVjLCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIFBsdXJhbFJ1bGVzIGR1ZSB0byBpbnZh
bGlkIGxvY2FsZSJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBQbHVyYWxSdWxlcyBkdWUgdG8gaW52YWxpZCBsb2Nh
bGUiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU3RyaW5nIHR5cGVTdHJpbmcg
PSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ0eXBlIiksIHsgImNhcmRpbmFsIiwgIm9yZGluYWwiIH0sICJ0eXBlIG11c3QgYmUgXCJj
YXJkaW5hbFwiIG9yIFwib3JkaW5hbFwiIiwgImNhcmRpbmFsIik7CisgICAgU3RyaW5nIHR5cGVT
dHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiKSwgeyAiY2FyZGluYWwiLCAib3JkaW5hbCIgfSwgInR5
cGUgbXVzdCBiZSBcImNhcmRpbmFsXCIgb3IgXCJvcmRpbmFsXCIiLCAiY2FyZGluYWwiKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIG1fdHlwZSA9IHR5cGVT
dHJpbmcgPT0gIm9yZGluYWwiID8gVVBMVVJBTF9UWVBFX09SRElOQUwgOiBVUExVUkFMX1RZUEVf
Q0FSRElOQUw7CiAKLSAgICB1bnNpZ25lZCBtaW5pbXVtSW50ZWdlckRpZ2l0cyA9IGludGxOdW1i
ZXJPcHRpb24oZXhlYywgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1pbmlt
dW1JbnRlZ2VyRGlnaXRzIiksIDEsIDIxLCAxKTsKKyAgICB1bnNpZ25lZCBtaW5pbXVtSW50ZWdl
ckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgbV9taW5pbXVtSW50
ZWdlckRpZ2l0cyA9IG1pbmltdW1JbnRlZ2VyRGlnaXRzOwogCiAgICAgdW5zaWduZWQgbWluaW11
bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCA9IDA7Ci0gICAgdW5zaWduZWQgbWluaW11bUZyYWN0aW9u
RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihleGVjLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVtRnJhY3Rp
b25EaWdpdHNEZWZhdWx0KTsKKyAgICB1bnNpZ25lZCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBp
bnRsTnVtYmVyT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIpLCAwLCAyMCwgbWluaW11bUZyYWN0aW9u
RGlnaXRzRGVmYXVsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICBtX21pbmltdW1GcmFjdGlvbkRpZ2l0cyA9IG1pbmltdW1GcmFjdGlvbkRpZ2l0czsKIAog
ICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQgPSBzdGQ6Om1heChtaW5p
bXVtRnJhY3Rpb25EaWdpdHMsIDN1KTsKLSAgICB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdp
dHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiKSwgbWluaW11bUZyYWN0aW9uRGlnaXRzLCAy
MCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7CisgICAgdW5zaWduZWQgbWF4aW11bUZy
YWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiKSwgbWluaW11
bUZyYWN0aW9uRGlnaXRzLCAyMCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzRGVmYXVsdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBtX21heGltdW1GcmFjdGlv
bkRpZ2l0cyA9IG1heGltdW1GcmFjdGlvbkRpZ2l0czsKIAotICAgIEpTVmFsdWUgbWluaW11bVNp
Z25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CisgICAgSlNWYWx1ZSBt
aW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMtPmdldChnbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIEpTVmFsdWUg
bWF4aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CisgICAg
SlNWYWx1ZSBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMtPmdldChnbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtYXhpbXVtU2lnbmlmaWNhbnRE
aWdpdHMiKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAg
IGlmICghbWluaW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUuaXNVbmRlZmluZWQoKSB8fCAhbWF4
aW11bVNpZ25pZmljYW50RGlnaXRzVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICB1bnNp
Z25lZCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKGV4ZWMsIG9w
dGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdp
dHMiKSwgMSwgMjEsIDEpOworICAgICAgICB1bnNpZ25lZCBtaW5pbXVtU2lnbmlmaWNhbnREaWdp
dHMgPSBpbnRsTnVtYmVyT3B0aW9uKGdsb2JhbE9iamVjdCwgb3B0aW9ucywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIpLCAxLCAyMSwgMSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIHVuc2ln
bmVkIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oZXhlYywgb3B0
aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0
cyIpLCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMsIDIxLCAyMSk7CisgICAgICAgIHVuc2lnbmVk
IG1heGltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oZ2xvYmFsT2JqZWN0
LCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bVNpZ25pZmljYW50
RGlnaXRzIiksIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cywgMjEsIDIxKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgbV9taW5pbXVtU2lnbmlm
aWNhbnREaWdpdHMgPSBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHM7CiAgICAgICAgIG1fbWF4aW11
bVNpZ25pZmljYW50RGlnaXRzID0gbWF4aW11bVNpZ25pZmljYW50RGlnaXRzOwpAQCAtMTcwLDcg
KzE3MCw3IEBAIHZvaWQgSW50bFBsdXJhbFJ1bGVzOjppbml0aWFsaXplUGx1cmFsUnVsZXMoRXhl
Y1N0YXRlJiBleGVjLCBKU1ZhbHVlIGxvY2FsZXMsIEpTCiAgICAgVUVycm9yQ29kZSBzdGF0dXMg
PSBVX1pFUk9fRVJST1I7CiAgICAgbV9udW1iZXJGb3JtYXQgPSBzdGQ6OnVuaXF1ZV9wdHI8VU51
bWJlckZvcm1hdCwgVU51bWJlckZvcm1hdERlbGV0ZXI+KHVudW1fb3BlbihVTlVNX0RFQ0lNQUws
IG51bGxwdHIsIDAsIG1fbG9jYWxlLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIsICZzdGF0dXMpKTsK
ICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmV4
ZWMsIHNjb3BlLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgUGx1cmFsUnVsZXMiX3MpOworICAgICAg
ICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGluaXRpYWxp
emUgUGx1cmFsUnVsZXMiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xODcsMjYg
KzE4NywyNiBAQCB2b2lkIEludGxQbHVyYWxSdWxlczo6aW5pdGlhbGl6ZVBsdXJhbFJ1bGVzKEV4
ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSBsb2NhbGVzLCBKUwogICAgIHN0YXR1cyA9IFVfWkVST19F
UlJPUjsKICAgICBtX3BsdXJhbFJ1bGVzID0gc3RkOjp1bmlxdWVfcHRyPFVQbHVyYWxSdWxlcywg
VVBsdXJhbFJ1bGVzRGVsZXRlcj4odXBscnVsZXNfb3BlbkZvclR5cGUobV9sb2NhbGUudXRmOCgp
LmRhdGEoKSwgbV90eXBlLCAmc3RhdHVzKSk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7
Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZleGVjLCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFs
aXplIFBsdXJhbFJ1bGVzIl9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIFBsdXJhbFJ1bGVzIl9zKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIG1faW5pdGlhbGl6ZWRQbHVyYWxSdWxlcyA9IHRydWU7CiB9
CiAKLUpTT2JqZWN0KiBJbnRsUGx1cmFsUnVsZXM6OnJlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUm
IGV4ZWMpCitKU09iamVjdCogSW50bFBsdXJhbFJ1bGVzOjpyZXNvbHZlZE9wdGlvbnMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDEzLjQuNCBJbnRsLlBsdXJhbFJ1bGVzLnByb3RvdHlw
ZS5yZXNvbHZlZE9wdGlvbnMgKCkKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0
MDIvI3NlYy1pbnRsLnBsdXJhbHJ1bGVzLnByb3RvdHlwZS5yZXNvbHZlZG9wdGlvbnMKICAgICBp
ZiAoVU5MSUtFTFkoIW1faW5pdGlhbGl6ZWRQbHVyYWxSdWxlcykpIHsKLSAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJmV4ZWMsIHNjb3BlLCAiSW50bC5QbHVyYWxSdWxlcy5wcm90b3R5cGUucmVzb2x2
ZWRPcHRpb25zIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXpl
ZCBhcyBhIFBsdXJhbFJ1bGVzIl9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkludGwuUGx1cmFsUnVsZXMucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucyBj
YWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBQbHVy
YWxSdWxlcyJfcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIEpTT2Jq
ZWN0KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOworICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNOb250cml2aWFs
U3RyaW5nKHZtLCBtX2xvY2FsZSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInR5cGUiKSwganNOb250cml2aWFsU3RyaW5nKHZtLCBtX3R5
cGUgPT0gVVBMVVJBTF9UWVBFX09SRElOQUwgPyAib3JkaW5hbCJfcyA6ICJjYXJkaW5hbCJfcykp
OwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
Im1pbmltdW1JbnRlZ2VyRGlnaXRzIiksIGpzTnVtYmVyKG1fbWluaW11bUludGVnZXJEaWdpdHMp
KTsKQEAgLTIxOCwxMCArMjE4LDkgQEAgSlNPYmplY3QqIEludGxQbHVyYWxSdWxlczo6cmVzb2x2
ZWRPcHRpb25zKEV4ZWNTdGF0ZSYgZXhlYykKICAgICB9CiAKICNpZiBIQVZFKElDVV9QTFVSQUxS
VUxFU19LRVlXT1JEUykKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy5q
c0NhbGxlZSgpLT5nbG9iYWxPYmplY3Qodm0pOwogICAgIEpTQXJyYXkqIGNhdGVnb3JpZXMgPSBK
U0FycmF5Ojp0cnlDcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpLCAwKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhdGVnb3JpZXMpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cigmZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMjM0LDcg
KzIzMyw3IEBAIEpTT2JqZWN0KiBJbnRsUGx1cmFsUnVsZXM6OnJlc29sdmVkT3B0aW9ucyhFeGVj
U3RhdGUmIGV4ZWMpCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIHdoaWxlIChjb25zdCBj
aGFyKiByZXN1bHQgPSB1ZW51bV9uZXh0KGtleXdvcmRzLmdldCgpLCAmcmVzdWx0TGVuZ3RoLCAm
c3RhdHVzKSkgewogICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwotICAgICAgICBj
YXRlZ29yaWVzLT5wdXREaXJlY3RJbmRleCgmZXhlYywgaW5kZXgrKywganNOb250cml2aWFsU3Ry
aW5nKHZtLCBTdHJpbmcocmVzdWx0LCByZXN1bHRMZW5ndGgpKSk7CisgICAgICAgIGNhdGVnb3Jp
ZXMtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgrKywganNOb250cml2aWFsU3Ry
aW5nKHZtLCBTdHJpbmcocmVzdWx0LCByZXN1bHRMZW5ndGgpKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBsdXJhbENhdGVnb3JpZXMiKSwgY2F0ZWdv
cmllcyk7CkBAIC0yNDMsMTUgKzI0MiwxNSBAQCBKU09iamVjdCogSW50bFBsdXJhbFJ1bGVzOjpy
ZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlJiBleGVjKQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgb3B0aW9ucyk7CiB9CiAKLUpTVmFsdWUgSW50bFBsdXJhbFJ1bGVzOjpzZWxlY3QoRXhl
Y1N0YXRlJiBleGVjLCBkb3VibGUgdmFsdWUpCitKU1ZhbHVlIEludGxQbHVyYWxSdWxlczo6c2Vs
ZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSB2YWx1ZSkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDEzLjEuNCBS
ZXNvbHZlUGx1cmFsIChwbHVyYWxSdWxlcywgbikKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHVi
LmlvL2VjbWE0MDIvI3NlYy1yZXNvbHZlcGx1cmFsCiAgICAgaWYgKCFtX2luaXRpYWxpemVkUGx1
cmFsUnVsZXMpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmZXhlYywgc2NvcGUsICJJ
bnRsLlBsdXJhbFJ1bGVzLnByb3RvdHlwZS5zZWxlY3QgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBu
b3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgUGx1cmFsUnVsZXMiX3MpOworICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkludGwuUGx1cmFsUnVs
ZXMucHJvdG90eXBlLnNlbGVjdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3Qg
aW5pdGlhbGl6ZWQgYXMgYSBQbHVyYWxSdWxlcyJfcyk7CiAKICAgICBpZiAoIXN0ZDo6aXNmaW5p
dGUodmFsdWUpKQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKHZtLCAib3RoZXIi
X3MpOwpAQCAtMjYxLDcgKzI2MCw3IEBAIEpTVmFsdWUgSW50bFBsdXJhbFJ1bGVzOjpzZWxlY3Qo
RXhlY1N0YXRlJiBleGVjLCBkb3VibGUgdmFsdWUpCiAgICAgVmVjdG9yPFVDaGFyLCA4PiByZXN1
bHQoOCk7CiAgICAgYXV0byBsZW5ndGggPSB1cGxydWxlc19zZWxlY3RXaXRoRm9ybWF0KG1fcGx1
cmFsUnVsZXMuZ2V0KCksIHZhbHVlLCBtX251bWJlckZvcm1hdC5nZXQoKSwgcmVzdWx0LmRhdGEo
KSwgcmVzdWx0LnNpemUoKSwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQot
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJmV4ZWMsIHNjb3BlLCAiZmFpbGVkIHRvIHNl
bGVjdCBwbHVyYWwgdmFsdWUiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBzZWxlY3QgcGx1cmFsIHZhbHVlIl9zKTsKICNl
bHNlCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgVmVjdG9yPFVD
aGFyLCAzMj4gYnVmZmVyKDMyKTsKQEAgLTI3MiwxOCArMjcxLDE4IEBAIEpTVmFsdWUgSW50bFBs
dXJhbFJ1bGVzOjpzZWxlY3QoRXhlY1N0YXRlJiBleGVjLCBkb3VibGUgdmFsdWUpCiAgICAgICAg
IHVudW1fZm9ybWF0RG91YmxlKG1fbnVtYmVyRm9ybWF0LmdldCgpLCB2YWx1ZSwgYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoLCBudWxscHRyLCAmc3RhdHVzKTsKICAgICB9CiAgICAgaWYgKFVfRkFJTFVS
RShzdGF0dXMpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJmV4ZWMsIHNjb3BlLCAi
ZmFpbGVkIHRvIHNlbGVjdCBwbHVyYWwgdmFsdWUiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBzZWxlY3QgcGx1cmFsIHZh
bHVlIl9zKTsKIAogICAgIGRvdWJsZSBmb3JtYXR0ZWQgPSB1bnVtX3BhcnNlRG91YmxlKG1fbnVt
YmVyRm9ybWF0LmdldCgpLCBidWZmZXIuZGF0YSgpLCBsZW5ndGgsIG51bGxwdHIsICZzdGF0dXMp
OwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKCZleGVjLCBzY29wZSwgImZhaWxlZCB0byBzZWxlY3QgcGx1cmFsIHZhbHVlIl9zKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQg
dG8gc2VsZWN0IHBsdXJhbCB2YWx1ZSJfcyk7CiAKICAgICAvLyBDYW4gb25seSBiZSAnemVybycs
ICdvbmUnLCAndHdvJywgJ2ZldycsICdtYW55JyBvciAnb3RoZXInCiAgICAgc3RhdHVzID0gVV9a
RVJPX0VSUk9SOwogICAgIFZlY3RvcjxVQ2hhciwgOD4gcmVzdWx0KDgpOwogICAgIGxlbmd0aCA9
IHVwbHJ1bGVzX3NlbGVjdChtX3BsdXJhbFJ1bGVzLmdldCgpLCBmb3JtYXR0ZWQsIHJlc3VsdC5k
YXRhKCksIHJlc3VsdC5zaXplKCksICZzdGF0dXMpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVz
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZleGVjLCBzY29wZSwgImZhaWxlZCB0
byBzZWxlY3QgcGx1cmFsIHZhbHVlIl9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gc2VsZWN0IHBsdXJhbCB2YWx1ZSJfcyk7
CiAjZW5kaWYKIAogICAgIHJldHVybiBqc1N0cmluZyh2bSwgU3RyaW5nKHJlc3VsdC5kYXRhKCks
IGxlbmd0aCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bFBsdXJhbFJ1bGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFs
UnVsZXMuaAppbmRleCA2OGY1NGY5MDY1NjA3MjZiNmIwNzY2OGY4N2U1MTJlMjE5ZDQwNGJlLi5j
NDBlZTYxYTY5YTYwY2ExYjdhMTkzMDIzYjE3OWRkMzQ5OGQ5NDAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXMuaApAQCAtNDksOSArNDksOSBA
QCBjbGFzcyBJbnRsUGx1cmFsUnVsZXMgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgewogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgdm9pZCBpbml0aWFsaXplUGx1cmFsUnVs
ZXMoRXhlY1N0YXRlJiwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpOwotICAgIEpT
VmFsdWUgc2VsZWN0KEV4ZWNTdGF0ZSYsIGRvdWJsZSB2YWx1ZSk7Ci0gICAgSlNPYmplY3QqIHJl
c29sdmVkT3B0aW9ucyhFeGVjU3RhdGUmKTsKKyAgICB2b2lkIGluaXRpYWxpemVQbHVyYWxSdWxl
cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zKTsKKyAg
ICBKU1ZhbHVlIHNlbGVjdChKU0dsb2JhbE9iamVjdCosIGRvdWJsZSB2YWx1ZSk7CisgICAgSlNP
YmplY3QqIHJlc29sdmVkT3B0aW9ucyhKU0dsb2JhbE9iamVjdCopOwogCiBwcm90ZWN0ZWQ6CiAg
ICAgSW50bFBsdXJhbFJ1bGVzKFZNJiwgU3RydWN0dXJlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvci5j
cHAKaW5kZXggMzdhY2M4OWUxNjYxYTMwOGE0OTE0YmUyMTA2OThjMjRhYmEwZTBmMi4uYzQzNzA5
NzM2YmU5NjM5YzFlZTA4YWQ5Y2MwZDc2NWQ5ZWYyYmI2MiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJhbFJ1bGVzQ29uc3RydWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9y
LmNwcApAQCAtOTAsMjQgKzkwLDI0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEludGxQbHVyYWxSdWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvCiAKICAgICAv
LyAxMy4yLjEgSW50bC5QbHVyYWxSdWxlcyAoWyBsb2NhbGVzIFsgLCBvcHRpb25zIF0gXSkKICAg
ICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWE0MDIvI3NlYy1pbnRsLnBsdXJhbHJ1bGVz
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxJ
bnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSktPnBsdXJh
bFJ1bGVzU3RydWN0dXJlKHZtKSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5h
bEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxQbHVyYWxS
dWxlc0NvbnN0cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+cGx1cmFsUnVsZXNTdHJ1
Y3R1cmUodm0pKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBJbnRsUGx1cmFsUnVsZXMqIHBsdXJhbFJ1bGVzID0gSW50bFBsdXJhbFJ1bGVz
OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgQVNTRVJUKHBsdXJhbFJ1bGVzKTsKIAogICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICBwbHVyYWxSdWxlcy0+aW5pdGlhbGl6ZVBsdXJhbFJ1bGVz
KCpjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQo
MSkpOworICAgIHBsdXJhbFJ1bGVzLT5pbml0aWFsaXplUGx1cmFsUnVsZXMoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHBsdXJhbFJ1bGVzKTsKIH0KIAotc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEludGxQbHVyYWxSdWxlcyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxJbnRsUGx1cmFsUnVsZXMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMTMu
Mi4xIEludGwuUGx1cmFsUnVsZXMgKFsgbG9jYWxlcyBbICwgb3B0aW9ucyBdIF0pCiAgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNzZWMtaW50bC5wbHVyYWxydWxlcwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNG
dW5jdGlvblR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiUGx1cmFsUnVsZXMiKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1
bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQbHVyYWxSdWxlcyIpKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsUGx1cmFsUnVsZXNDb25zdHJ1Y3Rv
ckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xMTksMTAgKzExOSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEludGxQbHVyYWxSdWxlc0NvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2Fs
ZXNPZihKUwogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jc2VjLWludGwu
cGx1cmFscnVsZXMuc3VwcG9ydGVkbG9jYWxlc29mCiAgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+
IGF2YWlsYWJsZUxvY2FsZXMgPSBnbG9iYWxPYmplY3QtPmludGxOdW1iZXJGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCk7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fu
b25pY2FsaXplTG9jYWxlTGlzdCgqY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsK
KyAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxl
TGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcygqY2FsbEZyYW1l
LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDEpKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHN1
cHBvcnRlZExvY2FsZXMoZ2xvYmFsT2JqZWN0LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRM
b2NhbGVzLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxS
dWxlc1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsUGx1
cmFsUnVsZXNQcm90b3R5cGUuY3BwCmluZGV4IDFiZmNkNDNkZDJlOWNhNWYyMWYyNmFhMmU3MDAw
NzUyYTI5NzMxYmMuLjIzZjgxMmNiMjE5NGY3MTVlODhjZDkzMTA1Y2Y4ODIxMTdiMTVlZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxQbHVyYWxSdWxlc1By
b3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bFBsdXJh
bFJ1bGVzUHJvdG90eXBlLmNwcApAQCAtODgsMTIgKzg4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlRnVuY1NlbGVjdChKU0dsb2JhbE9i
amVjdCoKICAgICBJbnRsUGx1cmFsUnVsZXMqIHBsdXJhbFJ1bGVzID0ganNEeW5hbWljQ2FzdDxJ
bnRsUGx1cmFsUnVsZXMqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAKICAgICBpZiAo
IXBsdXJhbFJ1bGVzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVy
cm9yKGNhbGxGcmFtZSwgc2NvcGUsICJJbnRsLlBsdXJhbFJ1bGVzLnByb3RvdHlwZS5zZWxlY3Qg
Y2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgUGx1
cmFsUnVsZXMiX3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiSW50bC5QbHVyYWxSdWxlcy5wcm90b3R5cGUuc2Vs
ZWN0IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBh
IFBsdXJhbFJ1bGVzIl9zKSk7CiAKLSAgICBkb3VibGUgdmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSk7CisgICAgZG91YmxlIHZhbHVlID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKS50b051bWJlcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUocGx1cmFsUnVsZXMtPnNlbGVjdCgqY2FsbEZyYW1lLCB2
YWx1ZSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShw
bHVyYWxSdWxlcy0+c2VsZWN0KGdsb2JhbE9iamVjdCwgdmFsdWUpKSk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bFBsdXJhbFJ1bGVzUHJvdG90eXBlRnVuY1Jlc29sdmVk
T3B0aW9ucyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKQEAgLTEwNiw5ICsxMDYsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxQ
bHVyYWxSdWxlc1Byb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMoSlNHbG9iYQogICAgIEludGxQ
bHVyYWxSdWxlcyogcGx1cmFsUnVsZXMgPSBqc0R5bmFtaWNDYXN0PEludGxQbHVyYWxSdWxlcyo+
KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKIAogICAgIGlmICghcGx1cmFsUnVsZXMpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBz
Y29wZSwgIkludGwuUGx1cmFsUnVsZXMucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucyBjYWxsZWQg
b24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBQbHVyYWxSdWxl
cyJfcykpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJJbnRsLlBsdXJhbFJ1bGVzLnByb3RvdHlwZS5yZXNvbHZlZE9w
dGlvbnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFz
IGEgUGx1cmFsUnVsZXMiX3MpKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKHBsdXJhbFJ1bGVzLT5yZXNvbHZlZE9wdGlvbnMoKmNhbGxGcmFtZSkpKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShwbHVyYWxSdWxl
cy0+cmVzb2x2ZWRPcHRpb25zKGdsb2JhbE9iamVjdCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVy
YXRpb25zLmNwcAppbmRleCAxNDFhMTQ3M2VmOTlkOTc5MGQyNjc4OTA0Y2I1OWQwMmZhYWQ0YzBm
Li43NzczYzE3YTkwMDAzMmVhZmY1NDNiYjYyZmY1MDE5ZDA0NzQ4YWY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAKQEAg
LTM0LDkgKzM0LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTVmFsdWUgaXRlcmF0b3JOZXh0
KEV4ZWNTdGF0ZSogZXhlYywgSXRlcmF0aW9uUmVjb3JkIGl0ZXJhdGlvblJlY29yZCwgSlNWYWx1
ZSBhcmd1bWVudCkKK0pTVmFsdWUgaXRlcmF0b3JOZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEl0ZXJhdGlvblJlY29yZCBpdGVyYXRpb25SZWNvcmQsIEpTVmFsdWUgYXJndW1lbnQp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
SlNWYWx1ZSBpdGVyYXRvciA9IGl0ZXJhdGlvblJlY29yZC5pdGVyYXRvcjsKQEAgLTQ1LDQ5ICs0
NSw0OSBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEl0ZXJhdGlvblJl
Y29yZCBpdGVyYXRpb25SZWNvcmQsIEpTVmFsdWUgYQogICAgIENhbGxEYXRhIG5leHRGdW5jdGlv
bkNhbGxEYXRhOwogICAgIENhbGxUeXBlIG5leHRGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERh
dGEodm0sIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEpOwogICAgIGlmIChuZXh0
RnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbmV4dEZ1bmN0
aW9uQXJndW1lbnRzOwogICAgIGlmICghYXJndW1lbnQuaXNFbXB0eSgpKQogICAgICAgICBuZXh0
RnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsKICAgICBBU1NFUlQoIW5leHRGdW5j
dGlvbkFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gY2Fs
bChleGVjLCBuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25D
YWxsRGF0YSwgaXRlcmF0b3IsIG5leHRGdW5jdGlvbkFyZ3VtZW50cyk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWxsKGdsb2JhbE9iamVjdCwgbmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxs
VHlwZSwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCBuZXh0RnVuY3Rpb25Bcmd1bWVu
dHMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBp
ZiAoIXJlc3VsdC5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsICJJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIl9z
KTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJJ
dGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIl9zKTsKIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgaXRlcmF0b3JWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgaXRlclJlc3VsdCkKK0pTVmFsdWUgaXRlcmF0b3JWYWx1ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZXJSZXN1bHQpCiB7Ci0gICAgcmV0dXJuIGl0ZXJS
ZXN1bHQuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUpOworICAgIHJl
dHVybiBpdGVyUmVzdWx0LmdldChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dm0oKS5wcm9w
ZXJ0eU5hbWVzLT52YWx1ZSk7CiB9CiAKLWJvb2wgaXRlcmF0b3JDb21wbGV0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgaXRlclJlc3VsdCkKK2Jvb2wgaXRlcmF0b3JDb21wbGV0ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZXJSZXN1bHQpCiB7Ci0gICAgSlNWYWx1
ZSBkb25lID0gaXRlclJlc3VsdC5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5k
b25lKTsKLSAgICByZXR1cm4gZG9uZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgSlNWYWx1ZSBkb25l
ID0gaXRlclJlc3VsdC5nZXQoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZtKCkucHJvcGVy
dHlOYW1lcy0+ZG9uZSk7CisgICAgcmV0dXJuIGRvbmUudG9Cb29sZWFuKGdsb2JhbE9iamVjdCk7
CiB9CiAKLUpTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNTdGF0ZSogZXhlYywgSXRlcmF0aW9uUmVj
b3JkIGl0ZXJhdGlvblJlY29yZCkKK0pTVmFsdWUgaXRlcmF0b3JTdGVwKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEl0ZXJhdGlvblJlY29yZCBpdGVyYXRpb25SZWNvcmQpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBpdGVyYXRvck5leHQoZXhlYywgaXRlcmF0aW9uUmVjb3JkKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGl0ZXJhdG9yTmV4dChnbG9iYWxPYmplY3QsIGl0ZXJhdGlvblJlY29yZCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKLSAgICBib29sIGRvbmUg
PSBpdGVyYXRvckNvbXBsZXRlKGV4ZWMsIHJlc3VsdCk7CisgICAgYm9vbCBkb25lID0gaXRlcmF0
b3JDb21wbGV0ZShnbG9iYWxPYmplY3QsIHJlc3VsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBpZiAoZG9uZSkKICAgICAgICAgcmV0dXJuIGpzQm9v
bGVhbihmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBpdGVyYXRvckNsb3Nl
KEV4ZWNTdGF0ZSogZXhlYywgSXRlcmF0aW9uUmVjb3JkIGl0ZXJhdGlvblJlY29yZCkKK3ZvaWQg
aXRlcmF0b3JDbG9zZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJdGVyYXRpb25SZWNv
cmQgaXRlcmF0aW9uUmVjb3JkKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOwogCkBAIC05NiwxMiArOTYsMTIgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0
ZSogZXhlYywgSXRlcmF0aW9uUmVjb3JkIGl0ZXJhdGlvblJlY29yZCkKICAgICAgICAgZXhjZXB0
aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKICAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgIH0KLSAgICBKU1ZhbHVlIHJldHVybkZ1bmN0aW9uID0gaXRlcmF0aW9u
UmVjb3JkLml0ZXJhdG9yLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5yZXR1cm5LZXl3b3Jk
KTsKKyAgICBKU1ZhbHVlIHJldHVybkZ1bmN0aW9uID0gaXRlcmF0aW9uUmVjb3JkLml0ZXJhdG9y
LmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnJldHVybktleXdvcmQpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdm9pZCgpKTsKIAogICAgIGlmIChyZXR1
cm5GdW5jdGlvbi5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworICAg
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBleGNlcHRp
b24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDksMjUgKzEwOSwyNSBAQCB2b2lk
IGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBJdGVyYXRpb25SZWNvcmQgaXRlcmF0aW9u
UmVjb3JkKQogICAgIENhbGxUeXBlIHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0
YSh2bSwgcmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2FsbERhdGEpOwogICAgIGlmIChy
ZXR1cm5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgIGlmIChl
eGNlcHRpb24pCi0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBl
eGNlcHRpb24pOworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBleGNlcHRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciByZXR1cm5GdW5jdGlvbkFyZ3VtZW50czsKICAgICBBU1NFUlQoIXJl
dHVybkZ1bmN0aW9uQXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgSlNWYWx1ZSBpbm5l
clJlc3VsdCA9IGNhbGwoZXhlYywgcmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2FsbFR5
cGUsIHJldHVybkZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdGlvblJlY29yZC5pdGVyYXRvciwgcmV0
dXJuRnVuY3Rpb25Bcmd1bWVudHMpOworICAgIEpTVmFsdWUgaW5uZXJSZXN1bHQgPSBjYWxsKGds
b2JhbE9iamVjdCwgcmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUsIHJldHVy
bkZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdGlvblJlY29yZC5pdGVyYXRvciwgcmV0dXJuRnVuY3Rp
b25Bcmd1bWVudHMpOwogCiAgICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBleGNlcHRpb24pOworICAgICAgICB0aHJvd0V4Y2VwdGlv
bihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHZvaWQoKSk7CiAK
ICAgICBpZiAoIWlubmVyUmVzdWx0LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgdGhyb3dTY29wZSwgIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFu
IG9iamVjdC4iX3MpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsICJJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIl9zKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTE0NiwxOCArMTQ2LDE4IEBAIFN0cnVjdHVy
ZSogY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqCiAgICAgcmV0dXJuIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlOwogfQog
Ci1KU09iamVjdCogY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlLCBib29sIGRvbmUpCitKU09iamVjdCogY3JlYXRlSXRlcmF0b3JSZXN1bHRP
YmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBk
b25lKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNPYmplY3QqIHJlc3VsdE9i
amVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+aXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIEpTT2JqZWN0KiByZXN1bHRPYmplY3QgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdCh2bSwgZ2xvYmFsT2JqZWN0LT5pdGVyYXRvclJlc3VsdE9iamVjdFN0cnVjdHVy
ZSgpKTsKICAgICByZXN1bHRPYmplY3QtPnB1dERpcmVjdCh2bSwgdmFsdWVQcm9wZXJ0eU9mZnNl
dCwgdmFsdWUpOwogICAgIHJlc3VsdE9iamVjdC0+cHV0RGlyZWN0KHZtLCBkb25lUHJvcGVydHlP
ZmZzZXQsIGpzQm9vbGVhbihkb25lKSk7CiAgICAgcmV0dXJuIHJlc3VsdE9iamVjdDsKIH0KIAot
Ym9vbCBoYXNJdGVyYXRvck1ldGhvZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQor
Ym9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCkBAIC0xNjYsNzcgKzE2Niw3NyBA
QCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBKU1ZhbHVlIGFwcGx5TWV0aG9k
ID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCAiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNob3Vs
ZCBiZSBjYWxsYWJsZSJfcyk7CisgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0
TWV0aG9kKGdsb2JhbE9iamVjdCwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVz
LT5pdGVyYXRvclN5bWJvbCwgIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2Fs
bGFibGUiX3MpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAg
IHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBpdGVyYXRv
ck1ldGhvZChFeGVjU3RhdGUmIHN0YXRlLCBKU09iamVjdCogb2JqZWN0KQorSlNWYWx1ZSBpdGVy
YXRvck1ldGhvZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0
KQogewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBKU1Zh
bHVlIG1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBl
LCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgIlN5bWJvbC5pdGVyYXRvciBwcm9w
ZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiX3MpOworICAgIEpTVmFsdWUgbWV0aG9kID0gb2JqZWN0
LT5nZXRNZXRob2QoZ2xvYmFsT2JqZWN0LCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5
TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCAiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBi
ZSBjYWxsYWJsZSJfcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwganNVbmRlZmlu
ZWQoKSk7CiAKICAgICByZXR1cm4gbWV0aG9kOwogfQogCi1JdGVyYXRpb25SZWNvcmQgaXRlcmF0
b3JGb3JJdGVyYWJsZShFeGVjU3RhdGUmIHN0YXRlLCBKU09iamVjdCogb2JqZWN0LCBKU1ZhbHVl
IGl0ZXJhdG9yTWV0aG9kKQorSXRlcmF0aW9uUmVjb3JkIGl0ZXJhdG9yRm9ySXRlcmFibGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgSlNWYWx1ZSBpdGVy
YXRvck1ldGhvZCkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBDYWxsRGF0YSBpdGVyYXRvck1ldGhvZENhbGxEYXRhOwogICAgIENhbGxUeXBl
IGl0ZXJhdG9yTWV0aG9kQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgaXRlcmF0b3JNZXRob2Qs
IGl0ZXJhdG9yTWV0aG9kQ2FsbERhdGEpOwogICAgIGlmIChpdGVyYXRvck1ldGhvZENhbGxUeXBl
ID09IENhbGxUeXBlOjpOb25lKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBcmdMaXN0IGl0ZXJhdG9yTWV0aG9kQXJndW1l
bnRzOwotICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKCZzdGF0ZSwgaXRlcmF0b3JNZXRob2Qs
IGl0ZXJhdG9yTWV0aG9kQ2FsbFR5cGUsIGl0ZXJhdG9yTWV0aG9kQ2FsbERhdGEsIG9iamVjdCwg
aXRlcmF0b3JNZXRob2RBcmd1bWVudHMpOworICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKGds
b2JhbE9iamVjdCwgaXRlcmF0b3JNZXRob2QsIGl0ZXJhdG9yTWV0aG9kQ2FsbFR5cGUsIGl0ZXJh
dG9yTWV0aG9kQ2FsbERhdGEsIG9iamVjdCwgaXRlcmF0b3JNZXRob2RBcmd1bWVudHMpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAoIWl0ZXJhdG9yLmlz
T2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAg
ICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIAotICAgIEpTVmFsdWUgbmV4dE1ldGhvZCA9IGl0ZXJhdG9yLmdldE9iamVj
dCgpLT5nZXQoJnN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0KTsKKyAgICBKU1ZhbHVlIG5l
eHRNZXRob2QgPSBpdGVyYXRvci5nZXRPYmplY3QoKS0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJv
cGVydHlOYW1lcy0+bmV4dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
IAogICAgIHJldHVybiB7IGl0ZXJhdG9yLCBuZXh0TWV0aG9kIH07CiB9CiAKLUl0ZXJhdGlvblJl
Y29yZCBpdGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgaXRlcmFi
bGUpCitJdGVyYXRpb25SZWNvcmQgaXRlcmF0b3JGb3JJdGVyYWJsZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGl0ZXJhYmxlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgCi0gICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmN0
aW9uID0gaXRlcmFibGUuZ2V0KHN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJv
bCk7CisgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmN0aW9uID0gaXRlcmFibGUuZ2V0KGdsb2JhbE9i
amVjdCwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgCiAgICAgQ2FsbERhdGEgaXRlcmF0b3JGdW5jdGlv
bkNhbGxEYXRhOwogICAgIENhbGxUeXBlIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSA9IGdldENh
bGxEYXRhKHZtLCBpdGVyYXRvckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEpOwog
ICAgIGlmIChpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAg
ICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzOwotICAgIEpTVmFsdWUgaXRlcmF0
b3IgPSBjYWxsKHN0YXRlLCBpdGVyYXRvckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5
cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmFibGUsIGl0ZXJhdG9yRnVuY3Rpb25B
cmd1bWVudHMpOworICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKGdsb2JhbE9iamVjdCwgaXRl
cmF0b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlLCBpdGVyYXRvckZ1bmN0aW9u
Q2FsbERhdGEsIGl0ZXJhYmxlLCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKCFpdGVyYXRvci5pc09iamVj
dCgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIEpTVmFsdWUgbmV4dE1ldGhvZCA9IGl0ZXJhdG9yLmdldE9iamVjdCgpLT5n
ZXQoc3RhdGUsIHZtLnByb3BlcnR5TmFtZXMtPm5leHQpOworICAgIEpTVmFsdWUgbmV4dE1ldGhv
ZCA9IGl0ZXJhdG9yLmdldE9iamVjdCgpLT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5h
bWVzLT5uZXh0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAg
cmV0dXJuIHsgaXRlcmF0b3IsIG5leHRNZXRob2QgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgKaW5kZXggNTkyYzkxNDIxZjk0NzE1
YzI1OGUxNzIzMzY1ZTY3NTI4ODhiMDBiNS4uMDFjZDMxYzQ5MTZjMGI1YTU1ODk3MDdkOTU0Mzdm
NzNkZmM1M2RiMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmgKQEAgLTM3LDY3ICszNyw2NyBAQCBzdHJ1Y3QgSXRlcmF0aW9uUmVj
b3JkIHsKICAgICBKU1ZhbHVlIG5leHRNZXRob2Q7CiB9OwogCi1KU1ZhbHVlIGl0ZXJhdG9yTmV4
dChFeGVjU3RhdGUqLCBJdGVyYXRpb25SZWNvcmQsIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVl
KCkpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBpdGVyYXRvclZhbHVlKEV4ZWNTdGF0ZSos
IEpTVmFsdWUgaXRlclJlc3VsdCk7Ci1ib29sIGl0ZXJhdG9yQ29tcGxldGUoRXhlY1N0YXRlKiwg
SlNWYWx1ZSBpdGVyUmVzdWx0KTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgaXRlcmF0b3JT
dGVwKEV4ZWNTdGF0ZSosIEl0ZXJhdGlvblJlY29yZCk7Ci1KU19FWFBPUlRfUFJJVkFURSB2b2lk
IGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiwgSXRlcmF0aW9uUmVjb3JkKTsKLUpTX0VYUE9SVF9Q
UklWQVRFIEpTT2JqZWN0KiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChFeGVjU3RhdGUqLCBK
U1ZhbHVlLCBib29sIGRvbmUpOworSlNWYWx1ZSBpdGVyYXRvck5leHQoSlNHbG9iYWxPYmplY3Qq
LCBJdGVyYXRpb25SZWNvcmQsIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlKCkpOworSlNfRVhQ
T1JUX1BSSVZBVEUgSlNWYWx1ZSBpdGVyYXRvclZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBpdGVyUmVzdWx0KTsKK2Jvb2wgaXRlcmF0b3JDb21wbGV0ZShKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgaXRlclJlc3VsdCk7CitKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGl0ZXJhdG9yU3Rl
cChKU0dsb2JhbE9iamVjdCosIEl0ZXJhdGlvblJlY29yZCk7CitKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGl0ZXJhdG9yQ2xvc2UoSlNHbG9iYWxPYmplY3QqLCBJdGVyYXRpb25SZWNvcmQpOworSlNf
RVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSwgYm9vbCBkb25lKTsKIAogU3RydWN0dXJlKiBjcmVhdGVJdGVy
YXRvclJlc3VsdE9iamVjdFN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Jik7CiAKLUpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgaXRlcmF0b3JNZXRob2QoRXhlY1N0YXRlJiwgSlNPYmplY3Qq
KTsKLUpTX0VYUE9SVF9QUklWQVRFIEl0ZXJhdGlvblJlY29yZCBpdGVyYXRvckZvckl0ZXJhYmxl
KEV4ZWNTdGF0ZSYsIEpTT2JqZWN0KiwgSlNWYWx1ZSBpdGVyYXRvck1ldGhvZCk7Ci1KU19FWFBP
UlRfUFJJVkFURSBJdGVyYXRpb25SZWNvcmQgaXRlcmF0b3JGb3JJdGVyYWJsZShFeGVjU3RhdGUq
LCBKU1ZhbHVlIGl0ZXJhYmxlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgaXRlcmF0b3JN
ZXRob2QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCopOworSlNfRVhQT1JUX1BSSVZBVEUgSXRl
cmF0aW9uUmVjb3JkIGl0ZXJhdG9yRm9ySXRlcmFibGUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCosIEpTVmFsdWUgaXRlcmF0b3JNZXRob2QpOworSlNfRVhQT1JUX1BSSVZBVEUgSXRlcmF0aW9u
UmVjb3JkIGl0ZXJhdG9yRm9ySXRlcmFibGUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIGl0ZXJh
YmxlKTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBpdGVyYXRvck1ldGhvZChFeGVjU3Rh
dGUmLCBKU09iamVjdCopOwotSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNJdGVyYXRvck1ldGhv
ZChFeGVjU3RhdGUmLCBKU1ZhbHVlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgaXRlcmF0
b3JNZXRob2QoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCopOworSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDYWxsQmFja1R5cGU+Ci12b2lkIGZvckVhY2hJbkl0ZXJhYmxlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYWJsZSwgY29uc3QgQ2FsbEJhY2tUeXBlJiBjYWxsYmFj
aykKK3ZvaWQgZm9yRWFjaEluSXRlcmFibGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBpdGVyYWJsZSwgY29uc3QgQ2FsbEJhY2tUeXBlJiBjYWxsYmFjaykKIHsKLSAgICBh
dXRvJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEl0ZXJh
dGlvblJlY29yZCBpdGVyYXRpb25SZWNvcmQgPSBpdGVyYXRvckZvckl0ZXJhYmxlKGV4ZWMsIGl0
ZXJhYmxlKTsKKyAgICBJdGVyYXRpb25SZWNvcmQgaXRlcmF0aW9uUmVjb3JkID0gaXRlcmF0b3JG
b3JJdGVyYWJsZShnbG9iYWxPYmplY3QsIGl0ZXJhYmxlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIEpTVmFsdWUg
bmV4dCA9IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRpb25SZWNvcmQpOworICAgICAgICBKU1Zh
bHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZ2xvYmFsT2JqZWN0LCBpdGVyYXRpb25SZWNvcmQpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8IG5leHQuaXNGYWxzZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEpTVmFsdWUgbmV4dFZhbHVlID0gaXRl
cmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKKyAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVy
YXRvclZhbHVlKGdsb2JhbE9iamVjdCwgbmV4dCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICAgICAgY2FsbGJhY2sodm0sIGV4ZWMsIG5leHRWYWx1
ZSk7CisgICAgICAgIGNhbGxiYWNrKHZtLCBnbG9iYWxPYmplY3QsIG5leHRWYWx1ZSk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGl0ZXJhdG9yQ2xvc2UoZXhlYywgaXRlcmF0aW9uUmVj
b3JkKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ2xvc2UoZ2xvYmFsT2JqZWN0LCBpdGVyYXRpb25S
ZWNvcmQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDYWxsQmFja1R5cGU+Ci12b2lkIGZvckVhY2hJbkl0ZXJhYmxlKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTT2JqZWN0KiBpdGVyYWJsZSwgSlNWYWx1ZSBpdGVyYXRvck1ldGhvZCwg
Y29uc3QgQ2FsbEJhY2tUeXBlJiBjYWxsYmFjaykKK3ZvaWQgZm9yRWFjaEluSXRlcmFibGUoSlNH
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGl0ZXJhYmxlLCBKU1ZhbHVlIGl0
ZXJhdG9yTWV0aG9kLCBjb25zdCBDYWxsQmFja1R5cGUmIGNhbGxiYWNrKQogewotICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvJiB2bSA9IGdldFZNKCZnbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8gaXRl
cmF0aW9uUmVjb3JkID0gaXRlcmF0b3JGb3JJdGVyYWJsZShzdGF0ZSwgaXRlcmFibGUsIGl0ZXJh
dG9yTWV0aG9kKTsKKyAgICBhdXRvIGl0ZXJhdGlvblJlY29yZCA9IGl0ZXJhdG9yRm9ySXRlcmFi
bGUoJmdsb2JhbE9iamVjdCwgaXRlcmFibGUsIGl0ZXJhdG9yTWV0aG9kKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcCgmc3RhdGUsIGl0ZXJhdGlvblJlY29yZCk7Cisg
ICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcCgmZ2xvYmFsT2JqZWN0LCBpdGVyYXRp
b25SZWNvcmQpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8IG5l
eHQuaXNGYWxzZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEpTVmFsdWUgbmV4
dFZhbHVlID0gaXRlcmF0b3JWYWx1ZSgmc3RhdGUsIG5leHQpOworICAgICAgICBKU1ZhbHVlIG5l
eHRWYWx1ZSA9IGl0ZXJhdG9yVmFsdWUoJmdsb2JhbE9iamVjdCwgbmV4dCk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICAgICAgY2FsbGJhY2sodm0s
IHN0YXRlLCBuZXh0VmFsdWUpOworICAgICAgICBjYWxsYmFjayh2bSwgZ2xvYmFsT2JqZWN0LCBu
ZXh0VmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBpdGVyYXRvckNsb3NlKCZz
dGF0ZSwgaXRlcmF0aW9uUmVjb3JkKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ2xvc2UoJmdsb2Jh
bE9iamVjdCwgaXRlcmF0aW9uUmVjb3JkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXgg
OWYyMWQ4ZTdkNzRjOTA1YzdhOWVkZDE2Zjg2ZDgzYzcyOTI4ZGVlNi4uZjg3YTZlYWI3NWU3MTBh
ZjlmMWMyNTg2YjQwMTkwMDEwZDE0OTM1MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHZvaWQgSlNBcnJheTo6ZWFnZXJs
eUluaXRpYWxpemVCdXR0ZXJmbHkoT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZSYgc2NvcGUsIEpT
QXJyCiAgICAgc2NvcGUubm90aWZ5SW5pdGlhbGl6ZWQoYXJyYXkpOwogfQogCi12b2lkIEpTQXJy
YXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkKK3Zv
aWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgYm9vbCB3cml0YWJsZSkKIHsKICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8ICF3
cml0YWJsZSk7CiAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkgfHwgd3JpdGFibGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT52bSgp
KTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsT2JqZWN0LT52bSgpKTsK
IAogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJz
ZU1hcC5nZXQoKTsKICAgICBBU1NFUlQobWFwKTsKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIEpT
QXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkK
IH0KIAogLy8gRGVmaW5lZCBpbiBFUzUuMSAxNS40LjUuMQotYm9vbCBKU0FycmF5OjpkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9v
bCB0aHJvd0V4Y2VwdGlvbikKK2Jvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRo
cm93RXhjZXB0aW9uKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwpA
QCAtMTYwLDM0ICsxNjAsMzQgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZQogICAgICAgICAvLyBB
bGwgcGF0aHMgdGhyb3VnaCBsZW5ndGggZGVmaW5pdGlvbiBjYWxsIHRoZSBkZWZhdWx0IFtbRGVm
aW5lT3duUHJvcGVydHldXSwgaGVuY2U6CiAgICAgICAgIC8vIGZyb20gRVM1LjEgOC4xMi45IDcu
YS4KICAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2Ny
aXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZUNvbmZp
Z3VyYWJpbGl0eUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VD
b25maWd1cmFiaWxpdHlFcnJvcik7CiAgICAgICAgIC8vIGZyb20gRVM1LjEgOC4xMi45IDcuYi4K
ICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9y
LmVudW1lcmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUs
IHRocm93RXhjZXB0aW9uLCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlRW51bWVyYWJpbGl0
eUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VFbnVtZXJhYmls
aXR5RXJyb3IpOwogCiAgICAgICAgIC8vIGEuIElmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVz
YyBpcyBhYnNlbnQsIHRoZW4KICAgICAgICAgLy8gYS5pLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBj
YWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qg
KDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBEZXNjLCBhbmQgVGhyb3cgYXMgYXJndW1l
bnRzLgogICAgICAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAg
ICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVu
Y29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJvcik7CisgICAgICAg
ICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRocm93RXhjZXB0aW9u
LCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlQWNjZXNzTWVjaGFuaXNtRXJyb3IpOwogICAg
ICAgICAvLyBmcm9tIEVTNS4xIDguMTIuOSAxMC5hLgogICAgICAgICBpZiAoIWFycmF5LT5pc0xl
bmd0aFdyaXRhYmxlKCkgJiYgZGVzY3JpcHRvci53cml0YWJsZVByZXNlbnQoKSAmJiBkZXNjcmlw
dG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZVdyaXRhYmlsaXR5
RXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZVdyaXRhYmlsaXR5
RXJyb3IpOwogICAgICAgICAvLyBUaGlzIGRlc2NyaXB0b3IgaXMgZWl0aGVyIGp1c3QgbWFraW5n
IGxlbmd0aCByZWFkLW9ubHksIG9yIGNoYW5naW5nIG5vdGhpbmchCiAgICAgICAgIGlmICghZGVz
Y3JpcHRvci52YWx1ZSgpKSB7CiAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZVBy
ZXNlbnQoKSkKLSAgICAgICAgICAgICAgICBhcnJheS0+c2V0TGVuZ3RoV3JpdGFibGUoZXhlYywg
ZGVzY3JpcHRvci53cml0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+c2V0TGVuZ3Ro
V3JpdGFibGUoZ2xvYmFsT2JqZWN0LCBkZXNjcmlwdG9yLndyaXRhYmxlKCkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIGIuIExldCBu
ZXdMZW5EZXNjIGJlIGEgY29weSBvZiBEZXNjLgogICAgICAgICAvLyBjLiBMZXQgbmV3TGVuIGJl
IFRvVWludDMyKERlc2MuW1tWYWx1ZV1dKS4KLSAgICAgICAgdW5zaWduZWQgbmV3TGVuID0gZGVz
Y3JpcHRvci52YWx1ZSgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICB1bnNpZ25lZCBuZXdMZW4g
PSBkZXNjcmlwdG9yLnZhbHVlKCkudG9VSW50MzIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAvLyBkLiBJZiBuZXdMZW4g
aXMgbm90IGVxdWFsIHRvIFRvTnVtYmVyKCBEZXNjLltbVmFsdWVdXSksIHRocm93IGEgUmFuZ2VF
cnJvciBleGNlcHRpb24uCi0gICAgICAgIGRvdWJsZSB2YWx1ZUFzTnVtYmVyID0gZGVzY3JpcHRv
ci52YWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICBkb3VibGUgdmFsdWVBc051bWJlciA9
IGRlc2NyaXB0b3IudmFsdWUoKS50b051bWJlcihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmIChuZXdMZW4gIT0gdmFs
dWVBc051bWJlcikgewotICAgICAgICAgICAgSlNDOjp0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiX3MpKTsKKyAg
ICAgICAgICAgIEpTQzo6dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsICJJbnZhbGlkIGFycmF5IGxlbmd0aCJfcykpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTE5NSw3ICsxOTUsNyBAQCBi
b29sIEpTQXJyYXk6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lCiAgICAgICAgIC8vIEZJWE1FOiBOb3RoaW5nIHByZXZlbnRz
IHRoaXMgZnJvbSBiZWluZyBjYWxsZWQgb24gYSBSdW50aW1lQXJyYXksIGFuZCB0aGUgbGVuZ3Ro
IGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiAwIGluIHRoYXQgY2FzZS4KICAgICAgICAgaWYg
KG5ld0xlbiA9PSBhcnJheS0+bGVuZ3RoKCkpIHsKICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9y
LndyaXRhYmxlUHJlc2VudCgpKQotICAgICAgICAgICAgICAgIGFycmF5LT5zZXRMZW5ndGhXcml0
YWJsZShleGVjLCBkZXNjcmlwdG9yLndyaXRhYmxlKCkpOworICAgICAgICAgICAgICAgIGFycmF5
LT5zZXRMZW5ndGhXcml0YWJsZShnbG9iYWxPYmplY3QsIGRlc2NyaXB0b3Iud3JpdGFibGUoKSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0yMDQsNyArMjA0LDcg
QEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZQogICAgICAgICAvLyBmLmkuIFJldHVybiB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFs
IG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG5ld0xlbkRlc2MsIGFuZCBU
aHJvdyBhcyBhcmd1bWVudHMuCiAgICAgICAgIC8vIGcuIFJlamVjdCBpZiBvbGRMZW5EZXNjLltb
V3JpdGFibGVdXSBpcyBmYWxzZS4KICAgICAgICAgaWYgKCFhcnJheS0+aXNMZW5ndGhXcml0YWJs
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgdGhyb3dFeGNl
cHRpb24sIFJlYWRvbmx5UHJvcGVydHlDaGFuZ2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm4g
dHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBSZWFkb25seVBy
b3BlcnR5Q2hhbmdlRXJyb3IpOwogICAgICAgICAKICAgICAgICAgLy8gaC4gSWYgbmV3TGVuRGVz
Yy5bW1dyaXRhYmxlXV0gaXMgYWJzZW50IG9yIGhhcyB0aGUgdmFsdWUgdHJ1ZSwgbGV0IG5ld1dy
aXRhYmxlIGJlIHRydWUuCiAgICAgICAgIC8vIGkuIEVsc2UsCkBAIC0yMTcsNyArMjE3LDcgQEAg
Ym9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZQogICAgICAgICAvLyBsLmkuIFNldCBvbGRMZW4gdG8gb2xk
TGVuIOKAkyAxLgogICAgICAgICAvLyBsLmlpLiBMZXQgZGVsZXRlU3VjY2VlZGVkIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgQSBwYXNz
aW5nIFRvU3RyaW5nKG9sZExlbikgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KICAgICAgICAgLy8g
bC5paWkuIElmIGRlbGV0ZVN1Y2NlZWRlZCBpcyBmYWxzZSwgdGhlbgotICAgICAgICBib29sIHN1
Y2Nlc3MgPSBhcnJheS0+c2V0TGVuZ3RoKGV4ZWMsIG5ld0xlbiwgdGhyb3dFeGNlcHRpb24pOwor
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBhcnJheS0+c2V0TGVuZ3RoKGdsb2JhbE9iamVjdCwgbmV3
TGVuLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpIHx8ICFzdWNjZXNzKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAg
ICAgICAvLyAxLiBTZXQgbmV3TGVuRGVzYy5bW1ZhbHVlXSB0byBvbGRMZW4rMS4KQEAgLTIyNSw3
ICsyMjUsNyBAQCBib29sIEpTQXJyYXk6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lCiAgICAgICAgICAgICAvLyAzLiBDYWxs
IHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIu
OSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBuZXdMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1l
bnRzLgogICAgICAgICAgICAgLy8gNC4gUmVqZWN0LgogICAgICAgICAgICAgaWYgKGRlc2NyaXB0
b3Iud3JpdGFibGVQcmVzZW50KCkpCi0gICAgICAgICAgICAgICAgYXJyYXktPnNldExlbmd0aFdy
aXRhYmxlKGV4ZWMsIGRlc2NyaXB0b3Iud3JpdGFibGUoKSk7CisgICAgICAgICAgICAgICAgYXJy
YXktPnNldExlbmd0aFdyaXRhYmxlKGdsb2JhbE9iamVjdCwgZGVzY3JpcHRvci53cml0YWJsZSgp
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC0yMzQsNyArMjM0
LDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZQogICAgICAgICAvLyAgICBQcm9wZXJ0eSBEZXNj
cmlwdG9ye1tbV3JpdGFibGVdXTogZmFsc2V9LCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlz
IGNhbGwgd2lsbCBhbHdheXMKICAgICAgICAgLy8gICAgcmV0dXJuIHRydWUuCiAgICAgICAgIGlm
IChkZXNjcmlwdG9yLndyaXRhYmxlUHJlc2VudCgpKQotICAgICAgICAgICAgYXJyYXktPnNldExl
bmd0aFdyaXRhYmxlKGV4ZWMsIGRlc2NyaXB0b3Iud3JpdGFibGUoKSk7CisgICAgICAgICAgICBh
cnJheS0+c2V0TGVuZ3RoV3JpdGFibGUoZ2xvYmFsT2JqZWN0LCBkZXNjcmlwdG9yLndyaXRhYmxl
KCkpOwogICAgICAgICAvLyBuLiBSZXR1cm4gdHJ1ZS4KICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtMjQ2LDIyICsyNDYsMjIgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZQogICAgICAg
ICB1aW50MzJfdCBpbmRleCA9IG9wdGlvbmFsSW5kZXgudmFsdWUoKTsKICAgICAgICAgLy8gRklY
TUU6IE5vdGhpbmcgcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGNhbGxlZCBvbiBhIFJ1bnRpbWVB
cnJheSwgYW5kIHRoZSBsZW5ndGggZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIDAgaW4gdGhh
dCBjYXNlLgogICAgICAgICBpZiAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpICYmICFhcnJheS0+
aXNMZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBz
Y29wZSwgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBudW1lcmljIHByb3Bl
cnR5IG9uIGFycmF5IHdpdGggbm9uLXdyaXRhYmxlIGxlbmd0aCBwcm9wZXJ0eS4iX3MpOworICAg
ICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIG51bWVyaWMgcHJvcGVydHkgb24gYXJyYXkgd2l0
aCBub24td3JpdGFibGUgbGVuZ3RoIHByb3BlcnR5LiJfcyk7CiAgICAgICAgIC8vIGMuIExldCBz
dWNjZWVkZWQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3du
UHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2Ms
IGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuCiAgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVk
ZWQgaXMgZmFsc2UuCiAgICAgICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExlbgogICAgICAgICAv
LyBlLmkuIFNldCBvbGRMZW5EZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCiAgICAgICAgIC8v
IGUuaWkuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1l
dGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxz
ZSBhcyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KICAgICAg
ICAgLy8gZi4gUmV0dXJuIHRydWUuCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
YXJyYXktPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwg
dGhyb3dFeGNlcHRpb24pKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhcnJh
eS0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgsIGRlc2NyaXB0
b3IsIHRocm93RXhjZXB0aW9uKSk7CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBhcnJheS0+SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbikpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgYXJyYXktPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbikp
OwogfQogCi1ib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK2Jvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0aGlz
T2JqZWN0LT5pc0xlbmd0aFdyaXRhYmxlKCkgPyBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSA6IFByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5OwpAQCAtMjY5LDUyICsyNjksNTIgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIC8vIEVDTUEgMTUuNC41LjEKLWJvb2wg
SlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29s
IEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKIAog
ICAgIGlmIChVTkxJS0VMWShpc1RoaXNWYWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQot
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhleGVjLCB0
aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5h
cnlTZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwogCiAgICAgdGhpc09iamVj
dC0+ZW5zdXJlV3JpdGFibGUodm0pOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0xlbmd0aFdy
aXRhYmxlKCkpIHsKICAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQXJyYXkgbGVuZ3RoIGlzIG5v
dCB3cml0YWJsZSJfcyk7CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkFycmF5IGxlbmd0aCBpcyBub3Qgd3JpdGFibGUiX3MpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgbmV3TGVuZ3Ro
ID0gdmFsdWUudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZh
bHVlLnRvVUludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKLSAgICAgICAgZG91YmxlIHZhbHVlQXNOdW1iZXIgPSB2YWx1ZS50b051
bWJlcihleGVjKTsKKyAgICAgICAgZG91YmxlIHZhbHVlQXNOdW1iZXIgPSB2YWx1ZS50b051bWJl
cihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxz
ZSk7CiAgICAgICAgIGlmICh2YWx1ZUFzTnVtYmVyICE9IHN0YXRpY19jYXN0PGRvdWJsZT4obmV3
TGVuZ3RoKSkgewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIl9zKSk7CisgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGds
b2JhbE9iamVjdCwgIkludmFsaWQgYXJyYXkgbGVuZ3RoIl9zKSk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0
aGlzT2JqZWN0LT5zZXRMZW5ndGgoZXhlYywgbmV3TGVuZ3RoLCBzbG90LmlzU3RyaWN0TW9kZSgp
KSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGhpc09iamVjdC0+c2V0TGVu
Z3RoKGdsb2JhbE9iamVjdCwgbmV3TGVuZ3RoLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CiAgICAg
fQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CiB9CiAKLWJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCitib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKIAogICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKIHN0YXRp
YyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQpA
QCAtMzI0LDE1ICszMjQsMTUgQEAgc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0
IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRi
KTsKIH0KIAotdm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2Jq
ZWN0KTsKIAogICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKIAotICAgIEpT
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQog
CiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2ZWN0b3IsIGJ1dCBsZWF2ZXMgdGhl
IG5ldyBzcGFjZSBmb3IgY291bnQgc2xvdHMgdW5jbGVhcmVkLgpAQCAtNDQ5LDkgKzQ0OSw5IEBA
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBWTSYgdm0sIERlZmVyR0MmLCBib29sCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNB
cnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQor
Ym9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwpA
QCAtNDYyLDcgKzQ2Miw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vCiAgICAgaWYgKFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CiAgICAg
ICAgIC8vIEZhaWwgaWYgdGhlIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCiAgICAgICAgIGlmICht
YXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhl
Yywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Cisg
ICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRocm93RXhj
ZXB0aW9uLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAKICAgICAgICAgaWYgKG5ld0xl
bmd0aCA8IGxlbmd0aCkgewogICAgICAgICAgICAgLy8gQ29weSBhbnkga2V5cyB3ZSBtaWdodCBi
ZSBpbnRlcmVzdGVkIGluIGludG8gYSB2ZWN0b3IuCkBAIC00ODcsNyArNDg3LDcgQEAgYm9vbCBK
U0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgbmV3TGVuZ3RoLCBib28KICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+
bm90Rm91bmQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuYXR0cmlidXRl
cygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCArIDEpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVuYWJs
ZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBVbmFibGVUb0Rl
bGV0ZVByb3BlcnR5RXJyb3IpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKICAgICAgICAgICAgICAgICB9CkBAIC01MTYsNyArNTE2
LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBKU0FycmF5OjphcHBlbmRNZW1jcHkoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIEpTQzo6SlNBcnJheSogb3RoZXJBcnJheSkKK2Jvb2wgSlNBcnJheTo6YXBw
ZW5kTWVtY3B5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgdW5zaWduZWQg
c3RhcnRJbmRleCwgSlNDOjpKU0FycmF5KiBvdGhlckFycmF5KQogewogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtNTQ2LDcgKzU0Niw3IEBAIGJvb2wgSlNB
cnJheTo6YXBwZW5kTWVtY3B5KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCB1bnNpZ25lZCBzdGFy
dEluZGV4LCBKU0M6OkpTCiAKICAgICB1bnNpZ25lZCBuZXdMZW5ndGg7CiAgICAgaWYgKGNoZWNr
ZWROZXdMZW5ndGguc2FmZUdldChuZXdMZW5ndGgpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZs
b3cpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgTGVuZ3RoRXhjZWVkZWRUaGVNYXhpbXVtQXJyYXlMZW5ndGhFcnJvcikpOworICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGdsb2JhbE9iamVjdCwgTGVuZ3RoRXhjZWVkZWRUaGVNYXhpbXVtQXJyYXlMZW5ndGhFcnJvcikp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC01NTQsNyArNTU0LDcgQEAgYm9v
bCBKU0FycmF5OjphcHBlbmRNZW1jcHkoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIEpTQzo6SlMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFl
bnN1cmVMZW5ndGgodm0sIG5ld0xlbmd0aCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIEFTU0VSVChj
b3B5VHlwZSA9PSBpbmRleGluZ1R5cGUoKSk7CkBAIC01NzgsOSArNTc4LDkgQEAgYm9vbCBKU0Fy
cmF5OjphcHBlbmRNZW1jcHkoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIHVuc2lnbmVkIHN0YXJ0
SW5kZXgsIEpTQzo6SlMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBKU0FycmF5OjpzZXRM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNl
cHRpb24pCitib29sIEpTQXJyYXk6OnNldExlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKQEAgLTU5MCw3ICs1OTAsNyBAQCBib29sIEpT
QXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9v
bCB0aHJvd0V4Y2VwdGlvbgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChu
ZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgewogICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAotICAgICAgICAg
ICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCisgICAgICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0LCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAogICAgICAgICAgICAgICAg
IGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpKTsKICAgICAgICAgfQogICAgICAgICBjcmVhdGVJbml0
aWFsVW5kZWNpZGVkKHZtLCBuZXdMZW5ndGgpOwpAQCAtNjE1LDEyICs2MTUsMTIgQEAgYm9vbCBK
U0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJv
b2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAgICAgIHx8IChuZXdMZW5ndGggPj0gTUlOX1NQQVJT
RV9BUlJBWV9JTkRFWAogICAgICAgICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9y
KG5ld0xlbmd0aCwgY291bnRFbGVtZW50cygpKSkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKLSAgICAgICAgICAgICAg
ICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAorICAgICAgICAgICAgICAgIGdsb2Jh
bE9iamVjdCwgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICBlbnN1
cmVBcnJheVN0b3JhZ2Uodm0pKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5ld0xlbmd0aCA+
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIGlmICghZW5zdXJlTGVu
Z3RoKHZtLCBuZXdMZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02NDYsNyArNjQ2LDcgQEAg
Ym9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5n
dGgsIGJvb2wgdGhyb3dFeGNlcHRpb24KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhl
YywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwgYXJyYXlTdG9yYWdlKCkpKTsKKyAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGdsb2Jh
bE9iamVjdCwgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwgYXJyYXlTdG9yYWdlKCkpKTsKICAg
ICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTY1NCw5ICs2NTQsOSBA
QCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xl
bmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbgogICAgIH0KIH0KIAotSlNWYWx1ZSBKU0FycmF5Ojpw
b3AoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU0FycmF5Ojpwb3AoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBlbnN1cmVXcml0YWJsZSh2bSk7CkBAIC03MTIsNyArNzEyLDcgQEAgSlNW
YWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAg
ICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAg
IH0KIApAQCAtNzM5LDE4ICs3MzksMTggQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRl
KiBleGVjKQogICAgIAogICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlMZW5ndGgoKSAtIDE7
CiAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBKU1ZhbHVlIGVs
ZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOworICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChnbG9i
YWxPYmplY3QsIGluZGV4KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0
aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpOworICAgIGJvb2wgc3VjY2VzcyA9IGRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBnbG9iYWxPYmplY3QsIGluZGV4KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGlmICghc3VjY2VzcykgewotICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVy
cm9yKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxl
VG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBh
cmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgogICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgIHNldExlbmd0aChnbG9iYWxP
YmplY3QsIGluZGV4LCB0cnVlKTsKICAgICAvLyBSZXR1cm4gZWxlbWVudC4KICAgICByZXR1cm4g
ZWxlbWVudDsKIH0KQEAgLTc1OCwxNCArNzU4LDE0IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4
ZWNTdGF0ZSogZXhlYykKIC8vIFB1c2ggJiBwdXRJbmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwg
d2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCiAvLyAgLSB3ZSBhbHdheXMgYXJlIHdyaXRpbmcg
YmV5b25kIHRoZSBjdXJyZW50IGFycmF5IGJvdW5kcywgc28gaXQgaXMgYWx3YXlzIG5lY2Vzc2Fy
eSB0byB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgogLy8gIC0gcHVzaGlu
ZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0
aHJvd3MgYSByYW5nZSBlcnJvci4KLU5FVkVSX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1c2goRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6
cHVzaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IHB1c2hJbmxpbmUoZXhlYywgdmFsdWUpOworICAgIHB1c2hJbmxpbmUoZ2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiB9CiAKLUpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGV4ZWMs
IHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorSlNBcnJheSogSlNBcnJheTo6
ZmFzdFNsaWNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHN0YXJ0SW5k
ZXgsIHVuc2lnbmVkIGNvdW50KQogewotICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBlbnN1cmVXcml0YWJsZSh2bSk7CiAKQEAg
LTc3NywxMiArNzc3LDExIEBAIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUm
IGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50CiAgICAgICAgIGlmIChj
b3VudCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IHN0cnVjdHVyZSh2bSktPmhvbGVzTXVz
dEZvcndhcmRUb1Byb3RvdHlwZSh2bSwgdGhpcykpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMu
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgICAgICBTdHJ1Y3R1cmUqIHJlc3VsdFN0cnVjdHVy
ZSA9IGxleGljYWxHbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihhcnJheVR5cGUpOworICAgICAgICBTdHJ1Y3R1cmUqIHJlc3VsdFN0cnVj
dHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKGFycmF5VHlwZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShoYXNBbnlBcnJheVN0
b3JhZ2UocmVzdWx0U3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICAgICAgQVNTRVJUKCFsZXhpY2FsR2xvYmFsT2JqZWN0LT5pc0hh
dmluZ0FCYWRUaW1lKCkpOworICAgICAgICBBU1NFUlQoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdB
QmFkVGltZSgpKTsKICAgICAgICAgT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZSBzY29wZSh2bSk7
CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZFJlc3RyaWN0ZWQoc2NvcGUsIHJlc3VsdFN0cnVjdHVyZSwgY291bnQpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoIXJlc3VsdEFycmF5KSkKQEAgLTg4NSw5ICs4ODQsOSBAQCBib29sIEpT
QXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKFZNJiB2bSwgdW5zaWduZWQgc3RhcnRJ
bmRleCwgdW5zaWduZWQgYwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQmIHN0
YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFu
eUluZGV4aW5nVHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCYgc3Rh
cnRJbmRleCwgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQg
PiAwKTsKIAogICAgIGVuc3VyZVdyaXRhYmxlKHZtKTsKQEAgLTk5MCw5ICs5ODksOSBAQCBib29s
IEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQmIHN0YXJ0SW5kZQogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQg
Y2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKLWJvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0
SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCitib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSog
c3RvcmFnZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKQEAgLTEwMjQsNyAr
MTAyMyw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsCiAgICAgZWxzZSBpZiAodW5zaGlmdENv
dW50U2xvd0Nhc2UobG9ja2VyLCB2bSwgZGVmZXJHQywgbW92ZUZyb250LCBjb3VudCkpCiAgICAg
ICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIHsKLSAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
QEAgLTEwNDMsOSArMTA0Miw5IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlw
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQor
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGVu
c3VyZVdyaXRhYmxlKHZtKTsKQEAgLTEwNjUsMTkgKzEwNjQsMTkgQEAgYm9vbCBKU0FycmF5Ojp1
bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
c3RhcnRJbmQKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5
IHRvIGRvIHRoZSB1bnNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvIHNvCiAgICAgICAgIC8vIG9u
bHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4KICAgICAgICAgaWYgKG9sZExlbmd0aCAtIHN0
YXJ0SW5kZXggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFy
dEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKHZtKSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGdsb2Jh
bE9iamVjdCwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpKTsKIAog
ICAgICAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChv
bGRMZW5ndGgpOwogICAgICAgICBjaGVja2VkTGVuZ3RoICs9IGNvdW50OwogICAgICAgICB1bnNp
Z25lZCBuZXdMZW5ndGg7CiAgICAgICAgIGlmIChDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93ID09
IGNoZWNrZWRMZW5ndGguc2FmZUdldChuZXdMZW5ndGgpKSB7Ci0gICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZW5zdXJlTGVuZ3Ro
KHZtLCBuZXdMZW5ndGgpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yywgc2NvcGUpOworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
YnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CkBAIC0xMDg3LDcgKzEwODYsNyBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBzdGFydEluZAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7
IGktLSA+IHN0YXJ0SW5kZXg7KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKS5hdCh0aGlzLCBpKS5nZXQoKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VM
WSghdikpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB1bnNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJh
eVN0b3JhZ2Uodm0pKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGdsb2JhbE9iamVjdCwgc3RhcnRJbmRleCwg
Y291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4gc3RhcnRJbmRleDspIHsKQEAgLTExMTQs
MTkgKzExMTMsMTkgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdU
eXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmQKICAgICAgICAgLy8gV2UgbWF5
IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSB1bnNoaWZ0LiBXZSdyZSB3
aWxsaW5nIHRvIGRvIHNvCiAgICAgICAgIC8vIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xv
dy4KICAgICAgICAgaWYgKG9sZExlbmd0aCAtIHN0YXJ0SW5kZXggPj0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCkKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdW5zaGlmdENv
dW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlT
dG9yYWdlKHZtKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB1bnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGdsb2JhbE9iamVjdCwgc3RhcnRJbmRleCwgY291bnQs
IGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpKTsKIAogICAgICAgICBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChvbGRMZW5ndGgpOwogICAgICAgICBjaGVja2Vk
TGVuZ3RoICs9IGNvdW50OwogICAgICAgICB1bnNpZ25lZCBuZXdMZW5ndGg7CiAgICAgICAgIGlm
IChDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93ID09IGNoZWNrZWRMZW5ndGguc2FmZUdldChuZXdM
ZW5ndGgpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUp
OworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5ld0xl
bmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGlmICghZW5zdXJlTGVuZ3RoKHZtLCBuZXdMZW5ndGgpKSB7Ci0gICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5
KCk7CkBAIC0xMTM2LDcgKzExMzUsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhB
bnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+IHN0YXJ0SW5kZXg7KSB7CiAgICAg
ICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmF0KHRoaXMs
IGkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHYgIT0gdikpCi0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pKSk7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB1bnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYWdlKGdsb2JhbE9iamVjdCwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFn
ZSh2bSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0
aDsgaS0tID4gc3RhcnRJbmRleDspIHsKQEAgLTExNTUsNyArMTE1NCw3IEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHN0YXJ0SW5kCiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgog
ICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0
SW5kZXgsIGNvdW50LCBhcnJheVN0b3JhZ2UoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZ2xvYmFsT2JqZWN0LCBzdGFy
dEluZGV4LCBjb3VudCwgYXJyYXlTdG9yYWdlKCkpKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgQ1JBU0goKTsKQEAgLTExNjMsNyArMTE2Miw3IEBAIGJvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0
YXJ0SW5kCiAgICAgfQogfQogCi12b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCit2b2lkIEpTQXJyYXk6OmZpbGxBcmdM
aXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBh
cmdzKQogewogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKQEAg
LTEyMjYsMTIgKzEyMjUsMTIgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUq
IGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogCiAgICAgLy8gRklYTUU6IFdoYXQg
cHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGNhbGxlZCB3aXRoIGEgUnVudGltZUFycmF5PyBUaGUg
bGVuZ3RoIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiAwIGluIHRoYXQgY2FzZS4KICAgICBm
b3IgKDsgaSA8IGxlbmd0aCgpOyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBp
KSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGdldChnbG9iYWxPYmplY3QsIGkpKTsKIH0KIAotdm9p
ZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0
ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2
b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3Qs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVuc2lnbmVkIGkgPSBvZmZzZXQ7CkBA
IC0xMjY4LDcgKzEyNjcsNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3Rh
dGUqIGV4ZWMsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LAogICAgICAgICAgICAg
ZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKTsKICAg
ICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IEpTVmFsdWUoSlNWYWx1
ZTo6RW5jb2RlQXNEb3VibGUsIHYpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxl
bWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUs
IHYpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyOTMsMTEgKzEyOTIs
MTEgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0
dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2ID0gdmVjdG9yW2ldOwogICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSB2LmdldCgp
OworICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0g
di5nZXQoKTsKICAgICB9CiAgICAgCiAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewotICAg
ICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChleGVjLCBp
KTsKKyAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9
IGdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogICAgIH0KIH0KQEAgLTEzNDUsOSArMTM0NCw5IEBAIGlubGluZSBKU0FycmF5
KiBjb25zdHJ1Y3RBcnJheShPYmplY3RJbml0aWFsaXphdGlvblNjb3BlJiBzY29wZSwgU3RydWN0
dXJlKiBhcnJhCiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1KU0FycmF5KiBjb25zdHJ1Y3RBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xp
c3QmIHZhbHVlcykKK0pTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZhbHVl
cykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB2YWx1ZXMuc2l6ZSgpOwogICAgIE9iamVj
dEluaXRpYWxpemF0aW9uU2NvcGUgc2NvcGUodm0pOwogCkBAIC0xMzU3LDkgKzEzNTYsOSBAQCBK
U0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlT
dHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpcwogICAgIHJldHVybiBhcnJheTsKIH0KIAotSlNBcnJheSog
Y29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJl
LCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK0pTQXJyYXkqIGNvbnN0
cnVjdEFycmF5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogYXJyYXlT
dHJ1Y3R1cmUsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUgc2NvcGUodm0pOwogCiAgICAgSlNBcnJheSog
YXJyYXkgPSBjb25zdHJ1Y3RBcnJheShzY29wZSwgYXJyYXlTdHJ1Y3R1cmUsIGxlbmd0aCk7CkBA
IC0xMzY4LDkgKzEzNjcsOSBAQCBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEpTVmFsdQogICAgIHJldHVybiBh
cnJheTsKIH0KIAotSlNBcnJheSogY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBjb25zdCBKU1ZhbHVlKiB2YWx1
ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK0pTQXJyYXkqIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRl
eGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1
cmUsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIE9i
amVjdEluaXRpYWxpemF0aW9uU2NvcGUgc2NvcGUodm0pOwogCiAgICAgSlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RBcnJheShzY29wZSwgYXJyYXlTdHJ1Y3R1cmUsIGxlbmd0aCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKaW5kZXggNTlmZTg2MDNhY2Q2Y2JmYTRkNDNl
ZjlhZmNmYjM1MjQyODQzMDFhZS4uMmY5ZWUwY2RlNDk0NzYzOWU0NGNlNDZjNzBlNDg4NzAxZDg2
NGVkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApAQCAtODIsOSAr
ODIsOSBAQCBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogCiAgICAg
c3RhdGljIHZvaWQgZWFnZXJseUluaXRpYWxpemVCdXR0ZXJmbHkoT2JqZWN0SW5pdGlhbGl6YXRp
b25TY29wZSYsIEpTQXJyYXkqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRo
cm93RXhjZXB0aW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIApAQCAtOTIsMTkgKzkyLDE5IEBAIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gZ2V0
QXJyYXlMZW5ndGgoKTsgfQogCiAgICAgLy8gT0sgdG8gdXNlIG9uIG5ldyBhcnJheXMsIGJ1dCBu
b3QgaWYgaXQgbWlnaHQgYmUgYSBSZWdFeHBNYXRjaEFycmF5IG9yIFJ1bnRpbWVBcnJheS4KLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHNldExlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IHNldExlbmd0aChKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBib29sIHRocm93RXhjZXB0aW9u
ID0gZmFsc2UpOwogCi0gICAgdm9pZCBwdXNoSW5saW5lKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHVzaChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHBvcChFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHB1
c2hJbmxpbmUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHB1c2goSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIHBvcChKU0dsb2JhbE9iamVjdCopOwogCi0gICAgSlNBcnJheSogZmFzdFNs
aWNlKEV4ZWNTdGF0ZSYsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKKyAg
ICBKU0FycmF5KiBmYXN0U2xpY2UoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBzdGFydEluZGV4
LCB1bnNpZ25lZCBjb3VudCk7CiAKICAgICBib29sIGNhbkZhc3RDb3B5KFZNJiwgSlNBcnJheSog
b3RoZXJBcnJheSk7CiAgICAgYm9vbCBjYW5Eb0Zhc3RJbmRleGVkQWNjZXNzKFZNJik7CiAgICAg
Ly8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIE5vbkFycmF5IGlmIHRoZSBpbmRleGluZyB0eXBlcyBh
cmUgbm90IGNvbXBhdGFibGUgZm9yIGNvcHlpbmcuCiAgICAgSW5kZXhpbmdUeXBlIG1lcmdlSW5k
ZXhpbmdUeXBlRm9yQ29weWluZyhJbmRleGluZ1R5cGUgb3RoZXIpOwotICAgIGJvb2wgYXBwZW5k
TWVtY3B5KEV4ZWNTdGF0ZSosIFZNJiwgdW5zaWduZWQgc3RhcnRJbmRleCwgSlNBcnJheSogb3Ro
ZXJBcnJheSk7CisgICAgYm9vbCBhcHBlbmRNZW1jcHkoSlNHbG9iYWxPYmplY3QqLCBWTSYsIHVu
c2lnbmVkIHN0YXJ0SW5kZXgsIEpTQXJyYXkqIG90aGVyQXJyYXkpOwogCiAgICAgZW51bSBTaGlm
dENvdW50TW9kZSB7CiAgICAgICAgIC8vIFRoaXMgZm9ybSBvZiBzaGlmdCBoaW50cyB0aGF0IHdl
J3JlIGRvaW5nIHF1ZXVlaW5nLiBXaXRoIHRoaXMgYXNzdW1wdGlvbiBpbiBoYW5kLApAQCAtMTE3
LDUzICsxMTcsNTMgQEAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
ICAgICAgICAgU2hpZnRDb3VudEZvclNwbGljZQogICAgIH07CiAKLSAgICBib29sIHNoaWZ0Q291
bnRGb3JTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVk
IGNvdW50KQorICAgIGJvb2wgc2hpZnRDb3VudEZvclNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogICAgIHsKLSAg
ICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHZtLCBz
dGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgfQotICAgIGJv
b2wgc2hpZnRDb3VudEZvclNwbGljZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkJiBzdGFydElu
ZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICBib29sIHNoaWZ0Q291bnRGb3JTcGxpY2UoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBl
KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRo
QW55SW5kZXhpbmdUeXBlKGdsb2JhbE9iamVjdCwgc3RhcnRJbmRleCwgY291bnQpOwogICAgIH0K
ICAgICB0ZW1wbGF0ZTxTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KLSAgICBib29sIHNo
aWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCYgc3RhcnRJbmRleCwgdW5zaWduZWQg
Y291bnQpCisgICAgYm9vbCBzaGlmdENvdW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IHVuc2lnbmVkJiBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKICAgICB7CiAgICAgICAgIHN3
aXRjaCAoc2hpZnRDb3VudE1vZGUpIHsKICAgICAgICAgY2FzZSBTaGlmdENvdW50Rm9yU2hpZnQ6
Ci0gICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudEZvclNoaWZ0KGV4ZWMsIHN0YXJ0SW5kZXgs
IGNvdW50KTsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50Rm9yU2hpZnQoZ2xvYmFsT2Jq
ZWN0LCBzdGFydEluZGV4LCBjb3VudCk7CiAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNwbGlj
ZToKLSAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50Rm9yU3BsaWNlKGV4ZWMsIHN0YXJ0SW5k
ZXgsIGNvdW50KTsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50Rm9yU3BsaWNlKGdsb2Jh
bE9iamVjdCwgc3RhcnRJbmRleCwgY291bnQpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgQ1JBU0goKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0K
ICAgICAgICAgCi0gICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JTaGlmdChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgIGJvb2wgdW5zaGlmdENv
dW50Rm9yU2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgc3RhcnRJ
bmRleCwgdW5zaWduZWQgY291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50
V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9y
YWdlKGV4ZWMtPnZtKCkpKTsKKyAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0
b3JhZ2UoZ2xvYmFsT2JqZWN0LCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdl
KGdldFZNKGdsb2JhbE9iamVjdCkpKTsKICAgICB9Ci0gICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JT
cGxpY2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3Vu
dCkKKyAgICBib29sIHVuc2hpZnRDb3VudEZvclNwbGljZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKGV4ZWMsIHN0YXJ0SW5k
ZXgsIGNvdW50KTsKKyAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5
cGUoZ2xvYmFsT2JqZWN0LCBzdGFydEluZGV4LCBjb3VudCk7CiAgICAgfQogICAgIHRlbXBsYXRl
PFNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgotICAgIGJvb2wgdW5zaGlmdENvdW50KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAg
Ym9vbCB1bnNoaWZ0Q291bnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQg
c3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHNoaWZ0
Q291bnRNb2RlKSB7CiAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNoaWZ0OgotICAgICAgICAg
ICAgcmV0dXJuIHVuc2hpZnRDb3VudEZvclNoaWZ0KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsK
KyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRGb3JTaGlmdChnbG9iYWxPYmplY3QsIHN0
YXJ0SW5kZXgsIGNvdW50KTsKICAgICAgICAgY2FzZSBTaGlmdENvdW50Rm9yU3BsaWNlOgotICAg
ICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudEZvclNwbGljZShleGVjLCBzdGFydEluZGV4LCBj
b3VudCk7CisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50Rm9yU3BsaWNlKGdsb2JhbE9i
amVjdCwgc3RhcnRJbmRleCwgY291bnQpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
Q1JBU0goKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2Vk
QXJndW1lbnRCdWZmZXImKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0FyZ3Vt
ZW50cyhFeGVjU3RhdGUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmlsbEFyZ0xpc3QoSlNHbG9iYWxPYmplY3QqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJ
dGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIApAQCAtMTgwLDEwICsxODAs
MTAgQEAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSh0eXBlKCkgPT0gQXJyYXlUeXBlIHx8IHR5cGUoKSA9PSBEZXJp
dmVkQXJyYXlUeXBlLCAiSW5zdGFuY2UgaW5oZXJpdGluZyBKU0FycmF5IHNob3VsZCBoYXZlIGVp
dGhlciBBcnJheVR5cGUgb3IgRGVyaXZlZEFycmF5VHlwZSIpOwogICAgIH0KIAotICAgIHN0YXRp
YyBib29sIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKLSAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKIHByaXZhdGU6
CiAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxlKCkKQEAgLTE5NSwxNSArMTk1LDE1IEBAIGNsYXNz
IEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIHJldHVybiAhbWFw
IHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICB9CiAgICAgICAgIAotICAgIGJvb2wg
c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiwgdW5zaWduZWQmIHN0YXJ0
SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKKyAgICBib29sIHNoaWZ0Q291bnRXaXRoQW55SW5kZXhp
bmdUeXBlKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlKFZNJiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFn
ZSopOwogCi0gICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKLSAgICBib29sIHVuc2hp
ZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSopOworICAgIGJvb2wgdW5zaGlmdENvdW50V2l0
aEFueUluZGV4aW5nVHlwZShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVu
c2lnbmVkIGNvdW50KTsKKyAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoSlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlT
dG9yYWdlKik7CiAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShjb25zdCBBYnN0cmFjdExv
Y2tlciYsIFZNJiwgRGVmZXJHQyYsIGJvb2wsIHVuc2lnbmVkKTsKIAotICAgIGJvb2wgc2V0TGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wg
dGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSopOwotICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFi
bGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7CisgICAgYm9vbCBzZXRMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93
RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqKTsKKyAgICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEpT
R2xvYmFsT2JqZWN0KiwgYm9vbCB3cml0YWJsZSk7CiB9OwogCiBpbmxpbmUgQnV0dGVyZmx5KiB0
cnlDcmVhdGVBcnJheUJ1dHRlcmZseShWTSYgdm0sIEpTT2JqZWN0KiBpbnRlbmRlZE93bmVyLCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQpAQCAtMzA2LDggKzMwNiw4IEBAIGlubGluZSBib29sIGlz
SlNBcnJheShKU0NlbGwqIGNlbGwpCiAKIGlubGluZSBib29sIGlzSlNBcnJheShKU1ZhbHVlIHYp
IHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9CiAKLUpTX0VY
UE9SVF9QUklWQVRFIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcyk7Ci1KU19FWFBPUlRfUFJJVkFURSBKU0FycmF5KiBj
b25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBjb25zdCBKU1ZhbHVlKiB2YWx1
ZXMsIHVuc2lnbmVkIGxlbmd0aCk7Ci1KU19FWFBPUlRfUFJJVkFURSBKU0FycmF5KiBjb25zdHJ1
Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBjb25zdCBKU1Zh
bHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCk7CitKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5
KiBjb25zdHJ1Y3RBcnJheShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IEFyZ0xp
c3QmIHZhbHVlcyk7CitKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWdu
ZWQgbGVuZ3RoKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5TmVn
YXRpdmVJbmRleGVkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgSlNWYWx1ZSog
dmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuY3BwCmluZGV4IDA0OWI2MGNlNjc2NzhhMjdjYzA0ZmRmMGI5ZGVjYzQxNDJhNDc5NjUu
LmVkZGFkZDRhNDNhMTM4NzRhYmI3MDE1OWZhNmZjNTlhZTMyOTYxMjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmNwcApAQCAtODEsMTIgKzgxLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNHZW5lcmljQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcjxzaGFyaW5nTW9kZT46OmNvbnN0CiAKICAg
ICBKU0dlbmVyaWNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IGpzQ2FzdDxK
U0dlbmVyaWNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsK
IAotICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9u
OjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0
KCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoc2hh
cmluZ01vZGUpKTsKKyAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPmpzQ2FsbGVlKCksIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGNvbnN0cnVjdG9yLT5nbG9i
YWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoc2hhcmluZ01vZGUpKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAg
IGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSkgewotICAgICAgICBsZW5ndGggPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW5kZXgoY2FsbEZyYW1lLCAibGVuZ3RoIik7
CisgICAgICAgIGxlbmd0aCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbmRl
eChnbG9iYWxPYmplY3QsICJsZW5ndGgiKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQWx0aG91
Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzYXkgc28sIGl0IGlzIGluIGZhY3QgY29ycmVj
dCB0byBzYXkKQEAgLTk3LDcgKzk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U0dlbmVyaWNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yPHNoYXJpbmdNb2RlPjo6Y29uc3QKIAogICAg
IGF1dG8gYnVmZmVyID0gQXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShsZW5ndGgsIDEpOwogICAgIGlm
ICghYnVmZmVyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1v
cnlFcnJvcihjYWxsRnJhbWUsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpKTsKICAgICAKICAg
ICBpZiAoc2hhcmluZ01vZGUgPT0gQXJyYXlCdWZmZXJTaGFyaW5nTW9kZTo6U2hhcmVkKQogICAg
ICAgICBidWZmZXItPm1ha2VTaGFyZWQoKTsKQEAgLTExOSwxMSArMTE5LDExIEBAIGNvbnN0IENs
YXNzSW5mbyogSlNHZW5lcmljQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcjxzaGFyaW5nTW9kZT46Omlu
Zm8oKQogICAgIHJldHVybiAmSlNHZW5lcmljQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcjxzaGFyaW5n
TW9kZT46OnNfaW5mbzsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEFycmF5QnVmZmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEFycmF5
QnVmZmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0
b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIkFy
cmF5QnVmZmVyIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3Rv
ckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
QXJyYXlCdWZmZXIiKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBG
dW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAK
aW5kZXggYjExMDE2MGYzMTZlMGYzODAzNjRjZTg5OTJhMzM5OGI4ZjRiNDI1OS4uYjJkYTc0ZTc5
OWJkZDI2NWY3NmNhN2ZjNDY4ZjA3YjM2NmY1MDNiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKQEAgLTQy
LDE0ICs0MiwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1
ZmZlclByb3RvRnVuY1NsaWNlKEpTR2xvYmFsT2JqZWN0KiBnbAogCiAgICAgSlNBcnJheUJ1ZmZl
ciogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KHZtLCBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXRoaXNPYmplY3QgfHwgdGhpc09iamVjdC0+aW1w
bCgpLT5pc1NoYXJlZCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJh
bWUsIHNjb3BlLCAiUmVjZWl2ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlci4iX3Mp
OworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
UmVjZWl2ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBBcnJheUJ1ZmZlci4iX3MpOwogCi0gICAgZG91
YmxlIGJlZ2luID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b0ludGVnZXIoY2FsbEZyYW1lKTsK
KyAgICBkb3VibGUgYmVnaW4gPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvSW50ZWdlcihnbG9i
YWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIAogICAgIGRvdWJsZSBlbmQ7CiAgICAgaWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50
KDEpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW5kID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgxKS50b0ludGVnZXIoY2FsbEZyYW1lKTsKKyAgICAgICAgZW5kID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGVuZCA9IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOwpAQCAtNzAs
MTMgKzcwLDEzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVm
ZmVyUHJvdG9HZXR0ZXJGdW5jQnl0ZUxlbmd0aChKU0dsb2JhCiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1l
LT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiUmVjZWl2ZXIgc2hvdWxk
IGJlIGFuIGFycmF5IGJ1ZmZlciBidXQgd2FzIG5vdCBhbiBvYmplY3QiX3MpOworICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUmVjZWl2ZXIgc2hv
dWxkIGJlIGFuIGFycmF5IGJ1ZmZlciBidXQgd2FzIG5vdCBhbiBvYmplY3QiX3MpOwogCiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KHZtLCB0aGlz
VmFsdWUpOwogICAgIGlmICghdGhpc09iamVjdCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhbiBhcnJheSBidWZm
ZXIiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGFuIGFycmF5IGJ1ZmZlciJfcyk7CiAgICAgaWYgKHRo
aXNPYmplY3QtPmlzU2hhcmVkKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNh
bGxGcmFtZSwgc2NvcGUsICJSZWNlaXZlciBzaG91bGQgbm90IGJlIGEgc2hhcmVkIGFycmF5IGJ1
ZmZlciJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJSZWNlaXZlciBzaG91bGQgbm90IGJlIGEgc2hhcmVkIGFycmF5IGJ1ZmZlciJfcyk7
CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKSkpKTsKIH0KQEAgLTg4LDEzICs4OCwx
MyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzaGFyZWRBcnJheUJ1ZmZl
clByb3RvR2V0dGVyRnVuY0J5dGVMZW5ndGgoSgogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhbiBh
cnJheSBidWZmZXIgYnV0IHdhcyBub3QgYW4gb2JqZWN0Il9zKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBh
biBhcnJheSBidWZmZXIgYnV0IHdhcyBub3QgYW4gb2JqZWN0Il9zKTsKIAogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPih2bSwgdGhpc1ZhbHVlKTsK
ICAgICBpZiAoIXRoaXNPYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNh
bGxGcmFtZSwgc2NvcGUsICJSZWNlaXZlciBzaG91bGQgYmUgYW4gYXJyYXkgYnVmZmVyIl9zKTsK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlJl
Y2VpdmVyIHNob3VsZCBiZSBhbiBhcnJheSBidWZmZXIiX3MpOwogICAgIGlmICghdGhpc09iamVj
dC0+aXNTaGFyZWQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHNoYXJlZCBhcnJheSBidWZmZXIiX3MpOwor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUmVj
ZWl2ZXIgc2hvdWxkIGJlIGEgc2hhcmVkIGFycmF5IGJ1ZmZlciJfcyk7CiAKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0LT5p
bXBsKCktPmJ5dGVMZW5ndGgoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAppbmRleCBiZTQzYjU2MDRmNWRlYjU0M2Q2
MTNhOWYzNGJiZWNjNjgwOWE4ZDM0Li45NzdhNzViZjE3ZjNkYmNjOTk1MzAwMTFiMDExNmZmOWZj
YmU5MjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwCkBAIC00Miw3ICs0Miw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5
QnVmZmVyVmlldzo6c19pbmZvID0gewogICAgICJBcnJheUJ1ZmZlclZpZXciLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXJW
aWV3KQogfTsKIAotU3RyaW5nIEpTQXJyYXlCdWZmZXJWaWV3Ojp0b1N0cmluZ05hbWUoY29uc3Qg
SlNPYmplY3QqLCBFeGVjU3RhdGUqKQorU3RyaW5nIEpTQXJyYXlCdWZmZXJWaWV3Ojp0b1N0cmlu
Z05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopCiB7CiAgICAgcmV0dXJuICJP
YmplY3QiX3M7CiB9CkBAIC0xNzYsMTUgKzE3NiwxNSBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB9CiAK
IGJvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKLSAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBK
U0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCiAgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZm
ZXJWaWV3Kj4oY2VsbCk7CiAKICAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNs
b3QsIHRoaXNPYmplY3QpKSkKLSAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhleGVjLCB0
aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNs
b3QuaXNTdHJpY3RNb2RlKCkpOwogICAgIAotICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIEJhc2U6OnB1
dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwog
fQogCiBBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnVuc2hhcmVkQnVmZmVyKCkKQEAg
LTIwMiwxNiArMjAyLDE2IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2Vs
bCogY2VsbCkKICAgICAgICAgR2lnYWNhZ2U6OmZyZWUoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgdGhp
c09iamVjdC0+dmVjdG9yKCkpOwogfQogCi1KU0FycmF5QnVmZmVyKiBKU0FycmF5QnVmZmVyVmll
dzo6dW5zaGFyZWRKU0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCitKU0FycmF5QnVmZmVyKiBKU0Fy
cmF5QnVmZmVyVmlldzo6dW5zaGFyZWRKU0J1ZmZlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgcmV0dXJuIHZtLm1fdHlwZWRB
cnJheUNvbnRyb2xsZXItPnRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KHZtKSwgdW5zaGFyZWRCdWZm
ZXIoKSk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIHJldHVybiB2bS5t
X3R5cGVkQXJyYXlDb250cm9sbGVyLT50b0pTKGdsb2JhbE9iamVjdCwgdGhpcy0+Z2xvYmFsT2Jq
ZWN0KHZtKSwgdW5zaGFyZWRCdWZmZXIoKSk7CiB9CiAKLUpTQXJyYXlCdWZmZXIqIEpTQXJyYXlC
dWZmZXJWaWV3Ojpwb3NzaWJseVNoYXJlZEpTQnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK0pTQXJy
YXlCdWZmZXIqIEpTQXJyYXlCdWZmZXJWaWV3Ojpwb3NzaWJseVNoYXJlZEpTQnVmZmVyKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICByZXR1cm4gdm0ubV90eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3Qodm0pLCBwb3NzaWJseVNoYXJlZEJ1ZmZlcigpKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgcmV0dXJuIHZtLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoZ2xv
YmFsT2JqZWN0LCB0aGlzLT5nbG9iYWxPYmplY3Qodm0pLCBwb3NzaWJseVNoYXJlZEJ1ZmZlcigp
KTsKIH0KIAogdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKQEAgLTI0NCw3ICsyNDQs
NyBAQCBBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1v
cnkoKQogICAgIEFTU0VSVChtX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkgfHwgbV9tb2RlID09IE92
ZXJzaXplVHlwZWRBcnJheSk7CiAKICAgICAvLyBXZSBwbGF5IHRoaXMgZ2FtZSBiZWNhdXNlIHdl
IHdhbnQgdGhpcyB0byBiZSBjYWxsYWJsZSBldmVuIGZyb20gcGxhY2VzIHRoYXQKLSAgICAvLyBk
b24ndCBoYXZlIGFjY2VzcyB0byBFeGVjU3RhdGUqIG9yIHRoZSBWTSwgYW5kIHdlIG9ubHkgYWxs
b2NhdGUgc28gbGl0dGxlCisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gQ2FsbEZyYW1lKiBv
ciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQogICAgIC8vIG1lbW9yeSBo
ZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNjb3Vu
dGluZyB3aGF0CiAgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29ydCBv
ZiBiaXphcnJlIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKICAgICAvLyBsaXR0bGUgbWVt
b3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0aGUgQyBoZWFw
OyB0aGlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuaAppbmRleCA0NjM4NGJlNzMxOTQ0NDEyNjczNjIzNDcwZjg4YzAyMThjMTFjNmU3Li42
NDg0YzgyN2QxYjg0N2Q3ZWZlZDRkYzE3M2NiZTA2ZDM2NzQxODc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKQEAgLTE1Miw3ICsx
NTIsNyBAQCBjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0cnVj
dGlvbkNvbnRleHQmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CiAgICAgCi0gICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wg
cHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKICAgICAKQEAgLTE2Myw4ICsxNjMsOCBAQCBjbGFzcyBKU0FycmF5QnVm
ZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBib29sIGlzU2hhcmVkKCk7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXJyYXlCdWZmZXIqIHVuc2hhcmVkQnVmZmVyKCk7CiAg
ICAgaW5saW5lIEFycmF5QnVmZmVyKiBwb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwotICAgIEpTQXJy
YXlCdWZmZXIqIHVuc2hhcmVkSlNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKTsKLSAgICBKU0FycmF5
QnVmZmVyKiBwb3NzaWJseVNoYXJlZEpTQnVmZmVyKEV4ZWNTdGF0ZSogZXhlYyk7CisgICAgSlNB
cnJheUJ1ZmZlciogdW5zaGFyZWRKU0J1ZmZlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KTsKKyAgICBKU0FycmF5QnVmZmVyKiBwb3NzaWJseVNoYXJlZEpTQnVmZmVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHVuc2hhcmVk
SW1wbCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHBv
c3NpYmx5U2hhcmVkSW1wbCgpOwogICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuIGhhc0Fy
cmF5QnVmZmVyKCkgJiYgIWhhc1ZlY3RvcigpOyB9CkBAIC0xOTksNyArMTk5LDcgQEAgY2xhc3Mg
SlNBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAKICAgICBBcnJh
eUJ1ZmZlciogZXhpc3RpbmdCdWZmZXJJbkJ1dHRlcmZseSgpOwogCi0gICAgc3RhdGljIFN0cmlu
ZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAK
ICAgICBWZWN0b3JQdHIgbV92ZWN0b3I7CiAgICAgdWludDMyX3QgbV9sZW5ndGg7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAppbmRleCBkYmUxYTRl
YTRkMTAwMjczODRlMjg0NzQ2N2NhYjk5Yzc0NjM1YTI0Li4yZjk0ZjZiZTVhOWJlYzM3YmEwZDhl
NGZlM2FhYmMwOGVhOTkzMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlJbmxpbmVzLmgKQEAgLTkxLDIxICs5MSwyMSBAQCBpbmxpbmUgYm9vbCBKU0FycmF5
OjpjYW5Eb0Zhc3RJbmRleGVkQWNjZXNzKFZNJiB2bSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
QUxXQVlTX0lOTElORSBkb3VibGUgdG9MZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b2JqKQorQUxXQVlTX0lOTElORSBkb3VibGUgdG9MZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIG9iaikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGlmIChMSUtFTFkoaXNKU0FycmF5KG9iaikpKQogICAgICAg
ICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgoKTsKIAotICAgIEpTVmFsdWUg
bGVuZ3RoVmFsdWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwor
ICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmotPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUE5hTik7
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBsZW5ndGhWYWx1ZS50b0xlbmd0aChleGVj
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBsZW5ndGhWYWx1ZS50b0xlbmd0aChn
bG9iYWxPYmplY3QpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1c2hJbmxp
bmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorQUxXQVlTX0lOTElORSB2b2lkIEpT
QXJyYXk6OnB1c2hJbmxpbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGds
b2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgZW5zdXJlV3JpdGFibGUodm0pOwpAQCAtMTIxLDcgKzEyMSw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKU0FycmF5OjpwdXNoSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKICAgICBjYXNlIEFycmF5V2l0aFVuZGVjaWRlZDogewogICAgICAgICBjb252ZXJ0VW5kZWNp
ZGVkRm9yVmFsdWUodm0sIHZhbHVlKTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAg
ICBwdXNoKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgcHVzaChnbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTI5LDcgKzEyOSw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKU0FycmF5OjpwdXNoSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpIHsKICAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMkZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgICAgICBwdXNoKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgICAgIHB1c2goZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTQyLDE0
ICsxNDIsMTQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1c2hJbmxpbmUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKFVOTElL
RUxZKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAgICAgIG1ldGhvZFRhYmxl
KHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZhbHVlLCB0cnVlKTsKKyAgICAg
ICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBnbG9iYWxPYmplY3QsIGxl
bmd0aCwgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkK
LSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCBMZW5ndGhFeGNlZWRlZFRoZU1heGltdW1BcnJheUxlbmd0aEVycm9yKSk7Cisg
ICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIExlbmd0aEV4Y2VlZGVkVGhlTWF4aW11bUFycmF5TGVu
Z3RoRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhv
dXRBdHRyaWJ1dGVzPEludDMyU2hhcGU+KGV4ZWMsIGxlbmd0aCwgdmFsdWUpOworICAgICAgICBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8SW50MzJTaGFwZT4o
Z2xvYmFsT2JqZWN0LCBsZW5ndGgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTYzLDE0ICsxNjMsMTQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1c2hJbmxp
bmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKFVOTElLRUxZKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAgICAgIG1l
dGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZhbHVlLCB0cnVl
KTsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBnbG9iYWxP
YmplY3QsIGxlbmd0aCwgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgaWYgKCFzY29wZS5leGNl
cHRpb24oKSkKLSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCBMZW5ndGhFeGNlZWRlZFRoZU1heGltdW1BcnJheUxlbmd0aEVy
cm9yKSk7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgY3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIExlbmd0aEV4Y2VlZGVkVGhlTWF4aW11
bUFycmF5TGVuZ3RoRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhvdXRBdHRyaWJ1dGVzPENvbnRpZ3VvdXNTaGFwZT4oZXhlYywgbGVuZ3RoLCB2YWx1
ZSk7CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRl
czxDb250aWd1b3VzU2hhcGU+KGdsb2JhbE9iamVjdCwgbGVuZ3RoLCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE3OCwxNCArMTc4LDE0IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU0FycmF5OjpwdXNoSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBjb252ZXJ0RG91Ymxl
VG9Db250aWd1b3VzKHZtKTsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAg
ICAgIHB1c2goZXhlYywgdmFsdWUpOworICAgICAgICAgICAgcHVzaChnbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBkb3VibGUgdmFs
dWVBc0RvdWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIGlmICh2YWx1ZUFzRG91Ymxl
ICE9IHZhbHVlQXNEb3VibGUpIHsKICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3Vv
dXModm0pOwogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgcHVzaChl
eGVjLCB2YWx1ZSk7CisgICAgICAgICAgICBwdXNoKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTE5OCwyNiArMTk4LDI2IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKU0FycmF5OjpwdXNoSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBNQVhf
QVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgo
dGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBtZXRob2RUYWJs
ZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZ2xvYmFsT2JqZWN0LCBsZW5ndGgsIHZhbHVlLCB0cnVl
KTsKICAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgTGVuZ3Ro
RXhjZWVkZWRUaGVNYXhpbXVtQXJyYXlMZW5ndGhFcnJvcikpOworICAgICAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBMZW5ndGhFeGNlZWRlZFRoZU1heGltdW1BcnJheUxlbmd0aEVycm9yKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxEb3Vi
bGVTaGFwZT4oZXhlYywgbGVuZ3RoLCB2YWx1ZSk7CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxEb3VibGVTaGFwZT4oZ2xvYmFsT2JqZWN0LCBs
ZW5ndGgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGNhc2UgQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBs
ZW5ndGgoKTsKICAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0
aCwgdmFsdWUsIHRydWUsIHB1dFJlc3VsdCk7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0ZW1w
dFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShnbG9iYWxPYmplY3QsIG9sZExlbmd0aCwgdmFs
dWUsIHRydWUsIHB1dFJlc3VsdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7CiAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgIGlmIChvbGRMZW5n
dGggPCAweEZGRkZGRkZGdSkgewogICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICBzZXRMZW5ndGgoZXhlYywgb2xkTGVuZ3RoICsgMSwgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgc2V0TGVuZ3RoKGdsb2JhbE9iamVjdCwgb2xkTGVuZ3RoICsgMSwgdHJ1ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIzOCwx
NiArMjM4LDE2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU0FycmF5OjpwdXNoSW5saW5lKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIAogICAgICAgICAvLyBQdXNoaW5nIHRvIGFuIGFy
cmF5IG9mIGludmFsaWQgbGVuZ3RoICgyXjMxLTEpIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0
aHJvd3MgYSByYW5nZSBlcnJvci4KICAgICAgICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPmxlbmd0
aCgpID4gTUFYX0FSUkFZX0lOREVYKSkgewotICAgICAgICAgICAgbWV0aG9kVGFibGUodm0pLT5w
dXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSk7Cisg
ICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZ2xvYmFsT2JqZWN0
LCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgLy8gUGVyIEVT
NS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgogICAgICAgICAgICAgaWYg
KCFzY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBMZW5ndGhFeGNlZWRlZFRoZU1heGltdW1B
cnJheUxlbmd0aEVycm9yKSk7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIExlbmd0aEV4Y2Vl
ZGVkVGhlTWF4aW11bUFycmF5TGVuZ3RoRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCiAgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlLCBz
dG9yYWdlKTsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZ2xvYmFsT2JqZWN0LCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUsIHN0b3Jh
Z2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JpZ0ludC5jcHAKaW5kZXggMzMwYjk2ZGFhMDVkY2ZmMjJjZTNhNTEzZjViZmIxZThh
ZjQ2Y2VhZS4uODlmODRkZjJhNTVjZWQ0MWI0NzAzYTJjYzNiYmMwZDEyNWY2MmQ2NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcApAQCAtODMsMTMgKzgzLDEz
IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlWmVybyhWTSYgdm0pCiAgICAgcmV0dXJuIHpl
cm9CaWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGxlbmd0aCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5
Q3JlYXRlV2l0aExlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBs
ZW5ndGgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IG1heExlbmd0aCkpIHsKLSAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0m
IHZtLCBib29sIHZhbHVlKQogICAgIHJldHVybiBiaWdJbnQ7CiB9CiAKLUpTVmFsdWUgSlNCaWdJ
bnQ6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0
CitKU1ZhbHVlIEpTQmlnSW50Ojp0b1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNCaWdJbnQq
Pih0aGlzKTsKIH0KQEAgLTE5NCwzNCArMTk0LDM0IEBAIE9wdGlvbmFsPHVpbnQ4X3Q+IEpTQmln
SW50OjpzaW5nbGVEaWdpdFZhbHVlRm9yU3RyaW5nKCkKICAgICByZXR1cm4geyB9OwogfQogCi1K
U0JpZ0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nVmlldyBz
LCBFcnJvclBhcnNlTW9kZSBwYXJzZXJNb2RlKQorSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUlu
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmdWaWV3IHMsIEVycm9yUGFyc2VN
b2RlIHBhcnNlck1vZGUpCiB7CiAgICAgaWYgKHMuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBw
YXJzZUludChleGVjLCBzLmNoYXJhY3RlcnM4KCksIHMubGVuZ3RoKCksIHBhcnNlck1vZGUpOwot
ICAgIHJldHVybiBwYXJzZUludChleGVjLCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCBw
YXJzZXJNb2RlKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSW50KGdsb2JhbE9iamVjdCwgcy5jaGFy
YWN0ZXJzOCgpLCBzLmxlbmd0aCgpLCBwYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gcGFyc2VJbnQo
Z2xvYmFsT2JqZWN0LCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCBwYXJzZXJNb2RlKTsK
IH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2
bSwgU3RyaW5nVmlldyBzLCB1aW50OF90IHJhZGl4LCBFcnJvclBhcnNlTW9kZSBwYXJzZXJNb2Rl
LCBQYXJzZUludFNpZ24gc2lnbikKK0pTQmlnSW50KiBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJpbmdWaWV3IHMsIHVpbnQ4X3QgcmFk
aXgsIEVycm9yUGFyc2VNb2RlIHBhcnNlck1vZGUsIFBhcnNlSW50U2lnbiBzaWduKQogewogICAg
IGlmIChzLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gcGFyc2VJbnQoZXhlYywgdm0sIHMuY2hh
cmFjdGVyczgoKSwgcy5sZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNlck1vZGUsIHNpZ24sIFBhcnNl
SW50TW9kZTo6RGlzYWxsb3dFbXB0eVN0cmluZyk7Ci0gICAgcmV0dXJuIHBhcnNlSW50KGV4ZWMs
IHZtLCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwgcGFyc2VyTW9kZSwg
c2lnbiwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKKyAgICAgICAgcmV0dXJu
IHBhcnNlSW50KGdsb2JhbE9iamVjdCwgdm0sIHMuY2hhcmFjdGVyczgoKSwgcy5sZW5ndGgoKSwg
MCwgcmFkaXgsIHBhcnNlck1vZGUsIHNpZ24sIFBhcnNlSW50TW9kZTo6RGlzYWxsb3dFbXB0eVN0
cmluZyk7CisgICAgcmV0dXJuIHBhcnNlSW50KGdsb2JhbE9iamVjdCwgdm0sIHMuY2hhcmFjdGVy
czE2KCksIHMubGVuZ3RoKCksIDAsIHJhZGl4LCBwYXJzZXJNb2RlLCBzaWduLCBQYXJzZUludE1v
ZGU6OkRpc2FsbG93RW1wdHlTdHJpbmcpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OnN0cmlu
Z1RvQmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nVmlldyBzKQorSlNCaWdJbnQqIEpTQmln
SW50OjpzdHJpbmdUb0JpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmdW
aWV3IHMpCiB7Ci0gICAgcmV0dXJuIHBhcnNlSW50KGV4ZWMsIHMsIEVycm9yUGFyc2VNb2RlOjpJ
Z25vcmVFeGNlcHRpb25zKTsKKyAgICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCBzLCBF
cnJvclBhcnNlTW9kZTo6SWdub3JlRXhjZXB0aW9ucyk7CiB9CiAKLVN0cmluZyBKU0JpZ0ludDo6
dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCByYWRpeCkKK1N0cmluZyBKU0JpZ0lu
dDo6dG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcmFkaXgp
CiB7CiAgICAgaWYgKHRoaXMtPmlzWmVybygpKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKCcwJyk7CisgICAgICAgIHJldHVy
biBnbG9iYWxPYmplY3QtPnZtKCkuc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1Jl
cCgnMCcpOwogCiAgICAgaWYgKGhhc09uZUJpdFNldChyYWRpeCkpCi0gICAgICAgIHJldHVybiB0
b1N0cmluZ0Jhc2VQb3dlck9mVHdvKGV4ZWMtPnZtKCksIGV4ZWMsIHRoaXMsIHJhZGl4KTsKKyAg
ICAgICAgcmV0dXJuIHRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0LT52bSgpLCBn
bG9iYWxPYmplY3QsIHRoaXMsIHJhZGl4KTsKIAotICAgIHJldHVybiB0b1N0cmluZ0dlbmVyaWMo
ZXhlYy0+dm0oKSwgZXhlYywgdGhpcywgcmFkaXgpOworICAgIHJldHVybiB0b1N0cmluZ0dlbmVy
aWMoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHRoaXMsIHJhZGl4KTsKIH0KIAog
U3RyaW5nIEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcoVk0mIHZtLCBKU0JpZ0ludCogYmlnSW50LCB1
bnNpZ25lZCByYWRpeCkKQEAgLTI0MSwxMyArMjQxLDEzIEBAIHZvaWQgSlNCaWdJbnQ6OmlucGxh
Y2VNdWx0aXBseUFkZChEaWdpdCBmYWN0b3IsIERpZ2l0IHN1bW1hbmQpCiAgICAgaW50ZXJuYWxN
dWx0aXBseUFkZCh0aGlzLCBmYWN0b3IsIHN1bW1hbmQsIGxlbmd0aCgpLCB0aGlzKTsKIH0KIAot
SlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0lu
dCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KQorSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVu
dGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIGJhc2UsIEpTQmln
SW50KiBleHBvbmVudCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBpZiAoZXhwb25lbnQtPnNpZ24oKSkgewotICAgICAgICB0aHJvd1Jhbmdl
RXJyb3IoZXhlYywgc2NvcGUsICJOZWdhdGl2ZSBleHBvbmVudCBpcyBub3QgYWxsb3dlZCJfcyk7
CisgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiTmVnYXRpdmUg
ZXhwb25lbnQgaXMgbm90IGFsbG93ZWQiX3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKQEAgLTI3Myw3ICsyNzMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmV4cG9uZW50aWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiBiYXNlLCBKU0JpZ0ludCogZXhwbwogICAgIC8v
IHJlc3VsdHMuCiAgICAgc3RhdGljX2Fzc2VydChtYXhMZW5ndGhCaXRzIDwgc3RkOjpudW1lcmlj
X2xpbWl0czxEaWdpdD46Om1heCgpLCAibWF4TGVuZ3RoQml0cyBuZWVkcyB0byBiZSBsZXNzIHRo
YW4gZGlnaXQ6Om1heCgpIik7CiAgICAgaWYgKGV4cG9uZW50LT5sZW5ndGgoKSA+IDEpIHsKLSAg
ICAgICAgdGhyb3dSYW5nZUVycm9yKGV4ZWMsIHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9t
IHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOworICAgICAgICB0aHJvd1JhbmdlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlv
biBpcyB0b28gYmlnIl9zKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0y
ODEsNyArMjgxLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG8KICAgICBpZiAoZXhwVmFsdWUg
PT0gMSkKICAgICAgICAgcmV0dXJuIGJhc2U7CiAgICAgaWYgKGV4cFZhbHVlID49IG1heExlbmd0
aEJpdHMpIHsKLSAgICAgICAgdGhyb3dSYW5nZUVycm9yKGV4ZWMsIHNjb3BlLCAiQmlnSW50IGdl
bmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOworICAgICAgICB0aHJv
d1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0
aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCkBAIC0yOTAsNyArMjkwLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG8KICAgICBp
ZiAoYmFzZS0+bGVuZ3RoKCkgPT0gMSAmJiBiYXNlLT5kaWdpdCgwKSA9PSAyKSB7CiAgICAgICAg
IC8vIEZhc3QgcGF0aCBmb3IgMl5uLgogICAgICAgICBpbnQgbmVlZGVkRGlnaXRzID0gMSArIChu
IC8gZGlnaXRCaXRzKTsKLSAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlD
cmVhdGVXaXRoTGVuZ3RoKGV4ZWMsIG5lZWRlZERpZ2l0cyk7CisgICAgICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG5lZWRl
ZERpZ2l0cyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwog
CiAgICAgICAgIHJlc3VsdC0+aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJv
KTsKQEAgLTMxMywxNCArMzEzLDE0IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6ZXhwb25lbnRpYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIGJhc2UsIEpTQmlnSW50KiBleHBvCiAKICAgICBu
ID4+PSAxOwogICAgIGZvciAoOyBuOyBuID4+PSAxKSB7Ci0gICAgICAgIEpTQmlnSW50KiBtYXli
ZVJlc3VsdCA9IEpTQmlnSW50OjptdWx0aXBseShleGVjLCBydW5uaW5nU3F1YXJlLCBydW5uaW5n
U3F1YXJlKTsKKyAgICAgICAgSlNCaWdJbnQqIG1heWJlUmVzdWx0ID0gSlNCaWdJbnQ6Om11bHRp
cGx5KGdsb2JhbE9iamVjdCwgcnVubmluZ1NxdWFyZSwgcnVubmluZ1NxdWFyZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBydW5uaW5nU3F1
YXJlID0gbWF5YmVSZXN1bHQ7CiAgICAgICAgIGlmIChuICYgMSkgewogICAgICAgICAgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVubmluZ1NxdWFyZTsKICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1heWJlUmVzdWx0ID0gSlNCaWdJbnQ6Om11
bHRpcGx5KGV4ZWMsIHJlc3VsdCwgcnVubmluZ1NxdWFyZSk7CisgICAgICAgICAgICAgICAgbWF5
YmVSZXN1bHQgPSBKU0JpZ0ludDo6bXVsdGlwbHkoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIHJ1bm5p
bmdTcXVhcmUpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1heWJlUmVzdWx0OwogICAgICAgICAg
ICAgfQpAQCAtMzMwLDkgKzMzMCw5IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6ZXhwb25lbnRpYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIGJhc2UsIEpTQmlnSW50KiBleHBvCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjptdWx0aXBseShFeGVjU3RhdGUq
IGV4ZWMsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6bXVs
dGlwbHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGlmICh4LT5pc1plcm8oKSkKQEAgLTM0MSw3ICszNDEsNyBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6Om11bHRpcGx5KEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQog
ICAgICAgICByZXR1cm4geTsKIAogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHgtPmxlbmd0
aCgpICsgeS0+bGVuZ3RoKCk7Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlD
cmVhdGVXaXRoTGVuZ3RoKGV4ZWMsIHJlc3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3Vs
dCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVu
Z3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICByZXN1
bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybyk7CiAKQEAgLTM1Miwx
NCArMzUyLDE0IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6bXVsdGlwbHkoRXhlY1N0YXRlKiBleGVj
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmlt
KHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpkaXZpZGUoRXhlY1N0YXRlKiBleGVjLCBK
U0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmRpdmlkZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CiAg
ICAgLy8gMS4gSWYgeSBpcyAwbiwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoeS0+aXNa
ZXJvKCkpIHsKLSAgICAgICAgdGhyb3dSYW5nZUVycm9yKGV4ZWMsIHNjb3BlLCAiMCBpcyBhbiBp
bnZhbGlkIGRpdmlzb3IgdmFsdWUuIl9zKTsKKyAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTM3OSw3ICszNzksNyBAQCBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmRpdmlkZShFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSkKICAgICAgICAgRGlnaXQgcmVtYWluZGVyOwogICAgICAgICBhYnNvbHV0ZURpdldpdGhE
aWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsICZxdW90aWVudCwgcmVtYWluZGVyKTsKICAgICB9
IGVsc2UgewotICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGV4ZWMsIHgsIHks
ICZxdW90aWVudCwgbnVsbHB0cik7CisgICAgICAgIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlz
b3IoZ2xvYmFsT2JqZWN0LCB4LCB5LCAmcXVvdGllbnQsIG51bGxwdHIpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAKQEAgLTQwNywxNCArNDA3
LDE0IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6dW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4
KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6cmVtYWluZGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpT
QmlnSW50OjpyZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KQogewogICAgIC8vIDEuIElmIHkgaXMgMG4sIHRocm93IGEgUmFuZ2VF
cnJvciBleGNlcHRpb24uCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIAogICAgIGlmICh5LT5pc1plcm8oKSkgewotICAgICAgICB0aHJvd1JhbmdlRXJy
b3IoZXhlYywgc2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOworICAg
ICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxp
ZCBkaXZpc29yIHZhbHVlLiJfcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApA
QCAtNDM3LDcgKzQzNyw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6cmVtYWluZGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogICAgICAgICByZW1haW5kZXIgPSBj
cmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAxKTsKICAgICAgICAgcmVtYWluZGVyLT5zZXRE
aWdpdCgwLCByZW1haW5kZXJEaWdpdCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYWJzb2x1dGVE
aXZXaXRoQmlnSW50RGl2aXNvcihleGVjLCB4LCB5LCBudWxscHRyLCAmcmVtYWluZGVyKTsKKyAg
ICAgICAgYWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHksIG51
bGxwdHIsICZyZW1haW5kZXIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKICAgICB9CiAKQEAgLTQ0NSwxNSArNDQ1LDE1IEBAIEpTQmlnSW50KiBKU0JpZ0lu
dDo6cmVtYWluZGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQog
ICAgIHJldHVybiByZW1haW5kZXItPnJpZ2h0VHJpbSh2bSk7CiB9CiAKLUpTQmlnSW50KiBKU0Jp
Z0ludDo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNC
aWdJbnQqIEpTQmlnSW50OjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGJvb2wgeFNpZ24gPSB4LT5zaWduKCk7CiAK
ICAgICAvLyB4ICsgeSA9PSB4ICsgeQogICAgIC8vIC14ICsgLXkgPT0gLSh4ICsgeSkKICAgICBp
ZiAoeFNpZ24gPT0geS0+c2lnbigpKQotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGQoZXhlYywg
eCwgeSwgeFNpZ24pOworICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGQoZ2xvYmFsT2JqZWN0LCB4
LCB5LCB4U2lnbik7CiAKICAgICAvLyB4ICsgLXkgPT0geCAtIHkgPT0gLSh5IC0geCkKICAgICAv
LyAteCArIHkgPT0geSAtIHggPT0gLSh4IC0geSkKQEAgLTQ2NCwxNCArNDY0LDE0IEBAIEpTQmln
SW50KiBKU0JpZ0ludDo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQogICAgIHJldHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwgIXhTaWduKTsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50OjpzdWIoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OnN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYm9vbCB4U2lnbiA9IHgt
PnNpZ24oKTsKICAgICBpZiAoeFNpZ24gIT0geS0+c2lnbigpKSB7CiAgICAgICAgIC8vIHggLSAo
LXkpID09IHggKyB5CiAgICAgICAgIC8vICgteCkgLSB5ID09IC0oeCArIHkpCi0gICAgICAgIHJl
dHVybiBhYnNvbHV0ZUFkZChleGVjLCB4LCB5LCB4U2lnbik7CisgICAgICAgIHJldHVybiBhYnNv
bHV0ZUFkZChnbG9iYWxPYmplY3QsIHgsIHksIHhTaWduKTsKICAgICB9CiAgICAgLy8geCAtIHkg
PT0gLSh5IC0geCkKICAgICAvLyAoLXgpIC0gKC15KSA9PSB5IC0geCA9PSAtKHggLSB5KQpAQCAt
NDgyLDkgKzQ4Miw5IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6c3ViKEV4ZWNTdGF0ZSogZXhlYywg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogICAgIHJldHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwg
eCwgIXhTaWduKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlQW5kKEV4ZWNTdGF0
ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpTQmlnSW50Ojpi
aXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBpZiAoIXgtPnNpZ24oKSAmJiAheS0+c2lnbigpKSB7CkBAIC00OTYsMTQgKzQ5Niwx
NCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VBbmQoRXhlY1N0YXRlKiBleGVjLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpCiAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1h
eCh4LT5sZW5ndGgoKSwgeS0+bGVuZ3RoKCkpICsgMTsKICAgICAgICAgLy8gKC14KSAmICgteSkg
PT0gfih4LTEpICYgfih5LTEpID09IH4oKHgtMSkgfCAoeS0xKSkKICAgICAgICAgLy8gPT0gLSgo
KHgtMSkgfCAoeS0xKSkgKyAxKQotICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVT
dWJPbmUoZXhlYywgeCwgcmVzdWx0TGVuZ3RoKTsKKyAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9
IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwgcmVzdWx0TGVuZ3RoKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKLSAgICAgICAgSlNCaWdJbnQq
IHkxID0gYWJzb2x1dGVTdWJPbmUoZXhlYywgeSwgeS0+bGVuZ3RoKCkpOworICAgICAgICBKU0Jp
Z0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHktPmxlbmd0aCgpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIHJl
c3VsdCA9IGFic29sdXRlT3Iodm0sIHJlc3VsdCwgeTEpOwogICAgICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShleGVjLCByZXN1bHQsIFNpZ25PcHRp
b246OlNpZ25lZCk7CisgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3Qs
IHJlc3VsdCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKICAgICB9CiAKICAgICBBU1NFUlQoeC0+c2ln
bigpICE9IHktPnNpZ24oKSk7CkBAIC01MTIsMTQgKzUxMiwxNCBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmJpdHdpc2VBbmQoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CiAgICAgICAgIHN0ZDo6c3dhcCh4LCB5KTsKICAgICAKICAgICAvLyB4ICYgKC15KSA9PSB4ICYg
fih5LTEpID09IHggJiB+KHktMSkKLSAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShl
eGVjLCB5LCB5LT5sZW5ndGgoKSk7CisgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUo
Z2xvYmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAgICAgcmV0dXJuIGFic29sdXRlQW5kTm90KHZtLCB4LCB5MSk7CiB9
CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lzZU9yKEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlT3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVuc2lnbmVk
IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgtPmxlbmd0aCgpLCB5LT5sZW5ndGgoKSk7CkBAIC01
MzIsMTUgKzUzMiwxNSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VPcihFeGVjU3RhdGUq
IGV4ZWMsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKICAgICBpZiAoeC0+c2lnbigpICYmIHkt
PnNpZ24oKSkgewogICAgICAgICAvLyAoLXgpIHwgKC15KSA9PSB+KHgtMSkgfCB+KHktMSkgPT0g
figoeC0xKSAmICh5LTEpKQogICAgICAgICAvLyA9PSAtKCgoeC0xKSAmICh5LTEpKSArIDEpCi0g
ICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShleGVjLCB4LCByZXN1bHRM
ZW5ndGgpOworICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFs
T2JqZWN0LCB4LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKLSAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZXhl
YywgeSwgeS0+bGVuZ3RoKCkpOworICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9u
ZShnbG9iYWxPYmplY3QsIHksIHktPmxlbmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIHJlc3VsdCA9IGFic29sdXRlQW5kKHZtLCBy
ZXN1bHQsIHkxKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRP
bmUoZXhlYywgcmVzdWx0LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAgICAgICByZXR1cm4gYWJz
b2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIFNpZ25PcHRpb246OlNpZ25lZCk7CiAg
ICAgfQogICAgIAogICAgIEFTU0VSVCh4LT5zaWduKCkgIT0geS0+c2lnbigpKTsKQEAgLTU1MCwx
NyArNTUwLDE3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lzZU9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogICAgICAgICBzdGQ6OnN3YXAoeCwgeSk7CiAg
ICAgCiAgICAgLy8geCB8ICgteSkgPT0geCB8IH4oeS0xKSA9PSB+KCh5LTEpICZ+IHgpID09IC0o
KCh5LTEpICZ+IHgpICsgMSkKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUo
ZXhlYywgeSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVT
dWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHJlc3VsdCA9IGFic29sdXRlQW5kTm90KHZtLCBy
ZXN1bHQsIHgpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVybiBhYnNvbHV0ZUFk
ZE9uZShleGVjLCByZXN1bHQsIFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgcmV0dXJuIGFic29s
dXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBTaWduT3B0aW9uOjpTaWduZWQpOwogfQog
Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VYb3IoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0lu
dCogeCwgSlNCaWdJbnQqIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VYb3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICgheC0+
c2lnbigpICYmICF5LT5zaWduKCkpIHsKQEAgLTU3Miw5ICs1NzIsOSBAQCBKU0JpZ0ludCogSlNC
aWdJbnQ6OmJpdHdpc2VYb3IoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQq
IHkpCiAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4LT5sZW5ndGgoKSwgeS0+
bGVuZ3RoKCkpOwogICAgICAgICAKICAgICAgICAgLy8gKC14KSBeICgteSkgPT0gfih4LTEpIF4g
fih5LTEpID09ICh4LTEpIF4gKHktMSkKLSAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29s
dXRlU3ViT25lKGV4ZWMsIHgsIHJlc3VsdExlbmd0aCk7CisgICAgICAgIEpTQmlnSW50KiByZXN1
bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHJlc3VsdExlbmd0aCk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICBKU0JpZ0lu
dCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShleGVjLCB5LCB5LT5sZW5ndGgoKSk7CisgICAgICAgIEpT
QmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS0+bGVuZ3RoKCkp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7CkBAIC01ODgsNDQgKzU4OCw0NCBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmJpdHdpc2VYb3IoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CiAgICAgICAgIHN0ZDo6c3dhcCh4LCB5KTsKICAgICAKICAgICAvLyB4IF4gKC15KSA9PSB4IF4g
fih5LTEpID09IH4oeCBeICh5LTEpKSA9PSAtKCh4IF4gKHktMSkpICsgMSkKLSAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZXhlYywgeSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBK
U0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCByZXN1bHRM
ZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
cmVzdWx0ID0gYWJzb2x1dGVYb3Iodm0sIHJlc3VsdCwgeCk7CiAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShleGVjLCByZXN1bHQsIFNpZ25PcHRpb246OlNp
Z25lZCk7CisgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBT
aWduT3B0aW9uOjpTaWduZWQpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlmdChF
eGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTQmlnSW50KiBKU0Jp
Z0ludDo6bGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSkKIHsKICAgICBpZiAoeS0+aXNaZXJvKCkgfHwgeC0+aXNaZXJvKCkpCiAg
ICAgICAgIHJldHVybiB4OwogCiAgICAgaWYgKHktPnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIHJp
Z2h0U2hpZnRCeUFic29sdXRlKGV4ZWMsIHgsIHkpOworICAgICAgICByZXR1cm4gcmlnaHRTaGlm
dEJ5QWJzb2x1dGUoZ2xvYmFsT2JqZWN0LCB4LCB5KTsKIAotICAgIHJldHVybiBsZWZ0U2hpZnRC
eUFic29sdXRlKGV4ZWMsIHgsIHkpOworICAgIHJldHVybiBsZWZ0U2hpZnRCeUFic29sdXRlKGds
b2JhbE9iamVjdCwgeCwgeSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6c2lnbmVkUmlnaHRT
aGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTQmlnSW50
KiBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CiAgICAgaWYgKHktPmlzWmVybygpIHx8IHgt
PmlzWmVybygpKQogICAgICAgICByZXR1cm4geDsKIAogICAgIGlmICh5LT5zaWduKCkpCi0gICAg
ICAgIHJldHVybiBsZWZ0U2hpZnRCeUFic29sdXRlKGV4ZWMsIHgsIHkpOworICAgICAgICByZXR1
cm4gbGVmdFNoaWZ0QnlBYnNvbHV0ZShnbG9iYWxPYmplY3QsIHgsIHkpOwogCi0gICAgcmV0dXJu
IHJpZ2h0U2hpZnRCeUFic29sdXRlKGV4ZWMsIHgsIHkpOworICAgIHJldHVybiByaWdodFNoaWZ0
QnlBYnNvbHV0ZShnbG9iYWxPYmplY3QsIHgsIHkpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6
OmJpdHdpc2VOb3QoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCkKK0pTQmlnSW50KiBKU0Jp
Z0ludDo6Yml0d2lzZU5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCog
eCkKIHsKICAgICBpZiAoeC0+c2lnbigpKSB7CiAgICAgICAgIC8vIH4oLXgpID09IH4ofih4LTEp
KSA9PSB4LTEKLSAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViT25lKGV4ZWMsIHgsIHgtPmxlbmd0
aCgpKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwgeC0+
bGVuZ3RoKCkpOwogICAgIH0gCiAgICAgLy8gfnggPT0gLXgtMSA9PSAtKHgrMSkKLSAgICByZXR1
cm4gYWJzb2x1dGVBZGRPbmUoZXhlYywgeCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICByZXR1
cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCB4LCBTaWduT3B0aW9uOjpTaWduZWQpOwog
fQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTkyMSwxMiArOTIxLDEyIEBAIGlubGluZSBK
U0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVDb21wYXJlKEpTQmln
SW50KiB4LCBKU0JpZ0luCiAgICAgcmV0dXJuIHgtPmRpZ2l0KGkpID4geS0+ZGlnaXQoaSkgPyBD
b21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFu
OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkKEV4ZWNTdGF0ZSogZXhlYywg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5LCBib29sIHJlc3VsdFNpZ24pCitKU0JpZ0ludCogSlNC
aWdJbnQ6OmFic29sdXRlQWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSwgYm9vbCByZXN1bHRTaWduKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgaWYgKHgtPmxl
bmd0aCgpIDwgeS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZChleGVjLCB5
LCB4LCByZXN1bHRTaWduKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkKGdsb2JhbE9iamVj
dCwgeSwgeCwgcmVzdWx0U2lnbik7CiAKICAgICBpZiAoeC0+aXNaZXJvKCkpIHsKICAgICAgICAg
QVNTRVJUKHktPmlzWmVybygpKTsKQEAgLTkzNiw3ICs5MzYsNyBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmFic29sdXRlQWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
LCBib29sCiAgICAgaWYgKHktPmlzWmVybygpKQogICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9
PSB4LT5zaWduKCkgPyB4IDogdW5hcnlNaW51cyh2bSwgeCk7CiAKLSAgICBKU0JpZ0ludCogcmVz
dWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZXhlYywgeC0+bGVuZ3RoKCkgKyAx
KTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgo
Z2xvYmFsT2JqZWN0LCB4LT5sZW5ndGgoKSArIDEpOwogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBEaWdpdCBjYXJyeSA9IDA7CkBAIC0xMDQzLDExICsxMDQz
LDExIEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYgdm0s
IEpTQmlnSW50KiB4LCBEaWdpdCBkaXZpc29yLCBKCiAvLyBCb3RoIHtxdW90aWVudH0gYW5kIHty
ZW1haW5kZXJ9IGFyZSBvcHRpb25hbCwgZm9yIGNhbGxlcnMgdGhhdCBhcmUgb25seQogLy8gaW50
ZXJlc3RlZCBpbiBvbmUgb2YgdGhlbS4KIC8vIFNlZSBLbnV0aCwgVm9sdW1lIDIsIHNlY3Rpb24g
NC4zLjEsIEFsZ29yaXRobSBELgotdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50
RGl2aXNvcihFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiBkaXZpZGVuZCwgSlNCaWdJbnQqIGRp
dmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIEpTQmlnSW50KiogcmVtYWluZGVyKQordm9pZCBK
U0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogZGl2aWRlbmQsIEpTQmlnSW50KiBkaXZpc29yLCBKU0JpZ0lu
dCoqIHF1b3RpZW50LCBKU0JpZ0ludCoqIHJlbWFpbmRlcikKIHsKICAgICBBU1NFUlQoZGl2aXNv
ci0+bGVuZ3RoKCkgPj0gMik7CiAgICAgQVNTRVJUKGRpdmlkZW5kLT5sZW5ndGgoKSA+PSBkaXZp
c29yLT5sZW5ndGgoKSk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgLy8gVGhlIHVudXN1YWwgdmFyaWFibGUgbmFtZXMgaW5zaWRlIHRoaXMgZnVu
Y3Rpb24gYXJlIGNvbnNpc3RlbnQgd2l0aApAQCAtMTA2MCwxMSArMTA2MCwxMSBAQCB2b2lkIEpT
QmlnSW50OjphYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKEV4ZWNTdGF0ZSogZXhlYywgSlNC
aWdJbnQqIGRpdmlkZW5kLAogICAgIC8vIFRoZSBxdW90aWVudCB0byBiZSBjb21wdXRlZC4KICAg
ICBKU0JpZ0ludCogcSA9IG51bGxwdHI7CiAgICAgaWYgKHF1b3RpZW50ICE9IG51bGxwdHIpCi0g
ICAgICAgIHEgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKGV4ZWMtPnZtKCksIG0gKyAxKTsK
KyAgICAgICAgcSA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoZ2xvYmFsT2JqZWN0LT52bSgp
LCBtICsgMSk7CiAgICAgCiAgICAgLy8gSW4gZWFjaCBpdGVyYXRpb24sIHtxaGF0dn0gaG9sZHMg
e2Rpdmlzb3J9ICoge2N1cnJlbnQgcXVvdGllbnQgZGlnaXR9LgogICAgIC8vICJ2IiBpcyB0aGUg
Ym9vaydzIG5hbWUgZm9yIHtkaXZpc29yfSwgInFoYXQiIHRoZSBjdXJyZW50IHF1b3RpZW50IGRp
Z2l0LgotICAgIEpTQmlnSW50KiBxaGF0diA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgoZXhlYywgbiAr
IDEpOworICAgIEpTQmlnSW50KiBxaGF0diA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2Jq
ZWN0LCBuICsgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAg
ICAKICAgICAvLyBEMS4KQEAgLTEwNzYsMTMgKzEwNzYsMTMgQEAgdm9pZCBKU0JpZ0ludDo6YWJz
b2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiBkaXZp
ZGVuZCwKICAgICB1bnNpZ25lZCBzaGlmdCA9IGNseihsYXN0RGlnaXQpOwogCiAgICAgaWYgKHNo
aWZ0ID4gMCkgewotICAgICAgICBkaXZpc29yID0gYWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5
KGV4ZWMsIGRpdmlzb3IsIHNoaWZ0LCBMZWZ0U2hpZnRNb2RlOjpTYW1lU2l6ZVJlc3VsdCk7Cisg
ICAgICAgIGRpdmlzb3IgPSBhYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoZ2xvYmFsT2JqZWN0
LCBkaXZpc29yLCBzaGlmdCwgTGVmdFNoaWZ0TW9kZTo6U2FtZVNpemVSZXN1bHQpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIAogICAgIC8vIEhv
bGRzIHRoZSAoY29udGludW91c2x5IHVwZGF0ZWQpIHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBkaXZp
ZGVuZCwgd2hpY2gKICAgICAvLyBldmVudHVhbGx5IGJlY29tZXMgdGhlIHJlbWFpbmRlci4KLSAg
ICBKU0JpZ0ludCogdSA9IGFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weShleGVjLCBkaXZpZGVu
ZCwgc2hpZnQsIExlZnRTaGlmdE1vZGU6OkFsd2F5c0FkZE9uZURpZ2l0KTsKKyAgICBKU0JpZ0lu
dCogdSA9IGFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weShnbG9iYWxPYmplY3QsIGRpdmlkZW5k
LCBzaGlmdCwgTGVmdFNoaWZ0TW9kZTo6QWx3YXlzQWRkT25lRGlnaXQpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICAvLyBEMi4KQEAgLTEyMTEsMTQgKzEy
MTEsMTQgQEAgdm9pZCBKU0JpZ0ludDo6aW5wbGFjZVJpZ2h0U2hpZnQodW5zaWduZWQgc2hpZnQp
CiB9CiAKIC8vIEFsd2F5cyBjb3BpZXMgdGhlIGlucHV0LCBldmVuIHdoZW4ge3NoaWZ0fSA9PSAw
LgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoRXhlY1N0
YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgdW5zaWduZWQgc2hpZnQsIExlZnRTaGlmdE1vZGUgbW9k
ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCB1bnNpZ25lZCBzaGlmdCwgTGVm
dFNoaWZ0TW9kZSBtb2RlKQogewogICAgIEFTU0VSVChzaGlmdCA8IGRpZ2l0Qml0cyk7CiAgICAg
QVNTRVJUKCF4LT5pc1plcm8oKSk7CiAKICAgICB1bnNpZ25lZCBuID0geC0+bGVuZ3RoKCk7CiAg
ICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gbW9kZSA9PSBMZWZ0U2hpZnRNb2RlOjpBbHdheXNB
ZGRPbmVEaWdpdCA/IG4gKyAxIDogbjsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRl
V2l0aExlbmd0aChleGVjLCByZXN1bHRMZW5ndGgpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSB0
cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEzMjUsNyArMTMyNSw3IEBA
IEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVYb3IoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCiAgICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURp
Z2l0c0hhbmRsaW5nOjpDb3B5LCBTeW1tZXRyaWNPcDo6U3ltbWV0cmljLCBkaWdpdE9wZXJhdGlv
bik7CiB9CiAgICAgCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEV4ZWNTdGF0
ZSogZXhlYywgSlNCaWdJbnQqIHgsIFNpZ25PcHRpb24gc2lnbk9wdGlvbikKK0pTQmlnSW50KiBK
U0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIHgsIFNpZ25PcHRpb24gc2lnbk9wdGlvbikKIHsKICAgICB1bnNpZ25lZCBpbnB1dExl
bmd0aCA9IHgtPmxlbmd0aCgpOwogICAgIC8vIFRoZSBhZGRpdGlvbiB3aWxsIG92ZXJmbG93IGlu
dG8gYSBuZXcgZGlnaXQgaWYgYWxsIGV4aXN0aW5nIGRpZ2l0cyBhcmUKQEAgLTEzMzksNyArMTMz
OSw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUoRXhlY1N0YXRlKiBleGVj
LCBKU0JpZ0ludCogeCwgU2lnbk9wdGlvbiBzaWduCiAgICAgfQogCiAgICAgdW5zaWduZWQgcmVz
dWx0TGVuZ3RoID0gaW5wdXRMZW5ndGggKyB3aWxsT3ZlcmZsb3c7Ci0gICAgSlNCaWdJbnQqIHJl
c3VsdCA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgoZXhlYywgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0Jp
Z0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExl
bmd0aCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0x
MzU1LDE3ICsxMzU1LDE3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUoRXhl
Y1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgU2lnbk9wdGlvbiBzaWduCiAgICAgICAgIEFTU0VS
VCghY2FycnkpOwogCiAgICAgcmVzdWx0LT5zZXRTaWduKHNpZ25PcHRpb24gPT0gU2lnbk9wdGlv
bjo6U2lnbmVkKTsKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0oZXhlYy0+dm0oKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdC0+dm0oKSk7CiB9CiAKLUpT
QmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0lu
dCogeCwgdW5zaWduZWQgcmVzdWx0TGVuZ3RoKQorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0
ZVN1Yk9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgdW5zaWdu
ZWQgcmVzdWx0TGVuZ3RoKQogewogICAgIEFTU0VSVCgheC0+aXNaZXJvKCkpOwogICAgIEFTU0VS
VChyZXN1bHRMZW5ndGggPj0geC0+bGVuZ3RoKCkpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVX
aXRoTGVuZ3RoKGV4ZWMsIHJlc3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IHRy
eUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
eC0+bGVuZ3RoKCk7CkBAIC0xMzgyLDE0ICsxMzgyLDE0IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6
YWJzb2x1dGVTdWJPbmUoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgdW5zaWduZWQgcmVz
dWx0CiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpT
QmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgs
IEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRv
IG9wdGlvbmFsU2hpZnQgPSB0b1NoaWZ0QW1vdW50KHkpOwogICAgIGlmICghb3B0aW9uYWxTaGlm
dCkgewotICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZXhlYywgc2NvcGUsICJCaWdJbnQgZ2VuZXJh
dGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7CisgICAgICAgIHRocm93UmFu
Z2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMg
b3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKQEAgLTE0MDAsMTEgKzE0MDAsMTEgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0U2hpZnRC
eUFic29sdXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KgogICAgIGJv
b2wgZ3JvdyA9IGJpdHNTaGlmdCAmJiAoeC0+ZGlnaXQobGVuZ3RoIC0gMSkgPj4gKGRpZ2l0Qml0
cyAtIGJpdHNTaGlmdCkpOwogICAgIGludCByZXN1bHRMZW5ndGggPSBsZW5ndGggKyBkaWdpdFNo
aWZ0ICsgZ3JvdzsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdExlbmd0aCkg
PiBtYXhMZW5ndGgpIHsKLSAgICAgICAgdGhyb3dSYW5nZUVycm9yKGV4ZWMsIHNjb3BlLCAiQmln
SW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOworICAgICAg
ICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQg
ZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgo
ZXhlYywgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0
aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgaWYgKCFiaXRzU2hpZnQpIHsKICAgICAgICAgdW5z
aWduZWQgaSA9IDA7CkBAIC0xNDM0LDkgKzE0MzQsOSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6Omxl
ZnRTaGlmdEJ5QWJzb2x1dGUoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQq
CiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmln
SW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgtPmxlbmd0aCgpOwogICAgIGJvb2wgc2lnbiA9IHgt
PnNpZ24oKTsKICAgICBhdXRvIG9wdGlvbmFsU2hpZnQgPSB0b1NoaWZ0QW1vdW50KHkpOwpAQCAt
MTUwMCw3ICsxNTAwLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCoKICAgICAgICAgICAgIC8v
IFNpbmNlIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIHJvdW5kaW5nIGRvd24gbWVhbnMgYWRkaW5n
IG9uZSB0bwogICAgICAgICAgICAgLy8gaXRzIGFic29sdXRlIHZhbHVlLiBUaGlzIGNhbm5vdCBv
dmVyZmxvdy4KICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKLSAg
ICAgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShleGVjLCByZXN1bHQsIFNpZ25PcHRpb246
OlNpZ25lZCk7CisgICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0
LCByZXN1bHQsIFNpZ25PcHRpb246OlNpZ25lZCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1
NTgsNyArMTU1OCw3IEBAIHVpbnQ2NF90IEpTQmlnSW50OjpjYWxjdWxhdGVNYXhpbXVtQ2hhcmFj
dGVyc1JlcXVpcmVkKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQKICAgICByZXR1cm4gbWF4aW11
bUNoYXJhY3RlcnNSZXF1aXJlZDsKIH0KIAotU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQ
b3dlck9mVHdvKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgdW5zaWduZWQg
cmFkaXgpCitTdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgdW5zaWduZWQgcmFkaXgp
CiB7CiAgICAgQVNTRVJUKGhhc09uZUJpdFNldChyYWRpeCkpOwogICAgIEFTU0VSVChyYWRpeCA+
PSAyICYmIHJhZGl4IDw9IDMyKTsKQEAgLTE1NzgsOSArMTU3OCw5IEBAIFN0cmluZyBKU0JpZ0lu
dDo6dG9TdHJpbmdCYXNlUG93ZXJPZlR3byhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJ
bnQqIHgsIHVuCiAgICAgY29uc3Qgc2l6ZV90IGNoYXJzUmVxdWlyZWQgPSAoYml0TGVuZ3RoICsg
Yml0c1BlckNoYXIgLSAxKSAvIGJpdHNQZXJDaGFyICsgc2lnbjsKIAogICAgIGlmIChjaGFyc1Jl
cXVpcmVkID4gSlNTdHJpbmc6Ok1heExlbmd0aCkgewotICAgICAgICBpZiAoZXhlYykgeworICAg
ICAgICBpZiAoZ2xvYmFsT2JqZWN0KSB7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yywgc2NvcGUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUpOyAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICB9CkBAIC0xNjIwLDcgKzE2MjAsNyBAQCBTdHJpbmcgSlNCaWdJ
bnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTQmln
SW50KiB4LCB1bgogICAgIHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKHJlc3VsdFN0
cmluZykpOwogfQogCi1TdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyhWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQorU3RyaW5nIEpTQmln
SW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgdW5zaWduZWQgcmFkaXgpCiB7CiAgICAgLy8gRklYTUU6IFtKU0NdIFJl
dmlzaXQgdXNhZ2Ugb2YgVmVjdG9yIGludG8gSlNCaWdJbnQ6OnRvU3RyaW5nCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDY3CkBAIC0xNjM2LDkgKzE2
MzYsOSBAQCBTdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyhWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlNCaWdJbnQqIHgsIHVuc2lnbmVkCiAgICAgdWludDY0X3QgbWF4aW11bUNoYXJh
Y3RlcnNSZXF1aXJlZCA9IGNhbGN1bGF0ZU1heGltdW1DaGFyYWN0ZXJzUmVxdWlyZWQobGVuZ3Ro
LCByYWRpeCwgeC0+ZGlnaXQobGVuZ3RoIC0gMSksIHNpZ24pOwogCiAgICAgaWYgKG1heGltdW1D
aGFyYWN0ZXJzUmVxdWlyZWQgPiBKU1N0cmluZzo6TWF4TGVuZ3RoKSB7Ci0gICAgICAgIGlmIChl
eGVjKSB7CisgICAgICAgIGlmIChnbG9iYWxPYmplY3QpIHsKICAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjLCBzY29wZSk7ICAgICAgICAgICAgCisgICAgICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7ICAgICAgICAgICAgCiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTE3MzEsNyArMTczMSw3IEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6cmlnaHRUcmltKFZNJiB2bSkKICAgICByZXR1cm4gdHJpbW1lZEJp
Z0ludDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjphbGxvY2F0ZUZvcihFeGVjU3RhdGUqIGV4
ZWMsIFZNJiB2bSwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJjb3VudCkKK0pTQmlnSW50
KiBKU0JpZ0ludDo6YWxsb2NhdGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0m
IHZtLCB1bnNpZ25lZCByYWRpeCwgdW5zaWduZWQgY2hhcmNvdW50KQogewogICAgIEFTU0VSVCgy
IDw9IHJhZGl4ICYmIHJhZGl4IDw9IDM2KTsKIApAQCAtMTc1Myw5ICsxNzUzLDkgQEAgSlNCaWdJ
bnQqIEpTQmlnSW50OjphbGxvY2F0ZUZvcihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgdW5zaWdu
ZWQgcmFkaXgsIHVuc2lnbmUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjKSB7Cisg
ICAgaWYgKGdsb2JhbE9iamVjdCkgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7
CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAg
ICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xNzY1LDI1ICsxNzY1LDI1IEBAIHNpemVf
dCBKU0JpZ0ludDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwsIFZNJiB2bSkKICAgICByZXR1
cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsLCB2bSkgKyBqc0Nhc3Q8SlNCaWdJbnQqPihjZWxs
KS0+bV9sZW5ndGggKiBzaXplb2YoRGlnaXQpOwogfQogCi1kb3VibGUgSlNCaWdJbnQ6OnRvTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK2RvdWJsZSBKU0JpZ0ludDo6dG9OdW1iZXIoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
ICJDb252ZXJzaW9uIGZyb20gJ0JpZ0ludCcgdG8gJ251bWJlcicgaXMgbm90IGFsbG93ZWQuIl9z
KTsKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ29udmVyc2lvbiBm
cm9tICdCaWdJbnQnIHRvICdudW1iZXInIGlzIG5vdCBhbGxvd2VkLiJfcyk7CiAgICAgcmV0dXJu
IDAuMDsKIH0KIAotYm9vbCBKU0JpZ0ludDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSog
ZXhlYywgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgSlNCaWdJ
bnQ6OmdldFByaW1pdGl2ZU51bWJlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBkb3Vi
bGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdWx0KSBjb25zdAogewogICAgIHJlc3VsdCA9IHRoaXM7
Ci0gICAgbnVtYmVyID0gdG9OdW1iZXIoZXhlYyk7CisgICAgbnVtYmVyID0gdG9OdW1iZXIoZ2xv
YmFsT2JqZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJUeXBlPgotSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIENo
YXJUeXBlKiAgZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBFcnJvclBhcnNlTW9kZSBlcnJvclBhcnNl
TW9kZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2hhclR5cGUqICBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIEVycm9yUGFyc2VNb2Rl
IGVycm9yUGFyc2VNb2RlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgdW5zaWduZWQgcCA9IDA7CiAgICAgd2hpbGUg
KHAgPCBsZW5ndGggJiYgaXNTdHJXaGl0ZVNwYWNlKGRhdGFbcF0pKQpAQCAtMTc5MiwxMyArMTc5
MiwxMyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgQ2hh
clR5cGUqICBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsCiAgICAgLy8gQ2hlY2sgUmFkaXggZnJvbSBm
cmlzdCBjaGFyYWN0ZXJzCiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihwKSArIDEgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSAmJiBkYXRhW3BdID09ICcwJykgewogICAgICAg
ICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChkYXRhW3AgKyAxXSwgJ2InKSkKLSAgICAg
ICAgICAgIHJldHVybiBwYXJzZUludChleGVjLCB2bSwgZGF0YSwgbGVuZ3RoLCBwICsgMiwgMiwg
ZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbjo6VW5zaWduZWQsIFBhcnNlSW50TW9kZTo6RGlz
YWxsb3dFbXB0eVN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2Jq
ZWN0LCB2bSwgZGF0YSwgbGVuZ3RoLCBwICsgMiwgMiwgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50
U2lnbjo6VW5zaWduZWQsIFBhcnNlSW50TW9kZTo6RGlzYWxsb3dFbXB0eVN0cmluZyk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChkYXRhW3AgKyAxXSwg
J3gnKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUludChleGVjLCB2bSwgZGF0YSwgbGVuZ3Ro
LCBwICsgMiwgMTYsIGVycm9yUGFyc2VNb2RlLCBQYXJzZUludFNpZ246OlVuc2lnbmVkLCBQYXJz
ZUludE1vZGU6OkRpc2FsbG93RW1wdHlTdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNl
SW50KGdsb2JhbE9iamVjdCwgdm0sIGRhdGEsIGxlbmd0aCwgcCArIDIsIDE2LCBlcnJvclBhcnNl
TW9kZSwgUGFyc2VJbnRTaWduOjpVbnNpZ25lZCwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5
U3RyaW5nKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KGRhdGFbcCArIDFdLCAnbycpKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGV4ZWMsIHZt
LCBkYXRhLCBsZW5ndGgsIHAgKyAyLCA4LCBlcnJvclBhcnNlTW9kZSwgUGFyc2VJbnRTaWduOjpV
bnNpZ25lZCwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKKyAgICAgICAgICAg
IHJldHVybiBwYXJzZUludChnbG9iYWxPYmplY3QsIHZtLCBkYXRhLCBsZW5ndGgsIHAgKyAyLCA4
LCBlcnJvclBhcnNlTW9kZSwgUGFyc2VJbnRTaWduOjpVbnNpZ25lZCwgUGFyc2VJbnRNb2RlOjpE
aXNhbGxvd0VtcHR5U3RyaW5nKTsKICAgICB9CiAKICAgICBQYXJzZUludFNpZ24gc2lnbiA9IFBh
cnNlSW50U2lnbjo6VW5zaWduZWQ7CkBAIC0xODExLDcgKzE4MTEsNyBAQCBKU0JpZ0ludCogSlNC
aWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgQ2hhclR5cGUqICBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gcGFy
c2VJbnQoZXhlYywgdm0sIGRhdGEsIGxlbmd0aCwgcCwgMTAsIGVycm9yUGFyc2VNb2RlLCBzaWdu
KTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCB2bSwgZGF0
YSwgbGVuZ3RoLCBwLCAxMCwgZXJyb3JQYXJzZU1vZGUsIHNpZ24pOwogCiAgICAgaWYgKHJlc3Vs
dCAmJiAhcmVzdWx0LT5pc1plcm8oKSkKICAgICAgICAgcmVzdWx0LT5zZXRTaWduKHNpZ24gPT0g
UGFyc2VJbnRTaWduOjpTaWduZWQpOwpAQCAtMTgyMCw3ICsxODIwLDcgQEAgSlNCaWdJbnQqIEpT
QmlnSW50OjpwYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIENoYXJUeXBlKiAgZGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoLAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci1KU0JpZ0ludCog
SlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBDaGFyVHlwZSogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCByYWRpeCwg
RXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbiBzaWduLCBQYXJzZUlu
dE1vZGUgcGFyc2VNb2RlKQorSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIHJhZGl4LCBFcnJvclBhcnNlTW9kZSBl
cnJvclBhcnNlTW9kZSwgUGFyc2VJbnRTaWduIHNpZ24sIFBhcnNlSW50TW9kZSBwYXJzZU1vZGUp
CiB7CiAgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKICAgICB1bnNpZ25lZCBwID0gc3RhcnRJbmRl
eDsKQEAgLTE4MjgsOSArMTgyOCw5IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6cGFyc2VJbnQoRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLCB1bnNpZ25lZCBsCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHBhcnNlTW9kZSAh
PSBQYXJzZUludE1vZGU6OkFsbG93RW1wdHlTdHJpbmcgJiYgc3RhcnRJbmRleCA9PSBsZW5ndGgp
IHsKLSAgICAgICAgQVNTRVJUKGV4ZWMpOworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgaWYgKGVycm9yUGFyc2VNb2RlID09IEVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2Vw
dGlvbnMpCi0gICAgICAgICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZVN5bnRh
eEVycm9yKGV4ZWMsICJGYWlsZWQgdG8gcGFyc2UgU3RyaW5nIHRvIEJpZ0ludCIpKTsKKyAgICAg
ICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJv
cihnbG9iYWxPYmplY3QsICJGYWlsZWQgdG8gcGFyc2UgU3RyaW5nIHRvIEJpZ0ludCIpKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xODUyLDcgKzE4NTIsNyBAQCBKU0Jp
Z0ludCogSlNCaWdJbnQ6OnBhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBDaGFyVHlw
ZSogZGF0YSwgdW5zaWduZWQgbAogICAgIHVuc2lnbmVkIGxpbWl0YSA9ICdhJyArIChyYWRpeCAt
IDEwKTsKICAgICB1bnNpZ25lZCBsaW1pdEEgPSAnQScgKyAocmFkaXggLSAxMCk7CiAKLSAgICBK
U0JpZ0ludCogcmVzdWx0ID0gYWxsb2NhdGVGb3IoZXhlYywgdm0sIHJhZGl4LCBsZW5ndGggLSBw
KTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWxsb2NhdGVGb3IoZ2xvYmFsT2JqZWN0LCB2bSwg
cmFkaXgsIGxlbmd0aCAtIHApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogCiAgICAgcmVzdWx0LT5pbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFpl
cm8pOwpAQCAtMTg3NSw5ICsxODc1LDkgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpwYXJzZUludChF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGwKICAgICBp
ZiAocCA9PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CiAK
LSAgICBBU1NFUlQoZXhlYyk7CisgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKGVy
cm9yUGFyc2VNb2RlID09IEVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMpCi0gICAgICAg
IHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgIkZhaWxl
ZCB0byBwYXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOworICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCAiRmFpbGVk
IHRvIHBhcnNlIFN0cmluZyB0byBCaWdJbnQiKSk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
QEAgLTE4OTQsOSArMTg5NCw5IEBAIGlubGluZSB2b2lkIEpTQmlnSW50OjpzZXREaWdpdCh1bnNp
Z25lZCBuLCBEaWdpdCB2YWx1ZSkKICAgICBkYXRhU3RvcmFnZSgpW25dID0gdmFsdWU7CiB9CiAK
LUpTT2JqZWN0KiBKU0JpZ0ludDo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAorSlNPYmplY3QqIEpTQmlnSW50Ojp0b09iamVjdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIHJldHVybiBCaWdJbnRP
YmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0X2Nhc3Q8SlNCaWdJ
bnQqPih0aGlzKSk7CisgICAgcmV0dXJuIEJpZ0ludE9iamVjdDo6Y3JlYXRlKGdsb2JhbE9iamVj
dC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBjb25zdF9jYXN0PEpTQmlnSW50Kj4odGhpcykpOwogfQog
CiBib29sIEpTQmlnSW50OjplcXVhbHNUb051bWJlcihKU1ZhbHVlIG51bVZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5kZXggMzBhOGMxNTY5ZThjMDkwNmJl
ZTkzNTFlNjg0NjIzMThjODRjYjcxYS4uM2M0NTYxZGE3MGVkYjljNDJhOTdkODU1MGEyMzMzMTc5
YmNjMzVkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCkBAIC01
Miw3ICs1Miw3IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZVplcm8oVk0m
KTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIHRyeUNyZWF0ZVdpdGhMZW5ndGgoRXhlY1N0YXRlKiwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIHRyeUNyZWF0ZVdpdGhMZW5n
dGgoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBKU0JpZ0lu
dCogY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAg
ICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBpbnQzMl90IHZhbHVlKTsKQEAgLTY3
LDcgKzY3LDcgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgIEpTVmFsdWUgdG9QcmltaXRp
dmUoSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKIAogICAg
IHZvaWQgc2V0U2lnbihib29sIHNpZ24pIHsgbV9zaWduID0gc2lnbjsgfQogICAgIGJvb2wgc2ln
bigpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbjsgfQpAQCAtODIsMTQgKzgyLDE0IEBAIGNsYXNzIEpT
QmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgZW51bSBjbGFzcyBQYXJzZUludE1v
ZGUgeyBEaXNhbGxvd0VtcHR5U3RyaW5nLCBBbGxvd0VtcHR5U3RyaW5nIH07CiAgICAgZW51bSBj
bGFzcyBQYXJzZUludFNpZ24geyBVbnNpZ25lZCwgU2lnbmVkIH07CiAKLSAgICBzdGF0aWMgSlNC
aWdJbnQqIHBhcnNlSW50KEV4ZWNTdGF0ZSosIFZNJiwgU3RyaW5nVmlldywgdWludDhfdCByYWRp
eCwgRXJyb3JQYXJzZU1vZGUgPSBFcnJvclBhcnNlTW9kZTo6VGhyb3dFeGNlcHRpb25zLCBQYXJz
ZUludFNpZ24gPSBQYXJzZUludFNpZ246OlVuc2lnbmVkKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQq
IHBhcnNlSW50KEV4ZWNTdGF0ZSosIFN0cmluZ1ZpZXcsIEVycm9yUGFyc2VNb2RlID0gRXJyb3JQ
YXJzZU1vZGU6OlRocm93RXhjZXB0aW9ucyk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBzdHJpbmdU
b0JpZ0ludChFeGVjU3RhdGUqLCBTdHJpbmdWaWV3KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIHBh
cnNlSW50KEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBTdHJpbmdWaWV3LCB1aW50OF90IHJhZGl4LCBF
cnJvclBhcnNlTW9kZSA9IEVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMsIFBhcnNlSW50
U2lnbiA9IFBhcnNlSW50U2lnbjo6VW5zaWduZWQpOworICAgIHN0YXRpYyBKU0JpZ0ludCogcGFy
c2VJbnQoSlNHbG9iYWxPYmplY3QqLCBTdHJpbmdWaWV3LCBFcnJvclBhcnNlTW9kZSA9IEVycm9y
UGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMpOworICAgIHN0YXRpYyBKU0JpZ0ludCogc3RyaW5n
VG9CaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBTdHJpbmdWaWV3KTsKIAogICAgIHN0YXRpYyBTdHJp
bmcgdHJ5R2V0U3RyaW5nKFZNJiwgSlNCaWdJbnQqLCB1bnNpZ25lZCByYWRpeCk7CiAKICAgICBP
cHRpb25hbDx1aW50OF90PiBzaW5nbGVEaWdpdFZhbHVlRm9yU3RyaW5nKCk7Ci0gICAgU3RyaW5n
IHRvU3RyaW5nKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHJhZGl4KTsKKyAgICBTdHJpbmcgdG9TdHJp
bmcoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCByYWRpeCk7CiAgICAgCiAgICAgZW51bSBjbGFz
cyBDb21wYXJpc29uTW9kZSB7CiAgICAgICAgIExlc3NUaGFuLApAQCAtMTA3LDMxICsxMDcsMzEg
QEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBib29sIGVxdWFs
c1RvTnVtYmVyKEpTVmFsdWUpOwogICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmUo
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKIAotICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVy
KEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAg
IGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBib29sIGdldFByaW1pdGl2
ZU51bWJlcihKU0dsb2JhbE9iamVjdCosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiByZXN1bHQp
IGNvbnN0OworICAgIGRvdWJsZSB0b051bWJlcihKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCi0g
ICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7
CisgICAgSlNPYmplY3QqIHRvT2JqZWN0KEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgaW5s
aW5lIGJvb2wgdG9Cb29sZWFuKCkgY29uc3QgeyByZXR1cm4gIWlzWmVybygpOyB9CiAKLSAgICBz
dGF0aWMgSlNCaWdJbnQqIGV4cG9uZW50aWF0ZShFeGVjU3RhdGUqLCBKU0JpZ0ludCogYmFzZSwg
SlNCaWdJbnQqIGV4cG9uZW50KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGV4cG9uZW50aWF0ZShK
U0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiBiYXNlLCBKU0JpZ0ludCogZXhwb25lbnQpOwogCi0g
ICAgc3RhdGljIEpTQmlnSW50KiBtdWx0aXBseShFeGVjU3RhdGUqLCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogbXVsdGlwbHkoSlNHbG9iYWxPYmplY3Qq
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwogICAgIAogICAgIENvbXBhcmlzb25SZXN1bHQg
c3RhdGljIGNvbXBhcmVUb0RvdWJsZShKU0JpZ0ludCogeCwgZG91YmxlIHkpOwogCi0gICAgc3Rh
dGljIEpTQmlnSW50KiBhZGQoRXhlY1N0YXRlKiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsK
LSAgICBzdGF0aWMgSlNCaWdJbnQqIHN1YihFeGVjU3RhdGUqLCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogZGl2aWRlKEV4ZWNTdGF0ZSosIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiByZW1haW5kZXIoRXhlY1N0
YXRlKiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFk
ZChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGlj
IEpTQmlnSW50KiBzdWIoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
OworICAgIHN0YXRpYyBKU0JpZ0ludCogZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIHJlbWFpbmRlcihKU0dsb2Jh
bE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CiAgICAgc3RhdGljIEpTQmlnSW50
KiB1bmFyeU1pbnVzKFZNJiwgSlNCaWdJbnQqIHgpOwogCi0gICAgc3RhdGljIEpTQmlnSW50KiBi
aXR3aXNlQW5kKEV4ZWNTdGF0ZSosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3Rh
dGljIEpTQmlnSW50KiBiaXR3aXNlT3IoRXhlY1N0YXRlKiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VYb3IoRXhlY1N0YXRlKiwgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VOb3QoRXhl
Y1N0YXRlKiwgSlNCaWdJbnQqIHgpOworICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZUFuZChK
U0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpT
QmlnSW50KiBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQq
IHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlTm90
KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOwogCi0gICAgc3RhdGljIEpTQmlnSW50KiBs
ZWZ0U2hpZnQoRXhlY1N0YXRlKiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIHNpZ25lZFJpZ2h0U2hpZnQoRXhlY1N0YXRlKiwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGxlZnRTaGlmdChKU0dsb2JhbE9iamVj
dCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBzaWdu
ZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsK
IAogcHJpdmF0ZToKIApAQCAtMTU1LDE0ICsxNTUsMTQgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICBzdGF0aWMgdm9pZCBhYnNvbHV0ZURpdldpdGhEaWdpdERp
dmlzb3IoVk0mLCBKU0JpZ0ludCogeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVu
dCwgRGlnaXQmIHJlbWFpbmRlcik7CiAgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxNdWx0aXBseUFk
ZChKU0JpZ0ludCogc291cmNlLCBEaWdpdCBmYWN0b3IsIERpZ2l0IHN1bW1hbmQsIHVuc2lnbmVk
LCBKU0JpZ0ludCogcmVzdWx0KTsKICAgICBzdGF0aWMgdm9pZCBtdWx0aXBseUFjY3VtdWxhdGUo
SlNCaWdJbnQqIG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwgSlNCaWdJbnQqIGFjY3Vt
dWxhdG9yLCB1bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KTsKLSAgICBzdGF0aWMgdm9pZCBhYnNv
bHV0ZURpdldpdGhCaWdJbnREaXZpc29yKEV4ZWNTdGF0ZSosIEpTQmlnSW50KiBkaXZpZGVuZCwg
SlNCaWdJbnQqIGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIEpTQmlnSW50KiogcmVtYWlu
ZGVyKTsKKyAgICBzdGF0aWMgdm9pZCBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKEpTR2xv
YmFsT2JqZWN0KiwgSlNCaWdJbnQqIGRpdmlkZW5kLCBKU0JpZ0ludCogZGl2aXNvciwgSlNCaWdJ
bnQqKiBxdW90aWVudCwgSlNCaWdJbnQqKiByZW1haW5kZXIpOwogICAgIAogICAgIGVudW0gY2xh
c3MgTGVmdFNoaWZ0TW9kZSB7CiAgICAgICAgIFNhbWVTaXplUmVzdWx0LAogICAgICAgICBBbHdh
eXNBZGRPbmVEaWdpdAogICAgIH07CiAgICAgCi0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0
ZUxlZnRTaGlmdEFsd2F5c0NvcHkoRXhlY1N0YXRlKiwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHNo
aWZ0LCBMZWZ0U2hpZnRNb2RlKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlTGVmdFNo
aWZ0QWx3YXlzQ29weShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCB1bnNpZ25lZCBzaGlm
dCwgTGVmdFNoaWZ0TW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHJvZHVjdEdyZWF0ZXJUaGFuKERp
Z2l0IGZhY3RvcjEsIERpZ2l0IGZhY3RvcjIsIERpZ2l0IGhpZ2gsIERpZ2l0IGxvdyk7CiAKICAg
ICBEaWdpdCBhYnNvbHV0ZUlucGxhY2VBZGQoSlNCaWdJbnQqIHN1bW1hbmQsIHVuc2lnbmVkIHN0
YXJ0SW5kZXgpOwpAQCAtMTkyLDggKzE5Miw4IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgICAgIFVuc2lnbmVkCiAgICAgfTsKIAotICAgIHN0YXRpYyBKU0Jp
Z0ludCogYWJzb2x1dGVBZGRPbmUoRXhlY1N0YXRlKiwgSlNCaWdJbnQqIHgsIFNpZ25PcHRpb24p
OwotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVTdWJPbmUoRXhlY1N0YXRlKiwgSlNCaWdJ
bnQqIHgsIHVuc2lnbmVkIHJlc3VsdExlbmd0aCk7CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNv
bHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBTaWduT3B0aW9uKTsKKyAg
ICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJ
bnQqIHgsIHVuc2lnbmVkIHJlc3VsdExlbmd0aCk7CiAKICAgICAvLyBEaWdpdCBhcml0aG1ldGlj
IGhlbHBlcnMuCiAgICAgc3RhdGljIERpZ2l0IGRpZ2l0QWRkKERpZ2l0IGEsIERpZ2l0IGIsIERp
Z2l0JiBjYXJyeSk7CkBAIC0yMDIsOCArMjAyLDggQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICBzdGF0aWMgRGlnaXQgZGlnaXREaXYoRGlnaXQgaGlnaCwgRGln
aXQgbG93LCBEaWdpdCBkaXZpc29yLCBEaWdpdCYgcmVtYWluZGVyKTsKICAgICBzdGF0aWMgRGln
aXQgZGlnaXRQb3coRGlnaXQgYmFzZSwgRGlnaXQgZXhwb25lbnQpOwogCi0gICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiwgRXhlY1N0YXRlKiwgSlNCaWdJbnQqLCB1
bnNpZ25lZCByYWRpeCk7Ci0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ0dlbmVyaWMoVk0mLCBF
eGVjU3RhdGUqLCBKU0JpZ0ludCosIHVuc2lnbmVkIHJhZGl4KTsKKyAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50Kiwg
dW5zaWduZWQgcmFkaXgpOworICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdHZW5lcmljKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCosIHVuc2lnbmVkIHJhZGl4KTsKIAogICAgIGlubGlu
ZSBib29sIGlzWmVybygpIGNvbnN0CiAgICAgewpAQCAtMjEyLDIyICsyMTIsMjIgQEAgY2xhc3Mg
SlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhclR5cGU+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBwYXJzZUludChFeGVjU3Rh
dGUqLCBDaGFyVHlwZSogIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgRXJyb3JQYXJzZU1vZGUpOwor
ICAgIHN0YXRpYyBKU0JpZ0ludCogcGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqLCBDaGFyVHlwZSog
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgRXJyb3JQYXJzZU1vZGUpOwogCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJUeXBlPgotICAgIHN0YXRpYyBKU0JpZ0ludCogcGFyc2VJbnQoRXhlY1N0
YXRlKiwgVk0mLCBDaGFyVHlwZSogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFy
dEluZGV4LCB1bnNpZ25lZCByYWRpeCwgRXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbiA9IFBh
cnNlSW50U2lnbjo6U2lnbmVkLCBQYXJzZUludE1vZGUgPSBQYXJzZUludE1vZGU6OkFsbG93RW1w
dHlTdHJpbmcpOworICAgIHN0YXRpYyBKU0JpZ0ludCogcGFyc2VJbnQoSlNHbG9iYWxPYmplY3Qq
LCBWTSYsIENoYXJUeXBlKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0SW5k
ZXgsIHVuc2lnbmVkIHJhZGl4LCBFcnJvclBhcnNlTW9kZSwgUGFyc2VJbnRTaWduID0gUGFyc2VJ
bnRTaWduOjpTaWduZWQsIFBhcnNlSW50TW9kZSA9IFBhcnNlSW50TW9kZTo6QWxsb3dFbXB0eVN0
cmluZyk7CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFsbG9jYXRlRm9yKEV4ZWNTdGF0ZSosIFZN
JiwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJjb3VudCk7CisgICAgc3RhdGljIEpTQmln
SW50KiBhbGxvY2F0ZUZvcihKU0dsb2JhbE9iamVjdCosIFZNJiwgdW5zaWduZWQgcmFkaXgsIHVu
c2lnbmVkIGNoYXJjb3VudCk7CiAKICAgICBzdGF0aWMgSlNCaWdJbnQqIGNvcHkoVk0mLCBKU0Jp
Z0ludCogeCk7CiAgICAgSlNCaWdJbnQqIHJpZ2h0VHJpbShWTSYpOwogCiAgICAgdm9pZCBpbnBs
YWNlTXVsdGlwbHlBZGQoRGlnaXQgbXVsdGlwbGllciwgRGlnaXQgcGFydCk7Ci0gICAgc3RhdGlj
IEpTQmlnSW50KiBhYnNvbHV0ZUFkZChFeGVjU3RhdGUqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQq
IHksIGJvb2wgcmVzdWx0U2lnbik7CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFkZChK
U0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSwgYm9vbCByZXN1bHRTaWdu
KTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlU3ViKFZNJiwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5LCBib29sIHJlc3VsdFNpZ24pOwogCi0gICAgc3RhdGljIEpTQmlnSW50KiBsZWZ0
U2hpZnRCeUFic29sdXRlKEV4ZWNTdGF0ZSosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0g
ICAgc3RhdGljIEpTQmlnSW50KiByaWdodFNoaWZ0QnlBYnNvbHV0ZShFeGVjU3RhdGUqLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogbGVmdFNoaWZ0QnlB
YnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAg
c3RhdGljIEpTQmlnSW50KiByaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CiAKICAgICBzdGF0aWMgSlNCaWdJbnQqIHJpZ2h0U2hp
ZnRCeU1heGltdW0oVk0mLCBib29sIHNpZ24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAppbmRleCA2NjBlZDZlNzM0Y2JlMDk2N2Ew
ZmUyNjdmNmMxODlkOTBlZmM4ZTkyLi43NWJlNWZlYTZhYzAwZGViODhhODUzOWQ2MmYyNzUxMjA1
MjkzNTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5k
RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBib3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGdsb2JhbE9iamVjdC0+dm0oKSwgdGFyZ2V0RnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NF
UlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FsbChjYWxsRnJhbWUsIHRhcmdldEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJv
dW5kRnVuY3Rpb24tPmJvdW5kVGhpcygpLCBhcmdzKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjYWxsKGdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgYm91bmRGdW5jdGlvbi0+Ym91bmRUaGlzKCksIGFyZ3MpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTcyLDcgKzcyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aW9uQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWwKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBlbmQoY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudChpKSk7CiAgICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFzT3ZlcmZsb3dlZCgp
KSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7Cisg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAg
ICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAgfQogCkBAIC04MCw3ICs4MCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlvbkNhbGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgdGFyZ2V0RnVuY3Rpb24sIGNhbGxEYXRhKTsK
ICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoY2FsbEZyYW1lLCB0YXJnZXRGdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBib3VuZEZ1bmN0aW9uLT5ib3VuZFRoaXMoKSwgYXJn
cykpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShjYWxs
KGdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYm91bmRG
dW5jdGlvbi0+Ym91bmRUaGlzKCksIGFyZ3MpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1Y3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05Niw3ICs5Niw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1
Y3QoSlNHbG9iYWxPYmplY3QqIGdsCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwog
ICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEoZ2xvYmFs
T2JqZWN0LT52bSgpLCB0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0RGF0YSk7CiAgICAgQVNTRVJU
KGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6Tm9uZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjb25zdHJ1Y3QoY2FsbEZyYW1lLCB0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0
VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y29uc3RydWN0KGdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24sIGNvbnN0cnVjdFR5cGUsIGNv
bnN0cnVjdERhdGEsIGFyZ3MpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBi
b3VuZEZ1bmN0aW9uQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtMTE1LDcgKzExNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYm91bmRGdW5jdGlvbkNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpOyArK2kpCiAgICAgICAgIGFyZ3MuYXBwZW5kKGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoaSkpOwogICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJmbG93ZWQoKSkpIHsKLSAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBl
bmNvZGVkSlNWYWx1ZSgpOwogICAgIH0KIApAQCAtMTIzLDcgKzEyMyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGlvbkNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0CiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0
cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEodm0sIHRhcmdldEZ1bmN0
aW9uLCBjb25zdHJ1Y3REYXRhKTsKICAgICBBU1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1
Y3RUeXBlOjpOb25lKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShjb25zdHJ1Y3QoY2FsbEZyYW1lLCB0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0VHlwZSwg
Y29uc3RydWN0RGF0YSwgYXJncykpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCB0YXJnZXRGdW5jdGlvbiwgY29u
c3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncykpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBpc0JvdW5kRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xMzEsMTggKzEzMSwxOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGlzQm91bmRGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShzdGF0aWNf
Y2FzdDxib29sPihqc0R5bmFtaWNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGdsb2JhbE9iamVjdC0+
dm0oKSwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgaGFzSW5zdGFuY2VCb3VuZEZ1bmN0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGhhc0luc3RhbmNlQm91bmRGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGJvdW5kT2JqZWN0
ID0ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
OwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYm91bmRPYmplY3QtPnRh
cmdldEZ1bmN0aW9uKCktPmhhc0luc3RhbmNlKGNhbGxGcmFtZSwgdmFsdWUpKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYm91bmRPYmplY3QtPnRhcmdldEZ1bmN0aW9u
KCktPmhhc0luc3RhbmNlKGdsb2JhbE9iamVjdCwgdmFsdWUpKSk7CiB9CiAKLWlubGluZSBTdHJ1
Y3R1cmUqIGdldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbikK
K2lubGluZSBTdHJ1Y3R1cmUqIGdldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgcHJv
dG90eXBlID0gdGFyZ2V0RnVuY3Rpb24tPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7CisgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0YXJnZXRGdW5jdGlvbi0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIEpT
RnVuY3Rpb24qIHRhcmdldEpTRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2
bSwgdGFyZ2V0RnVuY3Rpb24pOwogCkBAIC0xNzEsNyArMTcxLDcgQEAgaW5saW5lIFN0cnVjdHVy
ZSogZ2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0JvdW5kRnVuY3Rpb24qIEpTQm91
bmRGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRU
aGlzLCBKU0FycmF5KiBib3VuZEFyZ3MsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkK
K0pTQm91bmRGdW5jdGlvbiogSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUg
Ym91bmRUaGlzLCBKU0FycmF5KiBib3VuZEFyZ3MsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Q29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwpAQCAtMTg1LDcgKzE4NSw3IEBAIEpTQm91bmRG
dW5jdGlvbiogSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0CiAgICAgICAgIHNsb3dDYXNlID8gTm9JbnRyaW5zaWMgOiBCb3VuZFRo
aXNOb0FyZ3NGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCiAgICAgICAgIGNhbkNvbnN0cnVjdCA/IChz
bG93Q2FzZSA/IGJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QgOiBib3VuZFRoaXNOb0FyZ3NGdW5jdGlv
bkNvbnN0cnVjdCkgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwKICAg
ICAgICAgbmFtZSk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRCb3VuZEZ1bmN0aW9u
U3RydWN0dXJlKHZtLCBleGVjLCBnbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUodm0sIGdsb2Jh
bE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOwogICAgIEpTQm91bmRGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0JvdW5kRnVuY3Rpb24+KHZtLmhlYXApKSBKU0JvdW5kRnVuY3Rpb24o
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB0YXJnZXRGdW5jdGlvbiwgYm91bmRUaGlzLCBi
b3VuZEFyZ3MpOwogCkBAIC0xOTMsOSArMTkzLDkgQEAgSlNCb3VuZEZ1bmN0aW9uKiBKU0JvdW5k
RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QK
ICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKLWJvb2wgSlNCb3VuZEZ1bmN0aW9uOjpjdXN0b21I
YXNJbnN0YW5jZShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCitib29sIEpTQm91bmRGdW5jdGlvbjo6Y3VzdG9tSGFzSW5zdGFuY2UoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KG9iamVjdCktPm1fdGFyZ2V0RnVuY3Rp
b24tPmhhc0luc3RhbmNlKGV4ZWMsIHZhbHVlKTsKKyAgICByZXR1cm4ganNDYXN0PEpTQm91bmRG
dW5jdGlvbio+KG9iamVjdCktPm1fdGFyZ2V0RnVuY3Rpb24tPmhhc0luc3RhbmNlKGdsb2JhbE9i
amVjdCwgdmFsdWUpOwogfQogCiBKU0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5jdGlvbihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0FycmF5KiBib3Vu
ZEFyZ3MpCkBAIC0yMDYsMTQgKzIwNiwxNCBAQCBKU0JvdW5kRnVuY3Rpb246OkpTQm91bmRGdW5j
dGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZQogewog
fQogCi1KU0FycmF5KiBKU0JvdW5kRnVuY3Rpb246OmJvdW5kQXJnc0NvcHkoRXhlY1N0YXRlKiBl
eGVjKQorSlNBcnJheSogSlNCb3VuZEZ1bmN0aW9uOjpib3VuZEFyZ3NDb3B5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0KCkpOworICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkodGhpcy0+Z2xvYmFsT2JqZWN0KCksIG51bGxwdHIpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2JvdW5kQXJncy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICByZXN1bHQtPnB1c2go
ZXhlYywgbV9ib3VuZEFyZ3MtPmdldEluZGV4UXVpY2tseShpKSk7CisgICAgICAgIHJlc3VsdC0+
cHVzaChnbG9iYWxPYmplY3QsIG1fYm91bmRBcmdzLT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAgICAgcmV0
dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Qm91bmRGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1
bmN0aW9uLmgKaW5kZXggMjI1YWNiMGJlOGQ1M2I0YmE0NjI2NjZlZjNkNzUwZTljNmQzMGVlZi4u
MzFjM2U2Yjg3MzU1ZTk4NDEzNTVmYWZjMDhjYjMyYjg0MDBiNWYzMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKQEAgLTQ4LDE0ICs0OCwx
NCBAQCBjbGFzcyBKU0JvdW5kRnVuY3Rpb24gZmluYWwgOiBwdWJsaWMgSlNGdW5jdGlvbiB7CiAg
ICAgICAgIHJldHVybiB2bS5ib3VuZEZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgSlNCb3VuZEZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpT
QXJyYXkqIGJvdW5kQXJncywgaW50LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHN0YXRpYyBK
U0JvdW5kRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHRh
cmdldEZ1bmN0aW9uLCBKU1ZhbHVlIGJvdW5kVGhpcywgSlNBcnJheSogYm91bmRBcmdzLCBpbnQs
IGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgCi0gICAgc3RhdGljIGJvb2wgY3VzdG9tSGFzSW5z
dGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBj
dXN0b21IYXNJbnN0YW5jZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAK
ICAgICBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX3RhcmdldEZ1bmN0aW9u
LmdldCgpOyB9CiAgICAgSlNWYWx1ZSBib3VuZFRoaXMoKSB7IHJldHVybiBtX2JvdW5kVGhpcy5n
ZXQoKTsgfQogICAgIEpTQXJyYXkqIGJvdW5kQXJncygpIHsgcmV0dXJuIG1fYm91bmRBcmdzLmdl
dCgpOyB9IC8vIERPIE5PVCBhbGxvdyB0aGlzIGFycmF5IHRvIGJlIG11dGF0ZWQhCi0gICAgSlNB
cnJheSogYm91bmRBcmdzQ29weShFeGVjU3RhdGUqKTsKKyAgICBKU0FycmF5KiBib3VuZEFyZ3ND
b3B5KEpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCmluZGV4IDlhNTg5MjJlNWEwOWM4ZTY2NDdhMjY1NzVmNTQxMWU4NWE3ZDBjNTAuLjVkNjcy
YzhmYTU3ZmI1OTUxMTRiYWE0ZmYyOWNjNTMyMmU3YzA0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCkBAIC0zOSwyNiArMzksMjYgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiAvLyBFQ01BIDkuNAotZG91YmxlIEpTVmFsdWU6OnRvSW50ZWdlcihFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0Citkb3VibGUgSlNWYWx1ZTo6dG9JbnRlZ2VyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgaWYgKGlzSW50MzIoKSkKICAgICAgICAg
cmV0dXJuIGFzSW50MzIoKTsKLSAgICBkb3VibGUgZCA9IHRvTnVtYmVyKGV4ZWMpOworICAgIGRv
dWJsZSBkID0gdG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gc3RkOjppc25hbihk
KSA/IDAuMCA6IHRydW5jKGQpOwogfQogCi1kb3VibGUgSlNWYWx1ZTo6dG9JbnRlZ2VyUHJlc2Vy
dmVOYU4oRXhlY1N0YXRlKiBleGVjKSBjb25zdAorZG91YmxlIEpTVmFsdWU6OnRvSW50ZWdlclBy
ZXNlcnZlTmFOKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgaWYg
KGlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKLSAgICByZXR1cm4gdHJ1bmMo
dG9OdW1iZXIoZXhlYykpOworICAgIHJldHVybiB0cnVuYyh0b051bWJlcihnbG9iYWxPYmplY3Qp
KTsKIH0KIAotZG91YmxlIEpTVmFsdWU6OnRvTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
K2RvdWJsZSBKU1ZhbHVlOjp0b0xlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBj
b25zdAogewogICAgIC8vIEVDTUEgNy4xLjE1CiAgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVy
bmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbGVuZ3RoCi0gICAgZG91YmxlIGQgPSB0
b0ludGVnZXIoZXhlYyk7CisgICAgZG91YmxlIGQgPSB0b0ludGVnZXIoZ2xvYmFsT2JqZWN0KTsK
ICAgICBpZiAoZCA8PSAwKQogICAgICAgICByZXR1cm4gMC4wOwogICAgIGlmIChzdGQ6OmlzaW5m
KGQpKQpAQCAtNjYsMTEgKzY2LDExIEBAIGRvdWJsZSBKU1ZhbHVlOjp0b0xlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0CiAgICAgcmV0dXJuIHN0ZDo6bWluKGQsIG1heFNhZmVJbnRlZ2VyKCkp
OwogfQogCi1kb3VibGUgSlNWYWx1ZTo6dG9OdW1iZXJTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0Citkb3VibGUgSlNWYWx1ZTo6dG9OdW1iZXJTbG93Q2FzZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIEFTU0VSVCghaXNJbnQzMigpICYmICFpc0RvdWJs
ZSgpKTsKICAgICBpZiAoaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgIHJldHVybiBhc0NlbGwoKS0+dG9OdW1iZXIoZ2xvYmFsT2JqZWN0
KTsKICAgICBpZiAoaXNUcnVlKCkpCiAgICAgICAgIHJldHVybiAxLjA7CiAgICAgcmV0dXJuIGlz
VW5kZWZpbmVkKCkgPyBQTmFOIDogMDsgLy8gbnVsbCBhbmQgZmFsc2UgYm90aCBjb252ZXJ0IHRv
IDAuCkBAIC05MSwyMyArOTEsMjMgQEAgT3B0aW9uYWw8ZG91YmxlPiBKU1ZhbHVlOjp0b051bWJl
ckZyb21QcmltaXRpdmUoKSBjb25zdAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLUpT
T2JqZWN0KiBKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKK0pTT2JqZWN0KiBKU1ZhbHVlOjp0b09iamVj
dFNsb3dDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEFTU0VSVCghaXNDZWxs
KCkpOwogCiAgICAgaWYgKGlzSW50MzIoKSB8fCBpc0RvdWJsZSgpKQotICAgICAgICByZXR1cm4g
Y29uc3RydWN0TnVtYmVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKTsKKyAgICAgICAg
cmV0dXJuIGNvbnN0cnVjdE51bWJlcihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7CiAgICAgaWYg
KGlzVHJ1ZSgpIHx8IGlzRmFsc2UoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEJvb2xlYW5G
cm9tSW1tZWRpYXRlQm9vbGVhbihleGVjLCBnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7CisgICAg
ICAgIHJldHVybiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oZ2xvYmFsT2Jq
ZWN0LCBhc1ZhbHVlKCkpOwogCiAgICAgQVNTRVJUKGlzVW5kZWZpbmVkT3JOdWxsKCkpOwotICAg
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGV4ZWMs
ICp0aGlzKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
Tm90QW5PYmplY3RFcnJvcihnbG9iYWxPYmplY3QsICp0aGlzKSk7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLUpTVmFsdWUgSlNWYWx1ZTo6dG9UaGlzU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVj
LCBFQ01BTW9kZSBlY21hTW9kZSkgY29uc3QKK0pTVmFsdWUgSlNWYWx1ZTo6dG9UaGlzU2xvd0Nh
c2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKCFpc0NlbGwoKSk7CiAKQEAgLTExNSw0OCArMTE1LDQ4IEBAIEpTVmFs
dWUgSlNWYWx1ZTo6dG9UaGlzU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9kZSBlY21h
TW9kZSkgY29uc3QKICAgICAgICAgcmV0dXJuICp0aGlzOwogCiAgICAgaWYgKGlzSW50MzIoKSB8
fCBpc0RvdWJsZSgpKQotICAgICAgICByZXR1cm4gY29uc3RydWN0TnVtYmVyKGV4ZWMsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgYXNWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0
cnVjdE51bWJlcihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7CiAgICAgaWYgKGlzVHJ1ZSgpIHx8
IGlzRmFsc2UoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRl
Qm9vbGVhbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGFzVmFsdWUoKSk7Cisg
ICAgICAgIHJldHVybiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oZ2xvYmFs
T2JqZWN0LCBhc1ZhbHVlKCkpOwogICAgIEFTU0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsKLSAg
ICByZXR1cm4gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVj
dC0+Z2xvYmFsVGhpcygpOwogfQogCi1KU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6ZVByb3Rv
dHlwZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6
ZVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChpc0NlbGwo
KSkgewogICAgICAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpOworICAgICAgICAgICAgcmV0
dXJuIGdsb2JhbE9iamVjdC0+c3RyaW5nUHJvdG90eXBlKCk7CiAgICAgICAgIGlmIChpc0JpZ0lu
dCgpKQotICAgICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Ymln
SW50UHJvdG90eXBlKCk7CisgICAgICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5iaWdJbnRQ
cm90b3R5cGUoKTsKICAgICAgICAgQVNTRVJUKGlzU3ltYm9sKCkpOwotICAgICAgICByZXR1cm4g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zeW1ib2xQcm90b3R5cGUoKTsKKyAgICAgICAg
cmV0dXJuIGdsb2JhbE9iamVjdC0+c3ltYm9sUHJvdG90eXBlKCk7CiAgICAgfQogCiAgICAgaWYg
KGlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
Pm51bWJlclByb3RvdHlwZSgpOworICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5udW1iZXJQ
cm90b3R5cGUoKTsKICAgICBpZiAoaXNCb29sZWFuKCkpCi0gICAgICAgIHJldHVybiBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmJvb2xlYW5Qcm90b3R5cGUoKTsKKyAgICAgICAgcmV0dXJu
IGdsb2JhbE9iamVjdC0+Ym9vbGVhblByb3RvdHlwZSgpOwogCiAgICAgQVNTRVJUKGlzVW5kZWZp
bmVkT3JOdWxsKCkpOwotICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RB
bk9iamVjdEVycm9yKGV4ZWMsICp0aGlzKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihnbG9iYWxPYmplY3QsICp0aGlzKSk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIC8vIEVDTUEgOC43LjIKLWJvb2wgSlNWYWx1ZTo6
cHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVmFsdWU6OnB1
dFRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoT3B0
aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQotICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dFRvUHJpbWl0aXZlQnlJbmRleChleGVjLCBp
bmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dFRvUHJpbWl0aXZlQnlJbmRleChnbG9iYWxPYmplY3Qs
IGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CiAKICAgICAvLyBD
aGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUgcHJvdG90eXBl
IGNoYWluCi0gICAgSlNPYmplY3QqIG9iaiA9IHN5bnRoZXNpemVQcm90b3R5cGUoZXhlYyk7Cisg
ICAgSlNPYmplY3QqIG9iaiA9IHN5bnRoZXNpemVQcm90b3R5cGUoZ2xvYmFsT2JqZWN0KTsKICAg
ICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIW9iaik7CiAgICAgaWYg
KFVOTElLRUxZKCFvYmopKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjYsMTEgKzE2Niwx
MSBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZQogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBvYmotPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5o
YXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkgfHwgc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5
cGUodm0sIGV4ZWMpOworICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7CiAKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUo
KSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiB0
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgb2JqID0gYXNPYmplY3QocHJvdG90
eXBlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE3OCw1NyArMTc4LDU3IEBAIGJvb2wgSlNWYWx1
ZTo6cHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlCiAgICAgZm9yICg7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKHZtKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5oYXNQdXRQcm9wZXJ0eVNlY3Vy
aXR5Q2hlY2soKSkpIHsKLSAgICAgICAgICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kb1B1dFBy
b3BlcnR5U2VjdXJpdHlDaGVjayhvYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAg
ICAgICAgICBvYmotPm1ldGhvZFRhYmxlKHZtKS0+ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
b2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQg
IT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihl
eGVjLCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogCiAg
ICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAg
ICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgY2FsbFNldHRlcihleGVjLCAqdGhpcywgZ3MsIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0cmljdE1vZGUpKTsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGxTZXR0ZXIoZ2xvYmFsT2JqZWN0LCAq
dGhpcywgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0
cmljdE1vZGUpKTsKIAogICAgICAgICAgICAgaWYgKGdzLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxDdXN0b21TZXR0ZXIoZXhlYywgZ3MsIGF0dHJp
YnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IsIG9iaiwgc2xvdC50aGlz
VmFsdWUoKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiBjYWxsQ3VzdG9tU2V0dGVy
KGdsb2JhbE9iamVjdCwgZ3MsIGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9t
QWNjZXNzb3IsIG9iaiwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUpOwogCiAgICAgICAgICAgICAv
LyBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHByb3BlcnR5IG9uIHRoZSBvYmplY3Qgb3Igb25lIG9m
IGl0cyAKICAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaXQgc2hvdWxkIGJlIHJlcGxhY2VkLCBz
byBicmVhayBoZXJlLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBw
cm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7CisgICAgICAgIHByb3RvdHlw
ZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxs
KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHR5cGVFcnJv
cihleGVjLCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5p
c1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogfQogCi1ib29sIEpT
VmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNWYWx1
ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAo
cHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KCp0aGlzLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybiBwdXRUb1ByaW1pdGl2
ZShleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7
CisgICAgICAgIHJldHVybiBwdXRUb1ByaW1pdGl2ZShnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6
OmZyb20odm0sIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKICAgICB9CiAgICAgCi0gICAg
SlNPYmplY3QqIHByb3RvdHlwZSA9IHN5bnRoZXNpemVQcm90b3R5cGUoZXhlYyk7CisgICAgSlNP
YmplY3QqIHByb3RvdHlwZSA9IHN5bnRoZXNpemVQcm90b3R5cGUoZ2xvYmFsT2JqZWN0KTsKICAg
ICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXByb3RvdHlwZSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ym9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICBib29sIHN1Y2Nlc3MgPSBwcm90b3R5cGUtPmF0
dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoZXhlYywgKnRoaXMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93LCBwdXRSZXN1bHQpOworICAgIGJvb2wg
c3VjY2VzcyA9IHByb3RvdHlwZS0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZv
clByb3RvdHlwZShnbG9iYWxPYmplY3QsICp0aGlzLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91
bGRUaHJvdywgcHV0UmVzdWx0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxz
ZSk7CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7CiAgICAgCi0g
ICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiB9CiAKIHZvaWQg
SlNWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtMzUzLDkgKzM1Myw5IEBA
IGJvb2wgSlNWYWx1ZTo6aXNWYWxpZENhbGxlZSgpCiAgICAgcmV0dXJuIGFzT2JqZWN0KGFzQ2Vs
bCgpKS0+Z2xvYmFsT2JqZWN0KCk7CiB9CiAKLUpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Ns
b3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCByZXR1cm5FbXB0eVN0cmluZ09uRXJyb3IpIGNv
bnN0CitKU1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmdTbG93Q2FzZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBib29sIHJldHVybkVtcHR5U3RyaW5nT25FcnJvcikgY29uc3QKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIGVy
cm9yVmFsdWUgPSBbJl0gKCkgLT4gSlNTdHJpbmcqIHsKQEAgLTM4MiwzMCArMzgyLDMwIEBAIEpT
U3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCBy
ZXR1cm5FbXB0eVN0cmluZ09uRXJyCiAgICAgaWYgKGlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJl
dHVybiB2bS5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCk7CiAgICAgaWYgKGlzU3ltYm9s
KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJDYW5ub3QgY29udmVy
dCBhIHN5bWJvbCB0byBhIHN0cmluZyJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJDYW5ub3QgY29udmVydCBhIHN5bWJvbCB0byBhIHN0cmluZyJfcyk7
CiAgICAgICAgIHJldHVybiBlcnJvclZhbHVlKCk7CiAgICAgfQogICAgIGlmIChpc0JpZ0ludCgp
KSB7CiAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBhc0JpZ0ludCgqdGhpcyk7CiAgICAgICAg
IGlmIChhdXRvIGRpZ2l0ID0gYmlnSW50LT5zaW5nbGVEaWdpdFZhbHVlRm9yU3RyaW5nKCkpCiAg
ICAgICAgICAgICByZXR1cm4gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZygq
ZGlnaXQgKyAnMCcpOwotICAgICAgICBKU1N0cmluZyogcmV0dXJuU3RyaW5nID0ganNOb250cml2
aWFsU3RyaW5nKHZtLCBiaWdJbnQtPnRvU3RyaW5nKGV4ZWMsIDEwKSk7CisgICAgICAgIEpTU3Ry
aW5nKiByZXR1cm5TdHJpbmcgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0sIGJpZ0ludC0+dG9TdHJp
bmcoZ2xvYmFsT2JqZWN0LCAxMCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlcnJvclZhbHVlKCkpOwogICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nOwogICAgIH0KIAog
ICAgIEFTU0VSVChpc0NlbGwoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGFzQ2VsbCgpLT50b1By
aW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOworICAgIEpTVmFsdWUgdmFsdWUgPSBhc0NlbGwo
KS0+dG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0LCBQcmVmZXJTdHJpbmcpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVycm9yVmFsdWUoKSk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc09i
amVjdCgpKTsKLSAgICBKU1N0cmluZyogcmVzdWx0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgSlNTdHJpbmcqIHJlc3VsdCA9IHZhbHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZXJyb3JWYWx1ZSgpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1TdHJpbmcgSlNWYWx1ZTo6dG9XVEZTdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CitTdHJpbmcgSlNWYWx1ZTo6dG9XVEZTdHJpbmdTbG93Q2FzZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlmIChpc0ludDMyKCkpCiAg
ICAgICAgIHJldHVybiB2bS5udW1lcmljU3RyaW5ncy5hZGQoYXNJbnQzMigpKTsKICAgICBpZiAo
aXNEb3VibGUoKSkKQEAgLTQxOCw3ICs0MTgsNyBAQCBTdHJpbmcgSlNWYWx1ZTo6dG9XVEZTdHJp
bmdTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiB2bS5wcm9w
ZXJ0eU5hbWVzLT5udWxsS2V5d29yZC5zdHJpbmcoKTsKICAgICBpZiAoaXNVbmRlZmluZWQoKSkK
ICAgICAgICAgcmV0dXJuIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVmaW5lZEtleXdvcmQuc3RyaW5n
KCk7Ci0gICAgcmV0dXJuIHRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICByZXR1cm4g
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgK
aW5kZXggYWU4MzE1MWJkZTFhNmE2YmVlY2IzZDg5Y2E3YWRlZTU5MjA3YTFiOS4uNDdmY2QzMzhi
NDA1OTgzNmNkMzY4MWU4NGUwMWZhYjc0MzM5NzY3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuaApAQCAtNTMsNyArNTMsNiBAQCBjbGFzcyBQcm9wZXJ0eU5h
bWU7CiBjbGFzcyBQcm9wZXJ0eVNsb3Q7CiBjbGFzcyBQdXRQcm9wZXJ0eVNsb3Q7CiBjbGFzcyBT
dHJ1Y3R1cmU7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAjaWYgRU5BQkxFKERGR19K
SVQpCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEpJVENvbXBpbGVyOwpAQCAtMjQ2LDc2ICsyNDUs
NzUgQEAgY2xhc3MgSlNWYWx1ZSB7CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Pck51
bGwoVk0mKSBjb25zdDsKICAgICAgICAgCiAgICAgLy8gRXh0cmFjdGluZyB0aGUgdmFsdWUuCi0g
ICAgYm9vbCBnZXRTdHJpbmcoRXhlY1N0YXRlKiwgV1RGOjpTdHJpbmcmKSBjb25zdDsKLSAgICBX
VEY6OlN0cmluZyBnZXRTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7IC8vIG51bGwgc3RyaW5nIGlm
IG5vdCBhIHN0cmluZworICAgIGJvb2wgZ2V0U3RyaW5nKEpTR2xvYmFsT2JqZWN0KiwgV1RGOjpT
dHJpbmcmKSBjb25zdDsKKyAgICBXVEY6OlN0cmluZyBnZXRTdHJpbmcoSlNHbG9iYWxPYmplY3Qq
KSBjb25zdDsgLy8gbnVsbCBzdHJpbmcgaWYgbm90IGEgc3RyaW5nCiAgICAgSlNPYmplY3QqIGdl
dE9iamVjdCgpIGNvbnN0OyAvLyAwIGlmIG5vdCBhbiBvYmplY3QKIAogICAgIC8vIEV4dHJhY3Rp
bmcgaW50ZWdlciB2YWx1ZXMuCiAgICAgYm9vbCBnZXRVSW50MzIodWludDMyX3QmKSBjb25zdDsK
ICAgICAgICAgCiAgICAgLy8gQmFzaWMgY29udmVyc2lvbnMuCi0gICAgSlNWYWx1ZSB0b1ByaW1p
dGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBj
b25zdDsKLSAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51
bWJlciwgSlNWYWx1ZSYpOworICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3Qq
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKKyAgICBib29s
IGdldFByaW1pdGl2ZU51bWJlcihKU0dsb2JhbE9iamVjdCosIGRvdWJsZSYgbnVtYmVyLCBKU1Zh
bHVlJik7CiAKLSAgICBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBib29s
IHRvQm9vbGVhbihKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIFRyaVN0YXRlIHB1cmVUb0Jv
b2xlYW4oKSBjb25zdDsKIAogICAgIC8vIHRvTnVtYmVyIGNvbnZlcnNpb24gaXMgZXhwZWN0ZWQg
dG8gYmUgc2lkZSBlZmZlY3QgZnJlZSBpZiBhbiBleGNlcHRpb24gaGFzCi0gICAgLy8gYmVlbiBz
ZXQgaW4gdGhlIEV4ZWNTdGF0ZSBhbHJlYWR5LgotICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3Rh
dGUqKSBjb25zdDsKKyAgICAvLyBiZWVuIHNldCBpbiB0aGUgQ2FsbEZyYW1lIGFscmVhZHkuCisg
ICAgZG91YmxlIHRvTnVtYmVyKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgCi0gICAgVmFy
aWFudDxKU0JpZ0ludCosIGRvdWJsZT4gdG9OdW1lcmljKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAg
IFZhcmlhbnQ8SlNCaWdJbnQqLCBpbnQzMl90PiB0b0JpZ0ludE9ySW50MzIoRXhlY1N0YXRlKikg
Y29uc3Q7CisgICAgVmFyaWFudDxKU0JpZ0ludCosIGRvdWJsZT4gdG9OdW1lcmljKEpTR2xvYmFs
T2JqZWN0KikgY29uc3Q7CisgICAgVmFyaWFudDxKU0JpZ0ludCosIGludDMyX3Q+IHRvQmlnSW50
T3JJbnQzMihKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgLy8gdG9OdW1iZXIgY29udmVy
c2lvbiBpZiBpdCBjYW4gYmUgZG9uZSB3aXRob3V0IHNpZGUgZWZmZWN0cy4KICAgICBPcHRpb25h
bDxkb3VibGU+IHRvTnVtYmVyRnJvbVByaW1pdGl2ZSgpIGNvbnN0OwogCi0gICAgSlNTdHJpbmcq
IHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OyAvLyBPbiBleGNlcHRpb24sIHRoaXMgcmV0dXJu
cyB0aGUgZW1wdHkgc3RyaW5nLgotICAgIEpTU3RyaW5nKiB0b1N0cmluZ09yTnVsbChFeGVjU3Rh
dGUqKSBjb25zdDsgLy8gT24gZXhjZXB0aW9uLCB0aGlzIHJldHVybnMgbnVsbCwgdG8gbWFrZSBl
eGNlcHRpb24gY2hlY2tzIGZhc3Rlci4KLSAgICBJZGVudGlmaWVyIHRvUHJvcGVydHlLZXkoRXhl
Y1N0YXRlKikgY29uc3Q7Ci0gICAgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoRXhlY1N0YXRlKikg
Y29uc3Q7Ci0gICAgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpT
T2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAg
IEpTU3RyaW5nKiB0b1N0cmluZyhKU0dsb2JhbE9iamVjdCopIGNvbnN0OyAvLyBPbiBleGNlcHRp
b24sIHRoaXMgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLgorICAgIEpTU3RyaW5nKiB0b1N0cmlu
Z09yTnVsbChKU0dsb2JhbE9iamVjdCopIGNvbnN0OyAvLyBPbiBleGNlcHRpb24sIHRoaXMgcmV0
dXJucyBudWxsLCB0byBtYWtlIGV4Y2VwdGlvbiBjaGVja3MgZmFzdGVyLgorICAgIElkZW50aWZp
ZXIgdG9Qcm9wZXJ0eUtleShKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIFdURjo6U3RyaW5n
IHRvV1RGU3RyaW5nKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CisgICAgSlNPYmplY3QqIHRvT2Jq
ZWN0KEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAgICAvLyBJbnRlZ2VyIGNvbnZlcnNpb25z
LgotICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b0ludGVnZXIoRXhlY1N0YXRlKikgY29u
c3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvSW50ZWdlclByZXNlcnZlTmFOKEV4
ZWNTdGF0ZSopIGNvbnN0OwotICAgIGludDMyX3QgdG9JbnQzMihFeGVjU3RhdGUqKSBjb25zdDsK
LSAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICB1aW50MzJfdCB0
b0luZGV4KEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIqIGVycm9yTmFtZSkgY29uc3Q7Ci0gICAgZG91
YmxlIHRvTGVuZ3RoKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGRv
dWJsZSB0b0ludGVnZXIoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBkb3VibGUgdG9JbnRlZ2VyUHJlc2VydmVOYU4oSlNHbG9iYWxPYmplY3QqKSBjb25zdDsK
KyAgICBpbnQzMl90IHRvSW50MzIoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKyAgICB1aW50MzJf
dCB0b1VJbnQzMihKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIHVpbnQzMl90IHRvSW5kZXgo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBjaGFyKiBlcnJvck5hbWUpIGNvbnN0OworICAgIGRvdWJs
ZSB0b0xlbmd0aChKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgLy8gRmxvYXRpbmcgcG9p
bnQgY29udmVyc2lvbnMgKHRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgV2ViQ29y
ZTsKICAgICAvLyBzaW5nbGUgcHJlY2lzaW9uIGZsb2F0IGlzIG5vdCBhIHJlcHJlc2VudGF0aW9u
IHVzZWQgaW4gSlMgb3IgSlNDKS4KLSAgICBmbG9hdCB0b0Zsb2F0KEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvTnVtYmVyKGV4ZWMpKTsgfQorICAg
IGZsb2F0IHRvRmxvYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvTnVtYmVyKGdsb2JhbE9iamVjdCkpOyB9CiAKICAgICAv
LyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9PYmplY3Qgb3BlcmF0aW9uIGluY2x1ZGVk
LgotICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAg
SlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25z
dDsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNv
bnN0OwotICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JikgY29uc3Q7Ci0gICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgdWludDY0
X3QgcHJvcGVydHlOYW1lKSBjb25zdDsKLQotICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24+IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29m
PENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2wsIFByb3BlcnR5U2xvdCYpPjo6dHlwZSBnZXRQ
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBDYWxsYmFja1doZW5Ob0V4Y2Vw
dGlvbikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRp
b24+IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2ws
IFByb3BlcnR5U2xvdCYpPjo6dHlwZSBnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmLCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbikgY29uc3Q7Ci0K
LSAgICBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpIGNvbnN0OwotCi0gICAgYm9vbCBwdXQoRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBib29sIHB1dElubGluZShFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIHB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgIGJvb2wgcHV0QnlJbmRleChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwotCi0gICAgSlNWYWx1ZSB0b1RoaXMoRXhlY1N0YXRlKiwgRUNNQU1vZGUpIGNvbnN0OwotCi0g
ICAgc3RhdGljIGJvb2wgZXF1YWwoRXhlY1N0YXRlKiwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7
Ci0gICAgc3RhdGljIGJvb2wgZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHYxLCBK
U1ZhbHVlIHYyKTsKLSAgICBzdGF0aWMgYm9vbCBlcXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0
ZSosIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOwotICAgIHN0YXRpYyBib29sIHN0cmljdEVxdWFs
KEV4ZWNTdGF0ZSosIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOwotICAgIHN0YXRpYyBib29sIHN0
cmljdEVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7Ci0g
ICAgc3RhdGljIGJvb2wgc3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShFeGVjU3RhdGUqLCBKU1Zh
bHVlIHYxLCBKU1ZhbHVlIHYyKTsKKyAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSkgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpIGNvbnN0OworICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldChK
U0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgY29u
c3Q7CisgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCBwcm9wZXJ0eU5h
bWUpIGNvbnN0OworCisgICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uPiB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYWxsYmFj
a1doZW5Ob0V4Y2VwdGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5cGUgZ2V0UHJvcGVydHlT
bG90KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlv
bikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24+
IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2wsIFBy
b3BlcnR5U2xvdCYpPjo6dHlwZSBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKSBjb25zdDsK
KworICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKworICAgIGJvb2wgcHV0KEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIHB1
dElubGluZShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXRUb1ByaW1pdGl2ZShKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoSlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgIGJvb2wgcHV0QnlJbmRleChKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisKKyAgICBKU1ZhbHVlIHRvVGhpcyhK
U0dsb2JhbE9iamVjdCosIEVDTUFNb2RlKSBjb25zdDsKKworICAgIHN0YXRpYyBib29sIGVxdWFs
KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7CisgICAgc3RhdGljIGJv
b2wgZXF1YWxTbG93Q2FzZShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIp
OworICAgIHN0YXRpYyBib29sIGVxdWFsU2xvd0Nhc2VJbmxpbmUoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKTsKKyAgICBzdGF0aWMgYm9vbCBzdHJpY3RFcXVhbChKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOworICAgIHN0YXRpYyBib29sIHN0
cmljdEVxdWFsU2xvd0Nhc2UoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYy
KTsKKyAgICBzdGF0aWMgYm9vbCBzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7CiAgICAgc3RhdGljIFRyaVN0YXRlIHB1cmVT
dHJpY3RFcXVhbChKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKTsKIAogICAgIGJvb2wgaXNDZWxsKCkg
Y29uc3Q7CkBAIC0zMzAsOCArMzI4LDggQEAgY2xhc3MgSlNWYWx1ZSB7CiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0QXNzdW1pbmdTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCosIFN0
cnVjdHVyZSopIGNvbnN0OwogICAgIHZvaWQgZHVtcEZvckJhY2t0cmFjZShQcmludFN0cmVhbSYp
IGNvbnN0OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHN5bnRoZXNpemVQcm90
b3R5cGUoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgYm9vbCByZXF1aXJlT2JqZWN0Q29lcmNpYmxl
KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBzeW50
aGVzaXplUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CisgICAgYm9vbCByZXF1aXJl
T2JqZWN0Q29lcmNpYmxlKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAgICAvLyBDb25zdGFu
dHMgdXNlZCBmb3IgSW50NTIuIEludDUyIGlzbid0IHBhcnQgb2YgSlNWYWx1ZSByaWdodCBub3cs
IGJ1dCBKU1ZhbHVlcyBtYXkgYmUKICAgICAvLyBjb252ZXJ0ZWQgdG8gSW50NTJzIGFuZCBiYWNr
IGFnYWluLgpAQCAtNDc5LDExICs0NzcsMTEgQEAgY2xhc3MgSlNWYWx1ZSB7CiAgICAgSlNWYWx1
ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpOwogCiAgICAgaW5saW5lIGNvbnN0IEpTVmFsdWUg
YXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
ZG91YmxlIHRvTnVtYmVyU2xvd0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNTdHJpbmcqIHRvU3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKiwgYm9vbCByZXR1
cm5FbXB0eVN0cmluZ09uRXJyb3IpIGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFdURjo6
U3RyaW5nIHRvV1RGU3RyaW5nU2xvd0Nhc2UoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNPYmplY3QqIHRvT2JqZWN0U2xvd0Nhc2UoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqKSBjb25zdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRvVGhpc1Ns
b3dDYXNlKEV4ZWNTdGF0ZSosIEVDTUFNb2RlKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBkb3VibGUgdG9OdW1iZXJTbG93Q2FzZShKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpT
X0VYUE9SVF9QUklWQVRFIEpTU3RyaW5nKiB0b1N0cmluZ1Nsb3dDYXNlKEpTR2xvYmFsT2JqZWN0
KiwgYm9vbCByZXR1cm5FbXB0eVN0cmluZ09uRXJyb3IpIGNvbnN0OworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nU2xvd0Nhc2UoSlNHbG9iYWxPYmplY3QqKSBj
b25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3RTbG93Q2FzZShK
U0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdG9U
aGlzU2xvd0Nhc2UoSlNHbG9iYWxPYmplY3QqLCBFQ01BTW9kZSkgY29uc3Q7CiAKICAgICBFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yIHU7CiB9OwpAQCAtNjM0LDYgKzYzMiw2IEBAIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgSlNDZWxsKiBhLCBjb25zdCBKU1ZhbHVlIGIpIHsgcmV0dXJuIEpT
VmFsdWUoYSkgIT0KIGJvb2wgaXNUaGlzVmFsdWVBbHRlcmVkKGNvbnN0IFB1dFByb3BlcnR5U2xv
dCYsIEpTT2JqZWN0KiBiYXNlT2JqZWN0KTsKIAogLy8gU2VlIHNlY3Rpb24gNy4yLjk6IGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZQotYm9vbCBzYW1lVmFsdWUo
RXhlY1N0YXRlKiwgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpOworYm9vbCBzYW1lVmFsdWUoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGlu
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgK
aW5kZXggZDU5MDk2ZTMwYWVmZGI2NTM1ZWJiNDM4ODhkY2Q2MGMyMTY1YWUyNy4uN2Q4NjQ1Yzkx
NjNkYTFkMmVkY2YxZjg4MTM3M2I2NWQ5MDExMzU3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCkBAIC00MywzMiArNDMsMzIgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLUFMV0FZU19JTkxJTkUgaW50MzJfdCBKU1ZhbHVlOjp0b0lu
dDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0FMV0FZU19JTkxJTkUgaW50MzJfdCBKU1ZhbHVl
Ojp0b0ludDMyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgaWYg
KGlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKLSAgICByZXR1cm4gSlNDOjp0
b0ludDMyKHRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKHRvTnVtYmVy
KGdsb2JhbE9iamVjdCkpOwogfQogCi1pbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6dG9VSW50MzIo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAoraW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRvVUludDMy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgLy8gU2VlIGNvbW1l
bnQgb24gSlNDOjp0b1VJbnQzMiwgaW4gSlNDSlNWYWx1ZS5oLgotICAgIHJldHVybiB0b0ludDMy
KGV4ZWMpOworICAgIHJldHVybiB0b0ludDMyKGdsb2JhbE9iamVjdCk7CiB9CiAKLWlubGluZSB1
aW50MzJfdCBKU1ZhbHVlOjp0b0luZGV4KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogZXJy
b3JOYW1lKSBjb25zdAoraW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRvSW5kZXgoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgY2hhciogZXJyb3JOYW1lKSBjb25zdAogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBkb3VibGUg
ZCA9IHRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBkID0gdG9OdW1iZXIoZ2xvYmFsT2JqZWN0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKICAgICBpZiAoZCA8PSAtMSkg
ewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBtYWtlU3RyaW5nKGVycm9yTmFtZSwgIiBjYW5ub3QgYmUgbmVnYXRpdmUiKSkpOworICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGdsb2JhbE9iamVjdCwgbWFrZVN0cmluZyhlcnJvck5hbWUsICIgY2Fubm90IGJlIG5lZ2F0aXZl
IikpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmIChkID4gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoZXJyb3JOYW1lLCAiIHRv
byBsYXJnZSIpKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUs
IGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBtYWtlU3RyaW5nKGVycm9yTmFtZSwgIiB0
b28gbGFyZ2UiKSkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTYzOCwxOSArNjM4
LDE5IEBAIGlubGluZSBib29sIEpTVmFsdWU6OmlzT2JqZWN0KCkgY29uc3QKICAgICByZXR1cm4g
aXNDZWxsKCkgJiYgYXNDZWxsKCktPmlzT2JqZWN0KCk7CiB9CiAKLWlubGluZSBib29sIEpTVmFs
dWU6OmdldFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZyYgcykgY29uc3QKK2lubGluZSBi
b29sIEpTVmFsdWU6OmdldFN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJp
bmcmIHMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzQ2VsbCgpICYmIGFzQ2VsbCgpLT5nZXRTdHJp
bmcoZXhlYywgcyk7CisgICAgcmV0dXJuIGlzQ2VsbCgpICYmIGFzQ2VsbCgpLT5nZXRTdHJpbmco
Z2xvYmFsT2JqZWN0LCBzKTsKIH0KIAotaW5saW5lIFN0cmluZyBKU1ZhbHVlOjpnZXRTdHJpbmco
RXhlY1N0YXRlKiBleGVjKSBjb25zdAoraW5saW5lIFN0cmluZyBKU1ZhbHVlOjpnZXRTdHJpbmco
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNDZWxs
KCkgPyBhc0NlbGwoKS0+Z2V0U3RyaW5nKGV4ZWMpIDogU3RyaW5nKCk7CisgICAgcmV0dXJuIGlz
Q2VsbCgpID8gYXNDZWxsKCktPmdldFN0cmluZyhnbG9iYWxPYmplY3QpIDogU3RyaW5nKCk7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBCYXNlPiBTdHJpbmcgSGFuZGxlQ29udmVydGVyPEJhc2Us
IFVua25vd24+OjpnZXRTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAordGVtcGxhdGUgPHR5
cGVuYW1lIEJhc2U+IFN0cmluZyBIYW5kbGVDb252ZXJ0ZXI8QmFzZSwgVW5rbm93bj46OmdldFN0
cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIHJldHVybiBq
c1ZhbHVlKCkuZ2V0U3RyaW5nKGV4ZWMpOworICAgIHJldHVybiBqc1ZhbHVlKCkuZ2V0U3RyaW5n
KGdsb2JhbE9iamVjdCk7CiB9CiAKIGlubGluZSBKU09iamVjdCogSlNWYWx1ZTo6Z2V0T2JqZWN0
KCkgY29uc3QKQEAgLTY3Myw0MCArNjczLDQwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVl
OjpnZXRVSW50MzIodWludDMyX3QmIHYpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1B
TFdBWVNfSU5MSU5FIElkZW50aWZpZXIgSlNWYWx1ZTo6dG9Qcm9wZXJ0eUtleShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CitBTFdBWVNfSU5MSU5FIElkZW50aWZpZXIgSlNWYWx1ZTo6dG9Qcm9wZXJ0
eUtleShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoaXNTdHJpbmcoKSkK
LSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhc1N0cmluZygqdGhpcyktPnRvSWRl
bnRpZmllcihleGVjKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYXNTdHJp
bmcoKnRoaXMpLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KSk7CiAKLSAgICBKU1ZhbHVlIHBy
aW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7CisgICAgSlNWYWx1ZSBw
cmltaXRpdmUgPSB0b1ByaW1pdGl2ZShnbG9iYWxPYmplY3QsIFByZWZlclN0cmluZyk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlm
aWVyKTsKICAgICBpZiAocHJpbWl0aXZlLmlzU3ltYm9sKCkpCiAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSWRlbnRpZmllcjo6ZnJvbVVpZChhc1N5bWJvbChwcmltaXRpdmUpLT5w
cml2YXRlTmFtZSgpKSk7CiAKLSAgICBhdXRvIHN0cmluZyA9IHByaW1pdGl2ZS50b1N0cmluZyhl
eGVjKTsKKyAgICBhdXRvIHN0cmluZyA9IHByaW1pdGl2ZS50b1N0cmluZyhnbG9iYWxPYmplY3Qp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBzdHJpbmctPnRvSWRlbnRpZmllcihleGVjKSk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpKTsKIH0K
IAotaW5saW5lIEpTVmFsdWUgSlNWYWx1ZTo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CitpbmxpbmUgSlNWYWx1
ZSBKU1ZhbHVlOjp0b1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlz
Q2VsbCgpID8gYXNDZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIHByZWZlcnJlZFR5cGUpIDogYXNW
YWx1ZSgpOworICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShnbG9i
YWxPYmplY3QsIHByZWZlcnJlZFR5cGUpIDogYXNWYWx1ZSgpOwogfQogCi1pbmxpbmUgUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZSB0b1ByZWZlcnJlZFByaW1pdGl2ZVR5cGUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQoraW5saW5lIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgdG9QcmVmZXJy
ZWRQcmltaXRpdmVUeXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGlmICghdmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgIlByaW1pdGl2ZSBoaW50IGlzIG5vdCBhIHN0cmluZy4iX3MpOworICAgICAgICB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJpbWl0aXZlIGhpbnQgaXMgbm90
IGEgc3RyaW5nLiJfcyk7CiAgICAgICAgIHJldHVybiBOb1ByZWZlcmVuY2U7CiAgICAgfQogCi0g
ICAgU3RyaW5nSW1wbCogaGludFN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYyku
aW1wbCgpOworICAgIFN0cmluZ0ltcGwqIGhpbnRTdHJpbmcgPSBhc1N0cmluZyh2YWx1ZSktPnZh
bHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IE5vUHJlZmVyZW5jZSk7CiAKICAgICBpZiAoV1RGOjplcXVhbChoaW50U3RyaW5nLCAiZGVmYXVs
dCIpKQpAQCAtNzE2LDExICs3MTYsMTEgQEAgaW5saW5lIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUg
dG9QcmVmZXJyZWRQcmltaXRpdmVUeXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZQogICAgIGlm
IChXVEY6OmVxdWFsKGhpbnRTdHJpbmcsICJzdHJpbmciKSkKICAgICAgICAgcmV0dXJuIFByZWZl
clN0cmluZzsKIAotICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiRXhwZWN0ZWQgcHJp
bWl0aXZlIGhpbnQgdG8gbWF0Y2ggb25lIG9mICdkZWZhdWx0JywgJ251bWJlcicsICdzdHJpbmcn
LiJfcyk7CisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkV4cGVjdGVk
IHByaW1pdGl2ZSBoaW50IHRvIG1hdGNoIG9uZSBvZiAnZGVmYXVsdCcsICdudW1iZXInLCAnc3Ry
aW5nJy4iX3MpOwogICAgIHJldHVybiBOb1ByZWZlcmVuY2U7CiB9CiAKLWlubGluZSBib29sIEpT
VmFsdWU6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVy
LCBKU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBib29sIEpTVmFsdWU6OmdldFByaW1pdGl2ZU51bWJl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgaWYgKGlzSW50MzIoKSkgewogICAgICAgICBudW1iZXIgPSBhc0ludDMy
KCk7CkBAIC03MzMsNyArNzMzLDcgQEAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0UHJpbWl0aXZl
TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChpc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGFz
Q2VsbCgpLT5nZXRQcmltaXRpdmVOdW1iZXIoZXhlYywgbnVtYmVyLCB2YWx1ZSk7CisgICAgICAg
IHJldHVybiBhc0NlbGwoKS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGdsb2JhbE9iamVjdCwgbnVtYmVy
LCB2YWx1ZSk7CiAgICAgaWYgKGlzVHJ1ZSgpKSB7CiAgICAgICAgIG51bWJlciA9IDEuMDsKICAg
ICAgICAgdmFsdWUgPSAqdGhpczsKQEAgLTc1MCwxNiArNzUwLDE2IEBAIGlubGluZSBib29sIEpT
VmFsdWU6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVy
LCBKU1ZhbHVlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgZG91YmxlIEpT
VmFsdWU6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0FMV0FZU19JTkxJTkUgZG91
YmxlIEpTVmFsdWU6OnRvTnVtYmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0
CiB7CiAgICAgaWYgKGlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKICAgICBp
ZiAoaXNEb3VibGUoKSkKICAgICAgICAgcmV0dXJuIGFzRG91YmxlKCk7Ci0gICAgcmV0dXJuIHRv
TnVtYmVyU2xvd0Nhc2UoZXhlYyk7CisgICAgcmV0dXJuIHRvTnVtYmVyU2xvd0Nhc2UoZ2xvYmFs
T2JqZWN0KTsKIH0KIAotQUxXQVlTX0lOTElORSBWYXJpYW50PEpTQmlnSW50KiwgZG91YmxlPiBK
U1ZhbHVlOjp0b051bWVyaWMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorQUxXQVlTX0lOTElORSBW
YXJpYW50PEpTQmlnSW50KiwgZG91YmxlPiBKU1ZhbHVlOjp0b051bWVyaWMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBpZiAoaXNJbnQzMigpKQogICAgICAgICBy
ZXR1cm4gYXNJbnQzMigpOwpAQCAtNzY4LDE4ICs3NjgsMTggQEAgQUxXQVlTX0lOTElORSBWYXJp
YW50PEpTQmlnSW50KiwgZG91YmxlPiBKU1ZhbHVlOjp0b051bWVyaWMoRXhlY1N0YXRlKiBleGVj
KSBjb24KICAgICBpZiAoaXNCaWdJbnQoKSkKICAgICAgICAgcmV0dXJuIGFzQmlnSW50KCp0aGlz
KTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
SlNWYWx1ZSBwcmltVmFsdWUgPSB0aGlzLT50b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIp
OworICAgIEpTVmFsdWUgcHJpbVZhbHVlID0gdGhpcy0+dG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0
LCBQcmVmZXJOdW1iZXIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAg
IGlmIChwcmltVmFsdWUuaXNCaWdJbnQoKSkKICAgICAgICAgcmV0dXJuIGFzQmlnSW50KHByaW1W
YWx1ZSk7Ci0gICAgZG91YmxlIHZhbHVlID0gcHJpbVZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAg
IGRvdWJsZSB2YWx1ZSA9IHByaW1WYWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotQUxX
QVlTX0lOTElORSBWYXJpYW50PEpTQmlnSW50KiwgaW50MzJfdD4gSlNWYWx1ZTo6dG9CaWdJbnRP
ckludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0FMV0FZU19JTkxJTkUgVmFyaWFudDxKU0Jp
Z0ludCosIGludDMyX3Q+IEpTVmFsdWU6OnRvQmlnSW50T3JJbnQzMihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGlmIChpc0ludDMyKCkpCiAgICAgICAgIHJldHVy
biBhc0ludDMyKCk7CkBAIC03ODgsMjUgKzc4OCwyMCBAQCBBTFdBWVNfSU5MSU5FIFZhcmlhbnQ8
SlNCaWdJbnQqLCBpbnQzMl90PiBKU1ZhbHVlOjp0b0JpZ0ludE9ySW50MzIoRXhlY1N0YXRlKiBl
eAogICAgIGlmIChpc0JpZ0ludCgpKQogICAgICAgICByZXR1cm4gYXNCaWdJbnQoKnRoaXMpOwog
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1Zh
bHVlIHByaW1WYWx1ZSA9IHRoaXMtPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7Cisg
ICAgSlNWYWx1ZSBwcmltVmFsdWUgPSB0aGlzLT50b1ByaW1pdGl2ZShnbG9iYWxPYmplY3QsIFBy
ZWZlck51bWJlcik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgaWYg
KHByaW1WYWx1ZS5pc0JpZ0ludCgpKQogICAgICAgICByZXR1cm4gYXNCaWdJbnQocHJpbVZhbHVl
KTsKLSAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLnRvSW50MzIoZXhlYyk7CisgICAgaW50
MzJfdCB2YWx1ZSA9IHByaW1WYWx1ZS50b0ludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1pbmxpbmUg
SlNPYmplY3QqIEpTVmFsdWU6OnRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK2lubGlu
ZSBKU09iamVjdCogSlNWYWx1ZTo6dG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+dG9PYmplY3QoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSA6IHRvT2JqZWN0U2xvd0Nhc2UoZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLX0KLQotaW5saW5lIEpTT2JqZWN0KiBKU1Zh
bHVlOjp0b09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ2VsbCgpID8gYXNDZWxsKCktPnRvT2JqZWN0KGV4
ZWMsIGdsb2JhbE9iamVjdCkgOiB0b09iamVjdFNsb3dDYXNlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CisgICAgcmV0dXJuIGlzQ2VsbCgpID8gYXNDZWxsKCktPnRvT2JqZWN0KGdsb2JhbE9iamVjdCkg
OiB0b09iamVjdFNsb3dDYXNlKGdsb2JhbE9iamVjdCk7CiB9CiAKIGlubGluZSBib29sIEpTVmFs
dWU6OmlzRnVuY3Rpb24oVk0mIHZtKSBjb25zdApAQCAtODU0LDE0MyArODQ5LDE0MyBAQCBpbmxp
bmUgY29uc3QgQ2xhc3NJbmZvKiBKU1ZhbHVlOjpjbGFzc0luZm9Pck51bGwoVk0mIHZtKSBjb25z
dAogICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2VsbCgpLT5jbGFzc0luZm8odm0pIDogbnVsbHB0
cjsKIH0KIAotaW5saW5lIEpTVmFsdWUgSlNWYWx1ZTo6dG9UaGlzKEV4ZWNTdGF0ZSogZXhlYywg
RUNNQU1vZGUgZWNtYU1vZGUpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZSBKU1ZhbHVlOjp0b1RoaXMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGlzQ2VsbCgpID8gYXNDZWxsKCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT50b1RoaXMoYXNDZWxsKCksIGV4ZWMsIGVjbWFNb2RlKSA6IHRvVGhpc1Nsb3dDYXNlKGV4ZWMs
IGVjbWFNb2RlKTsKKyAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+bWV0aG9kVGFibGUo
Z2V0Vk0oZ2xvYmFsT2JqZWN0KSktPnRvVGhpcyhhc0NlbGwoKSwgZ2xvYmFsT2JqZWN0LCBlY21h
TW9kZSkgOiB0b1RoaXNTbG93Q2FzZShnbG9iYWxPYmplY3QsIGVjbWFNb2RlKTsKIH0KIAotQUxX
QVlTX0lOTElORSBKU1ZhbHVlIEpTVmFsdWU6OmdldChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNWYWx1ZTo6
Z2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYXNWYWx1ZSgpLCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICByZXR1cm4gZ2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIGdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKU1ZhbHVlOjpnZXQoRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
IGNvbnN0CitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNWYWx1ZTo6Z2V0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkgY29uc3QKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVj
LT52bSgpKTsKLSAgICBib29sIGhhc1Nsb3QgPSBnZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnZXRW
TShnbG9iYWxPYmplY3QpKTsKKyAgICBib29sIGhhc1Nsb3QgPSBnZXRQcm9wZXJ0eVNsb3QoZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpIHx8ICFoYXNTbG90KTsKICAgICBpZiAoIWhhc1Nsb3QpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgc2xv
dC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24+Ci1BTFdBWVNfSU5MSU5F
IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2wsIFBy
b3BlcnR5U2xvdCYpPjo6dHlwZSBKU1ZhbHVlOjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbiBj
YWxsYmFjaykgY29uc3QKK0FMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2Fs
bGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIEpTVmFsdWU6
OmdldFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbiBjYWxsYmFjaykgY29uc3QK
IHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChhc1ZhbHVlKCksIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXQpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90LCBjYWxsYmFjayk7CisgICAgcmV0dXJuIGdldFByb3BlcnR5U2xvdChn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCwgY2FsbGJhY2spOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4KLUFMV0FZU19JTkxJTkUgdHlwZW5h
bWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlT
bG90Jik+Ojp0eXBlIEpTVmFsdWU6OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgQ2FsbGJhY2tXaGVu
Tm9FeGNlcHRpb24gY2FsbGJhY2spIGNvbnN0CitBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6
cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2wsIFByb3BlcnR5U2xvdCYpPjo6
dHlwZSBKU1ZhbHVlOjpnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LCBDYWxsYmFj
a1doZW5Ob0V4Y2VwdGlvbiBjYWxsYmFjaykgY29uc3QKIHsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKLSAgICBib29sIGZvdW5kID0gZ2V0UHJvcGVy
dHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoZ2V0Vk0oZ2xvYmFsT2JqZWN0KSk7CisgICAgYm9vbCBmb3VuZCA9IGdl
dFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGNhbGxiYWNrKGZvdW5kLCBzbG90KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKU1Zh
bHVlOjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGJvb2wgSlNW
YWx1ZTo6Z2V0UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKIHsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnZXRWTShnbG9iYWxPYmplY3QpKTsKICAgICAvLyBJ
ZiB0aGlzIGlzIGEgcHJpbWl0aXZlLCB3ZSdsbCBuZWVkIHRvIHN5bnRoZXNpemUgdGhlIHByb3Rv
dHlwZSAtCiAgICAgLy8gYW5kIGlmIGl0J3MgYSBzdHJpbmcgdGhlcmUgYXJlIHNwZWNpYWwgcHJv
cGVydGllcyB0byBjaGVjayBmaXJzdC4KICAgICBKU09iamVjdCogb2JqZWN0OwogICAgIGlmIChV
TkxJS0VMWSghaXNPYmplY3QoKSkpIHsKICAgICAgICAgaWYgKGlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBhc1N0cmluZygqdGhpcyktPmdldFN0cmluZ1Byb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICAgICAgYm9vbCBoYXNQ
cm9wZXJ0eSA9IGFzU3RyaW5nKCp0aGlzKS0+Z2V0U3RyaW5nUHJvcGVydHlTbG90KGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBvYmplY3QgPSBzeW50aGVz
aXplUHJvdG90eXBlKGV4ZWMpOworICAgICAgICBvYmplY3QgPSBzeW50aGVzaXplUHJvdG90eXBl
KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRp
b24oKSA9PSAhb2JqZWN0KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZQogICAgICAgICBvYmplY3QgPSBhc09iamVj
dChhc0NlbGwoKSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9iamVjdC0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpTVmFsdWU6OmdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKK0FMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAogewogICAgIC8vIElm
IHRoaXMgaXMgYSBwcmltaXRpdmUsIHdlJ2xsIG5lZWQgdG8gc3ludGhlc2l6ZSB0aGUgcHJvdG90
eXBlIC0KICAgICAvLyBhbmQgaWYgaXQncyBhIHN0cmluZyB0aGVyZSBhcmUgc3BlY2lhbCBwcm9w
ZXJ0aWVzIHRvIGNoZWNrIGZpcnN0LgotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKGV4ZWMtPnZtKCkpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdl
dFZNKGdsb2JhbE9iamVjdCkpOwogICAgIGlmIChVTkxJS0VMWSghaXNPYmplY3QoKSkpIHsKICAg
ICAgICAgaWYgKGlzU3RyaW5nKCkpCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGFzU3RyaW5nKCp0aGlzKS0+Z2V0U3RyaW5nUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCkpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhc1N0
cmluZygqdGhpcyktPmdldFN0cmluZ1Byb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCkpOwogCiAgICAgICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3Io
ZXhlYywgKnRoaXMpKTsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
c2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZ2xvYmFsT2JqZWN0LCAqdGhpcykpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
YXNPYmplY3QoYXNDZWxsKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3RJbmxpbmUoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhc09iamVjdChh
c0NlbGwoKSktPmdldE93blByb3BlcnR5U2xvdElubGluZShnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUgSlNWYWx1ZTo6Z2V0KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAorQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIEpTVmFsdWU6OmdldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYXNWYWx1
ZSgpLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICByZXR1cm4g
Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIGdldChnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKU1Zh
bHVlOjpnZXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkgY29uc3QKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBKU1ZhbHVlOjpnZXQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpIGNvbnN0CiB7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoZXhlYy0+dm0oKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZ2V0
Vk0oZ2xvYmFsT2JqZWN0KSk7CiAgICAgLy8gSWYgdGhpcyBpcyBhIHByaW1pdGl2ZSwgd2UnbGwg
bmVlZCB0byBzeW50aGVzaXplIHRoZSBwcm90b3R5cGUgLQogICAgIC8vIGFuZCBpZiBpdCdzIGEg
c3RyaW5nIHRoZXJlIGFyZSBzcGVjaWFsIHByb3BlcnRpZXMgdG8gY2hlY2sgZmlyc3QuCiAgICAg
SlNPYmplY3QqIG9iamVjdDsKICAgICBpZiAoVU5MSUtFTFkoIWlzT2JqZWN0KCkpKSB7CiAgICAg
ICAgIGlmIChpc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gYXNT
dHJpbmcoKnRoaXMpLT5nZXRTdHJpbmdQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKKyAgICAgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBhc1N0cmluZygqdGhpcyktPmdl
dFN0cmluZ1Byb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAg
aWYgKGhhc1Byb3BlcnR5KQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKTsKICAgICAgICAgfQotICAgICAgICBvYmplY3QgPSBzeW50aGVzaXplUHJvdG90
eXBlKGV4ZWMpOworICAgICAgICBvYmplY3QgPSBzeW50aGVzaXplUHJvdG90eXBlKGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAh
b2JqZWN0KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKICAgICB9IGVsc2UKICAgICAgICAgb2JqZWN0ID0gYXNPYmplY3QoYXND
ZWxsKCkpOwogICAgIAotICAgIGJvb2wgaGFzU2xvdCA9IG9iamVjdC0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgYm9vbCBoYXNTbG90ID0gb2JqZWN0LT5n
ZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIEVY
Q0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFoYXNTbG90KTsKICAgICBpZiAo
IWhhc1Nsb3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpTVmFsdWU6OmdldChFeGVj
U3RhdGUqIGV4ZWMsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSkgY29uc3QKK0FMV0FZU19JTkxJTkUg
SlNWYWx1ZSBKU1ZhbHVlOjpnZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0
X3QgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpCi0gICAgICAgIHJldHVybiBn
ZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5TmFtZSkpOwotICAgIHJldHVy
biBnZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLT52bSgpLCBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHByb3BlcnR5TmFtZSkpKTsKKyAgICAgICAgcmV0dXJuIGdldChnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gZ2V0KGdsb2Jh
bE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShnZXRWTShnbG9iYWxPYmplY3QpLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KHByb3BlcnR5TmFtZSkpKTsKIH0KIAotaW5saW5lIGJvb2wgSlNWYWx1ZTo6cHV0
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoraW5saW5lIGJvb2wgSlNWYWx1ZTo6cHV0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWlz
Q2VsbCgpKSkKLSAgICAgICAgcmV0dXJuIHB1dFRvUHJpbWl0aXZlKGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gcHV0VG9QcmltaXRpdmUoZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIAotICAgIHJldHVybiBhc0NlbGwoKS0+
bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPnB1dChhc0NlbGwoKSwgZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIGFzQ2VsbCgpLT5tZXRob2RUYWJsZShnZXRWTShn
bG9iYWxPYmplY3QpKS0+cHV0KGFzQ2VsbCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNWYWx1ZTo6cHV0SW5saW5l
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorQUxXQVlTX0lOTElORSBib29sIEpTVmFsdWU6OnB1
dElubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYg
KFVOTElLRUxZKCFpc0NlbGwoKSkpCi0gICAgICAgIHJldHVybiBwdXRUb1ByaW1pdGl2ZShleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKLSAgICByZXR1cm4gYXNDZWxsKCktPnB1dElu
bGluZShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIHB1
dFRvUHJpbWl0aXZlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cisg
ICAgcmV0dXJuIGFzQ2VsbCgpLT5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KTsKIH0KIAotaW5saW5lIGJvb2wgSlNWYWx1ZTo6cHV0QnlJbmRleChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKK2lubGluZSBib29sIEpTVmFsdWU6OnB1dEJ5SW5kZXgoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQogewogICAgIGlmIChVTkxJS0VMWSghaXNDZWxsKCkpKQotICAgICAg
ICByZXR1cm4gcHV0VG9QcmltaXRpdmVCeUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuIHB1dFRvUHJpbWl0aXZlQnlJbmRleChnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKIAotICAgIHJldHVy
biBhc0NlbGwoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPnB1dEJ5SW5kZXgoYXNDZWxsKCks
IGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gYXND
ZWxsKCktPm1ldGhvZFRhYmxlKGdldFZNKGdsb2JhbE9iamVjdCkpLT5wdXRCeUluZGV4KGFzQ2Vs
bCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0K
IAogaW5saW5lIFN0cnVjdHVyZSogSlNWYWx1ZTo6c3RydWN0dXJlT3JOdWxsKCkgY29uc3QKQEAg
LTEwMDgsMTcgKzEwMDMsMTcgQEAgaW5saW5lIEpTVmFsdWUgSlNWYWx1ZTo6c3RydWN0dXJlT3JV
bmRlZmluZWQoKSBjb25zdAogfQogCiAvLyBFQ01BIDExLjkuMwotaW5saW5lIGJvb2wgSlNWYWx1
ZTo6ZXF1YWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQoraW5saW5l
IGJvb2wgSlNWYWx1ZTo6ZXF1YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSB2MSwgSlNWYWx1ZSB2MikKIHsKICAgICBpZiAodjEuaXNJbnQzMigpICYmIHYyLmlzSW50MzIo
KSkKICAgICAgICAgcmV0dXJuIHYxID09IHYyOwogCi0gICAgcmV0dXJuIGVxdWFsU2xvd0Nhc2Uo
ZXhlYywgdjEsIHYyKTsKKyAgICByZXR1cm4gZXF1YWxTbG93Q2FzZShnbG9iYWxPYmplY3QsIHYx
LCB2Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlSW5s
aW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlSW5saW5lKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBkbyB7CiAgICAgICAgIGlmICh2MS5pc051
bWJlcigpICYmIHYyLmlzTnVtYmVyKCkpCkBAIC0xMDI3LDEyICsxMDIyLDEyIEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2MSwgSlNWCiAgICAgICAgIGJvb2wgczEgPSB2MS5pc1N0cmluZygpOwogICAgICAg
ICBib29sIHMyID0gdjIuaXNTdHJpbmcoKTsKICAgICAgICAgaWYgKHMxICYmIHMyKQotICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhc1N0cmluZyh2MSktPmVxdWFsKGV4ZWMs
IGFzU3RyaW5nKHYyKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBh
c1N0cmluZyh2MSktPmVxdWFsKGdsb2JhbE9iamVjdCwgYXNTdHJpbmcodjIpKSk7CiAKICAgICAg
ICAgaWYgKHYxLmlzQmlnSW50KCkgJiYgczIpIHsKLSAgICAgICAgICAgIFN0cmluZyB2MlN0cmlu
ZyA9IGFzU3RyaW5nKHYyKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICBTdHJpbmcgdjJTdHJp
bmcgPSBhc1N0cmluZyh2MiktPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgICAgICBKU0JpZ0ludCogbiA9
IEpTQmlnSW50OjpzdHJpbmdUb0JpZ0ludChleGVjLCB2MlN0cmluZyk7CisgICAgICAgICAgICBK
U0JpZ0ludCogbiA9IEpTQmlnSW50OjpzdHJpbmdUb0JpZ0ludChnbG9iYWxPYmplY3QsIHYyU3Ry
aW5nKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAg
ICAgICAgICAgIGlmICghbikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDQy
LDkgKzEwMzcsOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNWYWx1ZTo6ZXF1YWxTbG93Q2FzZUlu
bGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpTVgogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKHMxICYmIHYyLmlzQmlnSW50KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyB2MVN0cmlu
ZyA9IGFzU3RyaW5nKHYxKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICBTdHJpbmcgdjFTdHJp
bmcgPSBhc1N0cmluZyh2MSktPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgICAgICBKU0JpZ0ludCogbiA9
IEpTQmlnSW50OjpzdHJpbmdUb0JpZ0ludChleGVjLCB2MVN0cmluZyk7CisgICAgICAgICAgICBK
U0JpZ0ludCogbiA9IEpTQmlnSW50OjpzdHJpbmdUb0JpZ0ludChnbG9iYWxPYmplY3QsIHYxU3Ry
aW5nKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAg
ICAgICAgICAgIGlmICghbikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDU4
LDE5ICsxMDUzLDE5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNl
SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICBpZiAoIXYyLmlzQ2VsbCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB2Mi5hc0NlbGwoKS0+c3RydWN0
dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOworICAgICAgICAgICAgcmV0dXJuIHYyLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAodjIuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICAgICAgaWYgKCF2MS5pc0NlbGwo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdjEu
YXNDZWxsKCktPnN0cnVjdHVyZSh2bSktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgICAgIHJldHVybiB2MS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChnbG9iYWxPYmplY3QpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHYxLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIGlmICh2Mi5p
c09iamVjdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKLSAgICAgICAgICAg
IEpTVmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShleGVjKTsKKyAgICAgICAgICAgIEpTVmFsdWUg
cDEgPSB2MS50b1ByaW1pdGl2ZShnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgdjEgPSBwMTsKICAgICAgICAg
ICAgIGlmICh2MS5pc0ludDMyKCkgJiYgdjIuaXNJbnQzMigpKQpAQCAtMTA3OSw3ICsxMDc0LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTVmFsdWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHYxLCBKU1YKICAgICAgICAgfQogCiAgICAgICAgIGlmICh2Mi5p
c09iamVjdCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHAyID0gdjIudG9QcmltaXRpdmUoZXhl
Yyk7CisgICAgICAgICAgICBKU1ZhbHVlIHAyID0gdjIudG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgICAgIHYyID0gcDI7CiAgICAgICAgICAgICBpZiAodjEuaXNJbnQzMigpICYmIHYyLmlzSW50
MzIoKSkKQEAgLTEwOTYsOSArMTA5MSw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjpl
cXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoczEgfHwgczIpIHsKLSAgICAgICAgICAgIGRvdWJsZSBkMSA9
IHYxLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZG91YmxlIGQxID0gdjEudG9OdW1iZXIo
Z2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKLSAgICAgICAgICAgIGRvdWJsZSBkMiA9IHYyLnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICAgICAgZG91YmxlIGQyID0gdjIudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybiBk
MSA9PSBkMjsKICAgICAgICAgfQpAQCAtMTEwNywxNCArMTEwMiwxNCBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNWYWx1ZTo6ZXF1YWxTbG93Q2FzZUlubGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdjEsIEpTVgogICAgICAgICAgICAgaWYgKHYyLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odjEuYXNCb29sZWFuKCkpID09IHYyLmFzTnVt
YmVyKCk7CiAgICAgICAgICAgICBlbHNlIGlmICh2Mi5pc0JpZ0ludCgpKSB7Ci0gICAgICAgICAg
ICAgICAgdjEgPSBKU1ZhbHVlKHYxLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICB2
MSA9IEpTVmFsdWUodjEudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodjIuaXNCb29sZWFu
KCkpIHsKICAgICAgICAgICAgIGlmICh2MS5pc051bWJlcigpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB2MS5hc051bWJlcigpID09IHN0YXRpY19jYXN0PGRvdWJsZT4odjIuYXNCb29sZWFuKCkp
OwogICAgICAgICAgICAgZWxzZSBpZiAodjEuaXNCaWdJbnQoKSkgewotICAgICAgICAgICAgICAg
IHYyID0gSlNWYWx1ZSh2Mi50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICAgICAgdjIgPSBK
U1ZhbHVlKHYyLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTMzLDE4ICsxMTI4LDE4IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2MSwgSlNWCiB9CiAKIC8vIEVDTUEgMTEuOS4zCi1BTFdBWVNfSU5MSU5F
IGJvb2wgSlNWYWx1ZTo6c3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNWYWx1ZTo6c3Ry
aWN0RXF1YWxTbG93Q2FzZUlubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHYxLCBKU1ZhbHVlIHYyKQogewogICAgIEFTU0VSVCh2MS5pc0NlbGwoKSAmJiB2Mi5pc0Nl
bGwoKSk7CiAKICAgICBpZiAodjEuYXNDZWxsKCktPmlzU3RyaW5nKCkgJiYgdjIuYXNDZWxsKCkt
PmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBhc1N0cmluZyh2MSktPmVxdWFsKGV4ZWMsIGFz
U3RyaW5nKHYyKSk7CisgICAgICAgIHJldHVybiBhc1N0cmluZyh2MSktPmVxdWFsKGdsb2JhbE9i
amVjdCwgYXNTdHJpbmcodjIpKTsKICAgICBpZiAodjEuaXNCaWdJbnQoKSAmJiB2Mi5pc0JpZ0lu
dCgpKQogICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmVxdWFscyhhc0JpZ0ludCh2MSksIGFzQmln
SW50KHYyKSk7CiAgICAgcmV0dXJuIHYxID09IHYyOwogfQogCi1pbmxpbmUgYm9vbCBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCitp
bmxpbmUgYm9vbCBKU1ZhbHVlOjpzdHJpY3RFcXVhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQogewogICAgIGlmICh2MS5pc0ludDMyKCkgJiYg
djIuaXNJbnQzMigpKQogICAgICAgICByZXR1cm4gdjEgPT0gdjI7CkBAIC0xMTU1LDcgKzExNTAs
NyBAQCBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpzdHJpY3RFcXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdjEsIEpTVmFsdWUgdjIpCiAgICAgaWYgKCF2MS5pc0NlbGwoKSB8fCAhdjIuaXNDZWxs
KCkpCiAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKIAotICAgIHJldHVybiBzdHJpY3RFcXVhbFNs
b3dDYXNlSW5saW5lKGV4ZWMsIHYxLCB2Mik7CisgICAgcmV0dXJuIHN0cmljdEVxdWFsU2xvd0Nh
c2VJbmxpbmUoZ2xvYmFsT2JqZWN0LCB2MSwgdjIpOwogfQogCiBpbmxpbmUgaW50MzJfdCBKU1Zh
bHVlOjphc0ludDMyRm9yQXJpdGhtZXRpYygpIGNvbnN0CkBAIC0xMTk4LDE0ICsxMTkzLDE0IEBA
IGlubGluZSBUcmlTdGF0ZSBKU1ZhbHVlOjpwdXJlVG9Cb29sZWFuKCkgY29uc3QKICAgICByZXR1
cm4gaXNUcnVlKCkgPyBUcnVlVHJpU3RhdGUgOiBGYWxzZVRyaVN0YXRlOwogfQogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgSlNWYWx1ZTo6cmVxdWlyZU9iamVjdENvZXJjaWJsZShFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGJvb2wgSlNWYWx1ZTo6cmVxdWlyZU9iamVjdENvZXJj
aWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIWlzVW5kZWZpbmVk
T3JOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGV4ZWMsICp0aGlzKSk7CisgICAgdGhyb3dF
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihnbG9i
YWxPYmplY3QsICp0aGlzKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMjI1LDEwICsx
MjIwLDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RoaXNWYWx1ZUFsdGVyZWQoY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBKU09iamVjdCogYmFzCiB9CiAKIC8vIFNlZSBzZWN0aW9uIDcu
Mi45OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zYW1ldmFsdWUKLUFMV0FZ
U19JTkxJTkUgYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFs
dWUgYikKK0FMV0FZU19JTkxJTkUgYm9vbCBzYW1lVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCiB7CiAgICAgaWYgKCFhLmlzTnVtYmVyKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBhLCBiKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGdsb2JhbE9iamVjdCwgYSwgYik7CiAgICAg
aWYgKCFiLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkb3VibGUgeCA9
IGEuYXNOdW1iZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCmlu
ZGV4IGU2OWJiZGI1ODhjZTc1YTFjMDA5Y2M3NDk3MDk5NGM5ZGMyMmJiODQuLmIwYmE1OGI0NTA3
Nzg4N2Y4M2UwMWMyYzgzNTlhNjUzYjg5MjdlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmNwcApAQCAtNjgsMTcgKzY4LDE3IEBAIHZvaWQgSlNDZWxsOjphbmFseXpl
SGVhcChKU0NlbGwqLCBIZWFwQW5hbHl6ZXImKQogewogfQogCi1ib29sIEpTQ2VsbDo6Z2V0U3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nJiBzdHJpbmdWYWx1ZSkgY29uc3QKK2Jvb2wgSlND
ZWxsOjpnZXRTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBzdHJp
bmdWYWx1ZSkgY29uc3QKIHsKICAgICBpZiAoIWlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBzdHJpbmdWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhp
cyktPnZhbHVlKGV4ZWMpOworICAgIHN0cmluZ1ZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNT
dHJpbmcqPih0aGlzKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotU3RyaW5nIEpTQ2VsbDo6Z2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK1N0cmlu
ZyBKU0NlbGw6OmdldFN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAog
ewotICAgIHJldHVybiBpc1N0cmluZygpID8gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0
aGlzKS0+dmFsdWUoZXhlYykgOiBTdHJpbmcoKTsKKyAgICByZXR1cm4gaXNTdHJpbmcoKSA/IHN0
YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnZhbHVlKGdsb2JhbE9iamVjdCkgOiBT
dHJpbmcoKTsKIH0KIAogSlNPYmplY3QqIEpTQ2VsbDo6Z2V0T2JqZWN0KCkKQEAgLTEwNyw4NyAr
MTA3LDg3IEBAIENvbnN0cnVjdFR5cGUgSlNDZWxsOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCos
IENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGU6
Ok5vbmU7CiB9CiAKLWJvb2wgSlNDZWxsOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBpZGVudGlmaWVyLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCitib29sIEpTQ2VsbDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIGlkZW50aWZpZXIsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSB8fCBjZWxs
LT5pc1N5bWJvbCgpIHx8IGNlbGwtPmlzQmlnSW50KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
KGNlbGwpLnB1dFRvUHJpbWl0aXZlKGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVlLCBzbG90KTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoY2VsbCkucHV0VG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0LCBp
ZGVudGlmaWVyLCB2YWx1ZSwgc2xvdCk7CiAKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGNl
bGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wdXQodGhpc09iamVjdCwg
ZXhlYywgaWRlbnRpZmllciwgdmFsdWUsIHNsb3QpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0gY2VsbC0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgaWRlbnRpZmllciwgdmFsdWUsIHNsb3QpOwogfQogCi1ib29sIEpTQ2VsbDo6cHV0QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaWRlbnRpZmllciwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNDZWxsOjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaWRl
bnRpZmllciwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBpZiAo
Y2VsbC0+aXNTdHJpbmcoKSB8fCBjZWxsLT5pc1N5bWJvbCgpIHx8IGNlbGwtPmlzQmlnSW50KCkp
IHsKICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY2VsbCwgc2hvdWxkVGhyb3cpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZShjZWxsKS5wdXRUb1ByaW1pdGl2ZShleGVjLCBJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpZGVudGlmaWVyKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZShjZWxsKS5wdXRUb1ByaW1pdGl2ZShnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20o
dm0sIGlkZW50aWZpZXIpLCB2YWx1ZSwgc2xvdCk7CiAgICAgfQotICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0gY2VsbC0+dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRo
aXNPYmplY3QsIGV4ZWMsIGlkZW50aWZpZXIsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBjZWxsLT50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpc09iamVjdCwg
Z2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCi1ib29s
IEpTQ2VsbDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBpZGVudGlmaWVyKQorYm9vbCBKU0NlbGw6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIGlkZW50
aWZpZXIpCiB7Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBjZWxsLT50b09iamVjdChleGVj
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5t
ZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
aWRlbnRpZmllcik7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBjZWxsLT50b09iamVjdChn
bG9iYWxPYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShnbG9iYWxP
YmplY3QtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlk
ZW50aWZpZXIpOwogfQogCi1ib29sIEpTQ2VsbDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpZGVudGlmaWVyKQorYm9vbCBKU0Nl
bGw6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHVuc2lnbmVkIGlkZW50aWZpZXIpCiB7Ci0gICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBjZWxsLT50b09iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
OwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGlkZW50aWZpZXIpOworICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gY2VsbC0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVsZXRlUHJv
cGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnRpZmllcik7CiB9CiAK
LUpTVmFsdWUgSlNDZWxsOjp0b1RoaXMoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIEVD
TUFNb2RlIGVjbWFNb2RlKQorSlNWYWx1ZSBKU0NlbGw6OnRvVGhpcyhKU0NlbGwqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVDTUFNb2RlIGVjbWFNb2RlKQogewogICAgIGlm
IChlY21hTW9kZSA9PSBTdHJpY3RNb2RlKQogICAgICAgICByZXR1cm4gY2VsbDsKLSAgICByZXR1
cm4gY2VsbC0+dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAg
ICByZXR1cm4gY2VsbC0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKIH0KIAotSlNWYWx1ZSBKU0Nl
bGw6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBw
cmVmZXJyZWRUeXBlKSBjb25zdAorSlNWYWx1ZSBKU0NlbGw6OnRvUHJpbWl0aXZlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgcHJlZmVycmVkVHlw
ZSkgY29uc3QKIHsKICAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnRvUHJpbWl0aXZlKGV4ZWMsIHByZWZlcnJlZFR5
cGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0aGlzKS0+
dG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0LCBwcmVmZXJyZWRUeXBlKTsKICAgICBpZiAoaXNTeW1i
b2woKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN5bWJvbCo+KHRoaXMpLT50
b1ByaW1pdGl2ZShleGVjLCBwcmVmZXJyZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFN5bWJvbCo+KHRoaXMpLT50b1ByaW1pdGl2ZShnbG9iYWxPYmplY3QsIHByZWZl
cnJlZFR5cGUpOwogICAgIGlmIChpc0JpZ0ludCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgSlNCaWdJbnQqPih0aGlzKS0+dG9QcmltaXRpdmUoZXhlYywgcHJlZmVycmVkVHlw
ZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTT2JqZWN0Kj4odGhpcyktPnRvUHJp
bWl0aXZlKGV4ZWMsIHByZWZlcnJlZFR5cGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNCaWdJbnQqPih0aGlzKS0+dG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0LCBwcmVmZXJy
ZWRUeXBlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNPYmplY3QqPih0aGlzKS0+
dG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0LCBwcmVmZXJyZWRUeXBlKTsKIH0KIAotYm9vbCBKU0Nl
bGw6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyLCBK
U1ZhbHVlJiB2YWx1ZSkgY29uc3QKK2Jvb2wgSlNDZWxsOjpnZXRQcmltaXRpdmVOdW1iZXIoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmIHZhbHVl
KSBjb25zdAogewogICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgSlNTdHJpbmcqPih0aGlzKS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGV4ZWMsIG51bWJl
ciwgdmFsdWUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0
aGlzKS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGdsb2JhbE9iamVjdCwgbnVtYmVyLCB2YWx1ZSk7CiAg
ICAgaWYgKGlzU3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTeW1i
b2wqPih0aGlzKS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGV4ZWMsIG51bWJlciwgdmFsdWUpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3ltYm9sKj4odGhpcyktPmdldFByaW1pdGl2
ZU51bWJlcihnbG9iYWxPYmplY3QsIG51bWJlciwgdmFsdWUpOwogICAgIGlmIChpc0JpZ0ludCgp
KQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNCaWdJbnQqPih0aGlzKS0+Z2V0
UHJpbWl0aXZlTnVtYmVyKGV4ZWMsIG51bWJlciwgdmFsdWUpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBKU09iamVjdCo+KHRoaXMpLT5nZXRQcmltaXRpdmVOdW1iZXIoZXhlYywgbnVt
YmVyLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0JpZ0ludCo+
KHRoaXMpLT5nZXRQcmltaXRpdmVOdW1iZXIoZ2xvYmFsT2JqZWN0LCBudW1iZXIsIHZhbHVlKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNPYmplY3QqPih0aGlzKS0+Z2V0UHJpbWl0
aXZlTnVtYmVyKGdsb2JhbE9iamVjdCwgbnVtYmVyLCB2YWx1ZSk7CiB9CiAKLWRvdWJsZSBKU0Nl
bGw6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK2RvdWJsZSBKU0NlbGw6OnRvTnVt
YmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgaWYgKGlzU3Ry
aW5nKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHRoaXMp
LT50b051bWJlcihleGVjKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3Ry
aW5nKj4odGhpcyktPnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKGlzU3ltYm9sKCkp
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTeW1ib2wqPih0aGlzKS0+dG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTeW1ib2wqPih0aGlz
KS0+dG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoaXNCaWdJbnQoKSkKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTQmlnSW50Kj4odGhpcyktPnRvTnVtYmVyKGV4ZWMp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU09iamVjdCo+KHRoaXMpLT50b051bWJl
cihleGVjKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTQmlnSW50Kj4odGhp
cyktPnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEpTT2JqZWN0Kj4odGhpcyktPnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiB9CiAKLUpTT2JqZWN0
KiBKU0NlbGw6OnRvT2JqZWN0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpIGNvbnN0CitKU09iamVjdCogSlNDZWxsOjp0b09iamVjdFNsb3coSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzT2JqZWN0KCkp
OwogICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
SlNTdHJpbmcqPih0aGlzKS0+dG9PYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnRvT2JqZWN0KGdsb2Jh
bE9iamVjdCk7CiAgICAgaWYgKGlzQmlnSW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBKU0JpZ0ludCo+KHRoaXMpLT50b09iamVjdChleGVjLCBnbG9iYWxPYmplY3QpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNCaWdJbnQqPih0aGlzKS0+dG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKICAgICBBU1NFUlQoaXNTeW1ib2woKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IFN5bWJvbCo+KHRoaXMpLT50b09iamVjdChleGVjLCBnbG9iYWxPYmpl
Y3QpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTeW1ib2wqPih0aGlzKS0+dG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKIH0KIAogdm9pZCBzbG93VmFsaWRhdGVDZWxsKEpTQ2VsbCogY2Vs
bCkKQEAgLTE5NSwzNSArMTk1LDM1IEBAIHZvaWQgc2xvd1ZhbGlkYXRlQ2VsbChKU0NlbGwqIGNl
bGwpCiAgICAgQVNTRVJUX0dDX09CSkVDVF9MT09LU19WQUxJRChjZWxsKTsKIH0KIAotSlNWYWx1
ZSBKU0NlbGw6OmRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUpCitKU1ZhbHVlIEpTQ2VsbDo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKQogewogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLWJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpCitib29sIEpTQ2VsbDo6Z2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpCitib29sIEpTQ2Vs
bDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQsIFByb3BlcnR5U2xvdCYpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSlNDZWxsOjpkb1B1dFByb3BlcnR5
U2VjdXJpdHlDaGVjayhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHV0UHJv
cGVydHlTbG90JikKK3ZvaWQgSlNDZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSlNDZWxsOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpCit2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBK
U0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQordm9pZCBKU0NlbGw6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KQEAgLTIzNCw3ICsyMzQsNyBAQCBTdHJpbmcgSlNDZWxsOjpjbGFzc05h
bWUoY29uc3QgSlNPYmplY3QqLCBWTSYpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJp
bmcgSlNDZWxsOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKQorU3Ry
aW5nIEpTQ2VsbDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
KQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFN0cmlu
ZygpOwpAQCAtMjQ1LDU1ICsyNDUsNTUgQEAgY29uc3QgY2hhciogSlNDZWxsOjpjbGFzc05hbWUo
Vk0mIHZtKSBjb25zdAogICAgIHJldHVybiBjbGFzc0luZm8odm0pLT5jbGFzc05hbWU7CiB9CiAK
LXZvaWQgSlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit2b2lkIEpTQ2VsbDo6Z2V0UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotYm9vbCBKU0NlbGw6OmN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
SlNWYWx1ZSkKK2Jvb2wgSlNDZWxsOjpjdXN0b21IYXNJbnN0YW5jZShKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU0NlbGw6OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sKQorYm9vbCBKU0NlbGw6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXVpbnQzMl90IEpTQ2VsbDo6Z2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3Rh
dGUqLCBKU09iamVjdCopCit1aW50MzJfdCBKU0NlbGw6OmdldEVudW1lcmFibGVMZW5ndGgoSlNH
bG9iYWxPYmplY3QqLCBKU09iamVjdCopCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBKU0NlbGw6OmdldFN0cnVjdHVyZVByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSkKK3ZvaWQgSlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQ2Vs
bDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgSlNDZWxsOjpnZXRHZW5lcmljUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotYm9vbCBKU0NlbGw6OnByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KikKK2Jvb2wgSlNDZWxsOjpwcmV2ZW50RXh0ZW5zaW9ucyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KikKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1ib29sIEpT
Q2VsbDo6aXNFeHRlbnNpYmxlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKK2Jvb2wgSlNDZWxsOjpp
c0V4dGVuc2libGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotYm9vbCBKU0NlbGw6OnNldFByb3RvdHlwZShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGJvb2wpCitib29sIEpTQ2VsbDo6c2V0UHJvdG90
eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBib29sKQogewogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUpTVmFsdWUgSlNDZWxsOjpnZXRQcm90
b3R5cGUoSlNPYmplY3QqLCBFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU0NlbGw6OmdldFByb3RvdHlw
ZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KikKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAppbmRleCBl
OTVkNTEyYTM4ZTY4MmRiZmRhMzY0ZDI4MGIxZThkNzdhZGJhN2I5Li5lMDk1YWQzZmZlNzc4NzZl
M2YxOTQxM2FkOTVlMGNjZGQ3M2U2MDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaApAQCAtNTIsNyArNTIsNiBAQCBjbGFzcyBQcm9wZXJ0eU5hbWU7CiBjbGFzcyBQcm9w
ZXJ0eU5hbWVBcnJheTsKIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIEpTQ2VsbExvY2s7Ci11c2lu
ZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIGVudW0gY2xhc3MgR0NEZWZlcnJhbENvbnRleHRB
cmdQcmVzZW5zZSB7CiAgICAgSGFzQXJnLApAQCAtMTQ0LDggKzE0Myw4IEBAIGNsYXNzIEpTQ2Vs
bCA6IHB1YmxpYyBIZWFwQ2VsbCB7CiAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lKFZNJikgY29u
c3Q7CiAKICAgICAvLyBFeHRyYWN0aW5nIHRoZSB2YWx1ZS4KLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGdldFN0cmluZyhFeGVjU3RhdGUqLCBTdHJpbmcmKSBjb25zdDsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBTdHJpbmcgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OyAvLyBudWxsIHN0
cmluZyBpZiBub3QgYSBzdHJpbmcKKyAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldFN0cmlu
ZyhKU0dsb2JhbE9iamVjdCosIFN0cmluZyYpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFN0cmluZyBnZXRTdHJpbmcoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsgLy8gbnVsbCBzdHJpbmcg
aWYgbm90IGEgc3RyaW5nCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGdldE9iamVj
dCgpOyAvLyBOVUxMIGlmIG5vdCBhbiBvYmplY3QKICAgICBjb25zdCBKU09iamVjdCogZ2V0T2Jq
ZWN0KCkgY29uc3Q7IC8vIE5VTEwgaWYgbm90IGFuIG9iamVjdAogICAgICAgICAKQEAgLTE1OSwx
MiArMTU4LDEyIEBAIGNsYXNzIEpTQ2VsbCA6IHB1YmxpYyBIZWFwQ2VsbCB7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwq
LCBDb25zdHJ1Y3REYXRhJik7CiAKICAgICAvLyBCYXNpYyBjb252ZXJzaW9ucy4KLSAgICBKU19F
WFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUpIGNvbnN0OwotICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0
ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7Ci0gICAgYm9vbCB0b0Jvb2xlYW4o
RXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0b1ByaW1p
dGl2ZShKU0dsb2JhbE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAg
IGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlJiBudW1iZXIs
IEpTVmFsdWUmKSBjb25zdDsKKyAgICBib29sIHRvQm9vbGVhbihKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwogICAgIFRyaVN0YXRlIHB1cmVUb0Jvb2xlYW4oKSBjb25zdDsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNPYmplY3Qq
IHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CisgICAg
SlNPYmplY3QqIHRvT2JqZWN0KEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKQEAgLTE4MCwxNCAr
MTc5LDE0IEBAIGNsYXNzIEpTQ2VsbCA6IHB1YmxpYyBIZWFwQ2VsbCB7CiAgICAgLy8gT2JqZWN0
IG9wZXJhdGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRlZC4KICAgICBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyhWTSYpIGNvbnN0OwogICAgIGNvbnN0IE1ldGhvZFRh
YmxlKiBtZXRob2RUYWJsZShWTSYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICBib29sIHB1dElu
bGluZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJ
bmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXRJbmxpbmUoSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICAK
LSAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwq
LCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogCi0gICAgc3RhdGljIEpTVmFsdWUgdG9UaGlz
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFNb2RlKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b1Ro
aXMoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBFQ01BTW9kZSk7CiAKICAgICBzdGF0aWMgYm9v
bCBjYW5Vc2VGYXN0R2V0T3duUHJvcGVydHkoY29uc3QgU3RydWN0dXJlJik7CiAgICAgSlNWYWx1
ZSBmYXN0R2V0T3duUHJvcGVydHkoVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0eU5hbWUpOwpAQCAt
MjQ3LDMyICsyNDYsMzIgQEAgY2xhc3MgSlNDZWxsIDogcHVibGljIEhlYXBDZWxsIHsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3RydWN0dXJlKiwgQ3JlYXRpbmdFYXJseUNlbGxUYWcp
OwogCiAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG92ZXJyaWRlLWFibGUgc3RhdGlj
IGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4gdGhlaXIgTWV0aG9kVGFibGUKLSAgICBz
dGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotCi0gICAg
c3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFN0cnVjdHVyZVBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBn
ZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCBib29sIHByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7Ci0gICAg
c3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggYm9vbCBpc0V4dGVuc2libGUoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBib29sIHNl
dFByb3RvdHlwZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGJvb2wpOwotICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKKyAgICBz
dGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIHVpbnQzMl90
IGdldEVudW1lcmFibGVMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCopOworICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0R2Vu
ZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCBib29sIHByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsK
KyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBib29sIGlzRXh0ZW5zaWJsZShKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUs
IGJvb2wpOworICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIEpTVmFsdWUgZ2V0UHJv
dG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIHN0YXRpYyBTdHJpbmcg
Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3Ry
aW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
SlNWYWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIE5PX1JFVFVS
Tl9EVUVfVE9fQ1JBU0ggdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lk
IGRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIEpTQ2VsbExvY2s7
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3RTbG93KEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmpl
Y3QqIHRvT2JqZWN0U2xvdyhKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgU3RydWN0dXJl
SUQgbV9zdHJ1Y3R1cmVJRDsKICAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGVBbmRNaXNj
OyAvLyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBmaWVsZC4gQWx3YXlzIENBUy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAppbmRleCBkN2M3Y2IxNTVhNzNk
OTRjNTk5MDk2YTVmM2RjNjAzMzM2N2YwYjg0Li41NDhkMjJiYWZlNzk5Nzc2MTM3OWM2NzM1ZWIx
MmE0ZTQ5NzFhMTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGxJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
SW5saW5lcy5oCkBAIC0xMzgsNyArMTM4LDcgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjp2aXNpdE91
dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJikKIHsKIH0KIAotQUxXQVlTX0lO
TElORSBWTSYgRXhlY1N0YXRlOjp2bSgpIGNvbnN0CitBTFdBWVNfSU5MSU5FIFZNJiBDYWxsRnJh
bWU6OnZtKCkgY29uc3QKIHsKICAgICBKU0NlbGwqIGNhbGxlZSA9IHRoaXMtPmNhbGxlZSgpLmFz
Q2VsbCgpOwogICAgIEFTU0VSVChjYWxsZWUpOwpAQCAtMzQ3LDEzICszNDcsMTMgQEAgQUxXQVlT
X0lOTElORSBjb25zdCBDbGFzc0luZm8qIEpTQ2VsbDo6Y2xhc3NJbmZvKFZNJiB2bSkgY29uc3QK
ICAgICByZXR1cm4gc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCk7CiB9CiAKLWlubGluZSBib29s
IEpTQ2VsbDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK2lubGluZSBib29sIEpT
Q2VsbDo6dG9Cb29sZWFuKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAg
ICAgaWYgKGlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0
cmluZyo+KHRoaXMpLT50b0Jvb2xlYW4oKTsKICAgICBpZiAoaXNCaWdJbnQoKSkKICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTQmlnSW50Kj4odGhpcyktPnRvQm9vbGVhbigpOwot
ICAgIHJldHVybiAhc3RydWN0dXJlKGV4ZWMtPnZtKCkpLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgcmV0dXJuICFzdHJ1Y3R1cmUoZ2V0
Vk0oZ2xvYmFsT2JqZWN0KSktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZ2xvYmFsT2JqZWN0KTsK
IH0KIAogaW5saW5lIFRyaVN0YXRlIEpTQ2VsbDo6cHVyZVRvQm9vbGVhbigpIGNvbnN0CkBAIC00
MDksMTkgKzQwOSwxOSBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OnNldFBlckNlbGxCaXQoYm9vbCB2
YWx1ZSkKICAgICAgICAgbV9mbGFncyAmPSB+c3RhdGljX2Nhc3Q8VHlwZUluZm86OklubGluZVR5
cGVGbGFncz4oVHlwZUluZm9QZXJDZWxsQml0KTsKIH0KIAotaW5saW5lIEpTT2JqZWN0KiBKU0Nl
bGw6OnRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkgY29uc3QKK2lubGluZSBKU09iamVjdCogSlNDZWxsOjp0b09iamVjdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGlmIChpc09iamVjdCgpKQogICAgICAgICBy
ZXR1cm4ganNDYXN0PEpTT2JqZWN0Kj4oY29uc3RfY2FzdDxKU0NlbGwqPih0aGlzKSk7Ci0gICAg
cmV0dXJuIHRvT2JqZWN0U2xvdyhleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiB0b09i
amVjdFNsb3coZ2xvYmFsT2JqZWN0KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpTQ2VsbDo6
cHV0SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorQUxXQVlTX0lOTElORSBib29sIEpT
Q2VsbDo6cHV0SW5saW5lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
LSAgICBhdXRvIHB1dE1ldGhvZCA9IG1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wdXQ7CisgICAg
YXV0byBwdXRNZXRob2QgPSBtZXRob2RUYWJsZShnZXRWTShnbG9iYWxPYmplY3QpKS0+cHV0Owog
ICAgIGlmIChMSUtFTFkocHV0TWV0aG9kID09IEpTT2JqZWN0OjpwdXQpKQotICAgICAgICByZXR1
cm4gSlNPYmplY3Q6OnB1dElubGluZUZvckpTT2JqZWN0KGFzT2JqZWN0KHRoaXMpLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKLSAgICByZXR1cm4gcHV0TWV0aG9kKHRoaXMsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm4gSlNPYmplY3Q6
OnB1dElubGluZUZvckpTT2JqZWN0KGFzT2JqZWN0KHRoaXMpLCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiBwdXRNZXRob2QodGhpcywgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogaW5saW5lIGJvb2wgaXNX
ZWJBc3NlbWJseVRvSlNDYWxsZWUoY29uc3QgSlNDZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1
bmN0aW9uLmNwcAppbmRleCA1NWM1MGU0ZjE0NGUwMGI2Y2JkMGM0OWQ1MjQ2NzU2MTNlMGNmZjZl
Li44ZjhmMDg5MDA0MzI5M2ZkZWFhOWU2OWE2ODhlMjA5M2YxYjM3ZTgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uLmNwcApAQCAtNDcsMTcgKzQ3LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6Y3VzdG9tR2V0dGVyU2V0dGVy
RnVuCiAgICAgaWYgKGN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLT5pc1NldHRlcigpKSB7CiAg
ICAgICAgIEN1c3RvbUdldHRlclNldHRlcjo6Q3VzdG9tU2V0dGVyIHNldHRlciA9IGN1c3RvbUdl
dHRlclNldHRlci0+c2V0dGVyKCk7CiAgICAgICAgIEFTU0VSVChzZXR0ZXIpOwotICAgICAgICBj
YWxsQ3VzdG9tU2V0dGVyKGNhbGxGcmFtZSwgc2V0dGVyLCB0cnVlLCB0aGlzVmFsdWUsIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpOworICAgICAgICBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9iamVj
dCwgc2V0dGVyLCB0cnVlLCB0aGlzVmFsdWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAogICAg
IGlmIChjdXN0b21HZXR0ZXJTZXR0ZXItPmluaGVyaXRzPERPTUF0dHJpYnV0ZUdldHRlclNldHRl
cj4odm0pKSB7CiAgICAgICAgIGF1dG8gZG9tQXR0cmlidXRlID0ganNDYXN0PERPTUF0dHJpYnV0
ZUdldHRlclNldHRlcio+KGN1c3RvbUdldHRlclNldHRlciktPmRvbUF0dHJpYnV0ZSgpOwogICAg
ICAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cyh2bSwgZG9tQXR0cmlidXRlLmNsYXNzSW5mbykp
Ci0gICAgICAgICAgICByZXR1cm4gdGhyb3dWTURPTUF0dHJpYnV0ZUdldHRlclR5cGVFcnJvcihj
YWxsRnJhbWUsIHNjb3BlLCBkb21BdHRyaWJ1dGUuY2xhc3NJbmZvLCBjdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1E
T01BdHRyaWJ1dGVHZXR0ZXJUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZG9tQXR0cmli
dXRlLmNsYXNzSW5mbywgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24tPnByb3BlcnR5TmFtZSgp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gY3VzdG9tR2V0dGVyU2V0dGVyLT5nZXR0ZXIoKShjYWxs
RnJhbWUsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbi0+cHJvcGVydHlOYW1lKCkpOworICAgIHJldHVybiBjdXN0b21HZXR0ZXJTZXR0ZXItPmdl
dHRlcigpKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIGN1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CiB9CiAKIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24oVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVHlw
ZSB0eXBlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKaW5kZXggNWJhOTYzYmRlMzkwZmQyMjJh
ZDFkZGQ1ZTdhNWM2NTA5NWVmZjRmMS4uMTQ2YTkxMzJkNDczNTI0MmMxMDZlNjU1NjQ3NzhlMTdl
ZDdiYWI4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlldy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5j
cHAKQEAgLTQ0LDE5ICs0NCwxOSBAQCBKU0RhdGFWaWV3OjpKU0RhdGFWaWV3KFZNJiB2bSwgQ29u
c3RydWN0aW9uQ29udGV4dCYgY29udGV4dCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcgogfQogCiBKU0Rh
dGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5QnVmZmVyPiYmIGJ1ZmZlciwKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5
QnVmZmVyPiYmIGJ1ZmZlciwKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRl
TGVuZ3RoKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEFTU0VSVChidWZmZXIpOwogICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlT
dWJSYW5nZUxlbmd0aCgqYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoLCBzaXplb2YodWlu
dDhfdCkpKSB7Ci0gICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCAiTGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIiX3MpKTsKKyAgICAgICAg
dGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFs
T2JqZWN0LCAiTGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIiX3MpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlCeXRl
T2Zmc2V0QWxpZ25tZW50KGJ5dGVPZmZzZXQsIHNpemVvZih1aW50OF90KSkpIHsKLSAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUg
b2Zmc2V0IGlzIG5vdCBhbGlnbmVkIl9zKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiQnl0ZSBvZmZz
ZXQgaXMgbm90IGFsaWduZWQiX3MpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
ICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCgKQEAgLTY4LDI1ICs2OCwyNSBAQCBKU0Rh
dGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNE
YXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCB1bnNpZ25lZCkKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKIHsKICAgICBVTlJF
QUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICByZXR1cm4gMDsKIH0KIAotSlNEYXRhVmlldyog
SlNEYXRhVmlldzo6Y3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkKQorSlNE
YXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
dW5zaWduZWQpCiB7CiAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgcmV0dXJu
IDA7CiB9CiAKLWJvb2wgSlNEYXRhVmlldzo6c2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU09i
amVjdCosIHVuc2lnbmVkLCB1bnNpZ25lZCkKK2Jvb2wgSlNEYXRhVmlldzo6c2V0KEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQsIEpTT2JqZWN0KiwgdW5zaWduZWQsIHVuc2lnbmVkKQogewogICAg
IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBKU0RhdGFWaWV3OjpzZXRJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNWYWx1ZSkKK2Jv
b2wgSlNEYXRhVmlldzo6c2V0SW5kZXgoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1
ZSkKIHsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMDMsOSArMTAzLDkgQEAgUmVmUHRyPERhdGFWaWV3PiBKU0RhdGFWaWV3Ojp1bnNoYXJl
ZFR5cGVkSW1wbCgpCiB9CiAKIGJvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAot
ICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorICAgIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTRGF0YVZpZXcqPihvYmplY3QpOwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVy
dHlOYW1lcy0+Ynl0ZUxlbmd0aCkgewogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3Qs
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSwganNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKQEAgLTExNiw1NyArMTE2LDU3IEBA
IGJvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKIGJvb2wgSlNEYXRhVmlldzo6cHV0KAotICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIEpT
Q2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTRGF0
YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KGNlbGwpOwogCiAgICAgaWYg
KFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGV4ZWMsIHRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RN
b2RlKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNs
b3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRo
aXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CiAKICAgICBpZiAocHJvcGVydHlOYW1l
ID09IHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVMZW5ndGgKICAgICAgICAgfHwgcHJvcGVydHlOYW1l
ID09IHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVPZmZzZXQpCi0gICAgICAgIHJldHVybiB0eXBlRXJy
b3IoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksICJBdHRlbXB0aW5nIHRvIHdyaXRl
IHRvIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iX3MpOworICAgICAgICByZXR1cm4g
dHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksICJBdHRl
bXB0aW5nIHRvIHdyaXRlIHRvIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iX3MpOwog
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCkpOwogfQogCiBib29sIEpTRGF0YVZpZXc6OmRlZmluZU93blByb3BlcnR5KAot
ICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwKKyAgICBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAogICAgIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZt
LnByb3BlcnR5TmFtZXMtPmJ5dGVMZW5ndGgKICAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IHZt
LnByb3BlcnR5TmFtZXMtPmJ5dGVPZmZzZXQpCi0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhl
Yywgc2NvcGUsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IHR5
cGVkIGFycmF5IHByb3BlcnR5LiJfcyk7CisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9u
bHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIl9zKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdykpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KSk7CiB9CiAKIGJvb2wgSlNEYXRh
Vmlldzo6ZGVsZXRlUHJvcGVydHkoCi0gICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCisgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KGNlbGwpOwogICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZUxlbmd0aAogICAgICAg
ICB8fCBwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Ynl0ZU9mZnNldCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAogdm9pZCBK
U0RhdGFWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCi0gICAgSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQorICAgIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4o
b2JqZWN0KTsKICAgICAKICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkp
IHsKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEpTRGF0YVZpZXc6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcygKICAgICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmJ5dGVMZW5n
dGgpOwogICAgIH0KICAgICAKLSAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGFycmF5LCBtb2RlKTsKIH0K
IAogU3RydWN0dXJlKiBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUoCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKaW5kZXggYmZkMTZmYWUzZjdkMjM2MDhhMjM2
YjcyYTBjYzI5MGJiMDA0YmU3MC4uMTIwZGY3ZmIzZGNlNjA1YTM4OWFjMDNkMThkMGZmZDc4YWYy
NjgwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
dy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaApAQCAt
NDAsMTUgKzQwLDE1IEBAIGNsYXNzIEpTRGF0YVZpZXcgZmluYWwgOiBwdWJsaWMgSlNBcnJheUJ1
ZmZlclZpZXcgewogICAgIAogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBK
U0RhdGFWaWV3KiBjcmVhdGUoCi0gICAgICAgIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJlZlB0
cjxBcnJheUJ1ZmZlcj4mJiwgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAgICAgICAgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWZQdHI8QXJyYXlCdWZmZXI+JiYsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIAogICAgIC8vIER1bW15
IG1ldGhvZHMsIHdoaWNoIGRvbid0IGFjdHVhbGx5IHdvcms7IHRoZXNlIGFyZSBqdXN0IGluIHBs
YWNlIHRvCiAgICAgLy8gcGxhY2F0ZSBzb21lIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIHdlIGRv
IGVsc2V3aGVyZS4KLSAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlVW5pbml0aWFsaXplZChF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBKU0Rh
dGFWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBib29sIHNldChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNPYmplY3QqLCB1bnNpZ25lZCwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBib29sIHNldEluZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
LCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlVW5pbml0aWFsaXplZChK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGlj
IEpTRGF0YVZpZXcqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgYm9vbCBzZXQoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgSlNPYmpl
Y3QqLCB1bnNpZ25lZCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBib29sIHNldEluZGV4KEpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUpOwogICAgIAogICAgIEFycmF5QnVmZmVyKiBw
b3NzaWJseVNoYXJlZEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CiAgICAgQXJy
YXlCdWZmZXIqIHVuc2hhcmVkQnVmZmVyKCkgY29uc3QKQEAgLTYzLDEyICs2MywxMiBAQCBjbGFz
cyBKU0RhdGFWaWV3IGZpbmFsIDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKICAgICBzdGF0
aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZURhdGFW
aWV3OwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHko
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
KyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKaW5kZXgg
YzJjMmY3OTk0ODc5NDYyNGVjMzgwYTUyMTViYzBkZTUxNmUxNmQ2MC4uMjJiZWM5MmVmZjlkOTQ5
MzhmZjYyMDMxZTVkYmJhZDEyMDc0ZGIwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKQEAgLTEyMCwyOCArMTIwLDI4
IEBAIFN0cnVjdHVyZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgotRW5jb2RlZEpTVmFsdWUgZ2V0RGF0YShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1
ZSBnZXREYXRhKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9
IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAg
SlNEYXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPih2bSwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhVmlldykKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRo
b2QgbXVzdCBiZSBhIERhdGFWaWV3Il9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0
IGJlIGEgRGF0YVZpZXciX3MpOwogICAgIAotICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVj
LT5hcmd1bWVudCgwKS50b0luZGV4KGV4ZWMsICJieXRlT2Zmc2V0Iik7CisgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9JbmRleChnbG9iYWxPYmplY3Qs
ICJieXRlT2Zmc2V0Iik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgCiAgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKICAgICB1bnNp
Z25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKLSAgICBp
ZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Ci0gICAg
ICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihl
eGVjKTsKKyAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpID49IDIpIHsKKyAgICAgICAgbGl0dGxlRW5kaWFuID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgxKS50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIGJ5dGVMZW5ndGggPSBkYXRhVmlldy0+bGVuZ3RoKCk7CiAgICAgaWYgKGVsZW1lbnRTaXpl
ID4gYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCAtIGVsZW1lbnRTaXplKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyJfcykpOworICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0
LCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3MiX3MpKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGRhdGFT
aXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogICAgIHVuaW9uIHsKQEAgLTE2
MywxNiArMTYzLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGdldERhdGEoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgotRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmll
dyo+KHZtLCBleGVjLT50aGlzVmFsdWUoKSk7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcgPSBq
c0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAg
ICAgaWYgKCFkYXRhVmlldykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsICJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3Il9z
KTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXciX3MpOwogICAg
IAotICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b0luZGV4KGV4
ZWMsICJieXRlT2Zmc2V0Iik7CisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkudG9JbmRleChnbG9iYWxPYmplY3QsICJieXRlT2Zmc2V0Iik7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBjb25zdCB1
bnNpZ25lZCBkYXRhU2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKQEAgLTE4
MSwxOSArMTgxLDE5IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB1aW50OF90IHJhd0J5dGVzW2Rh
dGFTaXplXTsKICAgICB9IHU7CiAKLSAgICB1LnZhbHVlID0gdG9OYXRpdmVGcm9tVmFsdWU8QWRh
cHRvcj4oZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOworICAgIHUudmFsdWUgPSB0b05hdGl2ZUZy
b21WYWx1ZTxBZGFwdG9yPihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIAog
ICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxlbWVudFNpemUg
PSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7Ci0gICAgaWYgKGVsZW1lbnRTaXplID4g
MSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewotICAgICAgICBsaXR0bGVFbmRpYW4g
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgaWYgKGVs
ZW1lbnRTaXplID4gMSAmJiBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7CisgICAg
ICAgIGxpdHRsZUVuZGlhbiA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMikudG9Cb29s
ZWFuKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0g
ZGF0YVZpZXctPmxlbmd0aCgpOwogICAgIGlmIChlbGVtZW50U2l6ZSA+IGJ5dGVMZW5ndGggfHwg
Ynl0ZU9mZnNldCA+IGJ5dGVMZW5ndGggLSBlbGVtZW50U2l6ZSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJv
dW5kcyBhY2Nlc3MiX3MpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIk91dCBvZiBib3VuZHMg
YWNjZXNzIl9zKSk7CiAKICAgICB1aW50OF90KiBkYXRhUHRyID0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGRhdGFWaWV3LT52ZWN0b3IoKSkgKyBieXRlT2Zmc2V0OwogCkBAIC0yMTcsOSArMjE3LDkg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvR2V0dGVyQnVmZmVy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKIAogICAgIEpTRGF0YVZpZXcqIHZpZXcgPSBqc0R5
bmFtaWNDYXN0PEpTRGF0YVZpZXcqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAg
aWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNj
b3BlLCAiRGF0YVZpZXcucHJvdG90eXBlLmJ1ZmZlciBleHBlY3RzIHx0aGlzfCB0byBiZSBhIERh
dGFWaWV3IG9iamVjdCIpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiRGF0YVZpZXcucHJvdG90eXBlLmJ1ZmZlciBleHBlY3RzIHx0aGlzfCB0
byBiZSBhIERhdGFWaWV3IG9iamVjdCIpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2
aWV3LT5wb3NzaWJseVNoYXJlZEpTQnVmZmVyKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodmlldy0+cG9zc2libHlTaGFyZWRKU0J1ZmZlcihnbG9iYWxPYmplY3QpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvR2V0dGVyQnl0
ZUxlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKQEAgLTIyOSw3ICsyMjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9HZXR0ZXJCeXRlTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYQogCiAgICAgSlNE
YXRhVmlldyogdmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KHZtLCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJEYXRhVmlldy5wcm90b3R5cGUuYnVmZmVyIGV4cGVj
dHMgfHRoaXN8IHRvIGJlIGEgRGF0YVZpZXcgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJEYXRhVmlldy5wcm90b3R5cGUuYnVm
ZmVyIGV4cGVjdHMgfHRoaXN8IHRvIGJlIGEgRGF0YVZpZXcgb2JqZWN0Iik7CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZpZXctPmxlbmd0aCgpKSk7CiB9CkBAIC0yNDEs
NyArMjQxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvR2V0
dGVyQnl0ZU9mZnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmEKIAogICAgIEpTRGF0YVZpZXcqIHZp
ZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CiAgICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxs
RnJhbWUsIHNjb3BlLCAiRGF0YVZpZXcucHJvdG90eXBlLmJ1ZmZlciBleHBlY3RzIHx0aGlzfCB0
byBiZSBhIERhdGFWaWV3IG9iamVjdCIpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRGF0YVZpZXcucHJvdG90eXBlLmJ1ZmZlciBleHBlY3Rz
IHx0aGlzfCB0byBiZSBhIERhdGFWaWV3IG9iamVjdCIpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcih2aWV3LT5ieXRlT2Zmc2V0KCkpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKaW5kZXggZmMwY2QzYWJkYTVkMGM2NzBk
NTQzYTg5MTIyNzkxYzE5MWJhNjAzNC4uNzk5NmE4ZjhhZTcwZWYwYzU0ZGZiYjI4ZDMwNmMxOWZi
YzVhYWYyMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRl
TWF0aC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5j
cHAKQEAgLTIzNyw3ICsyMzcsNyBAQCBkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVk
Q2hhcmFjdGVycyhWTSYgdm0sIGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpCiAgICAgcmV0dXJuIGxv
Y2FsVGltZU1TIC0gKG9mZnNldCAqIFdURjo6bXNQZXJNaW51dGUpOwogfQogCi1kb3VibGUgcGFy
c2VEYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBjb25zdCBTdHJpbmcmIGRhdGUpCitkb3Vi
bGUgcGFyc2VEYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgY29uc3Qg
U3RyaW5nJiBkYXRlKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIApAQCAtMjQ2LDcgKzI0Niw3IEBAIGRvdWJsZSBwYXJzZURhdGUoRXhlY1N0YXRlKiBleGVj
LCBWTSYgdm0sIGNvbnN0IFN0cmluZyYgZGF0ZSkKICAgICBhdXRvIGV4cGVjdGVkU3RyaW5nID0g
ZGF0ZS50cnlHZXRVdGY4KCk7CiAgICAgaWYgKCFleHBlY3RlZFN0cmluZykgewogICAgICAgICBp
ZiAoZXhwZWN0ZWRTdHJpbmcuZXJyb3IoKSA9PSBVVEY4Q29udmVyc2lvbkVycm9yOjpPdXRPZk1l
bW9yeSkKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7Cisg
ICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAg
ICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRhdGUtb2JqZWN0
cyBzZWN0aW9uIDIwLjMuMy4yIHN0YXRlcyB0aGF0OgogICAgICAgICAvLyAiVW5yZWNvZ25pemFi
bGUgU3RyaW5ncyBvciBkYXRlcyBjb250YWluaW5nIGlsbGVnYWwgZWxlbWVudCB2YWx1ZXMgaW4g
dGhlCiAgICAgICAgIC8vIGZvcm1hdCBTdHJpbmcgc2hhbGwgY2F1c2UgRGF0ZS5wYXJzZSB0byBy
ZXR1cm4gTmFOLiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0ZU1hdGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguaApp
bmRleCA2MDQxZDVlZWUwZWQwNjAyMDMxZDM5ZDM0OTFmNDVmZjJmM2NlMDZlLi4zM2UxMjExZDdi
MDc0NjcyYmViOTRkZTU5YTczNmI0YzNkN2E0MTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRlTWF0aC5oCkBAIC00OSwxMiArNDksMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIFZNOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZy
YW1lOwogCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1zVG9HcmVnb3JpYW5EYXRlVGltZShWTSYs
IGRvdWJsZSwgV1RGOjpUaW1lVHlwZSBvdXRwdXRUaW1lVHlwZSwgR3JlZ29yaWFuRGF0ZVRpbWUm
KTsKIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBncmVnb3JpYW5EYXRlVGltZVRvTVMoVk0mLCBj
b25zdCBHcmVnb3JpYW5EYXRlVGltZSYsIGRvdWJsZSwgV1RGOjpUaW1lVHlwZSBpbnB1dFRpbWVU
eXBlKTsKIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBnZXRVVENPZmZzZXQoVk0mKTsKIEpTX0VY
UE9SVF9QUklWQVRFIGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJz
KFZNJiwgY29uc3QgY2hhciogZGF0ZVN0cmluZyk7Ci1KU19FWFBPUlRfUFJJVkFURSBkb3VibGUg
cGFyc2VEYXRlKEV4ZWNTdGF0ZSosIFZNJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKK0pTX0VYUE9S
VF9QUklWQVRFIGRvdWJsZSBwYXJzZURhdGUoSlNHbG9iYWxPYmplY3QqLCBWTSYsIGNvbnN0IFdU
Rjo6U3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJheS5jcHAKaW5kZXggZWVlOWI1MjM5ODAyYjRlMGU1MDU5
NzM0NWRmN2QxY2U2ZDAzMDQzOC4uMjhjYjI4ZTc2OTQ3MTEyMzg1Yzc0ZjU1YjUzZTUwY2ZiMjZk
ZjEzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFy
cmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpeGVkQXJyYXku
Y3BwCkBAIC00MiwxMyArNDIsMTMgQEAgdm9pZCBKU0ZpeGVkQXJyYXk6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlc0hpZGRlbih0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09iamVjdC0+c2l6ZSgpKTsKIH0K
IAotdm9pZCBKU0ZpeGVkQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3ZvaWQgSlNGaXhlZEFycmF5Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERl
c3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoKGkgKyBvZmZzZXQpIDwg
bV9zaXplKQotICAgICAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQo
aSArIG9mZnNldCk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCAr
IGkpID0gZ2V0KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGVjLT5y
KGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjYWxs
RnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRml4ZWRBcnJh
eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmgKaW5kZXgg
NzhhZGRmNDc2MTJjNmIxMzc3MjVhNGNlZWYxMTIxN2M2MzQxZjRlOS4uY2Q3NmViM2QzZjIwMjI0
M2ZlYjdlNzk5ZTMzZTAxYjNmODE3NjZjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGaXhlZEFycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGaXhlZEFycmF5LmgKQEAgLTY0LDcgKzY0LDcgQEAgY2xhc3MgSlNGaXhlZEFycmF5
IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU0ZpeGVkQXJyYXkqIGNyZWF0ZUZyb21BcnJheShF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNBcnJheSogYXJyYXkpCisgICAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgSlNGaXhlZEFycmF5KiBjcmVhdGVGcm9tQXJyYXkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVk0mIHZtLCBKU0FycmF5KiBhcnJheSkKICAgICB7CiAgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC03Miw3ICs3Miw3IEBA
IGNsYXNzIEpTRml4ZWRBcnJheSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIEpTRml4ZWRBcnJheSogcmVz
dWx0ID0gSlNGaXhlZEFycmF5Ojp0cnlDcmVhdGUodm0sIHZtLmZpeGVkQXJyYXlTdHJ1Y3R1cmUu
Z2V0KCksIGxlbmd0aCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgewotICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHRocm93U2NvcGUpOworICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCkBAIC05OCw3ICs5OCw3IEBAIGNs
YXNzIEpTRml4ZWRBcnJheSBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICB9CiAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KGV4ZWMsIGkpOworICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleChnbG9iYWxPYmplY3Qs
IGkpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIC8vIFdoZW4g
d2Ugc2VlIGEgaG9sZSwgd2UgYXNzdW1lIHRoYXQgaXQncyBzYWZlIHRvIGFzc3VtZSB0aGUgZ2V0
IHdvdWxkIGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLgogICAgICAgICAgICAgICAgIC8vIFdlIG1h
eSBzdGlsbCBjYWxsIGludG8gdGhpcyBmdW5jdGlvbiB3aGVuICFnbG9iYWxPYmplY3QtPmlzQXJy
YXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSwKQEAgLTE0NSw3ICsxNDUs
NyBAQCBjbGFzcyBKU0ZpeGVkQXJyYXkgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAg
cmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KT4oc2l6ZW9mKEpTRml4ZWRBcnJheSkpOwogICAgIH0KIAotICAgIHZvaWQgY29weVRvQXJn
dW1lbnRzKEV4ZWNTdGF0ZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50
RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgc3RhdGljIHZv
aWQgZHVtcFRvU3RyZWFtKGNvbnN0IEpTQ2VsbCosIFByaW50U3RyZWFtJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggZWFhZGRkNTkyMGQw
ZDlmNzEyMTk3YWJkNzZmYzJmMmUyN2Q2NTRkOS4uNTFiZTczYTQ0ZTc5ZTZiZDc0ZGQ3N2VjYTkw
NTM4NTM5ZmE0ODg2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmEKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmpzQ2Fs
bGVlKCkpKTsKKyAgICByZXR1cm4gdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNy
ZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5qc0NhbGxl
ZSgpKSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBKU0Z1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5j
dGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNGdW5jdGlvbikgfTsKQEAgLTE1MywzOCArMTUzLDM4IEBAIEZ1bmN0aW9uUmFyZURhdGEq
IEpTRnVuY3Rpb246OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQogICAgIHJldHVybiBtX3JhcmVE
YXRhLmdldCgpOwogfQogCi1KU09iamVjdCogSlNGdW5jdGlvbjo6cHJvdG90eXBlRm9yQ29uc3Ry
dWN0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorSlNPYmplY3QqIEpTRnVuY3Rpb246OnBy
b3RvdHlwZUZvckNvbnN0cnVjdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiB7CiAgICAgLy8gVGhpcyBjb2RlIGFzc3VtZXMgZ2V0dGluZyB0aGUgcHJvdG90eXBlIGlz
IG5vdCBlZmZlY3RmdWwuIFRoYXQncyBvbmx5CiAgICAgLy8gdHJ1ZSB3aGVuIHdlIGNhbiB1c2Ug
dGhlIGFsbG9jYXRpb24gcHJvZmlsZS4KICAgICBBU1NFUlQoY2FuVXNlQWxsb2NhdGlvblByb2Zp
bGUoKSk7IAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUp
OworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gZ2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlKTsKICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsK
ICAgICBpZiAoTElLRUxZKHByb3RvdHlwZS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIGFz
T2JqZWN0KHByb3RvdHlwZSk7CiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
dGhpcy0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNHbG9iYWxPYmpl
Y3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKICAgICBpZiAoIWlzSG9zdE9yQnVpbHRpbkZ1bmN0
aW9uKCkpIHsKICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMt
Z2VuZXJhdG9yLWZ1bmN0aW9uLWRlZmluaXRpb25zLXJ1bnRpbWUtc2VtYW50aWNzLWV2YWx1YXRl
Ym9keQogICAgICAgICBpZiAoaXNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKGpzRXhlY3V0YWJs
ZSgpLT5wYXJzZU1vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nZW5l
cmF0b3JQcm90b3R5cGUoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzR2xvYmFsT2JqZWN0LT5n
ZW5lcmF0b3JQcm90b3R5cGUoKTsKIAogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWEyNjIvI3NlYy1hc3luY2dlbmVyYXRvci1kZWZpbml0aW9ucy1ldmFsdWF0ZWJvZHkKICAg
ICAgICAgaWYgKGlzQXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKGpzRXhlY3V0YWJsZSgp
LT5wYXJzZU1vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5hc3luY0dl
bmVyYXRvclByb3RvdHlwZSgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXNHbG9iYWxPYmplY3Qt
PmFzeW5jR2VuZXJhdG9yUHJvdG90eXBlKCk7CiAgICAgfQotICAgIHJldHVybiBnbG9iYWxPYmpl
Y3QtPm9iamVjdFByb3RvdHlwZSgpOworICAgIHJldHVybiB0aGlzR2xvYmFsT2JqZWN0LT5vYmpl
Y3RQcm90b3R5cGUoKTsKIH0KIAotRnVuY3Rpb25SYXJlRGF0YSogSlNGdW5jdGlvbjo6YWxsb2Nh
dGVBbmRJbml0aWFsaXplUmFyZURhdGEoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHkpCitGdW5jdGlvblJhcmVEYXRhKiBKU0Z1bmN0aW9uOjphbGxvY2F0ZUFuZEluaXRpYWxp
emVSYXJlRGF0YShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHkpCiB7CiAgICAgQVNTRVJUKCFtX3JhcmVEYXRhKTsKICAgICBBU1NFUlQoY2FuVXNlQWxs
b2NhdGlvblByb2ZpbGUoKSk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU09iamVj
dCogcHJvdG90eXBlID0gcHJvdG90eXBlRm9yQ29uc3RydWN0aW9uKHZtLCBleGVjKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IHBy
b3RvdHlwZUZvckNvbnN0cnVjdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICBGdW5jdGlvblJh
cmVEYXRhKiByYXJlRGF0YSA9IEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZSh2bSwgdGhpcyk7Ci0g
ICAgcmFyZURhdGEtPmluaXRpYWxpemVPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSh2bSwgZ2xvYmFs
T2JqZWN0KCksIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIHRoaXMpOworICAgIHJhcmVEYXRh
LT5pbml0aWFsaXplT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUodm0sIHRoaXMtPmdsb2JhbE9iamVj
dCgpLCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5LCB0aGlzKTsKIAogICAgIC8vIEEgREZHIGNv
bXBpbGF0aW9uIHRocmVhZCBtYXkgYmUgdHJ5aW5nIHRvIHJlYWQgdGhlIHJhcmUgZGF0YQogICAg
IC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgaXQgc2VlcyBpdCBwcm9wZXJseSBhbGxvY2F0ZWQK
QEAgLTE5NCwxMyArMTk0LDEzIEBAIEZ1bmN0aW9uUmFyZURhdGEqIEpTRnVuY3Rpb246OmFsbG9j
YXRlQW5kSW5pdGlhbGl6ZVJhcmVEYXRhKEV4ZWNTdGF0ZSogZXhlYywgc2l6CiAgICAgcmV0dXJu
IG1fcmFyZURhdGEuZ2V0KCk7CiB9CiAKLUZ1bmN0aW9uUmFyZURhdGEqIEpTRnVuY3Rpb246Omlu
aXRpYWxpemVSYXJlRGF0YShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSkK
K0Z1bmN0aW9uUmFyZURhdGEqIEpTRnVuY3Rpb246OmluaXRpYWxpemVSYXJlRGF0YShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCiB7CiAgICAgQVNT
RVJUKCEhbV9yYXJlRGF0YSk7CiAgICAgQVNTRVJUKGNhblVzZUFsbG9jYXRpb25Qcm9maWxlKCkp
OwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IHBy
b3RvdHlwZUZvckNvbnN0cnVjdGlvbih2bSwgZXhlYyk7Ci0gICAgbV9yYXJlRGF0YS0+aW5pdGlh
bGl6ZU9iamVjdEFsbG9jYXRpb25Qcm9maWxlKHZtLCBnbG9iYWxPYmplY3QoKSwgcHJvdG90eXBl
LCBpbmxpbmVDYXBhY2l0eSwgdGhpcyk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBwcm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24odm0s
IGdsb2JhbE9iamVjdCk7CisgICAgbV9yYXJlRGF0YS0+aW5pdGlhbGl6ZU9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKHZtLCB0aGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvdG90eXBlLCBpbmxpbmVDYXBh
Y2l0eSwgdGhpcyk7CiAgICAgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7CiB9CiAKQEAgLTI5Nywx
OSArMjk3LDE5IEBAIGNsYXNzIFJldHJpZXZlQXJndW1lbnRzRnVuY3RvciB7CiAgICAgbXV0YWJs
ZSBKU1ZhbHVlIG1fcmVzdWx0OwogfTsKIAotc3RhdGljIEpTVmFsdWUgcmV0cmlldmVBcmd1bWVu
dHMoRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbk9iaikKK3N0YXRpYyBKU1Zh
bHVlIHJldHJpZXZlQXJndW1lbnRzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBm
dW5jdGlvbk9iaikKIHsKICAgICBSZXRyaWV2ZUFyZ3VtZW50c0Z1bmN0b3IgZnVuY3RvcihmdW5j
dGlvbk9iaik7Ci0gICAgZXhlYy0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICBjYWxsRnJhbWUtPml0
ZXJhdGUoZnVuY3Rvcik7CiAgICAgcmV0dXJuIGZ1bmN0b3IucmVzdWx0KCk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNG
dW5jdGlvbjo6YXJndW1lbnRzR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTRnVuY3Rpb24q
IHRoaXNPYmogPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBBU1NFUlQoIXRoaXNPYmotPmlzSG9zdEZ1bmN0aW9uKCkpOwogCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXRyaWV2ZUFyZ3VtZW50cyhleGVjLCB0aGlzT2JqKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXRyaWV2ZUFyZ3VtZW50cyhnbG9iYWxPYmplY3QtPnZt
KCkudG9wQ2FsbEZyYW1lLCB0aGlzT2JqKSk7CiB9CiAKIGNsYXNzIFJldHJpZXZlQ2FsbGVyRnVu
Y3Rpb25GdW5jdG9yIHsKQEAgLTM1NSwyMSArMzU1LDIxIEBAIGNsYXNzIFJldHJpZXZlQ2FsbGVy
RnVuY3Rpb25GdW5jdG9yIHsKICAgICBtdXRhYmxlIEpTVmFsdWUgbV9yZXN1bHQ7CiB9OwogCi1z
dGF0aWMgSlNWYWx1ZSByZXRyaWV2ZUNhbGxlckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNG
dW5jdGlvbiogZnVuY3Rpb25PYmopCitzdGF0aWMgSlNWYWx1ZSByZXRyaWV2ZUNhbGxlckZ1bmN0
aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbk9iaikKIHsKICAg
ICBSZXRyaWV2ZUNhbGxlckZ1bmN0aW9uRnVuY3RvciBmdW5jdG9yKGZ1bmN0aW9uT2JqKTsKLSAg
ICBleGVjLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9y
KTsKICAgICByZXR1cm4gZnVuY3Rvci5yZXN1bHQoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNG
dW5jdGlvbjo6Y2FsbGVyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0Z1bmN0aW9uOjpjYWxsZXJH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSlNGdW5jdGlvbiogdGhpc09iaiA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIEFTU0VSVCghdGhpc09iai0+aXNI
b3N0RnVuY3Rpb24oKSk7Ci0gICAgSlNWYWx1ZSBjYWxsZXIgPSByZXRyaWV2ZUNhbGxlckZ1bmN0
aW9uKGV4ZWMsIHRoaXNPYmopOworICAgIEpTVmFsdWUgY2FsbGVyID0gcmV0cmlldmVDYWxsZXJG
dW5jdGlvbih2bS50b3BDYWxsRnJhbWUsIHRoaXNPYmopOwogCiAgICAgLy8gU2VlIEVTNS4xIDE1
LjMuNS40IC0gRnVuY3Rpb24uY2FsbGVyIG1heSBub3QgYmUgdXNlZCB0byByZXRyaWV2ZSBhIHN0
cmljdCBjYWxsZXIuCiAgICAgaWYgKCFjYWxsZXIuaXNPYmplY3QoKSB8fCAhYXNPYmplY3QoY2Fs
bGVyKS0+aW5oZXJpdHM8SlNGdW5jdGlvbj4odm0pKSB7CkBAIC0zODcsMTAgKzM4NywxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdQogICAgIHN3aXRjaCAocGFyc2VNb2RlKSB7CiAgICAgY2Fz
ZSBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvckJvZHlNb2RlOgogICAgIGNhc2UgU291cmNlUGFy
c2VNb2RlOjpBc3luY0dlbmVyYXRvckJvZHlNb2RlOgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiRnVuY3Rpb24uY2FsbGVyIHVzZWQg
dG8gcmV0cmlldmUgZ2VuZXJhdG9yIGJvZHkiX3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRnVuY3Rpb24uY2Fs
bGVyIHVzZWQgdG8gcmV0cmlldmUgZ2VuZXJhdG9yIGJvZHkiX3MpKTsKICAgICBjYXNlIFNvdXJj
ZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbkJvZHlNb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VN
b2RlOjpBc3luY0Fycm93RnVuY3Rpb25Cb2R5TW9kZToKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgIkZ1bmN0aW9uLmNhbGxlciB1c2Vk
IHRvIHJldHJpZXZlIGFzeW5jIGZ1bmN0aW9uIGJvZHkiX3MpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRnVuY3Rp
b24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgYXN5bmMgZnVuY3Rpb24gYm9keSJfcykpOwogICAg
IGNhc2UgU291cmNlUGFyc2VNb2RlOjpOb3JtYWxGdW5jdGlvbk1vZGU6CiAgICAgY2FzZSBTb3Vy
Y2VQYXJzZU1vZGU6OkdlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGU6CiAgICAgY2FzZSBTb3Vy
Y2VQYXJzZU1vZGU6OkdldHRlck1vZGU6CkBAIC00MDgsMTggKzQwOCwxOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdQogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JXcmFwcGVy
TWV0aG9kTW9kZToKICAgICAgICAgaWYgKCFmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCktPmlzU3Ry
aWN0TW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsZXIpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCAiRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNhbGxlciJfcykpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJGdW5jdGlvbi5jYWxsZXIgdXNlZCB0byByZXRyaWV2ZSBzdHJpY3QgY2FsbGVy
Il9zKSk7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJv
b2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQorYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KG9iamVjdCk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmlzSG9zdE9y
QnVpbHRpbkZ1bmN0aW9uKCkpIHsKLSAgICAgICAgdGhpc09iamVjdC0+cmVpZnlMYXp5UHJvcGVy
dHlGb3JIb3N0T3JCdWlsdGluSWZOZWVkZWQodm0sIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgdGhpc09iamVjdC0+cmVpZnlMYXp5UHJvcGVydHlG
b3JIb3N0T3JCdWlsdGluSWZOZWVkZWQodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUgJiYgdGhpc09iamVjdC0+anNFeGVj
dXRhYmxlKCktPmhhc1Byb3RvdHlwZVByb3BlcnR5KCkgJiYgIXRoaXNPYmplY3QtPmpzRXhlY3V0
YWJsZSgpLT5pc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpKSB7CkBAIC00MzgsMTEgKzQzOCwx
MSBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TgogICAgICAgICAgICAgICAgIC8vIFVubGlrZSBm
dW5jdGlvbiBpbnN0YW5jZXMsIHRoZSBvYmplY3QgdGhhdCBpcyB0aGUgdmFsdWUgb2YgdGhlIGEg
R2VuZXJhdG9yRnVuY3Rpb24ncyBwcm90b3R5cGUKICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0
eSBkb2VzIG5vdCBoYXZlIGEgY29uc3RydWN0b3IgcHJvcGVydHkgd2hvc2UgdmFsdWUgaXMgdGhl
IEdlbmVyYXRvckZ1bmN0aW9uIGluc3RhbmNlLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
dGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdlbmVyYXRvcmZ1bmN0aW9uLWluc3RhbmNlcy1w
cm90b3R5cGUKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2VuZXJhdG9yUHJvdG90eXBlKCkp
OworICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdlbmVyYXRvclByb3RvdHlwZSgp
KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBc3luY0dlbmVyYXRvcldyYXBwZXJQYXJzZU1v
ZGUodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPnBhcnNlTW9kZSgpKSkKLSAgICAgICAgICAg
ICAgICBwcm90b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+YXN5bmNHZW5lcmF0b3JQcm90b3R5cGUoKSk7CisgICAgICAgICAgICAg
ICAgcHJvdG90eXBlID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+YXN5bmNHZW5lcmF0b3JQcm90b3R5cGUoKSk7CiAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjKTsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgICAgIHByb3RvdHlwZS0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgdGhpc09iamVjdCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgICAgICAgICAg
fQogCkBAIC00NTUsMzMgKzQ1NSwzMyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TgogCiAgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpIHsKICAgICAg
ICAgaWYgKCF0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aGFzQ2FsbGVyQW5kQXJndW1lbnRz
UHJvcGVydGllcygpKQotICAgICAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xv
dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICAgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIAogICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1
c3RvbSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSwgYXJndW1l
bnRzR2V0dGVyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICB9IGVsc2UgaWYgKHByb3Bl
cnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZXIpIHsKICAgICAgICAgaWYgKCF0aGlz
T2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aGFzQ2FsbGVyQW5kQXJndW1lbnRzUHJvcGVydGllcygp
KQotICAgICAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICAgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiAKICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUsIGNhbGxlckdldHRlcik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHRoaXNPYmplY3QtPnJlaWZ5TGF6eVByb3BlcnR5SWZO
ZWVkZWQodm0sIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgdGhpc09iamVjdC0+cmVpZnlMYXp5
UHJvcGVydHlJZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogCi0gICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIEpTRnVu
Y3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3ZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBK
U0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgewogICAgICAgICBpZiAo
IXRoaXNPYmplY3QtPmlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSBwcm90b3R5cGUgaGFzIGJlZW4gcmVpZmllZC4KICAgICAgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpWTUlucXVpcnkpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBzbG90KTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBzbG90KTsKIAogICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpz
RXhlY3V0YWJsZSgpLT5oYXNDYWxsZXJBbmRBcmd1bWVudHNQcm9wZXJ0aWVzKCkpIHsKICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMp
OwpAQCAtNDk4LDI1ICs0OTgsMjUgQEAgdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPm5hbWUpOwogICAgICAg
ICB9CiAgICAgfQotICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIH0KIAotYm9vbCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogCiAgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVl
QWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgb3JkaW5hcnlTZXRTbG93KGV4ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2RlKCkpKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBvcmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKSk7CiAKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc0hvc3RPckJ1aWx0aW5GdW5j
dGlvbigpKSB7Ci0gICAgICAgIFByb3BlcnR5U3RhdHVzIHByb3BlcnR5VHlwZSA9IHRoaXNPYmpl
Y3QtPnJlaWZ5TGF6eVByb3BlcnR5Rm9ySG9zdE9yQnVpbHRpbklmTmVlZGVkKHZtLCBleGVjLCBw
cm9wZXJ0eU5hbWUpOworICAgICAgICBQcm9wZXJ0eVN0YXR1cyBwcm9wZXJ0eVR5cGUgPSB0aGlz
T2JqZWN0LT5yZWlmeUxhenlQcm9wZXJ0eUZvckhvc3RPckJ1aWx0aW5JZk5lZWRlZCh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoaXNMYXp5KHByb3BlcnR5VHlw
ZSkpCiAgICAgICAgICAgICBzbG90LmRpc2FibGVDYWNoaW5nKCk7Ci0gICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNl
OjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KSk7CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUpIHsKQEAgLTUyNCwzMSArNTI0LDMxIEBAIGJvb2wgSlNGdW5jdGlvbjo6cHV0KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
CiAgICAgICAgIC8vIE1ha2Ugc3VyZSBwcm90b3R5cGUgaGFzIGJlZW4gcmVpZmllZCwgc3VjaCB0
aGF0IGl0IGNhbiBvbmx5IGJlIG92ZXJ3cml0dGVuCiAgICAgICAgIC8vIGZvbGxvd2luZyB0aGUg
cnVsZXMgc2V0IG91dCBpbiBFQ01BLTI2MiA4LjEyLjkuCiAgICAgICAgIFByb3BlcnR5U2xvdCBn
ZXRTbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlu
cXVpcnkpOwotICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGdldFNsb3QpOworICAgICAg
ICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0U2xvdCk7CiAgICAgICAgIGlmICh0
aGlzT2JqZWN0LT5tX3JhcmVEYXRhKQogICAgICAgICAgICAgdGhpc09iamVjdC0+bV9yYXJlRGF0
YS0+Y2xlYXIoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0eSBvZiBhIGZ1bmN0aW9uIik7Ci0g
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KSk7CiAgICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgfHwgcHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFt
ZXMtPmNhbGxlcikgewogICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5o
YXNDYWxsZXJBbmRBcmd1bWVudHNQcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJh
c2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpKTsKIAogICAgICAgICBzbG90LmRpc2FibGVDYWNoaW5nKCk7Ci0gICAgICAgIHJldHVybiB0
eXBlRXJyb3IoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAg
ICAgfQotICAgIFByb3BlcnR5U3RhdHVzIHByb3BlcnR5VHlwZSA9IHRoaXNPYmplY3QtPnJlaWZ5
TGF6eVByb3BlcnR5SWZOZWVkZWQodm0sIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgUHJvcGVy
dHlTdGF0dXMgcHJvcGVydHlUeXBlID0gdGhpc09iamVjdC0+cmVpZnlMYXp5UHJvcGVydHlJZk5l
ZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChpc0xhenkocHJv
cGVydHlUeXBlKSkKICAgICAgICAgc2xvdC5kaXNhYmxlQ2FjaGluZygpOwotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1
dCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsK
IH0KIAotYm9vbCBKU0Z1bmN0aW9uOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNGdW5jdGlvbjo6
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTRnVuY3Rpb24qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAgIGlmICh0aGlzT2JqZWN0LT5p
c0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpKQotICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeUxhenlQ
cm9wZXJ0eUZvckhvc3RPckJ1aWx0aW5JZk5lZWRlZCh2bSwgZXhlYywgcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgdGhpc09iamVjdC0+cmVpZnlMYXp5UHJvcGVydHlGb3JIb3N0T3JCdWlsdGluSWZO
ZWVkZWQodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICBlbHNlIGlmICh2bS5k
ZWxldGVQcm9wZXJ0eU1vZGUoKSAhPSBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25m
aWd1cmFibGUpIHsKICAgICAgICAgLy8gRm9yIG5vbi1ob3N0IGZ1bmN0aW9ucywgZG9uJ3QgbGV0
IHRoZXNlIHByb3BlcnRpZXMgYnkgZGVsZXRlZCAtIGV4Y2VwdCBieSBEZWZpbmVPd25Qcm9wZXJ0
eS4KICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdGhpc09iamVjdC0+
anNFeGVjdXRhYmxlKCk7CkBAIC01NTksNTkgKzU1OSw1OSBAQCBib29sIEpTRnVuY3Rpb246OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcAogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSAmJiAhZXhlY3V0YWJsZS0+aXNBcnJvd0Z1bmN0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgdGhpc09iamVjdC0+cmVpZnlMYXp5UHJvcGVydHlJZk5lZWRl
ZCh2bSwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgdGhpc09iamVjdC0+cmVpZnlMYXp5
UHJvcGVydHlJZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgIH0K
ICAgICAKLSAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVj
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTRnVuY3Rpb246OmRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBib29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU0Z1bmN0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4ob2JqZWN0KTsKICAgICBpZiAodGhpc09iamVjdC0+aXNIb3N0T3JCdWlsdGluRnVu
Y3Rpb24oKSkgewotICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeUxhenlQcm9wZXJ0eUZvckhvc3RP
ckJ1aWx0aW5JZk5lZWRlZCh2bSwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pKTsKKyAgICAgICAgdGhp
c09iamVjdC0+cmVpZnlMYXp5UHJvcGVydHlGb3JIb3N0T3JCdWlsdGluSWZOZWVkZWQodm0sIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbikpOwogICAgIH0KIAogICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKSB7CiAgICAgICAgIC8v
IE1ha2Ugc3VyZSBwcm90b3R5cGUgaGFzIGJlZW4gcmVpZmllZCwgc3VjaCB0aGF0IGl0IGNhbiBv
bmx5IGJlIG92ZXJ3cml0dGVuCiAgICAgICAgIC8vIGZvbGxvd2luZyB0aGUgcnVsZXMgc2V0IG91
dCBpbiBFQ01BLTI2MiA4LjEyLjkuCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmpl
Y3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwotICAgICAg
ICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRh
KQogICAgICAgICAgICAgdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+Y2xlYXIoIlN0b3JlIHRvIHBy
b3RvdHlwZSBwcm9wZXJ0eSBvZiBhIGZ1bmN0aW9uIik7Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKSk7CisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pKTsKICAgICB9CiAK
ICAgICBib29sIHZhbHVlQ2hlY2s7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5hcmd1bWVudHMpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5qc0V4ZWN1dGFi
bGUoKS0+aGFzQ2FsbGVyQW5kQXJndW1lbnRzUHJvcGVydGllcygpKQotICAgICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRp
b24pKTsKIAotICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1l
VmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCByZXRyaWV2ZUFyZ3VtZW50cyhleGVjLCB0
aGlzT2JqZWN0KSk7CisgICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8
IHNhbWVWYWx1ZShnbG9iYWxPYmplY3QsIGRlc2NyaXB0b3IudmFsdWUoKSwgcmV0cmlldmVBcmd1
bWVudHModm0udG9wQ2FsbEZyYW1lLCB0aGlzT2JqZWN0KSk7CiAgICAgfSBlbHNlIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKSB7CiAgICAgICAgIGlmICghdGhp
c09iamVjdC0+anNFeGVjdXRhYmxlKCktPmhhc0NhbGxlckFuZEFyZ3VtZW50c1Byb3BlcnRpZXMo
KSkKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6ZGVmaW5lT3du
UHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhj
ZXB0aW9uKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRl
ZmluZU93blByb3BlcnR5KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIHRocm93RXhjZXB0aW9uKSk7CiAKLSAgICAgICAgdmFsdWVDaGVjayA9ICFkZXNjcmlw
dG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgcmV0cmll
dmVDYWxsZXJGdW5jdGlvbihleGVjLCB0aGlzT2JqZWN0KSk7CisgICAgICAgIHZhbHVlQ2hlY2sg
PSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShnbG9iYWxPYmplY3QsIGRlc2NyaXB0
b3IudmFsdWUoKSwgcmV0cmlldmVDYWxsZXJGdW5jdGlvbih2bS50b3BDYWxsRnJhbWUsIHRoaXNP
YmplY3QpKTsKICAgICB9IGVsc2UgewotICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeUxhenlQcm9w
ZXJ0eUlmTmVlZGVkKHZtLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbikpOworICAgICAgICB0aGlzT2Jq
ZWN0LT5yZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6ZGVmaW5lT3du
UHJvcGVydHkob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
dGhyb3dFeGNlcHRpb24pKTsKICAgICB9CiAgICAgIAogICAgIGlmIChkZXNjcmlwdG9yLmNvbmZp
Z3VyYWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICBy
ZXR1cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1cmFi
bGVQcm9wZXJ0eUNoYW5nZUNvbmZpZ3VyYWJpbGl0eUVycm9yKTsKKyAgICAgICAgcmV0dXJuIHR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1cmFi
bGVQcm9wZXJ0eUNoYW5nZUNvbmZpZ3VyYWJpbGl0eUVycm9yKTsKICAgICBpZiAoZGVzY3JpcHRv
ci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQotICAgICAg
ICByZXR1cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1
cmFibGVQcm9wZXJ0eUNoYW5nZUVudW1lcmFiaWxpdHlFcnJvcik7CisgICAgICAgIHJldHVybiB0
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJh
YmxlUHJvcGVydHlDaGFuZ2VFbnVtZXJhYmlsaXR5RXJyb3IpOwogICAgIGlmIChkZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywg
c2NvcGUsIHRocm93RXhjZXB0aW9uLCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlQWNjZXNz
TWVjaGFuaXNtRXJyb3IpOworICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIHRocm93RXhjZXB0aW9uLCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlQWNjZXNz
TWVjaGFuaXNtRXJyb3IpOwogICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlUHJlc2VudCgpICYm
IGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBz
Y29wZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VXcml0YWJp
bGl0eUVycm9yKTsKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZVdyaXRhYmlsaXR5
RXJyb3IpOwogICAgIGlmICghdmFsdWVDaGVjaykKLSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihl
eGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFJlYWRvbmx5UHJvcGVydHlDaGFuZ2VFcnJvcik7
CisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdGhyb3dFeGNl
cHRpb24sIFJlYWRvbmx5UHJvcGVydHlDaGFuZ2VFcnJvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTY3MCw5ICs2NzAsOSBAQCBTdHJpbmcgZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKFZN
JiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAot
dm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQordm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBUaGUgIm5hbWUiIHByb3BlcnR5IG1heSBo
YXZlIGJlZW4gYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgcGFydCBvZiBhIHByb3BlcnR5IGxpc3Qg
aW4gYW4KQEAgLTY5MSwxMiArNjkxLDEyIEBAIHZvaWQgSlNGdW5jdGlvbjo6c2V0RnVuY3Rpb25O
YW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbmFtZSA9IG1ha2VTdHJpbmcoJ1snLCBTdHJpbmcoJnVpZCksICddJyk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgSlNTdHJpbmcqIGpzU3RyID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Cisg
ICAgICAgIEpTU3RyaW5nKiBqc1N0ciA9IHZhbHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIG5hbWUg
PSBqc1N0ci0+dmFsdWUoZXhlYyk7CisgICAgICAgIG5hbWUgPSBqc1N0ci0+dmFsdWUoZ2xvYmFs
T2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAg
ICB9Ci0gICAgcmVpZnlOYW1lKHZtLCBleGVjLCBuYW1lKTsKKyAgICByZWlmeU5hbWUodm0sIGds
b2JhbE9iamVjdCwgbmFtZSk7CiB9CiAKIHZvaWQgSlNGdW5jdGlvbjo6cmVpZnlMZW5ndGgoVk0m
IHZtKQpAQCAtNzEyLDcgKzcxMiw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6cmVpZnlMZW5ndGgoVk0m
IHZtKQogICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgaW5pdGlhbFZhbHVlLCBpbml0aWFs
QXR0cmlidXRlcyk7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6cmVpZnlOYW1lKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjKQordm9pZCBKU0Z1bmN0aW9uOjpyZWlmeU5hbWUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIGNvbnN0IElkZW50aWZpZXImIGVjbWFOYW1l
ID0ganNFeGVjdXRhYmxlKCktPmVjbWFOYW1lKCk7CiAgICAgU3RyaW5nIG5hbWU7CkBAIC03MjMs
MTAgKzcyMywxMCBAQCB2b2lkIEpTRnVuY3Rpb246OnJlaWZ5TmFtZShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYykKICAgICAgICAgbmFtZSA9IHZtLnByb3BlcnR5TmFtZXMtPmRlZmF1bHRLZXl3b3Jk
LnN0cmluZygpOwogICAgIGVsc2UKICAgICAgICAgbmFtZSA9IGVjbWFOYW1lLnN0cmluZygpOwot
ICAgIHJlaWZ5TmFtZSh2bSwgZXhlYywgbmFtZSk7CisgICAgcmVpZnlOYW1lKHZtLCBnbG9iYWxP
YmplY3QsIG5hbWUpOwogfQogCi12b2lkIEpTRnVuY3Rpb246OnJlaWZ5TmFtZShWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgU3RyaW5nIG5hbWUpCit2b2lkIEpTRnVuY3Rpb246OnJlaWZ5TmFtZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cmluZyBuYW1lKQogewogICAg
IEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEodm0pOwogCkBAIC03
MzUsNyArNzM1LDcgQEAgdm9pZCBKU0Z1bmN0aW9uOjpyZWlmeU5hbWUoVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cmluZyBuYW1lKQogICAgIHVuc2lnbmVkIGluaXRpYWxBdHRyaWJ1dGVzID0g
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
OwogICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BJRCA9IHZtLnByb3BlcnR5TmFtZXMtPm5hbWU7
CiAKLSAgICBpZiAoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5uZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcygpKSB7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+bmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MoKSkgewogICAgICAgICBhdXRvIGlsbGVnYWxDaGFyTWF0Y2hlciA9IFtdIChVQ2hhciBjaCkg
LT4gYm9vbCB7CiAgICAgICAgICAgICByZXR1cm4gY2ggPT0gJyAnIHx8IGNoID09ICd8JzsKICAg
ICAgICAgfTsKQEAgLTc1MiwzMSArNzUyLDMxIEBAIHZvaWQgSlNGdW5jdGlvbjo6cmVpZnlOYW1l
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJpbmcgbmFtZSkKICAgICBwdXREaXJlY3Qodm0s
IHByb3BJRCwganNTdHJpbmcodm0sIG5hbWUpLCBpbml0aWFsQXR0cmlidXRlcyk7CiB9CiAKLUpT
RnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5TGF6eVByb3BlcnR5SWZO
ZWVkZWQoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
CitKU0Z1bmN0aW9uOjpQcm9wZXJ0eVN0YXR1cyBKU0Z1bmN0aW9uOjpyZWlmeUxhenlQcm9wZXJ0
eUlmTmVlZGVkKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBpZiAoaXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkK
ICAgICAgICAgcmV0dXJuIFByb3BlcnR5U3RhdHVzOjpFYWdlcjsKLSAgICBQcm9wZXJ0eVN0YXR1
cyBsYXp5TGVuZ3RoID0gcmVpZnlMYXp5TGVuZ3RoSWZOZWVkZWQodm0sIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CisgICAgUHJvcGVydHlTdGF0dXMgbGF6eUxlbmd0aCA9IHJlaWZ5TGF6eUxlbmd0aElm
TmVlZGVkKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKGlzTGF6eShs
YXp5TGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGxhenlMZW5ndGg7Ci0gICAgUHJvcGVydHlTdGF0
dXMgbGF6eU5hbWUgPSByZWlmeUxhenlOYW1lSWZOZWVkZWQodm0sIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CisgICAgUHJvcGVydHlTdGF0dXMgbGF6eU5hbWUgPSByZWlmeUxhenlOYW1lSWZOZWVkZWQo
dm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoaXNMYXp5KGxhenlOYW1l
KSkKICAgICAgICAgcmV0dXJuIGxhenlOYW1lOwogICAgIHJldHVybiBQcm9wZXJ0eVN0YXR1czo6
RWFnZXI7CiB9CiAKLUpTRnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5
TGF6eVByb3BlcnR5Rm9ySG9zdE9yQnVpbHRpbklmTmVlZGVkKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorSlNGdW5jdGlvbjo6UHJvcGVydHlTdGF0
dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5UHJvcGVydHlGb3JIb3N0T3JCdWlsdGluSWZOZWVkZWQo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQogewogICAgIEFTU0VSVChpc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpKTsKICAgICBp
ZiAoaXNCdWlsdGluRnVuY3Rpb24oKSkgewotICAgICAgICBQcm9wZXJ0eVN0YXR1cyBsYXp5TGVu
Z3RoID0gcmVpZnlMYXp5TGVuZ3RoSWZOZWVkZWQodm0sIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIFByb3BlcnR5U3RhdHVzIGxhenlMZW5ndGggPSByZWlmeUxhenlMZW5ndGhJZk5lZWRl
ZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoaXNMYXp5KGxh
enlMZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIGxhenlMZW5ndGg7CiAgICAgfQotICAgIHJl
dHVybiByZWlmeUxhenlCb3VuZE5hbWVJZk5lZWRlZCh2bSwgZXhlYywgcHJvcGVydHlOYW1lKTsK
KyAgICByZXR1cm4gcmVpZnlMYXp5Qm91bmROYW1lSWZOZWVkZWQodm0sIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lKTsKIH0KIAotSlNGdW5jdGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlv
bjo6cmVpZnlMYXp5TGVuZ3RoSWZOZWVkZWQoVk0mIHZtLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQorSlNGdW5jdGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6
cmVpZnlMYXp5TGVuZ3RoSWZOZWVkZWQoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpIHsKICAgICAgICAgaWYgKCFoYXNSZWlmaWVkTGVuZ3RoKCkpIHsKQEAg
LTc4OCwxMSArNzg4LDExIEBAIEpTRnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246
OnJlaWZ5TGF6eUxlbmd0aElmTmVlZGVkKFZNJiB2bSwgRXhlY1N0YXRlCiAgICAgcmV0dXJuIFBy
b3BlcnR5U3RhdHVzOjpFYWdlcjsKIH0KIAotSlNGdW5jdGlvbjo6UHJvcGVydHlTdGF0dXMgSlNG
dW5jdGlvbjo6cmVpZnlMYXp5TmFtZUlmTmVlZGVkKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorSlNGdW5jdGlvbjo6UHJvcGVydHlTdGF0dXMgSlNG
dW5jdGlvbjo6cmVpZnlMYXp5TmFtZUlmTmVlZGVkKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBpZiAocHJvcGVy
dHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUpIHsKICAgICAgICAgaWYgKCFoYXNSZWlm
aWVkTmFtZSgpKSB7Ci0gICAgICAgICAgICByZWlmeU5hbWUodm0sIGV4ZWMpOworICAgICAgICAg
ICAgcmVpZnlOYW1lKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIFByb3Bl
cnR5U3RhdHVzOjpSZWlmaWVkOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBQcm9wZXJ0eVN0
YXR1czo6TGF6eTsKQEAgLTgwMCw3ICs4MDAsNyBAQCBKU0Z1bmN0aW9uOjpQcm9wZXJ0eVN0YXR1
cyBKU0Z1bmN0aW9uOjpyZWlmeUxhenlOYW1lSWZOZWVkZWQoVk0mIHZtLCBFeGVjU3RhdGUqCiAg
ICAgcmV0dXJuIFByb3BlcnR5U3RhdHVzOjpFYWdlcjsKIH0KIAotSlNGdW5jdGlvbjo6UHJvcGVy
dHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5Qm91bmROYW1lSWZOZWVkZWQoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU0Z1bmN0aW9uOjpQ
cm9wZXJ0eVN0YXR1cyBKU0Z1bmN0aW9uOjpyZWlmeUxhenlCb3VuZE5hbWVJZk5lZWRlZChWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCiB7CiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZUlkZW50ID0gdm0ucHJvcGVydHlOYW1l
cy0+bmFtZTsKICAgICBpZiAocHJvcGVydHlOYW1lICE9IG5hbWVJZGVudCkKQEAgLTgxMCw3ICs4
MTAsNyBAQCBKU0Z1bmN0aW9uOjpQcm9wZXJ0eVN0YXR1cyBKU0Z1bmN0aW9uOjpyZWlmeUxhenlC
b3VuZE5hbWVJZk5lZWRlZChWTSYgdm0sIEV4ZWNTdAogICAgICAgICByZXR1cm4gUHJvcGVydHlT
dGF0dXM6Okxhenk7CiAKICAgICBpZiAoaXNCdWlsdGluRnVuY3Rpb24oKSkKLSAgICAgICAgcmVp
ZnlOYW1lKHZtLCBleGVjKTsKKyAgICAgICAgcmVpZnlOYW1lKHZtLCBnbG9iYWxPYmplY3QpOwog
ICAgIGVsc2UgaWYgKHRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKSB7CiAgICAg
ICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEodm0pOwogICAg
ICAgICBTdHJpbmcgbmFtZSA9IG1ha2VTdHJpbmcoImJvdW5kICIsIHN0YXRpY19jYXN0PE5hdGl2
ZUV4ZWN1dGFibGUqPihtX2V4ZWN1dGFibGUuZ2V0KCkpLT5uYW1lKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCmluZGV4IDNmZWY5MmQ0NDVlYzRjMDdlNGYz
MTI2MGNjODNjZDNkMmQ0ZmU0NmYuLmY3NmU2N2E4MmQ3ODE1NThkMGQ3MTk5YzY2ZTY4OTE5NTA5
ZTBjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKQEAg
LTEzNiw3ICsxMzYsNyBAQCBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTQ2FsbGVlIHsKICAg
ICAgICAgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7CiAgICAgfQogCi0gICAgRnVuY3Rpb25SYXJl
RGF0YSogZW5zdXJlUmFyZURhdGFBbmRBbGxvY2F0aW9uUHJvZmlsZShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSk7CisgICAgRnVuY3Rpb25SYXJlRGF0YSogZW5zdXJlUmFyZURh
dGFBbmRBbGxvY2F0aW9uUHJvZmlsZShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIGlubGluZUNh
cGFjaXR5KTsKIAogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhKCkKICAgICB7CkBAIC0x
NTcsMTAgKzE1NywxMCBAQCBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTQ2FsbGVlIHsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkgY29uc3Q7
CiAgICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0OwogCi0gICAgdm9p
ZCBzZXRGdW5jdGlvbk5hbWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBuYW1lKTsKKyAgICB2b2lkIHNl
dEZ1bmN0aW9uTmFtZShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbmFtZSk7CiAKICAgICAvLyBS
ZXR1cm5zIHRoZSBfX3Byb3RvX18gZm9yIHRoZSB8dGhpc3wgdmFsdWUgaWYgdGhpcyBKU0Z1bmN0
aW9uIHdlcmUgdG8gYmUgY29uc3RydWN0ZWQuCi0gICAgSlNPYmplY3QqIHByb3RvdHlwZUZvckNv
bnN0cnVjdGlvbihWTSYsIEV4ZWNTdGF0ZSopOworICAgIEpTT2JqZWN0KiBwcm90b3R5cGVGb3JD
b25zdHJ1Y3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwogCiAgICAgYm9vbCBjYW5Vc2VBbGxv
Y2F0aW9uUHJvZmlsZSgpOwogICAgIGJvb2wgY2FuVXNlQWxsb2NhdGlvblByb2ZpbGVOb25Jbmxp
bmUoKTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTQ2Fs
bGVlIHsKICAgICAgICAgTGF6eSwKICAgICAgICAgUmVpZmllZCwKICAgICB9OwotICAgIFByb3Bl
cnR5U3RhdHVzIHJlaWZ5TGF6eVByb3BlcnR5SWZOZWVkZWQoVk0mLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpOworICAgIFByb3BlcnR5U3RhdHVzIHJlaWZ5TGF6eVByb3BlcnR5SWZOZWVkZWQo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSk7CiAKIHByb3RlY3RlZDoKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU0Z1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKQEAgLTE3OSwxMyArMTc5LDEzIEBAIGNsYXNzIEpTRnVuY3Rpb24gOiBwdWJsaWMgSlND
YWxsZWUgewogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwg
aW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CiAKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRW51bWVyYXRpb25Nb2RlKCkpOwotICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEVudW1lcmF0aW9uTW9kZSgpKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKIAotICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dChK
U0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CiAKLSAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKIAogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApAQCAtMTk5LDIyICsxOTks
MjIgQEAgY2xhc3MgSlNGdW5jdGlvbiA6IHB1YmxpYyBKU0NhbGxlZSB7CiAgICAgfQogCiAgICAg
RnVuY3Rpb25SYXJlRGF0YSogYWxsb2NhdGVSYXJlRGF0YShWTSYpOwotICAgIEZ1bmN0aW9uUmFy
ZURhdGEqIGFsbG9jYXRlQW5kSW5pdGlhbGl6ZVJhcmVEYXRhKEV4ZWNTdGF0ZSosIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSk7Ci0gICAgRnVuY3Rpb25SYXJlRGF0YSogaW5pdGlhbGl6ZVJhcmVEYXRh
KEV4ZWNTdGF0ZSosIHNpemVfdCBpbmxpbmVDYXBhY2l0eSk7CisgICAgRnVuY3Rpb25SYXJlRGF0
YSogYWxsb2NhdGVBbmRJbml0aWFsaXplUmFyZURhdGEoSlNHbG9iYWxPYmplY3QqLCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHkpOworICAgIEZ1bmN0aW9uUmFyZURhdGEqIGluaXRpYWxpemVSYXJlRGF0
YShKU0dsb2JhbE9iamVjdCosIHNpemVfdCBpbmxpbmVDYXBhY2l0eSk7CiAKICAgICBib29sIGhh
c1JlaWZpZWRMZW5ndGgoKSBjb25zdDsKICAgICBib29sIGhhc1JlaWZpZWROYW1lKCkgY29uc3Q7
CiAgICAgdm9pZCByZWlmeUxlbmd0aChWTSYpOwotICAgIHZvaWQgcmVpZnlOYW1lKFZNJiwgRXhl
Y1N0YXRlKik7Ci0gICAgdm9pZCByZWlmeU5hbWUoVk0mLCBFeGVjU3RhdGUqLCBTdHJpbmcgbmFt
ZSk7CisgICAgdm9pZCByZWlmeU5hbWUoVk0mLCBKU0dsb2JhbE9iamVjdCopOworICAgIHZvaWQg
cmVpZnlOYW1lKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJpbmcgbmFtZSk7CiAKICAgICBzdGF0
aWMgYm9vbCBpc0xhenkoUHJvcGVydHlTdGF0dXMgcHJvcGVydHkpIHsgcmV0dXJuIHByb3BlcnR5
ID09IFByb3BlcnR5U3RhdHVzOjpMYXp5IHx8IHByb3BlcnR5ID09IFByb3BlcnR5U3RhdHVzOjpS
ZWlmaWVkOyB9CiAgICAgc3RhdGljIGJvb2wgaXNSZWlmaWVkKFByb3BlcnR5U3RhdHVzIHByb3Bl
cnR5KSB7IHJldHVybiBwcm9wZXJ0eSA9PSBQcm9wZXJ0eVN0YXR1czo6UmVpZmllZDsgfQogCi0g
ICAgUHJvcGVydHlTdGF0dXMgcmVpZnlMYXp5UHJvcGVydHlGb3JIb3N0T3JCdWlsdGluSWZOZWVk
ZWQoVk0mLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIFByb3BlcnR5U3RhdHVzIHJl
aWZ5TGF6eUxlbmd0aElmTmVlZGVkKFZNJiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAg
ICBQcm9wZXJ0eVN0YXR1cyByZWlmeUxhenlOYW1lSWZOZWVkZWQoVk0mLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUpOwotICAgIFByb3BlcnR5U3RhdHVzIHJlaWZ5TGF6eUJvdW5kTmFtZUlmTmVl
ZGVkKFZNJiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICBQcm9wZXJ0eVN0YXR1cyBy
ZWlmeUxhenlQcm9wZXJ0eUZvckhvc3RPckJ1aWx0aW5JZk5lZWRlZChWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAgICBQcm9wZXJ0eVN0YXR1cyByZWlmeUxhenlMZW5ndGhJ
Zk5lZWRlZChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAgICBQcm9wZXJ0
eVN0YXR1cyByZWlmeUxhenlOYW1lSWZOZWVkZWQoVk0mLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSk7CisgICAgUHJvcGVydHlTdGF0dXMgcmVpZnlMYXp5Qm91bmROYW1lSWZOZWVkZWQo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSk7CiAKICNpZiBBU1NFUlRfRElTQUJM
RUQKICAgICB2b2lkIGFzc2VydFR5cGVJbmZvRmxhZ0ludmFyaWFudHMoKSB7IH0KQEAgLTIyNCwx
MCArMjI0LDggQEAgY2xhc3MgSlNGdW5jdGlvbiA6IHB1YmxpYyBKU0NhbGxlZSB7CiAKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVy
dHlOYW1lKTsKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY2FsbGVyR2V0dGVyKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSk7Ci0gICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGFy
Z3VtZW50c0dldHRlcihKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpOworICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjYWxsZXJHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIFdyaXRlQmFycmllcjxF
eGVjdXRhYmxlQmFzZT4gbV9leGVjdXRhYmxlOwogICAgIFdyaXRlQmFycmllcjxGdW5jdGlvblJh
cmVEYXRhPiBtX3JhcmVEYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb25JbmxpbmVzLmgKaW5kZXggM2UwNDc1Yzg0NDg2MmRmOTYyZjVkNzU0N2VlMTIx
ZGZjMjRiYzA4Mi4uNjUxNGRkMjFhN2M0MTliMjkyZTcyMTBkYzhkMTk5MzhjNmRiNWY2MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5o
CkBAIC0xMzgsMTMgKzEzOCwxMyBAQCBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjpjYW5Vc2VBbGxv
Y2F0aW9uUHJvZmlsZSgpCiAgICAgcmV0dXJuIGpzRXhlY3V0YWJsZSgpLT5oYXNQcm90b3R5cGVQ
cm9wZXJ0eSgpOwogfQogCi1pbmxpbmUgRnVuY3Rpb25SYXJlRGF0YSogSlNGdW5jdGlvbjo6ZW5z
dXJlUmFyZURhdGFBbmRBbGxvY2F0aW9uUHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGlubGluZUNhcGFjaXR5KQoraW5saW5lIEZ1bmN0aW9uUmFyZURhdGEqIEpTRnVuY3Rpb246OmVu
c3VyZVJhcmVEYXRhQW5kQWxsb2NhdGlvblByb2ZpbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiB7CiAgICAgQVNTRVJUKGNhblVzZUFsbG9j
YXRpb25Qcm9maWxlKCkpOwogICAgIGlmIChVTkxJS0VMWSghbV9yYXJlRGF0YSkpCi0gICAgICAg
IHJldHVybiBhbGxvY2F0ZUFuZEluaXRpYWxpemVSYXJlRGF0YShleGVjLCBpbmxpbmVDYXBhY2l0
eSk7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZUFuZEluaXRpYWxpemVSYXJlRGF0YShnbG9iYWxP
YmplY3QsIGlubGluZUNhcGFjaXR5KTsKICAgICBpZiAoVU5MSUtFTFkoIW1fcmFyZURhdGEtPmlz
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbml0aWFsaXplZCgpKSkKLSAgICAgICAgcmV0dXJuIGlu
aXRpYWxpemVSYXJlRGF0YShleGVjLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHJldHVybiBp
bml0aWFsaXplUmFyZURhdGEoZ2xvYmFsT2JqZWN0LCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgcmV0
dXJuIG1fcmFyZURhdGEuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCmluZGV4IDllNDFjMzQxYjFm
MGU3ODM2MmEyNDUxYmZmMDI1ZDU0ZDEzNDM0YWMuLmQwNjZhZWM1MTkzM2NmN2FjYzQzMzM2M2Zl
ZmM0NjE1OGFhNGQyMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaApAQCAtMTA0LDEwICsxMDQsMTAgQEAgY2xh
c3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgZmluYWwgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZp
ZXcgewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4
dCYpOwogICAgIAogcHVibGljOgotICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
Y3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3Rh
dGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVXaXRoRmFzdFZlY3RvcihFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqIHZlY3Rvcik7Ci0gICAgc3Rh
dGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVmUHRyPEFycmF5
QnVmZmVyPiYmLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0
YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqIGNyZWF0ZVdpdGhGYXN0VmVjdG9yKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
dW5zaWduZWQgbGVuZ3RoLCB2b2lkKiB2ZWN0b3IpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogY3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWZQdHI8QXJyYXlCdWZmZXI+
JiYsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3RhdGljIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBSZWZQdHI8dHlw
ZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+JiYgaW1wbCk7CiAgICAgc3RhdGljIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiBjcmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBSZWZQdHI8
dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+JiYgaW1wbCk7CiAgICAgCkBAIC0xNjcsMTYgKzE2
NywxNiBAQCBjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBmaW5hbCA6IHB1YmxpYyBKU0Fy
cmF5QnVmZmVyVmlldyB7CiAgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoaSwg
dG9OYXRpdmVGcm9tVmFsdWU8QWRhcHRvcj4odmFsdWUpKTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBzZXRJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUganNWYWx1ZSkK
KyAgICBib29sIHNldEluZGV4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVk
IGksIEpTVmFsdWUganNWYWx1ZSkKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgICAgICB0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlIHZhbHVlID0gdG9OYXRpdmVGcm9tVmFsdWU8QWRhcHRvcj4oZXhlYywganNWYWx1ZSk7
CisgICAgICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1
ZTxBZGFwdG9yPihnbG9iYWxPYmplY3QsIGpzVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkgewotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNC
ZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVz
c2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTg3LDcg
KzE4Nyw3IEBAIGNsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGZpbmFsIDogcHVibGljIEpT
QXJyYXlCdWZmZXJWaWV3IHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgc3Rh
dGljIEVsZW1lbnRUeXBlIHRvQWRhcHRvck5hdGl2ZUZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUganNWYWx1ZSkgeyByZXR1cm4gdG9OYXRpdmVGcm9tVmFsdWU8QWRhcHRvcj4oZXhl
YywganNWYWx1ZSk7IH0KKyAgICBzdGF0aWMgRWxlbWVudFR5cGUgdG9BZGFwdG9yTmF0aXZlRnJv
bVZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUganNWYWx1ZSkgeyBy
ZXR1cm4gdG9OYXRpdmVGcm9tVmFsdWU8QWRhcHRvcj4oZ2xvYmFsT2JqZWN0LCBqc1ZhbHVlKTsg
fQogCiAgICAgc3RhdGljIE9wdGlvbmFsPEVsZW1lbnRUeXBlPiB0b0FkYXB0b3JOYXRpdmVGcm9t
VmFsdWVXaXRob3V0Q29lcmNpb24oSlNWYWx1ZSBqc1ZhbHVlKSB7IHJldHVybiB0b05hdGl2ZUZy
b21WYWx1ZVdpdGhvdXRDb2VyY2lvbjxBZGFwdG9yPihqc1ZhbHVlKTsgfQogCkBAIC0yMTksMTEg
KzIxOSwxMSBAQCBjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBmaW5hbCA6IHB1YmxpYyBK
U0FycmF5QnVmZmVyVmlldyB7CiAgICAgCiAgICAgLy8gTGlrZSBjYW5TZXRRdWlja2x5LCBleGNl
cHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhlCiAgICAgLy8gYXBwcm9w
cmlhdGUgZXhjZXB0aW9uLgotICAgIGJvb2wgdmFsaWRhdGVSYW5nZShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgYm9vbCB2YWxpZGF0ZVJhbmdlKEpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaWYgaXQg
cmV0dXJucyBmYWxzZQogICAgIC8vIHRoZW4gaXQgd2lsbCBoYXZlIHRocm93biBhbiBleGNlcHRp
b24uCi0gICAgYm9vbCBzZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgb2Zmc2V0LCBKU09iamVjdCos
IHVuc2lnbmVkIG9iamVjdE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBDb3B5VHlwZSB0eXBlID0g
Q29weVR5cGU6OlVub2JzZXJ2YWJsZSk7CisgICAgYm9vbCBzZXQoSlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCBvZmZzZXQsIEpTT2JqZWN0KiwgdW5zaWduZWQgb2JqZWN0T2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIENvcHlUeXBlIHR5cGUgPSBDb3B5VHlwZTo6VW5vYnNlcnZhYmxlKTsKICAgICAK
ICAgICBSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IHBvc3NpYmx5U2hhcmVkVHlw
ZWRJbXBsKCk7CiAgICAgUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiB1bnNoYXJl
ZFR5cGVkSW1wbCgpOwpAQCAtMjcyLDE4ICsyNzIsMTggQEAgY2xhc3MgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcgZmluYWwgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgewogcHJvdGVjdGVkOgog
ICAgIGZyaWVuZCBzdHJ1Y3QgVHlwZWRBcnJheUNsYXNzSW5mb3M7CiAKLSAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgdGhyb3dOZXV0ZXJlZFR5cGVkQXJyYXlUeXBlRXJyb3IoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IHRocm93TmV1dGVyZWRUeXBlZEFycmF5VHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKIAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKLSAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChK
U0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAgICAgCi0g
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKiwgVk0mKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CkBAIC0yOTIsNyArMjkyLDcgQEAgY2xhc3MgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcgZmluYWwgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgewogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGl0IHdpbGwgdGhy
b3cgb24gZXJyb3IuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJBZGFwdG9yPgogICAgIGJv
b2wgc2V0V2l0aFNwZWNpZmljVHlwZSgKLSAgICAgICAgRXhlY1N0YXRlKiwgdW5zaWduZWQgb2Zm
c2V0LCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxPdGhlckFkYXB0b3I+KiwKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBvZmZzZXQsIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PE90
aGVyQWRhcHRvcj4qLAogICAgICAgICB1bnNpZ25lZCBvYmplY3RPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgQ29weVR5cGUpOwogCiAgICAgLy8gVGhlIEVDTUEgNiBzcGVjIHN0YXRlcyB0aGF0IGZs
b2F0aW5nIHBvaW50IFR5cGVkIEFycmF5cyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIG9yZGVy
aW5nOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKaW5k
ZXggN2ZlOTFjNTBiZjQ2MWNmZWQyNTA3Y2JhYWNhODEwYTA2MzViYzk0NS4uNDc3YjdiMjIwN2Fm
NjUzZTVmODBlZDYzNWYxNzk0YmM2MzgwNDg1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCkBAIC04MywyOCArODMsMjggQEAgU3RydWN0dXJlKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmNyZWF0ZVN0cnVj
dHVyZSgKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotaW5saW5lIEpTT2JqZWN0
KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdGcm9tSXRlcmF0b3IoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGl0ZXJhYmxlLCBKU1ZhbHVlIGl0
ZXJhdG9yTWV0aG9kKQoraW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJh
eVZpZXdGcm9tSXRlcmF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBpdGVyYWJsZSwgSlNWYWx1ZSBpdGVyYXRvck1ldGhvZCkK
IHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgc3RvcmFnZTsKLSAgICBmb3JFYWNoSW5JdGVyYWJsZSgqZXhl
YywgaXRlcmFibGUsIGl0ZXJhdG9yTWV0aG9kLCBbJl0gKFZNJiwgRXhlY1N0YXRlJiwgSlNWYWx1
ZSB2YWx1ZSkgeworICAgIGZvckVhY2hJbkl0ZXJhYmxlKCpnbG9iYWxPYmplY3QsIGl0ZXJhYmxl
LCBpdGVyYXRvck1ldGhvZCwgWyZdIChWTSYsIEpTR2xvYmFsT2JqZWN0JiwgSlNWYWx1ZSB2YWx1
ZSkgewogICAgICAgICBzdG9yYWdlLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VM
WShzdG9yYWdlLmhhc092ZXJmbG93ZWQoKSkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgIFZp
ZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMsIHN0
cnVjdHVyZSwgc3RvcmFnZS5zaXplKCkpOworICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0Ns
YXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzdG9yYWdl
LnNpemUoKSk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFy
ZXN1bHQpOwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS5zaXplKCk7ICsraSkg
ewotICAgICAgICBib29sIHN1Y2Nlc3MgPSByZXN1bHQtPnNldEluZGV4KGV4ZWMsIGksIHN0b3Jh
Z2UuYXQoaSkpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSByZXN1bHQtPnNldEluZGV4KGdsb2Jh
bE9iamVjdCwgaSwgc3RvcmFnZS5hdChpKSk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQoc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CiAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTE0LDkgKzExNCw5IEBAIGlubGluZSBKU09iamVj
dCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3RnJvbUl0ZXJhdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgU3RyCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLWlubGluZSBKU09i
amVjdCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50cyhFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBmaXJzdEFyZ3Vt
ZW50LCB1bnNpZ25lZCBvZmZzZXQsIE9wdGlvbmFsPHVuc2lnbmVkPiBsZW5ndGhPcHQpCitpbmxp
bmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29k
ZWRKU1ZhbHVlIGZpcnN0QXJndW1lbnQsIHVuc2lnbmVkIG9mZnNldCwgT3B0aW9uYWw8dW5zaWdu
ZWQ+IGxlbmd0aE9wdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNWYWx1ZSBmaXJzdFZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGZpcnN0
QXJndW1lbnQpOwpAQCAtMTI5LDE4ICsxMjksMTggQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1
Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdXaXRoQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgU3QK
ICAgICAgICAgICAgIGxlbmd0aCA9IGxlbmd0aE9wdC52YWx1ZSgpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWSgoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQp
ICUgVmlld0NsYXNzOjplbGVtZW50U2l6ZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1Jhbmdl
RXJyb3IoZXhlYywgc2NvcGUsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZz
ZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSJfcyk7CisgICAgICAgICAg
ICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJBcnJheUJ1ZmZlciBs
ZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1l
bnQgc2l6ZSJfcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQp
IC8gVmlld0NsYXNzOjplbGVtZW50U2l6ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBXVEZN
b3ZlKGJ1ZmZlciksIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgVmlld0NsYXNzOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdURk1v
dmUoYnVmZmVyKSwgb2Zmc2V0LCBsZW5ndGgpKTsKICAgICB9CiAgICAgQVNTRVJUKCFvZmZzZXQg
JiYgIWxlbmd0aE9wdCk7CiAgICAgCiAgICAgaWYgKFVOTElLRUxZKFZpZXdDbGFzczo6VHlwZWRB
cnJheVN0b3JhZ2VUeXBlID09IFR5cGVEYXRhVmlldykpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsICJFeHBlY3RlZCBBcnJheUJ1ZmZlciBmb3IgdGhlIGZpcnN0IGFyZ3Vt
ZW50LiJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJF
eHBlY3RlZCBBcnJheUJ1ZmZlciBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LiJfcyk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKQEAgLTE1NywxMCArMTU3LDEwIEBAIGlubGlu
ZSBKU09iamVjdCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50cyhF
eGVjU3RhdGUqIGV4ZWMsIFN0CiAgICAgICAgICAgICAvLyBUaGlzIGdldFByb3BlcnR5U2xvdCBv
cGVyYXRpb24gc2hvdWxkIG5vdCBiZSBvYnNlcnZlZCBieSB0aGUgUHJveHkuCiAgICAgICAgICAg
ICAvLyBTbyB3ZSB1c2UgVk1JbnF1aXJ5LiBBbmQgcHVyZ2UgdGhlIG9wYXF1ZSBvYmplY3QgY2Fz
ZXMgKHByb3h5IGFuZCBuYW1lc3BhY2Ugb2JqZWN0KSBieSBpc1RhaW50ZWRCeU9wYXF1ZU9iamVj
dCgpIGd1YXJkLgogICAgICAgICAgICAgUHJvcGVydHlTbG90IGxlbmd0aFNsb3Qob2JqZWN0LCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKLSAgICAgICAgICAg
IG9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
bGVuZ3RoU2xvdCk7CisgICAgICAgICAgICBvYmplY3QtPmdldFByb3BlcnR5U2xvdChnbG9iYWxP
YmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwgbGVuZ3RoU2xvdCk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgICAgICAgICAgSlNW
YWx1ZSBpdGVyYXRvckZ1bmMgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5p
dGVyYXRvclN5bWJvbCk7CisgICAgICAgICAgICBKU1ZhbHVlIGl0ZXJhdG9yRnVuYyA9IG9iamVj
dC0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICAg
ICAgICAgIC8vIFdlIHdvdWxkIGxpa2Ugbm90IHVzZSB0aGUgaXRlcmF0b3IgYXMgaXQgaXMgcGFp
bmZ1bGx5IHNsb3cuIEZvcnR1bmF0ZWx5LCB1bmxlc3MKQEAgLTE3NCw2MiArMTc0LDYyIEBAIGlu
bGluZSBKU09iamVjdCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0aEFyZ3VtZW50
cyhFeGVjU3RhdGUqIGV4ZWMsIFN0CiAgICAgICAgICAgICAgICAgICAgIHx8IGxlbmd0aFNsb3Qu
aXNBY2Nlc3NvcigpIHx8IGxlbmd0aFNsb3QuaXNDdXN0b20oKSB8fCBsZW5ndGhTbG90LmlzVGFp
bnRlZEJ5T3BhcXVlT2JqZWN0KCkKICAgICAgICAgICAgICAgICAgICAgfHwgaGFzQW55QXJyYXlT
dG9yYWdlKG9iamVjdC0+aW5kZXhpbmdUeXBlKCkpKSkgewogCi0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3
RnJvbUl0ZXJhdG9yPFZpZXdDbGFzcz4oZXhlYywgc3RydWN0dXJlLCBvYmplY3QsIGl0ZXJhdG9y
RnVuYykpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNv
bnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld0Zyb21JdGVyYXRvcjxWaWV3Q2xhc3M+KGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBvYmplY3QsIGl0ZXJhdG9yRnVuYykpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAobGVuZ3RoU2xvdC5pc1Vuc2V0KCkpCiAgICAgICAgICAgICAg
ICAgbGVuZ3RoID0gMDsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBsZW5ndGhTbG90LmdldFZhbHVlKGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGxlbmd0aFNsb3QuZ2V0VmFs
dWUoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwogICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICAgICAgICAg
IGxlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgICAgIGxlbmd0aCA9
IHZhbHVlLnRvVUludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICAKLSAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOworICAgICAgICBWaWV3Q2xhc3Mq
IHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgbGVuZ3RoKTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2Vw
dGlvbigpID09ICFyZXN1bHQpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICAgICAgaWYgKCFyZXN1bHQtPnNldChleGVjLCAwLCBvYmplY3QsIDAsIGxlbmd0aCkp
CisgICAgICAgIGlmICghcmVzdWx0LT5zZXQoZ2xvYmFsT2JqZWN0LCAwLCBvYmplY3QsIDAsIGxl
bmd0aCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gZmlyc3RWYWx1ZS50
b0luZGV4KGV4ZWMsICJsZW5ndGgiKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBmaXJzdFZhbHVl
LnRvSW5kZXgoZ2xvYmFsT2JqZWN0LCAibGVuZ3RoIik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBWaWV3Q2xh
c3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgVmlld0NsYXNzOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGxl
bmd0aCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJbnRlcm5h
bEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKTsKICAgICBTdHJ1Y3R1cmUqIHBhcmVudFN0cnVjdHVyZSA9IGZ1bmN0aW9u
LT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVkQXJy
YXlTdG9yYWdlVHlwZSk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFy
Z2V0KCksIHBhcmVudFN0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwgcGFyZW50U3RydWN0dXJl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAog
ICAgIHNpemVfdCBhcmdDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwogCiAgICAg
aWYgKCFhcmdDb3VudCkgewogICAgICAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUgPT0gVHlwZURhdGFWaWV3KQotICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoY2FsbEZyYW1lLCBzY29wZSwgIkRhdGFWaWV3IGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxl
YXN0IG9uZSBhcmd1bWVudC4iX3MpOworICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkRhdGFWaWV3IGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0
IGxlYXN0IG9uZSBhcmd1bWVudC4iX3MpOwogCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKGNhbGxGcmFtZSwgc3RydWN0
dXJlLCAwKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShWaWV3Q2xhc3M6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgMCkpKTsKICAg
ICB9CiAKICAgICBKU1ZhbHVlIGZpcnN0VmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwogICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CiAgICAgT3B0aW9uYWw8dW5zaWduZWQ+
IGxlbmd0aCA9IFdURjo6bnVsbG9wdDsKICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVm
ZmVyKj4odm0sIGZpcnN0VmFsdWUpICYmIGFyZ0NvdW50ID4gMSkgewotICAgICAgICBvZmZzZXQg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW5kZXgoY2FsbEZyYW1lLCAiYnl0
ZU9mZnNldCIpOworICAgICAgICBvZmZzZXQgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvSW5kZXgoZ2xvYmFsT2JqZWN0LCAiYnl0ZU9mZnNldCIpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAoYXJn
Q291bnQgPiAyKSB7CkBAIC0yMzcsMjUgKzIzNywyNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldyhKU0dsb2JhbE9iamVjdCogZ2xv
YgogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBEYXRhVmlldyBieXRlTGVuZ3RoIGlzIHByZXNl
bnQgYnV0IHVuZGVmaW5lZCwgdHJlYXQgaXQgYXMgbWlzc2luZy4KICAgICAgICAgICAgICAgICBK
U1ZhbHVlIGJ5dGVMZW5ndGhWYWx1ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMik7
CiAgICAgICAgICAgICAgICAgaWYgKCFieXRlTGVuZ3RoVmFsdWUuaXNVbmRlZmluZWQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoVmFsdWUudG9JbmRleChjYWxs
RnJhbWUsICJieXRlTGVuZ3RoIik7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGJ5dGVM
ZW5ndGhWYWx1ZS50b0luZGV4KGdsb2JhbE9iamVjdCwgImJ5dGVMZW5ndGgiKTsKICAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBsZW5ndGggPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW5kZXgoY2FsbEZy
YW1lLCAibGVuZ3RoIik7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgyKS50b0luZGV4KGdsb2JhbE9iamVjdCwgImxlbmd0aCIpOwogICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3V2l0
aEFyZ3VtZW50czxWaWV3Q2xhc3M+KGNhbGxGcmFtZSwgc3RydWN0dXJlLCBKU1ZhbHVlOjplbmNv
ZGUoZmlyc3RWYWx1ZSksIG9mZnNldCwgbGVuZ3RoKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dp
dGhBcmd1bWVudHM8Vmlld0NsYXNzPihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgSlNWYWx1ZTo6
ZW5jb2RlKGZpcnN0VmFsdWUpLCBvZmZzZXQsIGxlbmd0aCkpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bEdlbmVyaWNUeXBlZEFycmF5VmlldyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxHZW5lcmljVHlwZWRBcnJheVZpZXcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKikKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fu
bm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIFZpZXdDbGFz
czo6aW5mbygpLT5jbGFzc05hbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgVmlld0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKaW5kZXggMWE2Mzk4ZGU4ZmViNjI4
YmI5YmQ0NDcwNWFmMTM2NGE2NWM0NzY1Mi4uNzUzYjU4MTA4MjRiYzk0NzlmYmZkYmQ0ZjA0ZGEw
MDFlZWNmZmYxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKQEAgLTQ2LDEzICs0Niwx
MyBAQCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcoCiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgK
LSAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5n
dGgpCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0
dXJlLCBsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CiAgICAgaWYgKCFj
b250ZXh0KSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7Cisg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBy
ZXN1bHQgPQpAQCAtNjQsOSArNjQsOSBAQCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
PiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKIAogdGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlV2l0aEZhc3RWZWN0b3IoCi0gICAg
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCB2
b2lkKiB2ZWN0b3IpCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCogdmVjdG9yKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBD
b25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQoc3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvcik7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoY29udGV4dCk7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IHJlc3VsdCA9CkBAIC03NywxNSArNzcsMTUgQEAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVXaXRoRmEKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KLUpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFs
aXplZChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5n
dGgpCitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnN0cnVjdGlv
bkNvbnRleHQgY29udGV4dCgKICAgICAgICAgdm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCiAgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRv
bnRJbml0aWFsaXplKTsKICAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CkBAIC05NywxOSArOTcsMTkgQEAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpjcmVhdGVVbmluaXQKIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6Y3JlYXRlKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBidWZmZXIsCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiBidWZm
ZXIsCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgc2l6ZV90IHNpemUg
PSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgQVNTRVJUKGJ1ZmZlcik7CiAg
ICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlTGVuZ3RoKCpidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCwgc2l6ZSkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywg
c2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVm
ZmVyIikpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIkxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVy
IikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKCFBcnJheUJ1ZmZl
clZpZXc6OnZlcmlmeUJ5dGVPZmZzZXRBbGlnbm1lbnQoYnl0ZU9mZnNldCwgc2l6ZSkpIHsKLSAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IkJ5dGUgb2Zmc2V0IGlzIG5vdCBhbGlnbmVkIikpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIkJ5dGUg
b2Zmc2V0IGlzIG5vdCBhbGlnbmVkIikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUo
YnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKQEAgLTEzOSwyNiArMTM5LDI2IEBAIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6Y3JlYXRlKAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LAogICAgIFJlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4mJiBp
bXBsKQogewotICAgIHJldHVybiBjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUs
IFdURk1vdmUoaW1wbCkpOworICAgIHJldHVybiBjcmVhdGUoZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwg
c3RydWN0dXJlLCBXVEZNb3ZlKGltcGwpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KIGJvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZhbGlkYXRlUmFuZ2Uo
Ci0gICAgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdl
dFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIGlmIChjYW5BY2Nlc3NSYW5nZVF1aWNrbHkob2Zmc2V0LCBsZW5ndGgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxl
bmd0aCBhcmUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIlJhbmdlIGNvbnNpc3Rp
bmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMiKSk7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgogdGVtcGxhdGU8dHlwZW5h
bWUgT3RoZXJBZGFwdG9yPgogYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
c2V0V2l0aFNwZWNpZmljVHlwZSgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG9mZnNl
dCwgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8T3RoZXJBZGFwdG9yPiogb3RoZXIsCisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgb2Zmc2V0LCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxPdGhlckFkYXB0b3I+KiBvdGhlciwKICAgICB1bnNpZ25lZCBvdGhlck9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBDb3B5VHlwZSB0eXBlKQogewogICAgIC8vIEhhbmRsZSB0aGUg
aGlsYXJpb3VzIGNhc2U6IHRoZSBhY3Qgb2YgZ2V0dGluZyB0aGUgbGVuZ3RoIGNvdWxkIGhhdmUg
cmVzdWx0ZWQKQEAgLTE3MCw3ICsxNzAsNyBAQCBib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBlKAogICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxl
bmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKG90aGVyLT5jYW5B
Y2Nlc3NSYW5nZVF1aWNrbHkob3RoZXJPZmZzZXQsIGxlbmd0aCkpOwotICAgIGlmICghdmFsaWRh
dGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGds
b2JhbE9iamVjdCwgb2Zmc2V0LCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgLy8gVGhpcyBtZXRob2QgZG9lc24ndCBzdXBwb3J0IGNvcHlpbmcgYmV0d2VlbiB0aGUg
c2FtZSBhcnJheS4gTm90ZSB0aGF0CkBAIC0yMzksOSArMjM5LDkgQEAgYm9vbCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0V2l0aFNwZWNpZmljVHlwZSgKIAogdGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KIGJvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OnNldCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG9mZnNldCwgSlNPYmplY3QqIG9i
amVjdCwgdW5zaWduZWQgb2JqZWN0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIENvcHlUeXBlIHR5
cGUpCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgb2Zmc2V0LCBK
U09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvYmplY3RPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
Q29weVR5cGUgdHlwZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjaSA9IG9iamVjdC0+Y2xhc3NJbmZvKHZt
KTsKQEAgLTI1MSw3ICsyNTEsNyBAQCBib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpzZXQoCiAgICAgICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0
aCgpKTsKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG90aGVyLT5jYW5BY2Nlc3NS
YW5nZVF1aWNrbHkob2JqZWN0T2Zmc2V0LCBsZW5ndGgpKTsKLSAgICAgICAgYm9vbCBzdWNjZXNz
ID0gdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IHZhbGlkYXRlUmFuZ2UoZ2xvYmFsT2JqZWN0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAg
ICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpID09IHN1Y2Nlc3MpOwogICAg
ICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjMsNDMg
KzI2Myw0MyBAQCBib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXQoCiAg
ICAgc3dpdGNoIChjaS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CiAgICAgY2FzZSBUeXBlSW50
ODoKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBzZXRXaXRoU3BlY2lmaWNUeXBl
PEludDhBZGFwdG9yPigKLSAgICAgICAgICAgIGV4ZWMsIG9mZnNldCwganNDYXN0PEpTSW50OEFy
cmF5Kj4ob2JqZWN0KSwgb2JqZWN0T2Zmc2V0LCBsZW5ndGgsIHR5cGUpKTsKKyAgICAgICAgICAg
IGdsb2JhbE9iamVjdCwgb2Zmc2V0LCBqc0Nhc3Q8SlNJbnQ4QXJyYXkqPihvYmplY3QpLCBvYmpl
Y3RPZmZzZXQsIGxlbmd0aCwgdHlwZSkpOwogICAgIGNhc2UgVHlwZUludDE2OgogICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHNldFdpdGhTcGVjaWZpY1R5cGU8SW50MTZBZGFwdG9y
PigKLSAgICAgICAgICAgIGV4ZWMsIG9mZnNldCwganNDYXN0PEpTSW50MTZBcnJheSo+KG9iamVj
dCksIG9iamVjdE9mZnNldCwgbGVuZ3RoLCB0eXBlKSk7CisgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QsIG9mZnNldCwganNDYXN0PEpTSW50MTZBcnJheSo+KG9iamVjdCksIG9iamVjdE9mZnNldCwg
bGVuZ3RoLCB0eXBlKSk7CiAgICAgY2FzZSBUeXBlSW50MzI6CiAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgc2V0V2l0aFNwZWNpZmljVHlwZTxJbnQzMkFkYXB0b3I+KAotICAgICAg
ICAgICAgZXhlYywgb2Zmc2V0LCBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2JqZWN0
T2Zmc2V0LCBsZW5ndGgsIHR5cGUpKTsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdCwgb2Zmc2V0
LCBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2JqZWN0T2Zmc2V0LCBsZW5ndGgsIHR5
cGUpKTsKICAgICBjYXNlIFR5cGVVaW50ODoKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBzZXRXaXRoU3BlY2lmaWNUeXBlPFVpbnQ4QWRhcHRvcj4oCi0gICAgICAgICAgICBleGVj
LCBvZmZzZXQsIGpzQ2FzdDxKU1VpbnQ4QXJyYXkqPihvYmplY3QpLCBvYmplY3RPZmZzZXQsIGxl
bmd0aCwgdHlwZSkpOworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LCBvZmZzZXQsIGpzQ2FzdDxK
U1VpbnQ4QXJyYXkqPihvYmplY3QpLCBvYmplY3RPZmZzZXQsIGxlbmd0aCwgdHlwZSkpOwogICAg
IGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBzZXRXaXRoU3BlY2lmaWNUeXBlPFVpbnQ4Q2xhbXBlZEFkYXB0b3I+KAotICAgICAgICAgICAg
ZXhlYywgb2Zmc2V0LCBqc0Nhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KG9iamVjdCksIG9iamVj
dE9mZnNldCwgbGVuZ3RoLCB0eXBlKSk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3QsIG9mZnNl
dCwganNDYXN0PEpTVWludDhDbGFtcGVkQXJyYXkqPihvYmplY3QpLCBvYmplY3RPZmZzZXQsIGxl
bmd0aCwgdHlwZSkpOwogICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBzZXRXaXRoU3BlY2lmaWNUeXBlPFVpbnQxNkFkYXB0b3I+KAotICAgICAg
ICAgICAgZXhlYywgb2Zmc2V0LCBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KG9iamVjdCksIG9iamVj
dE9mZnNldCwgbGVuZ3RoLCB0eXBlKSk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3QsIG9mZnNl
dCwganNDYXN0PEpTVWludDE2QXJyYXkqPihvYmplY3QpLCBvYmplY3RPZmZzZXQsIGxlbmd0aCwg
dHlwZSkpOwogICAgIGNhc2UgVHlwZVVpbnQzMjoKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBzZXRXaXRoU3BlY2lmaWNUeXBlPFVpbnQzMkFkYXB0b3I+KAotICAgICAgICAgICAg
ZXhlYywgb2Zmc2V0LCBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9iamVjdE9mZnNl
dCwgbGVuZ3RoLCB0eXBlKSk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3QsIG9mZnNldCwganND
YXN0PEpTVWludDMyQXJyYXkqPihvYmplY3QpLCBvYmplY3RPZmZzZXQsIGxlbmd0aCwgdHlwZSkp
OwogICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgc2V0V2l0aFNwZWNpZmljVHlwZTxGbG9hdDMyQWRhcHRvcj4oCi0gICAgICAgICAgICBleGVj
LCBvZmZzZXQsIGpzQ2FzdDxKU0Zsb2F0MzJBcnJheSo+KG9iamVjdCksIG9iamVjdE9mZnNldCwg
bGVuZ3RoLCB0eXBlKSk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3QsIG9mZnNldCwganNDYXN0
PEpTRmxvYXQzMkFycmF5Kj4ob2JqZWN0KSwgb2JqZWN0T2Zmc2V0LCBsZW5ndGgsIHR5cGUpKTsK
ICAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHNldFdpdGhTcGVjaWZpY1R5cGU8RmxvYXQ2NEFkYXB0b3I+KAotICAgICAgICAgICAgZXhlYywg
b2Zmc2V0LCBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihvYmplY3QpLCBvYmplY3RPZmZzZXQsIGxl
bmd0aCwgdHlwZSkpOworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LCBvZmZzZXQsIGpzQ2FzdDxK
U0Zsb2F0NjRBcnJheSo+KG9iamVjdCksIG9iamVjdE9mZnNldCwgbGVuZ3RoLCB0eXBlKSk7CiAg
ICAgY2FzZSBOb3RUeXBlZEFycmF5OgogICAgIGNhc2UgVHlwZURhdGFWaWV3OiB7Ci0gICAgICAg
IGJvb2wgc3VjY2VzcyA9IHZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpOworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSB2YWxpZGF0ZVJhbmdlKGdsb2JhbE9iamVjdCwgb2Zmc2V0LCBs
ZW5ndGgpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSA9PSBz
dWNjZXNzKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIC8vIFdlIGNvdWxkIG9wdGltaXplIHRoaXMgY2FzZS4gQnV0IHJpZ2h0IG5v
dywgd2UgZG9uJ3QuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkgKyBv
YmplY3RPZmZzZXQpOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGds
b2JhbE9iamVjdCwgaSArIG9iamVjdE9mZnNldCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBzZXRJbmRl
eChleGVjLCBvZmZzZXQgKyBpLCB2YWx1ZSk7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBz
ZXRJbmRleChnbG9iYWxPYmplY3QsIG9mZnNldCArIGksIHZhbHVlKTsKICAgICAgICAgICAgIEVY
Q0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFzdWNjZXNzKTsKICAgICAgICAg
ICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMzAs
MTcgKzMzMCwxNyBAQCBBcnJheUJ1ZmZlciogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmV4aXN0aW5nQnVmZmVyKCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KLUVu
Y29kZWRKU1ZhbHVlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp0aHJvd05ldXRl
cmVkVHlwZWRBcnJheVR5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIG9i
amVjdCwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnRocm93TmV1dGVyZWRUeXBlZEFycmF5VHlwZUVycm9yKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIG9iamVjdCwgUHJvcGVydHlOYW1lKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQVNT
RVJUX1VOVVNFRChvYmplY3QsIGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KEpTVmFs
dWU6OmRlY29kZShvYmplY3QpKS0+aXNOZXV0ZXJlZCgpKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9y
TWVzc2FnZSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CiBib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCi0gICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CisgICAgSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Kj4ob2JqZWN0KTsKIApAQCAtMzY3LDE1ICszNjcsMTUgQEAgYm9vbCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90KAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgogYm9vbCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0KAotICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIEpT
Q2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4oY2VsbCk7CkBAIC0zODQsMzAgKzM4NCwzMCBAQCBib29sIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQoCiAgICAgLy8gSWdub3JlIHRoZSByZWNlaXZlciBl
dmVuIGlmIHRoZSByZWNlaXZlciBpcyBhbHRlcmVkIHRvIG5vbiBiYXNlIHZhbHVlLgogICAgIC8v
IDkuNC41LjUtMi1iLWkgUmV0dXJuID8gSW50ZWdlckluZGV4ZWRFbGVtZW50U2V0KE8sIG51bWVy
aWNJbmRleCwgVikuCiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5k
ZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRC
eUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRl
eCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKSk7CiAKICAgICBpZiAoaXNDYW5vbmljYWxOdW1lcmljSW5kZXhTdHJpbmco
cHJvcGVydHlOYW1lKSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQot
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJI
YXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9y
TWVzc2FnZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQo
dGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CiBib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKLSAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwKICAgICBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
c2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBn
ZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CiAKICAgICBpZiAoT3B0aW9uYWw8dWlu
dDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGF1dG8g
dGhyb3dUeXBlRXJyb3JJZk5lZWRlZCA9IFsmXSAoY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKSAt
PiBib29sIHsKICAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgbWFrZVN0cmluZyhlcnJvck1lc3NhZ2UsICppbmRl
eCkpOworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IG1ha2VTdHJpbmcoZXJyb3JNZXNzYWdlLCAqaW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfTsKIApAQCAtNDI0LDcgKzQyNCw3IEBAIGJvb2wgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlZmluZU93blByb3BlcnR5KAogICAgICAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9ySWZOZWVkZWQoIkF0dGVtcHRpbmcgdG8gc3RvcmUgbm9uLWVudW1l
cmFibGUgb3Igbm9uLXdyaXRhYmxlIHByb3BlcnR5IG9uIGEgdHlwZWQgYXJyYXkgYXQgaW5kZXg6
ICIpOwogCiAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXgodGhpc09iamVjdCwg
ZXhlYywgaW5kZXgudmFsdWUoKSwgZGVzY3JpcHRvci52YWx1ZSgpLCBzaG91bGRUaHJvdykpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0aGlzT2JqZWN0LT5wdXRCeUlu
ZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgZGVzY3JpcHRvci52
YWx1ZSgpLCBzaG91bGRUaHJvdykpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTQzMiwyOSArNDMyLDI5IEBAIGJvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmRlZmluZU93blByb3BlcnR5KAogICAgIGlmIChpc0Nhbm9uaWNhbE51bWVyaWNJbmRleFN0cmlu
Zyhwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdykpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgogYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHkoCi0gICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCisgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqPihjZWxsKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCi0gICAgICAg
IHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHRydWUsIHR5cGVkQXJyYXlCdWZmZXJIYXNC
ZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIHRydWUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJv
ck1lc3NhZ2UpOwogCiAgICAgaWYgKHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+CiBib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KAotICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorICAg
IEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOwogCkBA
IC00NzIsMjUgKzQ3MiwyNSBAQCBib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgogYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0QnlJbmRleCgKLSAg
ICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBib29sKQorICAgIEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sKQog
ewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnNldElu
ZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5z
ZXRJbmRleChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgogYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAotICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCisgICAgSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQ
cm9wZXJ0eShjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpKTsK
KyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBjZWxsLT5tZXRo
b2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KGNlbGwsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CiB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKAotICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJy
YXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CiAKICAgICBpZiAoYXJyYXkuaW5jbHVkZVN0cmluZ1Byb3BlcnRpZXMoKSkgewpAQCAtNDk4
LDcgKzQ5OCw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93
blByb3BlcnR5TmFtZXMoCiAgICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaSkpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgYXJyYXksIG1vZGUpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlRnVuY3Rpb25zLmgKaW5kZXggMGE0YjEzNDIxMTEyNDI4OWFlNmE3YzM5MGUxMjA0NzNjYzVi
MGE0NC4uNWJjYTVkN2FkYWE5Y2Q1YTFhYTU0NjIwZjQ1MTRiYzViN2NlYzYzNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGVGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCkBAIC00Myw1NiArNDMs
NTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBUaGlzIGltcGxlbWVudHMgMjIuMi40LjcgVHlwZWRB
cnJheVNwZWNpZXNDcmVhdGUKIC8vIE5vdGUsIHRoYXQgdGhpcyBmdW5jdGlvbiB0aHJvd3MuCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3KiBzcGVj
aWVzQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGV4ZW1wbGFyLCBNYXJrZWRB
cmd1bWVudEJ1ZmZlciYgYXJncywgY29uc3QgRnVuY3RvciYgZGVmYXVsdENvbnN0cnVjdG9yKQor
aW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3KiBzcGVjaWVzQ29uc3RydWN0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBleGVtcGxhciwgTWFya2VkQXJndW1lbnRCdWZmZXIm
IGFyZ3MsIGNvbnN0IEZ1bmN0b3ImIGRlZmF1bHRDb25zdHJ1Y3RvcikKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSBjb25zdHJ1
Y3RvciA9IGV4ZW1wbGFyLT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3Ip
OworICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBleGVtcGxhci0+Z2V0KGdsb2JhbE9iamVjdCwg
dm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKGNvbnN0cnVjdG9yLmlzVW5kZWZpbmVkKCkpCiAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGVmYXVsdENvbnN0cnVjdG9yKCkpOwog
CiAgICAgaWYgKCFjb25zdHJ1Y3Rvci5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCAiY29uc3RydWN0b3IgUHJvcGVydHkgc2hvdWxkIG5vdCBiZSBudWxs
Il9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImNvbnN0
cnVjdG9yIFByb3BlcnR5IHNob3VsZCBub3QgYmUgbnVsbCJfcyk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAotICAgIEpTVmFsdWUgc3BlY2llcyA9IGNvbnN0cnVjdG9yLmdldChl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5zcGVjaWVzU3ltYm9sKTsKKyAgICBKU1ZhbHVlIHNwZWNp
ZXMgPSBjb25zdHJ1Y3Rvci5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5zcGVj
aWVzU3ltYm9sKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAog
ICAgIGlmIChzcGVjaWVzLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgZGVmYXVsdENvbnN0cnVjdG9yKCkpOwogCiAKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBhcmdzLCAic3BlY2llcyBpcyBub3QgYSBj
b25zdHJ1Y3RvciIpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gY29uc3RydWN0KGdsb2JhbE9iamVj
dCwgc3BlY2llcywgYXJncywgInNwZWNpZXMgaXMgbm90IGEgY29uc3RydWN0b3IiKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGlmIChKU0FycmF5QnVm
ZmVyVmlldyogdmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgcmVz
dWx0KSkgewogICAgICAgICBpZiAodmlldy0+dHlwZSgpID09IERhdGFWaWV3VHlwZSkgewotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJzcGVjaWVzIGNvbnN0cnVjdG9y
IGRpZCBub3QgcmV0dXJuIGEgVHlwZWRBcnJheSBWaWV3Il9zKTsKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJzcGVjaWVzIGNvbnN0cnVjdG9yIGRpZCBu
b3QgcmV0dXJuIGEgVHlwZWRBcnJheSBWaWV3Il9zKTsKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2aWV3LT5pc05ldXRlcmVkKCkpCiAgICAg
ICAgICAgICByZXR1cm4gdmlldzsKIAotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CisgICAgICAg
IHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNC
ZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKLSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgInNwZWNpZXMgY29uc3RydWN0b3Ig
ZGlkIG5vdCByZXR1cm4gYSBUeXBlZEFycmF5IFZpZXciX3MpOworICAgIHRocm93VHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJzcGVjaWVzIGNvbnN0cnVjdG9yIGRpZCBub3QgcmV0dXJu
IGEgVHlwZWRBcnJheSBWaWV3Il9zKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotaW5saW5l
IHVuc2lnbmVkIGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgYXJndW1lbnQsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdW5kZWZpbmVkVmFs
dWUgPSAwKQoraW5saW5lIHVuc2lnbmVkIGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JF
bmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCB1bmRlZmluZWRWYWx1ZSA9IDApCiB7Ci0gICAgSlNWYWx1ZSB2YWx1
ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQo
KSkKICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFZhbHVlOwogCi0gICAgZG91YmxlIGluZGV4RG91
YmxlID0gdmFsdWUudG9JbnRlZ2VyKGV4ZWMpOworICAgIGRvdWJsZSBpbmRleERvdWJsZSA9IHZh
bHVlLnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwogICAgIGlmIChpbmRleERvdWJsZSA8IDApIHsK
ICAgICAgICAgaW5kZXhEb3VibGUgKz0gbGVuZ3RoOwogICAgICAgICByZXR1cm4gaW5kZXhEb3Vi
bGUgPCAwID8gMCA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleERvdWJsZSk7CkBAIC0xMDEs
MTA2ICsxMDAsMTA2IEBAIGlubGluZSB1bnNpZ25lZCBhcmd1bWVudENsYW1wZWRJbmRleEZyb21T
dGFydE9yRW5kKEV4ZWNTdGF0ZSogZXhlYywgaW50IGFyZ3VtZW50CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAv
LyAyMi4yLjMuMjIKLSAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNz
Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxWaWV3Q2xhc3MqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKIAotICAgIGlmIChVTkxJS0VM
WSghZXhlYy0+YXJndW1lbnRDb3VudCgpKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUsICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQiX3MpOworICAg
IGlmIChVTkxJS0VMWSghY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRXhwZWN0ZWQgYXQgbGVh
c3Qgb25lIGFyZ3VtZW50Il9zKTsKIAogICAgIHVuc2lnbmVkIG9mZnNldDsKLSAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKLSAgICAgICAgZG91YmxlIG9mZnNldE51bWJlciA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50ZWdlcihleGVjKTsKKyAgICBpZiAoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBkb3VibGUgb2Zmc2V0TnVt
YmVyID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludGVnZXIoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShvZmZzZXROdW1iZXIgPCAwKSkKLSAgICAgICAgICAg
IHJldHVybiB0aHJvd1ZNUmFuZ2VFcnJvcihleGVjLCBzY29wZSwgIk9mZnNldCBzaG91bGQgbm90
IGJlIG5lZ2F0aXZlIik7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVJhbmdlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIk9mZnNldCBzaG91bGQgbm90IGJlIG5lZ2F0aXZlIik7CiAgICAg
ICAgIG9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1pbihvZmZzZXROdW1iZXIs
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KSkpOwogICAgIH0gZWxzZQogICAgICAgICBvZmZzZXQgPSAwOwogCiAgICAgaWYgKFVOTElLRUxZ
KHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNz
YWdlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CiAKLSAgICBK
U09iamVjdCogc291cmNlQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBKU09iamVjdCogc291cmNlQXJyYXkgPSBqc0R5
bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIGlmIChVTkxJS0VMWSghc291cmNlQXJyYXkpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmpl
Y3QiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVjdCJfcyk7CiAKICAgICB1bnNp
Z25lZCBsZW5ndGg7CiAgICAgaWYgKGlzVHlwZWRWaWV3KHNvdXJjZUFycmF5LT5jbGFzc0luZm8o
dm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CiAgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiBzb3VyY2VWaWV3ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oc291cmNlQXJyYXkpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoc291cmNlVmlldy0+aXNOZXV0ZXJlZCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVy
SGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0
YWNoZWRFcnJvck1lc3NhZ2UpOwogCiAgICAgICAgIGxlbmd0aCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KHNvdXJjZUFycmF5KS0+bGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IHNvdXJjZUFycmF5LT5nZXQoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKTsKKyAgICAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IHNvdXJjZUFycmF5
LT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAgICAgbGVu
Z3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoZXhlYyk7CisgICAgICAgIGxlbmd0aCA9IGxlbmd0
aFZhbHVlLnRvVUludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgfQogCiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgdGhpc09iamVjdC0+c2V0KGV4ZWMsIG9mZnNldCwgc291cmNlQXJyYXksIDAsIGxlbmd0
aCwgQ29weVR5cGU6OlVub2JzZXJ2YWJsZSk7CisgICAgdGhpc09iamVjdC0+c2V0KGdsb2JhbE9i
amVjdCwgb2Zmc2V0LCBzb3VyY2VBcnJheSwgMCwgbGVuZ3RoLCBDb3B5VHlwZTo6VW5vYnNlcnZh
YmxlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0NvcHlXaXRoaW4oVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvRnVuY0NvcHlXaXRoaW4oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuNQotICAgIFZpZXdDbGFzcyogdGhpc09i
amVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgVmlld0Ns
YXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFj
aGVkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2Fn
ZSk7CiAKICAgICBsb25nIGxlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOwotICAgIGxvbmcg
dG8gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDAsIGxlbmd0aCk7
CisgICAgbG9uZyB0byA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGxvbmcgZnJvbSA9IGFyZ3Vt
ZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKKyAgICBsb25n
IGZyb20gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT5hcmd1bWVudCgxKSwgbGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBsb25nIGZpbmFsID0gYXJndW1lbnRDbGFt
cGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAyLCBsZW5ndGgsIGxlbmd0aCk7CisgICAgbG9u
ZyBmaW5hbCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDIpLCBsZW5ndGgsIGxlbmd0aCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoZmluYWwgPCBm
cm9tKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnRoaXNWYWx1ZSgpKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
IAogICAgIGxvbmcgY291bnQgPSBzdGQ6Om1pbihsZW5ndGggLSBzdGQ6Om1heCh0bywgZnJvbSks
IGZpbmFsIC0gZnJvbSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQotICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZl
ckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNo
ZWRFcnJvck1lc3NhZ2UpOwogCiAgICAgdHlwZW5hbWUgVmlld0NsYXNzOjpFbGVtZW50VHlwZSog
YXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3RvcigpOwogICAgIG1lbW1vdmUoYXJyYXkgKyB0
bywgYXJyYXkgKyBmcm9tLCBjb3VudCAqIHRoaXNPYmplY3QtPmVsZW1lbnRTaXplKTsKIAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVu
Y0luY2x1ZGVzKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0Ns
YXNzKj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1
dGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5
cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVy
SGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRo
aXNPYmplY3QtPmxlbmd0aCgpOwogCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlVG9G
aW5kID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSB2YWx1ZVRvRmluZCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBl
ZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDEpLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQo
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJy
YXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVl
bkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKIAogICAgIHR5cGVuYW1lIFZpZXdDbGFzczo6RWxlbWVu
dFR5cGUqIGFycmF5ID0gdGhpc09iamVjdC0+dHlwZWRWZWN0b3IoKTsKICAgICBhdXRvIHRhcmdl
dE9wdGlvbiA9IFZpZXdDbGFzczo6dG9BZGFwdG9yTmF0aXZlRnJvbVZhbHVlV2l0aG91dENvZXJj
aW9uKHZhbHVlVG9GaW5kKTsKQEAgLTIyNiwyNiArMjI1LDI2IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMoVk0mIHZt
LCBFeGVjCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZihWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDIyLjIuMy4xMwotICAgIFZpZXdDbGFz
cyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7Cisg
ICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFz
QmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVy
cm9yTWVzc2FnZSk7CiAKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKLSAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJFeHBlY3RlZCBhdCBsZWFzdCBv
bmUgYXJndW1lbnQiX3MpOworICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJFeHBl
Y3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQiX3MpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
dGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+
YXJndW1lbnQoMCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBhcmd1bWVudENsYW1wZWRJbmRleEZy
b21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7CisgICAgSlNWYWx1ZSB2YWx1ZVRvRmluZCA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgdW5zaWduZWQgaW5kZXggPSBhcmd1bWVudENs
YW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgxKSwgbGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVl
bkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9y
TWVzc2FnZSk7CiAKICAgICB0eXBlbmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBlKiBhcnJheSA9
IHRoaXNPYmplY3QtPnR5cGVkVmVjdG9yKCk7CiAgICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3
Q2xhc3M6OnRvQWRhcHRvck5hdGl2ZUZyb21WYWx1ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmlu
ZCk7CkBAIC0yNjMsNjUgKzI2Miw2NSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luZGV4T2YoVk0mIHZtLCBFeGVjUwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0pvaW4oVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvRnVuY0pvaW4oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhl
Yy0+dGhpc1ZhbHVlKCkpOworICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3
Q2xhc3MqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAodGhpc09iamVjdC0+aXNO
ZXV0ZXJlZCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
dHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHR5cGVkQXJyYXlCdWZm
ZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwogCiAgICAgLy8gMjIuMi4zLjE0CiAgICAg
YXV0byBqb2luV2l0aFNlcGFyYXRvciA9IFsmXSAoU3RyaW5nVmlldyBzZXBhcmF0b3IpIC0+IEVu
Y29kZWRKU1ZhbHVlIHsKLSAgICAgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZp
ZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICAgICAgVmlld0NsYXNzKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKIAotICAgICAgICBKU1N0
cmluZ0pvaW5lciBqb2luZXIoKmV4ZWMsIHNlcGFyYXRvciwgbGVuZ3RoKTsKKyAgICAgICAgSlNT
dHJpbmdKb2luZXIgam9pbmVyKGdsb2JhbE9iamVjdCwgc2VwYXJhdG9yLCBsZW5ndGgpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBq
b2luZXIuYXBwZW5kKCpleGVjLCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSkpOworICAg
ICAgICAgICAgam9pbmVyLmFwcGVuZChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPmdldEluZGV4
UXVpY2tseShpKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShqb2luZXIuam9pbigqZXhlYykpKTsKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoam9pbmVyLmpvaW4oZ2xvYmFsT2Jq
ZWN0KSkpOwogICAgIH07CiAKLSAgICBKU1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gZXhlYy0+YXJn
dW1lbnQoMCk7CisgICAgSlNWYWx1ZSBzZXBhcmF0b3JWYWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CiAgICAgaWYgKHNlcGFyYXRvclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAg
Y29uc3QgTENoYXIqIGNvbW1hID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIsIik7
CiAgICAgICAgIHJldHVybiBqb2luV2l0aFNlcGFyYXRvcih7IGNvbW1hLCAxIH0pOwogICAgIH0K
IAotICAgIEpTU3RyaW5nKiBzZXBhcmF0b3JTdHJpbmcgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmlu
ZyhleGVjKTsKKyAgICBKU1N0cmluZyogc2VwYXJhdG9yU3RyaW5nID0gc2VwYXJhdG9yVmFsdWUu
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVm
ZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKLSAgICBhdXRvIHZpZXdXaXRoU3RyaW5n
ID0gc2VwYXJhdG9yU3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZXhlYyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHR5cGVkQXJy
YXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAgIGF1dG8gdmlld1dpdGhT
dHJpbmcgPSBzZXBhcmF0b3JTdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhnbG9iYWxP
YmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIHJldHVybiBqb2luV2l0aFNlcGFyYXRvcih2aWV3V2l0aFN0cmluZy52aWV3KTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG9GdW5jTGFzdEluZGV4T2YoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuMTYKLSAgICBWaWV3Q2xhc3Mq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAg
IFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpKTsKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0Jl
ZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJv
ck1lc3NhZ2UpOwogCi0gICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiRXhwZWN0ZWQgYXQgbGVhc3Qgb25l
IGFyZ3VtZW50Il9zKTsKKyAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRXhwZWN0
ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50Il9zKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRo
aXNPYmplY3QtPmxlbmd0aCgpOwogCi0gICAgSlNWYWx1ZSB2YWx1ZVRvRmluZCA9IGV4ZWMtPmFy
Z3VtZW50KDApOworICAgIEpTVmFsdWUgdmFsdWVUb0ZpbmQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOwogCiAgICAgaW50IGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDIpIHsKLSAgICAgICAgSlNWYWx1ZSBmcm9tVmFsdWUgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKTsKLSAgICAgICAgZG91YmxlIGZyb21Eb3VibGUgPSBmcm9tVmFsdWUu
dG9JbnRlZ2VyKGV4ZWMpOworICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA+PSAy
KSB7CisgICAgICAgIEpTVmFsdWUgZnJvbVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgxKTsKKyAgICAgICAgZG91YmxlIGZyb21Eb3VibGUgPSBmcm9tVmFsdWUudG9JbnRlZ2Vy
KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoZnJvbURvdWJsZSA8IDApIHsKICAgICAgICAgICAg
IGZyb21Eb3VibGUgKz0gbGVuZ3RoOwpAQCAtMzMzLDcgKzMzMiw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jTGFzdEluZGV4T2Yo
Vk0mIHZtLCBFCiAgICAgfQogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlCdWZm
ZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFj
aGVkRXJyb3JNZXNzYWdlKTsKIAogICAgIGF1dG8gdGFyZ2V0T3B0aW9uID0gVmlld0NsYXNzOjp0
b0FkYXB0b3JOYXRpdmVGcm9tVmFsdWVXaXRob3V0Q29lcmNpb24odmFsdWVUb0ZpbmQpOwogICAg
IGlmICghdGFyZ2V0T3B0aW9uKQpAQCAtMzUyLDUxICszNTEsNTEgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihW
TSYgdm0sIEUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCdWZm
ZXIoVk0mLCBFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J1ZmZlcihWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIC8vIDIyLjIu
My4zCi0gICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0Ns
YXNzKj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRoaXNPYmplY3QtPnBvc3NpYmx5U2hhcmVkSlNCdWZmZXIoZXhlYykpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+cG9zc2libHlTaGFyZWRKU0J1ZmZlcihnbG9i
YWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNM
ZW5ndGgoVk0mLCBFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0xlbmd0aChWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgLy8gMjIuMi4zLjE3Ci0gICAg
Vmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1
ZSgpKTsKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdD
bGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG9HZXR0ZXJGdW5jQnl0ZUxlbmd0aChWTSYsIEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5j
Qnl0ZUxlbmd0aChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CiAgICAgLy8gMjIuMi4zLjIKLSAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmll
d0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9
IGpzQ2FzdDxWaWV3Q2xhc3MqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKIAogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZU9mZnNldChWTSYs
IEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZU9mZnNldChWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgLy8gMjIuMi4zLjMKLSAgICBWaWV3Q2xh
c3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwor
ICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGhp
c09iamVjdC0+Ynl0ZU9mZnNldCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFz
cz4KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG9GdW5jUmV2ZXJzZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jUmV2ZXJzZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
Ly8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKy8vICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
Ly8gMjIuMi4zLjIxCi0gICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZpZXdDbGFz
cyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8Vmlld0NsYXNzKj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKHRoaXNPYmpl
Y3QtPmlzTmV1dGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0eXBlZEFy
cmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKIAogICAgIHR5cGVuYW1lIFZp
ZXdDbGFzczo6RWxlbWVudFR5cGUqIGFycmF5ID0gdGhpc09iamVjdC0+dHlwZWRWZWN0b3IoKTsK
ICAgICBzdGQ6OnJldmVyc2UoYXJyYXksIGFycmF5ICsgdGhpc09iamVjdC0+bGVuZ3RoKCkpOwpA
QCAtNDA1LDE1ICs0MDQsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNSZXZlcnNlKFZNJiB2bSwgRXhlY1MKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5l
cmljVHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1NvcnQoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZh
dGVGdW5jU29ydChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKy8vICAgIFZNJiB2
bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4zLjI1Ci0gICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBWaWV3Q2xhc3Mq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7
CiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRF
cnJvck1lc3NhZ2UpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsK
IAogICAgIHRoaXNPYmplY3QtPnNvcnQoKTsKIApAQCAtNDIxLDI2ICs0MjAsMjUgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1Nv
cnQoVk0mIHZtLCBFeGVjU3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNT
bGljZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuMjYKLSAgICBK
U0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkp
OwogCi0gICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0Ns
YXNzKj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1
dGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5
cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVy
SGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKIAogICAgIHVuc2lnbmVkIHRoaXNMZW5ndGgg
PSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKIAotICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRD
bGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCB0aGlzTGVuZ3RoKTsKKyAgICB1bnNp
Z25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCB0aGlzTGVuZ3RoKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICB1bnNpZ25lZCBlbmQgPSBh
cmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIHRoaXNMZW5ndGgsIHRo
aXNMZW5ndGgpOworICAgIHVuc2lnbmVkIGVuZCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0
YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLCB0aGlzTGVuZ3Ro
LCB0aGlzTGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVl
bkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9y
TWVzc2FnZSk7CiAKICAgICAvLyBDbGFtcCBlbmQgdG8gYmVnaW4uCiAgICAgZW5kID0gc3RkOjpt
YXgoYmVnaW4sIGVuZCk7CkBAIC00NTIsMTUgKzQ1MCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NsaWNlKFZNJiB2bSwgRXhl
Y1N0YQogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGxlbmd0aCkpOwogICAgIEFTU0VSVCghYXJn
cy5oYXNPdmVyZmxvd2VkKCkpOwogCi0gICAgSlNBcnJheUJ1ZmZlclZpZXcqIHJlc3VsdCA9IHNw
ZWNpZXNDb25zdHJ1Y3QoZXhlYywgdGhpc09iamVjdCwgYXJncywgWyZdKCkgewotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlT
dHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOwotICAgICAgICByZXR1
cm4gVmlld0NsYXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3Ro
KTsKKyAgICBKU0FycmF5QnVmZmVyVmlldyogcmVzdWx0ID0gc3BlY2llc0NvbnN0cnVjdChnbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QsIGFyZ3MsIFsmXSgpIHsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpU
eXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgICAgICByZXR1cm4gVmlld0NsYXNzOjpjcmVhdGVV
bmluaXRpYWxpemVkKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBsZW5ndGgpOwogICAgIH0pOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAg
QVNTRVJUKCFyZXN1bHQtPmlzTmV1dGVyZWQoKSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1
dGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIHR5
cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOworICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVy
SGFzQmVlbkRldGFjaGVkRXJyb3JNZXNzYWdlKTsKIAogICAgIC8vIFdlIHJldHVybiBlYXJseSBo
ZXJlIHNpbmNlIHdlIGRvbid0IGFsbG9jYXRlIGEgYmFja2luZyBzdG9yZSBpZiBsZW5ndGggaXMg
MCBhbmQgbWVtbW92ZSBkb2VzIG5vdCBsaWtlIG51bGxwdHJzCiAgICAgaWYgKCFsZW5ndGgpCkBA
IC00NzEsMzkgKzQ2OSwzOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvRnVuY1NsaWNlKFZNJiB2bSwgRXhlY1N0YQogICAgIHN3aXRjaCAo
cmVzdWx0LT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKICAgICBjYXNl
IFR5cGVJbnQ4OgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0lu
dDhBcnJheSo+KHJlc3VsdCktPnNldChleGVjLCAwLCB0aGlzT2JqZWN0LCBiZWdpbiwgbGVuZ3Ro
LCBDb3B5VHlwZTo6TGVmdFRvUmlnaHQpOworICAgICAgICBqc0Nhc3Q8SlNJbnQ4QXJyYXkqPihy
ZXN1bHQpLT5zZXQoZ2xvYmFsT2JqZWN0LCAwLCB0aGlzT2JqZWN0LCBiZWdpbiwgbGVuZ3RoLCBD
b3B5VHlwZTo6TGVmdFRvUmlnaHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiAgICAgY2FzZSBUeXBlSW50MTY6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICAgICAganNDYXN0PEpTSW50MTZBcnJheSo+KHJlc3VsdCktPnNldChleGVjLCAwLCB0aGlzT2Jq
ZWN0LCBiZWdpbiwgbGVuZ3RoLCBDb3B5VHlwZTo6TGVmdFRvUmlnaHQpOworICAgICAgICBqc0Nh
c3Q8SlNJbnQxNkFycmF5Kj4ocmVzdWx0KS0+c2V0KGdsb2JhbE9iamVjdCwgMCwgdGhpc09iamVj
dCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIGNhc2UgVHlwZUludDMyOgogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpzQ2FzdDxKU0ludDMyQXJyYXkqPihyZXN1bHQpLT5z
ZXQoZXhlYywgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1Jp
Z2h0KTsKKyAgICAgICAganNDYXN0PEpTSW50MzJBcnJheSo+KHJlc3VsdCktPnNldChnbG9iYWxP
YmplY3QsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdo
dCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICBjYXNlIFR5
cGVVaW50ODoKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8SlNVaW50
OEFycmF5Kj4ocmVzdWx0KS0+c2V0KGV4ZWMsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBsZW5ndGgs
IENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7CisgICAgICAgIGpzQ2FzdDxKU1VpbnQ4QXJyYXkqPihy
ZXN1bHQpLT5zZXQoZ2xvYmFsT2JqZWN0LCAwLCB0aGlzT2JqZWN0LCBiZWdpbiwgbGVuZ3RoLCBD
b3B5VHlwZTo6TGVmdFRvUmlnaHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgogICAgICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgICAgIGpzQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4ocmVzdWx0KS0+c2V0KGV4
ZWMsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7
CisgICAgICAgIGpzQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4ocmVzdWx0KS0+c2V0KGdsb2Jh
bE9iamVjdCwgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1Jp
Z2h0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIGNhc2Ug
VHlwZVVpbnQxNjoKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8SlNV
aW50MTZBcnJheSo+KHJlc3VsdCktPnNldChleGVjLCAwLCB0aGlzT2JqZWN0LCBiZWdpbiwgbGVu
Z3RoLCBDb3B5VHlwZTo6TGVmdFRvUmlnaHQpOworICAgICAgICBqc0Nhc3Q8SlNVaW50MTZBcnJh
eSo+KHJlc3VsdCktPnNldChnbG9iYWxPYmplY3QsIDAsIHRoaXNPYmplY3QsIGJlZ2luLCBsZW5n
dGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKICAgICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICAgICAganNDYXN0PEpTVWludDMyQXJyYXkqPihyZXN1bHQpLT5zZXQoZXhlYywgMCwg
dGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5cGU6OkxlZnRUb1JpZ2h0KTsKKyAgICAg
ICAganNDYXN0PEpTVWludDMyQXJyYXkqPihyZXN1bHQpLT5zZXQoZ2xvYmFsT2JqZWN0LCAwLCB0
aGlzT2JqZWN0LCBiZWdpbiwgbGVuZ3RoLCBDb3B5VHlwZTo6TGVmdFRvUmlnaHQpOwogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgY2FzZSBUeXBlRmxvYXQzMjoK
ICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkq
PihyZXN1bHQpLT5zZXQoZXhlYywgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5
cGU6OkxlZnRUb1JpZ2h0KTsKKyAgICAgICAganNDYXN0PEpTRmxvYXQzMkFycmF5Kj4ocmVzdWx0
KS0+c2V0KGdsb2JhbE9iamVjdCwgMCwgdGhpc09iamVjdCwgYmVnaW4sIGxlbmd0aCwgQ29weVR5
cGU6OkxlZnRUb1JpZ2h0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogICAgIGNhc2UgVHlwZUZsb2F0NjQ6CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAg
ICAganNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ocmVzdWx0KS0+c2V0KGV4ZWMsIDAsIHRoaXNPYmpl
Y3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7CisgICAgICAgIGpzQ2Fz
dDxKU0Zsb2F0NjRBcnJheSo+KHJlc3VsdCktPnNldChnbG9iYWxPYmplY3QsIDAsIHRoaXNPYmpl
Y3QsIGJlZ2luLCBsZW5ndGgsIENvcHlUeXBlOjpMZWZ0VG9SaWdodCk7CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTExLDE2ICs1MDksMTUgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTbGljZShWTSYg
dm0sIEV4ZWNTdGEKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1N1YmFy
cmF5Q3JlYXRlKFZNJnZtLCBFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0m
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDIy
LjIuMy4yMwotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhl
Yy0+anNDYWxsZWUoKSk7CiAKLSAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmll
d0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9
IGpzQ2FzdDxWaWV3Q2xhc3MqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAodGhp
c09iamVjdC0+aXNOZXV0ZXJlZCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgdHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHR5
cGVkQXJyYXlCdWZmZXJIYXNCZWVuRGV0YWNoZWRFcnJvck1lc3NhZ2UpOwogCiAgICAgLy8gR2V0
IHRoZSBsZW5ndGggaGVyZTsgbGF0ZXIgYXNzZXJ0IHRoYXQgdGhlIGxlbmd0aCBkaWRuJ3QgY2hh
bmdlLgogICAgIHVuc2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKQEAg
LTUyOCwxMSArNTI1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShWTSZ2CiAgICAgLy8gSSB3b3Vs
ZCBhc3NlcnQgdGhhdCB0aGUgYXJndW1lbnRzIGFyZSBpbnRlZ2VycyBoZXJlIGJ1dCB0aGF0J3Mg
bm90IHRydWUgc2luY2UKICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3Nl
Yy10b2ludGVnZXIgYWxsb3dzIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgogICAgIC8vIHRv
IGJlICsvLSBJbmZpbml0eSBhbmQgLTAuCi0gICAgQVNTRVJUKGV4ZWMtPmFyZ3VtZW50KDApLmlz
TnVtYmVyKCkpOwotICAgIEFTU0VSVChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpIHx8
IGV4ZWMtPmFyZ3VtZW50KDEpLmlzTnVtYmVyKCkpOwotICAgIHVuc2lnbmVkIGJlZ2luID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCB0aGlzTGVuZ3RoKTsKKyAg
ICBBU1NFUlQoY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc051bWJlcigpKTsKKyAgICBBU1NFUlQo
Y2FsbEZyYW1lLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpIHx8IGNhbGxGcmFtZS0+YXJndW1l
bnQoMSkuaXNOdW1iZXIoKSk7CisgICAgdW5zaWduZWQgYmVnaW4gPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwg
dGhpc0xlbmd0aCk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICB1bnNpZ25l
ZCBlbmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIHRoaXNM
ZW5ndGgsIHRoaXNMZW5ndGgpOworICAgIHVuc2lnbmVkIGVuZCA9IGFyZ3VtZW50Q2xhbXBlZElu
ZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLCB0
aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CkBAIC01NDks
MzAgKzU0NiwzMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFy
cmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0mdgogCiAgICAgdW5zaWduZWQgbmV3
Qnl0ZU9mZnNldCA9IHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSArIG9mZnNldCAqIFZpZXdDbGFz
czo6ZWxlbWVudFNpemU7CiAKLSAgICBKU09iamVjdCogZGVmYXVsdENvbnN0cnVjdG9yID0gY2Fs
bGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheUNvbnN0cnVjdG9yKFZpZXdDbGFzczo6VHlw
ZWRBcnJheVN0b3JhZ2VUeXBlKTsKLSAgICBKU1ZhbHVlIHNwZWNpZXMgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgyKTsKKyAgICBKU09iamVjdCogZGVmYXVsdENvbnN0cnVjdG9yID0gZ2xvYmFs
T2JqZWN0LT50eXBlZEFycmF5Q29uc3RydWN0b3IoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUpOworICAgIEpTVmFsdWUgc3BlY2llcyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMik7CiAgICAgaWYgKHNwZWNpZXMgPT0gZGVmYXVsdENvbnN0cnVjdG9yKSB7Ci0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJh
eVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKFZp
ZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKIAogICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZSgKLSAgICAgICAg
ICAgIGV4ZWMsIHN0cnVjdHVyZSwgV1RGTW92ZShhcnJheUJ1ZmZlciksCisgICAgICAgICAgICBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV1RGTW92ZShhcnJheUJ1ZmZlciksCiAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkgKyBvZmZzZXQgKiBWaWV3Q2xhc3M6OmVsZW1lbnRT
aXplLAogICAgICAgICAgICAgbGVuZ3RoKSkpOwogICAgIH0KIAogICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodm0ubV90eXBlZEFycmF5Q29udHJvbGxlci0+
dG9KUyhleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3Qodm0pLCBhcnJheUJ1ZmZlci5nZXQo
KSkpOworICAgIGFyZ3MuYXBwZW5kKHZtLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoZ2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3Qodm0pLCBhcnJheUJ1ZmZlci5nZXQo
KSkpOwogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKG5ld0J5dGVPZmZzZXQpKTsKICAgICBhcmdz
LmFwcGVuZChqc051bWJlcihsZW5ndGgpKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dl
ZCgpKTsKIAotICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3QoZXhlYywgc3BlY2llcywg
YXJncywgInNwZWNpZXMgaXMgbm90IGEgY29uc3RydWN0b3IiKTsKKyAgICBKU09iamVjdCogcmVz
dWx0ID0gY29uc3RydWN0KGdsb2JhbE9iamVjdCwgc3BlY2llcywgYXJncywgInNwZWNpZXMgaXMg
bm90IGEgY29uc3RydWN0b3IiKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3
Kj4odm0sIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
IAotICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAic3BlY2llcyBjb25zdHJ1Y3RvciBk
aWQgbm90IHJldHVybiBhIFR5cGVkQXJyYXkgVmlldyJfcyk7CisgICAgdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgInNwZWNpZXMgY29uc3RydWN0b3IgZGlkIG5vdCByZXR1cm4g
YSBUeXBlZEFycmF5IFZpZXciX3MpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwCmluZGV4IDZhNjg1OTA2NmZjNzdjOTM0
YjljZDA2ODY2ZmVkZTQwYTJhOWNjODMuLjlhODFjOTY5M2EwZmNkNWUzMjg5YzkxZjA2MzRiYTE3
NmIzZTQ1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAKQEAgLTM3LDIwICszNywyMCBAQCB2
b2lkIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAg
ICBzdGF0aWNfY2FzdDxKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpLT5KU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudDo6fkpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCk7CiB9CiAK
LWJvb2wgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQqPihvYmplY3QpOwogICAgIHJldHVybiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQ6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwog
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAgICAgYm9vbCBhbHdheXNUaHJvd1doZW5Bc3NpZ25pbmdU
b0NvbnN0UHJvcGVydHkgPSB0cnVlOwogICAgIGJvb2wgaWdub3JlQ29uc3RBc3NpZ25tZW50RXJy
b3IgPSBzbG90LmlzSW5pdGlhbGl6YXRpb24oKTsKICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNl
OwotICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGFsd2F5c1Rocm93V2hlbkFzc2lnbmluZ1RvQ29uc3RQcm9w
ZXJ0eSwgaWdub3JlQ29uc3RBc3NpZ25tZW50RXJyb3IsIHB1dFJlc3VsdCk7CisgICAgc3ltYm9s
VGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBhbHdheXNUaHJvd1doZW5Bc3NpZ25pbmdUb0NvbnN0UHJvcGVydHks
IGlnbm9yZUNvbnN0QXNzaWdubWVudEVycm9yLCBwdXRSZXN1bHQpOwogICAgIHJldHVybiBwdXRS
ZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oCmluZGV4IGY2N2I3ZTk2OWRkMGYwZmFmNjJk
NzNkYWNjMDkzMTg4OGUxZDIxZDAuLjM5NzQ5NjM2ZjhlMzkzMzI4YTk3NzM3MTE1NzM3MDJlYTVi
Y2NhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaApAQCAtNDUsOCArNDUsOCBAQCBjbGFzcyBKU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudCBmaW5hbCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwog
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICAvLyBXZSBkb24ndCBuZWVk
IGEgZGVzdHJ1Y3RvciBiZWNhdXNlIHdlIHVzZSBhIGZpbmFsaXplciBpbnN0ZWFkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IGIz
ZmM0MDQ3ZGIwNGQyOTVmMGI2MDU1MTllZTQ5ZTEwYmIyMmQyMTcuLjdlZmY1N2Q4MzRmNThkMTNm
ODVhZmU3ZjY5ZWM5Njc4NzYxNGJhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTI2NSw3ICsyNjUsNyBAQCBzdGF0aWMgSlNW
YWx1ZSBjcmVhdGVSZWZsZWN0UHJvcGVydHkoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogc3Rh
dGljIEpTVmFsdWUgY3JlYXRlQ29uc29sZVByb3BlcnR5KFZNJiB2bSwgSlNPYmplY3QqIG9iamVj
dCkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0
Kj4ob2JqZWN0KTsKLSAgICByZXR1cm4gQ29uc29sZU9iamVjdDo6Y3JlYXRlKHZtLCBnbG9iYWws
IENvbnNvbGVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsLCBjb25zdHJ1Y3RFbXB0
eU9iamVjdChnbG9iYWwtPmdsb2JhbEV4ZWMoKSkpKTsKKyAgICByZXR1cm4gQ29uc29sZU9iamVj
dDo6Y3JlYXRlKHZtLCBnbG9iYWwsIENvbnNvbGVPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwg
Z2xvYmFsLCBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWwpKSk7CiB9CiAKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VCb3VuZEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjgyLDE3ICsyODIsMTcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZUJvdW5kRnVuY3Rpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAgICBBU1NFUlQobGVuZ3RoVmFsdWUuaXNJbnQz
MkFzQW55SW50KCkpOwogICAgIGludDMyX3QgbGVuZ3RoID0gbGVuZ3RoVmFsdWUuYXNJbnQzMkFz
QW55SW50KCk7CiAKLSAgICBTdHJpbmcgbmFtZSA9IG5hbWVTdHJpbmctPnZhbHVlKGNhbGxGcmFt
ZSk7CisgICAgU3RyaW5nIG5hbWUgPSBuYW1lU3RyaW5nLT52YWx1ZShnbG9iYWxPYmplY3QpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwg
Y2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHRhcmdldCwgYm91bmRUaGlzLCBib3VuZEFyZ3MuaXND
ZWxsKCkgPyBqc0Nhc3Q8SlNBcnJheSo+KGJvdW5kQXJncykgOiBudWxscHRyLCBsZW5ndGgsIFdU
Rk1vdmUobmFtZSkpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgdGFyZ2V0LCBi
b3VuZFRoaXMsIGJvdW5kQXJncy5pc0NlbGwoKSA/IGpzQ2FzdDxKU0FycmF5Kj4oYm91bmRBcmdz
KSA6IG51bGxwdHIsIGxlbmd0aCwgV1RGTW92ZShuYW1lKSkpKTsKIH0KIAogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaGFzT3duTGVuZ3RoUHJvcGVydHkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBhc09iamVjdChjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0YXJnZXQtPmhhc093blByb3BlcnR5KGNhbGxGcmFtZSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRh
cmdldC0+aGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgpKSk7CiB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC00NTAsMTEgKzQ1MCwxMSBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpzZXRHbG9iYWxUaGlzKFZNJiB2bSwgSlNPYmplY3QqIGdsb2Jh
bFRoaXMpCiAgICAgbV9nbG9iYWxUaGlzLnNldCh2bSwgdGhpcywgZ2xvYmFsVGhpcyk7CiB9CiAK
LXN0YXRpYyBHZXR0ZXJTZXR0ZXIqIGdldEdldHRlckJ5SWQoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCitzdGF0aWMgR2V0dGVyU2V0dGVy
KiBnZXRHZXR0ZXJCeUlkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBi
YXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEpTVmFsdWUoYmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKLSAgICBiYXNlVmFsdWUuZ2V0
UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KTsKKyAgICBiYXNlVmFsdWUuZ2V0UHJvcGVy
dHlTbG90KGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOwogICAgIHJldHVybiBqc0Nhc3Q8R2V0
dGVyU2V0dGVyKj4oc2xvdC5nZXRQdXJlUmVzdWx0KCkpOwogfQogCkBAIC00ODYsMTIgKzQ4Niw2
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgIG1fY2FsbGVlU3RydWN0
dXJlLnNldCh2bSwgdGhpcywgSlNDYWxsZWU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNO
dWxsKCkpKTsKIAogICAgIG1fZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LnNldCh2bSwgdGhpcywg
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQ6OmNyZWF0ZSh2bSwgSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQ6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcyksIHRoaXMpKTsKLSAgICAvLyBOZWVk
IHRvIGNyZWF0ZSB0aGUgY2FsbGVlIHN0cnVjdHVyZSAoYWJvdmUpIGJlZm9yZSBjcmVhdGluZyB0
aGUgY2FsbGVlLgotICAgIEpTQ2FsbGVlKiBnbG9iYWxDYWxsZWUgPSBKU0NhbGxlZTo6Y3JlYXRl
KHZtLCB0aGlzLCBnbG9iYWxTY29wZSgpKTsKLSAgICBtX2dsb2JhbENhbGxlZS5zZXQodm0sIHRo
aXMsIGdsb2JhbENhbGxlZSk7Ci0KLSAgICBFeGVjU3RhdGU6OmluaXRHbG9iYWxFeGVjKEpTR2xv
YmFsT2JqZWN0OjpnbG9iYWxFeGVjKCksIGdsb2JhbENhbGxlZSk7Ci0gICAgRXhlY1N0YXRlKiBl
eGVjID0gSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKTsKIAogICAgIEpTQ2FsbGVlKiBzdGFj
a092ZXJmbG93RnJhbWVDYWxsZWUgPSBKU0NhbGxlZTo6Y3JlYXRlKHZtLCB0aGlzLCBnbG9iYWxT
Y29wZSgpKTsKICAgICBtX3N0YWNrT3ZlcmZsb3dGcmFtZUNhbGxlZS5zZXQodm0sIHRoaXMsIHN0
YWNrT3ZlcmZsb3dGcmFtZUNhbGxlZSk7CkBAIC03NTUsMTIgKzc0OSwxNCBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICBKU0Z1bmN0aW9uKiB0aHJvd1R5cGVFcnJvckZ1
bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAwLCBTdHJpbmcoKSwgZ2xvYmFs
RnVuY1Rocm93VHlwZUVycm9yKTsKICAgICBtX3Rocm93VHlwZUVycm9yRnVuY3Rpb24uc2V0KHZt
LCB0aGlzLCB0aHJvd1R5cGVFcnJvckZ1bmN0aW9uKTsKIAotICAgIEpTQ2VsbCogZnVuY3Rpb25D
b25zdHJ1Y3RvciA9IEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgRnVuY3Rpb25Db25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSk7CisgICAgRnVuY3Rpb25Db25zdHJ1Y3Rv
ciogZnVuY3Rpb25Db25zdHJ1Y3RvciA9IEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZSh2bSwg
RnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSk7CisgICAgbV9mdW5j
dGlvbkNvbnN0cnVjdG9yLnNldCh2bSwgdGhpcywgZnVuY3Rpb25Db25zdHJ1Y3Rvcik7CiAKICAg
ICBBcnJheUNvbnN0cnVjdG9yKiBhcnJheUNvbnN0cnVjdG9yID0gQXJyYXlDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHZtLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRo
aXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBt
X3NwZWNpZXNHZXR0ZXJTZXR0ZXIuZ2V0KCkpOwogICAgIG1fYXJyYXlDb25zdHJ1Y3Rvci5zZXQo
dm0sIHRoaXMsIGFycmF5Q29uc3RydWN0b3IpOwogICAgIAogICAgIFJlZ0V4cENvbnN0cnVjdG9y
KiByZWdFeHBDb25zdHJ1Y3RvciA9IFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGUodm0sIFJlZ0V4
cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5
cGUuZ2V0KCkpLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSwgbV9zcGVjaWVzR2V0dGVyU2V0dGVy
LmdldCgpKTsKKyAgICBtX3JlZ0V4cENvbnN0cnVjdG9yLnNldCh2bSwgdGhpcywgcmVnRXhwQ29u
c3RydWN0b3IpOwogICAgIG1fcmVnRXhwR2xvYmFsRGF0YS5jYWNoZWRSZXN1bHQoKS5yZWNvcmQo
dm0sIHRoaXMsIG51bGxwdHIsIGpzRW1wdHlTdHJpbmcodm0pLCBNYXRjaFJlc3VsdCgwLCAwKSk7
CiAgICAgCiAjaWYgRU5BQkxFKFNIQVJFRF9BUlJBWV9CVUZGRVIpCkBAIC05MDAsNyArODk2LDcg
QEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9
IGZlYXR1cmVGbGFnID8gY2FwaXRhbE5hbWUKICAgICBtX21vZHVsZUxvYWRlci5pbml0TGF0ZXIo
CiAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxKU01vZHVsZUxvYWRlcj4mIGluaXQpIHsK
ICAgICAgICAgICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoaW5pdC52
bSk7Ci0gICAgICAgICAgICBpbml0LnNldChKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKGluaXQub3du
ZXItPmdsb2JhbEV4ZWMoKSwgaW5pdC52bSwgaW5pdC5vd25lciwgSlNNb2R1bGVMb2FkZXI6OmNy
ZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBqc051bGwoKSkpKTsKKyAgICAgICAg
ICAgIGluaXQuc2V0KEpTTW9kdWxlTG9hZGVyOjpjcmVhdGUoaW5pdC5vd25lciwgaW5pdC52bSwg
SlNNb2R1bGVMb2FkZXI6OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBqc051
bGwoKSkpKTsKICAgICAgICAgICAgIGNhdGNoU2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9u
KCk7CiAgICAgICAgIH0pOwogICAgIGlmIChPcHRpb25zOjpleHBvc2VJbnRlcm5hbE1vZHVsZUxv
YWRlcigpKQpAQCAtOTM4LDIwICs5MzQsMjAgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3Iq
IGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFnID8gY2FwaXRhbE5hbWUKICAg
ICBKU0Z1bmN0aW9uKiBwcml2YXRlRnVuY1NldEJ1Y2tldE5leHQgPSBKU0Z1bmN0aW9uOjpjcmVh
dGUodm0sIHRoaXMsIDAsIFN0cmluZygpLCBzZXRQcml2YXRlRnVuY1NldEJ1Y2tldE5leHQsIEpT
U2V0QnVja2V0TmV4dEludHJpbnNpYyk7CiAgICAgSlNGdW5jdGlvbiogcHJpdmF0ZUZ1bmNTZXRC
dWNrZXRLZXkgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDAsIFN0cmluZygpLCBzZXRQ
cml2YXRlRnVuY1NldEJ1Y2tldEtleSwgSlNTZXRCdWNrZXRLZXlJbnRyaW5zaWMpOwogCi0gICAg
R2V0dGVyU2V0dGVyKiByZWdFeHBQcm90b0ZsYWdzR2V0dGVyID0gZ2V0R2V0dGVyQnlJZChleGVj
LCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSwgdm0ucHJvcGVydHlOYW1lcy0+ZmxhZ3MpOworICAg
IEdldHRlclNldHRlciogcmVnRXhwUHJvdG9GbGFnc0dldHRlciA9IGdldEdldHRlckJ5SWQodGhp
cywgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzKTsKICAg
ICBjYXRjaFNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgR2V0dGVyU2V0dGVyKiByZWdF
eHBQcm90b0dsb2JhbEdldHRlciA9IGdldEdldHRlckJ5SWQoZXhlYywgbV9yZWdFeHBQcm90b3R5
cGUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPmdsb2JhbCk7CisgICAgR2V0dGVyU2V0dGVyKiBy
ZWdFeHBQcm90b0dsb2JhbEdldHRlciA9IGdldEdldHRlckJ5SWQodGhpcywgbV9yZWdFeHBQcm90
b3R5cGUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPmdsb2JhbCk7CiAgICAgY2F0Y2hTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwogICAgIG1fcmVnRXhwUHJvdG9HbG9iYWxHZXR0ZXIuc2V0KHZt
LCB0aGlzLCByZWdFeHBQcm90b0dsb2JhbEdldHRlcik7Ci0gICAgR2V0dGVyU2V0dGVyKiByZWdF
eHBQcm90b0lnbm9yZUNhc2VHZXR0ZXIgPSBnZXRHZXR0ZXJCeUlkKGV4ZWMsIG1fcmVnRXhwUHJv
dG90eXBlLmdldCgpLCB2bS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVDYXNlKTsKKyAgICBHZXR0ZXJT
ZXR0ZXIqIHJlZ0V4cFByb3RvSWdub3JlQ2FzZUdldHRlciA9IGdldEdldHRlckJ5SWQodGhpcywg
bV9yZWdFeHBQcm90b3R5cGUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPmlnbm9yZUNhc2UpOwog
ICAgIGNhdGNoU2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBHZXR0ZXJTZXR0ZXIqIHJl
Z0V4cFByb3RvTXVsdGlsaW5lR2V0dGVyID0gZ2V0R2V0dGVyQnlJZChleGVjLCBtX3JlZ0V4cFBy
b3RvdHlwZS5nZXQoKSwgdm0ucHJvcGVydHlOYW1lcy0+bXVsdGlsaW5lKTsKKyAgICBHZXR0ZXJT
ZXR0ZXIqIHJlZ0V4cFByb3RvTXVsdGlsaW5lR2V0dGVyID0gZ2V0R2V0dGVyQnlJZCh0aGlzLCBt
X3JlZ0V4cFByb3RvdHlwZS5nZXQoKSwgdm0ucHJvcGVydHlOYW1lcy0+bXVsdGlsaW5lKTsKICAg
ICBjYXRjaFNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgR2V0dGVyU2V0dGVyKiByZWdF
eHBQcm90b1NvdXJjZUdldHRlciA9IGdldEdldHRlckJ5SWQoZXhlYywgbV9yZWdFeHBQcm90b3R5
cGUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZSk7CisgICAgR2V0dGVyU2V0dGVyKiBy
ZWdFeHBQcm90b1NvdXJjZUdldHRlciA9IGdldEdldHRlckJ5SWQodGhpcywgbV9yZWdFeHBQcm90
b3R5cGUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZSk7CiAgICAgY2F0Y2hTY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwotICAgIEdldHRlclNldHRlciogcmVnRXhwUHJvdG9TdGlja3lH
ZXR0ZXIgPSBnZXRHZXR0ZXJCeUlkKGV4ZWMsIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpLCB2bS5w
cm9wZXJ0eU5hbWVzLT5zdGlja3kpOworICAgIEdldHRlclNldHRlciogcmVnRXhwUHJvdG9TdGlj
a3lHZXR0ZXIgPSBnZXRHZXR0ZXJCeUlkKHRoaXMsIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpLCB2
bS5wcm9wZXJ0eU5hbWVzLT5zdGlja3kpOwogICAgIGNhdGNoU2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKLSAgICBHZXR0ZXJTZXR0ZXIqIHJlZ0V4cFByb3RvVW5pY29kZUdldHRlciA9IGdldEdl
dHRlckJ5SWQoZXhlYywgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMt
PnVuaWNvZGUpOworICAgIEdldHRlclNldHRlciogcmVnRXhwUHJvdG9Vbmljb2RlR2V0dGVyID0g
Z2V0R2V0dGVyQnlJZCh0aGlzLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSwgdm0ucHJvcGVydHlO
YW1lcy0+dW5pY29kZSk7CiAgICAgY2F0Y2hTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAg
IG1fcmVnRXhwUHJvdG9Vbmljb2RlR2V0dGVyLnNldCh2bSwgdGhpcywgcmVnRXhwUHJvdG9Vbmlj
b2RlR2V0dGVyKTsKICAgICBKU09iamVjdCogYnVpbHRpblJlZ0V4cEV4ZWMgPSBhc09iamVjdCht
X3JlZ0V4cFByb3RvdHlwZS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5leGVjKS5h
c0NlbGwoKSk7CkBAIC0xMTIzLDEzICsxMTE5LDEyIEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVj
dG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1l
CiAKICAgICBhdXRvIHNldHVwQWRhcHRpdmVXYXRjaHBvaW50ID0gWyZdIChKU09iamVjdCogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIC0+IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHsK
ICAgICAgICAgLy8gUGVyZm9ybWluZyB0aGVzZSBnZXRzIHNob3VsZCBub3QgdGhyb3cuCi0gICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbEV4ZWMoKTsKICAgICAgICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAg
ICAgIGJvb2wgcmVzdWx0ID0gYmFzZS0+Z2V0T3duUHJvcGVydHlTbG90KGJhc2UsIGV4ZWMsIGlk
ZW50LCBzbG90KTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBiYXNlLT5nZXRPd25Qcm9wZXJ0eVNs
b3QoYmFzZSwgdGhpcywgaWRlbnQsIHNsb3QpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0KTsKICAgICAgICAgY2F0Y2hTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSk7Ci0gICAgICAgIEpT
VmFsdWUgZnVuY3Rpb25WYWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnQpOworICAgICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBzbG90LmdldFZhbHVlKHRoaXMsIGlkZW50KTsKICAg
ICAgICAgY2F0Y2hTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICBBU1NFUlQoanNE
eW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0sIGZ1bmN0aW9uVmFsdWUpKTsKIApAQCAtMTIxOCwz
NCArMTIxMywzNCBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJOYW1lICMjIENv
bnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQogICAgIGZpeHVwUHJvdG90eXBl
Q2hhaW5XaXRoT2JqZWN0UHJvdG90eXBlKHZtKTsKIH0KIAotYm9vbCBKU0dsb2JhbE9iamVjdDo6
cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTR2xvYmFs
T2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
Y2VsbCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVl
KSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAogICAgIGlmIChVTkxJS0VMWShpc1RoaXNW
YWx1ZUFsdGVyZWQoc2xvdCwgdGhpc09iamVjdCkpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhleGVjLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGdsb2JhbE9iamVjdCwg
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC50aGlzVmFsdWUoKSwgc2xvdC5p
c1N0cmljdE1vZGUoKSkpOwogCiAgICAgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgPSBz
bG90LmlzU3RyaWN0TW9kZSgpOwogICAgIGJvb2wgaWdub3JlUmVhZE9ubHlFcnJvcnMgPSBmYWxz
ZTsKICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgIGJvb2wgZG9uZSA9IHN5bWJvbFRh
YmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1
dFJlc3VsdCk7CisgICAgYm9vbCBkb25lID0gc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRT
ZXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRU
aHJvd1JlYWRPbmx5RXJyb3IsIGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOwogICAg
IEVYQ0VQVElPTl9BU1NFUlQoKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gKGRvbmUgJiYgIXB1dFJl
c3VsdCkpIHx8ICFzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IpOwogICAgIGlmIChkb25lKQogICAg
ICAgICByZXR1cm4gcHV0UmVzdWx0OwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFz
ZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKIH0KIAotYm9vbCBKU0dsb2JhbE9i
amVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCitib29sIEpTR2xvYmFsT2JqZWN0OjpkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwogICAgIFByb3BlcnR5U2xv
dCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlu
cXVpcnkpOwogICAgIC8vIHNpbGVudGx5IGlnbm9yZSBhdHRlbXB0cyB0byBhZGQgYWNjZXNzb3Jz
IGFsaWFzaW5nIHZhcnMuCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3Io
KSAmJiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwor
ICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQogCiB2b2lkIEpT
R2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCkBAIC0x
MjY0LDExICsxMjU5LDExIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZEdsb2JhbFZhcihjb25z
dCBJZGVudGlmaWVyJiBpZGVudCkKICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXRGb3JBc3NlcnQg
PT0gb2Zmc2V0KTsKIH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkRnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit2b2lkIEpTR2xvYmFs
T2JqZWN0OjphZGRGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9k
ZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFi
bGUpOwotICAgIG1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJv
cGVydHlOYW1lKTsKKyAgICBtZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1l
KTsKIH0KIApAQCAtMTY2OSw3ICsxNjY0LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiAgICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQpOwogICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2xvYmFsU2NvcGVFeHRlbnNpb24pOwotICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2xvYmFsQ2FsbGVlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3N0YWNrT3ZlcmZsb3dGcmFtZUNhbGxlZSk7CiAgICAgdGhpc09i
amVjdC0+bV9ldmFsRXJyb3JTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVj
dC0+bV9yYW5nZUVycm9yU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwpAQCAtMTY3Nyw3ICsxNjcx
LDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKICAgICB0aGlzT2JqZWN0LT5tX3N5bnRheEVycm9yU3RydWN0
dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fdHlwZUVycm9yU3RydWN0dXJl
LnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fVVJJRXJyb3JTdHJ1Y3R1cmUudmlz
aXQodmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9hcnJheUNvbnN0
cnVjdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3JlZ0V4cENvbnN0cnVj
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX29iamVjdENvbnN0cnVjdG9y
KTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uQ29uc3RydWN0b3Ip
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvbWlzZUNvbnN0cnVjdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2ludGVybmFsUHJvbWlzZUNvbnN0cnVj
dG9yKTsKIApAQCAtMTgxNCwxNSArMTgxMSwxMCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdGhpc09i
amVjdC0+bV9yZWdFeHBHbG9iYWxEYXRhLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi1F
eGVjU3RhdGUqIEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkKLXsKLSAgICByZXR1cm4gQ2Fs
bEZyYW1lOjpjcmVhdGUobV9nbG9iYWxDYWxsRnJhbWUpOwotfQotCiB2b2lkIEpTR2xvYmFsT2Jq
ZWN0OjpleHBvc2VEb2xsYXJWTShWTSYgdm0pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZ19qc2ND
b25maWcucmVzdHJpY3RlZE9wdGlvbnNFbmFibGVkICYmIE9wdGlvbnM6OnVzZURvbGxhclZNKCkp
OwotICAgIGlmIChoYXNPd25Qcm9wZXJ0eShnbG9iYWxFeGVjKCksIHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmRvbGxhclZNUHJpdmF0ZU5hbWUoKSkpCisgICAgaWYgKGhhc093blBy
b3BlcnR5KHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmRvbGxhclZNUHJp
dmF0ZU5hbWUoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTRG9sbGFyVk0qIGRvbGxhclZN
ID0gSlNEb2xsYXJWTTo6Y3JlYXRlKHZtLCBKU0RvbGxhclZNOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CkBAIC0xODYzLDkgKzE4NTUsOSBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKEdsb2JhbFByb3BlcnR5SW5mbyog
Z2xvYmFscywgaW50IGNvdW50KQogICAgIH0KIH0KIAotYm9vbCBKU0dsb2JhbE9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU0dsb2JhbE9i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKLSAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KG9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQoanNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
b2JqZWN0KSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KQEAgLTE4NzUsMTIgKzE4NjcsMTIgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6Y2xlYXJSYXJlRGF0YShKU0NlbGwqIGNlbGwpCiAgICAganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCktPm1fcmFyZURhdGEgPSBudWxscHRyOwogfQogCi12
b2lkIEpTR2xvYmFsT2JqZWN0Ojp0cnlJbnN0YWxsQXJyYXlTcGVjaWVzV2F0Y2hwb2ludChFeGVj
U3RhdGUqIGV4ZWMpCit2b2lkIEpTR2xvYmFsT2JqZWN0Ojp0cnlJbnN0YWxsQXJyYXlTcGVjaWVz
V2F0Y2hwb2ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2FycmF5UHJvdG90eXBlQ29uc3RydWN0b3JXYXRjaHBvaW50KTsKICAgICBSRUxF
QVNFX0FTU0VSVCghbV9hcnJheUNvbnN0cnVjdG9yU3BlY2llc1dhdGNocG9pbnQpOwogCi0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gRmlyc3Qg
d2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgQXJyYXkucHJvdG90eXBlLmNvbnN0cnVjdG9y
IHByb3BlcnR5IHBvaW50cyB0byBBcnJheQpAQCAtMTkwMCwxMSArMTg5MiwxMSBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0Ojp0cnlJbnN0YWxsQXJyYXlTcGVjaWVzV2F0Y2hwb2ludChFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgfTsKIAogICAgIFByb3BlcnR5U2xvdCBjb25zdHJ1Y3RvclNsb3QoYXJyYXlQ
cm90b3R5cGUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwot
ICAgIGFycmF5UHJvdG90eXBlLT5nZXRPd25Qcm9wZXJ0eVNsb3QoYXJyYXlQcm90b3R5cGUsIGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvclNsb3QpOworICAg
IGFycmF5UHJvdG90eXBlLT5nZXRPd25Qcm9wZXJ0eVNsb3QoYXJyYXlQcm90b3R5cGUsIGdsb2Jh
bE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIGNvbnN0cnVjdG9yU2xvdCk7
CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBpZiAoY29uc3RydWN0b3JTbG90
LnNsb3RCYXNlKCkgIT0gYXJyYXlQcm90b3R5cGUKICAgICAgICAgfHwgIWNvbnN0cnVjdG9yU2xv
dC5pc0NhY2hlYWJsZVZhbHVlKCkKLSAgICAgICAgfHwgY29uc3RydWN0b3JTbG90LmdldFZhbHVl
KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yKSAhPSBhcnJheUNvbnN0cnVjdG9y
KSB7CisgICAgICAgIHx8IGNvbnN0cnVjdG9yU2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHZt
LnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yKSAhPSBhcnJheUNvbnN0cnVjdG9yKSB7CiAgICAg
ICAgIGludmFsaWRhdGVXYXRjaHBvaW50KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
OTE0LDcgKzE5MDYsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp0cnlJbnN0YWxsQXJyYXlTcGVj
aWVzV2F0Y2hwb2ludChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGNvbnN0cnVjdG9yU3RydWN0
dXJlID0gY29uc3RydWN0b3JTdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZt
LCBhcnJheUNvbnN0cnVjdG9yKTsKIAogICAgIFByb3BlcnR5U2xvdCBzcGVjaWVzU2xvdChhcnJh
eUNvbnN0cnVjdG9yLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5
KTsKLSAgICBhcnJheUNvbnN0cnVjdG9yLT5nZXRPd25Qcm9wZXJ0eVNsb3QoYXJyYXlDb25zdHJ1
Y3RvciwgZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+c3BlY2llc1N5bWJvbCwgc3BlY2llc1Nsb3Qp
OworICAgIGFycmF5Q29uc3RydWN0b3ItPmdldE93blByb3BlcnR5U2xvdChhcnJheUNvbnN0cnVj
dG9yLCBnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnNwZWNpZXNTeW1ib2wsIHNwZWNp
ZXNTbG90KTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlmIChzcGVjaWVz
U2xvdC5zbG90QmFzZSgpICE9IGFycmF5Q29uc3RydWN0b3IKICAgICAgICAgfHwgIXNwZWNpZXNT
bG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkKQEAgLTIwNTAsMTYgKzIwNDIsMTYgQEAgY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBKU0dsb2JhbE9iamVjdDo6aW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9j
YWxlcygpCiAgICAgcmV0dXJuIG1faW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxlczsKIH0K
IAotSW50bENvbGxhdG9yKiBKU0dsb2JhbE9iamVjdDo6ZGVmYXVsdENvbGxhdG9yKEV4ZWNTdGF0
ZSogZXhlYykKK0ludGxDb2xsYXRvciogSlNHbG9iYWxPYmplY3Q6OmRlZmF1bHRDb2xsYXRvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChtX2RlZmF1bHRDb2xsYXRvcikKICAgICAg
ICAgcmV0dXJuIG1fZGVmYXVsdENvbGxhdG9yLmdldCgpOwogCiAgICAgSW50bENvbGxhdG9yKiBj
b2xsYXRvciA9IEludGxDb2xsYXRvcjo6Y3JlYXRlKHZtLCBjb2xsYXRvclN0cnVjdHVyZSgpKTsK
LSAgICBjb2xsYXRvci0+aW5pdGlhbGl6ZUNvbGxhdG9yKCpleGVjLCBqc1VuZGVmaW5lZCgpLCBq
c1VuZGVmaW5lZCgpKTsKKyAgICBjb2xsYXRvci0+aW5pdGlhbGl6ZUNvbGxhdG9yKGdsb2JhbE9i
amVjdCwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgbV9kZWZhdWx0Q29sbGF0b3Iuc2V0KHZtLCB0aGlz
LCBjb2xsYXRvcik7CiAgICAgcmV0dXJuIGNvbGxhdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggMjI2ODljZjg5YjU0YjAyOTZmYTdm
NzdhMjFjMDIwYmVkOGViZDkwZi4uZjk1M2M4NTNmMTFhZDZjMTZhMWI5ZmE2NmIzYTRjMzQ3N2Nh
OTgxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCkBAIC0yMDQsMzEgKzIwNCwzMSBAQCBzdHJ1Y3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
ewogICAgIHR5cGVkZWYgYm9vbCAoKlNob3VsZEludGVycnVwdFNjcmlwdEJlZm9yZVRpbWVvdXRQ
dHIpKGNvbnN0IEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgU2hvdWxkSW50ZXJydXB0U2NyaXB0QmVm
b3JlVGltZW91dFB0ciBzaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0OwogCi0gICAg
dHlwZWRlZiBKU0ludGVybmFsUHJvbWlzZSogKCpNb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGVQdHIp
KEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1N0cmluZyos
IEpTVmFsdWUsIGNvbnN0IFNvdXJjZU9yaWdpbiYpOworICAgIHR5cGVkZWYgSlNJbnRlcm5hbFBy
b21pc2UqICgqTW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlUHRyKShKU0dsb2JhbE9iamVjdCosIEpT
TW9kdWxlTG9hZGVyKiwgSlNTdHJpbmcqLCBKU1ZhbHVlLCBjb25zdCBTb3VyY2VPcmlnaW4mKTsK
ICAgICBNb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGVQdHIgbW9kdWxlTG9hZGVySW1wb3J0TW9kdWxl
OwogCi0gICAgdHlwZWRlZiBJZGVudGlmaWVyICgqTW9kdWxlTG9hZGVyUmVzb2x2ZVB0cikoSlNH
bG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFs
dWUsIEpTVmFsdWUpOworICAgIHR5cGVkZWYgSWRlbnRpZmllciAoKk1vZHVsZUxvYWRlclJlc29s
dmVQdHIpKEpTR2xvYmFsT2JqZWN0KiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU1ZhbHVl
LCBKU1ZhbHVlKTsKICAgICBNb2R1bGVMb2FkZXJSZXNvbHZlUHRyIG1vZHVsZUxvYWRlclJlc29s
dmU7CiAKLSAgICB0eXBlZGVmIEpTSW50ZXJuYWxQcm9taXNlKiAoKk1vZHVsZUxvYWRlckZldGNo
UHRyKShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1
ZSwgSlNWYWx1ZSwgSlNWYWx1ZSk7CisgICAgdHlwZWRlZiBKU0ludGVybmFsUHJvbWlzZSogKCpN
b2R1bGVMb2FkZXJGZXRjaFB0cikoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUxvYWRlciosIEpT
VmFsdWUsIEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIE1vZHVsZUxvYWRlckZldGNoUHRyIG1vZHVs
ZUxvYWRlckZldGNoOwogCi0gICAgdHlwZWRlZiBKU09iamVjdCogKCpNb2R1bGVMb2FkZXJDcmVh
dGVJbXBvcnRNZXRhUHJvcGVydGllc1B0cikoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBK
U01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7CisgICAg
dHlwZWRlZiBKU09iamVjdCogKCpNb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGll
c1B0cikoSlNHbG9iYWxPYmplY3QqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTTW9kdWxl
UmVjb3JkKiwgSlNWYWx1ZSk7CiAgICAgTW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3Bl
cnRpZXNQdHIgbW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXM7CiAKLSAgICB0
eXBlZGVmIEpTVmFsdWUgKCpNb2R1bGVMb2FkZXJFdmFsdWF0ZVB0cikoSlNHbG9iYWxPYmplY3Qq
LCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFsdWUsIEpTVmFsdWUp
OworICAgIHR5cGVkZWYgSlNWYWx1ZSAoKk1vZHVsZUxvYWRlckV2YWx1YXRlUHRyKShKU0dsb2Jh
bE9iamVjdCosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAg
ICAgTW9kdWxlTG9hZGVyRXZhbHVhdGVQdHIgbW9kdWxlTG9hZGVyRXZhbHVhdGU7CiAKLSAgICB0
eXBlZGVmIHZvaWQgKCpQcm9taXNlUmVqZWN0aW9uVHJhY2tlclB0cikoSlNHbG9iYWxPYmplY3Qq
LCBFeGVjU3RhdGUqLCBKU1Byb21pc2UqLCBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb24pOwor
ICAgIHR5cGVkZWYgdm9pZCAoKlByb21pc2VSZWplY3Rpb25UcmFja2VyUHRyKShKU0dsb2JhbE9i
amVjdCosIEpTUHJvbWlzZSosIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbik7CiAgICAgUHJv
bWlzZVJlamVjdGlvblRyYWNrZXJQdHIgcHJvbWlzZVJlamVjdGlvblRyYWNrZXI7CiAKICAgICB0
eXBlZGVmIFN0cmluZyAoKkRlZmF1bHRMYW5ndWFnZUZ1bmN0aW9uUHRyKSgpOwogICAgIERlZmF1
bHRMYW5ndWFnZUZ1bmN0aW9uUHRyIGRlZmF1bHRMYW5ndWFnZTsKIAotICAgIHR5cGVkZWYgdm9p
ZCAoKkNvbXBpbGVTdHJlYW1pbmdQdHIpKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNQ
cm9taXNlRGVmZXJyZWQqLCBKU1ZhbHVlKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpDb21waWxlU3Ry
ZWFtaW5nUHRyKShKU0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZURlZmVycmVkKiwgSlNWYWx1ZSk7
CiAgICAgQ29tcGlsZVN0cmVhbWluZ1B0ciBjb21waWxlU3RyZWFtaW5nOwogCi0gICAgdHlwZWRl
ZiB2b2lkICgqSW5zdGFudGlhdGVTdHJlYW1pbmdQdHIpKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0
YXRlKiwgSlNQcm9taXNlRGVmZXJyZWQqLCBKU1ZhbHVlLCBKU09iamVjdCopOworICAgIHR5cGVk
ZWYgdm9pZCAoKkluc3RhbnRpYXRlU3RyZWFtaW5nUHRyKShKU0dsb2JhbE9iamVjdCosIEpTUHJv
bWlzZURlZmVycmVkKiwgSlNWYWx1ZSwgSlNPYmplY3QqKTsKICAgICBJbnN0YW50aWF0ZVN0cmVh
bWluZ1B0ciBpbnN0YW50aWF0ZVN0cmVhbWluZzsKIH07CiAKQEAgLTI1NiwxMyArMjU2LDEwIEBA
IGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qg
ewogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEluaXRpYWxpemVyID0g
dHlwZW5hbWUgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBUPjo6SW5pdGlhbGl6ZXI7CiAg
ICAgCi0gICAgUmVnaXN0ZXIgbV9nbG9iYWxDYWxsRnJhbWVbQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnNdOwotCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2dsb2JhbFRoaXM7
CiAKICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQ+IG1fZ2xvYmFs
TGV4aWNhbEVudmlyb25tZW50OwogICAgIFdyaXRlQmFycmllcjxKU1Njb3BlPiBtX2dsb2JhbFNj
b3BlRXh0ZW5zaW9uOwotICAgIFdyaXRlQmFycmllcjxKU0NhbGxlZT4gbV9nbG9iYWxDYWxsZWU7
CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2FsbGVlPiBtX3N0YWNrT3ZlcmZsb3dGcmFtZUNhbGxlZTsK
IAogICAgIExhenlDbGFzc1N0cnVjdHVyZSBtX2V2YWxFcnJvclN0cnVjdHVyZTsKQEAgLTI3NCw2
ICsyNzEsOCBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0IHsKIAogICAgIFdyaXRlQmFycmllcjxPYmplY3RDb25zdHJ1Y3Rvcj4gbV9vYmpl
Y3RDb25zdHJ1Y3RvcjsKICAgICBXcml0ZUJhcnJpZXI8QXJyYXlDb25zdHJ1Y3Rvcj4gbV9hcnJh
eUNvbnN0cnVjdG9yOworICAgIFdyaXRlQmFycmllcjxSZWdFeHBDb25zdHJ1Y3Rvcj4gbV9yZWdF
eHBDb25zdHJ1Y3RvcjsKKyAgICBXcml0ZUJhcnJpZXI8RnVuY3Rpb25Db25zdHJ1Y3Rvcj4gbV9m
dW5jdGlvbkNvbnN0cnVjdG9yOwogICAgIFdyaXRlQmFycmllcjxKU1Byb21pc2VDb25zdHJ1Y3Rv
cj4gbV9wcm9taXNlQ29uc3RydWN0b3I7CiAgICAgV3JpdGVCYXJyaWVyPEpTSW50ZXJuYWxQcm9t
aXNlQ29uc3RydWN0b3I+IG1faW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3I7CiAKQEAgLTUxNyw3
ICs1MTYsNyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0IHsKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zdGFja1RyYWNlTGltaXQ7CiAK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgY29uc3QgRXhlY1N0YXRlKiBtX2NhbGxGcmFtZUF0
RGVidWdnZXJFbnRyeSB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBKU0dsb2JhbE9iamVjdCogbV9n
bG9iYWxPYmplY3RBdERlYnVnZ2VyRW50cnkgeyBudWxscHRyIH07CiAjZW5kaWYKIAogICAgIHN0
YXRpYyBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBzX2ds
b2JhbE9iamVjdE1ldGhvZFRhYmxlOwpAQCAtNTY1LDE5ICs1NjQsMTkgQEAgY2xhc3MgSlNHbG9i
YWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZGVmaW5lR2V0dGVyKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogZ2V0dGVyRnVuYywgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVmaW5lU2V0dGVyKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2V0dGVyRnVuYywgdW5zaWduZWQg
YXR0cmlidXRlcyk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGRlZmluZUdldHRlcihKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogZ2V0dGVyRnVuYywgdW5zaWduZWQgYXR0cmlidXRlcyk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVmaW5lU2V0dGVyKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzZXR0ZXJGdW5jLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAotICAgIHZvaWQg
YWRkVmFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQor
ICAgIHZvaWQgYWRkVmFyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICB7Ci0gICAgICAgIGlmICghaGFzT3duUHJvcGVydHko
ZXhlYywgcHJvcGVydHlOYW1lKSkKKyAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICBhZGRHbG9iYWxWYXIocHJvcGVydHlO
YW1lKTsKICAgICB9Ci0gICAgdm9pZCBhZGRGdW5jdGlvbihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJik7CisgICAgdm9pZCBhZGRGdW5jdGlvbihKU0dsb2JhbE9iamVjdCosIGNvbnN0IElk
ZW50aWZpZXImKTsKIAogICAgIEpTU2NvcGUqIGdsb2JhbFNjb3BlKCkgeyByZXR1cm4gbV9nbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCk7IH0KICAgICBKU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudCogZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgeyByZXR1cm4gbV9nbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQuZ2V0KCk7IH0KQEAgLTU5MiwxMiArNTkxLDE0IEBAIGNsYXNzIEpTR2xvYmFs
T2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIEdldHRlclNl
dHRlciogc3BlY2llc0dldHRlclNldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2llc0dldHRl
clNldHRlci5nZXQoKTsgfQogCiAgICAgQXJyYXlDb25zdHJ1Y3RvciogYXJyYXlDb25zdHJ1Y3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlDb25zdHJ1Y3Rvci5nZXQoKTsgfQorICAgIFJlZ0V4
cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhw
Q29uc3RydWN0b3IuZ2V0KCk7IH0KICAgICBPYmplY3RDb25zdHJ1Y3Rvciogb2JqZWN0Q29uc3Ry
dWN0b3IoKSBjb25zdCB7IHJldHVybiBtX29iamVjdENvbnN0cnVjdG9yLmdldCgpOyB9CisgICAg
RnVuY3Rpb25Db25zdHJ1Y3RvciogZnVuY3Rpb25Db25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fZnVuY3Rpb25Db25zdHJ1Y3Rvci5nZXQoKTsgfQogICAgIEpTUHJvbWlzZUNvbnN0cnVjdG9y
KiBwcm9taXNlQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3Byb21pc2VDb25zdHJ1Y3Rv
ci5nZXQoKTsgfQogICAgIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IqIGludGVybmFsUHJv
bWlzZUNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFByb21pc2VDb25zdHJ1
Y3Rvci5nZXQoKTsgfQogCiAjaWYgRU5BQkxFKElOVEwpCi0gICAgSW50bENvbGxhdG9yKiBkZWZh
dWx0Q29sbGF0b3IoRXhlY1N0YXRlKik7CisgICAgSW50bENvbGxhdG9yKiBkZWZhdWx0Q29sbGF0
b3IoSlNHbG9iYWxPYmplY3QqKTsKICNlbmRpZgogCiAgICAgTnVsbEdldHRlckZ1bmN0aW9uKiBu
dWxsR2V0dGVyRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX251bGxHZXR0ZXJGdW5jdGlvbi5n
ZXQoKTsgfQpAQCAtNjcyLDEzICs2NzMsMTAgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJs
aWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgICAgIEFTU0VSVChpbmRleGluZ1R5
cGUgJiBJc0FycmF5KTsKICAgICAgICAgcmV0dXJuIG1fYXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1NoYXBlRHVyaW5nQWxsb2NhdGlvblthcnJheUluZGV4RnJvbUluZGV4aW5nVHlwZShpbmRleGlu
Z1R5cGUpXS5nZXQoKTsKICAgICB9Ci0gICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oRXhlY1N0YXRlKiBleGVjLCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlLCBKU1ZhbHVlIG5ld1RhcmdldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdU
YXJnZXQsIGFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRl
eGluZ1R5cGUpKTsKLSAgICB9Ci0gICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZUZvclByb2Zp
bGVEdXJpbmdBbGxvY2F0aW9uKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSogcHJvZmlsZSwgSlNWYWx1ZSBuZXdUYXJnZXQpIGNvbnN0CisgICAgU3RydWN0dXJlKiBhcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgSlNWYWx1ZSBuZXdUYXJn
ZXQpIGNvbnN0OworICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5n
QWxsb2NhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBBcnJheUFsbG9jYXRpb25Q
cm9maWxlKiBwcm9maWxlLCBKU1ZhbHVlIG5ld1RhcmdldCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBhcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oZXhl
YywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6c2VsZWN0SW5kZXhpbmdUeXBlRm9yKHByb2ZpbGUp
LCBuZXdUYXJnZXQpOworICAgICAgICByZXR1cm4gYXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKGdsb2JhbE9iamVjdCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6
c2VsZWN0SW5kZXhpbmdUeXBlRm9yKHByb2ZpbGUpLCBuZXdUYXJnZXQpOwogICAgIH0KICAgICAg
ICAgCiAgICAgYm9vbCBpc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCkBAIC05NDUsOCArOTQzLDYgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1JpY2hT
b3VyY2VJbmZvKGNvbnN0IEpTR2xvYmFsT2JqZWN0KikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgRXhlY1N0YXRlKiBnbG9iYWxFeGVjKCk7Ci0KICAgICBzdGF0aWMg
Ym9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHQoY29uc3QgSlNHbG9iYWxPYmplY3QqKSB7IHJldHVy
biB0cnVlOyB9CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkSW50ZXJydXB0U2NyaXB0QmVmb3JlVGlt
ZW91dChjb25zdCBKU0dsb2JhbE9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgc3RhdGlj
IFJ1bnRpbWVGbGFncyBqYXZhU2NyaXB0UnVudGltZUZsYWdzKGNvbnN0IEpTR2xvYmFsT2JqZWN0
KikgeyByZXR1cm4gUnVudGltZUZsYWdzKCk7IH0KQEAgLTk2OSw4ICs5NjUsOCBAQCBjbGFzcyBK
U0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICB9
CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgY29uc3QgRXhlY1N0YXRlKiBjYWxsRnJhbWVB
dERlYnVnZ2VyRW50cnkoKSBjb25zdCB7IHJldHVybiBtX2NhbGxGcmFtZUF0RGVidWdnZXJFbnRy
eTsgfQotICAgIHZvaWQgc2V0Q2FsbEZyYW1lQXREZWJ1Z2dlckVudHJ5KGNvbnN0IEV4ZWNTdGF0
ZSogY2FsbEZyYW1lKSB7IG1fY2FsbEZyYW1lQXREZWJ1Z2dlckVudHJ5ID0gY2FsbEZyYW1lOyB9
CisgICAgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEF0RGVidWdnZXJFbnRyeSgp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVudHJ5OyB9CisgICAgdm9p
ZCBzZXRHbG9iYWxPYmplY3RBdERlYnVnZ2VyRW50cnkoY29uc3QgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkgeyBtX2dsb2JhbE9iamVjdEF0RGVidWdnZXJFbnRyeSA9IGdsb2JhbE9iamVj
dDsgfQogI2VuZGlmCiAKICAgICB2b2lkIHJlc2V0UHJvdG90eXBlKFZNJiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwpAQCAtMTAyMiw3ICsxMDE4LDcgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJs
aWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgdm9pZCBzZXRXcmFwcGVyTWFwKHN0
ZDo6dW5pcXVlX3B0cjxXcmFwcGVyTWFwPiYmKTsKICNlbmRpZgogCi0gICAgdm9pZCB0cnlJbnN0
YWxsQXJyYXlTcGVjaWVzV2F0Y2hwb2ludChFeGVjU3RhdGUqKTsKKyAgICB2b2lkIHRyeUluc3Rh
bGxBcnJheVNwZWNpZXNXYXRjaHBvaW50KEpTR2xvYmFsT2JqZWN0Kik7CiAKIHByb3RlY3RlZDoK
ICAgICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKQEAgLTEwNjQsNzUgKzEwNjAsNTAgQEAg
Y2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7
CiAjZW5kaWYKIH07CiAKLWlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNT
dGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAsIEpTVmFsdWUgbmV3
VGFyZ2V0ID0gSlNWYWx1ZSgpKQoraW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJv
ZmlsZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNW
YWx1ZSgpKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBpZiAoaW5pdGlhbExlbmd0
aCA+PSBNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKQotICAgICAgICBzdHJ1
Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihleGVjLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UsIG5ld1RhcmdldCk7CisgICAg
ICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKGdsb2JhbE9iamVjdCwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlLCBu
ZXdUYXJnZXQpOwogICAgIGVsc2UKLSAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5l
d1RhcmdldCk7CisgICAgICAgIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihnbG9iYWxPYmplY3QsIHByb2ZpbGUsIG5ld1Rh
cmdldCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBK
U0FycmF5KiByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGUodm0sIHN0cnVjdHVyZSwgaW5pdGlh
bExlbmd0aCk7CiAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
ICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZv
cihwcm9maWxlLCByZXN1bHQpOwogfQogCi1pbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlB
cnJheShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGggPSAwLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkK
K2lubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBjb25zdCBBcmdMaXN0JiB2YWx1
ZXMsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogewotICAgIHJldHVybiBjb25zdHJ1
Y3RFbXB0eUFycmF5KGV4ZWMsIHByb2ZpbGUsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
aW5pdGlhbExlbmd0aCwgbmV3VGFyZ2V0KTsKLX0KLSAKLWlubGluZSBKU0FycmF5KiBjb25zdHJ1
Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcywgSlNW
YWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4
ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZ2xvYmFs
T2JqZWN0LCBwcm9maWxlLCBuZXdUYXJnZXQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwotICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVM
YXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUs
IHZhbHVlcykpOwotfQotCi1pbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBjb25zdCBBcmdMaXN0JiB2
YWx1ZXMsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQotewotICAgIHJldHVybiBjb25z
dHJ1Y3RBcnJheShleGVjLCBwcm9maWxlLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHZh
bHVlcywgbmV3VGFyZ2V0KTsKKyAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBk
YXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHZhbHVlcykpOwogfQogCi1pbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJy
YXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVk
IGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCitpbmxpbmUgSlNBcnJheSog
Y29uc3RydWN0QXJyYXkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSogcHJvZmlsZSwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5n
dGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2Nh
dGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9u
KGdsb2JhbE9iamVjdCwgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6
dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXkoZXhlYywgc3Ry
dWN0dXJlLCB2YWx1ZXMsIGxlbmd0aCkpOworICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KIAotaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSogcHJvZmlsZSwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFs
dWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQoraW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5
TmVnYXRpdmVJbmRleGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5QWxsb2Nh
dGlvblByb2ZpbGUqIHByb2ZpbGUsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVu
Z3RoLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKIHsKLSAgICByZXR1cm4gY29uc3Ry
dWN0QXJyYXkoZXhlYywgcHJvZmlsZSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB2YWx1
ZXMsIGxlbmd0aCwgbmV3VGFyZ2V0KTsKLX0KLQotaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFy
cmF5TmVnYXRpdmVJbmRleGVkKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSog
dmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQot
ewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShn
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQpOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclBy
b2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGdsb2JhbE9iamVjdCwgcHJvZmlsZSwgbmV3VGFyZ2V0KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICByZXR1cm4gQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29u
c3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMsIGxlbmd0
aCkpOwotfQotCi1pbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQo
RXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBjb25zdCBK
U1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1Zh
bHVlKCkpCi17Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMs
IHByb2ZpbGUsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdmFsdWVzLCBsZW5ndGgsIG5l
d1RhcmdldCk7Ci19Ci0KLWlubGluZSBKU09iamVjdCogRXhlY1N0YXRlOjpnbG9iYWxUaGlzVmFs
dWUoKSBjb25zdAotewotICAgIHJldHVybiBsZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbFRo
aXMoKTsKKyAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9j
YXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIHZhbHVlcywgbGVuZ3RoKSk7CiB9CiAKIGlubGluZSBKU09iamVjdCog
SlNTY29wZTo6Z2xvYmFsVGhpcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKaW5kZXggMjhiNGM2YjUzYjFk
NzMwYjQ1OTllNDgwMjdhMWEzZGZiZjM3MTc5NC4uYmZjNmY1NTgzNjRhMzYxZjBiNWY3MWI2NmI1
NGFkYjBjN2ZiODhhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApAQCAtNzQsMTYgKzc0LDE2IEBAIHN0
YXRpYyBCaXRtYXA8MjU2PiBtYWtlQ2hhcmFjdGVyQml0bWFwKGNvbnN0IGNoYXIgKCZjaGFyYWN0
ZXJzKVtjaGFyYWN0ZXJzQ291bnRdCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1zdGF0aWMgSlNWYWx1ZSBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBCaXRtYXA8
MjU2PiYgZG9Ob3RFc2NhcGUsIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKK3N0YXRpYyBKU1ZhbHVlIGVuY29kZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBCaXRtYXA8MjU2PiYgZG9Ob3RFc2NhcGUsIGNvbnN0IENoYXJhY3RlclR5
cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAxOC4yLjYuMS4xIFJ1bnRpbWUgU2Vt
YW50aWNzOiBFbmNvZGUgKCBzdHJpbmcsIHVuZXNjYXBlZFNldCApCiAgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZW5jb2RlCiAKLSAgICBhdXRvIHRocm93RXhjZXB0
aW9uID0gWyZzY29wZSwgZXhlY10gewotICAgICAgICByZXR1cm4gSlNDOjp0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgY3JlYXRlVVJJRXJyb3IoZXhlYywgIlN0cmluZyBjb250YWluZWQgYW4g
aWxsZWdhbCBVVEYtMTYgc2VxdWVuY2UuIl9zKSk7CisgICAgYXV0byB0aHJvd0V4Y2VwdGlvbiA9
IFsmc2NvcGUsIGdsb2JhbE9iamVjdF0geworICAgICAgICByZXR1cm4gSlNDOjp0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVVUklFcnJvcihnbG9iYWxPYmplY3QsICJT
dHJpbmcgY29udGFpbmVkIGFuIGlsbGVnYWwgVVRGLTE2IHNlcXVlbmNlLiJfcykpOwogICAgIH07
CiAKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoU3RyaW5nQnVpbGRlcjo6T3ZlcmZsb3dIYW5k
bGVyOjpSZWNvcmRPdmVyZmxvdyk7CkBAIC0xNTEsMjQgKzE1MSwyNCBAQCBzdGF0aWMgSlNWYWx1
ZSBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBCaXRtYXA8MjU2PiYgZG9Ob3RFc2NhcGUs
IGNvbnN0IENoYQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShidWlsZGVyLmhhc092ZXJmbG93
ZWQoKSkpCi0gICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUp
OworICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUpOwogICAgIHJldHVybiBqc1N0cmluZyh2bSwgYnVpbGRlci50b1N0cmluZygpKTsKIH0KIAot
c3RhdGljIEpTVmFsdWUgZW5jb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQml0bWFwPDI1Nj4m
IGRvTm90RXNjYXBlKQorc3RhdGljIEpTVmFsdWUgZW5jb2RlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgYXJndW1lbnQsIGNvbnN0IEJpdG1hcDwyNTY+JiBkb05vdEVzY2Fw
ZSkKIHsKLSAgICByZXR1cm4gdG9TdHJpbmdWaWV3KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLCBb
Jl0gKFN0cmluZ1ZpZXcgdmlldykgeworICAgIHJldHVybiB0b1N0cmluZ1ZpZXcoZ2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudCwgWyZdIChTdHJpbmdWaWV3IHZpZXcpIHsKICAgICAgICAgaWYgKHZpZXcu
aXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlKGV4ZWMsIGRvTm90RXNjYXBlLCB2
aWV3LmNoYXJhY3RlcnM4KCksIHZpZXcubGVuZ3RoKCkpOwotICAgICAgICByZXR1cm4gZW5jb2Rl
KGV4ZWMsIGRvTm90RXNjYXBlLCB2aWV3LmNoYXJhY3RlcnMxNigpLCB2aWV3Lmxlbmd0aCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBlbmNvZGUoZ2xvYmFsT2JqZWN0LCBkb05vdEVzY2FwZSwgdmll
dy5jaGFyYWN0ZXJzOCgpLCB2aWV3Lmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZShn
bG9iYWxPYmplY3QsIGRvTm90RXNjYXBlLCB2aWV3LmNoYXJhY3RlcnMxNigpLCB2aWV3Lmxlbmd0
aCgpKTsKICAgICB9KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogQUxXQVlT
X0lOTElORQotc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ2hh
clR5cGUqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IEJpdG1hcDwyNTY+JiBkb05vdFVu
ZXNjYXBlLCBib29sIHN0cmljdCkKK3N0YXRpYyBKU1ZhbHVlIGRlY29kZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwg
Y29uc3QgQml0bWFwPDI1Nj4mIGRvTm90VW5lc2NhcGUsIGJvb2wgc3RyaWN0KQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcihTdHJpbmdCdWlsZGVyOjpPdmVyZmxvd0hhbmRsZXI6OlJlY29yZE92ZXJmbG93
KTsKQEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBkZWNvZGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgYwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKGNoYXJMZW4gPT0gMCkgewogICAgICAgICAgICAgICAgIGlm
IChzdHJpY3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgY3JlYXRlVVJJRXJyb3IoZXhlYywgIlVSSSBlcnJvciJfcykpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3Jl
YXRlVVJJRXJyb3IoZ2xvYmFsT2JqZWN0LCAiVVJJIGVycm9yIl9zKSk7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBkb24ndCB1c2UgInN0cmljdCIgbW9kZSBpcyB0
aGUgInVuZXNjYXBlIiBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICAvLyBGb3IgdGhhdCwgaXQn
cyBnb29kIHRvIHN1cHBvcnQgdGhlIHdvbmt5ICIldSIgc3ludGF4IGZvciBjb21wYXRpYmlsaXR5
IHdpdGggV2luSUUuCiAgICAgICAgICAgICAgICAgaWYgKGsgPD0gbGVuZ3RoIC0gNiAmJiBwWzFd
ID09ICd1JwpAQCAtMjQwLDE2ICsyNDAsMTYgQEAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGMKICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoYyk7CiAgICAgfQogICAgIGlmIChVTkxJS0VMWShidWlsZGVy
Lmhhc092ZXJmbG93ZWQoKSkpCi0gICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYywgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmco
dm0sIGJ1aWxkZXIudG9TdHJpbmcoKSkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBkZWNvZGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBCaXRtYXA8MjU2PiYgZG9Ob3RVbmVzY2FwZSwgYm9vbCBzdHJp
Y3QpCitzdGF0aWMgSlNWYWx1ZSBkZWNvZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBhcmd1bWVudCwgY29uc3QgQml0bWFwPDI1Nj4mIGRvTm90VW5lc2NhcGUsIGJvb2wg
c3RyaWN0KQogewotICAgIHJldHVybiB0b1N0cmluZ1ZpZXcoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCksIFsmXSAoU3RyaW5nVmlldyB2aWV3KSB7CisgICAgcmV0dXJuIHRvU3RyaW5nVmlldyhnbG9i
YWxPYmplY3QsIGFyZ3VtZW50LCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgewogICAgICAgICBpZiAo
dmlldy5pczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBkZWNvZGUoZXhlYywgdmlldy5jaGFy
YWN0ZXJzOCgpLCB2aWV3Lmxlbmd0aCgpLCBkb05vdFVuZXNjYXBlLCBzdHJpY3QpOwotICAgICAg
ICByZXR1cm4gZGVjb2RlKGV4ZWMsIHZpZXcuY2hhcmFjdGVyczE2KCksIHZpZXcubGVuZ3RoKCks
IGRvTm90VW5lc2NhcGUsIHN0cmljdCk7CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlKGdsb2Jh
bE9iamVjdCwgdmlldy5jaGFyYWN0ZXJzOCgpLCB2aWV3Lmxlbmd0aCgpLCBkb05vdFVuZXNjYXBl
LCBzdHJpY3QpOworICAgICAgICByZXR1cm4gZGVjb2RlKGdsb2JhbE9iamVjdCwgdmlldy5jaGFy
YWN0ZXJzMTYoKSwgdmlldy5sZW5ndGgoKSwgZG9Ob3RVbmVzY2FwZSwgc3RyaWN0KTsKICAgICB9
KTsKIH0KIApAQCAtNDg4LDE5ICs0ODgsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnIKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh4KTsKIAogICAgIGlmICghZ2xvYmFsT2JqZWN0
LT5ldmFsRW5hYmxlZCgpKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgc2Nv
cGUsIGNyZWF0ZUV2YWxFcnJvcihjYWxsRnJhbWUsIGdsb2JhbE9iamVjdC0+ZXZhbERpc2FibGVk
RXJyb3JNZXNzYWdlKCkpKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgY3JlYXRlRXZhbEVycm9yKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5ldmFsRGlz
YWJsZWRFcnJvck1lc3NhZ2UoKSkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIFN0cmluZyBzID0gYXNTdHJpbmcoeCktPnZhbHVl
KGNhbGxGcmFtZSk7CisgICAgU3RyaW5nIHMgPSBhc1N0cmluZyh4KS0+dmFsdWUoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
IAogICAgIEpTVmFsdWUgcGFyc2VkT2JqZWN0OwogICAgIGlmIChzLmlzOEJpdCgpKSB7Ci0gICAg
ICAgIExpdGVyYWxQYXJzZXI8TENoYXI+IHByZXBhcnNlcihjYWxsRnJhbWUsIHMuY2hhcmFjdGVy
czgoKSwgcy5sZW5ndGgoKSwgTm9uU3RyaWN0SlNPTik7CisgICAgICAgIExpdGVyYWxQYXJzZXI8
TENoYXI+IHByZXBhcnNlcihnbG9iYWxPYmplY3QsIHMuY2hhcmFjdGVyczgoKSwgcy5sZW5ndGgo
KSwgTm9uU3RyaWN0SlNPTiwgbnVsbHB0cik7CiAgICAgICAgIHBhcnNlZE9iamVjdCA9IHByZXBh
cnNlci50cnlMaXRlcmFsUGFyc2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBMaXRlcmFsUGFy
c2VyPFVDaGFyPiBwcmVwYXJzZXIoY2FsbEZyYW1lLCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0
aCgpLCBOb25TdHJpY3RKU09OKTsKKyAgICAgICAgTGl0ZXJhbFBhcnNlcjxVQ2hhcj4gcHJlcGFy
c2VyKGdsb2JhbE9iamVjdCwgcy5jaGFyYWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwgTm9uU3RyaWN0
SlNPTiwgbnVsbHB0cik7CiAgICAgICAgIHBhcnNlZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRl
cmFsUGFyc2UoKTsKICAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CkBAIC01MDgsMTUgKzUwOCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHBhcnNlZE9iamVjdCk7CiAKICAgICBT
b3VyY2VPcmlnaW4gc291cmNlT3JpZ2luID0gY2FsbEZyYW1lLT5jYWxsZXJTb3VyY2VPcmlnaW4o
KTsKLSAgICBFdmFsRXhlY3V0YWJsZSogZXZhbCA9IEluZGlyZWN0RXZhbEV4ZWN1dGFibGU6OmNy
ZWF0ZShjYWxsRnJhbWUsIG1ha2VTb3VyY2Uocywgc291cmNlT3JpZ2luKSwgZmFsc2UsIERlcml2
ZWRDb250ZXh0VHlwZTo6Tm9uZSwgZmFsc2UsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSk7CisgICAg
RXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoZ2xv
YmFsT2JqZWN0LCBtYWtlU291cmNlKHMsIHNvdXJjZU9yaWdpbiksIGZhbHNlLCBEZXJpdmVkQ29u
dGV4dFR5cGU6Ok5vbmUsIGZhbHNlLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUpOwogICAgIEVYQ0VQ
VElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhZXZhbCk7CiAgICAgaWYgKCFldmFs
KQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKIAotICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHZtLmludGVycHJldGVyLT5leGVjdXRlKGV2YWws
IGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxUaGlzKCksIGdsb2JhbE9iamVjdC0+Z2xv
YmFsU2NvcGUoKSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZSh2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+Z2xvYmFsVGhpcygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlKCkpKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNQYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKICAgICBKU1ZhbHVlIHJhZGl4VmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEp
OwpAQCAtNTM5LDMzICs1MzksMzMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jUGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGwKICAgICB9CiAK
ICAgICAvLyBJZiBUb1N0cmluZyB0aHJvd3MsIHdlIHNob3VsZG4ndCBjYWxsIFRvSW50MzIuCi0g
ICAgcmV0dXJuIHRvU3RyaW5nVmlldyhjYWxsRnJhbWUsIHZhbHVlLCBbJl0gKFN0cmluZ1ZpZXcg
dmlldykgewotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlSW50
KHZpZXcsIHJhZGl4VmFsdWUudG9JbnQzMihjYWxsRnJhbWUpKSkpOworICAgIHJldHVybiB0b1N0
cmluZ1ZpZXcoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgWyZdIChTdHJpbmdWaWV3IHZpZXcpIHsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZUludCh2aWV3LCByYWRp
eFZhbHVlLnRvSW50MzIoZ2xvYmFsT2JqZWN0KSkpKTsKICAgICB9KTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUGFyc2VGbG9hdChKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jUGFyc2VGbG9hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKS50b1N0cmluZyhjYWxsRnJhbWUpLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoY2Fs
bEZyYW1lKTsKKyAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gY2FsbEZyYW1lLT5hcmd1bWVudCgw
KS50b1N0cmluZyhnbG9iYWxPYmplY3QpLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZ2xvYmFs
T2JqZWN0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRmxvYXQo
dmlld1dpdGhTdHJpbmcudmlldykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRGVjb2RlVVJJKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNEZWNvZGVVUkkoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAg
c3RhdGljIEJpdG1hcDwyNTY+IGRvTm90VW5lc2NhcGVXaGVuRGVjb2RpbmdVUkkgPSBtYWtlQ2hh
cmFjdGVyQml0bWFwKAogICAgICAgICAiIyQmKywvOjs9P0AiCiAgICAgKTsKIAotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoZGVjb2RlKGNhbGxGcmFtZSwgZG9Ob3RVbmVzY2FwZVdoZW5EZWNv
ZGluZ1VSSSwgdHJ1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZGVjb2RlKGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgZG9Ob3RVbmVzY2FwZVdoZW5EZWNvZGlu
Z1VSSSwgdHJ1ZSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1
bmNEZWNvZGVVUklDb21wb25lbnQoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBv
bmVudChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKICAgICBzdGF0aWMgQml0bWFwPDI1Nj4gZW1wdHlCaXRtYXA7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShkZWNvZGUoY2FsbEZyYW1lLCBlbXB0eUJpdG1hcCwgdHJ1ZSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZGVjb2RlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSwgZW1wdHlCaXRtYXAsIHRydWUpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVV
UkkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CiAgICAgc3RhdGljIEJpdG1hcDwyNTY+IGRvTm90RXNjYXBlV2hlbkVuY29kaW5nVVJJID0gbWFr
ZUNoYXJhY3RlckJpdG1hcCgKICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgpA
QCAtNTc0LDEwICs1NzQsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jRW5jb2RlVVJJKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWwKICAgICAgICAgIiEj
JCYnKCkqKywtLi86Oz0/QF9+IgogICAgICk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGVuY29kZShjYWxsRnJhbWUsIGRvTm90RXNjYXBlV2hlbkVuY29kaW5nVVJJKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShlbmNvZGUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApLCBkb05vdEVzY2FwZVdoZW5FbmNvZGluZ1VSSSkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBzdGF0aWMgQml0bWFwPDI1Nj4gZG9Ob3RF
c2NhcGVXaGVuRW5jb2RpbmdVUklDb21wb25lbnQgPSBtYWtlQ2hhcmFjdGVyQml0bWFwKAogICAg
ICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCkBAIC01ODYsNyArNTg2LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEYKICAgICAgICAgIiEnKCkqLS5ffiIKICAgICApOwogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShlbmNvZGUoY2FsbEZyYW1lLCBkb05vdEVzY2FwZVdoZW5F
bmNvZGluZ1VSSUNvbXBvbmVudCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZW5jb2Rl
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgZG9Ob3RFc2NhcGVXaGVuRW5j
b2RpbmdVUklDb21wb25lbnQpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jRXNjYXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpAQCAtNTk4LDcgKzU5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2xvYmFsRnVuY0VzY2FwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsCiAg
ICAgICAgICIqKy0uL0BfIgogICAgICk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
U3RyaW5nVmlldyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIFsmXSAoU3RyaW5n
VmlldyB2aWV3KSB7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b1N0cmluZ1ZpZXcoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykg
ewogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKICAgICAgICAgaWYgKHZpZXcuaXM4Qml0KCkpIHsKQEAgLTYzNiw3ICs2
MzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFc2NhcGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdsb2JhbEZ1bmNVbmVzY2FwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvU3Ry
aW5nVmlldyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIFsmXSAoU3RyaW5nVmll
dyB2aWV3KSB7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b1N0cmluZ1ZpZXcoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBbJl0gKFN0cmluZ1ZpZXcgdmlldykgewog
ICAgICAgICAvLyBXZSB1c2UgaW50IGZvciBrIGFuZCBsZW5ndGggaW50ZW50aW9uYWxseSBzaW5j
ZSB3ZSB3b3VsZCBsaWtlIHRvIGV2YWx1YXRlCiAgICAgICAgIC8vIHRoZSBjb25kaXRpb24gYGsg
PD0gbGVuZ3RoIC02YCBldmVuIGlmIGxlbmd0aCBpcyBsZXNzIHRoYW4gNi4KICAgICAgICAgaW50
IGsgPSAwOwpAQCAtNjkwLDI0ICs2OTAsMjQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jVW5lc2NhcGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2EKICAg
ICB9KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1Rocm93
VHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJy
b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUp
OworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvckFy
Z3VtZW50c0NhbGxlZUFuZENhbGxlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVu
Y1Rocm93VHlwZUVycm9yQXJndW1lbnRzQ2FsbGVlQW5kQ2FsbGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSopCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiJ2FyZ3VtZW50cycsICdjYWxs
ZWUnLCBhbmQgJ2NhbGxlcicgY2Fubm90IGJlIGFjY2Vzc2VkIGluIHRoaXMgY29udGV4dC4iKTsK
KyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ2FyZ3Vt
ZW50cycsICdjYWxsZWUnLCBhbmQgJ2NhbGxlcicgY2Fubm90IGJlIGFjY2Vzc2VkIGluIHRoaXMg
Y29udGV4dC4iKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5j
TWFrZVR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0
LT5lcnJvclN0cnVjdHVyZShFcnJvclR5cGU6OlR5cGVFcnJvcik7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoY2FsbEZyYW1lLCBlcnJvclN0cnVjdHVy
ZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFs
T2JqZWN0LCBlcnJvclN0cnVjdHVyZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgbnVsbHB0ciwg
VHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY1Byb3RvR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtNzE1LDIwICs3MTUsMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnbG9iYWxGdW5jUHJvdG9HZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhjYWxsRnJhbWUsIFN0cmljdE1vZGUpOworICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoZ2xvYmFsT2Jq
ZWN0LCBTdHJpY3RNb2RlKTsKICAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90
QW5PYmplY3RFcnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOworICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZ2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUpKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmICghdGhpc09iamVj
dCkgewotICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gdGhpc1ZhbHVlLnN5bnRoZXNpemVQ
cm90b3R5cGUoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IHRoaXNW
YWx1ZS5zeW50aGVzaXplUHJvdG90eXBlKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIEVYQ0VQVElP
Tl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhcHJvdG90eXBlKTsKICAgICAgICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb3RvdHlwZSk7
CiAgICAgfQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
dGhpc09iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBjYWxsRnJhbWUpKSk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2xvYmFsRnVuY1Byb3RvU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtNzM2LDkgKzczNiw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZy
YW1lLT50aGlzVmFsdWUoKS50b1RoaXMoY2FsbEZyYW1lLCBTdHJpY3RNb2RlKTsKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGdsb2JhbE9iamVj
dCwgU3RyaWN0TW9kZSk7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBPYmplY3RQ
cm90b0NhbGxlZE9uTnVsbE9yVW5kZWZpbmVkRXJyb3IpOworICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBPYmplY3RQcm90b0NhbGxlZE9uTnVsbE9y
VW5kZWZpbmVkRXJyb3IpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CiAKQEAgLTc1NCw3ICs3NTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdsb2JhbEZ1bmNQcm90b1NldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiAg
ICAgc2NvcGUucmVsZWFzZSgpOwogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSB0cnVl
OwotICAgIHRoaXNPYmplY3QtPnNldFByb3RvdHlwZSh2bSwgY2FsbEZyYW1lLCB2YWx1ZSwgc2hv
dWxkVGhyb3dJZkNhbnRTZXQpOworICAgIHRoaXNPYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0LCB2YWx1ZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTc3MiwxMiArNzcyLDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0hvc3RQcm9taXNlUmVqZWN0aW9u
VHJhY2tlcihKU0dsb2JhbE9iamVjCiAgICAgSlNWYWx1ZSBvcGVyYXRpb25WYWx1ZSA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMSk7CiAKICAgICBBU1NFUlQob3BlcmF0aW9uVmFsdWUuaXNOdW1iZXIo
KSk7Ci0gICAgYXV0byBvcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxKU1Byb21pc2VSZWplY3Rpb25P
cGVyYXRpb24+KG9wZXJhdGlvblZhbHVlLnRvVUludDMyKGNhbGxGcmFtZSkpOworICAgIGF1dG8g
b3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNQcm9taXNlUmVqZWN0aW9uT3BlcmF0aW9uPihvcGVy
YXRpb25WYWx1ZS50b1VJbnQzMihnbG9iYWxPYmplY3QpKTsKICAgICBBU1NFUlQob3BlcmF0aW9u
ID09IEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6UmVqZWN0IHx8IG9wZXJhdGlvbiA9PSBK
U1Byb21pc2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRsZSk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKIAogICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKQotICAgICAgICBnbG9iYWxPYmplY3QtPmds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBwcm9taXNlLCBvcGVyYXRpb24pOworICAgICAgICBnbG9iYWxPYmpl
Y3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnByb21pc2VSZWplY3Rpb25UcmFja2VyKGds
b2JhbE9iamVjdCwgcHJvbWlzZSwgb3BlcmF0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgc3dp
dGNoIChvcGVyYXRpb24pIHsKICAgICAgICAgY2FzZSBKU1Byb21pc2VSZWplY3Rpb25PcGVyYXRp
b246OlJlamVjdDoKQEAgLTc5Myw5ICs3OTMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNIb3N0UHJvbWlzZVJlamVjdGlvblRyYWNrZXIoSlNHbG9iYWxPYmplYwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0J1aWx0aW5Mb2coSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY0J1aWx0aW5Mb2coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgZGF0YUxvZyhjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKGNhbGxGcmFtZSksICJcbiIpOworICAgIGRhdGFMb2coY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpLCAiXG4iKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC04MDksMzAgKzgwOSwzMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNJbXBvcnRNb2R1bGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8q
IHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGNhbGxGcmFtZSwgZ2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0
ZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKICAgICBhdXRvIHJlamVjdCA9IFsmXSAoSlNWYWx1ZSByZWplY3Rpb25SZWFzb24p
IHsKICAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBwcm9taXNl
LT5yZWplY3QoY2FsbEZyYW1lLCByZWplY3Rpb25SZWFzb24pOworICAgICAgICBwcm9taXNlLT5y
ZWplY3QoZ2xvYmFsT2JqZWN0LCByZWplY3Rpb25SZWFzb24pOwogICAgICAgICBjYXRjaFNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlz
ZS0+cHJvbWlzZSgpKTsKICAgICB9OwogCiAgICAgYXV0byBzb3VyY2VPcmlnaW4gPSBjYWxsRnJh
bWUtPmNhbGxlclNvdXJjZU9yaWdpbigpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpID09IDEpOwotICAgIGF1dG8qIHNwZWNpZmllciA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBhdXRvKiBzcGVj
aWZpZXIgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGdsb2JhbE9i
amVjdCk7CiAgICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIHJlamVjdChleGNlcHRpb24tPnZhbHVlKCkpOwogCiAgICAg
Ly8gV2UgYWx3YXlzIHNwZWNpZnkgcGFyYW1ldGVycyBhcyB1bmRlZmluZWQuIE9uY2UgZHluYW1p
YyBpbXBvcnQoKSBzdGFydHMgYWNjZXB0aW5nIGZldGNoaW5nIHBhcmFtZXRlcnMsCiAgICAgLy8g
d2Ugc2hvdWxkIHJldHJpZXZlIHRoaXMgZnJvbSB0aGUgYXJndW1lbnRzLgogICAgIEpTVmFsdWUg
cGFyYW1ldGVycyA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgYXV0byogaW50ZXJuYWxQcm9taXNlID0g
Z2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+aW1wb3J0TW9kdWxlKGNhbGxGcmFtZSwgc3Bl
Y2lmaWVyLCBwYXJhbWV0ZXJzLCBzb3VyY2VPcmlnaW4pOworICAgIGF1dG8qIGludGVybmFsUHJv
bWlzZSA9IGdsb2JhbE9iamVjdC0+bW9kdWxlTG9hZGVyKCktPmltcG9ydE1vZHVsZShnbG9iYWxP
YmplY3QsIHNwZWNpZmllciwgcGFyYW1ldGVycywgc291cmNlT3JpZ2luKTsKICAgICBpZiAoRXhj
ZXB0aW9uKiBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gcmVqZWN0KGV4Y2VwdGlvbi0+dmFsdWUoKSk7Ci0gICAgcHJvbWlzZS0+cmVzb2x2ZShjYWxs
RnJhbWUsIGludGVybmFsUHJvbWlzZSk7CisgICAgcHJvbWlzZS0+cmVzb2x2ZShnbG9iYWxPYmpl
Y3QsIGludGVybmFsUHJvbWlzZSk7CiAKICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwpAQCAtODQ1
LDEyICs4NDUsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUHJv
cGVydHlJc0VudW1lcmFibGUoSlNHbG9iYWxPYmplY3QqIGdsb2IKIAogICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID09IDIpOwogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
LSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSku
dG9Qcm9wZXJ0eUtleShjYWxsRnJhbWUpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBz
Y29wZS5yZWxlYXNlKCk7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAg
Ym9vbCBlbnVtZXJhYmxlID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY2FsbEZy
YW1lLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgp
OworICAgIGJvb2wgZW51bWVyYWJsZSA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSAmJiBkZXNjcmlwdG9yLmVu
dW1lcmFibGUoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihlbnVtZXJh
YmxlKSk7CiB9CiAKQEAgLTg1OCw5ICs4NTgsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNPd25LZXlzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbAog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkudG9PYmplY3QoY2FsbEZyYW1lKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhjYWxsRnJhbWUs
IG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkluY2x1ZGUpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
SW5jbHVkZSkpKTsKIH0KIAogI2lmIEVOQUJMRShJTlRMKQpAQCAtODcwLDExICs4NzAsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRGF0ZVRpbWVGb3JtYXQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRhdGVUaW1lRm9ybWF0ID0gSW50
bERhdGVUaW1lRm9ybWF0OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZGF0ZVRpbWVGb3JtYXRT
dHJ1Y3R1cmUoKSk7Ci0gICAgZGF0ZVRpbWVGb3JtYXQtPmluaXRpYWxpemVEYXRlVGltZUZvcm1h
dCgqY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDEpKTsKKyAgICBkYXRlVGltZUZvcm1hdC0+aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
ZG91YmxlIHZhbHVlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgyKS50b051bWJlcihjYWxsRnJhbWUp
OworICAgIGRvdWJsZSB2YWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMikudG9OdW1iZXIoZ2xv
YmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShkYXRl
VGltZUZvcm1hdC0+Zm9ybWF0KCpjYWxsRnJhbWUsIHZhbHVlKSkpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGRhdGVUaW1lRm9ybWF0LT5mb3JtYXQoZ2xv
YmFsT2JqZWN0LCB2YWx1ZSkpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAppbmRleCAyMTEz
MGY5YjYwYzllOWRlZDE3ZDRhZTE1YzAzNTIwODVhOTQ1ZTA5Li43MTMwMjg5YjE0YWNiNWJmNTky
NDk2OWNhNzgzMDI4YWU5YzNiODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgKQEAgLTMxLDcgKzMxLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBBcmdMaXN0OwogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3Mg
SlNPYmplY3Q7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIC8vIEZJWE1FOiBUaGVz
ZSBmdW5jdGlvbnMgc2hvdWxkIHJlYWxseSBiZSBpbiBKU0dsb2JhbE9iamVjdC5jcHAsIGJ1dCBw
dXR0aW5nIHRoZW0gdGhlcmUKIC8vIGlzIGEgMC41JSByZWR1Y3Rpb24uCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oCmluZGV4
IDU1MjJkOGVlNDViMjRkOGM0ZDI4NDQwODVhMzEwNzFjMWVkZjAwOGUuLmUwMzY5YmVjYjA2ZjNi
OTgyY2ZkOTBhNWRiMjAzOWU2MzNiZDQxMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogCisjaW5jbHVkZSAiQXJyYXlDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJv
dG90eXBlLmgiCiAKQEAgLTk2LDQgKzk3LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU0dsb2Jh
bE9iamVjdDo6aXNTZXRQcm90b3R5cGVBZGRGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpCiAgICAgcmV0
dXJuIHNldEFkZFdhdGNocG9pbnRTZXQoKS5pc1N0aWxsVmFsaWQoKTsKIH0KIAorQUxXQVlTX0lO
TElORSBTdHJ1Y3R1cmUqIEpTR2xvYmFsT2JqZWN0OjphcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSwgSlNWYWx1ZSBuZXdUYXJnZXQpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT5hcnJheUNvbnN0cnVjdG9yKCksIG5ld1RhcmdldCwgYXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nVHlwZSkpOworfQor
CitBTFdBWVNfSU5MSU5FIFZNJiBnZXRWTShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBnbG9iYWxPYmplY3QtPnZtKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVC
dXR0ZXJmbHkuY3BwCmluZGV4IDQ1ODZlNWRmYmIyMTc3ZjIxNzc2NWEzMDQ4MjRkZmU4MDYyYTVm
NjYuLjQ3MjRlOWY3NTgzNTg5MTg0YjAzNzFjYjUzYmRiM2JkODg5NWIwNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5j
cHAKQEAgLTQ1LDEzICs0NSwxMyBAQCB2b2lkIEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpKTsKIH0KIAotdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6Y29w
eVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0ltbXV0YWJs
ZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgaWYgKChpICsgb2Zmc2V0KSA8IHB1YmxpY0xlbmd0aCgpKQot
ICAgICAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNl
dCk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0
KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGVjLT5yKGZpcnN0RWxl
bWVudERlc3QgKyBpKSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnIo
Zmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmluZWQoKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5o
CmluZGV4IDUxMDU5NzYwYjQ5ZWZlZGM5MGE5Nzk2MDY1N2UzZWFjZjlhMGU4ZDkuLjIwMDhlNDc5
ZjA1MGM1ZjlmOTg5NzgwOTgyZWVjYWVkMTFjNTgyYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaApAQCAtODcsNyArODcs
NyBAQCBjbGFzcyBKU0ltbXV0YWJsZUJ1dHRlcmZseSA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAg
dm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIENvbXBs
ZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmNwcAppbmRleCBkZTk0MjQxMjcxNmYy
OTY0MjQyM2Q1MjIyZTJlM2YxYTEzOGUwM2JlLi5mOGFkYmU5ODBhMmZkNTQ5ZmM0ZTFiNWM4Njdi
Mzc1ODRkMDU0MDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludGVybmFsUHJvbWlzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnRlcm5hbFByb21pc2UuY3BwCkBAIC01MCwxMiArNTAsMTIgQEAgSlNJbnRlcm5hbFByb21p
c2U6OkpTSW50ZXJuYWxQcm9taXNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiB9
CiAKLUpTSW50ZXJuYWxQcm9taXNlKiBKU0ludGVybmFsUHJvbWlzZTo6dGhlbihFeGVjU3RhdGUq
IGV4ZWMsIEpTRnVuY3Rpb24qIG9uRnVsZmlsbGVkLCBKU0Z1bmN0aW9uKiBvblJlamVjdGVkKQor
SlNJbnRlcm5hbFByb21pc2UqIEpTSW50ZXJuYWxQcm9taXNlOjp0aGVuKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24qIG9uRnVsZmlsbGVkLCBKU0Z1bmN0aW9uKiBvblJl
amVjdGVkKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS50aGVuUHVibGljTmFtZSgpKSk7CisgICAg
SlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGdsb2JhbE9iamVjdCwg
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudGhlblB1YmxpY05hbWUoKSkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rp
b24sIGNhbGxEYXRhKTsKQEAgLTY2LDcgKzY2LDcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTSW50
ZXJuYWxQcm9taXNlOjp0aGVuKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogb25GdWxmaWwK
ICAgICBhcmd1bWVudHMuYXBwZW5kKG9uUmVqZWN0ZWQgPyBvblJlamVjdGVkIDoganNVbmRlZmlu
ZWQoKSk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKTsKIAotICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNDYXN0PEpTSW50ZXJuYWxQcm9taXNlKj4oY2FsbChl
eGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzLCBhcmd1bWVudHMpKSk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc0Nhc3Q8SlNJbnRlcm5hbFByb21pc2UqPihj
YWxsKGdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpcywgYXJn
dW1lbnRzKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5oCmluZGV4IGQzNGM0YWIzYzFkYzVm
NDUzZTFmNjdjYzZhYzYxODFiYTg0MTU4NjguLjljMTU0YjE1ODk4NjU4MzIyMDkyYjdjNGJhODcy
MTEyOWI0NWY2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50ZXJuYWxQcm9taXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bnRlcm5hbFByb21pc2UuaApAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBKU0ludGVybmFsUHJvbWlz
ZSBmaW5hbCA6IHB1YmxpYyBKU1Byb21pc2UgewogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNlKiB0aGVuKEV4ZWNTdGF0
ZSosIEpTRnVuY3Rpb24qID0gbnVsbHB0ciwgSlNGdW5jdGlvbiogPSBudWxscHRyKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogdGhlbihKU0dsb2JhbE9iamVjdCos
IEpTRnVuY3Rpb24qID0gbnVsbHB0ciwgSlNGdW5jdGlvbiogPSBudWxscHRyKTsKIAogcHJpdmF0
ZToKICAgICBKU0ludGVybmFsUHJvbWlzZShWTSYsIFN0cnVjdHVyZSopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkLmNwcAppbmRleCBmM2Y5OGRlZDdhZWRhY2Q2OTVjM2NiODk4MjFmMGYyZjY5ZTc5NjZmLi40
Mzg0ODQzOTBiODRkYTU3OGQxYzhhMGM2MzliMzc1NTUzNDU3ZTljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkLmNwcApAQCAtMzcsMTIgKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFz
c0luZm8gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6c19pbmZvID0geyAiSlNJbnRlcm5hbFBy
b21pc2VEZWZlcnJlZCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCkgfTsKIAotSlNJbnRlcm5hbFBy
b21pc2VEZWZlcnJlZCogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK0pTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQqIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIERlZmVycmVkRGF0YSBkYXRhID0gY3JlYXRlRGVmZXJyZWRE
YXRhKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5pbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3RvcigpKTsKKyAgICBEZWZlcnJlZERhdGEgZGF0YSA9IGNyZWF0ZURlZmVycmVkRGF0YShn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+aW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IoKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBKU0ludGVy
bmFsUHJvbWlzZURlZmVycmVkKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bS5oZWFwKSkgSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZCh2bSk7CkBAIC02MCwyMSArNjAsMjEgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTSW50ZXJu
YWxQcm9taXNlRGVmZXJyZWQ6OnByb21pc2UoKSBjb25zdAogICAgIHJldHVybiBqc0Nhc3Q8SlNJ
bnRlcm5hbFByb21pc2UqPihCYXNlOjpwcm9taXNlKCkpOwogfQogCi1KU0ludGVybmFsUHJvbWlz
ZSogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCitKU0ludGVybmFsUHJvbWlzZSogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZDo6cmVzb2x2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIEJhc2U6OnJlc29sdmUoZXhlYywgdmFsdWUpOworICAgIEJhc2U6OnJlc29sdmUoZ2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHByb21pc2UoKTsKIH0KIAotSlNJbnRlcm5h
bFByb21pc2UqIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnJlamVjdChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgcmVhc29uKQorSlNJbnRlcm5hbFByb21pc2UqIEpTSW50ZXJuYWxQcm9taXNl
RGVmZXJyZWQ6OnJlamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHJl
YXNvbikKIHsKLSAgICBCYXNlOjpyZWplY3QoZXhlYywgcmVhc29uKTsKKyAgICBCYXNlOjpyZWpl
Y3QoZ2xvYmFsT2JqZWN0LCByZWFzb24pOwogICAgIHJldHVybiBwcm9taXNlKCk7CiB9CiAKLUpT
SW50ZXJuYWxQcm9taXNlKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpyZWplY3QoRXhlY1N0
YXRlKiBleGVjLCBFeGNlcHRpb24qIHJlYXNvbikKK0pTSW50ZXJuYWxQcm9taXNlKiBKU0ludGVy
bmFsUHJvbWlzZURlZmVycmVkOjpyZWplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RXhjZXB0aW9uKiByZWFzb24pCiB7Ci0gICAgcmV0dXJuIHJlamVjdChleGVjLCByZWFzb24tPnZh
bHVlKCkpOworICAgIHJldHVybiByZWplY3QoZ2xvYmFsT2JqZWN0LCByZWFzb24tPnZhbHVlKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaAppbmRleCAyMGUzNTRj
ODRjYTIwNDQxNmU1MzVlODRkMjZiMWZjZjdlZjE0MWMxLi5lYjk5MDljY2FlNzQyY2E2MzY1MGY5
YzIwMzdkNzFhY2NiN2NiMWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oCkBAIC0zNiw3ICszNiw3IEBA
IGNsYXNzIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQgZmluYWwgOiBwdWJsaWMgSlNQcm9taXNl
RGVmZXJyZWQgewogICAgIHR5cGVkZWYgSlNQcm9taXNlRGVmZXJyZWQgQmFzZTsKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIHRyeUNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkKiB0cnlDcmVhdGUoSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKQEAgLTQ2LDkgKzQ2LDkgQEAgY2xhc3MgSlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZCBmaW5hbCA6IHB1YmxpYyBKU1Byb21pc2VEZWZlcnJlZCB7
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTSW50
ZXJuYWxQcm9taXNlKiBwcm9taXNlKCkgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNJ
bnRlcm5hbFByb21pc2UqIHJlc29sdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIHJlamVjdChFeGVjU3RhdGUqLCBKU1ZhbHVl
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogcmVqZWN0KEV4ZWNT
dGF0ZSosIEV4Y2VwdGlvbiopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9t
aXNlKiByZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIHJlamVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNlKiByZWplY3QoSlNHbG9i
YWxPYmplY3QqLCBFeGNlcHRpb24qKTsKIAogcHJpdmF0ZToKICAgICBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkKFZNJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKaW5kZXggNjdjN2ExZDFjMTU2MzBhYjFlZDMwNWY1
N2QyNjRhZjc4ODhhNmQzNy4uZjM0NWM1MDI3YWJhOTQwODQ0NzFlMzFiN2I4ZDdlZTJhMmY4ODcx
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52
aXJvbm1lbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmNwcApAQCAtNjYsMTQgKzY2LDE0IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
ICAgICB9CiB9CiAKLXZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihvYmplY3Qp
OwogCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CiAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJh
dG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOwotICAgICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtICYmICFtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTg1LDE3ICs4NSwxNyBAQCB2b2lkIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YQogICAgICAgICB9CiAgICAgfQogICAgIC8vIFNraXAgdGhlIEpTU3ltYm9sVGFibGVP
YmplY3QncyBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMKLSAg
ICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
IH0KIAotYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBK
U0xleGljYWxFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9u
bWVudCo+KG9iamVjdCk7CiAKICAgICBpZiAoc3ltYm9sVGFibGVHZXQodGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOwogICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gdGhpc09iamVjdC0+Z2V0RGly
ZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKSB7CiAgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdCwgYXR0cmlidXRlcywgdmFsdWUpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIGJv
b2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTTGV4
aWNhbEVudmlyb25tZW50OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK2Jvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0xleGljYWxFbnZpcm9ubWVu
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwogICAg
IEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6
aGVhcCh0aGlzT2JqZWN0KSk7CkBAIC0xMTcsMjMgKzExNywyMyBAQCBib29sIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZQogICAgIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yID0gc2xvdC5pc1N0cmlj
dE1vZGUoKSB8fCB0aGlzT2JqZWN0LT5pc0xleGljYWxTY29wZSgpOwogICAgIGJvb2wgaWdub3Jl
UmVhZE9ubHlFcnJvcnMgPSBmYWxzZTsKICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAg
IGlmIChzeW1ib2xUYWJsZVB1dEludmFsaWRhdGVXYXRjaHBvaW50U2V0KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3Jl
UmVhZE9ubHlFcnJvcnMsIHB1dFJlc3VsdCkpCisgICAgaWYgKHN5bWJvbFRhYmxlUHV0SW52YWxp
ZGF0ZVdhdGNocG9pbnRTZXQodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IsIGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBw
dXRSZXN1bHQpKQogICAgICAgICByZXR1cm4gcHV0UmVzdWx0OwogCiAgICAgLy8gV2UgZG9uJ3Qg
Y2FsbCB0aHJvdWdoIHRvIEpTT2JqZWN0IGJlY2F1c2UgX19wcm90b19fIGFuZCBnZXR0ZXIvc2V0
dGVyIAogICAgIC8vIHByb3BlcnRpZXMgYXJlIG5vbi1zdGFuZGFyZCBleHRlbnNpb25zIHRoYXQg
b3RoZXIgaW1wbGVtZW50YXRpb25zIGRvIG5vdAogICAgIC8vIGV4cG9zZSBpbiB0aGUgbGV4aWNh
bEVudmlyb25tZW50IG9iamVjdC4KLSAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMoZXhlYy0+dm0oKSkpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRP
d25EYXRhUHJvcGVydHkoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cisg
ICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGdsb2JhbE9i
amVjdC0+dm0oKSkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXRPd25EYXRhUHJvcGVydHko
Z2xvYmFsT2JqZWN0LT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotYm9v
bCBKU0xleGljYWxFbnZpcm9ubWVudDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBw
cm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgK
aW5kZXggYTJkNDQzMmZkMzY5YmNjODQ4YjIwOTE0YmJhN2E4NjA3M2RhNWQ1Ny4uZDAxM2I1MWVm
YTI5N2ViZjAzY2E0MjQwMDE3YTY3YWNjMTNiOTM5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCkBAIC0xMDUsMTIgKzEw
NSwxMiBAQCBjbGFzcyBKU0xleGljYWxFbnZpcm9ubWVudCA6IHB1YmxpYyBKU1N5bWJvbFRhYmxl
T2JqZWN0IHsKICAgICAgICAgcmV0dXJuIGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBjdXJyZW50U2Nv
cGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpOwogICAgIH0KICAgICAgICAgCi0gICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCi0gICAg
c3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAot
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCAwNDI3ZmRkM2RhNjhlNzgxNTJj
Y2NhYmFiZjE3M2FhYWY5ZjY4NDZiLi5hNmViMGVhNWY2YWFkZWIzN2QyNzc5NGY3YzkxM2Y2ODE2
ODM0OTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTUz
LDggKzUzLDggQEAgR2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2NrKCkKICAgICBzX3NoYXJlZElu
c3RhbmNlTXV0ZXgudW5sb2NrKCk7CiB9CiAKLUpTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVyKEV4
ZWNTdGF0ZSogZXhlYykKLSAgICA6IEpTTG9ja0hvbGRlcihleGVjLT52bSgpKQorSlNMb2NrSG9s
ZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IEpT
TG9ja0hvbGRlcihnbG9iYWxPYmplY3QtPnZtKCkpCiB7CiB9CiAKQEAgLTIyMiwxNCArMjIyLDE0
IEBAIHZvaWQgSlNMb2NrOjp3aWxsUmVsZWFzZUxvY2soKQogICAgIH0KIH0KIAotdm9pZCBKU0xv
Y2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQordm9pZCBKU0xvY2s6OmxvY2soSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBleGVjLT52bSgpLmFwaUxvY2soKS5sb2NrKCk7Cisg
ICAgZ2xvYmFsT2JqZWN0LT52bSgpLmFwaUxvY2soKS5sb2NrKCk7CiB9CiAKLXZvaWQgSlNMb2Nr
Ojp1bmxvY2soRXhlY1N0YXRlKiBleGVjKQordm9pZCBKU0xvY2s6OnVubG9jayhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIGV4ZWMtPnZtKCkuYXBpTG9jaygpLnVubG9jaygp
OworICAgIGdsb2JhbE9iamVjdC0+dm0oKS5hcGlMb2NrKCkudW5sb2NrKCk7CiB9CiAKIC8vIFRo
aXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGxvY2tzIHRoYXQgd2VyZSBkcm9wcGVk
LgpAQCAtMjg3LDggKzI4Nyw4IEBAIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3Mo
Vk0qIHZtKQogICAgIG1fZHJvcHBlZExvY2tDb3VudCA9IG1fdm0tPmFwaUxvY2soKS5kcm9wQWxs
TG9ja3ModGhpcyk7CiB9CiAKLUpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhl
Y1N0YXRlKiBleGVjKQotICAgIDogRHJvcEFsbExvY2tzKGV4ZWMgPyAmZXhlYy0+dm0oKSA6IG51
bGxwdHIpCitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCisgICAgOiBEcm9wQWxsTG9ja3MoZ2xvYmFsT2JqZWN0ID8gJmdsb2Jh
bE9iamVjdC0+dm0oKSA6IG51bGxwdHIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMb2NrLmgKaW5kZXggZTZlODU3YmFhN2Q1YzM2MDIyNmJhNTU0OGI3NzZhZDg1MzYyODIw
YS4uZWZiNGQ3ZWUxMWUyNTZlNDliMjdkZTNkZDhkMmJhOTQzZjRkNTg2NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgKQEAgLTUyLDggKzUyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIFZNOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CiBjbGFzcyBKU0xvY2s7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIC8vIFRoaXMg
Y2xhc3MgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbGVnYWN5
IHNpbmdsZSAKIC8vIHNoYXJlZCBWTS4KQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgSlNMb2NrSG9s
ZGVyIHsKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoVk0qKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoVk0mKTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNMb2NrSG9sZGVyKEpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
SlNMb2NrSG9sZGVyKCk7CiAKQEAgLTg3LDggKzg3LDggQEAgY2xhc3MgSlNMb2NrIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgbG9jaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrKCk7CiAKLSAgICBz
dGF0aWMgdm9pZCBsb2NrKEV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyB2b2lkIHVubG9jayhFeGVj
U3RhdGUqKTsKKyAgICBzdGF0aWMgdm9pZCBsb2NrKEpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3Rh
dGljIHZvaWQgdW5sb2NrKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgbG9jayhW
TSYpOwogICAgIHN0YXRpYyB2b2lkIHVubG9jayhWTSYpOwogCkBAIC0xMDcsNyArMTA3LDcgQEAg
Y2xhc3MgSlNMb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTTG9jaz4gewogICAg
IGNsYXNzIERyb3BBbGxMb2NrcyB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERyb3BB
bGxMb2Nrcyk7CiAgICAgcHVibGljOgotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxs
TG9ja3MoRXhlY1N0YXRlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2Nr
cyhKU0dsb2JhbE9iamVjdCopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9j
a3MoVk0qKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKFZNJik7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Ecm9wQWxsTG9ja3MoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwLmNwcAppbmRleCA0NWY0NDE0ZDZkMzAyNDkzYWNlZmMwNDM4Mjc1
YWZjMDUzZWViZjMyLi40MTQ1MGY4MGMzYjQ0YjdkODA5MTQwYzc5YTM0NWEzMWU2YzZhZjQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCkBAIC0zMywxNSArMzMsMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAi
TWFwIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU01hcCkgfTsKIAotU3RyaW5nIEpTTWFwOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3Qq
LCBFeGVjU3RhdGUqKQorU3RyaW5nIEpTTWFwOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCopCiB7CiAgICAgcmV0dXJuICJPYmplY3QiX3M7CiB9CiAKLUpTTWFw
KiBKU01hcDo6Y2xvbmUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorSlNNYXAqIEpTTWFwOjpjbG9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEpTTWFwKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNNYXAodm0sIHN0cnVj
dHVyZSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtLCB0aGlzKTsKKyAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LCB2bSwgdGhpcyk7CiAgICAg
cmV0dXJuIGluc3RhbmNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaApp
bmRleCBmMGViYjU0ZDE4NDJjMGYzNGYwZmEzMDM0NjU0YTBkZjY1YzE1ZjExLi45ZGE4ZGY1Y2M3
N2MzZjdmZWE4YjJjY2ZlYzQwOGJiNWNiOGYxY2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwLmgKQEAgLTQxLDIxICs0MSwyMSBAQCBjbGFzcyBKU01hcCBmaW5hbCA6IHB1Ymxp
YyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pgog
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhKU01hcFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAg
ICAgICAgIEpTTWFwKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFw
Pih2bS5oZWFwKSkgSlNNYXAodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbihleGVjLCB2bSk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihn
bG9iYWxPYmplY3QsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNW
YWx1ZSB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAg
YWRkKGV4ZWMsIGtleSwgdmFsdWUpOworICAgICAgICBhZGQoZ2xvYmFsT2JqZWN0LCBrZXksIHZh
bHVlKTsKICAgICB9CiAKICAgICBib29sIGlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNl
cnZhYmxlKCk7CiAgICAgYm9vbCBjYW5DbG9uZUZhc3RBbmROb25PYnNlcnZhYmxlKFN0cnVjdHVy
ZSopOwotICAgIEpTTWFwKiBjbG9uZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSopOworICAg
IEpTTWFwKiBjbG9uZShKU0dsb2JhbE9iamVjdCosIFZNJiwgU3RydWN0dXJlKik7CiAKIHByaXZh
dGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTYzLDcgKzYz
LDcgQEAgY2xhc3MgSlNNYXAgZmluYWwgOiBwdWJsaWMgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj4KICAgICB7CiAgICAgfQogCi0gICAgc3RhdGlj
IFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKKyAgICBz
dGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
Kik7CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8SlNNYXA+Ojp2YWx1ZSwgIlJl
cXVpcmVkIGZvciBKU1R5cGUgYmFzZWQgY2FzdGluZyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAppbmRleCAyNTYwZGNhMTcxZGJmOGYwY2M3
OWI0NjQwNTc0NDc5MDc0Mjg1NWYxLi5mODBiMzQwMTBkMzViMjZmZDM5NmZlOGRkNTlkMGQ0NzQ0
ZTdiM2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJh
dG9yLmNwcApAQCAtNDksMTQgKzQ5LDEzIEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1faXRlcik7CiB9CiAKLUpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3Jl
YXRlUGFpcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUp
CitKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChrZXkpOwogICAgIGFyZ3MuYXBwZW5kKHZh
bHVlKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3Qo
Y2FsbEZyYW1lLT52bSgpKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCAw
LCBnbG9iYWxPYmplY3QsIGFyZ3MpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgYXJn
cyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0
b3IuaAppbmRleCAyYTA5MGU2MDUzMmNhMDE1ZDM2Y2NhNTIyODhhY2JkMzQ1ZjE5ZDkwLi40ODkz
NmE3NWVkM2NjMjgzNDU4NTQzZjFiMmMxNWNmODUyZjdkNTRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCkBAIC01MSwxMiArNTEsMTIgQEAgY2xh
c3MgSlNNYXBJdGVyYXRvciBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSog
YWR2YW5jZUl0ZXIoRXhlY1N0YXRlKiBleGVjKQorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1
Y2tldFR5cGUqIGFkdmFuY2VJdGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAg
ewogICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogcHJldiA9IG1faXRlci5nZXQoKTsKICAgICAg
ICAgaWYgKCFwcmV2KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAg
ICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBtX2l0ZXItPm5leHQoKTsKICAgICAg
ICAgd2hpbGUgKGJ1Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQoKSkKICAgICAgICAgICAgIGJ1Y2tl
dCA9IGJ1Y2tldC0+bmV4dCgpOwpAQCAtNjcsOSArNjcsOSBAQCBjbGFzcyBKU01hcEl0ZXJhdG9y
IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIHNldEl0ZXJhdG9yKHZtLCBidWNrZXQp
OyAvLyBXZSBrZWVwIG1faXRlciBvbiB0aGUgbGFzdCB2YWx1ZSBzaW5jZSB0aGUgZmlyc3QgdGhp
bmcgd2UgZG8gaW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsIG5leHQoKS4KICAgICAgICAgcmV0dXJu
IGJ1Y2tldDsKICAgICB9Ci0gICAgYm9vbCBuZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYg
dmFsdWUpCisgICAgYm9vbCBuZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGFk
dmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYWR2
YW5jZUl0ZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTc4LDEzICs3OCwxMyBAQCBjbGFzcyBKU01hcEl0ZXJhdG9y
IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIGVsc2UgaWYgKG1fa2luZCA9PSBJdGVy
YXRlS2V5KQogICAgICAgICAgICAgdmFsdWUgPSBidWNrZXQtPmtleSgpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVj
a2V0LT52YWx1ZSgpKTsKKyAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihnbG9iYWxPYmpl
Y3QsIGJ1Y2tldC0+a2V5KCksIGJ1Y2tldC0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIGJvb2wgbmV4dEtleVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBib29sIG5leHRLZXlWYWx1ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlJiBrZXksIEpTVmFsdWUmIHZhbHVlKQogICAgIHsK
LSAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOwor
ICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYWR2YW5jZUl0ZXIoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTEwOCw3ICsxMDgsNyBAQCBjbGFzcyBKU01hcEl0ZXJhdG9yIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIEpTTWFwKik7Ci0gICAgSlNWYWx1ZSBjcmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFs
dWUsIEpTVmFsdWUpOworICAgIEpTVmFsdWUgY3JlYXRlUGFpcihKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU01hcD4gbV9tYXA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01pY3JvdGFzay5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01pY3JvdGFzay5jcHAKaW5kZXggZjliMzMzMTJk
N2VjOTg1NTM5MjEwMjYzMDM1MTAwYjA2OGJlYzlkZC4uYjAzY2MwY2U3M2YwNmJjNTc4M2NkZTFl
Yjc5NTdlOGM5NmU1NzZiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNaWNyb3Rhc2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWljcm90YXNrLmNwcApAQCAtNTUsNyArNTUsNyBAQCBjbGFzcyBKU01pY3JvdGFzayBmaW5hbCA6
IHB1YmxpYyBNaWNyb3Rhc2sgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIHJ1bihFeGVj
U3RhdGUqKSBvdmVycmlkZTsKKyAgICB2b2lkIHJ1bihKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRl
OwogCiAgICAgU3Ryb25nPFVua25vd24+IG1fam9iOwogICAgIFN0cm9uZzxVbmtub3duPiBtX2Fy
Z3VtZW50c1ttYXhBcmd1bWVudHNdOwpAQCAtNzEsOSArNzEsOSBAQCBSZWY8TWljcm90YXNrPiBj
cmVhdGVKU01pY3JvdGFzayhWTSYgdm0sIEpTVmFsdWUgam9iLCBKU1ZhbHVlIGFyZ3VtZW50MCwg
SlNWYWx1ZQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEpTTWljcm90YXNrKHZtLCBqb2IsIGFy
Z3VtZW50MCwgYXJndW1lbnQxLCBhcmd1bWVudDIpKTsKIH0KIAotdm9pZCBKU01pY3JvdGFzazo6
cnVuKEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgSlNNaWNyb3Rhc2s6OnJ1bihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKIAogICAgIENhbGxEYXRhIGhhbmRsZXJDYWxsRGF0YTsKQEAgLTkwLDEwICs5MCwx
MCBAQCB2b2lkIEpTTWljcm90YXNrOjpydW4oRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChVTkxJ
S0VMWShoYW5kbGVyQXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChVTkxJS0VMWShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmhhc0RlYnVn
Z2VyKCkpKQotICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkt
PndpbGxSdW5NaWNyb3Rhc2soKTsKKyAgICBpZiAoVU5MSUtFTFkoZ2xvYmFsT2JqZWN0LT5oYXNE
ZWJ1Z2dlcigpKSkKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLT53aWxsUnVuTWlj
cm90YXNrKCk7CiAKLSAgICBwcm9maWxlZENhbGwoZXhlYywgUHJvZmlsaW5nUmVhc29uOjpNaWNy
b3Rhc2ssIG1fam9iLmdldCgpLCBoYW5kbGVyQ2FsbFR5cGUsIGhhbmRsZXJDYWxsRGF0YSwganNV
bmRlZmluZWQoKSwgaGFuZGxlckFyZ3VtZW50cyk7CisgICAgcHJvZmlsZWRDYWxsKGdsb2JhbE9i
amVjdCwgUHJvZmlsaW5nUmVhc29uOjpNaWNyb3Rhc2ssIG1fam9iLmdldCgpLCBoYW5kbGVyQ2Fs
bFR5cGUsIGhhbmRsZXJDYWxsRGF0YSwganNVbmRlZmluZWQoKSwgaGFuZGxlckFyZ3VtZW50cyk7
CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAppbmRleCBmMjQ0ODg3
YTlhM2E4ZmY2NjRmMTUwMmFiODM2ZTdlMWYxY2I2ZGQ2Li5mZWI1NTEwODc0ODAzOTBkMzQwOWU2
Y2FhOTQ4MDBiNzI5ZjdjNzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcApAQCAtNzYsMjkgKzc2LDI5IEBAIHZvaWQg
SlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1vZHVsZVJlY29y
ZFNsb3QoKSk7CiB9CiAKLWJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTTW9kdWxl
RW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KGNl
bGwpOwotICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0
aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKTsKKyAgICBBYnN0cmFjdE1vZHVsZVJl
Y29yZDo6UmVzb2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCkt
PnJlc29sdmVJbXBvcnQoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9w
ZXJ0eU5hbWUudWlkKCkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgaWYgKHJlc29sdXRpb24udHlwZSA9PSBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1
dGlvbjo6VHlwZTo6UmVzb2x2ZWQpIHsKICAgICAgICAgLy8gV2hlbiByZXNvbHZlSW1wb3J0IHJl
c29sdmVzIHRoZSByZXNvbHV0aW9uLCB0aGUgaW1wb3J0ZWQgbW9kdWxlIGVudmlyb25tZW50IG11
c3QgaGF2ZSB0aGUgYmluZGluZy4KICAgICAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogaW1wb3J0
ZWRNb2R1bGVFbnZpcm9ubWVudCA9IHJlc29sdXRpb24ubW9kdWxlUmVjb3JkLT5tb2R1bGVFbnZp
cm9ubWVudCgpOwogICAgICAgICBQcm9wZXJ0eVNsb3QgcmVkaXJlY3RTbG90KGltcG9ydGVkTW9k
dWxlRW52aXJvbm1lbnQsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwot
ICAgICAgICBib29sIHJlc3VsdCA9IGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4
ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lLCByZWRpcmVjdFNsb3QpOworICAgICAgICBib29sIHJl
c3VsdCA9IGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlTbG90KGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQsIGdsb2JhbE9iamVjdCwgcmVz
b2x1dGlvbi5sb2NhbE5hbWUsIHJlZGlyZWN0U2xvdCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQpOwogICAgICAgICBBU1NFUlQocmVkaXJlY3RTbG90LmlzVmFsdWUoKSk7
Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSByZWRpcmVjdFNsb3QuZ2V0VmFsdWUoZXhlYywgcmVz
b2x1dGlvbi5sb2NhbE5hbWUpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gcmVkaXJlY3RTbG90
LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcmVzb2x1dGlvbi5sb2NhbE5hbWUpOwogICAgICAgICBz
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmpl
Y3QsIHJlZGlyZWN0U2xvdC5hdHRyaWJ1dGVzKCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
IH0KIAotdm9pZCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXNBcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTTW9kdWxlRW52
aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogY2VsbCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXNBcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVu
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAg
aWYgKHByb3BlcnR5TmFtZXNBcnJheS5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygpKSB7CkBAIC0x
MDgsMzcgKzEwOCwzNyBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogY2VsbCwgRXhlY1N0YXRlKgogICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZXNBcnJheS5hZGQoaW1wb3J0RW50cnkubG9jYWxOYW1lKTsKICAgICAgICAg
fQogICAgIH0KLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXNBcnJheSwgbW9kZSk7CisgICAgcmV0dXJuIEJh
c2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZXNBcnJheSwgbW9kZSk7CiB9CiAKLWJvb2wgSlNNb2R1bGVFbnZpcm9ubWVu
dDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTTW9k
dWxlRW52aXJvbm1lbnQ6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
TW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICAvLyBBbGwgaW1wb3J0ZWQgYmluZGluZ3Mg
YXJlIGltbXV0YWJsZS4KLSAgICBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1dGlvbiByZXNv
bHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPnJlc29sdmVJbXBvcnQoZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSk7CisgICAgQWJzdHJh
Y3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24gcmVzb2x1dGlvbiA9IHRoaXNPYmplY3QtPm1vZHVs
ZVJlY29yZCgpLT5yZXNvbHZlSW1wb3J0KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwogICAgIGlmIChyZXNvbHV0aW9uLnR5cGUgPT0gQWJzdHJhY3RNb2R1bGVSZWNv
cmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHRocm93
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpwdXQodGhpc09iamVj
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CiB9CiAKLWJvb2wg
SlNNb2R1bGVFbnZpcm9ubWVudDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpTTW9kdWxlRW52aXJv
bm1lbnQ6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICAvLyBB
bGwgaW1wb3J0ZWQgYmluZGluZ3MgYXJlIGltbXV0YWJsZS4KLSAgICBBYnN0cmFjdE1vZHVsZVJl
Y29yZDo6UmVzb2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCkt
PnJlc29sdmVJbXBvcnQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1l
LnVpZCgpKSk7CisgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24gcmVzb2x1dGlv
biA9IHRoaXNPYmplY3QtPm1vZHVsZVJlY29yZCgpLT5yZXNvbHZlSW1wb3J0KGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGlmIChyZXNvbHV0aW9uLnR5cGUg
PT0gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZUVudmlyb25tZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZUVudmlyb25tZW50LmgKaW5kZXggZWMxZGY3ODUzZjE4MTcwZWExMjRkMTE3YjI4NzEyNzgx
MDdlMmY5Ni4uZGFlYWI2NjJmYzA0ZGFiZGQyNmQxNDE0NWYzNmViMTdlMjc5MmE3OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQu
aApAQCAtNzQsMTAgKzc0LDEwIEBAIGNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQgZmluYWwgOiBw
dWJsaWMgSlNMZXhpY2FsRW52aXJvbm1lbnQgewogICAgICAgICByZXR1cm4gbW9kdWxlUmVjb3Jk
U2xvdCgpLmdldCgpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIHN0YXRp
YyBib29sIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpOwogCiBw
cml2YXRlOgogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQoVk0mLCBTdHJ1Y3R1cmUqLCBKU1Njb3Bl
KiwgU3ltYm9sVGFibGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlTG9hZGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlTG9hZGVyLmNwcAppbmRleCAwZTVhOTdlOGMzMTAyMDdhNTNiZDkxNjI4Y2UzY2UzOTYy
YjU2ZDE4Li41N2M4NDAzYTBmYmM2N2YwOTEyMzhkMjVhMTRjN2MxMmJjZDFkZGI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCkBAIC0x
MDEsMzcgKzEwMSwzNyBAQCBKU01vZHVsZUxvYWRlcjo6SlNNb2R1bGVMb2FkZXIoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKIH0KIAotdm9pZCBKU01vZHVsZUxvYWRlcjo6ZmluaXNo
Q3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCit2b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0pCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VS
VChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUo
ZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOworICAgIEpTTWFwKiBtYXAg
PSBKU01hcDo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0
dXJlKCkpOwogICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlZ2lzdHJ5IiksIG1hcCk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIFN0cmluZyBwcmludGFibGVNb2R1bGVL
ZXkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKK3N0YXRpYyBTdHJpbmcgcHJpbnRhYmxl
TW9kdWxlS2V5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5KQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoa2V5
LmlzU3RyaW5nKCkgfHwga2V5LmlzU3ltYm9sKCkpIHsKLSAgICAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBrZXkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBrZXkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgICAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOyAvLyBUaGlzIGlzIE9LIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMganVzdCBm
b3IgZGVidWdnaW5nIHB1cnBvc2UuCiAgICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWUuaW1wbCgp
OwogICAgIH0KICAgICByZXR1cm4gdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLmlt
cGwoKTsKIH0KIAotSlNBcnJheSogSlNNb2R1bGVMb2FkZXI6OmRlcGVuZGVuY3lLZXlzSWZFdmFs
dWF0ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKK0pTQXJyYXkqIEpTTW9kdWxlTG9h
ZGVyOjpkZXBlbmRlbmN5S2V5c0lmRXZhbHVhdGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUga2V5KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAotICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdl
dChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5kZXBlbmRlbmN5S2V5c0lm
RXZhbHVhdGVkUHVibGljTmFtZSgpKSk7CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0
PEpTT2JqZWN0Kj4oZ2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuZGVwZW5kZW5jeUtleXNJZkV2YWx1YXRlZFB1YmxpY05hbWUoKSkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNh
bGxEYXRhKTsKQEAgLTE0MCwxOCArMTQwLDE4IEBAIEpTQXJyYXkqIEpTTW9kdWxlTG9hZGVyOjpk
ZXBlbmRlbmN5S2V5c0lmRXZhbHVhdGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
a2V5KTsKIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzLCBhcmd1bWVudHMpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gY2Fs
bChnbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3Vt
ZW50cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBy
ZXR1cm4ganNEeW5hbWljQ2FzdDxKU0FycmF5Kj4odm0sIHJlc3VsdCk7CiB9CiAKLUpTVmFsdWUg
SlNNb2R1bGVMb2FkZXI6OnByb3ZpZGVGZXRjaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQorSlNWYWx1ZSBKU01vZHVsZUxvYWRlcjo6
cHJvdmlkZUZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U09iamVjdCo+KGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wcm92
aWRlRmV0Y2hQdWJsaWNOYW1lKCkpKTsKKyAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8
SlNPYmplY3QqPihnZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5wcm92aWRlRmV0Y2hQdWJsaWNOYW1lKCkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gSlNDOjpnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTE2Mywx
NSArMTYzLDE1IEBAIEpTVmFsdWUgSlNNb2R1bGVMb2FkZXI6OnByb3ZpZGVGZXRjaChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBjb25zdCBTb3VyY2VDCiAgICAgYXJndW1lbnRzLmFwcGVu
ZChKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwgV1RGTW92ZShzb3VyY2UpKSk7CiAgICAgQVNTRVJU
KCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzLCBhcmd1
bWVudHMpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGwoZ2xvYmFsT2JqZWN0
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzLCBhcmd1bWVudHMpKTsKIH0KIAot
SlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpsb2FkQW5kRXZhbHVhdGVNb2R1bGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywg
SlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQorSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVy
Ojpsb2FkQW5kRXZhbHVhdGVNb2R1bGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBtb2R1bGVOYW1lLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hl
cikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubG9hZEFuZEV2YWx1YXRlTW9kdWxlUHVibGljTmFt
ZSgpKSk7CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGds
b2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubG9hZEFuZEV2YWx1
YXRlTW9kdWxlUHVibGljTmFtZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBKU0M6OmdldENhbGxEYXRhKHZtLCBmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtMTgzLDE3ICsx
ODMsMTcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpsb2FkQW5kRXZhbHVh
dGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAgICBhcmd1bWVudHMuYXBwZW5kKHNj
cmlwdEZldGNoZXIpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CiAK
LSAgICBKU1ZhbHVlIHByb21pc2UgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIHRoaXMsIGFyZ3VtZW50cyk7CisgICAgSlNWYWx1ZSBwcm9taXNlID0gY2FsbChnbG9i
YWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3VtZW50cyk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgcmV0dXJuIGpz
Q2FzdDxKU0ludGVybmFsUHJvbWlzZSo+KHByb21pc2UpOwogfQogCi1KU0ludGVybmFsUHJvbWlz
ZSogSlNNb2R1bGVMb2FkZXI6OmxvYWRNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG1v
ZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQorSlNJ
bnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpsb2FkTW9kdWxlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbW9kdWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBK
U1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0
Kj4oZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmxvYWRNb2R1bGVQ
dWJsaWNOYW1lKCkpKTsKKyAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3Qq
PihnZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5sb2Fk
TW9kdWxlUHVibGljTmFtZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBK
U0M6OmdldENhbGxEYXRhKHZtLCBmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtMjA1LDE3ICsyMDUs
MTcgQEAgSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpsb2FkTW9kdWxlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBtb2R1bGVOYW0KICAgICBhcmd1bWVudHMuYXBwZW5kKHNjcmlw
dEZldGNoZXIpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CiAKLSAg
ICBKU1ZhbHVlIHByb21pc2UgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXMsIGFyZ3VtZW50cyk7CisgICAgSlNWYWx1ZSBwcm9taXNlID0gY2FsbChnbG9iYWxP
YmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3VtZW50cyk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgcmV0dXJuIGpzQ2Fz
dDxKU0ludGVybmFsUHJvbWlzZSo+KHByb21pc2UpOwogfQogCi1KU1ZhbHVlIEpTTW9kdWxlTG9h
ZGVyOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG1vZHVs
ZUtleSwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQorSlNWYWx1ZSBKU01vZHVsZUxvYWRlcjo6bGlu
a0FuZEV2YWx1YXRlTW9kdWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
bW9kdWxlS2V5LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganND
YXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LmxpbmtBbmRFdmFsdWF0ZU1vZHVsZVB1YmxpY05hbWUoKSkpOworICAgIEpTT2JqZWN0KiBmdW5j
dGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLmxpbmtBbmRFdmFsdWF0ZU1vZHVsZVB1YmxpY05hbWUoKSkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRhKHZtLCBmdW5jdGlv
biwgY2FsbERhdGEpOwpAQCAtMjI2LDE1ICsyMjYsMTUgQEAgSlNWYWx1ZSBKU01vZHVsZUxvYWRl
cjo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBtb2R1bGVL
ZXkKICAgICBhcmd1bWVudHMuYXBwZW5kKHNjcmlwdEZldGNoZXIpOwogICAgIEFTU0VSVCghYXJn
dW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpcywgYXJndW1lbnRz
KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsKGdsb2JhbE9iamVjdCwgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpcywgYXJndW1lbnRzKSk7CiB9CiAKLUpTSW50
ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6cmVxdWVzdEltcG9ydE1vZHVsZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgSlNWYWx1ZSBwYXJhbWV0ZXJz
LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCitKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2Fk
ZXI6OnJlcXVlc3RJbXBvcnRNb2R1bGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2Ny
aXB0RmV0Y2hlcikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICBhdXRvKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5yZXF1ZXN0SW1wb3J0TW9kdWxlUHVibGlj
TmFtZSgpKSk7CisgICAgYXV0byogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZ2xv
YmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5yZXF1ZXN0SW1wb3J0
TW9kdWxlUHVibGljTmFtZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgYXV0byBjYWxsVHlwZSA9IEpTQzo6
Z2V0Q2FsbERhdGEodm0sIGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkBAIC0yNDYsMTQzICsyNDYsMTM4
IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6cmVxdWVzdEltcG9ydE1vZHVs
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkCiAgICAgYXJndW1lbnRzLmFwcGVuZChzY3JpcHRG
ZXRjaGVyKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwogCi0gICAg
SlNWYWx1ZSBwcm9taXNlID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzLCBhcmd1bWVudHMpOworICAgIEpTVmFsdWUgcHJvbWlzZSA9IGNhbGwoZ2xvYmFsT2Jq
ZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzLCBhcmd1bWVudHMpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHJldHVybiBqc0Nhc3Q8
SlNJbnRlcm5hbFByb21pc2UqPihwcm9taXNlKTsKIH0KIAotSlNJbnRlcm5hbFByb21pc2UqIEpT
TW9kdWxlTG9hZGVyOjppbXBvcnRNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogbW9k
dWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VPcmlnaW4mIHJlZmVycmVy
KQorSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjppbXBvcnRNb2R1bGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIG1vZHVsZU5hbWUsIEpTVmFsdWUgcGFy
YW1ldGVycywgY29uc3QgU291cmNlT3JpZ2luJiByZWZlcnJlcikKIHsKICAgICBpZiAoT3B0aW9u
czo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQotICAgICAgICBkYXRhTG9nKCJMb2FkZXIgW2lt
cG9ydF0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIG1vZHVsZU5hbWUpLCAiXG4iKTsKKyAg
ICAgICAgZGF0YUxvZygiTG9hZGVyIFtpbXBvcnRdICIsIHByaW50YWJsZU1vZHVsZUtleShnbG9i
YWxPYmplY3QsIG1vZHVsZU5hbWUpLCAiXG4iKTsKIAotICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVM
b2FkZXJJbXBvcnRNb2R1bGUpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlcklt
cG9ydE1vZHVsZShnbG9iYWxPYmplY3QsIGV4ZWMsIHRoaXMsIG1vZHVsZU5hbWUsIHBhcmFtZXRl
cnMsIHJlZmVycmVyKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBn
bG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckltcG9y
dE1vZHVsZShnbG9iYWxPYmplY3QsIHRoaXMsIG1vZHVsZU5hbWUsIHBhcmFtZXRlcnMsIHJlZmVy
cmVyKSk7CiAKLSAgICBhdXRvKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6
OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIGF1dG8qIGRlZmVycmVkID0gSlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKIAogICAgIGF1dG8gY2F0Y2hT
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIGF1dG8gbW9kdWxlTmFtZVN0cmlu
ZyA9IG1vZHVsZU5hbWUtPnZhbHVlKGV4ZWMpOworICAgIGF1dG8gbW9kdWxlTmFtZVN0cmluZyA9
IG1vZHVsZU5hbWUtPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKGNhdGNo
U2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gY2F0Y2hT
Y29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKICAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwotICAgICAgICBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CisgICAg
ICAgIGRlZmVycmVkLT5yZWplY3QoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogICAgICAgICBj
YXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cHJv
bWlzZSgpOwogICAgIH0KLSAgICBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4
ZWMsIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBpbXBvcnQgdGhlIG1vZHVsZSAnIiwgbW9kdWxlTmFt
ZVN0cmluZywgIicuIikpKTsKKyAgICBkZWZlcnJlZC0+cmVqZWN0KGdsb2JhbE9iamVjdCwgY3Jl
YXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCBtYWtlU3RyaW5nKCJDb3VsZCBub3QgaW1wb3J0IHRoZSBt
b2R1bGUgJyIsIG1vZHVsZU5hbWVTdHJpbmcsICInLiIpKSk7CiAgICAgY2F0Y2hTY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi1JZGVu
dGlmaWVyIEpTTW9kdWxlTG9hZGVyOjpyZXNvbHZlU3luYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgbmFtZSwgSlNWYWx1ZSByZWZlcnJlciwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQorSWRlbnRp
ZmllciBKU01vZHVsZUxvYWRlcjo6cmVzb2x2ZVN5bmMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJlZmVycmVyLCBKU1ZhbHVlIHNjcmlwdEZldGNo
ZXIpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKLSAgICAg
ICAgZGF0YUxvZygiTG9hZGVyIFtyZXNvbHZlXSAiLCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywg
bmFtZSksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJMb2FkZXIgW3Jlc29sdmVdICIsIHByaW50
YWJsZU1vZHVsZUtleShnbG9iYWxPYmplY3QsIG5hbWUpLCAiXG4iKTsKIAotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAg
aWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVy
UmVzb2x2ZSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUoKS0+bW9kdWxlTG9hZGVyUmVzb2x2ZShnbG9iYWxPYmplY3QsIGV4ZWMsIHRoaXMsIG5h
bWUsIHJlZmVycmVyLCBzY3JpcHRGZXRjaGVyKTsKLSAgICByZXR1cm4gbmFtZS50b1Byb3BlcnR5
S2V5KGV4ZWMpOworICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJSZXNvbHZlKGdsb2JhbE9iamVjdCwgdGhpcywgbmFtZSwg
cmVmZXJyZXIsIHNjcmlwdEZldGNoZXIpOworICAgIHJldHVybiBuYW1lLnRvUHJvcGVydHlLZXko
Z2xvYmFsT2JqZWN0KTsKIH0KIAotSlNJbnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpy
ZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJlZmVycmVyLCBK
U1ZhbHVlIHNjcmlwdEZldGNoZXIpCitKU0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6
OnJlc29sdmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBuYW1lLCBKU1Zh
bHVlIHJlZmVycmVyLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3Jl
YXRlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBu
dWxscHRyKTsKIAogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogCi0gICAgY29uc3QgSWRlbnRpZmllciBtb2R1bGVLZXkgPSByZXNvbHZlU3luYyhleGVjLCBu
YW1lLCByZWZlcnJlciwgc2NyaXB0RmV0Y2hlcik7CisgICAgY29uc3QgSWRlbnRpZmllciBtb2R1
bGVLZXkgPSByZXNvbHZlU3luYyhnbG9iYWxPYmplY3QsIG5hbWUsIHJlZmVycmVyLCBzY3JpcHRG
ZXRjaGVyKTsKICAgICBpZiAoVU5MSUtFTFkoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkpIHsKICAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOwogICAgICAg
ICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZGVm
ZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOworICAgICAgICBhdXRvIHJlc3VsdCA9IGRl
ZmVycmVkLT5yZWplY3QoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogICAgICAgICBjYXRjaFNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAg
IGF1dG8gcmVzdWx0ID0gZGVmZXJyZWQtPnJlc29sdmUoZXhlYywgaWRlbnRpZmllclRvSlNWYWx1
ZSh2bSwgbW9kdWxlS2V5KSk7CisgICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVzb2x2ZShn
bG9iYWxPYmplY3QsIGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIG1vZHVsZUtleSkpOwogICAgIGNh
dGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0lu
dGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OmZldGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQorSlNJ
bnRlcm5hbFByb21pc2UqIEpTTW9kdWxlTG9hZGVyOjpmZXRjaChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlw
dEZldGNoZXIpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkK
LSAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtmZXRjaF0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4
ZWMsIGtleSksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJMb2FkZXIgW2ZldGNoXSAiLCBwcmlu
dGFibGVNb2R1bGVLZXkoZ2xvYmFsT2JqZWN0LCBrZXkpLCAiXG4iKTsKIAotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyRmV0Y2gpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCkt
Pm1vZHVsZUxvYWRlckZldGNoKGdsb2JhbE9iamVjdCwgZXhlYywgdGhpcywga2V5LCBwYXJhbWV0
ZXJzLCBzY3JpcHRGZXRjaGVyKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRl
ckZldGNoKGdsb2JhbE9iamVjdCwgdGhpcywga2V5LCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRjaGVy
KSk7CiAKLSAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJu
YWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIEpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBudWxscHRyKTsKIAogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogCi0gICAgU3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1dURlN0cmluZyhl
eGVjKTsKKyAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5LnRvV1RGU3RyaW5nKGdsb2JhbE9iamVj
dCk7CiAgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAg
IEpTVmFsdWUgZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKICAg
ICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBkZWZlcnJlZC0+cmVq
ZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIGRlZmVycmVkLT5yZWplY3QoZ2xvYmFsT2Jq
ZWN0LCBleGNlcHRpb24pOwogICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwogICAgIH0KLSAgICBkZWZlcnJlZC0+
cmVqZWN0KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIkNvdWxkIG5vdCBvcGVu
IHRoZSBtb2R1bGUgJyIsIG1vZHVsZUtleSwgIicuIikpKTsKKyAgICBkZWZlcnJlZC0+cmVqZWN0
KGdsb2JhbE9iamVjdCwgY3JlYXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCBtYWtlU3RyaW5nKCJDb3Vs
ZCBub3Qgb3BlbiB0aGUgbW9kdWxlICciLCBtb2R1bGVLZXksICInLiIpKSk7CiAgICAgY2F0Y2hT
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwog
fQogCi1KU09iamVjdCogSlNNb2R1bGVMb2FkZXI6OmNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVz
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNv
cmQsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKK0pTT2JqZWN0KiBKU01vZHVsZUxvYWRlcjo6Y3Jl
YXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBrZXksIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQsIEpTVmFsdWUgc2NyaXB0RmV0
Y2hlcikKIHsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpOwogICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKCktPm1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKQotICAgICAg
ICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVM
b2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhnbG9iYWxPYmplY3QsIGV4ZWMsIHRoaXMs
IGtleSwgbW9kdWxlUmVjb3JkLCBzY3JpcHRGZXRjaGVyKTsKLSAgICByZXR1cm4gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udWxsUHJvdG90
eXBlT2JqZWN0U3RydWN0dXJlKCkpOworICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVy
dGllcyhnbG9iYWxPYmplY3QsIHRoaXMsIGtleSwgbW9kdWxlUmVjb3JkLCBzY3JpcHRGZXRjaGVy
KTsKKyAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBn
bG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiB9CiAKLUpTVmFs
dWUgSlNNb2R1bGVMb2FkZXI6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXks
IEpTVmFsdWUgbW9kdWxlUmVjb3JkVmFsdWUsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKK0pTVmFs
dWUgSlNNb2R1bGVMb2FkZXI6OmV2YWx1YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUga2V5LCBKU1ZhbHVlIG1vZHVsZVJlY29yZFZhbHVlLCBKU1ZhbHVlIHNjcmlwdEZl
dGNoZXIpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKLSAg
ICAgICAgZGF0YUxvZygiTG9hZGVyIFtldmFsdWF0ZV0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4
ZWMsIGtleSksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJMb2FkZXIgW2V2YWx1YXRlXSAiLCBw
cmludGFibGVNb2R1bGVLZXkoZ2xvYmFsT2JqZWN0LCBrZXkpLCAiXG4iKTsKIAotICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAg
ICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9h
ZGVyRXZhbHVhdGUpCi0gICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckV2YWx1YXRlKGdsb2JhbE9iamVjdCwgZXhlYywgdGhp
cywga2V5LCBtb2R1bGVSZWNvcmRWYWx1ZSwgc2NyaXB0RmV0Y2hlcik7CisgICAgICAgIHJldHVy
biBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckV2
YWx1YXRlKGdsb2JhbE9iamVjdCwgdGhpcywga2V5LCBtb2R1bGVSZWNvcmRWYWx1ZSwgc2NyaXB0
RmV0Y2hlcik7CiAKLSAgICByZXR1cm4gZXZhbHVhdGVOb25WaXJ0dWFsKGV4ZWMsIGtleSwgbW9k
dWxlUmVjb3JkVmFsdWUsIHNjcmlwdEZldGNoZXIpOworICAgIHJldHVybiBldmFsdWF0ZU5vblZp
cnR1YWwoZ2xvYmFsT2JqZWN0LCBrZXksIG1vZHVsZVJlY29yZFZhbHVlLCBzY3JpcHRGZXRjaGVy
KTsKIH0KIAotSlNWYWx1ZSBKU01vZHVsZUxvYWRlcjo6ZXZhbHVhdGVOb25WaXJ0dWFsKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNWYWx1ZSBtb2R1bGVSZWNvcmRWYWx1ZSwgSlNWYWx1ZSkK
K0pTVmFsdWUgSlNNb2R1bGVMb2FkZXI6OmV2YWx1YXRlTm9uVmlydHVhbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlLCBKU1ZhbHVlIG1vZHVsZVJlY29yZFZhbHVlLCBKU1Zh
bHVlKQogewotICAgIGlmIChhdXRvKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEFic3Ry
YWN0TW9kdWxlUmVjb3JkKj4oZXhlYy0+dm0oKSwgbW9kdWxlUmVjb3JkVmFsdWUpKQotICAgICAg
ICByZXR1cm4gbW9kdWxlUmVjb3JkLT5ldmFsdWF0ZShleGVjKTsKKyAgICBpZiAoYXV0byogbW9k
dWxlUmVjb3JkID0ganNEeW5hbWljQ2FzdDxBYnN0cmFjdE1vZHVsZVJlY29yZCo+KGdsb2JhbE9i
amVjdC0+dm0oKSwgbW9kdWxlUmVjb3JkVmFsdWUpKQorICAgICAgICByZXR1cm4gbW9kdWxlUmVj
b3JkLT5ldmFsdWF0ZShnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCi1KU01vZHVsZU5hbWVzcGFjZU9iamVjdCogSlNNb2R1bGVMb2FkZXI6OmdldE1vZHVsZU5h
bWVzcGFjZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbW9kdWxlUmVjb3JkVmFsdWUp
CitKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogSlNNb2R1bGVMb2FkZXI6OmdldE1vZHVsZU5hbWVz
cGFjZU9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG1vZHVsZVJl
Y29yZFZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIGF1dG8qIG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nhc3Q8QWJzdHJhY3RNb2R1
bGVSZWNvcmQqPih2bSwgbW9kdWxlUmVjb3JkVmFsdWUpOwogICAgIGlmICghbW9kdWxlUmVjb3Jk
KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgbW9kdWxlUmVjb3JkLT5nZXRN
b2R1bGVOYW1lc3BhY2UoZXhlYykpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgbW9k
dWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1lc3BhY2UoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KQEAgLTM5MiwxOCArMzg3LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbW9kdWxlTG9hZGVyUGFyc2VNb2R1bGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoY2Fs
bEZyYW1lLCBnbG9iYWxPYmplY3QpOworICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRl
ZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVj
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAg
IGF1dG8gcmVqZWN0ID0gWyZdIChKU1ZhbHVlIHJlamVjdGlvblJlYXNvbikgewogICAgICAgICBj
YXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZGVmZXJy
ZWQtPnJlamVjdChjYWxsRnJhbWUsIHJlamVjdGlvblJlYXNvbik7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gZGVmZXJyZWQtPnJlamVjdChnbG9iYWxPYmplY3QsIHJlamVjdGlvblJlYXNvbik7CiAg
ICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogICAgIH07CiAKLSAgICBjb25zdCBJZGVudGlmaWVyIG1vZHVs
ZUtleSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShjYWxsRnJhbWUpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIgbW9kdWxlS2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50
b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gcmVqZWN0KGNhdGNoU2NvcGUuZXhjZXB0aW9u
KCkpOwogCkBAIC00MTMsNyArNDA4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
b2R1bGVMb2FkZXJQYXJzZU1vZHVsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBpZiAoc291cmNlQ29kZS5wcm92aWRlcigpLT5zb3Vy
Y2VUeXBlKCkgPT0gU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpXZWJBc3NlbWJseSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5OjppbnN0YW50aWF0ZShjYWxs
RnJhbWUsIGRlZmVycmVkLCBtb2R1bGVLZXksIGpzU291cmNlQ29kZSkpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHk6Omluc3RhbnRpYXRlKGdsb2JhbE9iamVj
dCwgZGVmZXJyZWQsIG1vZHVsZUtleSwganNTb3VyY2VDb2RlKSk7CiAjZW5kaWYKIAogICAgIENv
ZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKQEAgLTQyNiwxMSArNDIxLDExIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUGFyc2VNb2R1bGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IudG9FcnJv
ck9iamVjdChnbG9iYWxPYmplY3QsIHNvdXJjZUNvZGUpKTsKICAgICBBU1NFUlQobW9kdWxlUHJv
Z3JhbU5vZGUpOwogCi0gICAgTW9kdWxlQW5hbHl6ZXIgbW9kdWxlQW5hbHl6ZXIoY2FsbEZyYW1l
LCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIG1vZHVsZVByb2dyYW1Ob2RlLT52YXJEZWNsYXJhdGlv
bnMoKSwgbW9kdWxlUHJvZ3JhbU5vZGUtPmxleGljYWxWYXJpYWJsZXMoKSk7CisgICAgTW9kdWxl
QW5hbHl6ZXIgbW9kdWxlQW5hbHl6ZXIoZ2xvYmFsT2JqZWN0LCBtb2R1bGVLZXksIHNvdXJjZUNv
ZGUsIG1vZHVsZVByb2dyYW1Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSwgbW9kdWxlUHJvZ3JhbU5v
ZGUtPmxleGljYWxWYXJpYWJsZXMoKSk7CiAgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gcmVqZWN0KGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkp
OwogCi0gICAgYXV0byByZXN1bHQgPSBkZWZlcnJlZC0+cmVzb2x2ZShjYWxsRnJhbWUsIG1vZHVs
ZUFuYWx5emVyLmFuYWx5emUoKm1vZHVsZVByb2dyYW1Ob2RlKSk7CisgICAgYXV0byByZXN1bHQg
PSBkZWZlcnJlZC0+cmVzb2x2ZShnbG9iYWxPYmplY3QsIG1vZHVsZUFuYWx5emVyLmFuYWx5emUo
Km1vZHVsZVByb2dyYW1Ob2RlKSk7CiAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTQ0MSwxMyArNDM2LDEz
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUmVxdWVzdGVkTW9k
dWxlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIGF1dG8qIG1vZHVsZVJlY29yZCA9IGpzRHluYW1pY0Nhc3Q8QWJz
dHJhY3RNb2R1bGVSZWNvcmQqPih2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAgICAgaWYg
KCFtb2R1bGVSZWNvcmQpIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGNhbGxGcmFtZSwgbnVsbHB0cikpKTsKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0
RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpKSk7CiAKLSAgICBKU0FycmF5KiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGNhbGxGcmFtZSwgbnVsbHB0ciwgbW9kdWxlUmVjb3Jk
LT5yZXF1ZXN0ZWRNb2R1bGVzKCkuc2l6ZSgpKTsKKyAgICBKU0FycmF5KiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0ciwgbW9kdWxlUmVjb3JkLT5yZXF1
ZXN0ZWRNb2R1bGVzKCkuc2l6ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChhdXRvJiBrZXkg
OiBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKSkgewotICAgICAgICByZXN1bHQtPnB1
dERpcmVjdEluZGV4KGNhbGxGcmFtZSwgaSsrLCBqc1N0cmluZyh2bSwga2V5LmdldCgpKSk7Cisg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpKyssIGpzU3RyaW5n
KHZtLCBrZXkuZ2V0KCkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgfQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKQEAgLTQ2NCw3ICs0NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlck1vZHVsZURlY2xhcmF0aW9uSW5zdGFudGlhdGlvbihKU0dsb2JhbAogICAgIGlmIChP
cHRpb25zOjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCiAgICAgICAgIGRhdGFMb2coIkxvYWRl
ciBbbGlua10gIiwgbW9kdWxlUmVjb3JkLT5tb2R1bGVLZXkoKSwgIlxuIik7CiAKLSAgICBtb2R1
bGVSZWNvcmQtPmxpbmsoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKKyAgICBt
b2R1bGVSZWNvcmQtPmxpbmsoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00ODIsNyArNDc3LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKICAgICBKU01vZHVsZUxvYWRlciogbG9hZGVyID0g
anNEeW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKICAgICBpZiAoIWxvYWRlcikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+cmVzb2x2ZShj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSks
IGNhbGxGcmFtZS0+YXJndW1lbnQoMikpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxv
YWRlci0+cmVzb2x2ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxG
cmFtZS0+YXJndW1lbnQoMSksIGNhbGxGcmFtZS0+YXJndW1lbnQoMikpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJSZXNvbHZlU3luYyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTQ5Myw3ICs0ODgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclJlc29sdmVTeW5j
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgIEpTTW9kdWxlTG9hZGVyKiBsb2FkZXIg
PSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlTG9hZGVyKj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwogICAgIGlmICghbG9hZGVyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGF1dG8gcmVzdWx0ID0gbG9hZGVyLT5yZXNvbHZlU3luYyhjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSksIGNh
bGxGcmFtZS0+YXJndW1lbnQoMikpOworICAgIGF1dG8gcmVzdWx0ID0gbG9hZGVyLT5yZXNvbHZl
U3luYyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMSksIGNhbGxGcmFtZS0+YXJndW1lbnQoMikpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
aWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgcmVzdWx0KSk7CiB9CkBAIC01MDksNyArNTA0LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWwKICAgICBKU01vZHVsZUxvYWRlciogbG9hZGVyID0ganNE
eW5hbWljQ2FzdDxKU01vZHVsZUxvYWRlcio+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
ICAgICBpZiAoIWxvYWRlcikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxvYWRlci0+ZmV0Y2goY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXIt
PmZldGNoKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5h
cmd1bWVudCgxKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgyKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlckdldE1vZHVsZU5hbWVzcGFjZU9iamVjdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTUyMCw3
ICs1MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlckdldE1v
ZHVsZU5hbWVzcGFjZU9iamVjdChKU0dsb2JhbE9iamVjdAogICAgIGF1dG8qIGxvYWRlciA9IGpz
RHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7
CiAgICAgaWYgKCFsb2FkZXIpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgYXV0byogbW9kdWxlTmFtZXNwYWNlT2JqZWN0ID0gbG9hZGVyLT5nZXRN
b2R1bGVOYW1lc3BhY2VPYmplY3QoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsK
KyAgICBhdXRvKiBtb2R1bGVOYW1lc3BhY2VPYmplY3QgPSBsb2FkZXItPmdldE1vZHVsZU5hbWVz
cGFjZU9iamVjdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUobW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKIH0KQEAgLTUzNiw3ICs1MzEs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlckV2YWx1YXRlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgSlNNb2R1bGVMb2FkZXIqIGxvYWRlciA9
IGpzRHluYW1pY0Nhc3Q8SlNNb2R1bGVMb2FkZXIqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CiAgICAgaWYgKCFsb2FkZXIpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShsb2FkZXItPmV2YWx1YXRl
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgx
KSwgY2FsbEZyYW1lLT5hcmd1bWVudCgyKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
bG9hZGVyLT5ldmFsdWF0ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNh
bGxGcmFtZS0+YXJndW1lbnQoMSksIGNhbGxGcmFtZS0+YXJndW1lbnQoMikpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUxvYWRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVMb2FkZXIuaAppbmRleCBiMjM2OTkxNjQzZGQ1NGUxODVlYTY0NmE0ZGQ4MmNkYzg1M2M0Yzlh
Li4yZjdmNjczNGMwNmI5YTE5ZDdmZTMzMmE5ZGNmMWRmOGRhZGZmNDMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgKQEAgLTUwLDEwICs1MCwx
MCBAQCBjbGFzcyBKU01vZHVsZUxvYWRlciBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKICAgICAgICAgUmVhZHksCiAgICAgfTsKIAotICAgIHN0YXRpYyBKU01vZHVsZUxvYWRlciog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNNb2R1bGVMb2FkZXIqIGNy
ZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKICAgICAgICAgSlNNb2R1bGVMb2FkZXIqIG9iamVjdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTTW9kdWxlTG9hZGVyPih2bS5oZWFwKSkgSlNNb2R1bGVMb2Fk
ZXIodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYywg
dm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0LCB2bSk7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCkBAIC02NSwyOSAr
NjUsMjkgQEAgY2xhc3MgSlNNb2R1bGVMb2FkZXIgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiAgICAgfQogCiAgICAgLy8gQVBJcyB0byBjb250cm9sIHRoZSBtb2R1bGUgbG9hZGVy
LgotICAgIEpTVmFsdWUgcHJvdmlkZUZldGNoKEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBjb25z
dCBTb3VyY2VDb2RlJik7Ci0gICAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1v
ZHVsZShFeGVjU3RhdGUqLCBKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywg
SlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKLSAgICBKU0ludGVybmFsUHJvbWlzZSogbG9hZE1vZHVs
ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNW
YWx1ZSBzY3JpcHRGZXRjaGVyKTsKLSAgICBKU1ZhbHVlIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZShF
eGVjU3RhdGUqLCBKU1ZhbHVlIG1vZHVsZUtleSwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKLSAg
ICBKU0ludGVybmFsUHJvbWlzZSogcmVxdWVzdEltcG9ydE1vZHVsZShFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIp
OworICAgIEpTVmFsdWUgcHJvdmlkZUZldGNoKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBrZXks
IGNvbnN0IFNvdXJjZUNvZGUmKTsKKyAgICBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1
YXRlTW9kdWxlKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBtb2R1bGVOYW1lLCBKU1ZhbHVlIHBh
cmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CisgICAgSlNJbnRlcm5hbFByb21pc2Uq
IGxvYWRNb2R1bGUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTVmFsdWUg
cGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKKyAgICBKU1ZhbHVlIGxpbmtBbmRF
dmFsdWF0ZU1vZHVsZShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbW9kdWxlS2V5LCBKU1ZhbHVl
IHNjcmlwdEZldGNoZXIpOworICAgIEpTSW50ZXJuYWxQcm9taXNlKiByZXF1ZXN0SW1wb3J0TW9k
dWxlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUgcGFyYW1ldGVy
cywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIAogICAgIC8vIFBsYXRmb3JtIGRlcGVuZGVudCBo
b29rZWQgQVBJcy4KLSAgICBKU0ludGVybmFsUHJvbWlzZSogaW1wb3J0TW9kdWxlKEV4ZWNTdGF0
ZSosIEpTU3RyaW5nKiBtb2R1bGVOYW1lLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIGNvbnN0IFNvdXJj
ZU9yaWdpbiYgcmVmZXJyZXIpOwotICAgIEpTSW50ZXJuYWxQcm9taXNlKiByZXNvbHZlKEV4ZWNT
dGF0ZSosIEpTVmFsdWUgbmFtZSwgSlNWYWx1ZSByZWZlcnJlciwgSlNWYWx1ZSBzY3JpcHRGZXRj
aGVyKTsKLSAgICBJZGVudGlmaWVyIHJlc29sdmVTeW5jKEV4ZWNTdGF0ZSosIEpTVmFsdWUgbmFt
ZSwgSlNWYWx1ZSByZWZlcnJlciwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKLSAgICBKU0ludGVy
bmFsUHJvbWlzZSogZmV0Y2goRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgcGFyYW1l
dGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKLSAgICBKU09iamVjdCogY3JlYXRlSW1wb3J0
TWV0YVByb3BlcnRpZXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTTW9kdWxlUmVjb3JkKiwg
SlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKKyAgICBKU0ludGVybmFsUHJvbWlzZSogaW1wb3J0TW9k
dWxlKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqIG1vZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1l
dGVycywgY29uc3QgU291cmNlT3JpZ2luJiByZWZlcnJlcik7CisgICAgSlNJbnRlcm5hbFByb21p
c2UqIHJlc29sdmUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG5hbWUsIEpTVmFsdWUgcmVmZXJy
ZXIsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CisgICAgSWRlbnRpZmllciByZXNvbHZlU3luYyhK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbmFtZSwgSlNWYWx1ZSByZWZlcnJlciwgSlNWYWx1ZSBz
Y3JpcHRGZXRjaGVyKTsKKyAgICBKU0ludGVybmFsUHJvbWlzZSogZmV0Y2goSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlwdEZldGNo
ZXIpOworICAgIEpTT2JqZWN0KiBjcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUga2V5LCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUgc2NyaXB0RmV0Y2hl
cik7CiAKICAgICAvLyBBZGRpdGlvbmFsIHBsYXRmb3JtIGRlcGVuZGVudCBob29rZWQgQVBJcy4K
LSAgICBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIG1v
ZHVsZVJlY29yZCwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKLSAgICBKU1ZhbHVlIGV2YWx1YXRl
Tm9uVmlydHVhbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBtb2R1bGVSZWNvcmQs
IEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CisgICAgSlNWYWx1ZSBldmFsdWF0ZShKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIG1vZHVsZVJlY29yZCwgSlNWYWx1ZSBzY3JpcHRG
ZXRjaGVyKTsKKyAgICBKU1ZhbHVlIGV2YWx1YXRlTm9uVmlydHVhbChKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUga2V5LCBKU1ZhbHVlIG1vZHVsZVJlY29yZCwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVy
KTsKIAogICAgIC8vIFV0aWxpdHkgZnVuY3Rpb25zLgotICAgIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KiBnZXRNb2R1bGVOYW1lc3BhY2VPYmplY3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSBtb2R1bGVS
ZWNvcmQpOwotICAgIEpTQXJyYXkqIGRlcGVuZGVuY3lLZXlzSWZFdmFsdWF0ZWQoRXhlY1N0YXRl
KiwgSlNWYWx1ZSBrZXkpOworICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBnZXRNb2R1bGVO
YW1lc3BhY2VPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG1vZHVsZVJlY29yZCk7Cisg
ICAgSlNBcnJheSogZGVwZW5kZW5jeUtleXNJZkV2YWx1YXRlZChKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUga2V5KTsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0
YXRlKiwgVk0mLCBKU0dsb2JhbE9iamVjdCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxPYmplY3QqLCBWTSYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5jcHAKaW5kZXggMWZhMjI0NTdlYTk2YjZhODFjYWRiZmM2MWE5MTBjZWRkMGU5YzQ3OC4uMTVm
ZDYxNTc0NGUzOTE1ZGYyZTUwMGU4OWE5ZTFiY2RmYTVjY2MyYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNw
cApAQCAtNDEsOSArNDEsOSBAQCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6SlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKIH0KIAotdm9pZCBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCosIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQsIFZlY3Rv
cjxzdGQ6OnBhaXI8SWRlbnRpZmllciwgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24+
PiYmIHJlc29sdXRpb25zKQordm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3Jl
YXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQWJzdHJhY3RNb2R1bGVSZWNvcmQq
IG1vZHVsZVJlY29yZCwgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBBYnN0cmFjdE1vZHVs
ZVJlY29yZDo6UmVzb2x1dGlvbj4+JiYgcmVzb2x1dGlvbnMpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwpAQCAtNzksNyArNzksNyBAQCB2
b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiwgQQogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3Rz
LXNldHByb3RvdHlwZW9mLXYKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5v
cmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0cy1pc2V4
dGVuc2libGUKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0cy1wcmV2ZW50ZXh0ZW5z
aW9ucwotICAgIG1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnModGhpcywgZXhlYyk7
CisgICAgbWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzLCBnbG9iYWxPYmpl
Y3QpOwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiB9CiAKQEAgLTExMyw5ICsxMTMs
OSBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRWYWx1ZShKU01vZHVsZUVudmlyb25tZW50KiBlbnZpcm9u
bWVudCwgUHJvcGVydHlOYW1lIGxvY2FsTmFtZQogICAgIHJldHVybiBlbnZpcm9ubWVudC0+dmFy
aWFibGVBdChzY29wZU9mZnNldCkuZ2V0KCk7CiB9CiAKLWJvb2wgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdENvbW1vbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
Ly8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1v
ZHVsZS1uYW1lc3BhY2UtZXhvdGljLW9iamVjdHMtZ2V0b3ducHJvcGVydHktcApAQCAtMTI0LDcg
KzEyNCw3IEBAIGJvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5CiAgICAgLy8gSWYgdGhlIHByb3BlcnR5
IG5hbWUgaXMgYSBzeW1ib2wsIHdlIGRvbid0IGxvb2sgaW50byB0aGUgaW1wb3J0ZWQgYmluZGlu
Z3MuCiAgICAgLy8gSXQgbWF5IHJldHVybiB0aGUgZGVzY3JpcHRvciB3aXRoIHdyaXRhYmxlOiB0
cnVlLCBidXQgbmFtZXNwYWNlIG9iamVjdHMgZG9lcyBub3QgYWxsb3cgaXQgaW4gW1tTZXRdXSAv
IFtbRGVmaW5lT3duUHJvcGVydHldXSBzaWRlLgogICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNTeW1i
b2woKSkKLSAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpcywgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
CiAgICAgc2xvdC5zZXRJc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpOwogCkBAIC0xNDEsNyArMTQx
LDcgQEAgYm9vbCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90Q29t
bW9uKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHkKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdl
dFZhbHVlKGVudmlyb25tZW50LCBleHBvcnRFbnRyeS5sb2NhbE5hbWUsIHNjb3BlT2Zmc2V0KTsK
ICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGZpbGxlZCB3aXRoIFREWiB2YWx1ZSwgdGhyb3cg
YSByZWZlcmVuY2UgZXJyb3IuCiAgICAgICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgIHRo
cm93Vk1FcnJvcihleGVjLCBzY29wZSwgY3JlYXRlVERaRXJyb3IoZXhlYykpOworICAgICAgICAg
ICAgdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVREWkVycm9yKGdsb2Jh
bE9iamVjdCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTE2
NSw2NyArMTY1LDY3IEBAIGJvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0T3duUHJv
cGVydHlTbG90Q29tbW9uKGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIHRo
aXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdENvbW1vbihnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0
aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgSWRlbnRpZmllcjo6ZnJv
bSh2bSwgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPmdldE93
blByb3BlcnR5U2xvdENvbW1vbihnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIHBy
b3BlcnR5TmFtZSksIHNsb3QpOwogfQogCi1ib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojpw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OnB1dChKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5v
cmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0cy1zZXQt
cC12LXJlY2VpdmVyCiAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
ICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6
OnB1dEJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWdu
ZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICAvLyBodHRwOi8vd3d3LmVj
bWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1l
eG90aWMtb2JqZWN0cy1kZWxldGUtcAogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CiAgICAgaWYg
KHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQotICAgICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVy
biBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpOwogCiAgICAgcmV0dXJuICF0aGlzT2JqZWN0LT5tX2V4cG9ydHMuY29udGFpbnMo
cHJvcGVydHlOYW1lLnVpZCgpKTsKIH0KIAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgLy8gaHR0cDovL3d3dy5l
Y21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZS1uYW1lc3BhY2Ut
ZXhvdGljLW9iamVjdHMtb3ducHJvcGVydHlrZXlzCiAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqPihjZWxsKTsK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIG5hbWUgOiB0aGlzT2JqZWN0LT5tX25hbWVzKQogICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChuYW1lLmltcGwoKSk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KQorYm9vbCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gaHR0cDovL3d3dy5lY21h
LWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW1vZHVsZS1uYW1lc3BhY2UtZXhv
dGljLW9iamVjdHMtZGVmaW5lb3ducHJvcGVydHktcC1kZXNjCiAgICAgaWYgKHNob3VsZFRocm93
KQotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgTm9uRXh0ZW5zaWJsZU9iamVj
dFByb3BlcnR5RGVmaW5lRXJyb3IpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBOb25FeHRlbnNpYmxlT2JqZWN0UHJvcGVydHlEZWZpbmVFcnJvcik7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAppbmRleCBhOWMwZDYwMDVhY2E4MzE3ZGVk
ZTIxM2U4NmM0NGE2NjhhZDMzYjhlLi41YzEwZGI4ZjEwMzdkNTc3N2UzZTM5ZWUxZDliMWE2ODg1
MGQzZjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKQEAgLTM1LDI1ICszNSwyNSBAQCBjbGFzcyBKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAg
ICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJs
ZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAotICAgIHN0YXRpYyBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNv
cmQsIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJl
c29sdXRpb24+PiYmIHJlc29sdXRpb25zKQorICAgIHN0YXRpYyBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdCogY3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBBYnN0cmFjdE1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkLCBWZWN0b3I8c3RkOjpw
YWlyPElkZW50aWZpZXIsIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uPj4mJiByZXNv
bHV0aW9ucykKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFZN
JiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KiBvYmplY3QgPQogICAgICAgICAgICAgbmV3ICgKICAgICAgICAgICAgICAgICBOb3ROdWxs
LAogICAgICAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4o
dm0uaGVhcCwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmFsbG9jYXRpb25TaXplKHJlc29sdXRp
b25zLnNpemUoKSkpKQogICAgICAgICAgICAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qodm0sIHN0
cnVjdHVyZSk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBtb2R1bGVSZWNvcmQsIFdURk1vdmUocmVzb2x1dGlvbnMpKTsKKyAgICAgICAgb2JqZWN0
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QsIG1vZHVsZVJlY29yZCwgV1RGTW92ZShyZXNv
bHV0aW9ucykpOwogICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIH0KIAotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApAQCAtNjUsMTMgKzY1LDEzIEBAIGNsYXNz
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0IGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkKCkgeyByZXR1cm4g
bV9tb2R1bGVSZWNvcmQuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBYnN0
cmFjdE1vZHVsZVJlY29yZCosIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRpZmllciwgQWJzdHJhY3RN
b2R1bGVSZWNvcmQ6OlJlc29sdXRpb24+PiYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqLCBW
ZWN0b3I8c3RkOjpwYWlyPElkZW50aWZpZXIsIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0
aW9uPj4mJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qo
Vk0mLCBTdHJ1Y3R1cmUqKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKLSAgICBib29sIGdldE93blByb3BlcnR5U2xvdENvbW1vbihFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29t
bW9uKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICAg
IFdyaXRlQmFycmllckJhc2U8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+JiBtb2R1bGVSZWNvcmRBdCh1
bnNpZ25lZCBvZmZzZXQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCmluZGV4IDRhNzUyN2YwMmY3ZTVmM2Q0MTQxOWM1YjgwM2E0
NWE1OGJiNjAxZTEuLjE2YzY3NTMwYmZiMjk0Yzk3Y2E5Y2FlYWU1ZDFlMzA4ODY4ODI4YWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAK
QEAgLTQ1LDEwICs0NSwxMCBAQCBTdHJ1Y3R1cmUqIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNNb2R1bGVSZWNvcmQq
IEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFi
bGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQorSlNNb2R1
bGVSZWNvcmQqIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgbW9k
dWxlS2V5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBjb25zdCBWYXJpYWJsZUVudmly
b25tZW50JiBkZWNsYXJlZFZhcmlhYmxlcywgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4
aWNhbFZhcmlhYmxlcykKIHsKICAgICBKU01vZHVsZVJlY29yZCogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU01vZHVsZVJlY29yZD4odm0uaGVhcCkpIEpTTW9kdWxlUmVj
b3JkKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJs
ZXMsIGxleGljYWxWYXJpYWJsZXMpOwotICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVj
LCB2bSk7CisgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCwgdm0pOwog
ICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIEpTTW9kdWxlUmVjb3JkOjpKU01vZHVsZVJlY29yZChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXks
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQm
IGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFy
aWFibGVzKQpAQCAtNjUsOSArNjUsOSBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU01vZHVsZVJlY29yZDo6fkpTTW9kdWxlUmVj
b3JkKCk7CiB9CiAKLXZvaWQgSlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtKQordm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtKQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGV4ZWMsIHZtKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qs
IHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOwogfQogCkBAIC03OSwzMSAr
NzksMzEgQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
bW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjpsaW5r
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQordm9pZCBKU01vZHVsZVJl
Y29yZDo6bGluayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHNjcmlwdEZl
dGNoZXIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZUNvZGUoKSk7CisgICAgTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRl
KGdsb2JhbE9iamVjdCwgc291cmNlQ29kZSgpKTsKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2Nv
cGUuZXhjZXB0aW9uKCkgPT0gIWV4ZWN1dGFibGUpOwogICAgIGlmICghZXhlY3V0YWJsZSkgewot
ICAgICAgICB0aHJvd1N5bnRheEVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dTeW50
YXhFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpbnN0YW50aWF0ZURlY2xhcmF0aW9ucyhleGVjLCBleGVjdXRhYmxlLCBzY3JpcHRGZXRjaGVy
KTsKKyAgICBpbnN0YW50aWF0ZURlY2xhcmF0aW9ucyhnbG9iYWxPYmplY3QsIGV4ZWN1dGFibGUs
IHNjcmlwdEZldGNoZXIpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CiAgICAgbV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5zZXQodm0sIHRoaXMsIGV4ZWN1dGFibGUp
OwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0aW9ucyhFeGVj
U3RhdGUqIGV4ZWMsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBtb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQordm9pZCBKU01vZHVsZVJlY29yZDo6aW5zdGFu
dGlhdGVEZWNsYXJhdGlvbnMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqIG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLCBKU1ZhbHVlIHNjcmlwdEZl
dGNoZXIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8j
c2VjLW1vZHVsZWRlY2xhcmF0aW9uaW5zdGFudGlhdGlvbgogCiAgICAgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0gbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUtPm1vZHVsZUVudmlyb25tZW50U3lt
Ym9sVGFibGUoKTsKLSAgICBKU01vZHVsZUVudmlyb25tZW50KiBtb2R1bGVFbnZpcm9ubWVudCA9
IEpTTW9kdWxlRW52aXJvbm1lbnQ6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN5bWJvbFRhYmxlLCBqc1REWlZhbHVl
KCksIHRoaXMpOworICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIG1vZHVsZUVudmlyb25tZW50ID0g
SlNNb2R1bGVFbnZpcm9ubWVudDo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgc3ltYm9sVGFibGUsIGpzVERaVmFsdWUoKSwgdGhpcyk7CiAKICAgICAvLyBodHRwOi8vd3d3
LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlZGVjbGFyYXRp
b25pbnN0YW50aWF0aW9uCiAgICAgLy8gc2VjdGlvbiAxNS4yLjEuMTYuNCBzdGVwIDkuCkBAIC0x
MTMsMTkgKzExMywxOSBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0
aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIE1vZHVsZVByb2dyYW1FeGVjdQogICAgIGZvciAoY29uc3Qg
YXV0byYgcGFpciA6IGV4cG9ydEVudHJpZXMoKSkgewogICAgICAgICBjb25zdCBFeHBvcnRFbnRy
eSYgZXhwb3J0RW50cnkgPSBwYWlyLnZhbHVlOwogICAgICAgICBpZiAoZXhwb3J0RW50cnkudHlw
ZSA9PSBKU01vZHVsZVJlY29yZDo6RXhwb3J0RW50cnk6OlR5cGU6OkluZGlyZWN0KSB7Ci0gICAg
ICAgICAgICBSZXNvbHV0aW9uIHJlc29sdXRpb24gPSByZXNvbHZlRXhwb3J0KGV4ZWMsIGV4cG9y
dEVudHJ5LmV4cG9ydE5hbWUpOworICAgICAgICAgICAgUmVzb2x1dGlvbiByZXNvbHV0aW9uID0g
cmVzb2x2ZUV4cG9ydChnbG9iYWxPYmplY3QsIGV4cG9ydEVudHJ5LmV4cG9ydE5hbWUpOwogICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgICAg
IHN3aXRjaCAocmVzb2x1dGlvbi50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFJlc29sdXRpb246
OlR5cGU6Ok5vdEZvdW5kOgotICAgICAgICAgICAgICAgIHRocm93U3ludGF4RXJyb3IoZXhlYywg
c2NvcGUsIG1ha2VTdHJpbmcoIkluZGlyZWN0bHkgZXhwb3J0ZWQgYmluZGluZyBuYW1lICciLCBT
dHJpbmcoZXhwb3J0RW50cnkuZXhwb3J0TmFtZS5pbXBsKCkpLCAiJyBpcyBub3QgZm91bmQuIikp
OworICAgICAgICAgICAgICAgIHRocm93U3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
bWFrZVN0cmluZygiSW5kaXJlY3RseSBleHBvcnRlZCBiaW5kaW5nIG5hbWUgJyIsIFN0cmluZyhl
eHBvcnRFbnRyeS5leHBvcnROYW1lLmltcGwoKSksICInIGlzIG5vdCBmb3VuZC4iKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBjYXNlIFJlc29sdXRpb246OlR5cGU6
OkFtYmlndW91czoKLSAgICAgICAgICAgICAgICB0aHJvd1N5bnRheEVycm9yKGV4ZWMsIHNjb3Bl
LCBtYWtlU3RyaW5nKCJJbmRpcmVjdGx5IGV4cG9ydGVkIGJpbmRpbmcgbmFtZSAnIiwgU3RyaW5n
KGV4cG9ydEVudHJ5LmV4cG9ydE5hbWUuaW1wbCgpKSwgIicgY2Fubm90IGJlIHJlc29sdmVkIGR1
ZSB0byBhbWJpZ3VvdXMgbXVsdGlwbGUgYmluZGluZ3MuIikpOworICAgICAgICAgICAgICAgIHRo
cm93U3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgbWFrZVN0cmluZygiSW5kaXJlY3Rs
eSBleHBvcnRlZCBiaW5kaW5nIG5hbWUgJyIsIFN0cmluZyhleHBvcnRFbnRyeS5leHBvcnROYW1l
LmltcGwoKSksICInIGNhbm5vdCBiZSByZXNvbHZlZCBkdWUgdG8gYW1iaWd1b3VzIG11bHRpcGxl
IGJpbmRpbmdzLiIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGNh
c2UgUmVzb2x1dGlvbjo6VHlwZTo6RXJyb3I6Ci0gICAgICAgICAgICAgICAgdGhyb3dTeW50YXhF
cnJvcihleGVjLCBzY29wZSwgbWFrZVN0cmluZygiSW5kaXJlY3RseSBleHBvcnRlZCBiaW5kaW5n
IG5hbWUgJ2RlZmF1bHQnIGNhbm5vdCBiZSByZXNvbHZlZCBieSBzdGFyIGV4cG9ydCBlbnRyaWVz
LiIpKTsKKyAgICAgICAgICAgICAgICB0aHJvd1N5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIG1ha2VTdHJpbmcoIkluZGlyZWN0bHkgZXhwb3J0ZWQgYmluZGluZyBuYW1lICdkZWZhdWx0
JyBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgc3RhciBleHBvcnQgZW50cmllcy4iKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBjYXNlIFJlc29sdXRpb246OlR5cGU6OlJl
c29sdmVkOgpAQCAtMTQwLDI4ICsxNDAsMjggQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6aW5zdGFu
dGlhdGVEZWNsYXJhdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBNb2R1bGVQcm9ncmFtRXhlY3UKICAg
ICAvLyBBbmQgZW5zdXJlIHRoYXQgYWxsIHRoZSBpbXBvcnRzIGNvcnJlY3RseSByZXNvbHZlZCB0
byB1bmlxdWUgYmluZGluZ3MuCiAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogaW1wb3J0RW50
cmllcygpKSB7CiAgICAgICAgIGNvbnN0IEltcG9ydEVudHJ5JiBpbXBvcnRFbnRyeSA9IHBhaXIu
dmFsdWU7Ci0gICAgICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVsZSA9IGhv
c3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoZXhlYywgaW1wb3J0RW50cnkubW9kdWxlUmVxdWVzdCk7
CisgICAgICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVsZSA9IGhvc3RSZXNv
bHZlSW1wb3J0ZWRNb2R1bGUoZ2xvYmFsT2JqZWN0LCBpbXBvcnRFbnRyeS5tb2R1bGVSZXF1ZXN0
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAg
aWYgKGltcG9ydEVudHJ5LnR5cGUgPT0gQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OkltcG9ydEVudHJ5
VHlwZTo6TmFtZXNwYWNlKSB7Ci0gICAgICAgICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCog
bmFtZXNwYWNlT2JqZWN0ID0gaW1wb3J0ZWRNb2R1bGUtPmdldE1vZHVsZU5hbWVzcGFjZShleGVj
KTsKKyAgICAgICAgICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBuYW1lc3BhY2VPYmplY3Qg
PSBpbXBvcnRlZE1vZHVsZS0+Z2V0TW9kdWxlTmFtZXNwYWNlKGdsb2JhbE9iamVjdCk7CiAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICAgICAg
Ym9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hX
YXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBpbXBvcnRFbnRyeS5sb2NhbE5h
bWUsIG5hbWVzcGFjZU9iamVjdCwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNl
LCAvKiBpZ25vcmVSZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOworICAgICAgICAg
ICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGds
b2JhbE9iamVjdCwgaW1wb3J0RW50cnkubG9jYWxOYW1lLCBuYW1lc3BhY2VPYmplY3QsIC8qIHNo
b3VsZFRocm93UmVhZE9ubHlFcnJvciAqLyBmYWxzZSwgLyogaWdub3JlUmVhZE9ubHlFcnJvcnMg
Ki8gdHJ1ZSwgcHV0UmVzdWx0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZXNvbHV0aW9uIHJl
c29sdXRpb24gPSBpbXBvcnRlZE1vZHVsZS0+cmVzb2x2ZUV4cG9ydChleGVjLCBpbXBvcnRFbnRy
eS5pbXBvcnROYW1lKTsKKyAgICAgICAgICAgIFJlc29sdXRpb24gcmVzb2x1dGlvbiA9IGltcG9y
dGVkTW9kdWxlLT5yZXNvbHZlRXhwb3J0KGdsb2JhbE9iamVjdCwgaW1wb3J0RW50cnkuaW1wb3J0
TmFtZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwog
ICAgICAgICAgICAgc3dpdGNoIChyZXNvbHV0aW9uLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2Ug
UmVzb2x1dGlvbjo6VHlwZTo6Tm90Rm91bmQ6Ci0gICAgICAgICAgICAgICAgdGhyb3dTeW50YXhF
cnJvcihleGVjLCBzY29wZSwgbWFrZVN0cmluZygiSW1wb3J0aW5nIGJpbmRpbmcgbmFtZSAnIiwg
U3RyaW5nKGltcG9ydEVudHJ5LmltcG9ydE5hbWUuaW1wbCgpKSwgIicgaXMgbm90IGZvdW5kLiIp
KTsKKyAgICAgICAgICAgICAgICB0aHJvd1N5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IG1ha2VTdHJpbmcoIkltcG9ydGluZyBiaW5kaW5nIG5hbWUgJyIsIFN0cmluZyhpbXBvcnRFbnRy
eS5pbXBvcnROYW1lLmltcGwoKSksICInIGlzIG5vdCBmb3VuZC4iKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgICAgICBjYXNlIFJlc29sdXRpb246OlR5cGU6OkFtYmlndW91
czoKLSAgICAgICAgICAgICAgICB0aHJvd1N5bnRheEVycm9yKGV4ZWMsIHNjb3BlLCBtYWtlU3Ry
aW5nKCJJbXBvcnRpbmcgYmluZGluZyBuYW1lICciLCBTdHJpbmcoaW1wb3J0RW50cnkuaW1wb3J0
TmFtZS5pbXBsKCkpLCAiJyBjYW5ub3QgYmUgcmVzb2x2ZWQgZHVlIHRvIGFtYmlndW91cyBtdWx0
aXBsZSBiaW5kaW5ncy4iKSk7CisgICAgICAgICAgICAgICAgdGhyb3dTeW50YXhFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCBtYWtlU3RyaW5nKCJJbXBvcnRpbmcgYmluZGluZyBuYW1lICciLCBT
dHJpbmcoaW1wb3J0RW50cnkuaW1wb3J0TmFtZS5pbXBsKCkpLCAiJyBjYW5ub3QgYmUgcmVzb2x2
ZWQgZHVlIHRvIGFtYmlndW91cyBtdWx0aXBsZSBiaW5kaW5ncy4iKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgICAgICBjYXNlIFJlc29sdXRpb246OlR5cGU6OkVycm9yOgot
ICAgICAgICAgICAgICAgIHRocm93U3ludGF4RXJyb3IoZXhlYywgc2NvcGUsIG1ha2VTdHJpbmco
IkltcG9ydGluZyBiaW5kaW5nIG5hbWUgJ2RlZmF1bHQnIGNhbm5vdCBiZSByZXNvbHZlZCBieSBz
dGFyIGV4cG9ydCBlbnRyaWVzLiIpKTsKKyAgICAgICAgICAgICAgICB0aHJvd1N5bnRheEVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsIG1ha2VTdHJpbmcoIkltcG9ydGluZyBiaW5kaW5nIG5hbWUg
J2RlZmF1bHQnIGNhbm5vdCBiZSByZXNvbHZlZCBieSBzdGFyIGV4cG9ydCBlbnRyaWVzLiIpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGNhc2UgUmVzb2x1dGlvbjo6
VHlwZTo6UmVzb2x2ZWQ6CkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6
aW5zdGFudGlhdGVEZWNsYXJhdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBNb2R1bGVQcm9ncmFtRXhl
Y3UKICAgICAgICAgVmFyT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnZhck9mZnNldCgpOwogICAgICAg
ICBpZiAoIW9mZnNldC5pc1N0YWNrKCkpIHsKICAgICAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0g
ZmFsc2U7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1
bGVFbnZpcm9ubWVudCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdmFyaWFibGUua2V5
LmdldCgpKSwganNVbmRlZmluZWQoKSwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZh
bHNlLCAvKiBpZ25vcmVSZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOworICAgICAg
ICAgICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQs
IGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdmFyaWFibGUua2V5LmdldCgp
KSwganNVbmRlZmluZWQoKSwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNlLCAv
KiBpZ25vcmVSZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOwogICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTIwMywzMCArMjAzLDMwIEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6Omluc3RhbnRpYXRlRGVjbGFy
YXRpb25zKEV4ZWNTdGF0ZSogZXhlYywgTW9kdWxlUHJvZ3JhbUV4ZWN1CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2
bSwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUtPmxpbmsodm0sIG1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLCBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS0+c291cmNlKCkpLCBtb2R1bGVFbnZpcm9u
bWVudCk7CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAg
c3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMs
IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5uYW1lKCksIGZ1bmN0aW9uLCAvKiBzaG91bGRU
aHJvd1JlYWRPbmx5RXJyb3IgKi8gZmFsc2UsIC8qIGlnbm9yZVJlYWRPbmx5RXJyb3JzICovIHRy
dWUsIHB1dFJlc3VsdCk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2lu
dFNldChtb2R1bGVFbnZpcm9ubWVudCwgZ2xvYmFsT2JqZWN0LCB1bmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS0+bmFtZSgpLCBmdW5jdGlvbiwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICov
IGZhbHNlLCAvKiBpZ25vcmVSZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOwogICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIHsKLSAgICAgICAgSlNPYmplY3QqIG1ldGFQcm9wZXJ0aWVzID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVMb2FkZXIoKS0+Y3JlYXRlSW1wb3J0TWV0YVBy
b3BlcnRpZXMoZXhlYywgaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgbW9kdWxlS2V5KCkpLCB0aGlz
LCBzY3JpcHRGZXRjaGVyKTsKKyAgICAgICAgSlNPYmplY3QqIG1ldGFQcm9wZXJ0aWVzID0gZ2xv
YmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+Y3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoZ2xv
YmFsT2JqZWN0LCBpZGVudGlmaWVyVG9KU1ZhbHVlKHZtLCBtb2R1bGVLZXkoKSksIHRoaXMsIHNj
cmlwdEZldGNoZXIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICBzeW1ib2xUYWJsZVB1
dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwgZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkubWV0YVByaXZhdGVOYW1lKCksIG1ldGFQcm9wZXJ0aWVzLCAv
KiBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgKi8gZmFsc2UsIC8qIGlnbm9yZVJlYWRPbmx5RXJy
b3JzICovIHRydWUsIHB1dFJlc3VsdCk7CisgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRj
aHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLm1ldGFQcml2YXRlTmFtZSgpLCBtZXRhUHJvcGVydGllcywgLyog
c2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNlLCAvKiBpZ25vcmVSZWFkT25seUVycm9y
cyAqLyB0cnVlLCBwdXRSZXN1bHQpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogICAgIH0KIAogICAgIG1fbW9kdWxlRW52aXJvbm1lbnQuc2V0KHZtLCB0aGlz
LCBtb2R1bGVFbnZpcm9ubWVudCk7CiB9CiAKLUpTVmFsdWUgSlNNb2R1bGVSZWNvcmQ6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgaWYgKCFtX21vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
Z2V0KCk7CiAgICAgbV9tb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jbGVhcigpOwotICAgIHJldHVy
biB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZU1vZHVsZVByb2dyYW0oZXhlY3V0YWJsZSwgZXhlYywg
bV9tb2R1bGVFbnZpcm9ubWVudC5nZXQoKSk7CisgICAgcmV0dXJuIHZtLmludGVycHJldGVyLT5l
eGVjdXRlTW9kdWxlUHJvZ3JhbShleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIG1fbW9kdWxlRW52
aXJvbm1lbnQuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCmluZGV4IGFjMmRjZmE2YzUyOThi
ZDczZTRmZGMyY2Y1MWYwY2MxNTQwN2JjZmQuLmZhYjg2YzEwYTY4OTgzNWU2YjdkNjU2NDEwMTlm
MmY3YmU5YzY0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlUmVjb3JkLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVSZWNvcmQuaApAQCAtNDMsMTAgKzQzLDEwIEBAIGNsYXNzIEpTTW9kdWxlUmVjb3JkIGZpbmFs
IDogcHVibGljIEFic3RyYWN0TW9kdWxlUmVjb3JkIHsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKTsKLSAgICBzdGF0aWMgSlNNb2R1bGVSZWNvcmQqIGNyZWF0ZShFeGVj
U3RhdGUqLCBWTSYsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBTb3VyY2VD
b2RlJiwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1l
bnQmKTsKKyAgICBzdGF0aWMgSlNNb2R1bGVSZWNvcmQqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCos
IFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFNvdXJjZUNvZGUmLCBj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50JiwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYpOwog
Ci0gICAgdm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqKTsKKyAgICB2b2lk
IGxpbmsoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZXZhbHVhdGUoSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUNvZGU7
IH0KICAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBkZWNsYXJlZFZhcmlhYmxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fZGVjbGFyZWRWYXJpYWJsZXM7IH0KQEAgLTU1LDEyICs1NSwxMiBAQCBj
bGFzcyBKU01vZHVsZVJlY29yZCBmaW5hbCA6IHB1YmxpYyBBYnN0cmFjdE1vZHVsZVJlY29yZCB7
CiBwcml2YXRlOgogICAgIEpTTW9kdWxlUmVjb3JkKFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFNvdXJjZUNvZGUmLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50Jiwg
Y29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYpOwogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqLCBWTSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3Qq
LCBWTSYpOwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICB2b2lkIGlu
c3RhbnRpYXRlRGVjbGFyYXRpb25zKEV4ZWNTdGF0ZSosIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
KiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKKyAgICB2b2lkIGluc3RhbnRpYXRlRGVjbGFyYXRp
b25zKEpTR2xvYmFsT2JqZWN0KiwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqLCBKU1ZhbHVlIHNj
cmlwdEZldGNoZXIpOwogCiAgICAgU291cmNlQ29kZSBtX3NvdXJjZUNvZGU7CiAgICAgVmFyaWFi
bGVFbnZpcm9ubWVudCBtX2RlY2xhcmVkVmFyaWFibGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAppbmRleCAwN2M1MTFjNzMwNTYzY2NiNzc4OTJkM2Uw
ZGEyZmYxNDNkY2JhMWZkLi4xOWQ0NDZhYjc1NTBmYzVjNjE2MzMyMDYyN2E2MWFlOTVmYzMzYmEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcApAQCAt
NzQsNyArNzQsNyBAQCBjbGFzcyBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwgewogICAgIFBy
b3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgUHJvcGVy
dHlOYW1lRm9yRnVuY3Rpb25DYWxsKHVuc2lnbmVkKTsKIAotICAgIEpTVmFsdWUgdmFsdWUoRXhl
Y1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1ZSB2YWx1ZShKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIGNvbnN0IElkZW50aWZpZXIqIG1faWRlbnRpZmllcjsKQEAgLTg2
LDE0ICs4NiwxNCBAQCBjbGFzcyBTdHJpbmdpZmllciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU3RyaW5naWZpZXIpOwogICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOwogcHVibGlj
OgotICAgIFN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgcmVwbGFjZXIsIEpTVmFsdWUg
c3BhY2UpOworICAgIFN0cmluZ2lmaWVyKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSByZXBsYWNl
ciwgSlNWYWx1ZSBzcGFjZSk7CiAgICAgSlNWYWx1ZSBzdHJpbmdpZnkoSlNWYWx1ZSk7CiAKIHBy
aXZhdGU6CiAgICAgY2xhc3MgSG9sZGVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gUm9v
dEhvbGRlclRhZyB7IFJvb3RIb2xkZXIgfTsKLSAgICAgICAgSG9sZGVyKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0Kik7CisgICAgICAgIEhvbGRlcihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7CiAg
ICAgICAgIEhvbGRlcihSb290SG9sZGVyVGFnLCBKU09iamVjdCopOwogCiAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQpAQCAtMTI0LDcgKzEyNCw3
IEBAIGNsYXNzIFN0cmluZ2lmaWVyIHsKICAgICB2b2lkIHN0YXJ0TmV3TGluZShTdHJpbmdCdWls
ZGVyJikgY29uc3Q7CiAgICAgYm9vbCBpc0NhbGxhYmxlUmVwbGFjZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlcGxhY2VyQ2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmU7IH0KIAotICAgIEV4ZWNTdGF0
ZSogY29uc3QgbV9leGVjOworICAgIEpTR2xvYmFsT2JqZWN0KiBjb25zdCBtX2dsb2JhbE9iamVj
dDsKICAgICBKU1ZhbHVlIG1fcmVwbGFjZXI7CiAgICAgYm9vbCBtX3VzaW5nQXJyYXlSZXBsYWNl
ciB7IGZhbHNlIH07CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgbV9hcnJheVJlcGxhY2VyUHJvcGVy
dHlOYW1lczsKQEAgLTE0MCwxNiArMTQwLDE2IEBAIGNsYXNzIFN0cmluZ2lmaWVyIHsKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGhlbHBlciBmdW5jdGlvbnMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIHVud3JhcEJv
eGVkUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSB1bndyYXBCb3hlZFByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIHZhbHVlOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1
ZSk7CiAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHM8TnVtYmVyT2JqZWN0Pih2bSkpCi0gICAgICAg
IHJldHVybiBqc051bWJlcihvYmplY3QtPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKG9iamVjdC0+dG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSk7CiAgICAgaWYgKG9iamVj
dC0+aW5oZXJpdHM8U3RyaW5nT2JqZWN0Pih2bSkpCi0gICAgICAgIHJldHVybiBvYmplY3QtPnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICByZXR1cm4gb2JqZWN0LT50b1N0cmluZyhnbG9iYWxPYmpl
Y3QpOwogICAgIGlmIChvYmplY3QtPmluaGVyaXRzPEJvb2xlYW5PYmplY3Q+KHZtKSB8fCBvYmpl
Y3QtPmluaGVyaXRzPEJpZ0ludE9iamVjdD4odm0pKQogICAgICAgICByZXR1cm4ganNDYXN0PEpT
V3JhcHBlck9iamVjdCo+KG9iamVjdCktPmludGVybmFsVmFsdWUoKTsKIApAQCAtMTU4LDEzICsx
NTgsMTMgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIHVud3JhcEJveGVkUHJpbWl0aXZlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU3RyaW5nIGdhcChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc3BhY2UpCitzdGF0
aWMgaW5saW5lIFN0cmluZyBnYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBzcGFjZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBjb25zdCB1bnNpZ25lZCBtYXhHYXBMZW5ndGggPSAxMDsKLSAgICBzcGFjZSA9IHVu
d3JhcEJveGVkUHJpbWl0aXZlKGV4ZWMsIHNwYWNlKTsKKyAgICBzcGFjZSA9IHVud3JhcEJveGVk
UHJpbWl0aXZlKGdsb2JhbE9iamVjdCwgc3BhY2UpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICAvLyBJZiB0aGUgc3BhY2UgdmFsdWUgaXMgYSBudW1iZXIsIGNy
ZWF0ZSBhIGdhcCBzdHJpbmcgd2l0aCB0aGF0IG51bWJlciBvZiBzcGFjZXMuCkBAIC0xODQsNyAr
MTg0LDcgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgZ2FwKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBzcGFjZSkKICAgICB9CiAKICAgICAvLyBJZiB0aGUgc3BhY2UgdmFsdWUgaXMgYSBzdHJpbmcs
IHVzZSBpdCBhcyB0aGUgZ2FwIHN0cmluZywgb3RoZXJ3aXNlIHVzZSBubyBnYXAgc3RyaW5nLgot
ICAgIFN0cmluZyBzcGFjZXMgPSBzcGFjZS5nZXRTdHJpbmcoZXhlYyk7CisgICAgU3RyaW5nIHNw
YWNlcyA9IHNwYWNlLmdldFN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIGlmIChzcGFjZXMubGVu
Z3RoKCkgPD0gbWF4R2FwTGVuZ3RoKQogICAgICAgICByZXR1cm4gc3BhY2VzOwogICAgIHJldHVy
biBzcGFjZXMuc3Vic3RyaW5nU2hhcmluZ0ltcGwoMCwgbWF4R2FwTGVuZ3RoKTsKQEAgLTIwMywx
MCArMjAzLDEwIEBAIGlubGluZSBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGw6OlByb3BlcnR5
TmFtZUZvckZ1bmN0aW9uQ2FsbCh1bnNpZ25lZCBudW1iZXIpCiB7CiB9CiAKLUpTVmFsdWUgUHJv
cGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitK
U1ZhbHVlIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbDo6dmFsdWUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBpZiAoIW1fdmFsdWUpIHsKLSAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAgICAgICAgbV92YWx1ZSA9IGpzU3RyaW5n
KHZtLCBtX2lkZW50aWZpZXItPnN0cmluZygpKTsKICAgICAgICAgZWxzZSB7CkBAIC0yMjAsMTIg
KzIyMCwxMiBAQCBKU1ZhbHVlIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbDo6dmFsdWUoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
U3RyaW5naWZpZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU3RyaW5naWZp
ZXI6OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSByZXBsYWNlciwgSlNWYWx1
ZSBzcGFjZSkKLSAgICA6IG1fZXhlYyhleGVjKQorU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcmVwbGFjZXIsIEpTVmFsdWUgc3Bh
Y2UpCisgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCiAgICAgLCBtX3JlcGxhY2Vy
KHJlcGxhY2VyKQotICAgICwgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcyhleGVjLT52bSgp
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkK
KyAgICAsIG1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LT52bSgpLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAo
bV9yZXBsYWNlci5pc09iamVjdCgpKSB7CkBAIC0yMzMsMTQgKzIzMywxNCBAQCBTdHJpbmdpZmll
cjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJlcGxhY2VyLCBKU1ZhbHVl
IHNwYWNlKQogCiAgICAgICAgIG1fcmVwbGFjZXJDYWxsVHlwZSA9IENhbGxUeXBlOjpOb25lOwog
ICAgICAgICBpZiAoIXJlcGxhY2VyT2JqZWN0LT5pc0NhbGxhYmxlKHZtLCBtX3JlcGxhY2VyQ2Fs
bFR5cGUsIG1fcmVwbGFjZXJDYWxsRGF0YSkpIHsKLSAgICAgICAgICAgIGJvb2wgaXNBcnJheVJl
cGxhY2VyID0gSlNDOjppc0FycmF5KGV4ZWMsIHJlcGxhY2VyT2JqZWN0KTsKKyAgICAgICAgICAg
IGJvb2wgaXNBcnJheVJlcGxhY2VyID0gSlNDOjppc0FycmF5KGdsb2JhbE9iamVjdCwgcmVwbGFj
ZXJPYmplY3QpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKICAg
ICAgICAgICAgIGlmIChpc0FycmF5UmVwbGFjZXIpIHsKICAgICAgICAgICAgICAgICBtX3VzaW5n
QXJyYXlSZXBsYWNlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
cmVwbGFjZXJPYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUlu
dDMyKGV4ZWMpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHJlcGxhY2VyT2Jq
ZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMy
KGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW1lID0gcmVwbGFjZXJPYmplY3Qt
PmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW1lID0gcmVwbGFj
ZXJPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGkpOwogICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCApOwogICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5p
c09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBuYW1lT2JqZWN0ID0g
anNDYXN0PEpTT2JqZWN0Kj4obmFtZSk7CkBAIC0yNDgsOSArMjQ4LDkgQEAgU3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSByZXBsYWNlciwgSlNWYWx1ZSBz
cGFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICghbmFtZS5pc051bWJlcigpICYmICFuYW1lLmlzU3RyaW5nKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
SlNTdHJpbmcqIHByb3BlcnR5TmFtZVN0cmluZyA9IG5hbWUudG9TdHJpbmcoZXhlYyk7CisgICAg
ICAgICAgICAgICAgICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWVTdHJpbmcgPSBuYW1lLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsICk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJv
cGVydHlOYW1lU3RyaW5nLT50b0lkZW50aWZpZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lU3RyaW5nLT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgKTsKICAgICAgICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5h
ZGQoV1RGTW92ZShwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yNTksMTIg
KzI1OSwxMiBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHJlcGxhY2VyLCBKU1ZhbHVlIHNwYWNlKQogICAgIH0KIAogICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICBtX2dhcCA9IGdhcChleGVjLCBzcGFjZSk7CisgICAgbV9nYXAgPSBnYXAoZ2xvYmFs
T2JqZWN0LCBzcGFjZSk7CiB9CiAKIEpTVmFsdWUgU3RyaW5naWZpZXI6OnN0cmluZ2lmeShKU1Zh
bHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBt
X2dsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwgZW1wdHlQcm9wZXJ0eU5h
bWUodm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKQEAgLTI3Myw3ICsyNzMsNyBA
QCBKU1ZhbHVlIFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSlNWYWx1ZSB2YWx1ZSkKICAgICAvLyBX
ZSBjYW4gc2tpcCBjcmVhdGluZyB0aGlzIHdyYXBwZXIgb2JqZWN0LgogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBudWxscHRyOwogICAgIGlmIChpc0NhbGxhYmxlUmVwbGFjZXIoKSkgewotICAgICAg
ICBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChtX2V4ZWMpOworICAgICAgICBvYmplY3Qg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChtX2dsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBvYmplY3QtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCB2YWx1ZSk7CiAgICAg
fQpAQCAtMjgzLDcgKzI4Myw3IEBAIEpTVmFsdWUgU3RyaW5naWZpZXI6OnN0cmluZ2lmeShKU1Zh
bHVlIHZhbHVlKQogICAgIGF1dG8gc3RyaW5naWZ5UmVzdWx0ID0gYXBwZW5kU3RyaW5naWZpZWRW
YWx1ZShyZXN1bHQsIHZhbHVlLCByb290LCBlbXB0eVByb3BlcnR5TmFtZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwganNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKHJl
c3VsdC5oYXNPdmVyZmxvd2VkKCkpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvciht
X2V4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKG1fZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBp
ZiAoVU5MSUtFTFkoc3RyaW5naWZ5UmVzdWx0ICE9IFN0cmluZ2lmeVN1Y2NlZWRlZCkpCkBAIC0y
OTMsMTcgKzI5MywxNyBAQCBKU1ZhbHVlIFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSlNWYWx1ZSB2
YWx1ZSkKIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIFN0cmluZ2lmaWVyOjp0b0pTT04oSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJvcGVydHlO
YW1lKQogewotICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBtX2dsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAogICAgIFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAg
Ym9vbCBoYXNQcm9wZXJ0eSA9IGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QobV9leGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b0pTT04sIHNsb3QpOworICAgIGJvb2wgaGFzUHJvcGVydHkgPSBiYXNl
VmFsdWUuZ2V0UHJvcGVydHlTbG90KG1fZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT50
b0pTT04sIHNsb3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8
ICFoYXNQcm9wZXJ0eSk7CiAgICAgaWYgKCFoYXNQcm9wZXJ0eSkKICAgICAgICAgcmV0dXJuIGJh
c2VWYWx1ZTsKIAotICAgIEpTVmFsdWUgdG9KU09ORnVuY3Rpb24gPSBzbG90LmdldFZhbHVlKG1f
ZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9KU09OKTsKKyAgICBKU1ZhbHVlIHRvSlNPTkZ1bmN0
aW9uID0gc2xvdC5nZXRWYWx1ZShtX2dsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+dG9K
U09OKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgdG9KU09OSW1wbCh2bSwgYmFzZVZhbHVlLCB0b0pTT05GdW5jdGlv
biwgcHJvcGVydHlOYW1lKSk7CiB9CkBAIC0zMTYsMTQgKzMxNiwxNCBAQCBKU1ZhbHVlIFN0cmlu
Z2lmaWVyOjp0b0pTT05JbXBsKFZNJiB2bSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgdG9K
U09ORnVuY3RpbwogICAgICAgICByZXR1cm4gYmFzZVZhbHVlOwogCiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZChwcm9wZXJ0eU5hbWUudmFsdWUobV9leGVj
KSk7CisgICAgYXJncy5hcHBlbmQocHJvcGVydHlOYW1lLnZhbHVlKG1fZ2xvYmFsT2JqZWN0KSk7
CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgcmV0dXJuIGNhbGwobV9l
eGVjLCBhc09iamVjdCh0b0pTT05GdW5jdGlvbiksIGNhbGxUeXBlLCBjYWxsRGF0YSwgYmFzZVZh
bHVlLCBhcmdzKTsKKyAgICByZXR1cm4gY2FsbChtX2dsb2JhbE9iamVjdCwgYXNPYmplY3QodG9K
U09ORnVuY3Rpb24pLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJhc2VWYWx1ZSwgYXJncyk7CiB9CiAK
IFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lm
aWVkVmFsdWUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgSG9s
ZGVyJiBob2xkZXIsIGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJvcGVydHlO
YW1lKQogewotICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBtX2dsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICAvLyBDYWxsIHRoZSB0b0pTT04gZnVuY3Rpb24uCkBAIC0zMzUsMTEgKzMzNSwxMSBA
QCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdp
ZmllZFZhbHVlKFN0cmluZ0J1aWxkZXImCiAgICAgLy8gQ2FsbCB0aGUgcmVwbGFjZXIgZnVuY3Rp
b24uCiAgICAgaWYgKGlzQ2FsbGFibGVSZXBsYWNlcigpKSB7CiAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHByb3BlcnR5TmFtZS52YWx1ZSht
X2V4ZWMpKTsKKyAgICAgICAgYXJncy5hcHBlbmQocHJvcGVydHlOYW1lLnZhbHVlKG1fZ2xvYmFs
T2JqZWN0KSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKICAgICAgICAgQVNTRVJUKCFh
cmdzLmhhc092ZXJmbG93ZWQoKSk7CiAgICAgICAgIEFTU0VSVChob2xkZXIub2JqZWN0KCkpOwot
ICAgICAgICB2YWx1ZSA9IGNhbGwobV9leGVjLCBtX3JlcGxhY2VyLCBtX3JlcGxhY2VyQ2FsbFR5
cGUsIG1fcmVwbGFjZXJDYWxsRGF0YSwgaG9sZGVyLm9iamVjdCgpLCBhcmdzKTsKKyAgICAgICAg
dmFsdWUgPSBjYWxsKG1fZ2xvYmFsT2JqZWN0LCBtX3JlcGxhY2VyLCBtX3JlcGxhY2VyQ2FsbFR5
cGUsIG1fcmVwbGFjZXJDYWxsRGF0YSwgaG9sZGVyLm9iamVjdCgpLCBhcmdzKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgU3RyaW5naWZ5RmFpbGVkKTsKICAgICB9CiAKQEAg
LTM1MSw3ICszNTEsNyBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVy
OjphcHBlbmRTdHJpbmdpZmllZFZhbHVlKFN0cmluZ0J1aWxkZXImCiAgICAgICAgIHJldHVybiBT
dHJpbmdpZnlTdWNjZWVkZWQ7CiAgICAgfQogCi0gICAgdmFsdWUgPSB1bndyYXBCb3hlZFByaW1p
dGl2ZShtX2V4ZWMsIHZhbHVlKTsKKyAgICB2YWx1ZSA9IHVud3JhcEJveGVkUHJpbWl0aXZlKG1f
Z2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBT
dHJpbmdpZnlGYWlsZWQpOwogCkBAIC0zNjQsNyArMzY0LDcgQEAgU3RyaW5naWZpZXI6OlN0cmlu
Z2lmeVJlc3VsdCBTdHJpbmdpZmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZShTdHJpbmdCdWls
ZGVyJgogICAgIH0KIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGNvbnN0
IFN0cmluZyYgc3RyaW5nID0gYXNTdHJpbmcodmFsdWUpLT52YWx1ZShtX2V4ZWMpOworICAgICAg
ICBjb25zdCBTdHJpbmcmIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUobV9nbG9iYWxP
YmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBTdHJpbmdpZnlGYWls
ZWQpOwogICAgICAgICBidWlsZGVyLmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoc3RyaW5nKTsKICAg
ICAgICAgcmV0dXJuIFN0cmluZ2lmeVN1Y2NlZWRlZDsKQEAgLTM4NCw3ICszODQsNyBAQCBTdHJp
bmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdpZmllZFZh
bHVlKFN0cmluZ0J1aWxkZXImCiAgICAgfQogCiAgICAgaWYgKHZhbHVlLmlzQmlnSW50KCkpIHsK
LSAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgIkpTT04uc3RyaW5naWZ5IGNh
bm5vdCBzZXJpYWxpemUgQmlnSW50LiJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKG1fZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIkpTT04uc3RyaW5naWZ5IGNhbm5vdCBzZXJpYWxpemUgQmlnSW50
LiJfcyk7CiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAgICAgfQogCkBAIC00MDYs
MTMgKzQwNiwxMyBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyOjph
cHBlbmRTdHJpbmdpZmllZFZhbHVlKFN0cmluZ0J1aWxkZXImCiAgICAgLy8gSGFuZGxlIGN5Y2xl
IGRldGVjdGlvbiwgYW5kIHB1dCB0aGUgaG9sZGVyIG9uIHRoZSBzdGFjay4KICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9ob2xkZXJTdGFjay5zaXplKCk7IGkrKykgewogICAgICAgICBp
ZiAobV9ob2xkZXJTdGFja1tpXS5vYmplY3QoKSA9PSBvYmplY3QpIHsKLSAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUsICJKU09OLnN0cmluZ2lmeSBjYW5ub3Qgc2VyaWFs
aXplIGN5Y2xpYyBzdHJ1Y3R1cmVzLiJfcyk7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvciht
X2dsb2JhbE9iamVjdCwgc2NvcGUsICJKU09OLnN0cmluZ2lmeSBjYW5ub3Qgc2VyaWFsaXplIGN5
Y2xpYyBzdHJ1Y3R1cmVzLiJfcyk7CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVk
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBob2xkZXJTdGFja1dhc0VtcHR5ID0gbV9o
b2xkZXJTdGFjay5pc0VtcHR5KCk7Ci0gICAgbV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKG1f
ZXhlYywgb2JqZWN0KSk7CisgICAgbV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKG1fZ2xvYmFs
T2JqZWN0LCBvYmplY3QpKTsKICAgICBtX29iamVjdFN0YWNrLmFwcGVuZFdpdGhDcmFzaE9uT3Zl
cmZsb3cob2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBTdHJpbmdpZnlG
YWlsZWQpOwogICAgIGlmICghaG9sZGVyU3RhY2tXYXNFbXB0eSkKQEAgLTQ1OSwxMCArNDU5LDEw
IEBAIGlubGluZSB2b2lkIFN0cmluZ2lmaWVyOjpzdGFydE5ld0xpbmUoU3RyaW5nQnVpbGRlciYg
YnVpbGRlcikgY29uc3QKICAgICBidWlsZGVyLmFwcGVuZChtX2luZGVudCk7CiB9CiAKLWlubGlu
ZSBTdHJpbmdpZmllcjo6SG9sZGVyOjpIb2xkZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b2JqZWN0KQoraW5saW5lIFN0cmluZ2lmaWVyOjpIb2xkZXI6OkhvbGRlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0KQogICAgIDogbV9vYmplY3Qob2JqZWN0
KQogICAgICwgbV9pc0pTQXJyYXkoaXNKU0FycmF5KG9iamVjdCkpCi0gICAgLCBtX2lzQXJyYXko
SlNDOjppc0FycmF5KGV4ZWMsIG9iamVjdCkpCisgICAgLCBtX2lzQXJyYXkoSlNDOjppc0FycmF5
KGdsb2JhbE9iamVjdCwgb2JqZWN0KSkKIHsKIH0KIApAQCAtNDc3LDggKzQ3Nyw4IEBAIGJvb2wg
U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KFN0cmluZ2lmaWVyJiBzdHJp
bmdpZmllciwgU3RyaW5nQnVpCiB7CiAgICAgQVNTRVJUKG1faW5kZXggPD0gbV9zaXplKTsKIAot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHN0cmluZ2lmaWVyLm1fZXhlYzsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJpbmdpZmll
ci5tX2dsb2JhbE9iamVjdDsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gRmlyc3QgdGlt
ZSB0aHJvdWdoLCBpbml0aWFsaXplLgpAQCAtNDg3LDkgKzQ4Nyw5IEBAIGJvb2wgU3RyaW5naWZp
ZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KFN0cmluZ2lmaWVyJiBzdHJpbmdpZmllciwg
U3RyaW5nQnVpCiAgICAgICAgICAgICBpZiAobV9pc0pTQXJyYXkpCiAgICAgICAgICAgICAgICAg
bV9zaXplID0gYXNBcnJheShtX29iamVjdCktPmxlbmd0aCgpOwogICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fb2JqZWN0LT5nZXQoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9vYmplY3QtPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CiAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAg
ICAgICAgICAgIG1fc2l6ZSA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgICAg
IG1fc2l6ZSA9IHZhbHVlLnRvVUludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJ1snKTsKQEAgLTQ5OCw3ICs0OTgsNyBAQCBib29sIFN0cmlu
Z2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0eShTdHJpbmdpZmllciYgc3RyaW5naWZp
ZXIsIFN0cmluZ0J1aQogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IHN0cmluZ2lm
aWVyLm1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuZGF0YSgpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVydHlOYW1l
cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1
ZGUpOwotICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMobV9vYmplY3QsIGV4ZWMsIG9iamVjdFByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBtX29iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG1fb2JqZWN0LCBnbG9iYWxPYmplY3QsIG9iamVjdFByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eU5hbWVzID0g
b2JqZWN0UHJvcGVydHlOYW1lcy5yZWxlYXNlRGF0YSgpOwogICAgICAgICAgICAgfQpAQCAtNTMw
LDEwICs1MzAsMTAgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVy
dHkoU3RyaW5naWZpZXImIHN0cmluZ2lmaWVyLCBTdHJpbmdCdWkKICAgICAgICAgICAgIHZhbHVl
ID0gYXNBcnJheShtX29iamVjdCktPmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QobV9vYmplY3QsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwotICAgICAgICAgICAgYm9vbCBoYXNQcm9wZXJ0
eSA9IG1fb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpOworICAgICAg
ICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IG1fb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFs
T2JqZWN0LCBpbmRleCwgc2xvdCk7CiAgICAgICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSB8fCAhaGFzUHJvcGVydHkpOwogICAgICAgICAgICAgaWYgKGhhc1Byb3Bl
cnR5KQotICAgICAgICAgICAgICAgIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpbmRleCk7
CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgaW5k
ZXgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAg
LTU1MSwxMSArNTUxLDExIEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFBy
b3BlcnR5KFN0cmluZ2lmaWVyJiBzdHJpbmdpZmllciwgU3RyaW5nQnVpCiAgICAgICAgIC8vIEdl
dCB0aGUgdmFsdWUuCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG1fb2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICAgICAgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lID0gbV9wcm9wZXJ0eU5hbWVzLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpbmRleF07
Ci0gICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBtX29iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBtX29i
amVjdC0+Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
ICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWhhc1Byb3Bl
cnR5KTsKICAgICAgICAgaWYgKCFoYXNQcm9wZXJ0eSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKIAogICAgICAgICByb2xsQmFja1BvaW50ID0gYnVpbGRlci5sZW5ndGgoKTsKQEAgLTYxNCw4
ICs2MTQsOCBAQCBjbGFzcyBXYWxrZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdhbGtl
cik7CiAgICAgV1RGX0ZPUkJJRF9IRUFQX0FMTE9DQVRJT047CiBwdWJsaWM6Ci0gICAgV2Fsa2Vy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwg
Q2FsbERhdGEgY2FsbERhdGEpCi0gICAgICAgIDogbV9leGVjKGV4ZWMpCisgICAgV2Fsa2VyKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ2FsbFR5cGUg
Y2FsbFR5cGUsIENhbGxEYXRhIGNhbGxEYXRhKQorICAgICAgICA6IG1fZ2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdCkKICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogICAgICAgICAsIG1f
Y2FsbFR5cGUoY2FsbFR5cGUpCiAgICAgICAgICwgbV9jYWxsRGF0YShjYWxsRGF0YSkKQEAgLTYy
OSwxMiArNjI5LDEyIEBAIGNsYXNzIFdhbGtlciB7CiAgICAgICAgIGFyZ3MuYXBwZW5kKHByb3Bl
cnR5KTsKICAgICAgICAgYXJncy5hcHBlbmQodW5maWx0ZXJlZCk7CiAgICAgICAgIEFTU0VSVCgh
YXJncy5oYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICByZXR1cm4gY2FsbChtX2V4ZWMsIG1fZnVu
Y3Rpb24sIG1fY2FsbFR5cGUsIG1fY2FsbERhdGEsIHRoaXNPYmosIGFyZ3MpOworICAgICAgICBy
ZXR1cm4gY2FsbChtX2dsb2JhbE9iamVjdCwgbV9mdW5jdGlvbiwgbV9jYWxsVHlwZSwgbV9jYWxs
RGF0YSwgdGhpc09iaiwgYXJncyk7CiAgICAgfQogCiAgICAgZnJpZW5kIGNsYXNzIEhvbGRlcjsK
IAotICAgIEV4ZWNTdGF0ZSogbV9leGVjOworICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9i
amVjdDsKICAgICBKU09iamVjdCogbV9mdW5jdGlvbjsKICAgICBDYWxsVHlwZSBtX2NhbGxUeXBl
OwogICAgIENhbGxEYXRhIG1fY2FsbERhdGE7CkBAIC02NDYsNyArNjQ2LDcgQEAgZW51bSBXYWxr
ZXJTdGF0ZSB7IFN0YXRlVW5rbm93biwgQXJyYXlTdGFydFN0YXRlLCBBcnJheVN0YXJ0VmlzaXRN
ZW1iZXIsIEFycmF5RW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFN0
YXJ0U3RhdGUsIE9iamVjdFN0YXJ0VmlzaXRNZW1iZXIsIE9iamVjdEVuZFZpc2l0TWVtYmVyIH07
CiBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1ZSB1bmZpbHRlcmVkKQog
ewotICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBtX2dsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBWZWN0b3I8UHJvcGVydHlOYW1lQXJyYXksIDE2LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gcHJv
cGVydHlTdGFjazsKQEAgLTY2NiwxMSArNjY2LDExIEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdh
bGtlcjo6d2FsayhKU1ZhbHVlIHVuZmlsdGVyZWQpCiAgICAgICAgICAgICAgICAgQVNTRVJUKGlu
VmFsdWUuaXNPYmplY3QoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNBcnJheShpblZh
bHVlKSB8fCBpblZhbHVlLmluaGVyaXRzPFByb3h5T2JqZWN0Pih2bSkpOwogICAgICAgICAgICAg
ICAgIGlmIChtYXJrZWRTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dTdGFja092ZXJmbG93RXJyb3IobV9leGVjLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cihtX2dsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGFy
cmF5ID0gYXNPYmplY3QoaW5WYWx1ZSk7CiAgICAgICAgICAgICAgICAgbWFya2VkU3RhY2suYXBw
ZW5kV2l0aENyYXNoT25PdmVyZmxvdyhhcnJheSk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdG9MZW5ndGgobV9leGVjLCBhcnJheSk7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdG9MZW5ndGgobV9nbG9iYWxPYmplY3QsIGFycmF5KTsKICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICAgICAgICAgIGFy
cmF5TGVuZ3RoU3RhY2suYXBwZW5kKGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFj
ay5hcHBlbmQoMCk7CkBAIC02OTIsOCArNjkyLDggQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fs
a2VyOjp3YWxrKEpTVmFsdWUgdW5maWx0ZXJlZCkKICAgICAgICAgICAgICAgICAgICAgaW5WYWx1
ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChhcnJheSwgUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChh
cnJheS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGFycmF5LCBt
X2V4ZWMsIGluZGV4LCBzbG90KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBz
bG90LmdldFZhbHVlKG1fZXhlYywgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJy
YXktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChhcnJheSwgbV9n
bG9iYWxPYmplY3QsIGluZGV4LCBzbG90KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluVmFs
dWUgPSBzbG90LmdldFZhbHVlKG1fZ2xvYmFsT2JqZWN0LCBpbmRleCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwpAQCAtNzExLDkgKzcxMSw5IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhK
U1ZhbHVlIHVuZmlsdGVyZWQpCiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBmaWx0ZXJlZFZhbHVl
ID0gY2FsbFJldml2ZXIoYXJyYXksIGpzU3RyaW5nKHZtLCBTdHJpbmc6Om51bWJlcihpbmRleFN0
YWNrLmxhc3QoKSkpLCBvdXRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUodm0pLT5k
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYXJyYXksIG1fZXhlYywgaW5kZXhTdGFjay5sYXN0KCkpOwor
ICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoYXJyYXksIG1fZ2xvYmFsT2JqZWN0LCBpbmRleFN0YWNrLmxhc3QoKSk7CiAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgobV9leGVjLCBpbmRleFN0YWNrLmxhc3QoKSwgZmlsdGVyZWRWYWx1ZSwgMCwgUHV0RGlyZWN0
SW5kZXhTaG91bGROb3RUaHJvdyk7CisgICAgICAgICAgICAgICAgICAgIGFycmF5LT5wdXREaXJl
Y3RJbmRleChtX2dsb2JhbE9iamVjdCwgaW5kZXhTdGFjay5sYXN0KCksIGZpbHRlcmVkVmFsdWUs
IDAsIFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5s
YXN0KCkrKzsKICAgICAgICAgICAgICAgICBnb3RvIGFycmF5U3RhcnRWaXNpdE1lbWJlcjsKQEAg
LTcyMywxMyArNzIzLDEzIEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1Zh
bHVlIHVuZmlsdGVyZWQpCiAgICAgICAgICAgICAgICAgQVNTRVJUKGluVmFsdWUuaXNPYmplY3Qo
KSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0pTQXJyYXkoaW5WYWx1ZSkpOwogICAgICAg
ICAgICAgICAgIGlmIChtYXJrZWRTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9u
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dTdGFja092ZXJmbG93RXJyb3IobV9l
eGVjLCBzY29wZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihtX2dsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KGluVmFsdWUpOwogICAgICAgICAgICAgICAgIG1hcmtlZFN0
YWNrLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqZWN0KTsKICAgICAgICAgICAgICAgICBp
bmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVu
ZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0
ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFj
ay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBvYmplY3RTdGFydFZpc2l0TWVtYmVyOgpAQCAtNzQ2LDggKzc0Niw4IEBAIE5FVkVS
X0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHVlIHVuZmlsdGVyZWQpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXQpOwotICAgICAgICAgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlTbG90KG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0aWVzW2luZGV4XSwgc2xvdCkp
Ci0gICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBzbG90LmdldFZhbHVlKG1fZXhlYywgcHJv
cGVydGllc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgbV9nbG9iYWxPYmplY3QsIHByb3BlcnRp
ZXNbaW5kZXhdLCBzbG90KSkKKyAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IHNsb3QuZ2V0
VmFsdWUobV9nbG9iYWxPYmplY3QsIHByb3BlcnRpZXNbaW5kZXhdKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogCkBA
IC03NjgsOSArNzY4LDkgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFs
dWUgdW5maWx0ZXJlZCkKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGZpbHRlcmVkVmFsdWUgPSBj
YWxsUmV2aXZlcihvYmplY3QsIGpzU3RyaW5nKHZtLCBwcm9wLnN0cmluZygpKSwgb3V0VmFsdWUp
OwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGZpbHRlcmVkVmFsdWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwg
bV9leGVjLCBwcm9wKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgbV9nbG9iYWxPYmplY3QsIHByb3ApOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPnB1dChvYmplY3QsIG1fZXhlYywgcHJvcCwgZmlsdGVyZWRWYWx1ZSwgc2xvdCk7CisgICAg
ICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQob2JqZWN0LCBtX2ds
b2JhbE9iamVjdCwgcHJvcCwgZmlsdGVyZWRWYWx1ZSwgc2xvdCk7CiAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgICAgICBpbmRleFN0
YWNrLmxhc3QoKSsrOwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJl
cjsKQEAgLTc4MSw3ICs3ODEsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGso
SlNWYWx1ZSB1bmZpbHRlcmVkKQogICAgICAgICAgICAgICAgICAgICBvdXRWYWx1ZSA9IGluVmFs
dWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBib29sIHZhbHVlSXNBcnJheSA9IGlzQXJyYXkobV9leGVjLCBpblZhbHVlKTsK
KyAgICAgICAgICAgICAgICBib29sIHZhbHVlSXNBcnJheSA9IGlzQXJyYXkobV9nbG9iYWxPYmpl
Y3QsIGluVmFsdWUpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlSXNBcnJheSkKICAgICAgICAgICAgICAg
ICAgICAgZ290byBhcnJheVN0YXJ0U3RhdGU7CkBAIC03OTMsOSArNzkzLDkgQEAgTkVWRVJfSU5M
SU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdWUgdW5maWx0ZXJlZCkKICAgICAgICAgc3Rh
dGUgPSBzdGF0ZVN0YWNrLmxhc3QoKTsKICAgICAgICAgc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7
CiAgICAgfQotICAgIEpTT2JqZWN0KiBmaW5hbEhvbGRlciA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KG1fZXhlYyk7CisgICAgSlNPYmplY3QqIGZpbmFsSG9sZGVyID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QobV9nbG9iYWxPYmplY3QpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGZpbmFsSG9sZGVy
KTsKLSAgICBmaW5hbEhvbGRlci0+bWV0aG9kVGFibGUodm0pLT5wdXQoZmluYWxIb2xkZXIsIG1f
ZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCBvdXRWYWx1ZSwgc2xvdCk7
CisgICAgZmluYWxIb2xkZXItPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGZpbmFsSG9sZGVyLCBtX2ds
b2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCBvdXRWYWx1ZSwg
c2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGNhbGxSZXZpdmVyKGZpbmFsSG9sZGVyLCBqc0VtcHR5U3RyaW5n
KHZtKSwgb3V0VmFsdWUpKTsKIH0KQEAgLTgwNSwyNiArODA1LDI2IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1BhcnNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHZpZXdXaXRoU3RyaW5n
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b1N0cmluZyhjYWxsRnJhbWUpLT52aWV3V2l0aFVu
ZGVybHlpbmdTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKS50b1N0cmluZyhnbG9iYWxPYmplY3QpLT52aWV3V2l0aFVuZGVy
bHlpbmdTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIFN0cmluZ1ZpZXcgdmlldyA9IHZpZXdXaXRoU3RyaW5nLnZpZXc7CiAKICAg
ICBKU1ZhbHVlIHVuZmlsdGVyZWQ7CiAgICAgaWYgKHZpZXcuaXM4Qml0KCkpIHsKLSAgICAgICAg
TGl0ZXJhbFBhcnNlcjxMQ2hhcj4ganNvblBhcnNlcihjYWxsRnJhbWUsIHZpZXcuY2hhcmFjdGVy
czgoKSwgdmlldy5sZW5ndGgoKSwgU3RyaWN0SlNPTik7CisgICAgICAgIExpdGVyYWxQYXJzZXI8
TENoYXI+IGpzb25QYXJzZXIoZ2xvYmFsT2JqZWN0LCB2aWV3LmNoYXJhY3RlcnM4KCksIHZpZXcu
bGVuZ3RoKCksIFN0cmljdEpTT04pOwogICAgICAgICB1bmZpbHRlcmVkID0ganNvblBhcnNlci50
cnlMaXRlcmFsUGFyc2UoKTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkgfHwgIXVuZmlsdGVyZWQpOwogICAgICAgICBpZiAoIXVuZmlsdGVyZWQpIHsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGNhbGxG
cmFtZSwganNvblBhcnNlci5nZXRFcnJvck1lc3NhZ2UoKSkpOworICAgICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihnbG9i
YWxPYmplY3QsIGpzb25QYXJzZXIuZ2V0RXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7Ci0gICAgICAgIExpdGVyYWxQYXJzZXI8VUNoYXI+IGpzb25QYXJzZXIoY2FsbEZy
YW1lLCB2aWV3LmNoYXJhY3RlcnMxNigpLCB2aWV3Lmxlbmd0aCgpLCBTdHJpY3RKU09OKTsKKyAg
ICAgICAgTGl0ZXJhbFBhcnNlcjxVQ2hhcj4ganNvblBhcnNlcihnbG9iYWxPYmplY3QsIHZpZXcu
Y2hhcmFjdGVyczE2KCksIHZpZXcubGVuZ3RoKCksIFN0cmljdEpTT04pOwogICAgICAgICB1bmZp
bHRlcmVkID0ganNvblBhcnNlci50cnlMaXRlcmFsUGFyc2UoKTsKICAgICAgICAgRVhDRVBUSU9O
X0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXVuZmlsdGVyZWQpOwogICAgICAgICBpZiAo
IXVuZmlsdGVyZWQpIHsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIGNy
ZWF0ZVN5bnRheEVycm9yKGNhbGxGcmFtZSwganNvblBhcnNlci5nZXRFcnJvck1lc3NhZ2UoKSkp
OworICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBj
cmVhdGVTeW50YXhFcnJvcihnbG9iYWxPYmplY3QsIGpzb25QYXJzZXIuZ2V0RXJyb3JNZXNzYWdl
KCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTgzNyw3ICs4MzcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNQYXJzZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYQogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh1bmZpbHRlcmVkKTsKICAgICBzY29wZS5yZWxl
YXNlKCk7Ci0gICAgV2Fsa2VyIHdhbGtlcihjYWxsRnJhbWUsIGFzT2JqZWN0KGZ1bmN0aW9uKSwg
Y2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICBXYWxrZXIgd2Fsa2VyKGdsb2JhbE9iamVjdCwgYXNP
YmplY3QoZnVuY3Rpb24pLCBjYWxsVHlwZSwgY2FsbERhdGEpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUod2Fsa2VyLndhbGsodW5maWx0ZXJlZCkpOwogfQogCkBAIC04NDcsNDAgKzg0Nyw0
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1bmNTdHJpbmdpZnko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBT
dHJpbmdpZmllciBzdHJpbmdpZmllcihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMSks
IGNhbGxGcmFtZS0+YXJndW1lbnQoMikpOworICAgIFN0cmluZ2lmaWVyIHN0cmluZ2lmaWVyKGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgy
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShzdHJpbmdpZmllci5zdHJpbmdpZnkoY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKIH0KIAotSlNWYWx1ZSBKU09OUGFyc2UoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIGpzb24pCitKU1ZhbHVlIEpTT05QYXJzZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIGpzb24pCiB7CiAgICAgaWYgKGpzb24u
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBpZiAoanNvbi5pczhC
aXQoKSkgewotICAgICAgICBMaXRlcmFsUGFyc2VyPExDaGFyPiBqc29uUGFyc2VyKGV4ZWMsIGpz
b24uY2hhcmFjdGVyczgoKSwganNvbi5sZW5ndGgoKSwgU3RyaWN0SlNPTik7CisgICAgICAgIExp
dGVyYWxQYXJzZXI8TENoYXI+IGpzb25QYXJzZXIoZ2xvYmFsT2JqZWN0LCBqc29uLmNoYXJhY3Rl
cnM4KCksIGpzb24ubGVuZ3RoKCksIFN0cmljdEpTT04pOwogICAgICAgICByZXR1cm4ganNvblBh
cnNlci50cnlMaXRlcmFsUGFyc2UoKTsKICAgICB9CiAKLSAgICBMaXRlcmFsUGFyc2VyPFVDaGFy
PiBqc29uUGFyc2VyKGV4ZWMsIGpzb24uY2hhcmFjdGVyczE2KCksIGpzb24ubGVuZ3RoKCksIFN0
cmljdEpTT04pOworICAgIExpdGVyYWxQYXJzZXI8VUNoYXI+IGpzb25QYXJzZXIoZ2xvYmFsT2Jq
ZWN0LCBqc29uLmNoYXJhY3RlcnMxNigpLCBqc29uLmxlbmd0aCgpLCBTdHJpY3RKU09OKTsKICAg
ICByZXR1cm4ganNvblBhcnNlci50cnlMaXRlcmFsUGFyc2UoKTsKIH0KIAotU3RyaW5nIEpTT05T
dHJpbmdpZnkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIHNwYWNlKQor
U3RyaW5nIEpTT05TdHJpbmdpZnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgSlNWYWx1ZSBzcGFjZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBTdHJpbmdpZmllciBzdHJpbmdpZmllcihleGVjLCBq
c051bGwoKSwgc3BhY2UpOworICAgIFN0cmluZ2lmaWVyIHN0cmluZ2lmaWVyKGdsb2JhbE9iamVj
dCwganNOdWxsKCksIHNwYWNlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBzdHJpbmdpZmllci5zdHJpbmdpZnkodmFsdWUp
OwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSB8fCByZXN1bHQuaXNV
bmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBy
ZXN1bHQuZ2V0U3RyaW5nKGV4ZWMpOworICAgIHJldHVybiByZXN1bHQuZ2V0U3RyaW5nKGdsb2Jh
bE9iamVjdCk7CiB9CiAKLVN0cmluZyBKU09OU3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgaW5kZW50KQorU3RyaW5nIEpTT05TdHJpbmdpZnkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgaW5kZW50KQog
ewotICAgIHJldHVybiBKU09OU3RyaW5naWZ5KGV4ZWMsIHZhbHVlLCBqc051bWJlcihpbmRlbnQp
KTsKKyAgICByZXR1cm4gSlNPTlN0cmluZ2lmeShnbG9iYWxPYmplY3QsIHZhbHVlLCBqc051bWJl
cihpbmRlbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmgKaW5kZXggNDBmYTNkYjdkMDVjNGVlYzk5YjUxODU1OWE0
NzAzY2U2ZWMxZGFiMy4uNDdiMWM4YTRhOTY0YTc4NTBlZDNiMGJhNmFhNmY2MGQ3ZTVjYmQ4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaApAQCAtNTUsOCAr
NTUsOCBAQCBjbGFzcyBKU09OT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogICAgIEpTT05PYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKIH07CiAKLUpTX0VYUE9SVF9QUklW
QVRFIEpTVmFsdWUgSlNPTlBhcnNlKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotSlNfRVhQ
T1JUX1BSSVZBVEUgU3RyaW5nIEpTT05TdHJpbmdpZnkoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNW
YWx1ZSBzcGFjZSk7Ci1KU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgSlNPTlN0cmluZ2lmeShFeGVj
U3RhdGUqLCBKU1ZhbHVlLCB1bnNpZ25lZCBpbmRlbnQpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNW
YWx1ZSBKU09OUGFyc2UoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKK0pTX0VYUE9S
VF9QUklWQVRFIFN0cmluZyBKU09OU3RyaW5naWZ5KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwg
SlNWYWx1ZSBzcGFjZSk7CitKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgSlNPTlN0cmluZ2lmeShK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIHVuc2lnbmVkIGluZGVudCk7CiAgICAgCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcApp
bmRleCA3MThjMTU2MTAzMTg5Zjg3NGM5NWU4MWM3ZjlhNTlkNDllZjA4MjE5Li4wMGEwY2ZjMjk2
NjAxZTFhM2NmZjE0YzM3MzEwYWM4ZDQ4ZTZhYjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCkBAIC03NSw5ICs3NSw5IEBAIGNvbnN0IENsYXNzSW5mbyBK
U09iamVjdDo6c19pbmZvID0geyAiT2JqZWN0IiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFCiAKIGNvbnN0IENsYXNzSW5mbyBKU0ZpbmFsT2JqZWN0OjpzX2luZm8gPSB7ICJPYmpl
Y3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTRmluYWxPYmplY3QpIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5
TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorc3RhdGlj
IGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgLy8gQWRkIHBy
b3BlcnRpZXMgZnJvbSB0aGUgc3RhdGljIGhhc2h0YWJsZXMgb2YgcHJvcGVydGllcwogICAgIGZv
ciAoOyBjbGFzc0luZm87IGNsYXNzSW5mbyA9IGNsYXNzSW5mby0+cGFyZW50Q2xhc3MpIHsKQEAg
LTUxNiw5ICs1MTYsOSBAQCBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVj
dCogb2JqZWN0LCBWTSYgdm0pCiAgICAgcmV0dXJuIGluZm8tPmNsYXNzTmFtZTsKIH0KIAotU3Ry
aW5nIEpTT2JqZWN0Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjKQorU3RyaW5nIEpTT2JqZWN0Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBjb25zdCBD
bGFzc0luZm8qIGluZm8gPSBvYmplY3QtPmNsYXNzSW5mbyh2bSk7CiAgICAgQVNTRVJUKGluZm8p
OwogICAgIHJldHVybiBpbmZvLT5jbGFzc05hbWU7CkBAIC01MzEsMTUgKzUzMSwxNCBAQCBTdHJp
bmcgSlNPYmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUoSlNPYmplY3QqIG9iamVjdCkKICAgICBh
dXRvKiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7Ci0gICAgYXV0byogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
CiAgICAgLy8gQ2hlY2sgZm9yIGEgZGlzcGxheSBuYW1lIG9mIG9iai5jb25zdHJ1Y3Rvci4KICAg
ICAvLyBUaGlzIGlzIHVzZWZ1bCB0byBnZXQgYEZvb2AgZm9yIHRoZSBgKGNsYXNzIEZvbykucHJv
dG90eXBlYCBvYmplY3QuCiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKLSAgICBpZiAob2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rv
ciwgc2xvdCkpIHsKKyAgICBpZiAob2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBn
bG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBzbG90KSkgewogICAg
ICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIGlmIChz
bG90LmlzVmFsdWUoKSkgewotICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBjdG9yT2JqZWN0ID0g
anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBzbG90LmdldFZhbHVlKGV4ZWMsIHZtLnByb3Bl
cnR5TmFtZXMtPmNvbnN0cnVjdG9yKSkpIHsKKyAgICAgICAgICAgIGlmIChKU09iamVjdCogY3Rv
ck9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgc2xvdC5nZXRWYWx1ZShnbG9i
YWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yKSkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoSlNGdW5jdGlvbiogY29uc3RydWN0b3JGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
SlNGdW5jdGlvbio+KHZtLCBjdG9yT2JqZWN0KSkKICAgICAgICAgICAgICAgICAgICAgY29uc3Ry
dWN0b3JGdW5jdGlvbk5hbWUgPSBjb25zdHJ1Y3RvckZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxh
eU5hbWUodm0pOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKEludGVybmFsRnVuY3Rpb24qIGNv
bnN0cnVjdG9yRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPih2bSwg
Y3Rvck9iamVjdCkpCkBAIC01NjEsMTAgKzU2MCwxMCBAQCBTdHJpbmcgSlNPYmplY3Q6OmNhbGN1
bGF0ZWRDbGFzc05hbWUoSlNPYmplY3QqIG9iamVjdCkKICAgICAgICAgICAgIGlmIChwcm90b1Zh
bHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBKU09iamVjdCogcHJvdG9PYmplY3Qg
PSBhc09iamVjdChwcm90b1ZhbHVlKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChwcm90b1ZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5
KTsKLSAgICAgICAgICAgICAgICBpZiAocHJvdG9PYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVj
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvciwgc2xvdCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAocHJvdG9PYmplY3QtPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHZtLnByb3Bl
cnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBzbG90KSkgewogICAgICAgICAgICAgICAgICAgICBFWENF
UFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChzbG90LmlzVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTT2JqZWN0
KiBjdG9yT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBzbG90LmdldFZhbHVl
KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChKU09iamVjdCogY3Rvck9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmpl
Y3QqPih2bSwgc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmNv
bnN0cnVjdG9yKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNGdW5jdGlv
biogY29uc3RydWN0b3JGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBj
dG9yT2JqZWN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JG
dW5jdGlvbk5hbWUgPSBjb25zdHJ1Y3RvckZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxheU5hbWUo
dm0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEludGVybmFsRnVuY3Rp
b24qIGNvbnN0cnVjdG9yRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24q
Pih2bSwgY3Rvck9iamVjdCkpCkBAIC01OTYsMTYgKzU5NSwxNiBAQCBTdHJpbmcgSlNPYmplY3Q6
OmNhbGN1bGF0ZWRDbGFzc05hbWUoSlNPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gY29uc3Ry
dWN0b3JGdW5jdGlvbk5hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIHRoaXNPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU09iamVjdCogdGhpc09iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgLy8gTkIuIFRo
ZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBzdG9yYWdl
IGltcGxpZXMgdGhhdCBpdCBpcyBub3QKICAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRvIG92ZXJy
aWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCiAgICAgLy8g
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgogICAgIAogICAgIGlmIChpID4gTUFYX0FSUkFZ
X0lOREVYKQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSks
IHNsb3QpOworICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
KHZtLCBpKSwgc2xvdCk7CiAgICAgCiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5
cGUoKSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgpAQCAtNjcxLDcgKzY3
MCw3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
IHRoaXNPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtb3JkaW5hcnlzZXQKLWJvb2wgb3JkaW5hcnlTZXRTbG93KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSByZWNlaXZlciwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wg
b3JkaW5hcnlTZXRTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBv
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUg
cmVjZWl2ZXIsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgLy8gSWYgd2UgZmluZCB0aGUgcmVj
ZWl2ZXIgaXMgbm90IHRoZSBzYW1lIHRvIHRoZSBvYmplY3QsIHdlIGZhbGwgdG8gdGhpcyBzbG93
IHBhdGguCiAgICAgLy8gQ3VycmVudGx5LCB0aGVyZSBhcmUgMyBjYW5kaWRhdGVzLgpAQCAtNjc5
LDcgKzY3OCw3IEBAIGJvb2wgb3JkaW5hcnlTZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtCiAgICAgLy8gMi4gV2luZG93IFBy
b3h5LgogICAgIC8vIDMuIEVTNiBQcm94eS4KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogY3VycmVudCA9IG9iamVjdDsKICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3Igb3duRGVzY3JpcHRvcjsKQEAgLTY4NywxNiArNjg2LDE2IEBAIGJv
b2wgb3JkaW5hcnlTZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtCiAgICAgICAgIGlmIChjdXJyZW50LT50eXBlKCkgPT0gUHJv
eHlPYmplY3RUeXBlKSB7CiAgICAgICAgICAgICBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8
UHJveHlPYmplY3QqPihjdXJyZW50KTsKICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KHJlY2VpdmVyLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHBy
b3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDkuMS45LjEtMiBMZXQgb3du
RGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKFApLgotICAgICAgICBib29sIG93bkRlc2Ny
aXB0b3JGb3VuZCA9IGN1cnJlbnQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9w
ZXJ0eU5hbWUsIG93bkRlc2NyaXB0b3IpOworICAgICAgICBib29sIG93bkRlc2NyaXB0b3JGb3Vu
ZCA9IGN1cnJlbnQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgb3duRGVzY3JpcHRvcik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKIAogICAgICAgICBpZiAoIW93bkRlc2NyaXB0b3JGb3VuZCkgewogICAgICAg
ICAgICAgLy8gOS4xLjkuMS0zLWEgTGV0IHBhcmVudCBiZSA/IE8uW1tHZXRQcm90b3R5cGVPZl1d
KCkuCi0gICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IGN1cnJlbnQtPmdldFByb3RvdHlw
ZSh2bSwgZXhlYyk7CisgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IGN1cnJlbnQtPmdl
dFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgICAgICAgICAgLy8gOS4xLjkuMS0zLWIgSWYgcGFy
ZW50IGlzIG5vdCBudWxsLCB0aGVuCkBAIC03MTUsMTEgKzcxNCwxMSBAQCBib29sIG9yZGluYXJ5
U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbQogICAgIGlmIChvd25EZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewog
ICAgICAgICAvLyA5LjEuOS4xLTQtYSBJZiBvd25EZXNjLltbV3JpdGFibGVdXSBpcyBmYWxzZSwg
cmV0dXJuIGZhbHNlLgogICAgICAgICBpZiAoIW93bkRlc2NyaXB0b3Iud3JpdGFibGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHNob3VsZFRocm93LCBSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7CiAKICAgICAgICAgLy8gOS4xLjkuMS00LWIgSWYgVHlwZShSZWNlaXZlcikgaXMgbm90IE9i
amVjdCwgcmV0dXJuIGZhbHNlLgogICAgICAgICBpZiAoIXJlY2VpdmVyLmlzT2JqZWN0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwogCiAgICAgICAgIC8vIEluIE9yZGluYXJ5U2V0LCB0aGUgcmVjZWl2ZXIgbWF5IG5vdCBi
ZSB0aGUgc2FtZSB0byB0aGUgb2JqZWN0LgogICAgICAgICAvLyBTbywgd2UgcGVyZm9ybSBbW0dl
dE93blByb3BlcnR5XV0gb250byB0aGUgcmVjZWl2ZXIgd2hpbGUgd2UgYWxyZWFkeSBwZXJmb3Jt
IFtbR2V0T3duUHJvcGVydHldXSBvbnRvIHRoZSBvYmplY3QuCkBAIC03MjcsMzAgKzcyNiwzMCBA
QCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbQogICAgICAgICAvLyA5LjEuOS4xLTQtYyBMZXQgZXhp
c3RpbmdEZXNjcmlwdG9yIGJlID8gUmVjZWl2ZXIuW1tHZXRPd25Qcm9wZXJ0eV1dKFApLgogICAg
ICAgICBKU09iamVjdCogcmVjZWl2ZXJPYmplY3QgPSBhc09iamVjdChyZWNlaXZlcik7CiAgICAg
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBleGlzdGluZ0Rlc2NyaXB0b3I7Ci0gICAgICAgIGJvb2wg
ZXhpc3RpbmdEZXNjcmlwdG9yRm91bmQgPSByZWNlaXZlck9iamVjdC0+Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZXhpc3RpbmdEZXNjcmlwdG9yKTsKKyAgICAg
ICAgYm9vbCBleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCA9IHJlY2VpdmVyT2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGV4aXN0aW5nRGVz
Y3JpcHRvcik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAog
ICAgICAgICAvLyA5LjEuOS4xLTQtZCBJZiBleGlzdGluZ0Rlc2NyaXB0b3IgaXMgbm90IHVuZGVm
aW5lZCwgdGhlbgogICAgICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yRm91bmQpIHsKICAgICAg
ICAgICAgIC8vIDkuMS45LjEtNC1kLWkgSWYgSXNBY2Nlc3NvckRlc2NyaXB0b3IoZXhpc3RpbmdE
ZXNjcmlwdG9yKSBpcyB0cnVlLCByZXR1cm4gZmFsc2UuCiAgICAgICAgICAgICBpZiAoZXhpc3Rp
bmdEZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAKICAg
ICAgICAgICAgIC8vIDkuMS45LjEtNC1kLWlpIElmIGV4aXN0aW5nRGVzY3JpcHRvci5bW1dyaXRh
YmxlXV0gaXMgZmFsc2UsIHJldHVybiBmYWxzZS4KICAgICAgICAgICAgIGlmICghZXhpc3RpbmdE
ZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihl
eGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNob3Vs
ZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAKICAgICAgICAgICAgIC8vIDku
MS45LjEtNC1kLWlpaSBMZXQgdmFsdWVEZXNjIGJlIHRoZSBQcm9wZXJ0eURlc2NyaXB0b3J7W1tW
YWx1ZV1dOiBWfS4KICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciB2YWx1ZURlc2NyaXB0
b3I7CiAgICAgICAgICAgICB2YWx1ZURlc2NyaXB0b3Iuc2V0VmFsdWUodmFsdWUpOwogCiAgICAg
ICAgICAgICAvLyA5LjEuOS4xLTQtZC1pdiBSZXR1cm4gPyBSZWNlaXZlci5bW0RlZmluZU93blBy
b3BlcnR5XV0oUCwgdmFsdWVEZXNjKS4KLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgcmVjZWl2ZXJPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHko
cmVjZWl2ZXJPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWVEZXNjcmlwdG9yLCBzaG91
bGRUaHJvdykpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZWNlaXZl
ck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShyZWNlaXZlck9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlRGVzY3JpcHRvciwgc2hvdWxkVGhy
b3cpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDkuMS45LjEtNC1lIEVsc2UgUmVjZWl2ZXIg
ZG9lcyBub3QgY3VycmVudGx5IGhhdmUgYSBwcm9wZXJ0eSBQLAogICAgICAgICAvLyA5LjEuOS4x
LTQtZS1pIFJldHVybiA/IENyZWF0ZURhdGFQcm9wZXJ0eShSZWNlaXZlciwgUCwgVikuCi0gICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVjZWl2ZXJPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+ZGVmaW5lT3duUHJvcGVydHkocmVjZWl2ZXJPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6Ok5vbmUpKSwgc2hvdWxkVGhyb3cpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCByZWNlaXZlck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Q
cm9wZXJ0eShyZWNlaXZlck9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvcih2YWx1ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpOb25lKSksIHNob3VsZFRocm93KSk7CiAgICAgfQogCiAgICAgLy8gOS4xLjkuMS01IEFz
c2VydDogSXNBY2Nlc3NvckRlc2NyaXB0b3Iob3duRGVzYykgaXMgdHJ1ZS4KQEAgLTc2MCw3ICs3
NTksNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbQogICAgIC8vIDkuMS45LjEtNyBJZiBzZXR0
ZXIgaXMgdW5kZWZpbmVkLCByZXR1cm4gZmFsc2UuCiAgICAgSlNWYWx1ZSBzZXR0ZXIgPSBvd25E
ZXNjcmlwdG9yLnNldHRlcigpOwogICAgIGlmICghc2V0dGVyLmlzT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKIAogICAgIC8v
IDkuMS45LjEtOCBQZXJmb3JtID8gQ2FsbChzZXR0ZXIsIFJlY2VpdmVyLCA8PCBWID4+KS4KICAg
ICBKU09iamVjdCogc2V0dGVyT2JqZWN0ID0gYXNPYmplY3Qoc2V0dGVyKTsKQEAgLTc3MSwzMCAr
NzcwLDMwIEBAIGJvb2wgb3JkaW5hcnlTZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXJPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0Q2FsbERhdGEoc2V0dGVyT2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgIGNhbGwoZXhlYywgc2V0dGVyT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHJlY2Vp
dmVyLCBhcmdzKTsKKyAgICBjYWxsKGdsb2JhbE9iamVjdCwgc2V0dGVyT2JqZWN0LCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHJlY2VpdmVyLCBhcmdzKTsKIAogICAgIC8vIDkuMS45LjEtOSBSZXR1cm4g
dHJ1ZS4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gRUNNQSA4LjYuMi4yCi1ib29sIEpTT2Jq
ZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNP
YmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKLSAgICByZXR1cm4gcHV0SW5saW5lRm9ySlNPYmplY3QoY2VsbCwgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIHB1dElubGluZUZvckpTT2JqZWN0
KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLWJv
b2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3coRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29s
IEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBBU1NFUlQoIWlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzKSk7CiAK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09i
amVjdCogb2JqID0gdGhpczsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0
dXJlLT50eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygpKSkgewotICAgICAg
ICAgICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKG9i
aiwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgICAgIG9iai0+bWV0aG9kVGFi
bGUodm0pLT5kb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayhvYmosIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwpAQCAtODAy
LDcgKzgwMSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3coRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlCiAgICAgICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHRoaXMtPnByb3Rv
dHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0g
dGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgc2xv
dC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKQEAgLTgxMSw3
ICs4MTAsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZQogICAgICAgICAgICAgICAgIGlmICgh
dGhpcy0+c3RydWN0dXJlKHZtKS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICAgICAgICAg
IHNsb3Quc2V0Q2FjaGVhYmxlU2V0dGVyKG9iaiwgb2Zmc2V0KTsKIAotICAgICAgICAgICAgICAg
IGJvb2wgcmVzdWx0ID0gY2FsbFNldHRlcihleGVjLCBzbG90LnRoaXNWYWx1ZSgpLCBncywgdmFs
dWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZSk7Cisg
ICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBjYWxsU2V0dGVyKGdsb2JhbE9iamVjdCwgc2xv
dC50aGlzVmFsdWUoKSwgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gU3RyaWN0TW9k
ZSA6IE5vdFN0cmljdE1vZGUpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAg
ICAgfQpAQCAtODIyLDcgKzgyMSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZVNsb3coRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlCiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbVZhbHVlKG9i
aiwganNDYXN0PEN1c3RvbUdldHRlclNldHRlcio+KGdzLmFzQ2VsbCgpKS0+c2V0dGVyKCkpOwog
Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGV4ZWMsIGdz
LCBhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yLCBvYmosIHNs
b3QudGhpc1ZhbHVlKCksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGNh
bGxDdXN0b21TZXR0ZXIoZ2xvYmFsT2JqZWN0LCBncywgYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3Nvciwgb2JqLCBzbG90LnRoaXNWYWx1ZSgpLCB2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CkBAIC04MzUsNyArODM0LDcg
QEAgYm9vbCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUKICAgICAgICAgaWYgKCFvYmotPnN0YXRpY1Byb3Bl
cnRpZXNSZWlmaWVkKHZtKSkgewogICAgICAgICAgICAgaWYgKG9iai0+Y2xhc3NJbmZvKHZtKS0+
aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSkgewogICAgICAgICAgICAgICAg
IGlmIChhdXRvIGVudHJ5ID0gb2JqLT5maW5kUHJvcGVydHlIYXNoRW50cnkodm0sIHByb3BlcnR5
TmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0
RW50cnkoZXhlYywgZW50cnktPnRhYmxlLT5jbGFzc0ZvclRoaXMsIGVudHJ5LT52YWx1ZSwgb2Jq
LCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0RW50cnkoZ2xvYmFsT2JqZWN0LCBlbnRyeS0+
dGFibGUtPmNsYXNzRm9yVGhpcywgZW50cnktPnZhbHVlLCBvYmosIHRoaXMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAo
b2JqLT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSB7CkBAIC04NDMsOSArODQyLDkgQEAgYm9v
bCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gbW9yZSBi
ZWNhdXNlIHRoaXMgaXMgb2JzZXJ2YWJsZSBiZWhhdmlvci4KICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUwMTIKICAgICAgICAgICAgIFBy
b3h5T2JqZWN0KiBwcm94eSA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iaik7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSk7CisgICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHByb3h5LT5Qcm94eU9iamVjdDo6cHV0KHByb3h5LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKICAgICAgICAgfQotICAgICAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IG9iai0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKKyAgICAgICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSBvYmotPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAo
cHJvdG90eXBlLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC04NTMsMTggKzg1Miwx
OCBAQCBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZQogICAgIH0KIAogICAgIGlmICghcHV0RGlyZWN0
SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpKQot
ICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgp
LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybiB0eXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpTT2JqZWN0OjpwdXRC
eUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCitib29sIEpTT2JqZWN0OjpwdXRC
eUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAKICAg
ICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KGNlbGwsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20odm0sIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIHRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogICAgIH0KIAog
ICAgIHRoaXNPYmplY3QtPmVuc3VyZVdyaXRhYmxlKHZtKTsKQEAgLTg3NiwxMyArODc1LDEzIEBA
IGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdf
VFlQRVM6IHsKICAgICAgICAgdGhpc09iamVjdC0+Y29udmVydFVuZGVjaWRlZEZvclZhbHVlKHZt
LCB2YWx1ZSk7CiAgICAgICAgIC8vIFJlbG9vcC4KLSAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXgo
Y2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICBy
ZXR1cm4gcHV0QnlJbmRleChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNob3VsZFRocm93KTsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOiB7CiAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7CiAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5jb252ZXJ0SW50MzJGb3JWYWx1ZSh2bSwgdmFsdWUpOwotICAgICAgICAg
ICAgcmV0dXJuIHB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hv
dWxkVGhyb3cpOworICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXgoY2VsbCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgICAgIH0KICAgICAg
ICAgRkFMTFRIUk9VR0g7CiAgICAgfQpAQCAtOTAxLDE0ICs5MDAsMTQgQEAgYm9vbCBKU09iamVj
dDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lLAogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAg
IHRoaXNPYmplY3QtPmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0pOwogICAgICAgICAgICAg
Ly8gUmVsb29wLgotICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICAgICAgcmV0dXJuIHB1dEJ5
SW5kZXgoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJv
dyk7CiAgICAgICAgIH0KIAogICAgICAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSA9IHZhbHVlLmFz
TnVtYmVyKCk7CiAgICAgICAgIGlmICh2YWx1ZUFzRG91YmxlICE9IHZhbHVlQXNEb3VibGUpIHsK
ICAgICAgICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXModm0pOwog
ICAgICAgICAgICAgLy8gUmVsb29wLgotICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXgoY2Vs
bCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICAgICAg
cmV0dXJuIHB1dEJ5SW5kZXgoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzaG91bGRUaHJvdyk7CiAgICAgICAgIH0KICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQpAQCAtOTU2LDcgKzk1NSw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwKICAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0
b3IgYXMgbmVjZXNzYXJ5LgogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgewog
ICAgICAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgcmVz
dWx0ID0gdGhpc09iamVjdC0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdywgcHV0UmVzdWx0KTsKKyAgICAgICAg
ICAgIGJvb2wgcmVzdWx0ID0gdGhpc09iamVjdC0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRl
eE9uSG9sZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93LCBw
dXRSZXN1bHQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwogICAgICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4gcHV0UmVz
dWx0OwpAQCAtOTY1LDcgKzk2NCw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwKICAgICAgICAg
ICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgfSBlbHNlIGlmICgh
dmFsdWVTbG90KSB7CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAg
ICAgICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5hdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUlu
ZGV4T25Ib2xlKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93LCBwdXRSZXN1
bHQpOworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5hdHRlbXB0VG9JbnRl
cmNlcHRQdXRCeUluZGV4T25Ib2xlKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2hvdWxkVGhyb3csIHB1dFJlc3VsdCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgICAg
IHJldHVybiBwdXRSZXN1bHQ7CkBAIC05ODAsNyArOTc5LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lLAogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAK
LSAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKFZN
JiB2bSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQpAQCAtMTgwOSwzMyArMTgwOCwzMyBAQCB2b2lk
IEpTT2JqZWN0OjpzZXRQcm90b3R5cGVEaXJlY3QoVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICBzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Uodm0pOwogfQogCi1ib29sIEpTT2JqZWN0
OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpCitib29sIEpTT2JqZWN0
OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KQog
ewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh0
aGlzLT5zdHJ1Y3R1cmUodm0pLT5pc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdCgpKSB7
CiAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEy
NjIvI3NlYy1zZXQtaW1tdXRhYmxlLXByb3RvdHlwZS4KLSAgICAgICAgaWYgKHRoaXMtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYykgPT0gcHJvdG90eXBlKQorICAgICAgICBpZiAodGhpcy0+Z2V0UHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpID09IHByb3RvdHlwZSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHNob3VsZFRo
cm93SWZDYW50U2V0LCAiQ2Fubm90IHNldCBwcm90b3R5cGUgb2YgaW1tdXRhYmxlIHByb3RvdHlw
ZSBvYmplY3QiX3MpOworICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIHNob3VsZFRocm93SWZDYW50U2V0LCAiQ2Fubm90IHNldCBwcm90b3R5cGUgb2YgaW1tdXRh
YmxlIHByb3RvdHlwZSBvYmplY3QiX3MpOwogICAgIH0KIAotICAgIEFTU0VSVChtZXRob2RUYWJs
ZSh2bSktPnRvVGhpcyh0aGlzLCBleGVjLCBOb3RTdHJpY3RNb2RlKSA9PSB0aGlzKTsKKyAgICBB
U1NFUlQobWV0aG9kVGFibGUodm0pLT50b1RoaXModGhpcywgZ2xvYmFsT2JqZWN0LCBOb3RTdHJp
Y3RNb2RlKSA9PSB0aGlzKTsKIAogICAgIGlmICh0aGlzLT5nZXRQcm90b3R5cGVEaXJlY3Qodm0p
ID09IHByb3RvdHlwZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGlzRXh0ZW5z
aWJsZSA9IHRoaXMtPmlzRXh0ZW5zaWJsZShleGVjKTsKKyAgICBib29sIGlzRXh0ZW5zaWJsZSA9
IHRoaXMtPmlzRXh0ZW5zaWJsZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmICghaXNFeHRlbnNpYmxlKQotICAgICAgICByZXR1
cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvd0lmQ2FudFNldCwgUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIHNob3VsZFRocm93SWZDYW50U2V0LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7CiAKICAgICBKU1ZhbHVlIG5leHRQcm90b3R5cGUgPSBwcm90b3R5cGU7CiAgICAgd2hpbGUg
KG5leHRQcm90b3R5cGUgJiYgbmV4dFByb3RvdHlwZS5pc09iamVjdCgpKSB7CiAgICAgICAgIGlm
IChuZXh0UHJvdG90eXBlID09IHRoaXMpCi0gICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBzaG91bGRUaHJvd0lmQ2FudFNldCwgImN5Y2xpYyBfX3Byb3RvX18gdmFsdWUi
X3MpOworICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBz
aG91bGRUaHJvd0lmQ2FudFNldCwgImN5Y2xpYyBfX3Byb3RvX18gdmFsdWUiX3MpOwogICAgICAg
ICAvLyBGSVhNRTogVGhlIHNwZWNpZmljYXRpb24gY3VycmVudGx5IHNheXMgd2Ugc2hvdWxkIGNo
ZWNrIGlmIHRoZSBbW0dldFByb3RvdHlwZU9mXV0gaW50ZXJuYWwgbWV0aG9kIG9mIG5leHRQcm90
b3R5cGUKICAgICAgICAgLy8gaXMgbm90IHRoZSBvcmRpbmFyeSBvYmplY3QgaW50ZXJuYWwgbWV0
aG9kLiBIb3dldmVyLCB3ZSBjdXJyZW50bHkgcmVzdHJpY3QgdGhpcyB0byBQcm94eSBvYmplY3Rz
IGFzIGl0IHdvdWxkIGFsbG93CiAgICAgICAgIC8vIGZvciBjeWNsZXMgd2l0aCBjZXJ0YWluIEhU
TUwgb2JqZWN0cyAoV2luZG93UHJveHksIExvY2F0aW9uKSBvdGhlcndpc2UuCkBAIC0xODQ4LDIy
ICsxODQ3LDIyIEBAIGJvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHByb3RvCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZShKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KQor
Ym9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZD
YW50U2V0KQogewotICAgIHJldHVybiBvYmplY3QtPnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNr
KGV4ZWMtPnZtKCksIGV4ZWMsIHByb3RvdHlwZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOworICAg
IHJldHVybiBvYmplY3QtPnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKGdsb2JhbE9iamVjdC0+
dm0oKSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHNob3VsZFRocm93SWZDYW50U2V0KTsKIH0K
IAotSlNWYWx1ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBlKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYykKK0pTVmFsdWUgSlNPYmplY3Q6OmdldFByb3RvdHlwZShKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBvYmplY3Qt
PmdldFByb3RvdHlwZURpcmVjdChleGVjLT52bSgpKTsKKyAgICByZXR1cm4gb2JqZWN0LT5nZXRQ
cm90b3R5cGVEaXJlY3QoZ2xvYmFsT2JqZWN0LT52bSgpKTsKIH0KIAotYm9vbCBKU09iamVjdDo6
c2V0UHJvdG90eXBlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHByb3RvdHlwZSwg
Ym9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCkKK2Jvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBi
b29sIHNob3VsZFRocm93SWZDYW50U2V0KQogewotICAgIHJldHVybiBtZXRob2RUYWJsZSh2bSkt
PnNldFByb3RvdHlwZSh0aGlzLCBleGVjLCBwcm90b3R5cGUsIHNob3VsZFRocm93SWZDYW50U2V0
KTsKKyAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5zZXRQcm90b3R5cGUodGhpcywgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIHNob3VsZFRocm93SWZDYW50U2V0KTsKIH0KIAotYm9vbCBKU09i
amVjdDo6cHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSBnZXR0ZXIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCitib29sIEpTT2JqZWN0Ojpw
dXRHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSBnZXR0ZXIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgUHJv
cGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgZGVzY3JpcHRvci5zZXRHZXR0ZXIoZ2V0
dGVyKTsKQEAgLTE4NzQsMTAgKzE4NzMsMTAgQEAgYm9vbCBKU09iamVjdDo6cHV0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSBnZXQKICAg
ICBpZiAoIShhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSkKICAgICAg
ICAgZGVzY3JpcHRvci5zZXRFbnVtZXJhYmxlKHRydWUpOwogCi0gICAgcmV0dXJuIGRlZmluZU93
blByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdHJ1ZSk7Cisg
ICAgcmV0dXJuIGRlZmluZU93blByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCB0cnVlKTsKIH0KIAotYm9vbCBKU09iamVjdDo6cHV0U2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSBzZXR0ZXIs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCitib29sIEpTT2JqZWN0OjpwdXRTZXR0ZXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSBz
ZXR0ZXIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRl
c2NyaXB0b3I7CiAgICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoc2V0dGVyKTsKQEAgLTE4ODgsMTcg
KzE4ODcsMTcgQEAgYm9vbCBKU09iamVjdDo6cHV0U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSBzZXQKICAgICBpZiAoIShhdHRyaWJ1dGVz
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSkKICAgICAgICAgZGVzY3JpcHRvci5zZXRF
bnVtZXJhYmxlKHRydWUpOwogCi0gICAgcmV0dXJuIGRlZmluZU93blByb3BlcnR5KHRoaXMsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdHJ1ZSk7CisgICAgcmV0dXJuIGRlZmluZU93
blByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0
cnVlKTsKIH0KIAotYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQorYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0QWNjZXNzb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgR2V0
dGVyU2V0dGVyKiBhY2Nlc3NvciwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQo
YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nvcik7CiAKICAgICBpZiAoT3B0
aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQotICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgudmFsdWUoKSwgYWNjZXNzb3IsIGF0
dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CisgICAgICAgIHJldHVybiBw
dXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIGFjY2Vzc29yLCBhdHRy
aWJ1dGVzLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpOwogCi0gICAgcmV0dXJuIHB1dERp
cmVjdE5vbkluZGV4QWNjZXNzb3IoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCBhY2Nlc3Nvciwg
YXR0cmlidXRlcyk7CisgICAgcmV0dXJuIHB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3IoZ2xvYmFs
T2JqZWN0LT52bSgpLCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzKTsKIH0KIAog
Ly8gRklYTUU6IEludHJvZHVjZSBhIEpTT2JqZWN0OjpwdXREaXJlY3RDdXN0b21WYWx1ZSgpIG1l
dGhvZCBpbnN0ZWFkIG9mIHVzaW5nCkBAIC0xOTUyLDM2ICsxOTUxLDM2IEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3JXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwCiAKIC8vIEhhc1Byb3BlcnR5KE8sIFApIGZyb20gU2VjdGlvbiA3LjMuMTAg
b2YgdGhlIHNwZWMuCiAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wL2luZGV4Lmh0bWwjc2VjLWhhc3Byb3BlcnR5Ci1ib29sIEpTT2JqZWN0OjpoYXNQcm9w
ZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Citi
b29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewotICAgIHJldHVybiBoYXNQcm9wZXJ0
eUdlbmVyaWMoZXhlYywgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6SGFzUHJvcGVydHkpOworICAgIHJldHVybiBoYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpI
YXNQcm9wZXJ0eSk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBKU09iamVjdDo6aGFzUHJv
cGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdAogewotICAgIHJldHVybiBoYXNQcm9wZXJ0eUdlbmVyaWMoZXhlYywgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOworICAg
IHJldHVybiBoYXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiB9CiAKLWJvb2wg
SlNPYmplY3Q6Omhhc1Byb3BlcnR5R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlIGludGVybmFs
TWV0aG9kVHlwZSkgY29uc3QKK2Jvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5R2VuZXJpYyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZSBpbnRlcm5hbE1ldGhvZFR5cGUpIGNvbnN0CiB7
CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcywgaW50ZXJuYWxNZXRob2RUeXBlKTsKLSAgICBy
ZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRo
aXMpLT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCi1ib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eUdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlIGlu
dGVybmFsTWV0aG9kVHlwZSkgY29uc3QKK2Jvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5R2VuZXJp
YyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlIGludGVybmFsTWV0aG9kVHlwZSkgY29uc3QK
IHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBpbnRlcm5hbE1ldGhvZFR5cGUpOwotICAg
IHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4o
dGhpcyktPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKIC8vIEVDTUEgOC42LjIuNQotYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiti
b29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAKICAgICBp
ZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQot
ICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgudmFsdWUoKSk7CisgICAgICAgIHJldHVy
biB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlz
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCkpOwogCiAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKIApAQCAtMTk5NCw3ICsxOTkzLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXIK
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzVmFsaWRPZmZzZXQodGhpc09iamVjdC0+c3RydWN0
dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKSB8fCBhdHRyaWJ1dGVz
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUpOwogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxs
U3RhdGljUHJvcGVydGllcyhleGVjKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxs
U3RhdGljUHJvcGVydGllcyhnbG9iYWxPYmplY3QpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0y
MDE4LDEzICsyMDE3LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVyCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKK2Jvb2wgSlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IHVuc2lnbmVkIGkpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPihjZWxsKTsKICAgICAKICAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOworICAgICAgICByZXR1cm4g
dGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBn
bG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKICAgICAKICAgICBzd2l0Y2gg
KHRoaXNPYmplY3QtPmluZGV4aW5nTW9kZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CkBAIC0yMDk1LDE4ICsyMDk0LDE4IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkK
IGVudW0gY2xhc3MgVHlwZUhpbnRNb2RlIHsgVGFrZXNIaW50LCBEb2VzTm90VGFrZUhpbnQgfTsK
IAogdGVtcGxhdGU8VHlwZUhpbnRNb2RlIG1vZGUgPSBUeXBlSGludE1vZGU6OkRvZXNOb3RUYWtl
SGludD4KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbFRvUHJpbWl0aXZlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpCitzdGF0aWMgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgaGludCkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmpl
Y3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgIC8vIEZJWE1F
OiBSZW1vdmUgdGhpcyB3aGVuIHdlIGhhdmUgZml4ZWQ6IHJkYXI6Ly9wcm9ibGVtLzMzNDUxODQw
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzEwOS4K
ICAgICBjb25zdGV4cHIgYm9vbCBkZWJ1Z051bGxTdHJ1Y3R1cmUgPSBtb2RlID09IFR5cGVIaW50
TW9kZTo6VGFrZXNIaW50OwotICAgIGJvb2wgaGFzUHJvcGVydHkgPSBjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4ob2JqZWN0KS0+Z2V0UHJvcGVydHlTbG90PGRlYnVnTnVsbFN0cnVjdHVyZT4oZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gY29uc3RfY2FzdDxK
U09iamVjdCo+KG9iamVjdCktPmdldFByb3BlcnR5U2xvdDxkZWJ1Z051bGxTdHJ1Y3R1cmU+KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IGhhc1By
b3BlcnR5ID8gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQo
KTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gaGFzUHJvcGVydHkgPyBzbG90LmdldFZhbHVlKGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmIChmdW5jdGlvbi5p
c1VuZGVmaW5lZE9yTnVsbCgpICYmIG1vZGUgPT0gVHlwZUhpbnRNb2RlOjpUYWtlc0hpbnQpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CkBAIC0yMTE0LDcgKzIxMTMsNyBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSlNPYgogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIGZ1
bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7
CiAgICAgICAgIGlmIChtb2RlID09IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50KQotICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJTeW1ib2wudG9QcmltaXRpdmUgaXMgbm90
IGEgZnVuY3Rpb24sIHVuZGVmaW5lZCwgb3IgbnVsbCJfcyk7CisgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiU3ltYm9sLnRvUHJpbWl0aXZlIGlzIG5vdCBh
IGZ1bmN0aW9uLCB1bmRlZmluZWQsIG9yIG51bGwiX3MpOwogICAgICAgICByZXR1cm4gc2NvcGUu
ZXhjZXB0aW9uKCk7CiAgICAgfQogCkBAIC0yMTM2LDE4ICsyMTM1LDE4IEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBKU09iCiAgICAgfQogICAgIEFTU0VSVCghY2FsbEFyZ3MuaGFzT3ZlcmZsb3dlZCgp
KTsKIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBjb25zdF9jYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSwgY2FsbEFyZ3MpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBjYWxsQXJncyk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VS
VCghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpOwogICAgIGlmIChyZXN1bHQuaXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIG1vZGUgPT0gVHlwZUhpbnRNb2RlOjpEb2VzTm90VGFrZUhpbnQgPyBK
U1ZhbHVlKCkgOiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgIlN5bWJvbC50b1ByaW1pdGl2
ZSByZXR1cm5lZCBhbiBvYmplY3QiX3MpOworICAgICAgICByZXR1cm4gbW9kZSA9PSBUeXBlSGlu
dE1vZGU6OkRvZXNOb3RUYWtlSGludCA/IEpTVmFsdWUoKSA6IHRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJTeW1ib2wudG9QcmltaXRpdmUgcmV0dXJuZWQgYW4gb2JqZWN0Il9z
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBFQ01BIDcuMS4xCi1KU1ZhbHVlIEpTT2Jq
ZWN0OjpvcmRpbmFyeVRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0
aXZlVHlwZSBoaW50KSBjb25zdAorSlNWYWx1ZSBKU09iamVjdDo6b3JkaW5hcnlUb1ByaW1pdGl2
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhp
bnQpIGNvbnN0CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2hhdGV2ZXIgZGVmYXVsdCB2YWx1ZSBtZXRob2Rz
IHRoZXJlIGFyZSBvbiBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4gYXJlCkBAIC0yMTU3LDIwICsy
MTU2LDIwIEBAIEpTVmFsdWUgSlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUoRXhlY1N0YXRl
KiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpCiAKICAgICBKU1ZhbHVlIHZhbHVlOwog
ICAgIGlmIChoaW50ID09IFByZWZlclN0cmluZykgewotICAgICAgICB2YWx1ZSA9IGNhbGxUb1By
aW1pdGl2ZUZ1bmN0aW9uKGV4ZWMsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBo
aW50KTsKKyAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihnbG9iYWxPYmpl
Y3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLCBoaW50KTsKICAgICAgICAgRVhD
RVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0g
dmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oZXhlYywgdGhp
cywgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZiwgaGludCk7CisgICAgICAgIHZhbHVlID0gY2Fs
bFRvUHJpbWl0aXZlRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZU9mLCBoaW50KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkgPT0gdmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBp
ZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbihleGVjLCB0aGlzLCB2bS5wcm9wZXJ0
eU5hbWVzLT52YWx1ZU9mLCBoaW50KTsKKyAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVG
dW5jdGlvbihnbG9iYWxPYmplY3QsIHRoaXMsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YsIGhp
bnQpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBzY29w
ZS5leGNlcHRpb24oKSA9PSB2YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIGlmICh2YWx1ZSkKICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVG
dW5jdGlvbihleGVjLCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgaGludCk7Cisg
ICAgICAgIHZhbHVlID0gY2FsbFRvUHJpbWl0aXZlRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCB0aGlz
LCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgaGludCk7CiAgICAgICAgIEVYQ0VQVElPTl9B
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IHNjb3BlLmV4Y2VwdGlvbigpID09IHZhbHVlLmFz
Q2VsbCgpKTsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwpA
QCAtMjE3OCwzNiArMjE3NywzNiBAQCBKU1ZhbHVlIEpTT2JqZWN0OjpvcmRpbmFyeVRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaQogCiAgICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgIk5vIGRlZmF1bHQgdmFsdWUiX3MpOworICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiTm8gZGVmYXVsdCB2YWx1ZSJfcyk7CiB9CiAKLUpTVmFs
dWUgSlNPYmplY3Q6OmRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgaGludCkKK0pTVmFsdWUgSlNPYmplY3Q6
OmRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpCiB7Ci0gICAgcmV0dXJuIG9i
amVjdC0+b3JkaW5hcnlUb1ByaW1pdGl2ZShleGVjLCBoaW50KTsKKyAgICByZXR1cm4gb2JqZWN0
LT5vcmRpbmFyeVRvUHJpbWl0aXZlKGdsb2JhbE9iamVjdCwgaGludCk7CiB9CiAKLUpTVmFsdWUg
SlNPYmplY3Q6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZl
VHlwZSBwcmVmZXJyZWRUeXBlKSBjb25zdAorSlNWYWx1ZSBKU09iamVjdDo6dG9QcmltaXRpdmUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBwcmVm
ZXJyZWRUeXBlKSBjb25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsVG9QcmltaXRpdmVGdW5jdGlvbjxU
eXBlSGludE1vZGU6OlRha2VzSGludD4oZXhlYywgdGhpcywgdm0ucHJvcGVydHlOYW1lcy0+dG9Q
cmltaXRpdmVTeW1ib2wsIHByZWZlcnJlZFR5cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxs
VG9QcmltaXRpdmVGdW5jdGlvbjxUeXBlSGludE1vZGU6OlRha2VzSGludD4oZ2xvYmFsT2JqZWN0
LCB0aGlzLCB2bS5wcm9wZXJ0eU5hbWVzLT50b1ByaW1pdGl2ZVN5bWJvbCwgcHJlZmVycmVkVHlw
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAodmFsdWUp
CiAgICAgICAgIHJldHVybiB2YWx1ZTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
dGhpcy0+bWV0aG9kVGFibGUodm0pLT5kZWZhdWx0VmFsdWUodGhpcywgZXhlYywgcHJlZmVycmVk
VHlwZSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGhpcy0+bWV0aG9kVGFibGUo
dm0pLT5kZWZhdWx0VmFsdWUodGhpcywgZ2xvYmFsT2JqZWN0LCBwcmVmZXJyZWRUeXBlKSk7CiB9
CiAKLWJvb2wgSlNPYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRv
dWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIEpTT2JqZWN0OjpnZXRQ
cmltaXRpdmVOdW1iZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgZG91YmxlJiBudW1i
ZXIsIEpTVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICByZXN1bHQgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVm
ZXJOdW1iZXIpOworICAgIHJlc3VsdCA9IHRvUHJpbWl0aXZlKGdsb2JhbE9iamVjdCwgUHJlZmVy
TnVtYmVyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgIG51bWJlciA9IHJlc3VsdC50b051bWJlcihleGVjKTsKKyAgICBu
dW1iZXIgPSByZXN1bHQudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gIXJlc3Vs
dC5pc1N0cmluZygpOwogfQogCkBAIC0yMjI3LDcxICsyMjI2LDcxIEBAIE9wdGlvbmFsPFN0cnVj
dHVyZTo6UHJvcGVydHlIYXNoRW50cnk+IEpTT2JqZWN0OjpmaW5kUHJvcGVydHlIYXNoRW50cnko
Vk0mIHZtLCBQCiAgICAgcmV0dXJuIHN0cnVjdHVyZSh2bSktPmZpbmRQcm9wZXJ0eUhhc2hFbnRy
eShwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTT2JqZWN0OjpoYXNJbnN0YW5jZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSkKK2Jvb2wg
SlNPYmplY3Q6Omhhc0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIWhhc0luc3RhbmNlVmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSAmJiBoYXNJbnN0YW5jZVZhbHVlICE9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkg
eworICAgIGlmICghaGFzSW5zdGFuY2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGhhc0lu
c3RhbmNlVmFsdWUgIT0gZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1i
b2xGdW5jdGlvbigpKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEodm0sIGhhc0luc3RhbmNlVmFsdWUsIGNh
bGxEYXRhKTsKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7Ci0gICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlSW52YWxpZEluc3RhbmNl
b2ZQYXJhbWV0ZXJFcnJvckhhc0luc3RhbmNlVmFsdWVOb3RGdW5jdGlvbihleGVjLCB0aGlzKSk7
CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVJ
bnZhbGlkSW5zdGFuY2VvZlBhcmFtZXRlckVycm9ySGFzSW5zdGFuY2VWYWx1ZU5vdEZ1bmN0aW9u
KGdsb2JhbE9iamVjdCwgdGhpcykpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICAgICAgYXJncy5h
cHBlbmQodmFsdWUpOwogICAgICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKLSAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGhhc0luc3RhbmNlVmFsdWUsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpcywgYXJncyk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2Fs
bChnbG9iYWxPYmplY3QsIGhhc0luc3RhbmNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhp
cywgYXJncyk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIHJldHVybiByZXN1
bHQudG9Cb29sZWFuKGdsb2JhbE9iamVjdCk7CiAgICAgfQogCiAgICAgVHlwZUluZm8gaW5mbyA9
IHN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCk7CiAgICAgaWYgKGluZm8uaW1wbGVtZW50c0RlZmF1
bHRIYXNJbnN0YW5jZSgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gZ2V0KGV4ZWMs
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
ID0gZ2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGRlZmF1bHRIYXNJbnN0YW5jZShleGVjLCB2YWx1ZSwgcHJvdG90eXBl
KSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGVmYXVsdEhhc0luc3RhbmNl
KGdsb2JhbE9iamVjdCwgdmFsdWUsIHByb3RvdHlwZSkpOwogICAgIH0KICAgICBpZiAoaW5mby5p
bXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkgewogICAgICAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2Fm
ZVRvUmVjdXJzZVNvZnQoKSkpIHsKLSAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9y
KGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0g
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgbWV0aG9kVGFibGUodm0pLT5jdXN0b21I
YXNJbnN0YW5jZSh0aGlzLCBleGVjLCB2YWx1ZSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIG1ldGhvZFRhYmxlKHZtKS0+Y3VzdG9tSGFzSW5zdGFuY2UodGhpcywgZ2xvYmFs
T2JqZWN0LCB2YWx1ZSkpOwogICAgIH0KIAotICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3Bl
LCBjcmVhdGVJbnZhbGlkSW5zdGFuY2VvZlBhcmFtZXRlckVycm9yTm90RnVuY3Rpb24oZXhlYywg
dGhpcykpOworICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUlu
dmFsaWRJbnN0YW5jZW9mUGFyYW1ldGVyRXJyb3JOb3RGdW5jdGlvbihnbG9iYWxPYmplY3QsIHRo
aXMpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNPYmplY3Q6Omhhc0luc3RhbmNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK2Jvb2wgSlNPYmplY3Q6Omhhc0luc3Rh
bmNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgaGFz
SW5zdGFuY2VWYWx1ZSA9IGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5oYXNJbnN0YW5jZVN5
bWJvbCk7CisgICAgSlNWYWx1ZSBoYXNJbnN0YW5jZVZhbHVlID0gZ2V0KGdsb2JhbE9iamVjdCwg
dm0ucHJvcGVydHlOYW1lcy0+aGFzSW5zdGFuY2VTeW1ib2wpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGFz
SW5zdGFuY2UoZXhlYywgdmFsdWUsIGhhc0luc3RhbmNlVmFsdWUpKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGhhc0luc3RhbmNlKGdsb2JhbE9iamVjdCwgdmFsdWUsIGhhc0luc3Rh
bmNlVmFsdWUpKTsKIH0KIAotYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBwcm90bykKK2Jvb2wgSlNPYmplY3Q6
OmRlZmF1bHRIYXNJbnN0YW5jZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBKU1ZhbHVlIHByb3RvKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFwcm90by5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiaW5zdGFuY2VvZiBjYWxsZWQgb24gYW4gb2JqZWN0IHdp
dGggYW4gaW52YWxpZCBwcm90b3R5cGUgcHJvcGVydHkuIl9zKTsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImluc3RhbmNlb2YgY2FsbGVkIG9uIGFuIG9iamVj
dCB3aXRoIGFuIGludmFsaWQgcHJvdG90eXBlIHByb3BlcnR5LiJfcyk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUp
OwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIEpTVmFsdWUgb2JqZWN0VmFsdWUgPSBvYmpl
Y3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7CisgICAgICAgIEpTVmFsdWUgb2JqZWN0VmFsdWUg
PSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIW9iamVjdFZhbHVlLmlz
T2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzAyLDIyICsyMzAxLDIy
IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG8pCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJpdmF0ZUZ1bmNJbnN0YW5j
ZU9mKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByaXZhdGVGdW5jSW5zdGFuY2VPZihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlIHZh
bHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBKU1ZhbHVlIHByb3Rv
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoY2FsbEZyYW1l
LCB2YWx1ZSwgcHJvdG8pKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
SlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShnbG9iYWxPYmplY3QsIHZhbHVlLCBwcm90bykp
KTsKIH0KIAotdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmpl
Y3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmpl
Y3QtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIzMjYsMTIgKzIzMjUsMTIgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUEK
ICAgICB3aGlsZSgxKSB7CiAgICAgICAgIGlmIChwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPnR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKSB7CiAgICAgICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
UHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
ICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMocHJv
dG90eXBlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KHByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgbmV4dFByb3RvID0g
cHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOworICAgICAgICBuZXh0UHJvdG8gPSBw
cm90b3R5cGUtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKG5leHRQcm90by5pc051
bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMzOSwxMiArMjMzOCwxMiBAQCB2b2lkIEpT
T2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQQogICAgIH0KIH0KIAotdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGlmICghbW9kZS5pbmNsdWRlSlNPYmplY3RQcm9wZXJ0aWVz
KCkpIHsKICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0byBnZXQgbm9uLWluZGV4ZWQgcHJvcGVy
dGllcyBmcm9tIGFueSBzdWJjbGFzc2VzIG9mIEpTT2JqZWN0IHRoYXQgaGF2ZSB0aGVtLgotICAg
ICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0yNDEzLDE0ICsyNDEyLDE0IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3ZvaWQgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgaWYgKCFvYmpl
Y3QtPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHZtKSkKLSAgICAgICAgZ2V0Q2xhc3NQcm9wZXJ0
eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKHZtKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgICAgIGdldENsYXNzUHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIG9iamVjdC0+Y2xh
c3NJbmZvKHZtKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiAKICAgICBpZiAoIW1vZGUuaW5jbHVk
ZUpTT2JqZWN0UHJvcGVydGllcygpKQogICAgICAgICByZXR1cm47CkBAIC0yNDI4LDI1ICsyNDI3
LDI1IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByCiAgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0p
LT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CiAKLWRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
ZG91YmxlIEpTT2JqZWN0Ojp0b051bWJlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBj
b25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7Cisg
ICAgSlNWYWx1ZSBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShnbG9iYWxPYmplY3QsIFByZWZlck51
bWJlcik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMC4wKTsgLy8gc2hvdWxkIGJl
IHBpY2tlZCB1cCBzb29uIGluIE5vZGVzLmNwcAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgcHJpbWl0aXZlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHByaW1pdGl2ZS50b051bWJlcihnbG9iYWxPYmplY3QpKTsKIH0KIAotSlNTdHJpbmcqIEpT
T2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1N0cmluZyogSlNPYmpl
Y3Q6OnRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgcHJp
bWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5nKTsKKyAgICBKU1ZhbHVlIHBy
aW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGdsb2JhbE9iamVjdCwgUHJlZmVyU3RyaW5nKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBqc0VtcHR5U3RyaW5nKHZtKSk7Ci0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBwcmltaXRpdmUudG9TdHJpbmcoZXhlYykpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgcHJpbWl0aXZlLnRvU3RyaW5nKGdsb2JhbE9iamVjdCkpOwog
fQogCi1KU1ZhbHVlIEpTT2JqZWN0Ojp0b1RoaXMoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqLCBF
Q01BTW9kZSkKK0pTVmFsdWUgSlNPYmplY3Q6OnRvVGhpcyhKU0NlbGwqIGNlbGwsIEpTR2xvYmFs
T2JqZWN0KiwgRUNNQU1vZGUpCiB7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU09iamVjdCo+KGNlbGwp
OwogfQpAQCAtMjQ2Nyw5ICsyNDY2LDkgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXplKFZNJiB2bSkK
ICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6ZnJlZXplVHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlKHZtKSkpOwogfQogCi1ib29sIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMpCitib29sIEpTT2JqZWN0OjpwcmV2ZW50RXh0
ZW5zaW9ucyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGlmICghb2JqZWN0LT5pc1N0cnVjdHVyZUV4dGVuc2libGUodm0pKSB7CiAgICAg
ICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2V0IHRoZSBpbnRlcm5hbCBbW1ByZXZlbnRFeHRlbnNpb25z
XV0gZmllbGQgdG8gZmFsc2UuCiAgICAgICAgIC8vIFdlIGRvbid0IGNhbGwgdGhlIG1ldGhvZFRh
YmxlIGlzRXh0ZW5zaWJsZSBoZXJlIGJlY2F1c2UgaXQncyBub3QgZGVmaW5lZApAQCAtMjQ4Miwy
MCArMjQ4MSwyMCBAQCBib29sIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNP
YmplY3Q6OmlzRXh0ZW5zaWJsZShKU09iamVjdCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMpCitib29s
IEpTT2JqZWN0Ojppc0V4dGVuc2libGUoSlNPYmplY3QqIG9iaiwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gb2JqLT5pc1N0cnVjdHVyZUV4dGVuc2libGUoZXhl
Yy0+dm0oKSk7CisgICAgcmV0dXJuIG9iai0+aXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKGdsb2JhbE9i
amVjdC0+dm0oKSk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmlzRXh0ZW5zaWJsZShFeGVjU3RhdGUq
IGV4ZWMpCitib29sIEpTT2JqZWN0Ojppc0V4dGVuc2libGUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKIHsgCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICByZXR1cm4gbWV0aG9k
VGFibGUodm0pLT5pc0V4dGVuc2libGUodGhpcywgZXhlYyk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIHJldHVybiBtZXRob2RUYWJsZSh2bSktPmlzRXh0ZW5zaWJsZSh0
aGlzLCBnbG9iYWxPYmplY3QpOwogfQogCi12b2lkIEpTT2JqZWN0OjpyZWlmeUFsbFN0YXRpY1By
b3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjKQordm9pZCBKU09iamVjdDo6cmVpZnlBbGxTdGF0aWNQ
cm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQVNTRVJU
KCFzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCh2bSkpOwogCiAgICAgLy8gSWYgdGhpcyBvYmplY3Qn
cyBDbGFzc0luZm8gaGFzIG5vIHN0YXRpYyBwcm9wZXJ0aWVzLCB0aGVuIG5vdGhpbmcgdG8gcmVp
ZnkhCkBAIC0yNTM3LDkgKzI1MzYsOSBAQCBORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6Zmls
bEdldHRlclByb3BlcnR5U2xvdChWTSYgdm0sIFByb3BlcnR5U2xvdCYgc2xvdCwgSgogICAgIHNs
b3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBhdHRyaWJ1dGVzLCBqc0Nhc3Q8R2V0dGVy
U2V0dGVyKj4oZ2V0dGVyU2V0dGVyKSwgb2Zmc2V0KTsKIH0KIAotc3RhdGljIGJvb2wgcHV0SW5k
ZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAs
IFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQorc3RhdGljIGJv
b2wgcHV0SW5kZXhlZERlc2NyaXB0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBjb25z
dCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xk
RGVzY3JpcHRvcikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3Io
KSkgewogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UHJvcGVydHlBdHRyaWJ1dGU6OkFj
Y2Vzc29yOwpAQCAtMjU2NCw3ICsyNTYzLDcgQEAgc3RhdGljIGJvb2wgcHV0SW5kZXhlZERlc2Ny
aXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAsIFNwYXIKICAg
ICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQogICAg
ICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKIAotICAgICAg
ICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2V0dGVyLCBzZXR0ZXIpOworICAgICAgICBHZXR0ZXJT
ZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
Z2V0dGVyLCBzZXR0ZXIpOwogICAgICAgICBlbnRyeUluTWFwLT5mb3JjZVNldCh2bSwgbWFwLCBh
Y2Nlc3NvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3Jp
cHRvcikgJiB+UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtMjU4Miw5ICsyNTgxLDkgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9v
bCBjYW5Eb0Zhc3RQdXREaXJlY3RJbmRleChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiB9CiAK
IC8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Ci1ib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRl
eGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU09i
amVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7CkBA
IC0yNTk4LDcgKzI1OTcsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgUAogICAgICAgICAvLyBz
dGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVl
IHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgogICAgICAgICBpZiAo
IWRlc2NyaXB0b3IuYXR0cmlidXRlcygpICYmIGRlc2NyaXB0b3IudmFsdWUoKSAmJiBjYW5Eb0Zh
c3RQdXREaXJlY3RJbmRleCh2bSwgdGhpcykpIHsKICAgICAgICAgICAgIEFTU0VSVCghZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUo
KSwgMCwgdGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGly
ZWN0SW5kZXhTaG91bGROb3RUaHJvdykpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBwdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCBkZXNjcmlwdG9yLnZh
bHVlKCksIDAsIHRocm93RXhjZXB0aW9uID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1
dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KHZtKTsKQEAgLTI2MjAsNyArMjYxOSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4
ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBQCiAgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIGlmICghaXNTdHJ1Y3R1cmVFeHRlbnNp
YmxlKHZtKSkgewogICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAg
ICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBO
b25FeHRlbnNpYmxlT2JqZWN0UHJvcGVydHlEZWZpbmVFcnJvcik7CisgICAgICAgICAgICByZXR1
cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBOb25FeHRl
bnNpYmxlT2JqZWN0UHJvcGVydHlEZWZpbmVFcnJvcik7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihE
ZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQpAQCAtMjYzNCw3
ICsyNjMzLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFAKICAgICAgICAgLy8gNC5jLiBSZXR1
cm4gdHJ1ZS4KIAogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHMoanNVbmRlZmlu
ZWQoKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwotICAgICAgICBwdXRJbmRl
eGVkRGVzY3JpcHRvcihleGVjLCBtYXAsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRz
KTsKKyAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBtYXAsIGVudHJ5
SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKICAgICAgICAgaWYgKGluZGV4ID49IGJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKQogICAgICAgICAgICAgYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CkBAIC0yNjQ1LDcgKzI2NDQsNyBAQCBib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpbmRleCwgY29uc3QgUAogICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVs
ZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBm
aWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxk
IGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAo
OS4xMikuCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7CiAgICAgZW50cnlJbk1hcC0+
Z2V0KGN1cnJlbnQpOwotICAgIGJvb2wgaXNFbXB0eU9yRXF1YWwgPSBkZXNjcmlwdG9yLmlzRW1w
dHkoKSB8fCBkZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywgY3VycmVudCk7CisgICAgYm9vbCBpc0Vt
cHR5T3JFcXVhbCA9IGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhn
bG9iYWxPYmplY3QsIGN1cnJlbnQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKICAgICBpZiAoaXNFbXB0eU9yRXF1YWwpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MjY1NCwxMCArMjY1MywxMCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgUAogICAgIGlmICghY3Vy
cmVudC5jb25maWd1cmFibGUoKSkgewogICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtb
Q29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgogICAgICAgICBpZiAoZGVzY3Jp
cHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkK
LSAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9u
LCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlQ29uZmlndXJhYmlsaXR5RXJyb3IpOworICAg
ICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0aHJvd0V4Y2Vw
dGlvbiwgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZUNvbmZpZ3VyYWJpbGl0eUVycm9yKTsK
ICAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBE
ZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBh
bmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KICAgICAgICAg
aWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUo
KSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlRXJy
b3IoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hh
bmdlRW51bWVyYWJpbGl0eUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJhYmxlUHJvcGVydHlD
aGFuZ2VFbnVtZXJhYmlsaXR5RXJyb3IpOwogICAgIH0KIAogICAgIC8vIDguIElmIElzR2VuZXJp
Y0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMg
cmVxdWlyZWQuCkBAIC0yNjY2LDcgKzI2NjUsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25J
bmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgUAog
ICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0Rh
dGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tD
b25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgogICAgICAgICAgICAgaWYg
KCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJy
b3IoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hh
bmdlQWNjZXNzTWVjaGFuaXNtRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJhYmxlUHJv
cGVydHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJvcik7CiAgICAgICAgICAgICAvLyA5LmIuIElm
IElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9w
ZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQogICAgICAgICAgICAgLy8gZGF0YSBwcm9w
ZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVl
cyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MKICAgICAgICAgICAgIC8vIFtbQ29uZmlndXJh
YmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0
aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvCkBAIC0yNjgwLDExICsyNjc5LDExIEBAIGJvb2wg
SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGluZGV4LCBjb25zdCBQCiAgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxl
KCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgewogICAgICAgICAgICAgICAgIC8vIDEwLmEuaS4g
UmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5k
IHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgogICAgICAgICAgICAgICAg
IGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
eXBlRXJyb3IoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBVbmNvbmZpZ3VyYWJsZVByb3Bl
cnR5Q2hhbmdlV3JpdGFiaWxpdHlFcnJvcik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJh
YmxlUHJvcGVydHlDaGFuZ2VXcml0YWJpbGl0eUVycm9yKTsKICAgICAgICAgICAgICAgICAvLyAx
MC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRo
ZW4KICAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVd
XSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwg
Y3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlw
dG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJl
bnQudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywg
c2NvcGUsIHRocm93RXhjZXB0aW9uLCBSZWFkb25seVByb3BlcnR5Q2hhbmdlRXJyb3IpOworICAg
ICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShnbG9iYWxP
YmplY3QsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0aHJvd0V4Y2Vw
dGlvbiwgUmVhZG9ubHlQcm9wZXJ0eUNoYW5nZUVycm9yKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJl
bnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgogICAgICAgICB9IGVsc2Ug
ewpAQCAtMjY5MywxNiArMjY5MiwxNiBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVk
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgUAogICAgICAg
ICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
MTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5k
IFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCiAgICAg
ICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iu
c2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHR5cGVFcnJvcihleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiJfcyk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdGhy
b3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiJfcyk7CiAgICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVj
dCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUo
RGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgogICAgICAgICAgICAgICAg
IGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9
IGN1cnJlbnQuZ2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3Io
ZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdl
dHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iX3MpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eS4iX3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8g
MTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0
IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1l
ZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCi0gICAgcHV0SW5kZXhl
ZERlc2NyaXB0b3IoZXhlYywgbWFwLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsK
KyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihnbG9iYWxPYmplY3QsIG1hcCwgZW50cnlJbk1hcCwg
ZGVzY3JpcHRvciwgY3VycmVudCk7CiAgICAgLy8gMTMuIFJldHVybiB0cnVlLgogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtMjcyMCw5ICsyNzE5LDkgQEAgdm9pZCBKU09iamVjdDo6ZGVhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKCkKICAgICAgICAgYXJyYXlTdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVh
cigpOwogfQogCi1ib29sIEpTT2JqZWN0OjphdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25I
b2xlRm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIGJvb2wmIHB1dFJlc3VsdCkK
K2Jvb2wgSlNPYmplY3Q6OmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90
b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVu
c2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIGJvb2wmIHB1dFJlc3Vs
dCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBmb3IgKEpTT2JqZWN0KiBjdXJyZW50ID0gdGhpczsgOykgewpAQCAtMjczNiw3ICsyNzM1LDcg
QEAgYm9vbCBKU09iamVjdDo6YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclBy
b3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIEoKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC0+ZmluZChpKTsKICAgICAg
ICAgICAgIGlmIChpdGVyICE9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5ub3RGb3VuZCgpICYmIChp
dGVyLT52YWx1ZS5hdHRyaWJ1dGVzKCkgJiAoUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwg
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSkpIHsKICAgICAgICAgICAgICAgICBzY29wZS5y
ZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgcHV0UmVzdWx0ID0gaXRlci0+dmFsdWUucHV0KGV4
ZWMsIHRoaXNWYWx1ZSwgc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCksIHZhbHVlLCBzaG91bGRU
aHJvdyk7CisgICAgICAgICAgICAgICAgcHV0UmVzdWx0ID0gaXRlci0+dmFsdWUucHV0KGdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSwgdmFsdWUsIHNo
b3VsZFRocm93KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMjc0NCwxMSArMjc0MywxMSBAQCBib29sIEpTT2JqZWN0OjphdHRlbXB0
VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlRm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywg
SgogICAgICAgICBpZiAoY3VycmVudC0+dHlwZSgpID09IFByb3h5T2JqZWN0VHlwZSkgewogICAg
ICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICAgICAgUHJveHlPYmplY3QqIHByb3h5
ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY3VycmVudCk7Ci0gICAgICAgICAgICBwdXRSZXN1bHQg
PSBwcm94eS0+cHV0QnlJbmRleENvbW1vbihleGVjLCB0aGlzVmFsdWUsIGksIHZhbHVlLCBzaG91
bGRUaHJvdyk7CisgICAgICAgICAgICBwdXRSZXN1bHQgPSBwcm94eS0+cHV0QnlJbmRleENvbW1v
bihnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVl
IHByb3RvdHlwZVZhbHVlID0gY3VycmVudC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKKyAgICAg
ICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IGN1cnJlbnQtPmdldFByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgICAgICBpZiAocHJvdG90eXBlVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yNzU3LDIzICsyNzU2LDIzIEBAIGJvb2wgSlNPYmplY3Q6OmF0dGVtcHRUb0lu
dGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKCiAg
ICAgfQogfQogCi1ib29sIEpTT2JqZWN0OjphdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25I
b2xlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91
bGRUaHJvdywgYm9vbCYgcHV0UmVzdWx0KQorYm9vbCBKU09iamVjdDo6YXR0ZW1wdFRvSW50ZXJj
ZXB0UHV0QnlJbmRleE9uSG9sZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBib29sJiBwdXRSZXN1bHQpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNW
YWx1ZSBwcm90b3R5cGVWYWx1ZSA9IGdldFByb3RvdHlwZSh2bSwgZXhlYyk7CisgICAgSlNWYWx1
ZSBwcm90b3R5cGVWYWx1ZSA9IGdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKHByb3RvdHlwZVZhbHVl
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBhc09iamVjdChwcm90b3R5cGVWYWx1ZSktPmF0dGVtcHRUb0ludGVyY2Vw
dFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93LCBwdXRSZXN1bHQpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFzT2Jq
ZWN0KHByb3RvdHlwZVZhbHVlKS0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZv
clByb3RvdHlwZShnbG9iYWxPYmplY3QsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgcHV0
UmVzdWx0KSk7CiB9CiAKIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlPgotYm9v
bCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVz
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK2Jvb2wgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlcyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWlzQ29weU9uV3JpdGUoaW5kZXhpbmdN
b2RlKCkpKTsKQEAgLTI3OTIsNyArMjc5MSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuCiAg
ICAgICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgICAgIGVuc3VyZUFycmF5
U3RvcmFnZVNsb3codm0pOwogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKHZtKTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBtYXAtPnB1dEVu
dHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBmYWxzZSk7CisgICAgICAgIGJvb2wgcmVzdWx0ID0g
bWFwLT5wdXRFbnRyeShnbG9iYWxPYmplY3QsIHRoaXMsIGksIHZhbHVlLCBmYWxzZSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgQVNTRVJUKGkg
Pj0gYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKTsKICAgICAgICAgYXJyYXlTdG9yYWdlKCktPnNl
dExlbmd0aChpICsgMSk7CkBAIC0yODAwLDcgKzI3OTksNyBAQCBib29sIEpTT2JqZWN0OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBleGVj
LCB1bgogICAgIH0KIAogICAgIGlmICghZW5zdXJlTGVuZ3RoKHZtLCBpICsgMSkpIHsKLSAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwpAQCAtMjgzMSwxMyAr
MjgzMCwxMyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBleGVjLCB1bgogfQogCiAvLyBFeHBsaWNpdCBpbnN0
YW50aWF0aW9ucyBuZWVkZWQgYnkgSlNBcnJheS5jcHAuCi10ZW1wbGF0ZSBib29sIEpTT2JqZWN0
OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8SW50MzJTaGFw
ZT4oRXhlY1N0YXRlKiwgdW5zaWduZWQsIEpTVmFsdWUpOwotdGVtcGxhdGUgYm9vbCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzPERvdWJsZVNo
YXBlPihFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNWYWx1ZSk7Ci10ZW1wbGF0ZSBib29sIEpTT2Jq
ZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8Q29udGln
dW91c1NoYXBlPihFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNWYWx1ZSk7Cit0ZW1wbGF0ZSBib29s
IEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8
SW50MzJTaGFwZT4oSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSk7Cit0ZW1wbGF0
ZSBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJp
YnV0ZXM8RG91YmxlU2hhcGU+KEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUpOwor
dGVtcGxhdGUgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhv
dXRBdHRyaWJ1dGVzPENvbnRpZ3VvdXNTaGFwZT4oSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwg
SlNWYWx1ZSk7CiAKLWJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1
ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQorYm9vbCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91
bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShpbmRl
eGluZ01vZGUoKSkpOwpAQCAtMjg2OCw3ICsyODY3LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1
bnMKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2Ug
YSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYg
YWRkIHRoZSB2YWx1ZS4KICAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcCh2bSk7
Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgbWFwLT5wdXRFbnRyeShleGVjLCB0
aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBtYXAtPnB1dEVudHJ5KGdsb2JhbE9iamVjdCwgdGhpcywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93KSk7CiAgICAgfQogCiAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4K
QEAgLTI4NzYsNyArMjg3NSw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zCiAgICAgaWYgKGkg
Pj0gbGVuZ3RoKSB7CiAgICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxl
bmd0aCBpcyBub3Qgd3JpdGFibGUuCiAgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHko
KSB8fCAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKHZtKSkKLSAgICAgICAgICAgIHJldHVybiB0eXBl
RXJyb3IoZXhlYywgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7CisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNo
b3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAgIGxlbmd0aCA9
IGkgKyAxOwogICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKICAgICB9CkBAIC0y
ODg1LDcgKzI4ODQsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVucwogICAgIC8vIFdlIHdpbGwg
Y29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVj
dG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCiAgICAgdW5z
aWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBt
YXAtPnNpemUoKTsKICAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5n
dGgodm0sIGxlbmd0aCkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgbWFwLT5w
dXRFbnRyeShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtYXAtPnB1dEVudHJ5KGdsb2JhbE9iamVjdCwgdGhpcywg
aSwgdmFsdWUsIHNob3VsZFRocm93KSk7CiAKICAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVy
IGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KICAgICBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CkBAIC0yOTA2LDkgKzI5MDUsOSBAQCBib29sIEpTT2Jq
ZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqIGV4ZWMsIHVucwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpTT2JqZWN0OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKCFpc0NvcHlPbldyaXRlKGluZGV4aW5nTW9kZSgpKSk7CkBAIC0y
OTIwLDE2ICsyOTE5LDE2IEBAIGJvb2wgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlCiAgICAgY2FzZSBBTExf
QkxBTktfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFy
c2Uodm0pKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAotICAgICAgICAgICAgICAgIGV4
ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3Qs
IGksIHZhbHVlLCBzaG91bGRUaHJvdywKICAgICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKSk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGluZGV4SXNTdWZmaWNpZW50bHlCZXlvbmRMZW5ndGhGb3JTcGFyc2VNYXAo
aSwgMCkgfHwgaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdl
KHZtLCAwLCAwKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShnbG9iYWxPYmplY3QsIGks
IHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCAwLCAwKSkpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChuZWVkc1Nsb3dQdXRJbmRleGluZyh2bSkpIHsKICAgICAgICAg
ICAgIC8vIENvbnZlcnQgdGhlIGluZGV4aW5nIHR5cGUgdG8gdGhlIFNsb3dQdXRBcnJheVN0b3Jh
Z2UgYW5kIHJldHJ5LgogICAgICAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKHZtLCBpICsgMSwg
Z2V0TmV3VmVjdG9yTGVuZ3RoKHZtLCAwLCAwLCAwLCBpICsgMSkpOwotICAgICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdykpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRC
eUluZGV4KHRoaXMsIGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIHNob3VsZFRocm93KSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGNyZWF0ZUluaXRpYWxGb3JWYWx1ZUFuZFNldCh2bSwg
aSwgdmFsdWUpOwpAQCAtMjk0MiwxMyArMjk0MSwxMyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhvdXRBdHRyaWJ1dGVzPEludDMyU2hhcGU+KGV4ZWMsIGksIHZhbHVlKSk7CisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhvdXRBdHRyaWJ1dGVzPEludDMyU2hhcGU+KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUpKTsK
ICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
b3V0QXR0cmlidXRlczxEb3VibGVTaGFwZT4oZXhlYywgaSwgdmFsdWUpKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91
dEF0dHJpYnV0ZXM8RG91YmxlU2hhcGU+KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUpKTsKICAgICAg
ICAgCiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91
dEF0dHJpYnV0ZXM8Q29udGlndW91c1NoYXBlPihleGVjLCBpLCB2YWx1ZSkpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
b3V0QXR0cmlidXRlczxDb250aWd1b3VzU2hhcGU+KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUpKTsK
ICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAg
IGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewpAQCAtMjk1Niw3ICsyOTU1LDcg
QEAgYm9vbCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogICAgICAgICBib29sIHB1
dFJlc3VsdCA9IGZhbHNlOwogICAgICAgICBpZiAoIShtYXAgJiYgbWFwLT5jb250YWlucyhpKSkp
IHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRl
eE9uSG9sZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIHB1dFJlc3VsdCk7CisgICAgICAg
ICAgICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoZ2xv
YmFsT2JqZWN0LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIHB1dFJlc3VsdCk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAocmVz
dWx0KQogICAgICAgICAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7CkBAIC0yOTY2LDcgKzI5NjUs
NyBAQCBib29sIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZQogCiAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSkpOwor
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIHNob3VsZFRocm93
LCBhcnJheVN0b3JhZ2UoKSkpOwogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk3NCw5ICsyOTczLDkgQEAgYm9vbCBKU09i
amVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGksIEpTVmFsdWUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1
dERpcmVjdEluZGV4TW9kZSBtb2RlLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCitib29sIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUsIEFycmF5U3RvcmFnZSog
c3RvcmFnZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgCiAgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91
dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgpAQCAtMzAxMCw3ICszMDA5LDcgQEAgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRv
LCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUg
YSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KICAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFy
c2VJbmRleE1hcCh2bSk7Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgbWFwLT5w
dXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpKTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtYXAtPnB1dERpcmVjdChnbG9iYWxPYmplY3Qs
IHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKSk7CiAgICAgfQogCiAgICAgLy8gVXBk
YXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KQEAgLTMwMTksOSArMzAxOCw5IEBAIGJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShF
eGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1
dERpcmVjdCkgewogICAgICAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYg
bGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KICAgICAgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVh
ZE9ubHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBt
b2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOwogICAgICAgICAgICAgaWYgKCFpc1N0cnVjdHVyZUV4dGVuc2libGUodm0pKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIG1vZGUgPT0gUHV0
RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgTm9uRXh0ZW5zaWJsZU9iamVjdFByb3BlcnR5RGVmaW5l
RXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCBOb25FeHRlbnNpYmxlT2Jq
ZWN0UHJvcGVydHlEZWZpbmVFcnJvcik7CiAgICAgICAgIH0KICAgICAgICAgbGVuZ3RoID0gaSAr
IDE7CiAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOwpAQCAtMzAzMSw3ICszMDMw
LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywKICAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0
byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBi
ZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgogICAgIHVuc2lnbmVkIG51bVZh
bHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7
CiAgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8IGF0dHJpYnV0ZXMgfHwgIWlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JM
ZW5ndGgodm0sIGxlbmd0aCkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgbWFw
LT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpKTsKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtYXAtPnB1dERpcmVjdChnbG9iYWxPYmpl
Y3QsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKSk7CiAKICAgICAvLyBSZXJlYWQg
bV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJ
blZlY3Rvci4KICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CkBAIC0zMDUyLDE1ICszMDUx
LDE1IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4U2xvd09yQmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eFNsb3dPckJleW9uZFZlY3Rvckxlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJ
bmRleE1vZGUgbW9kZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0
dGVyKCkpOwogCiAgICAgaWYgKCFjYW5Eb0Zhc3RQdXREaXJlY3RJbmRleCh2bSwgdGhpcykpIHsK
ICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIHJldHVybiBtZXRo
b2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRoaXMsIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20odm0sIGkpLCBkZXNjcmlwdG9yLCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cp
OworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlz
LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGkpLCBkZXNjcmlwdG9yLCBtb2Rl
ID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cpOwogICAgIH0KIAogICAgIC8vIGkgc2hvdWxk
IGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZl
Y3Rvci4KQEAgLTMwNzMsMTIgKzMwNzIsMTIgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5k
ZXhTbG93T3JCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZAogICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChpbmRleGluZ1No
b3VsZEJlU3BhcnNlKHZtKSB8fCBhdHRyaWJ1dGVzKSB7CiAgICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAotICAgICAgICAg
ICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLAorICAgICAgICAgICAgICAg
IGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsCiAgICAgICAgICAgICAg
ICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KHZtKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGluZGV4SXNTdWZmaWNpZW50bHlCZXlvbmRM
ZW5ndGhGb3JTcGFyc2VNYXAoaSwgMCkgfHwgaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7
CiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKAotICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVz
LCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2Uodm0sIDAsIDApKTsKKyAgICAgICAgICAgICAgICBn
bG9iYWxPYmplY3QsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3Jh
Z2Uodm0sIDAsIDApKTsKICAgICAgICAgfQogICAgICAgICBpZiAobmVlZHNTbG93UHV0SW5kZXhp
bmcodm0pKSB7CiAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJh
eVN0b3JhZ2Uodm0sIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgodm0sIDAsIDAsIDAsIGkgKyAx
KSk7CkBAIC0zMDk0LDUwICszMDkzLDUwIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
U2xvd09yQmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQKICAgICBj
YXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgY29udmVydFVuZGVj
aWRlZEZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgICAgIC8vIFJlbG9vcC4KLSAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKKyAg
ICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGF0dHJp
YnV0ZXMsIG1vZGUpOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKHZtKSk7
CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKHZtKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGF0
dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICBpZiAoIXZhbHVlLmlzSW50MzIoKSkgewogICAg
ICAgICAgICAgY29udmVydEludDMyRm9yVmFsdWUodm0sIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBwdXREaXJlY3RJbmRleFNsb3dPckJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1
ZSwgYXR0cmlidXRlcywgbW9kZSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhT
bG93T3JCZXlvbmRWZWN0b3JMZW5ndGgoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgYXR0cmlidXRl
cywgbW9kZSk7CiAgICAgICAgIH0KLSAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhvdXRBdHRyaWJ1dGVzPEludDMyU2hhcGU+KGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzPEludDMyU2hhcGU+
KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBB
U1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2Uodm0pKTsKICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMpCi0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKKyAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAg
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgY29udmVydERvdWJs
ZVRvQ29udGlndW91cyh2bSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhTbG93
T3JCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOwor
ICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4U2xvd09yQmV5b25kVmVjdG9yTGVuZ3Ro
KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOwogICAgICAgICB9CiAg
ICAgICAgIGRvdWJsZSB2YWx1ZUFzRG91YmxlID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAg
aWYgKHZhbHVlQXNEb3VibGUgIT0gdmFsdWVBc0RvdWJsZSkgewogICAgICAgICAgICAgY29udmVy
dERvdWJsZVRvQ29udGlndW91cyh2bSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5k
ZXhTbG93T3JCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1v
ZGUpOworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4U2xvd09yQmV5b25kVmVjdG9y
TGVuZ3RoKGdsb2JhbE9iamVjdCwgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOwogICAgICAg
ICB9Ci0gICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRl
czxEb3VibGVTaGFwZT4oZXhlYywgaSwgdmFsdWUpOworICAgICAgICBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8RG91YmxlU2hhcGU+KGdsb2JhbE9iamVjdCwg
aSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQVNTRVJUKCFpbmRl
eGluZ1Nob3VsZEJlU3BhcnNlKHZtKSk7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKQotICAgICAg
ICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7Ci0gICAgICAgIHB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxDb250aWd1b3VzU2hhcGU+
KGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZ2xvYmFsT2JqZWN0LCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKHZtKSk7CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRob3V0QXR0cmlidXRlczxDb250aWd1b3VzU2hhcGU+KGdsb2JhbE9iamVjdCwgaSwgdmFsdWUp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoYXR0cmlidXRlcykKLSAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0
c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwotICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZh
bHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGdsb2Jh
bE9iamVjdCwgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4
aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOworICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGdsb2JhbE9i
amVjdCwgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGFycmF5U3RvcmFnZSgpKTsKICAgICAg
ICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTM0NDYsMjUgKzM0NDUsMjUgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3Jl
T3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXplX3QKICAgICByZXR1
cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dQcm9wZXJ0eVN0b3JhZ2UoYnV0dGVyZmx5KCksIHZt
LCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAotc3RhdGljIEpT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIGdldEN1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
Rm9yR2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgQ3VzdG9tR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIsIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb246OlR5cGUgdHlwZSkKK3N0YXRpYyBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
KiBnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBDdXN0b21HZXR0
ZXJTZXR0ZXIqIGdldHRlclNldHRlciwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6VHlw
ZSB0eXBlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3BhaXIoZ2V0dGVyU2V0dGVy
LCAoaW50KXR5cGUpOwogICAgIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24qIGN1c3RvbUdl
dHRlclNldHRlckZ1bmN0aW9uID0gdm0uY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25NYXAuZ2V0
KGtleSk7CiAgICAgaWYgKCFjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbikgewotICAgICAgICBj
dXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbiA9IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246
OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnZXR0ZXJTZXR0ZXIsIHR5
cGUsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgICAgICBjdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbiA9IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnZXR0ZXJTZXR0ZXIsIHR5cGUsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkp
OwogICAgICAgICB2bS5jdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbk1hcC5zZXQoa2V5LCBjdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbik7CiAgICAgfQogICAgIHJldHVybiBjdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbjsKIH0KIAotYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNDOjpQcm9wZXJ0eVNsb3Qgc2xv
dCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkp
OwogCi0gICAgYm9vbCByZXN1bHQgPSBtZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xv
dCh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIGJvb2wgcmVzdWx0ID0gbWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
IHx8ICFyZXN1bHQpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zNTAyLDcgKzM1MDEsNyBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYQogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIEpTVmFsdWUgbWF5YmVHZXR0ZXJTZXR0ZXIgPSB0aGlzT2JqZWN0LT5n
ZXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBpZiAoIW1heWJlR2V0dGVy
U2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxTdGF0aWNQcm9w
ZXJ0aWVzKGV4ZWMpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5QWxsU3RhdGlj
UHJvcGVydGllcyhnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgICAgIG1heWJlR2V0dGVyU2V0
dGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAg
ICAgfQogCkBAIC0zNTE0LDExICszNTEzLDExIEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKGdldHRlclNldHRlci0+Z2V0
dGVyKCkpCi0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldEdldHRlcihnZXRDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNl
dHRlciwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6VHlwZTo6R2V0dGVyKSk7CisgICAg
ICAgICAgICBkZXNjcmlwdG9yLnNldEdldHRlcihnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bkZvckdldHRlclNldHRlcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVy
LCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpUeXBlOjpHZXR0ZXIpKTsKICAgICAgICAg
aWYgKGdldHRlclNldHRlci0+c2V0dGVyKCkpCi0gICAgICAgICAgICBkZXNjcmlwdG9yLnNldFNl
dHRlcihnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihleGVjLCBw
cm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjo6
VHlwZTo6U2V0dGVyKSk7CisgICAgICAgICAgICBkZXNjcmlwdG9yLnNldFNldHRlcihnZXRDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpUeXBl
OjpTZXR0ZXIpKTsKICAgICB9IGVsc2UgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5n
ZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xv
dC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKHZhbHVlLCBzbG90LmF0dHJpYnV0ZXMoKSk7CiAgICAgfQpAQCAtMzUyNiwxNSArMzUyNSwx
NSBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgYm9vbCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRhcmdldCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9s
ZERlc2NyaXB0b3IpCitzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0YXJnZXQsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgdW5zaWduZWQgYXR0cmlidXRl
cywgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlm
IChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSB8fCBkZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkgewogICAgICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9y
KCkgJiYgb2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CiAgICAgICAgICAg
ICBKU09iamVjdCogZ2V0dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgPyBvbGRE
ZXNjcmlwdG9yLmdldHRlck9iamVjdCgpIDogbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0
KiBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSA/IG9sZERlc2NyaXB0b3Iu
c2V0dGVyT2JqZWN0KCkgOiBudWxscHRyOwotICAgICAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nl
c3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGdldHRlciwgc2V0dGVyKTsKLSAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0QWNjZXNz
b3IoZXhlYywgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IFByb3BlcnR5QXR0
cmlidXRlOjpBY2Nlc3Nvcik7CisgICAgICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0g
R2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2V0dGVyLCBzZXR0ZXIpOwor
ICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3NvcihnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNz
b3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgSlNWYWx1
ZSBuZXdWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CkBAIC0zNTU1LDI1ICszNTU0LDI1IEBAIHN0YXRp
YyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGFyZ2V0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVyCiAgICAgSlNPYmplY3QqIHNldHRlciA9IGRlc2NyaXB0b3Iuc2V0
dGVyUHJlc2VudCgpCiAgICAgICAgID8gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKSA6IG9sZERl
c2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpCiAgICAgICAgID8gb2xkRGVzY3JpcHRvci5zZXR0ZXJP
YmplY3QoKSA6IG51bGxwdHI7Ci0gICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNl
dHRlcjo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdldHRlciwgc2V0
dGVyKTsKKyAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgZ2V0dGVyLCBzZXR0ZXIpOwogCi0gICAgdGFyZ2V0LT5wdXREaXJl
Y3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yKTsKKyAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vzc29y
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IFByb3Bl
cnR5QXR0cmlidXRlOjpBY2Nlc3Nvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdE1heUJlSW5kZXgoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0TWF5
QmVJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5k
ZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCi0gICAgICAgIHJldHVybiBwdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHB1dERpcmVjdChl
eGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHB1dERpcmVj
dEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwgdmFsdWUpOworICAgIHJldHVybiBw
dXREaXJlY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKIH0KIAog
Ly8gOS4xLjYuMyBvZiB0aGUgc3BlYwogLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwu
b3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy12YWxpZGF0ZWFuZGFwcGx5cHJvcGVydHlk
ZXNjcmlwdG9yCi1ib29sIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBi
b29sIGlzRXh0ZW5zaWJsZSwKK2Jvb2wgdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRv
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBib29sIGlzRXh0ZW5zaWJsZSwKICAgICBjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgaXNDdXJyZW50RGVmaW5lZCwgY29uc3QgUHJv
cGVydHlEZXNjcmlwdG9yJiBjdXJyZW50LCBib29sIHRocm93RXhjZXB0aW9uKQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIElmIHdlIGhh
dmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0IGl0IG9uIG5vcm1hbGx5CkBAIC0zNTgy
LDIwICszNTgxLDIwIEBAIGJvb2wgdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlCiAgICAgICAgIC8vIHVubGVz
cyBleHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQhCiAgICAgICAgIC8vIFN0ZXAgMi5hCiAgICAgICAg
IGlmICghaXNFeHRlbnNpYmxlKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBz
Y29wZSwgdGhyb3dFeGNlcHRpb24sIE5vbkV4dGVuc2libGVPYmplY3RQcm9wZXJ0eURlZmluZUVy
cm9yKTsKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
dGhyb3dFeGNlcHRpb24sIE5vbkV4dGVuc2libGVPYmplY3RQcm9wZXJ0eURlZmluZUVycm9yKTsK
ICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
Ly8gU3RlcCAyLmMvZAogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3Igb2xkRGVzY3JpcHRvcjsK
ICAgICAgICAgb2xkRGVzY3JpcHRvci5zZXRWYWx1ZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAg
Ly8gRklYTUU6IHNwZWMgc2F5cyB0byBhbHdheXMgcmV0dXJuIHRydWUgaGVyZS4KLSAgICAgICAg
cmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKKyAgICAgICAgcmV0
dXJuIHB1dERlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOwogICAgIH0K
ICAgICAvLyBTdGVwIDMuCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAvLyBTdGVwIDQuCi0gICAgYm9vbCBpc0VxdWFsID0gY3VycmVudC5l
cXVhbFRvKGV4ZWMsIGRlc2NyaXB0b3IpOworICAgIGJvb2wgaXNFcXVhbCA9IGN1cnJlbnQuZXF1
YWxUbyhnbG9iYWxPYmplY3QsIGRlc2NyaXB0b3IpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKICAgICBpZiAoaXNFcXVhbCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0zNjA0LDE4ICszNjAzLDE4IEBAIGJvb2wgdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3Jp
cHRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlCiAgICAgLy8gRmls
dGVyIG91dCBpbnZhbGlkIGNoYW5nZXMKICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkp
IHsKICAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1cmFi
bGVQcm9wZXJ0eUNoYW5nZUNvbmZpZ3VyYWJpbGl0eUVycm9yKTsKKyAgICAgICAgICAgIHJldHVy
biB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmln
dXJhYmxlUHJvcGVydHlDaGFuZ2VDb25maWd1cmFiaWxpdHlFcnJvcik7CiAgICAgICAgIGlmIChk
ZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkg
IT0gY3VycmVudC5lbnVtZXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZUVu
dW1lcmFiaWxpdHlFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdl
RW51bWVyYWJpbGl0eUVycm9yKTsKICAgICB9CiAgICAgCiAgICAgLy8gU3RlcCA2LgogICAgIC8v
IEEgZ2VuZXJpYyBkZXNjcmlwdG9yIGlzIHNpbXBseSBjaGFuZ2luZyB0aGUgYXR0cmlidXRlcyBv
ZiBhbiBleGlzdGluZyBwcm9wZXJ0eQogICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2Ny
aXB0b3IoKSkgewogICAgICAgICBpZiAoIWN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0
b3IpICYmIG9iamVjdCkgewotICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5n
Q3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGVzY3Jp
cHRvcihnbG9iYWxPYmplY3QsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzYyNCwxNCArMzYyMywx
NCBAQCBib29sIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9wZQogICAgIC8vIENoYW5naW5nIGJldHdlZW4gYSBu
b3JtYWwgcHJvcGVydHkgb3IgYW4gYWNjZXNzb3IgcHJvcGVydHkKICAgICBpZiAoZGVzY3JpcHRv
ci5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAg
ICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHR5
cGVFcnJvcihleGVjLCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJhYmxlUHJvcGVy
dHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJvcik7CisgICAgICAgICAgICByZXR1cm4gdHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBVbmNvbmZpZ3VyYWJsZVBy
b3BlcnR5Q2hhbmdlQWNjZXNzTWVjaGFuaXNtRXJyb3IpOwogCiAgICAgICAgIGlmICghb2JqZWN0
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGds
b2JhbE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAK
ICAgICAvLyBTdGVwIDguCkBAIC0zNjM5LDMxICszNjM4LDMxIEBAIGJvb2wgdmFsaWRhdGVBbmRB
cHBseVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qs
IFByb3BlCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CiAgICAgICAg
IGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewogICAgICAgICAgICAgaWYgKCFjdXJyZW50
LndyaXRhYmxlKCkgJiYgZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHRocm93RXhjZXB0aW9uLCBVbmNvbmZpZ3VyYWJs
ZVByb3BlcnR5Q2hhbmdlV3JpdGFiaWxpdHlFcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1
cmFibGVQcm9wZXJ0eUNoYW5nZVdyaXRhYmlsaXR5RXJyb3IpOwogICAgICAgICAgICAgaWYgKCFj
dXJyZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1
ZSgpICYmICFzYW1lVmFsdWUoZXhlYywgY3VycmVudC52YWx1ZSgpLCBkZXNjcmlwdG9yLnZhbHVl
KCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0
aHJvd0V4Y2VwdGlvbiwgUmVhZG9ubHlQcm9wZXJ0eUNoYW5nZUVycm9yKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZ2xvYmFsT2JqZWN0LCBj
dXJyZW50LnZhbHVlKCksIGRlc2NyaXB0b3IudmFsdWUoKSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFJl
YWRvbmx5UHJvcGVydHlDaGFuZ2VFcnJvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpICYmICFkZXNjcmlw
dG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKCFvYmpl
Y3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGds
b2JhbE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAK
ICAgICAvLyBTdGVwIDkuCiAgICAgLy8gQ2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBv
ZiBhbiBleGlzdGluZyBhY2Nlc3NvciBwcm9wZXJ0eQogICAgIEFTU0VSVChkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpOwogICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkg
ewotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgIShjdXJyZW50LnNl
dHRlclByZXNlbnQoKSAmJiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBjdXJyZW50LnNldHRl
cigpLCBkZXNjcmlwdG9yLnNldHRlcigpKSkpCi0gICAgICAgICAgICByZXR1cm4gdHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBz
ZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIl9zKTsKLSAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmICEoY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYg
SlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgY3VycmVudC5nZXR0ZXIoKSwgZGVzY3JpcHRvci5n
ZXR0ZXIoKSkpKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgdGhy
b3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiJfcyk7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclBy
ZXNlbnQoKSAmJiAhKGN1cnJlbnQuc2V0dGVyUHJlc2VudCgpICYmIEpTVmFsdWU6OnN0cmljdEVx
dWFsKGdsb2JhbE9iamVjdCwgY3VycmVudC5zZXR0ZXIoKSwgZGVzY3JpcHRvci5zZXR0ZXIoKSkp
KQorICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25m
aWd1cmFibGUgcHJvcGVydHkuIl9zKTsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJl
c2VudCgpICYmICEoY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgSlNWYWx1ZTo6c3RyaWN0RXF1
YWwoZ2xvYmFsT2JqZWN0LCBjdXJyZW50LmdldHRlcigpLCBkZXNjcmlwdG9yLmdldHRlcigpKSkp
CisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iX3MpOwogICAgICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzKCkg
JiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCi0gICAgICAgICAgICByZXR1cm4g
dHlwZUVycm9yKGV4ZWMsIHNjb3BlLCB0aHJvd0V4Y2VwdGlvbiwgVW5jb25maWd1cmFibGVQcm9w
ZXJ0eUNoYW5nZUFjY2Vzc01lY2hhbmlzbUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiB0eXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdGhyb3dFeGNlcHRpb24sIFVuY29uZmlndXJhYmxl
UHJvcGVydHlDaGFuZ2VBY2Nlc3NNZWNoYW5pc21FcnJvcik7CiAgICAgfQogCiAgICAgLy8gU3Rl
cCAxMC8xMS4KQEAgLTM2NzksOSArMzY3OCw5IEBAIGJvb2wgdmFsaWRhdGVBbmRBcHBseVByb3Bl
cnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlCiAg
ICAgaWYgKGFjY2Vzc29yLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpIHsKICAgICAgICAgYXV0byog
Y3VzdG9tR2V0dGVyU2V0dGVyID0ganNDYXN0PEN1c3RvbUdldHRlclNldHRlcio+KGFjY2Vzc29y
KTsKICAgICAgICAgaWYgKGN1c3RvbUdldHRlclNldHRlci0+c2V0dGVyKCkpCi0gICAgICAgICAg
ICBzZXR0ZXIgPSBnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihl
eGVjLCBwcm9wZXJ0eU5hbWUsIGN1c3RvbUdldHRlclNldHRlciwgSlNDdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbjo6VHlwZTo6U2V0dGVyKTsKKyAgICAgICAgICAgIHNldHRlciA9IGdldEN1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uRm9yR2V0dGVyU2V0dGVyKGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246
OlR5cGU6OlNldHRlcik7CiAgICAgICAgIGlmIChjdXN0b21HZXR0ZXJTZXR0ZXItPmdldHRlcigp
KQotICAgICAgICAgICAgZ2V0dGVyID0gZ2V0Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25Gb3JH
ZXR0ZXJTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIEpTQ3Vz
dG9tR2V0dGVyU2V0dGVyRnVuY3Rpb246OlR5cGU6OkdldHRlcik7CisgICAgICAgICAgICBnZXR0
ZXIgPSBnZXRDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbkZvckdldHRlclNldHRlcihnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uOjpUeXBlOjpHZXR0ZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VS
VChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKICAgICAgICAgYXV0byogZ2V0dGVyU2V0dGVy
ID0ganNDYXN0PEdldHRlclNldHRlcio+KGFjY2Vzc29yKTsKQEAgLTM3MDAsMTggKzM2OTksMTgg
QEAgYm9vbCB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGUKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1
YWwoZGVzY3JpcHRvcikgJiYgIWdldHRlclNldHRlckNoYW5nZWQpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBHZXR0ZXJTZXR0ZXI6OmNy
ZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnZXR0ZXIsIHNldHRlcik7Cisg
ICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBnZXR0ZXIsIHNldHRlcik7CiAKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG9i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgdW5zaWduZWQgYXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChjdXJyZW50KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nv
cik7CisgICAgb2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nvcik7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiti
b29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKLSAgICBWTSYgdm0g
ID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gVHJhY2sg
b24gdGhlIGdsb2JhbGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHkuCkBAIC0zNzIw
LDEzICszNzE5LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHko
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOCiAgICAgLy8gRG9udERlbGV0
ZSkgcHJvcGVydGllcyB0byBiZSBkZWxldGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxh
ZyB0byBtYWtlIHRoaXMgd29yay4KICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2Nv
cGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CiAgICAg
UHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgYm9vbCBpc0N1cnJlbnREZWZpbmVkID0g
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCk7Ci0g
ICAgYm9vbCBpc0V4dGVuc2libGUgPSB0aGlzLT5pc0V4dGVuc2libGUoZXhlYyk7CisgICAgYm9v
bCBpc0N1cnJlbnREZWZpbmVkID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBjdXJyZW50KTsKKyAgICBib29sIGlzRXh0ZW5zaWJsZSA9IHRoaXMt
PmlzRXh0ZW5zaWJsZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCB2YWxp
ZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwg
aXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZpbmVkLCBjdXJyZW50LCB0aHJv
d0V4Y2VwdGlvbikpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCB2YWxpZGF0
ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVjdCwgdGhpcywgcHJvcGVydHlO
YW1lLCBpc0V4dGVuc2libGUsIGRlc2NyaXB0b3IsIGlzQ3VycmVudERlZmluZWQsIGN1cnJlbnQs
IHRocm93RXhjZXB0aW9uKSk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhj
ZXB0aW9uKQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0
aW9uKQogewogICAgIC8vIElmIGl0J3MgYW4gYXJyYXkgaW5kZXgsIHRoZW4gdXNlIHRoZSBpbmRl
eGVkIHByb3BlcnR5IHN0b3JhZ2UuCiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9
IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewpAQCAtMzczNiwxMCArMzczNSwxMCBAQCBib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZQogICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltbVmFs
dWVdXSB0byBpbmRleCArIDEuCiAgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQgW1tE
ZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3Npbmcg
Imxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3
aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KICAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCi0gICAg
ICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleC52
YWx1ZSgpLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIHJldHVybiBvYmpl
Y3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCks
IGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIG9i
amVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIHRocm93RXhjZXB0aW9uKTsKKyAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25J
bmRleFByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJv
d0V4Y2VwdGlvbik7CiB9CiAKIHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRUb0RpY3Rpb25hcnkoVk0m
IHZtKQpAQCAtMzc3OCw5ICszNzc3LDkgQEAgdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlB
ZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgVk0KICAgICBz
ZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiB9CiAKLXVpbnQzMl90IEpTT2JqZWN0Ojpn
ZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3Vp
bnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aG9sZXNNdXN0
Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCBvYmplY3QpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM4
MzAsMjAgKzM4MjksMjAgQEAgdWludDMyX3QgSlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQogICAgIH0KIH0KIAotdm9pZCBKU09i
amVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKK3ZvaWQgSlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIG9iamVj
dC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0sIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCi12b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNPYmplY3Q6Omdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUobW9kZSwgSlNPYmplY3RQ
cm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUobW9kZSwgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICBKU1ZhbHVlIG5l
eHRQcm90byA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIG5l
eHRQcm90byA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgaWYgKG5leHRQcm90by5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzg1MiwxMiArMzg1MSwxMiBAQCB2b2lkIEpTT2Jq
ZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcgogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGlmIChwcm90b3R5cGUt
PnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKSB7
CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOworICAgICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdl
dFByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHByb3RvdHlwZS0+
bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAg
ICAgICAgbmV4dFByb3RvID0gcHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOworICAg
ICAgICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAg
aWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzg2NywyNSAr
Mzg2NiwyNSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcgogCiAvLyBJbXBsZW1lbnRzIEdldE1l
dGhvZChPLCBQKSBpbiBzZWN0aW9uIDcuMy45IG9mIHRoZSBzcGVjLgogLy8gaHR0cDovL3d3dy5l
Y21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1nZXRtZXRo
b2QKLUpTVmFsdWUgSlNPYmplY3Q6OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIENhbGxEYXRh
JiBjYWxsRGF0YSwgQ2FsbFR5cGUmIGNhbGxUeXBlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCitKU1ZhbHVlIEpTT2JqZWN0OjpnZXRNZXRob2Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbERhdGEmIGNhbGxEYXRhLCBDYWxsVHlw
ZSYgY2FsbFR5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBKU1ZhbHVlIG1ldGhvZCA9IGdldChleGVjLCBpZGVudCk7CisgICAgSlNWYWx1ZSBt
ZXRob2QgPSBnZXQoZ2xvYmFsT2JqZWN0LCBpZGVudCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKIAogICAgIGlmICghbWV0aG9kLmlzQ2VsbCgpKSB7CiAgICAg
ICAgIGlmIChtZXRob2QuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIGVy
cm9yTWVzc2FnZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQog
CiAgICAgY2FsbFR5cGUgPSBtZXRob2QuYXNDZWxsKCktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2Fs
bERhdGEobWV0aG9kLmFzQ2VsbCgpLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENh
bGxUeXBlOjpOb25lKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIGVy
cm9yTWVzc2FnZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAppbmRleCA1MzRiN2RiNTNm
NWY4Y2NjMDJhZDQ2ZDUwODA4NDk4OGVmYjRkODBlLi41OTVhZWMzYzdjMTJiNTU4MGY3OTg0MzEz
ZmYzMjNjNGI2ZjY2NGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgKQEAgLTcxLDcgKzcxLDcgQEAgY2xhc3MgVGhyb3dTY29wZTsKIHN0cnVjdCBIYXNoVGFibGU7
CiBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWU7CiAKLUpTX0VYUE9SVF9QUklWQVRFIEV4Y2VwdGlvbiog
dGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiwgVGhyb3dTY29wZSYsIGNvbnN0IFN0cmluZyYpOwor
SlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0aW9uKiB0aHJvd1R5cGVFcnJvcihKU0dsb2JhbE9iamVj
dCosIFRocm93U2NvcGUmLCBjb25zdCBTdHJpbmcmKTsKIGV4dGVybiBKU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBBU0NJSUxpdGVyYWwgTm9uRXh0ZW5zaWJsZU9iamVjdFByb3BlcnR5RGVmaW5lRXJy
b3I7CiBleHRlcm4gSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQVNDSUlMaXRlcmFsIFJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yOwogZXh0ZXJuIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IEFTQ0lJ
TGl0ZXJhbCBSZWFkb25seVByb3BlcnR5Q2hhbmdlRXJyb3I7CkBAIC0xMDcsNyArMTA3LDcgQEAg
Y2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIC8vIFRoaXMgaXMgYSBzdXBl
ciBkYW5nZXJvdXMgbWV0aG9kIGZvciBKSVRzLiBTb21ldGltZXMgdGhlIEpJVHMgd2lsbCB3YW50
IHRvIGNyZWF0ZSBlaXRoZXIgYQogICAgIC8vIEpTRmluYWxPYmplY3Qgb3IgYSBKU0FycmF5LiBU
aGlzIGlzIHRoZSBtZXRob2QgdGhhdCB3aWxsIGRvIHRoYXQuCi0gICAgc3RhdGljIEpTT2JqZWN0
KiBjcmVhdGVSYXdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
QnV0dGVyZmx5KiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBKU09iamVjdCogY3JlYXRlUmF3T2Jq
ZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogPSBudWxscHRyKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqLCBWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKQEAgLTEyMCwxMyArMTIwLDEzIEBAIGNsYXNzIEpT
T2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gYW4gb2JqZWN0IHdoZW4gdXNpbmcgU3lt
Ym9sLnRvU3RyaW5nVGFnIGZhaWxzLiBGb3IgdGhlIG1vc3QgcGFydCB0aGVyZSBpcyBubwogICAg
IC8vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCBjbGFzc05hbWUoKS4gVGhlIG1haW4gdXNl
IGNhc2UgaXMgZm9yIG5ldyBKUyBsYW5ndWFnZQogICAgIC8vIG9iamVjdHMgdG8gc2V0IHRoZSBk
ZWZhdWx0IHRhZyB0byAiT2JqZWN0Ii4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3Ry
aW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqKTsKIAogICAgIC8vIFRoaXMgaXMgdGhlIGZ1bGx5IHZpcnR1YWwgW1tH
ZXRQcm90b3R5cGVPZl1dIGludGVybmFsIGZ1bmN0aW9uIGRlZmluZWQKICAgICAvLyBpbiB0aGUg
RUNNQVNjcmlwdCA2IHNwZWNpZmljYXRpb24uIFVzZSB0aGlzIHdoZW4gZG9pbmcgYSBbW0dldFBy
b3RvdHlwZU9mXV0gCiAgICAgLy8gb3BlcmF0aW9uIGFzIGRpY3RhdGVkIGluIHRoZSBzcGVjaWZp
Y2F0aW9uLgotICAgIEpTVmFsdWUgZ2V0UHJvdG90eXBlKFZNJiwgRXhlY1N0YXRlKik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKik7CisgICAgSlNWYWx1ZSBnZXRQcm90b3R5cGUoVk0mLCBKU0dsb2JhbE9iamVj
dCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1ZhbHVlIGdldFByb3RvdHlwZShK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgLy8gVGhpcyBnZXRzIHRoZSBwcm90b3R5
cGUgZGlyZWN0bHkgb2ZmIG9mIHRoZSBzdHJ1Y3R1cmUuIFRoaXMgZG9lcyBub3QgZG8KICAgICAv
LyBkeW5hbWljIGRpc3BhdGNoIG9uIHRoZSBnZXRQcm90b3R5cGUgbWV0aG9kIHRhYmxlIG1ldGhv
ZC4gSXQgaXMgbm90IHZhbGlkIAogICAgIC8vIHRvIHVzZSB0aGlzIHdoZW4gcGVyZm9ybWluZyBh
IFtbR2V0UHJvdG90eXBlT2ZdXSBvcGVyYXRpb24gaW4gdGhlIHNwZWNpZmljYXRpb24uCkBAIC0x
NDYsMzQgKzE0NiwzNCBAQCBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogcHJpdmF0
ZToKICAgICAvLyBUaGlzIGlzIE9yZGluYXJ5U2V0UHJvdG90eXBlT2YgaW4gdGhlIHNwZWNpZmlj
YXRpb24uIFNlY3Rpb24gOS4xLjIuMQogICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTI2Mi8jc2VjLW9yZGluYXJ5c2V0cHJvdG90eXBlb2YKLSAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIHNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKFZNJiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSBw
cm90b3R5cGUsIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgc2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKIHB1YmxpYzoK
ICAgICAvLyBUaGlzIGlzIHRoZSBmdWxseSB2aXJ0dWFsIFtbU2V0UHJvdG90eXBlT2ZdXSBpbnRl
cm5hbCBmdW5jdGlvbiBkZWZpbmVkCiAgICAgLy8gaW4gdGhlIEVDTUFTY3JpcHQgNiBzcGVjaWZp
Y2F0aW9uLiBVc2UgdGhpcyB3aGVuIGRvaW5nIGEgW1tTZXRQcm90b3R5cGVPZl1dIAogICAgIC8v
IG9wZXJhdGlvbiBhcyBkaWN0YXRlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbi4KLSAgICBib29sIHNl
dFByb3RvdHlwZShWTSYsIEV4ZWNTdGF0ZSosIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3Vs
ZFRocm93SWZDYW50U2V0ID0gZmFsc2UpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIHNldFByb3RvdHlwZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUgcHJvdG90eXBl
LCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKKyAgICBib29sIHNldFByb3RvdHlwZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxkVGhyb3dJZkNh
bnRTZXQgPSBmYWxzZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc2V0UHJv
dG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9v
bCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgICAgIAogICAgIGlubGluZSBib29sIG1heUlu
dGVyY2VwdEluZGV4ZWRBY2Nlc3NlcyhWTSYpOwogCi0gICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZTxib29sIGNoZWNr
TnVsbFN0cnVjdHVyZSA9IGZhbHNlPgotICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgYm9vbCBnZXRQcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4gdHlwZW5hbWUgc3Rk
OjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+
Ojp0eXBlIGdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIENhbGxiYWNr
V2hlbk5vRXhjZXB0aW9uKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1do
ZW5Ob0V4Y2VwdGlvbj4gdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNl
cHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIGdldFByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9u
KSBjb25zdDsKKyAgICBib29sIGdldFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uPiB0eXBlbmFtZSBzdGQ6OnJl
c3VsdF9vZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5
cGUgZ2V0UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBDYWxsYmFj
a1doZW5Ob0V4Y2VwdGlvbikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tX
aGVuTm9FeGNlcHRpb24+IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhj
ZXB0aW9uKGJvb2wsIFByb3BlcnR5U2xvdCYpPjo6dHlwZSBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYsIENhbGxiYWNrV2hlbk5vRXhj
ZXB0aW9uKSBjb25zdDsKIAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09i
amVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
Ci0gICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJbmxpbmUoRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2VjdXJp
dHlDaGVjayhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHV0UHJvcGVydHlT
bG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CisgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJbmxpbmUoSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGRvUHV0UHJvcGVydHlT
ZWN1cml0eUNoZWNrKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1
dFByb3BlcnR5U2xvdCYpOwogCiAgICAgLy8gVGhlIGtleSBkaWZmZXJlbmNlIGJldHdlZW4gdGhp
cyBhbmQgZ2V0T3duUHJvcGVydHlTbG90IGlzIHRoYXQgZ2V0T3duUHJvcGVydHlTbG90CiAgICAg
Ly8gY3VycmVudGx5IHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHRoZSBET00gd2luZG93
ICh3aXRoIG5vbi1vd24gcHJvcGVydGllcykKICAgICAvLyBiZWluZyByZXR1cm5lZC4gT25jZSB0
aGlzIGlzIGZpeGVkIHdlIHNob3VsZCBtaWdyYXRlIGNvZGUgJiByZW1vdmUgdGhpcyBtZXRob2Qu
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICB1bnNpZ25lZCBnZXRB
cnJheUxlbmd0aCgpIGNvbnN0CiAgICAgewpAQCAtMTg5LDIxICsxODksMjEgQEAgY2xhc3MgSlNP
YmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGJvb2wgcHV0SW5saW5lRm9ySlNP
YmplY3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRJbmxpbmVGb3JKU09iamVjdChKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAvLyBw
dXRCeUluZGV4IGFzc3VtZXMgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgdGhpcyBKU0NlbGwgb2JqZWN0
LgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2Vs
bCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKICAgICAgICAgCiAgICAgLy8gVGhpcyBwZXJmb3JtcyB0aGUgRUNNQVNj
cmlwdCBTZXQoKSBvcGVyYXRpb24uCi0gICAgQUxXQVlTX0lOTElORSBib29sIHB1dEJ5SW5kZXhJ
bmxpbmUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpCisgICAgQUxXQVlTX0lOTElORSBib29sIHB1dEJ5SW5kZXhJ
bmxpbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogICAgIHsKLSAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAg
ICAgICAgaWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUsIHZhbHVlKSkgewogICAg
ICAgICAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtZXRob2RUYWJs
ZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxk
VGhyb3cpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXMs
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAgIH0K
ICAgICAgICAgCiAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhv
ZHM6CkBAIC0yMTIsNyArMjEyLDcgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsK
ICAgICAvLyAgLSBpdCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFuZCByZWFkLW9ubHkgcHJv
cGVydGllcyBpZiBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMgcGFzc2VkIGFzIHRoZSBt
b2RlICh0aGUgZGVmYXVsdCkuCiAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5
IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFs
bCBzZXQgdG8gdHJ1ZSBpZiBhdHRyaWJ1dGVzIGlzIHplcm8sCiAgICAgLy8gb3RoZXJ3aXNlLCBp
dCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCB0aGUgcHJvdmlkZWQgYXR0cmlidXRlcy4gU2VtYW50
aWNhbGx5LCB0aGlzIGlzIHBlcmZvcm1pbmcgZGVmaW5lT3duUHJvcGVydHkuCi0gICAgYm9vbCBw
dXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUp
CisgICAgYm9vbCBwdXREaXJlY3RJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCF2YWx1ZS5p
c0N1c3RvbUdldHRlclNldHRlcigpKTsKICAgICAgICAgYXV0byBjYW5TZXRJbmRleFF1aWNrbHlG
b3JQdXREaXJlY3QgPSBbJl0gKCkgLT4gYm9vbCB7CkBAIC0yMzQsMTUgKzIzNCwxNSBAQCBjbGFz
cyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICB9OwogICAgICAgICAKICAgICAg
ICAgaWYgKCFhdHRyaWJ1dGVzICYmIGNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCgpKSB7
Ci0gICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSk7CisgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhTbG93T3JCZXlvbmRWZWN0b3JMZW5ndGgo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CisgICAgICAgIHJl
dHVybiBwdXREaXJlY3RJbmRleFNsb3dPckJleW9uZFZlY3Rvckxlbmd0aChnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOwogICAgIH0KICAgICAvLyBU
aGlzIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHBlcmZvcm1pbmcgZGVmaW5lT3duUHJv
cGVydHkocHJvcGVydHlOYW1lLCB7Y29uZmlndXJhYmxlOnRydWUsIHdyaXRhYmxlOnRydWUsIGVu
dW1lcmFibGU6dHJ1ZSwgdmFsdWU6dmFsdWV9KS4KLSAgICBib29sIHB1dERpcmVjdEluZGV4KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorICAg
IGJvb2wgcHV0RGlyZWN0SW5kZXgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIFB1dERpcmVjdEluZGV4
TGlrZVB1dERpcmVjdCk7CisgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7
CiAgICAgfQogCiAgICAgLy8gQSBnZW5lcmFsbHkgbm9uLXRocm93aW5nIHZlcnNpb24gb2YgcHV0
RGlyZWN0IGFuZCBwdXREaXJlY3RJbmRleC4KQEAgLTI1MSw3ICsyNTEsNyBAQCBjbGFzcyBKU09i
amVjdCA6IHB1YmxpYyBKU0NlbGwgewogICAgIC8vIGl0IG1heSBjYWxsIGludG8gYXJiaXRyYXJ5
IEpTIGNvZGUuIEl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB1c2VyIG9mCiAgICAgLy8g
dGhpcyBBUEkgdG8gZW5zdXJlIHRoYXQgdGhlIHJlY2VpdmVyIG9iamVjdCBpcyBhIHdlbGwga25v
d24gdHlwZSBpZiB0aGV5CiAgICAgLy8gd2FudCB0byBlbnN1cmUgdGhhdCB0aGlzIHdvbid0IHRo
cm93IGFuIGV4Y2VwdGlvbi4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdE1h
eUJlSW5kZXgoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIHB1dERpcmVjdE1heUJlSW5kZXgoSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUpOwogICAgICAgICAKICAgICBib29sIGhhc0luZGV4aW5nSGVhZGVy
KFZNJiB2bSkgY29uc3QKICAgICB7CkBAIC0zNDgsMjEgKzM0OCwyMSBAQCBjbGFzcyBKU09iamVj
dCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KICAg
ICAgICAgCi0gICAgSlNWYWx1ZSBnZXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGkpCisgICAgSlNWYWx1ZSBnZXREaXJlY3RJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0g
dHJ5R2V0SW5kZXhRdWlja2x5KGkpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3QodGhpcywgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OkdldCk7Ci0gICAgICAgIGlmIChtZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCh0aGlzLCBleGVjLCBpLCBzbG90KSkKLSAgICAgICAgICAgIHJldHVy
biBzbG90LmdldFZhbHVlKGV4ZWMsIGkpOworICAgICAgICBpZiAobWV0aG9kVGFibGUoZ2V0Vk0o
Z2xvYmFsT2JqZWN0KSktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZ2xvYmFsT2Jq
ZWN0LCBpLCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGdsb2JhbE9i
amVjdCwgaSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQogICAgICAgICAKLSAg
ICBKU1ZhbHVlIGdldEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkgY29uc3QKKyAg
ICBKU1ZhbHVlIGdldEluZGV4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVk
IGkpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSB0cnlHZXRJbmRl
eFF1aWNrbHkoaSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICByZXR1cm4g
Z2V0KGV4ZWMsIGkpOworICAgICAgICByZXR1cm4gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CiAgICAg
fQogCiAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHlGb3JUeXBlZEFycmF5KHVuc2lnbmVkLCBK
U1ZhbHVlKSBjb25zdDsKQEAgLTYwMiw0NCArNjAyLDQ0IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgdm9pZCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwogICAgIGJvb2wg
cHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcihWTSYsIFByb3BlcnR5TmFtZSwgR2V0dGVyU2V0dGVy
KiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgdm9pZCBwdXREaXJlY3ROb25JbmRleEFjY2Vz
c29yV2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIEdldHRlclNldHRlciosIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIGJvb2wgcHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBHZXR0ZXJTZXR0ZXIqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAg
ICBib29sIHB1dERpcmVjdEFjY2Vzc29yKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBH
ZXR0ZXJTZXR0ZXIqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAotICAgIGJvb2wgcHV0R2V0dGVyKEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgYm9vbCBw
dXRTZXR0ZXIoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKTsKKyAgICBib29sIHB1dEdldHRlcihKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgYm9vbCBwdXRTZXR0ZXIoSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVy
dHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICBib29sIGhh
c1Byb3BlcnR5R2VuZXJpYyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlKSBjb25zdDsKLSAgICBib29sIGhhc1Byb3BlcnR5R2VuZXJpYyhF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlKSBjb25zdDsKLSAgICBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7Ci0gICAgYm9vbCBoYXNPd25Qcm9wZXJ0
eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIGJvb2wgaGFzT3duUHJvcGVy
dHkoRXhlY1N0YXRlKiwgdW5zaWduZWQpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGJvb2wgaGFzUHJvcGVydHlHZW5lcmljKEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZSkgY29uc3Q7CisgICAgYm9vbCBoYXNQcm9wZXJ0eUdlbmVyaWMoSlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
KSBjb25zdDsKKyAgICBib29sIGhhc093blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICBib29sIGhhc093blByb3BlcnR5KEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBib29sIGhhc093blByb3Bl
cnR5KEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpIGNvbnN0OwogCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUpOwotICAgIEpTVmFsdWUgb3JkaW5hcnlUb1ByaW1pdGl2ZShFeGVj
U3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOworICAgIEpTVmFsdWUgb3JkaW5hcnlU
b1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0
OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNJbnN0YW5jZShFeGVjU3RhdGUqLCBK
U1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIGhhc0luc3RhbmNlVmFsdWUpOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgc3RhdGlj
IGJvb2wgZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJv
dG90eXBlUHJvcGVydHkpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzSW5zdGFuY2Uo
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIGhhc0luc3RhbmNlVmFsdWUp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzSW5zdGFuY2UoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZhdWx0SGFzSW5zdGFuY2UoSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB1aW50MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdWludDMyX3QgZ2V0RW51
bWVyYWJsZUxlbmd0aChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4
ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0Owot
ICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBK
U1ZhbHVlJikgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4
ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU3RyaW5nKiB0b1N0cmlu
ZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRvUHJp
bWl0aXZlKEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVy
ZW5jZSkgY29uc3Q7CisgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoSlNHbG9iYWxPYmplY3Qq
LCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRF
IGRvdWJsZSB0b051bWJlcihKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTU3RyaW5nKiB0b1N0cmluZyhKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTVmFsdWUgdG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIEVDTUFNb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNWYWx1ZSB0b1Ro
aXMoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBFQ01BTW9kZSk7CiAKICAgICAvLyBUaGlzIGdl
dCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCiAgICAgSlNWYWx1ZSBn
ZXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdApAQCAtNzI2
LDcgKzcyNiw3IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8gIC0g
ZG9lcyBub3Qgd2FsayB0aGUgcHJvdG90eXBlIGNoYWluICh0byBjaGVjayBmb3IgYWNjZXNzb3Jz
IG9yIG5vbi13cml0YWJsZSBwcm9wZXJ0aWVzKS4KICAgICAvLyBUaGlzIGlzIHVzZWQgYnkgSlNM
ZXhpY2FsRW52aXJvbm1lbnQuCiAgICAgYm9vbCBwdXRPd25EYXRhUHJvcGVydHkoVk0mLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwotICAgIGJvb2wgcHV0T3duRGF0
YVByb3BlcnR5TWF5QmVJbmRleChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgcHV0T3duRGF0YVByb3BlcnR5TWF5QmVJbmRleChK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CiBwcml2YXRlOgogICAgIHZvaWQgdmFsaWRhdGVQdXRPd25EYXRhUHJvcGVydHkoVk0mLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUpOwogcHVibGljOgpAQCAtNzQ3LDcgKzc0Nyw3IEBAIGNsYXNzIEpT
T2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNGdW5jdGlv
biogcHV0RGlyZWN0QnVpbHRpbkZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQ
cm9wZXJ0eU5hbWUmLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsK
ICAgICBKU0Z1bmN0aW9uKiBwdXREaXJlY3RCdWlsdGluRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlv
bihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgUHJvcGVydHlOYW1lJiwgRnVuY3Rpb25FeGVj
dXRhYmxlKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICBib29sIGlzRW52aXJvbm1lbnQoKSBjb25z
dDsKICAgICBib29sIGlzR2xvYmFsT2JqZWN0KCkgY29uc3Q7CkBAIC03NjAsOCArNzYwLDggQEAg
Y2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2VhbChWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZXplKFZNJik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHJldmVudEV4dGVuc2lvbnMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBp
c0V4dGVuc2libGUoSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBwcmV2ZW50RXh0ZW5zaW9ucyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaXNFeHRlbnNpYmxlKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKICAgICBib29sIGlzU2VhbGVkKFZNJiB2bSkgeyByZXR1
cm4gc3RydWN0dXJlKHZtKS0+aXNTZWFsZWQodm0pOyB9CiAgICAgYm9vbCBpc0Zyb3plbihWTSYg
dm0pIHsgcmV0dXJuIHN0cnVjdHVyZSh2bSktPmlzRnJvemVuKHZtKTsgfQogCkBAIC03ODEsNyAr
NzgxLDcgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBZb3Ugc2hv
dWxkIGNhbGwgdGhpcyB3aGVuIHBlcmZvcm1pbmcgW1tJc0V4dGVuc2libGVdXSB0cmFwIGluIGEg
cGxhY2UKICAgICAvLyB0aGF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbi4gVGhp
cyBwZXJmb3JtcyB0aGUgZnVsbHkgdmlydHVhbAogICAgIC8vIFtbSXNFeHRlbnNpYmxlXV0gdHJh
cC4KLSAgICBib29sIGlzRXh0ZW5zaWJsZShFeGVjU3RhdGUqKTsKKyAgICBib29sIGlzRXh0ZW5z
aWJsZShKU0dsb2JhbE9iamVjdCopOwogICAgIGJvb2wgaW5kZXhpbmdTaG91bGRCZVNwYXJzZShW
TSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSh2bSkK
QEAgLTc4OSw3ICs3ODksNyBAQCBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogICAg
IH0KIAogICAgIGJvb2wgc3RhdGljUHJvcGVydGllc1JlaWZpZWQoVk0mIHZtKSB7IHJldHVybiBz
dHJ1Y3R1cmUodm0pLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpOyB9Ci0gICAgdm9pZCByZWlm
eUFsbFN0YXRpY1Byb3BlcnRpZXMoRXhlY1N0YXRlKik7CisgICAgdm9pZCByZWlmeUFsbFN0YXRp
Y1Byb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1
dHRlcmZseSogYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZShWTSYsIHNpemVfdCBvbGRTaXpl
LCBzaXplX3QgbmV3U2l6ZSk7CiAKQEAgLTgzMyw3ICs4MzMsNyBAQCBjbGFzcyBKU09iamVjdCA6
IHB1YmxpYyBKU0NlbGwgewogICAgIC8vIGlzIGVxdWl2YWxlbnQgdG86CiAgICAgLy8KICAgICAv
LyBmb28tPmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoLi4uKTsKLSAgICBib29s
IGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoRXhlY1N0YXRl
KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdywgYm9vbCYgcHV0UmVzdWx0KTsKKyAgICBib29sIGF0dGVtcHRUb0ludGVy
Y2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93LCBib29sJiBwdXRSZXN1bHQpOwogICAgICAgICAKICAgICAvLyBSZXR1cm5zIDAgaWYgaW50
MzIgc3RvcmFnZSBjYW5ub3QgYmUgY3JlYXRlZCAtIGVpdGhlciBiZWNhdXNlCiAgICAgLy8gaW5k
ZXhpbmcgc2hvdWxkIGJlIHNwYXJzZSwgd2UncmUgaGF2aW5nIGEgYmFkIHRpbWUsIG9yIGJlY2F1
c2UKQEAgLTg5OCw3ICs4OTgsNyBAQCBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewog
ICAgICAgICByZXR1cm4gJm1fYnV0dGVyZmx5OwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTVmFsdWUgZ2V0TWV0aG9kKEV4ZWNTdGF0ZSosIENhbGxEYXRhJiwgQ2FsbFR5cGUmLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgZ2V0TWV0aG9kKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbERhdGEm
LCBDYWxsVHlwZSYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSk7CiAKICAgICBib29sIGNhblBlcmZvcm1GYXN0UHV0SW5saW5lKFZNJiwgUHJvcGVydHlOYW1l
KTsKICAgICBib29sIGNhblBlcmZvcm1GYXN0UHV0SW5saW5lRXhjbHVkaW5nUHJvdG8oVk0mKTsK
QEAgLTk5NiwyMCArOTk2LDIwIEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgICAgIAogICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKFZNJik7CiAgICAgICAgIAotICAgIGJvb2wgZGVmaW5l
T3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworICAgIGJvb2wgZGVmaW5lT3du
Tm9uSW5kZXhQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICB0ZW1wbGF0ZTxJ
bmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZT4KLSAgICBib29sIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUpOwotICAgIGJvb2wgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKyAgICBib29sIHB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlcyhKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgYm9vbCBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7CiAKICAgICBi
b29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICB2
b2lkIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwotICAgIGJvb2wgZGVmaW5lT3duSW5kZXhl
ZFByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHRocm93RXhjZXB0aW9uKTsKKyAgICBib29sIGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0
eShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHRocm93RXhjZXB0aW9uKTsKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNw
YXJzZUluZGV4TWFwKFZNJik7CiAgICAgICAgIAogICAgIHZvaWQgbm90aWZ5UHJlc2VuY2VPZklu
ZGV4ZWRBY2Nlc3NvcnMoVk0mKTsKICAgICAgICAgCi0gICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNl
cHRQdXRCeUluZGV4T25Ib2xlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93LCBib29sJiBwdXRSZXN1bHQpOworICAgIGJvb2wgYXR0ZW1wdFRvSW50
ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBib29sJiBwdXRSZXN1bHQpOwogICAgICAgICAKICAg
ICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgc2V0SW5kZXhRdWlja2x5IHRvIHN1Y2NlZWQgYW5k
IHlvdSdyZSBzdXJlIHRoYXQKICAgICAvLyB0aGUgYXJyYXkgaXMgY29udGlndW91cy4KQEAgLTEw
NDYsNyArMTA0Niw3IEBAIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgdXNp
bmcgSlNDZWxsOjppc0FQSVZhbHVlV3JhcHBlcjsKICAgICB1c2luZyBKU0NlbGw6OmlzR2V0dGVy
U2V0dGVyOwogICAgIHZvaWQgZ2V0T2JqZWN0KCk7Ci0gICAgdm9pZCBnZXRTdHJpbmcoRXhlY1N0
YXRlKiBleGVjKTsKKyAgICB2b2lkIGdldFN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KTsKICAgICB2b2lkIGlzT2JqZWN0KCk7CiAgICAgdm9pZCBpc1N0cmluZygpOwogICAgICAg
ICAKQEAgLTEwNTcsMTggKzEwNTcsMTggQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0m
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYp
OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5lU2xv
dyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSBib29sIHB1dElubGluZVNsb3coSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwog
Ci0gICAgYm9vbCBnZXROb25JbmRleFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgZ2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgZ2V0
T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3Bl
cnR5U2xvdChWTSYsIFByb3BlcnR5U2xvdCYsIEpTQ2VsbCosIHVuc2lnbmVkLCBQcm9wZXJ0eU9m
ZnNldCk7CiAgICAgdm9pZCBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KFZNJiwgUHJvcGVy
dHlTbG90JiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgdW5zaWduZWQsIFN0cnVjdHVyZSopOwogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25TdGF0aWNQcm9wZXJ0eVNsb3QoVk0mLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKLSAgICBib29sIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSwg
QXJyYXlTdG9yYWdlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRl
eFNsb3dPckJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSk7Cisg
ICAgYm9vbCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBib29s
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlLCBBcnJheVN0b3JhZ2UqKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4U2xvd09yQmV5b25kVmVjdG9yTGVuZ3RoKEpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUpOwogICAgICAgICAKICAgICB1bnNpZ25lZCBnZXRO
ZXdWZWN0b3JMZW5ndGgoVk0mLCB1bnNpZ25lZCBpbmRleEJpYXMsIHVuc2lnbmVkIGN1cnJlbnRW
ZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpOwogICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aChWTSYsIHVuc2lnbmVkIGRlc2ly
ZWRMZW5ndGgpOwpAQCAtMTE1Myw4ICsxMTUzLDcgQEAgY2xhc3MgSlNGaW5hbE9iamVjdCBmaW5h
bCA6IHB1YmxpYyBKU09iamVjdCB7CiAgICAgICAgIHJldHVybiAobWF4U2l6ZSAtIGFsbG9jYXRp
b25TaXplKDApKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwogICAgIH0KIAotICAg
IHN0YXRpYyBKU0ZpbmFsT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgQnV0
dGVyZmx5KiA9IG51bGxwdHIpOwotICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0KiBjcmVhdGUoVk0m
LCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKiwgQnV0dGVyZmx5KiA9IG51bGxwdHIpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJ
bmZvKCksIGluZm8oKSwgZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwpAQCAt
MTE4NiwxMCArMTE4NSw4IEBAIGNsYXNzIEpTRmluYWxPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNP
YmplY3QgewogCiBKU19FWFBPUlRfUFJJVkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByaXZhdGVGdW5jSW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSop
OwogCi1pbmxpbmUgSlNPYmplY3QqIEpTT2JqZWN0OjpjcmVhdGVSYXdPYmplY3QoCi0gICAgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkp
CitpbmxpbmUgSlNPYmplY3QqIEpTT2JqZWN0OjpjcmVhdGVSYXdPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogZmluYWxPYmplY3QgPSBuZXcgKAogICAgICAgICBO
b3ROdWxsLCAKICAgICAgICAgYWxsb2NhdGVDZWxsPEpTRmluYWxPYmplY3Q+KApAQCAtMTIwMSwx
MCArMTE5OCw4IEBAIGlubGluZSBKU09iamVjdCogSlNPYmplY3Q6OmNyZWF0ZVJhd09iamVjdCgK
ICAgICByZXR1cm4gZmluYWxPYmplY3Q7CiB9CiAKLWlubGluZSBKU0ZpbmFsT2JqZWN0KiBKU0Zp
bmFsT2JqZWN0OjpjcmVhdGUoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCitpbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5h
bE9iamVjdDo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSog
YnV0dGVyZmx5KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNGaW5hbE9iamVj
dCogZmluYWxPYmplY3QgPSBuZXcgKAogICAgICAgICBOb3ROdWxsLCAKICAgICAgICAgYWxsb2Nh
dGVDZWxsPEpTRmluYWxPYmplY3Q+KApAQCAtMTIxNiwxMyArMTIxMSw2IEBAIGlubGluZSBKU0Zp
bmFsT2JqZWN0KiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoCiAgICAgcmV0dXJuIGZpbmFsT2JqZWN0
OwogfQogCi1pbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgSlNGaW5hbE9iamVjdCogZmluYWxPYmpl
Y3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0Pih2bS5oZWFwLCBh
bGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpKSkgSlNGaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlKTsKLSAgICBmaW5hbE9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOwot
ICAgIHJldHVybiBmaW5hbE9iamVjdDsKLX0KLQogaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkKIHsKICAgICByZXR1cm4gc2l6ZW9mKEpTT2JqZWN0KTsKQEAg
LTEzMzMsMTMgKzEzMjEsMTMgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldFByb3RvdHlw
ZURpcmVjdChWTSYgdm0pIGNvbnN0CiAgICAgcmV0dXJuIHN0cnVjdHVyZSh2bSktPnN0b3JlZFBy
b3RvdHlwZSh0aGlzKTsKIH0KIAotaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldFByb3RvdHlw
ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKK2lubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRQ
cm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIGF1
dG8gZ2V0UHJvdG90eXBlTWV0aG9kID0gbWV0aG9kVGFibGUodm0pLT5nZXRQcm90b3R5cGU7CiAg
ICAgTWV0aG9kVGFibGU6OkdldFByb3RvdHlwZUZ1bmN0aW9uUHRyIGRlZmF1bHRHZXRQcm90b3R5
cGUgPSBKU09iamVjdDo6Z2V0UHJvdG90eXBlOwogICAgIGlmIChMSUtFTFkoZ2V0UHJvdG90eXBl
TWV0aG9kID09IGRlZmF1bHRHZXRQcm90b3R5cGUpKQogICAgICAgICByZXR1cm4gZ2V0UHJvdG90
eXBlRGlyZWN0KHZtKTsKLSAgICByZXR1cm4gZ2V0UHJvdG90eXBlTWV0aG9kKHRoaXMsIGV4ZWMp
OworICAgIHJldHVybiBnZXRQcm90b3R5cGVNZXRob2QodGhpcywgZ2xvYmFsT2JqZWN0KTsKIH0K
IAogLy8gTm9ybWFsbHksIHdlIG5ldmVyIHNocmluayB0aGUgYnV0dGVyZmx5IHNvIGlmIHdlIGtu
b3cgYW4gb2Zmc2V0IGlzIHZhbGlkIGZvciBzb21lCkBAIC0xNDExLDI3ICsxMzk5LDI3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChW
TSYgdm0sIFByb3BlcnR5U2xvdCYKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1
bmN0aW9uIHRoaXMgbGFyZ2UsIGVzcGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLAogLy8gYnV0
IGl0IG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UgdG8gcHJvcGVydHkgbG9va3VwIHRoYXQgZGVyaXZl
ZCBjbGFzc2VzIGNhbiBpbmxpbmUgdGhlaXIKIC8vIGJhc2UgY2xhc3MgY2FsbCB0byB0aGlzLgot
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChv
YmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChPcHRpb25hbDx1aW50
MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCi0gICAgICAgIHJldHVybiBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgudmFsdWUoKSwgc2xv
dCk7CisgICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCBzbG90KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2so
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYp
CiB7CiB9CiAKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMg
bGFyZ2UgYnV0IGl0IG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UKIC8vIHNpbmNlIHRoaXMgaXMgZnVu
Y3Rpb24gdmVyeSBob3QgaW4gdmFyaWFibGUgbG9va3VwCiB0ZW1wbGF0ZTxib29sIGNoZWNrTnVs
bFN0cnVjdHVyZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBzdHJ1Y3R1cmVJRFRhYmxlID0gdm0u
aGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CiAg
ICAgd2hpbGUgKHRydWUpIHsKQEAgLTE0NDEsMTAgKzE0MjksMTAgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGUKICAgICAgICAgICAgIC8vIChsZXN0IHdlIHJldHVybiBhIHByb3BlcnR5IGZyb20g
YSBwcm90b3R5cGUgdGhhdCBpcyBzaGFkb3dlZCkuIENoZWNrIG5vdyBmb3IgYW4gaW5kZXgsCiAg
ICAgICAgICAgICAvLyBpZiBzbyB3ZSBuZWVkIHRvIHN0YXJ0IGFmcmVzaCBmcm9tIHRoaXMgb2Jq
ZWN0LgogICAgICAgICAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5k
ZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydHlTbG90
KGV4ZWMsIGluZGV4LnZhbHVlKCksIHNsb3QpOworICAgICAgICAgICAgICAgIHJldHVybiBnZXRQ
cm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCBzbG90KTsKICAgICAgICAg
ICAgIC8vIFNhZmUgdG8gY29udGludWUgc2VhcmNoaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbjsg
Y2FsbCBnZXROb25JbmRleFByb3BlcnR5U2xvdCB0byBhdm9pZAogICAgICAgICAgICAgLy8gcGFy
c2luZyB0aGUgaW50IGFnYWluLgotICAgICAgICAgICAgcmV0dXJuIG9iamVjdC0+Z2V0Tm9uSW5k
ZXhQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgICAgIHJl
dHVybiBvYmplY3QtPmdldE5vbkluZGV4UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQob2JqZWN0LT50eXBlKCkg
IT0gUHJveHlPYmplY3RUeXBlKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwpAQCAtMTQ2MywzMiArMTQ1
MSwzMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZQogICAgIH0KIAogICAgIGlmIChPcHRpb25h
bDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCi0gICAgICAgIHJl
dHVybiBnZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgudmFsdWUoKSwgc2xvdCk7CisgICAgICAg
IHJldHVybiBnZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBpbmRleC52YWx1ZSgpLCBzbG90
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXQo
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAoraW5saW5l
IEpTVmFsdWUgSlNPYmplY3Q6OmdldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcywgUHJvcGVy
dHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eSA9
IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CisgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGNvbnN0X2Nhc3Q8SlNPYmpl
Y3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBz
bG90KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhaGFzUHJv
cGVydHkpOwogICAgIGlmIChoYXNQcm9wZXJ0eSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1pbmxpbmUgSlNWYWx1
ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBj
b25zdAoraW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlz
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICBib29sIGhhc1By
b3BlcnR5ID0gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gY29uc3RfY2Fz
dDxKU09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8
ICFoYXNQcm9wZXJ0eSk7CiAgICAgaWYgKGhhc1Byb3BlcnR5KQotICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSkpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC0xNTk2
LDE0ICsxNTg0LDE0IEBAIEFMV0FZU19JTkxJTkUgSWRlbnRpZmllciBtYWtlSWRlbnRpZmllcihW
TSYsIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCiAgICAgcmV0dXJuIG5hbWU7CiB9CiAKLWJvb2wg
dmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBKU09iamVjdCos
IFByb3BlcnR5TmFtZSwgYm9vbCBpc0V4dGVuc2libGUsCitib29sIHZhbGlkYXRlQW5kQXBwbHlQ
cm9wZXJ0eURlc2NyaXB0b3IoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFByb3BlcnR5TmFt
ZSwgYm9vbCBpc0V4dGVuc2libGUsCiAgICAgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBib29sIGlzQ3VycmVudERlZmluZWQsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYg
Y3VycmVudCwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKLUpTX0VYUE9SVF9QUklWQVRFIE5FVkVS
X0lOTElORSBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqLCBKU09iamVjdCosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgSlNWYWx1ZSByZWNlaXZlciwgYm9vbCBzaG91bGRUaHJvdyk7CitK
U19FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJTkUgYm9vbCBvcmRpbmFyeVNldFNsb3coSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgSlNWYWx1ZSByZWNl
aXZlciwgYm9vbCBzaG91bGRUaHJvdyk7CiAKIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgbmF0aXZl
IGZ1bmN0aW9ucywgaWYgeW91J3JlIG5vdCB1c2luZyBhIHN0YXRpYyBoYXNoIHRhYmxlLgogLy8g
VXNlIHRoaXMgbWFjcm8gZnJvbSB3aXRoaW4gZmluaXNoQ3JlYXRpb24oKSBtZXRob2RzIGluIHBy
b3RvdHlwZXMuIFRoaXMgYXNzdW1lcwotLy8geW91J3ZlIGRlZmluZWQgdmFyaWFibGVzIGNhbGxl
ZCBleGVjLCBnbG9iYWxPYmplY3QsIGFuZCB2bSwgYW5kIHRoZXkKKy8vIHlvdSd2ZSBkZWZpbmVk
IHZhcmlhYmxlcyBjYWxsZWQgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGFuZCB2bSwgYW5k
IHRoZXkKIC8vIGhhdmUgdGhlIGV4cGVjdGVkIG1lYW5pbmdzLgogI2RlZmluZSBKU0NfTkFUSVZF
X0lOVFJJTlNJQ19GVU5DVElPTihqc05hbWUsIGNwcE5hbWUsIGF0dHJpYnV0ZXMsIGxlbmd0aCwg
aW50cmluc2ljKSBcCiAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24oXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAppbmRleCA3OWRkMzZlYWI1
N2M2NWJkNTQyZjBhNWJlYjVlYzlhYzY4NjY4OTJkLi4yOThhZTU5YzBlMGRiZDk1Y2M2OTExYmVk
Mjg4NDkzYWUwZDQzZWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdElubGluZXMuaApAQCAtMzUsMzAgKzM1LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAv
LyBTZWN0aW9uIDcuMy4xNyBvZiB0aGUgc3BlYy4KIHRlbXBsYXRlIDx0eXBlbmFtZSBBZGRGdW5j
dGlvbj4gLy8gQWRkIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGEgdHlwZSBsaWtlOiAoSlNWYWx1ZSwg
UnVudGltZVR5cGUpIC0+IGJvb2wKLXZvaWQgY3JlYXRlTGlzdEZyb21BcnJheUxpa2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGFycmF5TGlrZVZhbHVlLCBSdW50aW1lVHlwZU1hc2sgbGVnYWxU
eXBlc0ZpbHRlciwgY29uc3QgU3RyaW5nJiBub3RBbk9iamVjdEVycm9NZXNzYWdlLCBjb25zdCBT
dHJpbmcmIGlsbGVnYWxUeXBlRXJyb3JNZXNzYWdlLCBBZGRGdW5jdGlvbiBhZGRGdW5jdGlvbikK
K3ZvaWQgY3JlYXRlTGlzdEZyb21BcnJheUxpa2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBhcnJheUxpa2VWYWx1ZSwgUnVudGltZVR5cGVNYXNrIGxlZ2FsVHlwZXNGaWx0
ZXIsIGNvbnN0IFN0cmluZyYgbm90QW5PYmplY3RFcnJvTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBp
bGxlZ2FsVHlwZUVycm9yTWVzc2FnZSwgQWRkRnVuY3Rpb24gYWRkRnVuY3Rpb24pCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICghYXJy
YXlMaWtlVmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgbm90QW5PYmplY3RFcnJvTWVzc2FnZSk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIG5vdEFuT2JqZWN0RXJyb01lc3NhZ2UpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAogICAgIFZlY3RvcjxKU1ZhbHVlPiByZXN1bHQ7Ci0gICAgSlNWYWx1
ZSBsZW5ndGhQcm9wZXJ0eSA9IGFycmF5TGlrZVZhbHVlLmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpOworICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBhcnJheUxpa2VWYWx1
ZS5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgZG91YmxlIGxlbmd0aEFzRG91Ymxl
ID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoZXhlYyk7CisgICAgZG91YmxlIGxlbmd0aEFzRG91
YmxlID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aEFz
RG91YmxlID49IDAuMCAmJiBsZW5ndGhBc0RvdWJsZSA9PSBzdGQ6OnRydW5jKGxlbmd0aEFzRG91
YmxlKSk7CiAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0
aEFzRG91YmxlKTsKICAgICBmb3IgKHVpbnQ2NF90IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7
IGluZGV4KyspIHsKLSAgICAgICAgSlNWYWx1ZSBuZXh0ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGV4
ZWMsIGluZGV4KTsKKyAgICAgICAgSlNWYWx1ZSBuZXh0ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGds
b2JhbE9iamVjdCwgaW5kZXgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOwogICAgICAgICAKICAgICAgICAgUnVudGltZVR5cGUgdHlwZSA9IHJ1bnRpbWVUeXBl
Rm9yVmFsdWUodm0sIG5leHQpOwogICAgICAgICBpZiAoISh0eXBlICYgbGVnYWxUeXBlc0ZpbHRl
cikpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBpbGxlZ2FsVHlw
ZUVycm9yTWVzc2FnZSk7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBpbGxlZ2FsVHlwZUVycm9yTWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC05NiwzMiArOTYsMzIgQEAgQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjpjYW5QZXJmb3JtRmFzdFB1dElubGluZShWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXIKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24+Ci1B
TFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0
aW9uKGJvb2wsIFByb3BlcnR5U2xvdCYpPjo6dHlwZSBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgQ2FsbGJhY2tXaGVu
Tm9FeGNlcHRpb24gY2FsbGJhY2spIGNvbnN0CitBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6
cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2wsIFByb3BlcnR5U2xvdCYpPjo6
dHlwZSBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uIGNh
bGxiYWNrKSBjb25zdAogewogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVNsb3Qo
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90LCBjYWxsYmFjayk7CisgICAgcmV0dXJuIGdldFByb3Bl
cnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCwgY2FsbGJhY2spOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4KLUFMV0FZU19JTkxJ
TkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwg
UHJvcGVydHlTbG90Jik+Ojp0eXBlIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIENh
bGxiYWNrV2hlbk5vRXhjZXB0aW9uIGNhbGxiYWNrKSBjb25zdAorQUxXQVlTX0lOTElORSB0eXBl
bmFtZSBzdGQ6OnJlc3VsdF9vZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQcm9wZXJ0
eVNsb3QmKT46OnR5cGUgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uIGNhbGxiYWNrKSBjb25zdAogewotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYm9vbCBmb3VuZCA9IGNv
bnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CisgICAgYm9vbCBmb3VuZCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlz
KS0+Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgY2FsbGJhY2soZm91bmQsIHNsb3QpKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK0FMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6Z2V0UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byYgc3RydWN0dXJlSURUYWJsZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlz
OwogICAgIE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0UHJv
dG90eXBlID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+
c3RydWN0dXJlSUQoKSk7Ci0gICAgICAgIGJvb2wgaGFzU2xvdCA9IHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICBib29sIGhhc1Nsb3QgPSBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmIChoYXNTbG90KQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMjksNyArMTI5LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpT
T2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU4KICAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJs
ZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0
aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkp
KQogICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0p
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJv
dG90eXBlKHZtLCBleGVjKTsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2Jq
ZWN0KCkpCkBAIC0xMzgsMTIgKzEzOCwxMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TgogICAg
IH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleFByb3BlcnR5
U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK0FMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9uSW5kZXhQcm9w
ZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkg
c3VwcG9ydHMgbm9uLWluZGV4IFByb3BlcnR5TmFtZXMuCiAgICAgQVNTRVJUKCFwYXJzZUluZGV4
KHByb3BlcnR5TmFtZSkpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBhdXRvJiBzdHJ1Y3R1cmVJRFRhYmxlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CkBAIC0xNTQsNyArMTU0LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleFByb3BlcnR5U2xvdChF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmEKICAgICAgICAgICAgIGlmIChvYmplY3QtPmdldE93
bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBib29sIGhhc1Nsb3QgPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5n
ZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAg
ICAgICAgICAgYm9vbCBoYXNTbG90ID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgICAgICAgICAgaWYgKGhhc1Nsb3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0xNjMsNyArMTYzLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRl
eFByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmEKICAgICAgICAgaWYgKExJ
S0VMWShzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgPT0g
ZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQogICAgICAgICAgICAgcHJv
dG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qodm0pOwogICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
KyAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgICAgICB9CiAgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCkBAIC0xNzIsMTIg
KzE3MiwxMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4UHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYQogICAgIH0KIH0KIAotaW5saW5lIGJv
b2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdElubGluZShFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2lubGluZSBib29s
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RJbmxpbmUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2Jq
ZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoVHlwZUluZm86Om92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdChpbmxpbmVUeXBlRmxhZ3MoKSkpKQotICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzLCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOworICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpcywgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAogaW5saW5lIGJvb2wgSlNPYmplY3Q6Om1heUludGVyY2Vw
dEluZGV4ZWRBY2Nlc3NlcyhWTSYgdm0pCkBAIC0yMjMsOSArMjIzLDkgQEAgQUxXQVlTX0lOTElO
RSBQcm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cHJlcGFyZVRvUHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oVk0mIHYKIH0KIAogLy8gRUNNQSA4LjYuMi4yCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OnB1dElubGluZUZvckpTT2JqZWN0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZUZvckpTT2Jq
ZWN0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtMjMzLDQ0
ICsyMzMsNDQgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmVGb3JKU09i
amVjdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywKICAgICBBU1NFUlQoIUhlYXA6Omhl
YXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkp
OwogCiAgICAgaWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0
KSkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlTZXRTbG93KGV4
ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNs
b3QuaXNTdHJpY3RNb2RlKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBv
cmRpbmFyeVNldFNsb3coZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7CiAKICAgICAvLyBU
cnkgaW5kZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBz
aW5jZSBsb2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCiAgICAgLy8gdmFs
aWQgaW5kaWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3JhZ2Uu
CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwdXRCeUluZGV4KHRoaXNP
YmplY3QsIGV4ZWMsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSk7
CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleCh0aGlzT2JqZWN0
LCBnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgp
KSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+Y2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUodm0sIHBy
b3BlcnR5TmFtZSkpIHsKICAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5wcm90b3R5cGVDaGFp
bk1heUludGVyY2VwdFN0b3JlVG8odm0sIHByb3BlcnR5TmFtZSkpOwogICAgICAgICBpZiAoIXRo
aXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCAwLCBzbG90KSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2Nv
cGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAg
ICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0
cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRoaXNPYmplY3Qt
PnB1dElubGluZVNsb3coZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGhpc09iamVjdC0+cHV0SW5saW5lU2xvdyhnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKIH0KIAogLy8gSGFzT3duUHJvcGVy
dHkoTywgUCkgZnJvbSBzZWN0aW9uIDcuMy4xMSBpbiB0aGUgc3BlYy4KIC8vIGh0dHA6Ly93d3cu
ZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtaGFzb3du
cHJvcGVydHkKLUFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKHNsb3QuaW50ZXJuYWxN
ZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blBy
b3BlcnR5KTsKICAgICBpZiAoTElLRUxZKGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3QgPT0gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCkpCi0gICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGNv
bnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAg
ICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZSh2bSktPmdl
dE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CisgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlz
KSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1BTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK0FMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aGFz
T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwotICAgIHJldHVybiBo
YXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBoYXNP
d25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
Omhhc093blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwotICAgIHJldHVybiBj
b25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRo
aXMpLT5tZXRob2RUYWJsZShnZXRWTShnbG9iYWxPYmplY3QpKS0+Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKIH0KIAogdGVtcGxhdGU8SlNPYmplY3Q6OlB1dE1vZGUgbW9kZT4KQEAg
LTQ4OCwxMiArNDg4LDEyIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRPd25EYXRhUHJvcGVy
dHkoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhCiAgICAgcmV0dXJuIHB1
dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBz
bG90KTsKIH0KIAotaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eU1heUJl
SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0
T3duRGF0YVByb3BlcnR5TWF5QmVJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShn
bG9iYWxPYmplY3QpOwogICAgIHZhbGlkYXRlUHV0T3duRGF0YVByb3BlcnR5KHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlKTsKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJ
bmRleChwcm9wZXJ0eU5hbWUpKQotICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywg
aW5kZXgudmFsdWUoKSwgdmFsdWUsIDAsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7Cisg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCks
IHZhbHVlLCAwLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpOwogCiAgICAgcmV0dXJuIHB1
dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBz
bG90KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuY3BwCmlu
ZGV4IDM5OWM5MzYwNmJmY2I3NWY1ZjMyNmJhZjMyYWYyZWM3ODhmNDQ2YzYuLmIwMThjMzdjMmMx
NWJjZDlmNTNkMGI0MWY5ZGQ0MWUyYThmOTBiZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlLmNwcApAQCAtOTAsMTMgKzkwLDEyIEBAIGJvb2wgSlNQcm9taXNl
Ojppc0hhbmRsZWQoVk0mKSBjb25zdAogICAgIHJldHVybiBmbGFncyAmIGlzSGFuZGxlZEZsYWc7
CiB9CiAKLUpTUHJvbWlzZSogSlNQcm9taXNlOjpyZXNvbHZlKEpTR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCitKU1Byb21pc2UqIEpTUHJvbWlzZTo6cmVzb2x2ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGF1dG8q
IGV4ZWMgPSBnbG9iYWxPYmplY3QuZ2xvYmFsRXhlYygpOwotICAgIGF1dG8mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBhdXRvKiBwcm9taXNlUmVzb2x2ZUZ1
bmN0aW9uID0gZ2xvYmFsT2JqZWN0LnByb21pc2VSZXNvbHZlRnVuY3Rpb24oKTsKKyAgICBhdXRv
KiBwcm9taXNlUmVzb2x2ZUZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5wcm9taXNlUmVzb2x2ZUZ1
bmN0aW9uKCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgYXV0byBjYWxsVHlwZSA9IEpT
Qzo6Z2V0Q2FsbERhdGEodm0sIHByb21pc2VSZXNvbHZlRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAg
ICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwpAQCAtMTA0LDcgKzEwMyw3IEBA
IEpTUHJvbWlzZSogSlNQcm9taXNlOjpyZXNvbHZlKEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwog
ICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092
ZXJmbG93ZWQoKSk7Ci0gICAgYXV0byByZXN1bHQgPSBjYWxsKGV4ZWMsIHByb21pc2VSZXNvbHZl
RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LnByb21pc2VDb25zdHJ1
Y3RvcigpLCBhcmd1bWVudHMpOworICAgIGF1dG8gcmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3Qs
IHByb21pc2VSZXNvbHZlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0
LT5wcm9taXNlQ29uc3RydWN0b3IoKSwgYXJndW1lbnRzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzdWx0LmluaGVyaXRzPEpTUHJvbWlz
ZT4odm0pKTsKICAgICByZXR1cm4ganNDYXN0PEpTUHJvbWlzZSo+KHJlc3VsdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2UuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCmluZGV4IDBjZjE5NzQ5MGMxMmZmYjIz
M2ZlYTJkYmIyYmZkYzYxNTM4YjA2NjguLmE0OGMxM2NiOTM1Mzc3NWFmYzc5ZGFmZmE3YWZmYTJi
MDA2ZGRlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZS5oCkBA
IC01Nyw3ICs1Nyw3IEBAIGNsYXNzIEpTUHJvbWlzZSA6IHB1YmxpYyBKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPDI+IHsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHJlc3VsdChWTSYp
IGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIYW5kbGVkKFZNJikgY29uc3Q7
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNQcm9taXNlKiByZXNvbHZlKEpTR2xv
YmFsT2JqZWN0JiwgSlNWYWx1ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTUHJv
bWlzZSogcmVzb2x2ZShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAKaW5kZXggZDRj
YWQwYjBmNTllNWZlOWZmYThiMTcyOTkxODc3NGViZWYxMGRkZi4uYjVlNzE2MWQ2ZTM5MmZkMTBj
MzhmM2ZhM2UyMWI5ZTBmMDExNDMzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcApAQCAtMzksMzkgKzM5LDM5IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNQcm9taXNlRGVmZXJyZWQ6OnNfaW5mbyA9
IHsgIkpTUHJvbWlzZURlZmVycmVkIiwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Byb21pc2VEZWZlcnJlZCkgfTsKIAotSlNQcm9taXNlRGVmZXJyZWQ6
OkRlZmVycmVkRGF0YSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlRGVmZXJyZWREYXRhKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlQ29uc3Ry
dWN0b3IqIHByb21pc2VDb25zdHJ1Y3RvcikKK0pTUHJvbWlzZURlZmVycmVkOjpEZWZlcnJlZERh
dGEgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZURlZmVycmVkRGF0YShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1Byb21pc2VDb25zdHJ1Y3RvciogcHJvbWlzZUNvbnN0cnVjdG9yKQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
RnVuY3Rpb24qIG5ld1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPm5l
d1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24oKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZXhlYy0+dm0oKSwgbmV3UHJv
bWlzZUNhcGFiaWxpdHlGdW5jdGlvbiwgY2FsbERhdGEpOworICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gSlNDOjpnZXRDYWxsRGF0YShnbG9iYWxPYmplY3QtPnZtKCksIG5ld1Byb21pc2VDYXBhYmls
aXR5RnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6
Ok5vbmUpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3Vt
ZW50cy5hcHBlbmQocHJvbWlzZUNvbnN0cnVjdG9yKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5o
YXNPdmVyZmxvd2VkKCkpOwotICAgIEpTVmFsdWUgZGVmZXJyZWQgPSBjYWxsKGV4ZWMsIG5ld1By
b21pc2VDYXBhYmlsaXR5RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQo
KSwgYXJndW1lbnRzKTsKKyAgICBKU1ZhbHVlIGRlZmVycmVkID0gY2FsbChnbG9iYWxPYmplY3Qs
IG5ld1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRl
ZmluZWQoKSwgYXJndW1lbnRzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCiAgICAgRGVmZXJyZWREYXRhIHJlc3VsdDsKLSAgICByZXN1bHQucHJvbWlzZSA9IGpzQ2Fz
dDxKU1Byb21pc2UqPihkZWZlcnJlZC5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRp
bk5hbWVzKCkucHJvbWlzZVByaXZhdGVOYW1lKCkpKTsKKyAgICByZXN1bHQucHJvbWlzZSA9IGpz
Q2FzdDxKU1Byb21pc2UqPihkZWZlcnJlZC5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5wcm9taXNlUHJpdmF0ZU5hbWUoKSkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgcmVzdWx0LnJlc29sdmUgPSBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGRlZmVycmVkLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5yZXNvbHZlUHJpdmF0ZU5hbWUoKSkpOworICAgIHJlc3VsdC5yZXNvbHZlID0ganNDYXN0
PEpTRnVuY3Rpb24qPihkZWZlcnJlZC5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5yZXNvbHZlUHJpdmF0ZU5hbWUoKSkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgcmVzdWx0LnJlamVjdCA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oZGVmZXJyZWQuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LnJlamVjdFByaXZhdGVOYW1lKCkpKTsKKyAgICByZXN1bHQucmVqZWN0ID0ganNDYXN0PEpTRnVu
Y3Rpb24qPihkZWZlcnJlZC5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5yZWplY3RQcml2YXRlTmFtZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTUHJvbWlzZURlZmVy
cmVkKiBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK0pTUHJvbWlzZURlZmVycmVkKiBKU1Byb21pc2VEZWZl
cnJlZDo6dHJ5Q3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgRGVmZXJyZWREYXRh
IGRhdGEgPSBjcmVhdGVEZWZlcnJlZERhdGEoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPnByb21pc2VDb25zdHJ1Y3RvcigpKTsKKyAgICBEZWZlcnJlZERhdGEgZGF0YSA9IGNyZWF0
ZURlZmVycmVkRGF0YShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+cHJvbWlzZUNvbnN0cnVj
dG9yKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgcmV0dXJu
IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUodm0sIGRhdGEucHJvbWlzZSwgZGF0YS5yZXNvbHZl
LCBkYXRhLnJlamVjdCk7CiB9CkBAIC05MywzNiArOTMsMzYgQEAgSlNQcm9taXNlRGVmZXJyZWQ6
OkpTUHJvbWlzZURlZmVycmVkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCBjYWxsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGZ1bmN0aW9uLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGNhbGxGdW5jdGlv
bihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGZ1bmN0aW9uLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEoZXhlYy0+dm0oKSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGdsb2JhbE9iamVjdC0+dm0oKSwgZnVuY3Rpb24s
IGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwogCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
dmFsdWUpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CiAKLSAgICBj
YWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFy
Z3VtZW50cyk7CisgICAgY2FsbChnbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3VtZW50cyk7CiB9CiAKLXZvaWQgSlNQcm9taXNlRGVm
ZXJyZWQ6OnJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordm9pZCBKU1By
b21pc2VEZWZlcnJlZDo6cmVzb2x2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIGNhbGxGdW5jdGlvbihleGVjLCBtX3Jlc29sdmUuZ2V0KCksIHZh
bHVlKTsKLSAgICBib29sIHdhc1BlbmRpbmcgPSBleGVjLT52bSgpLnByb21pc2VEZWZlcnJlZFRp
bWVyLT5jYW5jZWxQZW5kaW5nUHJvbWlzZSh0aGlzKTsKKyAgICBjYWxsRnVuY3Rpb24oZ2xvYmFs
T2JqZWN0LCBtX3Jlc29sdmUuZ2V0KCksIHZhbHVlKTsKKyAgICBib29sIHdhc1BlbmRpbmcgPSBn
bG9iYWxPYmplY3QtPnZtKCkucHJvbWlzZURlZmVycmVkVGltZXItPmNhbmNlbFBlbmRpbmdQcm9t
aXNlKHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQod2FzUGVuZGluZywgd2FzUGVuZGluZyA9PSBt
X3Byb21pc2VJc0FzeW5jUGVuZGluZyk7CiB9CiAKLXZvaWQgSlNQcm9taXNlRGVmZXJyZWQ6OnJl
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcmVhc29uKQordm9pZCBKU1Byb21pc2VEZWZl
cnJlZDo6cmVqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcmVhc29u
KQogewotICAgIGNhbGxGdW5jdGlvbihleGVjLCBtX3JlamVjdC5nZXQoKSwgcmVhc29uKTsKLSAg
ICBib29sIHdhc1BlbmRpbmcgPSBleGVjLT52bSgpLnByb21pc2VEZWZlcnJlZFRpbWVyLT5jYW5j
ZWxQZW5kaW5nUHJvbWlzZSh0aGlzKTsKKyAgICBjYWxsRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LCBt
X3JlamVjdC5nZXQoKSwgcmVhc29uKTsKKyAgICBib29sIHdhc1BlbmRpbmcgPSBnbG9iYWxPYmpl
Y3QtPnZtKCkucHJvbWlzZURlZmVycmVkVGltZXItPmNhbmNlbFBlbmRpbmdQcm9taXNlKHRoaXMp
OwogICAgIEFTU0VSVF9VTlVTRUQod2FzUGVuZGluZywgd2FzUGVuZGluZyA9PSBtX3Byb21pc2VJ
c0FzeW5jUGVuZGluZyk7CiB9CiAKLXZvaWQgSlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdChFeGVj
U3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogcmVhc29uKQordm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6
cmVqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvbiogcmVhc29uKQog
ewotICAgIHJlamVjdChleGVjLCByZWFzb24tPnZhbHVlKCkpOworICAgIHJlamVjdChnbG9iYWxP
YmplY3QsIHJlYXNvbi0+dmFsdWUoKSk7CiB9CiAKIHZvaWQgSlNQcm9taXNlRGVmZXJyZWQ6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgSlNQcm9taXNlKiBwcm9taXNlLCBKU0Z1bmN0aW9uKiByZXNv
bHZlLCBKU0Z1bmN0aW9uKiByZWplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAppbmRleCBlYjUwMjQxOTY2MjI5MjM4Yjk3ZjNlN2Vj
MWRjMzM0MjdiMWRjZWYwLi5hOWNmYTliY2I1MTdlMjNkN2U0MzI5MmY0ZGUwODcwMTU2NDdjZjE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZl
cnJlZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVy
cmVkLmgKQEAgLTQ3LDkgKzQ3LDkgQEAgY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQgOiBwdWJsaWMg
SlNDZWxsIHsKICAgICAgICAgSlNGdW5jdGlvbiogcmVzb2x2ZSB7IG51bGxwdHIgfTsKICAgICAg
ICAgSlNGdW5jdGlvbiogcmVqZWN0IHsgbnVsbHB0ciB9OwogICAgIH07Ci0gICAgc3RhdGljIERl
ZmVycmVkRGF0YSBjcmVhdGVEZWZlcnJlZERhdGEoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1Byb21pc2VDb25zdHJ1Y3RvciopOworICAgIHN0YXRpYyBEZWZlcnJlZERhdGEgY3JlYXRl
RGVmZXJyZWREYXRhKEpTR2xvYmFsT2JqZWN0KiwgSlNQcm9taXNlQ29uc3RydWN0b3IqKTsKIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1Byb21pc2VEZWZlcnJlZCogdHJ5Q3JlYXRl
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEpTUHJvbWlzZURlZmVycmVkKiB0cnlDcmVhdGUoSlNHbG9iYWxPYmplY3QqKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNQcm9taXNlRGVmZXJyZWQqIGNyZWF0ZShWTSYsIEpT
UHJvbWlzZSosIEpTRnVuY3Rpb24qIHJlc29sdmUsIEpTRnVuY3Rpb24qIHJlamVjdCk7CiAKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTYzLDkgKzYzLDkgQEAgY2xh
c3MgSlNQcm9taXNlRGVmZXJyZWQgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBKU0Z1bmN0aW9uKiBy
ZXNvbHZlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlLmdldCgpOyB9CiAgICAgSlNGdW5jdGlv
biogcmVqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWplY3QuZ2V0KCk7IH0KIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcmVzb2x2ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHJlamVjdChFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHJlc29sdmUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlamVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVqZWN0KEpTR2xvYmFsT2JqZWN0Kiwg
RXhjZXB0aW9uKik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBwcm9taXNlQXN5bmNQZW5k
aW5nKCkgeyBtX3Byb21pc2VJc0FzeW5jUGVuZGluZyA9IHRydWU7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgK
aW5kZXggMDMxNTgyZjQwZTNlNzQ4MTIwMzE2YmFhYWVjMmFiYzQ1MmI1M2ZkMS4uNWE1NzQ3N2Fh
OGQ3MzRkOWVlMThlY2I0OTE0MTgyNzgxM2MxYmNmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKQEAgLTkz
LDE5ICs5MywxOSBAQCBjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IgZmluYWwgOiBwdWJs
aWMgSlNDZWxsIHsKICAgICB1aW50MzJfdCBtX2NhY2hlZElubGluZUNhcGFjaXR5OwogfTsKIAot
aW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlKQoraW5saW5lIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogYmFzZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgdWludDMyX3QgaW5kZXhlZExlbmd0aCA9IGJhc2UtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0RW51bWVyYWJsZUxlbmd0aChleGVjLCBiYXNlKTsKKyAgICB1aW50MzJf
dCBpbmRleGVkTGVuZ3RoID0gYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRFbnVtZXJhYmxlTGVu
Z3RoKGdsb2JhbE9iamVjdCwgYmFzZSk7CiAKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IgPSBudWxscHRyOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
LT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmICghaW5kZXhlZExlbmd0aAogICAgICAgICAmJiAoZW51
bWVyYXRvciA9IHN0cnVjdHVyZS0+Y2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQotICAg
ICAgICAmJiBlbnVtZXJhdG9yLT5jYWNoZWRQcm90b3R5cGVDaGFpbigpID09IHN0cnVjdHVyZS0+
cHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZSkpCisgICAgICAgICYmIGVudW1lcmF0b3ItPmNhY2hl
ZFByb3RvdHlwZUNoYWluKCkgPT0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihnbG9iYWxPYmpl
Y3QsIGJhc2UpKQogICAgICAgICByZXR1cm4gZW51bWVyYXRvcjsKIAogICAgIHVpbnQzMl90IG51
bWJlclN0cnVjdHVyZVByb3BlcnRpZXMgPSAwOwpAQCAtMTEzLDI5ICsxMTMsMjkgQEAgaW5saW5l
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWMKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7
CiAKICAgICBpZiAoc3RydWN0dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseUZvckVudW1l
cmF0aW9uKCkgJiYgaW5kZXhlZExlbmd0aCA9PSBiYXNlLT5nZXRBcnJheUxlbmd0aCgpKSB7Ci0g
ICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhi
YXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIGJh
c2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAogICAgICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0
aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CiAKLSAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUo
dm0pLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0R2Vu
ZXJpY1Byb3BlcnR5TmFtZXMoYmFzZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gR2VuZXJpYyBwcm9wZXJ0
eSBuYW1lcyB2ZWN0b3IgY29udGFpbnMgYWxsIGluZGV4ZWQgcHJvcGVydHkgbmFtZXMuCiAgICAg
ICAgIC8vIFNvIGRpc2FibGUgaW5kZXhlZCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBwaGFzZSBieSBz
ZXR0aW5nIHxpbmRleGVkTGVuZ3RofCB0byAwLgogICAgICAgICBpbmRleGVkTGVuZ3RoID0gMDsK
LSAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgYmFzZS0+bWV0
aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgIH0KICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIEFTU0VSVChwcm9wZXJ0eU5hbWVzLnNpemUoKSA8
IFVJTlQzMl9NQVgpOwogCiAgICAgYm9vbCBzYXdQb2x5UHJvdG87Ci0gICAgYm9vbCBzdWNjZXNz
ZnVsbHlOb3JtYWxpemVkQ2hhaW4gPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNl
LCBzYXdQb2x5UHJvdG8pICE9IEludmFsaWRQcm90b3R5cGVDaGFpbjsKKyAgICBib29sIHN1Y2Nl
c3NmdWxseU5vcm1hbGl6ZWRDaGFpbiA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGdsb2JhbE9i
amVjdCwgYmFzZSwgc2F3UG9seVByb3RvKSAhPSBJbnZhbGlkUHJvdG90eXBlQ2hhaW47CiAKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMgPSBiYXNlLT5z
dHJ1Y3R1cmUodm0pOwogICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNyZWF0ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExl
bmd0aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7
CiAgICAgaWYgKCFpbmRleGVkTGVuZ3RoICYmIHN1Y2Nlc3NmdWxseU5vcm1hbGl6ZWRDaGFpbiAm
JiBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzID09IHN0cnVjdHVyZSkgewotICAg
ICAgICBlbnVtZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5w
cm90b3R5cGVDaGFpbihleGVjLCBiYXNlKSk7CisgICAgICAgIGVudW1lcmF0b3ItPnNldENhY2hl
ZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGdsb2JhbE9iamVj
dCwgYmFzZSkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5jYW5DYWNoZVByb3BlcnR5TmFtZUVu
dW1lcmF0b3IoKSkKICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q2FjaGVkUHJvcGVydHlOYW1l
RW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3h5LmNwcAppbmRleCBiZjE4N2Q4ZmY4ODUyODY4ZTkzNjk0YTZkNjY0YmIx
ZDBiN2EyZTQ5Li45YzQ3OTM0ZTRhM2Q5MTk5ZmE5ODQyZGQwNTJjZTg4ZDI0MTUyYWMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcApAQCAtNTUsMTA3ICs1NSwx
MDcgQEAgU3RyaW5nIEpTUHJveHk6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBW
TSYgdm0pCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZSh2bSkt
PmNsYXNzTmFtZSh0aGlzT2JqZWN0LT50YXJnZXQoKSwgdm0pOwogfQogCi1TdHJpbmcgSlNQcm94
eTo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykK
K1N0cmluZyBKU1Byb3h5Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBjb25zdCBKU1Byb3h5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PGNvbnN0IEpTUHJveHkqPihvYmplY3QpOwotICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPnRvU3RyaW5nTmFtZSh0aGlz
T2JqZWN0LT50YXJnZXQoKSwgZXhlYyk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgp
LT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT50b1N0cmluZ05hbWUodGhpc09iamVj
dC0+dGFyZ2V0KCksIGdsb2JhbE9iamVjdCk7CiB9CiAKLWJvb2wgSlNQcm94eTo6Z2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Byb3h5OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7Ci0gICAgcmV0
dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QtPnRhcmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFs
T2JqZWN0LT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QtPnRhcmdldCgpLCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNQcm94eTo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Byb3h5
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVj
dCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52
bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+dGFyZ2V0KCkt
Pm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgodGhpc09iamVjdC0+dGFyZ2V0KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90
KTsKIH0KIAotYm9vbCBKU1Byb3h5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKK2Jvb2wgSlNQcm94eTo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNQcm94eSo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPnB1dCh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgp
LT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5wdXQodGhpc09iamVjdC0+dGFyZ2V0
KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLWJvb2wg
SlNQcm94eTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQorYm9vbCBK
U1Byb3h5OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KGNlbGwp
OwotICAgIHJldHVybiB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0o
KSktPnB1dEJ5SW5kZXgodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+dGFyZ2V0KCktPm1l
dGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPnB1dEJ5SW5kZXgodGhpc09iamVjdC0+dGFy
Z2V0KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwog
fQogCi1ib29sIEpTUHJveHk6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQorYm9vbCBKU1Byb3h5Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgSlNQcm94eSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+
dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlz
T2JqZWN0LT50YXJnZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRU
aHJvdyk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9i
YWxPYmplY3QtPnZtKCkpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LT50YXJnZXQoKSwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0K
IAotYm9vbCBKU1Byb3h5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNQcm94eTo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNQcm94eSo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9k
VGFibGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QtPnRhcmdldCgpLCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0
aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdC0+
dGFyZ2V0KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotYm9vbCBKU1Byb3h5
Ojppc0V4dGVuc2libGUoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjKQorYm9vbCBK
U1Byb3h5Ojppc0V4dGVuc2libGUoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkq
PihvYmplY3QpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUo
ZXhlYy0+dm0oKSktPmlzRXh0ZW5zaWJsZSh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZXhlYyk7Cisg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3Qt
PnZtKCkpLT5pc0V4dGVuc2libGUodGhpc09iamVjdC0+dGFyZ2V0KCksIGdsb2JhbE9iamVjdCk7
CiB9CiAKLWJvb2wgSlNQcm94eTo6cHJldmVudEV4dGVuc2lvbnMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjKQorYm9vbCBKU1Byb3h5OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEpTUHJveHkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRoaXNP
YmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHJldmVudEV4dGVuc2lv
bnModGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50
YXJnZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+cHJldmVudEV4dGVuc2lv
bnModGhpc09iamVjdC0+dGFyZ2V0KCksIGdsb2JhbE9iamVjdCk7CiB9CiAKLWJvb2wgSlNQcm94
eTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCitib29sIEpTUHJveHk6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkq
PihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4
ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRo
b2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09i
amVjdC0+dGFyZ2V0KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBK
U1Byb3h5OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU1Byb3h5OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTUHJveHkqPihvYmplY3QpOwotICAgIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RU
YWJsZShleGVjLT52bSgpKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwg
ZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1l
dGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmdldFByb3BlcnR5TmFtZXModGhpc09iamVj
dC0+dGFyZ2V0KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLXVp
bnQzMl90IEpTUHJveHk6OmdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb2JqZWN0KQordWludDMyX3QgSlNQcm94eTo6Z2V0RW51bWVyYWJsZUxlbmd0aChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0KQogewogICAgIEpTUHJv
eHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRo
aXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0RW51bWVyYWJs
ZUxlbmd0aChleGVjLCB0aGlzT2JqZWN0LT50YXJnZXQoKSk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRFbnVtZXJh
YmxlTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+dGFyZ2V0KCkpOwogfQogCi12b2lk
IEpTUHJveHk6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgSlNQcm94eTo6Z2V0
U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCiB7CiAgICAgLy8gU2tpcCB0aGUgc3RydWN0
dXJlIGxvb3AsIHNpbmNlIGl0IGlzIGludmFsaWQgZm9yIHByb3hpZXMuCiB9CiAKLXZvaWQgSlNQ
cm94eTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit2b2lkIEpTUHJveHk6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1Byb3h5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwogICAgIC8vIEdldCAqYWxsKiBvZiB0
aGUgcHJvcGVydHkgbmFtZXMsIG5vdCBqdXN0IHRoZSBnZW5lcmljIG9uZXMsIHNpbmNlIHdlIHNr
aXBwZWQgdGhlIHN0cnVjdHVyZQogICAgIC8vIG9uZXMgYWJvdmUuCi0gICAgdGhpc09iamVjdC0+
dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRQcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QtPnRhcmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICB0aGlzT2Jq
ZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+Z2V0UHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKIH0KIAotdm9pZCBKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwotICAgIHRo
aXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0o
KSktPmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdC0+dGFyZ2V0KCksIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNQcm94eTo6c2V0UHJvdG90eXBl
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBwcm90b3R5cGUsIGJv
b2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpCitib29sIEpTUHJveHk6OnNldFByb3RvdHlwZShKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCkKIHsKICAgICBKU1Byb3h5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT50
YXJnZXQoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPnNldFByb3RvdHlwZSh0aGlzT2JqZWN0
LT50YXJnZXQoKSwgZXhlYywgcHJvdG90eXBlLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CisgICAg
cmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZt
KCkpLT5zZXRQcm90b3R5cGUodGhpc09iamVjdC0+dGFyZ2V0KCksIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiB9CiAKLUpTVmFsdWUgSlNQcm94eTo6Z2V0
UHJvdG90eXBlKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgSlNQ
cm94eTo6Z2V0UHJvdG90eXBlKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4o
b2JqZWN0KTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpLT5nZXRQcm90b3R5cGUodGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52
bSgpKS0+Z2V0UHJvdG90eXBlKHRoaXNPYmplY3QtPnRhcmdldCgpLCBnbG9iYWxPYmplY3QpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJveHkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuaAppbmRleCA0NDZiM2IxNDk2NTY2MDg1OTRmNTYwZjkyYWNkZDAzNTY3ZDg2YmUwLi43OTEx
YmE0NGMwNzExNjczZmVhOTA1MmQ1MTEzMGQzMDZlNzc2Y2FmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm94eS5oCkBAIC04MSwyMyArODEsMjMgQEAgY2xhc3MgSlNQcm94eSA6
IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqLCBW
TSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNv
bnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQs
IFByb3BlcnR5U2xvdCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5n
dGgoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBpc0V4
dGVuc2libGUoSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBwcmV2ZW50RXh0ZW5zaW9ucyhKU09iamVjdCosIEV4ZWNTdGF0ZSopOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQsIFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0QnlJ
bmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFN0cnVjdHVy
ZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHNldFByb3RvdHlwZShKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNl
dCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBpc0V4dGVuc2libGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqKTsKIAogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1f
dGFyZ2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAppbmRleCBj
Y2MwMDE1NjEwMjJiZjY2Y2JmMmU4YjM0MmY2ZmVlNmQ3NmFkZWY5Li42ZDVhYjY4MmM2ODM5MTRm
NjlmM2U1YzIyODM4NGZlZmU0NjU3N2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Njb3BlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Njb3BlLmNwcApAQCAtNTAsOSArNTAsOSBAQCB2b2lkIEpTU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIH0KIAogLy8gUmV0dXJucyB0
cnVlIGlmIHdlIGZvdW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byB0ZXJtaW5hdGUgb3B0aW1pemF0
aW9uLgotc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdGF0ZSogZXhlYywg
SlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBnZXRPclB1
dCwgc2l6ZV90IGRlcHRoLCBib29sJiBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgUmVzb2x2ZU9w
JiBvcCwgSW5pdGlhbGl6YXRpb25Nb2RlIGluaXRpYWxpemF0aW9uTW9kZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Nj
b3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdldE9yUHV0LCBz
aXplX3QgZGVwdGgsIGJvb2wmIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBSZXNvbHZlT3AmIG9w
LCBJbml0aWFsaXphdGlvbk1vZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHNjb3BlLT5p
c0pTTGV4aWNhbEVudmlyb25tZW50KCkpIHsKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIGlubGlu
ZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIGNv
bnN0IElkZW50aWYKICAgICAgICAgaWYgKHNjb3BlLT50eXBlKCkgPT0gTW9kdWxlRW52aXJvbm1l
bnRUeXBlKSB7CiAgICAgICAgICAgICBKU01vZHVsZUVudmlyb25tZW50KiBtb2R1bGVFbnZpcm9u
bWVudCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oc2NvcGUpOwogICAgICAgICAgICAg
QWJzdHJhY3RNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IG1vZHVsZUVudmlyb25tZW50LT5t
b2R1bGVSZWNvcmQoKTsKLSAgICAgICAgICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkOjpSZXNvbHV0
aW9uIHJlc29sdXRpb24gPSBtb2R1bGVSZWNvcmQtPnJlc29sdmVJbXBvcnQoZXhlYywgaWRlbnQp
OworICAgICAgICAgICAgQWJzdHJhY3RNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb24gcmVzb2x1dGlv
biA9IG1vZHVsZVJlY29yZC0+cmVzb2x2ZUltcG9ydChnbG9iYWxPYmplY3QsIGlkZW50KTsKICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgICAg
ICAgICAgaWYgKHJlc29sdXRpb24udHlwZSA9PSBBYnN0cmFjdE1vZHVsZVJlY29yZDo6UmVzb2x1
dGlvbjo6VHlwZTo6UmVzb2x2ZWQpIHsKICAgICAgICAgICAgICAgICBBYnN0cmFjdE1vZHVsZVJl
Y29yZCogaW1wb3J0ZWRSZWNvcmQgPSByZXNvbHV0aW9uLm1vZHVsZVJlY29yZDsKQEAgLTE1NSw3
ICsxNTUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoRXhlY1N0YXRlKiBl
eGVjLCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZgogICAgICAgICB9CiAKICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKLSAgICAgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eSA9IGdsb2Jh
bE9iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgZXhlYywgaWRlbnQsIHNs
b3QpOworICAgICAgICBib29sIGhhc093blByb3BlcnR5ID0gZ2xvYmFsT2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50LCBzbG90KTsKICAg
ICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eSkgewogICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3Ao
bWFrZVR5cGUoVW5yZXNvbHZlZFByb3BlcnR5LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIDAs
IDAsIDAsIDAsIDApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDEsMjcgKzIwMSwy
NyBAQCBKU09iamVjdCogSlNTY29wZTo6b2JqZWN0QXRTY29wZShKU1Njb3BlKiBzY29wZSkKIH0K
IAogLy8gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5zY29wYWJs
ZSBiZWNvbWVzIGZhbHNlLgotc3RhdGljIGlubGluZSBib29sIGlzVW5zY29wYWJsZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Vuc2NvcGFibGUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUsIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGlmIChzY29wZS0+dHlwZSgpICE9IFdpdGhTY29wZVR5cGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTVmFsdWUgdW5zY29wYWJsZXMgPSBvYmpl
Y3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT51bnNjb3BhYmxlc1N5bWJvbCk7CisgICAg
SlNWYWx1ZSB1bnNjb3BhYmxlcyA9IG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVy
dHlOYW1lcy0+dW5zY29wYWJsZXNTeW1ib2wpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwogICAgIGlmICghdW5zY29wYWJsZXMuaXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIEpTVmFsdWUgYmxvY2tlZCA9IGpzQ2FzdDxKU09iamVjdCo+
KHVuc2NvcGFibGVzKS0+Z2V0KGV4ZWMsIGlkZW50KTsKKyAgICBKU1ZhbHVlIGJsb2NrZWQgPSBq
c0Nhc3Q8SlNPYmplY3QqPih1bnNjb3BhYmxlcyktPmdldChnbG9iYWxPYmplY3QsIGlkZW50KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKIAotICAgIHJldHVy
biBibG9ja2VkLnRvQm9vbGVhbihleGVjKTsKKyAgICByZXR1cm4gYmxvY2tlZC50b0Jvb2xlYW4o
Z2xvYmFsT2JqZWN0KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuUHJlZGljYXRlRnVu
Y3RvciwgdHlwZW5hbWUgU2tpcFByZWRpY2F0ZUZ1bmN0b3I+Ci1BTFdBWVNfSU5MSU5FIEpTT2Jq
ZWN0KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBSZXR1cm5QcmVkaWNhdGVGdW5jdG9yIHJldHVyblByZWRp
Y2F0ZSwgU2tpcFByZWRpY2F0ZUZ1bmN0b3Igc2tpcFByZWRpY2F0ZSkKK0FMV0FZU19JTkxJTkUg
SlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBSZXR1cm5QcmVkaWNhdGVG
dW5jdG9yIHJldHVyblByZWRpY2F0ZSwgU2tpcFByZWRpY2F0ZUZ1bmN0b3Igc2tpcFByZWRpY2F0
ZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGUtPmVuZCgpOwogICAgIFNjb3BlQ2hh
aW5JdGVyYXRvciBpdCA9IHNjb3BlLT5iZWdpbigpOwpAQCAtMjMzLDEyICsyMzMsMTIgQEAgQUxX
QVlTX0lOTElORSBKU09iamVjdCogSlNTY29wZTo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
U2NvcGUqIHNjb3BlLCBjb25zdAogICAgICAgICBpZiAoKytpdCA9PSBlbmQpIHsKICAgICAgICAg
ICAgIEpTU2NvcGUqIGdsb2JhbFNjb3BlRXh0ZW5zaW9uID0gc2NvcGUtPmdsb2JhbE9iamVjdCh2
bSktPmdsb2JhbFNjb3BlRXh0ZW5zaW9uKCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZ2xv
YmFsU2NvcGVFeHRlbnNpb24pKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9
IG9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpOworICAgICAgICAgICAgICAgIGJvb2wg
aGFzUHJvcGVydHkgPSBvYmplY3QtPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgaWRlbnQpOwog
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7
CiAgICAgICAgICAgICAgICAgaWYgKGhhc1Byb3BlcnR5KQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0OwogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBleHRlbnNpb25TY29wZU9i
amVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoZ2xvYmFsU2NvcGVFeHRlbnNpb24pOwotICAg
ICAgICAgICAgICAgIGhhc1Byb3BlcnR5ID0gZXh0ZW5zaW9uU2NvcGVPYmplY3QtPmhhc1Byb3Bl
cnR5KGV4ZWMsIGlkZW50KTsKKyAgICAgICAgICAgICAgICBoYXNQcm9wZXJ0eSA9IGV4dGVuc2lv
blNjb3BlT2JqZWN0LT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50KTsKICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAg
ICAgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4
dGVuc2lvblNjb3BlT2JqZWN0OwpAQCAtMjQ5LDEwICsyNDksMTAgQEAgQUxXQVlTX0lOTElORSBK
U09iamVjdCogSlNTY29wZTo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCBjb25zdAogICAgICAgICBpZiAoc2tpcFByZWRpY2F0ZShzY29wZSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gb2JqZWN0LT5oYXNQcm9wZXJ0
eShleGVjLCBpZGVudCk7CisgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBvYmplY3QtPmhhc1By
b3BlcnR5KGdsb2JhbE9iamVjdCwgaWRlbnQpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAgICBpZiAoaGFzUHJvcGVydHkpIHsKLSAgICAg
ICAgICAgIGJvb2wgdW5zY29wYWJsZSA9IGlzVW5zY29wYWJsZShleGVjLCBzY29wZSwgb2JqZWN0
LCBpZGVudCk7CisgICAgICAgICAgICBib29sIHVuc2NvcGFibGUgPSBpc1Vuc2NvcGFibGUoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgb2JqZWN0LCBpZGVudCk7CiAgICAgICAgICAgICBFWENFUFRJT05f
QVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpIHx8ICF1bnNjb3BhYmxlKTsKICAgICAgICAg
ICAgIGlmICghdW5zY29wYWJsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwpAQCAt
MjYzLDkgKzI2Myw5IEBAIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmUo
RXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgY29uc3QKICAgICB9CiB9CiAKLUpTVmFs
dWUgSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK0pTVmFs
dWUgSlNTY29wZTo6cmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBhdXRvIHJldHVyblByZWRpY2F0ZSA9IFsmXSAoSlNTY29wZSogc2NvcGUpIC0+
IGJvb2wgewpAQCAtMjc0LDE0ICsyNzQsMTQgQEAgSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlU2Nv
cGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSoKICAg
ICBhdXRvIHNraXBQcmVkaWNhdGUgPSBbJl0gKEpTU2NvcGUqIHNjb3BlKSAtPiBib29sIHsKICAg
ICAgICAgcmV0dXJuIHNjb3BlLT5pc1dpdGhTY29wZSgpOwogICAgIH07Ci0gICAgSlNPYmplY3Qq
IG9iamVjdCA9IHJlc29sdmUoZXhlYywgc2NvcGUsIGlkZW50LCByZXR1cm5QcmVkaWNhdGUsIHNr
aXBQcmVkaWNhdGUpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSByZXNvbHZlKGdsb2JhbE9iamVj
dCwgc2NvcGUsIGlkZW50LCByZXR1cm5QcmVkaWNhdGUsIHNraXBQcmVkaWNhdGUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAogICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CiAgICAgaWYgKEpTU2NvcGUqIHNjb3BlID0ganNEeW5hbWljQ2FzdDxKU1Njb3BlKj4o
dm0sIG9iamVjdCkpIHsKICAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBzY29wZVN5bWJvbFRhYmxl
ID0gc2NvcGUtPnN5bWJvbFRhYmxlKHZtKSkgewogICAgICAgICAgICAgcmVzdWx0ID0gc2NvcGUt
PmlzR2xvYmFsT2JqZWN0KCkKLSAgICAgICAgICAgICAgICA/IEpTT2JqZWN0Ojppc0V4dGVuc2li
bGUob2JqZWN0LCBleGVjKQorICAgICAgICAgICAgICAgID8gSlNPYmplY3Q6OmlzRXh0ZW5zaWJs
ZShvYmplY3QsIGdsb2JhbE9iamVjdCkKICAgICAgICAgICAgICAgICA6IHNjb3BlU3ltYm9sVGFi
bGUtPnNjb3BlVHlwZSgpID09IFN5bWJvbFRhYmxlOjpTY29wZVR5cGU6OlZhclNjb3BlOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjg5LDcgKzI4OSw3IEBAIEpTVmFsdWUgSlNTY29wZTo6cmVzb2x2
ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUq
CiAgICAgcmV0dXJuIHJlc3VsdCA/IEpTVmFsdWUob2JqZWN0KSA6IGpzVW5kZWZpbmVkKCk7CiB9
CiAKLUpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSog
c2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorSlNPYmplY3QqIEpTU2NvcGU6OnJlc29s
dmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KQogewogICAgIGF1dG8gcHJlZGljYXRlMSA9IFsmXSAoSlNTY29wZSop
IC0+IGJvb2wgewogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTcsMTIgKzI5NywxMiBAQCBK
U09iamVjdCogSlNTY29wZTo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCBjb25zdCBJZGVudGlmaWVyJiBpZAogICAgIGF1dG8gcHJlZGljYXRlMiA9IFsmXSAoSlNTY29w
ZSopIC0+IGJvb2wgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfTsKLSAgICByZXR1cm4g
cmVzb2x2ZShleGVjLCBzY29wZSwgaWRlbnQsIHByZWRpY2F0ZTEsIHByZWRpY2F0ZTIpOworICAg
IHJldHVybiByZXNvbHZlKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlkZW50LCBwcmVkaWNhdGUxLCBw
cmVkaWNhdGUyKTsKIH0KIAotUmVzb2x2ZU9wIEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShFeGVj
U3RhdGUqIGV4ZWMsIHNpemVfdCBkZXB0aE9mZnNldCwgSlNTY29wZSogc2NvcGUsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBnZXRPclB1dCwgUmVzb2x2ZVR5cGUgdW5saW5rZWRU
eXBlLCBJbml0aWFsaXphdGlvbk1vZGUgaW5pdGlhbGl6YXRpb25Nb2RlKQorUmVzb2x2ZU9wIEpT
U2NvcGU6OmFic3RyYWN0UmVzb2x2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBzaXpl
X3QgZGVwdGhPZmZzZXQsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
R2V0T3JQdXQgZ2V0T3JQdXQsIFJlc29sdmVUeXBlIHVubGlua2VkVHlwZSwgSW5pdGlhbGl6YXRp
b25Nb2RlIGluaXRpYWxpemF0aW9uTW9kZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFJlc29sdmVPcCBvcChEeW5hbWljLCAwLCAw
LCAwLCAwLCAwKTsKQEAgLTMxMiw3ICszMTIsNyBAQCBSZXNvbHZlT3AgSlNTY29wZTo6YWJzdHJh
Y3RSZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IGRlcHRoT2Zmc2V0LCBKU1Njb3BlKgog
ICAgIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MgPSBKU0M6Om5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHVubGlua2VkVHlwZSk7CiAgICAgc2l6ZV90IGRlcHRoID0gZGVwdGhPZmZzZXQ7CiAg
ICAgZm9yICg7IHNjb3BlOyBzY29wZSA9IHNjb3BlLT5uZXh0KCkpIHsKLSAgICAgICAgYm9vbCBz
dWNjZXNzID0gYWJzdHJhY3RBY2Nlc3MoZXhlYywgc2NvcGUsIGlkZW50LCBnZXRPclB1dCwgZGVw
dGgsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBvcCwgaW5pdGlhbGl6YXRpb25Nb2RlKTsKKyAg
ICAgICAgYm9vbCBzdWNjZXNzID0gYWJzdHJhY3RBY2Nlc3MoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
aWRlbnQsIGdldE9yUHV0LCBkZXB0aCwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIG9wLCBpbml0
aWFsaXphdGlvbk1vZGUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwLCAwKSk7CiAgICAgICAgIGlmIChzdWNjZXNz
KQogICAgICAgICAgICAgYnJlYWs7CkBAIC00MDksMTEgKzQwOSwxMSBAQCBTeW1ib2xUYWJsZSog
SlNTY29wZTo6c3ltYm9sVGFibGUoVk0mIHZtKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1K
U1ZhbHVlIEpTU2NvcGU6OnRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqIGV4ZWMsIEVDTUFNb2Rl
IGVjbWFNb2RlKQorSlNWYWx1ZSBKU1Njb3BlOjp0b1RoaXMoSlNDZWxsKiwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGVjbWFNb2Rl
ID09IFN0cmljdE1vZGUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVy
biBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxUaGlzKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTY29wZS5oCmluZGV4IGY1Y2RkNGQwYjkxYTkxNGNmZjg5YjRiYjg5NDhiYTYwMWVj
OWM1M2IuLmE5YTNlZmU0YmY3OTZjY2EyYjY5MDcxNWQ0MmIzOWQzMGYyNTQ0NmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgKQEAgLTQ3LDkgKzQ3LDkgQEAgY2xhc3Mg
SlNTY29wZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIAogICAgIHN0YXRpYyBKU09iamVj
dCogb2JqZWN0QXRTY29wZShKU1Njb3BlKik7CiAKLSAgICBzdGF0aWMgSlNPYmplY3QqIHJlc29s
dmUoRXhlY1N0YXRlKiwgSlNTY29wZSosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMg
SlNWYWx1ZSByZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKEV4ZWNTdGF0ZSos
IEpTU2NvcGUqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIFJlc29sdmVPcCBhYnN0
cmFjdFJlc29sdmUoRXhlY1N0YXRlKiwgc2l6ZV90IGRlcHRoT2Zmc2V0LCBKU1Njb3BlKiwgY29u
c3QgSWRlbnRpZmllciYsIEdldE9yUHV0LCBSZXNvbHZlVHlwZSwgSW5pdGlhbGl6YXRpb25Nb2Rl
KTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIHJlc29sdmUoSlNHbG9iYWxPYmplY3QqLCBKU1Njb3Bl
KiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlc29sdmVTY29wZUZv
ckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKiwgY29uc3Qg
SWRlbnRpZmllciYpOworICAgIHN0YXRpYyBSZXNvbHZlT3AgYWJzdHJhY3RSZXNvbHZlKEpTR2xv
YmFsT2JqZWN0Kiwgc2l6ZV90IGRlcHRoT2Zmc2V0LCBKU1Njb3BlKiwgY29uc3QgSWRlbnRpZmll
ciYsIEdldE9yUHV0LCBSZXNvbHZlVHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlKTsKIAogICAgIHN0
YXRpYyBib29sIGhhc0NvbnN0YW50U2NvcGUoUmVzb2x2ZVR5cGUpOwogICAgIHN0YXRpYyBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKFJlc29sdmVUeXBlLCBDb2RlQmxvY2sqKTsK
QEAgLTc0LDEzICs3NCwxMyBAQCBjbGFzcyBKU1Njb3BlIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogCiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKFZNJik7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNN
QU1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1ZhbHVlIHRvVGhpcyhKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCosIEVDTUFNb2RlKTsKIAogcHJvdGVjdGVkOgogICAgIEpTU2Nv
cGUoVk0mLCBTdHJ1Y3R1cmUqLCBKU1Njb3BlKiBuZXh0KTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFJldHVyblByZWRpY2F0ZUZ1bmN0b3IsIHR5cGVuYW1lIFNraXBQcmVkaWNhdGVGdW5jdG9y
PgotICAgIHN0YXRpYyBKU09iamVjdCogcmVzb2x2ZShFeGVjU3RhdGUqLCBKU1Njb3BlKiwgY29u
c3QgSWRlbnRpZmllciYsIFJldHVyblByZWRpY2F0ZUZ1bmN0b3IsIFNraXBQcmVkaWNhdGVGdW5j
dG9yKTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIHJlc29sdmUoSlNHbG9iYWxPYmplY3QqLCBKU1Nj
b3BlKiwgY29uc3QgSWRlbnRpZmllciYsIFJldHVyblByZWRpY2F0ZUZ1bmN0b3IsIFNraXBQcmVk
aWNhdGVGdW5jdG9yKTsKIAogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNTY29wZT4gbV9u
ZXh0OwpAQCAtMTQwLDcgKzE0MCw3IEBAIGlubGluZSBKU1Njb3BlKiBSZWdpc3Rlcjo6c2NvcGUo
KSBjb25zdAogICAgIHJldHVybiBqc0Nhc3Q8SlNTY29wZSo+KHVuYm94ZWRDZWxsKCkpOwogfQog
Ci1pbmxpbmUgSlNHbG9iYWxPYmplY3QqIEV4ZWNTdGF0ZTo6bGV4aWNhbEdsb2JhbE9iamVjdCgp
IGNvbnN0CitpbmxpbmUgSlNHbG9iYWxPYmplY3QqIENhbGxGcmFtZTo6bGV4aWNhbEdsb2JhbE9i
amVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCmluZGV4IGQ0NGNjMjMwMzE4
ODU4YTNhZjUwZDg1NmU4MmJjYTA4Mzc0MWI4YjUuLjczZWE3ODkxMDJiN2U1YTJhOWM2ZGJlMjE3
ZTZkYjhlYmI0NjMzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAK
QEAgLTMzLDE1ICszMywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpT
U2V0OjpzX2luZm8gPSB7ICJTZXQiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTU2V0KSB9OwogCi1TdHJpbmcgSlNTZXQ6OnRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopCitTdHJpbmcgSlNTZXQ6OnRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KikKIHsKICAgICByZXR1cm4gIk9iamVj
dCJfczsKIH0KIAotSlNTZXQqIEpTU2V0OjpjbG9uZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1NldCogSlNTZXQ6OmNsb25lKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgSlNT
ZXQqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTZXQ+KHZtLmhlYXAp
KSBKU1NldCh2bSwgc3RydWN0dXJlKTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhl
Yywgdm0sIHRoaXMpOworICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qs
IHZtLCB0aGlzKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NldC5oCmluZGV4IGViN2E0OWZhMmEwZDA1OTEyZWE1OTQyMjVmMWQ0YzgwYTY4
NzVkMjQuLjUxMzkzMTRlZjA5YjYyMTM2YmYyZDc3NTMzNDkwMDY1ZDNkMTUzN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaApAQCAtNDEsMjEgKzQxLDIxIEBAIGNsYXNzIEpT
U2V0IGZpbmFsIDogcHVibGljIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXk+PiB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTU2V0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNTZXQqIGNyZWF0
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLCB2bSwgc3RydWN0dXJlLCAw
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBzdHJ1Y3R1cmUsIDAp
OwogICAgIH0KIAotICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3Qgc2l6ZSkKKyAgICBzdGF0aWMgSlNT
ZXQqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1aW50MzJfdCBzaXplKQogICAgIHsKICAgICAgICAgSlNTZXQqIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTZXQ+KHZtLmhlYXApKSBKU1NldCh2
bSwgc3RydWN0dXJlLCBzaXplKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4
ZWMsIHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCwg
dm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCiAgICAgYm9vbCBpc0l0ZXJh
dG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwogICAgIGJvb2wgY2FuQ2xvbmVGYXN0
QW5kTm9uT2JzZXJ2YWJsZShTdHJ1Y3R1cmUqKTsKLSAgICBKU1NldCogY2xvbmUoRXhlY1N0YXRl
KiwgVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBKU1NldCogY2xvbmUoSlNHbG9iYWxPYmplY3QqLCBW
TSYsIFN0cnVjdHVyZSopOwogCiBwcml2YXRlOgogICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCkBAIC02OCw3ICs2OCw3IEBAIGNsYXNzIEpTU2V0IGZpbmFsIDogcHVibGlj
IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PiB7CiAgICAg
ewogICAgIH0KIAotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0
KiwgRXhlY1N0YXRlKik7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogfTsKIAogc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zp
bmFsPEpTU2V0Pjo6dmFsdWUsICJSZXF1aXJlZCBmb3IgSlNUeXBlIGJhc2VkIGNhc3RpbmciKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKaW5k
ZXggZDQ1MWUwNTlmZTM1YzhmZWNmMTA5ZmU0NmVjZWJmNDUxZjZlMzgyMC4uNTA5N2IyMDA1ZmE1
OGQ1ZmNhZjhmZjI0MDlhZmFmY2JjNTljYjViZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKQEAgLTQ5LDE0ICs0OSwxMyBAQCB2b2lkIEpT
U2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2l0ZXIpOwogfQogCi1KU1Zh
bHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUga2V5LCBKU1ZhbHVlIHZhbHVlKQorSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWly
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQoa2V5
KTsKICAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93
ZWQoKSk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+anND
YWxsZWUoKS0+Z2xvYmFsT2JqZWN0KGNhbGxGcmFtZS0+dm0oKSk7Ci0gICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGNhbGxGcmFtZSwgMCwgZ2xvYmFsT2JqZWN0LCBhcmdzKTsKKyAgICByZXR1cm4g
Y29uc3RydWN0QXJyYXkoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Q
cm9maWxlKj4obnVsbHB0ciksIGFyZ3MpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKaW5kZXggYzM3ZmNkMTEzNWJjMGJkNTY4OTJhZDE2
NGRiZjJkYjIzYjBkMGE1Mi4uNDJlZDhlY2ExMzJjOWY3NTQ3MWFjNzZiNDRiMDhiZDIzMDZjZDY0
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRv
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaApA
QCAtNTEsMTIgKzUxLDEyIEBAIGNsYXNzIEpTU2V0SXRlcmF0b3IgZmluYWwgOiBwdWJsaWMgSlND
ZWxsIHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgSGFzaE1hcEJ1Y2tldFR5cGUqIGFkdmFuY2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICBB
TFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiBhZHZhbmNlSXRlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogICAgIHsKICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIHByZXYg
PSBtX2l0ZXIuZ2V0KCk7CiAgICAgICAgIGlmICghcHJldikKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBn
ZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0g
bV9pdGVyLT5uZXh0KCk7CiAgICAgICAgIHdoaWxlIChidWNrZXQgJiYgYnVja2V0LT5kZWxldGVk
KCkpCiAgICAgICAgICAgICBidWNrZXQgPSBidWNrZXQtPm5leHQoKTsKQEAgLTY4LDE2ICs2OCwx
NiBAQCBjbGFzcyBKU1NldEl0ZXJhdG9yIGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAg
IHJldHVybiBidWNrZXQ7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSYgdmFsdWUpCisgICAgYm9vbCBuZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1
Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVj
a2V0ID0gYWR2YW5jZUl0ZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYgKCFidWNrZXQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fa2luZCA9PSBJdGVyYXRl
VmFsdWUgfHwgbV9raW5kID09IEl0ZXJhdGVLZXkpCiAgICAgICAgICAgICB2YWx1ZSA9IGJ1Y2tl
dC0+a2V5KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihl
eGVjLCBidWNrZXQtPmtleSgpLCBidWNrZXQtPmtleSgpKTsKKyAgICAgICAgICAgIHZhbHVlID0g
Y3JlYXRlUGFpcihnbG9iYWxPYmplY3QsIGJ1Y2tldC0+a2V5KCksIGJ1Y2tldC0+a2V5KCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTk3LDcgKzk3LDcgQEAgY2xhc3MgSlNT
ZXRJdGVyYXRvciBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIH0KIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCopOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTVmFsdWUgY3JlYXRlUGFpcihDYWxsRnJhbWUqLCBKU1ZhbHVlLCBKU1ZhbHVl
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNTZXQ+IG1fc2V0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCmluZGV4IDdkNmFiYTAw
ZjI1ZWRjZWQxOGMwNjlmYTUyY2Q1ZWZiMjcxZmY5YjcuLmNlNTBhMjAyOTQ1OWY5MThiOTc5NDA5
Yjc3OTU0NmM2NjZmZWE5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5jcHAKQEAgLTkxLDEzICs5MSwxMyBAQCB2b2lkIEpTU3RyaW5nOjpkdW1wVG9TdHJlYW0o
Y29uc3QgSlNDZWxsKiBjZWxsLCBQcmludFN0cmVhbSYgb3V0KQogICAgIG91dC5wcmludGYoIj4i
KTsKIH0KIAotYm9vbCBKU1N0cmluZzo6ZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpT
U3RyaW5nKiBvdGhlcikgY29uc3QKK2Jvb2wgSlNTdHJpbmc6OmVxdWFsU2xvd0Nhc2UoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIG90aGVyKSBjb25zdAogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBTdHJpbmcgc3RyMSA9
IHZhbHVlKGV4ZWMpOworICAgIFN0cmluZyBzdHIxID0gdmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgU3RyaW5nIHN0cjIgPSBv
dGhlci0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIHN0cjIgPSBvdGhlci0+dmFsdWUoZ2xvYmFs
T2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgcmV0
dXJuIFdURjo6ZXF1YWwoKnN0cjEuaW1wbCgpLCAqc3RyMi5pbXBsKCkpOwogfQpAQCAtMjEzLDE0
ICsyMTMsMTQgQEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vi
c3RyaW5nKFVDaGFyKiBidWZmZXIpIGNvbnN0CiAgICAgQVNTRVJUKChidWZmZXIgKyBsZW5ndGgo
KSkgPT0gcG9zaXRpb24pOwogfQogCi1BdG9tU3RyaW5nIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJv
cGVUb0F0b21TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorQXRvbVN0cmluZyBKU1JvcGVT
dHJpbmc6OnJlc29sdmVSb3BlVG9BdG9tU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpIGNvbnN0CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgaWYgKGxlbmd0aCgpID4gbWF4TGVuZ3RoRm9yT25TdGFja1Jlc29sdmUpIHsKICAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gcmVzb2x2ZVJvcGVXaXRoRnVu
Y3Rpb24oZXhlYywgWyZdIChSZWY8U3RyaW5nSW1wbD4mJiBuZXdJbXBsKSB7CisgICAgICAgIHJl
dHVybiByZXNvbHZlUm9wZVdpdGhGdW5jdGlvbihnbG9iYWxPYmplY3QsIFsmXSAoUmVmPFN0cmlu
Z0ltcGw+JiYgbmV3SW1wbCkgewogICAgICAgICAgICAgcmV0dXJuIEF0b21TdHJpbmdJbXBsOjph
ZGQobmV3SW1wbC5wdHIoKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTI1MywxNCArMjUzLDE0
IEBAIGlubGluZSB2b2lkIEpTUm9wZVN0cmluZzo6Y29udmVydFRvTm9uUm9wZShTdHJpbmcmJiBz
dHJpbmcpIGNvbnN0CiAgICAgQVNTRVJUKCFKU1N0cmluZzo6aXNSb3BlKCkpOwogfQogCi1SZWZQ
dHI8QXRvbVN0cmluZ0ltcGw+IEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVUb0V4aXN0aW5nQXRv
bVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IEpT
Um9wZVN0cmluZzo6cmVzb2x2ZVJvcGVUb0V4aXN0aW5nQXRvbVN0cmluZyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChsZW5ndGgoKSA+IG1heExlbmd0aEZvck9uU3RhY2tS
ZXNvbHZlKSB7CiAgICAgICAgIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gZXhpc3RpbmdBdG9tU3Ry
aW5nOwotICAgICAgICByZXNvbHZlUm9wZVdpdGhGdW5jdGlvbihleGVjLCBbJl0gKFJlZjxTdHJp
bmdJbXBsPiYmIG5ld0ltcGwpIC0+IFJlZjxTdHJpbmdJbXBsPiB7CisgICAgICAgIHJlc29sdmVS
b3BlV2l0aEZ1bmN0aW9uKGdsb2JhbE9iamVjdCwgWyZdIChSZWY8U3RyaW5nSW1wbD4mJiBuZXdJ
bXBsKSAtPiBSZWY8U3RyaW5nSW1wbD4gewogICAgICAgICAgICAgZXhpc3RpbmdBdG9tU3RyaW5n
ID0gQXRvbVN0cmluZ0ltcGw6Omxvb2tVcChuZXdJbXBsLnB0cigpKTsKICAgICAgICAgICAgIGlm
IChleGlzdGluZ0F0b21TdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWYoKmV4
aXN0aW5nQXRvbVN0cmluZyk7CkBAIC0yOTAsNyArMjkwLDcgQEAgUmVmUHRyPEF0b21TdHJpbmdJ
bXBsPiBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlVG9FeGlzdGluZ0F0b21TdHJpbmcoRXhlY1N0
YXRlKgogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4KLWNvbnN0IFN0cmluZyYgSlNS
b3BlU3RyaW5nOjpyZXNvbHZlUm9wZVdpdGhGdW5jdGlvbihFeGVjU3RhdGUqIG51bGxPckV4ZWNG
b3JPT00sIEZ1bmN0aW9uJiYgZnVuY3Rpb24pIGNvbnN0Citjb25zdCBTdHJpbmcmIEpTUm9wZVN0
cmluZzo6cmVzb2x2ZVJvcGVXaXRoRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2Jh
bE9iamVjdEZvck9PTSwgRnVuY3Rpb24mJiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNSb3BlKCkpOwogICAgIApAQCAtMzA2LDcgKzMwNiw3IEBAIGNvbnN0IFN0cmluZyYgSlNSb3Bl
U3RyaW5nOjpyZXNvbHZlUm9wZVdpdGhGdW5jdGlvbihFeGVjU3RhdGUqIG51bGxPckV4ZWNGb3JP
T00sCiAgICAgICAgIExDaGFyKiBidWZmZXI7CiAgICAgICAgIGF1dG8gbmV3SW1wbCA9IFN0cmlu
Z0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCksIGJ1ZmZlcik7CiAgICAgICAg
IGlmICghbmV3SW1wbCkgewotICAgICAgICAgICAgb3V0T2ZNZW1vcnkobnVsbE9yRXhlY0Zvck9P
TSk7CisgICAgICAgICAgICBvdXRPZk1lbW9yeShudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKICAgICAgICAgfQogICAgICAgICB2bS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld0ltcGwtPmNvc3QoKSk7CkBAIC0zMTks
NyArMzE5LDcgQEAgY29uc3QgU3RyaW5nJiBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlV2l0aEZ1
bmN0aW9uKEV4ZWNTdGF0ZSogbnVsbE9yRXhlY0Zvck9PTSwKICAgICBVQ2hhciogYnVmZmVyOwog
ICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVu
Z3RoKCksIGJ1ZmZlcik7CiAgICAgaWYgKCFuZXdJbXBsKSB7Ci0gICAgICAgIG91dE9mTWVtb3J5
KG51bGxPckV4ZWNGb3JPT00pOworICAgICAgICBvdXRPZk1lbW9yeShudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00pOwogICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOwogICAgIH0KICAgICB2bS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG5ld0ltcGwtPmNvc3QoKSk7CkBAIC0zMjks
OSArMzI5LDkgQEAgY29uc3QgU3RyaW5nJiBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlV2l0aEZ1
bmN0aW9uKEV4ZWNTdGF0ZSogbnVsbE9yRXhlY0Zvck9PTSwKICAgICByZXR1cm4gdmFsdWVJbnRl
cm5hbCgpOwogfQogCi1jb25zdCBTdHJpbmcmIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGUoRXhl
Y1N0YXRlKiBudWxsT3JFeGVjRm9yT09NKSBjb25zdAorY29uc3QgU3RyaW5nJiBKU1JvcGVTdHJp
bmc6OnJlc29sdmVSb3BlKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00p
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlc29sdmVSb3BlV2l0aEZ1bmN0aW9uKG51bGxPckV4ZWNG
b3JPT00sIFtdIChSZWY8U3RyaW5nSW1wbD4mJiBuZXdJbXBsKSB7CisgICAgcmV0dXJuIHJlc29s
dmVSb3BlV2l0aEZ1bmN0aW9uKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgW10gKFJlZjxTdHJp
bmdJbXBsPiYmIG5ld0ltcGwpIHsKICAgICAgICAgcmV0dXJuIFdURk1vdmUobmV3SW1wbCk7CiAg
ICAgfSk7CiB9CkBAIC00MjYsMzcgKzQyNiwzNyBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2
ZVJvcGVTbG93Q2FzZShVQ2hhciogYnVmZmVyKSBjb25zdAogICAgIEFTU0VSVChidWZmZXIgPT0g
cG9zaXRpb24pOwogfQogCi12b2lkIEpTUm9wZVN0cmluZzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRl
KiBudWxsT3JFeGVjRm9yT09NKSBjb25zdAordm9pZCBKU1JvcGVTdHJpbmc6Om91dE9mTWVtb3J5
KEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGlzUm9wZSgpKTsKLSAgICBpZiAobnVsbE9yRXhlY0Zvck9PTSkgewotICAgICAgICBW
TSYgdm0gPSBudWxsT3JFeGVjRm9yT09NLT52bSgpOworICAgIGlmIChudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00pIHsKKyAgICAgICAgVk0mIHZtID0gbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLT52
bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JFeGVjRm9yT09NLCBzY29wZSk7CisgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHNjb3Bl
KTsKICAgICB9CiB9CiAKLUpTVmFsdWUgSlNTdHJpbmc6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSos
IFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CitKU1ZhbHVlIEpTU3RyaW5nOjp0b1ByaW1p
dGl2ZShKU0dsb2JhbE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNTdHJpbmcqPih0aGlzKTsKIH0KIAotYm9vbCBKU1N0cmlu
Zzo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlJiBudW1iZXIsIEpT
VmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgSlNTdHJpbmc6OmdldFByaW1pdGl2ZU51bWJlcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVz
dWx0KSBjb25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBTdHJpbmdWaWV3IHZpZXcgPSB1bnNhZmVWaWV3KGV4ZWMpOworICAgIFN0cmluZ1Zp
ZXcgdmlldyA9IHVuc2FmZVZpZXcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgcmVzdWx0ID0gdGhpczsKICAgICBudW1iZXIgPSBqc1Rv
TnVtYmVyKHZpZXcpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotZG91YmxlIEpTU3RyaW5nOjp0
b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Citkb3VibGUgSlNTdHJpbmc6OnRvTnVtYmVy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFN0cmluZ1ZpZXcgdmlldyA9IHVuc2Fm
ZVZpZXcoZXhlYyk7CisgICAgU3RyaW5nVmlldyB2aWV3ID0gdW5zYWZlVmlldyhnbG9iYWxPYmpl
Y3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogICAgIHJldHVybiBqc1Rv
TnVtYmVyKHZpZXcpOwogfQpAQCAtNDY4LDIxICs0NjgsMjEgQEAgaW5saW5lIFN0cmluZ09iamVj
dCogU3RyaW5nT2JqZWN0OjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LAogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLUpTT2JqZWN0KiBKU1N0cmluZzo6dG9PYmpl
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAor
SlNPYmplY3QqIEpTU3RyaW5nOjp0b09iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KSBjb25zdAogewotICAgIHJldHVybiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBn
bG9iYWxPYmplY3QsIGNvbnN0X2Nhc3Q8SlNTdHJpbmcqPih0aGlzKSk7CisgICAgcmV0dXJuIFN0
cmluZ09iamVjdDo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LCBjb25z
dF9jYXN0PEpTU3RyaW5nKj4odGhpcykpOwogfQogCi1KU1ZhbHVlIEpTU3RyaW5nOjp0b1RoaXMo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIEVDTUFNb2RlIGVjbWFNb2RlKQorSlNWYWx1
ZSBKU1N0cmluZzo6dG9UaGlzKEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKGVjbWFNb2RlID09IFN0cmljdE1v
ZGUpCiAgICAgICAgIHJldHVybiBjZWxsOwotICAgIHJldHVybiBTdHJpbmdPYmplY3Q6OmNyZWF0
ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGFzU3RyaW5nKGNlbGwp
KTsKKyAgICByZXR1cm4gU3RyaW5nT2JqZWN0OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBn
bG9iYWxPYmplY3QsIGFzU3RyaW5nKGNlbGwpKTsKIH0KIAotYm9vbCBKU1N0cmluZzo6Z2V0U3Ry
aW5nUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorYm9vbCBKU1N0cmluZzo6
Z2V0U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkgewogICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIobGVuZ3RoKCkp
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNDkwLDcgKzQ5MCw3IEBAIGJvb2wgSlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5RGVz
Y3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0CiAgICAgCiAgICAg
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpOwogICAg
IGlmIChpbmRleCAmJiBpbmRleC52YWx1ZSgpIDwgbGVuZ3RoKCkpIHsKLSAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKGdldEluZGV4KGV4ZWMsIGluZGV4LnZhbHVlKCkpLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7Cisg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihnZXRJbmRleChnbG9iYWxPYmplY3QsIGlu
ZGV4LnZhbHVlKCkpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCmluZGV4IGVhNjE4NzEyMzc5MzM2
YjRjMDIyNmUyNzY0ZDBhYmQ2ZTUwZTM2NmUuLmI5MDZmMzBiMTFmNjA4NWZhY2MwYjE5NGVjNGQz
MmNkZjkzZTg3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaApA
QCAtMTc2LDMwICsxNzYsMzAgQEAgY2xhc3MgSlNTdHJpbmcgOiBwdWJsaWMgSlNDZWxsIHsKIHB1
YmxpYzoKICAgICB+SlNTdHJpbmcoKTsKIAotICAgIElkZW50aWZpZXIgdG9JZGVudGlmaWVyKEV4
ZWNTdGF0ZSopIGNvbnN0OwotICAgIEF0b21TdHJpbmcgdG9BdG9tU3RyaW5nKEV4ZWNTdGF0ZSop
IGNvbnN0OwotICAgIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gdG9FeGlzdGluZ0F0b21TdHJpbmco
RXhlY1N0YXRlKikgY29uc3Q7CisgICAgSWRlbnRpZmllciB0b0lkZW50aWZpZXIoSlNHbG9iYWxP
YmplY3QqKSBjb25zdDsKKyAgICBBdG9tU3RyaW5nIHRvQXRvbVN0cmluZyhKU0dsb2JhbE9iamVj
dCopIGNvbnN0OworICAgIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gdG9FeGlzdGluZ0F0b21TdHJp
bmcoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIAotICAgIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWlu
Z1N0cmluZyB2aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CisgICAg
U3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIHZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhK
U0dsb2JhbE9iamVjdCopIGNvbnN0OwogCi0gICAgaW5saW5lIGJvb2wgZXF1YWwoRXhlY1N0YXRl
KiwgSlNTdHJpbmcqIG90aGVyKSBjb25zdDsKLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlKEV4ZWNT
dGF0ZSopIGNvbnN0OworICAgIGlubGluZSBib29sIGVxdWFsKEpTR2xvYmFsT2JqZWN0KiwgSlNT
dHJpbmcqIG90aGVyKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcmIHZhbHVlKEpTR2xvYmFsT2Jq
ZWN0KikgY29uc3Q7CiAgICAgaW5saW5lIGNvbnN0IFN0cmluZyYgdHJ5R2V0VmFsdWUoYm9vbCBh
bGxvY2F0aW9uQWxsb3dlZCA9IHRydWUpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZ0ltcGwqIHRy
eUdldFZhbHVlSW1wbCgpIGNvbnN0OwogICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3Q7CiAKLSAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoSlNHbG9iYWxP
YmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKICAgICBib29sIHRvQm9vbGVh
bigpIGNvbnN0IHsgcmV0dXJuICEhbGVuZ3RoKCk7IH0KLSAgICBib29sIGdldFByaW1pdGl2ZU51
bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwotICAgIEpT
T2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwotICAg
IGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBib29sIGdldFByaW1pdGl2
ZU51bWJlcihKU0dsb2JhbE9iamVjdCosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7
CisgICAgSlNPYmplY3QqIHRvT2JqZWN0KEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CisgICAgZG91
YmxlIHRvTnVtYmVyKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKLSAgICBib29sIGdldFN0cmlu
Z1Byb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwot
ICAgIGJvb2wgZ2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgYm9vbCBnZXRTdHJpbmdQcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAg
ICBib29sIGdldFN0cmluZ1Byb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoSlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJv
b2wgZ2V0U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWdu
ZWQgaSkgeyByZXR1cm4gaSA8IGxlbmd0aCgpOyB9Ci0gICAgSlNTdHJpbmcqIGdldEluZGV4KEV4
ZWNTdGF0ZSosIHVuc2lnbmVkKTsKKyAgICBKU1N0cmluZyogZ2V0SW5kZXgoSlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCk7CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCkBAIC0yMjEsNyArMjIxLDcgQEAgY2xh
c3MgSlNTdHJpbmcgOiBwdWJsaWMgSlNDZWxsIHsKIHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xh
c3MgSlNWYWx1ZTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZXF1YWxTbG93Q2FzZShF
eGVjU3RhdGUqLCBKU1N0cmluZyogb3RoZXIpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgZXF1YWxTbG93Q2FzZShKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiBvdGhlcikgY29u
c3Q7CiAgICAgYm9vbCBpc1N1YnN0cmluZygpIGNvbnN0OwogCiAgICAgbXV0YWJsZSB1aW50cHRy
X3QgbV9maWJlcjsKQEAgLTIyOSwyMiArMjI5LDIyIEBAIGNsYXNzIEpTU3RyaW5nIDogcHVibGlj
IEpTQ2VsbCB7CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNN
QU1vZGUpOworICAgIHN0YXRpYyBKU1ZhbHVlIHRvVGhpcyhKU0NlbGwqLCBKU0dsb2JhbE9iamVj
dCosIEVDTUFNb2RlKTsKIAotICAgIFN0cmluZ1ZpZXcgdW5zYWZlVmlldyhFeGVjU3RhdGUqKSBj
b25zdDsKKyAgICBTdHJpbmdWaWV3IHVuc2FmZVZpZXcoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsK
IAogICAgIGZyaWVuZCBKU1N0cmluZyoganNTdHJpbmcoVk0mLCBjb25zdCBTdHJpbmcmKTsKLSAg
ICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJp
bmcqKTsKLSAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYsIEpTU3RyaW5nKik7Ci0gICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3Rh
dGUqLCBKU1N0cmluZyosIGNvbnN0IFN0cmluZyYpOwotICAgIGZyaWVuZCBKU1N0cmluZyoganNT
dHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgZnJp
ZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwg
SlNTdHJpbmcqKTsKLSAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIGZyaWVuZCBK
U1N0cmluZyoganNTdHJpbmcoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7
CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cmluZyYsIEpTU3RyaW5nKik7CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhKU0dsb2Jh
bE9iamVjdCosIEpTU3RyaW5nKiwgY29uc3QgU3RyaW5nJik7CisgICAgZnJpZW5kIEpTU3RyaW5n
KiBqc1N0cmluZyhKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYp
OworICAgIGZyaWVuZCBKU1N0cmluZyoganNTdHJpbmcoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmlu
ZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKKyAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5n
KEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJik7CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhWTSYs
IFVDaGFyKTsKICAgICBmcmllbmQgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhWTSYsIGNv
bnN0IFN0cmluZyYpOwogICAgIGZyaWVuZCBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKFZN
JiwgU3RyaW5nJiYpOwogICAgIGZyaWVuZCBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0mLCBjb25z
dCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQpOwotICAgIGZyaWVuZCBKU1N0cmluZyoganNT
dWJzdHJpbmcoVk0mLCBFeGVjU3RhdGUqLCBKU1N0cmluZyosIHVuc2lnbmVkLCB1bnNpZ25lZCk7
CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNTdHJpbmcqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwogICAgIGZyaWVuZCBKU1N0cmluZyoganNT
dWJzdHJpbmdPZlJlc29sdmVkKFZNJiwgR0NEZWZlcnJhbENvbnRleHQqLCBKU1N0cmluZyosIHVu
c2lnbmVkLCB1bnNpZ25lZCk7CiAgICAgZnJpZW5kIEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKFZN
JiwgY29uc3QgU3RyaW5nJik7CiB9OwpAQCAtNTc2LDI0ICs1NzYsMjMgQEAgY2xhc3MgSlNSb3Bl
U3RyaW5nIGZpbmFsIDogcHVibGljIEpTU3RyaW5nIHsKICAgICAgICAgcmV0dXJuIG5ld1N0cmlu
ZzsKICAgICB9CiAKLSAgICBmcmllbmQgSlNWYWx1ZSBqc1N0cmluZ0Zyb21SZWdpc3RlckFycmF5
KEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiwgdW5zaWduZWQpOwotICAgIGZyaWVuZCBKU1ZhbHVlIGpz
U3RyaW5nRnJvbUFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBmcmllbmQgSlNW
YWx1ZSBqc1N0cmluZ0Zyb21SZWdpc3RlckFycmF5KEpTR2xvYmFsT2JqZWN0KiwgUmVnaXN0ZXIq
LCB1bnNpZ25lZCk7CiAKICAgICAvLyBJZiBudWxsT3JFeGVjRm9yT09NIGlzIG51bGwsIHJlc29s
dmVSb3BlKCkgd2lsbCBiZSBkbyBub3RoaW5nIGluIHRoZSBldmVudCBvZiBhbiBPT00gZXJyb3Iu
CiAgICAgLy8gVGhlIHJvcGUgdmFsdWUgd2lsbCByZW1haW4gYSBudWxsIHN0cmluZyBpbiB0aGF0
IGNhc2UuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU3RyaW5nJiByZXNvbHZlUm9wZShF
eGVjU3RhdGUqIG51bGxPckV4ZWNGb3JPT00pIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0aW9uPiBjb25zdCBTdHJpbmcmIHJlc29sdmVSb3BlV2l0aEZ1bmN0aW9uKEV4ZWNTdGF0
ZSogbnVsbE9yRXhlY0Zvck9PTSwgRnVuY3Rpb24mJikgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgQXRvbVN0cmluZyByZXNvbHZlUm9wZVRvQXRvbVN0cmluZyhFeGVjU3RhdGUqKSBjb25z
dDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IHJlc29sdmVS
b3BlVG9FeGlzdGluZ0F0b21TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgY29uc3QgU3RyaW5nJiByZXNvbHZlUm9wZShKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
bj4gY29uc3QgU3RyaW5nJiByZXNvbHZlUm9wZVdpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCog
bnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBGdW5jdGlvbiYmKSBjb25zdDsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBBdG9tU3RyaW5nIHJlc29sdmVSb3BlVG9BdG9tU3RyaW5nKEpTR2xvYmFsT2Jq
ZWN0KikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPEF0b21TdHJpbmdJbXBs
PiByZXNvbHZlUm9wZVRvRXhpc3RpbmdBdG9tU3RyaW5nKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7
CiAgICAgdm9pZCByZXNvbHZlUm9wZVNsb3dDYXNlOChMQ2hhciopIGNvbnN0OwogICAgIHZvaWQg
cmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhciopIGNvbnN0OwotICAgIHZvaWQgb3V0T2ZNZW1vcnko
RXhlY1N0YXRlKiBudWxsT3JFeGVjRm9yT09NKSBjb25zdDsKKyAgICB2b2lkIG91dE9mTWVtb3J5
KEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pIGNvbnN0OwogICAgIHZv
aWQgcmVzb2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIqKSBjb25zdDsKICAgICB2b2lkIHJlc29sdmVS
b3BlSW50ZXJuYWw4Tm9TdWJzdHJpbmcoTENoYXIqKSBjb25zdDsKICAgICB2b2lkIHJlc29sdmVS
b3BlSW50ZXJuYWwxNihVQ2hhciopIGNvbnN0OwogICAgIHZvaWQgcmVzb2x2ZVJvcGVJbnRlcm5h
bDE2Tm9TdWJzdHJpbmcoVUNoYXIqKSBjb25zdDsKLSAgICBTdHJpbmdWaWV3IHVuc2FmZVZpZXco
RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgU3RyaW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIHZp
ZXdXaXRoVW5kZXJseWluZ1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBTdHJpbmdWaWV3
IHVuc2FmZVZpZXcoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKyAgICBTdHJpbmdWaWV3V2l0aFVu
ZGVybHlpbmdTdHJpbmcgdmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKEpTR2xvYmFsT2JqZWN0Kikg
Y29uc3Q7CiAKICAgICBKU1N0cmluZyogZmliZXIwKCkgY29uc3QKICAgICB7CkBAIC02NjMsMTQg
KzY2MiwxNCBAQCBjbGFzcyBKU1JvcGVTdHJpbmcgZmluYWwgOiBwdWJsaWMgSlNTdHJpbmcgewog
ICAgIHN0YXRpY19hc3NlcnQoc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggPj0gMiwgIiIpOwogICAg
IG11dGFibGUgQ29tcGFjdEZpYmVycyBtX2NvbXBhY3RGaWJlcnM7CiAKLSAgICBmcmllbmQgSlNT
dHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKLSAgICBm
cmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEpTU3Ry
aW5nKik7Ci0gICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmlu
ZyosIGNvbnN0IFN0cmluZyYpOwotICAgIGZyaWVuZCBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0
YXRlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgZnJpZW5kIEpTU3RyaW5n
KiBqc1N0cmluZyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsK
LSAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIGZyaWVuZCBKU1N0cmluZyoganNT
dHJpbmcoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7CisgICAgZnJpZW5k
IEpTU3RyaW5nKiBqc1N0cmluZyhKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYsIEpTU3Ry
aW5nKik7CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhKU0dsb2JhbE9iamVjdCosIEpT
U3RyaW5nKiwgY29uc3QgU3RyaW5nJik7CisgICAgZnJpZW5kIEpTU3RyaW5nKiBqc1N0cmluZyhK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIGZyaWVu
ZCBKU1N0cmluZyoganNTdHJpbmcoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIEpTU3RyaW5n
KiwgSlNTdHJpbmcqKTsKKyAgICBmcmllbmQgSlNTdHJpbmcqIGpzU3RyaW5nKEpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAgICAg
ZnJpZW5kIEpTU3RyaW5nKiBqc1N1YnN0cmluZ09mUmVzb2x2ZWQoVk0mLCBHQ0RlZmVycmFsQ29u
dGV4dCosIEpTU3RyaW5nKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKLSAgICBmcmllbmQgSlNTdHJp
bmcqIGpzU3Vic3RyaW5nKFZNJiwgRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCB1bnNpZ25lZCwgdW5z
aWduZWQpOworICAgIGZyaWVuZCBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTU3RyaW5nKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKIH07CiAKIEpTX0VYUE9SVF9Q
UklWQVRFIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZVNsb3dDYXNlKFZNJiwgU3RyaW5nSW1w
bCYpOwpAQCAtNzQwLDQxICs3MzksNDEgQEAgaW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxT
dHJpbmcoVk0mIHZtLCBTdHJpbmcmJiBzKQogICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKHZt
LCBzLnJlbGVhc2VJbXBsKCkucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
SWRlbnRpZmllciBKU1N0cmluZzo6dG9JZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
K0FMV0FZU19JTkxJTkUgSWRlbnRpZmllciBKU1N0cmluZzo6dG9JZGVudGlmaWVyKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBBdG9tU3RyaW5nIGF0b21TdHJpbmcgPSB0b0F0b21T
dHJpbmcoZXhlYyk7CisgICAgQXRvbVN0cmluZyBhdG9tU3RyaW5nID0gdG9BdG9tU3RyaW5nKGds
b2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBy
ZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgYXRvbVN0cmluZyk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgQXRvbVN0cmluZyBKU1N0cmluZzo6dG9BdG9tU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKK0FMV0FZU19JTkxJTkUgQXRvbVN0cmluZyBKU1N0cmluZzo6dG9BdG9tU3RyaW5n
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRl
REZHRG9lc0dDKQogICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhwZWN0RG9lc0dD
KCkpOwogICAgIGlmIChpc1JvcGUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEpTUm9wZVN0cmluZyo+KHRoaXMpLT5yZXNvbHZlUm9wZVRvQXRvbVN0cmluZyhleGVjKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTUm9wZVN0cmluZyo+KHRoaXMpLT5yZXNv
bHZlUm9wZVRvQXRvbVN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBBdG9tU3RyaW5n
KHZhbHVlSW50ZXJuYWwoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgUmVmUHRyPEF0b21TdHJpbmdJ
bXBsPiBKU1N0cmluZzo6dG9FeGlzdGluZ0F0b21TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25z
dAorQUxXQVlTX0lOTElORSBSZWZQdHI8QXRvbVN0cmluZ0ltcGw+IEpTU3RyaW5nOjp0b0V4aXN0
aW5nQXRvbVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewogICAg
IGlmICh2YWxpZGF0ZURGR0RvZXNHQykKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5oZWFw
LmV4cGVjdERvZXNHQygpKTsKICAgICBpZiAoaXNSb3BlKCkpCi0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGVUb0V4aXN0aW5n
QXRvbVN0cmluZyhleGVjKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTUm9w
ZVN0cmluZyo+KHRoaXMpLT5yZXNvbHZlUm9wZVRvRXhpc3RpbmdBdG9tU3RyaW5nKGdsb2JhbE9i
amVjdCk7CiAgICAgaWYgKHZhbHVlSW50ZXJuYWwoKS5pbXBsKCktPmlzQXRvbSgpKQogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPih2YWx1ZUludGVybmFsKCkuaW1w
bCgpKTsKICAgICByZXR1cm4gQXRvbVN0cmluZ0ltcGw6Omxvb2tVcCh2YWx1ZUludGVybmFsKCku
aW1wbCgpKTsKIH0KIAotaW5saW5lIGNvbnN0IFN0cmluZyYgSlNTdHJpbmc6OnZhbHVlKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK2lubGluZSBjb25zdCBTdHJpbmcmIEpTU3RyaW5nOjp2YWx1ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGlmICh2YWxpZGF0ZURG
R0RvZXNHQykKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5oZWFwLmV4cGVjdERvZXNHQygp
KTsKICAgICBpZiAoaXNSb3BlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBK
U1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGUoZXhlYyk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGUoZ2xvYmFs
T2JqZWN0KTsKICAgICByZXR1cm4gdmFsdWVJbnRlcm5hbCgpOwogfQogCkBAIC03ODQsNyArNzgz
LDcgQEAgaW5saW5lIGNvbnN0IFN0cmluZyYgSlNTdHJpbmc6OnRyeUdldFZhbHVlKGJvb2wgYWxs
b2NhdGlvbkFsbG93ZWQpIGNvbnN0CiAgICAgICAgIGlmICh2YWxpZGF0ZURGR0RvZXNHQykKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuaGVhcC5leHBlY3REb2VzR0MoKSk7CiAgICAg
ICAgIGlmIChpc1JvcGUoKSkgewotICAgICAgICAgICAgLy8gUGFzcyBudWxscHRyIGZvciB0aGUg
RXhlY1N0YXRlIHNvIHRoYXQgcmVzb2x2ZVJvcGUgZG9lcyBub3QgdGhyb3cgaW4gdGhlIGV2ZW50
IG9mIGFuIE9PTSBlcnJvci4KKyAgICAgICAgICAgIC8vIFBhc3MgbnVsbHB0ciBmb3IgdGhlIEpT
R2xvYmFsT2JqZWN0IHNvIHRoYXQgcmVzb2x2ZVJvcGUgZG9lcyBub3QgdGhyb3cgaW4gdGhlIGV2
ZW50IG9mIGFuIE9PTSBlcnJvci4KICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBKU1JvcGVTdHJpbmcqPih0aGlzKS0+cmVzb2x2ZVJvcGUobnVsbHB0cik7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UKQEAgLTc5MiwxMiArNzkxLDEyIEBAIGlubGluZSBjb25zdCBTdHJpbmcmIEpT
U3RyaW5nOjp0cnlHZXRWYWx1ZShib29sIGFsbG9jYXRpb25BbGxvd2VkKSBjb25zdAogICAgIHJl
dHVybiB2YWx1ZUludGVybmFsKCk7CiB9CiAKLWlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6Omdl
dEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKK2lubGluZSBKU1N0cmluZyogSlNT
dHJpbmc6OmdldEluZGV4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBB
U1NFUlQoY2FuR2V0SW5kZXgoaSkpOwotICAgIFN0cmluZ1ZpZXcgdmlldyA9IHVuc2FmZVZpZXco
ZXhlYyk7CisgICAgU3RyaW5nVmlldyB2aWV3ID0gdW5zYWZlVmlldyhnbG9iYWxPYmplY3QpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHJldHVybiBqc1Np
bmdsZUNoYXJhY3RlclN0cmluZyh2bSwgdmlld1tpXSk7CiB9CkBAIC04MTUsNyArODE0LDcgQEAg
aW5saW5lIEpTU3RyaW5nKiBqc1N0cmluZyhWTSYgdm0sIGNvbnN0IFN0cmluZyYgcykKICAgICBy
ZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSh2bSwgKnMuaW1wbCgpKTsKIH0KIAotaW5saW5lIEpTU3Ry
aW5nKiBqc1N1YnN0cmluZyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGJhc2Us
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoraW5saW5lIEpTU3RyaW5nKiBqc1N1
YnN0cmluZyhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBi
YXNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTgzNiw3ICs4MzUsNyBAQCBpbmxpbmUg
SlNTdHJpbmcqIGpzU3Vic3RyaW5nKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyog
YmFzZSwgdW5zaWduZWQgbwogICAgICAgICBvZmZzZXQgPSBiYXNlUm9wZS0+c3Vic3RyaW5nT2Zm
c2V0KCkgKyBvZmZzZXQ7CiAgICAgICAgIEFTU0VSVCghYmFzZS0+aXNSb3BlKCkpOwogICAgIH0g
ZWxzZSBpZiAoYmFzZS0+aXNSb3BlKCkpIHsKLSAgICAgICAganNDYXN0PEpTUm9wZVN0cmluZyo+
KGJhc2UpLT5yZXNvbHZlUm9wZShleGVjKTsKKyAgICAgICAganNDYXN0PEpTUm9wZVN0cmluZyo+
KGJhc2UpLT5yZXNvbHZlUm9wZShnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAgICAgcmV0dXJuIGpzU3Vic3RyaW5nT2ZS
ZXNvbHZlZCh2bSwgbnVsbHB0ciwgYmFzZSwgb2Zmc2V0LCBsZW5ndGgpOwpAQCAtODY2LDkgKzg2
NSw5IEBAIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmdPZlJlc29sdmVkKFZNJiB2bSwgSlNT
dHJpbmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zCiAgICAgcmV0dXJuIGpzU3Vic3RyaW5nT2ZS
ZXNvbHZlZCh2bSwgbnVsbHB0ciwgcywgb2Zmc2V0LCBsZW5ndGgpOwogfQogCi1pbmxpbmUgSlNT
dHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoraW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMtPnZtKCks
IGV4ZWMsIHMsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXR1cm4ganNTdWJzdHJpbmcoZ2V0Vk0o
Z2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LCBzLCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKIGlu
bGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpAQCAtOTAyLDkgKzkwMSw5IEBAIGlubGluZSBK
U1N0cmluZyoganNPd25lZFN0cmluZyhWTSYgdm0sIGNvbnN0IFN0cmluZyYgcykKICAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZUhhc090aGVyT3duZXIodm0sICpzLmltcGwoKSk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nJiBzKQorQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2Fj
aGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBzKQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsK
ICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gcy5pbXBsKCk7CiAgICAgaWYgKCFzdHJpbmdJ
bXBsIHx8ICFzdHJpbmdJbXBsLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJp
bmcodm0pOwpAQCAtOTIzLDkgKzkyMiw5IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3Ry
aW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQogICAgIHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZVNsb3dDYXNlKHZtLCAqc3RyaW5nSW1wbCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgYm9vbCBKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorQUxX
QVlTX0lOTElORSBib29sIEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0
Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkg
ewpAQCAtOTM1LDcgKzkzNCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6Z2V0U3Ry
aW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lCiAKICAgICBPcHRp
b25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSk7CiAgICAgaWYg
KGluZGV4ICYmIGluZGV4LnZhbHVlKCkgPCBsZW5ndGgoKSkgewotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gZ2V0SW5kZXgoZXhlYywgaW5kZXgudmFsdWUoKSk7CisgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBnZXRJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCkpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
cywgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05NDQsMTMgKzk0MywxMyBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotQUxXQVlT
X0lOTElORSBib29sIEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK0FMV0FZU19J
TkxJTkUgYm9vbCBKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBpZiAocHJvcGVydHlOYW1lIDwgbGVuZ3RoKCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGdldEluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBn
ZXRJbmRleChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSwg
dmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk2OSw3ICs5NjgsNyBAQCBpbmxpbmUg
Ym9vbCBpc0pTU3RyaW5nKEpTVmFsdWUgdikKICAgICByZXR1cm4gdi5pc0NlbGwoKSAmJiBpc0pT
U3RyaW5nKHYuYXNDZWxsKCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNSb3Bl
U3RyaW5nOjp1bnNhZmVWaWV3KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0FMV0FZU19JTkxJTkUg
U3RyaW5nVmlldyBKU1JvcGVTdHJpbmc6OnVuc2FmZVZpZXcoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkgY29uc3QKIHsKICAgICBpZiAodmFsaWRhdGVERkdEb2VzR0MpCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCkuaGVhcC5leHBlY3REb2VzR0MoKSk7CkBAIC05NzksMTAgKzk3OCwx
MCBAQCBBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNSb3BlU3RyaW5nOjp1bnNhZmVWaWV3KEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgIHJldHVybiBTdHJpbmdWaWV3KGJhc2Uu
Y2hhcmFjdGVyczgoKSArIHN1YnN0cmluZ09mZnNldCgpLCBsZW5ndGgoKSk7CiAgICAgICAgIHJl
dHVybiBTdHJpbmdWaWV3KGJhc2UuY2hhcmFjdGVyczE2KCkgKyBzdWJzdHJpbmdPZmZzZXQoKSwg
bGVuZ3RoKCkpOwogICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZVJvcGUoZXhlYyk7CisgICAgcmV0
dXJuIHJlc29sdmVSb3BlKGdsb2JhbE9iamVjdCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgU3RyaW5n
Vmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIEpTUm9wZVN0cmluZzo6dmlld1dpdGhVbmRlcmx5aW5n
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0FMV0FZU19JTkxJTkUgU3RyaW5nVmlld1dp
dGhVbmRlcmx5aW5nU3RyaW5nIEpTUm9wZVN0cmluZzo6dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5n
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgaWYgKHZhbGlkYXRl
REZHRG9lc0dDKQogICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhwZWN0RG9lc0dD
KCkpOwpAQCAtOTkyLDIzICs5OTEsMjMgQEAgQUxXQVlTX0lOTElORSBTdHJpbmdWaWV3V2l0aFVu
ZGVybHlpbmdTdHJpbmcgSlNSb3BlU3RyaW5nOjp2aWV3V2l0aFVuZGVybHlpbmdTdHIKICAgICAg
ICAgICAgIHJldHVybiB7IHsgYmFzZS5jaGFyYWN0ZXJzOCgpICsgc3Vic3RyaW5nT2Zmc2V0KCks
IGxlbmd0aCgpIH0sIGJhc2UgfTsKICAgICAgICAgcmV0dXJuIHsgeyBiYXNlLmNoYXJhY3RlcnMx
NigpICsgc3Vic3RyaW5nT2Zmc2V0KCksIGxlbmd0aCgpIH0sIGJhc2UgfTsKICAgICB9Ci0gICAg
YXV0byYgc3RyaW5nID0gcmVzb2x2ZVJvcGUoZXhlYyk7CisgICAgYXV0byYgc3RyaW5nID0gcmVz
b2x2ZVJvcGUoZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4geyBzdHJpbmcsIHN0cmluZyB9Owog
fQogCi1BTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXcgSlNTdHJpbmc6OnVuc2FmZVZpZXcoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorQUxXQVlTX0lOTElORSBTdHJpbmdWaWV3IEpTU3RyaW5nOjp1bnNh
ZmVWaWV3KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgaWYgKHZh
bGlkYXRlREZHRG9lc0dDKQogICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLmhlYXAuZXhwZWN0
RG9lc0dDKCkpOwogICAgIGlmIChpc1JvcGUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEpTUm9wZVN0cmluZyo+KHRoaXMpLT51bnNhZmVWaWV3KGV4ZWMpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nKj4odGhpcyktPnVuc2FmZVZpZXco
Z2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gdmFsdWVJbnRlcm5hbCgpOwogfQogCi1BTFdBWVNf
SU5MSU5FIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBKU1N0cmluZzo6dmlld1dpdGhV
bmRlcmx5aW5nU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0FMV0FZU19JTkxJTkUgU3Ry
aW5nVmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nIEpTU3RyaW5nOjp2aWV3V2l0aFVuZGVybHlpbmdT
dHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBpZiAoaXNS
b3BlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1JvcGVTdHJpbmcmPigq
dGhpcykudmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKGV4ZWMpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgSlNSb3BlU3RyaW5nJj4oKnRoaXMpLnZpZXdXaXRoVW5kZXJseWluZ1N0
cmluZyhnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiB7IHZhbHVlSW50ZXJuYWwoKSwgdmFsdWVJ
bnRlcm5hbCgpIH07CiB9CiAKQEAgLTEwMTksMzggKzEwMTgsMzggQEAgaW5saW5lIGJvb2wgSlNT
dHJpbmc6OmlzU3Vic3RyaW5nKCkgY29uc3QKIAogLy8gLS0tIEpTVmFsdWUgaW5saW5lcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBib29sIEpTVmFsdWU6OnRvQm9vbGVh
bihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitpbmxpbmUgYm9vbCBKU1ZhbHVlOjp0b0Jvb2xlYW4o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBpZiAoaXNJbnQzMigp
KQogICAgICAgICByZXR1cm4gYXNJbnQzMigpOwogICAgIGlmIChpc0RvdWJsZSgpKQogICAgICAg
ICByZXR1cm4gYXNEb3VibGUoKSA+IDAuMCB8fCBhc0RvdWJsZSgpIDwgMC4wOyAvLyBmYWxzZSBm
b3IgTmFOCiAgICAgaWYgKGlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gYXNDZWxsKCktPnRvQm9v
bGVhbihleGVjKTsKKyAgICAgICAgcmV0dXJuIGFzQ2VsbCgpLT50b0Jvb2xlYW4oZ2xvYmFsT2Jq
ZWN0KTsKICAgICByZXR1cm4gaXNUcnVlKCk7IC8vIGZhbHNlLCBudWxsLCBhbmQgdW5kZWZpbmVk
IGFsbCBjb252ZXJ0IHRvIGZhbHNlLgogfQogCi1pbmxpbmUgSlNTdHJpbmcqIEpTVmFsdWU6OnRv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK2lubGluZSBKU1N0cmluZyogSlNWYWx1ZTo6
dG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICBpZiAo
aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKGFzQ2VsbCgpKTsKICAgICBib29s
IHJldHVybkVtcHR5U3RyaW5nT25FcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIHRvU3RyaW5nU2xv
d0Nhc2UoZXhlYywgcmV0dXJuRW1wdHlTdHJpbmdPbkVycm9yKTsKKyAgICByZXR1cm4gdG9TdHJp
bmdTbG93Q2FzZShnbG9iYWxPYmplY3QsIHJldHVybkVtcHR5U3RyaW5nT25FcnJvcik7CiB9CiAK
LWlubGluZSBKU1N0cmluZyogSlNWYWx1ZTo6dG9TdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAoraW5saW5lIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ09yTnVsbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGlmIChpc1N0cmluZygpKQogICAg
ICAgICByZXR1cm4gYXNTdHJpbmcoYXNDZWxsKCkpOwogICAgIGJvb2wgcmV0dXJuRW1wdHlTdHJp
bmdPbkVycm9yID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRvU3RyaW5nU2xvd0Nhc2UoZXhlYywgcmV0
dXJuRW1wdHlTdHJpbmdPbkVycm9yKTsKKyAgICByZXR1cm4gdG9TdHJpbmdTbG93Q2FzZShnbG9i
YWxPYmplY3QsIHJldHVybkVtcHR5U3RyaW5nT25FcnJvcik7CiB9CiAKLWlubGluZSBTdHJpbmcg
SlNWYWx1ZTo6dG9XVEZTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoraW5saW5lIFN0cmlu
ZyBKU1ZhbHVlOjp0b1dURlN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25z
dAogewogICAgIGlmIChpc1N0cmluZygpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNT
dHJpbmcqPihhc0NlbGwoKSktPnZhbHVlKGV4ZWMpOwotICAgIHJldHVybiB0b1dURlN0cmluZ1Ns
b3dDYXNlKGV4ZWMpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0Nl
bGwoKSktPnZhbHVlKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHRvV1RGU3RyaW5nU2xvd0Nh
c2UoZ2xvYmFsT2JqZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0lubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSW5saW5lcy5oCmluZGV4IDA1YmZhNTYxZDgz
YTc1ODk5Mjg3ZDdkZDE4MzMwM2U3YzZlNWNmZDkuLmU3YWYwZDczODhhMWE3MjMyNjRjOTc5MDZj
YWQ4NTUxM2E4ZGRhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSW5saW5lcy5oCkBAIC0zNiwxMCArMzYsMTAgQEAgaW5saW5lIEpTU3RyaW5nOjp+SlNT
dHJpbmcoKQogICAgIHZhbHVlSW50ZXJuYWwoKS5+U3RyaW5nKCk7CiB9CiAKLWJvb2wgSlNTdHJp
bmc6OmVxdWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIG90aGVyKSBjb25zdAorYm9vbCBK
U1N0cmluZzo6ZXF1YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIG90
aGVyKSBjb25zdAogewogICAgIGlmIChpc1JvcGUoKSB8fCBvdGhlci0+aXNSb3BlKCkpCi0gICAg
ICAgIHJldHVybiBlcXVhbFNsb3dDYXNlKGV4ZWMsIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGVx
dWFsU2xvd0Nhc2UoZ2xvYmFsT2JqZWN0LCBvdGhlcik7CiAgICAgcmV0dXJuIFdURjo6ZXF1YWwo
KnZhbHVlSW50ZXJuYWwoKS5pbXBsKCksICpvdGhlci0+dmFsdWVJbnRlcm5hbCgpLmltcGwoKSk7
CiB9CiAKQEAgLTUwLDI3ICs1MCwyNyBAQCBpbmxpbmUgSlNWYWx1ZSBqc01ha2VOb250cml2aWFs
U3RyaW5nKFZNJiB2bSwgU3RyaW5nVHlwZSYmIHN0cmluZykKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgU3RyaW5nVHlwZSwgdHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+Ci1pbmxpbmUgSlNWYWx1ZSBq
c01ha2VOb250cml2aWFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nVHlwZSYmIHN0cmlu
ZywgU3RyaW5nVHlwZXMmJi4uLiBzdHJpbmdzKQoraW5saW5lIEpTVmFsdWUganNNYWtlTm9udHJp
dmlhbFN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmdUeXBlJiYgc3Ry
aW5nLCBTdHJpbmdUeXBlcyYmLi4uIHN0cmluZ3MpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmlu
ZyhzdGQ6OmZvcndhcmQ8U3RyaW5nVHlwZT4oc3RyaW5nKSwgc3RkOjpmb3J3YXJkPFN0cmluZ1R5
cGVzPihzdHJpbmdzKS4uLik7CiAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJu
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICBBU1NFUlQo
cmVzdWx0Lmxlbmd0aCgpIDw9IEpTU3RyaW5nOjpNYXhMZW5ndGgpOwogICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcodm0sIFdURk1vdmUocmVzdWx0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIEpTU3RyaW5nKiByZXBlYXRDaGFyYWN0ZXIoRXhl
Y1N0YXRlJiBleGVjLCBDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlciwgdW5zaWduZWQgcmVwZWF0Q291
bnQpCitpbmxpbmUgSlNTdHJpbmcqIHJlcGVhdENoYXJhY3RlcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlciwgdW5zaWduZWQgcmVwZWF0Q291bnQp
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBD
aGFyYWN0ZXJUeXBlKiBidWZmZXIgPSBudWxscHRyOwogICAgIGF1dG8gaW1wbCA9IFN0cmluZ0lt
cGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVwZWF0Q291bnQsIGJ1ZmZlcik7CiAgICAgaWYg
KCFpbXBsKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcigmZXhlYywgc2NvcGUpOwor
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAppbmRleCBlYmM5ZjU3MTYyMTdmZWJlOGI5
NWRiNDQ5NDFjNzA5NTVkOTM2OTI5Li4zNTFkNDcwNzkxYjdmOWJmM2QxMDJiOGI4MDY3NDhlZjg3
ZGQyMTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z0l0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z0l0ZXJhdG9yLmNwcApAQCAtNDIsMTggKzQyLDE4IEBAIHZvaWQgSlNTdHJpbmdJdGVyYXRvcjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiBpdGVyYXRl
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zdHJp
bmdJdGVyYXRvck5leHRJbmRleFByaXZhdGVOYW1lKCksIGpzTnVtYmVyKDApKTsKIH0KIAotSlNW
YWx1ZSBKU1N0cmluZ0l0ZXJhdG9yOjppdGVyYXRlZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK0pTVmFsdWUgSlNTdHJpbmdJdGVyYXRvcjo6aXRlcmF0ZWRWYWx1ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIHJldHVybiBnZXREaXJlY3QoZXhlYy0+dm0o
KSwgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pdGVyYXRlZFN0cmlu
Z1ByaXZhdGVOYW1lKCkpOworICAgIHJldHVybiBnZXREaXJlY3QoZ2xvYmFsT2JqZWN0LT52bSgp
LCBnbG9iYWxPYmplY3QtPnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaXRlcmF0
ZWRTdHJpbmdQcml2YXRlTmFtZSgpKTsKIH0KIAotSlNTdHJpbmdJdGVyYXRvciogSlNTdHJpbmdJ
dGVyYXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBleGVjKQorSlNTdHJpbmdJdGVyYXRvciogSlNTdHJp
bmdJdGVyYXRvcjo6Y2xvbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBKU1ZhbHVlIGl0ZXJhdGVkU3RyaW5nID0gZ2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5pdGVyYXRlZFN0cmluZ1ByaXZhdGVOYW1lKCkpOwogICAgIEpTVmFs
dWUgbmV4dEluZGV4ID0gZ2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5zdHJpbmdJdGVyYXRvck5leHRJbmRleFByaXZhdGVOYW1lKCkpOwogCi0gICAgYXV0byBj
bG9uZSA9IEpTU3RyaW5nSXRlcmF0b3I6OmNyZWF0ZShleGVjLCBleGVjLT5qc0NhbGxlZSgpLT5n
bG9iYWxPYmplY3Qodm0pLT5zdHJpbmdJdGVyYXRvclN0cnVjdHVyZSgpLCBhc1N0cmluZyhpdGVy
YXRlZFN0cmluZykpOworICAgIGF1dG8gY2xvbmUgPSBKU1N0cmluZ0l0ZXJhdG9yOjpjcmVhdGUo
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnN0cmluZ0l0ZXJhdG9yU3RydWN0dXJlKCksIGFz
U3RyaW5nKGl0ZXJhdGVkU3RyaW5nKSk7CiAgICAgY2xvbmUtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc3RyaW5nSXRlcmF0b3JOZXh0SW5kZXhQcml2YXRl
TmFtZSgpLCBuZXh0SW5kZXgpOwogICAgIHJldHVybiBjbG9uZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSXRlcmF0b3IuaAppbmRleCAzNTcyMzFlNWYy
YWY2YzI1NWZlZjBjYTViNmI5NzQ5ZmUzMGY2YzRhLi5iZmQ5NzE2ZjliZmQxMzM4N2VhZGU0ZDcz
NTZhZTU0NzRlZWYwNjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ0l0ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmdJdGVyYXRvci5oCkBAIC00MCwxNiArNDAsMTYgQEAgY2xhc3MgSlNTdHJpbmdJdGVy
YXRvciBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBK
U1N0cmluZ0l0ZXJhdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNTdHJpbmcqIGl0ZXJhdGVkU3RyaW5nKQorICAgIHN0YXRpYyBKU1N0cmluZ0l0ZXJh
dG9yKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTU3RyaW5nKiBpdGVyYXRlZFN0cmluZykKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAg
ICAgIEpTU3RyaW5nSXRlcmF0b3IqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNTdHJpbmdJdGVyYXRvcj4odm0uaGVhcCkpIEpTU3RyaW5nSXRlcmF0b3Iodm0sIHN0cnVj
dHVyZSk7CiAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgc3RydWN0dXJlLT5n
bG9iYWxPYmplY3QoKSwgaXRlcmF0ZWRTdHJpbmcpOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7
CiAgICAgfQogCi0gICAgSlNWYWx1ZSBpdGVyYXRlZFZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0Owot
ICAgIEpTU3RyaW5nSXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOworICAgIEpTVmFsdWUgaXRl
cmF0ZWRWYWx1ZShKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpTU3RyaW5nSXRlcmF0b3Iq
IGNsb25lKEpTR2xvYmFsT2JqZWN0Kik7CiAKIHByaXZhdGU6CiAgICAgSlNTdHJpbmdJdGVyYXRv
cihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCmluZGV4IDExZmU0ODNmYTE4ZGRhNDQ0M2M0
NDA4N2Q1ODM1M2I0Mjk2NjdlNzUuLjM3MTgyMGY1NTkwYzA0ODY1MTg0NWQwNGNiMzEzMjkxNjZi
NGEzYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
Sm9pbmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pv
aW5lci5jcHAKQEAgLTc5LDkgKzc5LDkgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgam9pblN0cmlu
Z3MoY29uc3QgVmVjdG9yPFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZz4mIHMKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgdW5zaWduZWQgSlNTdHJpbmdKb2luZXI6OmpvaW5l
ZExlbmd0aChFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAoraW5saW5lIHVuc2lnbmVkIEpTU3RyaW5n
Sm9pbmVyOjpqb2luZWRMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB1
bnNpZ25lZCBudW1iZXJPZlN0cmluZ3MgPSBtX3N0cmluZ3Muc2l6ZSgpOwpAQCAtOTQsMjAgKzk0
LDIwIEBAIGlubGluZSB1bnNpZ25lZCBKU1N0cmluZ0pvaW5lcjo6am9pbmVkTGVuZ3RoKEV4ZWNT
dGF0ZSYgc3RhdGUpIGNvbnN0CiAKICAgICBpbnQzMl90IHJlc3VsdDsKICAgICBpZiAodG90YWxM
ZW5ndGguc2FmZUdldChyZXN1bHQpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpIHsKLSAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTU3RyaW5nSm9pbmVy
Ojpqb2luKEV4ZWNTdGF0ZSYgc3RhdGUpCitKU1ZhbHVlIEpTU3RyaW5nSm9pbmVyOjpqb2luKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQVNTRVJUKG1fc3RyaW5ncy5zaXplKCkgPD0gbV9z
dHJpbmdzLmNhcGFjaXR5KCkpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gam9pbmVkTGVuZ3Ro
KHN0YXRlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBqb2luZWRMZW5ndGgoZ2xvYmFsT2JqZWN0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCiAgICAgaWYg
KCFsZW5ndGgpCkBAIC0xMjAsNyArMTIwLDcgQEAgSlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6am9p
bihFeGVjU3RhdGUmIHN0YXRlKQogICAgICAgICByZXN1bHQgPSBqb2luU3RyaW5nczxVQ2hhcj4o
bV9zdHJpbmdzLCBtX3NlcGFyYXRvciwgbGVuZ3RoKTsKIAogICAgIGlmIChyZXN1bHQuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoJnN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7CiAKICAgICByZXR1cm4ganNTdHJpbmcodm0sIFdURk1vdmUocmVzdWx0KSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaAppbmRleCBhNTAw
YzQxMzg1YTM2M2ZkOTQ1NjNiM2Y2ZDBiZThkNTI2MWEyOTUxLi4yNmJjOTAwZTY2ZGU1NDU1NDI1
NDI2MDBlOTE2NWI4MjJkZGEyZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0pvaW5lci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nSm9pbmVyLmgKQEAgLTMyLDIzICszMiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgSlNTdHJpbmdKb2luZXIgewogcHVibGljOgotICAgIEpTU3RyaW5nSm9pbmVyKEV4
ZWNTdGF0ZSYsIExDaGFyIHNlcGFyYXRvciwgdW5zaWduZWQgc3RyaW5nQ291bnQpOwotICAgIEpT
U3RyaW5nSm9pbmVyKEV4ZWNTdGF0ZSYsIFN0cmluZ1ZpZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBz
dHJpbmdDb3VudCk7CisgICAgSlNTdHJpbmdKb2luZXIoSlNHbG9iYWxPYmplY3QqLCBMQ2hhciBz
ZXBhcmF0b3IsIHVuc2lnbmVkIHN0cmluZ0NvdW50KTsKKyAgICBKU1N0cmluZ0pvaW5lcihKU0ds
b2JhbE9iamVjdCosIFN0cmluZ1ZpZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBzdHJpbmdDb3VudCk7
CiAgICAgfkpTU3RyaW5nSm9pbmVyKCk7CiAKLSAgICB2b2lkIGFwcGVuZChFeGVjU3RhdGUmLCBK
U1ZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogICAg
IHZvaWQgYXBwZW5kTnVtYmVyKFZNJiwgaW50MzJfdCk7CiAgICAgdm9pZCBhcHBlbmROdW1iZXIo
Vk0mLCBkb3VibGUpOwotICAgIGJvb2wgYXBwZW5kV2l0aG91dFNpZGVFZmZlY3RzKEV4ZWNTdGF0
ZSYsIEpTVmFsdWUpOworICAgIGJvb2wgYXBwZW5kV2l0aG91dFNpZGVFZmZlY3RzKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSk7CiAgICAgdm9pZCBhcHBlbmRFbXB0eVN0cmluZygpOwogCi0gICAg
SlNWYWx1ZSBqb2luKEV4ZWNTdGF0ZSYpOworICAgIEpTVmFsdWUgam9pbihKU0dsb2JhbE9iamVj
dCopOwogCiBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kKFN0cmluZ1ZpZXdXaXRoVW5kZXJseWlu
Z1N0cmluZyYmKTsKICAgICB2b2lkIGFwcGVuZDhCaXQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBhcHBlbmRMaXRlcmFsKGNvbnN0IElkZW50aWZpZXImKTsKLSAgICB1bnNpZ25lZCBqb2luZWRM
ZW5ndGgoRXhlY1N0YXRlJikgY29uc3Q7CisgICAgdW5zaWduZWQgam9pbmVkTGVuZ3RoKEpTR2xv
YmFsT2JqZWN0KikgY29uc3Q7CiAKICAgICBMQ2hhciBtX3NpbmdsZUNoYXJhY3RlclNlcGFyYXRv
cjsKICAgICBTdHJpbmdWaWV3IG1fc2VwYXJhdG9yOwpAQCAtNTcsMjQgKzU3LDI0IEBAIGNsYXNz
IEpTU3RyaW5nSm9pbmVyIHsKICAgICBib29sIG1faXNBbGw4Qml0IHsgdHJ1ZSB9OwogfTsKIAot
aW5saW5lIEpTU3RyaW5nSm9pbmVyOjpKU1N0cmluZ0pvaW5lcihFeGVjU3RhdGUmIHN0YXRlLCBT
dHJpbmdWaWV3IHNlcGFyYXRvciwgdW5zaWduZWQgc3RyaW5nQ291bnQpCitpbmxpbmUgSlNTdHJp
bmdKb2luZXI6OkpTU3RyaW5nSm9pbmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cmluZ1ZpZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBzdHJpbmdDb3VudCkKICAgICA6IG1fc2VwYXJh
dG9yKHNlcGFyYXRvcikKICAgICAsIG1faXNBbGw4Qml0KG1fc2VwYXJhdG9yLmlzOEJpdCgpKQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAo
VU5MSUtFTFkoIW1fc3RyaW5ncy50cnlSZXNlcnZlQ2FwYWNpdHkoc3RyaW5nQ291bnQpKSkKLSAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiB9CiAKLWlubGluZSBKU1N0
cmluZ0pvaW5lcjo6SlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiBzdGF0ZSwgTENoYXIgc2VwYXJh
dG9yLCB1bnNpZ25lZCBzdHJpbmdDb3VudCkKK2lubGluZSBKU1N0cmluZ0pvaW5lcjo6SlNTdHJp
bmdKb2luZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTENoYXIgc2VwYXJhdG9yLCB1
bnNpZ25lZCBzdHJpbmdDb3VudCkKICAgICA6IG1fc2luZ2xlQ2hhcmFjdGVyU2VwYXJhdG9yKHNl
cGFyYXRvcikKICAgICAsIG1fc2VwYXJhdG9yIHsgJm1fc2luZ2xlQ2hhcmFjdGVyU2VwYXJhdG9y
LCAxIH0KIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFtX3N0cmluZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KHN0cmluZ0NvdW50
KSkpCi0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNTdHJpbmdKb2luZXI6OmFwcGVuZChTdHJpbmdWaWV3V2l0aFVuZGVy
bHlpbmdTdHJpbmcmJiBzdHJpbmcpCkBAIC0xMDMsNyArMTAzLDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpTU3RyaW5nSm9pbmVyOjphcHBlbmRFbXB0eVN0cmluZygpCiAgICAgbV9zdHJpbmdzLnVu
Y2hlY2tlZEFwcGVuZCh7IHsgfSwgeyB9IH0pOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNT
dHJpbmdKb2luZXI6OmFwcGVuZFdpdGhvdXRTaWRlRWZmZWN0cyhFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQorQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nSm9pbmVyOjphcHBlbmRX
aXRob3V0U2lkZUVmZmVjdHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgZGlmZmVycyBmcm9tIHVzaW5nIHRo
ZSByZXN1bHQgb2YgSlNWYWx1ZTo6dG9TdHJpbmcgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgogICAg
IC8vIDEpIEl0J3MgaW5saW5lZCBtb3JlIHRoYW4gSlNWYWx1ZTo6dG9TdHJpbmcgaXMuCkBAIC0x
MTgsMjQgKzExOCwyNCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmdKb2luZXI6OmFwcGVu
ZFdpdGhvdXRTaWRlRWZmZWN0cyhFeGVjU3RhdGUmIHN0YXRlLCBKUwogICAgICAgICBpZiAoIXZh
bHVlLmFzQ2VsbCgpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBqc1N0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKLSAgICAgICAgYXBwZW5kKGpzU3RyaW5n
LT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoJnN0YXRlKSk7CisgICAgICAgIGFwcGVuZChqc1N0
cmluZy0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKGdsb2JhbE9iamVjdCkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAg
IGFwcGVuZE51bWJlcihzdGF0ZS52bSgpLCB2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICBhcHBl
bmROdW1iZXIoZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZS5hc0ludDMyKCkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpIHsKLSAgICAgICAg
YXBwZW5kTnVtYmVyKHN0YXRlLnZtKCksIHZhbHVlLmFzRG91YmxlKCkpOworICAgICAgICBhcHBl
bmROdW1iZXIoZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZS5hc0RvdWJsZSgpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh2YWx1ZS5pc1RydWUoKSkgewotICAgICAgICBh
cHBlbmQ4Qml0KHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+dHJ1ZUtleXdvcmQuc3RyaW5nKCkp
OworICAgICAgICBhcHBlbmQ4Qml0KGdsb2JhbE9iamVjdC0+dm0oKS5wcm9wZXJ0eU5hbWVzLT50
cnVlS2V5d29yZC5zdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBp
ZiAodmFsdWUuaXNGYWxzZSgpKSB7Ci0gICAgICAgIGFwcGVuZDhCaXQoc3RhdGUudm0oKS5wcm9w
ZXJ0eU5hbWVzLT5mYWxzZUtleXdvcmQuc3RyaW5nKCkpOworICAgICAgICBhcHBlbmQ4Qml0KGds
b2JhbE9iamVjdC0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5mYWxzZUtleXdvcmQuc3RyaW5nKCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpOwpAQCAtMTQzLDExICsxNDMsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIEpTU3Ry
aW5nSm9pbmVyOjphcHBlbmRXaXRob3V0U2lkZUVmZmVjdHMoRXhlY1N0YXRlJiBzdGF0ZSwgSlMK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTU3RyaW5nSm9pbmVy
OjphcHBlbmQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKU1N0cmluZ0pvaW5lcjo6YXBwZW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYgKCFhcHBlbmRXaXRob3V0U2lkZUVmZmVjdHMoc3Rh
dGUsIHZhbHVlKSkgewotICAgICAgICBKU1N0cmluZyoganNTdHJpbmcgPSB2YWx1ZS50b1N0cmlu
Zygmc3RhdGUpOwotICAgICAgICBhcHBlbmQoanNTdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0
cmluZygmc3RhdGUpKTsKKyAgICBpZiAoIWFwcGVuZFdpdGhvdXRTaWRlRWZmZWN0cyhnbG9iYWxP
YmplY3QsIHZhbHVlKSkgeworICAgICAgICBKU1N0cmluZyoganNTdHJpbmcgPSB2YWx1ZS50b1N0
cmluZyhnbG9iYWxPYmplY3QpOworICAgICAgICBhcHBlbmQoanNTdHJpbmctPnZpZXdXaXRoVW5k
ZXJseWluZ1N0cmluZyhnbG9iYWxPYmplY3QpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKaW5kZXgg
ZDY4YjIzN2Y2YzdhYzkxN2JmMzc4NTNjY2YxYjI4ZGU2MmY3OTY5Ni4uNjMwZTFiNzhiYjIwNmU3
YWY2MTdjM2M2ODJjMzRmNWUxNzU1ZjVkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKQEAgLTQ0LDE4ICs0NCwxOCBA
QCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3N5
bWJvbFRhYmxlKTsKIH0KIAotYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKK2Jvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxs
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1i
b2xUYWJsZU9iamVjdCo+KGNlbGwpOwogICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgp
LT5jb250YWlucyhwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFi
bGVPYmplY3QqPihvYmplY3QpOwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOwpAQCAtNjksNyArNjksNyBA
QCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdAogICAgICAgICB9CiAgICAgfQogCi0gICAgQmFzZTo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaAppbmRleCA1MmRmZDljOTM2NjYxMzI3NDM2ZmQ3MGFhYWI5ZDY0ZWJhY2Iz
MWY5Li45YjcwYzkzMTYxNWZkMWI4N2UzYzU0YWVlNDJlOGJhZTBiOTE0MDg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCkBA
IC00Myw4ICs0Myw4IEBAIGNsYXNzIEpTU3ltYm9sVGFibGVPYmplY3QgOiBwdWJsaWMgSlNTY29w
ZSB7CiAgICAgCiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9zeW1ib2xUYWJsZS5nZXQoKTsgfQogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3ltYm9sVGFibGUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNTeW1ib2xUYWJsZU9iamVjdCwgbV9zeW1ib2xUYWJsZSk7
IH0KIApAQCAtMTYzLDkgKzE2Myw5IEBAIGVudW0gY2xhc3MgU3ltYm9sVGFibGVQdXRNb2RlIHsK
IH07CiAKIHRlbXBsYXRlPFN5bWJvbFRhYmxlUHV0TW9kZSBzeW1ib2xUYWJsZVB1dE1vZGUsIHR5
cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KLWlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0
KFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3dSZWFkT25s
eUVycm9yLCBib29sIGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBib29sJiBwdXRSZXN1bHQpCitpbmxp
bmUgYm9vbCBzeW1ib2xUYWJsZVB1dChTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IsIGJvb2wgaWdub3JlUmVh
ZE9ubHlFcnJvcnMsIGJvb2wmIHB1dFJlc3VsdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbnVsbHB0
cjsKQEAgLTE4Myw3ICsxODMsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dChTeW1ib2xU
YWJsZU9iamVjdFR5cGUqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZQogICAgICAgICBB
U1NFUlQoIWZhc3RFbnRyeS5pc051bGwoKSk7CiAgICAgICAgIGlmIChmYXN0RW50cnkuaXNSZWFk
T25seSgpICYmICFpZ25vcmVSZWFkT25seUVycm9ycykgewogICAgICAgICAgICAgaWYgKHNob3Vs
ZFRocm93UmVhZE9ubHlFcnJvcikKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKICAgICAgICAgICAgIHB1dFJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KQEAgLTIxMCwyMCArMjEwLDIwIEBAIGlubGluZSBib29sIHN5bWJv
bFRhYmxlUHV0KFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KIGlubGlu
ZSBib29sIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KAotICAgIFN5bWJvbFRhYmxl
T2JqZWN0VHlwZSogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsCiAgICAgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IsIGJvb2wg
aWdub3JlUmVhZE9ubHlFcnJvcnMsIGJvb2wmIHB1dFJlc3VsdCkKIHsKICAgICBBU1NFUlQoIUhl
YXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0
KSk7Ci0gICAgcmV0dXJuIHN5bWJvbFRhYmxlUHV0PFN5bWJvbFRhYmxlUHV0TW9kZTo6VG91Y2g+
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3dSZWFkT25seUVy
cm9yLCBpZ25vcmVSZWFkT25seUVycm9ycywgcHV0UmVzdWx0KTsKKyAgICByZXR1cm4gc3ltYm9s
VGFibGVQdXQ8U3ltYm9sVGFibGVQdXRNb2RlOjpUb3VjaD4ob2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVh
ZE9ubHlFcnJvcnMsIHB1dFJlc3VsdCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRh
YmxlT2JqZWN0VHlwZT4KIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0SW52YWxpZGF0ZVdhdGNo
cG9pbnRTZXQoCi0gICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBTeW1i
b2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKICAgICBib29sIHNob3Vs
ZFRocm93UmVhZE9ubHlFcnJvciwgYm9vbCBpZ25vcmVSZWFkT25seUVycm9ycywgYm9vbCYgcHV0
UmVzdWx0KQogewogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2
YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKLSAgICByZXR1cm4gc3ltYm9sVGFibGVQdXQ8
U3ltYm9sVGFibGVQdXRNb2RlOjpJbnZhbGlkYXRlPihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMs
IHB1dFJlc3VsdCk7CisgICAgcmV0dXJuIHN5bWJvbFRhYmxlUHV0PFN5bWJvbFRhYmxlUHV0TW9k
ZTo6SW52YWxpZGF0ZT4ob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdub3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJlc3Vs
dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuY3BwCmluZGV4
IDVhMDE4MDVhOTdlNjAwYWQ3MzAyNTAzMTdkM2FmNWFhZTY4NDY4NTIuLjRiYjIyNmZmOTI4NmVk
NzE3ZWE1MzAxMGNlOTE3MWMxNDVmOGQ4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5jcHAKQEAg
LTU1LDM0ICs1NSwzNCBAQCB2b2lkIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2FzdDxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRv
cio+KGNlbGwpLT5KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcjo6fkpTVGVtcGxhdGVPYmplY3RE
ZXNjcmlwdG9yKCk7CiB9CiAKLUpTQXJyYXkqIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yOjpj
cmVhdGVUZW1wbGF0ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitKU0FycmF5KiBKU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvcjo6Y3JlYXRlVGVtcGxhdGVPYmplY3QoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgdW5zaWduZWQgY291bnQgPSBkZXNjcmlwdG9yKCkuY29va2VkU3RyaW5ncygpLnNp
emUoKTsKLSAgICBKU0FycmF5KiB0ZW1wbGF0ZU9iamVjdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0ciwgY291bnQpOworICAgIEpTQXJyYXkqIHRlbXBsYXRlT2JqZWN0ID0gY29u
c3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIsIGNvdW50KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICBKU0FycmF5KiByYXdPYmplY3Qg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKKyAgICBKU0FycmF5
KiByYXdPYmplY3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0ciwg
Y291bnQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKICAgICAg
ICAgYXV0byBjb29rZWQgPSBkZXNjcmlwdG9yKCkuY29va2VkU3RyaW5ncygpW2luZGV4XTsKICAg
ICAgICAgaWYgKGNvb2tlZCkKLSAgICAgICAgICAgIHRlbXBsYXRlT2JqZWN0LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCwganNTdHJpbmcodm0sIGNvb2tlZC52YWx1ZSgpKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUsIFB1dERp
cmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CisgICAgICAgICAgICB0ZW1wbGF0ZU9iamVjdC0+cHV0
RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCwganNTdHJpbmcodm0sIGNvb2tlZC52YWx1
ZSgpKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHRlbXBsYXRlT2JqZWN0LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwganNV
bmRlZmluZWQoKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CisgICAgICAgICAg
ICB0ZW1wbGF0ZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCwganNV
bmRlZmluZWQoKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgICAgIHJhd09iamVjdC0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGpzU3RyaW5nKHZtLCBkZXNjcmlwdG9yKCkucmF3
U3RyaW5ncygpW2luZGV4XSksIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpOworICAg
ICAgICByYXdPYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgsIGpzU3Ry
aW5nKHZtLCBkZXNjcmlwdG9yKCkucmF3U3RyaW5ncygpW2luZGV4XSksIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlLCBQdXREaXJlY3RJ
bmRleExpa2VQdXREaXJlY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKICAgICB9CiAKLSAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCByYXdP
YmplY3QpOworICAgIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKGdsb2JhbE9iamVjdCwgcmF3T2Jq
ZWN0KTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCiAgICAgdGVtcGxhdGVPYmpl
Y3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cmF3LCByYXdPYmplY3QsIFByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlKTsKIAotICAgIG9iamVjdENvbnN0cnVjdG9yRnJl
ZXplKGV4ZWMsIHRlbXBsYXRlT2JqZWN0KTsKKyAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShn
bG9iYWxPYmplY3QsIHRlbXBsYXRlT2JqZWN0KTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwogCiAgICAgcmV0dXJuIHRlbXBsYXRlT2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yLmgKaW5k
ZXggMzNlNTgwMDI3YWY1ZTIxY2I2YjI1YzMwMjY4Y2M5MmNjZGVjMjA4Yi4uM2E2NmNhMmY2NWJi
NzA0NzA1Zjg3MTNhZmM4NGYyMWZhYTdhNDUwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvci5oCkBAIC00
OCw3ICs0OCw3IEBAIGNsYXNzIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAKICAgICBjb25zdCBUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0b3IuZ2V0KCk7IH0KIAotICAgIEpTQXJy
YXkqIGNyZWF0ZVRlbXBsYXRlT2JqZWN0KEV4ZWNTdGF0ZSopOworICAgIEpTQXJyYXkqIGNyZWF0
ZVRlbXBsYXRlT2JqZWN0KEpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICBpbnQgZW5kT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAK
aW5kZXggODk0MWQ1OGY5MTVjZTEzMGJhYjY5ZDcxYzJmYjY2MjU1ODJmOGY5ZS4uMTQ4YzM5ZmFj
NWRiN2Q3MDRlY2I4ZmRkNzljOTY5MjE3NmQyNDhjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iu
Y3BwCkBAIC02NSwxMSArNjUsMTEgQEAgU3RydWN0dXJlKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKIAogCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdFR5cGVkQXJyYXlWaWV3KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0VHlwZWRBcnJheVZpZXcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICIlVHlwZWRBcnJheSUgc2hvdWxkIG5vdCBi
ZSBjYWxsZWQgZGlyZWN0bHkiX3MpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICIlVHlwZWRBcnJheSUgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0
bHkiX3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAKaW5k
ZXggMzBiMGRmZjA4ZmRkMjZlYmJjNWRmNjU3NDY5NmM1ZTkyMzQ2YjQyMC4uMzE1NjIyMTc0MDM0
MWFkZTAwYjlkOGIwMDdjYTljNjU2MDIyOTc4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAKQEAg
LTQwLDI2ICs0MCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgQ0FMTF9HRU5FUklDX1RZ
UEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGZ1bmN0aW9uTmFtZSkgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBzd2l0Y2ggKHRoaXNWYWx1ZS5nZXRPYmplY3QoKS0+Y2xh
c3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7ICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uTmFtZTxKU1VpbnQ4Q2xhbXBlZEFycmF5Pih2bSwgY2FsbEZyYW1lKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFt
ZTxKU1VpbnQ4Q2xhbXBlZEFycmF5Pih2bSwgZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOyAgICAg
ICAgICAgICAgICAgIFwKICAgICBjYXNlIFR5cGVJbnQzMjogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU0ludDMyQXJyYXk+KHZtLCBjYWxsRnJhbWUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uTmFtZTxKU0ludDMyQXJyYXk+KHZtLCBnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIFR5cGVVaW50MzI6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU1VpbnQzMkFycmF5Pih2
bSwgY2FsbEZyYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU1VpbnQzMkFycmF5Pih2bSwgZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIFR5cGVGbG9h
dDY0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU0Zs
b2F0NjRBcnJheT4odm0sIGNhbGxGcmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU0Zsb2F0NjRBcnJheT4odm0s
IGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKTsgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBj
YXNlIFR5cGVGbG9hdDMyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uTmFtZTxKU0Zsb2F0MzJBcnJheT4odm0sIGNhbGxGcmFtZSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU0Zsb2F0
MzJBcnJheT4odm0sIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKTsgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICBjYXNlIFR5cGVJbnQ4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uTmFtZTxKU0ludDhBcnJheT4odm0sIGNhbGxGcmFtZSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
TmFtZTxKU0ludDhBcnJheT4odm0sIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIFR5cGVVaW50ODogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU1VpbnQ4QXJyYXk+KHZtLCBjYWxsRnJh
bWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uTmFtZTxKU1VpbnQ4QXJyYXk+KHZtLCBnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIFR5cGVJbnQxNjogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU0ludDE2QXJyYXk+
KHZtLCBjYWxsRnJhbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU0ludDE2QXJyYXk+KHZtLCBnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIFR5cGVV
aW50MTY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxK
U1VpbnQxNkFycmF5Pih2bSwgY2FsbEZyYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTxKU1VpbnQxNkFycmF5Pih2
bSwgZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBjYXNlIE5vdFR5cGVkQXJyYXk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIFR5cGVEYXRh
VmlldzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
ICAgICAgICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3Il9zKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKQEAgLTc3LDEyICs3NywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5
cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGFyZ3VtZW50
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIWFyZ3VtZW50LmlzQ2VsbCgpIHx8
ICFpc1R5cGVkVmlldyhhcmd1bWVudC5hc0NlbGwoKS0+Y2xhc3NJbmZvKHZtKS0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXciX3MpOworICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUmVjZWl2
ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlldyJfcyk7CiAKICAgICBKU0FycmF5QnVmZmVy
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGFyZ3VtZW50KTsK
IAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJVbmRlcmx5aW5nIEFycmF5QnVmZmVyIGhh
cyBiZWVuIGRldGFjaGVkIGZyb20gdGhlIHZpZXciX3MpOworICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVW5kZXJseWluZyBBcnJheUJ1ZmZlciBo
YXMgYmVlbiBkZXRhY2hlZCBmcm9tIHRoZSB2aWV3Il9zKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpKTsKIH0KQEAgLTExMCw3ICsx
MTAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmll
d1Byb3RvRnVuY1NldChKU0dsb2JhbE9iamVjdCogZwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJSZWNlaXZlciBz
aG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3IGJ1dCB3YXMgbm90IGFuIG9iamVjdCJfcyk7Cisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJSZWNl
aXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3IGJ1dCB3YXMgbm90IGFuIG9iamVjdCJf
cyk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BS
T1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQpOwogfQpA
QCAtMTIxLDcgKzEyMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5
cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbihKU0dsb2JhbE9iCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKQotICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiUmVjZWl2ZXIg
c2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlldyBidXQgd2FzIG5vdCBhbiBvYmplY3QiX3MpOwor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUmVj
ZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlldyBidXQgd2FzIG5vdCBhbiBvYmplY3Qi
X3MpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBDQUxMX0dFTkVSSUNfVFlQRURBUlJBWV9Q
Uk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhp
bik7CiB9CkBAIC0xMzIsNyArMTMyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmNsdWRlcyhKU0dsb2JhbE9iamUKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0
KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRl
VHlwZUVycm9yKGNhbGxGcmFtZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZp
ZXcgYnV0IHdhcyBub3QgYW4gb2JqZWN0IikpOworICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJSZWNl
aXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3IGJ1dCB3YXMgbm90IGFuIG9iamVjdCIp
KTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgQ0FMTF9HRU5FUklDX1RZUEVEQVJSQVlfUFJP
VE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luY2x1ZGVzKTsK
IH0KQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY0xhc3RJbmRleE9mKEpTR2xvYmFsTwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlJlY2Vp
dmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcgYnV0IHdhcyBub3QgYW4gb2JqZWN0Il9z
KTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcgYnV0IHdhcyBub3QgYW4gb2Jq
ZWN0Il9zKTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgQ0FMTF9HRU5FUklDX1RZUEVEQVJS
QVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0xhc3RJ
bmRleE9mKTsKIH0KQEAgLTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY0luZGV4T2YoSlNHbG9iYWxPYmplYwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcgYnV0IHdhcyBub3QgYW4g
b2JqZWN0Il9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcgYnV0IHdhcyBu
b3QgYW4gb2JqZWN0Il9zKTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgQ0FMTF9HRU5FUklD
X1RZUEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
RnVuY0luZGV4T2YpOwogfQpAQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbihKU0dsb2JhbE9iamVj
dCoKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVl
LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwg
c2NvcGUsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3IGJ1dCB3YXMgbm90
IGFuIG9iamVjdCJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3IGJ1dCB3
YXMgbm90IGFuIG9iamVjdCJfcyk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIENBTExfR0VO
RVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b0Z1bmNKb2luKTsKIH0KQEAgLTE3Niw3ICsxNzYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvR2V0dGVyRnVuY0J1ZmZlcihKU0ds
b2JhbAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFs
dWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1l
LCBzY29wZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcgYnV0IHdhcyBu
b3QgYW4gb2JqZWN0Il9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcgYnV0
IHdhcyBub3QgYW4gb2JqZWN0Il9zKTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgQ0FMTF9H
RU5FUklDX1RZUEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvR2V0dGVyRnVuY0J1ZmZlcik7CiB9CkBAIC0xODcsNyArMTg3LDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNM
ZW5ndGgoSlNHbG9iYWwKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlm
ICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGNhbGxGcmFtZSwgc2NvcGUsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3
IGJ1dCB3YXMgbm90IGFuIG9iamVjdCJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJh
eSB2aWV3IGJ1dCB3YXMgbm90IGFuIG9iamVjdCJfcyk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNMZW5ndGgpOwogfQpAQCAtMTk4LDcgKzE5OCw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHR5cGVkQXJyYXlWaWV3UHJvdG9H
ZXR0ZXJGdW5jQnl0ZUxlbmd0aChKU0dsCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUo
KTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQg
YXJyYXkgdmlldyBidXQgd2FzIG5vdCBhbiBvYmplY3QiX3MpOworICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEg
dHlwZWQgYXJyYXkgdmlldyBidXQgd2FzIG5vdCBhbiBvYmplY3QiX3MpOwogICAgIHNjb3BlLnJl
bGVhc2UoKTsKICAgICBDQUxMX0dFTkVSSUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04o
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9HZXR0ZXJGdW5jQnl0ZUxlbmd0aCk7CiB9CkBAIC0y
MDksNyArMjA5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRB
cnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRlT2Zmc2V0KEpTR2wKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJSZWNlaXZlciBzaG91
bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3IGJ1dCB3YXMgbm90IGFuIG9iamVjdCJfcyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJSZWNlaXZl
ciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3IGJ1dCB3YXMgbm90IGFuIG9iamVjdCJfcyk7
CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RP
VFlQRV9GVU5DVElPTihnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0dldHRlckZ1bmNCeXRlT2Zm
c2V0KTsKIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCB0eXBlZEFycmF5Vmlld1Byb3RvRnVuY1JldmVyc2UoSlNHbG9iYWxPYmplYwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwg
IlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcgYnV0IHdhcyBub3QgYW4gb2Jq
ZWN0Il9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcgYnV0IHdhcyBub3Qg
YW4gb2JqZWN0Il9zKTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgQ0FMTF9HRU5FUklDX1RZ
UEVEQVJSQVlfUFJPVE9UWVBFX0ZVTkNUSU9OKGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVu
Y1JldmVyc2UpOwogfQpAQCAtMjMxLDcgKzIzMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgdHlwZWRBcnJheVZpZXdQcml2YXRlRnVuY1N1YmFycmF5Q3JlYXRlKEpTR2xvYmFsT2Jq
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5p
c09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNj
b3BlLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlldyBidXQgd2FzIG5vdCBh
biBvYmplY3QiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlldyBidXQgd2Fz
IG5vdCBhbiBvYmplY3QiX3MpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBDQUxMX0dFTkVS
SUNfVFlQRURBUlJBWV9QUk9UT1RZUEVfRlVOQ1RJT04oZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJp
dmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZSk7CiB9CkBAIC0yNDIsNyArMjQyLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgdHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTbGljZShK
U0dsb2JhbE9iamVjdCoKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlm
ICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGNhbGxGcmFtZSwgc2NvcGUsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3
IGJ1dCB3YXMgbm90IGFuIG9iamVjdCJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJh
eSB2aWV3IGJ1dCB3YXMgbm90IGFuIG9iamVjdCJfcyk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwog
ICAgIENBTExfR0VORVJJQ19UWVBFREFSUkFZX1BST1RPVFlQRV9GVU5DVElPTihnZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b0Z1bmNTbGljZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCmluZGV4IDA5MTg5ZDJjNWNhNWI1MzVkYTQzMzMx
NDY5MzRiZWNmZDMwM2Y1YzguLjA3ZDU4MmFlZGU5ZmFkMjI4ODkwM2JjOWRiNGI4N2FjYWY0MTE4
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJh
eXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMu
Y3BwCkBAIC01MCw5ICs1MCw5IEBAIE1BS0VfU19JTkZPKFVpbnQzMik7CiBNQUtFX1NfSU5GTyhG
bG9hdDMyKTsKIE1BS0VfU19JTkZPKEZsb2F0NjQpOwogCi1KU1VpbnQ4QXJyYXkqIGNyZWF0ZVVp
bnQ4VHlwZWRBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQ
dHI8QXJyYXlCdWZmZXI+JiYgYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCitKU1VpbnQ4QXJyYXkqIGNyZWF0ZVVpbnQ4VHlwZWRBcnJheShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPEFycmF5QnVmZmVy
PiYmIGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAg
IHJldHVybiBKU1VpbnQ4QXJyYXk6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYnVm
ZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gSlNVaW50OEFycmF5OjpjcmVh
dGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdURk1vdmUoYnVmZmVyKSwgYnl0ZU9mZnNldCwg
bGVuZ3RoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlzLmgKaW5kZXggYjNjOGI3ZjI4ZTM4MWY2ODYxZjFiMTk5ODVkMGJmODk1ZDc0OWQxZi4u
ODhjNTIxOTgyODVmNzk2MDEwZGMzY2Q2NzQwYzlhZjIyODgzNmQ3MiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuaApAQCAtNDAsNiArNDAsNiBAQCB0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJy
YXk7CiB0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zs
b2F0MzJBcnJheTsKIHR5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0
b3I+IEpTRmxvYXQ2NEFycmF5OwogCi1KU19FWFBPUlRfUFJJVkFURSBKU1VpbnQ4QXJyYXkqIGNy
ZWF0ZVVpbnQ4VHlwZWRBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWZQdHI8QXJyYXlC
dWZmZXI+JiYsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CitKU19FWFBP
UlRfUFJJVkFURSBKU1VpbnQ4QXJyYXkqIGNyZWF0ZVVpbnQ4VHlwZWRBcnJheShKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIFJlZlB0cjxBcnJheUJ1ZmZlcj4mJiwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtNYXAuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrTWFwLmNwcAppbmRleCA1MjMzNmFkODA4NjBkZTkx
ZGQxYzU4YmVkZDFiNDA1OTA3OWMwMGRkLi4zNTJjNDEzMTgzNGViZGQ3ZGU3Mjc0YTNiODlmOWYx
YTA0Zjc3YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dl
YWtNYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha01hcC5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBK
U1dlYWtNYXA6OnNfaW5mbyA9IHsgIldlYWtNYXAiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2Vha01hcCkgfTsKIAotU3RyaW5nIEpTV2Vh
a01hcDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKK1N0cmluZyBK
U1dlYWtNYXA6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KikK
IHsKICAgICByZXR1cm4gIk9iamVjdCJfczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNXZWFrTWFwLmgKaW5kZXggODE0YWM4NGM2NGE0ZGRkNjQxYTU4YmQxM2U2NTk1ZWY0OTQ2
NGZjNi4uYjI5ZWZiZTVhOWFiYmQwZjNhZmIxYzRlNDQxZTIxYjBjODZlNWUyZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrTWFwLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrTWFwLmgKQEAgLTU5LDcgKzU5LDcgQEAgY2xh
c3MgSlNXZWFrTWFwIGZpbmFsIDogcHVibGljIFdlYWtNYXBJbXBsPFdlYWtNYXBCdWNrZXQ8V2Vh
a01hcEJ1Y2tldERhdGFLZXlWYWwKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiB9Owog
CiBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8SlNXZWFrTWFwPjo6dmFsdWUsICJSZXF1aXJl
ZCBmb3IgSlNUeXBlIGJhc2VkIGNhc3RpbmciKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTV2Vha09iamVjdFJlZi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuY3BwCmluZGV4IDc1MTY1YjNiNzk5ZjZjNGIzOTI1
ZjU4NWM5MGNlZGNjMzE0ZGIxZDcuLjM3NTRjOTM1YzkwMWY0MGMxNjRkNzQ0OTUzZjY5OTdkZTE1
Y2QwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha09i
amVjdFJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrT2Jq
ZWN0UmVmLmNwcApAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEpTV2Vha09iamVjdFJlZjo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mIHZtKQogICAgICAgICBtX3ZhbHVlLmNsZWFyKCk7CiB9CiAK
LVN0cmluZyBKU1dlYWtPYmplY3RSZWY6OnRvU3RyaW5nTmFtZShjb25zdCBKU0M6OkpTT2JqZWN0
KiwgRXhlY1N0YXRlKikKK1N0cmluZyBKU1dlYWtPYmplY3RSZWY6OnRvU3RyaW5nTmFtZShjb25z
dCBKU0M6OkpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKQogewogICAgIHJldHVybiAiT2JqZWN0
Il9zOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFr
T2JqZWN0UmVmLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RS
ZWYuaAppbmRleCA0NmRjMzFhNmM4MDZmYzhjMTk1NDExMjg4NWE3OWEzMzBmOGVjYjRiLi4zZTRi
OWE1OGU0ZTA1MTA4MGM0YjA0MTgwMDMwY2JkMTYwZjg0NjI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtPYmplY3RSZWYuaApAQCAtNzUsNyArNzUsNyBAQCBj
bGFzcyBKU1dlYWtPYmplY3RSZWYgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNPYmplY3Qq
IHZhbHVlKTsKIAotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0
KiwgRXhlY1N0YXRlKik7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogCiAgICAgdWludHB0cl90IG1fbGFzdEFjY2Vzc1Zl
cnNpb247CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha1NldC5jcHAKaW5kZXggNjdkNDRiMGM1MWFhODQ1YzIz
ODU1NjhhMDVkNGJlMjg5M2I0MDI5Yy4uMjc5NjExMjNkNzhkYjg3MzIxY2YyMTk2N2VkMzE3MDBk
MGJkNGFhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFr
U2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtTZXQuY3Bw
CkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNX
ZWFrU2V0OjpzX2luZm8gPSB7ICJXZWFrU2V0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYWtTZXQpIH07CiAKLVN0cmluZyBKU1dlYWtT
ZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU0M6OkpTT2JqZWN0KiwgRXhlY1N0YXRlKikKK1N0cmlu
ZyBKU1dlYWtTZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU0M6OkpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqKQogewogICAgIHJldHVybiAiT2JqZWN0Il9zOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dlYWtTZXQuaAppbmRleCAxZTAyMDcyNDFjZWU2NmM3ZTFlNGIxMDVjN2E2
ZTQ0NThiNjNiNWU1Li43NjIyYmQ2YzU1NDA1ZmU0Y2YzY2E0NTEyZmQ1MzQxNTFiNGNlZDMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtTZXQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtTZXQuaApAQCAtNTQsNyArNTQs
NyBAQCBjbGFzcyBKU1dlYWtTZXQgZmluYWwgOiBwdWJsaWMgV2Vha01hcEltcGw8V2Vha01hcEJ1
Y2tldDxXZWFrTWFwQnVja2V0RGF0YUtleT4+CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyBT
dHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7CisgICAgc3Rh
dGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCop
OwogfTsKIAogc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPEpTV2Vha1NldD46OnZhbHVlLCAi
UmVxdWlyZWQgZm9yIEpTVHlwZSBiYXNlZCBjYXN0aW5nIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCmluZGV4IGI2ZDhlZjk4ZDFkMmFkYzQ1
NWZkMjI3ZDZiOWI2YmUwODZmOWYxMGYuLjUwZjFlY2EzM2IwMDQwMGE2OGQ2ODI1ZDgwNzNkNjhk
MWFiYWY1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVy
YWxQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQ
YXJzZXIuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNK
U09OV2hpdGVTcGFjZShjb25zdCBDaGFyVHlwZSYgYykKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
VHlwZT4KIGJvb2wgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnRyeUpTT05QUGFyc2UoVmVjdG9y
PEpTT05QRGF0YT4mIHJlc3VsdHMsIGJvb2wgbmVlZHNGdWxsU291cmNlSW5mbykKIHsKLSAgICBW
TSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbV9nbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChtX2xl
eGVyLm5leHQoKSAhPSBUb2tJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MzYsNyArMTM2LDcgQEAgYm9vbCBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6dHJ5SlNPTlBQYXJz
ZShWZWN0b3I8SlNPTlBEYXRhPiYgcmVzdWx0cywgYm9vbCBuZWUKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4KIEFMV0FZU19JTkxJTkUgY29uc3QgSWRlbnRpZmllciBMaXRlcmFsUGFyc2Vy
PENoYXJUeXBlPjo6bWFrZUlkZW50aWZpZXIoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgpCiB7Ci0gICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIFZNJiB2bSA9IG1f
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gdm0u
cHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyOwogICAgIGlmIChjaGFyYWN0ZXJzWzBdID49
IE1heGltdW1DYWNoYWJsZUNoYXJhY3RlcikKQEAgLTE1Nyw3ICsxNTcsNyBAQCBBTFdBWVNfSU5M
SU5FIGNvbnN0IElkZW50aWZpZXIgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46Om1ha2VJZGVudGlm
aWVyKGNvbnN0IExDaAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogQUxXQVlTX0lOTElO
RSBjb25zdCBJZGVudGlmaWVyIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjptYWtlSWRlbnRpZmll
cihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICBWTSYgdm0g
PSBtX2V4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbV9nbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
aWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiB2bS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50
aWZpZXI7CiAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPj0gTWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVy
KQpAQCAtODIwLDcgKzgyMCw3IEBAIFRva2VuVHlwZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6
TGV4ZXI6OmxleE51bWJlcihMaXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+CiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhclR5cGU+CiBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJz
ZShQYXJzZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiB7Ci0gICAgVk0mIHZtID0gbV9leGVjLT52bSgp
OworICAgIFZNJiB2bSA9IG1fZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQYXJzZXJTdGF0ZSBzdGF0ZSA9IGluaXRpYWxT
dGF0ZTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBvYmplY3RTdGFjazsKQEAgLTgzMiw3ICs4
MzIsNyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQYXJzZXJTdGF0
ZSBpbml0aWFsU3RhdGUpCiAgICAgICAgIHN3aXRjaChzdGF0ZSkgewogICAgICAgICAgICAgc3Rh
cnRQYXJzZUFycmF5OgogICAgICAgICAgICAgY2FzZSBTdGFydFBhcnNlQXJyYXk6IHsKLSAgICAg
ICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkobV9leGVjLCAw
KTsKKyAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
bV9nbG9iYWxPYmplY3QsIDApOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgb2JqZWN0U3RhY2suYXBwZW5kV2l0
aENyYXNoT25PdmVyZmxvdyhhcnJheSk7CiAgICAgICAgICAgICB9CkBAIC04NTUsNyArODU1LDcg
QEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUGFyc2VyU3RhdGUgaW5p
dGlhbFN0YXRlKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBEb1BhcnNlQXJyYXlF
bmRFeHByZXNzaW9uOiB7CiAgICAgICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5
KG9iamVjdFN0YWNrLmxhc3QoKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KG1fZXhlYywgYXJyYXktPmxlbmd0aCgpLCBsYXN0VmFsdWUpOworICAgICAgICAgICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChtX2dsb2JhbE9iamVjdCwgYXJyYXktPmxlbmd0aCgpLCBs
YXN0VmFsdWUpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5jdXJyZW50VG9rZW4oKS0+
dHlwZSA9PSBUb2tDb21tYSkKQEAgLTg3Miw3ICs4NzIsNyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJz
ZXI8Q2hhclR5cGU+OjpwYXJzZShQYXJzZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBzdGFydFBhcnNlT2JqZWN0OgogICAgICAgICAgICAgY2FzZSBTdGFy
dFBhcnNlT2JqZWN0OiB7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgICAg
ICBvYmplY3RTdGFjay5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iamVjdCk7CiAKICAgICAg
ICAgICAgICAgICBUb2tlblR5cGUgdHlwZSA9IG1fbGV4ZXIubmV4dCgpOwpAQCAtOTMzLDEyICs5
MzMsMTEgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUGFyc2VyU3Rh
dGUgaW5pdGlhbFN0YXRlKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZUVycm9yTWVz
c2FnZSA9ICJBdHRlbXB0ZWQgdG8gcmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Il9zOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZXhlYy0+
Y29kZUJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9i
amVjdCwgY29kZUJsb2NrID8gY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSA6IGZhbHNlKTsKLSAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0U3RhY2subGFzdCgpLnB1dChtX2V4ZWMsIGlkZW50LCBs
YXN0VmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChvYmplY3QsIG1fbnVsbE9yQ29kZUJsb2NrID8gbV9udWxsT3JDb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpIDogZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBvYmplY3RTdGFjay5sYXN0KCku
cHV0KG1fZ2xvYmFsT2JqZWN0LCBpZGVudCwgbGFzdFZhbHVlLCBzbG90KTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+
IGluZGV4ID0gcGFyc2VJbmRleChpZGVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QtPnB1dERpcmVjdEluZGV4KG1fZXhlYywgaW5kZXgudmFsdWUoKSwgbGFzdFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgobV9nbG9iYWxPYmpl
Y3QsIGluZGV4LnZhbHVlKCksIGxhc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBpZGVudCwgbGFz
dFZhbHVlKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9MaXRlcmFsUGFyc2VyLmgKaW5kZXggMjAwNDdmMzg1MjAzZDcwMzhhNGQzZTViMTIyYmIz
NTdjN2UyMDg5MS4uOTNkYTRhZDBjNTE4NmRmYzE1OThhMWEwMWVhMjhlMWQ1NWFkOGViZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuaApAQCAtOTIs
OCArOTIsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UGFyc2VyVG9rZW5TdHJpbmcoTGl0ZXJh
bFBhcnNlclRva2VuPENoYXJUeXBlPiYsIGNvbnN0IENoYQogdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJUeXBlPgogY2xhc3MgTGl0ZXJhbFBhcnNlciB7CiBwdWJsaWM6Ci0gICAgTGl0ZXJhbFBhcnNl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IENoYXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgsIFBhcnNlck1vZGUgbW9kZSkKLSAgICAgICAgOiBtX2V4ZWMoZXhlYykKKyAgICBMaXRl
cmFsUGFyc2VyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENoYXJUeXBlKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhcnNlck1vZGUgbW9kZSwgQ29kZUJsb2NrKiBu
dWxsT3JDb2RlQmxvY2sgPSBudWxscHRyKQorICAgICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdCkKKyAgICAgICAgLCBtX251bGxPckNvZGVCbG9jayhudWxsT3JDb2RlQmxvY2spCiAg
ICAgICAgICwgbV9sZXhlcihjaGFyYWN0ZXJzLCBsZW5ndGgsIG1vZGUpCiAgICAgICAgICwgbV9t
b2RlKG1vZGUpCiAgICAgewpAQCAtMTkwLDcgKzE5MSw4IEBAIGNsYXNzIExpdGVyYWxQYXJzZXIg
ewogICAgIGNsYXNzIFN0YWNrR3VhcmQ7CiAgICAgSlNWYWx1ZSBwYXJzZShQYXJzZXJTdGF0ZSk7
CiAKLSAgICBFeGVjU3RhdGUqIG1fZXhlYzsKKyAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxP
YmplY3Q7CisgICAgQ29kZUJsb2NrKiBtX251bGxPckNvZGVCbG9jazsKICAgICB0eXBlbmFtZSBM
aXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6TGV4ZXIgbV9sZXhlcjsKICAgICBQYXJzZXJNb2RlIG1f
bW9kZTsKICAgICBTdHJpbmcgbV9wYXJzZUVycm9yTWVzc2FnZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTG9va3VwLmgKaW5kZXggZDFkNTE4NDU4MzU2ZGMxYTM5YTJmY2UwMTdlNDgyMzlj
YTA5M2FlZS4uYWE4MDYyM2M5NTE1MjdjNTlkMjIzOGQwYTQzYWZmN2JiZDViNjczZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggewogfTsKIAogLy8gRklYTUU6IFRoZXJlIGlzIG5vIHJlYXNvbiB0
aGlzIGdldCBmdW5jdGlvbiBjYW4ndCBiZSBzaW1wbGVyLgotLy8gaWUuIHR5cGVkZWYgSlNWYWx1
ZSAoKkdldEZ1bmN0aW9uKShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZU9iamVjdCkKKy8vIGll
LiB0eXBlZGVmIEpTVmFsdWUgKCpHZXRGdW5jdGlvbikoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCogYmFzZU9iamVjdCkKIHR5cGVkZWYgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgR2V0RnVu
Y3Rpb247CiB0eXBlZGVmIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIFB1dEZ1bmN0aW9u
OwogdHlwZWRlZiBGdW5jdGlvbkV4ZWN1dGFibGUqICgqQnVpbHRpbkdlbmVyYXRvcikoVk0mKTsK
QEAgLTI2Niw5ICsyNjYsOSBAQCBpbmxpbmUgYm9vbCByZXBsYWNlU3RhdGljUHJvcGVydHlTbG90
KFZNJiB2bSwgSlNPYmplY3QqIHRoaXNPYmplY3QsIFByb3BlcnR5TmFtZQogLy8gJ2Jhc2UnIG1l
YW5zIHRoZSBvYmplY3QgaG9sZGluZyB0aGUgcHJvcGVydHkgKHBvc3NpYmx5IGluIHRoZSBwcm90
b3R5cGUgY2hhaW4gb2YgdGhlIG9iamVjdCBwdXQgd2FzIGNhbGxlZCBvbikuCiAvLyAndGhpc1Zh
bHVlJyBpcyB0aGUgb2JqZWN0IHRoYXQgcHV0IGlzIGJlaW5nIGFwcGxpZWQgdG8gKGluIHRoZSBj
YXNlIG9mIGEgcHJveHksIHRoZSBwcm94eSB0YXJnZXQpLgogLy8gJ3Nsb3QudGhpc1ZhbHVlKCkn
IGlzIHRoZSBvYmplY3QgdGhlIHB1dCB3YXMgb3JpZ2luYWxseSBwZXJmb3JtZWQgb24gKGluIHRo
ZSBjYXNlIG9mIGEgcHJveHksIHRoZSBwcm94eSBpdHNlbGYpLgotaW5saW5lIGJvb2wgcHV0RW50
cnkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBDbGFzc0luZm8qLCBjb25zdCBIYXNoVGFibGVWYWx1
ZSogZW50cnksIEpTT2JqZWN0KiBiYXNlLCBKU09iamVjdCogdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitp
bmxpbmUgYm9vbCBwdXRFbnRyeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBD
bGFzc0luZm8qLCBjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnksIEpTT2JqZWN0KiBiYXNlLCBK
U09iamVjdCogdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChlbnRyeS0+YXR0cmlidXRlcygpICYgUHJv
cGVydHlBdHRyaWJ1dGU6OkJ1aWx0aW5PckZ1bmN0aW9uT3JMYXp5UHJvcGVydHkpIHsKQEAgLTI3
OSwxMSArMjc5LDExIEBAIGlubGluZSBib29sIHB1dEVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQ2xhc3NJbmZvKiwgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGVuCiAgICAgICAgICAgICAgICAg
dGhpc09iamVjdC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhl
Yywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgfQogCiAgICAg
aWYgKGVudHJ5LT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpCi0g
ICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCks
IFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBzbG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CiAKICAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRlcygpICYgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KSkgewogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEoZW50
cnktPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpET01KSVRBdHRyaWJ1dGUpLCAi
RE9NSklUQXR0cmlidXRlIHN1cHBvcnRzIHJlYWRvbmx5IGF0dHJpYnV0ZXMgY3VycmVudGx5LiIp
OwpAQCAtMjk1LDEyICsyOTUsMTIgQEAgaW5saW5lIGJvb2wgcHV0RW50cnkoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBDbGFzc0luZm8qLCBjb25zdCBIYXNoVGFibGVWYWx1ZSogZW4KICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZShiYXNlLCBlbnRyeS0+cHJvcGVy
dHlQdXR0ZXIoKSk7CiAKLSAgICAgICAgYm9vbCByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGV4
ZWMsIGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpLCBpc0FjY2Vzc29yLCB1cGRhdGVUaGlzVmFsdWUs
IHZhbHVlKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBjYWxsQ3VzdG9tU2V0dGVyKGdsb2JhbE9i
amVjdCwgZW50cnktPnByb3BlcnR5UHV0dGVyKCksIGlzQWNjZXNzb3IsIHVwZGF0ZVRoaXNWYWx1
ZSwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgcmV0dXJuIHR5cGVFcnJvcihleGVj
LCBzY29wZSwgc2xvdC5pc1N0cmljdE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogfQogCiAvKioKQEAgLTMwOCwx
NCArMzA4LDE0IEBAIGlubGluZSBib29sIHB1dEVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
Q2xhc3NJbmZvKiwgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGVuCiAgKiBJdCBsb29rcyB1cCBhIGhh
c2ggZW50cnkgZm9yIHRoZSBwcm9wZXJ0eSB0byBiZSBzZXQuICBJZiBhbiBlbnRyeQogICogaXMg
Zm91bmQgaXQgc2V0cyB0aGUgdmFsdWUgYW5kIHJldHVybnMgdHJ1ZSwgZWxzZSBpdCByZXR1cm5z
IGZhbHNlLgogICovCi1pbmxpbmUgYm9vbCBsb29rdXBQdXQoRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU09iamVjdCogYmFzZSwgSlNWYWx1ZSB2YWx1ZSwgY29u
c3QgSGFzaFRhYmxlJiB0YWJsZSwgUHV0UHJvcGVydHlTbG90JiBzbG90LCBib29sJiBwdXRSZXN1
bHQpCitpbmxpbmUgYm9vbCBsb29rdXBQdXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdmFsdWUs
IGNvbnN0IEhhc2hUYWJsZSYgdGFibGUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgYm9vbCYgcHV0
UmVzdWx0KQogewogICAgIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IHRhYmxlLmVudHJ5
KHByb3BlcnR5TmFtZSk7CiAKICAgICBpZiAoIWVudHJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBwdXRSZXN1bHQgPSBwdXRFbnRyeShleGVjLCB0YWJsZS5jbGFzc0ZvclRoaXMsIGVu
dHJ5LCBiYXNlLCBiYXNlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBwdXRSZXN1
bHQgPSBwdXRFbnRyeShnbG9iYWxPYmplY3QsIHRhYmxlLmNsYXNzRm9yVGhpcywgZW50cnksIGJh
c2UsIGJhc2UsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC00MDUsOSArNDA1LDkgQEAgaW5saW5lIHZvaWQgcmVpZnlTdGF0aWNQcm9wZXJ0aWVz
KFZNJiB2bSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGNvbnN0IEhhc2gKICAgICB9CiB9
CiAKLXRlbXBsYXRlPFJhd05hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3Ro
PiBFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit0ZW1w
bGF0ZTxSYXdOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gRW5jb2Rl
ZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNGdW5jdGlvbjo6Y3JlYXRlKHN0YXRlLT52
bSgpLCBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGxl
bmd0aCwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbmF0aXZlRnVuY3Rpb24pKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNzJhMjFhNTA1NTJjNjY4ZGVhYmY3M2Q0YTYxZjIzNjA2
ZGM2MzNkZC4uNzQ2YTRiZjRmYmUxOGU3ZWRlMzQ4MWUxNzNkNzQ2YWExNTZhZDM0YiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcApAQCAt
NTUsMTEgKzU1LDExIEBAIE1hcENvbnN0cnVjdG9yOjpNYXBDb25zdHJ1Y3RvcihWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsTWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE1hcChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90
QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJNYXAiKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRB
c0Z1bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJNYXAiKSk7CiB9CiAKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdE1hcChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTY3LDQxICs2Nyw0
MSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RNYXAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBT
dHJ1Y3R1cmUqIG1hcFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNz
U3RydWN0dXJlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0
LT5tYXBTdHJ1Y3R1cmUoKSk7CisgICAgU3RydWN0dXJlKiBtYXBTdHJ1Y3R1cmUgPSBJbnRlcm5h
bEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5tYXBT
dHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
ICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNNYXA6OmNyZWF0ZShjYWxsRnJhbWUs
IHZtLCBtYXBTdHJ1Y3R1cmUpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKEpTTWFwOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgbWFwU3RydWN0
dXJlKSkpOwogCiAgICAgaWYgKGF1dG8qIGl0ZXJhYmxlTWFwID0ganNEeW5hbWljQ2FzdDxKU01h
cCo+KHZtLCBpdGVyYWJsZSkpIHsKICAgICAgICAgaWYgKGl0ZXJhYmxlTWFwLT5jYW5DbG9uZUZh
c3RBbmROb25PYnNlcnZhYmxlKG1hcFN0cnVjdHVyZSkpCi0gICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShpdGVyYWJsZU1hcC0+Y2xvbmUoY2FsbEZy
YW1lLCB2bSwgbWFwU3RydWN0dXJlKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoaXRlcmFibGVNYXAtPmNsb25lKGdsb2JhbE9iamVjdCwg
dm0sIG1hcFN0cnVjdHVyZSkpKTsKICAgICB9CiAKLSAgICBKU01hcCogbWFwID0gSlNNYXA6OmNy
ZWF0ZShjYWxsRnJhbWUsIHZtLCBtYXBTdHJ1Y3R1cmUpOworICAgIEpTTWFwKiBtYXAgPSBKU01h
cDo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIG1hcFN0cnVjdHVyZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBKU1ZhbHVlIGFkZGVy
RnVuY3Rpb24gPSBtYXAtPkpTT2JqZWN0OjpnZXQoY2FsbEZyYW1lLCB2bS5wcm9wZXJ0eU5hbWVz
LT5zZXQpOworICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IG1hcC0+SlNPYmplY3Q6OmdldChn
bG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnNldCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0
aW9uQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgYWRkZXJGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2Fs
bERhdGEodm0sIGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgaWYg
KGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKSk7CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSkpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIGZvckVhY2hJbkl0ZXJhYmxlKGNh
bGxGcmFtZSwgaXRlcmFibGUsIFsmXShWTSYgdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1Zh
bHVlIG5leHRJdGVtKSB7CisgICAgZm9yRWFjaEluSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCBpdGVy
YWJsZSwgWyZdKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBu
ZXh0SXRlbSkgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIGlmICghbmV4dEl0ZW0uaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIEpTVmFsdWUga2V5ID0gbmV4dEl0ZW0uZ2V0KGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KDApKTsKKyAgICAgICAgSlNWYWx1ZSBrZXkgPSBuZXh0SXRlbS5nZXQoZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBuZXh0SXRl
bS5nZXQoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMSkpOworICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbmV4dEl0ZW0uZ2V0KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KDEpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAog
ICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkBAIC0xMDksNyArMTA5LDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0TWFwKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1
ZSk7CiAgICAgICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CiAgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgY2FsbChjYWxsRnJhbWUsIGFkZGVyRnVuY3Rpb24s
IGFkZGVyRnVuY3Rpb25DYWxsVHlwZSwgYWRkZXJGdW5jdGlvbkNhbGxEYXRhLCBtYXAsIGFyZ3Vt
ZW50cyk7CisgICAgICAgIGNhbGwoZ2xvYmFsT2JqZWN0LCBhZGRlckZ1bmN0aW9uLCBhZGRlckZ1
bmN0aW9uQ2FsbFR5cGUsIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSwgbWFwLCBhcmd1bWVudHMpOwog
ICAgIH0pOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtYXApOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKaW5kZXggYWY1NzI2ZjdiNmU5
MmE3ZTlmODgwZDYyZGNmYTMxZmRkZTA5MzgwZC4uYTU3Njg4OTNkN2Q2MDA2OTgxYzkyMGUzODhh
ZGQwMTY5MWU1MGQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQ
cm90b3R5cGUuY3BwCkBAIC03OCw2OSArNzgsNjkgQEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBKU0Nf
TkFUSVZFX0dFVFRFUl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+c2l6ZSwg
bWFwUHJvdG9GdW5jU2l6ZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OkFjY2Vzc29yKTsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0aWMgSlNNYXAqIGdl
dE1hcChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSB0aGlzVmFsdWUpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU01hcCogZ2V0TWFwKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pc0NlbGwoKSkpIHsK
LSAgICAgICAgdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0
RXJyb3IoY2FsbEZyYW1lLCB0aGlzVmFsdWUpKTsKKyAgICAgICAgdGhyb3dWTUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZ2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgYXV0byogbWFw
ID0ganNEeW5hbWljQ2FzdDxKU01hcCo+KHZtLCB0aGlzVmFsdWUuYXNDZWxsKCkpOwogICAgIGlm
IChMSUtFTFkobWFwKSkKICAgICAgICAgcmV0dXJuIG1hcDsKLSAgICB0aHJvd1R5cGVFcnJvcihj
YWxsRnJhbWUsIHNjb3BlLCAiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3Qi
X3MpOworICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJNYXAgb3BlcmF0
aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCJfcyk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgSlNN
YXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7CisgICAgSlNNYXAqIG1hcCA9IGdldE1hcChnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIG1hcC0+Y2xlYXIoY2FsbEZyYW1lKTsKKyAgICBt
YXAtPmNsZWFyKGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1
bmNEZWxldGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7Ci0gICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNNYXAqIG1hcCA9IGdldE1hcChnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKG1hcC0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtYXAtPnJl
bW92ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jR2V0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIEpTTWFwKiBtYXAgPSBn
ZXRNYXAoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwor
ICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKICAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcC0+Z2V0KGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
bWFwLT5nZXQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jSGFzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIEpTTWFwKiBtYXAg
PSBnZXRNYXAoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKICAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtYXAt
PmhhcyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4obWFwLT5oYXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFBy
b3RvRnVuY1NldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7
Ci0gICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlKTsKKyAgICBKU01hcCogbWFwID0gZ2V0TWFwKGdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlKTsK
ICAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICBtYXAtPnNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNh
bGxGcmFtZS0+YXJndW1lbnQoMSkpOworICAgIG1hcC0+c2V0KGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY1NpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNNYXAqIG1hcCA9IGdl
dE1hcChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFw
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobWFwLT5zaXplKCkpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKaW5kZXggYWRmZmFlZGVhOTVkNGQw
MTE0NmE0ZWI1NWVmYjA3YTQ0YWUxOWFhZS4uYWY1Y2E0NjcxZjJkZGQyZjAwMjNmYjA0ZjEyNTM4
ZDVkM2JlYTVjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0
aE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVj
dC5jcHAKQEAgLTEyNyw2NCArMTI3LDY0IEBAIHZvaWQgTWF0aE9iamVjdDo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FicyhK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQWJzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoZmFicyhjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihmYWJzKGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQUNvcyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
QUNvcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKE1hdGg6OmFjb3Mo
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihjYWxsRnJhbWUpKSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoTWF0aDo6YWNvcyhjYWxsRnJhbWUtPmFy
Z3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FTaW4oSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y0FTaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihNYXRoOjphc2lu
KGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoY2FsbEZyYW1lKSkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKE1hdGg6OmFzaW4oY2FsbEZyYW1lLT5h
cmd1bWVudCgwKS50b051bWJlcihnbG9iYWxPYmplY3QpKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBVGFuKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1
bmNBVGFuKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoTWF0aDo6YXRh
bihjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihNYXRoOjphdGFuKGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbjIoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBkb3VibGUgYXJnMCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoY2FsbEZyYW1l
KTsKKyAgICBkb3VibGUgYXJnMCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xv
YmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgZG91YmxlIGFyZzEgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDEpLnRvTnVtYmVyKGNhbGxGcmFtZSk7CisgICAgZG91YmxlIGFyZzEgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDEpLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihhdGFuMihhcmcwLCBhcmcxKSkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDZWlsKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNDZWlsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoY2Vp
bChjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihjZWlsKGNhbGxGcmFtZS0+YXJndW1lbnQoMCku
dG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXRoUHJvdG9GdW5jQ2x6MzIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICB1aW50MzJfdCB2
YWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9VSW50MzIoY2FsbEZyYW1lKTsKKyAgICB1
aW50MzJfdCB2YWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9VSW50MzIoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoY2x6KHZhbHVlKSkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDb3MoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY0NvcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVy
KE1hdGg6OmNvcyhjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihNYXRoOjpjb3MoY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihnbG9iYWxPYmplY3QpKSkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHAoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0
aFByb3RvRnVuY0V4cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKE1h
dGg6OmV4cChjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihNYXRoOjpleHAoY2FsbEZy
YW1lLT5hcmd1bWVudCgwKS50b051bWJlcihnbG9iYWxPYmplY3QpKSkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNGbG9vcihKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jRmxvb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihmbG9vcihj
YWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihmbG9vcihjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRv
TnVtYmVyKGdsb2JhbE9iamVjdCkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY0h5cG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtMTk2LDcgKzE5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWF0aFByb3RvRnVuY0h5cG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhCiAgICAgVmVjdG9yPGRvdWJsZSwgOD4gYXJnczsKICAgICBhcmdzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoYXJnc0NvdW50KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnc0Nv
dW50OyArK2kpIHsKLSAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQoY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudChpKS50b051bWJlcihjYWxsRnJhbWUpKTsKKyAgICAgICAgYXJncy51bmNo
ZWNrZWRBcHBlbmQoY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKS50b051bWJlcihnbG9i
YWxPYmplY3QpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgICAgIGlmIChzdGQ6OmlzaW5mKGFyZ3NbaV0pKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcigrc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjppbmZpbml0eSgpKSk7CkBAIC0yMTcsOSArMjE3LDkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jSHlwb3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2EKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKHNx
cnQoc3VtKSAqIG1heCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNMb2coSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKE1hdGg6OmxvZyhjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
LnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Rv
dWJsZU51bWJlcihNYXRoOjpsb2coY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihnbG9i
YWxPYmplY3QpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNNYXgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCkBAIC0yMjksNyArMjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jTWF4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGwKICAgICB1bnNp
Z25lZCBhcmdzQ291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBkb3VibGUg
cmVzdWx0ID0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYXJnc0NvdW50OyArK2spIHsKLSAgICAgICAgZG91Ymxl
IHZhbCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaykudG9OdW1iZXIoY2FsbEZyYW1l
KTsKKyAgICAgICAgZG91YmxlIHZhbCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoayku
dG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChzdGQ6OmlzbmFuKHZhbCkpIHsKICAg
ICAgICAgICAgIHJlc3VsdCA9IFBOYU47CkBAIC0yNDYsNyArMjQ2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGwKICAgICB1bnNpZ25lZCBhcmdzQ291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKTsKICAgICBkb3VibGUgcmVzdWx0ID0gK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYXJnc0NvdW50OyAr
K2spIHsKLSAgICAgICAgZG91YmxlIHZhbCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
aykudG9OdW1iZXIoY2FsbEZyYW1lKTsKKyAgICAgICAgZG91YmxlIHZhbCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoaykudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChz
dGQ6OmlzbmFuKHZhbCkpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IFBOYU47CkBAIC0yNjMsMTAg
KzI2MywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNQb3co
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbAogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBkb3VibGUgYXJnID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihjYWxsRnJh
bWUpOworICAgIGRvdWJsZSBhcmcgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGds
b2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIGRvdWJsZSBhcmcyID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgxKS50b051bWJlcihjYWxsRnJhbWUpOworICAgIGRvdWJsZSBhcmcyID0gY2Fs
bEZyYW1lLT5hcmd1bWVudCgxKS50b051bWJlcihnbG9iYWxPYmplY3QpOwogCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKG9wZXJhdGlvbk1hdGhQb3coYXJnLCBhcmcyKSkpOwog
fQpAQCAtMjc2LDE0ICsyNzYsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jUmFuZG9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKGdsb2JhbE9iamVjdC0+d2Vha1JhbmRv
bU51bWJlcigpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY1JvdW5kKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSb3VuZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGpzUm91bmQoY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJl
cihjYWxsRnJhbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoanNS
b3VuZChjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1NpZ24oSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY1NpZ24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgZG91YmxlIGFyZyA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCkudG9OdW1iZXIoY2FsbEZyYW1lKTsKKyAgICBkb3VibGUgYXJnID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKS50b051bWJlcihnbG9iYWxPYmplY3QpOwogICAgIGlmIChzdGQ6OmlzbmFuKGFy
ZykpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgaWYgKCFh
cmcpCkBAIC0yOTEsOTUgKzI5MSw5NSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
dGhQcm90b0Z1bmNTaWduKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRgogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RkOjpzaWduYml0KGFyZykgPyAtMSA6IDEp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU2luKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Rv
dWJsZU51bWJlcihNYXRoOjpzaW4oY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihjYWxs
RnJhbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoTWF0
aDo6c2luKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChKU0ds
b2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91
YmxlTnVtYmVyKHNxcnQoY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihjYWxsRnJhbWUp
KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoc3FydChjYWxs
RnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RhbihKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jVGFuKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoTWF0
aDo6dGFuKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoY2FsbEZyYW1lKSkpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKE1hdGg6OnRhbihjYWxsRnJh
bWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKSk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0lNdWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBpbnQzMl90IGxlZnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvSW50MzIoY2FsbEZy
YW1lKTsKKyAgICBpbnQzMl90IGxlZnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvSW50MzIo
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgaW50MzJfdCByaWdodCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMSkudG9JbnQzMihjYWxsRnJhbWUpOworICAgIGludDMyX3QgcmlnaHQg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLnRvSW50MzIoZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGxlZnQgKiByaWdodCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNBQ29zaChKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRo
UHJvdG9GdW5jQUNvc2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihN
YXRoOjphY29zaChjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihNYXRoOjphY29zaChj
YWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0FTaW5oKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNBU2luaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVt
YmVyKE1hdGg6OmFzaW5oKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoY2FsbEZyYW1l
KSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKE1hdGg6OmFz
aW5oKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQVRhbmgoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWF0aFByb3RvRnVuY0FUYW5oKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3Vi
bGVOdW1iZXIoTWF0aDo6YXRhbmgoY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihjYWxs
RnJhbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoTWF0
aDo6YXRhbmgoY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihnbG9iYWxPYmplY3QpKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDYnJ0KEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNDYnJ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNE
b3VibGVOdW1iZXIoTWF0aDo6Y2JydChjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNh
bGxGcmFtZSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihN
YXRoOjpjYnJ0KGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zaChK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ29zaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
RG91YmxlTnVtYmVyKE1hdGg6OmNvc2goY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihj
YWxsRnJhbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIo
TWF0aDo6Y29zaChjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkp
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0V4cG0x
KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNFeHBtMShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzRG91YmxlTnVtYmVyKE1hdGg6OmV4cG0xKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1i
ZXIoY2FsbEZyYW1lKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVt
YmVyKE1hdGg6OmV4cG0xKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2Jq
ZWN0KSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
RnJvdW5kKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNGcm91bmQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0RvdWJsZU51bWJlcihzdGF0aWNfY2FzdDxmbG9hdD4oY2FsbEZyYW1lLT5hcmd1
bWVudCgwKS50b051bWJlcihjYWxsRnJhbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNEb3VibGVOdW1iZXIoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jTG9nMXAoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZzFw
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoTWF0aDo6bG9nMXAoY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihjYWxsRnJhbWUpKSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoTWF0aDo6bG9nMXAoY2FsbEZyYW1lLT5hcmd1
bWVudCgwKS50b051bWJlcihnbG9iYWxPYmplY3QpKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNMb2cxMChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
TG9nMTAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihNYXRoOjpsb2cx
MChjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihNYXRoOjpsb2cxMChjYWxsRnJhbWUt
PmFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0xvZzIoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3Rv
RnVuY0xvZzIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihNYXRoOjps
b2cyKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoY2FsbEZyYW1lKSkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKE1hdGg6OmxvZzIoY2FsbEZyYW1l
LT5hcmd1bWVudCgwKS50b051bWJlcihnbG9iYWxPYmplY3QpKSkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNTaW5oKEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90
b0Z1bmNTaW5oKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoTWF0aDo6
c2luaChjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0RvdWJsZU51bWJlcihNYXRoOjpzaW5oKGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSkpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jVGFuaChKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJv
dG9GdW5jVGFuaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKE1hdGg6
OnRhbmgoY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWJlcihjYWxsRnJhbWUpKSkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoTWF0aDo6dGFuaChjYWxsRnJh
bWUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1RydW5jKEpTR2xvYmFsT2JqZWN0Kiwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1bmNUcnVuYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkudG9JbnRlZ2VyUHJlc2VydmVOYU4oY2FsbEZyYW1lKSkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b0lu
dGVnZXJQcmVzZXJ2ZU5hTihnbG9iYWxPYmplY3QpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWljcm90YXNrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NaWNyb3Rhc2suaAppbmRleCA1ZDg4OTE1
ZDViNGVjMzkzNDgzYTRkMWRhYWJjNWJjNTZjNTM3MGIyLi42NWQ2ZWZmMjVmYTU1NmQ5ZGU3Zjlm
ODk2NjhjZGUxY2EyN2FlZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NaWNyb3Rhc2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NaWNy
b3Rhc2suaApAQCAtMzAsNyArMzAsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxG
cmFtZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIAogY2xhc3MgTWljcm90YXNrIDog
cHVibGljIFJlZkNvdW50ZWQ8TWljcm90YXNrPiB7CiBwdWJsaWM6CkBAIC0zOCw3ICszNyw3IEBA
IGNsYXNzIE1pY3JvdGFzayA6IHB1YmxpYyBSZWZDb3VudGVkPE1pY3JvdGFzaz4gewogICAgIHsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcnVuKEV4ZWNTdGF0ZSopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcnVuKEpTR2xvYmFsT2JqZWN0KikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZS5jcHAKaW5kZXggNGFmOGMyNGJlNGZlNzljNmI2M2M0MWUwMzkyNDU1
NjNiOTkyYzM0ZC4uZGIwNTI1NDg4MjUzMzlhNmIxMzJiYTRlNDQyYjIxMWQ2ZGUzN2JhMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmNwcApAQCAtNDIsMjMgKzQyLDIyIEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIk1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSkgfTsKIAotTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGU6Ok1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlKQotICAgIDogQmFzZShleGVjLT52bSgpLm1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBleGVjLT52bSgpLCBzb3VyY2UsIGZhbHNl
LCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIGZhbHNlLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUs
IE5vSW50cmluc2ljKQorTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6Ok1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LT52bSgpLm1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlU3RydWN0dXJlLmdldCgpLCBnbG9iYWxPYmplY3QtPnZtKCksIHNvdXJjZSwgZmFsc2UsIERl
cml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgZmFsc2UsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgTm9J
bnRyaW5zaWMpCiB7CiAgICAgQVNTRVJUKHNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2VUeXBlKCkg
PT0gU291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUpOwotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlmICh2bS50eXBl
UHJvZmlsZXIoKSB8fCB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCiAgICAgICAgIHZtLmZ1bmN0
aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uoc291cmNlSUQoKSwg
dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KHZtKSwgdHlwZVByb2ZpbGluZ0VuZE9mZnNldCh2bSkp
OwogfQogCi1Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6
OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKK01vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAg
IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU+KHZtLmhlYXApKSBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwotICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9u
KGV4ZWMtPnZtKCkpOworICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU+KHZtLmhl
YXApKSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShnbG9iYWxPYmplY3QsIHNvdXJjZSk7CisgICAg
ZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKIAogICAgIFBh
cnNlckVycm9yIGVycm9yOwogICAgIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVH
ZW5lcmF0aW9uTW9kZSA9IGdsb2JhbE9iamVjdC0+ZGVmYXVsdENvZGVHZW5lcmF0aW9uTW9kZSgp
OwpAQCAtNjYsMTYgKzY1LDE2IEBAIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QKICAgICAgICAgdm0s
IGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBjb2RlR2VuZXJhdGlvbk1vZGUsIGVy
cm9yKTsKIAogICAgIGlmIChnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkpCi0gICAgICAgIGds
b2JhbE9iamVjdC0+ZGVidWdnZXIoKS0+c291cmNlUGFyc2VkKGV4ZWMsIGV4ZWN1dGFibGUtPnNv
dXJjZSgpLnByb3ZpZGVyKCksIGVycm9yLmxpbmUoKSwgZXJyb3IubWVzc2FnZSgpKTsKKyAgICAg
ICAgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoZ2xvYmFsT2JqZWN0LCBl
eGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBlcnJvci5saW5lKCksIGVycm9yLm1lc3Nh
Z2UoKSk7CiAKICAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHRocm93Vk1FcnJv
cihleGVjLCBzY29wZSwgZXJyb3IudG9FcnJvck9iamVjdChnbG9iYWxPYmplY3QsIGV4ZWN1dGFi
bGUtPnNvdXJjZSgpKSk7CisgICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCBlcnJvci50b0Vycm9yT2JqZWN0KGdsb2JhbE9iamVjdCwgZXhlY3V0YWJsZS0+c291cmNlKCkp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgZXhlY3V0YWJsZS0+bV91
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suc2V0KGV4ZWMtPnZtKCksIGV4ZWN1dGFibGUs
IHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUpOworICAgIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrLnNldChnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWN1dGFibGUs
IHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUpOwogCi0gICAgZXhlY3V0YWJsZS0+bV9tb2R1bGVF
bnZpcm9ubWVudFN5bWJvbFRhYmxlLnNldChleGVjLT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8
U3ltYm9sVGFibGUqPih1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVy
KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGUtPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVD
b25zdGFudFJlZ2lzdGVyT2Zmc2V0KCkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZXhlYy0+dm0o
KSkpOworICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQo
Z2xvYmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKHVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGUtPm1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGVDb25zdGFudFJlZ2lzdGVyT2Zm
c2V0KCkpLmdldCgpKS0+Y2xvbmVTY29wZVBhcnQoZ2xvYmFsT2JqZWN0LT52bSgpKSk7CiAKICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCmluZGV4IDZjNmE2MjYzOTNmM2Iw
ZjE2NDUyYzQ3ZjQ0M2JlMzRhMWQ2OGYwMzMuLmUwODkyNjhmMjhkYzY4YzQxMzlmOGQxMzg2YmE5
ZTg0NDRjNTYzMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaApAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBHbG9iYWxFeGVjdXRhYmxlIHsKICAg
ICAgICAgcmV0dXJuIHZtLm1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2U8bW9kZT4oKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3Rh
dGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CisgICAgc3RhdGljIE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCkBAIC03NSw3ICs3NSw3IEBAIGNsYXNzIE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEdsb2JhbEV4ZWN1dGFibGUgewog
ICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0
RXhlY3V0YWJsZTsKIAotICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNv
bnN0IFNvdXJjZUNvZGUmKTsKKyAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAppbmRleCBkYzM0MDY4
MTJhNmQzMDY3ODQzNjM1MjZkZTQ1MjRjNDgzNDNkZDU2Li5hZDdkYmY3ZWVmYTE4YjZhMjViZTQ2
YjY2ZGUzOTIwOTBiMGM5NTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcApAQCAtNTUsMTAgKzU1LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcjxlcnJv
clR5cGU+Ojpjb25zdHJ1Y3ROYXRpdmVFCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVl
IG1lc3NhZ2UgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIFN0cnVjdHVyZSogZXJyb3JT
dHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUodm0pKTsKKyAgICBT
dHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCksIGNhbGxGcmFt
ZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUodm0pKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBBU1NFUlQoZXJyb3JTdHJ1Y3R1cmUp
OwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShjYWxsRnJhbWUsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRy
LCBUeXBlTm90aGluZywgZmFsc2UpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgZXJyb3JT
dHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpKTsKIH0KIAog
dGVtcGxhdGU8RXJyb3JUeXBlIGVycm9yVHlwZT4KQEAgLTY3LDcgKzY3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yPGVycm9yVHlwZT46OmNh
bGxOYXRpdmVFcnJvckMKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNW
YWx1ZSBtZXNzYWdlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVy
cm9yU3RydWN0dXJlID0ganNDYXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqPihjYWxsRnJhbWUt
PmpzQ2FsbGVlKCkpLT5lcnJvclN0cnVjdHVyZSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoY2FsbEZyYW1lLCBlcnJvclN0cnVjdHVyZSwgbWVz
c2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBlcnJvclN0cnVjdHVy
ZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKIHRlbXBsYXRl
IGNsYXNzIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I8RXJyb3JUeXBlOjpFdmFsRXJyb3I+OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVsbFNldHRlckZ1bmN0aW9u
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bGxTZXR0ZXJGdW5jdGlvbi5j
cHAKaW5kZXggOTBjNWNmM2VlZGZiZmM1MWUxMzdlMzIzMTk3MTljMDgyMTdkNmRmZi4uODk0MjBh
YTBjMzg4NjZmZDFhODg4MmE5YjBlYWI3NDI1ZmU4MmM5YiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVsbFNldHRlckZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OdWxsU2V0dGVyRnVuY3Rpb24uY3BwCkBAIC02MywxMCAr
NjMsMTAgQEAgY2xhc3MgR2V0Q2FsbGVyU3RyaWN0bmVzc0Z1bmN0b3IgewogICAgIG11dGFibGUg
Ym9vbCBtX2NhbGxlcklzU3RyaWN0OwogfTsKIAotc3RhdGljIGJvb2wgY2FsbGVySXNTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjKQorc3RhdGljIGJvb2wgY2FsbGVySXNTdHJpY3QoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7CiAgICAgR2V0Q2FsbGVyU3RyaWN0bmVzc0Z1bmN0b3IgaXRlcjsKLSAgICBl
eGVjLT5pdGVyYXRlKGl0ZXIpOworICAgIGNhbGxGcmFtZS0+aXRlcmF0ZShpdGVyKTsKICAgICBy
ZXR1cm4gaXRlci5jYWxsZXJJc1N0cmljdCgpOwogfQogCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSZXR1cm5VbmRlZmluZWQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgaWYgKGNhbGxlcklzU3RyaWN0KGNhbGxGcmFtZSkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlNldHRp
bmcgYSBwcm9wZXJ0eSB0aGF0IGhhcyBvbmx5IGEgZ2V0dGVyIl9zKSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlNl
dHRpbmcgYSBwcm9wZXJ0eSB0aGF0IGhhcyBvbmx5IGEgZ2V0dGVyIl9zKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAppbmRleCA5MDY4Mjkz
OGFmNDg4MDU4MWFlNzA0NzhjODdhNWQ3NjYxMWZhMDk0Li5iMjAzNjZlYTI3Zjk0YWFhMDc1ODBm
ZThjMzQwNGYzODRjYjdmODA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCkBAIC05MCw5ICs5MCw5IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdE51bWJlckNvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBnCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBkb3VibGUgbiA9IGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpID8gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b051bWJlcihjYWxsRnJhbWUpIDogMDsKKyAgICBkb3VibGUgbiA9IGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpID8gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b051bWJlcihnbG9i
YWxPYmplY3QpIDogMDsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNy
ZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwg
Z2xvYmFsT2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwg
Z2xvYmFsT2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBOdW1iZXJPYmplY3QqIG9i
amVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwpAQCAtMTAxLDkgKzEw
MSw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdE51bWJl
ckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnCiB9CiAKIC8vIEVDTUEgMTUuNy4yCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsTnVtYmVyQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxOdW1iZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA/IDAgOiBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVtYmVyKGNhbGxGcmFtZSkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA/
IDAgOiBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVtYmVyKGdsb2JhbE9iamVj
dCkpKTsKIH0KIAogLy8gRUNNQS0yNjIgMjAuMS4yLjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCmluZGV4IDQxMWNhMjIzYmUxZjQwODFjZmI3YTMw
YjA0MmUwOGJjZjhhMTE0YmEuLmU4MDRmNDk3MDY0MzFkYzVmYWQ1ZjI2YWRkOGM5MDBjMGM2N2Vi
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNw
cApAQCAtNDQsMTAgKzQ0LDEwIEBAIHZvaWQgTnVtYmVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiAgICAgQVNTRVJUKHR5cGUoKSA9PSBOdW1iZXJPYmplY3RUeXBlKTsKIH0KIAotTnVt
YmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG51bWJlcikKK051bWJlck9iamVjdCogY29uc3RydWN0
TnVtYmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbnVtYmVyKQogewot
ICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0o
KSwgZ2xvYmFsT2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgb2JqZWN0LT5z
ZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCksIG51bWJlcik7CisgICAgTnVtYmVyT2JqZWN0KiBv
YmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9i
amVjdC0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOworICAgIG9iamVjdC0+c2V0SW50ZXJuYWxW
YWx1ZShnbG9iYWxPYmplY3QtPnZtKCksIG51bWJlcik7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAppbmRleCAx
N2YwZTU3YTE4YmM1OTYwYTQ0OTE4M2JkNDUxNWU0MjBmN2NkYWJkLi4wYjUyMzAyZjk1ODllYmFj
MGQwNjE1N2EyYjdmOTU1NTFhNThlZmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJPYmplY3QuaApAQCAtNDcsNiArNDcsNiBAQCBjbGFzcyBOdW1iZXJPYmplY3Qg
OiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgICB9CiB9OwogCi1KU19FWFBPUlRfUFJJVkFU
RSBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUpOworSlNfRVhQT1JUX1BSSVZBVEUgTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3RO
dW1iZXIoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcApp
bmRleCAyOGUyZjU0MTMyZWM4Y2RiNjRlOTNmYzI3NWZiYzhiOTBhNDM3Njk5Li42ZjJiNWZmNjI4
YWJlMDhkYmNhNGI3Y2I2MjJlMjc0NjRmYWM1OGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKQEAgLTEwNiwxMSArMTA2LDExIEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgdG9UaGlzTnVtYmVyKFZNJiB2bSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGRvdWJsZSYgeCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBBTFdB
WVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1Ub1RoaXNOdW1iZXJFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK3N0YXRpYyBB
TFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHRocm93Vk1Ub1RoaXNOdW1iZXJFcnJvcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUaHJvd1Njb3BlJiBzY29wZSwgSlNWYWx1ZSB0aGlz
VmFsdWUpCiB7Ci0gICAgYXV0byB0eXBlU3RyaW5nID0gYXNTdHJpbmcoanNUeXBlU3RyaW5nRm9y
VmFsdWUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzVmFsdWUp
KS0+dmFsdWUoZXhlYyk7CisgICAgYXV0byB0eXBlU3RyaW5nID0gYXNTdHJpbmcoanNUeXBlU3Ry
aW5nRm9yVmFsdWUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSkp
LT52YWx1ZShnbG9iYWxPYmplY3QpOwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0g
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIFdURjo6bWFrZVN0cmluZygi
dGhpc051bWJlclZhbHVlIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIiwgdHlwZVN0cmluZykpOwor
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFdURjo6bWFr
ZVN0cmluZygidGhpc051bWJlclZhbHVlIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIiwgdHlwZVN0
cmluZykpOwogfQogCiAvLyBUaGUgbGFyZ2VzdCBmaW5pdGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVy
IGlzIDEubWFudGlzc2EgKiAyXigweDdmZS0weDNmZikuCkBAIC0zOTMsMTEgKzM5MywxMSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbAogCiAgICAgZG91YmxlIHg7CiAgICAgaWYgKCF0b1RoaXNO
dW1iZXIodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCksIHgpKQotICAgICAgICByZXR1cm4gdGhy
b3dWTVRvVGhpc051bWJlckVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVRvVGhpc051bWJlckVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBhcmcg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIC8vIFBlcmZvcm0gVG9JbnRlZ2VyIG9uIHRo
ZSBhcmd1bWVudCBiZWZvcmUgcmVtYWluaW5nIHN0ZXBzLgotICAgIGludCBkZWNpbWFsUGxhY2Vz
ID0gc3RhdGljX2Nhc3Q8aW50PihhcmcudG9JbnRlZ2VyKGNhbGxGcmFtZSkpOworICAgIGludCBk
ZWNpbWFsUGxhY2VzID0gc3RhdGljX2Nhc3Q8aW50PihhcmcudG9JbnRlZ2VyKGdsb2JhbE9iamVj
dCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAvLyBIYW5k
bGUgTmFOIGFuZCBJbmZpbml0eS4KQEAgLTQwNSw3ICs0MDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmlu
Zyh2bSwgU3RyaW5nOjpudW1iZXIoeCkpKTsKIAogICAgIGlmIChkZWNpbWFsUGxhY2VzIDwgMCB8
fCBkZWNpbWFsUGxhY2VzID4gMTAwKQotICAgICAgICByZXR1cm4gdGhyb3dWTVJhbmdlRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSwgInRvRXhwb25lbnRpYWwoKSBhcmd1bWVudCBtdXN0IGJlIGJldHdl
ZW4gMCBhbmQgMTAwIl9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1SYW5nZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJ0b0V4cG9uZW50aWFsKCkgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVu
IDAgYW5kIDEwMCJfcyk7CiAKICAgICAvLyBSb3VuZCBpZiB0aGUgYXJndW1lbnQgaXMgbm90IHVu
ZGVmaW5lZCwgYWx3YXlzIGZvcm1hdCBhcyBleHBvbmVudGlhbC4KICAgICBOdW1iZXJUb1N0cmlu
Z0J1ZmZlciBidWZmZXI7CkBAIC00MzAsMTIgKzQzMCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRml4ZWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdAogCiAgICAgZG91YmxlIHg7CiAgICAgaWYgKCF0b1RoaXNOdW1iZXIodm0sIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCksIHgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVRvVGhpc051bWJlckVy
cm9yKGNhbGxGcmFtZSwgc2NvcGUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgICAgICBy
ZXR1cm4gdGhyb3dWTVRvVGhpc051bWJlckVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwogCi0gICAgaW50IGRlY2ltYWxQbGFjZXMgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9JbnRlZ2VyKGNhbGxGcmFtZSkpOworICAg
IGludCBkZWNpbWFsUGxhY2VzID0gc3RhdGljX2Nhc3Q8aW50PihjYWxsRnJhbWUtPmFyZ3VtZW50
KDApLnRvSW50ZWdlcihnbG9iYWxPYmplY3QpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwogICAgIGlmIChkZWNpbWFsUGxhY2VzIDwgMCB8fCBkZWNpbWFsUGxhY2VzID4g
MTAwKQotICAgICAgICByZXR1cm4gdGhyb3dWTVJhbmdlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwg
InRvRml4ZWQoKSBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwIl9zKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1SYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ0b0ZpeGVk
KCkgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCJfcyk7CiAKICAgICAvLyAxNS43
LjQuNS43IHN0YXRlcyAiSWYgeCA+PSAxMF4yMSwgdGhlbiBsZXQgbSA9IFRvU3RyaW5nKHgpIgog
ICAgIC8vIFRoaXMgYWxzbyBjb3ZlcnMgSW5pbml0eSwgYW5kIHN0cnVjdHVyZSB0aGUgY2hlY2sg
c28gdGhhdCBOYU4KQEAgLTQ2NCw3ICs0NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgog
CiAgICAgZG91YmxlIHg7CiAgICAgaWYgKCF0b1RoaXNOdW1iZXIodm0sIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCksIHgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVRvVGhpc051bWJlckVycm9yKGNh
bGxGcmFtZSwgc2NvcGUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgICAgICByZXR1cm4g
dGhyb3dWTVRvVGhpc051bWJlckVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBhcmcgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwogICAgIC8vIFRvIHByZWNpc2lvbiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudCBpcyB0cmVhdGVk
IGFzIFRvU3RyaW5nLgpAQCAtNDcyLDcgKzQ3Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIFN0cmluZzo6bnVt
YmVyKHgpKSk7CiAKICAgICAvLyBQZXJmb3JtIFRvSW50ZWdlciBvbiB0aGUgYXJndW1lbnQgYmVm
b3JlIHJlbWFpbmluZyBzdGVwcy4KLSAgICBpbnQgc2lnbmlmaWNhbnRGaWd1cmVzID0gc3RhdGlj
X2Nhc3Q8aW50PihhcmcudG9JbnRlZ2VyKGNhbGxGcmFtZSkpOworICAgIGludCBzaWduaWZpY2Fu
dEZpZ3VyZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KGFyZy50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIEhhbmRsZSBO
YU4gYW5kIEluZmluaXR5LgpAQCAtNDgwLDcgKzQ4MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmc6Om51bWJlcih4KSkpOwogCiAgICAgaWYgKHNpZ25pZmljYW50RmlndXJlcyA8IDEg
fHwgc2lnbmlmaWNhbnRGaWd1cmVzID4gMTAwKQotICAgICAgICByZXR1cm4gdGhyb3dWTVJhbmdl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgInRvUHJlY2lzaW9uKCkgYXJndW1lbnQgbXVzdCBiZSBi
ZXR3ZWVuIDEgYW5kIDEwMCJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNUmFuZ2VFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAidG9QcmVjaXNpb24oKSBhcmd1bWVudCBtdXN0IGJlIGJldHdl
ZW4gMSBhbmQgMTAwIl9zKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmco
dm0sIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lvbih4LCBzaWduaWZpY2FudEZp
Z3VyZXMsIEtlZXBUcmFpbGluZ1plcm9zKSkpOwogfQpAQCAtNTYwLDkgKzU2MCw5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjCiAKICAgICBkb3VibGUgZG91YmxlVmFsdWU7CiAgICAgaWYgKCF0
b1RoaXNOdW1iZXIodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCksIGRvdWJsZVZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1Ub1RoaXNOdW1iZXJFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1Ub1RoaXNOdW1i
ZXJFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKIAot
ICAgIGF1dG8gcmFkaXggPSBleHRyYWN0VG9TdHJpbmdSYWRpeEFyZ3VtZW50KGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgc2NvcGUpOworICAgIGF1dG8gcmFkaXggPSBleHRyYWN0
VG9TdHJpbmdSYWRpeEFyZ3VtZW50KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSwgc2NvcGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShudW1iZXJUb1N0cmluZ0ludGVybmFs
KHZtLCBkb3VibGVWYWx1ZSwgcmFkaXgpKTsKQEAgLTU3NSwxNSArNTc1LDE1IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoSlNHbG9i
YWxPYmplY3QqIGdsb2JhCiAKICAgICBkb3VibGUgeDsKICAgICBpZiAoIXRvVGhpc051bWJlcih2
bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSwgeCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVG9U
aGlzTnVtYmVyRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVG9UaGlzTnVtYmVyRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAKICNpZiBFTkFCTEUoSU5UTCkKICAgICBJ
bnRsTnVtYmVyRm9ybWF0KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdC0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwotICAgIG51bWJlckZv
cm1hdC0+aW5pdGlhbGl6ZU51bWJlckZvcm1hdCgqY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKKyAgICBudW1iZXJGb3JtYXQtPmluaXRp
YWxpemVOdW1iZXJGb3JtYXQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShudW1iZXJGb3JtYXQtPmZvcm1hdE51bWJlcigqY2FsbEZyYW1lLCB4KSkpOworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG51bWJlckZvcm1hdC0+
Zm9ybWF0TnVtYmVyKGdsb2JhbE9iamVjdCwgeCkpKTsKICNlbHNlCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcih4KS50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHgpLnRvU3RyaW5nKGdsb2JhbE9iamVjdCkpOwogI2Vu
ZGlmCiB9CiAKQEAgLTU5NSwxMSArNTk1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAg
ICAgZG91YmxlIHg7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpOwogICAgIGlmICghdG9UaGlzTnVtYmVyKHZtLCB0aGlzVmFsdWUsIHgpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVRvVGhpc051bWJlckVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVRvVGhpc051bWJlckVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoeCkpOwogfQogCi1pbnQzMl90IGV4dHJhY3RUb1N0
cmluZ1JhZGl4QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSByYWRpeFZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoraW50MzJfdCBleHRyYWN0VG9TdHJpbmdSYWRpeEFyZ3Vt
ZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcmFkaXhWYWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBpZiAocmFkaXhWYWx1ZS5pc1VuZGVmaW5lZCgp
KQogICAgICAgICByZXR1cm4gMTA7CkBAIC02MDksMTMgKzYwOSwxMyBAQCBpbnQzMl90IGV4dHJh
Y3RUb1N0cmluZ1JhZGl4QXJndW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSByYWRpeFZh
bHVlLCBUaHJvdwogICAgICAgICBpZiAocmFkaXggPj0gMiAmJiByYWRpeCA8PSAzNikKICAgICAg
ICAgICAgIHJldHVybiByYWRpeDsKICAgICB9IGVsc2UgewotICAgICAgICBkb3VibGUgcmFkaXhE
b3VibGUgPSByYWRpeFZhbHVlLnRvSW50ZWdlcihzdGF0ZSk7CisgICAgICAgIGRvdWJsZSByYWRp
eERvdWJsZSA9IHJhZGl4VmFsdWUudG9JbnRlZ2VyKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7CiAgICAgICAgIGlmIChyYWRpeERvdWJs
ZSA+PSAyICYmIHJhZGl4RG91YmxlIDw9IDM2KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludDMyX3Q+KHJhZGl4RG91YmxlKTsgICAKICAgICB9CiAKLSAgICB0aHJvd1JhbmdlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsICJ0b1N0cmluZygpIHJhZGl4IGFyZ3VtZW50IG11c3QgYmUg
YmV0d2VlbiAyIGFuZCAzNiJfcyk7CisgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgInRvU3RyaW5nKCkgcmFkaXggYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDIg
YW5kIDM2Il9zKTsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAppbmRleCA3OTdhM2NiMDg4ZGRhYTRlNmExMmNk
MDhkNzljZWY4NDUyM2ZlZDIyLi5mNTQ0YWRjOWJiMmI2ZDY2YWZkNzgyZTE0MjEwOTlhOGVmZmI0
ZjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90
b3R5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5
cGUuaApAQCAtNTUsNiArNTUsNiBAQCBKU1N0cmluZyogaW50MzJUb1N0cmluZyhWTSYsIGludDMy
X3QgdmFsdWUsIGludDMyX3QgcmFkaXgpOwogSlNTdHJpbmcqIGludDUyVG9TdHJpbmcoVk0mLCBp
bnQ2NF90IHZhbHVlLCBpbnQzMl90IHJhZGl4KTsKIEpTU3RyaW5nKiBudW1iZXJUb1N0cmluZyhW
TSYsIGRvdWJsZSB2YWx1ZSwgaW50MzJfdCByYWRpeCk7CiBTdHJpbmcgdG9TdHJpbmdXaXRoUmFk
aXgoZG91YmxlIGRvdWJsZVZhbHVlLCBpbnQzMl90IHJhZGl4KTsKLWludDMyX3QgZXh0cmFjdFRv
U3RyaW5nUmFkaXhBcmd1bWVudChFeGVjU3RhdGUqLCBKU1ZhbHVlIHJhZGl4VmFsdWUsIFRocm93
U2NvcGUmKTsKK2ludDMyX3QgZXh0cmFjdFRvU3RyaW5nUmFkaXhBcmd1bWVudChKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcmFkaXhWYWx1ZSwgVGhyb3dTY29wZSYpOwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAppbmRleCA5NGVjYWIzN2Y5NjQ2ZDE1ZGE1ZWIwZmI4YzI1OTFmOTZjNTI0NTBm
Li4yNWNkZTk0ODk2ZWJkMzcxZmY5ZDExZWNiNDRkOWZlZDY0NzJiYThlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCkBAIC0x
MTUsMTAgKzExNSwxMCBAQCB2b2lkIE9iamVjdENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9iagogfQogCiAvLyBFUyAxOS4x
LjEuMSBPYmplY3QoW3ZhbHVlXSkKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBjb25z
dHJ1Y3RPYmplY3RXaXRoTmV3VGFyZ2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQpCitzdGF0aWMgQUxXQVlTX0lOTElORSBK
U09iamVjdCogY29uc3RydWN0T2JqZWN0V2l0aE5ld1RhcmdldChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBPYmplY3RDb25zdHJ1Y3Rvciogb2JqZWN0Q29u
c3RydWN0b3IgPSBqc0Nhc3Q8T2JqZWN0Q29uc3RydWN0b3IqPihleGVjLT5qc0NhbGxlZSgpKTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgT2JqZWN0Q29uc3RydWN0b3Iq
IG9iamVjdENvbnN0cnVjdG9yID0ganNDYXN0PE9iamVjdENvbnN0cnVjdG9yKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIG5ld1RhcmdldCBjb25kaXRpb24gaW4gdGhpcyBj
YWxsZXIgc2lkZSBpbnN0ZWFkIG9mIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3Ry
dWN0dXJlIHNpZGUuCkBAIC0xMjcsMzggKzEyNywzNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U09iamVjdCogY29uc3RydWN0T2JqZWN0V2l0aE5ld1RhcmdldChFeGVjU3RhdGUqIGV4ZWMsIEpT
RwogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyBuZWl0aGVyIHVuZGVmaW5lZCBub3IgdGhlIGFj
dGl2ZSBmdW5jdGlvbiwgdGhlbgogICAgIGlmIChuZXdUYXJnZXQgJiYgbmV3VGFyZ2V0ICE9IG9i
amVjdENvbnN0cnVjdG9yKSB7CiAgICAgICAgIC8vIGEuIFJldHVybiA/IE9yZGluYXJ5Q3JlYXRl
RnJvbUNvbnN0cnVjdG9yKE5ld1RhcmdldCwgIiVPYmplY3RQcm90b3R5cGUlIikuCi0gICAgICAg
IFN0cnVjdHVyZSogb2JqZWN0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3Vi
Y2xhc3NTdHJ1Y3R1cmUoZXhlYywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPm9iamVjdFN0cnVj
dHVyZUZvck9iamVjdENvbnN0cnVjdG9yKCkpOworICAgICAgICBTdHJ1Y3R1cmUqIG9iamVjdFN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgb2JqZWN0Q29uc3RydWN0b3IsIG5ld1RhcmdldCwgZ2xvYmFsT2JqZWN0LT5vYmpl
Y3RTdHJ1Y3R1cmVGb3JPYmplY3RDb25zdHJ1Y3RvcigpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gY29uc3RydWN0RW1w
dHlPYmplY3Qodm0sIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgfQogCiAgICAgLy8gMi4gSWYgdmFs
dWUgaXMgbnVsbCwgdW5kZWZpbmVkIG9yIG5vdCBzdXBwbGllZCwgcmV0dXJuIE9iamVjdENyZWF0
ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwotICAgIEpTVmFs
dWUgYXJnID0gYXJncy5hdCgwKTsKLSAgICBpZiAoYXJnLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QtPm9i
amVjdFN0cnVjdHVyZUZvck9iamVjdENvbnN0cnVjdG9yKCkpOworICAgIEpTVmFsdWUgYXJndW1l
bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIGlmIChhcmd1bWVudC5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3Qodm0sIGdsb2Jh
bE9iamVjdC0+b2JqZWN0U3RydWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3IoKSk7CiAKICAgICAv
LyAzLiBSZXR1cm4gVG9PYmplY3QodmFsdWUpLgotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgYXJnLnRvT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCkpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgYXJndW1lbnQudG9PYmplY3QoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhPYmplY3RDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdE9iamVjdFdpdGhOZXdUYXJn
ZXQoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdE9iamVjdFdpdGhOZXdUYXJnZXQoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpKTsKIH0KIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE9iamVjdENvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0T2JqZWN0V2l0aE5ld1RhcmdldChjYWxs
RnJhbWUsIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjb25zdHJ1Y3RPYmplY3RXaXRoTmV3VGFyZ2V0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBKU1ZhbHVlKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgSlNPYmplY3Qq
IG9iamVjdCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmplY3QoY2FsbEZyYW1lKTsKKyAg
ICBKU09iamVjdCogb2JqZWN0ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b09iamVjdChnbG9i
YWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVj
dC0+Z2V0UHJvdG90eXBlKHZtLCBjYWxsRnJhbWUpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUob2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9i
amVjdCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1
Y3RvclNldFByb3RvdHlwZU9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpAQCAtMTY4LDYzICsxNjcsNjMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvclNldFByb3RvdHlwZU9mKEpTR2xvYmFsT2JqZWN0KiBn
bG8KIAogICAgIEpTVmFsdWUgb2JqZWN0VmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwog
ICAgIGlmIChvYmplY3RWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiQ2Fubm90IHNldCBwcm90b3R5cGUg
b2YgdW5kZWZpbmVkIG9yIG51bGwiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHNldCBwcm90b3R5cGUgb2YgdW5kZWZpbmVk
IG9yIG51bGwiX3MpOwogCiAgICAgSlNWYWx1ZSBwcm90b1ZhbHVlID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgxKTsKICAgICBpZiAoIXByb3RvVmFsdWUuaXNPYmplY3QoKSAmJiAhcHJvdG9WYWx1ZS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgIlByb3RvdHlwZSB2YWx1ZSBjYW4gb25seSBiZSBhbiBvYmplY3Qgb3IgbnVsbCJfcyk7Cisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm90
b3R5cGUgdmFsdWUgY2FuIG9ubHkgYmUgYW4gb2JqZWN0IG9yIG51bGwiX3MpOwogCi0gICAgSlNP
YmplY3QqIG9iamVjdCA9IG9iamVjdFZhbHVlLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNP
YmplY3QqIG9iamVjdCA9IG9iamVjdFZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBib29s
IHNob3VsZFRocm93SWZDYW50U2V0ID0gdHJ1ZTsKLSAgICBib29sIGRpZFNldFByb3RvdHlwZSA9
IG9iamVjdC0+c2V0UHJvdG90eXBlKHZtLCBjYWxsRnJhbWUsIHByb3RvVmFsdWUsIHNob3VsZFRo
cm93SWZDYW50U2V0KTsKKyAgICBib29sIGRpZFNldFByb3RvdHlwZSA9IG9iamVjdC0+c2V0UHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvVmFsdWUsIHNob3VsZFRocm93SWZDYW50U2V0
KTsKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChkaWRTZXRQcm90b3R5cGUsIHNjb3BlLmV4
Y2VwdGlvbigpIHx8IGRpZFNldFByb3RvdHlwZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvYmplY3RWYWx1ZSk7CiB9CiAKLUpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IGRlc2NyaXB0b3I7Ci0gICAgaWYgKCFvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQorICAgIGlmICghb2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
KQogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzVW5kZWZpbmVkKCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBKU09iamVjdCogcmVzdWx0
ID0gY29uc3RydWN0T2JqZWN0RnJvbVByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBkZXNjcmlwdG9y
KTsKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0T2JqZWN0RnJvbVByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWxPYmplY3QsIGRlc2NyaXB0b3IpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQo
ISFzY29wZS5leGNlcHRpb24oKSA9PSAhcmVzdWx0KTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1
ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogb2JqZWN0KQorSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blBy
b3BlcnR5RGVzY3JpcHRvcnMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IG9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHBy
b3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRl
KSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAotICAgIEpTT2JqZWN0KiBkZXNjcmlwdG9ycyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOworICAgIEpTT2JqZWN0KiBkZXNjcmlwdG9ycyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogcHJvcGVydGllcykgewogICAgICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9y
ID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKKyAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAg
IGlmICghZGlkR2V0RGVzY3JpcHRvcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IEpTT2JqZWN0KiBmcm9tRGVzY3JpcHRvciA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURl
c2NyaXB0b3IoZXhlYywgZGVzY3JpcHRvcik7CisgICAgICAgIEpTT2JqZWN0KiBmcm9tRGVzY3Jp
cHRvciA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0
LCBkZXNjcmlwdG9yKTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlv
bigpID09ICFmcm9tRGVzY3JpcHRvcik7CiAgICAgICAgIGlmICghZnJvbURlc2NyaXB0b3IpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChkZXNjcmlwdG9ycyk7Ci0gICAgICAgIGRlc2NyaXB0b3JzLT5wdXRPd25EYXRhUHJv
cGVydHlNYXlCZUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgZnJvbURlc2NyaXB0b3IsIHNsb3Qp
OworICAgICAgICBkZXNjcmlwdG9ycy0+cHV0T3duRGF0YVByb3BlcnR5TWF5QmVJbmRleChnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZnJvbURlc2NyaXB0b3IsIHNsb3QpOwogICAgICAgICBz
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIH0KIApAQCAtMjM1LDIwICsyMzQsMjAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU0dsb2JhbE8KIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGNhbGxGcmFtZSk7
CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmplY3Qo
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSku
dG9Qcm9wZXJ0eUtleShjYWxsRnJhbWUpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoY2FsbEZyYW1lLCBvYmplY3QsIHByb3BlcnR5TmFtZSkpKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3Rv
ckdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxPYmplY3QsIG9iamVjdCwgcHJvcGVydHlO
YW1lKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVj
dG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGNhbGxGcmFtZSk7
CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmplY3Qo
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShv
YmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FsbEZyYW1lLCBvYmpl
Y3QpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUob2Jq
ZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGdsb2JhbE9iamVjdCwgb2Jq
ZWN0KSkpOwogfQogCiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KQEAgLTI1
Niw5ICsyNTUsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVj
dG9yR2V0T3duUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdAogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgSlNPYmplY3QqIG9iamVjdCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmpl
Y3QoY2FsbEZyYW1lKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhjYWxsRnJhbWUsIG9iamVjdCwgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtl
eXMoZ2xvYmFsT2JqZWN0LCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKSk7CiB9CiAKIC8vIEZJWE1FOiBVc2UgdGhlIGVu
dW1lcmF0aW9uIGNhY2hlLgpAQCAtMjY2LDE4ICsyNjUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5U3ltYm9scyhKU0dsb2Jh
bE9iamUKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIG9i
amVjdCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoY2Fs
bEZyYW1lLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN5bWJvbHMsIERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1Zh
bHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBQcm9wZXJ0
eU5hbWVNb2RlOjpTeW1ib2xzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSkpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yS2V5cyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoY2FsbEZyYW1lLCBvYmpl
Y3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4
Y2x1ZGUpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
b3duUHJvcGVydHlLZXlzKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSkpOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yQXNzaWduKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMjg3LDggKzI4Niw4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JBc3NpZ24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAKICAgICBKU1ZhbHVlIHRhcmdldFZhbHVlID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBpZiAodGFyZ2V0VmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgIk9iamVjdC5hc3NpZ24gcmVxdWlyZXMgdGhhdCBpbnB1dCBwYXJhbWV0ZXIgbm90IGJlIG51
bGwgb3IgdW5kZWZpbmVkIl9zKTsKLSAgICBKU09iamVjdCogdGFyZ2V0ID0gdGFyZ2V0VmFsdWUu
dG9PYmplY3QoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIk9iamVjdC5hc3NpZ24gcmVxdWlyZXMgdGhhdCBpbnB1dCBwYXJh
bWV0ZXIgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIl9zKTsKKyAgICBKU09iamVjdCogdGFyZ2V0
ID0gdGFyZ2V0VmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgLy8gRklYTUU6IEV4dGVuZCB0aGlzIGZvciBub24g
SlNGaW5hbE9iamVjdC4gRm9yIGV4YW1wbGUsIHdlIHdvdWxkIGxpa2UgdG8gdXNlIHRoaXMgZmFz
dCBwYXRoIGZvciBmdW5jdGlvbiBvYmplY3RzIHRvby4KQEAgLTMwMiwxMiArMzAxLDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JBc3NpZ24oSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIEpTVmFsdWUgc291cmNlVmFsdWUgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpOwogICAgICAgICBpZiAoc291cmNlVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBKU09iamVj
dCogc291cmNlID0gc291cmNlVmFsdWUudG9PYmplY3QoY2FsbEZyYW1lKTsKKyAgICAgICAgSlNP
YmplY3QqIHNvdXJjZSA9IHNvdXJjZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgaWYgKHRhcmdl
dENhblBlcmZvcm1GYXN0UHV0KSB7CiAgICAgICAgICAgICBpZiAoIXNvdXJjZS0+c3RhdGljUHJv
cGVydGllc1JlaWZpZWQodm0pKSB7Ci0gICAgICAgICAgICAgICAgc291cmNlLT5yZWlmeUFsbFN0
YXRpY1Byb3BlcnRpZXMoY2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UtPnJlaWZ5
QWxsU3RhdGljUHJvcGVydGllcyhnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB9CiAKQEAgLTM3MywxMiAr
MzcyLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JB
c3NpZ24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHRhcmdldENhblBlcmZv
cm1GYXN0UHV0ID0gZmFsc2U7CiAKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGll
cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xN
b2RlOjpFeGNsdWRlKTsKLSAgICAgICAgc291cmNlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMoc291cmNlLCBjYWxsRnJhbWUsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9k
ZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgICAgIHNvdXJjZS0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVk
ZSkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAg
IGF1dG8gYXNzaWduID0gWyZdIChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSB7CiAgICAgICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzb3VyY2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7Ci0gICAgICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0g
c291cmNlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdChzb3VyY2UsIGNhbGxG
cmFtZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgICAgIGJvb2wgaGFzUHJvcGVydHkg
PSBzb3VyY2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHNvdXJjZSwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgICAgIGlmICghaGFzUHJvcGVydHkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzg3LDEzICszODYsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckFzc2lnbihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWMKIAogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAgICAgIGlm
IChMSUtFTFkoIXNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSkpCi0gICAgICAgICAgICAg
ICAgdmFsdWUgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZhbHVlID0gc291cmNlLT5n
ZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIHZhbHVlID0gc291
cmNlLT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgICAgICAgICAgUHV0UHJvcGVydHlT
bG90IHB1dFByb3BlcnR5U2xvdCh0YXJnZXQsIHRydWUpOwotICAgICAgICAgICAgdGFyZ2V0LT5w
dXRJbmxpbmUoY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3Qp
OworICAgICAgICAgICAgdGFyZ2V0LT5wdXRJbmxpbmUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogICAgICAgICB9OwogCiAgICAgICAgIC8vIEZp
cnN0IGxvb3AgaXMgZm9yIHN0cmluZ3MuIFNlY29uZCBsb29wIGlzIGZvciBzeW1ib2xzIHRvIGtl
ZXAgc3RhbmRhcmRpemVkIG9yZGVyIHJlcXVpcmVtZW50IGluIHRoZSBzcGVjLgpAQCAtNDMyLDIx
ICs0MzEsMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
clZhbHVlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKIAogICAgIEpTVmFsdWUgdGFyZ2V0
VmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICh0YXJnZXRWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJh
bWUsIHNjb3BlLCAiT2JqZWN0LnZhbHVlcyByZXF1aXJlcyB0aGF0IGlucHV0IHBhcmFtZXRlciBu
b3QgYmUgbnVsbCBvciB1bmRlZmluZWQiX3MpOwotICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0YXJn
ZXRWYWx1ZS50b09iamVjdChjYWxsRnJhbWUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiT2JqZWN0LnZhbHVlcyByZXF1aXJlcyB0aGF0IGlu
cHV0IHBhcmFtZXRlciBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQiX3MpOworICAgIEpTT2JqZWN0
KiB0YXJnZXQgPSB0YXJnZXRWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBKU0FycmF5KiB2YWx1ZXMgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGNhbGxGcmFtZSwgbnVsbHB0cik7CisgICAgSlNBcnJheSogdmFsdWVz
ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9w
ZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6
RXhjbHVkZSk7Ci0gICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXModGFyZ2V0LCBjYWxsRnJhbWUsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51
bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSkt
PmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0LCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIEVu
dW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsK
ICAgICBhdXRvIGFkZFZhbHVlID0gWyZdIChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSB7CiAg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRhcmdldCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKLSAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHRh
cmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGFyZ2V0LCBjYWxsRnJh
bWUsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSB0YXJn
ZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHRhcmdldCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogICAgICAgICBpZiAoIWhhc1Byb3BlcnR5KQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtNDU1LDEyICs0NTQsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RDb25zdHJ1Y3RvclZhbHVlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKIAogICAg
ICAgICBKU1ZhbHVlIHZhbHVlOwogICAgICAgICBpZiAoTElLRUxZKCFzbG90LmlzVGFpbnRlZEJ5
T3BhcXVlT2JqZWN0KCkpKQotICAgICAgICAgICAgdmFsdWUgPSBzbG90LmdldFZhbHVlKGNhbGxG
cmFtZSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZh
bHVlID0gdGFyZ2V0LT5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAg
dmFsdWUgPSB0YXJnZXQtPmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKLSAgICAgICAgdmFsdWVzLT5w
dXREaXJlY3RJbmRleChjYWxsRnJhbWUsIGluZGV4KyssIHZhbHVlKTsKKyAgICAgICAgdmFsdWVz
LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4KyssIHZhbHVlKTsKICAgICB9Owog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbnVtUHJvcGVydGllcyA9IHByb3BlcnRpZXMuc2l6
ZSgpOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKSB7CkBAIC00NzgsNjMgKzQ3Nyw2MyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yVmFsdWVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplYwogCiAvLyBFUzYgNi4yLjQuNSBUb1Byb3BlcnR5RGVzY3JpcHRv
cgogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWRlc2Ny
aXB0b3IKLWJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGluLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2MpCitib29sIHRvUHJvcGVydHlEZXNjcmlwdG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgaW4sIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzYykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBpZiAoIWluLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdC4iX3Mp
OworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJvcGVydHkg
ZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3QuIl9zKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBhc09iamVjdChpbik7CiAKLSAg
ICBib29sIGhhc1Byb3BlcnR5ID0gZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPmVudW1lcmFibGUpOworICAgIGJvb2wgaGFzUHJvcGVydHkgPSBkZXNjcmlw
dGlvbi0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5lbnVtZXJh
YmxlKTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhaGFzUHJv
cGVydHkpOwogICAgIGlmIChoYXNQcm9wZXJ0eSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
ZGVzY3JpcHRpb24tPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5lbnVtZXJhYmxlKTsKKyAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5w
cm9wZXJ0eU5hbWVzLT5lbnVtZXJhYmxlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwotICAgICAgICBkZXNjLnNldEVudW1lcmFibGUodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsKKyAgICAgICAgZGVzYy5zZXRFbnVtZXJhYmxlKHZhbHVlLnRvQm9vbGVhbihnbG9i
YWxPYmplY3QpKTsKICAgICB9IGVsc2UKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwogCi0gICAgaGFzUHJvcGVydHkgPSBkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHko
ZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y29uZmlndXJhYmxlKTsKKyAgICBoYXNQcm9wZXJ0eSA9
IGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMt
PmNvbmZpZ3VyYWJsZSk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkg
fHwgIWhhc1Byb3BlcnR5KTsKICAgICBpZiAoaGFzUHJvcGVydHkpIHsKLSAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y29uZmln
dXJhYmxlKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZ2xvYmFs
T2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25maWd1cmFibGUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxl
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKHZh
bHVlLnRvQm9vbGVhbihnbG9iYWxPYmplY3QpKTsKICAgICB9IGVsc2UKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICBo
YXNQcm9wZXJ0eSA9IGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT52YWx1ZSk7CisgICAgaGFzUHJvcGVydHkgPSBkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHko
Z2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSk7CiAgICAgRVhDRVBUSU9OX0FT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWhhc1Byb3BlcnR5KTsKICAgICBpZiAoaGFzUHJv
cGVydHkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+dmFsdWUpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3Jp
cHRpb24tPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBkZXNjLnNldFZh
bHVlKHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwogCi0gICAgaGFzUHJvcGVydHkgPSBkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHko
ZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+d3JpdGFibGUpOworICAgIGhhc1Byb3BlcnR5ID0gZGVz
Y3JpcHRpb24tPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+d3Jp
dGFibGUpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFoYXNQ
cm9wZXJ0eSk7CiAgICAgaWYgKGhhc1Byb3BlcnR5KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPndyaXRhYmxlKTsKKyAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5w
cm9wZXJ0eU5hbWVzLT53cml0YWJsZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKLSAgICAgICAgZGVzYy5zZXRXcml0YWJsZSh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOworICAgICAgICBkZXNjLnNldFdyaXRhYmxlKHZhbHVlLnRvQm9vbGVhbihnbG9iYWxPYmpl
Y3QpKTsKICAgICB9IGVsc2UKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFs
c2UpOwogCi0gICAgaGFzUHJvcGVydHkgPSBkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+Z2V0KTsKKyAgICBoYXNQcm9wZXJ0eSA9IGRlc2NyaXB0aW9uLT5o
YXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmdldCk7CiAgICAgRVhD
RVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWhhc1Byb3BlcnR5KTsKICAgICBp
ZiAoaGFzUHJvcGVydHkpIHsKLSAgICAgICAgSlNWYWx1ZSBnZXQgPSBkZXNjcmlwdGlvbi0+Z2V0
KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmdldCk7CisgICAgICAgIEpTVmFsdWUgZ2V0ID0gZGVz
Y3JpcHRpb24tPmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmdldCk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKCFnZXQu
aXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAg
ICAgICBpZiAoZ2V0Q2FsbERhdGEodm0sIGdldCwgY2FsbERhdGEpID09IENhbGxUeXBlOjpOb25l
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJHZXR0ZXIg
bXVzdCBiZSBhIGZ1bmN0aW9uLiJfcyk7CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIkdldHRlciBtdXN0IGJlIGEgZnVuY3Rpb24uIl9zKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTU0MiwxNSArNTQxLDE1IEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGluLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2MpCiAgICAgfSBlbHNlCiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAotICAgIGhhc1Byb3Bl
cnR5ID0gZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNl
dCk7CisgICAgaGFzUHJvcGVydHkgPSBkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5zZXQpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpIHx8ICFoYXNQcm9wZXJ0eSk7CiAgICAgaWYgKGhhc1Byb3BlcnR5KSB7Ci0g
ICAgICAgIEpTVmFsdWUgc2V0ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5zZXQpOworICAgICAgICBKU1ZhbHVlIHNldCA9IGRlc2NyaXB0aW9uLT5nZXQoZ2xvYmFs
T2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5zZXQpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmICghc2V0LmlzVW5kZWZpbmVkKCkpIHsKICAg
ICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAgaWYgKGdldENhbGxEYXRh
KHZtLCBzZXQsIGNhbGxEYXRhKSA9PSBDYWxsVHlwZTo6Tm9uZSkgewotICAgICAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiU2V0dGVyIG11c3QgYmUgYSBmdW5jdGlvbi4i
X3MpOworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJTZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uLiJfcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01NjIsMTIgKzU2MSwxMiBAQCBi
b29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpbiwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChk
ZXNjLnZhbHVlKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJJbnZh
bGlkIHByb3BlcnR5LiAgJ3ZhbHVlJyBwcmVzZW50IG9uIHByb3BlcnR5IHdpdGggZ2V0dGVyIG9y
IHNldHRlci4iX3MpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiSW52YWxpZCBwcm9wZXJ0eS4gICd2YWx1ZScgcHJlc2VudCBvbiBwcm9wZXJ0eSB3aXRoIGdl
dHRlciBvciBzZXR0ZXIuIl9zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAg
IGlmIChkZXNjLndyaXRhYmxlUHJlc2VudCgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCAiSW52YWxpZCBwcm9wZXJ0eS4gICd3cml0YWJsZScgcHJlc2VudCBvbiBwcm9w
ZXJ0eSB3aXRoIGdldHRlciBvciBzZXR0ZXIuIl9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIkludmFsaWQgcHJvcGVydHkuICAnd3JpdGFibGUnIHByZXNl
bnQgb24gcHJvcGVydHkgd2l0aCBnZXR0ZXIgb3Igc2V0dGVyLiJfcyk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC01NzksMjggKzU3OCwyOCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRGVmaW5lUHJvcGVy
dHkoSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiUHJvcGVy
dGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIl9zKTsKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlByb3BlcnRpZXMgY2FuIG9u
bHkgYmUgZGVmaW5lZCBvbiBPYmplY3RzLiJfcyk7CiAgICAgSlNPYmplY3QqIG9iaiA9IGFzT2Jq
ZWN0KGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gY2Fs
bEZyYW1lLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CisgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZ2xvYmFs
T2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICBhdXRvIHN1Y2Nlc3Mg
PSB0b1Byb3BlcnR5RGVzY3JpcHRvcihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMiks
IGRlc2NyaXB0b3IpOworICAgIGF1dG8gc3VjY2VzcyA9IHRvUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgyKSwgZGVzY3JpcHRvcik7CiAgICAgRVhD
RVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgPT0gc3VjY2Vzcyk7CiAgICAgaWYgKCFz
dWNjZXNzKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBB
U1NFUlQoKGRlc2NyaXB0b3IuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vz
c29yKSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwogICAgIHNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7Ci0gICAgb2JqLT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93
blByb3BlcnR5KG9iaiwgY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRydWUp
OworICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmosIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0cnVlKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvYmopKTsKIH0KIAotc3RhdGljIEpTVmFs
dWUgZGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpT
T2JqZWN0KiBwcm9wZXJ0aWVzKQorc3RhdGljIEpTVmFsdWUgZGVmaW5lUHJvcGVydGllcyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0LCBKU09iamVjdCogcHJv
cGVydGllcykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAg
IGFzT2JqZWN0KHByb3BlcnRpZXMpLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMoYXNPYmplY3QocHJvcGVydGllcyksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CisgICAgYXNPYmplY3QocHJv
cGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVjdChw
cm9wZXJ0aWVzKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUo
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVz
LnNpemUoKTsKICAgICBWZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBkZXNjcmlwdG9yczsKQEAg
LTYxMiwxMCArNjExLDEwIEBAIHN0YXRpYyBKU1ZhbHVlIGRlZmluZVByb3BlcnRpZXMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBKU09iamVjdCogcHJvCiAgICAgfSBcCiB9IHdo
aWxlIChmYWxzZSkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkr
KykgewotICAgICAgICBKU1ZhbHVlIHByb3AgPSBwcm9wZXJ0aWVzLT5nZXQoZXhlYywgcHJvcGVy
dHlOYW1lc1tpXSk7CisgICAgICAgIEpTVmFsdWUgcHJvcCA9IHByb3BlcnRpZXMtPmdldChnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZXNbaV0pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
X0NMRUFSSU5HX09WRVJGTE9XKHsgfSk7CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNj
cmlwdG9yOwotICAgICAgICB0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wLCBkZXNjcmlw
dG9yKTsKKyAgICAgICAgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBwcm9wLCBk
ZXNjcmlwdG9yKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTl9DTEVBUklOR19PVkVSRkxP
Vyh7IH0pOwogICAgICAgICBkZXNjcmlwdG9ycy5hcHBlbmQoZGVzY3JpcHRvcik7CiAgICAgICAg
IC8vIEVuc3VyZSB3ZSBtYXJrIGFsbCB0aGUgdmFsdWVzIHRoYXQgd2UncmUgYWNjdW11bGF0aW5n
CkBAIC02MzQsNyArNjMzLDcgQEAgc3RhdGljIEpTVmFsdWUgZGVmaW5lUHJvcGVydGllcyhFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTT2JqZWN0KiBwcm8KICAgICAgICAgYXV0
byYgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTsKICAgICAgICAgQVNTRVJUKCFwcm9w
ZXJ0eU5hbWUuaXNQcml2YXRlTmFtZSgpKTsKIAotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3JzW2ldLCB0cnVlKTsKKyAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3JzW2ldLCB0cnVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgcmV0dXJuIG9iamVjdDsKQEAgLTY0NiwxMyArNjQ1LDEzIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0aWVzKEpT
R2xvYmFsT2JqZWN0KiBnCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgaWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJQcm9wZXJ0aWVzIGNh
biBvbmx5IGJlIGRlZmluZWQgb24gT2JqZWN0cy4iX3MpOworICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJvcGVydGllcyBjYW4gb25seSBiZSBk
ZWZpbmVkIG9uIE9iamVjdHMuIl9zKTsKICAgICBKU09iamVjdCogdGFyZ2V0T2JqID0gYXNPYmpl
Y3QoY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Ci0gICAgSlNPYmplY3QqIHByb3BzID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgxKS50b09iamVjdChjYWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiBwcm9w
cyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBF
WENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXByb3BzKTsKICAgICBpZiAo
VU5MSUtFTFkoIXByb3BzKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoZGVmaW5lUHJvcGVydGll
cyhjYWxsRnJhbWUsIHRhcmdldE9iaiwgcHJvcHMpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoZGVmaW5lUHJvcGVydGllcyhnbG9iYWxPYmplY3QsIHRh
cmdldE9iaiwgcHJvcHMpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3RydWN0b3JDcmVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCkBAIC02NjIsMTYgKzY2MSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yQ3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplYwogCiAgICAgSlNWYWx1ZSBwcm90byA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAg
aWYgKCFwcm90by5pc09iamVjdCgpICYmICFwcm90by5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIk9iamVjdCBwcm90b3R5cGUgbWF5
IG9ubHkgYmUgYW4gT2JqZWN0IG9yIG51bGwuIl9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIk9iamVjdCBwcm90b3R5cGUgbWF5IG9ubHkg
YmUgYW4gT2JqZWN0IG9yIG51bGwuIl9zKTsKICAgICBKU09iamVjdCogbmV3T2JqZWN0ID0gcHJv
dG8uaXNPYmplY3QoKQotICAgICAgICA/IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGNhbGxGcmFtZSwg
YXNPYmplY3QocHJvdG8pKQotICAgICAgICA6IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGNhbGxGcmFt
ZSwgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpOworICAgICAg
ICA/IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgYXNPYmplY3QocHJvdG8pKQor
ICAgICAgICA6IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHZtLCBnbG9iYWxPYmplY3QtPm51bGxQcm90
b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnQoMSku
aXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuZXdPYmplY3Qp
OwotICAgIEpTT2JqZWN0KiBwcm9wZXJ0aWVzID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b09iamVjdChjYWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiBwcm9wZXJ0aWVzID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShkZWZpbmVQcm9wZXJ0aWVzKGNhbGxGcmFtZSwgbmV3
T2JqZWN0LCBwcm9wZXJ0aWVzKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKGRlZmluZVByb3BlcnRpZXMoZ2xvYmFsT2JqZWN0LCBuZXdPYmplY3QsIHBy
b3BlcnRpZXMpKSk7CiB9CiAKIGVudW0gY2xhc3MgSW50ZWdyaXR5TGV2ZWwgewpAQCAtNjgwLDE4
ICs2NzksMTggQEAgZW51bSBjbGFzcyBJbnRlZ3JpdHlMZXZlbCB7CiB9OwogCiB0ZW1wbGF0ZTxJ
bnRlZ3JpdHlMZXZlbCBsZXZlbD4KLWJvb2wgc2V0SW50ZWdyaXR5TGV2ZWwoRXhlY1N0YXRlKiBl
eGVjLCBWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCitib29sIHNldEludGVncml0eUxldmVsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKIHsK
ICAgICAvLyBTZWUgaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2V0aW50ZWdy
aXR5bGV2ZWwuCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNp
b25zKG9iamVjdCwgZXhlYyk7CisgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNz
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVy
dGllcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1i
b2xNb2RlOjpFeGNsdWRlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250
RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgUHJvcGVydHlOYW1lQXJy
YXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CkBAIC03MDMsNyArNzAy
LDcgQEAgYm9vbCBzZXRJbnRlZ3JpdHlMZXZlbChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNP
YmplY3QqIG9iamVjdCkKICAgICAgICAgaWYgKGxldmVsID09IEludGVncml0eUxldmVsOjpTZWFs
ZWQpCiAgICAgICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBvYmplY3QtPmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MpOworICAgICAg
ICAgICAgYm9vbCBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzYyk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAoIWhh
c1Byb3BlcnR5RGVzY3JpcHRvcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTcxNCwx
NCArNzEzLDE0IEBAIGJvb2wgc2V0SW50ZWdyaXR5TGV2ZWwoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShm
YWxzZSk7CiAgICAgICAgIH0KIAotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOwor
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0
LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzYywgdHJ1ZSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIHRlbXBsYXRlPEludGVncml0eUxldmVsIGxldmVsPgotYm9vbCB0ZXN0SW50ZWdyaXR5TGV2
ZWwoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCitib29sIHRlc3RJ
bnRlZ3JpdHlMZXZlbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCkBAIC03MjksNyArNzI4LDcgQEAgYm9vbCB0ZXN0SW50ZWdyaXR5TGV2ZWwoRXhlY1N0YXRl
KiBleGVjLCBWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgLy8gMi4gQXNzZXJ0OiBsZXZl
bCBpcyBlaXRoZXIgInNlYWxlZCIgb3IgImZyb3plbiIuCiAKICAgICAvLyAzLiBMZXQgc3RhdHVz
IGJlID9Jc0V4dGVuc2libGUoTykuCi0gICAgYm9vbCBzdGF0dXMgPSBvYmplY3QtPmlzRXh0ZW5z
aWJsZShleGVjKTsKKyAgICBib29sIHN0YXR1cyA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGdsb2Jh
bE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8v
IDQuIElmIHN0YXR1cyBpcyB0cnVlLCByZXR1cm4gZmFsc2UuCkBAIC03MzgsNyArNzM3LDcgQEAg
Ym9vbCB0ZXN0SW50ZWdyaXR5TGV2ZWwoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTT2JqZWN0
KiBvYmplY3QpCiAKICAgICAvLyA2LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNd
XSgpLgogICAgIFByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBrZXlz
LCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAg
IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
SW5jbHVkZSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAv
LyA3LiBGb3IgZWFjaCBlbGVtZW50IGsgb2Yga2V5cywgZG8KQEAgLTc0OSw3ICs3NDgsNyBAQCBi
b29sIHRlc3RJbnRlZ3JpdHlMZXZlbChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNPYmplY3Qq
IG9iamVjdCkKIAogICAgICAgICAvLyBhLiBMZXQgY3VycmVudERlc2MgYmUgPyBPLltbR2V0T3du
UHJvcGVydHldXShrKQogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKLSAgICAgICAg
Ym9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjKTsKKyAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9y
ID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIGRlc2MpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgICAgIC8vIGIuIElmIGN1cnJlbnREZXNjIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAg
LTc2OSw5ICs3NjgsOSBAQCBib29sIHRlc3RJbnRlZ3JpdHlMZXZlbChFeGVjU3RhdGUqIGV4ZWMs
IFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNPYmpl
Y3QqIG9iamVjdENvbnN0cnVjdG9yU2VhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QpCitKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JTZWFsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGaW5hbE9iamVj
dCo+KHZtLCBvYmplY3QpICYmICFoYXNJbmRleGVkUHJvcGVydGllcyhvYmplY3QtPmluZGV4aW5n
VHlwZSgpKSkgewpAQCAtNzc5LDEwICs3NzgsMTAgQEAgSlNPYmplY3QqIG9iamVjdENvbnN0cnVj
dG9yU2VhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIHJldHVy
biBvYmplY3Q7CiAgICAgfQogCi0gICAgYm9vbCBzdWNjZXNzID0gc2V0SW50ZWdyaXR5TGV2ZWw8
SW50ZWdyaXR5TGV2ZWw6OlNlYWxlZD4oZXhlYywgdm0sIG9iamVjdCk7CisgICAgYm9vbCBzdWNj
ZXNzID0gc2V0SW50ZWdyaXR5TGV2ZWw8SW50ZWdyaXR5TGV2ZWw6OlNlYWxlZD4oZ2xvYmFsT2Jq
ZWN0LCB2bSwgb2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCAiVW5hYmxlIHRvIHByZXZlbnQgZXh0ZW5zaW9uIGluIE9iamVjdC5zZWFs
Il9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlVuYWJs
ZSB0byBwcmV2ZW50IGV4dGVuc2lvbiBpbiBPYmplY3Quc2VhbCJfcyk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIApAQCAtNzk5LDEyICs3OTgsMTIgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvclNlYWwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG9iaik7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvclNlYWwoY2FsbEZyYW1lLCBhc09iamVjdChvYmopKSkp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdENv
bnN0cnVjdG9yU2VhbChnbG9iYWxPYmplY3QsIGFzT2JqZWN0KG9iaikpKSk7CiB9CiAKLUpTT2Jq
ZWN0KiBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QpCitKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0ZpbmFs
T2JqZWN0Kj4odm0sIG9iamVjdCkgJiYgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9iamVjdC0+aW5k
ZXhpbmdUeXBlKCkpKSB7CkBAIC04MTIsMTAgKzgxMSwxMCBAQCBKU09iamVjdCogb2JqZWN0Q29u
c3RydWN0b3JGcmVlemUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQogICAgICAg
ICByZXR1cm4gb2JqZWN0OwogICAgIH0KIAotICAgIGJvb2wgc3VjY2VzcyA9IHNldEludGVncml0
eUxldmVsPEludGVncml0eUxldmVsOjpGcm96ZW4+KGV4ZWMsIHZtLCBvYmplY3QpOworICAgIGJv
b2wgc3VjY2VzcyA9IHNldEludGVncml0eUxldmVsPEludGVncml0eUxldmVsOjpGcm96ZW4+KGds
b2JhbE9iamVjdCwgdm0sIG9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CiAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgewotICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSwgIlVuYWJsZSB0byBwcmV2ZW50IGV4dGVuc2lvbiBpbiBPYmpl
Y3QuZnJlZXplIl9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlVuYWJsZSB0byBwcmV2ZW50IGV4dGVuc2lvbiBpbiBPYmplY3QuZnJlZXplIl9zKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBvYmplY3Q7CkBAIC04Mjks
NyArODI4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckZyZWV6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICBKU1ZhbHVlIG9iaiA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwotICAgIEpTT2JqZWN0KiByZXN1bHQgPSBvYmpl
Y3RDb25zdHJ1Y3RvckZyZWV6ZShjYWxsRnJhbWUsIGFzT2JqZWN0KG9iaikpOworICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShnbG9iYWxPYmplY3QsIGFzT2Jq
ZWN0KG9iaikpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTg0MSw3ICs4
NDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yUHJl
dmVudEV4dGVuc2lvbnMoSlNHbG9iYWxPYmplY3QqCiAgICAgaWYgKCFhcmd1bWVudC5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFyZ3VtZW50KTsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QoYXJndW1lbnQpOwotICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGNhbGxGcmFtZSk7CisgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZ2xvYmFsT2JqZWN0
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7CiB9CiAKQEAgLTg2MCw3ICs4
NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNT
ZWFsZWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmlzU2VhbGVkKHZtKSkpOwogCiAgICAgLy8gMi4gUmV0
dXJuID8gVGVzdEludGVncml0eUxldmVsKE8sICJzZWFsZWQiKS4KLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0ZXN0SW50ZWdyaXR5TGV2ZWw8SW50ZWdyaXR5TGV2ZWw6OlNl
YWxlZD4oY2FsbEZyYW1lLCB2bSwgb2JqZWN0KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRlc3RJbnRlZ3JpdHlMZXZlbDxJbnRlZ3JpdHlMZXZlbDo6U2VhbGVkPihn
bG9iYWxPYmplY3QsIHZtLCBvYmplY3QpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc0Zyb3plbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTg3OCw3ICs4NzcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNGcm96ZW4oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iagogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihv
YmplY3QtPmlzRnJvemVuKHZtKSkpOwogCiAgICAgLy8gMi4gUmV0dXJuID8gVGVzdEludGVncml0
eUxldmVsKE8sICJmcm96ZW4iKS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0ZXN0SW50ZWdyaXR5TGV2ZWw8SW50ZWdyaXR5TGV2ZWw6OkZyb3plbj4oY2FsbEZyYW1lLCB2
bSwgb2JqZWN0KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRlc3RJ
bnRlZ3JpdHlMZXZlbDxJbnRlZ3JpdHlMZXZlbDo6RnJvemVuPihnbG9iYWxPYmplY3QsIHZtLCBv
YmplY3QpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3Ry
dWN0b3JJc0V4dGVuc2libGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCkBAIC04ODksMjIgKzg4OCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YQogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9i
aik7Ci0gICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5zaWJsZShjYWxsRnJh
bWUpOworICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gb2JqZWN0LT5pc0V4dGVuc2libGUoZ2xvYmFs
T2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oc2FtZVZhbHVlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2Fs
bEZyYW1lLT5hcmd1bWVudCgxKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihzYW1lVmFsdWUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDEpKSkpOwogfQogCi1KU0FycmF5KiBvd25Qcm9wZXJ0eUtleXMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlIHByb3BlcnR5
TmFtZU1vZGUsIERvbnRFbnVtUHJvcGVydGllc01vZGUgZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkK
K0pTQXJyYXkqIG93blByb3BlcnR5S2V5cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlIHByb3BlcnR5TmFtZU1vZGUsIERvbnRF
bnVtUHJvcGVydGllc01vZGUgZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBhdXRvKiBnbG9iYWxPYmpl
Y3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgYm9vbCBpc09iamVjdEtleXMg
PSBwcm9wZXJ0eU5hbWVNb2RlID09IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MgJiYgZG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlOwogICAg
IC8vIFdlIGF0dGVtcHQgdG8gbG9vayB1cCBvd24gcHJvcGVydHkga2V5cyBjYWNoZSBpbiBPYmpl
Y3Qua2V5cyBjYXNlLgogICAgIGlmIChpc09iamVjdEtleXMpIHsKQEAgLTkxNyw3ICs5MTUsNyBA
QCBKU0FycmF5KiBvd25Qcm9wZXJ0eUtleXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVNb2RlIHBybwogICAgIH0KIAogICAgIFByb3BlcnR5TmFtZUFycmF5
IHByb3BlcnRpZXModm0sIHByb3BlcnR5TmFtZU1vZGUsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRp
ZXNNb2RlKSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250
RW51bVByb3BlcnRpZXNNb2RlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAKICAgICBpZiAocHJvcGVydHlOYW1lTW9kZSAhPSBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scykgewpAQCAtOTY1LDEyICs5NjMsMTIgQEAgSlNBcnJheSogb3duUHJv
cGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1l
TW9kZSBwcm8KICAgICAgICAgfQogICAgIH0KIAotICAgIEpTQXJyYXkqIGtleXMgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOworICAgIEpTQXJyYXkqIGtleXMgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgYXV0
byBwdXNoRGlyZWN0ID0gWyZdIChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBKU1Zh
bHVlIHZhbHVlKSB7Ci0gICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsr
LCB2YWx1ZSk7CisgICAgYXV0byBwdXNoRGlyZWN0ID0gWyZdIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0FycmF5KiBhcnJheSwgSlNWYWx1ZSB2YWx1ZSkgeworICAgICAgICBhcnJh
eS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCB2YWx1ZSk7CiAgICAgfTsK
IAogICAgIHN3aXRjaCAocHJvcGVydHlOYW1lTW9kZSkgewpAQCAtOTc5LDcgKzk3Nyw3IEBAIEpT
QXJyYXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qs
IFByb3BlcnR5TmFtZU1vZGUgcHJvCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
UHJvcGVydGllczsgaSsrKSB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0g
cHJvcGVydGllc1tpXTsKICAgICAgICAgICAgIEFTU0VSVCghaWRlbnRpZmllci5pc1N5bWJvbCgp
KTsKLSAgICAgICAgICAgIHB1c2hEaXJlY3QoZXhlYywga2V5cywganNPd25lZFN0cmluZyh2bSwg
aWRlbnRpZmllci5zdHJpbmcoKSkpOworICAgICAgICAgICAgcHVzaERpcmVjdChnbG9iYWxPYmpl
Y3QsIGtleXMsIGpzT3duZWRTdHJpbmcodm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwpAQCAtOTkxLDcgKzk4OSw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5S2V5
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGUgcHJv
CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0gcHJvcGVydGllc1tpXTsKICAg
ICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyLmlzU3ltYm9sKCkpOwogICAgICAgICAgICAgQVNT
RVJUKCFpZGVudGlmaWVyLmlzUHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgICAgICBwdXNoRGlyZWN0
KGV4ZWMsIGtleXMsIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4o
KmlkZW50aWZpZXIuaW1wbCgpKSkpOworICAgICAgICAgICAgcHVzaERpcmVjdChnbG9iYWxPYmpl
Y3QsIGtleXMsIFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKmlk
ZW50aWZpZXIuaW1wbCgpKSkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xMDA4LDEzICsxMDA2
LDEzIEBAIEpTQXJyYXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGUgcHJvCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHB1c2hEaXJlY3QoZXhlYywga2V5cywganNP
d25lZFN0cmluZyh2bSwgaWRlbnRpZmllci5zdHJpbmcoKSkpOworICAgICAgICAgICAgcHVzaERp
cmVjdChnbG9iYWxPYmplY3QsIGtleXMsIGpzT3duZWRTdHJpbmcodm0sIGlkZW50aWZpZXIuc3Ry
aW5nKCkpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gVG8gZW5zdXJlIHRoZSBvcmRlciBkZWZpbmVkIGlu
IHRoZSBzcGVjICg5LjEuMTIpLCB3ZSBhcHBlbmQgc3ltYm9scyBhdCB0aGUgbGFzdCBlbGVtZW50
cyBvZiBrZXlzLgogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgOiBwcm9wZXJ0
eVN5bWJvbHMpIHsKLSAgICAgICAgICAgIHB1c2hEaXJlY3QoZXhlYywga2V5cywgU3ltYm9sOjpj
cmVhdGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqaWRlbnRpZmllci5pbXBsKCkpKSk7
CisgICAgICAgICAgICBwdXNoRGlyZWN0KGdsb2JhbE9iamVjdCwga2V5cywgU3ltYm9sOjpjcmVh
dGUodm0sIHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqaWRlbnRpZmllci5pbXBsKCkpKSk7CiAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25z
dHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuaAppbmRleCA2ZWYyNDM4M2EzYWQ0ZmRhN2YxOTBkYTA3MjNiMWUyM2IyY2UyZjAxLi43NWM2
ZWU5MjQ4ZjczYWM0NjI2NmMxMmU2MTZkNmQ2NDA2MzkzMjkzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgKQEAgLTYwLDQzICs2MCw0
MyBAQCBjbGFzcyBPYmplY3RDb25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0
aW9uIHsKICAgICBPYmplY3RDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOwogfTsKIAotaW5s
aW5lIEpTRmluYWxPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgSlNGaW5hbE9iamVjdCogY29uc3RydWN0RW1w
dHlPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICByZXR1cm4gSlNG
aW5hbE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIEpTRmluYWxP
YmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIH0KIAotaW5saW5lIEpTRmluYWxPYmplY3Qq
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHByb3RvdHlw
ZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCitpbmxpbmUgSlNGaW5hbE9iamVjdCogY29uc3Ry
dWN0RW1wdHlPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHBy
b3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLSAgICBTdHJ1Y3R1
cmVDYWNoZSYgc3RydWN0dXJlQ2FjaGUgPSBnbG9iYWxPYmplY3QtPnZtKCkuc3RydWN0dXJlQ2Fj
aGU7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKKyAgICBTdHJ1Y3R1cmVDYWNo
ZSYgc3RydWN0dXJlQ2FjaGUgPSB2bS5zdHJ1Y3R1cmVDYWNoZTsKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBl
KGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7Ci0gICAgcmV0dXJuIGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIGNvbnN0cnVj
dEVtcHR5T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgSlNGaW5hbE9iamVjdCog
Y29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG90eXBl
KQoraW5saW5lIEpTRmluYWxPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUpCiB7Ci0gICAgcmV0dXJuIGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHByb3RvdHlwZSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVs
dElubGluZUNhcGFjaXR5KCkpOworICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5
KCkpOwogfQogCi1pbmxpbmUgSlNGaW5hbE9iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhl
Y1N0YXRlKiBleGVjKQoraW5saW5lIEpTRmluYWxPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0U3RydWN0
dXJlRm9yT2JqZWN0Q29uc3RydWN0b3IoKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGdldFZNKGdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdC0+b2JqZWN0U3RydWN0dXJlRm9y
T2JqZWN0Q29uc3RydWN0b3IoKSk7CiB9CiAKLWlubGluZSBKU09iamVjdCogY29uc3RydWN0T2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBhcmcpCitpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdE9iamVjdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFyZykKIHsKICAgICBpZiAoYXJnLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBnbG9iYWxP
YmplY3QtPm9iamVjdFByb3RvdHlwZSgpKTsKLSAgICByZXR1cm4gYXJnLnRvT2JqZWN0KGV4ZWMs
IGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOworICAgIHJldHVybiBh
cmcudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKIH0KIAogLy8gU2VjdGlvbiA2LjIuNC40IG9mIHRo
ZSBFUzYgc3BlY2lmaWNhdGlvbi4KIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3IKLWlubGluZSBKU09iamVjdCogY29uc3RydWN0T2Jq
ZWN0RnJvbVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK2lubGluZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0
RnJvbVByb3BlcnR5RGVzY3JpcHRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNj
cmlwdG9yKCkpIHsKQEAgLTExNywxMSArMTE3LDExIEBAIGlubGluZSBKU09iamVjdCogY29uc3Ry
dWN0T2JqZWN0RnJvbVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFBy
CiB9CiAKIAotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJl
ZXplKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Ci1KU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
b2JqZWN0Q29uc3RydWN0b3JTZWFsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Ci1KU1ZhbHVlIG9i
amVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgY29uc3QgSWRlbnRpZmllciYpOwotSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93
blByb3BlcnR5RGVzY3JpcHRvcnMoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKLUpTQXJyYXkqIG93
blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZU1vZGUsIERv
bnRFbnVtUHJvcGVydGllc01vZGUpOwotYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpT
T2JqZWN0KiBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0
Kik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JTZWFsKEpT
R2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKK0pTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIGNvbnN0IElk
ZW50aWZpZXImKTsKK0pTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKK0pTQXJyYXkqIG93blByb3BlcnR5
S2V5cyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lTW9kZSwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7Citib29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90
eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5j
cHAKaW5kZXggZTVhOWRhZmRlMmQ3MDc3NTcwODdmNTRhNjA3YTk0OTQ1MzA5YzI2My4uNzliNjkz
YjY3ZGFjNzBiMzQ0ZThhNGU3ZWIwYzgwNmYyZmY0YjY5MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCkBAIC03OCwxMCArNzgsMTAg
QEAgT2JqZWN0UHJvdG90eXBlKiBPYmplY3RQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoSlNHbG9iYWxP
YmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGNhbGxGcmFtZSwgU3RyaWN0TW9kZSk7Ci0gICAgSlNPYmpl
Y3QqIHZhbHVlT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3Qs
IFN0cmljdE1vZGUpOworICAgIEpTT2JqZWN0KiB2YWx1ZU9iaiA9IHRoaXNWYWx1ZS50b09iamVj
dChnbG9iYWxPYmplY3QpOwogICAgIGlmIChVTkxJS0VMWSghdmFsdWVPYmopKQogICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
T2JqKTsKQEAgLTkyLDEwICs5MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYQogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkudG9UaGlzKGNhbGxGcmFtZSwgU3RyaWN0TW9kZSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKKyAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGdsb2Jh
bE9iamVjdCwgU3RyaWN0TW9kZSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChjYWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgRVhDRVBUSU9O
X0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqZWN0KTsKICAgICBpZiAoVU5M
SUtFTFkoIXRoaXNPYmplY3QpKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKQEAg
LTEwMywxMyArMTAzLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jSGFzT3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwogICAgIEhhc093blByb3Bl
cnR5Q2FjaGUqIGhhc093blByb3BlcnR5Q2FjaGUgPSB2bS5lbnN1cmVIYXNPd25Qcm9wZXJ0eUNh
Y2hlKCk7CiAgICAgaWYgKE9wdGlvbmFsPGJvb2w+IHJlc3VsdCA9IGhhc093blByb3BlcnR5Q2Fj
aGUtPmdldChzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgQVNTRVJUKCpyZXN1
bHQgPT0gdGhpc09iamVjdC0+aGFzT3duUHJvcGVydHkoY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUp
KTsKKyAgICAgICAgQVNTRVJUKCpyZXN1bHQgPT0gdGhpc09iamVjdC0+aGFzT3duUHJvcGVydHko
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oKnJlc3Vs
dCkpOwogICAgIH0KIAogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7Ci0gICAgYm9vbCByZXN1
bHQgPSB0aGlzT2JqZWN0LT5oYXNPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CisgICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5oYXNPd25Qcm9wZXJ0eShnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBoYXNPd25Qcm9wZXJ0eUNhY2hlLT50cnlB
ZGQodm0sIHNsb3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKQEAgLTEyMSw4
ICsxMjEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0lz
UHJvdG90eXBlT2YoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGNh
bGxGcmFtZSwgU3RyaWN0TW9kZSk7Ci0gICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUu
dG9PYmplY3QoY2FsbEZyYW1lKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkudG9UaGlzKGdsb2JhbE9iamVjdCwgU3RyaWN0TW9kZSk7CisgICAgSlNPYmpl
Y3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBFWENF
UFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChV
TkxJS0VMWSghdGhpc09iaikpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwpAQCAt
MTMwLDcgKzEzMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jSXNQcm90b3R5cGVPZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgaWYgKCFjYWxsRnJh
bWUtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBKU1ZhbHVlIHYgPSBhc09iamVjdChjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKS0+Z2V0UHJvdG90eXBlKHZtLCBjYWxsRnJhbWUpOworICAgIEpTVmFs
dWUgdiA9IGFzT2JqZWN0KGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpLT5nZXRQcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMTM4LDcgKzEzOCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpOwogICAgICAgICBpZiAodiA9PSB0aGlzT2JqKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwotICAgICAgICB2ID0gYXNP
YmplY3QodiktPmdldFByb3RvdHlwZSh2bSwgY2FsbEZyYW1lKTsKKyAgICAgICAgdiA9IGFzT2Jq
ZWN0KHYpLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIH0KQEAgLTE0OCwx
NSArMTQ4LDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
RGVmaW5lR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1Ro
aXMoY2FsbEZyYW1lLCBTdHJpY3RNb2RlKS50b09iamVjdChjYWxsRnJhbWUpOworICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoZ2xvYmFsT2Jq
ZWN0LCBTdHJpY3RNb2RlKS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBnZXQgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDEpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIGlmIChn
ZXRDYWxsRGF0YSh2bSwgZ2V0LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGU6Ok5vbmUpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJpbnZhbGlkIGdldHRl
ciB1c2FnZSJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJpbnZhbGlkIGdldHRlciB1c2FnZSJfcyk7CiAKLSAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShjYWxsRnJhbWUpOwor
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5
S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKQEAgLTE2
Niw3ICsxNjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVu
Y0RlZmluZUdldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgYm9vbCBzaG91bGRU
aHJvdyA9IHRydWU7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHRoaXNPYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgY2FsbEZyYW1lLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKKyAgICB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMTc2LDE1ICsxNzYsMTUgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhjYWxsRnJhbWUsIFN0
cmljdE1vZGUpLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3QsIFN0cmljdE1vZGUp
LnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHNldCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgaWYgKGdldENhbGxEYXRhKHZtLCBz
ZXQsIGNhbGxEYXRhKSA9PSBDYWxsVHlwZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgImludmFsaWQgc2V0dGVyIHVzYWdlIl9zKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImludmFs
aWQgc2V0dGVyIHVzYWdlIl9zKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CisgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAog
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwpAQCAtMTk0LDcgKzE5NCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAKICAgICBib29sIHNob3VsZFRocm93ID0gdHJ1ZTsKICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZp
bmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBjYWxsRnJhbWUsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVm
aW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CkBAIC0yMDQsMTQgKzIwNCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsTwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGNhbGxGcmFtZSwgU3RyaWN0TW9kZSkudG9PYmpl
Y3QoY2FsbEZyYW1lKTsKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkudG9UaGlzKGdsb2JhbE9iamVjdCwgU3RyaWN0TW9kZSkudG9PYmplY3QoZ2xvYmFs
T2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b1By
b3BlcnR5S2V5KGNhbGxGcmFtZSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIFByb3BlcnR5U2xvdCBz
bG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Q
cm9wZXJ0eSk7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHRoaXNPYmplY3QtPmdldFByb3BlcnR5
U2xvdChjYWxsRnJhbWUsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgYm9vbCBoYXNQcm9wZXJ0
eSA9IHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWhh
c1Byb3BlcnR5KTsKICAgICBpZiAoaGFzUHJvcGVydHkpIHsKICAgICAgICAgaWYgKHNsb3QuaXNB
Y2Nlc3NvcigpKSB7CkBAIC0yMjEsNyArMjIxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8K
ICAgICAgICAgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3Rv
bUFjY2Vzc29yKSB7CiAgICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsK
ICAgICAgICAgICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCkpOwotICAgICAgICAgICAgaWYgKHNs
b3Quc2xvdEJhc2UoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNhbGxGcmFtZSwgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKSkKKyAgICAgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCktPmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgp
ID8gSlNWYWx1ZTo6ZW5jb2RlKGRlc2NyaXB0b3IuZ2V0dGVyKCkpIDogSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjM0LDE0ICsyMzQsMTQgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhjYWxsRnJhbWUs
IFN0cmljdE1vZGUpLnRvT2JqZWN0KGNhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhnbG9iYWxPYmplY3QsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShjYWxsRnJhbWUpOworICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVj
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwotICAgIGJvb2wgaGFzUHJvcGVydHkgPSB0aGlz
T2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwor
ICAgIGJvb2wgaGFzUHJvcGVydHkgPSB0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpIHx8ICFoYXNQcm9wZXJ0eSk7CiAgICAgaWYgKGhhc1Byb3BlcnR5KSB7CiAg
ICAgICAgIGlmIChzbG90LmlzQWNjZXNzb3IoKSkgewpAQCAtMjUxLDcgKzI1MSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgICAgIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3Bl
cnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikgewogICAgICAgICAgICAgUHJvcGVydHlEZXNj
cmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpKTsK
LSAgICAgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihjYWxsRnJhbWUsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCisgICAgICAgICAgICBpZiAo
c2xvdC5zbG90QmFzZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQogICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlw
dG9yLnNldHRlclByZXNlbnQoKSA/IEpTVmFsdWU6OmVuY29kZShkZXNjcmlwdG9yLnNldHRlcigp
KSA6IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTI2NCwxNSArMjY0LDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoSlNHbG9iYWxPYmplY3QqCiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50
b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoY2FsbEZyYW1lLCBTdHJp
Y3RNb2RlKS50b09iamVjdChjYWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMoZ2xvYmFsT2JqZWN0LCBTdHJpY3RNb2RlKS50
b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogCiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIFByb3BlcnR5RGVz
Y3JpcHRvciBkZXNjcmlwdG9yOwotICAgIGJvb2wgZW51bWVyYWJsZSA9IHRoaXNPYmplY3QtPmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihjYWxsRnJhbWUsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cikgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCk7CisgICAgYm9vbCBlbnVtZXJhYmxlID0gdGhp
c09iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihlbnVtZXJhYmxlKSk7CiB9CiAKQEAgLTI4OCwyNCAr
Mjg4LDI0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9M
b2NhbGVTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAgLy8gMi4gSW52b2tlKFYsICJ0
b1N0cmluZyIpCiAKICAgICAvLyBMZXQgTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmpl
Y3QgcGFzc2luZyB0aGUgdGhpcyB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCi0gICAgSlNPYmplY3Qq
IG9iamVjdCA9IHRoaXNWYWx1ZS50b1RoaXMoY2FsbEZyYW1lLCBTdHJpY3RNb2RlKS50b09iamVj
dChjYWxsRnJhbWUpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzVmFsdWUudG9UaGlzKGds
b2JhbE9iamVjdCwgU3RyaWN0TW9kZSkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIC8vIExldCB0
b1N0cmluZyBiZSB0aGUgTy5bW0dldF1dKCJ0b1N0cmluZyIsIFYpCiAgICAgUHJvcGVydHlTbG90
IHNsb3QodGhpc1ZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsK
LSAgICBib29sIGhhc1Byb3BlcnR5ID0gb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1l
LCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZywgc2xvdCk7CisgICAgYm9vbCBoYXNQcm9wZXJ0
eSA9IG9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1l
cy0+dG9TdHJpbmcsIHNsb3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpIHx8ICFoYXNQcm9wZXJ0eSk7Ci0gICAgSlNWYWx1ZSB0b1N0cmluZyA9IGhhc1Byb3BlcnR5
ID8gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKSA6
IGpzVW5kZWZpbmVkKCk7CisgICAgSlNWYWx1ZSB0b1N0cmluZyA9IGhhc1Byb3BlcnR5ID8gc2xv
dC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKSA6IGpz
VW5kZWZpbmVkKCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKICAgICAvLyBJZiBJc0NhbGxhYmxlKHRvU3RyaW5nKSBpcyBmYWxzZSwgdGhyb3cg
YSBUeXBlRXJyb3IgZXhjZXB0aW9uLgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIHRvU3RyaW5nLCBjYWxsRGF0YSk7CiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBj
YWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgdG9TdHJpbmcgcGFzc2luZyB0
aGUgdGhpcyB2YWx1ZSBhbmQgbm8gYXJndW1lbnRzLgotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoY2FsbEZyYW1lLCB0b1N0cmluZywgY2FsbFR5cGUs
IGNhbGxEYXRhLCB0aGlzVmFsdWUsICp2bS5lbXB0eUxpc3QpKSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoY2FsbChnbG9iYWxPYmplY3QsIHRvU3RyaW5n
LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgKnZtLmVtcHR5TGlzdCkpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTMxMywx
MCArMzEzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
VG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKS50b1RoaXMo
Y2FsbEZyYW1lLCBTdHJpY3RNb2RlKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkudG9UaGlzKGdsb2JhbE9iamVjdCwgU3RyaWN0TW9kZSk7CiAgICAgaWYg
KHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZCgpID8gdm0uc21hbGxTdHJpbmdzLnVuZGVmaW5l
ZE9iamVjdFN0cmluZygpIDogdm0uc21hbGxTdHJpbmdzLm51bGxPYmplY3RTdHJpbmcoKSk7Ci0g
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoY2FsbEZyYW1lKTsK
KyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChnbG9iYWxPYmpl
Y3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09i
amVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzI2LDI2ICszMjYsMjYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogCiAgICAg
UHJvcGVydHlOYW1lIHRvU3RyaW5nVGFnU3ltYm9sID0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJp
bmdUYWdTeW1ib2w7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgdG9TdHJpbmdUYWdTeW1i
b2wsIFsmXSAoYm9vbCBmb3VuZCwgUHJvcGVydHlTbG90JiB0b1N0cmluZ1RhZ1Nsb3QpIC0+IEpT
VmFsdWUgeworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRo
aXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHRvU3RyaW5nVGFnU3ltYm9s
LCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdTbG90KSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHN0cmluZ1Rh
ZyA9IHRvU3RyaW5nVGFnU2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIHRvU3RyaW5nVGFnU3ltYm9s
KTsKKyAgICAgICAgICAgIEpTVmFsdWUgc3RyaW5nVGFnID0gdG9TdHJpbmdUYWdTbG90LmdldFZh
bHVlKGdsb2JhbE9iamVjdCwgdG9TdHJpbmdUYWdTeW1ib2wpOwogICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIGlmIChzdHJpbmdUYWcuaXNT
dHJpbmcoKSkgewotICAgICAgICAgICAgICAgIEpTU3RyaW5nKiByZXN1bHQgPSBqc1N0cmluZyhj
YWxsRnJhbWUsIHZtLnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmdTdGFydCgpLCBhc1N0cmluZyhz
dHJpbmdUYWcpLCB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCddJykpOwor
ICAgICAgICAgICAgICAgIEpTU3RyaW5nKiByZXN1bHQgPSBqc1N0cmluZyhnbG9iYWxPYmplY3Qs
IHZtLnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmdTdGFydCgpLCBhc1N0cmluZyhzdHJpbmdUYWcp
LCB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCddJykpOwogICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAg
dGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShjYWxsRnJh
bWUsIHZtLCByZXN1bHQsIHRvU3RyaW5nVGFnU2xvdCk7CisgICAgICAgICAgICAgICAgdGhpc09i
amVjdC0+c3RydWN0dXJlKHZtKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShnbG9iYWxPYmplY3Qs
IHZtLCByZXN1bHQsIHRvU3RyaW5nVGFnU2xvdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFN0cmluZyB0YWcgPSB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnRvU3RyaW5nTmFtZSh0aGlzT2JqZWN0LCBjYWxs
RnJhbWUpOworICAgICAgICBTdHJpbmcgdGFnID0gdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0p
LT50b1N0cmluZ05hbWUodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgU3RyaW5nIG5ld1N0cmluZyA9IHRy
eU1ha2VTdHJpbmcoIltvYmplY3QgIiwgV1RGTW92ZSh0YWcpLCAiXSIpOwogICAgICAgICBpZiAo
IW5ld1N0cmluZykKLSAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2Fs
bEZyYW1lLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgICAgIGF1dG8gcmVzdWx0ID0ganNOb250cml2
aWFsU3RyaW5nKHZtLCBuZXdTdHJpbmcpOwotICAgICAgICB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGNhbGxGcmFtZSwgdm0sIHJlc3VsdCwgdG9TdHJp
bmdUYWdTbG90KTsKKyAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+c2V0T2JqZWN0
VG9TdHJpbmdWYWx1ZShnbG9iYWxPYmplY3QsIHZtLCByZXN1bHQsIHRvU3RyaW5nVGFnU2xvdCk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAKaW5kZXggMGRiNDBjZjRlY2I5MmU3NzViMjBj
NjI2NWI5NTIxN2Y3MTZiMWMxNS4uNDkwNWQ1YmFmMDc0YjFkMjU5MjNmYWRmZDk3NjI4ZWY2YzE3
ZDVjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAK
QEAgLTMxLDYwICszMSw2MCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCBKU1ZhbHVlOjpl
cXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKK2Jv
b2wgSlNWYWx1ZTo6ZXF1YWxTbG93Q2FzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQogewotICAgIHJldHVybiBlcXVhbFNsb3dDYXNlSW5saW5l
KGV4ZWMsIHYxLCB2Mik7CisgICAgcmV0dXJuIGVxdWFsU2xvd0Nhc2VJbmxpbmUoZ2xvYmFsT2Jq
ZWN0LCB2MSwgdjIpOwogfQogCi1ib29sIEpTVmFsdWU6OnN0cmljdEVxdWFsU2xvd0Nhc2UoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQorYm9vbCBKU1ZhbHVlOjpzdHJp
Y3RFcXVhbFNsb3dDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEs
IEpTVmFsdWUgdjIpCiB7Ci0gICAgcmV0dXJuIHN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoZXhl
YywgdjEsIHYyKTsKKyAgICByZXR1cm4gc3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShnbG9iYWxP
YmplY3QsIHYxLCB2Mik7CiB9CiAKLU5FVkVSX0lOTElORSBKU1ZhbHVlIGpzQWRkU2xvd0Nhc2Uo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCitORVZFUl9JTkxJ
TkUgSlNWYWx1ZSBqc0FkZFNsb3dDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7CiAgICAgLy8gZXhjZXB0aW9uIGZvciB0aGUgRGF0ZSBl
eGNlcHRpb24gaW4gZGVmYXVsdFZhbHVlKCkKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1ZhbHVlIHAxID0gdjEudG9QcmltaXRpdmUoY2Fs
bEZyYW1lKTsKKyAgICBKU1ZhbHVlIHAxID0gdjEudG9QcmltaXRpdmUoZ2xvYmFsT2JqZWN0KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIEpTVmFsdWUgcDIgPSB2
Mi50b1ByaW1pdGl2ZShjYWxsRnJhbWUpOworICAgIEpTVmFsdWUgcDIgPSB2Mi50b1ByaW1pdGl2
ZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
ICAgICBpZiAocDEuaXNTdHJpbmcoKSkgewogICAgICAgICBpZiAocDIuaXNDZWxsKCkpIHsKLSAg
ICAgICAgICAgIEpTU3RyaW5nKiBwMlN0cmluZyA9IHAyLnRvU3RyaW5nKGNhbGxGcmFtZSk7Cisg
ICAgICAgICAgICBKU1N0cmluZyogcDJTdHJpbmcgPSBwMi50b1N0cmluZyhnbG9iYWxPYmplY3Qp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmlu
ZyhwMSksIHAyU3RyaW5nKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IGpzU3RyaW5nKGdsb2JhbE9iamVjdCwgYXNTdHJpbmcocDEpLCBwMlN0cmluZykpOwogICAgICAg
ICB9Ci0gICAgICAgIFN0cmluZyBwMlN0cmluZyA9IHAyLnRvV1RGU3RyaW5nKGNhbGxGcmFtZSk7
CisgICAgICAgIFN0cmluZyBwMlN0cmluZyA9IHAyLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyhwMSksIHAy
U3RyaW5nKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoZ2xv
YmFsT2JqZWN0LCBhc1N0cmluZyhwMSksIHAyU3RyaW5nKSk7CiAgICAgfQogCiAgICAgaWYgKHAy
LmlzU3RyaW5nKCkpIHsKICAgICAgICAgaWYgKHAxLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICBK
U1N0cmluZyogcDFTdHJpbmcgPSBwMS50b1N0cmluZyhjYWxsRnJhbWUpOworICAgICAgICAgICAg
SlNTdHJpbmcqIHAxU3RyaW5nID0gcDEudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGNhbGxGcmFtZSwgcDFTdHJpbmcsIGFzU3RyaW5n
KHAyKSkpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyhn
bG9iYWxPYmplY3QsIHAxU3RyaW5nLCBhc1N0cmluZyhwMikpKTsKICAgICAgICAgfQotICAgICAg
ICBTdHJpbmcgcDFTdHJpbmcgPSBwMS50b1dURlN0cmluZyhjYWxsRnJhbWUpOworICAgICAgICBT
dHJpbmcgcDFTdHJpbmcgPSBwMS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGpzU3RyaW5nKGNhbGxGcmFtZSwgcDFTdHJpbmcsIGFzU3RyaW5nKHAyKSkpOwor
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGdsb2JhbE9iamVjdCwg
cDFTdHJpbmcsIGFzU3RyaW5nKHAyKSkpOwogICAgIH0KIAotICAgIGF1dG8gbGVmdE51bWVyaWMg
PSBwMS50b051bWVyaWMoY2FsbEZyYW1lKTsKKyAgICBhdXRvIGxlZnROdW1lcmljID0gcDEudG9O
dW1lcmljKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IHAyLnRvTnVtZXJpYyhjYWxsRnJhbWUpOworICAg
IGF1dG8gcmlnaHROdW1lcmljID0gcDIudG9OdW1lcmljKGdsb2JhbE9iamVjdCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPEpTQmlnSW50Kj4obGVmdE51bWVyaWMpIHx8IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSB7CiAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPEpTQmlnSW50Kj4obGVmdE51bWVyaWMpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSB7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmFkZChjYWxsRnJhbWUsIFdURjo6Z2V0PEpT
QmlnSW50Kj4obGVmdE51bWVyaWMpLCBXVEY6OmdldDxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykp
OworICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjphZGQoZ2xvYmFsT2JqZWN0LCBXVEY6Omdl
dDxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVy
aWMpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihjYWxsRnJh
bWUsIHNjb3BlLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGFkZGl0
aW9uLiJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGFkZGl0aW9uLiJf
cyk7CiAgICAgfQogCiAgICAgcmV0dXJuIGpzTnVtYmVyKFdURjo6Z2V0PGRvdWJsZT4obGVmdE51
bWVyaWMpICsgV1RGOjpnZXQ8ZG91YmxlPihyaWdodE51bWVyaWMpKTsKQEAgLTExNiwxNCArMTE2
LDE0IEBAIEpTVmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYpCiAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5v
YmplY3RTdHJpbmcoKTsKIH0KIAotSlNWYWx1ZSBqc1R5cGVTdHJpbmdGb3JWYWx1ZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2KQorSlNWYWx1ZSBqc1R5cGVTdHJpbmdGb3JWYWx1ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYpCiB7Ci0gICAgcmV0dXJuIGpz
VHlwZVN0cmluZ0ZvclZhbHVlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHYpOworICAgIHJldHVybiBqc1R5cGVTdHJpbmdGb3JWYWx1ZShnbG9iYWxP
YmplY3QtPnZtKCksIGdsb2JhbE9iamVjdCwgdik7CiB9CiAKLWJvb2wganNJc09iamVjdFR5cGVP
ck51bGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdikKK2Jvb2wganNJc09iamVjdFR5
cGVPck51bGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2KQogewotICAg
IFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgaWYgKCF2LmlzQ2VsbCgpKQogICAgICAgICByZXR1cm4gdi5pc051bGwoKTsKIApA
QCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wganNJc09iamVjdFR5cGVPck51bGwoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTVmFsdWUgdikKICAgICBpZiAodHlwZSA9PSBTdHJpbmdUeXBlIHx8IHR5cGUg
PT0gU3ltYm9sVHlwZSB8fCB0eXBlID09IEJpZ0ludFR5cGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAodHlwZSA+PSBPYmplY3RUeXBlKSB7Ci0gICAgICAgIGlmIChhc09iamVjdCh2
KS0+c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChjYWxsRnJhbWUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSkpCisgICAgICAgIGlmIChhc09iamVjdCh2KS0+c3RydWN0dXJlKHZt
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChnbG9iYWxPYmplY3QpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qodik7CiAgICAg
ICAgIGlmIChvYmplY3QtPmlzRnVuY3Rpb24odm0pKQpAQCAtMTQwLDEzICsxNDAsMTIgQEAgYm9v
bCBqc0lzT2JqZWN0VHlwZU9yTnVsbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2KQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zaXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTQ2VsbCogYmFzZSwgYm9vbCYgc2F3UG9seVByb3RvKQorc2l6
ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgYm9vbCYgc2F3UG9seVByb3RvKQogewotICAgIFZNJiB2bSA9IGNhbGxG
cmFtZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgc2l6ZV90
IGNvdW50ID0gMDsKICAgICBzYXdQb2x5UHJvdG8gPSBmYWxzZTsKICAgICBKU0NlbGwqIGN1cnJl
bnQgPSBiYXNlOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnQtPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzUHJveHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAppbmRleCBhYzk4Y2U4YjA5YTU3NGQ0OGI5YTFkMWRmNjE3NWE5OWJiNjJkYjE3Li45OGMy
YzZlNmNmMzhlMDljNGMxMTFmMjQ5Nzg0MjA1MTA5MThlMmJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCkBAIC0zMSwxNSArMzEsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICNkZWZpbmUgSW52YWxpZFByb3RvdHlwZUNoYWluIChzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpKQogCi1ORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dDYXNl
KENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUpOwotSlNWYWx1ZSBqc1R5cGVTdHJpbmdGb3JW
YWx1ZShDYWxsRnJhbWUqLCBKU1ZhbHVlKTsKK05FVkVSX0lOTElORSBKU1ZhbHVlIGpzQWRkU2xv
d0Nhc2UoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKK0pTVmFsdWUganNUeXBl
U3RyaW5nRm9yVmFsdWUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIEpTVmFsdWUganNUeXBl
U3RyaW5nRm9yVmFsdWUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwotYm9vbCBqc0lz
T2JqZWN0VHlwZU9yTnVsbChDYWxsRnJhbWUqLCBKU1ZhbHVlKTsKLXNpemVfdCBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbihDYWxsRnJhbWUqLCBKU0NlbGwqLCBib29sJiBzYXdQb2x5UHJvdG8pOwor
Ym9vbCBqc0lzT2JqZWN0VHlwZU9yTnVsbChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworc2l6
ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgYm9v
bCYgc2F3UG9seVByb3RvKTsKIAotQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHUxLCBKU1N0cmluZyogczIpCitBTFdBWVNfSU5M
SU5FIEpTU3RyaW5nKiBqc1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBTdHJpbmcmIHUxLCBKU1N0cmluZyogczIpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aDEgPSB1MS5sZW5ndGgo
KTsKQEAgLTUwLDcgKzUwLDcgQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHUxLCBKU1N0cmluZyogczIKICAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKHZtLCB1MSk7CiAgICAgc3RhdGljX2Fzc2VydChKU1N0cmluZzo6TWF4TGVu
Z3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpLCAiIik7CiAgICAgaWYg
KHN1bU92ZXJmbG93czxpbnQzMl90PihsZW5ndGgxLCBsZW5ndGgyKSkgewotICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIApAQCAtNjMsMTkgKzYzLDE5IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB1MSwgSlNTdHJpbmcqIHMyCiAgICAgICAg
IHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwganNTdHJpbmcodm0sIHUxKSwgczIpOwog
CiAgICAgQVNTRVJUKCFzMi0+aXNSb3BlKCkpOwotICAgIGNvbnN0IFN0cmluZyYgdTIgPSBzMi0+
dmFsdWUoZXhlYyk7CisgICAgY29uc3QgU3RyaW5nJiB1MiA9IHMyLT52YWx1ZShnbG9iYWxPYmpl
Y3QpOwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgU3RyaW5nIG5ld1N0cmlu
ZyA9IHRyeU1ha2VTdHJpbmcodTEsIHUyKTsKICAgICBpZiAoIW5ld1N0cmluZykgewotICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSh2bSwgbmV3U3RyaW5nLnJlbGVh
c2VJbXBsKCkucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNTdHJpbmcq
IGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMxLCBjb25zdCBTdHJpbmcmIHUy
KQorQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTdHJpbmcqIHMxLCBjb25zdCBTdHJpbmcmIHUyKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgx
ID0gczEtPmxlbmd0aCgpOwpAQCAtODYsNyArODYsNyBAQCBBTFdBWVNfSU5MSU5FIEpTU3RyaW5n
KiBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzMSwgY29uc3QgU3RyaW5nJiB1
MgogICAgICAgICByZXR1cm4gczE7CiAgICAgc3RhdGljX2Fzc2VydChKU1N0cmluZzo6TWF4TGVu
Z3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpLCAiIik7CiAgICAgaWYg
KHN1bU92ZXJmbG93czxpbnQzMl90PihsZW5ndGgxLCBsZW5ndGgyKSkgewotICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIApAQCAtOTYsMTkgKzk2LDE5IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMxLCBjb25zdCBTdHJpbmcmIHUyCiAgICAgICAg
IHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgczEsIGpzU3RyaW5nKHZtLCB1MikpOwog
CiAgICAgQVNTRVJUKCFzMS0+aXNSb3BlKCkpOwotICAgIGNvbnN0IFN0cmluZyYgdTEgPSBzMS0+
dmFsdWUoZXhlYyk7CisgICAgY29uc3QgU3RyaW5nJiB1MSA9IHMxLT52YWx1ZShnbG9iYWxPYmpl
Y3QpOwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgU3RyaW5nIG5ld1N0cmlu
ZyA9IHRyeU1ha2VTdHJpbmcodTEsIHUyKTsKICAgICBpZiAoIW5ld1N0cmluZykgewotICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSh2bSwgbmV3U3RyaW5nLnJlbGVh
c2VJbXBsKCkucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNTdHJpbmcq
IGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCitB
TFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9IHMxLT5s
ZW5ndGgoKTsKQEAgLTExOSw0MiArMTE5LDQyIEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpz
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCiAgICAg
ICAgIHJldHVybiBzMTsKICAgICBzdGF0aWNfYXNzZXJ0KEpTU3RyaW5nOjpNYXhMZW5ndGggPT0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCksICIiKTsKICAgICBpZiAoc3VtT3Zl
cmZsb3dzPGludDMyX3Q+KGxlbmd0aDEsIGxlbmd0aDIpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAg
ICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBzMSwgczIpOwogfQogCi1BTFdBWVNf
SU5MSU5FIEpTU3RyaW5nKiBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzMSwg
SlNTdHJpbmcqIHMyLCBKU1N0cmluZyogczMpCitBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1N0
cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogczEsIEpTU3RyaW5n
KiBzMiwgSlNTdHJpbmcqIHMzKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgxID0gczEtPmxlbmd0aCgpOwogICAg
IGlmICghbGVuZ3RoMSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmlu
ZyhleGVjLCBzMiwgczMpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0
cmluZyhnbG9iYWxPYmplY3QsIHMyLCBzMykpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoMiA9IHMy
LT5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aDIpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwganNTdHJpbmcoZXhlYywgczEsIHMzKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwganNTdHJpbmcoZ2xvYmFsT2JqZWN0LCBzMSwgczMpKTsKIAogICAgIHVuc2ln
bmVkIGxlbmd0aDMgPSBzMy0+bGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgzKQotICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIHMxLCBzMikpOworICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGdsb2JhbE9iamVjdCwgczEsIHMy
KSk7CiAKICAgICBzdGF0aWNfYXNzZXJ0KEpTU3RyaW5nOjpNYXhMZW5ndGggPT0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCksICIiKTsKICAgICBpZiAoc3VtT3ZlcmZsb3dzPGlu
dDMyX3Q+KGxlbmd0aDEsIGxlbmd0aDIsIGxlbmd0aDMpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAg
ICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBzMSwgczIsIHMzKTsKIH0KIAotQUxX
QVlTX0lOTElORSBKU1N0cmluZyoganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJp
bmcmIHUxLCBjb25zdCBTdHJpbmcmIHUyKQorQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJp
bmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiB1MSwgY29uc3Qg
U3RyaW5nJiB1MikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdl
dFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9IHUxLmxlbmd0aCgpOwpAQCAtMTY1LDcgKzE2
NSw3IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nJiB1MSwgY29uc3QgU3RyaW5nCiAgICAgICAgIHJldHVybiBqc1N0cmluZyh2
bSwgdTEpOwogICAgIHN0YXRpY19hc3NlcnQoSlNTdHJpbmc6Ok1heExlbmd0aCA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSwgIiIpOwogICAgIGlmIChzdW1PdmVyZmxvd3M8
aW50MzJfdD4obGVuZ3RoMSwgbGVuZ3RoMikpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTE3Niwx
NSArMTc2LDE1IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgU3RyaW5nJiB1MSwgY29uc3QgU3RyaW5nCiAKICAgICBTdHJpbmcgbmV3U3Ry
aW5nID0gdHJ5TWFrZVN0cmluZyh1MSwgdTIpOwogICAgIGlmICghbmV3U3RyaW5nKSB7Ci0gICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKHZtLCBuZXdTdHJpbmcucmVs
ZWFzZUltcGwoKS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1N0cmlu
ZyoganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHUxLCBjb25zdCBTdHJp
bmcmIHUyLCBjb25zdCBTdHJpbmcmIHUzKQorQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJp
bmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiB1MSwgY29uc3Qg
U3RyaW5nJiB1MiwgY29uc3QgU3RyaW5nJiB1MykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoMSA9IHUxLmxlbmd0
aCgpOwpAQCAtMTk1LDE3ICsxOTUsMTcgQEAgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHUxLCBjb25zdCBTdHJpbmcKICAgICBB
U1NFUlQobGVuZ3RoMyA8PSBKU1N0cmluZzo6TWF4TGVuZ3RoKTsKIAogICAgIGlmICghbGVuZ3Ro
MSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyhleGVjLCB1Miwg
dTMpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyhnbG9iYWxP
YmplY3QsIHUyLCB1MykpOwogCiAgICAgaWYgKCFsZW5ndGgyKQotICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGV4ZWMsIHUxLCB1MykpOworICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGpzU3RyaW5nKGdsb2JhbE9iamVjdCwgdTEsIHUzKSk7CiAKICAg
ICBpZiAoIWxlbmd0aDMpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJp
bmcoZXhlYywgdTEsIHUyKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNT
dHJpbmcoZ2xvYmFsT2JqZWN0LCB1MSwgdTIpKTsKIAogICAgIHN0YXRpY19hc3NlcnQoSlNTdHJp
bmc6Ok1heExlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSwgIiIp
OwogICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4obGVuZ3RoMSwgbGVuZ3RoMiwgbGVuZ3Ro
MykpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTIxNiw0NCArMjE2LDI0IEBAIEFMV0FZU19JTkxJ
TkUgSlNTdHJpbmcqIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB1MSwg
Y29uc3QgU3RyaW5nCiAKICAgICBTdHJpbmcgbmV3U3RyaW5nID0gdHJ5TWFrZVN0cmluZyh1MSwg
dTIsIHUzKTsKICAgICBpZiAoIW5ld1N0cmluZykgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZSh2bSwgbmV3U3RyaW5nLnJlbGVhc2VJbXBsKCkucmVsZWFzZU5v
bk51bGwoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZ0Zyb21SZWdpc3Rl
ckFycmF5KEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIHN0cmluZ3MsIHVuc2lnbmVkIGNvdW50
KQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nRnJvbVJlZ2lzdGVyQXJyYXkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVnaXN0ZXIqIHN0cmluZ3MsIHVuc2lnbmVkIGNvdW50
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
SlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjxSZWNvcmRPdmVyZmxvdz4gcm9wZUJ1aWxkZXIodm0p
OwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAg
SlNWYWx1ZSB2ID0gc3RyaW5nc1stc3RhdGljX2Nhc3Q8aW50PihpKV0uanNWYWx1ZSgpOwotICAg
ICAgICBKU1N0cmluZyogc3RyaW5nID0gdi50b1N0cmluZyhleGVjKTsKKyAgICAgICAgSlNTdHJp
bmcqIHN0cmluZyA9IHYudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKCFyb3BlQnVpbGRlci5hcHBlbmQo
c3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywg
c2NvcGUpOwotICAgIH0KLQotICAgIHJldHVybiByb3BlQnVpbGRlci5yZWxlYXNlKCk7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZ0Zyb21Bcmd1bWVudHMoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU1JvcGVTdHJpbmc6
OlJvcGVCdWlsZGVyPFJlY29yZE92ZXJmbG93PiByb3BlQnVpbGRlcih2bSk7Ci0gICAgSlNTdHJp
bmcqIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzdHIpOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KGkpOwotICAgICAgICBKU1N0cmluZyogc3Ry
ID0gdi50b1N0cmluZyhleGVjKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFyb3BlQnVpbGRlci5hcHBlbmQoc3RyKSkpCi0g
ICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAg
ICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJvcGVCdWlsZGVyLnJlbGVhc2UoKTsKQEAgLTI2OCwx
MiArMjQ4LDEyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBiaWdJbnRDb21wYXJlUmVzdWx0KEpTQmln
SW50OjpDb21wYXJpc29uUmVzdWx0IGNvbXBhcmlzb25SZXN1CiAgICAgcmV0dXJuIGNvbXBhcmlz
b25SZXN1bHQgPT0gSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuIHx8IGNvbXBh
cmlzb25SZXN1bHQgPT0gSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOwogfQogCi1B
TFdBWVNfSU5MSU5FIGJvb2wgYmlnSW50Q29tcGFyZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSB2MSwgSlNWYWx1ZSB2MiwgSlNCaWdJbnQ6OkNvbXBhcmlzb25Nb2RlIGNvbXBhcmlzb25N
b2RlKQorQUxXQVlTX0lOTElORSBib29sIGJpZ0ludENvbXBhcmUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MiwgSlNCaWdJbnQ6OkNvbXBhcmlzb25N
b2RlIGNvbXBhcmlzb25Nb2RlKQogewogICAgIEFTU0VSVCh2MS5pc0JpZ0ludCgpIHx8IHYyLmlz
QmlnSW50KCkpOwogICAgIEFTU0VSVCh2MS5pc1ByaW1pdGl2ZSgpICYmIHYyLmlzUHJpbWl0aXZl
KCkpOwogCi0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgCiAgICAgaWYgKHYxLmlzQmlnSW50KCkgJiYgdjIuaXNCaWdJbnQoKSkKQEAgLTI4Miw3
ICsyNjIsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgYmlnSW50Q29tcGFyZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MiwgSgogICAgIGlmICh2MS5pc0JpZ0ludCgp
KSB7CiAgICAgICAgIEpTVmFsdWUgcHJpbVZhbHVlID0gdjI7CiAgICAgICAgIGlmIChwcmltVmFs
dWUuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgSlNCaWdJbnQqIGJpZ0ludFZhbHVlID0gSlNC
aWdJbnQ6OnN0cmluZ1RvQmlnSW50KGNhbGxGcmFtZSwgYXNTdHJpbmcocHJpbVZhbHVlKS0+dmFs
dWUoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBKU0JpZ0ludCogYmlnSW50VmFsdWUgPSBKU0Jp
Z0ludDo6c3RyaW5nVG9CaWdJbnQoZ2xvYmFsT2JqZWN0LCBhc1N0cmluZyhwcmltVmFsdWUpLT52
YWx1ZShnbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKICAgICAgICAgICAgIGlmICghYmlnSW50VmFsdWUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkzLDE0ICsyNzMsMTQgQEAgQUxXQVlTX0lOTElORSBib29s
IGJpZ0ludENvbXBhcmUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdjEsIEpTVmFsdWUg
djIsIEoKICAgICAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludCgpKQogICAgICAgICAgICAgcmV0
dXJuIGJpZ0ludENvbXBhcmVSZXN1bHQoSlNCaWdJbnQ6OmNvbXBhcmUoYXNCaWdJbnQodjEpLCBh
c0JpZ0ludChwcmltVmFsdWUpKSwgY29tcGFyaXNvbk1vZGUpOwogCi0gICAgICAgIGRvdWJsZSBu
dW1iZXJWYWx1ZSA9IHByaW1WYWx1ZS50b051bWJlcihjYWxsRnJhbWUpOworICAgICAgICBkb3Vi
bGUgbnVtYmVyVmFsdWUgPSBwcmltVmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICByZXR1cm4gYmln
SW50Q29tcGFyZVJlc3VsdChKU0JpZ0ludDo6Y29tcGFyZVRvRG91YmxlKGFzQmlnSW50KHYxKSwg
bnVtYmVyVmFsdWUpLCBjb21wYXJpc29uTW9kZSk7CiAgICAgfQogICAgIAogICAgIEpTVmFsdWUg
cHJpbVZhbHVlID0gdjE7CiAgICAgaWYgKHByaW1WYWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAg
IEpTQmlnSW50KiBiaWdJbnRWYWx1ZSA9IEpTQmlnSW50OjpzdHJpbmdUb0JpZ0ludChjYWxsRnJh
bWUsIGFzU3RyaW5nKHByaW1WYWx1ZSktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgICAgICBKU0Jp
Z0ludCogYmlnSW50VmFsdWUgPSBKU0JpZ0ludDo6c3RyaW5nVG9CaWdJbnQoZ2xvYmFsT2JqZWN0
LCBhc1N0cmluZyhwcmltVmFsdWUpLT52YWx1ZShnbG9iYWxPYmplY3QpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBpZiAoIWJpZ0ludFZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzExLDcgKzI5MSw3IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBiaWdJbnRDb21wYXJlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYx
LCBKU1ZhbHVlIHYyLCBKCiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludCgpKQogICAgICAgICBy
ZXR1cm4gYmlnSW50Q29tcGFyZVJlc3VsdChKU0JpZ0ludDo6Y29tcGFyZShhc0JpZ0ludChwcmlt
VmFsdWUpLCBhc0JpZ0ludCh2MikpLCBjb21wYXJpc29uTW9kZSk7CiAgICAgCi0gICAgZG91Ymxl
IG51bWJlclZhbHVlID0gcHJpbVZhbHVlLnRvTnVtYmVyKGNhbGxGcmFtZSk7CisgICAgZG91Ymxl
IG51bWJlclZhbHVlID0gcHJpbVZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgLy8gSGVyZSB3ZSBjaGVjayBp
bnZlcnRlZCBiZWNhdXNlIEJpZ0ludCBpcyB0aGUgdjIKQEAgLTMyMiwxNyArMzAyLDE3IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBiaWdJbnRDb21wYXJlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Zh
bHVlIHYxLCBKU1ZhbHVlIHYyLCBKCiAgICAgcmV0dXJuIGNvbXBhcmlzb25SZXN1bHQgPT0gSlNC
aWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFuIHx8IGNvbXBhcmlzb25SZXN1bHQg
PT0gSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOwogfQogCi1BTFdBWVNfSU5MSU5F
IGJvb2wgdG9QcmltaXRpdmVOdW1lcmljKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYs
IEpTVmFsdWUmIHAsIGRvdWJsZSYgbikKK0FMV0FZU19JTkxJTkUgYm9vbCB0b1ByaW1pdGl2ZU51
bWVyaWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2LCBKU1ZhbHVlJiBw
LCBkb3VibGUmIG4pCiB7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgCi0gICAgcCA9IHYudG9QcmltaXRpdmUoY2FsbEZyYW1lLCBQcmVmZXJO
dW1iZXIpOworICAgIHAgPSB2LnRvUHJpbWl0aXZlKGdsb2JhbE9iamVjdCwgUHJlZmVyTnVtYmVy
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgaWYgKHAuaXNC
aWdJbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgbiA9IHAudG9OdW1iZXIo
Y2FsbEZyYW1lKTsKKyAgICBuID0gcC50b051bWJlcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICByZXR1cm4gIXAuaXNTdHJpbmcoKTsK
IH0KQEAgLTM0MSw5ICszMjEsOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgdG9QcmltaXRpdmVOdW1l
cmljKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYsIEpTVmFsdWUmCiAvLyBldmFsdWF0
aW9uIG9yZGVyaW5nIGZvciBhcmd1bWVudCBjb252ZXJzaW9ucyBmb3IgJzwnIGFuZCAnPicuIEZv
ciAnPCcgcGFzcyB0aGUgdmFsdWUKIC8vIHRydWUsIGZvciBsZWZ0Rmlyc3QsIGZvciAnPicgcGFz
cyB0aGUgdmFsdWUgZmFsc2UgKGFuZCByZXZlcnNlIG9wZXJhbmQgb3JkZXIpLgogdGVtcGxhdGU8
Ym9vbCBsZWZ0Rmlyc3Q+Ci1BTFdBWVNfSU5MSU5FIGJvb2wganNMZXNzKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQorQUxXQVlTX0lOTElORSBib29sIGpzTGVz
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQog
ewotICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCkBAIC0zNTMsOSArMzMzLDkgQEAg
QUxXQVlTX0lOTElORSBib29sIGpzTGVzcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2
MSwgSlNWYWx1ZSB2MikKICAgICAgICAgcmV0dXJuIHYxLmFzTnVtYmVyKCkgPCB2Mi5hc051bWJl
cigpOwogCiAgICAgaWYgKGlzSlNTdHJpbmcodjEpICYmIGlzSlNTdHJpbmcodjIpKSB7Ci0gICAg
ICAgIFN0cmluZyBzMSA9IGFzU3RyaW5nKHYxKS0+dmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAg
U3RyaW5nIHMxID0gYXNTdHJpbmcodjEpLT52YWx1ZShnbG9iYWxPYmplY3QpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIFN0cmluZyBzMiA9IGFz
U3RyaW5nKHYyKS0+dmFsdWUoY2FsbEZyYW1lKTsKKyAgICAgICAgU3RyaW5nIHMyID0gYXNTdHJp
bmcodjIpLT52YWx1ZShnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4o
czEsIHMyKTsKICAgICB9CkBAIC0zNjcsMzMgKzM0NywzMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
anNMZXNzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQogICAg
IGJvb2wgd2FzTm90U3RyaW5nMTsKICAgICBib29sIHdhc05vdFN0cmluZzI7CiAgICAgaWYgKGxl
ZnRGaXJzdCkgewotICAgICAgICB3YXNOb3RTdHJpbmcxID0gdG9QcmltaXRpdmVOdW1lcmljKGNh
bGxGcmFtZSwgdjEsIHAxLCBuMSk7CisgICAgICAgIHdhc05vdFN0cmluZzEgPSB0b1ByaW1pdGl2
ZU51bWVyaWMoZ2xvYmFsT2JqZWN0LCB2MSwgcDEsIG4xKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICB3YXNOb3RTdHJpbmcyID0gdG9QcmltaXRp
dmVOdW1lcmljKGNhbGxGcmFtZSwgdjIsIHAyLCBuMik7CisgICAgICAgIHdhc05vdFN0cmluZzIg
PSB0b1ByaW1pdGl2ZU51bWVyaWMoZ2xvYmFsT2JqZWN0LCB2MiwgcDIsIG4yKTsKICAgICB9IGVs
c2UgewotICAgICAgICB3YXNOb3RTdHJpbmcyID0gdG9QcmltaXRpdmVOdW1lcmljKGNhbGxGcmFt
ZSwgdjIsIHAyLCBuMik7CisgICAgICAgIHdhc05vdFN0cmluZzIgPSB0b1ByaW1pdGl2ZU51bWVy
aWMoZ2xvYmFsT2JqZWN0LCB2MiwgcDIsIG4yKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwotICAgICAgICB3YXNOb3RTdHJpbmcxID0gdG9QcmltaXRpdmVOdW1l
cmljKGNhbGxGcmFtZSwgdjEsIHAxLCBuMSk7CisgICAgICAgIHdhc05vdFN0cmluZzEgPSB0b1By
aW1pdGl2ZU51bWVyaWMoZ2xvYmFsT2JqZWN0LCB2MSwgcDEsIG4xKTsKICAgICB9CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYgKHdhc05vdFN0cmluZzEg
fCB3YXNOb3RTdHJpbmcyKSB7CiAgICAgICAgIGlmIChwMS5pc0JpZ0ludCgpIHx8IHAyLmlzQmln
SW50KCkpCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpZ0ludENvbXBh
cmUoY2FsbEZyYW1lLCBwMSwgcDIsIEpTQmlnSW50OjpDb21wYXJpc29uTW9kZTo6TGVzc1RoYW4p
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYmlnSW50Q29tcGFyZShn
bG9iYWxPYmplY3QsIHAxLCBwMiwgSlNCaWdJbnQ6OkNvbXBhcmlzb25Nb2RlOjpMZXNzVGhhbikp
OwogCiAgICAgICAgIHJldHVybiBuMSA8IG4yOwogICAgIH0KIAotICAgIHJldHVybiBjb2RlUG9p
bnRDb21wYXJlTGVzc1RoYW4oYXNTdHJpbmcocDEpLT52YWx1ZShjYWxsRnJhbWUpLCBhc1N0cmlu
ZyhwMiktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVz
c1RoYW4oYXNTdHJpbmcocDEpLT52YWx1ZShnbG9iYWxPYmplY3QpLCBhc1N0cmluZyhwMiktPnZh
bHVlKGdsb2JhbE9iamVjdCkpOwogfQogCiAvLyBTZWUgRVM1IDExLjguMy8xMS44LjQvMTEuOC41
IGZvciBkZWZpbml0aW9uIG9mIGxlZnRGaXJzdCwgdGhpcyB2YWx1ZSBlbnN1cmVzIGNvcnJlY3QK
IC8vIGV2YWx1YXRpb24gb3JkZXJpbmcgZm9yIGFyZ3VtZW50IGNvbnZlcnNpb25zIGZvciAnPD0n
IGFuZCAnPT4nLiBGb3IgJzw9JyBwYXNzIHRoZQogLy8gdmFsdWUgdHJ1ZSwgZm9yIGxlZnRGaXJz
dCwgZm9yICc9PicgcGFzcyB0aGUgdmFsdWUgZmFsc2UgKGFuZCByZXZlcnNlIG9wZXJhbmQgb3Jk
ZXIpLgogdGVtcGxhdGU8Ym9vbCBsZWZ0Rmlyc3Q+Ci1BTFdBWVNfSU5MSU5FIGJvb2wganNMZXNz
RXEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCitBTFdBWVNf
SU5MSU5FIGJvb2wganNMZXNzRXEoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSB2MSwgSlNWYWx1ZSB2MikKIHsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh2MS5pc0ludDMyKCkgJiYgdjIuaXNJbnQzMigpKQpA
QCAtNDAzLDkgKzM4Myw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBqc0xlc3NFcShDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKICAgICAgICAgcmV0dXJuIHYxLmFz
TnVtYmVyKCkgPD0gdjIuYXNOdW1iZXIoKTsKIAogICAgIGlmIChpc0pTU3RyaW5nKHYxKSAmJiBp
c0pTU3RyaW5nKHYyKSkgewotICAgICAgICBTdHJpbmcgczEgPSBhc1N0cmluZyh2MSktPnZhbHVl
KGNhbGxGcmFtZSk7CisgICAgICAgIFN0cmluZyBzMSA9IGFzU3RyaW5nKHYxKS0+dmFsdWUoZ2xv
YmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwot
ICAgICAgICBTdHJpbmcgczIgPSBhc1N0cmluZyh2MiktPnZhbHVlKGNhbGxGcmFtZSk7CisgICAg
ICAgIFN0cmluZyBzMiA9IGFzU3RyaW5nKHYyKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICByZXR1cm4gIWNv
ZGVQb2ludENvbXBhcmVMZXNzVGhhbihzMiwgczEpOwogICAgIH0KQEAgLTQxNywyMyArMzk3LDIz
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBqc0xlc3NFcShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSB2MSwgSlNWYWx1ZSB2MikKICAgICBib29sIHdhc05vdFN0cmluZzE7CiAgICAgYm9vbCB3
YXNOb3RTdHJpbmcyOwogICAgIGlmIChsZWZ0Rmlyc3QpIHsKLSAgICAgICAgd2FzTm90U3RyaW5n
MSA9IHRvUHJpbWl0aXZlTnVtZXJpYyhjYWxsRnJhbWUsIHYxLCBwMSwgbjEpOworICAgICAgICB3
YXNOb3RTdHJpbmcxID0gdG9QcmltaXRpdmVOdW1lcmljKGdsb2JhbE9iamVjdCwgdjEsIHAxLCBu
MSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAg
d2FzTm90U3RyaW5nMiA9IHRvUHJpbWl0aXZlTnVtZXJpYyhjYWxsRnJhbWUsIHYyLCBwMiwgbjIp
OworICAgICAgICB3YXNOb3RTdHJpbmcyID0gdG9QcmltaXRpdmVOdW1lcmljKGdsb2JhbE9iamVj
dCwgdjIsIHAyLCBuMik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgd2FzTm90U3RyaW5nMiA9IHRv
UHJpbWl0aXZlTnVtZXJpYyhjYWxsRnJhbWUsIHYyLCBwMiwgbjIpOworICAgICAgICB3YXNOb3RT
dHJpbmcyID0gdG9QcmltaXRpdmVOdW1lcmljKGdsb2JhbE9iamVjdCwgdjIsIHAyLCBuMik7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgd2FzTm90
U3RyaW5nMSA9IHRvUHJpbWl0aXZlTnVtZXJpYyhjYWxsRnJhbWUsIHYxLCBwMSwgbjEpOworICAg
ICAgICB3YXNOb3RTdHJpbmcxID0gdG9QcmltaXRpdmVOdW1lcmljKGdsb2JhbE9iamVjdCwgdjEs
IHAxLCBuMSk7CiAgICAgfQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
IAogICAgIGlmICh3YXNOb3RTdHJpbmcxIHwgd2FzTm90U3RyaW5nMikgewogICAgICAgICBpZiAo
cDEuaXNCaWdJbnQoKSB8fCBwMi5pc0JpZ0ludCgpKQotICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBiaWdJbnRDb21wYXJlKGNhbGxGcmFtZSwgcDEsIHAyLCBKU0JpZ0ludDo6
Q29tcGFyaXNvbk1vZGU6Okxlc3NUaGFuT3JFcXVhbCkpOworICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBiaWdJbnRDb21wYXJlKGdsb2JhbE9iamVjdCwgcDEsIHAyLCBKU0Jp
Z0ludDo6Q29tcGFyaXNvbk1vZGU6Okxlc3NUaGFuT3JFcXVhbCkpOwogCiAgICAgICAgIHJldHVy
biBuMSA8PSBuMjsKICAgICB9Ci0gICAgcmV0dXJuICFjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4o
YXNTdHJpbmcocDIpLT52YWx1ZShjYWxsRnJhbWUpLCBhc1N0cmluZyhwMSktPnZhbHVlKGNhbGxG
cmFtZSkpOworICAgIHJldHVybiAhY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGFzU3RyaW5nKHAy
KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KSwgYXNTdHJpbmcocDEpLT52YWx1ZShnbG9iYWxPYmplY3Qp
KTsKIH0KIAogLy8gRmFzdC1wYXRoIGNob2ljZXMgaGVyZSBhcmUgYmFzZWQgb24gZnJlcXVlbmN5
IGRhdGEgZnJvbSBTdW5TcGlkZXI6CkBAIC00NDYsNzEgKzQyNiw3MSBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wganNMZXNzRXEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdjEsIEpTVmFsdWUg
djIpCiAvLyAgICA0MDAwICAgIEFkZCBjYXNlOiAzIDUKIAogCi1BTFdBWVNfSU5MSU5FIEpTVmFs
dWUganNBZGROb25OdW1iZXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdjEsIEpTVmFs
dWUgdjIpCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNBZGROb25OdW1iZXIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKIHsKLSAgICBWTSYgdm0g
PSBjYWxsRnJhbWUtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBBU1NFUlQoIXYxLmlz
TnVtYmVyKCkgfHwgIXYyLmlzTnVtYmVyKCkpOwogCiAgICAgaWYgKExJS0VMWSh2MS5pc1N0cmlu
ZygpICYmICF2Mi5pc09iamVjdCgpKSkgewogICAgICAgICBpZiAodjIuaXNTdHJpbmcoKSkKLSAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoY2FsbEZyYW1lLCBh
c1N0cmluZyh2MSksIGFzU3RyaW5nKHYyKSkpOwotICAgICAgICBTdHJpbmcgczIgPSB2Mi50b1dU
RlN0cmluZyhjYWxsRnJhbWUpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBqc1N0cmluZyhnbG9iYWxPYmplY3QsIGFzU3RyaW5nKHYxKSwgYXNTdHJpbmcodjIpKSk7Cisg
ICAgICAgIFN0cmluZyBzMiA9IHYyLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwganNTdHJpbmcoY2FsbEZyYW1lLCBhc1N0cmluZyh2MSksIHMyKSk7CisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTdHJpbmcoZ2xvYmFsT2JqZWN0LCBhc1N0
cmluZyh2MSksIHMyKSk7CiAgICAgfQogCiAgICAgLy8gQWxsIG90aGVyIGNhc2VzIGFyZSBwcmV0
dHkgdW5jb21tb24KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzQWRkU2xvd0Nhc2Uo
Y2FsbEZyYW1lLCB2MSwgdjIpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzQWRk
U2xvd0Nhc2UoZ2xvYmFsT2JqZWN0LCB2MSwgdjIpKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGpzQWRkKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQor
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7CiAgICAgaWYgKHYxLmlzTnVtYmVyKCkgJiYgdjIu
aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHYxLmFzTnVtYmVyKCkgKyB2Mi5h
c051bWJlcigpKTsKICAgICAgICAgCi0gICAgcmV0dXJuIGpzQWRkTm9uTnVtYmVyKGNhbGxGcmFt
ZSwgdjEsIHYyKTsKKyAgICByZXR1cm4ganNBZGROb25OdW1iZXIoZ2xvYmFsT2JqZWN0LCB2MSwg
djIpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdWIoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3ViKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8gbGVm
dE51bWVyaWMgPSB2MS50b051bWVyaWMoZXhlYyk7CisgICAgYXV0byBsZWZ0TnVtZXJpYyA9IHYx
LnRvTnVtZXJpYyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0gICAgYXV0byByaWdodE51bWVyaWMgPSB2Mi50b051bWVyaWMoZXhlYyk7CisgICAg
YXV0byByaWdodE51bWVyaWMgPSB2Mi50b051bWVyaWMoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxK
U0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxK
U0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6c3ViKGV4ZWMsIFdURjo6Z2V0PEpTQmlnSW50
Kj4obGVmdE51bWVyaWMpLCBXVEY6OmdldDxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpOworICAg
ICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpzdWIoZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxKU0Jp
Z0ludCo+KGxlZnROdW1lcmljKSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
IkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBzdWJ0cmFjdGlvbi4iX3Mp
OworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIklu
dmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBzdWJ0cmFjdGlvbi4iX3MpOwog
ICAgIH0KIAogICAgIHJldHVybiBqc051bWJlcihXVEY6OmdldDxkb3VibGU+KGxlZnROdW1lcmlj
KSAtIFdURjo6Z2V0PGRvdWJsZT4ocmlnaHROdW1lcmljKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBqc011bChFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQor
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzTXVsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFZhcmlhbnQ8SlNCaWdJbnQqLCBkb3VibGU+IGxlZnRO
dW1lcmljID0gdjEudG9OdW1lcmljKHN0YXRlKTsKKyAgICBWYXJpYW50PEpTQmlnSW50KiwgZG91
YmxlPiBsZWZ0TnVtZXJpYyA9IHYxLnRvTnVtZXJpYyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgVmFyaWFudDxKU0JpZ0ludCosIGRvdWJs
ZT4gcmlnaHROdW1lcmljID0gdjIudG9OdW1lcmljKHN0YXRlKTsKKyAgICBWYXJpYW50PEpTQmln
SW50KiwgZG91YmxlPiByaWdodE51bWVyaWMgPSB2Mi50b051bWVyaWMoZ2xvYmFsT2JqZWN0KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgfHwgV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAgICAgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgJiYgV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAgICAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6bXVsdGlwbHkoc3RhdGUsIFdU
Rjo6Z2V0PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpLCBXVEY6OmdldDxKU0JpZ0ludCo+KHJpZ2h0
TnVtZXJpYykpOworICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjptdWx0aXBseShnbG9iYWxP
YmplY3QsIFdURjo6Z2V0PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpLCBXVEY6OmdldDxKU0JpZ0lu
dCo+KHJpZ2h0TnVtZXJpYykpOwogICAgICAgICB9CiAKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIG11
bHRpcGxpY2F0aW9uLiJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gbXVsdGlwbGlj
YXRpb24uIl9zKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BhcnNlSW50LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QYXJzZUludC5oCmluZGV4IGRlODYxYTZmNGYwN2M0MjEwZjM5ZDllNWQ3
ODM2MzJkODU2MWZiMDIuLmJlM2Q5NTAxMDUzMmVhNGE0ZDA0NDc2YmZjOGMwZTFiY2UxMTY5YzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1BhcnNlSW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUGFyc2VJbnQuaApAQCAtMTk4LDE1ICsx
OTgsMTUgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgZG91YmxlIHBhcnNlSW50KFN0cmluZ1ZpZXcg
cywgaW50IHJhZGl4KQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2Vw
dGlvbj4KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhbGxi
YWNrV2hlbk5vRXhjZXB0aW9uKFN0cmluZ1ZpZXcpPjo6dHlwZSB0b1N0cmluZ1ZpZXcoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbiBjYWxsYmFj
aykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhbGxiYWNr
V2hlbk5vRXhjZXB0aW9uKFN0cmluZ1ZpZXcpPjo6dHlwZSB0b1N0cmluZ1ZpZXcoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgQ2FsbGJhY2tXaGVuTm9FeGNlcHRp
b24gY2FsbGJhY2spCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBn
ZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBKU1N0cmluZyogc3RyaW5nID0gdmFsdWUudG9TdHJpbmdPck51bGwoZXhlYyk7
CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nT3JOdWxsKGdsb2JhbE9iamVj
dCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFzdHJpbmcp
OwogICAgIGlmIChVTkxJS0VMWSghc3RyaW5nKSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBh
dXRvIHZpZXdXaXRoU3RyaW5nID0gc3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZXhl
Yyk7CisgICAgYXV0byB2aWV3V2l0aFN0cmluZyA9IHN0cmluZy0+dmlld1dpdGhVbmRlcmx5aW5n
U3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGxiYWNrKHZpZXdXaXRoU3RyaW5n
LnZpZXcpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b2dyYW1FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dy
YW1FeGVjdXRhYmxlLmNwcAppbmRleCA2ZDZmMWNjNzlhM2IxMTllNWY4ZjYzYWYzZWRkNDYzZmRl
MjY4MWVkLi5mYmRjZDRiNmMxODk4NThlNDUxMzkwNTU2YzYxZGM4MmM3ZTNhMDY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3Bw
CkBAIC00MywxMSArNDMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBQ
cm9ncmFtRXhlY3V0YWJsZTo6c19pbmZvID0geyAiUHJvZ3JhbUV4ZWN1dGFibGUiLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb2dyYW1FeGVj
dXRhYmxlKSB9OwogCi1Qcm9ncmFtRXhlY3V0YWJsZTo6UHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCi0gICAgOiBCYXNlKGV4ZWMtPnZt
KCkucHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGV4ZWMtPnZtKCksIHNvdXJjZSwg
ZmFsc2UsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgZmFsc2UsIEV2YWxDb250ZXh0VHlwZTo6
Tm9uZSwgTm9JbnRyaW5zaWMpCitQcm9ncmFtRXhlY3V0YWJsZTo6UHJvZ3JhbUV4ZWN1dGFibGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQor
ICAgIDogQmFzZShnbG9iYWxPYmplY3QtPnZtKCkucHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUu
Z2V0KCksIGdsb2JhbE9iamVjdC0+dm0oKSwgc291cmNlLCBmYWxzZSwgRGVyaXZlZENvbnRleHRU
eXBlOjpOb25lLCBmYWxzZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBOb0ludHJpbnNpYykKIHsK
ICAgICBBU1NFUlQoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZVR5cGUoKSA9PSBTb3VyY2VQcm92
aWRlclNvdXJjZVR5cGU6OlByb2dyYW0pOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSB8
fCB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCiAgICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uoc291cmNlSUQoKSwgdHlwZVByb2ZpbGlu
Z1N0YXJ0T2Zmc2V0KHZtKSwgdHlwZVByb2ZpbGluZ0VuZE9mZnNldCh2bSkpOwogfQpAQCAtNjMs
MjEgKzYzLDIxIEBAIGVudW0gY2xhc3MgR2xvYmFsUHJvcGVydHlMb29rVXBTdGF0dXMgewogICAg
IENvbmZpZ3VyYWJsZSwKICAgICBOb25Db25maWd1cmFibGUsCiB9Owotc3RhdGljIEdsb2JhbFBy
b3BlcnR5TG9va1VwU3RhdHVzIGhhc1Jlc3RyaWN0ZWRHbG9iYWxQcm9wZXJ0eShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCitzdGF0aWMgR2xvYmFsUHJvcGVydHlMb29rVXBTdGF0dXMgaGFzUmVzdHJpY3RlZEds
b2JhbFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCiB7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAg
aWYgKCFnbG9iYWxPYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpKQorICAgIGlmICghZ2xvYmFsT2JqZWN0LT5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQogICAg
ICAgICByZXR1cm4gR2xvYmFsUHJvcGVydHlMb29rVXBTdGF0dXM6Ok5vdEZvdW5kOwogICAgIGlm
IChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQogICAgICAgICByZXR1cm4gR2xvYmFsUHJvcGVy
dHlMb29rVXBTdGF0dXM6OkNvbmZpZ3VyYWJsZTsKICAgICByZXR1cm4gR2xvYmFsUHJvcGVydHlM
b29rVXBTdGF0dXM6Ok5vbkNvbmZpZ3VyYWJsZTsKIH0KIAotSlNPYmplY3QqIFByb2dyYW1FeGVj
dXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyhWTSYgdm0sIENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1Njb3BlKiBzY29wZSkKK0pTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5p
dGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1Njb3BlKiBzY29wZSkKIHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBSRUxFQVNFX0FTU0VSVChzY29wZSk7Ci0gICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3Qodm0pOworICAgIEFTU0VS
VChnbG9iYWxPYmplY3QgPT0gc2NvcGUtPmdsb2JhbE9iamVjdCh2bSkpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKGdsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCZnbG9iYWxPYmplY3QtPnZtKCkgPT0g
JnZtKTsKIApAQCAtODgsMTcgKzg4LDE1IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6
aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGCiAgICAg
ICAgIHZtLCB0aGlzLCBzb3VyY2UoKSwgc3RyaWN0TW9kZSwgY29kZUdlbmVyYXRpb25Nb2RlLCBl
cnJvcik7CiAKICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5oYXNEZWJ1Z2dlcigpKQotICAgICAgICBn
bG9iYWxPYmplY3QtPmRlYnVnZ2VyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIHNvdXJjZSgp
LnByb3ZpZGVyKCksIGVycm9yLmxpbmUoKSwgZXJyb3IubWVzc2FnZSgpKTsKKyAgICAgICAgZ2xv
YmFsT2JqZWN0LT5kZWJ1Z2dlcigpLT5zb3VyY2VQYXJzZWQoZ2xvYmFsT2JqZWN0LCBzb3VyY2Uo
KS5wcm92aWRlcigpLCBlcnJvci5saW5lKCksIGVycm9yLm1lc3NhZ2UoKSk7CiAKICAgICBpZiAo
ZXJyb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZXJyb3IudG9FcnJvck9iamVjdChnbG9i
YWxPYmplY3QsIHNvdXJjZSgpKTsKIAogICAgIEpTVmFsdWUgbmV4dFByb3RvdHlwZSA9IGdsb2Jh
bE9iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICB3aGlsZSAobmV4dFByb3RvdHlw
ZSAmJiBuZXh0UHJvdG90eXBlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKGFz
T2JqZWN0KG5leHRQcm90b3R5cGUpLT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSkgewotICAg
ICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJQcm94eSBpcyBub3QgYWxs
b3dlZCBpbiB0aGUgZ2xvYmFsIHByb3RvdHlwZSBjaGFpbi4iX3MpOwotICAgICAgICB9CisgICAg
ICAgIGlmIChVTkxJS0VMWShhc09iamVjdChuZXh0UHJvdG90eXBlKS0+dHlwZSgpID09IFByb3h5
T2JqZWN0VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgIlByb3h5IGlzIG5vdCBhbGxvd2VkIGluIHRoZSBnbG9iYWwgcHJvdG90eXBlIGNoYWlu
LiJfcyk7CiAgICAgICAgIG5leHRQcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJvdG90eXBlKS0+
Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKICAgICB9CiAgICAgCkBAIC0xMDgsMjIgKzEwNiwyMSBA
QCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVz
KFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRgogICAgIC8vIFRoZSBFUzYgc3BlYyBzYXlzIHRoYXQg
bm8gdmFycy9nbG9iYWwgcHJvcGVydGllcy9sZXQvY29uc3QgY2FuIGJlIGR1cGxpY2F0ZWQgaW4g
dGhlIGdsb2JhbCBzY29wZS4KICAgICAvLyBUaGlzIGNhcnJpZWQgb3V0IHNlY3Rpb24gMTUuMS44
IG9mIHRoZSBFUzYgc3BlYzogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEt
MjYyLzYuMC9pbmRleC5odG1sI3NlYy1nbG9iYWxkZWNsYXJhdGlvbmluc3RhbnRpYXRpb24KICAg
ICB7Ci0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwogICAgICAgICAvLyBDaGVjayBmb3IgaW50ZXJzZWN0aW9uIG9mICJ2YXIiIGFuZCAibGV0Ii8i
Y29uc3QiLyJjbGFzcyIKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGxleGljYWxEZWNsYXJh
dGlvbnMpIHsKICAgICAgICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9ucy5jb250YWlucyhl
bnRyeS5rZXkpKQotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihleGVj
LCBtYWtlU3RyaW5nKCJDYW4ndCBjcmVhdGUgZHVwbGljYXRlIHZhcmlhYmxlOiAnIiwgU3RyaW5n
KGVudHJ5LmtleS5nZXQoKSksICInIikpOworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVT
eW50YXhFcnJvcihnbG9iYWxPYmplY3QsIG1ha2VTdHJpbmcoIkNhbid0IGNyZWF0ZSBkdXBsaWNh
dGUgdmFyaWFibGU6ICciLCBTdHJpbmcoZW50cnkua2V5LmdldCgpKSwgIiciKSk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBDaGVjayBpZiBhbnkgbmV3ICJsZXQiLyJjb25zdCIvImNsYXNzIiB3
aWxsIHNoYWRvdyBhbnkgcHJlLWV4aXN0aW5nIGdsb2JhbCBwcm9wZXJ0eSBuYW1lcyAod2l0aCBj
b25maWd1cmFibGUgPSBmYWxzZSksIG9yICJ2YXIiLyJsZXQiLyJjb25zdCIgdmFyaWFibGVzLgog
ICAgICAgICAvLyBJdCdzIGFuIGVycm9yIHRvIGludHJvZHVjZSBhIHNoYWRvdy4KICAgICAgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IGxleGljYWxEZWNsYXJhdGlvbnMpIHsKICAgICAgICAgICAgIC8v
IFRoZSBFUzYgc3BlYyBzYXlzIHRoYXQgUmVzdHJpY3RlZEdsb2JhbFByb3BlcnR5IGNhbid0IGJl
IHNoYWRvd2VkLgotICAgICAgICAgICAgR2xvYmFsUHJvcGVydHlMb29rVXBTdGF0dXMgc3RhdHVz
ID0gaGFzUmVzdHJpY3RlZEdsb2JhbFByb3BlcnR5KGV4ZWMsIGdsb2JhbE9iamVjdCwgZW50cnku
a2V5LmdldCgpKTsKKyAgICAgICAgICAgIEdsb2JhbFByb3BlcnR5TG9va1VwU3RhdHVzIHN0YXR1
cyA9IGhhc1Jlc3RyaWN0ZWRHbG9iYWxQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGVudHJ5LmtleS5n
ZXQoKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwogICAgICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsKICAgICAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlMb29rVXBTdGF0dXM6Ok5vbkNvbmZpZ3VyYWJsZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgbWFrZVN0cmluZygiQ2FuJ3QgY3JlYXRl
IGR1cGxpY2F0ZSB2YXJpYWJsZSB0aGF0IHNoYWRvd3MgYSBnbG9iYWwgcHJvcGVydHk6ICciLCBT
dHJpbmcoZW50cnkua2V5LmdldCgpKSwgIiciKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbWFrZVN0cmluZygiQ2FuJ3QgY3JlYXRlIGR1
cGxpY2F0ZSB2YXJpYWJsZSB0aGF0IHNoYWRvd3MgYSBnbG9iYWwgcHJvcGVydHk6ICciLCBTdHJp
bmcoZW50cnkua2V5LmdldCgpKSwgIiciKSk7CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5TG9va1VwU3RhdHVzOjpDb25maWd1cmFibGU6CiAgICAgICAgICAgICAgICAgLy8gTGV4aWNh
bCBiaW5kaW5ncyBjYW4gc2hhZG93IGdsb2JhbCBwcm9wZXJ0aWVzIGlmIHRoZSBnaXZlbiBwcm9w
ZXJ0eSdzIGF0dHJpYnV0ZSBpcyBjb25maWd1cmFibGUuCiAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2xvYmFsZGVjbGFyYXRpb25pbnN0YW50
aWF0aW9uIHN0ZXAgNS1jLCBgaGFzUmVzdHJpY3RlZEdsb2JhbGAgYmVjb21lcyBmYWxzZQpAQCAt
MTM2LDcgKzEzMyw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUds
b2JhbFByb3BlcnRpZXMoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBn
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQtPmhhc1Byb3BlcnR5KGV4ZWMsIGVudHJ5LmtleS5nZXQo
KSk7CisgICAgICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gZ2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50LT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGVudHJ5LmtleS5nZXQoKSk7CiAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgICAgICAg
ICAgaWYgKGhhc1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGVudHJ5
LnZhbHVlLmlzQ29uc3QoKSAmJiAhdm0uZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhy
b3coKSAmJiAhaXNTdHJpY3RNb2RlKCkpKSB7CkBAIC0xNDUsNyArMTQyLDcgQEAgSlNPYmplY3Qq
IFByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyhWTSYgdm0sIENh
bGxGcmFtZSogY2FsbEYKICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbExleGljYWxFbnZp
cm9ubWVudC0+aXNDb25zdFZhcmlhYmxlKGVudHJ5LmtleS5nZXQoKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoIkNhbid0IGNyZWF0ZSBk
dXBsaWNhdGUgdmFyaWFibGU6ICciLCBTdHJpbmcoZW50cnkua2V5LmdldCgpKSwgIiciKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbWFr
ZVN0cmluZygiQ2FuJ3QgY3JlYXRlIGR1cGxpY2F0ZSB2YXJpYWJsZTogJyIsIFN0cmluZyhlbnRy
eS5rZXkuZ2V0KCkpLCAiJyIpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNTMs
MTAgKzE1MCwxMCBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHbG9i
YWxQcm9wZXJ0aWVzKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRgogICAgICAgICAvLyBJdCdzIGFu
IGVycm9yIHRvIGludHJvZHVjZSBhIHNoYWRvdy4KICAgICAgICAgaWYgKCFnbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IHZhcmlhYmxlRGVjbGFyYXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBoYXNQcm9wZXJ0
eSA9IGdsb2JhbExleGljYWxFbnZpcm9ubWVudC0+aGFzUHJvcGVydHkoZXhlYywgZW50cnkua2V5
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gZ2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGVudHJ5LmtleS5nZXQoKSk7
CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRy
KTsKICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcGVydHkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJDYW4ndCBjcmVhdGUg
ZHVwbGljYXRlIHZhcmlhYmxlOiAnIiwgU3RyaW5nKGVudHJ5LmtleS5nZXQoKSksICInIikpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0
LCBtYWtlU3RyaW5nKCJDYW4ndCBjcmVhdGUgZHVwbGljYXRlIHZhcmlhYmxlOiAnIiwgU3RyaW5n
KGVudHJ5LmtleS5nZXQoKSksICInIikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQpAQCAtMTY5LDcgKzE2Niw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlh
bGl6ZUdsb2JhbFByb3BlcnRpZXMoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGCiAgICAgZm9yIChz
aXplX3QgaSA9IDAsIG51bWJlck9mRnVuY3Rpb25zID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mRnVuY3Rpb25EZWNscygpOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbnM7ICsraSkgewogICAgICAg
ICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUg
PSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOwogICAgICAgICBBU1NFUlQoIXVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5uYW1lKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgZ2xv
YmFsT2JqZWN0LT5hZGRGdW5jdGlvbihjYWxsRnJhbWUsIHVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLT5uYW1lKCkpOworICAgICAgICBnbG9iYWxPYmplY3QtPmFkZEZ1bmN0aW9uKGdsb2JhbE9i
amVjdCwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUtPm5hbWUoKSk7CiAgICAgICAgIGlmICh2
bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpIHsKICAgICAgICAg
ICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uo
c291cmNlSUQoKSwgCiAgICAgICAgICAgICAgICAgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUt
PnR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCAKQEAgLTE3OSw3ICsxNzYsNyBAQCBKU09iamVj
dCogUHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKFZNJiB2bSwg
Q2FsbEZyYW1lKiBjYWxsRgogCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHZhcmlhYmxlRGVjbGFy
YXRpb25zKSB7CiAgICAgICAgIEFTU0VSVChlbnRyeS52YWx1ZS5pc1ZhcigpKTsKLSAgICAgICAg
Z2xvYmFsT2JqZWN0LT5hZGRWYXIoY2FsbEZyYW1lLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBl
bnRyeS5rZXkuZ2V0KCkpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5hZGRWYXIoZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBlbnRyeS5rZXkuZ2V0KCkpKTsKICAgICAgICAg
dGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKaW5kZXggYmZhMjVhM2Qw
MmI1MmVkZThmMDExNzcyMTQ1YmY1ZjhiMjUwMjg3ZC4uY2RlMjgxYmRiYjRhMzg5MmU4NWUyY2Mx
ZWIzNDJjNzViMTgxM2U3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCkBAIC00MiwxNSArNDIsMTUgQEAgY2xhc3MgUHJvZ3JhbUV4
ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgR2xvYmFsRXhlY3V0YWJsZSB7CiAgICAgICAgIHJldHVy
biAmdm0ucHJvZ3JhbUV4ZWN1dGFibGVTcGFjZS5zcGFjZTsKICAgICB9CiAKLSAgICBzdGF0aWMg
UHJvZ3JhbUV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSkKKyAgICBzdGF0aWMgUHJvZ3JhbUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAgICAgewot
ICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1FeGVjdXRhYmxl
Pih2bS5oZWFwKSkgUHJvZ3JhbUV4ZWN1dGFibGUoZXhlYywgc291cmNlKTsKKyAgICAgICAgVk0m
IHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFtRXhlY3V0YWJsZT4o
dm0uaGVhcCkpIFByb2dyYW1FeGVjdXRhYmxlKGdsb2JhbE9iamVjdCwgc291cmNlKTsKICAgICAg
ICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gZXhlY3V0
YWJsZTsKICAgICB9CiAKLSAgICBKU09iamVjdCogaW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMo
Vk0mLCBDYWxsRnJhbWUqLCBKU1Njb3BlKik7CisgICAgSlNPYmplY3QqIGluaXRpYWxpemVHbG9i
YWxQcm9wZXJ0aWVzKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Njb3BlKik7CiAKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCkBAIC03OSw3ICs3OSw3IEBAIGNsYXNzIFByb2dy
YW1FeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEdsb2JhbEV4ZWN1dGFibGUgewogICAgIGZyaWVu
ZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJs
ZTsKIAotICAgIFByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUm
KTsKKyAgICBQcm9ncmFtRXhlY3V0YWJsZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNv
ZGUmKTsKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlEZXNjcmlwdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
RGVzY3JpcHRvci5jcHAKaW5kZXggMWI0ZjVlNmMwZDg0MDdmMmVjNGU0NDAyNDUxNGFkZTZlN2Rk
YzkyYy4uYzVkNjkwM2IzNDViMDM1Y2NmODIzZDJkYzk2ZjRmNjM0NTA3NjI4OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3Bw
CkBAIC03MiwxMCArNzIsOSBAQCB2b2lkIFByb3BlcnR5RGVzY3JpcHRvcjo6c2V0VW5kZWZpbmVk
KCkKICAgICBtX2F0dHJpYnV0ZXMgPSBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bTsK
IH0KIAotR2V0dGVyU2V0dGVyKiBQcm9wZXJ0eURlc2NyaXB0b3I6OnNsb3dHZXR0ZXJTZXR0ZXIo
RXhlY1N0YXRlKiBleGVjKQorR2V0dGVyU2V0dGVyKiBQcm9wZXJ0eURlc2NyaXB0b3I6OnNsb3dH
ZXR0ZXJTZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIEpTVmFsdWUgZ2V0dGVyID0gbV9nZXR0ZXIgJiYgIW1fZ2V0dGVyLmlzVW5kZWZpbmVkKCkg
PyBqc0Nhc3Q8SlNPYmplY3QqPihtX2dldHRlcikgOiBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFs
dWUgc2V0dGVyID0gbV9zZXR0ZXIgJiYgIW1fc2V0dGVyLmlzVW5kZWZpbmVkKCkgPyBqc0Nhc3Q8
SlNPYmplY3QqPihtX3NldHRlcikgOiBqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBHZXR0ZXJT
ZXR0ZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnZXR0ZXIsIHNldHRlcik7CkBAIC0xOTMs
MTUgKzE5MiwxNSBAQCB2b2lkIFByb3BlcnR5RGVzY3JpcHRvcjo6c2V0R2V0dGVyKEpTVmFsdWUg
Z2V0dGVyKQogICAgIG1fYXR0cmlidXRlcyAmPSB+UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
OwogfQogCi1ib29sIFByb3BlcnR5RGVzY3JpcHRvcjo6ZXF1YWxUbyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Citib29sIFByb3BlcnR5RGVz
Y3JpcHRvcjo6ZXF1YWxUbyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIG90aGVyKSBjb25zdAogewogICAgIGlmIChvdGhlci5tX3ZhbHVlLmlz
RW1wdHkoKSAhPSBtX3ZhbHVlLmlzRW1wdHkoKQogICAgICAgICB8fCBvdGhlci5tX2dldHRlci5p
c0VtcHR5KCkgIT0gbV9nZXR0ZXIuaXNFbXB0eSgpCiAgICAgICAgIHx8IG90aGVyLm1fc2V0dGVy
LmlzRW1wdHkoKSAhPSBtX3NldHRlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gKCFtX3ZhbHVlIHx8IHNhbWVWYWx1ZShleGVjLCBvdGhlci5tX3ZhbHVlLCBt
X3ZhbHVlKSkKLSAgICAgICAgJiYgKCFtX2dldHRlciB8fCBKU1ZhbHVlOjpzdHJpY3RFcXVhbChl
eGVjLCBvdGhlci5tX2dldHRlciwgbV9nZXR0ZXIpKQotICAgICAgICAmJiAoIW1fc2V0dGVyIHx8
IEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIG90aGVyLm1fc2V0dGVyLCBtX3NldHRlcikpCisg
ICAgcmV0dXJuICghbV92YWx1ZSB8fCBzYW1lVmFsdWUoZ2xvYmFsT2JqZWN0LCBvdGhlci5tX3Zh
bHVlLCBtX3ZhbHVlKSkKKyAgICAgICAgJiYgKCFtX2dldHRlciB8fCBKU1ZhbHVlOjpzdHJpY3RF
cXVhbChnbG9iYWxPYmplY3QsIG90aGVyLm1fZ2V0dGVyLCBtX2dldHRlcikpCisgICAgICAgICYm
ICghbV9zZXR0ZXIgfHwgSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZ2xvYmFsT2JqZWN0LCBvdGhlci5t
X3NldHRlciwgbV9zZXR0ZXIpKQogICAgICAgICAmJiBhdHRyaWJ1dGVzRXF1YWwob3RoZXIpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURl
c2NyaXB0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5oCmluZGV4IGQ3YjJiZmJlMDMzODE5MjFlMTE3OGY5MGRmMDdkZGE5ODU5N2U1M2UuLjRk
ZmYxMGY2MzM2NGViOWUxYTA1MDhhODI0NzQ5YzYyMDZiNzA2YzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCkBAIC01Niw3ICs1
Niw3IEBAIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvciB7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc0FjY2Vzc29yRGVzY3JpcHRvcigpIGNvbnN0OwogICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KICAgICBKU1ZhbHVlIHZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIEdldHRlclNldHRlciogc2xvd0dldHRlclNl
dHRlcihFeGVjU3RhdGUqKTsgLy8gQmUgYXdhcmUgdGhhdCB0aGlzIHdpbGwgbGF6aWx5IGFsbG9j
YXRlIGEgR2V0dGVyU2V0dGVyIG9iamVjdC4gSXQncyBtdWNoIGJldHRlciB0byB1c2UgZ2V0dGVy
KCkgYW5kIHNldHRlcigpIGluZGl2aWR1YWxseSBpZiBwb3NzaWJsZS4KKyAgICBHZXR0ZXJTZXR0
ZXIqIHNsb3dHZXR0ZXJTZXR0ZXIoSlNHbG9iYWxPYmplY3QqKTsgLy8gQmUgYXdhcmUgdGhhdCB0
aGlzIHdpbGwgbGF6aWx5IGFsbG9jYXRlIGEgR2V0dGVyU2V0dGVyIG9iamVjdC4gSXQncyBtdWNo
IGJldHRlciB0byB1c2UgZ2V0dGVyKCkgYW5kIHNldHRlcigpIGluZGl2aWR1YWxseSBpZiBwb3Nz
aWJsZS4KICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGdldHRlcigpIGNvbnN0OwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgc2V0dGVyKCkgY29uc3Q7CiAgICAgSlNPYmplY3Qq
IGdldHRlck9iamVjdCgpIGNvbnN0OwpAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBQcm9wZXJ0eURl
c2NyaXB0b3IgewogICAgIGJvb2wgY29uZmlndXJhYmxlUHJlc2VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VlbkF0dHJpYnV0ZXMgJiBDb25maWd1cmFibGVQcmVzZW50OyB9CiAgICAgYm9vbCBzZXR0
ZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gISFtX3NldHRlcjsgfQogICAgIGJvb2wgZ2V0dGVy
UHJlc2VudCgpIGNvbnN0IHsgcmV0dXJuICEhbV9nZXR0ZXI7IH0KLSAgICBib29sIGVxdWFsVG8o
RXhlY1N0YXRlKiwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBvdGhlcikgY29uc3Q7CisgICAg
Ym9vbCBlcXVhbFRvKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBv
dGhlcikgY29uc3Q7CiAgICAgYm9vbCBhdHRyaWJ1dGVzRXF1YWwoY29uc3QgUHJvcGVydHlEZXNj
cmlwdG9yJiBvdGhlcikgY29uc3Q7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgY3VycmVudCkgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCmluZGV4IGZiN2Mx
NjRlMTUwZTUyMzgzNDcxZWRkMGY3Nzg3MDczMzJiMTQzNWUuLjhiZThkMjI1MjExMWVkNjBkOWQ4
MTg5NzQ5N2Y5NGIyZjJkY2M0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5U2xvdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlTbG90LmNwcApAQCAtMjksNDAgKzI5LDQwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1KU1ZhbHVlIFByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVj
KSBjb25zdAorSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fdGhpc1ZhbHVlKTsKLSAg
ICByZXR1cm4gY2FsbEdldHRlcihleGVjLCBtX3RoaXNWYWx1ZSwgbV9kYXRhLmdldHRlci5nZXR0
ZXJTZXR0ZXIpOworICAgIHJldHVybiBjYWxsR2V0dGVyKGdsb2JhbE9iamVjdCwgbV90aGlzVmFs
dWUsIG1fZGF0YS5nZXR0ZXIuZ2V0dGVyU2V0dGVyKTsKIH0KIAotSlNWYWx1ZSBQcm9wZXJ0eVNs
b3Q6OmN1c3RvbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpIGNvbnN0CitKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Y3VzdG9tR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGRpZmZlcmVuY2VzIGluIGN1c3RvbSB2YWx1ZXMgYW5k
IGN1c3RvbSBhY2Nlc3NvcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODAxNAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gbV9hdHRyaWJ1dGVzICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yID8gbV90aGlzVmFsdWUgOiBKU1ZhbHVl
KHNsb3RCYXNlKCkpOwogICAgIGlmIChhdXRvIGRvbUF0dHJpYnV0ZSA9IHRoaXMtPmRvbUF0dHJp
YnV0ZSgpKSB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHModm0s
IGRvbUF0dHJpYnV0ZS0+Y2xhc3NJbmZvKSkgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICAgICAgcmV0dXJuIHRocm93RE9NQXR0cmli
dXRlR2V0dGVyVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbywg
cHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0RPTUF0dHJpYnV0ZUdldHRl
clR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbywg
cHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVj
b2RlKG1fZGF0YS5jdXN0b20uZ2V0VmFsdWUoZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1
ZSksIHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUobV9kYXRhLmN1
c3RvbS5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBw
cm9wZXJ0eU5hbWUpKTsKIH0KIAotSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmN1c3RvbUFjY2Vzc29y
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QK
K0pTVmFsdWUgUHJvcGVydHlTbG90OjpjdXN0b21BY2Nlc3NvckdldHRlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAg
IGlmICghbV9kYXRhLmN1c3RvbUFjY2Vzc29yLmdldHRlclNldHRlci0+Z2V0dGVyKCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKGF1dG8gZG9tQXR0cmlidXRlID0g
dGhpcy0+ZG9tQXR0cmlidXRlKCkpIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICBpZiAoIW1fdGhpc1Zh
bHVlLmluaGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpIHsKICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgICAgIHJldHVy
biB0aHJvd0RPTUF0dHJpYnV0ZUdldHRlclR5cGVFcnJvcihleGVjLCBzY29wZSwgZG9tQXR0cmli
dXRlLT5jbGFzc0luZm8sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dE
T01BdHRyaWJ1dGVHZXR0ZXJUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZG9tQXR0cmli
dXRlLT5jbGFzc0luZm8sIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmRlY29kZShtX2RhdGEuY3VzdG9tQWNjZXNzb3IuZ2V0dGVyU2V0dGVyLT5n
ZXR0ZXIoKShleGVjLCBKU1ZhbHVlOjplbmNvZGUobV90aGlzVmFsdWUpLCBwcm9wZXJ0eU5hbWUp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fZGF0YS5jdXN0b21BY2Nlc3Nvci5nZXR0
ZXJTZXR0ZXItPmdldHRlcigpKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2RlKG1fdGhpc1Zh
bHVlKSwgcHJvcGVydHlOYW1lKSk7CiB9CiAKIEpTVmFsdWUgUHJvcGVydHlTbG90OjpnZXRQdXJl
UmVzdWx0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5U2xvdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlT
bG90LmgKaW5kZXggNmM4ZDA1YTMxZWU4N2JlMDcwNTViMzIzODdiOGE5NjM0MWI2ZDdhNy4uMzdm
ZmE1NDQyODAzNTQzMGUzNDRmNTNjYTFhNzFhMzBkMzliNDhjMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKQEAgLTEyNywxMCArMTI3LDEwIEBAIGNs
YXNzIFByb3BlcnR5U2xvdCB7CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgc2xvdEJhc2Ug
LyByZWNlaXZlciBiZWhhdmlvciBkaWZmZXJlbmNlIGluIGN1c3RvbSB2YWx1ZXMgYW5kIGN1c3Rv
bSBhY2Nlc3NvcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1ODAxNAotICAgIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICB0
eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAotICAgIEpTVmFsdWUgZ2V0
VmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICBKU1ZhbHVlIGdldFZh
bHVlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgSlNWYWx1
ZSBnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgSlNW
YWx1ZSBnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29u
c3Q7CiAgICAgSlNWYWx1ZSBnZXRQdXJlUmVzdWx0KCkgY29uc3Q7CiAKICAgICBib29sIGlzQ2Fj
aGVhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWFiaWxpdHkgPT0gQ2FjaGluZ0FsbG93ZWQg
JiYgbV9vZmZzZXQgIT0gaW52YWxpZE9mZnNldDsgfQpAQCAtMzcwLDkgKzM3MCw5IEBAIGNsYXNz
IFByb3BlcnR5U2xvdCB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTX0VYUE9SVF9QUklWQVRF
IEpTVmFsdWUgZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNWYWx1ZSBjdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBj
b25zdDsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGN1c3RvbUFjY2Vzc29yR2V0dGVy
KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNWYWx1ZSBmdW5jdGlvbkdldHRlcihKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgY3VzdG9tR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGN1c3RvbUFjY2Vz
c29yR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKSBjb25zdDsKIAogICAgIHVu
aW9uIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7CkBAIC00MDMsMjcgKzQwMywyNyBA
QCBjbGFzcyBQcm9wZXJ0eVNsb3QgewogICAgIH0gbV9hZGRpdGlvbmFsRGF0YTsKIH07CiAKLUFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK0FMV0FZU19JTkxJTkUgSlNWYWx1
ZSBQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBl
ID09IFR5cGVWYWx1ZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShtX2RhdGEudmFs
dWUpOwogICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBUeXBlR2V0dGVyKQotICAgICAgICByZXR1
cm4gZnVuY3Rpb25HZXR0ZXIoZXhlYyk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbkdldHRlcihn
bG9iYWxPYmplY3QpOwogICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBUeXBlQ3VzdG9tQWNjZXNz
b3IpCi0gICAgICAgIHJldHVybiBjdXN0b21BY2Nlc3NvckdldHRlcihleGVjLCBwcm9wZXJ0eU5h
bWUpOwotICAgIHJldHVybiBjdXN0b21HZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgcmV0dXJuIGN1c3RvbUFjY2Vzc29yR2V0dGVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KTsKKyAgICByZXR1cm4gY3VzdG9tR2V0dGVyKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsK
IH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Z2V0VmFsdWUoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgUHJvcGVydHlTbG90OjpnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGlmIChtX3Byb3BlcnR5
VHlwZSA9PSBUeXBlVmFsdWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUobV9kYXRh
LnZhbHVlKTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUdldHRlcikKLSAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uR2V0dGVyKGV4ZWMpOworICAgICAgICByZXR1cm4gZnVuY3Rpb25HZXR0
ZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVHlwZUN1c3RvbUFj
Y2Vzc29yKQotICAgICAgICByZXR1cm4gY3VzdG9tQWNjZXNzb3JHZXR0ZXIoZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgcmV0dXJuIGN1c3RvbUdldHRlcihl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgcmV0dXJu
IGN1c3RvbUFjY2Vzc29yR2V0dGVyKGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwg
cHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIGN1c3RvbUdldHRlcihnbG9iYWxPYmplY3QsIElk
ZW50aWZpZXI6OmZyb20odm0sIHByb3BlcnR5TmFtZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggNDU4NmMxMzBkM2E2OWE4YTU3OGUxZDAwMjM4MmU2NTEzOGVkZGNiZS4uNjI2
YTU3MTM1NjQ5MjY0MDQyMDE3N2I4ZTM0MDQyNjgyNDA5MGYyMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAKQEAgLTYxLDE3ICs2
MSwxNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlUmV2b2NhYmxl
UHJveHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
aWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikKLSAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlByb3h5LnJldm9jYWJsZSBuZWVkcyB0byBi
ZSBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOiB0aGUgdGFyZ2V0IGFuZCB0aGUgaGFuZGxlciJf
cyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJQcm94eS5yZXZvY2FibGUgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czog
dGhlIHRhcmdldCBhbmQgdGhlIGhhbmRsZXIiX3MpOwogCiAgICAgQXJnTGlzdCBhcmdzKGNhbGxG
cmFtZSk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFsdWUgaGFu
ZGxlciA9IGFyZ3MuYXQoMSk7Ci0gICAgUHJveHlPYmplY3QqIHByb3h5ID0gUHJveHlPYmplY3Q6
OmNyZWF0ZShjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBQ
cm94eU9iamVjdCogcHJveHkgPSBQcm94eU9iamVjdDo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdGFy
Z2V0LCBoYW5kbGVyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBQcm94eVJldm9rZSogcmV2b2tlID0gUHJveHlSZXZva2U6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LT5wcm94eVJldm9rZVN0cnVjdHVyZSgpLCBwcm94eSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoY2FsbEZyYW1lKTsKKyAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJwcm94eSIpLCBwcm94eSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIG1ha2VJZGVudGlmaWVyKHZtLCAicmV2b2tlIiksIHJldm9rZSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CkBAIC03OSwxMCArNzksMTAg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJsZVByb3h5
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3h5UmV2
b2NhYmxlQ29uc3RydWN0b3JUaHJvd0Vycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJveHlSZXZvY2FibGVDb25zdHJ1Y3RvclRocm93RXJyb3IoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKikKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGNhbGxGcmFtZSwgc2NvcGUsICJQcm94eS5yZXZvY2FibGUgY2Fubm90IGJlIGNvbnN0cnVjdGVk
LiBJdCBjYW4gb25seSBiZSBjYWxsZWQiX3MpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm94eS5yZXZvY2FibGUgY2Fubm90IGJlIGNvbnN0cnVj
dGVkLiBJdCBjYW4gb25seSBiZSBjYWxsZWQiX3MpOwogfQogCiB2b2lkIFByb3h5Q29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgY2hhciogbmFtZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKQEAgLTk2LDE4ICs5NiwxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RQcm94eU9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsTwogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9iamVj
dC0+dm0oKSk7CiAgICAgaWYgKGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkuaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIm5ldy50
YXJnZXQgb2YgUHJveHkgY29uc3RydWN0IHNob3VsZCBub3QgYmUgdW5kZWZpbmVkIl9zKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIm5ldy50
YXJnZXQgb2YgUHJveHkgY29uc3RydWN0IHNob3VsZCBub3QgYmUgdW5kZWZpbmVkIl9zKTsKIAog
ICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgdGFyZ2V0ID0gYXJncy5h
dCgwKTsKICAgICBKU1ZhbHVlIGhhbmRsZXIgPSBhcmdzLmF0KDEpOwotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKFByb3h5T2JqZWN0OjpjcmVhdGUoY2FsbEZy
YW1lLCBnbG9iYWxPYmplY3QsIHRhcmdldCwgaGFuZGxlcikpKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShQcm94eU9iamVjdDo6Y3JlYXRlKGdsb2JhbE9i
amVjdCwgdGFyZ2V0LCBoYW5kbGVyKSkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsUHJveHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxs
UHJveHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikKIHsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNG
dW5jdGlvblR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiUHJveHkiKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9u
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm94eSIpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94
eUNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0
cnVjdG9yLmgKaW5kZXggNGM5MDBiNjk4OGZjMjhmNGZmMDI1ZTZhZWIxOGQyNDdjNGZlOGZmOS4u
OTczMjVmODQ2OGQ4OTQ0MDQ5OTgzZGYxODA1NjgzMmU2MWI5YWI5MSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuaApAQCAtNDgsNyArNDgs
NyBAQCBjbGFzcyBQcm94eUNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rp
b24gewogcHJpdmF0ZToKICAgICBQcm94eUNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CiAK
LSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZ2V0R2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgZ2V0R2V0dGVyKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKaW5kZXggOGJlODE4Mjc5OTNiMjExNGQx
ZjE1YjA3Mzc5N2M3MTViYzc5NDdiMS4uZWZjOWRjNDIzZjc5NTI4YjVkMmUxNDZjMzJhYWRlZTYw
NDg0MDY3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmNwcApAQCAtNTEsMTggKzUxLDE4IEBAIFByb3h5T2JqZWN0OjpQcm94eU9iamVjdChWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogfQogCi1TdHJpbmcgUHJveHlPYmplY3Q6OnRvU3Ry
aW5nTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMpCitTdHJpbmcg
UHJveHlPYmplY3Q6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBjb25zdCBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8Y29u
c3QgUHJveHlPYmplY3QqPihvYmplY3QpOwogICAgIHdoaWxlIChwcm94eSkgewogICAgICAgICBj
b25zdCBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwotICAgICAgICBib29sIHRh
cmdldElzQXJyYXkgPSBpc0FycmF5KGV4ZWMsIHRhcmdldCk7CisgICAgICAgIGJvb2wgdGFyZ2V0
SXNBcnJheSA9IGlzQXJyYXkoZ2xvYmFsT2JqZWN0LCB0YXJnZXQpOwogICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlm
ICh0YXJnZXRJc0FycmF5KQotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0
YXJnZXQtPmNsYXNzSW5mbyh2bSktPm1ldGhvZFRhYmxlLnRvU3RyaW5nTmFtZSh0YXJnZXQsIGV4
ZWMpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGFyZ2V0LT5jbGFz
c0luZm8odm0pLT5tZXRob2RUYWJsZS50b1N0cmluZ05hbWUodGFyZ2V0LCBnbG9iYWxPYmplY3Qp
KTsKIAogICAgICAgICBwcm94eSA9IGpzRHluYW1pY0Nhc3Q8Y29uc3QgUHJveHlPYmplY3QqPih2
bSwgdGFyZ2V0KTsKICAgICB9CkBAIC04MSwyOCArODEsMjggQEAgU3RydWN0dXJlKiBQcm94eU9i
amVjdDo6c3RydWN0dXJlRm9yVGFyZ2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUKICAgICByZXR1cm4gaXNDYWxsYWJsZSA/IGdsb2JhbE9iamVjdC0+Y2FsbGFibGVQcm94
eU9iamVjdFN0cnVjdHVyZSgpIDogZ2xvYmFsT2JqZWN0LT5wcm94eU9iamVjdFN0cnVjdHVyZSgp
OwogfQogCi12b2lkIFByb3h5T2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB0YXJnZXQsIEpTVmFsdWUgaGFuZGxlcikKK3ZvaWQgUHJveHlPYmpl
Y3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSB0YXJnZXQsIEpTVmFsdWUgaGFuZGxlcikKIHsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEFTU0VSVCh0eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKTsKICAgICBpZiAoIXRhcmdldC5pc09i
amVjdCgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQSBQcm94eSdz
ICd0YXJnZXQnIHNob3VsZCBiZSBhbiBPYmplY3QiX3MpOworICAgICAgICB0aHJvd1R5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQSBQcm94eSdzICd0YXJnZXQnIHNob3VsZCBiZSBhbiBP
YmplY3QiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChQcm94eU9iamVjdCog
dGFyZ2V0QXNQcm94eSA9IGpzRHluYW1pY0Nhc3Q8UHJveHlPYmplY3QqPih2bSwgdGFyZ2V0KSkg
ewogICAgICAgICBpZiAodGFyZ2V0QXNQcm94eS0+aXNSZXZva2VkKCkpIHsKLSAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQSBQcm94eSdzICd0YXJnZXQnIHNob3VsZG4n
dCBiZSBhIHJldm9rZWQgUHJveHkiX3MpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIkEgUHJveHkncyAndGFyZ2V0JyBzaG91bGRuJ3QgYmUgYSByZXZv
a2VkIFByb3h5Il9zKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAg
ICBpZiAoIWhhbmRsZXIuaXNPYmplY3QoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgIkEgUHJveHkncyAnaGFuZGxlcicgc2hvdWxkIGJlIGFuIE9iamVjdCJfcyk7Cisg
ICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJBIFByb3h5J3MgJ2hh
bmRsZXInIHNob3VsZCBiZSBhbiBPYmplY3QiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmIChQcm94eU9iamVjdCogaGFuZGxlckFzUHJveHkgPSBqc0R5bmFtaWNDYXN0PFByb3h5
T2JqZWN0Kj4odm0sIGhhbmRsZXIpKSB7CiAgICAgICAgIGlmIChoYW5kbGVyQXNQcm94eS0+aXNS
ZXZva2VkKCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQSBQ
cm94eSdzICdoYW5kbGVyJyBzaG91bGRuJ3QgYmUgYSByZXZva2VkIFByb3h5Il9zKTsKKyAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJBIFByb3h5J3MgJ2hh
bmRsZXInIHNob3VsZG4ndCBiZSBhIHJldm9rZWQgUHJveHkiX3MpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI0LDE0ICsxMjQsMTQgQEAgdm9pZCBQcm94eU9i
amVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGFy
Z2V0LCBKU1ZhbHUKIAogc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBzX3Byb3h5QWxyZWFkeVJl
dm9rZWRFcnJvck1lc3NhZ2UgeyAiUHJveHkgaGFzIGFscmVhZHkgYmVlbiByZXZva2VkLiBObyBt
b3JlIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgcGVyZm9ybWVkIG9uIGl0Il9zIH07CiAK
LXN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUqIGV4ZWMsIFByb3h5T2Jq
ZWN0KiBwcm94eU9iamVjdCwgSlNWYWx1ZSByZWNlaXZlciwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKK3N0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm94eU9iamVjdCogcHJveHlPYmplY3QsIEpTVmFsdWUgcmVjZWl2ZXIsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgTk9fVEFJTF9DQUxMUygpOwogCi0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChVTkxJS0VM
WSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgewotICAgICAgICB0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMTQw
LDEwICsxNDAsMTAgQEAgc3RhdGljIEpTVmFsdWUgcGVyZm9ybVByb3h5R2V0KEV4ZWNTdGF0ZSog
ZXhlYywgUHJveHlPYmplY3QqIHByb3h5T2JqZWN0LCBKU1ZhbHUKICAgICBhdXRvIHBlcmZvcm1E
ZWZhdWx0R2V0ID0gWyZdIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6
OkdldCk7Ci0gICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSB0YXJnZXQtPmdldFByb3BlcnR5U2xv
dChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0g
dGFyZ2V0LT5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogICAgICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhaGFzUHJv
cGVydHkpOwogICAgICAgICBpZiAoaGFzUHJvcGVydHkpCi0gICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUpKTsKIAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9OwpAQCAtMTUzLDEyICsxNTMsMTIgQEAgc3RhdGljIEpTVmFsdWUgcGVyZm9ybVByb3h5R2V0
KEV4ZWNTdGF0ZSogZXhlYywgUHJveHlPYmplY3QqIHByb3h5T2JqZWN0LCBKU1ZhbHUKIAogICAg
IEpTVmFsdWUgaGFuZGxlclZhbHVlID0gcHJveHlPYmplY3QtPmhhbmRsZXIoKTsKICAgICBpZiAo
aGFuZGxlclZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIHNfcHJveHlBbHJlYWR5UmV2b2tlZEVycm9yTWVzc2FnZSk7CisgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJl
dm9rZWRFcnJvck1lc3NhZ2UpOwogCiAgICAgSlNPYmplY3QqIGhhbmRsZXIgPSBqc0Nhc3Q8SlNP
YmplY3QqPihoYW5kbGVyVmFsdWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgZ2V0SGFuZGxlciA9IGhhbmRsZXItPmdldE1ldGhv
ZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPmdldCwgIidnZXQn
IHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIG9iamVjdCBzaG91bGQgYmUgY2FsbGFibGUi
X3MpOworICAgIEpTVmFsdWUgZ2V0SGFuZGxlciA9IGhhbmRsZXItPmdldE1ldGhvZChnbG9iYWxP
YmplY3QsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+Z2V0LCAiJ2dldCcg
cHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgb2JqZWN0IHNob3VsZCBiZSBjYWxsYWJsZSJf
cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChnZXRI
YW5kbGVyLmlzVW5kZWZpbmVkKCkpCkBAIC0xNjksMTkgKzE2OSwxOSBAQCBzdGF0aWMgSlNWYWx1
ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlKiBleGVjLCBQcm94eU9iamVjdCogcHJveHlPYmpl
Y3QsIEpTVmFsdQogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pT
VmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsK
ICAgICBhcmd1bWVudHMuYXBwZW5kKHJlY2VpdmVyKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5o
YXNPdmVyZmxvd2VkKCkpOwotICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0
SGFuZGxlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOworICAgIEpT
VmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBnZXRIYW5kbGVyLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAg
IGJvb2wgcmVzdWx0ID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKKyAgICBib29sIHJlc3VsdCA9IHRhcmdldC0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhcmVzdWx0KTsK
ICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0
b3IoKSAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSAmJiAhZGVzY3JpcHRvci53cml0YWJs
ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVl
KCksIHRyYXBSZXN1bHQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgIlByb3h5IGhhbmRsZXIncyAnZ2V0JyByZXN1bHQgb2YgYSBub24tY29uZmln
dXJhYmxlIGFuZCBub24td3JpdGFibGUgcHJvcGVydHkgc2hvdWxkIGJlIHRoZSBzYW1lIHZhbHVl
IGFzIHRoZSB0YXJnZXQncyBwcm9wZXJ0eSJfcyk7CisgICAgICAgICAgICBpZiAoIXNhbWVWYWx1
ZShnbG9iYWxPYmplY3QsIGRlc2NyaXB0b3IudmFsdWUoKSwgdHJhcFJlc3VsdCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm94
eSBoYW5kbGVyJ3MgJ2dldCcgcmVzdWx0IG9mIGEgbm9uLWNvbmZpZ3VyYWJsZSBhbmQgbm9uLXdy
aXRhYmxlIHByb3BlcnR5IHNob3VsZCBiZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgdGFyZ2V0J3Mg
cHJvcGVydHkiX3MpOwogICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRl
c2NyaXB0b3IoKSAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSAmJiBkZXNjcmlwdG9yLmdl
dHRlcigpLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIGlmICghdHJhcFJlc3VsdC5pc1Vu
ZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgIlByb3h5IGhhbmRsZXIncyAnZ2V0JyByZXN1bHQgb2YgYSBub24tY29uZmlndXJhYmxl
IGFjY2Vzc29yIHByb3BlcnR5IHdpdGhvdXQgYSBnZXR0ZXIgc2hvdWxkIGJlIHVuZGVmaW5lZCJf
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJQcm94eSBoYW5kbGVyJ3MgJ2dldCcgcmVzdWx0IG9mIGEgbm9uLWNvbmZpZ3VyYWJs
ZSBhY2Nlc3NvciBwcm9wZXJ0eSB3aXRob3V0IGEgZ2V0dGVyIHNob3VsZCBiZSB1bmRlZmluZWQi
X3MpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xOTAsMzMgKzE5MCwzMyBAQCBzdGF0aWMgSlNW
YWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlKiBleGVjLCBQcm94eU9iamVjdCogcHJveHlP
YmplY3QsIEpTVmFsdQogICAgIHJldHVybiB0cmFwUmVzdWx0OwogfQogCi1ib29sIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtR2V0KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUdldChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgTk9fVEFJTF9DQUxMUygpOwogCi0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVy
Zm9ybVByb3h5R2V0KGV4ZWMsIHRoaXMsIHNsb3QudGhpc1ZhbHVlKCksIHByb3BlcnR5TmFtZSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBwZXJmb3JtUHJveHlHZXQoZ2xvYmFsT2JqZWN0LCB0aGlz
LCBzbG90LnRoaXNWYWx1ZSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKICAgICB1bnNpZ25lZCBpZ25vcmVkQXR0cmlidXRlcyA9IDA7CiAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBpZ25vcmVkQXR0cmlidXRlcywgcmVzdWx0KTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9k
R2V0T3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxN
ZXRob2RHZXRPd25Qcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgTk9fVEFJTF9D
QUxMUygpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgewotICAgICAgICB0
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93U3RhY2tP
dmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKIAogICAgIGF1
dG8gcGVyZm9ybURlZmF1bHRHZXRPd25Qcm9wZXJ0eSA9IFsmXSB7Ci0gICAgICAgIHJldHVybiB0
YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHRhcmdldCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUo
dm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGFyZ2V0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiAgICAgfTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNQcml2YXRlTmFtZSgp
KQpAQCAtMjI0LDE0ICsyMjQsMTQgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFs
TWV0aG9kR2V0T3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU4KIAogICAgIEpT
VmFsdWUgaGFuZGxlclZhbHVlID0gdGhpcy0+aGFuZGxlcigpOwogICAgIGlmIChoYW5kbGVyVmFs
dWUuaXNOdWxsKCkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgc19w
cm94eUFscmVhZHlSZXZva2VkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJldm9rZWRFcnJvck1lc3NhZ2Up
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgSlNPYmplY3QqIGhhbmRsZXIg
PSBqc0Nhc3Q8SlNPYmplY3QqPihoYW5kbGVyVmFsdWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgbWFrZUlkZW50aWZpZXIodm0sICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiKSwgIidnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3InIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3Vs
ZCBiZSBjYWxsYWJsZSJfcyk7CisgICAgSlNWYWx1ZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JN
ZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZ2xvYmFsT2JqZWN0LCBjYWxsRGF0YSwgY2FsbFR5
cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksICInZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91
bGQgYmUgY2FsbGFibGUiX3MpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKICAgICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTWV0aG9kLmlzVW5kZWZpbmVkKCkp
CiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcGVyZm9ybURlZmF1bHRHZXRPd25Q
cm9wZXJ0eSgpKTsKQEAgLTI0MCw2MiArMjQwLDYyIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZv
cm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRl
bnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHBy
b3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2Vk
KCkpOwotICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7
CisgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVu
dHMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmICgh
dHJhcFJlc3VsdC5pc1VuZGVmaW5lZCgpICYmICF0cmFwUmVzdWx0LmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgInJlc3VsdCBvZiAnZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yJyBjYWxsIHNob3VsZCBlaXRoZXIgYmUgYW4gT2JqZWN0IG9yIHVuZGVm
aW5lZCJfcyk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
InJlc3VsdCBvZiAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJyBjYWxsIHNob3VsZCBlaXRoZXIg
YmUgYW4gT2JqZWN0IG9yIHVuZGVmaW5lZCJfcyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgdGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yOwot
ICAgIGJvb2wgaXNUYXJnZXRQcm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkID0gdGFyZ2V0LT5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCB0YXJnZXRQcm9wZXJ0eURl
c2NyaXB0b3IpOworICAgIGJvb2wgaXNUYXJnZXRQcm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkID0g
dGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHRhcmdldFByb3BlcnR5RGVzY3JpcHRvcik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOwogCiAgICAgaWYgKHRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSkgewogICAg
ICAgICBpZiAoIWlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCF0YXJnZXRQcm9wZXJ0eURlc2NyaXB0b3IuY29u
ZmlndXJhYmxlKCkpIHsKLSAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUs
ICJXaGVuIHRoZSByZXN1bHQgb2YgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgaXMgdW5kZWZp
bmVkIHRoZSB0YXJnZXQgbXVzdCBiZSBjb25maWd1cmFibGUiX3MpOworICAgICAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2hlbiB0aGUgcmVzdWx0IG9mICdn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InIGlzIHVuZGVmaW5lZCB0aGUgdGFyZ2V0IG11c3QgYmUg
Y29uZmlndXJhYmxlIl9zKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQot
ICAgICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwor
ICAgICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAg
ICAgaWYgKCFpc0V4dGVuc2libGUpIHsKLSAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUsICJXaGVuICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InIHJldHVybnMgdW5kZWZp
bmVkLCB0aGUgJ3RhcmdldCcgb2YgYSBQcm94eSBzaG91bGQgYmUgZXh0ZW5zaWJsZSJfcyk7Cisg
ICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXaGVuICdn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InIHJldHVybnMgdW5kZWZpbmVkLCB0aGUgJ3RhcmdldCcg
b2YgYSBQcm94eSBzaG91bGQgYmUgZXh0ZW5zaWJsZSJfcyk7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
Ym9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKKyAgICBib29s
IGlzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGdsb2JhbE9iamVjdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yOwotICAgIHRvUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMs
IHRyYXBSZXN1bHQsIHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IpOworICAgIHRvUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbE9iamVjdCwgdHJhcFJlc3VsdCwgdHJhcFJlc3VsdEFzRGVzY3JpcHRvcik7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGJvb2wgdGhyb3dF
eGNlcHRpb24gPSBmYWxzZTsKLSAgICBib29sIHZhbGlkID0gdmFsaWRhdGVBbmRBcHBseVByb3Bl
cnR5RGVzY3JpcHRvcihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUsIGlzRXh0ZW5zaWJsZSwK
KyAgICBib29sIHZhbGlkID0gdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWxPYmplY3QsIG51bGxwdHIsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlLAogICAgICAgICB0
cmFwUmVzdWx0QXNEZXNjcmlwdG9yLCBpc1RhcmdldFByb3BlcnR5RGVzY3JpcHRvckRlZmluZWQs
IHRhcmdldFByb3BlcnR5RGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBpZiAoIXZhbGlkKSB7Ci0gICAgICAgIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJSZXN1bHQgZnJvbSAnZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yJyBmYWlscyB0aGUgSXNDb21wYXRpYmxlUHJvcGVydHlEZXNjcmlwdG9yIHRlc3Qi
X3MpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJSZXN1
bHQgZnJvbSAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJyBmYWlscyB0aGUgSXNDb21wYXRpYmxl
UHJvcGVydHlEZXNjcmlwdG9yIHRlc3QiX3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKSB7CiAg
ICAgICAgIGlmICghaXNUYXJnZXRQcm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkIHx8IHRhcmdldFBy
b3BlcnR5RGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSwgIlJlc3VsdCBmcm9tICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3InIGNhbid0IGJlIG5vbi1jb25maWd1cmFibGUgd2hlbiB0aGUgJ3RhcmdldCcgZG9lc24ndCBo
YXZlIGl0IGFzIGFuIG93biBwcm9wZXJ0eSBvciBpZiBpdCBpcyBhIGNvbmZpZ3VyYWJsZSBvd24g
cHJvcGVydHkgb24gJ3RhcmdldCciX3MpOworICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiUmVzdWx0IGZyb20gJ2dldE93blByb3BlcnR5RGVzY3JpcHRv
cicgY2FuJ3QgYmUgbm9uLWNvbmZpZ3VyYWJsZSB3aGVuIHRoZSAndGFyZ2V0JyBkb2Vzbid0IGhh
dmUgaXQgYXMgYW4gb3duIHByb3BlcnR5IG9yIGlmIGl0IGlzIGEgY29uZmlndXJhYmxlIG93biBw
cm9wZXJ0eSBvbiAndGFyZ2V0JyJfcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3Iud3JpdGFibGVQcmVzZW50
KCkgJiYgIXRyYXBSZXN1bHRBc0Rlc2NyaXB0b3Iud3JpdGFibGUoKSAmJiB0YXJnZXRQcm9wZXJ0
eURlc2NyaXB0b3Iud3JpdGFibGUoKSkgewotICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgIlJlc3VsdCBmcm9tICdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InIGNhbid0
IGJlIG5vbi1jb25maWd1cmFibGUgYW5kIG5vbi13cml0YWJsZSB3aGVuIHRoZSB0YXJnZXQncyBw
cm9wZXJ0eSBpcyB3cml0YWJsZSJfcyk7CisgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJSZXN1bHQgZnJvbSAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
JyBjYW4ndCBiZSBub24tY29uZmlndXJhYmxlIGFuZCBub24td3JpdGFibGUgd2hlbiB0aGUgdGFy
Z2V0J3MgcHJvcGVydHkgaXMgd3JpdGFibGUiX3MpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IuaXNB
Y2Nlc3NvckRlc2NyaXB0b3IoKSkgewotICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRl
ciA9IHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3Iuc2xvd0dldHRlclNldHRlcihleGVjKTsKKyAgICAg
ICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLnNs
b3dHZXR0ZXJTZXR0ZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgICAgICBzbG90LnNldEdldHRlclNsb3QodGhpcywgdHJhcFJl
c3VsdEFzRGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIGdldHRlclNldHRlcik7CiAgICAgfSBlbHNl
IGlmICh0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSAmJiAhdHJhcFJl
c3VsdEFzRGVzY3JpcHRvci52YWx1ZSgpLmlzRW1wdHkoKSkKQEAgLTMwNiwyMSArMzA2LDIxIEBA
IGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blByb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJv
eHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1IYXNQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgTk9fVEFJTF9DQUxM
UygpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgewotICAgICAgICB0aHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAgICBzbG90LnNl
dFZhbHVlKHRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9u
ZSksIGpzVW5kZWZpbmVkKCkpOyAvLyBOb2JvZHkgc2hvdWxkIHJlbHkgb24gb3VyIHZhbHVlLCBi
dXQgYmUgc2FmZSBhbmQgcHJvdGVjdCBhZ2FpbnN0IGFueSBiYWQgYWN0b3JzIHJlYWRpbmcgb3Vy
IHZhbHVlLgogCiAgICAgYXV0byBwZXJmb3JtRGVmYXVsdEhhc1Byb3BlcnR5ID0gWyZdIHsKLSAg
ICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eVNsb3Qo
dGFyZ2V0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICByZXR1cm4gdGFyZ2V0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdCh0YXJnZXQsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICB9OwogCiAgICAgaWYgKHByb3BlcnR5TmFtZS5p
c1ByaXZhdGVOYW1lKCkpCkBAIC0zMjgsMTQgKzMyOCwxNCBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLAogCiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSB0aGlzLT5oYW5kbGVyKCk7CiAgICAg
aWYgKGhhbmRsZXJWYWx1ZS5pc051bGwoKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJldm9rZWRFcnJvck1lc3NhZ2UpOworICAgICAgICB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNfcHJveHlBbHJlYWR5UmV2b2tl
ZEVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBKU09i
amVjdCogaGFuZGxlciA9IGpzQ2FzdDxKU09iamVjdCo+KGhhbmRsZXJWYWx1ZSk7CiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgSlNWYWx1ZSBoYXNN
ZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5w
cm9wZXJ0eU5hbWVzLT5oYXMsICInaGFzJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUiX3MpOworICAgIEpTVmFsdWUgaGFzTWV0aG9kID0gaGFuZGxlci0+
Z2V0TWV0aG9kKGdsb2JhbE9iamVjdCwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5h
bWVzLT5oYXMsICInaGFzJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUg
Y2FsbGFibGUiX3MpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAg
ICBpZiAoaGFzTWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcGVyZm9ybURlZmF1bHRIYXNQcm9wZXJ0eSgpKTsKQEAgLTM0NCwyNSArMzQ0LDI1
IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0s
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBBU1NF
UlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwotICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9
IGNhbGwoZXhlYywgaGFzTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3Vt
ZW50cyk7CisgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGhhc01l
dGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAotICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9v
bCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9v
bCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKSB7CiAg
ICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICBib29sIGlzUHJv
cGVydHlEZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7IAorICAgICAgICBib29sIGlzUHJvcGVy
dHlEZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsgCiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgaWYgKGlzUHJvcGVydHlEZXNjcmlw
dG9yRGVmaW5lZCkgewogICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIlByb3h5
ICdoYXMnIG11c3QgcmV0dXJuICd0cnVlJyBmb3Igbm9uLWNvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVz
Il9zKTsKKyAgICAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJQcm94eSAnaGFzJyBtdXN0IHJldHVybiAndHJ1ZScgZm9yIG5vbi1jb25maWd1cmFibGUg
cHJvcGVydGllcyJfcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZShleGVjKTsKKyAgICAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVu
c2libGUoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKICAgICAgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKSB7Ci0gICAgICAgICAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIlByb3h5ICdoYXMnIG11c3QgcmV0
dXJuICd0cnVlJyBmb3IgYSBub24tZXh0ZW5zaWJsZSAndGFyZ2V0JyBvYmplY3Qgd2l0aCBhIGNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eSJfcyk7CisgICAgICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJveHkgJ2hhcycgbXVzdCByZXR1cm4gJ3RydWUnIGZv
ciBhIG5vbi1leHRlbnNpYmxlICd0YXJnZXQnIG9iamVjdCB3aXRoIGEgY29uZmlndXJhYmxlIHBy
b3BlcnR5Il9zKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTM3MSw3ICszNzEsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3Jt
SGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAog
ICAgIHJldHVybiB0cmFwUmVzdWx0QXNCb29sOwogfQogCi1ib29sIFByb3h5T2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RDb21tb24oRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RDb21tb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHNsb3QuZGlzYWJsZUNh
Y2hpbmcoKTsKICAgICBzbG90LnNldElzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KCk7CkBAIC0zNzks
MTkgKzM3OSwxOSBAQCBib29sIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24o
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydAogICAgIGlmIChzbG90LmludGVy
bmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlu
cXVpcnkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJz
ZVNvZnQoKSkpIHsKLSAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYywgc2NvcGUp
OworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBzd2l0Y2ggKHNsb3QuaW50ZXJuYWxN
ZXRob2RUeXBlKCkpIHsKICAgICBjYXNlIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXQ6Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcGVyZm9ybUdldChleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBwZXJmb3JtR2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSk7CiAgICAgY2Fz
ZSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHk6Ci0gICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3du
UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSk7CisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgcGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKTsKICAgICBjYXNlIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eToKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBwZXJmb3JtSGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSk7Cisg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcGVyZm9ybUhhc1Byb3BlcnR5KGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTQwMCwyOSArNDAwLDI5IEBAIGJvb2wgUHJveHlPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFByb3h5T2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIFByb3h5T2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2Jq
ZWN0KTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90Q29tbW9uKGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPmdldE93blBy
b3BlcnR5U2xvdENvbW1vbihnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAK
LWJvb2wgUHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK2Jvb2wgUHJveHlPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgUHJveHlPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOwogICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiB0
aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgaWRlbnQuaW1wbCgpLCBz
bG90KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90Q29tbW9uKGds
b2JhbE9iamVjdCwgaWRlbnQuaW1wbCgpLCBzbG90KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IFBlcmZvcm1EZWZhdWx0UHV0RnVuY3Rpb24+Ci1ib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBwdXRWYWx1ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBlcmZvcm1EZWZhdWx0UHV0RnVuY3Rpb24gcGVyZm9y
bURlZmF1bHRQdXQsIGJvb2wgc2hvdWxkVGhyb3cpCitib29sIFByb3h5T2JqZWN0OjpwZXJmb3Jt
UHV0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHV0VmFsdWUsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQZXJmb3JtRGVmYXVsdFB1
dEZ1bmN0aW9uIHBlcmZvcm1EZWZhdWx0UHV0LCBib29sIHNob3VsZFRocm93KQogewogICAgIE5P
X1RBSUxfQ0FMTFMoKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKLSAg
ICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtNDMxLDE0ICs0MzEsMTQgQEAgYm9vbCBQcm94eU9iamVjdDo6
cGVyZm9ybVB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcHV0VmFsdWUsIEpTVmFsdWUgdGhp
c1ZhbHUKIAogICAgIEpTVmFsdWUgaGFuZGxlclZhbHVlID0gdGhpcy0+aGFuZGxlcigpOwogICAg
IGlmIChoYW5kbGVyVmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgc19wcm94eUFscmVhZHlSZXZva2VkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJldm9r
ZWRFcnJvck1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgSlNP
YmplY3QqIGhhbmRsZXIgPSBqc0Nhc3Q8SlNPYmplY3QqPihoYW5kbGVyVmFsdWUpOwogICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgc2V0
TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0u
cHJvcGVydHlOYW1lcy0+c2V0LCAiJ3NldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIg
c2hvdWxkIGJlIGNhbGxhYmxlIl9zKTsKKyAgICBKU1ZhbHVlIHNldE1ldGhvZCA9IGhhbmRsZXIt
PmdldE1ldGhvZChnbG9iYWxPYmplY3QsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlO
YW1lcy0+c2V0LCAiJ3NldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJl
IGNhbGxhYmxlIl9zKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAg
ICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChzZXRNZXRob2Qu
aXNVbmRlZmluZWQoKSkKQEAgLTQ1MCw0OSArNDUwLDQ5IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1QdXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHB1dFZhbHVlLCBKU1ZhbHVlIHRoaXNW
YWx1CiAgICAgYXJndW1lbnRzLmFwcGVuZChwdXRWYWx1ZSk7CiAgICAgYXJndW1lbnRzLmFwcGVu
ZCh0aGlzVmFsdWUpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0g
ICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBzZXRNZXRob2QsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKKyAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBj
YWxsKGdsb2JhbE9iamVjdCwgc2V0TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIs
IGFyZ3VtZW50cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAg
IGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOworICAg
IGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGdsb2JhbE9iamVj
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGlmICghdHJh
cFJlc3VsdEFzQm9vbCkgewogICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBtYWtlU3RyaW5nKCJQcm94eSBvYmplY3QncyAn
c2V0JyB0cmFwIHJldHVybmVkIGZhbHN5IHZhbHVlIGZvciBwcm9wZXJ0eSAnIiwgU3RyaW5nKHBy
b3BlcnR5TmFtZS51aWQoKSksICInIikpOworICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBtYWtlU3RyaW5nKCJQcm94eSBvYmplY3QncyAnc2V0JyB0cmFw
IHJldHVybmVkIGZhbHN5IHZhbHVlIGZvciBwcm9wZXJ0eSAnIiwgU3RyaW5nKHByb3BlcnR5TmFt
ZS51aWQoKSksICInIikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgUHJv
cGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHRhcmdl
dC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7CisgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKICAgICBFWENFUFRJ
T05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhaGFzUHJvcGVydHkpOwogICAgIGlmICho
YXNQcm9wZXJ0eSkgewogICAgICAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkg
JiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGUoKSkg
ewotICAgICAgICAgICAgaWYgKCFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBw
dXRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCAiUHJveHkgaGFuZGxlcidzICdzZXQnIG9uIGEgbm9uLWNvbmZpZ3VyYWJsZSBhbmQgbm9uLXdy
aXRhYmxlIHByb3BlcnR5IG9uICd0YXJnZXQnIHNob3VsZCBlaXRoZXIgcmV0dXJuIGZhbHNlIG9y
IGJlIHRoZSBzYW1lIHZhbHVlIGFscmVhZHkgb24gdGhlICd0YXJnZXQnIl9zKTsKKyAgICAgICAg
ICAgIGlmICghc2FtZVZhbHVlKGdsb2JhbE9iamVjdCwgZGVzY3JpcHRvci52YWx1ZSgpLCBwdXRW
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJQcm94eSBoYW5kbGVyJ3MgJ3NldCcgb24gYSBub24tY29uZmlndXJhYmxlIGFuZCBu
b24td3JpdGFibGUgcHJvcGVydHkgb24gJ3RhcmdldCcgc2hvdWxkIGVpdGhlciByZXR1cm4gZmFs
c2Ugb3IgYmUgdGhlIHNhbWUgdmFsdWUgYWxyZWFkeSBvbiB0aGUgJ3RhcmdldCciX3MpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgIWRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlKCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAg
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiUHJveHkgaGFuZGxlcidzICdz
ZXQnIG1ldGhvZCBvbiBhIG5vbi1jb25maWd1cmFibGUgYWNjZXNzb3IgcHJvcGVydHkgd2l0aG91
dCBhIHNldHRlciBzaG91bGQgcmV0dXJuIGZhbHNlIl9zKTsKKyAgICAgICAgICAgIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlByb3h5IGhhbmRsZXIncyAnc2V0JyBtZXRo
b2Qgb24gYSBub24tY29uZmlndXJhYmxlIGFjY2Vzc29yIHByb3BlcnR5IHdpdGhvdXQgYSBzZXR0
ZXIgc2hvdWxkIHJldHVybiBmYWxzZSJfcyk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJveHlPYmplY3Q6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBQcm94eU9i
amVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIHNsb3QuZGlzYWJsZUNhY2hpbmcoKTsKIAogICAgIFByb3h5T2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4oY2VsbCk7CiAgICAgYXV0byBwZXJm
b3JtRGVmYXVsdFB1dCA9IFsmXSAoKSB7CiAgICAgICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBqc0Nh
c3Q8SlNPYmplY3QqPih0aGlzT2JqZWN0LT50YXJnZXQoKSk7Ci0gICAgICAgIHJldHVybiB0YXJn
ZXQtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRhcmdldCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7CisgICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRh
cmdldCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICB9Owot
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5wZXJmb3JtUHV0KGV4ZWMsIHZhbHVlLCBzbG90LnRoaXNW
YWx1ZSgpLCBwcm9wZXJ0eU5hbWUsIHBlcmZvcm1EZWZhdWx0UHV0LCBzbG90LmlzU3RyaWN0TW9k
ZSgpKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+cGVyZm9ybVB1dChnbG9iYWxPYmplY3QsIHZh
bHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBwcm9wZXJ0eU5hbWUsIHBlcmZvcm1EZWZhdWx0UHV0LCBz
bG90LmlzU3RyaWN0TW9kZSgpKTsKIH0KIAotYm9vbCBQcm94eU9iamVjdDo6cHV0QnlJbmRleENv
bW1vbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgcHV0VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCitib29sIFByb3h5T2Jq
ZWN0OjpwdXRCeUluZGV4Q29tbW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgcHV0VmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBwcm9w
ZXJ0eU5hbWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTUw
MCwxNSArNTAwLDE1IEBAIGJvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXhDb21tb24oRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQKICAgICAgICAgSlNPYmplY3Qq
IHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSA9IHNo
b3VsZFRocm93OwogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzVmFsdWUsIGlzU3Ry
aWN0TW9kZSk7IC8vIFdlIG11c3QgcHJlc2VydmUgdGhlICJ0aGlzIiB0YXJnZXQgb2YgdGhlIHB1
dEJ5SW5kZXguCi0gICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRh
cmdldCwgZXhlYywgaWRlbnQuaW1wbCgpLCBwdXRWYWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVy
biB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRhcmdldCwgZ2xvYmFsT2JqZWN0LCBpZGVu
dC5pbXBsKCksIHB1dFZhbHVlLCBzbG90KTsKICAgICB9OwotICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcGVyZm9ybVB1dChleGVjLCBwdXRWYWx1ZSwgdGhpc1ZhbHVlLCBpZGVudC5pbXBs
KCksIHBlcmZvcm1EZWZhdWx0UHV0LCBzaG91bGRUaHJvdykpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgcGVyZm9ybVB1dChnbG9iYWxPYmplY3QsIHB1dFZhbHVlLCB0aGlzVmFsdWUs
IGlkZW50LmltcGwoKSwgcGVyZm9ybURlZmF1bHRQdXQsIHNob3VsZFRocm93KSk7CiB9CiAKLWJv
b2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
K2Jvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
UHJveHlPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0QnlJbmRleENv
bW1vbihleGVjLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7
CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhDb21tb24oZ2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmZvcm1Qcm94eUNhbGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC01MTgsMzUgKzUx
OCwzNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmb3JtUHJveHlD
YWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
aWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKSB7Ci0gICAgICAgIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICB0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIGVuY29k
ZWRKU1ZhbHVlKCk7CiAgICAgfQogICAgIFByb3h5T2JqZWN0KiBwcm94eSA9IGpzQ2FzdDxQcm94
eU9iamVjdCo+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFs
dWUgPSBwcm94eS0+aGFuZGxlcigpOwogICAgIGlmIChoYW5kbGVyVmFsdWUuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIHNfcHJveHlB
bHJlYWR5UmV2b2tlZEVycm9yTWVzc2FnZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNfcHJveHlBbHJlYWR5UmV2b2tlZEVycm9yTWVzc2Fn
ZSk7CiAKICAgICBKU09iamVjdCogaGFuZGxlciA9IGpzQ2FzdDxKU09iamVjdCo+KGhhbmRsZXJW
YWx1ZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7Ci0g
ICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChjYWxsRnJhbWUsIGNh
bGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJhcHBseSIpLCAiJ2FwcGx5JyBw
cm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiX3MpOworICAg
IEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZ2xvYmFsT2JqZWN0LCBj
YWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiYXBwbHkiKSwgIidhcHBseScg
cHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIl9zKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBKU09i
amVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgIGlmIChhcHBseU1ldGhvZC5pc1Vu
ZGVmaW5lZCgpKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YSh0YXJnZXQs
IGNhbGxEYXRhKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6
Ok5vbmUpOwotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShjYWxsKGNhbGxGcmFtZSwgdGFyZ2V0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCksIEFyZ0xpc3QoY2FsbEZyYW1lKSkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoY2FsbChnbG9iYWxPYmplY3QsIHRhcmdldCwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLCBBcmdMaXN0KGNhbGxG
cmFtZSkpKSk7CiAgICAgfQogCi0gICAgSlNBcnJheSogYXJnQXJyYXkgPSBjb25zdHJ1Y3RBcnJh
eShjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRy
KSwgQXJnTGlzdChjYWxsRnJhbWUpKTsKKyAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNvbnN0cnVj
dEFycmF5KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+
KG51bGxwdHIpLCBBcmdMaXN0KGNhbGxGcmFtZSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3Vt
ZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7Ci0gICAgYXJndW1lbnRzLmFwcGVu
ZChjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvVGhpcyhjYWxsRnJhbWUsIEVDTUFNb2RlOjpTdHJp
Y3RNb2RlKSk7CisgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRv
VGhpcyhnbG9iYWxPYmplY3QsIEVDTUFNb2RlOjpTdHJpY3RNb2RlKSk7CiAgICAgYXJndW1lbnRz
LmFwcGVuZChhcmdBcnJheSk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgp
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShjYWxsKGNh
bGxGcmFtZSwgYXBwbHlNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1l
bnRzKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGNh
bGwoZ2xvYmFsT2JqZWN0LCBhcHBseU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVy
LCBhcmd1bWVudHMpKSk7CiB9CiAKIENhbGxUeXBlIFByb3h5T2JqZWN0OjpnZXRDYWxsRGF0YShK
U0NlbGwqIGNlbGwsIENhbGxEYXRhJiBjYWxsRGF0YSkKQEAgLTU2OSwzOCArNTY5LDM4IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmZvcm1Qcm94eUNvbnN0cnVjdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtF
TFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKLSAgICAgICAgdGhyb3dTdGFja092ZXJm
bG93RXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUo
KTsKICAgICB9CiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4o
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKICAgICBKU1ZhbHVlIGhhbmRsZXJWYWx1ZSA9IHByb3h5
LT5oYW5kbGVyKCk7CiAgICAgaWYgKGhhbmRsZXJWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgc19wcm94eUFscmVhZHlSZXZv
a2VkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgc19wcm94eUFscmVhZHlSZXZva2VkRXJyb3JNZXNzYWdlKTsKIAogICAg
IEpTT2JqZWN0KiBoYW5kbGVyID0ganNDYXN0PEpTT2JqZWN0Kj4oaGFuZGxlclZhbHVlKTsKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBKU1ZhbHVl
IGNvbnN0cnVjdE1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChjYWxsRnJhbWUsIGNhbGxEYXRh
LCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJjb25zdHJ1Y3QiKSwgIidjb25zdHJ1Y3Qn
IHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSJfcyk7Cisg
ICAgSlNWYWx1ZSBjb25zdHJ1Y3RNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiY29uc3RydWN0Iiks
ICInY29uc3RydWN0JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2Fs
bGFibGUiX3MpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGNv
bnN0cnVjdE1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIENvbnN0cnVjdERhdGEgY29u
c3RydWN0RGF0YTsKICAgICAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gdGFyZ2V0
LT5tZXRob2RUYWJsZSh2bSktPmdldENvbnN0cnVjdERhdGEodGFyZ2V0LCBjb25zdHJ1Y3REYXRh
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RydWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBl
OjpOb25lKTsKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoY29uc3RydWN0KGNhbGxGcmFtZSwgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3RE
YXRhLCBBcmdMaXN0KGNhbGxGcmFtZSksIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpKSk7CisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdChn
bG9iYWxPYmplY3QsIHRhcmdldCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgQXJnTGlz
dChjYWxsRnJhbWUpLCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpKSkpOwogICAgIH0KIAotICAgIEpT
QXJyYXkqIGFyZ0FycmF5ID0gY29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxB
cnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIEFyZ0xpc3QoY2FsbEZyYW1lKSk7Cisg
ICAgSlNBcnJheSogYXJnQXJyYXkgPSBjb25zdHJ1Y3RBcnJheShnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJnTGlzdChjYWxsRnJh
bWUpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVu
ZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJnQXJyYXkpOwogICAgIGFyZ3VtZW50
cy5hcHBlbmQoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMu
aGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoY2FsbEZyYW1lLCBj
b25zdHJ1Y3RNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3RNZXRob2Qs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoIXJlc3VsdC5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3Bl
LCAiUmVzdWx0IGZyb20gUHJveHkgaGFuZGxlcidzICdjb25zdHJ1Y3QnIG1ldGhvZCBzaG91bGQg
YmUgYW4gb2JqZWN0Il9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlJlc3VsdCBmcm9tIFByb3h5IGhhbmRsZXIncyAnY29uc3RydWN0JyBt
ZXRob2Qgc2hvdWxkIGJlIGFuIG9iamVjdCJfcyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCkBAIC02MTgsMTQgKzYxOCwxNCBAQCBDb25zdHJ1Y3RUeXBlIFByb3h5
T2JqZWN0OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCogY2VsbCwgQ29uc3RydWN0RGF0YSYgY29u
c3RydQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRGVmYXVsdERlbGV0ZUZ1bmN0aW9uPgotYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIERlZmF1bHREZWxldGVGdW5jdGlvbiBwZXJmb3JtRGVmYXVsdERlbGV0
ZSkKK2Jvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgRGVmYXVsdERlbGV0ZUZ1bmN0aW9u
IHBlcmZvcm1EZWZhdWx0RGVsZXRlKQogewogICAgIE5PX1RBSUxfQ0FMTFMoKTsKIAotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFko
IXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKLSAgICAgICAgdGhyb3dTdGFja092ZXJmbG93
RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjM0
LDE0ICs2MzQsMTQgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlZmEKIAogICAgIEpTVmFsdWUgaGFu
ZGxlclZhbHVlID0gdGhpcy0+aGFuZGxlcigpOwogICAgIGlmIChoYW5kbGVyVmFsdWUuaXNOdWxs
KCkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgc19wcm94eUFscmVh
ZHlSZXZva2VkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJldm9rZWRFcnJvck1lc3NhZ2UpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgSlNPYmplY3QqIGhhbmRsZXIgPSBqc0Nhc3Q8
SlNPYmplY3QqPihoYW5kbGVyVmFsdWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgZGVsZXRlUHJvcGVydHlNZXRob2QgPSBoYW5k
bGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2
bSwgImRlbGV0ZVByb3BlcnR5IiksICInZGVsZXRlUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJv
eHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSJfcyk7CisgICAgSlNWYWx1ZSBkZWxldGVQ
cm9wZXJ0eU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChnbG9iYWxPYmplY3QsIGNhbGxEYXRh
LCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJkZWxldGVQcm9wZXJ0eSIpLCAiJ2RlbGV0
ZVByb3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFi
bGUiX3MpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBKU09i
amVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKGRlbGV0ZVByb3BlcnR5TWV0
aG9kLmlzVW5kZWZpbmVkKCkpCkBAIC02NTEsMjcgKzY1MSwyNyBAQCBib29sIFByb3h5T2JqZWN0
OjpwZXJmb3JtRGVsZXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgRGVmYQogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3Zl
cmZsb3dlZCgpKTsKLSAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlbGV0ZVBy
b3BlcnR5TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Cisg
ICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGRlbGV0ZVByb3BlcnR5
TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCi0gICAgYm9vbCB0cmFwUmVzdWx0QXNC
b29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7CisgICAgYm9vbCB0cmFwUmVzdWx0QXNC
b29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OwotICAgIGJvb2wgcmVzdWx0ID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKKyAgICBib29sIHJlc3VsdCA9IHRhcmdldC0+
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAhcmVz
dWx0KTsKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGlmICghZGVzY3JpcHRvci5jb25maWd1
cmFibGUoKSkgewotICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIlBy
b3h5IGhhbmRsZXIncyAnZGVsZXRlUHJvcGVydHknIG1ldGhvZCBzaG91bGQgcmV0dXJuIGZhbHNl
IHdoZW4gdGhlIHRhcmdldCdzIHByb3BlcnR5IGlzIG5vdCBjb25maWd1cmFibGUiX3MpOworICAg
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJveHkgaGFu
ZGxlcidzICdkZWxldGVQcm9wZXJ0eScgbWV0aG9kIHNob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0
aGUgdGFyZ2V0J3MgcHJvcGVydHkgaXMgbm90IGNvbmZpZ3VyYWJsZSJfcyk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2li
bGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKKyAgICAgICAgYm9vbCB0YXJnZXRJc0V4
dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShnbG9iYWxPYmplY3QpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0SXNF
eHRlbnNpYmxlKSB7Ci0gICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAi
UHJveHkgaGFuZGxlcidzICdkZWxldGVQcm9wZXJ0eScgbWV0aG9kIHNob3VsZCByZXR1cm4gZmFs
c2Ugd2hlbiB0aGUgdGFyZ2V0IGhhcyBwcm9wZXJ0eSBhbmQgaXMgbm90IGV4dGVuc2libGUiX3Mp
OworICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJv
eHkgaGFuZGxlcidzICdkZWxldGVQcm9wZXJ0eScgbWV0aG9kIHNob3VsZCByZXR1cm4gZmFsc2Ug
d2hlbiB0aGUgdGFyZ2V0IGhhcyBwcm9wZXJ0eSBhbmQgaXMgbm90IGV4dGVuc2libGUiX3MpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNjgxLDY4ICs2
ODEsNjggQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIERlZmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBQcm94eU9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIFByb3h5T2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0RGVs
ZXRlID0gWyZdICgpIC0+IGJvb2wgewogICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpc09i
amVjdC0+dGFyZ2V0KCk7Ci0gICAgICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKGV4ZWMt
PnZtKCkpLT5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgIHJldHVybiB0YXJnZXQtPm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmRlbGV0
ZVByb3BlcnR5KHRhcmdldCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgIH07Ci0g
ICAgcmV0dXJuIHRoaXNPYmplY3QtPnBlcmZvcm1EZWxldGUoZXhlYywgcHJvcGVydHlOYW1lLCBw
ZXJmb3JtRGVmYXVsdERlbGV0ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnBlcmZvcm1EZWxl
dGUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHBlcmZvcm1EZWZhdWx0RGVsZXRlKTsKIH0K
IAotYm9vbCBQcm94eU9iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCitib29sIFByb3h5T2JqZWN0
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgUHJveHlPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKICAgICBJZGVudGlmaWVy
IGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKTsKICAgICBhdXRvIHBl
cmZvcm1EZWZhdWx0RGVsZXRlID0gWyZdICgpIC0+IGJvb2wgewogICAgICAgICBKU09iamVjdCog
dGFyZ2V0ID0gdGhpc09iamVjdC0+dGFyZ2V0KCk7Ci0gICAgICAgIHJldHVybiB0YXJnZXQtPm1l
dGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRhcmdldCwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgodGFyZ2V0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAg
fTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+cGVyZm9ybURlbGV0ZShleGVjLCBpZGVudC5pbXBs
KCksIHBlcmZvcm1EZWZhdWx0RGVsZXRlKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+cGVyZm9y
bURlbGV0ZShnbG9iYWxPYmplY3QsIGlkZW50LmltcGwoKSwgcGVyZm9ybURlZmF1bHREZWxldGUp
OwogfQogCi1ib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHJldmVudEV4dGVuc2lvbnMoRXhlY1N0
YXRlKiBleGVjKQorYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVByZXZlbnRFeHRlbnNpb25zKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgTk9fVEFJTF9DQUxMUygpOwogCi0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChVTkxJ
S0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29mdCgpKSkgewotICAgICAgICB0aHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSB0aGlzLT5oYW5kbGVyKCk7CiAgICAgaWYgKGhhbmRs
ZXJWYWx1ZS5pc051bGwoKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBzX3Byb3h5QWxyZWFkeVJldm9rZWRFcnJvck1lc3NhZ2UpOworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNfcHJveHlBbHJlYWR5UmV2b2tlZEVycm9yTWVz
c2FnZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBKU09iamVjdCogaGFu
ZGxlciA9IGpzQ2FzdDxKU09iamVjdCo+KGhhbmRsZXJWYWx1ZSk7CiAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgSlNWYWx1ZSBwcmV2ZW50RXh0ZW5z
aW9uc01ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUs
IG1ha2VJZGVudGlmaWVyKHZtLCAicHJldmVudEV4dGVuc2lvbnMiKSwgIidwcmV2ZW50RXh0ZW5z
aW9ucycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIl9z
KTsKKyAgICBKU1ZhbHVlIHByZXZlbnRFeHRlbnNpb25zTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0
aG9kKGdsb2JhbE9iamVjdCwgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwg
InByZXZlbnRFeHRlbnNpb25zIiksICIncHJldmVudEV4dGVuc2lvbnMnIHByb3BlcnR5IG9mIGEg
UHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSJfcyk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJn
ZXQoKTsKICAgICBpZiAocHJldmVudEV4dGVuc2lvbnNNZXRob2QuaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+
cHJldmVudEV4dGVuc2lvbnModGFyZ2V0LCBleGVjKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKHRh
cmdldCwgZ2xvYmFsT2JqZWN0KSk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVu
dHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIEFTU0VSVCghYXJndW1lbnRz
Lmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBw
cmV2ZW50RXh0ZW5zaW9uc01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1
bWVudHMpOworICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZ2xvYmFsT2JqZWN0LCBwcmV2
ZW50RXh0ZW5zaW9uc01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVu
dHMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAotICAgIGJvb2wg
dHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOworICAgIGJvb2wg
dHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGdsb2JhbE9iamVjdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYgKHRyYXBSZXN1
bHRBc0Jvb2wpIHsKLSAgICAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlz
RXh0ZW5zaWJsZShleGVjKTsKKyAgICAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJn
ZXQtPmlzRXh0ZW5zaWJsZShnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIGlmICh0YXJnZXRJc0V4dGVuc2libGUpIHsKLSAg
ICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJQcm94eSdzICdwcmV2ZW50
RXh0ZW5zaW9ucycgdHJhcCByZXR1cm5lZCB0cnVlIGV2ZW4gdGhvdWdoIGl0cyB0YXJnZXQgaXMg
ZXh0ZW5zaWJsZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFsc2UiX3MpOworICAgICAgICAg
ICAgdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJveHkncyAncHJldmVu
dEV4dGVuc2lvbnMnIHRyYXAgcmV0dXJuZWQgdHJ1ZSBldmVuIHRob3VnaCBpdHMgdGFyZ2V0IGlz
IGV4dGVuc2libGUuIEl0IHNob3VsZCBoYXZlIHJldHVybmVkIGZhbHNlIl9zKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTc1MCw4MyArNzUwLDgzIEBA
IGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2ZW50RXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgcmV0dXJuIHRyYXBSZXN1bHRBc0Jvb2w7CiB9CiAKLWJvb2wgUHJveHlPYmplY3Q6
OnByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykKK2Jv
b2wgUHJveHlPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxQcm94eU9iamVj
dCo+KG9iamVjdCktPnBlcmZvcm1QcmV2ZW50RXh0ZW5zaW9ucyhleGVjKTsKKyAgICByZXR1cm4g
anNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqZWN0KS0+cGVyZm9ybVByZXZlbnRFeHRlbnNpb25zKGds
b2JhbE9iamVjdCk7CiB9CiAKLWJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1Jc0V4dGVuc2libGUo
RXhlY1N0YXRlKiBleGVjKQorYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlzRXh0ZW5zaWJsZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIE5PX1RBSUxfQ0FMTFMoKTsKIAot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5M
SUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKLSAgICAgICAgdGhyb3dTdGFja092
ZXJmbG93RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIEpTVmFsdWUgaGFuZGxlclZhbHVlID0gdGhpcy0+aGFuZGxlcigpOwogICAgIGlmIChoYW5k
bGVyVmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSwgc19wcm94eUFscmVhZHlSZXZva2VkRXJyb3JNZXNzYWdlKTsKKyAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJldm9rZWRFcnJvck1l
c3NhZ2UpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgSlNPYmplY3QqIGhh
bmRsZXIgPSBqc0Nhc3Q8SlNPYmplY3QqPihoYW5kbGVyVmFsdWUpOwogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgaXNFeHRlbnNpYmxl
TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFr
ZUlkZW50aWZpZXIodm0sICJpc0V4dGVuc2libGUiKSwgIidpc0V4dGVuc2libGUnIHByb3BlcnR5
IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSJfcyk7CisgICAgSlNWYWx1
ZSBpc0V4dGVuc2libGVNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZ2xvYmFsT2JqZWN0LCBj
YWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiaXNFeHRlbnNpYmxlIiksICIn
aXNFeHRlbnNpYmxlJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2Fs
bGFibGUiX3MpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAg
IEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAgICBpZiAoaXNFeHRlbnNpYmxl
TWV0aG9kLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
dGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYykpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHRhcmdldC0+aXNFeHRlbnNpYmxlKGdsb2JhbE9iamVjdCkpOwogCiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsK
ICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwotICAgIEpTVmFsdWUgdHJh
cFJlc3VsdCA9IGNhbGwoZXhlYywgaXNFeHRlbnNpYmxlTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CisgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChn
bG9iYWxPYmplY3QsIGlzRXh0ZW5zaWJsZU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5k
bGVyLCBhcmd1bWVudHMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
IAotICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMp
OworICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGdsb2Jh
bE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCi0gICAg
Ym9vbCBpc1RhcmdldEV4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKKyAg
ICBib29sIGlzVGFyZ2V0RXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGdsb2JhbE9i
amVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgaWYg
KHRyYXBSZXN1bHRBc0Jvb2wgIT0gaXNUYXJnZXRFeHRlbnNpYmxlKSB7CiAgICAgICAgIGlmIChp
c1RhcmdldEV4dGVuc2libGUpIHsKICAgICAgICAgICAgIEFTU0VSVCghdHJhcFJlc3VsdEFzQm9v
bCk7Ci0gICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiUHJveHkgb2Jq
ZWN0J3MgJ2lzRXh0ZW5zaWJsZScgdHJhcCByZXR1cm5lZCBmYWxzZSB3aGVuIHRoZSB0YXJnZXQg
aXMgZXh0ZW5zaWJsZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgdHJ1ZSJfcyk7CisgICAgICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm94eSBvYmplY3Qn
cyAnaXNFeHRlbnNpYmxlJyB0cmFwIHJldHVybmVkIGZhbHNlIHdoZW4gdGhlIHRhcmdldCBpcyBl
eHRlbnNpYmxlLiBJdCBzaG91bGQgaGF2ZSByZXR1cm5lZCB0cnVlIl9zKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghaXNUYXJnZXRFeHRlbnNpYmxlKTsKICAgICAgICAg
ICAgIEFTU0VSVCh0cmFwUmVzdWx0QXNCb29sKTsKLSAgICAgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUsICJQcm94eSBvYmplY3QncyAnaXNFeHRlbnNpYmxlJyB0cmFwIHJldHVy
bmVkIHRydWUgd2hlbiB0aGUgdGFyZ2V0IGlzIG5vbi1leHRlbnNpYmxlLiBJdCBzaG91bGQgaGF2
ZSByZXR1cm5lZCBmYWxzZSJfcyk7CisgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJQcm94eSBvYmplY3QncyAnaXNFeHRlbnNpYmxlJyB0cmFwIHJldHVy
bmVkIHRydWUgd2hlbiB0aGUgdGFyZ2V0IGlzIG5vbi1leHRlbnNpYmxlLiBJdCBzaG91bGQgaGF2
ZSByZXR1cm5lZCBmYWxzZSJfcyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgcmV0dXJu
IHRyYXBSZXN1bHRBc0Jvb2w7CiB9CiAKLWJvb2wgUHJveHlPYmplY3Q6OmlzRXh0ZW5zaWJsZShK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMpCitib29sIFByb3h5T2JqZWN0Ojppc0V4
dGVuc2libGUoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKLSAgICByZXR1cm4ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqZWN0KS0+cGVyZm9ybUlzRXh0
ZW5zaWJsZShleGVjKTsKKyAgICByZXR1cm4ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqZWN0KS0+
cGVyZm9ybUlzRXh0ZW5zaWJsZShnbG9iYWxPYmplY3QpOwogfQogCi1ib29sIFByb3h5T2JqZWN0
OjpwZXJmb3JtRGVmaW5lT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
c2hvdWxkVGhyb3cpCitib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3duUHJvcGVydHko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQog
ewogICAgIE5PX1RBSUxfQ0FMTFMoKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQo
KSkpIHsKLSAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYywgc2NvcGUpOworICAg
ICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50
YXJnZXQoKTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0RGVmaW5lT3duUHJvcGVydHkgPSBbJl0g
ewotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRhcmdldC0+bWV0aG9kVGFibGUo
dm0pLT5kZWZpbmVPd25Qcm9wZXJ0eSh0YXJnZXQsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0
YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkodGFyZ2V0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKTsKICAgICB9Owog
CiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1ByaXZhdGVOYW1lKCkpCkBAIC04MzQsMjAgKzgzNCwy
MCBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3duUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydAogCiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUg
PSB0aGlzLT5oYW5kbGVyKCk7CiAgICAgaWYgKGhhbmRsZXJWYWx1ZS5pc051bGwoKSkgewotICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJldm9rZWRF
cnJvck1lc3NhZ2UpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIHNfcHJveHlBbHJlYWR5UmV2b2tlZEVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBKU09iamVjdCogaGFuZGxlciA9IGpzQ2FzdDxKU09iamVjdCo+
KGhhbmRsZXJWYWx1ZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGU7Ci0gICAgSlNWYWx1ZSBkZWZpbmVQcm9wZXJ0eU1ldGhvZCA9IGhhbmRsZXItPmdldE1l
dGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPmRlZmluZVBy
b3BlcnR5LCAiJ2RlZmluZVByb3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUiX3MpOworICAgIEpTVmFsdWUgZGVmaW5lUHJvcGVydHlNZXRob2Qg
PSBoYW5kbGVyLT5nZXRNZXRob2QoZ2xvYmFsT2JqZWN0LCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZt
LnByb3BlcnR5TmFtZXMtPmRlZmluZVByb3BlcnR5LCAiJ2RlZmluZVByb3BlcnR5JyBwcm9wZXJ0
eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiX3MpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIGlmIChkZWZpbmVQcm9wZXJ0eU1l
dGhvZC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHREZWZpbmVP
d25Qcm9wZXJ0eSgpOwogCi0gICAgSlNPYmplY3QqIGRlc2NyaXB0b3JPYmplY3QgPSBjb25zdHJ1
Y3RPYmplY3RGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGRlc2NyaXB0b3IpOworICAgIEpT
T2JqZWN0KiBkZXNjcmlwdG9yT2JqZWN0ID0gY29uc3RydWN0T2JqZWN0RnJvbVByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWxPYmplY3QsIGRlc2NyaXB0b3IpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsK
QEAgLTg1NSwzMCArODU1LDMwIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Q
cm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0CiAgICAgYXJndW1l
bnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6
ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
ZGVzY3JpcHRvck9iamVjdCk7CiAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgp
KTsKLSAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlZmluZVByb3BlcnR5TWV0
aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CisgICAgSlNWYWx1
ZSB0cmFwUmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIGRlZmluZVByb3BlcnR5TWV0aG9kLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogCi0gICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJh
cFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7CisgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJh
cFJlc3VsdC50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciB0YXJnZXREZXNjcmlwdG9yOwot
ICAgIGJvb2wgaXNUYXJnZXREZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0RGVzY3JpcHRvcik7CisgICAg
Ym9vbCBpc1RhcmdldERlc2NyaXB0b3JEZWZpbmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHRhcmdldERlc2NyaXB0b3IpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAotICAgIGJvb2wgdGFyZ2V0
SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7CisgICAgYm9vbCB0YXJn
ZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShnbG9iYWxPYmplY3QpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICBib29sIHNldHRpbmdDb25m
aWd1cmFibGVUb0ZhbHNlID0gZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgIWRl
c2NyaXB0b3IuY29uZmlndXJhYmxlKCk7CiAKICAgICBpZiAoIWlzVGFyZ2V0RGVzY3JpcHRvckRl
ZmluZWQpIHsKICAgICAgICAgaWYgKCF0YXJnZXRJc0V4dGVuc2libGUpIHsKLSAgICAgICAgICAg
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJQcm94eSdzICdkZWZpbmVQcm9wZXJ0eScg
dHJhcCByZXR1cm5lZCB0cnVlIGV2ZW4gdGhvdWdoIGdldE93blByb3BlcnR5RGVzY3JpcHRvciBv
ZiB0aGUgUHJveHkncyB0YXJnZXQgcmV0dXJuZWQgdW5kZWZpbmVkIGFuZCB0aGUgdGFyZ2V0IGlz
IG5vbi1leHRlbnNpYmxlIl9zKTsKKyAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlByb3h5J3MgJ2RlZmluZVByb3BlcnR5JyB0cmFwIHJldHVybmVkIHRy
dWUgZXZlbiB0aG91Z2ggZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIG9mIHRoZSBQcm94eSdzIHRh
cmdldCByZXR1cm5lZCB1bmRlZmluZWQgYW5kIHRoZSB0YXJnZXQgaXMgbm9uLWV4dGVuc2libGUi
X3MpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChz
ZXR0aW5nQ29uZmlndXJhYmxlVG9GYWxzZSkgewotICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgIlByb3h5J3MgJ2RlZmluZVByb3BlcnR5JyB0cmFwIHJldHVybmVkIHRy
dWUgZm9yIGEgbm9uLWNvbmZpZ3VyYWJsZSBmaWVsZCBldmVuIHRob3VnaCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3Igb2YgdGhlIFByb3h5J3MgdGFyZ2V0IHJldHVybmVkIHVuZGVmaW5lZCJfcyk7
CisgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm94
eSdzICdkZWZpbmVQcm9wZXJ0eScgdHJhcCByZXR1cm5lZCB0cnVlIGZvciBhIG5vbi1jb25maWd1
cmFibGUgZmllbGQgZXZlbiB0aG91Z2ggZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIG9mIHRoZSBQ
cm94eSdzIHRhcmdldCByZXR1cm5lZCB1bmRlZmluZWQiX3MpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAKQEAgLTg4OSwxOSArODg5LDE5IEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0CiAgICAgYm9vbCBpc0N1cnJlbnREZWZpbmVkID0gaXNUYXJnZXREZXNjcmlwdG9y
RGVmaW5lZDsKICAgICBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGN1cnJlbnQgPSB0YXJnZXRE
ZXNjcmlwdG9yOwogICAgIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBib29sIGlz
Q29tcGF0aWJsZURlc2NyaXB0b3IgPSB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIG51bGxwdHIsIHByb3BlcnR5TmFtZSwgdGFyZ2V0SXNFeHRlbnNpYmxlLCBkZXNjcmlw
dG9yLCBpc0N1cnJlbnREZWZpbmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlvbik7CisgICAgYm9v
bCBpc0NvbXBhdGlibGVEZXNjcmlwdG9yID0gdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWxPYmplY3QsIG51bGxwdHIsIHByb3BlcnR5TmFtZSwgdGFyZ2V0SXNFeHRlbnNp
YmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZpbmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlv
bik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOyAgICAKICAgICBpZiAo
IWlzQ29tcGF0aWJsZURlc2NyaXB0b3IpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSwgIlByb3h5J3MgJ2RlZmluZVByb3BlcnR5JyB0cmFwIGRpZCBub3QgZGVmaW5lIGEg
cHJvcGVydHkgb24gaXRzIHRhcmdldCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgdHJhcCdz
IGlucHV0IGRlc2NyaXB0b3IiX3MpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJQcm94eSdzICdkZWZpbmVQcm9wZXJ0eScgdHJhcCBkaWQgbm90IGRlZmlu
ZSBhIHByb3BlcnR5IG9uIGl0cyB0YXJnZXQgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHRy
YXAncyBpbnB1dCBkZXNjcmlwdG9yIl9zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICBpZiAoc2V0dGluZ0NvbmZpZ3VyYWJsZVRvRmFsc2UgJiYgdGFyZ2V0RGVzY3JpcHRvci5j
b25maWd1cmFibGUoKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAi
UHJveHkncyAnZGVmaW5lUHJvcGVydHknIHRyYXAgZGlkIG5vdCBkZWZpbmUgYSBub24tY29uZmln
dXJhYmxlIHByb3BlcnR5IG9uIGl0cyB0YXJnZXQgZXZlbiB0aG91Z2ggdGhlIGlucHV0IGRlc2Ny
aXB0b3IgdG8gdGhlIHRyYXAgc2FpZCBpdCBtdXN0IGRvIHNvIl9zKTsKKyAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUHJveHkncyAnZGVmaW5lUHJvcGVydHkn
IHRyYXAgZGlkIG5vdCBkZWZpbmUgYSBub24tY29uZmlndXJhYmxlIHByb3BlcnR5IG9uIGl0cyB0
YXJnZXQgZXZlbiB0aG91Z2ggdGhlIGlucHV0IGRlc2NyaXB0b3IgdG8gdGhlIHRyYXAgc2FpZCBp
dCBtdXN0IGRvIHNvIl9zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAo
dGFyZ2V0RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgIXRhcmdldERlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlKCkgJiYgdGFyZ2V0RGVzY3JpcHRvci53cml0YWJsZSgpKSB7CiAgICAgICAg
IGlmIChkZXNjcmlwdG9yLndyaXRhYmxlUHJlc2VudCgpICYmICFkZXNjcmlwdG9yLndyaXRhYmxl
KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiUHJveHkncyAn
ZGVmaW5lUHJvcGVydHknIHRyYXAgcmV0dXJuZWQgdHJ1ZSBmb3IgYSBub24td3JpdGFibGUgaW5w
dXQgZGVzY3JpcHRvciB3aGVuIHRoZSB0YXJnZXQncyBwcm9wZXJ0eSBpcyBub24tY29uZmlndXJh
YmxlIGFuZCB3cml0YWJsZSJfcyk7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiUHJveHkncyAnZGVmaW5lUHJvcGVydHknIHRyYXAgcmV0dXJuZWQgdHJ1
ZSBmb3IgYSBub24td3JpdGFibGUgaW5wdXQgZGVzY3JpcHRvciB3aGVuIHRoZSB0YXJnZXQncyBw
cm9wZXJ0eSBpcyBub24tY29uZmlndXJhYmxlIGFuZCB3cml0YWJsZSJfcyk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC05MDksNDQgKzkwOSw0NCBAQCBi
b29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb3h5
T2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgUHJveHlPYmplY3Q6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBQcm94eU9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3Qt
PnBlcmZvcm1EZWZpbmVPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+cGVyZm9ybURlZmluZU93blBy
b3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJv
dyk7CiB9CiAKLXZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU5hbWVzKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCit2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3du
UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkKIHsK
ICAgICBOT19UQUlMX0NBTExTKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkp
KSB7Ci0gICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAg
ICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSB0aGlzLT5oYW5kbGVy
KCk7CiAgICAgaWYgKGhhbmRsZXJWYWx1ZS5pc051bGwoKSkgewotICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJldm9rZWRFcnJvck1lc3NhZ2UpOwor
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNfcHJveHlBbHJl
YWR5UmV2b2tlZEVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBK
U09iamVjdCogaGFuZGxlciA9IGpzQ2FzdDxKU09iamVjdCo+KGhhbmRsZXJWYWx1ZSk7CiAgICAg
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgSlNWYWx1ZSBv
d25LZXlzTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgbWFrZUlkZW50aWZpZXIodm0sICJvd25LZXlzIiksICInb3duS2V5cycgcHJvcGVydHkgb2Yg
YSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIl9zKTsKKyAgICBKU1ZhbHVlIG93
bktleXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZ2xvYmFsT2JqZWN0LCBjYWxsRGF0YSwg
Y2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAib3duS2V5cyIpLCAiJ293bktleXMnIHByb3Bl
cnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSJfcyk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0g
dGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKG93bktleXNNZXRob2QuaXNVbmRlZmluZWQoKSkgewog
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgcHJvcGVydHlOYW1lcywgZW51bWVy
YXRpb25Nb2RlKTsKKyAgICAgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3Bl
cnR5TmFtZXModGFyZ2V0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIGVudW1lcmF0aW9u
TW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIEFTU0VSVCgh
YXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgSlNWYWx1ZSBhcnJheUxpa2VPYmplY3Qg
PSBjYWxsKGV4ZWMsIG93bktleXNNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwg
YXJndW1lbnRzKTsKKyAgICBKU1ZhbHVlIGFycmF5TGlrZU9iamVjdCA9IGNhbGwoZ2xvYmFsT2Jq
ZWN0LCBvd25LZXlzTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50
cyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIFByb3Bl
cnR5TmFtZUFycmF5IHRyYXBSZXN1bHQodm0sIHByb3BlcnR5TmFtZXMucHJvcGVydHlOYW1lTW9k
ZSgpLCBwcm9wZXJ0eU5hbWVzLnByaXZhdGVTeW1ib2xNb2RlKCkpOwpAQCAtOTcyLDcgKzk3Miw3
IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmCiAgICAgICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgZG9FeGl0RWFybHkgPSB0cnVlOwogICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGRvbnRFeGl0RWFybHkgPSBmYWxzZTsKIAotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVu
dCA9IHZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgICAgICAgICBJZGVudGlmaWVyIGlk
ZW50ID0gdmFsdWUudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZG9FeGl0RWFybHkpOwogCiAgICAgICAgICAgICAvLyBJ
ZiB0cmFwUmVzdWx0IGNvbnRhaW5zIGFueSBkdXBsaWNhdGUgZW50cmllcywgdGhyb3cgYSBUeXBl
RXJyb3IgZXhjZXB0aW9uLgpAQCAtOTgzLDcgKzk4Myw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBl
cmZvcm1HZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gWzFdIFBlciBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQt
aW50ZXJuYWwtc2xvdHMtb3ducHJvcGVydHlrZXlzbXVzdCBub3QgY29udGFpbiBhbnkgZHVwbGlj
YXRlIG5hbWVzIl9zKTsKICAgICAgICAgICAgIGlmICghc2VlbktleXMuYWRkKGlkZW50LmltcGwo
KSkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCAiUHJveHkgaGFuZGxlcidzICdvd25LZXlzJyB0cmFwIHJlc3VsdCBtdXN0IG5vdCBjb250
YWluIGFueSBkdXBsaWNhdGUgbmFtZXMiX3MpOworICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm94eSBoYW5kbGVyJ3MgJ293bktleXMnIHRyYXAg
cmVzdWx0IG11c3Qgbm90IGNvbnRhaW4gYW55IGR1cGxpY2F0ZSBuYW1lcyJfcyk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGRvRXhpdEVhcmx5OwogICAgICAgICAgICAgfQogCkBAIC05OTYsMjEg
Kzk5NiwyMSBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyhF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JgogICAgICAgICB9OwogCiAgICAgICAg
IFJ1bnRpbWVUeXBlTWFzayBkb250VGhyb3dBbkV4Y2VwdGlvblR5cGVGaWx0ZXIgPSBUeXBlU3Ry
aW5nIHwgVHlwZVN5bWJvbDsKLSAgICAgICAgY3JlYXRlTGlzdEZyb21BcnJheUxpa2UoZXhlYywg
YXJyYXlMaWtlT2JqZWN0LCBkb250VGhyb3dBbkV4Y2VwdGlvblR5cGVGaWx0ZXIsICJQcm94eSBo
YW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZCBtdXN0IHJldHVybiBhbiBvYmplY3QiX3MsICJQcm94
eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZCBtdXN0IHJldHVybiBhbiBhcnJheS1saWtlIG9i
amVjdCBjb250YWluaW5nIG9ubHkgU3RyaW5ncyBhbmQgU3ltYm9scyJfcywgYWRkUHJvcE5hbWUp
OworICAgICAgICBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZShnbG9iYWxPYmplY3QsIGFycmF5TGlr
ZU9iamVjdCwgZG9udFRocm93QW5FeGNlcHRpb25UeXBlRmlsdGVyLCAiUHJveHkgaGFuZGxlcidz
ICdvd25LZXlzJyBtZXRob2QgbXVzdCByZXR1cm4gYW4gb2JqZWN0Il9zLCAiUHJveHkgaGFuZGxl
cidzICdvd25LZXlzJyBtZXRob2QgbXVzdCByZXR1cm4gYW4gYXJyYXktbGlrZSBvYmplY3QgY29u
dGFpbmluZyBvbmx5IFN0cmluZ3MgYW5kIFN5bWJvbHMiX3MsIGFkZFByb3BOYW1lKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAKLSAgICBib29s
IHRhcmdldElzRXhlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7CisgICAgYm9v
bCB0YXJnZXRJc0V4ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGdsb2JhbE9iamVjdCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAogICAgIFByb3BlcnR5
TmFtZUFycmF5IHRhcmdldEtleXModm0sIHByb3BlcnR5TmFtZXMucHJvcGVydHlOYW1lTW9kZSgp
LCBwcm9wZXJ0eU5hbWVzLnByaXZhdGVTeW1ib2xNb2RlKCkpOwotICAgIHRhcmdldC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgdGFyZ2V0S2V5cywg
ZW51bWVyYXRpb25Nb2RlKTsKKyAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJv
cGVydHlOYW1lcyh0YXJnZXQsIGdsb2JhbE9iamVjdCwgdGFyZ2V0S2V5cywgZW51bWVyYXRpb25N
b2RlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIFZlY3Rv
cjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3VyYWJsZUtleXM7CiAgICAgVmVjdG9y
PFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5czsKICAgICBmb3Ig
KGNvbnN0IElkZW50aWZpZXImIGlkZW50IDogdGFyZ2V0S2V5cykgewogICAgICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgYm9vbCBpc1Byb3BlcnR5RGVmaW5lZCA9
IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGlkZW50LmltcGwoKSwgZGVz
Y3JpcHRvcik7IAorICAgICAgICBib29sIGlzUHJvcGVydHlEZWZpbmVkID0gdGFyZ2V0LT5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBpZGVudC5pbXBsKCksIGRlc2NyaXB0
b3IpOyAKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAg
ICAgaWYgKGlzUHJvcGVydHlEZWZpbmVkICYmICFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQog
ICAgICAgICAgICAgdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5cy5hcHBlbmQoaWRlbnQuaW1wbCgp
KTsKQEAgLTEwMzAsNyArMTAzMCw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Q
cm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmCiAKICAgICBm
b3IgKFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsIDogdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5cykg
ewogICAgICAgICBpZiAocmVtb3ZlSWZDb250YWluZWRJblVuY2hlY2tlZFJlc3VsdEtleXMoaW1w
bCkgPT0gSXNOb3RDb250YWluZWRJbikgewotICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgbWFrZVN0cmluZygiUHJveHkgb2JqZWN0J3MgJ3RhcmdldCcgaGFzIHRoZSBu
b24tY29uZmlndXJhYmxlIHByb3BlcnR5ICciLCBTdHJpbmcoaW1wbCksICInIHRoYXQgd2FzIG5v
dCBpbiB0aGUgcmVzdWx0IGZyb20gdGhlICdvd25LZXlzJyB0cmFwIikpOworICAgICAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBtYWtlU3RyaW5nKCJQcm94eSBv
YmplY3QncyAndGFyZ2V0JyBoYXMgdGhlIG5vbi1jb25maWd1cmFibGUgcHJvcGVydHkgJyIsIFN0
cmluZyhpbXBsKSwgIicgdGhhdCB3YXMgbm90IGluIHRoZSByZXN1bHQgZnJvbSB0aGUgJ293bktl
eXMnIHRyYXAiKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0x
MDM4LDEzICsxMDM4LDEzIEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0
eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmCiAgICAgaWYgKCF0YXJn
ZXRJc0V4ZW5zaWJsZSkgewogICAgICAgICBmb3IgKFVuaXF1ZWRTdHJpbmdJbXBsKiBpbXBsIDog
dGFyZ2V0Q29uZmlndXJhYmxlS2V5cykgewogICAgICAgICAgICAgaWYgKHJlbW92ZUlmQ29udGFp
bmVkSW5VbmNoZWNrZWRSZXN1bHRLZXlzKGltcGwpID09IElzTm90Q29udGFpbmVkSW4pIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBtYWtlU3RyaW5nKCJQ
cm94eSBvYmplY3QncyBub24tZXh0ZW5zaWJsZSAndGFyZ2V0JyBoYXMgY29uZmlndXJhYmxlIHBy
b3BlcnR5ICciLCBTdHJpbmcoaW1wbCksICInIHRoYXQgd2FzIG5vdCBpbiB0aGUgcmVzdWx0IGZy
b20gdGhlICdvd25LZXlzJyB0cmFwIikpOworICAgICAgICAgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgbWFrZVN0cmluZygiUHJveHkgb2JqZWN0J3Mgbm9uLWV4
dGVuc2libGUgJ3RhcmdldCcgaGFzIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSAnIiwgU3RyaW5nKGlt
cGwpLCAiJyB0aGF0IHdhcyBub3QgaW4gdGhlIHJlc3VsdCBmcm9tIHRoZSAnb3duS2V5cycgdHJh
cCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAodW5jaGVja2VkUmVzdWx0S2V5cy5zaXplKCkpIHsKLSAgICAgICAgICAg
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJQcm94eSBoYW5kbGVyJ3MgJ293bktleXMn
IG1ldGhvZCByZXR1cm5lZCBhIGtleSB0aGF0IHdhcyBub3QgcHJlc2VudCBpbiBpdHMgbm9uLWV4
dGVuc2libGUgdGFyZ2V0Il9zKTsKKyAgICAgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIHJldHVybmVk
IGEga2V5IHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIGl0cyBub24tZXh0ZW5zaWJsZSB0YXJnZXQi
X3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA1Myw3ICsx
MDUzLDcgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYKICAgICAgICAgLy8gRmlsdGVyaW5nIERv
bnRFbnVtIHByb3BlcnRpZXMgaXMgb2JzZXJ2YWJsZSBpbiBwcm94aWVzIGFuZCBtdXN0IG9jY3Vy
IGZvbGxvd2luZyB0aGUgaW52YXJpYW50IGNoZWNrcyBhYm92ZS4KICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0cmFwUmVzdWx0KSB7CiAgICAgICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3du
UHJvcGVydHkpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eVNsb3RD
b21tb24oZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBz
bG90KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEw
NjcsMTU1ICsxMDY3LDE1NSBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVy
dHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JgogICAgIH0KIH0KIAot
dm9pZCBQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVBcnJheSwgRW51
bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgUHJveHlPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUg
ZW51bWVyYXRpb25Nb2RlKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFByb3h5T2JqZWN0Kj4ob2JqZWN0KTsKLSAgICB0aGlzT2JqZWN0LT5wZXJmb3JtR2V0T3duUHJv
cGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVBcnJheSwgZW51bWVyYXRpb25Nb2RlKTsKKyAg
ICB0aGlzT2JqZWN0LT5wZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUpOwogfQogCi12b2lkIFByb3h5T2JqZWN0
OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUgZW51bWVy
YXRpb25Nb2RlKQordm9pZCBQcm94eU9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCiB7CiAg
ICAgTk9fVEFJTF9DQUxMUygpOwotICAgIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKG9iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lQXJyYXksIGVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNPYmpl
Y3Q6OmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZUFy
cmF5LCBlbnVtZXJhdGlvbk1vZGUpOwogfQogCi12b2lkIFByb3h5T2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgUHJveHlPYmplY3Q6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotdm9pZCBQcm94eU9iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQordm9p
ZCBQcm94eU9iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCiB7CiAgICAg
Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnbyBkb3duIHRoZSBnZXRPd25Qcm9wZXJ0eU5hbWVzIHBhdGgu
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBQcm94eU9iamVj
dDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgUHJveHlPYmplY3Q6OmdldEdlbmVy
aWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCi1ib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpCiti
b29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KQog
ewogICAgIE5PX1RBSUxfQ0FMTFMoKTsKIAogICAgIEFTU0VSVChwcm90b3R5cGUuaXNPYmplY3Qo
KSB8fCBwcm90b3R5cGUuaXNOdWxsKCkpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNlU29m
dCgpKSkgewotICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihleGVjLCBzY29wZSk7Cisg
ICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSB0
aGlzLT5oYW5kbGVyKCk7CiAgICAgaWYgKGhhbmRsZXJWYWx1ZS5pc051bGwoKSkgewotICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJldm9rZWRFcnJv
ck1lc3NhZ2UpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IHNfcHJveHlBbHJlYWR5UmV2b2tlZEVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICBKU09iamVjdCogaGFuZGxlciA9IGpzQ2FzdDxKU09iamVjdCo+KGhh
bmRsZXJWYWx1ZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7Ci0gICAgSlNWYWx1ZSBzZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhv
ZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAic2V0UHJvdG90
eXBlT2YiKSwgIidzZXRQcm90b3R5cGVPZicgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIg
c2hvdWxkIGJlIGNhbGxhYmxlIl9zKTsKKyAgICBKU1ZhbHVlIHNldFByb3RvdHlwZU9mTWV0aG9k
ID0gaGFuZGxlci0+Z2V0TWV0aG9kKGdsb2JhbE9iamVjdCwgY2FsbERhdGEsIGNhbGxUeXBlLCBt
YWtlSWRlbnRpZmllcih2bSwgInNldFByb3RvdHlwZU9mIiksICInc2V0UHJvdG90eXBlT2YnIHBy
b3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSJfcyk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgSlNPYmplY3QqIHRhcmdl
dCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChzZXRQcm90b3R5cGVPZk1ldGhvZC5pc1VuZGVm
aW5lZCgpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRhcmdldC0+c2V0UHJv
dG90eXBlKHZtLCBleGVjLCBwcm90b3R5cGUsIHNob3VsZFRocm93SWZDYW50U2V0KSk7CisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGFyZ2V0LT5zZXRQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBzaG91bGRUaHJvd0lmQ2FudFNldCkpOwogCiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0
KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHByb3RvdHlwZSk7CiAgICAgQVNTRVJUKCFhcmd1bWVu
dHMuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMs
IHNldFByb3RvdHlwZU9mTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3Vt
ZW50cyk7CisgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChnbG9iYWxPYmplY3QsIHNldFBy
b3RvdHlwZU9mTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCi0gICAgYm9vbCB0cmFw
UmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7CisgICAgYm9vbCB0cmFw
UmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgCiAgICAgaWYgKCF0cmFwUmVz
dWx0QXNCb29sKSB7CiAgICAgICAgIGlmIChzaG91bGRUaHJvd0lmQ2FudFNldCkKLSAgICAgICAg
ICAgIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJQcm94eSAnc2V0UHJvdG90eXBlT2Yn
IHJldHVybmVkIGZhbHNlIGluZGljYXRpbmcgaXQgY291bGQgbm90IHNldCB0aGUgcHJvdG90eXBl
IHZhbHVlLiBUaGUgb3BlcmF0aW9uIHdhcyBleHBlY3RlZCB0byBzdWNjZWVkIl9zKTsKKyAgICAg
ICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlByb3h5ICdzZXRQ
cm90b3R5cGVPZicgcmV0dXJuZWQgZmFsc2UgaW5kaWNhdGluZyBpdCBjb3VsZCBub3Qgc2V0IHRo
ZSBwcm90b3R5cGUgdmFsdWUuIFRoZSBvcGVyYXRpb24gd2FzIGV4cGVjdGVkIHRvIHN1Y2NlZWQi
X3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCB0YXJnZXRJc0V4
dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKKyAgICBib29sIHRhcmdldElz
RXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGlmICh0YXJnZXRJc0V4dGVuc2li
bGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSlNWYWx1ZSB0YXJnZXRQcm90b3R5cGUg
PSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSB0YXJnZXRQcm90
b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgaWYgKCFzYW1lVmFsdWUoZXhlYywg
cHJvdG90eXBlLCB0YXJnZXRQcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUsICJQcm94eSAnc2V0UHJvdG90eXBlT2YnIHRyYXAgcmV0dXJuZWQgdHJ1ZSB3
aGVuIGl0cyB0YXJnZXQgaXMgbm9uLWV4dGVuc2libGUgYW5kIHRoZSBuZXcgcHJvdG90eXBlIHZh
bHVlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBwcm90b3R5cGUgdmFsdWUuIEl0IHNo
b3VsZCBoYXZlIHJldHVybmVkIGZhbHNlIl9zKTsKKyAgICBpZiAoIXNhbWVWYWx1ZShnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgdGFyZ2V0UHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm94eSAnc2V0UHJvdG90eXBlT2YnIHRyYXAg
cmV0dXJuZWQgdHJ1ZSB3aGVuIGl0cyB0YXJnZXQgaXMgbm9uLWV4dGVuc2libGUgYW5kIHRoZSBu
ZXcgcHJvdG90eXBlIHZhbHVlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBwcm90b3R5
cGUgdmFsdWUuIEl0IHNob3VsZCBoYXZlIHJldHVybmVkIGZhbHNlIl9zKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb3h5T2Jq
ZWN0OjpzZXRQcm90b3R5cGUoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCkKK2Jvb2wgUHJveHlPYmpl
Y3Q6OnNldFByb3RvdHlwZShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCkKIHsK
LSAgICByZXR1cm4ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqZWN0KS0+cGVyZm9ybVNldFByb3Rv
dHlwZShleGVjLCBwcm90b3R5cGUsIHNob3VsZFRocm93SWZDYW50U2V0KTsKKyAgICByZXR1cm4g
anNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqZWN0KS0+cGVyZm9ybVNldFByb3RvdHlwZShnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwogfQogCi1KU1ZhbHVlIFBy
b3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUg
UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKICAgICBOT19UQUlMX0NBTExTKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vy
c2VTb2Z0KCkpKSB7Ci0gICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIHNjb3Bl
KTsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUg
PSB0aGlzLT5oYW5kbGVyKCk7CiAgICAgaWYgKGhhbmRsZXJWYWx1ZS5pc051bGwoKSkgewotICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBzX3Byb3h5QWxyZWFkeVJldm9rZWRF
cnJvck1lc3NhZ2UpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIHNfcHJveHlBbHJlYWR5UmV2b2tlZEVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgSlNPYmplY3QqIGhhbmRsZXIgPSBqc0Nhc3Q8SlNPYmplY3QqPiho
YW5kbGVyVmFsdWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxU
eXBlOwotICAgIEpTVmFsdWUgZ2V0UHJvdG90eXBlT2ZNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImdldFByb3Rv
dHlwZU9mIiksICInZ2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVy
IHNob3VsZCBiZSBjYWxsYWJsZSJfcyk7CisgICAgSlNWYWx1ZSBnZXRQcm90b3R5cGVPZk1ldGhv
ZCA9IGhhbmRsZXItPmdldE1ldGhvZChnbG9iYWxPYmplY3QsIGNhbGxEYXRhLCBjYWxsVHlwZSwg
bWFrZUlkZW50aWZpZXIodm0sICJnZXRQcm90b3R5cGVPZiIpLCAiJ2dldFByb3RvdHlwZU9mJyBw
cm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiX3MpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU09iamVjdCogdGFyZ2V0
ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKGdldFByb3RvdHlwZU9mTWV0aG9kLmlzVW5kZWZp
bmVkKCkpIAotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRhcmdldC0+Z2V0UHJv
dG90eXBlKHZtLCBleGVjKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdGFy
Z2V0LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpOwogCiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBB
U1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwotICAgIEpTVmFsdWUgdHJhcFJlc3Vs
dCA9IGNhbGwoZXhlYywgZ2V0UHJvdG90eXBlT2ZNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
aGFuZGxlciwgYXJndW1lbnRzKTsKKyAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGdsb2Jh
bE9iamVjdCwgZ2V0UHJvdG90eXBlT2ZNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxl
ciwgYXJndW1lbnRzKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAg
ICAgaWYgKCF0cmFwUmVzdWx0LmlzT2JqZWN0KCkgJiYgIXRyYXBSZXN1bHQuaXNOdWxsKCkpIHsK
LSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIlByb3h5IGhhbmRsZXIncyAn
Z2V0UHJvdG90eXBlT2YnIHRyYXAgc2hvdWxkIGVpdGhlciByZXR1cm4gYW4gb2JqZWN0IG9yIG51
bGwiX3MpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQ
cm94eSBoYW5kbGVyJ3MgJ2dldFByb3RvdHlwZU9mJyB0cmFwIHNob3VsZCBlaXRoZXIgcmV0dXJu
IGFuIG9iamVjdCBvciBudWxsIl9zKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAg
ICBib29sIHRhcmdldElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwor
ICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZ2xvYmFs
T2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIGlmICh0
YXJnZXRJc0V4dGVuc2libGUpCiAgICAgICAgIHJldHVybiB0cmFwUmVzdWx0OwogCi0gICAgSlNW
YWx1ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Cisg
ICAgSlNWYWx1ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZ2xv
YmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIGlm
ICghc2FtZVZhbHVlKGV4ZWMsIHRhcmdldFByb3RvdHlwZSwgdHJhcFJlc3VsdCkpIHsKLSAgICAg
ICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIlByb3h5J3MgJ2dldFByb3RvdHlwZU9m
JyB0cmFwIGZvciBhIG5vbi1leHRlbnNpYmxlIHRhcmdldCBzaG91bGQgcmV0dXJuIHRoZSBzYW1l
IHZhbHVlIGFzIHRoZSB0YXJnZXQncyBwcm90b3R5cGUiX3MpOworICAgIGlmICghc2FtZVZhbHVl
KGdsb2JhbE9iamVjdCwgdGFyZ2V0UHJvdG90eXBlLCB0cmFwUmVzdWx0KSkgeworICAgICAgICB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJQcm94eSdzICdnZXRQcm90b3R5
cGVPZicgdHJhcCBmb3IgYSBub24tZXh0ZW5zaWJsZSB0YXJnZXQgc2hvdWxkIHJldHVybiB0aGUg
c2FtZSB2YWx1ZSBhcyB0aGUgdGFyZ2V0J3MgcHJvdG90eXBlIl9zKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKICAgICByZXR1cm4gdHJhcFJlc3VsdDsKIH0KIAotSlNWYWx1ZSBQcm94
eU9iamVjdDo6Z2V0UHJvdG90eXBlKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykK
K0pTVmFsdWUgUHJveHlPYmplY3Q6OmdldFByb3RvdHlwZShKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBqc0Nhc3Q8UHJveHlPYmpl
Y3QqPihvYmplY3QpLT5wZXJmb3JtR2V0UHJvdG90eXBlKGV4ZWMpOworICAgIHJldHVybiBqc0Nh
c3Q8UHJveHlPYmplY3QqPihvYmplY3QpLT5wZXJmb3JtR2V0UHJvdG90eXBlKGdsb2JhbE9iamVj
dCk7CiB9CiAKIHZvaWQgUHJveHlPYmplY3Q6OnJldm9rZShWTSYgdm0pCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAppbmRleCBmN2MxMjdlNGZjYjE2ZjBiYjY4
MmFiNDEzZDczZWZiNDk5NWJiM2E4Li5mYThmZTllY2U4ZmIwMDAyZDdiOGU0MTdlMGU4M2YxNTIx
ZWMyMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgK
QEAgLTM2LDEyICszNiwxMiBAQCBjbGFzcyBQcm94eU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKIAogICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IFBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIAotICAgIHN0YXRpYyBQcm94eU9iamVjdCogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0
YXJnZXQsIEpTVmFsdWUgaGFuZGxlcikKKyAgICBzdGF0aWMgUHJveHlPYmplY3QqIGNyZWF0ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHRhcmdldCwgSlNWYWx1ZSBoYW5k
bGVyKQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgVk0mIHZt
ID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBQ
cm94eU9iamVjdDo6c3RydWN0dXJlRm9yVGFyZ2V0KGdsb2JhbE9iamVjdCwgdGFyZ2V0KTsKICAg
ICAgICAgUHJveHlPYmplY3QqIHByb3h5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJv
eHlPYmplY3Q+KHZtLmhlYXApKSBQcm94eU9iamVjdCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAg
cHJveHktPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjLCB0YXJnZXQsIGhhbmRsZXIpOworICAgICAg
ICBwcm94eS0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCwgdGFyZ2V0LCBoYW5kbGVy
KTsKICAgICAgICAgcmV0dXJuIHByb3h5OwogICAgIH0KIApAQCAtNjIsNTAgKzYyLDUwIEBAIGNs
YXNzIFByb3h5T2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIEpT
T2JqZWN0KiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQogICAgIEpT
VmFsdWUgaGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlci5nZXQoKTsgfQogCi0gICAg
c3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwq
LCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOwotICAgIGJvb2wgcHV0QnlJbmRleENvbW1vbihFeGVjU3RhdGUqLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHB1dFZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKLSAgICBKU1ZhbHVlIHBlcmZvcm1HZXRQcm90b3R5cGUoRXhlY1N0YXRlKik7
CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUlu
ZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBib29sIHB1dEJ5SW5kZXhDb21tb24oSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHB1dFZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBKU1ZhbHVlIHBlcmZvcm1HZXRQ
cm90b3R5cGUoSlNHbG9iYWxPYmplY3QqKTsKICAgICB2b2lkIHJldm9rZShWTSYpOwogICAgIGJv
b2wgaXNSZXZva2VkKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
UHJveHlPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSB0YXJnZXQsIEpTVmFsdWUg
aGFuZGxlcik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSB0YXJnZXQsIEpTVmFsdWUgaGFuZGxlcik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogc3RydWN0dXJlRm9yVGFyZ2V0KEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSB0YXJnZXQpOwogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0
cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKICAgICBzdGF0aWMg
Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsK
LSAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwq
LCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBib29sIHBy
ZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIGJvb2wg
aXNFeHRlbnNpYmxlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIGJvb2wgZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2
b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMg
Ym9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlIHByb3RvdHlw
ZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgZ2V0UHJv
dG90eXBlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRp
YyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIGJvb2wgcHJldmVudEV4dGVuc2lvbnMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBib29sIGlzRXh0ZW5zaWJs
ZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
IHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIAotICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgYm9vbCBwZXJmb3JtSW50ZXJuYWxNZXRo
b2RHZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgIGJvb2wgcGVyZm9ybUdldChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgIGJvb2wgcGVyZm9ybUhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24o
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wg
cGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgcGVyZm9ybUdldChKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBwZXJmb3JtSGFz
UHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBEZWZhdWx0RGVsZXRlRnVuY3Rpb24+Ci0gICAgYm9vbCBw
ZXJmb3JtRGVsZXRlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgRGVmYXVsdERlbGV0ZUZ1bmN0
aW9uKTsKKyAgICBib29sIHBlcmZvcm1EZWxldGUoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIERlZmF1bHREZWxldGVGdW5jdGlvbik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBlcmZv
cm1EZWZhdWx0UHV0RnVuY3Rpb24+Ci0gICAgYm9vbCBwZXJmb3JtUHV0KEV4ZWNTdGF0ZSosIEpT
VmFsdWUgcHV0VmFsdWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIFBlcmZvcm1E
ZWZhdWx0UHV0RnVuY3Rpb24sIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgIGJvb2wgcGVyZm9ybVBy
ZXZlbnRFeHRlbnNpb25zKEV4ZWNTdGF0ZSopOwotICAgIGJvb2wgcGVyZm9ybUlzRXh0ZW5zaWJs
ZShFeGVjU3RhdGUqKTsKLSAgICBib29sIHBlcmZvcm1EZWZpbmVPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwotICAgIHZvaWQgcGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIGJvb2wgcGVyZm9ybVNl
dFByb3RvdHlwZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJv
d0lmQ2FudFNldCk7CisgICAgYm9vbCBwZXJmb3JtUHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwdXRWYWx1ZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgUGVyZm9ybURlZmF1
bHRQdXRGdW5jdGlvbiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwZXJmb3JtUHJldmVu
dEV4dGVuc2lvbnMoSlNHbG9iYWxPYmplY3QqKTsKKyAgICBib29sIHBlcmZvcm1Jc0V4dGVuc2li
bGUoSlNHbG9iYWxPYmplY3QqKTsKKyAgICBib29sIHBlcmZvcm1EZWZpbmVPd25Qcm9wZXJ0eShK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwg
Ym9vbCBzaG91bGRUaHJvdyk7CisgICAgdm9pZCBwZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyhK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICBib29sIHBlcmZvcm1TZXRQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
dHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+IG1fdGFyZ2V0OwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2hhbmRsZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3Qu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCmluZGV4
IDMwOGUyMzQ5YTRiYWNlMDY5MDIwODEzYjAwMGE2MjBkMTk5NTMyMGQuLmZmZmM4NWFkMGYyOGVh
Y2VlMjA4Yjk3YjZjYzI3ZWJlMThkZjQyNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIFB1dFBy
b3BlcnR5U2xvdCB7CiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIDogdWludDhfdCB7IFVuY2FjaGFi
bGUsIEV4aXN0aW5nUHJvcGVydHksIE5ld1Byb3BlcnR5LCBTZXR0ZXJQcm9wZXJ0eSwgQ3VzdG9t
VmFsdWUsIEN1c3RvbUFjY2Vzc29yIH07CiAgICAgZW51bSBDb250ZXh0IHsgVW5rbm93bkNvbnRl
eHQsIFB1dEJ5SWQsIFB1dEJ5SWRFdmFsIH07Ci0gICAgdHlwZWRlZiBib29sICgqUHV0VmFsdWVG
dW5jKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB2YWx1ZSk7CisgICAgdHlwZWRlZiBib29sICgqUHV0VmFsdWVGdW5jKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKIAog
ICAgIFB1dFByb3BlcnR5U2xvdChKU1ZhbHVlIHRoaXNWYWx1ZSwgYm9vbCBpc1N0cmljdE1vZGUg
PSBmYWxzZSwgQ29udGV4dCBjb250ZXh0ID0gVW5rbm93bkNvbnRleHQsIGJvb2wgaXNJbml0aWFs
aXphdGlvbiA9IGZhbHNlKQogICAgICAgICA6IG1fYmFzZSgwKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAppbmRleCA4NDZkMjkzOTMyYjRmM2Zl
ODJkNzA3MWUxNGJhMGRjYjhmYjI3NTUyLi5iNThlNTI3NzBjN2NiODNjYTU2MmE1MjAwNjk5NGJh
ZDVmYmFhYmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZs
ZWN0T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0
T2JqZWN0LmNwcApAQCAtOTQsMzYgKzk0LDM2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVmbGVjdE9iamVjdENvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAK
ICAgICBKU1ZhbHVlIHRhcmdldCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0
YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiUmVmbGVjdC5jb25zdHJ1Y3QgcmVxdWlyZXMgdGhl
IGZpcnN0IGFyZ3VtZW50IGJlIGEgY29uc3RydWN0b3IiX3MpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUmVmbGVj
dC5jb25zdHJ1Y3QgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGEgY29uc3RydWN0b3Ii
X3MpKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RU
eXBlIGNvbnN0cnVjdFR5cGU7CiAgICAgaWYgKCF0YXJnZXQuaXNDb25zdHJ1Y3Rvcih2bSwgY29u
c3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlJlZmxlY3QuY29uc3RydWN0IHJl
cXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIGNvbnN0cnVjdG9yIl9zKSk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIlJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIGNv
bnN0cnVjdG9yIl9zKSk7CiAKICAgICBKU1ZhbHVlIG5ld1RhcmdldCA9IHRhcmdldDsKICAgICBp
ZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPj0gMykgewogICAgICAgICBuZXdUYXJnZXQg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDIpOwogICAgICAgICBpZiAoIW5ld1RhcmdldC5pc0NvbnN0
cnVjdG9yKHZtKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSB0
aGlyZCBhcmd1bWVudCBiZSBhIGNvbnN0cnVjdG9yIGlmIHByZXNlbnQiX3MpKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIlJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSB0aGlyZCBhcmd1bWVudCBiZSBh
IGNvbnN0cnVjdG9yIGlmIHByZXNlbnQiX3MpKTsKICAgICB9CiAKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgSlNPYmplY3QqIGFyZ3VtZW50c09iamVjdCA9IGpzRHlu
YW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7CiAgICAgaWYg
KCFhcmd1bWVudHNPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dU
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRo
ZSBzZWNvbmQgYXJndW1lbnQgYmUgYW4gb2JqZWN0Il9zKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlJlZmxlY3Qu
Y29uc3RydWN0IHJlcXVpcmVzIHRoZSBzZWNvbmQgYXJndW1lbnQgYmUgYW4gb2JqZWN0Il9zKSk7
CiAKLSAgICBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZShjYWxsRnJhbWUsIGFyZ3VtZW50c09iamVj
dCwgUnVudGltZVR5cGVNYXNrQWxsVHlwZXMsICJUaGlzIGVycm9yIG11c3Qgbm90IGJlIHJhaXNl
ZCJfcywgIlRoaXMgZXJyb3IgbXVzdCBub3QgYmUgcmFpc2VkIl9zLCBbJl0gKEpTVmFsdWUgdmFs
dWUsIFJ1bnRpbWVUeXBlKSAtPiBib29sIHsKKyAgICBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZShn
bG9iYWxPYmplY3QsIGFyZ3VtZW50c09iamVjdCwgUnVudGltZVR5cGVNYXNrQWxsVHlwZXMsICJU
aGlzIGVycm9yIG11c3Qgbm90IGJlIHJhaXNlZCJfcywgIlRoaXMgZXJyb3IgbXVzdCBub3QgYmUg
cmFpc2VkIl9zLCBbJl0gKEpTVmFsdWUgdmFsdWUsIFJ1bnRpbWVUeXBlKSAtPiBib29sIHsKICAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAoYXJndW1lbnRzLm92ZXJmbG93
Q2hlY2tOb3ROZWVkZWQoKSwgZW5jb2RlZEpTVmFsdWUoKSkpOwogICAgIGlmIChVTkxJS0VMWShh
cmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAg
fQogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoY29uc3Ry
dWN0KGNhbGxGcmFtZSwgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmd1
bWVudHMsIG5ld1RhcmdldCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShjb25zdHJ1Y3QoZ2xvYmFsT2JqZWN0LCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUs
IGNvbnN0cnVjdERhdGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KSkpOwogfQogCiAvLyBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmRlZmluZXByb3BlcnR5CkBAIC0x
MzQsMTIgKzEzNCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmpl
Y3REZWZpbmVQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgSlNWYWx1ZSB0
YXJnZXQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0
KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZy
YW1lLCBzY29wZSwgIlJlZmxlY3QuZGVmaW5lUHJvcGVydHkgcmVxdWlyZXMgdGhlIGZpcnN0IGFy
Z3VtZW50IGJlIGFuIG9iamVjdCJfcykpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlJl
ZmxlY3QuZGVmaW5lUHJvcGVydHkgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9i
amVjdCJfcykpOworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gY2FsbEZyYW1lLT5hcmd1bWVudCgx
KS50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3Jp
cHRvcjsKLSAgICBib29sIHN1Y2Nlc3MgPSB0b1Byb3BlcnR5RGVzY3JpcHRvcihjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpOworICAgIGJvb2wgc3VjY2VzcyA9
IHRvUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgy
KSwgZGVzY3JpcHRvcik7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkg
PT0gc3VjY2Vzcyk7CiAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkKICAgICAgICAgcmV0dXJu
IGVuY29kZWRKU1ZhbHVlKCk7CkBAIC0xNDksNyArMTQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0RGVmaW5lUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE8KICAgICAvLyBSZWZsZWN0LmRlZmluZVByb3BlcnR5IHNob3VsZCBub3QgdGhyb3cgYW4g
ZXJyb3Igd2hlbiB0aGUgZGVmaW5lT3duUHJvcGVydHkgb3BlcmF0aW9uIGZhaWxzLgogICAgIGJv
b2wgc2hvdWxkVGhyb3cgPSBmYWxzZTsKICAgICBKU09iamVjdCogdGFyZ2V0T2JqZWN0ID0gYXNP
YmplY3QodGFyZ2V0KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odGFyZ2V0T2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blBy
b3BlcnR5KHRhcmdldE9iamVjdCwgY2FsbEZyYW1lLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHNob3VsZFRocm93KSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odGFyZ2V0T2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93
blByb3BlcnR5KHRhcmdldE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIHNob3VsZFRocm93KSkpKTsKIH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9l
Y21hMjYyLyNzZWMtcmVmbGVjdC5nZXQKQEAgLTE2MCw5ICsxNjAsOSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RHZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbAogCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlJlZmxlY3QuZ2V0IHJlcXVp
cmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiX3MpKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUmVm
bGVjdC5nZXQgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCJfcykpOwog
Ci0gICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDEpLnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKKyAgICBjb25zdCBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmpl
Y3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
CiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsKQEAgLTE3MCw3ICsxNzAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RHZXQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbAogICAgICAgICByZWNlaXZlciA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMik7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUodGFyZ2V0LmdldChjYWxsRnJhbWUsIHByb3BlcnR5TmFtZSwgc2xvdCkp
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0YXJnZXQu
Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkpOwogfQogCiAvLyBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmdldG93bnByb3BlcnR5ZGVzY3Jp
cHRvcgpAQCAtMTgxLDEyICsxODEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTR2xvYmFsT2JqZWMKIAogICAg
IEpTVmFsdWUgdGFyZ2V0ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXRhcmdl
dC5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVy
cm9yKGNhbGxGcmFtZSwgc2NvcGUsICJSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBy
ZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0Il9zKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1
bWVudCBiZSBhbiBvYmplY3QiX3MpKTsKIAotICAgIGF1dG8ga2V5ID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgxKS50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CisgICAgYXV0byBrZXkgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGNhbGxGcmFtZSwgYXNPYmplY3QodGFyZ2V0KSwga2V5KSkpOworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdENvbnN0cnVj
dG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbE9iamVjdCwgYXNPYmplY3QodGFyZ2V0
KSwga2V5KSkpOwogfQogCiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1y
ZWZsZWN0LmdldHByb3RvdHlwZW9mCkBAIC0xOTcsOCArMTk3LDggQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0UHJvdG90eXBlT2YoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE8KIAogICAgIEpTVmFsdWUgdGFyZ2V0ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
ICAgICBpZiAoIXRhcmdldC5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJSZWZsZWN0LmdldFByb3RvdHlw
ZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiX3MpKTsKLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0YXJnZXQp
LT5nZXRQcm90b3R5cGUodm0sIGNhbGxGcmFtZSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUmVmbGVjdC5nZXRQ
cm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0Il9zKSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3Qo
dGFyZ2V0KS0+Z2V0UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpKSk7CiB9CiAKIC8vIGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3QuaXNleHRlbnNpYmxlCkBAIC0y
MDksOSArMjA5LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0
SXNFeHRlbnNpYmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKIAogICAgIEpTVmFsdWUgdGFy
Z2V0ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIXRhcmdldC5pc09iamVjdCgp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFt
ZSwgc2NvcGUsICJSZWZsZWN0LmlzRXh0ZW5zaWJsZSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1l
bnQgYmUgYW4gb2JqZWN0Il9zKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlJlZmxlY3QuaXNFeHRlbnNpYmxlIHJl
cXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiX3MpKTsKIAotICAgIGJvb2wg
aXNFeHRlbnNpYmxlID0gYXNPYmplY3QodGFyZ2V0KS0+aXNFeHRlbnNpYmxlKGNhbGxGcmFtZSk7
CisgICAgYm9vbCBpc0V4dGVuc2libGUgPSBhc09iamVjdCh0YXJnZXQpLT5pc0V4dGVuc2libGUo
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0V4dGVuc2li
bGUpKTsKIH0KQEAgLTIyNCw4ICsyMjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplY3RPd25LZXlzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICAg
ICBKU1ZhbHVlIHRhcmdldCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCF0YXJn
ZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVF
cnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiUmVmbGVjdC5vd25LZXlzIHJlcXVpcmVzIHRoZSBmaXJz
dCBhcmd1bWVudCBiZSBhbiBvYmplY3QiX3MpKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNP
YmplY3QqPih0YXJnZXQpLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiUmVmbGVjdC5vd25L
ZXlzIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiX3MpKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMo
Z2xvYmFsT2JqZWN0LCBqc0Nhc3Q8SlNPYmplY3QqPih0YXJnZXQpLCBQcm9wZXJ0eU5hbWVNb2Rl
OjpTdHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpKTsK
IH0KIAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5wcmV2
ZW50ZXh0ZW5zaW9ucwpAQCAtMjM2LDkgKzIzNiw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcmVmbGVjdE9iamVjdFByZXZlbnRFeHRlbnNpb25zKEpTR2xvYmFsT2JqZWN0KiBnbG9i
CiAKICAgICBKU1ZhbHVlIHRhcmdldCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgaWYg
KCF0YXJnZXQuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyBy
ZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0Il9zKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IlJlZmxlY3QucHJldmVudEV4dGVuc2lvbnMgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJl
IGFuIG9iamVjdCJfcykpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh0YXJnZXQp
OwotICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRFeHRl
bnNpb25zKG9iamVjdCwgY2FsbEZyYW1lKTsKKyAgICBib29sIHJlc3VsdCA9IG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGdsb2JhbE9iamVjdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7CiB9CkBAIC0yNTEsMTAgKzI1
MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RTZXQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbAogCiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgIlJlZmxlY3Quc2V0IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3Qi
X3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiUmVmbGVjdC5zZXQgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50
IGJlIGFuIG9iamVjdCJfcykpOwogICAgIEpTT2JqZWN0KiB0YXJnZXRPYmplY3QgPSBhc09iamVj
dCh0YXJnZXQpOwogCi0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDEpLnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShnbG9iYWxPYmplY3QpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1
ZSByZWNlaXZlciA9IHRhcmdldDsKQEAgLTI2NCw3ICsyNjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RTZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbAogICAgIC8vIERvIG5vdCByYWlzZSBhbnkgcmVhZG9ubHkgZXJyb3JzIHRoYXQgaGFw
cGVuIGluIHN0cmljdCBtb2RlLgogICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSBmYWxz
ZTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChyZWNlaXZlciwgc2hvdWxkVGhyb3dJZkNhbnRT
ZXQpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0YXJnZXRPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRhcmdldE9iamVjdCwgY2Fs
bEZyYW1lLCBwcm9wZXJ0eU5hbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMiksIHNsb3QpKSkpOwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
YXJnZXRPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRhcmdldE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMiksIHNsb3QpKSkpOwogfQog
CiAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZsZWN0LnNldHByb3Rv
dHlwZW9mCkBAIC0yNzUsMTUgKzI3NSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplY3RTZXRQcm90b3R5cGVPZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAg
ICAgSlNWYWx1ZSB0YXJnZXQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICghdGFy
Z2V0LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlJlZmxlY3Quc2V0UHJvdG90eXBlT2YgcmVxdWlyZXMg
dGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCJfcykpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJSZWZsZWN0
LnNldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3Qi
X3MpKTsKICAgICBKU1ZhbHVlIHByb3RvID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKICAgICBp
ZiAoIXByb3RvLmlzT2JqZWN0KCkgJiYgIXByb3RvLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJSZWZsZWN0
LnNldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBzZWNvbmQgYXJndW1lbnQgYmUgZWl0aGVyIGFu
IG9iamVjdCBvciBudWxsIl9zKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlJlZmxlY3Quc2V0UHJvdG90eXBlT2Yg
cmVxdWlyZXMgdGhlIHNlY29uZCBhcmd1bWVudCBiZSBlaXRoZXIgYW4gb2JqZWN0IG9yIG51bGwi
X3MpKTsKIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh0YXJnZXQpOwogCiAgICAg
Ym9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IGZhbHNlOwotICAgIGJvb2wgZGlkU2V0UHJvdG90
eXBlID0gb2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGNhbGxGcmFtZSwgcHJvdG8sIHNob3VsZFRo
cm93SWZDYW50U2V0KTsKKyAgICBib29sIGRpZFNldFByb3RvdHlwZSA9IG9iamVjdC0+c2V0UHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZGlkU2V0UHJvdG90eXBlKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCmluZGV4IGNjYzgwOGMyYzAyNzVmNTg1NTJk
MmU0MTkwZDU1NjllNzFkN2UzYWUuLjYyMmMwZGQ4YzZjMmI1NDA1MDAxMjMwMmEyY2I0NTNhZDU4
ZDNiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCkBAIC02Myw3ICs2
Myw3IEBAIGNsYXNzIFJlZ0V4cCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIVlhcnI6Omhhc0Vycm9yKG1fY29uc3RydWN0aW9uRXJy
b3JDb2RlKTsgfQogICAgIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJu
IFlhcnI6OmVycm9yTWVzc2FnZShtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7IH0KLSAgICBKU09i
amVjdCogZXJyb3JUb1Rocm93KEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4gWWFycjo6ZXJyb3JU
b1Rocm93KGV4ZWMsIG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKTsgfQorICAgIEpTT2JqZWN0KiBl
cnJvclRvVGhyb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyByZXR1cm4gWWFycjo6
ZXJyb3JUb1Rocm93KGdsb2JhbE9iamVjdCwgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUpOyB9CiAg
ICAgdm9pZCByZXNldCgpCiAgICAgewogICAgICAgICBtX3N0YXRlID0gTm90Q29tcGlsZWQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1
bHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0
LmNwcAppbmRleCA5NTQxMjQzYjk1NjM3YTVmZGZmNzg0NmRmODJjMTlhNDNjOTZkMzcyLi4xNzJj
YjlhNmM1NDVmNWY0NzUxNmY0YjhhOGQ5MDk5ODMyOTk3OGM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAKQEAgLTQ0LDkg
KzQ0LDkgQEAgdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogICAgIH0KIH0KIAotSlNBcnJheSogUmVnRXhwQ2FjaGVkUmVzdWx0Ojps
YXN0UmVzdWx0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG93bmVyKQorSlNBcnJheSogUmVn
RXhwQ2FjaGVkUmVzdWx0OjpsYXN0UmVzdWx0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBvd25lcikKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBpZiAoIW1fcmVpZmllZCkgewpAQCAtNTYsOSArNTYsOSBAQCBKU0Fy
cmF5KiBSZWdFeHBDYWNoZWRSZXN1bHQ6Omxhc3RSZXN1bHQoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb3duZXIpCiAKICAgICAgICAgSlNBcnJheSogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAg
ICAgaWYgKG1fcmVzdWx0KQotICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlUmVnRXhwTWF0Y2hl
c0FycmF5KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbV9sYXN0SW5wdXQuZ2V0
KCksIG1fbGFzdFJlZ0V4cC5nZXQoKSwgbV9yZXN1bHQuc3RhcnQpOworICAgICAgICAgICAgcmVz
dWx0ID0gY3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbE9iamVjdCwgbV9sYXN0SW5wdXQu
Z2V0KCksIG1fbGFzdFJlZ0V4cC5nZXQoKSwgbV9yZXN1bHQuc3RhcnQpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheShleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1fbGFzdElucHV0LmdldCgpLCBtX2xhc3RSZWdFeHAu
Z2V0KCkpOworICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVzQXJy
YXkoZ2xvYmFsT2JqZWN0LCBtX2xhc3RJbnB1dC5nZXQoKSwgbV9sYXN0UmVnRXhwLmdldCgpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICAgICAg
bV9yZWlmaWVkUmVzdWx0LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIocmVzdWx0KTsKQEAgLTcwLDUy
ICs3MCw1MiBAQCBKU0FycmF5KiBSZWdFeHBDYWNoZWRSZXN1bHQ6Omxhc3RSZXN1bHQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb3duZXIpCiAgICAgcmV0dXJuIG1fcmVpZmllZFJlc3VsdC5n
ZXQoKTsKIH0KIAotSlNTdHJpbmcqIFJlZ0V4cENhY2hlZFJlc3VsdDo6bGVmdENvbnRleHQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb3duZXIpCitKU1N0cmluZyogUmVnRXhwQ2FjaGVkUmVz
dWx0OjpsZWZ0Q29udGV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCog
b3duZXIpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIHJlaWZpZWQuCi0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgbGFzdFJlc3VsdChleGVjLCBv
d25lcik7CisgICAgbGFzdFJlc3VsdChnbG9iYWxPYmplY3QsIG93bmVyKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGlmICghbV9yZWlmaWVkTGVmdENv
bnRleHQpIHsKLSAgICAgICAgSlNTdHJpbmcqIGxlZnRDb250ZXh0ID0ganNTdWJzdHJpbmcoZXhl
YywgbV9yZWlmaWVkSW5wdXQuZ2V0KCksIDAsIG1fcmVzdWx0LnN0YXJ0KTsKKyAgICAgICAgSlNT
dHJpbmcqIGxlZnRDb250ZXh0ID0ganNTdWJzdHJpbmcoZ2xvYmFsT2JqZWN0LCBtX3JlaWZpZWRJ
bnB1dC5nZXQoKSwgMCwgbV9yZXN1bHQuc3RhcnQpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgbV9yZWlmaWVkTGVmdENvbnRleHQuc2V0KHZt
LCBvd25lciwgbGVmdENvbnRleHQpOwogICAgIH0KICAgICByZXR1cm4gbV9yZWlmaWVkTGVmdENv
bnRleHQuZ2V0KCk7CiB9CiAKLUpTU3RyaW5nKiBSZWdFeHBDYWNoZWRSZXN1bHQ6OnJpZ2h0Q29u
dGV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvd25lcikKK0pTU3RyaW5nKiBSZWdFeHBD
YWNoZWRSZXN1bHQ6OnJpZ2h0Q29udGV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogb3duZXIpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIHJlaWZpZWQuCi0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgbGFzdFJlc3Vs
dChleGVjLCBvd25lcik7CisgICAgbGFzdFJlc3VsdChnbG9iYWxPYmplY3QsIG93bmVyKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGlmICghbV9yZWlm
aWVkUmlnaHRDb250ZXh0KSB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fcmVpZmllZElu
cHV0LT5sZW5ndGgoKTsKLSAgICAgICAgSlNTdHJpbmcqIHJpZ2h0Q29udGV4dCA9IGpzU3Vic3Ry
aW5nKGV4ZWMsIG1fcmVpZmllZElucHV0LmdldCgpLCBtX3Jlc3VsdC5lbmQsIGxlbmd0aCAtIG1f
cmVzdWx0LmVuZCk7CisgICAgICAgIEpTU3RyaW5nKiByaWdodENvbnRleHQgPSBqc1N1YnN0cmlu
ZyhnbG9iYWxPYmplY3QsIG1fcmVpZmllZElucHV0LmdldCgpLCBtX3Jlc3VsdC5lbmQsIGxlbmd0
aCAtIG1fcmVzdWx0LmVuZCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwogICAgICAgICBtX3JlaWZpZWRSaWdodENvbnRleHQuc2V0KHZtLCBvd25lciwgcmln
aHRDb250ZXh0KTsKICAgICB9CiAgICAgcmV0dXJuIG1fcmVpZmllZFJpZ2h0Q29udGV4dC5nZXQo
KTsKIH0KIAotdm9pZCBSZWdFeHBDYWNoZWRSZXN1bHQ6OnNldElucHV0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG93bmVyLCBKU1N0cmluZyogaW5wdXQpCit2b2lkIFJlZ0V4cENhY2hlZFJl
c3VsdDo6c2V0SW5wdXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG93
bmVyLCBKU1N0cmluZyogaW5wdXQpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIHJlaWZpZWQs
IG90aGVyd2lzZSBtX3JlaWZpZWRJbnB1dCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgbGFzdFJlc3VsdChleGVjLCBv
d25lcik7CisgICAgbGFzdFJlc3VsdChnbG9iYWxPYmplY3QsIG93bmVyKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGxlZnRDb250ZXh0KGV4ZWMsIG93bmVy
KTsKKyAgICBsZWZ0Q29udGV4dChnbG9iYWxPYmplY3QsIG93bmVyKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIHJpZ2h0Q29udGV4dChleGVjLCBvd25lcik7
CisgICAgcmlnaHRDb250ZXh0KGdsb2JhbE9iamVjdCwgb3duZXIpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgQVNTRVJUKG1fcmVpZmllZCk7CiAgICAgbV9y
ZWlmaWVkSW5wdXQuc2V0KHZtLCBvd25lciwgaW5wdXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuaAppbmRleCA5NmQ5NmJjMzRhMTdl
MDI3NmQ5ZDBiYTljOGQwZTUzMjUyNjFkMzdjLi41YjRkN2I4ZjEyY2FhYjBmNzM1OTk0MDMxYWY5
ZTBhZjkzYmQxNmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBDYWNoZWRSZXN1bHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBDYWNoZWRSZXN1bHQuaApAQCAtNTQsMTEgKzU0LDExIEBAIGNsYXNzIFJlZ0V4cENhY2hl
ZFJlc3VsdCB7CiAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKICAgICB9CiAK
LSAgICBKU0FycmF5KiBsYXN0UmVzdWx0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBvd25lcik7Ci0g
ICAgdm9pZCBzZXRJbnB1dChFeGVjU3RhdGUqLCBKU09iamVjdCogb3duZXIsIEpTU3RyaW5nKik7
CisgICAgSlNBcnJheSogbGFzdFJlc3VsdChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBvd25l
cik7CisgICAgdm9pZCBzZXRJbnB1dChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBvd25lciwg
SlNTdHJpbmcqKTsKIAotICAgIEpTU3RyaW5nKiBsZWZ0Q29udGV4dChFeGVjU3RhdGUqLCBKU09i
amVjdCogb3duZXIpOwotICAgIEpTU3RyaW5nKiByaWdodENvbnRleHQoRXhlY1N0YXRlKiwgSlNP
YmplY3QqIG93bmVyKTsKKyAgICBKU1N0cmluZyogbGVmdENvbnRleHQoSlNHbG9iYWxPYmplY3Qq
LCBKU09iamVjdCogb3duZXIpOworICAgIEpTU3RyaW5nKiByaWdodENvbnRleHQoSlNHbG9iYWxP
YmplY3QqLCBKU09iamVjdCogb3duZXIpOwogCiAgICAgSlNTdHJpbmcqIGlucHV0KCkKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggODNkYzE1NzMxYTk0NTFiYzM2YWI3MTZjYWNiYjJiMzkxMmRlMTIwMC4uNDYz
YmVjYTQyYmRjOWI2YjNjOWJiZjA4ODBjNTJjNTZiNzM5MmNhNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcApAQCAtMzEsMTcg
KzMxLDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgcmVn
RXhwQ29uc3RydWN0b3JJbnB1dChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlO
YW1lKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvckxhc3RNYXRjaChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgUHJvcGVydHlOYW1lKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1
Y3Rvckxhc3RQYXJlbihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0KEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIHJlZ0V4cENvbnN0cnVjdG9yUmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVj
dG9ySW5wdXQoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShKU0dsb2Jh
bE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdE1hdGNoKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29u
c3RydWN0b3JMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVy
dHlOYW1lKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250
ZXh0KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JSaWdodENvbnRleHQoSlNHbG9iYWxP
YmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIHRlbXBsYXRlPGludCBOPgot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIHJl
Z0V4cENvbnN0cnVjdG9yRG9sbGFyKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFBy
b3BlcnR5TmFtZSk7CiAKLXN0YXRpYyBib29sIHNldFJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLXN0YXRpYyBib29sIHNl
dFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSk7CitzdGF0aWMgYm9vbCBzZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3N0YXRpYyBi
b29sIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKQEAgLTk4
LDY5ICs5OCw2OSBAQCB2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFJlZ0V4cFByb3RvdHlwZSogcmVnRXhwUHJvdG90eXBlLAogfQogCiB0ZW1wbGF0ZTxpbnQg
Tj4KLUVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yRG9sbGFyKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSByZWdFeHBDb25zdHJ1Y3RvckRvbGxhcihKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBqc0Nhc3Q8UmVnRXhwQ29uc3RydWN0b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSktPmdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2xvYmFs
T2JqZWN0LT5yZWdFeHBHbG9iYWxEYXRhKCkuZ2V0QmFja3JlZihleGVjLCBnbG9iYWxPYmplY3Qs
IE4pKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbE9iamVjdC0+cmVnRXhwR2xv
YmFsRGF0YSgpLmdldEJhY2tyZWYoZ2xvYmFsT2JqZWN0LCBOKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIHJlZ0V4cENvbnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvcklu
cHV0KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxSZWdFeHBD
b25zdHJ1Y3Rvcio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKS0+Z2xvYmFsT2JqZWN0KCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnbG9iYWxPYmplY3QtPnJlZ0V4cEdsb2JhbERh
dGEoKS5pbnB1dCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgcmVnRXhwQ29uc3RydWN0b3JNdWx0
aWxpbmUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwQ29uc3RydWN0b3IqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSktPmdsb2JhbE9iamVjdCgpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGdsb2JhbE9iamVjdC0+cmVnRXhwR2xvYmFsRGF0YSgpLm11
bHRpbGluZSgpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdE1h
dGNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitFbmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvckxhc3RNYXRjaChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwQ29uc3RydWN0b3IqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSktPmdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBHbG9iYWxEYXRhKCkuZ2V0QmFja3Jl
ZihleGVjLCBnbG9iYWxPYmplY3QsIDApKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGds
b2JhbE9iamVjdC0+cmVnRXhwR2xvYmFsRGF0YSgpLmdldEJhY2tyZWYoZ2xvYmFsT2JqZWN0LCAw
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIHJlZ0V4cENvbnN0cnVjdG9yTGFzdFBhcmVuKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3Rvckxhc3RQYXJlbihKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwQ29uc3RydWN0b3IqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSktPmdsb2JhbE9iamVjdCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoZ2xvYmFsT2JqZWN0LT5yZWdFeHBHbG9iYWxEYXRhKCkuZ2V0TGFzdFBhcmVuKGV4ZWMs
IGdsb2JhbE9iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2xvYmFsT2JqZWN0
LT5yZWdFeHBHbG9iYWxEYXRhKCkuZ2V0TGFzdFBhcmVuKGdsb2JhbE9iamVjdCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0KEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSByZWdFeHBDb25zdHJ1Y3RvckxlZnRDb250ZXh0KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGpzQ2FzdDxSZWdFeHBDb25zdHJ1Y3Rvcio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShn
bG9iYWxPYmplY3QtPnJlZ0V4cEdsb2JhbERhdGEoKS5nZXRMZWZ0Q29udGV4dChleGVjLCBnbG9i
YWxPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbE9iamVjdC0+cmVn
RXhwR2xvYmFsRGF0YSgpLmdldExlZnRDb250ZXh0KGdsb2JhbE9iamVjdCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSByZWdFeHBDb25zdHJ1Y3RvclJpZ2h0Q29udGV4dChFeGVjU3RhdGUqIGV4ZWMs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
cmVnRXhwQ29uc3RydWN0b3JSaWdodENvbnRleHQoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0ganNDYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGds
b2JhbE9iamVjdC0+cmVnRXhwR2xvYmFsRGF0YSgpLmdldFJpZ2h0Q29udGV4dChleGVjLCBnbG9i
YWxPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbE9iamVjdC0+cmVn
RXhwR2xvYmFsRGF0YSgpLmdldFJpZ2h0Q29udGV4dChnbG9iYWxPYmplY3QpKTsKIH0KIAotYm9v
bCBzZXRSZWdFeHBDb25zdHJ1Y3RvcklucHV0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK2Jvb2wgc2V0UmVnRXhwQ29uc3Ry
dWN0b3JJbnB1dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoYXV0byBjb25zdHJ1Y3RvciA9IGpzRHlu
YW1pY0Nhc3Q8UmVnRXhwQ29uc3RydWN0b3IqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpKSB7Ci0gICAgICAgIGF1dG8qIHN0cmluZyA9IEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgIGF1dG8qIHN0cmluZyA9IEpTVmFsdWU6OmRlY29kZSh2YWx1
ZSkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpOwotICAgICAg
ICBnbG9iYWxPYmplY3QtPnJlZ0V4cEdsb2JhbERhdGEoKS5zZXRJbnB1dChleGVjLCBnbG9iYWxP
YmplY3QsIHN0cmluZyk7CisgICAgICAgIGdsb2JhbE9iamVjdC0+cmVnRXhwR2xvYmFsRGF0YSgp
LnNldElucHV0KGdsb2JhbE9iamVjdCwgc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11
bHRpbGluZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgdmFsdWUpCitib29sIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGlmIChhdXRvIGNvbnN0cnVjdG9yID0ganNEeW5hbWljQ2FzdDxSZWdFeHBD
b25zdHJ1Y3Rvcio+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSkpIHsKLSAgICAgICAg
Ym9vbCBtdWx0aWxpbmUgPSBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvQm9vbGVhbihleGVjKTsK
KyAgICAgICAgYm9vbCBtdWx0aWxpbmUgPSBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvQm9vbGVh
bihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCk7CkBAIC0xNzAsNjcgKzE3MCw2
NyBAQCBib29sIHNldFJlZ0V4cENvbnN0cnVjdG9yTXVsdGlsaW5lKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5s
aW5lIFN0cnVjdHVyZSogZ2V0UmVnRXhwU3RydWN0dXJlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQpCitpbmxpbmUgU3RydWN0
dXJlKiBnZXRSZWdFeHBTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBuZXdUYXJnZXQpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmpl
Y3QtPnJlZ0V4cFN0cnVjdHVyZSgpOwogICAgIGlmIChuZXdUYXJnZXQgIT0ganNVbmRlZmluZWQo
KSkKLSAgICAgICAgc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoZXhlYywgbmV3VGFyZ2V0LCBzdHJ1Y3R1cmUpOworICAgICAgICBzdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+cmVnRXhwQ29uc3RydWN0b3IoKSwgbmV3VGFyZ2V0LCBzdHJ1Y3R1cmUp
OwogICAgIHJldHVybiBzdHJ1Y3R1cmU7CiB9CiAKLWlubGluZSBPcHRpb25TZXQ8WWFycjo6Rmxh
Z3M+IHRvRmxhZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZsYWdzKQoraW5saW5lIE9wdGlv
blNldDxZYXJyOjpGbGFncz4gdG9GbGFncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGZsYWdzKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIGlmIChmbGFncy5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4geyB9
OwogICAgIAotICAgIGF1dG8gcmVzdWx0ID0gWWFycjo6cGFyc2VGbGFncyhmbGFncy50b1dURlN0
cmluZyhleGVjKSk7CisgICAgYXV0byByZXN1bHQgPSBZYXJyOjpwYXJzZUZsYWdzKGZsYWdzLnRv
V1RGU3RyaW5nKGdsb2JhbE9iamVjdCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgdGhyb3dTeW50YXhFcnJvcihleGVj
LCBzY29wZSwgIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiJf
cyk7CisgICAgICAgIHRocm93U3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkludmFs
aWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiJfcyk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOwogfQogCi1zdGF0
aWMgSlNPYmplY3QqIHJlZ0V4cENyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBKU1ZhbHVlIHBhdHRlcm5BcmcsIEpT
VmFsdWUgZmxhZ3NBcmcpCitzdGF0aWMgSlNPYmplY3QqIHJlZ0V4cENyZWF0ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgSlNWYWx1ZSBwYXR0ZXJuQXJn
LCBKU1ZhbHVlIGZsYWdzQXJnKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIFN0cmluZyBwYXR0ZXJuID0gcGF0dGVybkFyZy5pc1VuZGVmaW5l
ZCgpID8gZW1wdHlTdHJpbmcoKSA6IHBhdHRlcm5BcmcudG9XVEZTdHJpbmcoZXhlYyk7CisgICAg
U3RyaW5nIHBhdHRlcm4gPSBwYXR0ZXJuQXJnLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygp
IDogcGF0dGVybkFyZy50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgYXV0byBmbGFncyA9IHRvRmxhZ3MoZXhl
YywgZmxhZ3NBcmcpOworICAgIGF1dG8gZmxhZ3MgPSB0b0ZsYWdzKGdsb2JhbE9iamVjdCwgZmxh
Z3NBcmcpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
UmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSh2bSwgcGF0dGVybiwgZmxhZ3MpOwogICAg
IGlmIChVTkxJS0VMWSghcmVnRXhwLT5pc1ZhbGlkKCkpKSB7Ci0gICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHNjb3BlLCByZWdFeHAtPmVycm9yVG9UaHJvdyhleGVjKSk7CisgICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIHJlZ0V4cC0+ZXJyb3JUb1Rocm93KGds
b2JhbE9iamVjdCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZWdFeHBTdHJ1Y3R1
cmUoZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0
dXJlLCByZWdFeHApOwogfQogCi1KU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywg
IEpTT2JqZWN0KiBjYWxsZWUsIEpTVmFsdWUgbmV3VGFyZ2V0KQorSlNPYmplY3QqIGNvbnN0cnVj
dFJlZ0V4cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdz
LCAgSlNPYmplY3QqIGNhbGxlZSwgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcGF0dGVybkFyZyA9
IGFyZ3MuYXQoMCk7CiAgICAgSlNWYWx1ZSBmbGFnc0FyZyA9IGFyZ3MuYXQoMSk7CiAKICAgICBi
b29sIGlzUGF0dGVyblJlZ0V4cCA9IHBhdHRlcm5BcmcuaW5oZXJpdHM8UmVnRXhwT2JqZWN0Pih2
bSk7Ci0gICAgYm9vbCBjb25zdHJ1Y3RBc1JlZ2V4cCA9IGlzUmVnRXhwKHZtLCBleGVjLCBwYXR0
ZXJuQXJnKTsKKyAgICBib29sIGNvbnN0cnVjdEFzUmVnZXhwID0gaXNSZWdFeHAodm0sIGdsb2Jh
bE9iamVjdCwgcGF0dGVybkFyZyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAKICAgICBpZiAobmV3VGFyZ2V0LmlzVW5kZWZpbmVkKCkgJiYgY29uc3RydWN0QXNS
ZWdleHAgJiYgZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBKU1ZhbHVlIGNvbnN0
cnVjdG9yID0gcGF0dGVybkFyZy5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0
b3IpOworICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gcGF0dGVybkFyZy5nZXQoZ2xvYmFs
T2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvcik7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBpZiAoY2FsbGVlID09IGNvbnN0
cnVjdG9yKSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgcGF0dGVybkFyZyBpcyBhIG9i
amVjdCBvdGhlcndpc2UgY29uc3RydWN0QXNSZWdleHAgd291bGQgYmUgZmFsc2UuCkBAIC0yNDAs
MTYgKzI0MCwxNiBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQQogCiAgICAgaWYgKGlzUGF0dGVy
blJlZ0V4cCkgewogICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHBPYmplY3Qq
PihwYXR0ZXJuQXJnKS0+cmVnRXhwKCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2V0UmVnRXhwU3RydWN0dXJlKGV4ZWMsIGdsb2JhbE9iamVjdCwgbmV3VGFyZ2V0KTsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZWdFeHBTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LCBuZXdUYXJnZXQpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKIAogICAgICAgICBpZiAoIWZsYWdzQXJnLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAg
IGF1dG8gZmxhZ3MgPSB0b0ZsYWdzKGV4ZWMsIGZsYWdzQXJnKTsKKyAgICAgICAgICAgIGF1dG8g
ZmxhZ3MgPSB0b0ZsYWdzKGdsb2JhbE9iamVjdCwgZmxhZ3NBcmcpOwogICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICAgICAgICAgIHJlZ0V4cCA9
IFJlZ0V4cDo6Y3JlYXRlKHZtLCByZWdFeHAtPnBhdHRlcm4oKSwgZmxhZ3MpOwogICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKCFyZWdFeHAtPmlzVmFsaWQoKSkpIHsKLSAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgcmVnRXhwLT5lcnJvclRvVGhyb3coZXhlYykpOwor
ICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIHJlZ0V4
cC0+ZXJyb3JUb1Rocm93KGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTgsMzUgKzI1OCwzNSBAQCBK
U09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgQQogICAgIH0KIAogICAgIGlmIChjb25zdHJ1Y3RBc1JlZ2V4
cCkgewotICAgICAgICBKU1ZhbHVlIHBhdHRlcm4gPSBwYXR0ZXJuQXJnLmdldChleGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT5zb3VyY2UpOworICAgICAgICBKU1ZhbHVlIHBhdHRlcm4gPSBwYXR0ZXJu
QXJnLmdldChnbG9iYWxPYmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBpZiAoZmxhZ3NB
cmcuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgZmxhZ3NBcmcgPSBwYXR0ZXJuQXJnLmdl
dChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5mbGFncyk7CisgICAgICAgICAgICBmbGFnc0FyZyA9
IHBhdHRlcm5BcmcuZ2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+ZmxhZ3MpOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAg
IH0KICAgICAgICAgcGF0dGVybkFyZyA9IHBhdHRlcm47CiAgICAgfQogCi0gICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCByZWdFeHBDcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJn
ZXQsIHBhdHRlcm5BcmcsIGZsYWdzQXJnKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCByZWdFeHBDcmVhdGUoZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQsIHBhdHRlcm5BcmcsIGZsYWdz
QXJnKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXNTcGVjUmVnRXhwQ3Jl
YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewogICAgIEpTVmFsdWUgcGF0dGVybkFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAg
SlNWYWx1ZSBmbGFnc0FyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZWdFeHBDcmVhdGUoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGpzVW5k
ZWZpbmVkKCksIHBhdHRlcm5BcmcsIGZsYWdzQXJnKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZWdFeHBDcmVhdGUoZ2xvYmFsT2JqZWN0LCBqc1VuZGVmaW5lZCgpLCBwYXR0ZXJuQXJn
LCBmbGFnc0FyZykpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RXaXRoUmVnRXhwQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgQXJnTGlzdCBhcmdzKGNhbGxGcmFtZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RSZWdFeHAoY2FsbEZyYW1lLCBn
bG9iYWxPYmplY3QsIGFyZ3MsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1lLT5uZXdU
YXJnZXQoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0UmVnRXhwKGds
b2JhbE9iamVjdCwgYXJncywgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLCBjYWxsRnJhbWUtPm5ld1Rh
cmdldCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxS
ZWdFeHBDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKICAgICBBcmdMaXN0IGFyZ3MoY2FsbEZyYW1lKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdFJlZ0V4cChjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwg
YXJncywgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjb25zdHJ1Y3RSZWdFeHAoZ2xvYmFsT2JqZWN0LCBhcmdzLCBjYWxsRnJhbWUtPmpzQ2FsbGVl
KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAppbmRleCA5NzZlN2I2YWY4M2MxNTMwYzUy
MDM0MjdhODM5ZDUzZTBhY2QxYzdkLi41ZjJlZTQxODM3MTJlMGU4NjM3YTUzY2RhY2JjNDYyMTg4
NDNiZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmgKQEAgLTU4LDE5ICs1OCwxOSBAQCBjbGFzcyBSZWdFeHBDb25zdHJ1Y3RvciBm
aW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKIAogc3RhdGljX2Fzc2VydChzaXplb2Yo
UmVnRXhwQ29uc3RydWN0b3IpID09IHNpemVvZihJbnRlcm5hbEZ1bmN0aW9uKSwgIiIpOwogCi1K
U09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgQXJnTGlzdCYsIEpTT2JqZWN0KiBjYWxsZWUgPSBudWxscHRyLCBKU1ZhbHVlIG5ld1Rhcmdl
dCA9IGpzVW5kZWZpbmVkKCkpOworSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChKU0dsb2JhbE9i
amVjdCosIGNvbnN0IEFyZ0xpc3QmLCBKU09iamVjdCogY2FsbGVlID0gbnVsbHB0ciwgSlNWYWx1
ZSBuZXdUYXJnZXQgPSBqc1VuZGVmaW5lZCgpKTsKIAotQUxXQVlTX0lOTElORSBib29sIGlzUmVn
RXhwKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorQUxXQVlTX0lOTElO
RSBib29sIGlzUmVnRXhwKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIEpTVmFsdWUgbWF0Y2hW
YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1hdGNoU3ltYm9sKTsK
KyAgICBKU1ZhbHVlIG1hdGNoVmFsdWUgPSBvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIHZtLnBy
b3BlcnR5TmFtZXMtPm1hdGNoU3ltYm9sKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7CiAgICAgaWYgKCFtYXRjaFZhbHVlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJl
dHVybiBtYXRjaFZhbHVlLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgcmV0dXJuIG1hdGNoVmFs
dWUudG9Cb29sZWFuKGdsb2JhbE9iamVjdCk7CiAKICAgICByZXR1cm4gb2JqZWN0LT5pbmhlcml0
czxSZWdFeHBPYmplY3Q+KHZtKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5jcHAKaW5kZXggZmE5OThhNzk3MTVlMTZkNzgyODE5OTVi
ZmNkODBkYWRhNGFjYzVlMS4uZGQyNTdiOTI5ZjAwOTAyNDc4ZDlhMzE0MWM0OGMwMDdmYTU3N2E3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFs
RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFs
RGF0YS5jcHAKQEAgLTM2LDE2ICszNiwxNiBAQCB2b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIG1fY2FjaGVkUmVzdWx0LnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwogfQogCi1KU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldEJh
Y2tyZWYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogb3duZXIsIHVuc2lnbmVkIGkp
CitKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgaSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0FycmF5KiBhcnJheSA9IG1fY2FjaGVkUmVzdWx0Lmxh
c3RSZXN1bHQoZXhlYywgb3duZXIpOworICAgIEpTQXJyYXkqIGFycmF5ID0gbV9jYWNoZWRSZXN1
bHQubGFzdFJlc3VsdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGlmIChpIDwgYXJyYXktPmxlbmd0aCgpKSB7
Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZShhcnJheSkuZ2V0KGV4ZWMsIGkpOwor
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUoYXJyYXkpLmdldChnbG9iYWxPYmplY3Qs
IGkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBB
U1NFUlQocmVzdWx0LmlzU3RyaW5nKCkgfHwgcmVzdWx0LmlzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBpZiAoIXJlc3VsdC5pc1VuZGVmaW5lZCgpKQpAQCAtNTQsMTcgKzU0LDE3IEBAIEpTVmFsdWUg
UmVnRXhwR2xvYmFsRGF0YTo6Z2V0QmFja3JlZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBvd25lciwgdW5zCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogfQogCi1KU1Zh
bHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldExhc3RQYXJlbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBvd25lcikKK0pTVmFsdWUgUmVnRXhwR2xvYmFsRGF0YTo6Z2V0TGFzdFBhcmVu
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNBcnJheSogYXJyYXkgPSBtX2NhY2hlZFJl
c3VsdC5sYXN0UmVzdWx0KGV4ZWMsIG93bmVyKTsKKyAgICBKU0FycmF5KiBhcnJheSA9IG1fY2Fj
aGVkUmVzdWx0Lmxhc3RSZXN1bHQoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
cnJheS0+bGVuZ3RoKCk7CiAgICAgaWYgKGxlbmd0aCA+IDEpIHsKLSAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBKU1ZhbHVlKGFycmF5KS5nZXQoZXhlYywgbGVuZ3RoIC0gMSk7CisgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNWYWx1ZShhcnJheSkuZ2V0KGdsb2JhbE9iamVjdCwgbGVuZ3RoIC0g
MSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIEFT
U0VSVChyZXN1bHQuaXNTdHJpbmcoKSB8fCByZXN1bHQuaXNVbmRlZmluZWQoKSk7CiAgICAgICAg
IGlmICghcmVzdWx0LmlzVW5kZWZpbmVkKCkpCkBAIC03MywxNCArNzMsMTQgQEAgSlNWYWx1ZSBS
ZWdFeHBHbG9iYWxEYXRhOjpnZXRMYXN0UGFyZW4oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogb3duZXIpCiAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcodm0pOwogfQogCi1KU1ZhbHVl
IFJlZ0V4cEdsb2JhbERhdGE6OmdldExlZnRDb250ZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIG93bmVyKQorSlNWYWx1ZSBSZWdFeHBHbG9iYWxEYXRhOjpnZXRMZWZ0Q29udGV4
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBtX2NhY2hlZFJl
c3VsdC5sZWZ0Q29udGV4dChleGVjLCBvd25lcik7CisgICAgcmV0dXJuIG1fY2FjaGVkUmVzdWx0
LmxlZnRDb250ZXh0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0KTsKIH0KIAotSlNWYWx1ZSBS
ZWdFeHBHbG9iYWxEYXRhOjpnZXRSaWdodENvbnRleHQoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogb3duZXIpCitKU1ZhbHVlIFJlZ0V4cEdsb2JhbERhdGE6OmdldFJpZ2h0Q29udGV4
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBtX2NhY2hlZFJl
c3VsdC5yaWdodENvbnRleHQoZXhlYywgb3duZXIpOworICAgIHJldHVybiBtX2NhY2hlZFJlc3Vs
dC5yaWdodENvbnRleHQoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cEdsb2JhbERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEds
b2JhbERhdGEuaAppbmRleCBiZDc2YzM2MGRlOTc1NGFiMDBhNzVmZDAzM2JiMDNkNzkxZGFlZDQ4
Li5iZDc1YzA3ZWU3Yjk3NWEwMGE0NjAxMDcwYzk3Y2EzOGY2NTJlMDRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBHbG9iYWxEYXRhLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YS5oCkBAIC0zOCwxNSAr
MzgsMTUgQEAgY2xhc3MgUmVnRXhwR2xvYmFsRGF0YSB7CiAgICAgdm9pZCBzZXRNdWx0aWxpbmUo
Ym9vbCBtdWx0aWxpbmUpIHsgbV9tdWx0aWxpbmUgPSBtdWx0aWxpbmU7IH0KICAgICBib29sIG11
bHRpbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVsdGlsaW5lOyB9CiAKLSAgICB2b2lkIHNldElu
cHV0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiBvd25lciwgSlNTdHJpbmcqKTsKKyAgICB2
b2lkIHNldElucHV0KEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKICAgICBKU1N0cmluZyog
aW5wdXQoKSB7IHJldHVybiBtX2NhY2hlZFJlc3VsdC5pbnB1dCgpOyB9CiAKICAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKLSAgICBKU1ZhbHVlIGdldEJhY2tyZWYoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqIG93bmVyLCB1bnNpZ25lZCk7Ci0gICAgSlNWYWx1ZSBn
ZXRMYXN0UGFyZW4oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqIG93bmVyKTsKLSAgICBKU1Zh
bHVlIGdldExlZnRDb250ZXh0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiBvd25lcik7Ci0g
ICAgSlNWYWx1ZSBnZXRSaWdodENvbnRleHQoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqIG93
bmVyKTsKKyAgICBKU1ZhbHVlIGdldEJhY2tyZWYoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7
CisgICAgSlNWYWx1ZSBnZXRMYXN0UGFyZW4oSlNHbG9iYWxPYmplY3QqKTsKKyAgICBKU1ZhbHVl
IGdldExlZnRDb250ZXh0KEpTR2xvYmFsT2JqZWN0Kik7CisgICAgSlNWYWx1ZSBnZXRSaWdodENv
bnRleHQoSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIE1hdGNoUmVzdWx0IHBlcmZvcm1NYXRjaChW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwKiwgSlNTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBp
bnQgc3RhcnRPZmZzZXQsIGludCoqIG92ZWN0b3IpOwogICAgIE1hdGNoUmVzdWx0IHBlcmZvcm1N
YXRjaChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgUmVnRXhwKiwgSlNTdHJpbmcqLCBjb25zdCBTdHJp
bmcmLCBpbnQgc3RhcnRPZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwR2xvYmFsRGF0YUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cEdsb2JhbERhdGFJbmxpbmVzLmgKaW5kZXggNDYxNDdiOTY4ZTcwMmZj
MGMxMmIxNTdmMjNmZWYzYjVmMWMyMjQ0ZC4uNDA1OTNiYWUyZWUwMjdmMThmMDQ4ZGZmNDk4Yzk0
ODE1OTRkMTBkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwR2xvYmFsRGF0YUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBHbG9iYWxEYXRhSW5saW5lcy5oCkBAIC0yOSw5ICsyOSw5IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1pbmxpbmUgdm9pZCBSZWdFeHBHbG9iYWxEYXRhOjpzZXRJbnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBvd25lciwgSlNTdHJpbmcqIHN0cmluZykKK2lubGlu
ZSB2b2lkIFJlZ0V4cEdsb2JhbERhdGE6OnNldElucHV0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgbV9jYWNoZWRSZXN1bHQuc2V0SW5wdXQo
ZXhlYywgb3duZXIsIHN0cmluZyk7CisgICAgbV9jYWNoZWRSZXN1bHQuc2V0SW5wdXQoZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHN0cmluZyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmgKaW5kZXggNjk2OWI0NmY3MzgyMDFmYWFl
OGM4ZDVmYmU1YzcyMDMzN2JiMmI5NS4uYWZkMDc4MGFjZDU0ZmEzM2E3YzU1MTEwYjY1ZDM0MDhm
OGFmZDUwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElubGlu
ZXMuaApAQCAtMTQxLDggKzE0MSw5IEBAIEFMV0FZU19JTkxJTkUgaW50IFJlZ0V4cDo6bWF0Y2hJ
bmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2ZmCiAKICAgICBh
dXRvIHRocm93RXJyb3IgPSBbJl0gewogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gdm0udG9wQ2FsbEZy
YW1lOwotICAgICAgICB0aHJvd1Njb3BlLnRocm93RXhjZXB0aW9uKGV4ZWMsIGVycm9yVG9UaHJv
dyhleGVjKSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLgorICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0udG9wQ2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CisgICAgICAgIHRocm93U2NvcGUudGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCBlcnJvclRvVGhyb3coZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGlmICghaGFzSGFyZEVycm9y
KG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKSkKICAgICAgICAgICAgIHJlc2V0KCk7CiAgICAgICAg
IHJldHVybiAtMTsKQEAgLTI2OSw4ICsyNzAsOSBAQCBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0
IFJlZ0V4cDo6bWF0Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkCiAK
ICAgICBhdXRvIHRocm93RXJyb3IgPSBbJl0gewogICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gdm0udG9w
Q2FsbEZyYW1lOwotICAgICAgICB0aHJvd1Njb3BlLnRocm93RXhjZXB0aW9uKGV4ZWMsIGVycm9y
VG9UaHJvdyhleGVjKSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLgorICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0udG9wQ2FsbEZyYW1lLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCk7CisgICAgICAgIHRocm93U2NvcGUudGhyb3dFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCBlcnJvclRvVGhyb3coZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGlmICghaGFzSGFy
ZEVycm9yKG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKSkKICAgICAgICAgICAgIHJlc2V0KCk7CiAg
ICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCmluZGV4IGViMmJhYTMzZjcx
NjAwY2YyYTAwNDc2YzNmYTNiMWFhYTE0YWRjODUuLmFlZDQ5OTM0MjU3YjAwNjkyYzQxYjcxMTRl
NjZlYjNlY2Q1M2YzZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oCkBAIC0xNjUsMTMgKzE2NSwxMyBAQCBBTFdBWVNfSU5MSU5F
IEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheSgKICAgICByZXR1cm4gYXJyYXk7CiB9
CiAKLWlubGluZSBKU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nLCBSZWdF
eHAqIHJlZ0V4cCwgdW5zaWduZWQgc3RhcnRPZmZzZXQpCitpbmxpbmUgSlNBcnJheSogY3JlYXRl
UmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5n
KiBzdHJpbmcsIFJlZ0V4cCogcmVnRXhwLCB1bnNpZ25lZCBzdGFydE9mZnNldCkKIHsKLSAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBN
YXRjaFJlc3VsdCBpZ25vcmVkUmVzdWx0OwotICAgIFN0cmluZyBpbnB1dCA9IHN0cmluZy0+dmFs
dWUoZXhlYyk7CisgICAgU3RyaW5nIGlucHV0ID0gc3RyaW5nLT52YWx1ZShnbG9iYWxPYmplY3Qp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJpbmcsIGlucHV0LCByZWdFeHAsIHN0YXJ0T2Zmc2V0LCBpZ25vcmVkUmVzdWx0KSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAppbmRleCAz
YTlkOWE3Y2RmZjNmZTEwN2U4MGFhZTY5MzhiOTY3NjI1MWQzZDVhLi5lZjhkODEwZDYwNTE2ZTRl
YWViZjVkZGEzODliNGRmYWMzNWU5Mzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKQEAgLTU5LDcyICs1OSw3MiBAQCB2b2lkIFJlZ0V4cE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbGFzdEluZGV4KTsKIH0KIAotYm9vbCBS
ZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K2Jvb2wgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJv
cGVydHlOYW1lcy0+bGFzdEluZGV4KSB7CiAgICAgICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwID0g
anNDYXN0PFJlZ0V4cE9iamVjdCo+KG9iamVjdCk7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXMgPSByZWdFeHAtPmxhc3RJbmRleElzV3JpdGFibGUoKSA/IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIDogUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUocmVnRXhwLCBhdHRyaWJ1
dGVzLCByZWdFeHAtPmdldExhc3RJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgUmVnRXhw
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK2Jvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0
eU5hbWVzLT5sYXN0SW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gQmFz
ZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4g
QmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwog
fQogCi12b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygp
KQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgp
OwotICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLXZvaWQg
UmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlmIChtb2RlLmlu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQodm0u
cHJvcGVydHlOYW1lcy0+bGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRQcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0UHJvcGVydHlO
YW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLXZv
aWQgUmVnRXhwT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgUmVnRXhwT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQogICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpOwotICAgIEJhc2U6Omdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgQmFzZTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIFJlZ0V4cE9iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
c2hvdWxkVGhyb3cpCitib29sIFJlZ0V4cE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNo
b3VsZFRocm93KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+bGFzdEluZGV4
KSB7CiAgICAgICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+
KG9iamVjdCk7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAm
JiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihleGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VD
b25maWd1cmFiaWxpdHlFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdl
Q29uZmlndXJhYmlsaXR5RXJyb3IpOwogICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxl
UHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHR5cGVFcnJvcihleGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIFVuY29uZmlndXJhYmxlUHJvcGVy
dHlDaGFuZ2VFbnVtZXJhYmlsaXR5RXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgVW5jb25maWd1cmFibGVQcm9wZXJ0
eUNoYW5nZUVudW1lcmFiaWxpdHlFcnJvcik7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmlzQWNj
ZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBzaG91bGRUaHJvdywgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZUFjY2Vzc01lY2hh
bmlzbUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgc2hvdWxkVGhyb3csIFVuY29uZmlndXJhYmxlUHJvcGVydHlDaGFuZ2VBY2Nlc3NNZWNo
YW5pc21FcnJvcik7CiAgICAgICAgIGlmICghcmVnRXhwLT5sYXN0SW5kZXhJc1dyaXRhYmxlKCkp
IHsKICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlUHJlc2VudCgpICYmIGRlc2Ny
aXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBzaG91bGRUaHJvdywgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZVdyaXRhYmls
aXR5RXJyb3IpOwotICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZh
bHVlKGV4ZWMsIHJlZ0V4cC0+Z2V0TGFzdEluZGV4KCksIGRlc2NyaXB0b3IudmFsdWUoKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgc2hvdWxkVGhyb3cs
IFJlYWRvbmx5UHJvcGVydHlDaGFuZ2VFcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgVW5jb25maWd1cmFibGVQ
cm9wZXJ0eUNoYW5nZVdyaXRhYmlsaXR5RXJyb3IpOworICAgICAgICAgICAgaWYgKGRlc2NyaXB0
b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGdsb2JhbE9iamVjdCwgcmVnRXhwLT5nZXRMYXN0SW5k
ZXgoKSwgZGVzY3JpcHRvci52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5Q2hh
bmdlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSkgewotICAgICAgICAgICAgcmVnRXhwLT5zZXRMYXN0SW5k
ZXgoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBmYWxzZSk7CisgICAgICAgICAgICByZWdFeHAt
PnNldExhc3RJbmRleChnbG9iYWxPYmplY3QsIGRlc2NyaXB0b3IudmFsdWUoKSwgZmFsc2UpOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICB9
CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlUHJlc2VudCgpICYmICFkZXNjcmlwdG9y
LndyaXRhYmxlKCkpCkBAIC0xMzIsNDkgKzEzMiw0OSBAQCBib29sIFJlZ0V4cE9iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdykpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKTsKIH0KIAotc3RhdGljIGJvb2wgcmVnRXhw
T2JqZWN0U2V0TGFzdEluZGV4U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBib29sIHJlZ0V4cE9iamVj
dFNldExhc3RJbmRleFN0cmljdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBq
c0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpLT5zZXRMYXN0
SW5kZXgoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwgdHJ1ZSk7CisgICAgcmV0dXJuIGpz
Q2FzdDxSZWdFeHBPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSktPnNldExhc3RJ
bmRleChnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIHRydWUpOwogfQogCi1z
dGF0aWMgYm9vbCByZWdFeHBPYmplY3RTZXRMYXN0SW5kZXhOb25TdHJpY3QoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQorc3Rh
dGljIGJvb2wgcmVnRXhwT2JqZWN0U2V0TGFzdEluZGV4Tm9uU3RyaWN0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxSZWdFeHBPYmplY3QqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSktPnNldExhc3RJbmRleChleGVjLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUp
LCBmYWxzZSk7CisgICAgcmV0dXJuIGpzQ2FzdDxSZWdFeHBPYmplY3QqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSktPnNldExhc3RJbmRleChnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmRlY29k
ZSh2YWx1ZSksIGZhbHNlKTsKIH0KIAotYm9vbCBSZWdFeHBPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBSZWdFeHBPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBSZWdFeHBPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCk7
CiAKICAgICBpZiAoVU5MSUtFTFkoaXNUaGlzVmFsdWVBbHRlcmVkKHNsb3QsIHRoaXNPYmplY3Qp
KSkKLSAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhleGVjLCB0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgcmV0dXJuIG9yZGluYXJ5U2V0U2xvdyhnbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QudGhpc1ZhbHVlKCksIHNsb3QuaXNTdHJpY3RNb2Rl
KCkpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5k
ZXgpIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSB0aGlzT2JqZWN0LT5zZXRMYXN0SW5kZXgoZXhl
YywgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICBib29sIHJlc3VsdCA9IHRo
aXNPYmplY3QtPnNldExhc3RJbmRleChnbG9iYWxPYmplY3QsIHZhbHVlLCBzbG90LmlzU3RyaWN0
TW9kZSgpKTsKICAgICAgICAgc2xvdC5zZXRDdXN0b21WYWx1ZSh0aGlzT2JqZWN0LCBzbG90Lmlz
U3RyaWN0TW9kZSgpCiAgICAgICAgICAgICA/IHJlZ0V4cE9iamVjdFNldExhc3RJbmRleFN0cmlj
dAogICAgICAgICAgICAgOiByZWdFeHBPYmplY3RTZXRMYXN0SW5kZXhOb25TdHJpY3QpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICByZXR1cm4gQmFzZTo6cHV0KGNlbGwsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpwdXQoY2Vs
bCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotSlNWYWx1
ZSBSZWdFeHBPYmplY3Q6OmV4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKQorSlNWYWx1ZSBSZWdFeHBPYmplY3Q6OmV4ZWMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsKLSAgICBy
ZXR1cm4gZXhlY0lubGluZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cmluZyk7CisgICAgcmV0dXJu
IGV4ZWNJbmxpbmUoZ2xvYmFsT2JqZWN0LCBzdHJpbmcpOwogfQogCiAvLyBTaGFyZWQgaW1wbGVt
ZW50YXRpb24gdXNlZCBieSB0ZXN0IGFuZCBleGVjLgotTWF0Y2hSZXN1bHQgUmVnRXhwT2JqZWN0
OjptYXRjaChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
U3RyaW5nKiBzdHJpbmcpCitNYXRjaFJlc3VsdCBSZWdFeHBPYmplY3Q6Om1hdGNoKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIG1h
dGNoSW5saW5lKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RyaW5nKTsKKyAgICByZXR1cm4gbWF0Y2hJ
bmxpbmUoZ2xvYmFsT2JqZWN0LCBzdHJpbmcpOwogfQogCi1KU1ZhbHVlIFJlZ0V4cE9iamVjdDo6
bWF0Y2hHbG9iYWwoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1N0cmluZyogc3RyaW5nKQorSlNWYWx1ZSBSZWdFeHBPYmplY3Q6Om1hdGNoR2xvYmFsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTE4MiwyNCArMTgyLDI0IEBAIEpTVmFsdWUgUmVnRXhwT2JqZWN0Ojpt
YXRjaEdsb2JhbChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
CiAKICAgICBBU1NFUlQocmVnRXhwLT5nbG9iYWwoKSk7CiAKLSAgICBzZXRMYXN0SW5kZXgoZXhl
YywgMCk7CisgICAgc2V0TGFzdEluZGV4KGdsb2JhbE9iamVjdCwgMCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShl
eGVjKTsKKyAgICBTdHJpbmcgcyA9IHN0cmluZy0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgQVNTRVJUKCFzLmlzTnVsbCgp
KTsKICAgICBpZiAocmVnRXhwLT51bmljb2RlKCkpIHsKICAgICAgICAgdW5zaWduZWQgc3RyaW5n
TGVuZ3RoID0gcy5sZW5ndGgoKTsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBj
b2xsZWN0TWF0Y2hlcygKLSAgICAgICAgICAgIHZtLCBleGVjLCBzdHJpbmcsIHMsIGdsb2JhbE9i
amVjdCwgcmVnRXhwLAorICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RyaW5nLCBzLCBy
ZWdFeHAsCiAgICAgICAgICAgICBbJl0gKHNpemVfdCBlbmQpIC0+IHNpemVfdCB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGFkdmFuY2VTdHJpbmdVbmljb2RlKHMsIHN0cmluZ0xlbmd0aCwgZW5k
KTsKICAgICAgICAgICAgIH0pKTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGNvbGxlY3RNYXRjaGVzKAotICAgICAgICB2bSwgZXhlYywgc3RyaW5nLCBzLCBnbG9iYWxP
YmplY3QsIHJlZ0V4cCwKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgc3RyaW5nLCBzLCByZWdF
eHAsCiAgICAgICAgIFsmXSAoc2l6ZV90IGVuZCkgLT4gc2l6ZV90IHsKICAgICAgICAgICAgIHJl
dHVybiBlbmQgKyAxOwogICAgICAgICB9KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5oCmluZGV4IDBmZWYyNDI4NDNkNjAxNDJhMjFlMmYwZTU1MWY2ZGMy
MTJjY2FjMzMuLmE1NmMwYWNmOThiYjQzODMyZjZjZDRhMDFmZWY0MjUxMDJlYmFiMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCkBAIC02MCw0MyAr
NjAsNDMgQEAgY2xhc3MgUmVnRXhwT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ0V4cCo+KG1fcmVnRXhwQW5kTGFz
dEluZGV4SXNOb3RXcml0YWJsZUZsYWcgJiAofmxhc3RJbmRleElzTm90V3JpdGFibGVGbGFnKSk7
CiAgICAgfQogCi0gICAgYm9vbCBzZXRMYXN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBzaXplX3Qg
bGFzdEluZGV4KQorICAgIGJvb2wgc2V0TGFzdEluZGV4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHNpemVfdCBsYXN0SW5kZXgpCiAgICAgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgaWYgKExJS0VMWShs
YXN0SW5kZXhJc1dyaXRhYmxlKCkpKSB7CiAgICAgICAgICAgICBtX2xhc3RJbmRleC5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKGpzTnVtYmVyKGxhc3RJbmRleCkpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotICAgIGJvb2wgc2V0TGFzdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBsYXN0SW5kZXgsIGJvb2wgc2hvdWxkVGhyb3cpCisgICAgYm9vbCBzZXRMYXN0SW5k
ZXgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsYXN0SW5kZXgsIGJvb2wg
c2hvdWxkVGhyb3cpCiAgICAgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAg
ICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgaWYgKExJS0VMWShsYXN0SW5kZXhJc1dy
aXRhYmxlKCkpKSB7CiAgICAgICAgICAgICBtX2xhc3RJbmRleC5zZXQodm0sIHRoaXMsIGxhc3RJ
bmRleCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBzaG91bGRUaHJvdywgUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOworICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgfQogICAgIEpT
VmFsdWUgZ2V0TGFzdEluZGV4KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2xhc3RJ
bmRleC5nZXQoKTsKICAgICB9CiAKLSAgICBib29sIHRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKSB7IHJldHVybiAhIW1h
dGNoKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RyaW5nKTsgfQotICAgIGJvb2wgdGVzdElubGluZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBz
dHJpbmcpIHsgcmV0dXJuICEhbWF0Y2hJbmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJpbmcp
OyB9Ci0gICAgSlNWYWx1ZSBleGVjKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJp
bmcqKTsKLSAgICBKU1ZhbHVlIGV4ZWNJbmxpbmUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1N0cmluZyopOwotICAgIE1hdGNoUmVzdWx0IG1hdGNoKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNTdHJpbmcqKTsKLSAgICBKU1ZhbHVlIG1hdGNoR2xvYmFsKEV4ZWNTdGF0ZSos
IEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICBib29sIHRlc3QoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykgeyByZXR1cm4gISFtYXRjaChnbG9i
YWxPYmplY3QsIHN0cmluZyk7IH0KKyAgICBib29sIHRlc3RJbmxpbmUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykgeyByZXR1cm4gISFtYXRjaElubGluZShn
bG9iYWxPYmplY3QsIHN0cmluZyk7IH0KKyAgICBKU1ZhbHVlIGV4ZWMoSlNHbG9iYWxPYmplY3Qq
LCBKU1N0cmluZyopOworICAgIEpTVmFsdWUgZXhlY0lubGluZShKU0dsb2JhbE9iamVjdCosIEpT
U3RyaW5nKik7CisgICAgTWF0Y2hSZXN1bHQgbWF0Y2goSlNHbG9iYWxPYmplY3QqLCBKU1N0cmlu
ZyopOworICAgIEpTVmFsdWUgbWF0Y2hHbG9iYWwoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyop
OwogCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKQEAgLTEzNywx
NCArMTM3LDE0IEBAIGNsYXNzIFJlZ0V4cE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKICAgICAgICAgbV9yZWdFeHBBbmRMYXN0SW5kZXhJc05vdFdyaXRhYmxlRmxhZyA9
IChtX3JlZ0V4cEFuZExhc3RJbmRleElzTm90V3JpdGFibGVGbGFnIHwgbGFzdEluZGV4SXNOb3RX
cml0YWJsZUZsYWcpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKIAogcHJpdmF0ZToKLSAgICBNYXRjaFJlc3VsdCBtYXRjaElubGluZShFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CisgICAgTWF0Y2hSZXN1bHQgbWF0Y2hJ
bmxpbmUoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyopOwogCiAgICAgdWludHB0cl90IG1fcmVn
RXhwQW5kTGFzdEluZGV4SXNOb3RXcml0YWJsZUZsYWcgeyAwIH07CiAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+IG1fbGFzdEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0SW5saW5lcy5oCmluZGV4IGU2ZjRkMjk0ZGJlYjMzNWNlZDZhNmM2
OWVmNTU2NmZjOWIzOTc4ZDQuLjk1ZjY0NGUyZTE0OTg2MGM2NGViMzIwMDdjZjZlOGRjNzMwMDY3
OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3RJbmxpbmVzLmgKQEAgLTM0LDkgKzM0LDkgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIGdldFJlZ0V4cE9iamVjdExhc3RJbmRleEFzVW5zaWduZWQoCi0gICAg
RXhlY1N0YXRlKiBleGVjLCBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwgY29uc3QgU3RyaW5n
JiBpbnB1dCkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWdFeHBPYmplY3Qq
IHJlZ0V4cE9iamVjdCwgY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUganNMYXN0SW5kZXggPSBy
ZWdFeHBPYmplY3QtPmdldExhc3RJbmRleCgpOwogICAgIHVuc2lnbmVkIGxhc3RJbmRleDsKQEAg
LTQ0LDE1ICs0NCwxNSBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldFJlZ0V4cE9iamVjdExh
c3RJbmRleEFzVW5zaWduZWQoCiAgICAgICAgIGxhc3RJbmRleCA9IGpzTGFzdEluZGV4LmFzVUlu
dDMyKCk7CiAgICAgICAgIGlmIChsYXN0SW5kZXggPiBpbnB1dC5sZW5ndGgoKSkgewogICAgICAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgcmVnRXhwT2JqZWN0LT5zZXRMYXN0
SW5kZXgoZXhlYywgMCk7CisgICAgICAgICAgICByZWdFeHBPYmplY3QtPnNldExhc3RJbmRleChn
bG9iYWxPYmplY3QsIDApOwogICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZG91YmxlIGRvdWJsZUxhc3RJbmRleCA9IGpzTGFzdElu
ZGV4LnRvSW50ZWdlcihleGVjKTsKKyAgICAgICAgZG91YmxlIGRvdWJsZUxhc3RJbmRleCA9IGpz
TGFzdEluZGV4LnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBVSU5UX01BWCk7CiAgICAgICAgIGlmIChkb3VibGVMYXN0SW5kZXggPCAw
IHx8IGRvdWJsZUxhc3RJbmRleCA+IGlucHV0Lmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICByZWdFeHBPYmplY3QtPnNldExhc3RJbmRleChleGVj
LCAwKTsKKyAgICAgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0TGFzdEluZGV4KGdsb2JhbE9iamVj
dCwgMCk7CiAgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgIH0KICAgICAgICAg
bGFzdEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZUxhc3RJbmRleCk7CkBAIC02
MCwyMCArNjAsMjAgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBnZXRSZWdFeHBPYmplY3RMYXN0
SW5kZXhBc1Vuc2lnbmVkKAogICAgIHJldHVybiBsYXN0SW5kZXg7CiB9CiAKLWlubGluZSBKU1Zh
bHVlIFJlZ0V4cE9iamVjdDo6ZXhlY0lubGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCitpbmxpbmUgSlNWYWx1ZSBSZWdF
eHBPYmplY3Q6OmV4ZWNJbmxpbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmcqIHN0cmluZykKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHRoaXMtPnJlZ0V4cCgpOwotICAg
IFN0cmluZyBpbnB1dCA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIGlucHV0ID0g
c3RyaW5nLT52YWx1ZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBib29sIGdsb2JhbE9yU3RpY2t5ID0gcmVnRXhwLT5nbG9iYWxPclN0
aWNreSgpOwogCiAgICAgdW5zaWduZWQgbGFzdEluZGV4OwogICAgIGlmIChnbG9iYWxPclN0aWNr
eSkgewotICAgICAgICBsYXN0SW5kZXggPSBnZXRSZWdFeHBPYmplY3RMYXN0SW5kZXhBc1Vuc2ln
bmVkKGV4ZWMsIHRoaXMsIGlucHV0KTsKKyAgICAgICAgbGFzdEluZGV4ID0gZ2V0UmVnRXhwT2Jq
ZWN0TGFzdEluZGV4QXNVbnNpZ25lZChnbG9iYWxPYmplY3QsIHRoaXMsIGlucHV0KTsKICAgICAg
ICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgbGFzdEluZGV4ID09IFVJ
TlRfTUFYKTsKICAgICAgICAgaWYgKGxhc3RJbmRleCA9PSBVSU5UX01BWCkKICAgICAgICAgICAg
IHJldHVybiBqc051bGwoKTsKQEAgLTg3LDEyICs4NywxMiBAQCBpbmxpbmUgSlNWYWx1ZSBSZWdF
eHBPYmplY3Q6OmV4ZWNJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsTwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7CiAgICAgICAgIGlmIChnbG9iYWxPclN0aWNreSkKLSAgICAgICAgICAg
IHNldExhc3RJbmRleChleGVjLCAwKTsKKyAgICAgICAgICAgIHNldExhc3RJbmRleChnbG9iYWxP
YmplY3QsIDApOwogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCiAgICAgaWYgKGds
b2JhbE9yU3RpY2t5KQotICAgICAgICBzZXRMYXN0SW5kZXgoZXhlYywgcmVzdWx0LmVuZCk7Cisg
ICAgICAgIHNldExhc3RJbmRleChnbG9iYWxPYmplY3QsIHJlc3VsdC5lbmQpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5yZWdFeHBHbG9i
YWxEYXRhKCkucmVjb3JkTWF0Y2godm0sIGdsb2JhbE9iamVjdCwgcmVnRXhwLCBzdHJpbmcsIHJl
c3VsdCk7CiAgICAgcmV0dXJuIGFycmF5OwpAQCAtMTAwLDEzICsxMDAsMTMgQEAgaW5saW5lIEpT
VmFsdWUgUmVnRXhwT2JqZWN0OjpleGVjSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE8KIAogLy8gU2hhcmVkIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgdGVzdCBh
bmQgZXhlYy4KIGlubGluZSBNYXRjaFJlc3VsdCBSZWdFeHBPYmplY3Q6Om1hdGNoSW5saW5lKAot
ICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmcqIHN0cmluZykKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyog
c3RyaW5nKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIFJlZ0V4cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7Ci0gICAgU3Ry
aW5nIGlucHV0ID0gc3RyaW5nLT52YWx1ZShleGVjKTsKKyAgICBTdHJpbmcgaW5wdXQgPSBzdHJp
bmctPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgIGlmICghcmVnRXhwLT5nbG9iYWwoKSAmJiAhcmVnRXhwLT5zdGlja3koKSkg
ewpAQCAtMTE0LDcgKzExNCw3IEBAIGlubGluZSBNYXRjaFJlc3VsdCBSZWdFeHBPYmplY3Q6Om1h
dGNoSW5saW5lKAogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5yZWdFeHBHbG9iYWxEYXRh
KCkucGVyZm9ybU1hdGNoKHZtLCBnbG9iYWxPYmplY3QsIHJlZ0V4cCwgc3RyaW5nLCBpbnB1dCwg
MCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbGFzdEluZGV4ID0gZ2V0UmVnRXhwT2JqZWN0TGFz
dEluZGV4QXNVbnNpZ25lZChleGVjLCB0aGlzLCBpbnB1dCk7CisgICAgdW5zaWduZWQgbGFzdElu
ZGV4ID0gZ2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4QXNVbnNpZ25lZChnbG9iYWxPYmplY3QsIHRo
aXMsIGlucHV0KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCAo
bGFzdEluZGV4ID09IFVJTlRfTUFYKSk7CiAgICAgaWYgKGxhc3RJbmRleCA9PSBVSU5UX01BWCkK
ICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlsZWQoKTsKQEAgLTEyMiw3ICsxMjIsNyBA
QCBpbmxpbmUgTWF0Y2hSZXN1bHQgUmVnRXhwT2JqZWN0OjptYXRjaElubGluZSgKICAgICBNYXRj
aFJlc3VsdCByZXN1bHQgPSBnbG9iYWxPYmplY3QtPnJlZ0V4cEdsb2JhbERhdGEoKS5wZXJmb3Jt
TWF0Y2godm0sIGdsb2JhbE9iamVjdCwgcmVnRXhwLCBzdHJpbmcsIGlucHV0LCBsYXN0SW5kZXgp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgIHNldExhc3RJbmRleChleGVjLCByZXN1bHQuZW5kKTsKKyAgICBzZXRMYXN0SW5k
ZXgoZ2xvYmFsT2JqZWN0LCByZXN1bHQuZW5kKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBA
IC0xNDMsNyArMTQzLDcgQEAgaW5saW5lIHVuc2lnbmVkIGFkdmFuY2VTdHJpbmdVbmljb2RlKFN0
cmluZyBzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnQKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgRml4RW5kRnVuYz4KLUpTVmFsdWUgY29sbGVjdE1hdGNoZXMoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgcywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVnRXhwKiByZWdFeHAsIGNvbnN0IEZpeEVuZEZ1bmMmIGZp
eEVuZCkKK0pTVmFsdWUgY29sbGVjdE1hdGNoZXMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nLCBjb25zdCBTdHJpbmcmIHMsIFJlZ0V4cCogcmVn
RXhwLCBjb25zdCBGaXhFbmRGdW5jJiBmaXhFbmQpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0xNTQsNyArMTU0LDcgQEAgSlNWYWx1ZSBjb2xsZWN0
TWF0Y2hlcyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgY29uc3Qg
U3RyaW5nJgogICAgIAogICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhTaXplRm9yRGlyZWN0UGF0aCA9
IDEwMDAwMDsKICAgICAKLSAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cik7CisgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGdsb2JhbE9iamVjdCwgbnVsbHB0cik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgIGJvb2wgaGFzRXhjZXB0aW9uID0gZmFsc2U7CkBAIC0xNjIsNyArMTYyLDcg
QEAgSlNWYWx1ZSBjb2xsZWN0TWF0Y2hlcyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIHN0cmluZywgY29uc3QgU3RyaW5nJgogICAgIGF1dG8gaXRlcmF0ZSA9IFsmXSAoKSB7CiAg
ICAgICAgIHNpemVfdCBlbmQgPSByZXN1bHQuZW5kOwogICAgICAgICBzaXplX3QgbGVuZ3RoID0g
ZW5kIC0gcmVzdWx0LnN0YXJ0OwotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
YXJyYXlJbmRleCsrLCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIHN0cmluZywgcmVzdWx0LnN0
YXJ0LCBsZW5ndGgpKTsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVj
dCwgYXJyYXlJbmRleCsrLCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIHN0cmluZywgcmVzdWx0
LnN0YXJ0LCBsZW5ndGgpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkgewogICAgICAgICAgICAgaGFzRXhjZXB0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTE4Myw3ICsxODMsNyBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVzKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgICAg
ICBNYXRjaFJlc3VsdCBzYXZlZFJlc3VsdCA9IHJlc3VsdDsKICAgICAgICAgICAgIGRvIHsKICAg
ICAgICAgICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpICsgbWF0Y2hDb3VudCA+IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAppbmRl
eCA0YjhhZjA1YmU3NDUwNjNmNzAzN2Q1NzQzOGU3ZWYzNjUyZDVhY2MwLi4yYTEwM2FiMGJmNGFm
YjMyYTQzMzVkOTExYmYzNGIzMjk2ZmMzNDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKQEAgLTk0LDEyICs5NCwxMiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1Rlc3RGYXN0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplYwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50
aGlzVmFsdWUoKTsKICAgICBhdXRvKiByZWdleHAgPSBqc0R5bmFtaWNDYXN0PFJlZ0V4cE9iamVj
dCo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJS0VMWSghcmVnZXhwKSkKLSAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7Ci0gICAgSlNTdHJpbmcq
IHN0cmluZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9TdHJpbmdPck51bGwoY2FsbEZyYW1l
KTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7
CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9TdHJpbmdP
ck51bGwoZ2xvYmFsT2JqZWN0KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0
aW9uKCkgPT0gIXN0cmluZyk7CiAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlZ2V4cC0+dGVzdChjYWxsRnJhbWUsIGdsb2Jh
bE9iamVjdCwgc3RyaW5nKSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4ocmVnZXhwLT50ZXN0KGdsb2JhbE9iamVjdCwgc3RyaW5nKSkp
KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNFeGVj
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAt
MTEwLDEyICsxMTAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90
b0Z1bmNFeGVjKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgYXV0byogcmVnZXhwID0ganNE
eW5hbWljQ2FzdDxSZWdFeHBPYmplY3QqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIXJlZ2V4cCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwg
c2NvcGUsICJCdWlsdGluIFJlZ0V4cCBleGVjIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4
cCBvYmplY3QiKTsKLSAgICBKU1N0cmluZyogc3RyaW5nID0gY2FsbEZyYW1lLT5hcmd1bWVudCgw
KS50b1N0cmluZ09yTnVsbChjYWxsRnJhbWUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQnVpbHRpbiBSZWdFeHAgZXhlYyBjYW4gb25seSBi
ZSBjYWxsZWQgb24gYSBSZWdFeHAgb2JqZWN0Iik7CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCkudG9TdHJpbmdPck51bGwoZ2xvYmFsT2JqZWN0KTsKICAgICBF
WENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXN0cmluZyk7CiAgICAgaWYg
KCFzdHJpbmcpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUocmVnZXhwLT5l
eGVjKGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBzdHJpbmcpKSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUocmVnZXhwLT5leGVjKGdsb2JhbE9iamVjdCwg
c3RyaW5nKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
RnVuY01hdGNoRmFzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKQEAgLTEyMyw4ICsxMjMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZ0V4cFByb3RvRnVuY01hdGNoRmFzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQogICAg
IFJlZ0V4cE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBPYmplY3QqPihjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpKTsKICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5n
Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgaWYgKCF0aGlzT2JqZWN0
LT5yZWdFeHAoKS0+Z2xvYmFsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhp
c09iamVjdC0+ZXhlYyhjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgc3RyaW5nKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5tYXRjaEdsb2JhbChjYWxsRnJhbWUsIGds
b2JhbE9iamVjdCwgc3RyaW5nKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhp
c09iamVjdC0+ZXhlYyhnbG9iYWxPYmplY3QsIHN0cmluZykpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhpc09iamVjdC0+bWF0Y2hHbG9iYWwoZ2xvYmFsT2JqZWN0LCBzdHJpbmcpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNDb21waWxl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAt
MTM1LDcgKzEzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9G
dW5jQ29tcGlsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNSZWdFeHAgPSBq
c0R5bmFtaWNDYXN0PFJlZ0V4cE9iamVjdCo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmIChVTkxJ
S0VMWSghdGhpc1JlZ0V4cCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxG
cmFtZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlKTsKIAogICAgIFJlZ0V4cCogcmVnRXhwOwogICAgIEpTVmFsdWUgYXJnMCA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CkBAIC0xNDMsNjQgKzE0Myw2NCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdAogICAgIAogICAgIGlmIChhdXRvKiByZWdFeHBPYmplY3QgPSBqc0R5bmFtaWND
YXN0PFJlZ0V4cE9iamVjdCo+KHZtLCBhcmcwKSkgewogICAgICAgICBpZiAoIWFyZzEuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwg
c2NvcGUsICJDYW5ub3Qgc3VwcGx5IGZsYWdzIHdoZW4gY29uc3RydWN0aW5nIG9uZSBSZWdFeHAg
ZnJvbSBhbm90aGVyLiJfcyk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHN1cHBseSBmbGFncyB3aGVuIGNvbnN0cnVjdGlu
ZyBvbmUgUmVnRXhwIGZyb20gYW5vdGhlci4iX3MpOwogICAgICAgICByZWdFeHAgPSByZWdFeHBP
YmplY3QtPnJlZ0V4cCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyBwYXR0ZXJuID0g
YXJnMC5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IGFyZzAudG9XVEZTdHJpbmcoY2Fs
bEZyYW1lKTsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBhcmcwLmlzVW5kZWZpbmVkKCkgPyBl
bXB0eVN0cmluZygpIDogYXJnMC50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgICAgICBh
dXRvIGZsYWdzID0gYXJnMS5pc1VuZGVmaW5lZCgpID8gbWFrZU9wdGlvbmFsKE9wdGlvblNldDxZ
YXJyOjpGbGFncz4geyB9KSA6IFlhcnI6OnBhcnNlRmxhZ3MoYXJnMS50b1dURlN0cmluZyhjYWxs
RnJhbWUpKTsKKyAgICAgICAgYXV0byBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IG1ha2VP
cHRpb25hbChPcHRpb25TZXQ8WWFycjo6RmxhZ3M+IHsgfSkgOiBZYXJyOjpwYXJzZUZsYWdzKGFy
ZzEudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoIWZsYWdzKQotICAgICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBjcmVhdGVTeW50YXhF
cnJvcihjYWxsRnJhbWUsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1
Y3Rvci4iX3MpKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCAiSW52YWxpZCBmbGFncyBz
dXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIl9zKSk7CiAKICAgICAgICAgcmVnRXhwID0g
UmVnRXhwOjpjcmVhdGUodm0sIHBhdHRlcm4sIGZsYWdzLnZhbHVlKCkpOwogICAgIH0KIAogICAg
IGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2Fs
bEZyYW1lLCBzY29wZSwgcmVnRXhwLT5lcnJvclRvVGhyb3coY2FsbEZyYW1lKSk7CisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgcmVnRXhwLT5lcnJvclRv
VGhyb3coZ2xvYmFsT2JqZWN0KSk7CiAKICAgICB0aGlzUmVnRXhwLT5zZXRSZWdFeHAodm0sIHJl
Z0V4cCk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHRoaXNSZWdFeHAtPnNldExhc3RJbmRl
eChjYWxsRnJhbWUsIDApOworICAgIHRoaXNSZWdFeHAtPnNldExhc3RJbmRleChnbG9iYWxPYmpl
Y3QsIDApOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc1JlZ0V4cCk7CiB9CiAKIHR5
cGVkZWYgc3RkOjphcnJheTxjaGFyLCA2ICsgMT4gRmxhZ3NTdHJpbmc7IC8vIDYgZGlmZmVyZW50
IGZsYWdzIGFuZCBhIG51bGwgY2hhcmFjdGVyIHRlcm1pbmF0b3IuCiAKLXN0YXRpYyBpbmxpbmUg
RmxhZ3NTdHJpbmcgZmxhZ3NTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcmVnZXhw
KQorc3RhdGljIGlubGluZSBGbGFnc1N0cmluZyBmbGFnc1N0cmluZyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogcmVnZXhwKQogewogICAgIEZsYWdzU3RyaW5nIHN0cmlu
ZzsKICAgICBzdHJpbmdbMF0gPSAwOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgSlNWYWx1ZSBnbG9iYWxWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmdsb2JhbCk7CisgICAgSlNWYWx1ZSBnbG9iYWxWYWx1ZSA9
IHJlZ2V4cC0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+Z2xvYmFsKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdHJpbmcpOwotICAgIEpTVmFsdWUgaWdub3Jl
Q2FzZVZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+aWdub3JlQ2Fz
ZSk7CisgICAgSlNWYWx1ZSBpZ25vcmVDYXNlVmFsdWUgPSByZWdleHAtPmdldChnbG9iYWxPYmpl
Y3QsIHZtLnByb3BlcnR5TmFtZXMtPmlnbm9yZUNhc2UpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHN0cmluZyk7Ci0gICAgSlNWYWx1ZSBtdWx0aWxpbmVWYWx1ZSA9IHJlZ2V4cC0+
Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm11bHRpbGluZSk7CisgICAgSlNWYWx1ZSBtdWx0
aWxpbmVWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+
bXVsdGlsaW5lKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdHJpbmcpOwotICAg
IEpTVmFsdWUgZG90QWxsVmFsdWUgPSByZWdleHAtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5kb3RBbGwpOworICAgIEpTVmFsdWUgZG90QWxsVmFsdWUgPSByZWdleHAtPmdldChnbG9iYWxP
YmplY3QsIHZtLnByb3BlcnR5TmFtZXMtPmRvdEFsbCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgc3RyaW5nKTsKLSAgICBKU1ZhbHVlIHVuaWNvZGVWYWx1ZSA9IHJlZ2V4cC0+Z2V0
KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnVuaWNvZGUpOworICAgIEpTVmFsdWUgdW5pY29kZVZh
bHVlID0gcmVnZXhwLT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT51bmljb2Rl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdHJpbmcpOwotICAgIEpTVmFsdWUg
c3RpY2t5VmFsdWUgPSByZWdleHAtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdGlja3kp
OworICAgIEpTVmFsdWUgc3RpY2t5VmFsdWUgPSByZWdleHAtPmdldChnbG9iYWxPYmplY3QsIHZt
LnByb3BlcnR5TmFtZXMtPnN0aWNreSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
c3RyaW5nKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBpZiAoZ2xvYmFsVmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKQorICAgIGlmIChnbG9iYWxWYWx1ZS50b0Jvb2xlYW4oZ2xvYmFsT2Jq
ZWN0KSkKICAgICAgICAgc3RyaW5nW2luZGV4KytdID0gJ2cnOwotICAgIGlmIChpZ25vcmVDYXNl
VmFsdWUudG9Cb29sZWFuKGV4ZWMpKQorICAgIGlmIChpZ25vcmVDYXNlVmFsdWUudG9Cb29sZWFu
KGdsb2JhbE9iamVjdCkpCiAgICAgICAgIHN0cmluZ1tpbmRleCsrXSA9ICdpJzsKLSAgICBpZiAo
bXVsdGlsaW5lVmFsdWUudG9Cb29sZWFuKGV4ZWMpKQorICAgIGlmIChtdWx0aWxpbmVWYWx1ZS50
b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KSkKICAgICAgICAgc3RyaW5nW2luZGV4KytdID0gJ20nOwot
ICAgIGlmIChkb3RBbGxWYWx1ZS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKGRvdEFsbFZhbHVl
LnRvQm9vbGVhbihnbG9iYWxPYmplY3QpKQogICAgICAgICBzdHJpbmdbaW5kZXgrK10gPSAncyc7
Ci0gICAgaWYgKHVuaWNvZGVWYWx1ZS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHVuaWNvZGVW
YWx1ZS50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KSkKICAgICAgICAgc3RyaW5nW2luZGV4KytdID0g
J3UnOwotICAgIGlmIChzdGlja3lWYWx1ZS50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHN0aWNr
eVZhbHVlLnRvQm9vbGVhbihnbG9iYWxPYmplY3QpKQogICAgICAgICBzdHJpbmdbaW5kZXgrK10g
PSAneSc7CiAgICAgQVNTRVJUKGluZGV4IDwgc3RyaW5nLnNpemUoKSk7CiAgICAgc3RyaW5nW2lu
ZGV4XSA9IDA7CkBAIC0yMTQsMjYgKzIxNCwyNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwog
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlm
ICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gYXNPYmplY3Qo
dGhpc1ZhbHVlKTsKIAotICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihjYWxsRnJh
bWUsIHRoaXNPYmplY3QpOworICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihnbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1ZSgpKTsKICAgICBpZiAoSlNWYWx1ZSBl
YXJseVJldHVyblZhbHVlID0gY2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKLSAgICBKU1ZhbHVlIHNv
dXJjZVZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGNhbGxGcmFtZSwgdm0ucHJvcGVydHlOYW1lcy0+
c291cmNlKTsKKyAgICBKU1ZhbHVlIHNvdXJjZVZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGdsb2Jh
bE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBTdHJpbmcgc291cmNlID0gc291cmNl
VmFsdWUudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgc291cmNlID0gc291cmNl
VmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIEpTVmFsdWUgZmxhZ3NWYWx1ZSA9IHRo
aXNPYmplY3QtPmdldChjYWxsRnJhbWUsIHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzKTsKKyAgICBK
U1ZhbHVlIGZsYWdzVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9w
ZXJ0eU5hbWVzLT5mbGFncyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgU3RyaW5nIGZsYWdzID0gZmxhZ3NWYWx1ZS50b1dURlN0cmluZyhj
YWxsRnJhbWUpOworICAgIFN0cmluZyBmbGFncyA9IGZsYWdzVmFsdWUudG9XVEZTdHJpbmcoZ2xv
YmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoY2FsbEZyYW1lLCAnLycsIHNvdXJjZSwgJy8nLCBmbGFncykp
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc01ha2VO
b250cml2aWFsU3RyaW5nKGdsb2JhbE9iamVjdCwgJy8nLCBzb3VyY2UsICcvJywgZmxhZ3MpKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9HZXR0ZXJHbG9i
YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBA
IC0yNDYsNyArMjQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90
b0dldHRlckdsb2JhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICBpZiAoVU5MSUtF
TFkoIXJlZ2V4cCkpIHsKICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0czxSZWdFeHBQcm90
b3R5cGU+KHZtKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUs
ICJUaGUgUmVnRXhwLnByb3RvdHlwZS5nbG9iYWwgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBv
biBhIFJlZ0V4cCBvYmplY3QiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGhlIFJlZ0V4cC5wcm90b3R5cGUuZ2xvYmFsIGdldHRlciBj
YW4gb25seSBiZSBjYWxsZWQgb24gYSBSZWdFeHAgb2JqZWN0Il9zKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZWdleHAtPnJlZ0V4cCgpLT5nbG9iYWwo
KSkpOwpAQCAtMjYyLDcgKzI2Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG9HZXR0ZXJJZ25vcmVDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgaWYg
KFVOTElLRUxZKCFyZWdleHApKSB7CiAgICAgICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHM8UmVn
RXhwUHJvdG90eXBlPih2bSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUs
IHNjb3BlLCAiVGhlIFJlZ0V4cC5wcm90b3R5cGUuaWdub3JlQ2FzZSBnZXR0ZXIgY2FuIG9ubHkg
YmUgY2FsbGVkIG9uIGEgUmVnRXhwIG9iamVjdCJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUaGUgUmVnRXhwLnByb3RvdHlwZS5pZ25v
cmVDYXNlIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBSZWdFeHAgb2JqZWN0Il9zKTsK
ICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZWdleHAtPnJl
Z0V4cCgpLT5pZ25vcmVDYXNlKCkpKTsKQEAgLTI3OCw3ICsyNzgsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0dGVyTXVsdGlsaW5lKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYgogICAgIGlmIChVTkxJS0VMWSghcmVnZXhwKSkgewogICAgICAgICBpZiAodGhp
c1ZhbHVlLmluaGVyaXRzPFJlZ0V4cFByb3RvdHlwZT4odm0pKQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlRoZSBSZWdFeHAucHJvdG90eXBlLm11bHRpbGlu
ZSBnZXR0ZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGEgUmVnRXhwIG9iamVjdCJfcyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUaGUgUmVn
RXhwLnByb3RvdHlwZS5tdWx0aWxpbmUgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJl
Z0V4cCBvYmplY3QiX3MpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHJlZ2V4cC0+cmVnRXhwKCktPm11bHRpbGluZSgpKSk7CkBAIC0yOTQsNyArMjk0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlckRvdEFsbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICBpZiAoVU5MSUtFTFkoIXJlZ2V4cCkpIHsK
ICAgICAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0czxSZWdFeHBQcm90b3R5cGU+KHZtKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJUaGUgUmVnRXhwLnBy
b3RvdHlwZS5kb3RBbGwgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmpl
Y3QiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiVGhlIFJlZ0V4cC5wcm90b3R5cGUuZG90QWxsIGdldHRlciBjYW4gb25seSBiZSBjYWxs
ZWQgb24gYSBSZWdFeHAgb2JqZWN0Il9zKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4ocmVnZXhwLT5yZWdFeHAoKS0+ZG90QWxsKCkpKTsKQEAgLTMx
MCw3ICszMTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvR2V0
dGVyU3RpY2t5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgIGlmIChVTkxJS0VMWSgh
cmVnZXhwKSkgewogICAgICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzPFJlZ0V4cFByb3RvdHlw
ZT4odm0pKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlRo
ZSBSZWdFeHAucHJvdG90eXBlLnN0aWNreSBnZXR0ZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGEg
UmVnRXhwIG9iamVjdCJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUaGUgUmVnRXhwLnByb3RvdHlwZS5zdGlja3kgZ2V0dGVyIGNhbiBv
bmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmplY3QiX3MpOwogICAgIH0KICAgICAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZWdleHAtPnJlZ0V4cCgpLT5zdGlja3ko
KSkpOwpAQCAtMzI2LDcgKzMyNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG9HZXR0ZXJVbmljb2RlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplCiAgICAgaWYg
KFVOTElLRUxZKCFyZWdleHApKSB7CiAgICAgICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHM8UmVn
RXhwUHJvdG90eXBlPih2bSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUs
IHNjb3BlLCAiVGhlIFJlZ0V4cC5wcm90b3R5cGUudW5pY29kZSBnZXR0ZXIgY2FuIG9ubHkgYmUg
Y2FsbGVkIG9uIGEgUmVnRXhwIG9iamVjdCJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUaGUgUmVnRXhwLnByb3RvdHlwZS51bmljb2Rl
IGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYSBSZWdFeHAgb2JqZWN0Il9zKTsKICAgICB9
CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVnZXhwLT5yZWdF
eHAoKS0+dW5pY29kZSgpKSk7CkBAIC0zMzksOSArMzM5LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90b0dldHRlckZsYWdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsK
ICAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlRoZSBSZWdFeHAucHJvdG90eXBl
LmZsYWdzIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYW4gb2JqZWN0Il9zKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlRoZSBSZWdF
eHAucHJvdG90eXBlLmZsYWdzIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYW4gb2JqZWN0
Il9zKTsKIAotICAgIGF1dG8gZmxhZ3MgPSBmbGFnc1N0cmluZyhjYWxsRnJhbWUsIGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOworICAgIGF1dG8gZmxhZ3MgPSBmbGFnc1N0cmluZyhnbG9iYWxPYmplY3Qs
IGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2
bSwgZmxhZ3MuZGF0YSgpKSk7CkBAIC0zNzMsOSArMzczLDkgQEAgaW5saW5lIHZvaWQgYXBwZW5k
TGluZVRlcm1pbmF0b3JFc2NhcGU8VUNoYXI+KFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIFVDaGFy
IGxpbmUKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUgcmVnRXhwUHJvdG9HZXR0ZXJTb3VyY2VJbnRlcm5hbChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgcGF0dGVybiwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIHJlZ0V4cFByb3RvR2V0
dGVyU291cmNlSW50ZXJuYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3Ry
aW5nJiBwYXR0ZXJuLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYm9vbCBwcmV2aW91c0NoYXJhY3Rlcldhc0JhY2tzbGFzaCA9IGZh
bHNlOwogICAgIGJvb2wgaW5CcmFja2V0cyA9IGZhbHNlOwogICAgIGJvb2wgc2hvdWxkRXNjYXBl
ID0gZmFsc2U7CkBAIC00NjQsMTMgKzQ2NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvR2V0dGVyU291cmNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwog
ICAgIGlmIChVTkxJS0VMWSghcmVnZXhwKSkgewogICAgICAgICBpZiAodGhpc1ZhbHVlLmluaGVy
aXRzPFJlZ0V4cFByb3RvdHlwZT4odm0pKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyh2bSwgIig/OikiX3MpKTsKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlRoZSBSZWdFeHAucHJvdG90eXBlLnNvdXJjZSBnZXR0
ZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGEgUmVnRXhwIG9iamVjdCJfcyk7CisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUaGUgUmVnRXhwLnBy
b3RvdHlwZS5zb3VyY2UgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhIFJlZ0V4cCBvYmpl
Y3QiX3MpOwogICAgIH0KIAogICAgIFN0cmluZyBwYXR0ZXJuID0gcmVnZXhwLT5yZWdFeHAoKS0+
cGF0dGVybigpOwogICAgIGlmIChwYXR0ZXJuLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlZ0V4cFByb3RvR2V0dGVyU291cmNlSW50ZXJuYWwoY2FsbEZyYW1lLCBw
YXR0ZXJuLCBwYXR0ZXJuLmNoYXJhY3RlcnM4KCksIHBhdHRlcm4ubGVuZ3RoKCkpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlZ0V4cFByb3RvR2V0dGVyU291cmNlSW50ZXJuYWwoY2Fs
bEZyYW1lLCBwYXR0ZXJuLCBwYXR0ZXJuLmNoYXJhY3RlcnMxNigpLCBwYXR0ZXJuLmxlbmd0aCgp
KSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhwUHJvdG9HZXR0ZXJTb3Vy
Y2VJbnRlcm5hbChnbG9iYWxPYmplY3QsIHBhdHRlcm4sIHBhdHRlcm4uY2hhcmFjdGVyczgoKSwg
cGF0dGVybi5sZW5ndGgoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhwUHJv
dG9HZXR0ZXJTb3VyY2VJbnRlcm5hbChnbG9iYWxPYmplY3QsIHBhdHRlcm4sIHBhdHRlcm4uY2hh
cmFjdGVyczE2KCksIHBhdHRlcm4ubGVuZ3RoKCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNTZWFyY2hGYXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNDgwLDggKzQ4MCw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFzdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpOwogICAgIFJlZ0V4cCogcmVnRXhwID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KHRo
aXNWYWx1ZSktPnJlZ0V4cCgpOwogCi0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoY2FsbEZyYW1lKTsKLSAgICBTdHJpbmcgcyA9
IHN0cmluZy0+dmFsdWUoY2FsbEZyYW1lKTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhnbG9iYWxPYmplY3QpOworICAgIFN0
cmluZyBzID0gc3RyaW5nLT52YWx1ZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0
ID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBHbG9iYWxEYXRhKCkucGVyZm9ybU1hdGNoKHZtLCBnbG9i
YWxPYmplY3QsIHJlZ0V4cCwgc3RyaW5nLCBzLCAwKTsKQEAgLTU4OCw4ICs1ODgsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZQogICAgIFJlZ0V4cCogcmVnZXhwID0ganNDYXN0PFJlZ0V4cE9i
amVjdCo+KHRoaXNWYWx1ZSktPnJlZ0V4cCgpOwogCiAgICAgLy8gMy4gW2hhbmRsZWQgYnkgSlMg
YnVpbHRpbl0gTGV0IFMgYmUgPyBUb1N0cmluZyhzdHJpbmcpLgotICAgIEpTU3RyaW5nKiBpbnB1
dFN0cmluZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoY2FsbEZyYW1lKTsKLSAg
ICBTdHJpbmcgaW5wdXQgPSBpbnB1dFN0cmluZy0+dmFsdWUoY2FsbEZyYW1lKTsKKyAgICBKU1N0
cmluZyogaW5wdXRTdHJpbmcgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGdsb2Jh
bE9iamVjdCk7CisgICAgU3RyaW5nIGlucHV0ID0gaW5wdXRTdHJpbmctPnZhbHVlKGdsb2JhbE9i
amVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgQVNTRVJUKCFpbnB1dC5pc051bGwoKSk7CiAKQEAgLTYwMywxMyArNjAzLDEzIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU3BsaXRGYXN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplCiAKICAgICAvLyAxMS4gTGV0IEEgYmUgQXJyYXlDcmVhdGUo
MCkuCiAgICAgLy8gMTIuIExldCBsZW5ndGhBIGJlIDAuCi0gICAgSlNBcnJheSogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlBcnJheShjYWxsRnJhbWUsIDApOworICAgIEpTQXJyYXkqIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCAwKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5n
dGggPSAwOwogCiAgICAgLy8gMTMuIElmIGxpbWl0IGlzIHVuZGVmaW5lZCwgbGV0IGxpbSBiZSAy
XjMyLTE7IGVsc2UgbGV0IGxpbSBiZSA/IFRvVWludDMyKGxpbWl0KS4KICAgICBKU1ZhbHVlIGxp
bWl0VmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOwotICAgIHVuc2lnbmVkIGxpbWl0ID0g
bGltaXRWYWx1ZS5pc1VuZGVmaW5lZCgpID8gMHhGRkZGRkZGRnUgOiBsaW1pdFZhbHVlLnRvVUlu
dDMyKGNhbGxGcmFtZSk7CisgICAgdW5zaWduZWQgbGltaXQgPSBsaW1pdFZhbHVlLmlzVW5kZWZp
bmVkKCkgPyAweEZGRkZGRkZGdSA6IGxpbWl0VmFsdWUudG9VSW50MzIoZ2xvYmFsT2JqZWN0KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IC8vIDE0LiBMZXQgc2l6ZSBiZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIFMuCkBAIC02Mjks
NyArNjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNT
cGxpdEZhc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAgICAgICAgLy8gYy4gUGVyZm9y
bSAhIENyZWF0ZURhdGFQcm9wZXJ0eShBLCAiMCIsIFMpLgogICAgICAgICAvLyBkLiBSZXR1cm4g
QS4KICAgICAgICAgaWYgKCFyZWdleHAtPm1hdGNoKHZtLCBpbnB1dCwgMCkpIHsKLSAgICAgICAg
ICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCAwLCBpbnB1dFN0cmluZyk7Cisg
ICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgMCwgaW5wdXRT
dHJpbmcpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwpAQCAtNjUxLDcgKzY1MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG9GdW5jU3BsaXRGYXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplCiAgICAgICAg
ICAgICByZXR1cm4gQ29udGludWVTcGxpdDsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChib29s
IGlzRGVmaW5lZCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkgLT4gU3BsaXRDb250
cm9sIHsKLSAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCByZXN1
bHRMZW5ndGgrKywgaXNEZWZpbmVkID8ganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dFN0
cmluZywgc3RhcnQsIGxlbmd0aCkgOiBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgrKywgaXNEZWZpbmVk
ID8ganNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dFN0cmluZywgc3RhcnQsIGxlbmd0aCkg
OiBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEFib3J0U3BsaXQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdExlbmd0aCA+PSBsaW1pdCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gQWJvcnRTcGxpdDsKQEAgLTY2NSw3ICs2NjUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZQogICAgICAgICAvLyAyMC4gTGV0IFQgYmUgYSBTdHJpbmcgdmFs
dWUgZXF1YWwgdG8gdGhlIHN1YnN0cmluZyBvZiBTIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnRz
IGF0IGluZGljZXMgcCAoaW5jbHVzaXZlKSB0aHJvdWdoIHNpemUgKGV4Y2x1c2l2ZSkuCiAgICAg
ICAgIC8vIDIxLiBQZXJmb3JtICEgQ3JlYXRlRGF0YVByb3BlcnR5KEEsICEgVG9TdHJpbmcobGVu
Z3RoQSksIFQpLgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCByZXN1bHRMZW5ndGgsIGpzU3Vic3RyaW5nT2ZSZXNvbHZl
ZCh2bSwgaW5wdXRTdHJpbmcsIHBvc2l0aW9uLCBpbnB1dFNpemUgLSBwb3NpdGlvbikpOworICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoLCBq
c1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0U3RyaW5nLCBwb3NpdGlvbiwgaW5wdXRTaXpl
IC0gcG9zaXRpb24pKTsKICAgICAgICAgCiAgICAgICAgIC8vIDIyLiBSZXR1cm4gQS4KICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNjkwLDcgKzY5MCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU3BsaXRGYXN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplCiAgICAgICAgIH0pOwogICAgIAogICAgIGlmIChyZXN1bHRM
ZW5ndGggKyBkcnlSdW5Db3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKLSAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBl
bmNvZGVkSlNWYWx1ZSgpOwogICAgIH0KICAgICAKQEAgLTcwNCw3ICs3MDQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZQogICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU3BsaXQ7CiAgICAg
ICAgIH0sCiAgICAgICAgIFsmXSAoYm9vbCBpc0RlZmluZWQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBsZW5ndGgpIC0+IFNwbGl0Q29udHJvbCB7Ci0gICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdEluZGV4KGNhbGxGcmFtZSwgcmVzdWx0TGVuZ3RoKyssIGlzRGVmaW5lZCA/IGpzU3Vic3Ry
aW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXRTdHJpbmcsIHN0YXJ0LCBsZW5ndGgpIDoganNVbmRlZmlu
ZWQoKSk7CisgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwg
cmVzdWx0TGVuZ3RoKyssIGlzRGVmaW5lZCA/IGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5w
dXRTdHJpbmcsIHN0YXJ0LCBsZW5ndGgpIDoganNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBBYm9ydFNwbGl0KTsKICAgICAgICAgICAgIGlmIChy
ZXN1bHRMZW5ndGggPj0gbGltaXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFib3J0U3BsaXQ7
CkBAIC03MTgsNyArNzE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQ
cm90b0Z1bmNTcGxpdEZhc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAgICAvLyAyMC4g
TGV0IFQgYmUgYSBTdHJpbmcgdmFsdWUgZXF1YWwgdG8gdGhlIHN1YnN0cmluZyBvZiBTIGNvbnNp
c3Rpbmcgb2YgdGhlIGVsZW1lbnRzIGF0IGluZGljZXMgcCAoaW5jbHVzaXZlKSB0aHJvdWdoIHNp
emUgKGV4Y2x1c2l2ZSkuCiAgICAgLy8gMjEuIFBlcmZvcm0gISBDcmVhdGVEYXRhUHJvcGVydHko
QSwgISBUb1N0cmluZyhsZW5ndGhBKSwgVCkuCiAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJl
c3VsdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCByZXN1bHRMZW5ndGgsIGpzU3Vic3RyaW5n
T2ZSZXNvbHZlZCh2bSwgaW5wdXRTdHJpbmcsIHBvc2l0aW9uLCBpbnB1dFNpemUgLSBwb3NpdGlv
bikpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5n
dGgsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXRTdHJpbmcsIHBvc2l0aW9uLCBpbnB1
dFNpemUgLSBwb3NpdGlvbikpOwogICAgIC8vIDIyLiBSZXR1cm4gQS4KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCmluZGV4IDA4MjAyMWE5YzEyMGQwNjJiZWZjODU4
NzBjYzcyN2QxZDJlMDhjY2QuLmNlYWMwY2IzMDk0NTc3NzM1Y2Q0ZjlmYjdmNWYwNTlmMTk4YmZm
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJv
ZmlsZXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgcmVw
b3J0U3RhdHMoKQogCiBjbGFzcyBGcmFtZVdhbGtlciB7CiBwdWJsaWM6Ci0gICAgRnJhbWVXYWxr
ZXIoVk0mIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgY29uc3QgQWJzdHJhY3RMb2NrZXImIGNv
ZGVCbG9ja1NldExvY2tlciwgY29uc3QgQWJzdHJhY3RMb2NrZXImIG1hY2hpbmVUaHJlYWRzTG9j
a2VyLCBjb25zdCBBYnN0cmFjdExvY2tlciYgd2FzbUNhbGxlZUxvY2tlcikKKyAgICBGcmFtZVdh
bGtlcihWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBBYnN0cmFjdExvY2tlciYg
Y29kZUJsb2NrU2V0TG9ja2VyLCBjb25zdCBBYnN0cmFjdExvY2tlciYgbWFjaGluZVRocmVhZHNM
b2NrZXIsIGNvbnN0IEFic3RyYWN0TG9ja2VyJiB3YXNtQ2FsbGVlTG9ja2VyKQogICAgICAgICA6
IG1fdm0odm0pCiAgICAgICAgICwgbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQogICAgICAgICAsIG1f
ZW50cnlGcmFtZSh2bS50b3BFbnRyeUZyYW1lKQpAQCAtMTc5LDkgKzE3OSw5IEBAIGNsYXNzIEZy
YW1lV2Fsa2VyIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZEZyYW1lUG9p
bnRlcih2b2lkKiBleGVjKQorICAgIGJvb2wgaXNWYWxpZEZyYW1lUG9pbnRlcih2b2lkKiBjYWxs
RnJhbWUpCiAgICAgewotICAgICAgICB1aW50OF90KiBmcENhc3QgPSBiaXR3aXNlX2Nhc3Q8dWlu
dDhfdCo+KGV4ZWMpOworICAgICAgICB1aW50OF90KiBmcENhc3QgPSBiaXR3aXNlX2Nhc3Q8dWlu
dDhfdCo+KGNhbGxGcmFtZSk7CiAgICAgICAgIGZvciAoYXV0byYgdGhyZWFkIDogbV92bS5oZWFw
Lm1hY2hpbmVUaHJlYWRzKCkudGhyZWFkcyhtX21hY2hpbmVUaHJlYWRzTG9ja2VyKSkgewogICAg
ICAgICAgICAgdWludDhfdCogc3RhY2tCYXNlID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHRocmVh
ZC0+c3RhY2soKS5vcmlnaW4oKSk7CiAgICAgICAgICAgICB1aW50OF90KiBzdGFja0xpbWl0ID0g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KHRocmVhZC0+c3RhY2soKS5lbmQoKSk7CkBAIC0yMDMsNyAr
MjAzLDcgQEAgY2xhc3MgRnJhbWVXYWxrZXIgewogICAgIH0KIAogICAgIFZNJiBtX3ZtOwotICAg
IEV4ZWNTdGF0ZSogbV9jYWxsRnJhbWU7CisgICAgQ2FsbEZyYW1lKiBtX2NhbGxGcmFtZTsKICAg
ICBFbnRyeUZyYW1lKiBtX2VudHJ5RnJhbWU7CiAgICAgY29uc3QgQWJzdHJhY3RMb2NrZXImIG1f
Y29kZUJsb2NrU2V0TG9ja2VyOwogICAgIGNvbnN0IEFic3RyYWN0TG9ja2VyJiBtX21hY2hpbmVU
aHJlYWRzTG9ja2VyOwpAQCAtMjE2LDcgKzIxNiw3IEBAIGNsYXNzIENGcmFtZVdhbGtlciA6IHB1
YmxpYyBGcmFtZVdhbGtlciB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBGcmFtZVdhbGtlciBCYXNl
OwogCi0gICAgQ0ZyYW1lV2Fsa2VyKFZNJiB2bSwgdm9pZCogbWFjaGluZUZyYW1lLCBFeGVjU3Rh
dGUqIGNhbGxGcmFtZSwgY29uc3QgQWJzdHJhY3RMb2NrZXImIGNvZGVCbG9ja1NldExvY2tlciwg
Y29uc3QgQWJzdHJhY3RMb2NrZXImIG1hY2hpbmVUaHJlYWRzTG9ja2VyLCBjb25zdCBBYnN0cmFj
dExvY2tlciYgd2FzbUNhbGxlZUxvY2tlcikKKyAgICBDRnJhbWVXYWxrZXIoVk0mIHZtLCB2b2lk
KiBtYWNoaW5lRnJhbWUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBBYnN0cmFjdExvY2tl
ciYgY29kZUJsb2NrU2V0TG9ja2VyLCBjb25zdCBBYnN0cmFjdExvY2tlciYgbWFjaGluZVRocmVh
ZHNMb2NrZXIsIGNvbnN0IEFic3RyYWN0TG9ja2VyJiB3YXNtQ2FsbGVlTG9ja2VyKQogICAgICAg
ICA6IEJhc2Uodm0sIGNhbGxGcmFtZSwgY29kZUJsb2NrU2V0TG9ja2VyLCBtYWNoaW5lVGhyZWFk
c0xvY2tlciwgd2FzbUNhbGxlZUxvY2tlcikKICAgICAgICAgLCBtX21hY2hpbmVGcmFtZShtYWNo
aW5lRnJhbWUpCiAgICAgewpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxl
cjo6dGFrZVNhbXBsZShjb25zdCBBYnN0cmFjdExvY2tlciYsIFNlY29uZHMmIHN0YWNrVHJhY2VQ
cm9jCiAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5kZWQsIHdl
IGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFkCiAgICAg
ICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCiAgICAgICAgICAgICB2
b2lkKiBtYWNoaW5lRnJhbWU7Ci0gICAgICAgICAgICBFeGVjU3RhdGUqIGNhbGxGcmFtZTsKKyAg
ICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwogICAgICAgICAgICAgdm9pZCogbWFjaGlu
ZVBDOwogICAgICAgICAgICAgYm9vbCB0b3BGcmFtZUlzTExJbnQgPSBmYWxzZTsKICAgICAgICAg
ICAgIHZvaWQqIGxsaW50UEM7CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2Zp
bGVyOjp0YWtlU2FtcGxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU2Vjb25kcyYgc3RhY2tUcmFj
ZVByb2MKICAgICAgICAgICAgICAgICBQbGF0Zm9ybVJlZ2lzdGVycyByZWdpc3RlcnM7CiAgICAg
ICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmdldFJlZ2lzdGVycyhyZWdpc3RlcnMp
OwogICAgICAgICAgICAgICAgIG1hY2hpbmVGcmFtZSA9IE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIocmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBzdGF0aWNfY2Fz
dDxFeGVjU3RhdGUqPihtYWNoaW5lRnJhbWUpOworICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9
IHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KG1hY2hpbmVGcmFtZSk7CiAgICAgICAgICAgICAgICAg
YXV0byBpbnN0cnVjdGlvblBvaW50ZXIgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2lu
dGVyKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uUG9pbnRlcikK
ICAgICAgICAgICAgICAgICAgICAgbWFjaGluZVBDID0gaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRh
Z2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CkBAIC03NTUsMTUgKzc1NSwxNSBAQCBTdHJpbmcgU2Ft
cGxpbmdQcm9maWxlcjo6U3RhY2tGcmFtZTo6bmFtZUZyb21DYWxsZWUoVk0mIHZtKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gY2FsbGVlLT5nbG9iYWxPYmplY3Qodm0pLT5n
bG9iYWxFeGVjKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+
Z2xvYmFsT2JqZWN0KHZtKTsKICAgICBhdXRvIGdldFByb3BlcnR5SWZQdXJlT3BlcmF0aW9uID0g
WyZdIChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgLT4gU3RyaW5nIHsKICAgICAgICAgUHJvcGVy
dHlTbG90IHNsb3QoY2FsbGVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1J
bnF1aXJ5KTsKICAgICAgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZShpZGVudCk7Ci0gICAg
ICAgIGJvb2wgaGFzUHJvcGVydHkgPSBjYWxsZWUtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gY2FsbGVlLT5nZXRQ
cm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICBz
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICBpZiAoaGFzUHJvcGVydHkpIHsKICAg
ICAgICAgICAgIGlmIChzbG90LmlzVmFsdWUoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUg
bmFtZVZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAg
ICAgICAgIEpTVmFsdWUgbmFtZVZhbHVlID0gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzSlNTdHJpbmcobmFtZVZhbHVlKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKG5hbWVWYWx1ZSktPnRyeUdldFZh
bHVlKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcAppbmRleCBiNTc0OWUzMjNhNDkxOTMxYTU5NTE5N2IwOGYx
ZjRmZGJiMGZkYTJiLi5mNDgwYjE3NTdhYzkzMzRhNzNkM2E2YmY4ZmI3ZjljYTYwZGVjNjRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKQEAgLTg0LDEyICs4NCwxMiBAQCBTY29wZWRBcmd1bWVudHMqIFNjb3BlZEFyZ3VtZW50czo6
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRnVuY3RpbwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLVNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGVC
eUNvcHlpbmcoRXhlY1N0YXRlKiBleGVjLCBTY29wZWRBcmd1bWVudHNUYWJsZSogdGFibGUsIEpT
TGV4aWNhbEVudmlyb25tZW50KiBzY29wZSkKK1Njb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1l
bnRzOjpjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52
aXJvbm1lbnQqIHNjb3BlKQogewogICAgIHJldHVybiBjcmVhdGVCeUNvcHlpbmdGcm9tKAotICAg
ICAgICBleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnNjb3BlZEFyZ3Vt
ZW50c1N0cnVjdHVyZSgpLAotICAgICAgICBleGVjLT5yZWdpc3RlcnMoKSArIENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXQoMCksIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSwKLSAgICAgICAganNDYXN0
PEpTRnVuY3Rpb24qPihleGVjLT5qc0NhbGxlZSgpKSwgdGFibGUsIHNjb3BlKTsKKyAgICAgICAg
Z2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPnNjb3BlZEFyZ3VtZW50c1N0cnVjdHVy
ZSgpLAorICAgICAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksCisgICAgICAgIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKSwgdGFibGUsIHNjb3BlKTsKIH0KIAog
U2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZUJ5Q29weWluZ0Zyb20oVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnaXN0ZXIqIGFyZ3VtZW50c1N0YXJ0LCB1bnNp
Z25lZCB0b3RhbExlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBTY29wZWRBcmd1bWVudHNUYWJs
ZSogdGFibGUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBzY29wZSkKQEAgLTE1NCw5ICsxNTQsOSBA
QCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVpbnQzMl90IGkp
CiAgICAgICAgIG92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uY2xlYXIoKTsKIH0K
IAotdm9pZCBTY29wZWRBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMs
IFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKK3ZvaWQgU2NvcGVkQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKLSAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoZXhlYywgZmlyc3RFbGVt
ZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0Fy
Z3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0
LCBsZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKaW5kZXggOTI4NmE2ZmY0NTA0ZWY2YjE0
M2ExNWEyMzNiODYxMTdjZDljZTE5ZS4uZmQxODQ0ZDViYjdmYjQ0NmZhZGVjMmUxOWRmZjYxMDVm
N2EzN2NjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmgKQEAgLTU5LDcgKzU5LDcgQEAgY2xhc3MgU2NvcGVkQXJndW1lbnRzIGZpbmFsIDog
cHVibGljIEdlbmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPiB7CiAgICAgc3RhdGljIFNj
b3BlZEFyZ3VtZW50cyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNGdW5jdGlvbiogY2FsbGVl
LCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50KiwgdW5zaWduZWQg
dG90YWxMZW5ndGgpOwogICAgIAogICAgIC8vIENyZWF0ZXMgYW4gYXJndW1lbnRzIG9iamVjdCBi
eSBjb3B5aW5nIHRoZSBhcmd1bWVudHMgZnJvbSB0aGUgc3RhY2suCi0gICAgc3RhdGljIFNjb3Bl
ZEFyZ3VtZW50cyogY3JlYXRlQnlDb3B5aW5nKEV4ZWNTdGF0ZSosIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKKyAgICBzdGF0aWMgU2NvcGVkQXJndW1lbnRz
KiBjcmVhdGVCeUNvcHlpbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBTY29wZWRBcmd1
bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CiAgICAgCiAgICAgLy8gQ3JlYXRl
cyBhbiBhcmd1bWVudHMgb2JqZWN0IGJ5IGNvcHlpbmcgdGhlIGFyZ3VtZW50cyBmcm9tIGEgd2Vs
bC1kZWZpbmVkIHN0YWNrIGxvY2F0aW9uLgogICAgIHN0YXRpYyBTY29wZWRBcmd1bWVudHMqIGNy
ZWF0ZUJ5Q29weWluZ0Zyb20oVk0mLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRzU3Rh
cnQsIHVuc2lnbmVkIHRvdGFsTGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsKQEAgLTcxLDE0ICs3MSwxNCBAQCBj
bGFzcyBTY29wZWRBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgR2VuZXJpY0FyZ3VtZW50czxTY29w
ZWRBcmd1bWVudHM+IHsKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VIZWFkZXIoKS50b3RhbExlbmd0
aDsKICAgICB9CiAgICAgCi0gICAgdWludDMyX3QgbGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKKyAgICB1aW50MzJfdCBsZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29u
c3QKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9
IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHN0b3JhZ2VIZWFkZXIoKS5vdmVycm9k
ZVRoaW5ncykpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBnZXQoZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBnZXQoZ2xvYmFsT2Jq
ZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgMCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHZhbHVlLnRvVUludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgdmFsdWUudG9VSW50MzIoZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CiAgICAgfQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIGNsYXNz
IFNjb3BlZEFyZ3VtZW50cyBmaW5hbCA6IHB1YmxpYyBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFy
Z3VtZW50cz4gewogICAgICAgICByZXR1cm4gR2VuZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVu
dHM+Ojppc01vZGlmaWVkQXJndW1lbnREZXNjcmlwdG9yKGluZGV4LCBtX3RhYmxlLT5sZW5ndGgo
KSk7CiAgICAgfQogCi0gICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgVmlydHVh
bFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCmluZGV4IGQzMGM0
YWFhYjIzZjg1NWNhZjk1OTJmMzQ0MmU2MzVjODc0YTlhNDUuLmZmODQyMDI1ZDU3ZWMwNjJiZmNh
NTBlYTAxZWRiNTNlMWQzYTI4YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCkBAIC0yNTYsNyArMjU2LDYgQEAgQ29kZUJsb2Nr
KiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAgQVNTRVJUKGVuZENvbHVt
bigpICE9IFVJTlRfTUFYKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBz
Y29wZS0+Z2xvYmFsT2JqZWN0KHZtKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIGlmIChjbGFzc0luZm8odm0pID09IEV2YWxFeGVjdXRh
YmxlOjppbmZvKCkpIHsKICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nh
c3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKTsKQEAgLTI2OCw4ICsyNjcsOCBAQCBDb2RlQmxvY2sq
IFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigKICAgICAgICAgRVhDRVBUSU9OX0FT
U0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpIHx8IGNvZGVCbG9jayk7CiAgICAgICAgIGlmICgh
Y29kZUJsb2NrKSB7CiAgICAgICAgICAgICBleGNlcHRpb24gPSB0aHJvd0V4Y2VwdGlvbigKLSAg
ICAgICAgICAgICAgICBleGVjLCB0aHJvd1Njb3BlLAotICAgICAgICAgICAgICAgIGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwKKyAgICAgICAgICAgICAgICBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9i
amVjdCkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIGNvZGVCbG9jazsKQEAgLTI4NSw4ICsyODQsOCBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4
ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpIHx8IGNvZGVCbG9jayk7CiAgICAgICAgIGlmICghY29kZUJsb2Nr
KSB7CiAgICAgICAgICAgICBleGNlcHRpb24gPSB0aHJvd0V4Y2VwdGlvbigKLSAgICAgICAgICAg
ICAgICBleGVjLCB0aHJvd1Njb3BlLAotICAgICAgICAgICAgICAgIGNyZWF0ZU91dE9mTWVtb3J5
RXJyb3IoZXhlYykpOworICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwK
KyAgICAgICAgICAgICAgICBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCkpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNv
ZGVCbG9jazsKQEAgLTMwMiw4ICszMDEsOCBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6
Om5ld0NvZGVCbG9ja0ZvcigKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpIHx8IGNvZGVCbG9jayk7CiAgICAgICAgIGlmICghY29kZUJsb2NrKSB7CiAgICAg
ICAgICAgICBleGNlcHRpb24gPSB0aHJvd0V4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICBleGVj
LCB0aHJvd1Njb3BlLAotICAgICAgICAgICAgICAgIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhl
YykpOworICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwKKyAgICAgICAg
ICAgICAgICBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsK
QEAgLTMzNCw3ICszMzMsNyBAQCBDb2RlQmxvY2sqIFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVC
bG9ja0ZvcigKICAgICAgICAgbGFzdExpbmUoKSwgZW5kQ29sdW1uKCkpOyAKICAgICBpZiAoIXVu
bGlua2VkQ29kZUJsb2NrKSB7CiAgICAgICAgIGV4Y2VwdGlvbiA9IHRocm93RXhjZXB0aW9uKAot
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHRocm93U2NvcGUsCisgICAg
ICAgICAgICBnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsCiAgICAgICAgICAgICBlcnJvci50b0Vy
cm9yT2JqZWN0KGdsb2JhbE9iamVjdCwgZXhlY3V0YWJsZS0+c291cmNlKCkpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDEzLDggKzQxMiw4IEBAIEV4Y2VwdGlvbiogU2Ny
aXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoCiAgICAgRGVmZXJHQ0ZvckFX
aGlsZSBkZWZlckdDKHZtLmhlYXApOwogCiAgICAgaWYgKFVOTElLRUxZKHZtLmdldEFuZENsZWFy
RmFpbE5leHROZXdDb2RlQmxvY2soKSkpIHsKLSAgICAgICAgYXV0byYgc3RhdGUgPSAqc2NvcGUt
Pmdsb2JhbE9iamVjdCh2bSktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlRXJyb3IoJnN0YXRlLCAiRm9yY2VkIEZh
aWx1cmUiX3MpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3Bl
LT5nbG9iYWxPYmplY3Qodm0pOworICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsICJGb3JjZWQgRmFp
bHVyZSJfcykpOwogICAgIH0KIAogICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gbnVsbHB0cjsK
QEAgLTQ0Niw5ICs0NDUsOSBAQCBTY3JpcHRFeGVjdXRhYmxlKiBTY3JpcHRFeGVjdXRhYmxlOjp0
b3BMZXZlbEV4ZWN1dGFibGUoKQogICAgIH0KIH0KIAotSlNBcnJheSogU2NyaXB0RXhlY3V0YWJs
ZTo6Y3JlYXRlVGVtcGxhdGVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1RlbXBsYXRlT2JqZWN0
RGVzY3JpcHRvciogZGVzY3JpcHRvcikKK0pTQXJyYXkqIFNjcmlwdEV4ZWN1dGFibGU6OmNyZWF0
ZVRlbXBsYXRlT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVGVtcGxhdGVP
YmplY3REZXNjcmlwdG9yKiBkZXNjcmlwdG9yKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFRlbXBsYXRlT2JqZWN0TWFwJiB0ZW1wbGF0ZU9i
amVjdE1hcCA9IGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKHZtKTsKQEAgLTQ1OSw3ICs0NTgsNyBA
QCBKU0FycmF5KiBTY3JpcHRFeGVjdXRhYmxlOjpjcmVhdGVUZW1wbGF0ZU9iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVGVtcGxhdGVPYmplYwogICAgIH0KICAgICBpZiAoSlNBcnJheSogYXJyYXkg
PSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpKQogICAgICAgICByZXR1cm4gYXJyYXk7Ci0g
ICAgSlNBcnJheSogdGVtcGxhdGVPYmplY3QgPSBkZXNjcmlwdG9yLT5jcmVhdGVUZW1wbGF0ZU9i
amVjdChleGVjKTsKKyAgICBKU0FycmF5KiB0ZW1wbGF0ZU9iamVjdCA9IGRlc2NyaXB0b3ItPmNy
ZWF0ZVRlbXBsYXRlT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXQodm0sIHRo
aXMsIHRlbXBsYXRlT2JqZWN0KTsKICAgICByZXR1cm4gdGVtcGxhdGVPYmplY3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmgKaW5kZXggODI3
YjA3N2Y2ZmIzNzkxYjIwMWQ2MDVhZDk3NzcwY2M4MWNjZmU2Zi4uYTdkNmYxODEwNWRlM2ZhZDU0
MWE4MGZlYTk1ZDg0ZmM2NjMwOTE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuaApAQCAtMTE3LDcgKzExNyw3IEBAIGNsYXNzIFNjcmlw
dEV4ZWN1dGFibGUgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgewogICAgIEV4Y2VwdGlvbiogcHJl
cGFyZUZvckV4ZWN1dGlvbihWTSYsIEpTRnVuY3Rpb24qLCBKU1Njb3BlKiwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCwgQ29kZUJsb2NrKiYgcmVzdWx0Q29kZUJsb2NrKTsKIAogICAgIFNjcmlwdEV4
ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSgpOwotICAgIEpTQXJyYXkqIGNyZWF0ZVRlbXBs
YXRlT2JqZWN0KEV4ZWNTdGF0ZSosIEpTVGVtcGxhdGVPYmplY3REZXNjcmlwdG9yKik7CisgICAg
SlNBcnJheSogY3JlYXRlVGVtcGxhdGVPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBKU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvciopOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRh
YmxlQmFzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVj
dG9yLmNwcAppbmRleCBiMGRiMTU2ZjQ4OGQ2NDJlNmZlNzBkOGE1ODIzYTcxMWExZGFlOTliLi4y
MmFjMTM0NTQxYzU2NTc4NWMxOTQ0ODg1YmQ3ZGI0NDYyZWRiZmMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCkBAIC01NSwxMSArNTUs
MTEgQEAgU2V0Q29uc3RydWN0b3I6OlNldENvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxTZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsU2V0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFz
RnVuY3Rpb25UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlNldCIpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlNldCIpKTsKIH0KIAogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0U2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNjcsMzUgKzY3LDM1IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFNldChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFN0cnVjdHVyZSog
c2V0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnNldFN0cnVj
dHVyZSgpKTsKKyAgICBTdHJ1Y3R1cmUqIHNldFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246
OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5qc0NhbGxl
ZSgpLCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAog
ICAgIEpTVmFsdWUgaXRlcmFibGUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmIChp
dGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNTZXQ6OmNyZWF0ZShjYWxsRnJhbWUsIHZtLCBzZXRT
dHJ1Y3R1cmUpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKEpTU2V0OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgc2V0U3RydWN0dXJlKSkpOwog
CiAgICAgaWYgKGF1dG8qIGl0ZXJhYmxlU2V0ID0ganNEeW5hbWljQ2FzdDxKU1NldCo+KHZtLCBp
dGVyYWJsZSkpIHsKICAgICAgICAgaWYgKGl0ZXJhYmxlU2V0LT5jYW5DbG9uZUZhc3RBbmROb25P
YnNlcnZhYmxlKHNldFN0cnVjdHVyZSkpIAotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoaXRlcmFibGVTZXQtPmNsb25lKGNhbGxGcmFtZSwgdm0s
IHNldFN0cnVjdHVyZSkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKGl0ZXJhYmxlU2V0LT5jbG9uZShnbG9iYWxPYmplY3QsIHZtLCBzZXRT
dHJ1Y3R1cmUpKSk7CiAgICAgfQogCi0gICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUoY2Fs
bEZyYW1lLCB2bSwgc2V0U3RydWN0dXJlKTsKKyAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0
ZShnbG9iYWxPYmplY3QsIHZtLCBzZXRTdHJ1Y3R1cmUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9u
ID0gc2V0LT5KU09iamVjdDo6Z2V0KGNhbGxGcmFtZSwgdm0ucHJvcGVydHlOYW1lcy0+YWRkKTsK
KyAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSBzZXQtPkpTT2JqZWN0OjpnZXQoZ2xvYmFsT2Jq
ZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5hZGQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNhbGxE
YXRhOwogICAgIENhbGxUeXBlIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKHZt
LCBhZGRlckZ1bmN0aW9uLCBhZGRlckZ1bmN0aW9uQ2FsbERhdGEpOwogICAgIGlmIChVTkxJS0VM
WShhZGRlckZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlKSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgZm9yRWFjaEluSXRlcmFibGUo
Y2FsbEZyYW1lLCBpdGVyYWJsZSwgWyZdKFZNJiwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIEpTVmFs
dWUgbmV4dFZhbHVlKSB7CisgICAgZm9yRWFjaEluSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCBpdGVy
YWJsZSwgWyZdKFZNJiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBuZXh0
VmFsdWUpIHsKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKG5leHRWYWx1ZSk7CiAgICAgICAgIEFTU0VSVCghYXJndW1lbnRz
Lmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgICAgIGNhbGwoY2FsbEZyYW1lLCBhZGRlckZ1bmN0aW9u
LCBhZGRlckZ1bmN0aW9uQ2FsbFR5cGUsIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSwgc2V0LCBhcmd1
bWVudHMpOworICAgICAgICBjYWxsKGdsb2JhbE9iamVjdCwgYWRkZXJGdW5jdGlvbiwgYWRkZXJG
dW5jdGlvbkNhbGxUeXBlLCBhZGRlckZ1bmN0aW9uQ2FsbERhdGEsIHNldCwgYXJndW1lbnRzKTsK
ICAgICB9KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCmluZGV4IGM2NmQ5NWY2NTkx
MWQxYzgyNjA3NDM1NWVmMWI4OTgzYWY3OWEzM2QuLjUzMGFiMGE5ZjkyZjg4NDAyZDUzYzkxOGM3
MGMxNWEyZTU3ZGQ1YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NldFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
UHJvdG90eXBlLmNwcApAQCAtNzYsNjAgKzc2LDYwIEBAIHZvaWQgU2V0UHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgSlND
X05BVElWRV9HRVRURVJfV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNpemUs
IHNldFByb3RvRnVuY1NpemUsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5
QXR0cmlidXRlOjpBY2Nlc3Nvcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIEpTU2V0KiBn
ZXRTZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdGhpc1ZhbHVlKQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTZXQqIGdldFNldChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7
Ci0gICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVj
dEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7CisgICAgICAgIHRocm93Vk1FcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBhdXRvKiBzZXQg
PSBqc0R5bmFtaWNDYXN0PEpTU2V0Kj4odm0sIHRoaXNWYWx1ZS5hc0NlbGwoKSk7CiAgICAgaWYg
KExJS0VMWShzZXQpKQogICAgICAgICByZXR1cm4gc2V0OwotICAgIHRocm93VHlwZUVycm9yKGNh
bGxGcmFtZSwgc2NvcGUsICJTZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tU2V0IG9iamVjdCJf
cyk7CisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlNldCBvcGVyYXRp
b24gY2FsbGVkIG9uIG5vbi1TZXQgb2JqZWN0Il9zKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwotICAgIEpTU2V0KiBzZXQgPSBn
ZXRTZXQoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSk7CisgICAgSlNTZXQqIHNl
dCA9IGdldFNldChnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFzZXQpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgc2V0LT5hZGQo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICBzZXQtPmFkZChnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhpc1ZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90
b0Z1bmNDbGVhcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFzZXQpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgc2V0LT5jbGVhcihj
YWxsRnJhbWUpOworICAgIHNldC0+Y2xlYXIoZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHNldFByb3RvRnVuY0RlbGV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGNhbGxGcmFt
ZSwgZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldCogc2V0
ID0gZ2V0U2V0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYg
KCFzZXQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc2V0LT5yZW1vdmUoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHNldC0+cmVtb3ZlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNIYXMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0g
ICAgSlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgSlNTZXQqIHNldCA9IGdldFNldChnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHNldC0+aGFzKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihzZXQtPmhhcyhnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc2V0UHJvdG9GdW5jU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGNhbGxGcmFt
ZSwgZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldCogc2V0
ID0gZ2V0U2V0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYg
KCFzZXQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzZXQtPnNpemUoKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuY3BwCmluZGV4IDZhZmUyMzA5ZjE0YTIxZjM4ZDMzZTMxMjE5YmI1NzA5MzIy
YjljMGUuLjRiNjM3MzljZGMwODc0MzA0YTc1NjlmNGNhYjBlZDU0MGE5M2IwYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAKQEAgLTM1LDE1ICszNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsg
fQogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
cigpIHsgfQogCi1KU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9K
UygKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFy
cmF5QnVmZmVyKiBuYXRpdmUpCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlcjo6dG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlCdWZmZXIqIG5hdGl2ZSkKIHsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZl
ciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQogICAgICAgICByZXR1cm4gYnVmZmVyOwogCiAg
ICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJlZ2lzdGVyIHRo
ZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgotICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9
IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKLSAgICAgICAgZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0
LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShuYXRpdmUtPnNoYXJpbmdNb2RlKCkpLCBuYXRpdmUpOwor
ICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShnbG9iYWxP
YmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUobmF0aXZlLT5z
aGFyaW5nTW9kZSgpKSwgbmF0aXZlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIuaAppbmRleCAzM2QwODlmNjE3YmQ4OGNiZTRkZjgxYzQxMWJkZjRlNDBjNzdkNTEw
Li43NjI1ZjdkNjBjZjk0MDRiNDBkMjVhYzJlMWNiY2MzNjlhZDdiYTZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmgKQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIgOiBwdWJsaWMgVHlwZWRBcnJheUNvbnRyb2xsZXIgewogICAgIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyKCk7CiAgICAgdmlydHVhbCB+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsK
ICAgICAKLSAgICBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0
KiwgQXJyYXlCdWZmZXIqKSBvdmVycmlkZTsKKyAgICBKU0FycmF5QnVmZmVyKiB0b0pTKEpTR2xv
YmFsT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopIG92ZXJyaWRlOwogICAg
IHZvaWQgcmVnaXN0ZXJXcmFwcGVyKEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqLCBKU0Fy
cmF5QnVmZmVyKikgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0F0b21pY3NXYWl0QWxsb3dlZE9uQ3Vy
cmVudFRocmVhZCgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCmluZGV4IDYzMzQxNjAzNmRkMDZkMjNl
OTg4OGJhZDZkY2Y4NGFmNjA3NjhhYjEuLjg1YzFjZjM0MzM4MTg0Nzg4Mzg4NDU2ZWIzNmFlYTJm
ZmI2MzQxZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXAuY3BwCkBAIC05Niw5ICs5Niw5IEBAIHZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6cmVtb3ZlKHVuc2lnbmVkIGkpCiAgICAgbV9tYXAucmVtb3ZlKGkpOwogfQogCi1i
b29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dEVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQor
Ym9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRyeShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgCkBAIC0xMTAsMTUgKzExMCwxNSBAQCBib29s
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dEVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGFycmF5LCB1bnNpZ25lZCBpLAogICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSBy
aWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCiAgICAgaWYgKHJlc3Vs
dC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKHZtKSkgewogICAg
ICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihl
eGVjLCBzY29wZSwgc2hvdWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAg
ICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywg
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGVudHJ5LnB1dChleGVjLCBhcnJheSwgdGhpcywgdmFsdWUsIHNob3Vs
ZFRocm93KSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBlbnRyeS5wdXQoZ2xvYmFs
T2JqZWN0LCBhcnJheSwgdGhpcywgdmFsdWUsIHNob3VsZFRocm93KSk7CiB9CiAKLWJvb2wgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFy
cmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRE
aXJlY3RJbmRleE1vZGUgbW9kZSkKK2Jvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2Rl
IG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgCkBAIC0xMzIsMTEgKzEzMiwxMSBAQCBib29sIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJh
eSwgdW5zaWduZWQgaQogICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0
aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCiAgICAgaWYgKG1vZGUgIT0gUHV0
RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0ICYmIHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+
aXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKHZtKSkgewogICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJh
dG9yKTsKLSAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihleGVjLCBzY29wZSwgc2hvdWxkVGhyb3cs
IE5vbkV4dGVuc2libGVPYmplY3RQcm9wZXJ0eURlZmluZUVycm9yKTsKKyAgICAgICAgcmV0dXJu
IHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBzaG91bGRUaHJvdywgTm9uRXh0ZW5zaWJs
ZU9iamVjdFByb3BlcnR5RGVmaW5lRXJyb3IpOwogICAgIH0KIAogICAgIGlmIChlbnRyeS5hdHRy
aWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCi0gICAgICAgIHJldHVybiB0
eXBlRXJyb3IoZXhlYywgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7CisgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgc2hv
dWxkVGhyb3csIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKIAogICAgIGVudHJ5LmZvcmNl
U2V0KHZtLCB0aGlzLCB2YWx1ZSwgYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
OTAsMjAgKzE5MCwyMCBAQCBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldENvbmN1cnJlbnRs
eSgpIGNvbnN0CiAgICAgcmV0dXJuIGF0dHJpYnV0ZXNEZXBlbmRlbmN5LmNvbnN1bWUodGhpcykt
PkJhc2U6OmdldCgpOwogfQogCi1ib29sIFNwYXJzZUFycmF5RW50cnk6OnB1dChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAsIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCitib29sIFNwYXJzZUFycmF5RW50cnk6OnB1dChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICghKG1f
YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpIHsKICAgICAgICAgaWYg
KG1fYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKLSAgICAgICAgICAg
IHJldHVybiB0eXBlRXJyb3IoZXhlYywgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gdHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAKICAg
ICAgICAgc2V0KHZtLCBtYXAsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsU2V0dGVyKGV4ZWMsIHRoaXNWYWx1
ZSwgQmFzZTo6Z2V0KCksIHZhbHVlLCBzaG91bGRUaHJvdyA/IFN0cmljdE1vZGUgOiBOb3RTdHJp
Y3RNb2RlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsU2V0dGVyKGdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCBCYXNlOjpnZXQoKSwgdmFsdWUsIHNob3VsZFRocm93ID8gU3Ry
aWN0TW9kZSA6IE5vdFN0cmljdE1vZGUpKTsKIH0KIAogSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5
OjpnZXROb25TcGFyc2VNb2RlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAppbmRleCBlYWQ2MWQzNTgzMzhmNzVjOTM4
MWUxOWZkZmQ5Yzg5OGQxYzFhZjczLi5mNzQxZTJiYzhiZTAwZDQ1NzZkZTdiOTQ1Nzk2ODdiZDJi
NjI1ZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNl
QXJyYXlWYWx1ZU1hcC5oCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNwYXJzZUFycmF5RW50cnkg
OiBwcml2YXRlIFdyaXRlQmFycmllcjxVbmtub3duPiB7CiAKICAgICB2b2lkIGdldChKU09iamVj
dCosIFByb3BlcnR5U2xvdCYpIGNvbnN0OwogICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRv
ciYpIGNvbnN0OwotICAgIGJvb2wgcHV0KEV4ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBT
cGFyc2VBcnJheVZhbHVlTWFwKiwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9v
bCBwdXQoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgU3BhcnNlQXJyYXlWYWx1
ZU1hcCosIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIEpTVmFsdWUgZ2V0Tm9uU3Bh
cnNlTW9kZSgpIGNvbnN0OwogICAgIEpTVmFsdWUgZ2V0Q29uY3VycmVudGx5KCkgY29uc3Q7CiAK
QEAgLTEzMSw4ICsxMzEsOCBAQCBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgfQogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgbWFwCi0gICAgYm9vbCBwdXRFbnRyeShFeGVjU3RhdGUqLCBKU09i
amVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICBib29sIHB1
dERpcmVjdChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUpOworICAgIGJvb2wgcHV0RW50cnkoSlNH
bG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKKyAgICBib29sIHB1dERpcmVjdChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgdW5z
aWduZWQsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSk7
CiAgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKICAgICBpdGVyYXRvciBm
aW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KICAgICAvLyBUaGlzIHNo
b3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUg
ZmluZCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RF
dmFsQWN0aXZhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RF
dmFsQWN0aXZhdGlvbi5jcHAKaW5kZXggNmU0MTlmYWEyODVjNGM3ODczNmM0Y2RmZmU1ZGUyZGUy
ZTdkN2UwYS4uNTE1NzUyNzY1ZWNiMDJkMTljMDQwZTlmMjFiOTY0OWY3NTE3Yjk0NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0
aW9uLmNwcApAQCAtNDAsNyArNDAsNyBAQCBTdHJpY3RFdmFsQWN0aXZhdGlvbjo6U3RyaWN0RXZh
bEFjdGl2YXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZQogewogfQog
Ci1ib29sIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpCitib29sIFN0cmljdEV2YWxBY3RpdmF0aW9uOjpkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaWN0RXZhbEFjdGl2YXRpb24uaAppbmRleCBmMWJjMWQ2YmY1ZWZhODM3ZmM2N2NiNmJjNzkx
MWMxNjFhNWM3ZDE1Li44NjE4Njk4ZTM0MmU0MjJkODBhNzM4ZTBlYzkyMzI1YzY4ZjVkOWNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZh
dGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3Rp
dmF0aW9uLmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgU3RyaWN0RXZhbEFjdGl2YXRpb24gZmlu
YWwgOiBwdWJsaWMgSlNTY29wZSB7CiAgICAgICAgIHJldHVybiBzY29wZTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ0NvbnN0cnVjdG9yLmNwcAppbmRleCAzMzFkNGIwMDcyMzQ1YTQ4NmE5YWQ5NGM3MTQ5NGJm
ZGVhOTUxZTMwLi5kMGY2YzU3OGU3MWNjZmU3MWEwOWUxMGI4Njk2NWM5NTlhMzgwY2M2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3Iu
Y3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ0Zyb21DaGFyQ29kZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKExJS0VMWShs
ZW5ndGggPT0gMSkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICB1bnNpZ25l
ZCBjb2RlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQzMihjYWxsRnJh
bWUpOworICAgICAgICB1bnNpZ25lZCBjb2RlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1VJbnQzMihnbG9iYWxPYmplY3QpOwogICAgICAgICAvLyBOb3QgY2hlY2tpbmcgZm9y
IGFuIGV4Y2VwdGlvbiBoZXJlIGlzIG9rIGJlY2F1c2UganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcg
d2lsbCBqdXN0IGZldGNoIGFuIHVudXNlZCBzdHJpbmcgaWYgdGhlcmUncyBhbiBleGNlcHRpb24u
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTaW5nbGVDaGFyYWN0ZXJTdHJpbmco
dm0sIGNvZGUpKTsKICAgICB9CkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21DaGFyQ29kZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqCiAgICAgTENoYXIqIGJ1ZjhCaXQ7CiAgICAgYXV0byBpbXBsOEJpdCA9IFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWY4Qml0KTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gc3Rh
dGljX2Nhc3Q8VUNoYXI+KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9VSW50MzIo
Y2FsbEZyYW1lKSk7CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVDaGFy
PihjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvVUludDMyKGdsb2JhbE9iamVjdCkp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICAgICAgaWYgKFVOTElLRUxZKCFpc0xhdGluMShjaGFyYWN0ZXIpKSkgewogICAgICAgICAg
ICAgVUNoYXIqIGJ1ZjE2Qml0OwpAQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iagogICAgICAgICAgICAgYnVmMTZCaXRbaV0gPSBjaGFyYWN0ZXI7CiAgICAgICAgICAgICAr
K2k7CiAgICAgICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgYnVmMTZCaXRbaV0gPSBzdGF0aWNfY2FzdDxVQ2hhcj4oY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudChpKS50b1VJbnQzMihjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgICAgICBidWYxNkJp
dFtpXSA9IHN0YXRpY19jYXN0PFVDaGFyPihjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkp
LnRvVUludDMyKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0s
IFdURk1vdmUoaW1wbDE2Qml0KSkpKTsKQEAgLTEwNSw5ICsxMDUsOSBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iagogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKHZtLCBXVEZNb3ZlKGltcGw4Qml0KSkpKTsKIH0KIAotSlNTdHJpbmcqIEpTQ19I
T1NUX0NBTEwgc3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBhcmcp
CitKU1N0cmluZyogSlNDX0hPU1RfQ0FMTCBzdHJpbmdGcm9tQ2hhckNvZGUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBhcmcpCiB7Ci0gICAgcmV0dXJuIGpzU2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGV4ZWMtPnZtKCksIGFyZyk7CisgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKGdsb2JhbE9iamVjdC0+dm0oKSwgYXJnKTsKIH0KIAogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nRnJvbUNvZGVQb2ludChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTEyMCwxMyArMTIwLDEzIEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21Db2RlUG9pbnQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAg
ICAgICBkb3VibGUgY29kZVBvaW50QXNEb3VibGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGkpLnRvTnVtYmVyKGNhbGxGcmFtZSk7CisgICAgICAgIGRvdWJsZSBjb2RlUG9pbnRBc0Rv
dWJsZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9OdW1iZXIoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICAgICAgdWludDMyX3QgY29kZVBvaW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGNvZGVQb2ludEFzRG91YmxlKTsKIAogICAgICAgICBpZiAoY29kZVBvaW50ICE9IGNvZGVQb2lu
dEFzRG91YmxlIHx8IGNvZGVQb2ludCA+IFVDSEFSX01BWF9WQUxVRSkKLSAgICAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihjYWxs
RnJhbWUsICJBcmd1bWVudHMgY29udGFpbiBhIHZhbHVlIHRoYXQgaXMgb3V0IG9mIHJhbmdlIG9m
IGNvZGUgcG9pbnRzIl9zKSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiQXJndW1lbnRz
IGNvbnRhaW4gYSB2YWx1ZSB0aGF0IGlzIG91dCBvZiByYW5nZSBvZiBjb2RlIHBvaW50cyJfcykp
OwogCiAgICAgICAgIGlmIChVX0lTX0JNUChjb2RlUG9pbnQpKQogICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCkpOwpAQCAtMTQ0LDIyICsxNDQs
MjIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aFN0
cmluZ0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWMKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+
c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPmpzQ2FsbGVlKCksIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+
c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6OmNyZWF0ZSh2
bSwgc3RydWN0dXJlKSk7Ci0gICAgSlNTdHJpbmcqIHN0ciA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkudG9TdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBKU1N0cmluZyogc3RyID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhnbG9iYWxPYmplY3QpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgc3Ry
KSk7CiB9CiAKLUpTU3RyaW5nKiBzdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYXJndW1lbnQpCitKU1N0cmluZyogc3RyaW5nQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudCkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBpZiAoYXJndW1l
bnQuaXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgYXNT
eW1ib2woYXJndW1lbnQpLT5kZXNjcmlwdGl2ZVN0cmluZygpKTsKLSAgICByZXR1cm4gYXJndW1l
bnQudG9TdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIGFyZ3VtZW50LnRvU3RyaW5nKGdsb2JhbE9i
amVjdCk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxTdHJp
bmdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsU3RyaW5nQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmco
dm0pKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0NvbnN0cnVjdG9yKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc3RyaW5nQ29uc3RydWN0b3IoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgKaW5kZXggN2E5
Y2UxMjg4Mjk2YzZmMGI3ZTljNmFkM2YzMzQ3YmQwYzlmMmYxNC4uNjhhZDJjYjJkOTRhODE4YWZh
NmZiMDk2NTcxZDU4ODZlZmZkZGE4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIFN0cmlu
Z0NvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBTdHJpbmdQcm90b3R5cGUqKTsKIH07CiAKLUpTU3RyaW5nKiBK
U0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KTsKLUpT
U3RyaW5nKiBzdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKK0pTU3RyaW5n
KiBKU0NfSE9TVF9DQUxMIHN0cmluZ0Zyb21DaGFyQ29kZShKU0dsb2JhbE9iamVjdCosIGludDMy
X3QpOworSlNTdHJpbmcqIHN0cmluZ0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAKaW5kZXggMDMzZjllMGQ1NGRkYWUyZGVhMzQyOGU1ODFjNGEz
OTIzNWYwZWMzNS4uNDc3YjljYWZiM2ZhMDA4ZjBmNzA1NjhiNmRiNmY0YTE1MTg2ZDA2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCkBAIC00
NCw1NCArNDQsNTQgQEAgdm9pZCBTdHJpbmdPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNTdHJpbmcqIHN0cmluZykKICAgICBzZXRJbnRlcm5hbFZhbHVlKHZtLCBzdHJpbmcpOwogfQog
Ci1ib29sIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK2Jvb2wgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4oY2VsbCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPmludGVy
bmFsVmFsdWUoKS0+Z2V0U3RyaW5nUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xv
dCkpCisgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Z2V0U3RyaW5nUHJvcGVy
dHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAgICAgCi1ib29sIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgU3Ry
aW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVjdCk7Ci0g
ICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Z2V0U3RyaW5nUHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFs
VmFsdWUoKS0+Z2V0U3RyaW5nUHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7ICAgIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbSh2bSwgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwg
cHJvcGVydHlOYW1lKSwgc2xvdCk7CiB9CiAKLWJvb2wgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgU3RyaW5nT2JqZWN0OjpwdXQo
SlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5n
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOwogCiAgICAg
aWYgKFVOTElLRUxZKGlzVGhpc1ZhbHVlQWx0ZXJlZChzbG90LCB0aGlzT2JqZWN0KSkpIAotICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG9yZGluYXJ5U2V0U2xvdyhleGVjLCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LnRoaXNWYWx1ZSgpLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgb3JkaW5hcnlT
ZXRTbG93KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dC50aGlzVmFsdWUoKSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwogCiAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCi0gICAgICAgIHJldHVybiB0eXBlRXJy
b3IoZXhlYywgc2NvcGUsIHNsb3QuaXNTdHJpY3RNb2RlKCksIFJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIHR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBz
bG90LmlzU3RyaWN0TW9kZSgpLCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgaWYg
KE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgCi0g
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJbmRleChjZWxsLCBleGVjLCBp
bmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpOwotICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNPYmplY3Q6OnB1dChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcHV0QnlJ
bmRleChjZWxsLCBnbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0
KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCi1i
b29sIFN0cmluZ09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQorYm9vbCBTdHJpbmdPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmlu
Z09iamVjdCo+KGNlbGwpOwogICAgIGlmICh0aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmNh
bkdldEluZGV4KHByb3BlcnR5TmFtZSkpCi0gICAgICAgIHJldHVybiB0eXBlRXJyb3IoZXhlYywg
c2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdykpOworICAgICAgICByZXR1cm4gdHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCBSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0QnlJ
bmRleChjZWxsLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93
KSk7CiB9CiAKLXN0YXRpYyBib29sIGlzU3RyaW5nT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCBTdHJpbmdPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3N0YXRp
YyBib29sIGlzU3RyaW5nT3duUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RyaW5nT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpIHsKQEAgLTEwMSw2OSArMTAxLDY5IEBAIHN0YXRpYyBib29sIGlz
U3RyaW5nT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdPYmplY3QqIG9iamVjdCwg
UHJvcGVydHlOCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFN0cmluZ09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgdGhyb3dFeGNlcHRpb24pCitib29sIFN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBib29sIHRocm93RXhjZXB0aW9uKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3Ry
aW5nT2JqZWN0Kj4ob2JqZWN0KTsKIAotICAgIGlmIChpc1N0cmluZ093blByb3BlcnR5KGV4ZWMs
IHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKKyAgICBpZiAoaXNTdHJpbmdPd25Qcm9wZXJ0
eShnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgLy8g
VGhlIGN1cnJlbnQgUHJvcGVydHlEZXNjcmlwdG9yIGlzIGFsd2F5cwogICAgICAgICAvLyBQcm9w
ZXJ0eURlc2NyaXB0b3J7W1tWYWx1ZV1dOiB2YWx1ZSwgW1tXcml0YWJsZV1dOiBmYWxzZSwgW1tF
bnVtZXJhYmxlXV06IHRydWUsIFtbQ29uZmlndXJhYmxlXV06IGZhbHNlfS4KICAgICAgICAgLy8g
VGhpcyBlbnN1cmVzIHRoYXQgYW55IHByb3BlcnR5IGRlc2NyaXB0b3IgY2Fubm90IGNoYW5nZSB0
aGUgZXhpc3Rpbmcgb25lLgogICAgICAgICAvLyBIZXJlLCBzaW1wbHkgcmV0dXJuIHRoZSByZXN1
bHQgb2YgdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvci4KICAgICAgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLWV4b3RpYy1vYmplY3RzLWdl
dG93bnByb3BlcnR5LXAKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAg
ICAgIGJvb2wgaXNDdXJyZW50RGVmaW5lZCA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpOworICAgICAgICBib29sIGlzQ3Vy
cmVudERlZmluZWQgPSB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgICAgICBFWENFUFRJT05fQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSA9PSBpc0N1cnJlbnREZWZpbmVkKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICBib29sIGlzRXh0ZW5zaWJsZSA9
IHRoaXNPYmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKKyAgICAgICAgYm9vbCBpc0V4dGVuc2li
bGUgPSB0aGlzT2JqZWN0LT5pc0V4dGVuc2libGUoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgbnVsbHB0
ciwgcHJvcGVydHlOYW1lLCBpc0V4dGVuc2libGUsIGRlc2NyaXB0b3IsIGlzQ3VycmVudERlZmlu
ZWQsIGN1cnJlbnQsIHRocm93RXhjZXB0aW9uKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWxPYmplY3Qs
IG51bGxwdHIsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJl
bnREZWZpbmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlvbikpOwogICAgIH0KIAotICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKSk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbikpOwogfQog
Ci1ib29sIFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIFN0cmluZ09iamVjdDo6
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIFN0cmluZ09iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihjZWxsKTsKICAgICBpZiAocHJvcGVydHlO
YW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKTsK
ICAgICBpZiAoaW5kZXggJiYgdGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5jYW5HZXRJbmRl
eChpbmRleC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAg
ICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lKTsKIH0KIAotYm9vbCBTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKK2Jvb2wg
U3RyaW5nT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpKQogewogICAgIFN0cmluZ09iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihjZWxsKTsKICAgICBpZiAodGhpc09i
amVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5jYW5HZXRJbmRleChpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmpl
Y3QsIGV4ZWMsIGkpOworICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaSk7CiB9CiAKLXZvaWQgU3RyaW5nT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9p
ZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIFN0cmluZ09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwogICAgIGlmIChwcm9wZXJ0eU5h
bWVzLmluY2x1ZGVTdHJpbmdQcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgaW50IHNpemUgPSB0aGlz
T2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb20odm0sIGkpKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi12b2lkIFN0cmluZ09iamVjdDo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQor
dm9pZCBTdHJpbmdPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgU3RyaW5nT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVjdCk7CiAgICAgaWYg
KG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQogICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIHJldHVybiBKU09iamVjdDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIFN0
cmluZ09iamVjdCogY29uc3RydWN0U3RyaW5nKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBzdHJpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ09iamVjdC5oCmluZGV4IDRjOTY5MDczODRlNzYwMTRjYzk2MDJkNjZjYzgwYTBjNGY4
ODE5MzAuLmVlNDhhZTc0YjNmNTA1NzVkMzBjYTViYTI5YTljMDUyZmFkMmQwZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCkBAIC00NSwxNyArNDUs
MTcgQEAgY2xhc3MgU3RyaW5nT2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7CiAgICAg
fQogICAgIHN0YXRpYyBTdHJpbmdPYmplY3QqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNTdHJpbmcqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXRC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
cHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXRCeUlu
ZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgc2hvdWxkVGhyb3cpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAKQEAgLTc5LDEzICs3OSwxMyBAQCBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmdP
YmplY3QqIGNvbnN0cnVjdFN0cmluZyhWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAv
LyBGSVhNRTogQmFzaWNhbGx5IGFueSB1c2Ugb2YgdGhpcyBpcyBiYWQuIHRvU3RyaW5nKCkgcmV0
dXJucyBhIEpTU3RyaW5nKiBzbyB3ZSBkb24ndCBuZWVkIHRvCiAvLyBwYXNzIGFyb3VuZCB0aGUg
b3JpZ2luYWxWYWx1ZTsgd2UgY291bGQganVzdCBwYXNzIGFyb3VuZCB0aGUgSlNTdHJpbmcqLiBU
aGVuIHlvdSBkb24ndCBuZWVkCiAvLyB0aGlzIGZ1bmN0aW9uLiBZb3UganVzdCB1c2UgdGhlIEpT
U3RyaW5nKiB0aGF0IHRvU3RyaW5nKCkgcmV0dXJuZWQuCi1zdGF0aWMgaW5saW5lIEpTU3RyaW5n
KiBqc1N0cmluZ1dpdGhSZXVzZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb3JpZ2luYWxWYWx1
ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCitzdGF0aWMgaW5saW5lIEpTU3RyaW5nKiBqc1N0cmlu
Z1dpdGhSZXVzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG9yaWdpbmFs
VmFsdWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIGlmIChvcmlnaW5hbFZhbHVlLmlz
U3RyaW5nKCkpIHsKLSAgICAgICAgQVNTRVJUKGFzU3RyaW5nKG9yaWdpbmFsVmFsdWUpLT52YWx1
ZShleGVjKSA9PSBzdHJpbmcpOworICAgICAgICBBU1NFUlQoYXNTdHJpbmcob3JpZ2luYWxWYWx1
ZSktPnZhbHVlKGdsb2JhbE9iamVjdCkgPT0gc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIGFzU3Ry
aW5nKG9yaWdpbmFsVmFsdWUpOwogICAgIH0KLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYy0+dm0o
KSwgc3RyaW5nKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgc3Ry
aW5nKTsKIH0KIAogLy8gSGVscGVyIHRoYXQgdHJpZXMgdG8gdXNlIHRoZSBKU1N0cmluZyBzdWJz
dHJpbmcgc2hhcmluZyBtZWNoYW5pc20gaWYgJ29yaWdpbmFsVmFsdWUnIGlzIGEgSlNTdHJpbmcu
CkBAIC05MywxMyArOTMsMTMgQEAgc3RhdGljIGlubGluZSBKU1N0cmluZyoganNTdHJpbmdXaXRo
UmV1c2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG9yaWdpbmFsVmFsdWUKIC8vIHBhc3MgYXJv
dW5kIHRoZSBvcmlnaW5hbFZhbHVlOyB3ZSBjb3VsZCBqdXN0IHBhc3MgYXJvdW5kIHRoZSBKU1N0
cmluZyouIEFuZCBzaW5jZSB3ZSd2ZQogLy8gcmVzb2x2ZWQgaXQsIHdlIGtub3cgdGhhdCB3ZSBj
YW4ganVzdCBhbGxvY2F0ZSB0aGUgc3Vic3RyaW5nIGNlbGwgZGlyZWN0bHkuCiAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MTQwCi1zdGF0aWMgaW5saW5lIEpT
U3RyaW5nKiBqc1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb3JpZ2luYWxWYWx1
ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQorc3RhdGljIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmcoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBvcmlnaW5hbFZhbHVlLCBjb25zdCBTdHJpbmcmIHN0cmluZywg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKG9yaWdpbmFsVmFs
dWUuaXNTdHJpbmcoKSkgewotICAgICAgICBBU1NFUlQoYXNTdHJpbmcob3JpZ2luYWxWYWx1ZSkt
PnZhbHVlKGV4ZWMpID09IHN0cmluZyk7Ci0gICAgICAgIHJldHVybiBqc1N1YnN0cmluZyhleGVj
LCBhc1N0cmluZyhvcmlnaW5hbFZhbHVlKSwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBBU1NF
UlQoYXNTdHJpbmcob3JpZ2luYWxWYWx1ZSktPnZhbHVlKGdsb2JhbE9iamVjdCkgPT0gc3RyaW5n
KTsKKyAgICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGdsb2JhbE9iamVjdCwgYXNTdHJpbmcob3Jp
Z2luYWxWYWx1ZSksIG9mZnNldCwgbGVuZ3RoKTsKICAgICB9Ci0gICAgcmV0dXJuIGpzU3Vic3Ry
aW5nKGV4ZWMtPnZtKCksIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBqc1N1
YnN0cmluZyhnZXRWTShnbG9iYWxPYmplY3QpLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAppbmRleCBjNzVkZmMwYjgwZmFhNTE3MDI3NWQ1M2Y1MTU2
MjYxZDFkZDliYjQ1Li41NDA2NGNlZGU0ODFlNTNkNjkyZTA5Yjc2ZmEzMzg5MjQ2NmMyN2ZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHAKQEAgLTIyOCw3ICsyMjgsNyBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgc3Vic3RpdHV0
ZUJhY2tyZWZlcmVuY2VzU2xvdyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIFN0cgogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc2NDM0CiAgICAgICAgICAgICAgICAgLy8gQ3VycmVudCBwcm9wb3NlZCBzcGVjIGNoYW5nZSB0
aHJvd3MgYSBzeW50YXggZXJyb3IgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgICAgIC8vIFdl
IGhhdmUgbWFkZSB0aGUgY2FzZSB0aGF0IGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gdHJlYXQgdGhp
cyBhIGxpdGVyYWwKLSAgICAgICAgICAgICAgICAvLyBJZiB0aHJvd1N5bnRheEVycm9yKGV4ZWMs
IHNjb3BlLCAiTWlzc2luZyBjbG9zaW5nICc+JyBpbiByZXBsYWNlbWVudCB0ZXh0Iik7CisgICAg
ICAgICAgICAgICAgLy8gSWYgdGhyb3dTeW50YXhFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
TWlzc2luZyBjbG9zaW5nICc+JyBpbiByZXBsYWNlbWVudCB0ZXh0Iik7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTI0MCw3ICsyNDAsNyBAQCBzdGF0aWMg
TkVWRVJfSU5MSU5FIHZvaWQgc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzU2xvdyhTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIFN0cgogICAgICAgICAgICAgICAgIC8vIFByb3Bvc2VkIHNwZWMgY2hhbmdl
IHRocm93cyBhIHRocm93IHN5bnRheCBlcnJvciBpbiB0aGlzIGNhc2UuCiAgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSBtYWRlIHRoZSBjYXNlIHRoYXQgYSBub24tZXhpc3RlbnQgYmFjayByZWZl
cmVuY2Ugc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGgKICAgICAgICAgICAgICAgICAvLyBhbmQgZW1w
dHkgc3RyaW5nLgotICAgICAgICAgICAgICAgIC8vIHRocm93U3ludGF4RXJyb3IoZXhlYywgc2Nv
cGUsIG1ha2VTdHJpbmcoIlJlcGxhY2VtZW50IHRleHQgcmVmZXJlbmNlcyBub24tZXhpc3RlbnQg
YmFja3JlZmVyZW5jZSBcIiIgKyByZXBsYWNlbWVudC5zdWJzdHJpbmcoaSArIDIsIG5hbWVMZW5n
dGgpLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICAvLyB0aHJvd1N5bnRheEVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIG1ha2VTdHJpbmcoIlJlcGxhY2VtZW50IHRleHQgcmVmZXJlbmNl
cyBub24tZXhpc3RlbnQgYmFja3JlZmVyZW5jZSBcIiIgKyByZXBsYWNlbWVudC5zdWJzdHJpbmco
aSArIDIsIG5hbWVMZW5ndGgpLnRvU3RyaW5nKCkpKTsKICAgICAgICAgICAgICAgICBiYWNrcmVm
U3RhcnQgPSAwOwogICAgICAgICAgICAgICAgIGJhY2tyZWZMZW5ndGggPSAwOwogICAgICAgICAg
ICAgfSBlbHNlIHsKQEAgLTMxMSw5ICszMTEsOSBAQCBzdHJ1Y3QgU3RyaW5nUmFuZ2UgewogICAg
IGludCBsZW5ndGg7CiB9OwogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTcGxp
Y2VTdWJzdHJpbmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHNvdXJjZVZhbCwgY29uc3Qg
U3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZ1JhbmdlKiBzdWJzdHJpbmdSYW5nZXMsIGludCBy
YW5nZUNvdW50KQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlU3Vic3Ry
aW5ncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc291cmNlVmFsLCBj
b25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nUmFuZ2UqIHN1YnN0cmluZ1Jhbmdlcywg
aW50IHJhbmdlQ291bnQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgaWYgKHJhbmdlQ291bnQgPT0gMSkgewpAQCAtMzQzLDcgKzM0Myw3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGljZVN1YnN0cmluZ3MoRXhlY1N0
YXRlKiBleGVjLCBKU1N0cmluZyogc291CiAgICAgICAgIGNvbnN0IExDaGFyKiBzb3VyY2VEYXRh
ID0gc291cmNlLmNoYXJhY3RlcnM4KCk7CiAgICAgICAgIGF1dG8gaW1wbCA9IFN0cmluZ0ltcGw6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxMZW5ndGgudW5zYWZlR2V0KCksIGJ1ZmZlcik7
CiAgICAgICAgIGlmICghaW1wbCkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAK
QEAgLTM2Myw3ICszNjMsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTcGxp
Y2VTdWJzdHJpbmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHNvdQogCiAgICAgYXV0byBp
bXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh0b3RhbExlbmd0aC51bnNh
ZmVHZXQoKSwgYnVmZmVyKTsKICAgICBpZiAoIWltcGwpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAg
LTM3OCw5ICszNzgsOSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyoganNTcGxpY2VT
dWJzdHJpbmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHNvdQogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwganNTdHJpbmcodm0sIFdURk1vdmUoaW1wbCkpKTsKIH0KIAotc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3Jz
KEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHNvdXJjZVZhbCwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZ1JhbmdlKiBzdWJzdHJpbmdSYW5nZXMsIGludCByYW5nZUNvdW50LCBj
b25zdCBTdHJpbmcqIHNlcGFyYXRvcnMsIGludCBzZXBhcmF0b3JDb3VudCkKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc291cmNlVmFsLCBjb25zdCBTdHJp
bmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nUmFuZ2UqIHN1YnN0cmluZ1JhbmdlcywgaW50IHJhbmdl
Q291bnQsIGNvbnN0IFN0cmluZyogc2VwYXJhdG9ycywgaW50IHNlcGFyYXRvckNvdW50KQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChy
YW5nZUNvdW50ID09IDEgJiYgc2VwYXJhdG9yQ291bnQgPT0gMCkgewpAQCAtNDAzLDcgKzQwMyw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGljZVN1YnN0cmluZ3NXaXRo
U2VwYXJhdG9ycyhFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICBhbGxTZXBhcmF0b3JzOEJp
dCA9IGZhbHNlOwogICAgIH0KICAgICBpZiAodG90YWxMZW5ndGguaGFzT3ZlcmZsb3dlZCgpKSB7
Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCkBAIC00MTYsNyArNDE2LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNTdHJpbmcqIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKEV4ZWNTdGF0ZSog
ZXhlYywKIAogICAgICAgICBhdXRvIGltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKHRvdGFsTGVuZ3RoLnVuc2FmZUdldCgpLCBidWZmZXIpOwogICAgICAgICBpZiAoIWlt
cGwpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7Cisg
ICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCkBAIC00NDMsNyArNDQzLDcg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhT
ZXBhcmF0b3JzKEV4ZWNTdGF0ZSogZXhlYywKICAgICBVQ2hhciogYnVmZmVyOwogICAgIGF1dG8g
aW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodG90YWxMZW5ndGgudW5z
YWZlR2V0KCksIGJ1ZmZlcik7CiAgICAgaWYgKCFpbXBsKSB7Ci0gICAgICAgIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBA
IC00NzksNyArNDc5LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNl
U3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAotc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNTdHJpbmcqIHJlbW92ZVVzaW5nUmVnRXhwU2VhcmNoKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1N0cmluZyogc3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgUmVnRXhwKiByZWdFeHAp
CitzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmluZyogcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2go
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nLCBj
b25zdCBTdHJpbmcmIHNvdXJjZSwgUmVnRXhwKiByZWdFeHApCiB7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKQEAgLTQ4OCw3ICs0ODgsNiBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1N0cmluZyogcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsCiAgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IDA7CiAKICAgICBWZWN0b3I8U3RyaW5n
UmFuZ2UsIDE2PiBzb3VyY2VSYW5nZXM7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICB1bnNpZ25lZCBzb3VyY2VMZW4g
PSBzb3VyY2UubGVuZ3RoKCk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDk5LDcgKzQ5OCw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiByZW1vdmVVc2luZ1JlZ0V4cFNlYXJj
aChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywKIAogICAgICAgICBpZiAobGFzdEluZGV4IDwgcmVz
dWx0LnN0YXJ0KSB7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXNvdXJjZVJhbmdlcy50cnlD
b25zdHJ1Y3RBbmRBcHBlbmQobGFzdEluZGV4LCByZXN1bHQuc3RhcnQgLSBsYXN0SW5kZXgpKSkK
LSAgICAgICAgICAgICAgICBPVVRfT0ZfTUVNT1JZKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAg
ICAgICBPVVRfT0ZfTUVNT1JZKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICB9CiAgICAg
ICAgIGxhc3RJbmRleCA9IHJlc3VsdC5lbmQ7CiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0
SW5kZXg7CkBAIC01MTcsMTggKzUxNiwxOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmlu
ZyogcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsCiAKICAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RJbmRleCkgPCBzb3VyY2VMZW4pIHsKICAg
ICAgICAgaWYgKFVOTElLRUxZKCFzb3VyY2VSYW5nZXMudHJ5Q29uc3RydWN0QW5kQXBwZW5kKGxh
c3RJbmRleCwgc291cmNlTGVuIC0gbGFzdEluZGV4KSkpCi0gICAgICAgICAgICBPVVRfT0ZfTUVN
T1JZKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgIE9VVF9PRl9NRU1PUlkoZ2xvYmFsT2JqZWN0
LCBzY29wZSk7CiAgICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTcGxpY2VT
dWJzdHJpbmdzKGV4ZWMsIHN0cmluZywgc291cmNlLCBzb3VyY2VSYW5nZXMuZGF0YSgpLCBzb3Vy
Y2VSYW5nZXMuc2l6ZSgpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBqc1NwbGlj
ZVN1YnN0cmluZ3MoZ2xvYmFsT2JqZWN0LCBzdHJpbmcsIHNvdXJjZSwgc291cmNlUmFuZ2VzLmRh
dGEoKSwgc291cmNlUmFuZ2VzLnNpemUoKSkpOwogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1N0cmluZyogcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKAotICAgIFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBDYWxsRGF0YSYg
Y2FsbERhdGEsCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwg
Q2FsbERhdGEmIGNhbGxEYXRhLAogICAgIENhbGxUeXBlIGNhbGxUeXBlLCBTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBTdHJpbmcgc291cmNlID0gc3RyaW5nLT52
YWx1ZShleGVjKTsKKyAgICBTdHJpbmcgc291cmNlID0gc3RyaW5nLT52YWx1ZShnbG9iYWxPYmpl
Y3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHVuc2ln
bmVkIHNvdXJjZUxlbiA9IHNvdXJjZS5sZW5ndGgoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKQEAgLTUzOSwxNyArNTM4LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEpTU3RyaW5nKiByZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goCiAKICAgICBpZiAoZ2xvYmFs
KSB7CiAgICAgICAgIC8vIEVTNS4xIDE1LjUuNC4xMCBzdGVwIDguYS4KLSAgICAgICAgcmVnRXhw
T2JqZWN0LT5zZXRMYXN0SW5kZXgoZXhlYywgMCk7CisgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0
TGFzdEluZGV4KGdsb2JhbE9iamVjdCwgMCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9u
ZSAmJiAhcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpIAotICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCByZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaCh2bSwgZXhlYywgc3RyaW5n
LCBzb3VyY2UsIHJlZ0V4cCkpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCByZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaCh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJpbmcsIHNvdXJj
ZSwgcmVnRXhwKSk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgYmVjYXVz
ZSB3ZSBtYXkgYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIEZUTC4KLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0ODc0Ci0gICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKLQogICAgIHNp
emVfdCBsYXN0SW5kZXggPSAwOwogICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOwogCkBA
IC01NjMsNyArNTU4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VV
c2luZ1JlZ0V4cFNlYXJjaCgKICAgICAgICAgaWYgKGhhc05hbWVkQ2FwdHVyZXMpCiAgICAgICAg
ICAgICArK2FyZ0NvdW50OwogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jID0ganNDYXN0PEpTRnVu
Y3Rpb24qPihyZXBsYWNlVmFsdWUpOwotICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhl
YywgZnVuYywgYXJnQ291bnQpOworICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIGZ1bmMsIGFyZ0NvdW50KTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
ICAgICBpbnQqIG92ZWN0b3I7CkBAIC01NzMsMTYgKzU2OCwxNCBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBKU1N0cmluZyogcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKAogICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXNvdXJjZVJhbmdlcy50cnlDb25z
dHJ1Y3RBbmRBcHBlbmQobGFzdEluZGV4LCByZXN1bHQuc3RhcnQgLSBsYXN0SW5kZXgpKSkKLSAg
ICAgICAgICAgICAgICBPVVRfT0ZfTUVNT1JZKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgICAg
ICBPVVRfT0ZfTUVNT1JZKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgICAgICAgICBjYWNo
ZWRDYWxsLmNsZWFyQXJndW1lbnRzKCk7CiAKICAgICAgICAgICAgIEpTT2JqZWN0KiBncm91cHMg
PSBudWxscHRyOwogCi0gICAgICAgICAgICBpZiAoaGFzTmFtZWRDYXB0dXJlcykgewotICAgICAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoaGFzTmFtZWRDYXB0dXJlcykKICAgICAgICAg
ICAgICAgICBncm91cHMgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUodm0sIEpTRmluYWxPYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpLCAwKSk7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBpbnQgbWF0Y2hTdGFydCA9IG92ZWN0b3JbaSAqIDJdOwpAQCAtNjExLDEzICs2
MDQsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VVc2luZ1JlZ0V4
cFNlYXJjaCgKIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKGNhY2hlZENhbGwuaGFzT3ZlcmZsb3dlZEFyZ3Vt
ZW50cygpKSkgewotICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBKU1ZhbHVlIGpzUmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CiAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1bHQudG9XVEZTdHJpbmcoZXhlYykpOworICAg
ICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChqc1Jlc3VsdC50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OwogCiAgICAgICAgICAgICBsYXN0SW5kZXggPSByZXN1bHQuZW5kOwpAQCAtNjQwLDE1ICs2MzMs
MTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VVc2luZ1JlZ0V4cFNl
YXJjaCgKIAogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzb3VyY2VSYW5nZXMudHJ5Q29uc3RydWN0QW5k
QXBwZW5kKGxhc3RJbmRleCwgcmVzdWx0LnN0YXJ0IC0gbGFzdEluZGV4KSkpCi0gICAgICAgICAg
ICAgICAgICAgIE9VVF9PRl9NRU1PUlkoZXhlYywgc2NvcGUpOworICAgICAgICAgICAgICAgICAg
ICBPVVRfT0ZfTUVNT1JZKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgICAgICAgICAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICAgICAgICAgICAgICBKU09iamVjdCogZ3Jv
dXBzID0gbnVsbHB0cjsKIAotICAgICAgICAgICAgICAgIGlmIChoYXNOYW1lZENhcHR1cmVzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgaWYgKGhhc05hbWVkQ2Fw
dHVyZXMpCiAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9IEpTRmluYWxPYmplY3Q6OmNyZWF0
ZSh2bSwgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCksIDApKTsKLSAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnRXhwLT5udW1TdWJw
YXR0ZXJucygpICsgMTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBtYXRjaFN0YXJ0
ID0gb3ZlY3RvcltpICogMl07CkBAIC02NzgsMTMgKzY2OSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBKU1N0cmluZyogcmVwbGFjZVVzaW5nUmVnRXhwU2VhcmNoKAogICAgICAgICAgICAgICAg
IGlmIChoYXNOYW1lZENhcHR1cmVzKQogICAgICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChn
cm91cHMpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJmbG93ZWQo
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlcGxhY2VtZW50ID0gY2Fs
bChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwg
YXJncyk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXBsYWNlbWVudCA9IGNhbGwoZ2xvYmFs
T2JqZWN0LCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwg
YXJncyk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZW1l
bnQudG9XVEZTdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VtZW50
U3RyaW5nID0gcmVwbGFjZW1lbnQudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudHMuYXBwZW5kKHJlcGxhY2VtZW50U3RyaW5nKTsKICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKQEAgLTY5MiwxMyArNjgz
LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiByZXBsYWNlVXNpbmdSZWdFeHBT
ZWFyY2goCiAgICAgICAgICAgICAgICAgaW50IHJlcGxMZW4gPSByZXBsYWNlbWVudFN0cmluZy5s
ZW5ndGgoKTsKICAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4IDwgcmVzdWx0LnN0YXJ0IHx8
IHJlcGxMZW4pIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzb3VyY2VSYW5n
ZXMudHJ5Q29uc3RydWN0QW5kQXBwZW5kKGxhc3RJbmRleCwgcmVzdWx0LnN0YXJ0IC0gbGFzdElu
ZGV4KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVRfT0ZfTUVNT1JZKGV4ZWMsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVF9PRl9NRU1PUlkoZ2xvYmFsT2JqZWN0LCBz
Y29wZSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxMZW4pIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVwbGFjZW1lbnQoU3RyaW5nQnVpbGRlcjo6T3Zl
cmZsb3dIYW5kbGVyOjpSZWNvcmRPdmVyZmxvdyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBz
dWJzdGl0dXRlQmFja3JlZmVyZW5jZXMocmVwbGFjZW1lbnQsIHJlcGxhY2VtZW50U3RyaW5nLCBz
b3VyY2UsIG92ZWN0b3IsIHJlZ0V4cCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkocmVwbGFjZW1lbnQuaGFzT3ZlcmZsb3dlZCgpKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPVVRfT0ZfTUVNT1JZKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPVVRfT0ZfTUVNT1JZKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChyZXBsYWNlbWVudC50b1N0cmluZygpKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXBs
YWNlbWVudHMuYXBwZW5kKFN0cmluZygpKTsKQEAgLTcyMiw0OSArNzEzLDQ5IEBAIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTU3RyaW5nKiByZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goCiAKICAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RJbmRleCkgPCBzb3VyY2VMZW4pIHsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFzb3VyY2VSYW5nZXMudHJ5Q29uc3RydWN0QW5kQXBwZW5kKGxhc3RJ
bmRleCwgc291cmNlTGVuIC0gbGFzdEluZGV4KSkpCi0gICAgICAgICAgICBPVVRfT0ZfTUVNT1JZ
KGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgIE9VVF9PRl9NRU1PUlkoZ2xvYmFsT2JqZWN0LCBz
Y29wZSk7CiAgICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwganNTcGxpY2VTdWJz
dHJpbmdzV2l0aFNlcGFyYXRvcnMoZXhlYywgc3RyaW5nLCBzb3VyY2UsIHNvdXJjZVJhbmdlcy5k
YXRhKCksIHNvdXJjZVJhbmdlcy5zaXplKCksIHJlcGxhY2VtZW50cy5kYXRhKCksIHJlcGxhY2Vt
ZW50cy5zaXplKCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGpzU3BsaWNlU3Vi
c3RyaW5nc1dpdGhTZXBhcmF0b3JzKGdsb2JhbE9iamVjdCwgc3RyaW5nLCBzb3VyY2UsIHNvdXJj
ZVJhbmdlcy5kYXRhKCksIHNvdXJjZVJhbmdlcy5zaXplKCksIHJlcGxhY2VtZW50cy5kYXRhKCks
IHJlcGxhY2VtZW50cy5zaXplKCkpKTsKIH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VSZWdFeHBFbXB0eVN0cigKLSAgICBFeGVjU3RhdGUq
IGV4ZWMsIEpTU3RyaW5nKiB0aGlzVmFsdWUsIFJlZ0V4cE9iamVjdCogc2VhcmNoVmFsdWUpCitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZVJlZ0V4
cEVtcHR5U3RyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiB0aGlzVmFs
dWUsIFJlZ0V4cE9iamVjdCogc2VhcmNoVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgUmVnRXhwKiByZWdFeHAgPSBzZWFyY2hWYWx1ZS0+cmVnRXhwKCk7CiAgICAgaWYgKHJl
Z0V4cC0+Z2xvYmFsKCkpIHsKICAgICAgICAgLy8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgot
ICAgICAgICBzZWFyY2hWYWx1ZS0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOworICAgICAgICBzZWFy
Y2hWYWx1ZS0+c2V0TGFzdEluZGV4KGdsb2JhbE9iamVjdCwgMCk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICBTdHJpbmcgc291cmNlID0gdGhp
c1ZhbHVlLT52YWx1ZShleGVjKTsKKyAgICAgICAgU3RyaW5nIHNvdXJjZSA9IHRoaXNWYWx1ZS0+
dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVtb3ZlVXNpbmdS
ZWdFeHBTZWFyY2godm0sIGV4ZWMsIHRoaXNWYWx1ZSwgc291cmNlLCByZWdFeHApKTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZW1vdmVVc2luZ1JlZ0V4cFNlYXJjaCh2bSwg
Z2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIHNvdXJjZSwgcmVnRXhwKSk7CiAgICAgfQogCiAgICAg
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nID0gZW1wdHlT
dHJpbmcoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlcGxhY2VVc2luZ1JlZ0V4
cFNlYXJjaCgKLSAgICAgICAgdm0sIGV4ZWMsIHRoaXNWYWx1ZSwgc2VhcmNoVmFsdWUsIGNhbGxE
YXRhLCBDYWxsVHlwZTo6Tm9uZSwgcmVwbGFjZW1lbnRTdHJpbmcsIEpTVmFsdWUoKSkpOworICAg
ICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2VhcmNoVmFsdWUs
IGNhbGxEYXRhLCBDYWxsVHlwZTo6Tm9uZSwgcmVwbGFjZW1lbnRTdHJpbmcsIEpTVmFsdWUoKSkp
OwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVw
bGFjZVJlZ0V4cFN0cmluZygKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiB0aGlzVmFs
dWUsIFJlZ0V4cE9iamVjdCogc2VhcmNoVmFsdWUsIEpTU3RyaW5nKiByZXBsYWNlU3RyaW5nKQor
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VSZWdF
eHBTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHRoaXNWYWx1
ZSwgUmVnRXhwT2JqZWN0KiBzZWFyY2hWYWx1ZSwgSlNTdHJpbmcqIHJlcGxhY2VTdHJpbmcpCiB7
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgU3Ry
aW5nIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZVN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAg
U3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZVN0cmluZy0+dmFsdWUoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCgKLSAgICAgICAg
dm0sIGV4ZWMsIHRoaXNWYWx1ZSwgc2VhcmNoVmFsdWUsIGNhbGxEYXRhLCBDYWxsVHlwZTo6Tm9u
ZSwgcmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VTdHJpbmcpKTsKKyAgICAgICAgdm0sIGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIHNlYXJjaFZhbHVlLCBjYWxsRGF0YSwgQ2Fs
bFR5cGU6Ok5vbmUsIHJlcGxhY2VtZW50U3RyaW5nLCByZXBsYWNlU3RyaW5nKSk7CiB9CiAKLXN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiByZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goVk0m
IHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIEpTVmFsdWUgc2VhcmNoVmFs
dWUsIEpTVmFsdWUgcmVwbGFjZVZhbHVlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcq
IHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1N0cmluZyogc3RyaW5nLCBKU1ZhbHVlIHNl
YXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTc3MiwyMSArNzYzLDIxIEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTU3RyaW5nKiByZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2goVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXRDYWxsRGF0YSh2bSwgcmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7Ci0gICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0g
cmVwbGFjZVZhbHVlLnRvV1RGU3RyaW5nKGV4ZWMpOworICAgICAgICByZXBsYWNlbWVudFN0cmlu
ZyA9IHJlcGxhY2VWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCgKLSAgICAgICAgdm0sIGV4
ZWMsIHN0cmluZywgc2VhcmNoVmFsdWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgcmVwbGFjZW1lbnRT
dHJpbmcsIHJlcGxhY2VWYWx1ZSkpOworICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIHN0cmluZywgc2VhcmNoVmFsdWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgcmVwbGFjZW1lbnRT
dHJpbmcsIHJlcGxhY2VWYWx1ZSkpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1N0cmlu
ZyogcmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1N0
cmluZyoganNTdHJpbmcsIEpTVmFsdWUgc2VhcmNoVmFsdWUsIEpTVmFsdWUgcmVwbGFjZVZhbHVl
KQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJj
aChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBqc1N0cmlu
ZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgU3RyaW5nIHN0cmluZyA9
IGpzU3RyaW5nLT52YWx1ZShleGVjKTsKKyAgICBTdHJpbmcgc3RyaW5nID0ganNTdHJpbmctPnZh
bHVlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7Ci0gICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IHNlYXJjaFZhbHVlLnRvV1RGU3RyaW5nKGV4
ZWMpOworICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBzZWFyY2hWYWx1ZS50b1dURlN0cmluZyhn
bG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwog
CiAgICAgc2l6ZV90IG1hdGNoU3RhcnQgPSBzdHJpbmcuZmluZChzZWFyY2hTdHJpbmcpOwpAQCAt
ODA0LDExICs3OTUsMTEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VV
c2luZ1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgYXJncy5h
cHBlbmQoanNOdW1iZXIobWF0Y2hTdGFydCkpOwogICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmlu
Zyk7CiAgICAgICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICByZXBs
YWNlVmFsdWUgPSBjYWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBq
c1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAgICAgICAgcmVwbGFjZVZhbHVlID0gY2FsbChnbG9iYWxP
YmplY3QsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBh
cmdzKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
fQogCi0gICAgU3RyaW5nIHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9XVEZTdHJpbmco
ZXhlYyk7CisgICAgU3RyaW5nIHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9XVEZTdHJp
bmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKIAogICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdHJpbmcuaW1wbCgpOwpAQCAtODIz
LDEzICs4MTQsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIHJlcGxhY2VVc2lu
Z1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgU3RyaW5nQnVp
bGRlciByZXBsYWNlbWVudChTdHJpbmdCdWlsZGVyOjpPdmVyZmxvd0hhbmRsZXI6OlJlY29yZE92
ZXJmbG93KTsKICAgICAgICAgc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2VtZW50LCBy
ZXBsYWNlU3RyaW5nLCBzdHJpbmcsIG92ZWN0b3IsIDApOwogICAgICAgICBpZiAoVU5MSUtFTFko
cmVwbGFjZW1lbnQuaGFzT3ZlcmZsb3dlZCgpKSkKLSAgICAgICAgICAgIE9VVF9PRl9NRU1PUlko
ZXhlYywgc2NvcGUpOworICAgICAgICAgICAgT1VUX09GX01FTU9SWShnbG9iYWxPYmplY3QsIHNj
b3BlKTsKICAgICAgICAgbWlkZGxlUGFydCA9IHJlcGxhY2VtZW50LnRvU3RyaW5nKCk7CiAgICAg
fQogCiAgICAgc2l6ZV90IGxlZnRMZW5ndGggPSBzdHJpbmdJbXBsLT5sZW5ndGgoKSAtIG1hdGNo
RW5kOwogICAgIFN0cmluZyByaWdodFBhcnQoU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hh
cmluZ0ltcGwoKnN0cmluZ0ltcGwsIG1hdGNoRW5kLCBsZWZ0TGVuZ3RoKSk7Ci0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU0M6OmpzU3RyaW5nKGV4ZWMsIGxlZnRQYXJ0LCBtaWRkbGVQ
YXJ0LCByaWdodFBhcnQpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQzo6anNT
dHJpbmcoZ2xvYmFsT2JqZWN0LCBsZWZ0UGFydCwgbWlkZGxlUGFydCwgcmlnaHRQYXJ0KSk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja09iamVjdENvZXJjaWJsZShKU1ZhbHVlIHRoaXNW
YWx1ZSkKQEAgLTg2NCw0MiArODU1LDQyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jUmVwZWF0Q2hhcmFjdGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAg
aW50MzJfdCByZXBlYXRDb3VudDsKICAgICBkb3VibGUgdmFsdWUgPSByZXBlYXRDb3VudFZhbHVl
LmFzTnVtYmVyKCk7CiAgICAgaWYgKHZhbHVlID4gSlNTdHJpbmc6Ok1heExlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1l
LCBzY29wZSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1v
cnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKSk7CiAgICAgcmVwZWF0Q291bnQgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90Pih2YWx1ZSk7CiAgICAgQVNTRVJUKHJlcGVhdENvdW50ID49IDApOwogICAg
IEFTU0VSVCghcmVwZWF0Q291bnRWYWx1ZS5pc0RvdWJsZSgpIHx8IHJlcGVhdENvdW50VmFsdWUu
YXNEb3VibGUoKSA9PSByZXBlYXRDb3VudCk7CiAKLSAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0g
c3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBhdXRvIHZp
ZXdXaXRoU3RyaW5nID0gc3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJpbmcoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBTdHJpbmdWaWV3IHZpZXcgPSB2aWV3V2l0aFN0cmluZy52aWV3OwogICAgIEFT
U0VSVCh2aWV3Lmxlbmd0aCgpID09IDEpOwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CiAgICAgVUNoYXIgY2hhcmFjdGVyID0gdmlld1swXTsKICAgICBzY29wZS5yZWxlYXNlKCk7CiAg
ICAgaWYgKGlzTGF0aW4xKGNoYXJhY3RlcikpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVwZWF0Q2hhcmFjdGVyKCpjYWxsRnJhbWUsIHN0YXRpY19jYXN0PExDaGFyPihjaGFyYWN0
ZXIpLCByZXBlYXRDb3VudCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVwZWF0Q2hh
cmFjdGVyKCpjYWxsRnJhbWUsIGNoYXJhY3RlciwgcmVwZWF0Q291bnQpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXBlYXRDaGFyYWN0ZXIoZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxMQ2hhcj4oY2hhcmFjdGVyKSwgcmVwZWF0Q291bnQpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlcGVhdENoYXJhY3RlcihnbG9iYWxPYmplY3QsIGNoYXJhY3RlciwgcmVwZWF0
Q291bnQpKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1N0cmluZyogcmVwbGFjZSgKLSAgICBWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1
ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdHJpbmcqIHN0cmluZywgSlNWYWx1
ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7CiAgICAgaWYgKHNlYXJjaFZh
bHVlLmluaGVyaXRzPFJlZ0V4cE9iamVjdD4odm0pKQotICAgICAgICByZXR1cm4gcmVwbGFjZVVz
aW5nUmVnRXhwU2VhcmNoKHZtLCBleGVjLCBzdHJpbmcsIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFs
dWUpOwotICAgIHJldHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2godm0sIGV4ZWMsIHN0cmlu
Zywgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7CisgICAgICAgIHJldHVybiByZXBsYWNlVXNp
bmdSZWdFeHBTZWFyY2godm0sIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBzdHJpbmcsIHNlYXJj
aFZhbHVlLCByZXBsYWNlVmFsdWUpOworICAgIHJldHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFy
Y2godm0sIGdsb2JhbE9iamVjdCwgc3RyaW5nLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTsK
IH0KIAogQUxXQVlTX0lOTElORSBKU1N0cmluZyogcmVwbGFjZSgKLSAgICBWTSYgdm0sIEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgc2VhcmNoVmFsdWUsIEpTVmFs
dWUgcmVwbGFjZVZhbHVlKQorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHNlYXJj
aFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAg
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KLSAgICBKU1N0cmluZyogc3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZ2xvYmFs
T2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlcGxhY2Uodm0sIGV4ZWMsIHN0cmluZywgc2VhcmNo
VmFsdWUsIHJlcGxhY2VWYWx1ZSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVw
bGFjZSh2bSwgZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHN0cmluZywgc2VhcmNoVmFsdWUsIHJl
cGxhY2VWYWx1ZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1JlcGxhY2VVc2luZ1JlZ0V4cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkwNywxNCArODk4LDE0IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nUmVnRXhwKEpTR2xvYmFs
T2JqZWN0KiBnCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAg
IEpTVmFsdWUgc2VhcmNoVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICgh
c2VhcmNoVmFsdWUuaW5oZXJpdHM8UmVnRXhwT2JqZWN0Pih2bSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShyZXBsYWNlVXNpbmdSZWdFeHBTZWFyY2godm0sIGNhbGxG
cmFtZSwgc3RyaW5nLCBzZWFyY2hWYWx1ZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSkpKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShyZXBsYWNlVXNpbmdS
ZWdFeHBTZWFyY2godm0sIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBzdHJpbmcsIHNlYXJjaFZh
bHVlLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkyMiwyMSAr
OTEzLDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVw
bGFjZVVzaW5nU3RyaW5nU2VhcmNoKEpTR2xvYmFsT2JqCiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLnRvU3RyaW5nKGNh
bGxGcmFtZSk7CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCku
dG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaCh2bSwgY2FsbEZyYW1lLCBzdHJpbmcs
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpKSk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUocmVwbGFjZVVzaW5nU3Ry
aW5nU2VhcmNoKHZtLCBnbG9iYWxPYmplY3QsIHN0cmluZywgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSkpKTsKIH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblN0cmluZ1Byb3RvRnVuY1JlcGxhY2VHZW5lcmljKAotICAgIEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBzZWFyY2hWYWx1
ZSwKLSAgICBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlVmFsdWUpCitKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZUdlbmVyaWMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBz
ZWFyY2hWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgcmVwbGFjZVZhbHVlKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIHJldHVybiByZXBsYWNlKAotICAgICAg
ICB2bSwgZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSksIEpTVmFsdWU6OmRlY29kZShz
ZWFyY2hWYWx1ZSksCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSksIEpTVmFsdWU6OmRlY29kZShzZWFyY2hWYWx1ZSksCiAgICAg
ICAgIEpTVmFsdWU6OmRlY29kZShyZXBsYWNlVmFsdWUpKTsKIH0KIApAQCAtOTU1LDcgKzk0NSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmco
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgaWYgKHN0cmluZ09iamVjdCkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdPYmplY3QtPmludGVybmFsVmFsdWUoKSk7
CiAKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05NjUsOCArOTU1LDgg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDaGFyQXQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUp
OwotICAgIGF1dG8gdmlld1dpdGhTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoY2FsbEZyYW1l
KS0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgIGF1dG8gdmlld1dpdGhT
dHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KS0+dmlld1dpdGhVbmRlcmx5
aW5nU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgU3RyaW5nVmlldyB2aWV3ID0gdmlld1dpdGhTdHJpbmcu
dmlldzsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
QEAgLTk3Nyw3ICs5NjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0NoYXJBdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1NpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgdmlld1tp
XSkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRW1wdHlTdHJpbmcodm0pKTsK
ICAgICB9Ci0gICAgZG91YmxlIGRwb3MgPSBhMC50b0ludGVnZXIoY2FsbEZyYW1lKTsKKyAgICBk
b3VibGUgZHBvcyA9IGEwLnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChkcG9zID49IDAgJiYg
ZHBvcyA8IHZpZXcubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
aW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIHZpZXdbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRwb3Mp
XSkpOwpAQCAtOTkxLDggKzk4MSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jQ2hhckNvZGVBdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCFjaGVj
a09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihjYWxsRnJhbWUsIHNjb3BlKTsKLSAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gdGhpc1Zh
bHVlLnRvU3RyaW5nKGNhbGxGcmFtZSktPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhjYWxsRnJh
bWUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
KTsKKyAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGdsb2JhbE9i
amVjdCktPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFN0cmluZ1ZpZXcg
dmlldyA9IHZpZXdXaXRoU3RyaW5nLnZpZXc7CiAgICAgSlNWYWx1ZSBhMCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCk7CkBAIC0xMDAyLDcgKzk5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jQ2hhckNvZGVBdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZpZXdbaV0pKTsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICB9Ci0gICAgZG91
YmxlIGRwb3MgPSBhMC50b0ludGVnZXIoY2FsbEZyYW1lKTsKKyAgICBkb3VibGUgZHBvcyA9IGEw
LnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChkcG9zID49IDAgJiYgZHBvcyA8IHZpZXcubGVu
Z3RoKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodmlld1tzdGF0
aWNfY2FzdDxpbnQ+KGRwb3MpXSkpOwpAQCAtMTAyNiw5ICsxMDE2LDkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNDb2RlUG9pbnRBdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2IKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFs
dWUoKTsKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIFN0cmluZyBz
dHJpbmcgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgc3Ry
aW5nID0gdGhpc1ZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RyaW5nLmxlbmd0aCgpOwogCkBAIC0xMDQyLDcgKzEwMzIsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NvZGVQb2ludEF0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYgogCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKLSAgICBkb3VibGUgZG91YmxlUG9zaXRpb24gPSBhcmd1bWVudDAudG9JbnRlZ2Vy
KGNhbGxGcmFtZSk7CisgICAgZG91YmxlIGRvdWJsZVBvc2l0aW9uID0gYXJndW1lbnQwLnRvSW50
ZWdlcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGlmIChkb3VibGVQb3NpdGlvbiA+PSAwICYmIGRvdWJsZVBvc2l0
aW9uIDwgbGVuZ3RoKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGNv
ZGVQb2ludEF0KHN0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRvdWJsZVBvc2l0aW9uKSwg
bGVuZ3RoKSkpOwpAQCAtMTA1NiwxNCArMTA0NiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luZGV4T2YoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dAogCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAg
IGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBhMSA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MSk7CiAKLSAgICBKU1N0cmluZyogdGhpc0pTU3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGNh
bGxGcmFtZSk7CisgICAgSlNTdHJpbmcqIHRoaXNKU1N0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIEpTU3RyaW5nKiBvdGhlckpTU3RyaW5nID0gYTAudG9TdHJpbmcoY2Fs
bEZyYW1lKTsKKyAgICBKU1N0cmluZyogb3RoZXJKU1N0cmluZyA9IGEwLnRvU3RyaW5nKGdsb2Jh
bE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICAgICB1bnNpZ25lZCBwb3MgPSAwOwpAQCAtMTA3Myw3ICsxMDYzLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QKICAgICAgICAgaWYgKGExLmlzVUludDMyKCkpCiAgICAgICAgICAg
ICBwb3MgPSBzdGQ6Om1pbjx1aW50MzJfdD4oYTEuYXNVSW50MzIoKSwgbGVuKTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBkb3VibGUgZHBvcyA9IGExLnRvSW50ZWdlcihjYWxsRnJhbWUp
OworICAgICAgICAgICAgZG91YmxlIGRwb3MgPSBhMS50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgICAgICAgICAgaWYgKGRwb3MgPCAwKQogICAgICAgICAgICAgICAgIGRwb3MgPSAwOwpA
QCAtMTA4Niw5ICsxMDc2LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNJbmRleE9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICBpZiAodGhp
c0pTU3RyaW5nLT5sZW5ndGgoKSA8IG90aGVySlNTdHJpbmctPmxlbmd0aCgpICsgcG9zKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CiAKLSAgICBhdXRvIHRo
aXNWaWV3V2l0aFN0cmluZyA9IHRoaXNKU1N0cmluZy0+dmlld1dpdGhVbmRlcmx5aW5nU3RyaW5n
KGNhbGxGcmFtZSk7CisgICAgYXV0byB0aGlzVmlld1dpdGhTdHJpbmcgPSB0aGlzSlNTdHJpbmct
PnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gb3RoZXJWaWV3V2l0
aFN0cmluZyA9IG90aGVySlNTdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhjYWxsRnJh
bWUpOworICAgIGF1dG8gb3RoZXJWaWV3V2l0aFN0cmluZyA9IG90aGVySlNTdHJpbmctPnZpZXdX
aXRoVW5kZXJseWluZ1N0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHNpemVfdCByZXN1bHQgPSB0aGlzVmll
d1dpdGhTdHJpbmcudmlldy5maW5kKG90aGVyVmlld1dpdGhTdHJpbmcudmlldywgcG9zKTsKICAg
ICBpZiAocmVzdWx0ID09IG5vdEZvdW5kKQpAQCAtMTEwMywxOCArMTA5MywxOCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYgogCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpOwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgSlNW
YWx1ZSBhMCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgSlNWYWx1ZSBhMSA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMSk7CiAKLSAgICBKU1N0cmluZyogdGhpc0pTU3RyaW5nID0gdGhpc1Zh
bHVlLnRvU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgSlNTdHJpbmcqIHRoaXNKU1N0cmluZyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbiA9IHRoaXNKU1N0cmlu
Zy0+bGVuZ3RoKCk7Ci0gICAgSlNTdHJpbmcqIG90aGVySlNTdHJpbmcgPSBhMC50b1N0cmluZyhj
YWxsRnJhbWUpOworICAgIEpTU3RyaW5nKiBvdGhlckpTU3RyaW5nID0gYTAudG9TdHJpbmcoZ2xv
YmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKIAotICAgIGRvdWJsZSBkcG9zID0gYTEudG9JbnRlZ2VyUHJlc2VydmVOYU4oY2FsbEZy
YW1lKTsKKyAgICBkb3VibGUgZHBvcyA9IGExLnRvSW50ZWdlclByZXNlcnZlTmFOKGdsb2JhbE9i
amVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbjsKICAgICBpZiAoZHBvcyA8IDApCkBAIC0xMTI3
LDkgKzExMTcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVu
Y0xhc3RJbmRleE9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIGlmIChsZW4gPCBvdGhl
ckpTU3RyaW5nLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcigtMSkpOwogCi0gICAgU3RyaW5nIHRoaXNTdHJpbmcgPSB0aGlzSlNTdHJpbmctPnZhbHVl
KGNhbGxGcmFtZSk7CisgICAgU3RyaW5nIHRoaXNTdHJpbmcgPSB0aGlzSlNTdHJpbmctPnZhbHVl
KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgU3RyaW5nIG90aGVyU3RyaW5nID0gb3RoZXJKU1N0cmluZy0+dmFsdWUo
Y2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgb3RoZXJTdHJpbmcgPSBvdGhlckpTU3RyaW5nLT52YWx1
ZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIHNpemVfdCByZXN1bHQ7CiAgICAgaWYgKCFzdGFydFBvc2l0aW9uKQpA
QCAtMTE0OCw4ICsxMTM4LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTbGljZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghY2hlY2tPYmpl
Y3RDb2VyY2libGUodGhpc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSk7Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhjYWxsRnJhbWUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKQEAg
LTExNTksMTggKzExNDksMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTbGljZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIFJFTEVBU0Vf
QVNTRVJUKGxlbmd0aCA+PSAwKTsKIAogICAgIC8vIFRoZSBhcmcgcHJvY2Vzc2luZyBpcyB2ZXJ5
IG11Y2ggbGlrZSBBcnJheVByb3RvRnVuYzo6U2xpY2UKLSAgICBkb3VibGUgc3RhcnQgPSBhMC50
b0ludGVnZXIoY2FsbEZyYW1lKTsKKyAgICBkb3VibGUgc3RhcnQgPSBhMC50b0ludGVnZXIoZ2xv
YmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICBkb3VibGUgZW5kID0gYTEuaXNVbmRlZmluZWQoKSA/IGxlbmd0aCA6IGExLnRv
SW50ZWdlcihjYWxsRnJhbWUpOworICAgIGRvdWJsZSBlbmQgPSBhMS5pc1VuZGVmaW5lZCgpID8g
bGVuZ3RoIDogYTEudG9JbnRlZ2VyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoc3RyaW5nU2xpY2UoY2FsbEZyYW1lLCB2bSwgc3RyaW5nLCBs
ZW5ndGgsIHN0YXJ0LCBlbmQpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1Zh
bHVlOjplbmNvZGUoc3RyaW5nU2xpY2UoZ2xvYmFsT2JqZWN0LCB2bSwgc3RyaW5nLCBsZW5ndGgs
IHN0YXJ0LCBlbmQpKSk7CiB9CiAKIC8vIFJldHVybiB0cnVlIGluIGNhc2Ugb2YgZWFybHkgcmV0
dXJuIChyZXN1bHRMZW5ndGggZ290IHRvIGxpbWl0TGVuZ3RoKS4KIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHNwbGl0U3RyaW5nQnlP
bmVDaGFyYWN0ZXJJbXBsKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogcmVzdWx0LCBKU1ZhbHVl
IG9yaWdpbmFsVmFsdWUsIGNvbnN0IFN0cmluZyYgaW5wdXQsIFN0cmluZ0ltcGwqIHN0cmluZywg
VUNoYXIgc2VwYXJhdG9yQ2hhcmFjdGVyLCBzaXplX3QmIHBvc2l0aW9uLCB1bnNpZ25lZCYgcmVz
dWx0TGVuZ3RoLCB1bnNpZ25lZCBsaW1pdExlbmd0aCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGJv
b2wgc3BsaXRTdHJpbmdCeU9uZUNoYXJhY3RlckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNBcnJheSogcmVzdWx0LCBKU1ZhbHVlIG9yaWdpbmFsVmFsdWUsIGNvbnN0IFN0cmlu
ZyYgaW5wdXQsIFN0cmluZ0ltcGwqIHN0cmluZywgVUNoYXIgc2VwYXJhdG9yQ2hhcmFjdGVyLCBz
aXplX3QmIHBvc2l0aW9uLCB1bnNpZ25lZCYgcmVzdWx0TGVuZ3RoLCB1bnNpZ25lZCBsaW1pdExl
bmd0aCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICAvLyAxMi4gTGV0IHEgPSBwLgpAQCAtMTE4NSw5ICsxMTc1LDkgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgYm9vbCBzcGxpdFN0cmluZ0J5T25lQ2hhcmFjdGVySW1wbChFeGVjU3RhdGUqIGV4
ZWMsIEpTQXJyYXkKICAgICAgICAgLy8gICAgdGhyb3VnaCBxIChleGNsdXNpdmUpLgogICAgICAg
ICAvLyAyLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9m
IEEgd2l0aCBhcmd1bWVudHMgVG9TdHJpbmcobGVuZ3RoQSksCiAgICAgICAgIC8vICAgIFByb3Bl
cnR5IERlc2NyaXB0b3Ige1tbVmFsdWVdXTogVCwgW1tXcml0YWJsZV1dOiB0cnVlLCBbW0VudW1l
cmFibGVdXTogdHJ1ZSwgW1tDb25maWd1cmFibGVdXTogdHJ1ZX0sIGFuZCBmYWxzZS4KLSAgICAg
ICAgYXV0byogc3Vic3RyaW5nID0ganNTdWJzdHJpbmcoZXhlYywgb3JpZ2luYWxWYWx1ZSwgaW5w
dXQsIHBvc2l0aW9uLCBtYXRjaFBvc2l0aW9uIC0gcG9zaXRpb24pOworICAgICAgICBhdXRvKiBz
dWJzdHJpbmcgPSBqc1N1YnN0cmluZyhnbG9iYWxPYmplY3QsIG9yaWdpbmFsVmFsdWUsIGlucHV0
LCBwb3NpdGlvbiwgbWF0Y2hQb3NpdGlvbiAtIHBvc2l0aW9uKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4
KGV4ZWMsIHJlc3VsdExlbmd0aCwgc3Vic3RyaW5nKTsKKyAgICAgICAgcmVzdWx0LT5wdXREaXJl
Y3RJbmRleChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCwgc3Vic3RyaW5nKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAvLyAzLiBJbmNyZW1l
bnQgbGVuZ3RoQSBieSAxLgogICAgICAgICAvLyA0LiBJZiBsZW5ndGhBID09IGxpbSwgcmV0dXJu
IEEuCkBAIC0xMjExLDEzICsxMjAxLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jU3BsaXRGYXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplCiAKICAg
ICAvLyAzLiBMZXQgUyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9TdHJpbmcsIGdpdmluZyBp
dCB0aGUgdGhpcyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCiAgICAgLy8gNy4gTGV0IHMgYmUgdGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFMuCi0gICAgU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVl
LnRvV1RGU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVlLnRv
V1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgQVNTRVJUKCFpbnB1dC5pc051bGwoKSk7CiAKICAgICAv
LyA0LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5IHRoZSBleHByZXNzaW9u
IG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMgdGhlIHN0YW5kYXJkIGJ1aWx0
LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgotICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoY2FsbEZyYW1lLCAwKTsKKyAgICBKU0FycmF5KiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyA1LiBMZXQgbGVuZ3RoQSBi
ZSAwLgpAQCAtMTIyNSw3ICsxMjE1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90b0Z1bmNTcGxpdEZhc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKIAogICAg
IC8vIDYuIElmIGxpbWl0IGlzIHVuZGVmaW5lZCwgbGV0IGxpbSA9IDJeMzItMTsgZWxzZSBsZXQg
bGltID0gVG9VaW50MzIobGltaXQpLgogICAgIEpTVmFsdWUgbGltaXRWYWx1ZSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7Ci0gICAgdW5zaWduZWQgbGltaXQgPSBsaW1pdFZhbHVl
LmlzVW5kZWZpbmVkKCkgPyAweEZGRkZGRkZGdSA6IGxpbWl0VmFsdWUudG9VSW50MzIoY2FsbEZy
YW1lKTsKKyAgICB1bnNpZ25lZCBsaW1pdCA9IGxpbWl0VmFsdWUuaXNVbmRlZmluZWQoKSA/IDB4
RkZGRkZGRkZ1IDogbGltaXRWYWx1ZS50b1VJbnQzMihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gOC4gTGV0
IHAgPSAwLgpAQCAtMTIzNCw3ICsxMjI0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNTcGxpdEZhc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAg
ICAvLyA5LiBJZiBzZXBhcmF0b3IgaXMgYSBSZWdFeHAgb2JqZWN0IChpdHMgW1tDbGFzc11dIGlz
ICJSZWdFeHAiKSwgbGV0IFIgPSBzZXBhcmF0b3I7CiAgICAgLy8gICAgb3RoZXJ3aXNlIGxldCBS
ID0gVG9TdHJpbmcoc2VwYXJhdG9yKS4KICAgICBKU1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBTdHJpbmcgc2VwYXJhdG9yID0gc2Vw
YXJhdG9yVmFsdWUudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgc2VwYXJhdG9y
ID0gc2VwYXJhdG9yVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIC8vIDEwLiBJZiBs
aW0gPT0gMCwgcmV0dXJuIEEuCkBAIC0xMjQ1LDcgKzEyMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZQogICAgIGlmIChzZXBhcmF0b3JWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAg
IC8vIGEuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
QSB3aXRoIGFyZ3VtZW50cyAiMCIsCiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3RJbmRleChjYWxsRnJhbWUsIDAsIGpzU3RyaW5nV2l0aFJldXNlKGNh
bGxGcmFtZSwgdGhpc1ZhbHVlLCBpbnB1dCkpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdElu
ZGV4KGdsb2JhbE9iamVjdCwgMCwganNTdHJpbmdXaXRoUmV1c2UoZ2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGlucHV0KSk7CiAgICAgICAgIC8vIGIuIFJldHVybiBBLgogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQpAQCAtMTI1OCw3ICsxMjQ4LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTcGxpdEZhc3QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamUKICAgICAgICAgLy8gZC4gUmV0dXJuIEEuCiAgICAgICAgIGlm
ICghc2VwYXJhdG9yLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChjYWxsRnJhbWUsIDAsIGpzU3RyaW5n
V2l0aFJldXNlKGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBpbnB1dCkpOworICAgICAgICAgICAgcmVz
dWx0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIDAsIGpzU3RyaW5nV2l0aFJldXNlKGds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBpbnB1dCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBAIC0xMjcwLDcgKzEyNjAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZQogICAgICAgICBBU1NFUlQobGltaXQpOwogCiAgICAgICAg
IGRvIHsKLSAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCBwb3Np
dGlvbiwganNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcodm0sIGlucHV0W3Bvc2l0aW9uXSkpOworICAg
ICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIHBvc2l0aW9uLCBq
c1NpbmdsZUNoYXJhY3RlclN0cmluZyh2bSwgaW5wdXRbcG9zaXRpb25dKSk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAg
fSB3aGlsZSAoKytwb3NpdGlvbiA8IGxpbWl0KTsKIApAQCAtMTI5MywxMCArMTI4MywxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZQogICAgICAgICAgICAgc2VwYXJhdG9yQ2hhcmFjdGVyID0g
c2VwYXJhdG9ySW1wbC0+Y2hhcmFjdGVyczE2KClbMF07CiAKICAgICAgICAgaWYgKHN0cmluZ0lt
cGwtPmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICBpZiAoc3BsaXRTdHJpbmdCeU9uZUNoYXJhY3Rl
ckltcGw8TENoYXI+KGNhbGxGcmFtZSwgcmVzdWx0LCB0aGlzVmFsdWUsIGlucHV0LCBzdHJpbmdJ
bXBsLCBzZXBhcmF0b3JDaGFyYWN0ZXIsIHBvc2l0aW9uLCByZXN1bHRMZW5ndGgsIGxpbWl0KSkg
CisgICAgICAgICAgICBpZiAoc3BsaXRTdHJpbmdCeU9uZUNoYXJhY3RlckltcGw8TENoYXI+KGds
b2JhbE9iamVjdCwgcmVzdWx0LCB0aGlzVmFsdWUsIGlucHV0LCBzdHJpbmdJbXBsLCBzZXBhcmF0
b3JDaGFyYWN0ZXIsIHBvc2l0aW9uLCByZXN1bHRMZW5ndGgsIGxpbWl0KSkgCiAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KSk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3BsaXRTdHJpbmdCeU9uZUNoYXJh
Y3RlckltcGw8VUNoYXI+KGNhbGxGcmFtZSwgcmVzdWx0LCB0aGlzVmFsdWUsIGlucHV0LCBzdHJp
bmdJbXBsLCBzZXBhcmF0b3JDaGFyYWN0ZXIsIHBvc2l0aW9uLCByZXN1bHRMZW5ndGgsIGxpbWl0
KSkgCisgICAgICAgICAgICBpZiAoc3BsaXRTdHJpbmdCeU9uZUNoYXJhY3RlckltcGw8VUNoYXI+
KGdsb2JhbE9iamVjdCwgcmVzdWx0LCB0aGlzVmFsdWUsIGlucHV0LCBzdHJpbmdJbXBsLCBzZXBh
cmF0b3JDaGFyYWN0ZXIsIHBvc2l0aW9uLCByZXN1bHRMZW5ndGgsIGxpbWl0KSkgCiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KSk7CiAgICAgICAgIH0KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CkBAIC0xMzExLDkgKzEzMDEsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZQogICAgICAgICAgICAgLy8gMS4gTGV0IFQgYmUgYSBTdHJpbmcgdmFsdWUgZXF1YWwgdG8gdGhl
IHN1YnN0cmluZyBvZiBTIGNvbnNpc3Rpbmcgb2YgdGhlIGNoYXJhY3RlcnMgYXQgcG9zaXRpb25z
IHAgKGluY2x1c2l2ZSkKICAgICAgICAgICAgIC8vICAgIHRocm91Z2ggcSAoZXhjbHVzaXZlKS4K
ICAgICAgICAgICAgIC8vIDIuIENhbGwgQ3JlYXRlRGF0YVByb3BlcnR5KEEsIFRvU3RyaW5nKGxl
bmd0aEEpLCBUKS4KLSAgICAgICAgICAgIGF1dG8qIHN1YnN0cmluZyA9IGpzU3Vic3RyaW5nKGNh
bGxGcmFtZSwgdGhpc1ZhbHVlLCBpbnB1dCwgcG9zaXRpb24sIG1hdGNoUG9zaXRpb24gLSBwb3Np
dGlvbik7CisgICAgICAgICAgICBhdXRvKiBzdWJzdHJpbmcgPSBqc1N1YnN0cmluZyhnbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgaW5wdXQsIHBvc2l0aW9uLCBtYXRjaFBvc2l0aW9uIC0gcG9zaXRp
b24pOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAg
ICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCByZXN1bHRMZW5ndGgsIHN1
YnN0cmluZyk7CisgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVj
dCwgcmVzdWx0TGVuZ3RoLCBzdWJzdHJpbmcpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgICAgIC8vIDMuIEluY3JlbWVudCBsZW5ndGhBIGJ5
IDEuCiAgICAgICAgICAgICAvLyA0LiBJZiBsZW5ndGhBID09IGxpbSwgcmV0dXJuIEEuCkBAIC0x
MzI5LDEwICsxMzE5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jU3BsaXRGYXN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplCiAgICAgLy8gMTUuIExl
dCBUIGJlIGEgU3RyaW5nIHZhbHVlIGVxdWFsIHRvIHRoZSBzdWJzdHJpbmcgb2YgUyBjb25zaXN0
aW5nIG9mIHRoZSBjaGFyYWN0ZXJzIGF0IHBvc2l0aW9ucyBwIChpbmNsdXNpdmUpCiAgICAgLy8g
ICAgIHRocm91Z2ggcyAoZXhjbHVzaXZlKS4KICAgICAvLyAxNi4gQ2FsbCBDcmVhdGVEYXRhUHJv
cGVydHkoQSwgVG9TdHJpbmcobGVuZ3RoQSksIFQpLgotICAgIGF1dG8qIHN1YnN0cmluZyA9IGpz
U3Vic3RyaW5nKGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBpbnB1dCwgcG9zaXRpb24sIGlucHV0Lmxl
bmd0aCgpIC0gcG9zaXRpb24pOworICAgIGF1dG8qIHN1YnN0cmluZyA9IGpzU3Vic3RyaW5nKGds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBpbnB1dCwgcG9zaXRpb24sIGlucHV0Lmxlbmd0aCgpIC0g
cG9zaXRpb24pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCByZXN1
bHRMZW5ndGgrKywgc3Vic3RyaW5nKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2Jh
bE9iamVjdCwgcmVzdWx0TGVuZ3RoKyssIHN1YnN0cmluZyk7CiAKICAgICAvLyAxNy4gUmV0dXJu
IEEuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMTM0NSw3ICsxMzM1
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHN0cmluZ1Byb3RvRnVuY1N1YnN0ckltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2EKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxGcmFtZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
KTsKICAgICB1bnNpZ25lZCBsZW47CiAgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gMDsKICAgICBT
dHJpbmcgdVN0cmluZzsKQEAgLTEzNTMsNyArMTM0Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBzdHJpbmdQcm90b0Z1bmNTdWJzdHJJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhCiAgICAgICAgIGpzU3RyaW5nID0gYXNTdHJpbmcodGhpc1ZhbHVlKTsKICAgICAgICAgbGVu
ID0ganNTdHJpbmctPmxlbmd0aCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHVTdHJpbmcgPSB0
aGlzVmFsdWUudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICAgICAgdVN0cmluZyA9IHRoaXNW
YWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgbGVuID0gdVN0cmluZy5sZW5n
dGgoKTsKICAgICB9CkBAIC0xMzYxLDkgKzEzNTEsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
c3RyaW5nUHJvdG9GdW5jU3Vic3RySW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YQogICAgIEpTVmFsdWUgYTAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIEpTVmFsdWUg
YTEgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOwogCi0gICAgZG91YmxlIHN0YXJ0ID0gYTAudG9J
bnRlZ2VyKGNhbGxGcmFtZSk7CisgICAgZG91YmxlIHN0YXJ0ID0gYTAudG9JbnRlZ2VyKGdsb2Jh
bE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgZG91YmxlIGxlbmd0aCA9IGExLmlzVW5kZWZpbmVkKCkgPyBsZW4gOiBhMS50b0lu
dGVnZXIoY2FsbEZyYW1lKTsKKyAgICBkb3VibGUgbGVuZ3RoID0gYTEuaXNVbmRlZmluZWQoKSA/
IGxlbiA6IGExLnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChzdGFydCA+PSBsZW4gfHwgbGVu
Z3RoIDw9IDApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNFbXB0eVN0cmluZyh2
bSkpOwpAQCAtMTM3OCw3ICsxMzY4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHN0cmluZ1By
b3RvRnVuY1N1YnN0ckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2EKICAgICB1
bnNpZ25lZCBzdWJzdHJpbmdMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKTsK
ICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgaWYgKGpzU3RyaW5nKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3Vic3RyaW5nKGNhbGxGcmFtZSwganNTdHJpbmcsIHN1YnN0cmlu
Z1N0YXJ0LCBzdWJzdHJpbmdMZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1N1YnN0cmluZyhnbG9iYWxPYmplY3QsIGpzU3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vi
c3RyaW5nTGVuZ3RoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyh2
bSwgdVN0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpOwogfQogCkBAIC0x
NDA4LDkgKzEzOTgsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1N1YnN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQogCiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2Fs
bEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUpOwogCi0gICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGNhbGxGcmFtZSk7CisgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
QEAgLTE0MTgsNyArMTQwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jU3Vic3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplCiAgICAgaW50IGxl
biA9IGpzU3RyaW5nLT5sZW5ndGgoKTsKICAgICBSRUxFQVNFX0FTU0VSVChsZW4gPj0gMCk7CiAK
LSAgICBkb3VibGUgc3RhcnQgPSBhMC50b051bWJlcihjYWxsRnJhbWUpOworICAgIGRvdWJsZSBz
dGFydCA9IGEwLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGVuZDsKICAgICBpZiAoIShz
dGFydCA+PSAwKSkgLy8gY2hlY2sgZm9yIG5lZ2F0aXZlIHZhbHVlcyBvciBOYU4KQEAgLTE0Mjgs
NyArMTQxOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
U3Vic3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplCiAgICAgaWYgKGExLmlzVW5kZWZp
bmVkKCkpCiAgICAgICAgIGVuZCA9IGxlbjsKICAgICBlbHNlIHsgCi0gICAgICAgIGVuZCA9IGEx
LnRvTnVtYmVyKGNhbGxGcmFtZSk7CisgICAgICAgIGVuZCA9IGExLnRvTnVtYmVyKGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgICAgICBpZiAoIShlbmQgPj0gMCkpIC8vIGNoZWNrIGZvciBuZWdhdGl2ZSB2YWx1
ZXMgb3IgTmFOCiAgICAgICAgICAgICBlbmQgPSAwOwpAQCAtMTQ0Miw3ICsxNDMyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamUKICAgICB9CiAgICAgdW5zaWduZWQgc3Vic3RyaW5nU3RhcnQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpOwogICAgIHVuc2lnbmVkIHN1YnN0cmluZ0xl
bmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpIC0gc3Vic3RyaW5nU3RhcnQ7Ci0gICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoanNTdWJzdHJpbmcoY2Fs
bEZyYW1lLCBqc1N0cmluZywgc3Vic3RyaW5nU3RhcnQsIHN1YnN0cmluZ0xlbmd0aCkpKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc1N1YnN0cmluZyhn
bG9iYWxPYmplY3QsIGpzU3RyaW5nLCBzdWJzdHJpbmdTdGFydCwgc3Vic3RyaW5nTGVuZ3RoKSkp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG93
ZXJDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQpAQCAtMTQ1MiwxMCArMTQ0MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghY2hl
Y2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7Ci0gICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUu
dG9TdHJpbmcoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSk7CisgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJp
bmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICBTdHJpbmcgcyA9IHNWYWwtPnZhbHVlKGNhbGxGcmFtZSk7CisgICAg
U3RyaW5nIHMgPSBzVmFsLT52YWx1ZShnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFN0cmluZyBsb3dlcmNhc2VkU3Ry
aW5nID0gcy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7CiAgICAgaWYgKGxvd2Vy
Y2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1wbCgpKQpAQCAtMTQ3MCwxMCArMTQ2MCwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVl
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7Ci0g
ICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoY2FsbEZyYW1lKTsKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgSlNT
dHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBTdHJpbmcgcyA9
IHNWYWwtPnZhbHVlKGNhbGxGcmFtZSk7CisgICAgU3RyaW5nIHMgPSBzVmFsLT52YWx1ZShnbG9i
YWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIFN0cmluZyB1cHBlcmNhc2VkU3RyaW5nID0gcy5jb252ZXJ0VG9VcHBlcmNhc2VX
aXRob3V0TG9jYWxlKCk7CiAgICAgaWYgKHVwcGVyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1w
bCgpKQpAQCAtMTQ5MiwxNyArMTQ4MiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAg
IC8vIDEuIExldCBPIGJlIFJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyB2YWx1ZSkuCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghY2hl
Y2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIlN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZSBy
ZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQiX3MpOworICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiU3RyaW5nLnBy
b3RvdHlwZS5sb2NhbGVDb21wYXJlIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIG9y
IHVuZGVmaW5lZCJfcyk7CiAKICAgICAvLyAyLiBMZXQgUyBiZSBUb1N0cmluZyhPKS4KICAgICAv
LyAzLiBSZXR1cm5JZkFicnVwdChTKS4KLSAgICBTdHJpbmcgc3RyaW5nID0gdGhpc1ZhbHVlLnRv
V1RGU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgU3RyaW5nIHN0cmluZyA9IHRoaXNWYWx1ZS50b1dU
RlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogCiAgICAgLy8gNC4gTGV0IFRoYXQgYmUgVG9TdHJpbmcodGhhdCku
CiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoVGhhdCkuCiAgICAgSlNWYWx1ZSB0aGF0VmFsdWUg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwotICAgIFN0cmluZyB0aGF0ID0gdGhhdFZhbHVlLnRv
V1RGU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgU3RyaW5nIHRoYXQgPSB0aGF0VmFsdWUudG9XVEZT
dHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKIAogI2lmIEVOQUJMRShJTlRMKQpAQCAtMTUxMCwxNCArMTUwMCwxNCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBh
cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgIEpTVmFsdWUgb3B0aW9ucyA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMik7CiAgICAgSW50bENvbGxhdG9yKiBjb2xsYXRvciA9IG51bGxwdHI7CiAg
ICAgaWYgKGxvY2FsZXMuaXNVbmRlZmluZWQoKSAmJiBvcHRpb25zLmlzVW5kZWZpbmVkKCkpIHsK
LSAgICAgICAgY29sbGF0b3IgPSBnbG9iYWxPYmplY3QtPmRlZmF1bHRDb2xsYXRvcihjYWxsRnJh
bWUpOworICAgICAgICBjb2xsYXRvciA9IGdsb2JhbE9iamVjdC0+ZGVmYXVsdENvbGxhdG9yKGds
b2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbGxhdG9yID0gSW50bENvbGxhdG9y
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+Y29sbGF0b3JTdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
IGNvbGxhdG9yLT5pbml0aWFsaXplQ29sbGF0b3IoKmNhbGxGcmFtZSwgbG9jYWxlcywgb3B0aW9u
cyk7CisgICAgICAgIGNvbGxhdG9yLT5pbml0aWFsaXplQ29sbGF0b3IoZ2xvYmFsT2JqZWN0LCBs
b2NhbGVzLCBvcHRpb25zKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgfQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKGNvbGxhdG9yLT5jb21wYXJlU3RyaW5ncygqY2FsbEZyYW1lLCBzdHJpbmcs
IHRoYXQpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
Y29sbGF0b3ItPmNvbXBhcmVTdHJpbmdzKGdsb2JhbE9iamVjdCwgc3RyaW5nLCB0aGF0KSkpOwog
I2Vsc2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKENvbGxhdG9yKCkuY29s
bGF0ZShzdHJpbmcsIHRoYXQpKSk7CiAjZW5kaWYKQEAgLTE1MjksNyArMTUxOSw3IEBAIGVudW0g
Y2xhc3MgQ2FzZUNvbnZlcnNpb25Nb2RlIHsKICAgICBMb3dlciwKIH07CiB0ZW1wbGF0ZTxDYXNl
Q29udmVyc2lvbk1vZGUgbW9kZT4KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2Uo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE1NDEsMTQg
KzE1MzEsMTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRvTG9jYWxlQ2FzZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIHN0YXQKICAgICB9OwogCiAgICAgLy8gMS4g
TGV0IE8gYmUgUmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzIHZhbHVlKS4KLSAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
IAogICAgIC8vIDIuIExldCBTIGJlIFRvU3RyaW5nKE8pLgotICAgIEpTU3RyaW5nKiBzVmFsID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKHN0YXRlKTsKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1
ZS50b1N0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFN0cmluZyBzID0gc1ZhbC0+dmFsdWUoc3RhdGUpOwor
ICAgIFN0cmluZyBzID0gc1ZhbC0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKIAogICAgIC8vIDMuIFJl
dHVybklmQWJydXB0KFMpLgogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwpAQCAtMTU1OCw3ICsxNTQ4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRv
TG9jYWxlQ2FzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIHN0YXQK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzVmFsKTsKIAogICAgIC8vIDQuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCi0gICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3Rl
ZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT5hcmd1bWVudCgwKSk7CiAKICAgICAvLyA1LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2Nh
bGVzKS4KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
QEAgLTE1NzAsNyArMTU2MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2Uo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBzdGF0CiAgICAgLy8gYS4g
TGV0IHJlcXVlc3RlZExvY2FsZSBiZSB0aGUgZmlyc3QgZWxlbWVudCBvZiByZXF1ZXN0ZWRMb2Nh
bGVzLgogICAgIC8vIDguIEVsc2UKICAgICAvLyBhLiBMZXQgcmVxdWVzdGVkTG9jYWxlIGJlIERl
ZmF1bHRMb2NhbGUoKS4KLSAgICBTdHJpbmcgcmVxdWVzdGVkTG9jYWxlID0gbGVuID4gMCA/IHJl
cXVlc3RlZExvY2FsZXMuZmlyc3QoKSA6IGRlZmF1bHRMb2NhbGUoKnN0YXRlKTsKKyAgICBTdHJp
bmcgcmVxdWVzdGVkTG9jYWxlID0gbGVuID4gMCA/IHJlcXVlc3RlZExvY2FsZXMuZmlyc3QoKSA6
IGRlZmF1bHRMb2NhbGUoZ2xvYmFsT2JqZWN0KTsKIAogICAgIC8vIDkuIExldCBub0V4dGVuc2lv
bnNMb2NhbGUgYmUgdGhlIFN0cmluZyB2YWx1ZSB0aGF0IGlzIHJlcXVlc3RlZExvY2FsZSB3aXRo
IGFsbCBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24gc2VxdWVuY2VzICg2LjIuMSkgcmVtb3ZlZC4K
ICAgICBTdHJpbmcgbm9FeHRlbnNpb25zTG9jYWxlID0gcmVtb3ZlVW5pY29kZUxvY2FsZUV4dGVu
c2lvbihyZXF1ZXN0ZWRMb2NhbGUpOwpAQCAtMTYxMCwxMCArMTYwMCwxMCBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgdG9Mb2NhbGVDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4
ZWNTdGF0ZSogc3RhdAogICAgICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihyZXN1bHRMZW5ndGgp
OwogICAgICAgICBjb252ZXJ0Q2FzZShidWZmZXIuZGF0YSgpLCByZXN1bHRMZW5ndGgsIHZpZXcu
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCksIHZpZXdMZW5ndGgsIHV0ZjhMb2NhbGVCdWZmZXIuZGF0
YSgpLCAmZXJyb3IpOwogICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKLSAgICAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgdV9lcnJvck5hbWUoZXJyb3Ip
KTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIHVfZXJyb3JOYW1lKGVycm9yKSk7CiAgICAgICAgIGxvd2VyID0gU3RyaW5nKGJ1ZmZlci5k
YXRhKCksIHJlc3VsdExlbmd0aCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgdV9lcnJvck5hbWUoZXJyb3IpKTsKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgdV9lcnJvck5hbWUoZXJy
b3IpKTsKIAogICAgIC8vIDE4LiBSZXR1cm4gTC4KICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgbG93ZXIpKSk7CkBAIC0xNjMxLDcgKzE2
MjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTG9j
YWxlVXBwZXJDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbAogICAgIC8vIDEzLjEuMyBTdHJpbmcucHJv
dG90eXBlLnRvTG9jYWxlVXBwZXJDYXNlIChbbG9jYWxlc10pCiAgICAgLy8gaHR0cDovL2VjbWEt
aW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL3N0YW5kYXJkcy9FY21hLTQwMi5odG0KICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGludGVycHJldHMgYSBzdHJpbmcgdmFsdWUgYXMgYSBzZXF1ZW5j
ZSBvZiBjb2RlIHBvaW50cywgYXMgZGVzY3JpYmVkIGluIEVTMjAxNSwgNi4xLjQuIFRoaXMgZnVu
Y3Rpb24gYmVoYXZlcyBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyBTdHJpbmcucHJvdG90eXBl
LnRvTG9jYWxlTG93ZXJDYXNlLCBleGNlcHQgdGhhdCBjaGFyYWN0ZXJzIGFyZSBtYXBwZWQgdG8g
dGhlaXIgdXBwZXJjYXNlIGVxdWl2YWxlbnRzIGFzIHNwZWNpZmllZCBpbiB0aGUgVW5pY29kZSBj
aGFyYWN0ZXIgZGF0YWJhc2UuCi0gICAgcmV0dXJuIHRvTG9jYWxlQ2FzZTxDYXNlQ29udmVyc2lv
bk1vZGU6OlVwcGVyPihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7CisgICAgcmV0dXJuIHRvTG9j
YWxlQ2FzZTxDYXNlQ29udmVyc2lvbk1vZGU6OlVwcGVyPihnbG9iYWxPYmplY3QsY2FsbEZyYW1l
KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKIApAQCAtMTY0MCwxNCArMTYzMCwxNCBAQCBl
bnVtIHsKICAgICBUcmltRW5kID0gMgogfTsKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIHRyaW1T
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgaW50IHRyaW1LaW5kKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIHRyaW1TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIGludCB0cmltS2luZCkKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29l
cmNpYmxlKHRoaXNWYWx1ZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSk7Ci0gICAgU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhleGVjKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgIFN0
cmluZyBzdHIgPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgdW5zaWduZWQgbGVmdCA9IDA7CkBA
IC0xNjY4LDIyICsxNjU4LDIyIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIGludCB0cmltS2luCiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBqc1N0cmluZyh2bSwgc3RyLnN1YnN0cmluZ1NoYXJpbmdJbXBs
KGxlZnQsIHJpZ2h0IC0gbGVmdCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNUcmltKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodHJpbVN0cmluZyhjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgVHJpbVN0YXJ0
IHwgVHJpbUVuZCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodHJpbVN0cmluZyhnbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgVHJpbVN0YXJ0IHwgVHJpbUVuZCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1TdGFydChKU0dsb2JhbE9i
amVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNUcmltU3RhcnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodHJpbVN0cmluZyhj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgVHJpbVN0YXJ0KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0cmltU3RyaW5nKGdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBUcmltU3RhcnQpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltRW5kKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1FbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodHJpbVN0
cmluZyhjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgVHJpbUVuZCkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodHJpbVN0cmluZyhnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgVHJpbUVuZCkpOwog
fQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKGRv
dWJsZSB2YWx1ZSwgdW5zaWduZWQgbWluLCB1bnNpZ25lZCBtYXgpCkBAIC0xNzAyLDE4ICsxNjky
LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RhcnRz
V2l0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7CiAKLSAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1dURlN0cmlu
ZyhjYWxsRnJhbWUpOworICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVlLnRv
V1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKLSAgICBib29sIGlzUmVndWxhckV4cHJlc3Npb24gPSBpc1JlZ0V4cCh2bSwgY2FsbEZy
YW1lLCBhMCk7CisgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGds
b2JhbE9iamVjdCwgYTApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGlmIChpc1JlZ3VsYXJFeHByZXNzaW9uKQotICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiQXJndW1lbnQgdG8gU3RyaW5nLnBy
b3RvdHlwZS5zdGFydHNXaXRoIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOworICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQXJndW1lbnQgdG8gU3RyaW5n
LnByb3RvdHlwZS5zdGFydHNXaXRoIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCi0gICAgU3RyaW5n
IHNlYXJjaFN0cmluZyA9IGEwLnRvV1RGU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgU3RyaW5nIHNl
YXJjaFN0cmluZyA9IGEwLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHBvc2l0
aW9uQXJnID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKQEAgLTE3MjIsNyArMTcxMiw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RhcnRzV2l0aChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgICAgIHN0YXJ0ID0gc3RkOjptYXgoMCwgcG9zaXRp
b25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKLSAgICAgICAgc3RhcnQgPSBjbGFtcEFuZFRydW5j
YXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoY2FsbEZyYW1lKSwgMCwgbGVuZ3Ro
KTsKKyAgICAgICAgc3RhcnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFy
Zy50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KSwgMCwgbGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgfQogCkBAIC0xNzM2LDE4
ICsxNzI2LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
RW5kc1dpdGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCFjaGVja09iamVjdENvZXJj
aWJsZSh0aGlzVmFsdWUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJh
bWUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSk7CiAKLSAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1dU
RlN0cmluZyhjYWxsRnJhbWUpOworICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1Zh
bHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKLSAgICBib29sIGlzUmVndWxhckV4cHJlc3Npb24gPSBpc1JlZ0V4cCh2bSwg
Y2FsbEZyYW1lLCBhMCk7CisgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAo
dm0sIGdsb2JhbE9iamVjdCwgYTApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChpc1JlZ3VsYXJFeHByZXNzaW9uKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiQXJndW1lbnQgdG8gU3Ry
aW5nLnByb3RvdHlwZS5lbmRzV2l0aCBjYW5ub3QgYmUgYSBSZWdFeHAiKTsKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0
cmluZy5wcm90b3R5cGUuZW5kc1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKLSAgICBTdHJp
bmcgc2VhcmNoU3RyaW5nID0gYTAudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcg
c2VhcmNoU3RyaW5nID0gYTAudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0cmluZ1RvU2VhcmNoSW4ubGVuZ3RoKCk7CkBAIC0xNzU3LDE0ICsxNzQ3LDE0IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRW5kc1dpdGgoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgaWYgKGVuZFBvc2l0aW9uQXJnLmlzSW50MzIo
KSkKICAgICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5kUG9zaXRpb25BcmcuYXNJbnQzMigpKTsK
ICAgICBlbHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBl
bmQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChlbmRQb3NpdGlvbkFyZy50b0ludGVnZXIo
Y2FsbEZyYW1lKSwgMCwgbGVuZ3RoKTsKKyAgICAgICAgZW5kID0gY2xhbXBBbmRUcnVuY2F0ZVRv
VW5zaWduZWQoZW5kUG9zaXRpb25BcmcudG9JbnRlZ2VyKGdsb2JhbE9iamVjdCksIDAsIGxlbmd0
aCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHN0cmluZ1Rv
U2VhcmNoSW4uaGFzSW5maXhFbmRpbmdBdChzZWFyY2hTdHJpbmcsIHN0ZDo6bWluKGVuZCwgbGVu
Z3RoKSkpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
SW5jbHVkZXNJbXBsKFZNJiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIFN0cmluZyBzdHJpbmdU
b1NlYXJjaEluLCBTdHJpbmcgc2VhcmNoU3RyaW5nLCBKU1ZhbHVlIHBvc2l0aW9uQXJnKQorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIHN0cmluZ0luY2x1ZGVzSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBWTSYgdm0sIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluLCBTdHJpbmcgc2VhcmNo
U3RyaW5nLCBKU1ZhbHVlIHBvc2l0aW9uQXJnKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBzdGFydCA9IDA7CkBAIC0xNzcyLDcgKzE3
NjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdJbmNsdWRl
c0ltcGwoVk0mIHZtLCBFeGVjU3RhdGUqIGNhbGxGcgogICAgICAgICBzdGFydCA9IHN0ZDo6bWF4
KDAsIHBvc2l0aW9uQXJnLmFzSW50MzIoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZ1RvU2VhcmNoSW4ubGVuZ3RoKCk7Ci0gICAgICAgIHN0YXJ0ID0gY2xh
bXBBbmRUcnVuY2F0ZVRvVW5zaWduZWQocG9zaXRpb25BcmcudG9JbnRlZ2VyKGNhbGxGcmFtZSks
IDAsIGxlbmd0aCk7CisgICAgICAgIHN0YXJ0ID0gY2xhbXBBbmRUcnVuY2F0ZVRvVW5zaWduZWQo
cG9zaXRpb25BcmcudG9JbnRlZ2VyKGdsb2JhbE9iamVjdCksIDAsIGxlbmd0aCk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIH0KIApA
QCAtMTc4NiwyMyArMTc3NiwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY0luY2x1ZGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghY2hlY2tP
YmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlz
VmFsdWUudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJ
biA9IHRoaXNWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7Ci0gICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNS
ZWdFeHAodm0sIGNhbGxGcmFtZSwgYTApOworICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9
IGlzUmVnRXhwKHZtLCBnbG9iYWxPYmplY3QsIGEwKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIkFyZ3Vt
ZW50IHRvIFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMgY2Fubm90IGJlIGEgUmVnRXhwIik7Cisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJBcmd1
bWVudCB0byBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwog
Ci0gICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvV1RGU3RyaW5nKGNhbGxGcmFtZSk7Cisg
ICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBK
U1ZhbHVlIHBvc2l0aW9uQXJnID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKTsKIAotICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgc3RyaW5nSW5jbHVkZXNJbXBsKHZtLCBjYWxsRnJhbWUsIHN0
cmluZ1RvU2VhcmNoSW4sIHNlYXJjaFN0cmluZywgcG9zaXRpb25BcmcpKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHN0cmluZ0luY2x1ZGVzSW1wbChnbG9iYWxPYmplY3QsIHZtLCBz
dHJpbmdUb1NlYXJjaEluLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uQXJnKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmluZ0luY2x1ZGVzSW50ZXJuYWwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xODEz
LDE2ICsxODAzLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYnVpbHRpblN0cmlu
Z0luY2x1ZGVzSW50ZXJuYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIEFTU0VSVChjaGVja09iamVjdENv
ZXJjaWJsZSh0aGlzVmFsdWUpKTsKIAotICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhp
c1ZhbHVlLnRvV1RGU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNo
SW4gPSB0aGlzVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIFN0cmluZyBzZWFyY2hTdHJpbmcg
PSBhMC50b1dURlN0cmluZyhjYWxsRnJhbWUpOworICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBh
MC50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgSlNWYWx1ZSBwb3NpdGlvbkFyZyA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMSk7CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHN0cmlu
Z0luY2x1ZGVzSW1wbCh2bSwgY2FsbEZyYW1lLCBzdHJpbmdUb1NlYXJjaEluLCBzZWFyY2hTdHJp
bmcsIHBvc2l0aW9uQXJnKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBzdHJpbmdJ
bmNsdWRlc0ltcGwoZ2xvYmFsT2JqZWN0LCB2bSwgc3RyaW5nVG9TZWFyY2hJbiwgc2VhcmNoU3Ry
aW5nLCBwb3NpdGlvbkFyZykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY0l0ZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtMTgzMiwxMCArMTgyMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0ZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplYwogCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
OwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7Ci0gICAgSlNTdHJpbmcqIHN0
cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhjYWxsRnJhbWUpOworICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICBKU1N0cmluZyogc3RyaW5n
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1N0cmluZ0l0ZXJhdG9yOjpjcmVhdGUoY2FsbEZyYW1lLCBnbG9iYWxPYmplY3QtPnN0cmlu
Z0l0ZXJhdG9yU3RydWN0dXJlKCksIHN0cmluZykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNTdHJpbmdJdGVyYXRvcjo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5z
dHJpbmdJdGVyYXRvclN0cnVjdHVyZSgpLCBzdHJpbmcpKTsKIH0KIAogZW51bSBjbGFzcyBOb3Jt
YWxpemF0aW9uRm9ybSB7IE5GQywgTkZELCBORktDLCBORktEIH07CkBAIC0xODgwLDEyICsxODcw
LDEyIEBAIHN0YXRpYyBjb25zdCBVTm9ybWFsaXplcjIqIG5vcm1hbGl6ZXIoTm9ybWFsaXphdGlv
bkZvcm0gZm9ybSkKICAgICByZXR1cm4gbm9ybWFsaXplcjsKIH0KIAotc3RhdGljIEpTVmFsdWUg
bm9ybWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgTm9ybWFsaXphdGlv
bkZvcm0gZm9ybSkKK3N0YXRpYyBKU1ZhbHVlIG5vcm1hbGl6ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nLCBOb3JtYWxpemF0aW9uRm9ybSBmb3JtKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8g
dmlld1dpdGhTdHJpbmcgPSBzdHJpbmctPnZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyhleGVjKTsK
KyAgICBhdXRvIHZpZXdXaXRoU3RyaW5nID0gc3RyaW5nLT52aWV3V2l0aFVuZGVybHlpbmdTdHJp
bmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgU3RyaW5nVmlldyB2aWV3ID0gdmlld1dpdGhTdHJpbmcudmlldzsKQEAgLTE5MTAsNyAr
MTkwMCw3IEBAIHN0YXRpYyBKU1ZhbHVlIG5vcm1hbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3Ry
aW5nKiBzdHJpbmcsIE5vcm1hbGl6YXRpb25Gb3JtIGZvCiAgICAgVUNoYXIqIGJ1ZmZlcjsKICAg
ICBhdXRvIHJlc3VsdCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobm9ybWFs
aXplZFN0cmluZ0xlbmd0aCwgYnVmZmVyKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKICAgICBzdGF0dXMg
PSBVX1pFUk9fRVJST1I7CiAgICAgdW5vcm0yX25vcm1hbGl6ZShub3JtYWxpemVyLCBjaGFyYWN0
ZXJzLCB2aWV3Lmxlbmd0aCgpLCBidWZmZXIsIG5vcm1hbGl6ZWRTdHJpbmdMZW5ndGgsICZzdGF0
dXMpOwpAQCAtMTkyNiwxNCArMTkxNiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY05vcm1hbGl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQogCiAg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICgh
Y2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhjYWxsRnJhbWUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKIAogICAgIGF1dG8gZm9ybSA9IE5vcm1hbGl6YXRpb25Gb3JtOjpORkM7CiAgICAgSlNW
YWx1ZSBmb3JtVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICghZm9ybVZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgU3RyaW5nIGZvcm1TdHJpbmcgPSBmb3JtVmFs
dWUudG9XVEZTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICAgICAgU3RyaW5nIGZvcm1TdHJpbmcgPSBm
b3JtVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgICAgICBpZiAoZm9ybVN0cmluZyA9PSAiTkZDIikK
QEAgLTE5NDUsMTAgKzE5MzUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNOb3JtYWxpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAgICAgICAg
ZWxzZSBpZiAoZm9ybVN0cmluZyA9PSAiTkZLRCIpCiAgICAgICAgICAgICBmb3JtID0gTm9ybWFs
aXphdGlvbkZvcm06Ok5GS0Q7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiB0aHJv
d1ZNUmFuZ2VFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiYXJndW1lbnQgZG9lcyBub3QgbWF0Y2gg
YW55IG5vcm1hbGl6YXRpb24gZm9ybSJfcyk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVJh
bmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImFyZ3VtZW50IGRvZXMgbm90IG1hdGNoIGFu
eSBub3JtYWxpemF0aW9uIGZvcm0iX3MpOwogICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG5vcm1hbGl6ZShjYWxsRnJhbWUsIHN0cmluZywgZm9y
bSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShub3Jt
YWxpemUoZ2xvYmFsT2JqZWN0LCBzdHJpbmcsIGZvcm0pKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
aAppbmRleCA1YzI2OGFjMWExZDlkOWI2ZDlmNTVhMDZhMDA0ZWMxYTE3ZWU5MDgwLi40NTM2Nzhm
Mjk3ZWYxYWU3NTE1ZmYyMzkxOGVmNzk5NzA3OGQ4ZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaApAQCAtNTAsMTQgKzUwLDkgQEAgY2xh
c3MgU3RyaW5nUHJvdG90eXBlIGZpbmFsIDogcHVibGljIFN0cmluZ09iamVjdCB7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKIH07CiAK
LUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNlR2Vu
ZXJpYygKLSAgICBFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIHNlYXJjaFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlVmFsdWUpOwotCi1KU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZVJlZ0V4cEVt
cHR5U3RyKAotICAgIEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiB0aGlzVmFsdWUsIFJlZ0V4cE9iamVj
dCogc2VhcmNoVmFsdWUpOwotCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5n
UHJvdG9GdW5jUmVwbGFjZVJlZ0V4cFN0cmluZygKLSAgICBFeGVjU3RhdGUqLCBKU1N0cmluZyog
dGhpc1ZhbHVlLCBSZWdFeHBPYmplY3QqIHNlYXJjaFZhbHVlLCBKU1N0cmluZyogcmVwbGFjZVZh
bHVlKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBs
YWNlR2VuZXJpYyhKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgc2VhcmNoVmFsdWUsIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VWYWx1ZSk7CitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVwbGFjZVJlZ0V4
cEVtcHR5U3RyKEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqIHRoaXNWYWx1ZSwgUmVnRXhwT2Jq
ZWN0KiBzZWFyY2hWYWx1ZSk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5n
UHJvdG9GdW5jUmVwbGFjZVJlZ0V4cFN0cmluZyhKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiB0
aGlzVmFsdWUsIFJlZ0V4cE9iamVjdCogc2VhcmNoVmFsdWUsIEpTU3RyaW5nKiByZXBsYWNlVmFs
dWUpOwogCiB2b2lkIHN1YnN0aXR1dGVCYWNrcmVmZXJlbmNlcyhTdHJpbmdCdWlsZGVyJiByZXN1
bHQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQsIFN0cmluZ1ZpZXcgc291cmNlLCBjb25zdCBp
bnQqIG92ZWN0b3IsIFJlZ0V4cCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGVJbmxpbmVzLmgKaW5kZXggMWEzNjBlNDM3OTUxYTIw
ODU4MjA1MWJjYzZjNGFkZGQ3NGVmZGQ0MS4uMjY1OWIwNjViYTVkNjFhYzkzMTkyZTlmMjQwN2Jk
YmU4MTQ2NWYwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZUlubGluZXMuaApAQCAtMzAsNyArMzAsNyBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE51bWJlclR5cGU+Ci1BTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nKiBzdHJpbmdTbGljZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNTdHJpbmcqIHN0cmlu
ZywgaW50MzJfdCBsZW5ndGgsIE51bWJlclR5cGUgc3RhcnQsIE51bWJlclR5cGUgZW5kKQorQUxX
QVlTX0lOTElORSBKU1N0cmluZyogc3RyaW5nU2xpY2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVk0mIHZtLCBKU1N0cmluZyogc3RyaW5nLCBpbnQzMl90IGxlbmd0aCwgTnVtYmVyVHlw
ZSBzdGFydCwgTnVtYmVyVHlwZSBlbmQpCiB7CiAgICAgTnVtYmVyVHlwZSBmcm9tID0gc3RhcnQg
PCAwID8gbGVuZ3RoICsgc3RhcnQgOiBzdGFydDsKICAgICBOdW1iZXJUeXBlIHRvID0gZW5kIDwg
MCA/IGxlbmd0aCArIGVuZCA6IGVuZDsKQEAgLTM5LDcgKzM5LDcgQEAgQUxXQVlTX0lOTElORSBK
U1N0cmluZyogc3RyaW5nU2xpY2UoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTU3RyaW5nKiBz
dHJpbmcsIGkKICAgICAgICAgICAgIGZyb20gPSAwOwogICAgICAgICBpZiAodG8gPiBsZW5ndGgp
CiAgICAgICAgICAgICB0byA9IGxlbmd0aDsKLSAgICAgICAgcmV0dXJuIGpzU3Vic3RyaW5nKHZt
LCBleGVjLCBzdHJpbmcsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRvKSAtIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tKSk7CisgICAgICAgIHJl
dHVybiBqc1N1YnN0cmluZyh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJpbmcsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihmcm9tKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAtIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihmcm9tKSk7CiAgICAgfQogICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKHZtKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1JlY3Vyc2lv
bkNoZWNrZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJz
aW9uQ2hlY2tlci5jcHAKaW5kZXggYjM2ZDI0MWMwYzBkYWM3ODEwMDc2MjhiOTJlYTljODY1Zjgz
YTZhZC4uNDg0OTYyMjNmNWZkZmY1NTc5YWJjNzAyNTJhMGExM2JmZmJiYTRhYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hl
Y2tlci5jcHAKQEAgLTI4LDE0ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogSlNWYWx1ZSBT
dHJpbmdSZWN1cnNpb25DaGVja2VyOjp0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcigpCiB7Ci0gICAg
Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIFZNJiB2bSA9IG1fZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4g
SlNDOjp0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihtX2V4ZWMsIHNjb3BlKTsKKyAgICByZXR1cm4g
SlNDOjp0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihtX2dsb2JhbE9iamVjdCwgc2NvcGUpOwogfQog
CiBKU1ZhbHVlIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXI6OmVtcHR5U3RyaW5nKCkKIHsKLSAgICBy
ZXR1cm4ganNFbXB0eVN0cmluZyhtX2V4ZWMtPnZtKCkpOworICAgIHJldHVybiBqc0VtcHR5U3Ry
aW5nKG1fZ2xvYmFsT2JqZWN0LT52bSgpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oCmluZGV4IDk1ZWMx
MmJlM2NmMzY1YTZkOGM0ZWFjNDE2MDU1YTVlYzc5ZjkzNmQuLmU0YTNjY2NhNTdlM2Q5OTViZGVh
MzBmNTZjMTAwY2JiZWNjZmFiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2VyLmgKQEAgLTI5LDcgKzI5LDcgQEAgY2xh
c3MgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3Ry
aW5nUmVjdXJzaW9uQ2hlY2tlcik7CiAKIHB1YmxpYzoKLSAgICBTdHJpbmdSZWN1cnNpb25DaGVj
a2VyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlzT2JqZWN0KTsKKyAgICBTdHJpbmdSZWN1cnNp
b25DaGVja2VyKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHRoaXNPYmplY3QpOwogICAgIH5T
dHJpbmdSZWN1cnNpb25DaGVja2VyKCk7CiAKICAgICBKU1ZhbHVlIGVhcmx5UmV0dXJuVmFsdWUo
KSBjb25zdDsgLy8gMCBpZiBldmVyeXRoaW5nIGlzIE9LLCB2YWx1ZSB0byByZXR1cm4gZm9yIGZh
aWx1cmUgY2FzZXMKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgU3RyaW5nUmVjdXJzaW9uQ2hlY2tl
ciB7CiAgICAgSlNWYWx1ZSBlbXB0eVN0cmluZygpOwogICAgIEpTVmFsdWUgcGVyZm9ybUNoZWNr
KCk7CiAKLSAgICBFeGVjU3RhdGUqIG1fZXhlYzsKKyAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9i
YWxPYmplY3Q7CiAgICAgSlNPYmplY3QqIG1fdGhpc09iamVjdDsKICAgICBKU1ZhbHVlIG1fZWFy
bHlSZXR1cm5WYWx1ZTsKIApAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBTdHJpbmdSZWN1cnNpb25D
aGVja2VyIHsKIAogaW5saW5lIEpTVmFsdWUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVyZm9y
bUNoZWNrKCkKIHsKLSAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0
Vk0obV9nbG9iYWxPYmplY3QpOwogICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZlVG9SZWN1cnNl
U29mdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKCk7CiAKQEAg
LTY1LDggKzY1LDggQEAgaW5saW5lIEpTVmFsdWUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVy
Zm9ybUNoZWNrKCkKICAgICByZXR1cm4gSlNWYWx1ZSgpOyAvLyBJbmRpY2F0ZSBzdWNjZXNzLgog
fQogCi1pbmxpbmUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0KQotICAgIDogbV9leGVjKGV4
ZWMpCitpbmxpbmUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iamVjdCkKKyAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKICAgICAsIG1fdGhpc09iamVjdCh0aGlz
T2JqZWN0KQogICAgICwgbV9lYXJseVJldHVyblZhbHVlKHBlcmZvcm1DaGVjaygpKQogewpAQCAt
ODIsNyArODIsNyBAQCBpbmxpbmUgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6flN0cmluZ1JlY3Vy
c2lvbkNoZWNrZXIoKQogICAgIGlmIChtX2Vhcmx5UmV0dXJuVmFsdWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShtX2ds
b2JhbE9iamVjdCk7CiAgICAgaWYgKHZtLnN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3Qg
PT0gbV90aGlzT2JqZWN0KQogICAgICAgICB2bS5zdHJpbmdSZWN1cnNpb25DaGVja0ZpcnN0T2Jq
ZWN0ID0gbnVsbHB0cjsKICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKaW5kZXggMjJiMzMxMDRlOTNlOWE4NGIzNzRiNzAwZmNhM2QwMzVmYjkwMmNh
OC4uMzFiYTgxM2MxMGNiZTY3MDJjOTBmYTFlYzY3ZmYwNjhiNzFlMGI1NCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTI5NCw3ICsyOTQsNyBAQCBjbGFz
cyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBKU1ZhbHVlIHByb3RvdHlw
ZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIEpTVmFsdWUgcHJvdG90eXBl
Rm9yTG9va3VwKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBiYXNlKSBjb25zdDsKICAgICBTdHJ1
Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0
KiBiYXNlKSBjb25zdDsKLSAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oRXhlY1N0
YXRlKiwgSlNPYmplY3QqIGJhc2UpIGNvbnN0OworICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbihKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlKSBjb25zdDsKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAg
Ly8gQSBTdHJ1Y3R1cmUgaXMgY2hlYXAgdG8gbWFyayBkdXJpbmcgR0MgaWYgZG9pbmcgc28gd291
bGQgb25seSBhZGQgYSBzbWFsbCBhbmQgYm91bmRlZCBhbW91bnQKQEAgLTQ5Miw3ICs0OTIsNyBA
QCBjbGFzcyBTdHJ1Y3R1cmUgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgcmV0dXJu
IHJhcmVEYXRhKCktPm9iamVjdFRvU3RyaW5nVmFsdWUoKTsKICAgICB9CiAKLSAgICB2b2lkIHNl
dE9iamVjdFRvU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiwgVk0mLCBKU1N0cmluZyogdmFsdWUsIFBy
b3BlcnR5U2xvdCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpOworICAgIHZvaWQgc2V0T2JqZWN0VG9T
dHJpbmdWYWx1ZShKU0dsb2JhbE9iamVjdCosIFZNJiwgSlNTdHJpbmcqIHZhbHVlLCBQcm9wZXJ0
eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0luZm87IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDNhMTQ1NGVmNGJj
NWZkNTk3YWI0NmU2MTFkN2NlOTE1YjNjMGNmYWUuLmE1MWUxYzAwYTVlMTU2NzI3MGUzOTRkYWY2
ZTU4OWVkYTg5Yzc5OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTI5OCw5ICsyOTgsOSBAQCBpbmxpbmUgU3RydWN0dXJlQ2hh
aW4qIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsTwogICAgIHJldHVybiBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpOwogfQogCi1pbmxp
bmUgU3RydWN0dXJlQ2hhaW4qIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW4oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogYmFzZSkgY29uc3QKK2lubGluZSBTdHJ1Y3R1cmVDaGFpbiogU3RydWN0
dXJlOjpwcm90b3R5cGVDaGFpbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogYmFzZSkgY29uc3QKIHsKLSAgICByZXR1cm4gcHJvdG90eXBlQ2hhaW4oZXhlYy0+dm0oKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBiYXNlKTsKKyAgICByZXR1cm4gcHJvdG90eXBl
Q2hhaW4oZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LCBiYXNlKTsKIH0KIAogaW5s
aW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbiwgSlNPYmplY3QqIGJhc2UpIGNv
bnN0CkBAIC0zMDgsNyArMzA4LDcgQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZUNoYWluKiBjYWMKICAgICBpZiAo
IWNhY2hlZFByb3RvdHlwZUNoYWluKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0
KTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHByb3RvdHlwZUZvckxvb2t1cChnbG9iYWxPYmpl
Y3QsIGJhc2UpOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBjYWNoZWRTdHJ1Y3R1cmUg
PSBjYWNoZWRQcm90b3R5cGVDaGFpbi0+aGVhZCgpOwogICAgIHdoaWxlICgqY2FjaGVkU3RydWN0
dXJlICYmICFwcm90b3R5cGUuaXNOdWxsKCkpIHsKQEAgLTQxMSwxMSArNDExLDExIEBAIGlubGlu
ZSBzaXplX3QgbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShzaXplX3QgY3VycmVudENhcGFj
aXR5KQogICAgIHJldHVybiBjdXJyZW50Q2FwYWNpdHkgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7
CiB9CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNTdHJpbmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJp
bmdUYWdTeW1ib2xTbG90KQoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRPYmplY3RUb1N0cmlu
Z1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNTdHJpbmcqIHZh
bHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xTbG90KQogewogICAgIGlmICghaGFz
UmFyZURhdGEoKSkKICAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7Ci0gICAgcmFyZURhdGEo
KS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShleGVjLCB2bSwgdGhpcywgdmFsdWUsIHRvU3RyaW5n
VGFnU3ltYm9sU2xvdCk7CisgICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShn
bG9iYWxPYmplY3QsIHZtLCB0aGlzLCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIH0K
IAogdGVtcGxhdGU8U3RydWN0dXJlOjpTaG91bGRQaW4gc2hvdWxkUGluLCB0eXBlbmFtZSBGdW5j
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFy
ZURhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGEuY3BwCmluZGV4IGU5Yjk0YjQ2YWY5NGYwZTQzOGVmZjAxYmI3NWFmZDEwZDgzNzRmNjcuLjEz
OWM1MzMxY2E5ZDRjODAxZmRlZWYxNWQwNzAxNTk4MmRlNzA0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKQEAgLTkxLDcg
KzkxLDcgQEAgY2xhc3MgT2JqZWN0VG9TdHJpbmdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHQKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSog
bV9zdHJ1Y3R1cmVSYXJlRGF0YTsKIH07CiAKLXZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldE9i
amVjdFRvU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogb3du
U3RydWN0dXJlLCBKU1N0cmluZyogdmFsdWUsIFByb3BlcnR5U2xvdCB0b1N0cmluZ1RhZ1N5bWJv
bFNsb3QpCit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgU3RydWN0dXJlKiBvd25TdHJ1Y3R1
cmUsIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRvU3RyaW5nVGFnU3ltYm9sU2xvdCkK
IHsKICAgICBpZiAobV9naXZlVXBPbk9iamVjdFRvU3RyaW5nVmFsdWVDYWNoZSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTA3LDEyICsxMDcsMTIgQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0
T2JqZWN0VG9TdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXIKIAog
ICAgICAgICAvLyBUaGlzIHdpbGwgbm90IGNyZWF0ZSBhIGNvbmRpdGlvbiBmb3IgdGhlIGN1cnJl
bnQgc3RydWN0dXJlIGJ1dCB0aGF0IGlzIGdvb2QgYmVjYXVzZSB3ZSBrbm93IHRoZSBTeW1ib2wu
dG9TdHJpbmdUYWcKICAgICAgICAgLy8gaXMgbm90IG9uIHRoZSBvd25TdHJ1Y3R1cmUgc28gd2Ug
d2lsbCB0cmFuc2lzaXRpb24gaWYgb25lIGlzIGFkZGVkIGFuZCB0aGlzIGNhY2hlIHdpbGwgbm8g
bG9uZ2VyIGJlIHVzZWQuCi0gICAgICAgIHByZXBhcmVQcm90b3R5cGVDaGFpbkZvckNhY2hpbmco
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBvd25TdHJ1Y3R1cmUsIHRvU3RyaW5nVGFnU3lt
Ym9sU2xvdC5zbG90QmFzZSgpKTsKLSAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXQodm0sIHRoaXMsIGV4ZWMsIG93blN0cnVjdHVy
ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90LnNsb3RCYXNlKCksIHZtLnByb3BlcnR5TmFtZXMtPnRv
U3RyaW5nVGFnU3ltYm9sLmltcGwoKSk7CisgICAgICAgIHByZXBhcmVQcm90b3R5cGVDaGFpbkZv
ckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBvd25TdHJ1Y3R1cmUsIHRvU3RyaW5nVGFnU3ltYm9sU2xv
dC5zbG90QmFzZSgpKTsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25z
Rm9yUHJvdG90eXBlUHJvcGVydHlIaXQodm0sIHRoaXMsIGdsb2JhbE9iamVjdCwgb3duU3RydWN0
dXJlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3Quc2xvdEJhc2UoKSwgdm0ucHJvcGVydHlOYW1lcy0+
dG9TdHJpbmdUYWdTeW1ib2wuaW1wbCgpKTsKICAgICAgICAgQVNTRVJUKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpIHx8IGNvbmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNvbmRpdGlvbigpKTsKICAg
ICB9IGVsc2UgaWYgKHRvU3RyaW5nVGFnU3ltYm9sU2xvdC5pc1Vuc2V0KCkpIHsKLSAgICAgICAg
cHJlcGFyZVByb3RvdHlwZUNoYWluRm9yQ2FjaGluZyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIG93blN0cnVjdHVyZSwgbnVsbHB0cik7Ci0gICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgdGhpcywgZXhlYywgb3duU3RydWN0dXJl
LCB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbC5pbXBsKCkpOworICAgICAgICBw
cmVwYXJlUHJvdG90eXBlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgb3duU3RydWN0dXJl
LCBudWxscHRyKTsKKyAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlNaXNzKHZtLCB0aGlzLCBnbG9iYWxPYmplY3QsIG93blN0cnVjdHVyZSwgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmdUYWdTeW1ib2wuaW1wbCgpKTsKICAgICB9IGVsc2UKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVSYXJlRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlUmFyZURhdGEuaAppbmRleCA5YjQ5ZTEyZDdhZTdkNjFjNjU1ZDFkNGI3NTBkYzgzMjQxNjEy
MjgxLi42NThhMTI2NzRlMWE1OTJkNjJiZDU2Yjg0YjU1MjRlZjU1NzgxMzc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKQEAgLTY2
LDcgKzY2LDcgQEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICB2b2lkIGNsZWFyUHJldmlvdXNJRCgpOwogCiAgICAgSlNTdHJpbmcqIG9iamVjdFRv
U3RyaW5nVmFsdWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE9iamVjdFRvU3RyaW5nVmFsdWUoRXhl
Y1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUsIEpTU3RyaW5nKiB2YWx1ZSwg
UHJvcGVydHlTbG90IHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7CisgICAgdm9pZCBzZXRPYmplY3RU
b1N0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1
cmUsIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7
CiAKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNhY2hlZFByb3BlcnR5TmFtZUVudW1l
cmF0b3IoKSBjb25zdDsKICAgICB2b2lkIHNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3Io
Vk0mLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2wuY3BwCmluZGV4IGM4YmUwM2FmODI1MDE1ZDc0ODUyMDllZTdjZWUxYWI5YTIw
NjMwMDUuLjFkODI4MDQ1MTY3Njg4N2FiYjllOGNmMDM4ZWI3NDhmMzk1MTlmMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sLmNwcApAQCAtNjgsMjggKzY4LDI4IEBAIGlu
bGluZSBTeW1ib2xPYmplY3QqIFN5bWJvbE9iamVjdDo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1KU1ZhbHVlIFN5
bWJvbDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3QKK0pTVmFsdWUgU3ltYm9sOjp0b1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U3ltYm9sKj4o
dGhpcyk7CiB9CiAKLWJvb2wgU3ltYm9sOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiBl
eGVjLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBTeW1ib2w6
OmdldFByaW1pdGl2ZU51bWJlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBkb3VibGUm
IG51bWJlciwgSlNWYWx1ZSYgcmVzdWx0KSBjb25zdAogewogICAgIHJlc3VsdCA9IHRoaXM7Ci0g
ICAgbnVtYmVyID0gdG9OdW1iZXIoZXhlYyk7CisgICAgbnVtYmVyID0gdG9OdW1iZXIoZ2xvYmFs
T2JqZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNPYmplY3QqIFN5bWJvbDo6dG9PYmpl
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAor
SlNPYmplY3QqIFN5bWJvbDo6dG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gU3ltYm9sT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xv
YmFsT2JqZWN0LCBjb25zdF9jYXN0PFN5bWJvbCo+KHRoaXMpKTsKKyAgICByZXR1cm4gU3ltYm9s
T2JqZWN0OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGNvbnN0X2Nh
c3Q8U3ltYm9sKj4odGhpcykpOwogfQogCi1kb3VibGUgU3ltYm9sOjp0b051bWJlcihFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0Citkb3VibGUgU3ltYm9sOjp0b051bWJlcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgIkNhbm5vdCBjb252
ZXJ0IGEgc3ltYm9sIHRvIGEgbnVtYmVyIl9zKTsKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiQ2Fubm90IGNvbnZlcnQgYSBzeW1ib2wgdG8gYSBudW1iZXIiX3MpOwog
ICAgIHJldHVybiAwLjA7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sLmgK
aW5kZXggMGYwZmU2ZmU5MmNjMzA0ZTBjMjk1ZmQ5OGE0NDhmMTVkMWMwODIzMC4uNTMzMGNhYzAy
YmU1OWZiMGUwZmE1MjA0NDVlYzVlY2FiNTcxYmJmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sLmgKQEAgLTUzLDEwICs1MywxMCBAQCBjbGFzcyBTeW1ib2wgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICBTdHJpbmcgZGVzY3JpcHRpdmVTdHJpbmcoKSBjb25zdDsKICAg
ICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKIAotICAgIEpTVmFsdWUgdG9QcmltaXRpdmUo
RXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7Ci0gICAgYm9vbCBnZXRQ
cmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25z
dDsKLSAgICBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBj
b25zdDsKLSAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgSlNWYWx1
ZSB0b1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNv
bnN0OworICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEpTR2xvYmFsT2JqZWN0KiwgZG91Ymxl
JiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKKyAgICBKU09iamVjdCogdG9PYmplY3QoSlNHbG9i
YWxPYmplY3QqKSBjb25zdDsKKyAgICBkb3VibGUgdG9OdW1iZXIoSlNHbG9iYWxPYmplY3QqKSBj
b25zdDsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTeW1ib2xJbXBsKCkKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggZjM3OTA3NzJmMjBhMmU5ZDhmNDYyMjQyNGI5NjIwNmIxMTFhMjk1Zi4uM2E4
OWNmOTQ0ZjlhZDQ3MmU5NWEzODdlZTU2MDJiNTYxMzBmYjY3MCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcApAQCAtODYsNyAr
ODYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsU3ltYm9sKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbAogICAgIGlmIChkZXNjcmlwdGlvbi5pc1Vu
ZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN5bWJvbDo6Y3JlYXRl
KHZtKSk7CiAKLSAgICBTdHJpbmcgc3RyaW5nID0gZGVzY3JpcHRpb24udG9XVEZTdHJpbmcoY2Fs
bEZyYW1lKTsKKyAgICBTdHJpbmcgc3RyaW5nID0gZGVzY3JpcHRpb24udG9XVEZTdHJpbmcoZ2xv
YmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoU3ltYm9sOjpjcmVhdGVXaXRoRGVzY3JpcHRpb24odm0sIHN0
cmluZykpOwogfQpAQCAtOTYsOSArOTYsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN5bWJvbENvbnN0cnVjdG9yRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIEpTU3RyaW5nKiBzdHJpbmdLZXkgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKGNhbGxGcmFtZSk7CisgICAgSlNTdHJpbmcqIHN0cmluZ0tleSA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBTdHJpbmcgc3Ry
aW5nID0gc3RyaW5nS2V5LT52YWx1ZShjYWxsRnJhbWUpOworICAgIFN0cmluZyBzdHJpbmcgPSBz
dHJpbmdLZXktPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN5
bWJvbDo6Y3JlYXRlKHZtLCB2bS5zeW1ib2xSZWdpc3RyeSgpLnN5bWJvbEZvcktleShzdHJpbmcp
KSk7CkBAIC0xMTMsNyArMTEzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1i
b2xDb25zdHJ1Y3RvcktleUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKIAogICAgIEpT
VmFsdWUgc3ltYm9sVmFsdWUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICghc3lt
Ym9sVmFsdWUuaXNTeW1ib2woKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBTeW1ib2xLZXlGb3JUeXBlRXJyb3IpKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBTeW1ib2xLZXlGb3JUeXBlRXJyb3IpKTsKIAogICAgIFByaXZhdGVOYW1lIHByaXZh
dGVOYW1lID0gYXNTeW1ib2woc3ltYm9sVmFsdWUpLT5wcml2YXRlTmFtZSgpOwogICAgIFN5bWJv
bEltcGwmIHVpZCA9IHByaXZhdGVOYW1lLnVpZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbE9iamVjdC5jcHAKaW5kZXggMzA3NmQyZWVlOTdjYTRlY2JjMzQwNDFj
ZDFlZmVlYzc3NzUzYTViOC4uYWMyMzdhY2U4ODQzOGNhNWI5MDZlNzU0OGE1MjMxOWQ1ODhjNTY2
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xPYmplY3QuY3Bw
CkBAIC00NywxMiArNDcsMTIgQEAgdm9pZCBTeW1ib2xPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU3ltYm9sKiBzeW1ib2wpCiAgICAgc2V0SW50ZXJuYWxWYWx1ZSh2bSwgc3ltYm9sKTsK
IH0KIAotU3RyaW5nIFN5bWJvbE9iamVjdDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKikKK1N0cmluZyBTeW1ib2xPYmplY3Q6OnRvU3RyaW5nTmFtZShjb25zdCBKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KikKIHsKICAgICByZXR1cm4gIk9iamVjdCJfczsKIH0KIAot
SlNWYWx1ZSBTeW1ib2xPYmplY3Q6OmRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKQorSlNWYWx1ZSBTeW1ib2xPYmpl
Y3Q6OmRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCos
IFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpCiB7CiAgICAgY29uc3QgU3ltYm9sT2JqZWN0KiBzeW1i
b2xPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgU3ltYm9sT2JqZWN0Kj4ob2JqZWN0KTsKICAgICByZXR1
cm4gc3ltYm9sT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbE9iamVjdC5oCmluZGV4IDgyZGUwOWVlNGYxZjJkZjc5OTI3OTc0YWEz
ZWJjZDAxOTgyODQ3MzEuLjUxYmFmMTE1YTM5YzkxMTI0N2Y4Y2M0OGMxZjZmZDkyMmIzMGM0OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbE9iamVjdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbE9iamVjdC5oCkBAIC01
NCw5ICs1NCw5IEBAIGNsYXNzIFN5bWJvbE9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU1dyYXBwZXJP
YmplY3QgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CisgICAgc3RhdGljIEpT
VmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKTsKIAotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNv
bnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05h
bWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogCiBwcm90ZWN0ZWQ6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN5bWJvbCopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAKaW5k
ZXggMjM0ZWIxODkxOWI5YTk5NDkzMTRmNDQ2MDYxZThjOWNmMDBkNmE3OS4uZjNmNDY1NGI5ZmFi
ZTg4OWQzMjdjZWYyZjVlYjgzZDQ1YjZkZmY0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCkBAIC05NSw3ICs5NSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG9HZXR0ZXJEZXNjcmlwdGlvbihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsCiAKICAgICBTeW1ib2wqIHN5bWJvbCA9IHRyeUV4dHJhY3RTeW1i
b2wodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghc3ltYm9sKQotICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBTeW1ib2xEZXNjcmlw
dGlvblR5cGVFcnJvcik7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIFN5bWJvbERlc2NyaXB0aW9uVHlwZUVycm9yKTsKICAgICBzY29wZS5yZWxl
YXNlKCk7CiAgICAgY29uc3QgYXV0byBkZXNjcmlwdGlvbiA9IHN5bWJvbC0+ZGVzY3JpcHRpb24o
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlc2NyaXB0aW9uLmlzTnVsbCgpID8ganNV
bmRlZmluZWQoKSA6IGpzU3RyaW5nKHZtLCBkZXNjcmlwdGlvbikpOwpAQCAtMTA4LDcgKzEwOCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG9GdW5jVG9TdHJpbmco
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAKICAgICBTeW1ib2wqIHN5bWJvbCA9IHRyeUV4
dHJhY3RTeW1ib2wodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghc3ltYm9s
KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBTeW1i
b2xUb1N0cmluZ1R5cGVFcnJvcik7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIFN5bWJvbFRvU3RyaW5nVHlwZUVycm9yKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0s
IHN5bWJvbC0+ZGVzY3JpcHRpdmVTdHJpbmcoKSkpKTsKIH0KIApAQCAtMTE5LDcgKzExOSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3ltYm9sUHJvdG9GdW5jVmFsdWVPZihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAKICAgICBTeW1ib2wqIHN5bWJvbCA9IHRyeUV4dHJh
Y3RTeW1ib2wodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghc3ltYm9sKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBTeW1ib2xW
YWx1ZU9mVHlwZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgU3ltYm9sVmFsdWVPZlR5cGVFcnJvcik7CiAKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShzeW1ib2wpKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCmluZGV4IGUyMWVl
ZTNiNWQ3OGQ2MWM5ZDVkNWY2NTI0NDk1MDk0ZTFkZTE4NGQuLjViMWJjYmNkYWMwOTc1MmU4YzM3
MjIyZjU5OTEyZjdmZWNmNzBjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcApAQCAtMTA3LDUxICsxMDcsNTEgQEAgSlNWYWx1ZSBv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKEpTVmFsdWUgdGhlRnVuY3Rpb25WYWx1ZSkKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBmYWlsTmV4dE5ld0NvZGVCbG9jayhFeGVj
U3RhdGUqIGV4ZWMpCitKU1ZhbHVlIGZhaWxOZXh0TmV3Q29kZUJsb2NrKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgZXhlYy0+dm0oKS5zZXRGYWlsTmV4dE5ld0NvZGVCbG9j
aygpOworICAgIGdsb2JhbE9iamVjdC0+dm0oKS5zZXRGYWlsTmV4dE5ld0NvZGVCbG9jaygpOwog
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgbnVtYmVyT2ZERkdDb21w
aWxlcyhFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlIG51bWJlck9mREZHQ29tcGlsZXMoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21w
aWxlcyhleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgcmV0dXJuIG51bWJlck9mREZH
Q29tcGlsZXMoY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiB9CiAKLUpTVmFsdWUg
c2V0TmV2ZXJJbmxpbmUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBzZXROZXZlcklubGluZShK
U0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKQorICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBzZXROZXZlcklu
bGluZShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgcmV0dXJuIHNldE5ldmVySW5s
aW5lKGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogfQogCi1KU1ZhbHVlIHNldE5l
dmVyT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBzZXROZXZlck9wdGltaXplKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDEpCisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHNldE5ldmVyT3B0
aW1pemUoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIHJldHVybiBzZXROZXZlck9w
dGltaXplKGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogfQogCi1KU1ZhbHVlIHNl
dENhbm5vdFVzZU9TUkV4aXRGdXp6aW5nKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgc2V0Q2Fu
bm90VXNlT1NSRXhpdEZ1enppbmcoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICBpZiAoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAotICAgIEpTVmFsdWUgdGhlRnVuY3Rpb25WYWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOworICAgIEpTVmFsdWUgdGhlRnVuY3Rpb25WYWx1ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CiAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGdl
dEV4ZWN1dGFibGVGb3JGdW5jdGlvbih0aGVGdW5jdGlvblZhbHVlKSkKICAgICAgICAgZXhlY3V0
YWJsZS0+c2V0Q2FuVXNlT1NSRXhpdEZ1enppbmcoZmFsc2UpOwogCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgb3B0aW1pemVOZXh0SW52b2NhdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCitKU1ZhbHVlIG9wdGltaXplTmV4dEludm9jYXRpb24oSlNHbG9iYWxPYmplY3QqLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
MSkKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gb3B0aW1pemVOZXh0SW52b2NhdGlvbihleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgcmV0dXJuIG9wdGltaXplTmV4dEludm9jYXRp
b24oY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiB9CiAKIC8vIFRoaXMgaXMgYSBo
b29rIGNhbGxlZCBhdCB0aGUgYml0dGVyIGVuZCBvZiBzb21lIG9mIG91ciB0ZXN0cy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmgKaW5kZXggYjAw
NDZkZGUyYjlmOTFhZmU3N2JkNmM1ZDU5MGI3ZDFlMjgwYzBjZS4uMmQwYTJlMGYzYjBjMDI0ZTE1
MWYyN2M1NzQ2MTM4NWRiMjQwOGY5YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmgKQEAgLTQwLDEyICs0MCwxMiBAQCBKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIHNldE5ldmVySW5saW5lKEpTVmFsdWUgZnVuY3Rpb24pOwogSlNfRVhQT1JU
X1BSSVZBVEUgSlNWYWx1ZSBzZXROZXZlck9wdGltaXplKEpTVmFsdWUgZnVuY3Rpb24pOwogSlNf
RVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKEpTVmFsdWUgZnVu
Y3Rpb24pOwogCi1KU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGZhaWxOZXh0TmV3Q29kZUJsb2Nr
KEV4ZWNTdGF0ZSopOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBudW1iZXJPZkRGR0NvbXBp
bGVzKEV4ZWNTdGF0ZSopOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBzZXROZXZlcklubGlu
ZShFeGVjU3RhdGUqKTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgc2V0TmV2ZXJPcHRpbWl6
ZShFeGVjU3RhdGUqKTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgc2V0Q2Fubm90VXNlT1NS
RXhpdEZ1enppbmcoRXhlY1N0YXRlKik7Ci1KU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIG9wdGlt
aXplTmV4dEludm9jYXRpb24oRXhlY1N0YXRlKik7CitKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVl
IGZhaWxOZXh0TmV3Q29kZUJsb2NrKEpTR2xvYmFsT2JqZWN0Kik7CitKU19FWFBPUlRfUFJJVkFU
RSBKU1ZhbHVlIG51bWJlck9mREZHQ29tcGlsZXMoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUq
KTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgc2V0TmV2ZXJJbmxpbmUoSlNHbG9iYWxPYmpl
Y3QqLCBDYWxsRnJhbWUqKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgc2V0TmV2ZXJPcHRp
bWl6ZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOworSlNfRVhQT1JUX1BSSVZBVEUgSlNW
YWx1ZSBzZXRDYW5ub3RVc2VPU1JFeGl0RnV6emluZyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSopOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CiAKIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVk
IG51bWJlck9mRXhjZXB0aW9uRnV6ekNoZWNrcygpOwogSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWdu
ZWQgbnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpDaGVja3MoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKaW5kZXggYTExOTdjMTM2ZjVjNmQy
ZWJjMGFhMGQxYzMwYTFhNTMyYzAzNmY2ZS4uN2U3YjUxN2I1YTIwYWU2YmQzODg1MzZiNjI5YTRl
MGYzMThkZDU1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhy
b3dTY29wZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29w
ZS5jcHAKQEAgLTcwLDI2ICs3MCwyNiBAQCBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiAgICAg
ICAgIHNpbXVsYXRlVGhyb3coKTsKIH0KIAotRXhjZXB0aW9uKiBUaHJvd1Njb3BlOjp0aHJvd0V4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQorRXhjZXB0aW9u
KiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBpZiAobV92bS5leGNlcHRpb24oKSAmJiBt
X3ZtLmV4Y2VwdGlvbigpICE9IGV4Y2VwdGlvbikKICAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRp
b25DaGVja05lZWRJc1NhdGlzZmllZChtX3JlY3Vyc2lvbkRlcHRoLCBtX2xvY2F0aW9uKTsKICAg
ICAKLSAgICByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworICAg
IHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKTsKIH0K
IAotRXhjZXB0aW9uKiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgZXJyb3IpCitFeGNlcHRpb24qIFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZXJyb3IpCiB7CiAgICAgaWYgKCFl
cnJvci5pc0NlbGwoKSB8fCAhanNEeW5hbWljQ2FzdDxFeGNlcHRpb24qPihtX3ZtLCBlcnJvci5h
c0NlbGwoKSkpCiAgICAgICAgIG1fdm0udmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2Zp
ZWQobV9yZWN1cnNpb25EZXB0aCwgbV9sb2NhdGlvbik7CiAgICAgCi0gICAgcmV0dXJuIG1fdm0u
dGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3IpOworICAgIHJldHVybiBtX3ZtLnRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgZXJyb3IpOwogfQogCi1FeGNlcHRpb24qIFRocm93U2NvcGU6OnRo
cm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaikKK0V4Y2VwdGlvbiog
VGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIG9iaikKIHsKICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0
aXNmaWVkKG1fcmVjdXJzaW9uRGVwdGgsIG1fbG9jYXRpb24pOwotICAgIHJldHVybiBtX3ZtLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIG9iaik7CisgICAgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCBvYmopOwogfQogCiB2b2lkIFRocm93U2NvcGU6OnNpbXVsYXRlVGhyb3co
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5oCmluZGV4IGJjNzhi
M2EzMTI2YmU3MmU3MmUzOWI0M2E2YWNlZjg5ZmNiYzc0NjAuLjY5MzIxOTdlODA1OGI5ZDY4Mjll
MTY2NmFhZDAwNzQxNjQzMTYxYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rocm93U2NvcGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
aHJvd1Njb3BlLmgKQEAgLTMxLDcgKzMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENh
bGxGcmFtZTsKIGNsYXNzIEpTT2JqZWN0OwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwog
CiAjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAKQEAgLTQ4LDkgKzQ3
LDkgQEAgY2xhc3MgVGhyb3dTY29wZSA6IHB1YmxpYyBFeGNlcHRpb25TY29wZSB7CiAgICAgVGhy
b3dTY29wZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CiAgICAgVGhyb3dTY29wZShUaHJv
d1Njb3BlJiYpID0gZGVmYXVsdDsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEV4Y2VwdGlvbiog
dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgRXhjZXB0aW9uKik7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgRXhjZXB0aW9uKiB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBFeGNlcHRpb24qIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0aW9uKiB0aHJvd0V4Y2Vw
dGlvbihKU0dsb2JhbE9iamVjdCosIEV4Y2VwdGlvbiopOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IEV4Y2VwdGlvbiogdGhyb3dFeGNlcHRpb24oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBFeGNlcHRpb24qIHRocm93RXhjZXB0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNPYmplY3QqKTsKIAogICAgIHZvaWQgcmVsZWFzZSgpIHsgbV9pc1JlbGVhc2VkID0g
dHJ1ZTsgfQogCkBAIC03OCw5ICs3Nyw5IEBAIGNsYXNzIFRocm93U2NvcGUgOiBwdWJsaWMgRXhj
ZXB0aW9uU2NvcGUgewogICAgIFRocm93U2NvcGUoY29uc3QgVGhyb3dTY29wZSYpID0gZGVsZXRl
OwogICAgIFRocm93U2NvcGUoVGhyb3dTY29wZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICBBTFdBWVNf
SU5MSU5FIEV4Y2VwdGlvbiogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRp
b24qIGV4Y2VwdGlvbikgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRp
b24pOyB9Ci0gICAgQUxXQVlTX0lOTElORSBFeGNlcHRpb24qIHRocm93RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihl
eGVjLCB2YWx1ZSk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvbiogdGhyb3dFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKSB7IHJldHVybiBtX3ZtLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIG9iaik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvbiogdGhyb3dF
eGNlcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uKiBleGNlcHRp
b24pIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24p
OyB9CisgICAgQUxXQVlTX0lOTElORSBFeGNlcHRpb24qIHRocm93RXhjZXB0aW9uKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dF
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEV4Y2Vw
dGlvbiogdGhyb3dFeGNlcHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIG9iaikgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIG9iaik7
IH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNlKCkgeyB9CiB9OwpAQCAtOTAsMTkg
Kzg5LDE5IEBAIGNsYXNzIFRocm93U2NvcGUgOiBwdWJsaWMgRXhjZXB0aW9uU2NvcGUgewogCiAj
ZW5kaWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAKLUFMV0FZU19J
TkxJTkUgRXhjZXB0aW9uKiB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFRocm93U2Nv
cGUmIHNjb3BlLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKK0FMV0FZU19JTkxJTkUgRXhjZXB0aW9u
KiB0aHJvd0V4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUaHJvd1Njb3Bl
JiBzY29wZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7Ci0gICAgcmV0dXJuIHNjb3BlLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHNjb3BlLnRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgZXhjZXB0aW9uKTsKIH0KIAotQUxXQVlTX0lOTElORSBFeGNlcHRp
b24qIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIEpT
VmFsdWUgdmFsdWUpCitBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvbiogdGhyb3dFeGNlcHRpb24oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2NvcGUsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIHNjb3BlLnRocm93RXhjZXB0aW9uKGV4ZWMsIHZhbHVlKTsKKyAg
ICByZXR1cm4gc2NvcGUudGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgRXhjZXB0aW9uKiB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IFRocm93U2NvcGUmIHNjb3BlLCBKU09iamVjdCogb2JqKQorQUxXQVlTX0lOTElORSBFeGNlcHRp
b24qIHRocm93RXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRocm93U2Nv
cGUmIHNjb3BlLCBKU09iamVjdCogb2JqKQogewotICAgIHJldHVybiBzY29wZS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBvYmopOworICAgIHJldHVybiBzY29wZS50aHJvd0V4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIG9iaik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVG9OYXRpdmVGcm9tVmFsdWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1RvTmF0aXZlRnJvbVZhbHVlLmgKaW5kZXggNWU5NzFjYjA4ZTlj
YTUwY2JlMDVjOTQwMjQyYjRmZDc5N2FiYzBkYi4uMjUzMjZkNjBkNmQ1OTRjZTI1Nzk3NjU4NjE0
MTU1OWUwM2ZmOGViYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VG9OYXRpdmVGcm9tVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
b05hdGl2ZUZyb21WYWx1ZS5oCkBAIC0zOCwxMyArMzgsMTMgQEAgdHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSB0b05hdGl2ZUZyb21WYWx1ZShKU1ZhbHVlIHZhbHVlKQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgotdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB0b05hdGl2ZUZyb21WYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHRv
TmF0aXZlRnJvbVZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIEFkYXB0b3I6
OnRvTmF0aXZlRnJvbUludDMyKHZhbHVlLmFzSW50MzIoKSk7CiAgICAgaWYgKHZhbHVlLmlzTnVt
YmVyKCkpCiAgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b05hdGl2ZUZyb21Eb3VibGUodmFsdWUu
YXNEb3VibGUoKSk7Ci0gICAgcmV0dXJuIEFkYXB0b3I6OnRvTmF0aXZlRnJvbURvdWJsZSh2YWx1
ZS50b051bWJlcihleGVjKSk7CisgICAgcmV0dXJuIEFkYXB0b3I6OnRvTmF0aXZlRnJvbURvdWJs
ZSh2YWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVF
cnJvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZUVycm9yLmgKaW5kZXgg
ODVhNzk1ZTNjZjQ3NTRjZTkzODQ2NTJmOTg0OWIwNDI3ZmFkNDAwMy4uMzkzODNhNmFjNDJjZDRj
YzZjOTRlM2Y3NjZhMWIwMmQwYTg4NDIwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZUVycm9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZUVycm9yLmgKQEAgLTMwLDEwICszMCwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
aW5saW5lIGJvb2wgdHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUs
IGJvb2wgdGhyb3dFeGNlcHRpb24sIEFTQ0lJTGl0ZXJhbCBtZXNzYWdlKQoraW5saW5lIGJvb2wg
dHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHNjb3Bl
LCBib29sIHRocm93RXhjZXB0aW9uLCBBU0NJSUxpdGVyYWwgbWVzc2FnZSkKIHsKICAgICBpZiAo
dGhyb3dFeGNlcHRpb24pCi0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBtZXNz
YWdlKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgbWVzc2Fn
ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAppbmRleCBjMjFhY2FlMjE4YzcyNmEw
YWU3ZWUxZWU1ODg4YWE0MWVhMWFiZmUxLi45NjU3YmRjYWFlYmRlMjY4ZDA0OTRkZGMwZTEzODc0
ZTRkMGIxN2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlDb250cm9sbGVyLmgKQEAgLTMzLDE0ICszMywxMyBAQCBjbGFzcyBBcnJheUJ1ZmZl
cjsKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIEpTQXJyYXlCdWZmZXI7CiBjbGFzcyBKU0dsb2Jh
bE9iamVjdDsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIAogY2xhc3MgVHlwZWRBcnJh
eUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUeXBlZEFycmF5Q29udHJvbGxlcj4gewog
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFR5cGVkQXJyYXlDb250cm9sbGVyKCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKICAg
ICAKLSAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBBcnJheUJ1ZmZlciopID0gMDsKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRv
SlMoSlNHbG9iYWxPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlcldyYXBwZXIoSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1
ZmZlciosIEpTQXJyYXlCdWZmZXIqKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQXRvbWljc1dh
aXRBbGxvd2VkT25DdXJyZW50VGhyZWFkKCkgPSAwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAppbmRleCBjYmZkZDIxYjNiNjRhODA3ZDIyZjYyMmVmMGE5YjViZGI1Y2U5NzQ3
Li5jZDgyNWZlZmVmMzkwYWE5MDQyM2I2ODcwYzAxNzNlM2E2MWZjZjM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC04MDEsMTAgKzgwMSw5IEBAIHZvaWQgVk06OmNsZWFy
U291cmNlUHJvdmlkZXJDYWNoZXMoKQogICAgIHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAuY2xlYXIo
KTsKIH0KIAotRXhjZXB0aW9uKiBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBF
eGNlcHRpb24qIGV4Y2VwdGlvbikKK0V4Y2VwdGlvbiogVk06OnRocm93RXhjZXB0aW9uKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewotICAgIEFT
U0VSVChleGVjID09IHRvcENhbGxGcmFtZSB8fCBleGVjLT5pc0dsb2JhbEV4ZWMoKSB8fCBleGVj
ID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbEZyYW1lQXREZWJ1Z2dlckVudHJ5
KCkpOwotICAgIENhbGxGcmFtZSogdGhyb3dPcmlnaW5GcmFtZSA9IGV4ZWMtPmlzR2xvYmFsRXhl
YygpID8gZXhlYyA6IHRvcEpTQ2FsbEZyYW1lKCk7CisgICAgQ2FsbEZyYW1lKiB0aHJvd09yaWdp
bkZyYW1lID0gdG9wSlNDYWxsRnJhbWUoKTsKIAogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhy
b3coKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHRocm93T3JpZ2luRnJhbWUg
PyB0aHJvd09yaWdpbkZyYW1lLT5jb2RlQmxvY2soKSA6IG51bGxwdHI7CkBAIC04MTIsNyArODEx
LDcgQEAgRXhjZXB0aW9uKiBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNl
cHRpb24qIGV4Y2VwdGlvbikKICAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKLSAgICBpbnRlcnBy
ZXRlci0+bm90aWZ5RGVidWdnZXJPZkV4Y2VwdGlvblRvQmVUaHJvd24oKnRoaXMsIHRocm93T3Jp
Z2luRnJhbWUsIGV4Y2VwdGlvbik7CisgICAgaW50ZXJwcmV0ZXItPm5vdGlmeURlYnVnZ2VyT2ZF
eGNlcHRpb25Ub0JlVGhyb3duKCp0aGlzLCBnbG9iYWxPYmplY3QsIHRocm93T3JpZ2luRnJhbWUs
IGV4Y2VwdGlvbik7CiAKICAgICBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKIApAQCAtODIzLDE5
ICs4MjIsMTkgQEAgRXhjZXB0aW9uKiBWTTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVj
LCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKICAgICByZXR1cm4gZXhjZXB0aW9uOwogfQogCi1FeGNl
cHRpb24qIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhyb3du
VmFsdWUpCitFeGNlcHRpb24qIFZNOjp0aHJvd0V4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHRocm93blZhbHVlKQogewogICAgIFZNJiB2bSA9ICp0aGlzOwog
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0ganNEeW5hbWljQ2FzdDxFeGNlcHRpb24qPih2bSwg
dGhyb3duVmFsdWUpOwogICAgIGlmICghZXhjZXB0aW9uKQogICAgICAgICBleGNlcHRpb24gPSBF
eGNlcHRpb246OmNyZWF0ZSgqdGhpcywgdGhyb3duVmFsdWUpOwogCi0gICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgZXhjZXB0aW9uKTsKIH0KIAotRXhjZXB0aW9uKiBWTTo6dGhyb3dFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZXJyb3IpCitFeGNlcHRpb24qIFZNOjp0aHJv
d0V4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZXJyb3Ip
CiB7Ci0gICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIEpTVmFsdWUoZXJyb3IpKTsKKyAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKGVycm9yKSk7CiB9
CiAKIHZvaWQgVk06OnNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lkKiBzcCkKQEAgLTExMTMs
NyArMTExMiw3IEBAIHZvaWQgVk06OmNhbGxQcm9taXNlUmVqZWN0aW9uQ2FsbGJhY2soU3Ryb25n
PEpTUHJvbWlzZT4mIHByb21pc2UpCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAg
ICBhcmdzLmFwcGVuZChwcm9taXNlLmdldCgpKTsKICAgICBhcmdzLmFwcGVuZChwcm9taXNlLT5y
ZXN1bHQoKnRoaXMpKTsKLSAgICBjYWxsKHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCksIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzTnVsbCgpLCBhcmdzKTsKKyAg
ICBjYWxsKHByb21pc2UtPmdsb2JhbE9iamVjdCgpLCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxE
YXRhLCBqc051bGwoKSwgYXJncyk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIApA
QCAtMTE0OCw3ICsxMTQ3LDcgQEAgdm9pZCBWTTo6ZHJhaW5NaWNyb3Rhc2tzKCkKIAogdm9pZCBR
dWV1ZWRUYXNrOjpydW4oKQogewotICAgIG1fbWljcm90YXNrLT5ydW4obV9nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSk7CisgICAgbV9taWNyb3Rhc2stPnJ1bihtX2dsb2JhbE9iamVjdC5nZXQo
KSk7CiB9CiAKIHZvaWQgc2FuaXRpemVTdGFja0ZvclZNKFZNJiB2bSkKQEAgLTEzNjQsMTUgKzEz
NjMsMTEgQEAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBWTTo6ZW1wdHlQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yU2xvdygpCiAgICAgcmV0dXJuIGVudW1lcmF0b3I7CiB9CiAKLUpTR2xvYmFsT2Jq
ZWN0KiBWTTo6dm1FbnRyeUdsb2JhbE9iamVjdChjb25zdCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkg
Y29uc3QKK0pTR2xvYmFsT2JqZWN0KiBWTTo6dm1FbnRyeUdsb2JhbE9iamVjdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewotICAgIGlmIChjYWxsRnJhbWUgJiYgY2FsbEZy
YW1lLT5pc0dsb2JhbEV4ZWMoKSkgewotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5jYWxsZWUo
KS5pc0NlbGwoKSAmJiBjYWxsRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpLT5pc09iamVjdCgpKTsK
LSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZSA9PSBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpKTsKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwotICAgIH0KLSAgICBBU1NFUlQoZW50cnlTY29wZSk7Ci0gICAgcmV0dXJu
IGVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpOworICAgIGlmIChlbnRyeVNjb3BlKQorICAgICAg
ICByZXR1cm4gZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIGdsb2JhbE9i
amVjdDsKIH0KIAogdm9pZCBWTTo6c2V0Q3Jhc2hPblZNQ3JlYXRpb24oYm9vbCBzaG91bGRDcmFz
aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGY4MTNhMmEwYmI1YTllODRjOTZi
MTAzMzA3M2Q2OTQxNmNmY2RkZTQuLmEyNTE2ZTBjYzEzNWQ1MjJjMTEyMzkzMTkwNjZhOTQ4ZTUy
MjVhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTgwLDggKzE4MCw2IEBA
IHN0cnVjdCBIYXNoVGFibGU7CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiBzdHJ1Y3QgVmFsdWVQcm9m
aWxlOwogCi11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7Ci0KIHN0cnVjdCBMb2NhbFRpbWVP
ZmZzZXRDYWNoZSB7CiAgICAgTG9jYWxUaW1lT2Zmc2V0Q2FjaGUoKQogICAgICAgICA6IHN0YXJ0
KDAuMCkKQEAgLTMwOSw3ICszMDcsNyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogICAgIGlubGlu
ZSBDYWxsRnJhbWUqIHRvcEpTQ2FsbEZyYW1lKCkgY29uc3Q7CiAKICAgICAvLyBHbG9iYWwgb2Jq
ZWN0IGluIHdoaWNoIGV4ZWN1dGlvbiBiZWdhbi4KLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU0ds
b2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdChjb25zdCBDYWxsRnJhbWUqKSBjb25zdDsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVj
dChKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgV2Vha1JhbmRvbSYgcmFuZG9tKCkgeyBy
ZXR1cm4gbV9yYW5kb207IH0KICAgICBJbnRlZ3JpdHk6OlJhbmRvbSYgaW50ZWdyaXR5UmFuZG9t
KCkgeyByZXR1cm4gbV9pbnRlZ3JpdHlSYW5kb207IH0KQEAgLTQ5MCwxMiArNDg4LDEyIEBAIGNs
YXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxp
bmtlZExpc3ROb2RlPFZNPiB7CiAKICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENsaWVudERhdGEq
IGNsaWVudERhdGE7Ci0gICAgRW50cnlGcmFtZSogdG9wRW50cnlGcmFtZTsKKyAgICBFbnRyeUZy
YW1lKiB0b3BFbnRyeUZyYW1lIHsgbnVsbHB0ciB9OwogICAgIC8vIE5PVEU6IFdoZW4gdGhyb3dp
bmcgYW4gZXhjZXB0aW9uIHdoaWxlIHJvbGxpbmcgYmFjayB0aGUgY2FsbCBmcmFtZSwgdGhpcyBt
YXkgYmUgZXF1YWwgdG8KICAgICAvLyB0b3BFbnRyeUZyYW1lLgogICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBhIHZvaWQqLCBiZWNhdXNlIGl0IG1pZ2h0IG5vdCBwb2ludCB0byBhIENhbGxG
cmFtZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
NDQxCi0gICAgRXhlY1N0YXRlKiB0b3BDYWxsRnJhbWUgeyBudWxscHRyIH07CisgICAgQ2FsbEZy
YW1lKiB0b3BDYWxsRnJhbWUgeyBudWxscHRyIH07CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
ICAgIFdhc206OkNvbnRleHQgd2FzbUNvbnRleHQ7CiAjZW5kaWYKQEAgLTcyMyw3ICs3MjEsNyBA
QCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4sIHB1YmxpYyBEb3Vi
bHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogCiAgICAgdm9pZCBjbGVhckxhc3RFeGNlcHRpb24oKSB7
IG1fbGFzdEV4Y2VwdGlvbiA9IG51bGxwdHI7IH0KIAotICAgIEV4ZWNTdGF0ZSoqIGFkZHJlc3NP
ZkNhbGxGcmFtZUZvckNhdGNoKCkgeyByZXR1cm4gJmNhbGxGcmFtZUZvckNhdGNoOyB9CisgICAg
Q2FsbEZyYW1lKiogYWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSB7IHJldHVybiAmY2FsbEZy
YW1lRm9yQ2F0Y2g7IH0KIAogICAgIEpTQ2VsbCoqIGFkZHJlc3NPZkV4Y2VwdGlvbigpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKio+KCZtX2V4Y2VwdGlvbik7IH0KIApAQCAtNzg1
LDggKzc4Myw4IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwg
cHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAKICAgICBKU1ZhbHVlIGhvc3RDYWxs
UmV0dXJuVmFsdWU7CiAgICAgdW5zaWduZWQgdmFyYXJnc0xlbmd0aDsKLSAgICBFeGVjU3RhdGUq
IG5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwotICAgIEV4ZWNTdGF0ZSogY2FsbEZyYW1lRm9yQ2F0
Y2g7CisgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWVSZXR1cm5WYWx1ZTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZUZvckNhdGNoOwogICAgIHZvaWQqIHRhcmdldE1hY2hpbmVQQ0ZvclRocm93
OwogICAgIGNvbnN0IEluc3RydWN0aW9uKiB0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3c7CiAg
ICAgdWludDMyX3Qgb3NyRXhpdEluZGV4OwpAQCAtOTIxLDcgKzkxOSw3IEBAIGNsYXNzIFZNIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3RO
b2RlPFZNPiB7CiAKICAgICBWTVRyYXBzJiB0cmFwcygpIHsgcmV0dXJuIG1fdHJhcHM7IH0KIAot
ICAgIHZvaWQgaGFuZGxlVHJhcHMoRXhlY1N0YXRlKiBleGVjLCBWTVRyYXBzOjpNYXNrIG1hc2sg
PSBWTVRyYXBzOjpNYXNrOjphbGxFdmVudFR5cGVzKCkpIHsgbV90cmFwcy5oYW5kbGVUcmFwcyhl
eGVjLCBtYXNrKTsgfQorICAgIHZvaWQgaGFuZGxlVHJhcHMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFZNVHJhcHM6Ok1hc2sgbWFzayA9IFZNVHJh
cHM6Ok1hc2s6OmFsbEV2ZW50VHlwZXMoKSkgeyBtX3RyYXBzLmhhbmRsZVRyYXBzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBtYXNrKTsgfQogCiAgICAgYm9vbCBuZWVkVHJhcEhhbmRsaW5nKCkg
eyByZXR1cm4gbV90cmFwcy5uZWVkVHJhcEhhbmRsaW5nKCk7IH0KICAgICBib29sIG5lZWRUcmFw
SGFuZGxpbmcoVk1UcmFwczo6TWFzayBtYXNrKSB7IHJldHVybiBtX3RyYXBzLm5lZWRUcmFwSGFu
ZGxpbmcobWFzayk7IH0KQEAgLTEwMDgsOSArMTAwNiw5IEBAIGNsYXNzIFZNIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7
CiAgICAgYm9vbCBpc1NhZmVUb1JlY3Vyc2VTb2Z0Q0xvb3AoKSBjb25zdDsKICNlbmRpZiAvLyBF
TkFCTEUoQ19MT09QKQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0aW9uKiB0aHJvd0V4
Y2VwdGlvbihFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBF
eGNlcHRpb24qIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIEV4Y2VwdGlvbiogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBFeGNlcHRpb24qIHRocm93RXhjZXB0aW9uKEpT
R2xvYmFsT2JqZWN0KiwgRXhjZXB0aW9uKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0
aW9uKiB0aHJvd0V4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIEV4Y2VwdGlvbiogdGhyb3dFeGNlcHRpb24oSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCopOwogCiAjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAg
ICAgdm9pZCB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZCh1bnNpZ25lZCBkZXB0
aCwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmNwcAppbmRleCA0NzkxNGMyNjMyMWUzZGUyOTA3OGI4NmVhYzg0NjYyNjBjYWJk
YTNjLi5iM2M0ZmY3ZmViYzhlNGYyY2Y0NzJmYjkxMGNkZTIyYzVmYWJiNjNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtMTY0LDEzICsxNjQsMTMgQEAg
dm9pZCBWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soKQogICAgIGludmFsaWRh
dGVDb2RlQmxvY2tzT25TdGFjayh2bSgpLnRvcENhbGxGcmFtZSk7CiB9CiAKLXZvaWQgVk1UcmFw
czo6aW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lKQor
dm9pZCBWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soQ2FsbEZyYW1lKiB0b3BD
YWxsRnJhbWUpCiB7CiAgICAgYXV0byBjb2RlQmxvY2tTZXRMb2NrZXIgPSBob2xkTG9jayh2bSgp
LmhlYXAuY29kZUJsb2NrU2V0KCkuZ2V0TG9jaygpKTsKICAgICBpbnZhbGlkYXRlQ29kZUJsb2Nr
c09uU3RhY2soY29kZUJsb2NrU2V0TG9ja2VyLCB0b3BDYWxsRnJhbWUpOwogfQogICAgIAotdm9p
ZCBWTVRyYXBzOjppbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soTG9ja2VyPExvY2s+JiwgRXhl
Y1N0YXRlKiB0b3BDYWxsRnJhbWUpCit2b2lkIFZNVHJhcHM6OmludmFsaWRhdGVDb2RlQmxvY2tz
T25TdGFjayhMb2NrZXI8TG9jaz4mLCBDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSkKIHsKICAgICBp
ZiAoIW1fbmVlZFRvSW52YWxpZGF0ZWRDb2RlQmxvY2tzKQogICAgICAgICByZXR1cm47CkBAIC0z
MzQsNyArMzM0LDcgQEAgdm9pZCBWTVRyYXBzOjpmaXJlVHJhcChWTVRyYXBzOjpFdmVudFR5cGUg
ZXZlbnRUeXBlKQogI2VuZGlmCiB9CiAKLXZvaWQgVk1UcmFwczo6aGFuZGxlVHJhcHMoRXhlY1N0
YXRlKiBleGVjLCBWTVRyYXBzOjpNYXNrIG1hc2spCit2b2lkIFZNVHJhcHM6OmhhbmRsZVRyYXBz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWTVRy
YXBzOjpNYXNrIG1hc2spCiB7CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0zNTQsMTcgKzM1NCwxNyBAQCB2b2lk
IFZNVHJhcHM6OmhhbmRsZVRyYXBzKEV4ZWNTdGF0ZSogZXhlYywgVk1UcmFwczo6TWFzayBtYXNr
KQogICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgewogICAgICAgICBjYXNlIE5lZWREZWJ1Z2dl
ckJyZWFrOgogICAgICAgICAgICAgZGF0YUxvZygiVk0gIiwgUmF3UG9pbnRlcigmdm0pLCAiIG9u
IHBpZCAiLCBnZXRDdXJyZW50UHJvY2Vzc0lEKCksICIgcmVjZWl2ZWQgTmVlZERlYnVnZ2VyQnJl
YWsgdHJhcFxuIik7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soZXhl
Yyk7CisgICAgICAgICAgICBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soY2FsbEZyYW1lKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5lZWRX
YXRjaGRvZ0NoZWNrOgogICAgICAgICAgICAgQVNTRVJUKHZtLndhdGNoZG9nKCkpOwotICAgICAg
ICAgICAgaWYgKExJS0VMWSghdm0ud2F0Y2hkb2coKS0+c2hvdWxkVGVybWluYXRlKGV4ZWMpKSkK
KyAgICAgICAgICAgIGlmIChMSUtFTFkoIXZtLndhdGNoZG9nKCktPnNob3VsZFRlcm1pbmF0ZShn
bG9iYWxPYmplY3QpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEZB
TExUSFJPVUdIOwogCiAgICAgICAgIGNhc2UgTmVlZFRlcm1pbmF0aW9uOgotICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24oJnZtKSk7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNj
b3BlLCBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKCZ2bSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmgKaW5kZXggMGVmYjYwYzM3NGVmMWExNzkwM2Y1YzMzZTBhN2FjZTNmYTgyM2E3
ZC4uNTExNjk2YzQ0ZDMxMDllYzM5MDYyZjIyM2I1MmE2ZTFmOGU5NmI0MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuaApAQCAtMzgsNyArMzgsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgVk07Ci11c2luZyBFeGVjU3RhdGUgPSBD
YWxsRnJhbWU7CiAKIGNsYXNzIFZNVHJhcHMgewogICAgIHR5cGVkZWYgdWludDhfdCBCaXRGaWVs
ZDsKQEAgLTEwNiw3ICsxMDUsNyBAQCBjbGFzcyBWTVRyYXBzIHsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmlyZVRyYXAoRXZlbnRUeXBlKTsKIAotICAgIHZvaWQgaGFuZGxlVHJhcHMo
RXhlY1N0YXRlKiwgVk1UcmFwczo6TWFzayk7CisgICAgdm9pZCBoYW5kbGVUcmFwcyhKU0dsb2Jh
bE9iamVjdCosIENhbGxGcmFtZSosIFZNVHJhcHM6Ok1hc2spOwogCiAgICAgdm9pZCB0cnlJbnN0
YWxsVHJhcEJyZWFrcG9pbnRzKHN0cnVjdCBTaWduYWxDb250ZXh0JiwgU3RhY2tCb3VuZHMpOwog
CkBAIC0xMzYsMTQgKzEzNSwxNCBAQCBjbGFzcyBWTVRyYXBzIHsKICAgICBmcmllbmQgY2xhc3Mg
U2lnbmFsU2VuZGVyOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soKTsK
LSAgICB2b2lkIGludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjayhFeGVjU3RhdGUqIHRvcENhbGxG
cmFtZSk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soTG9ja2VyPExvY2s+
JiBjb2RlQmxvY2tTZXRMb2NrZXIsIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lKTsKKyAgICB2b2lk
IGludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFjayhDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSk7Cisg
ICAgdm9pZCBpbnZhbGlkYXRlQ29kZUJsb2Nrc09uU3RhY2soTG9ja2VyPExvY2s+JiBjb2RlQmxv
Y2tTZXRMb2NrZXIsIENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKTsKIAogICAgIHZvaWQgYWRkU2ln
bmFsU2VuZGVyKFNpZ25hbFNlbmRlciopOwogICAgIHZvaWQgcmVtb3ZlU2lnbmFsU2VuZGVyKFNp
Z25hbFNlbmRlciopOwogI2Vsc2UKICAgICB2b2lkIGludmFsaWRhdGVDb2RlQmxvY2tzT25TdGFj
aygpIHsgfQotICAgIHZvaWQgaW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKEV4ZWNTdGF0ZSop
IHsgfQorICAgIHZvaWQgaW52YWxpZGF0ZUNvZGVCbG9ja3NPblN0YWNrKENhbGxGcmFtZSopIHsg
fQogI2VuZGlmCiAKICAgICBCb3g8TG9jaz4gbV9sb2NrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2F0Y2hkb2cuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2F0Y2hkb2cuY3BwCmluZGV4IDYzYTBlNTkzYTc0NDRkZGJjYjExMjIxYzU1OWI2
MTcwZTU3YzJiZGQuLjViYjNlZjY2YzFjOWRhM2Q5MjVjZGZjM2MzZjdlODA3MDhiNGIyZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dhdGNoZG9nLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XYXRjaGRvZy5jcHAKQEAgLTYwLDcgKzYw
LDcgQEAgdm9pZCBXYXRjaGRvZzo6c2V0VGltZUxpbWl0KFNlY29uZHMgbGltaXQsCiAgICAgICAg
IHN0YXJ0VGltZXIobV90aW1lTGltaXQpOwogfQogCi1ib29sIFdhdGNoZG9nOjpzaG91bGRUZXJt
aW5hdGUoRXhlY1N0YXRlKiBleGVjKQorYm9vbCBXYXRjaGRvZzo6c2hvdWxkVGVybWluYXRlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQVNTRVJUKG1fdm0tPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGlmIChNb25vdG9uaWNUaW1lOjpub3coKSA8
IG1fZGVhZGxpbmUpCkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgV2F0Y2hkb2c6OnNob3VsZFRlcm1p
bmF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgLy8gSWYgbV9jYWxsYmFjayBpcyBub3Qgc2V0LCB0
aGVuIHdlIHRlcm1pbmF0ZSBieSBkZWZhdWx0LgogICAgIC8vIEVsc2UsIHdlIGxldCBtX2NhbGxi
YWNrIGRlY2lkZSBpZiB3ZSBzaG91bGQgdGVybWluYXRlIG9yIG5vdC4KICAgICBib29sIG5lZWRz
VGVybWluYXRpb24gPSAhbV9jYWxsYmFjawotICAgICAgICB8fCBtX2NhbGxiYWNrKGV4ZWMsIG1f
Y2FsbGJhY2tEYXRhMSwgbV9jYWxsYmFja0RhdGEyKTsKKyAgICAgICAgfHwgbV9jYWxsYmFjayhn
bG9iYWxPYmplY3QsIG1fY2FsbGJhY2tEYXRhMSwgbV9jYWxsYmFja0RhdGEyKTsKICAgICBpZiAo
bmVlZHNUZXJtaW5hdGlvbikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dhdGNoZG9nLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XYXRjaGRvZy5oCmluZGV4IGQyYWUwNTM2YzIwMWMxNWNhZmQ5ODJlZGVl
MDQzMGZiYzM0ZjdiMGIuLmE5MTQ1ZTE0MTE5YzM3NTYxNDEzOWI4ZTliM2EyNTVmNzE4YmUxMzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dhdGNoZG9nLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2F0Y2hkb2cuaApAQCAtMzUsNyArMzUs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgVk07Ci11c2lu
ZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIGNsYXNzIFdhdGNoZG9nIDogcHVibGljIFdURjo6
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2F0Y2hkb2c+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKQEAgLTQ1LDEwICs0NCwxMCBAQCBjbGFzcyBXYXRjaGRvZyA6IHB1YmxpYyBXVEY6OlRo
cmVhZFNhZmVSZWZDb3VudGVkPFdhdGNoZG9nPiB7CiAgICAgV2F0Y2hkb2coVk0qKTsKICAgICB2
b2lkIHdpbGxEZXN0cm95Vk0oVk0qKTsKIAotICAgIHR5cGVkZWYgYm9vbCAoKlNob3VsZFRlcm1p
bmF0ZUNhbGxiYWNrKShFeGVjU3RhdGUqLCB2b2lkKiBkYXRhMSwgdm9pZCogZGF0YTIpOworICAg
IHR5cGVkZWYgYm9vbCAoKlNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrKShKU0dsb2JhbE9iamVjdCos
IHZvaWQqIGRhdGExLCB2b2lkKiBkYXRhMik7CiAgICAgdm9pZCBzZXRUaW1lTGltaXQoU2Vjb25k
cyBsaW1pdCwgU2hvdWxkVGVybWluYXRlQ2FsbGJhY2sgPSAwLCB2b2lkKiBkYXRhMSA9IDAsIHZv
aWQqIGRhdGEyID0gMCk7CiAKLSAgICBib29sIHNob3VsZFRlcm1pbmF0ZShFeGVjU3RhdGUqKTsK
KyAgICBib29sIHNob3VsZFRlcm1pbmF0ZShKU0dsb2JhbE9iamVjdCopOwogCiAgICAgYm9vbCBo
YXNUaW1lTGltaXQoKTsKICAgICB2b2lkIGVudGVyZWRWTSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZTRlYTk1
OTQyNzZkNjg5ODdmMTNlMzE3ZDI0NzUyNmMzZWIyOTc0Yi4uMjhkMjRmMWJiYTQyYjgzYmU0MWQ4
Y2Q2MmYyNjRmYTljNzA5MmQwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgV2Vha01h
cENvbnN0cnVjdG9yOjpXZWFrTWFwQ29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdl
YWtNYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2Vha01hcChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxs
ZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJXZWFrTWFwIikpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNG
dW5jdGlvblR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2Vha01hcCIpKTsKIH0KIAog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2Vha01hcChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTY1LDMz
ICs2NSwzMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RX
ZWFrTWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBTdHJ1Y3R1cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGds
b2JhbE9iamVjdC0+d2Vha01hcFN0cnVjdHVyZSgpKTsKKyAgICBTdHJ1Y3R1cmUqIHdlYWtNYXBT
dHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwg
Z2xvYmFsT2JqZWN0LT53ZWFrTWFwU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIEpTV2Vha01hcCogd2Vha01hcCA9IEpT
V2Vha01hcDo6Y3JlYXRlKHZtLCB3ZWFrTWFwU3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJh
YmxlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh3ZWFrTWFwKTsKIAot
ICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IHdlYWtNYXAtPkpTT2JqZWN0OjpnZXQoY2FsbEZy
YW1lLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZXQpOworICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9
IHdlYWtNYXAtPkpTT2JqZWN0OjpnZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5z
ZXQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
CiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNhbGxEYXRhOwogICAgIENhbGxUeXBlIGFkZGVy
RnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKHZtLCBhZGRlckZ1bmN0aW9uLCBhZGRlckZ1
bmN0aW9uQ2FsbERhdGEpOwogICAgIGlmIChhZGRlckZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5
cGU6Ok5vbmUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpKTsKIAogICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICBmb3JFYWNoSW5JdGVyYWJsZShjYWxsRnJhbWUsIGl0ZXJhYmxlLCBbJl0oVk0mIHZtLCBF
eGVjU3RhdGUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBuZXh0SXRlbSkgeworICAgIGZvckVhY2hJbkl0
ZXJhYmxlKGdsb2JhbE9iamVjdCwgaXRlcmFibGUsIFsmXShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbmV4dEl0ZW0pIHsKICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpZiAoIW5leHRJdGVtLmlzT2JqZWN0
KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBKU1ZhbHVlIGtleSA9IG5leHRJdGVtLmdl
dChjYWxsRnJhbWUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSk7CisgICAgICAgIEpTVmFsdWUg
a2V5ID0gbmV4dEl0ZW0uZ2V0KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDAp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbmV4dEl0ZW0uZ2V0KGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KDEpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5leHRJdGVtLmdldChnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigxKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
dW1lbnRzOwpAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RXZWFrTWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICAgICAgQVNTRVJUKCFhcmd1bWVudHMuaGFz
T3ZlcmZsb3dlZCgpKTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBjYWxsKGNh
bGxGcmFtZSwgYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNhbGxUeXBlLCBhZGRlckZ1bmN0
aW9uQ2FsbERhdGEsIHdlYWtNYXAsIGFyZ3VtZW50cyk7CisgICAgICAgIGNhbGwoZ2xvYmFsT2Jq
ZWN0LCBhZGRlckZ1bmN0aW9uLCBhZGRlckZ1bmN0aW9uQ2FsbFR5cGUsIGFkZGVyRnVuY3Rpb25D
YWxsRGF0YSwgd2Vha01hcCwgYXJndW1lbnRzKTsKICAgICB9KTsKIAogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUod2Vha01hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtNYXBQcm90b3R5cGUuY3BwCmluZGV4IGNkNGM1OWFiOTJiZmRlNjQ2MWQ2NWIxNmQy
ZTViYTA2ZjlmN2NjYzAuLjM1ZGM0MmIyYTljODM4MGMxYzZlZjBhNGJlMTIwNmJmNjQ0OWJkZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5
cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBQcm90b3R5
cGUuY3BwCkBAIC01MSwxMyArNTEsMTMgQEAgdm9pZCBXZWFrTWFwUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3lt
Ym9sLCBqc1N0cmluZyh2bSwgIldlYWtNYXAiKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0
aWMgSlNXZWFrTWFwKiBnZXRXZWFrTWFwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQorQUxXQVlTX0lOTElORSBzdGF0aWMg
SlNXZWFrTWFwKiBnZXRXZWFrTWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWSghdmFs
dWUuaXNPYmplY3QoKSkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29w
ZSwgIkNhbGxlZCBXZWFrTWFwIGZ1bmN0aW9uIG9uIG5vbi1vYmplY3QiX3MpOworICAgICAgICB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2FsbGVkIFdlYWtNYXAgZnVuY3Rp
b24gb24gbm9uLW9iamVjdCJfcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApA
QCAtNjUsMTMgKzY1LDEzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTV2Vha01hcCogZ2V0V2Vh
a01hcChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxPYmplY3QqCiAgICAgaWYgKExJS0VM
WShtYXApKQogICAgICAgICByZXR1cm4gbWFwOwogCi0gICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZy
YW1lLCBzY29wZSwgIkNhbGxlZCBXZWFrTWFwIGZ1bmN0aW9uIG9uIGEgbm9uLVdlYWtNYXAgb2Jq
ZWN0Il9zKTsKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2FsbGVk
IFdlYWtNYXAgZnVuY3Rpb24gb24gYSBub24tV2Vha01hcCBvYmplY3QiX3MpOwogICAgIHJldHVy
biBudWxscHRyOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dl
YWtNYXBEZWxldGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgYXV0byogbWFwID0gZ2V0V2Vha01hcChjYWxsRnJhbWUsIGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgYXV0byogbWFwID0gZ2V0V2Vha01h
cChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKQEAgLTgwLDcgKzgwLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwRGVsZXRlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1
bmNXZWFrTWFwR2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewotICAgIGF1dG8qIG1hcCA9IGdldFdlYWtNYXAoY2FsbEZyYW1lLCBnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGF1dG8qIG1hcCA9IGdldFdlYWtN
YXAoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIW1hcCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1Zh
bHVlIGtleSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CkBAIC05MSw3ICs5MSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha01hcEdldChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9G
dW5jV2Vha01hcEhhcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBhdXRvKiBtYXAgPSBnZXRXZWFrTWFwKGNhbGxGcmFtZSwgZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBhdXRvKiBtYXAgPSBnZXRXZWFr
TWFwKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXAp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNW
YWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwpAQCAtMTAzLDEzICsxMDMsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwU2V0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgYXV0byog
bWFwID0gZ2V0V2Vha01hcChjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7CisgICAgYXV0byogbWFwID0gZ2V0V2Vha01hcChnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRp
b24oKSA9PSAhbWFwKTsKICAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIGtleSA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CiAgICAgaWYgKCFrZXkuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiQXR0ZW1wdGVkIHRvIHNl
dCBhIG5vbi1vYmplY3Qga2V5IGluIGEgV2Vha01hcCJfcykpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJBdHRlbXB0
ZWQgdG8gc2V0IGEgbm9uLW9iamVjdCBrZXkgaW4gYSBXZWFrTWFwIl9zKSk7CiAgICAgbWFwLT5z
ZXQodm0sIGFzT2JqZWN0KGtleSksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVmQ29uc3RydWN0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha09iamVjdFJlZkNvbnN0cnVj
dG9yLmNwcAppbmRleCBlOGIyNTM4MGNkYmQxYzYwZGZhMjdmOTA0MmQ0Y2NjZjFiYmQxNTlmLi4y
ZjNjYjY2OTc2YzE3MTViNjZkMDFkNWYwYTkwOThiNDMyMjg4MzdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVmQ29uc3RydWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtPYmplY3RSZWZDb25zdHJ1Y3Rv
ci5jcHAKQEAgLTUzLDExICs1MywxMSBAQCBXZWFrT2JqZWN0UmVmQ29uc3RydWN0b3I6OldlYWtP
YmplY3RSZWZDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogfQog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2Vha1JlZihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWFrUmVmKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSopCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25U
eXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIldlYWtSZWYiKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWFrUmVmIikpOwogfQogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXZWFrUmVmKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNjYsOSArNjYsOSBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXZWFrUmVmKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplYwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQotICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiRmlyc3QgYXJn
dW1lbnQgdG8gV2Vha1JlZiBzaG91bGQgYmUgYW4gb2JqZWN0Il9zKTsKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkZpcnN0IGFyZ3VtZW50IHRv
IFdlYWtSZWYgc2hvdWxkIGJlIGFuIG9iamVjdCJfcyk7CiAKLSAgICBTdHJ1Y3R1cmUqIFdlYWtP
YmplY3RSZWZTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2Vh
a09iamVjdFJlZlN0cnVjdHVyZSgpKTsKKyAgICBTdHJ1Y3R1cmUqIFdlYWtPYmplY3RSZWZTdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+anNDYWxsZWUoKSwgY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSwgZ2xv
YmFsT2JqZWN0LT53ZWFrT2JqZWN0UmVmU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2Vha09iamVjdFJlZjo6Y3JlYXRlKHZtLCBXZWFrT2Jq
ZWN0UmVmU3RydWN0dXJlLCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldE9iamVj
dCgpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a09iamVjdFJlZlByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrT2JqZWN0UmVmUHJvdG90eXBlLmNwcAppbmRleCA4OTljZDNhODVhMWUyNjUzNTdiOTJmMDYy
NDllZWZkMjIyYTllOWMyLi4yOWYyMjNlNDU5MjUwNDM0NDQ4NjA2YzliODRiNGNjYzA0MzU5YmVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2JqZWN0UmVm
UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrT2Jq
ZWN0UmVmUHJvdG90eXBlLmNwcApAQCAtNDcsMTMgKzQ3LDEzIEBAIHZvaWQgV2Vha09iamVjdFJl
ZlByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIldlYWtSZWYiKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAot
QUxXQVlTX0lOTElORSBzdGF0aWMgSlNXZWFrT2JqZWN0UmVmKiBnZXRXZWFrUmVmKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNXZWFrT2JqZWN0UmVmKiBnZXRXZWFrUmVmKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIGlmIChVTkxJS0VMWSghdmFsdWUuaXNPYmplY3QoKSkpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIkNhbGxlZCBXZWFrUmVmIGZ1bmN0aW9u
IG9uIG5vbi1vYmplY3QiX3MpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiQ2FsbGVkIFdlYWtSZWYgZnVuY3Rpb24gb24gbm9uLW9iamVjdCJfcyk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtNjEsMTQgKzYxLDE0IEBAIEFMV0FZU19J
TkxJTkUgc3RhdGljIEpTV2Vha09iamVjdFJlZiogZ2V0V2Vha1JlZihDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNHbG9iYWxPCiAgICAgaWYgKExJS0VMWShyZWYpKQogICAgICAgICByZXR1cm4gcmVm
OwogCi0gICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIkNhbGxlZCBXZWFrUmVm
IGZ1bmN0aW9uIG9uIGEgbm9uLVdlYWtSZWYgb2JqZWN0Il9zKTsKKyAgICB0aHJvd1R5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2FsbGVkIFdlYWtSZWYgZnVuY3Rpb24gb24gYSBub24t
V2Vha1JlZiBvYmplY3QiX3MpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtSZWZEZXJlZihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byogcmVmID0gZ2V0V2Vha1JlZihjYWxsRnJhbWUsIGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgYXV0byogcmVmID0gZ2V0
V2Vha1JlZihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICgh
cmVmKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9y
LmNwcAppbmRleCAxN2RlYjg4NTU3YzJhMzZlODU5Y2RlNGUwODNhNTBjN2U5ZGMyMGIwLi40OTRj
ZDMyNjA4ZjViNDI4OGU3YzljMjY1ZjgzMWYwMzg5YjgwNDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTUzLDEx
ICs1MywxMSBAQCBXZWFrU2V0Q29uc3RydWN0b3I6OldlYWtTZXRDb25zdHJ1Y3RvcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsV2Vha1NldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxXZWFrU2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3Ry
dWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwg
IldlYWtTZXQiKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9y
Q2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJX
ZWFrU2V0IikpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RXZWFrU2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQpAQCAtNjUsMjcgKzY1LDI3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdFdlYWtTZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIFN0cnVjdHVyZSogd2Vha1NldFN0cnVjdHVyZSA9IEludGVy
bmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrU2V0U3RydWN0dXJlKCkpOworICAgIFN0
cnVjdHVyZSogd2Vha1NldFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLCBjYWxsRnJh
bWUtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgSlNXZWFr
U2V0KiB3ZWFrU2V0ID0gSlNXZWFrU2V0OjpjcmVhdGUodm0sIHdlYWtTZXRTdHJ1Y3R1cmUpOwog
ICAgIEpTVmFsdWUgaXRlcmFibGUgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmIChp
dGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHdlYWtTZXQpOwogCi0gICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vha1NldC0+SlNP
YmplY3Q6OmdldChjYWxsRnJhbWUsIHZtLnByb3BlcnR5TmFtZXMtPmFkZCk7CisgICAgSlNWYWx1
ZSBhZGRlckZ1bmN0aW9uID0gd2Vha1NldC0+SlNPYmplY3Q6OmdldChnbG9iYWxPYmplY3QsIHZt
LnByb3BlcnR5TmFtZXMtPmFkZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgYWRkZXJGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIGFkZGVy
RnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgaWYgKGFkZGVyRnVuY3Rpb25D
YWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSkpOwogCiAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgIGZvckVhY2hJbkl0ZXJhYmxlKGNhbGxGcmFtZSwgaXRlcmFi
bGUsIFsmXShWTSYsIEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIG5leHRWYWx1ZSkgewor
ICAgIGZvckVhY2hJbkl0ZXJhYmxlKGdsb2JhbE9iamVjdCwgaXRlcmFibGUsIFsmXShWTSYsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbmV4dFZhbHVlKSB7CiAgICAgICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZChuZXh0VmFsdWUpOwogICAgICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkp
OwotICAgICAgICBjYWxsKGNhbGxGcmFtZSwgYWRkZXJGdW5jdGlvbiwgYWRkZXJGdW5jdGlvbkNh
bGxUeXBlLCBhZGRlckZ1bmN0aW9uQ2FsbERhdGEsIHdlYWtTZXQsIGFyZ3VtZW50cyk7CisgICAg
ICAgIGNhbGwoZ2xvYmFsT2JqZWN0LCBhZGRlckZ1bmN0aW9uLCBhZGRlckZ1bmN0aW9uQ2FsbFR5
cGUsIGFkZGVyRnVuY3Rpb25DYWxsRGF0YSwgd2Vha1NldCwgYXJndW1lbnRzKTsKICAgICB9KTsK
IAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha1NldCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwCmluZGV4IDBmNzM1ZGIw
ZmQ2MTczZjQyN2RhYzVjYWMwNWMyYjIwMWFiYjI0YzIuLjU2YTIyYjAyMjBmNmE4MjM1YjAwODll
Nzk1ZGUxZjI5MTg4MTNjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtTZXRQcm90b3R5cGUuY3BwCkBAIC00OSwxMyArNDksMTMgQEAgdm9pZCBXZWFrU2V0
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZyh2bSwgIldlYWtTZXQiKSwgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKIH0KIAot
QUxXQVlTX0lOTElORSBzdGF0aWMgSlNXZWFrU2V0KiBnZXRXZWFrU2V0KENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQorQUxX
QVlTX0lOTElORSBzdGF0aWMgSlNXZWFrU2V0KiBnZXRXZWFrU2V0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IGlmIChVTkxJS0VMWSghdmFsdWUuaXNPYmplY3QoKSkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoY2FsbEZyYW1lLCBzY29wZSwgIkNhbGxlZCBXZWFrU2V0IGZ1bmN0aW9uIG9uIG5vbi1vYmpl
Y3QiX3MpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fs
bGVkIFdlYWtTZXQgZnVuY3Rpb24gb24gbm9uLW9iamVjdCJfcyk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIApAQCAtNjMsMTMgKzYzLDEzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEpTV2Vha1NldCogZ2V0V2Vha1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxPYmpl
Y3QqCiAgICAgaWYgKExJS0VMWShzZXQpKQogICAgICAgICByZXR1cm4gc2V0OwogCi0gICAgdGhy
b3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIkNhbGxlZCBXZWFrU2V0IGZ1bmN0aW9uIG9u
IGEgbm9uLVdlYWtTZXQgb2JqZWN0Il9zKTsKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiQ2FsbGVkIFdlYWtTZXQgZnVuY3Rpb24gb24gYSBub24tV2Vha1NldCBvYmpl
Y3QiX3MpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHByb3RvRnVuY1dlYWtTZXREZWxldGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgYXV0byogc2V0ID0gZ2V0V2Vha1NldChj
YWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgYXV0
byogc2V0ID0gZ2V0V2Vha1NldChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OwogICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKQEAgLTc4
LDcgKzc4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrU2V0
RGVsZXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrU2V0SGFzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGF1dG8qIHNldCA9IGdldFdlYWtTZXQo
Y2FsbEZyYW1lLCBnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGF1
dG8qIHNldCA9IGdldFdlYWtTZXQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKICAgICBpZiAoIXNldCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBKU1ZhbHVlIGtleSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CkBAIC05
MCwxMyArOTAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFr
U2V0QWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEMKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgYXV0byogc2V0ID0gZ2V0V2Vha1NldChjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgYXV0byogc2V0ID0gZ2V0V2Vha1NldChnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIEVYQ0VQVElPTl9BU1NFUlQo
ISFzY29wZS5leGNlcHRpb24oKSA9PSAhc2V0KTsKICAgICBpZiAoIXNldCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIGtleSA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFrZXkuaXNPYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAi
QXR0ZW1wdGVkIHRvIGFkZCBhIG5vbi1vYmplY3Qga2V5IHRvIGEgV2Vha1NldCJfcykpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJBdHRlbXB0ZWQgdG8gYWRkIGEgbm9uLW9iamVjdCBrZXkgdG8gYSBXZWFrU2V0Il9z
KSk7CiAgICAgc2V0LT5hZGQodm0sIGFzT2JqZWN0KGtleSkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKaW5kZXggMTUzM2IwYjk0MWZlMDc4Nzg3ZWVkMDU4ZDdj
NTg1MWVmOGZiOTIzMC4uZWViY2ExNTBhZTRiYzEyYjA2NzJkMjQzMDJmOGJkZWFkM2FlNzg5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcApAQCAtOTUsMTgg
Kzk1LDE3IEBAIGNsYXNzIEpTRG9sbGFyVk1DYWxsRnJhbWUgOiBwdWJsaWMgSlNEZXN0cnVjdGli
bGVPYmplY3QgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTRG9sbGFyVk1DYWxsRnJhbWUqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHJlcXVlc3RlZEZyYW1lSW5kZXgpCisgICAgc3RhdGlj
IEpTRG9sbGFyVk1DYWxsRnJhbWUqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgcmVxdWVzdGVkRnJhbWVJbmRleCkKICAg
ICB7CiAgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1
cmUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpOwogICAgICAgICBKU0RvbGxhclZNQ2FsbEZy
YW1lKiBmcmFtZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRG9sbGFyVk1DYWxsRnJh
bWU+KHZtLmhlYXApKSBKU0RvbGxhclZNQ2FsbEZyYW1lKHZtLCBzdHJ1Y3R1cmUpOwotICAgICAg
ICBmcmFtZS0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWMsIHJlcXVlc3RlZEZyYW1lSW5kZXgpOwor
ICAgICAgICBmcmFtZS0+ZmluaXNoQ3JlYXRpb24odm0sIGNhbGxGcmFtZSwgcmVxdWVzdGVkRnJh
bWVJbmRleCk7CiAgICAgICAgIHJldHVybiBmcmFtZTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgcmVxdWVzdGVkRnJh
bWVJbmRleCkKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHVuc2lnbmVkIHJlcXVlc3RlZEZyYW1lSW5kZXgpCiAgICAgewogICAgICAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CkBAIC0xMTgsNyArMTE3LDcgQEAgY2xhc3MgSlNEb2xsYXJWTUNhbGxGcmFtZSA6IHB1
YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAKICAgICAgICAgdW5zaWduZWQgZnJhbWVJbmRl
eCA9IDA7CiAgICAgICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBmcmFtZS0+aXRl
cmF0ZShbJl0gKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgeworICAgICAgICBjYWxsRnJhbWUtPml0
ZXJhdGUoWyZdIChTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIHsKICAgICAgICAgICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAKICAgICAgICAgICAgIGlmIChmcmFtZUluZGV4Kysg
IT0gcmVxdWVzdGVkRnJhbWVJbmRleCkKQEAgLTM1NiwyMCArMzU1LDIwIEBAIGNsYXNzIEltcHVy
ZUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgICAgIG1fZGVsZWdh
dGUuc2V0KHZtLCB0aGlzLCBkZWxlZ2F0ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIG5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIG5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKICAgICB7CiAgICAgICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBJbXB1cmVHZXR0ZXIq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4ob2JqZWN0KTsKICAgICAgICAgCiAg
ICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKSB7Ci0gICAgICAgICAgICBpZiAodGhp
c09iamVjdC0+bV9kZWxlZ2F0ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG5hbWUsIHNsb3QpKQor
ICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fZGVsZWdhdGUtPmdldFByb3BlcnR5U2xvdChn
bG9iYWxPYmplY3QsIG5hbWUsIHNsb3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICB9
CiAKLSAgICAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMs
IG5hbWUsIHNsb3QpOworICAgICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KG9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBuYW1lLCBzbG90KTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC00
MTYsMTAgKzQxNSwxMCBAQCBjbGFzcyBDdXN0b21HZXR0ZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiAgICAgICAgIHJldHVybiBnZXR0ZXI7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiAgICAgewogICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgICAgIEN1c3RvbUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxDdXN0b21H
ZXR0ZXIqPihvYmplY3QpOwogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IFByb3BlcnR5TmFt
ZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VzdG9tR2V0dGVyIikpKSB7CiAgICAgICAg
ICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSwgdGhpc09iamVjdC0+Y3VzdG9tR2V0dGVyKTsKQEAgLTQzMSwzOSAr
NDMwLDM5IEBAIGNsYXNzIEN1c3RvbUdldHRlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBy
ZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjdXN0b21HZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKKyAg
ICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY3VzdG9tR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogICAgIHsK
ICAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgQ3Vz
dG9tR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxDdXN0b21HZXR0ZXIqPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgICAgICBpZiAoIXRoaXNPYmplY3QpCi0g
ICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAg
IGJvb2wgc2hvdWxkVGhyb3cgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgUHJvcGVydHlOYW1lKElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaG91bGRUaHJvdyIpKSkudG9Cb29sZWFuKGV4ZWMp
OworICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7CisgICAgICAgIGJvb2wgc2hvdWxkVGhyb3cgPSB0aGlzT2JqZWN0LT5nZXQoZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNob3VsZFRocm93
IikpKS50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAg
ICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDEwMCkpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY3VzdG9tR2V0dGVyQWNlc3NvcihFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorICAgIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBjdXN0b21HZXR0ZXJBY2Vzc29yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogICAgIHsKICAg
ICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIAogICAgICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgICAgICBpZiAoIXRoaXNPYmplY3QpCi0gICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIGJv
b2wgc2hvdWxkVGhyb3cgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgUHJvcGVydHlOYW1lKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJzaG91bGRUaHJvdyIpKSkudG9Cb29sZWFuKGV4ZWMpOwor
ICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7
CisgICAgICAgIGJvb2wgc2hvdWxkVGhyb3cgPSB0aGlzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNob3VsZFRocm93Iikp
KS50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDEwMCkpOwogICAgIH0KIH07CkBAIC00NzMs
MTQgKzQ3MiwxMyBAQCBjbGFzcyBSdW50aW1lQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAg
dHlwZWRlZiBKU0FycmF5IEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXM7CiAKLSAgICBzdGF0aWMgUnVu
dGltZUFycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorICAgIHN0YXRpYyBSdW50aW1lQXJy
YXkqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKICAgICB7CiAgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0g
ICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVh
dGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgY3JlYXRlUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpKTsKLSAgICAgICAgUnVudGltZUFycmF5KiBydW50aW1lQXJyYXkgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxSdW50aW1lQXJyYXk+KHZtLmhlYXApKSBSdW50aW1lQXJyYXkoZXhl
Yywgc3RydWN0dXJlKTsKLSAgICAgICAgcnVudGltZUFycmF5LT5maW5pc2hDcmVhdGlvbihleGVj
KTsKKyAgICAgICAgUnVudGltZUFycmF5KiBydW50aW1lQXJyYXkgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxSdW50aW1lQXJyYXk+KHZtLmhlYXApKSBSdW50aW1lQXJyYXkoZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBydW50aW1lQXJyYXktPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lKTsKICAgICAgICAgdm0uaGVhcC5hZGRGaW5hbGl6ZXIocnVu
dGltZUFycmF5LCBkZXN0cm95KTsKICAgICAgICAgcmV0dXJuIHJ1bnRpbWVBcnJheTsKICAgICB9
CkBAIC00OTUsMTAgKzQ5MywxMCBAQCBjbGFzcyBSdW50aW1lQXJyYXkgOiBwdWJsaWMgSlNBcnJh
eSB7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNl
OwogCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAgICAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOwotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFJ1bnRpbWVBcnJheSogdGhpc09i
amVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwogICAgICAgICBpZiAocHJvcGVy
dHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgewogICAgICAgICAgICAgc2xvdC5z
ZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxl
dGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0sIHRoaXNPYmplY3QtPmxlbmd0aEdldHRlcik7CkBAIC01MTEsMTAgKzUwOSwxMCBAQCBj
bGFzcyBSdW50aW1lQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAg
ICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICBSdW50aW1lQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKQEAgLTUyMywx
NSArNTIxLDE1IEBAIGNsYXNzIFJ1bnRpbWVBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90
KTsKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRo
aXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogICAgIH0KIAotICAgIHN0YXRp
YyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90JikKKyAgICBzdGF0aWMgTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90JikKICAgICB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpCisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkKICAgICB7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtNTUzLDMzICs1
NTEsMzMgQEAgY2xhc3MgUnVudGltZUFycmF5IDogcHVibGljIEpTQXJyYXkgewogICAgIH0KIAog
cHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjKQorICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiAgICAgewogICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOwotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKIAotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgaSsrKQotICAgICAgICAgICAgbV92
ZWN0b3IuYXBwZW5kKGV4ZWMtPmFyZ3VtZW50KGkpLnRvSW50MzIoZXhlYykpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyBpKyspCisg
ICAgICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoY2FsbEZyYW1lLT5hcmd1bWVudChpKS50b0ludDMy
KGdsb2JhbE9iamVjdCkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBSdW50aW1lQXJyYXkoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBKU0FycmF5KGV4
ZWMtPnZtKCksIHN0cnVjdHVyZSwgMCkKKyAgICBSdW50aW1lQXJyYXkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNBcnJheShn
bG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgMCkKICAgICB7CiAgICAgICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgfQogCi0gICAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBsZW5ndGhHZXR0ZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOwotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PFJ1bnRpbWVBcnJheSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgICAg
IGlmICghdGhpc09iamVjdCkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRo
aXNPYmplY3QtPmdldExlbmd0aCgpKSk7CiAgICAgfQogCkBAIC01OTEsMTAgKzU4OSwxMCBAQCBz
dGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNzb3JU
YWJsZUluZGV4WzJdID0gewogICAgIHsgLTEsIC0xIH0sCiB9OwogCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgdGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGVz
dFN0YXRpY0FjY2Vzc29yR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKQEAgLTYwNCwxMCArNjAyLDEwIEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSB0ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSB0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAotc3RhdGljIGJvb2wgdGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZSkKK3N0YXRpYyBib29sIHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIHZh
bHVlKQogewogICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0
KTsKQEAgLTY0OSwxMyArNjQ3LDEzIEBAIGNsYXNzIFN0YXRpY0N1c3RvbUFjY2Vzc29yIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICByZXR1cm4gYWNjZXNzb3I7CiAgICAgfQog
Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiB0aGlzT2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIHRo
aXNPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKICAgICB7CiAgICAgICAgIGlmIChTdHJpbmco
cHJvcGVydHlOYW1lLnVpZCgpKSA9PSAidGhpbkFpckN1c3RvbUdldHRlciIpIHsKICAgICAgICAg
ICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yLCB0ZXN0
U3RhdGljQWNjZXNzb3JHZXR0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIEpTTm9uRmluYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICByZXR1cm4gSlNO
b25GaW5hbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICB9CiB9OwogCkBAIC03NTIsMTEgKzc1MCwxMiBA
QCBjbGFzcyBET01KSVRHZXR0ZXIgOiBwdWJsaWMgRE9NSklUTm9kZSB7CiAgICAgICAgIH0KIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIHNsb3dDYWxsKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogcG9pbnRlcikKKyAgICAgICAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gc2xvd0NhbGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdm9pZCogcG9pbnRlcikKICAgICAgICAgewogICAgICAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKwkJCUNhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICAgICAgICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PERPTUpJVEdldHRlcio+KHBv
aW50ZXIpLT52YWx1ZSgpKSk7CiAgICAgICAgIH0KIApAQCAtNzY0LDEyICs3NjMsMTMgQEAgY2xh
c3MgRE9NSklUR2V0dGVyIDogcHVibGljIERPTUpJVE5vZGUgewogICAgICAgICB7CiAgICAgICAg
ICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICAgICAgUmVmPERP
TUpJVDo6Q2FsbERPTUdldHRlclNuaXBwZXQ+IHNuaXBwZXQgPSBET01KSVQ6OkNhbGxET01HZXR0
ZXJTbmlwcGV0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHNuaXBwZXQtPnJlcXVpcmVHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKyAgICAgICAgICAgIHNuaXBwZXQtPnJlcXVpcmVHbG9iYWxPYmplY3Qg
PSB0cnVlOwogICAgICAgICAgICAgc25pcHBldC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIFNuaXBwZXRQYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0cyA9IHBhcmFtc1swXS5qc1ZhbHVlUmVncygpOwotICAgICAgICAgICAgICAgIEdQUlJl
ZyBkb20gPSBwYXJhbXNbMV0uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmFkZFNsb3dQ
YXRoQ2FsbChqaXQuanVtcCgpLCBqaXQsIHNsb3dDYWxsLCByZXN1bHRzLCBkb20pOworICAgICAg
ICAgICAgICAgIEdQUlJlZyBkb21HUFIgPSBwYXJhbXNbMV0uZ3ByKCk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHBhcmFtc1syXS5ncHIoKTsKKyAgICAgICAgICAg
ICAgICBwYXJhbXMuYWRkU2xvd1BhdGhDYWxsKGppdC5qdW1wKCksIGppdCwgc2xvd0NhbGwsIHJl
c3VsdHMsIGdsb2JhbE9iamVjdEdQUiwgZG9tR1BSKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCgpOwogCiAgICAgICAgICAgICB9KTsKQEAgLTc4MSwxMCAr
NzgxLDEwIEBAIGNsYXNzIERPTUpJVEdldHRlciA6IHB1YmxpYyBET01KSVROb2RlIHsKIHByaXZh
dGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIGN1c3RvbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjdXN0b21HZXR0
ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2Vy
dFNjb3BlOwotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIERPTUpJVE5vZGUqIHRoaXNPYmplY3QgPSBqc0R5
bmFtaWNDYXN0PERPTUpJVE5vZGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIodGhpc09iamVjdC0+dmFsdWUoKSkpOwpAQCAtODQ0LDE3ICs4NDQsMTggQEAg
Y2xhc3MgRE9NSklUR2V0dGVyQ29tcGxleCA6IHB1YmxpYyBET01KSVROb2RlIHsKICAgICAgICAg
fQogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gc2xvd0NhbGwoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBwb2ludGVyKQorICAgICAg
ICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBzbG93Q2FsbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCB2b2lkKiBwb2ludGVyKQogICAgICAgICB7CiAgICAgICAgICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgICAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCQkJQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgICAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgICAgIGF1dG8q
IG9iamVjdCA9IHN0YXRpY19jYXN0PERPTUpJVE5vZGUqPihwb2ludGVyKTsKICAgICAgICAgICAg
IGF1dG8qIGRvbWppdEdldHRlckNvbXBsZXggPSBqc0R5bmFtaWNDYXN0PERPTUpJVEdldHRlckNv
bXBsZXgqPih2bSwgb2JqZWN0KTsKICAgICAgICAgICAgIGlmIChkb21qaXRHZXR0ZXJDb21wbGV4
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGRvbWppdEdldHRlckNvbXBsZXgtPm1fZW5hYmxlRXhj
ZXB0aW9uKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCAiRE9NSklUR2V0dGVyQ29t
cGxleCBzbG93IGNhbGwgZXhjZXB0aW9uIl9zKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNy
ZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgIkRPTUpJVEdldHRlckNvbXBsZXggc2xvdyBjYWxsIGV4
Y2VwdGlvbiJfcykpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIob2JqZWN0LT52YWx1ZSgpKSk7CiAgICAgICAgIH0KQEAgLTg2Nywx
NCArODY4LDE2IEBAIGNsYXNzIERPTUpJVEdldHRlckNvbXBsZXggOiBwdWJsaWMgRE9NSklUTm9k
ZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBudW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyAtIDQ7CiAgICAgICAgICAgICBzbmlwcGV0LT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnMgPSBudW1HUFNjcmF0Y2hSZWdpc3RlcnM7CiAgICAgICAgICAgICBzbmlwcGV0
LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAzOworICAgICAgICAgICAgc25pcHBldC0+cmVxdWly
ZUdsb2JhbE9iamVjdCA9IHRydWU7CiAgICAgICAgICAgICBzbmlwcGV0LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgU25pcHBldFBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRzID0gcGFyYW1zWzBdLmpzVmFsdWVSZWdzKCk7CiAgICAgICAg
ICAgICAgICAgR1BSUmVnIGRvbUdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcGFyYW1zWzJdLmdwcigpOwogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HUFNjcmF0Y2hSZWdpc3RlcnM7ICsraSkK
ICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
NDIpLCBwYXJhbXMuZ3BTY3JhdGNoKGkpKTsKIAotICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRT
bG93UGF0aENhbGwoaml0Lmp1bXAoKSwgaml0LCBzbG93Q2FsbCwgcmVzdWx0cywgZG9tR1BSKTsK
KyAgICAgICAgICAgICAgICBwYXJhbXMuYWRkU2xvd1BhdGhDYWxsKGppdC5qdW1wKCksIGppdCwg
c2xvd0NhbGwsIHJlc3VsdHMsIGdsb2JhbE9iamVjdEdQUiwgZG9tR1BSKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCgpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICByZXR1cm4gc25pcHBldDsKQEAgLTg5NSwxNiArODk4LDE2IEBAIGNsYXNzIERP
TUpJVEdldHRlckNvbXBsZXggOiBwdWJsaWMgRE9NSklUTm9kZSB7CiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIGN1c3RvbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjdXN0b21H
ZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOwotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxE
T01KSVRHZXR0ZXJDb21wbGV4Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOwogICAgICAgICBpZiAodGhpc09iamVjdC0+bV9lbmFi
bGVFeGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCAiRE9NSklUR2V0dGVyQ29tcGxl
eCBzbG93IGNhbGwgZXhjZXB0aW9uIl9zKSkpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihn
bG9iYWxPYmplY3QsICJET01KSVRHZXR0ZXJDb21wbGV4IHNsb3cgY2FsbCBleGNlcHRpb24iX3Mp
KSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGhpc09iamVjdC0+
dmFsdWUoKSkpOwogICAgIH0KIApAQCAtOTU4LDE1ICs5NjEsMTYgQEAgY2xhc3MgRE9NSklURnVu
Y3Rpb25PYmplY3QgOiBwdWJsaWMgRE9NSklUTm9kZSB7CiAKICAgICAgICAgRE9NSklUTm9kZSog
dGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8RE9NSklUTm9kZSo+KHZtLCBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpKTsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0KQotICAgICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0LT52YWx1ZSgpKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25XaXRob3V0VHlw
ZUNoZWNrKEV4ZWNTdGF0ZSogZXhlYywgRE9NSklUTm9kZSogbm9kZSkKKyAgICBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2soSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NSklUTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihub2RlLT52YWx1ZSgpKSk7CiAgICAgfQogCkBAIC0xMDM2LDE1ICsx
MDQwLDE2IEBAIGNsYXNzIERPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QgOiBwdWJsaWMgRE9NSklU
Tm9kZSB7CiAKICAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8RE9NSklU
Q2hlY2tTdWJDbGFzc09iamVjdCo+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICAg
ICAgaWYgKCF0aGlzT2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcih0aGlzT2JqZWN0LT52YWx1ZSgpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gZnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrKEV4ZWNTdGF0ZSog
ZXhlYywgRE9NSklUTm9kZSogbm9kZSkKKyAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBmdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2soSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRE9NSklUTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIERvbGxhclZNQXNzZXJ0U2Nv
cGUgYXNzZXJ0U2NvcGU7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihu
b2RlLT52YWx1ZSgpKSk7CiAgICAgfQogCkBAIC0xMTAyLDExICsxMTA3LDEyIEBAIGNsYXNzIERP
TUpJVEdldHRlckJhc2VKU09iamVjdCA6IHB1YmxpYyBET01KSVROb2RlIHsKICAgICAgICAgfQog
CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gc2xvd0NhbGwoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBwb2ludGVyKQorICAgICAgICBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBzbG93Q2FsbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCB2b2lkKiBwb2ludGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgICAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCQkJQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgICAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHBvaW50ZXIpOwogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2
bSkpOwogICAgICAgICB9CkBAIC0xMTE1LDEyICsxMTIxLDEzIEBAIGNsYXNzIERPTUpJVEdldHRl
ckJhc2VKU09iamVjdCA6IHB1YmxpYyBET01KSVROb2RlIHsKICAgICAgICAgewogICAgICAgICAg
ICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAgICAgICAgIFJlZjxET01K
SVQ6OkNhbGxET01HZXR0ZXJTbmlwcGV0PiBzbmlwcGV0ID0gRE9NSklUOjpDYWxsRE9NR2V0dGVy
U25pcHBldDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBzbmlwcGV0LT5yZXF1aXJlR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisgICAgICAgICAgICBzbmlwcGV0LT5yZXF1aXJlR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKICAgICAgICAgICAgIHNuaXBwZXQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBTbmlwcGV0UGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBEb2xsYXJW
TUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdHMgPSBwYXJhbXNbMF0uanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcg
ZG9tID0gcGFyYW1zWzFdLmdwcigpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRTbG93UGF0
aENhbGwoaml0Lmp1bXAoKSwgaml0LCBzbG93Q2FsbCwgcmVzdWx0cywgZG9tKTsKKyAgICAgICAg
ICAgICAgICBHUFJSZWcgZG9tR1BSID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAg
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwYXJhbXNbMl0uZ3ByKCk7CisgICAgICAgICAgICAg
ICAgcGFyYW1zLmFkZFNsb3dQYXRoQ2FsbChqaXQuanVtcCgpLCBqaXQsIHNsb3dDYWxsLCByZXN1
bHRzLCBnbG9iYWxPYmplY3RHUFIsIGRvbUdQUik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEND
YWxsSGVscGVyczo6SnVtcExpc3QoKTsKIAogICAgICAgICAgICAgfSk7CkBAIC0xMTMyLDEwICsx
MTM5LDEwIEBAIGNsYXNzIERPTUpJVEdldHRlckJhc2VKU09iamVjdCA6IHB1YmxpYyBET01KSVRO
b2RlIHsKIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIGN1c3RvbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBjdXN0b21HZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBEb2xsYXJWTUFzc2Vy
dFNjb3BlIGFzc2VydFNjb3BlOwotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNPYmplY3QpOwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSkpOwpA
QCAtMTE5Nyw0NSArMTIwNCw0NSBAQCBjbGFzcyBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiB9OwogCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBj
dXN0b21HZXRBY2Nlc3NvcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjdXN0b21HZXRBY2Nlc3NvcihKU0ds
b2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIC8vIFBhc3NlZCB8dGhpc3wKICAgICByZXR1cm4gdGhpc1ZhbHVlOwogfQogCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgY3VzdG9tR2V0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBzbG90VmFsdWUsIFByb3BlcnR5TmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjdXN0
b21HZXRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBz
bG90VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChKU1ZhbHVlOjpk
ZWNvZGUoc2xvdFZhbHVlKS5pbmhlcml0czxKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXI+KGV4ZWMt
PnZtKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU1ZhbHVlOjpkZWNvZGUoc2xvdFZhbHVlKS5p
bmhlcml0czxKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXI+KGdsb2JhbE9iamVjdC0+dm0oKSkpOwog
ICAgIC8vIFBhc3NlZCBwcm9wZXJ0eSBob2xkZXIuCiAgICAgcmV0dXJuIHNsb3RWYWx1ZTsKIH0K
IAotc3RhdGljIGJvb2wgY3VzdG9tU2V0QWNjZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitzdGF0aWMg
Ym9vbCBjdXN0b21TZXRBY2Nlc3NvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAogICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2
YWx1ZS5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUp
OwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7Ci0gICAgb2JqZWN0LT5wdXQob2Jq
ZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVzdWx0IiksIEpTVmFsdWU6
OmRlY29kZSh0aGlzT2JqZWN0KSwgc2xvdCk7CisgICAgb2JqZWN0LT5wdXQob2JqZWN0LCBnbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN1bHQiKSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNPYmplY3QpLCBzbG90KTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgYm9vbCBjdXN0b21TZXRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHNs
b3RWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorc3RhdGljIGJvb2wgY3VzdG9t
U2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgc2xv
dFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWU6OmRl
Y29kZShzbG90VmFsdWUpLmluaGVyaXRzPEpTVGVzdEN1c3RvbUdldHRlclNldHRlcj4oZXhlYy0+
dm0oKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWU6OmRlY29kZShzbG90VmFsdWUpLmlu
aGVyaXRzPEpTVGVzdEN1c3RvbUdldHRlclNldHRlcj4oZ2xvYmFsT2JqZWN0LT52bSgpKSk7CiAK
ICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQodmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KHZhbHVlKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwotICAg
IG9iamVjdC0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJl
c3VsdCIpLCBKU1ZhbHVlOjpkZWNvZGUoc2xvdFZhbHVlKSwgc2xvdCk7CisgICAgb2JqZWN0LT5w
dXQob2JqZWN0LCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN1
bHQiKSwgSlNWYWx1ZTo6ZGVjb2RlKHNsb3RWYWx1ZSksIHNsb3QpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0xMzcwLDcgKzEzNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uV2FzbVN0cmVhbWluZ1BhcnNlckFkZEJ5dGVzKEpTR2xvYmFsT2JqZWN0KgogICAg
IGlmICghdGhpc09iamVjdCkKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpOwogCi0gICAgYXV0byBkYXRhID0gZ2V0V2Fz
bUJ1ZmZlckZyb21WYWx1ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAg
IGF1dG8gZGF0YSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0aGlzT2JqZWN0LT5zdHJlYW1pbmdQYXJz
ZXIoKS5hZGRCeXRlcyhiaXR3aXNlX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZmlyc3QpLCBk
YXRhLnNlY29uZCkpKSkpOwogfQpAQCAtMTQxMCw3ICsxNDE3LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25CcmVha3BvaW50KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmoKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTShzY29wZSk7Ci0g
ICAgaWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSB8fCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApLnRvQm9vbGVhbihjYWxsRnJhbWUpKQorICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgfHwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oZ2xvYmFsT2JqZWN0KSkK
ICAgICAgICAgV1RGQnJlYWtwb2ludFRyYXAoKTsKIAogICAgIHJldHVybiBlbmNvZGVkSlNVbmRl
ZmluZWQoKTsKQEAgLTE2MTEsMTkgKzE2MTgsMTkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Ob0lubGluZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSoK
IAogLy8gUnVucyBhIGZ1bGwgR0Mgc3luY2hyb25vdXNseS4KIC8vIFVzYWdlOiAkdm0uZ2MoKQot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQyhKU0dsb2JhbE9i
amVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25HQyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqKQogewogICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7Ci0gICAgVk1JbnNw
ZWN0b3I6OmdjKGNhbGxGcmFtZSk7CisgICAgVk1JbnNwZWN0b3I6OmdjKGdsb2JhbE9iamVjdCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAogLy8gUnVu
cyB0aGUgZWRlbkdDIHN5bmNocm9ub3VzbHkuCiAvLyBVc2FnZTogJHZtLmVkZW5HQygpCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhKU0dsb2JhbE9i
amVjdCosIENhbGxGcmFtZSogY2FsbEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25FZGVuR0MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKikKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAgIFZN
SW5zcGVjdG9yOjplZGVuR0MoY2FsbEZyYW1lKTsKKyAgICBWTUluc3BlY3Rvcjo6ZWRlbkdDKGds
b2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIApAQCAtMTY1MSw3ICsxNjU4LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25EdW1wU3Vic3BhY2VIYXNoZXMoSlNHbG9iYWxPYmplY3QqIGcKIC8vIE5v
dGU6IHlvdSBjYW5ub3QgdG9TdHJpbmcoKSBhIGNvZGVCbG9jaywgdW5saW5rZWRDb2RlQmxvY2ss
IG9yIGV4ZWN1dGFibGUgYmVjYXVzZQogLy8gdGhlcmUgYXJlIGludGVybmFsIG9iamVjdHMgYW5k
IG5vdCBhIEpTIG9iamVjdC4gSGVuY2UsIHlvdSBjYW5ub3QgZG8gc3RyaW5nCiAvLyBjb25jYXRl
bmF0aW9uIHdpdGggdGhlbS4KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uQ2FsbEZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNhbGxGcmFtZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwogICAgIHVuc2lnbmVkIGZyYW1lTnVtYmVy
ID0gMTsKQEAgLTE2NjYsMTMgKzE2NzMsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DYWxsRnJhbWUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUKICAg
ICAgICAgZnJhbWVOdW1iZXIgPSB2YWx1ZS5hc1VJbnQzMigpICsgMTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRG9sbGFyVk1DYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJh
bWUsIGZyYW1lTnVtYmVyKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0RvbGxhclZN
Q2FsbEZyYW1lOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZyYW1lTnVtYmVyKSk7
CiB9CiAKIC8vIEdldHMgYSB0b2tlbiBmb3IgdGhlIENvZGVCbG9jayBmb3IgYSBzcGVjaWZpZWQg
ZnJhbWUgaW5kZXguCiAvLyBVc2FnZTogY29kZUJsb2NrVG9rZW4gPSAkdm0uY29kZUJsb2NrRm9y
RnJhbWUoMCkgLy8gZnJhbWUgMCBpcyB0aGUgdG9wIGZyYW1lLgogLy8gVXNhZ2U6IGNvZGVCbG9j
a1Rva2VuID0gJHZtLmNvZGVCbG9ja0ZvckZyYW1lKCkgLy8gaW1wbGllcyBmcmFtZSAwIGkuZS4g
Y3VycmVudCBmcmFtZS4KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ29kZUJsb2NrRm9yRnJhbWUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ29kZUJsb2Nr
Rm9yRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICB1bnNpZ25l
ZCBmcmFtZU51bWJlciA9IDE7CkBAIC0xNjg3LDcgKzE2OTQsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNvZGVCbG9ja0ZvckZyYW1lKEpTR2xvYmFsT2Jq
ZWN0KiwgQwogICAgICAgICBmcmFtZU51bWJlciA9IHZhbHVlLmFzVUludDMyKCkgKyAxOwogICAg
IH0KIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gVk1JbnNwZWN0b3I6OmNvZGVCbG9ja0Zv
ckZyYW1lKGNhbGxGcmFtZSwgZnJhbWVOdW1iZXIpOworICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gVk1JbnNwZWN0b3I6OmNvZGVCbG9ja0ZvckZyYW1lKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LCBmcmFtZU51bWJlcik7CiAgICAgaWYgKGNvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjb2RlQmxvY2spOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC0xNzEzLDcgKzE3MjAsNyBAQCBzdGF0aWMgQ29kZUJsb2NrKiBjb2RlQmxv
Y2tGcm9tQXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbAog
ICAgICAgICAgICAgY2FuZGlkYXRlQ29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4o
dmFsdWUuYXNDZWxsKCkpOwogICAgIH0KIAotICAgIGlmIChjYW5kaWRhdGVDb2RlQmxvY2sgJiYg
Vk1JbnNwZWN0b3I6OmlzVmFsaWRDb2RlQmxvY2soY2FsbEZyYW1lLCBjYW5kaWRhdGVDb2RlQmxv
Y2spKQorICAgIGlmIChjYW5kaWRhdGVDb2RlQmxvY2sgJiYgVk1JbnNwZWN0b3I6OmlzVmFsaWRD
b2RlQmxvY2soZ2xvYmFsT2JqZWN0LCBjYW5kaWRhdGVDb2RlQmxvY2spKQogICAgICAgICByZXR1
cm4gY2FuZGlkYXRlQ29kZUJsb2NrOwogCiAgICAgaWYgKGNhbmRpZGF0ZUNvZGVCbG9jaykKQEAg
LTE3NzQsNyArMTc4MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBkb1ByaW50KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lCiAgICAgICAgICAgICBk
YXRhTG9nKGFyZyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBT
dHJpbmcgYXJnU3RyID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKS50b1dURlN0cmlu
ZyhjYWxsRnJhbWUpOworICAgICAgICBTdHJpbmcgYXJnU3RyID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudChpKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgZGF0YUxvZyhh
cmdTdHIpOwogICAgIH0KQEAgLTE4MDMsMjMgKzE4MTAsMjMgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LAogCiAvLyBEdW1wcyB0aGUgY3VycmVudCBDYWxsRnJhbWUuCiAvLyBVc2FnZTogJHZtLmR1
bXBDYWxsRnJhbWUoKQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25EdW1wQ2FsbEZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBDYWxsRnJhbWUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAg
ICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKICAgICAvLyBXaGVuIHRoZSBjYWxs
ZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiwgdGhleSBhcmUgZXhwZWN0aW5nIHRvIGR1bXAgdGhlaXIK
ICAgICAvLyBvd24gZnJhbWUuIFNvIHNraXAgMSBmb3IgdGhpcyBmcmFtZS4KLSAgICBWTUluc3Bl
Y3Rvcjo6ZHVtcENhbGxGcmFtZShjYWxsRnJhbWUsIDEpOworICAgIFZNSW5zcGVjdG9yOjpkdW1w
Q2FsbEZyYW1lKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCAxKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiAvLyBEdW1wcyB0aGUgSlMgc3RhY2suCiAv
LyBVc2FnZTogJHZtLnByaW50U3RhY2soKQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25EdW1wU3RhY2soSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcFN0
YWNrKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewogICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAgICAgLy8gV2hlbiB0aGUg
Y2FsbGVycyBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZXkgYXJlIGV4cGVjdGluZyB0byBkdW1wIHRo
ZQogICAgIC8vIHN0YWNrIHN0YXJ0aW5nIHRoZWlyIG93biBmcmFtZS4gU28gc2tpcCAxIGZvciB0
aGlzIGZyYW1lLgotICAgIFZNSW5zcGVjdG9yOjpkdW1wU3RhY2soY2FsbEZyYW1lLCAxKTsKKyAg
ICBWTUluc3BlY3Rvcjo6ZHVtcFN0YWNrKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCAxKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0xOTgxLDEx
ICsxOTg4LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlUHJveHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShwcm94eSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uQ3JlYXRlUnVudGltZUFycmF5KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNy
ZWF0ZVJ1bnRpbWVBcnJheShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwotICAg
IEpTTG9ja0hvbGRlciBsb2NrKGNhbGxGcmFtZSk7Ci0gICAgUnVudGltZUFycmF5KiBhcnJheSA9
IFJ1bnRpbWVBcnJheTo6Y3JlYXRlKGNhbGxGcmFtZSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
Z2xvYmFsT2JqZWN0KTsKKyAgICBSdW50aW1lQXJyYXkqIGFycmF5ID0gUnVudGltZUFycmF5Ojpj
cmVhdGUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXJyYXkpOwogfQogCkBAIC0yMTE2LDcgKzIxMjMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEltcHVyZUdldHRlckRlbGVnYXRlKEpTR2xvYmFs
T2JqZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IEltcHVyZUdldHRlciogaW1wdXJlR2V0dGVyID0ganNEeW5hbWljQ2FzdDxJbXB1cmVHZXR0ZXIq
Pih2bSwgYXNPYmplY3QoYmFzZS5hc0NlbGwoKSkpOwogICAgIGlmIChVTkxJS0VMWSghaW1wdXJl
R2V0dGVyKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiYXJn
dW1lbnQgaXMgbm90IGFuIEltcHVyZUdldHRlciJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJhcmd1bWVudCBpcyBub3QgYW4gSW1wdXJlR2V0dGVyIl9z
KTsKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAgfQogICAgIGltcHVyZUdl
dHRlci0+c2V0RGVsZWdhdGUodm0sIGFzT2JqZWN0KGRlbGVnYXRlLmFzQ2VsbCgpKSk7CkBAIC0y
MTMyLDcgKzIxMzksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkNyZWF0ZUJ1aWx0aW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgIGlmIChjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEgfHwgIWNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNTdHJp
bmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAot
ICAgIFN0cmluZyBmdW5jdGlvblRleHQgPSBhc1N0cmluZyhjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
KS0+dmFsdWUoY2FsbEZyYW1lKTsKKyAgICBTdHJpbmcgZnVuY3Rpb25UZXh0ID0gYXNTdHJpbmco
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKSktPnZhbHVlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBTb3VyY2VDb2Rl
IHNvdXJjZSA9IG1ha2VTb3VyY2UoZnVuY3Rpb25UZXh0LCB7IH0pOwpAQCAtMjE1MCwxMyArMjE1
NywxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldFBy
aXZhdGVQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZwogICAgIGlmIChjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIgfHwgIWNhbGxGcmFtZS0+YXJndW1lbnQoMSkuaXNTdHJpbmcoKSkKICAg
ICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHN0ciA9IGFz
U3RyaW5nKGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpLT52YWx1ZShjYWxsRnJhbWUpOworICAgIFN0
cmluZyBzdHIgPSBhc1N0cmluZyhjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKS0+dmFsdWUoZ2xvYmFs
T2JqZWN0KTsKIAogICAgIFN5bWJvbEltcGwqIHN5bWJvbCA9IHZtLnByb3BlcnR5TmFtZXMtPmxv
b2tVcFByaXZhdGVOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHN0cikpOwogICAgIGlm
ICghc3ltYm9sKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgc2NvcGUs
ICJVbmtub3duIHByaXZhdGUgbmFtZS4iKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiVW5rbm93biBwcml2YXRlIG5hbWUuIik7CiAKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPmFyZ3VtZW50
KDApLmdldChjYWxsRnJhbWUsIHN5bWJvbCkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmdldChnbG9iYWxPYmpl
Y3QsIHN5bWJvbCkpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25DcmVhdGVSb290KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSopCkBAIC0yMTc2LDcgKzIxODMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkNyZWF0ZUVsZW1lbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogCiAgICAg
Um9vdCogcm9vdCA9IGpzRHluYW1pY0Nhc3Q8Um9vdCo+KHZtLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKTsKICAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlRXJyb3IoY2FsbEZyYW1lLCAiQ2Fu
bm90IGNyZWF0ZSBFbGVtZW50IHdpdGhvdXQgYSBSb290LiJfcykpKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVFcnJvcihnbG9iYWxPYmplY3QsICJDYW5ub3QgY3JlYXRlIEVsZW1lbnQgd2l0aG91dCBhIFJv
b3QuIl9zKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRWxlbWVudDo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHJvb3QpKTsKIH0KIApAQCAtMjIwOSw3ICsyMjE2LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRIaWRkZW5WYWx1ZShKU0ds
b2JhbE9iamVjdCogZ2xvYmEKIAogICAgIFNpbXBsZU9iamVjdCogc2ltcGxlT2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxTaW1wbGVPYmplY3QqPih2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFzaW1wbGVPYmplY3QpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9y
KGNhbGxGcmFtZSwgc2NvcGUsICJJbnZhbGlkIHVzZSBvZiBnZXRIaWRkZW5WYWx1ZSB0ZXN0IGZ1
bmN0aW9uIl9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IkludmFsaWQgdXNlIG9mIGdldEhpZGRlblZhbHVlIHRlc3QgZnVuY3Rpb24iX3MpOwogICAgICAg
ICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB9CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShzaW1wbGVPYmplY3QtPmhpZGRlblZhbHVlKCkpOwpAQCAtMjIyNCw3ICsyMjMxLDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRIaWRkZW5WYWx1
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmEKIAogICAgIFNpbXBsZU9iamVjdCogc2ltcGxlT2JqZWN0
ID0ganNEeW5hbWljQ2FzdDxTaW1wbGVPYmplY3QqPih2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFzaW1wbGVPYmplY3QpKSB7Ci0gICAgICAgIHRocm93VHlw
ZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJJbnZhbGlkIHVzZSBvZiBzZXRIaWRkZW5WYWx1ZSB0
ZXN0IGZ1bmN0aW9uIl9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIkludmFsaWQgdXNlIG9mIHNldEhpZGRlblZhbHVlIHRlc3QgZnVuY3Rpb24iX3MpOwog
ICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICB9CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7CkBAIC0yMjM5LDEwICsyMjQ2LDEwIEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2hhZG93Q2hpY2tlbkZ1bmN0
aW9uc09uU3RhY2soSlNHbG9iCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIGlmIChhdXRvKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpKSB7
CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShzaGFkb3dDaGlja2VuLT5mdW5jdGlvbnNPblN0YWNrKGNhbGxGcmFtZSkpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNoYWRvd0NoaWNrZW4tPmZ1bmN0aW9uc09uU3RhY2soZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUpKTsKICAgICB9CiAKLSAgICBKU0FycmF5KiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGNhbGxGcmFtZSwgMCk7CisgICAgSlNBcnJheSogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIDApOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdChjYWxsRnJhbWUsICZ2
bSwgWyZdIChTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIC0+IFN0YWNrVmlzaXRvcjo6U3RhdHVzIHsK
ICAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKQEAgLTIyNTAsNyArMjI1
Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2hhZG93
Q2hpY2tlbkZ1bmN0aW9uc09uU3RhY2soSlNHbG9iCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpDb250aW51ZTsKICAgICAgICAgaWYgKHZpc2l0b3ItPmlzV2FzbUZyYW1lKCkpCiAg
ICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKLSAgICAgICAgcmVzdWx0
LT5wdXNoKGNhbGxGcmFtZSwganNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkuYXND
ZWxsKCkpKTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNDYXN0PEpTT2Jq
ZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKTsKICAgICAgICAgc2NvcGUucmVsZWFz
ZUFzc2VydE5vRXhjZXB0aW9uKCk7IC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJv
bSB0ZXN0cy4KICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfSk7
CkBAIC0yMjc4LDEyICsyMjg1LDEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRmluZFR5cGVGb3JFeHByZXNzaW9uKEpTR2xvYmFsT2JqZWN0CiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+
KHZtLCBmdW5jdGlvblZhbHVlLmFzQ2VsbCgpLT5nZXRPYmplY3QoKSkpLT5qc0V4ZWN1dGFibGUo
KTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxGcmFtZS0+YXJndW1lbnQoMSkuaXNTdHJpbmco
KSk7Ci0gICAgU3RyaW5nIHN1YnN0cmluZyA9IGFzU3RyaW5nKGNhbGxGcmFtZS0+YXJndW1lbnQo
MSkpLT52YWx1ZShjYWxsRnJhbWUpOworICAgIFN0cmluZyBzdWJzdHJpbmcgPSBhc1N0cmluZyhj
YWxsRnJhbWUtPmFyZ3VtZW50KDEpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICBTdHJpbmcg
c291cmNlQ29kZVRleHQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS52aWV3KCkudG9TdHJpbmcoKTsK
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc291cmNlQ29kZVRl
eHQuZmluZChzdWJzdHJpbmcpICsgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKSk7
CiAgICAgCiAgICAgU3RyaW5nIGpzb25TdHJpbmcgPSB2bS50eXBlUHJvZmlsZXIoKS0+dHlwZUlu
Zm9ybWF0aW9uRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3JOb3JtYWwsIG9mZnNldCwgZXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdm0pOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGNhbGxGcmFtZSwganNvblN0cmluZykpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGdsb2JhbE9iamVjdCwganNvblN0cmlu
ZykpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJl
dHVyblR5cGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCkBAIC0yMjk5LDcgKzIzMDYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblJldHVyblR5cGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogCiAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gZXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0
KHZtKTsKICAgICBTdHJpbmcganNvblN0cmluZyA9IHZtLnR5cGVQcm9maWxlcigpLT50eXBlSW5m
b3JtYXRpb25Gb3JFeHByZXNzaW9uQXRPZmZzZXQoVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRv
ckZ1bmN0aW9uUmV0dXJuLCBvZmZzZXQsIGV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHZtKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShjYWxsRnJhbWUsIGpzb25TdHJpbmcp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShnbG9iYWxPYmplY3QsIGpz
b25TdHJpbmcpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25GbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTIzMzIsNyArMjMzOSw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkKEpT
R2xvYmFsT2JqZWN0CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gKGpzRHlu
YW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBmdW5jdGlvblZhbHVlLmFzQ2VsbCgpLT5nZXRPYmpl
Y3QoKSkpLT5qc0V4ZWN1dGFibGUoKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxGcmFtZS0+
YXJndW1lbnQoMSkuaXNTdHJpbmcoKSk7Ci0gICAgU3RyaW5nIHN1YnN0cmluZyA9IGFzU3RyaW5n
KGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpLT52YWx1ZShjYWxsRnJhbWUpOworICAgIFN0cmluZyBz
dWJzdHJpbmcgPSBhc1N0cmluZyhjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKS0+dmFsdWUoZ2xvYmFs
T2JqZWN0KTsKICAgICBTdHJpbmcgc291cmNlQ29kZVRleHQgPSBleGVjdXRhYmxlLT5zb3VyY2Uo
KS52aWV3KCkudG9TdHJpbmcoKTsKICAgICBSRUxFQVNFX0FTU0VSVChzb3VyY2VDb2RlVGV4dC5j
b250YWlucyhzdWJzdHJpbmcpKTsKICAgICBpbnQgb2Zmc2V0ID0gc291cmNlQ29kZVRleHQuZmlu
ZChzdWJzdHJpbmcpICsgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKQEAgLTIz
NTIsNyArMjM1OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQmFzaWNCbG9ja0V4ZWN1dGlvbkNvdW50KEpTR2xvYmFsT2JqCiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0gKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCBmdW5j
dGlvblZhbHVlLmFzQ2VsbCgpLT5nZXRPYmplY3QoKSkpLT5qc0V4ZWN1dGFibGUoKTsKIAogICAg
IFJFTEVBU0VfQVNTRVJUKGNhbGxGcmFtZS0+YXJndW1lbnQoMSkuaXNTdHJpbmcoKSk7Ci0gICAg
U3RyaW5nIHN1YnN0cmluZyA9IGFzU3RyaW5nKGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpLT52YWx1
ZShjYWxsRnJhbWUpOworICAgIFN0cmluZyBzdWJzdHJpbmcgPSBhc1N0cmluZyhjYWxsRnJhbWUt
PmFyZ3VtZW50KDEpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0KTsKICAgICBTdHJpbmcgc291cmNlQ29k
ZVRleHQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS52aWV3KCkudG9TdHJpbmcoKTsKICAgICBSRUxF
QVNFX0FTU0VSVChzb3VyY2VDb2RlVGV4dC5jb250YWlucyhzdWJzdHJpbmcpKTsKICAgICBpbnQg
b2Zmc2V0ID0gc291cmNlQ29kZVRleHQuZmluZChzdWJzdHJpbmcpICsgZXhlY3V0YWJsZS0+c291
cmNlKCkuc3RhcnRPZmZzZXQoKTsKQEAgLTIzODAsMjIgKzIzODcsMjEgQEAgY2xhc3MgRG9Ob3Ro
aW5nRGVidWdnZXIgZmluYWwgOiBwdWJsaWMgRGVidWdnZXIgewogICAgIH0KIAogcHJpdmF0ZToK
LSAgICB2b2lkIHNvdXJjZVBhcnNlZChFeGVjU3RhdGUqLCBTb3VyY2VQcm92aWRlciosIGludCwg
Y29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZQorICAgIHZvaWQgc291cmNlUGFyc2VkKEpTR2xv
YmFsT2JqZWN0KiwgU291cmNlUHJvdmlkZXIqLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJikgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CiAg
ICAgfQogfTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNoYW5nZURlYnVnZ2VyTW9kZVdoZW5J
ZGxlKEV4ZWNTdGF0ZSogZXhlYywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdl
bmVyYXRpb25Nb2RlKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNoYW5nZURlYnVnZ2VyTW9kZVdo
ZW5JZGxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9wdGlvblNldDxDb2RlR2VuZXJh
dGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSkKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAgICBib29sIGRlYnVnZ2VyUmVxdWVzdGVkID0gY29k
ZUdlbmVyYXRpb25Nb2RlLmNvbnRhaW5zKENvZGVHZW5lcmF0aW9uTW9kZTo6RGVidWdnZXIpOwog
ICAgIGlmIChkZWJ1Z2dlclJlcXVlc3RlZCA9PSBnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBWTSogdm0gPSAmZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIHZtLT53aGVuSWRsZShbPV0gKCkgewogICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOwogICAgICAgICBpZiAoZGVidWdnZXJSZXF1ZXN0ZWQpIHsKQEAgLTI0MTIsMTYg
KzI0MTgsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNoYW5nZURlYnVnZ2VyTW9kZVdoZW5J
ZGxlKEV4ZWNTdGF0ZSogZXhlYywgT3B0aW9uU2V0PENvZGUKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkVuYWJsZURlYnVnZ2VyTW9kZVdoZW5JZGxlKEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkVuYWJsZURlYnVnZ2VyTW9kZVdoZW5JZGxlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSopCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3Nl
cnRTY29wZTsKLSAgICByZXR1cm4gY2hhbmdlRGVidWdnZXJNb2RlV2hlbklkbGUoY2FsbEZyYW1l
LCB7IENvZGVHZW5lcmF0aW9uTW9kZTo6RGVidWdnZXIgfSk7CisgICAgcmV0dXJuIGNoYW5nZURl
YnVnZ2VyTW9kZVdoZW5JZGxlKGdsb2JhbE9iamVjdCwgeyBDb2RlR2VuZXJhdGlvbk1vZGU6OkRl
YnVnZ2VyIH0pOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkRpc2FibGVEZWJ1Z2dlck1vZGVXaGVuSWRsZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25EaXNhYmxlRGVidWdnZXJNb2RlV2hlbklkbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKikKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwot
ICAgIHJldHVybiBjaGFuZ2VEZWJ1Z2dlck1vZGVXaGVuSWRsZShjYWxsRnJhbWUsIHsgfSk7Cisg
ICAgcmV0dXJuIGNoYW5nZURlYnVnZ2VyTW9kZVdoZW5JZGxlKGdsb2JhbE9iamVjdCwgeyB9KTsK
IH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWxldGVB
bGxDb2RlV2hlbklkbGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikK
QEAgLTI0NjUsMTEgKzI0NzEsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25HZXRHZXR0ZXJTZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2IKICAgICBpZiAo
IXByb3BlcnR5LmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5
KS0+dG9JZGVudGlmaWVyKGNhbGxGcmFtZSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBhc1N0
cmluZyhwcm9wZXJ0eSktPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh2YWx1ZSwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7Ci0gICAgdmFsdWUu
Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICB2YWx1
ZS5nZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsK
QEAgLTI0ODksNyArMjQ5NSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTG9hZEdldHRlckZyb21HZXR0ZXJTZXR0ZXIoSlNHbG9iYWxPCiAKICAgICBHZXR0
ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IGpzRHluYW1pY0Nhc3Q8R2V0dGVyU2V0dGVyKj4odm0s
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSghZ2V0dGVyU2V0dGVy
KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCAiSW52YWxpZCB1
c2Ugb2YgbG9hZEdldHRlckZyb21HZXR0ZXJTZXR0ZXIgdGVzdCBmdW5jdGlvbjogYXJndW1lbnQg
aXMgbm90IGEgR2V0dGVyU2V0dGVyIl9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIkludmFsaWQgdXNlIG9mIGxvYWRHZXR0ZXJGcm9tR2V0dGVyU2V0dGVy
IHRlc3QgZnVuY3Rpb246IGFyZ3VtZW50IGlzIG5vdCBhIEdldHRlclNldHRlciJfcyk7CiAgICAg
ICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKaW5kZXggZjdmMzI0ZmE5ZmVmODQ4MzNkNjRmZmEy
YmY4MGE3NjZmNzM3MTJjYi4uMzY0ZWE0NDkxNDI4MGE5MTFjNTA1Yzg3YThkZTAyZTMwZDZmYTIy
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCkBAIC0x
OTcsMzEgKzE5NywzMSBAQCBhdXRvIFZNSW5zcGVjdG9yOjpjb2RlQmxvY2tGb3JNYWNoaW5lUEMo
Y29uc3QgVk1JbnNwZWN0b3I6OkxvY2tlciYsIHZvaWQqIG1hY2hpbgogI2VuZGlmCiB9CiAKLWJv
b2wgVk1JbnNwZWN0b3I6OmN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSogZXhlYykK
K2Jvb2wgVk1JbnNwZWN0b3I6OmN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcmV0dXJuIGV4ZWMtPnZtKCkuY3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT52bSgpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCk7CiB9CiAKLXN0YXRpYyBib29sIGVuc3VyZUN1cnJlbnRU
aHJlYWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyBib29sIGVuc3VyZUN1cnJl
bnRUaHJlYWRPd25zSlNMb2NrKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAg
aWYgKFZNSW5zcGVjdG9yOjpjdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkKKyAgICBpZiAo
Vk1JbnNwZWN0b3I6OmN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKGdsb2JhbE9iamVjdCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGRhdGFMb2coIkVSUk9SOiBjdXJyZW50IHRocmVhZCBkb2Vz
IG5vdCBvd24gdGhlIEpTTG9ja1xuIik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFZN
SW5zcGVjdG9yOjpnYyhFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIFZNSW5zcGVjdG9yOjpnYyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhleGVjKSkKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pT
TG9jayhnbG9iYWxPYmplY3QpKQogICAgICAgICByZXR1cm47CiAgICAgdm0uaGVhcC5jb2xsZWN0
Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CiB9CiAKLXZvaWQgVk1JbnNwZWN0b3I6
OmVkZW5HQyhFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIFZNSW5zcGVjdG9yOjplZGVuR0MoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZXhlYykpCisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xv
Y2soZ2xvYmFsT2JqZWN0KSkKICAgICAgICAgcmV0dXJuOwogICAgIHZtLmhlYXAuY29sbGVjdFN5
bmMoQ29sbGVjdGlvblNjb3BlOjpFZGVuKTsKIH0KQEAgLTI2NSw5ICsyNjUsOSBAQCBib29sIFZN
SW5zcGVjdG9yOjppc1ZhbGlkQ2VsbChIZWFwKiBoZWFwLCBKU0NlbGwqIGNhbmRpZGF0ZSkKICAg
ICByZXR1cm4gZnVuY3Rvci5mb3VuZDsKIH0KIAotYm9vbCBWTUluc3BlY3Rvcjo6aXNWYWxpZENv
ZGVCbG9jayhFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY2FuZGlkYXRlKQorYm9vbCBWTUlu
c3BlY3Rvcjo6aXNWYWxpZENvZGVCbG9jayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
b2RlQmxvY2sqIGNhbmRpZGF0ZSkKIHsKLSAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25z
SlNMb2NrKGV4ZWMpKQorICAgIGlmICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2soZ2xv
YmFsT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3RydWN0IENvZGVCbG9j
a1ZhbGlkYXRpb25GdW5jdG9yIHsKQEAgLTI4NiwxNSArMjg2LDE1IEBAIGJvb2wgVk1JbnNwZWN0
b3I6OmlzVmFsaWRDb2RlQmxvY2soRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNhbmRpZGF0
ZSkKICAgICAgICAgbXV0YWJsZSBib29sIGZvdW5kIHsgZmFsc2UgfTsKICAgICB9OwogCi0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgQ29kZUJsb2NrVmFsaWRhdGlvbkZ1bmN0b3IgZnVuY3RvcihjYW5kaWRhdGUpOwogICAgIHZt
LmhlYXAuZm9yRWFjaENvZGVCbG9jayhmdW5jdG9yKTsKICAgICByZXR1cm4gZnVuY3Rvci5mb3Vu
ZDsKIH0KIAotQ29kZUJsb2NrKiBWTUluc3BlY3Rvcjo6Y29kZUJsb2NrRm9yRnJhbWUoQ2FsbEZy
YW1lKiB0b3BDYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lTnVtYmVyKQorQ29kZUJsb2NrKiBWTUlu
c3BlY3Rvcjo6Y29kZUJsb2NrRm9yRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lTnVtYmVyKQogewotICAgIGlm
ICghZW5zdXJlQ3VycmVudFRocmVhZE93bnNKU0xvY2sodG9wQ2FsbEZyYW1lKSkKKyAgICBpZiAo
IWVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKGdsb2JhbE9iamVjdCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgaWYgKCF0b3BDYWxsRnJhbWUpCkBAIC0zNTksOSArMzU5LDkg
QEAgY2xhc3MgRHVtcEZyYW1lRnVuY3RvciB7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2N1cnJl
bnRGcmFtZSB7IDAgfTsKIH07CiAKLXZvaWQgVk1JbnNwZWN0b3I6OmR1bXBDYWxsRnJhbWUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCkKK3ZvaWQgVk1JbnNwZWN0
b3I6OmR1bXBDYWxsRnJhbWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lc1RvU2tpcCkKIHsKLSAgICBpZiAoIWVuc3VyZUN1
cnJlbnRUaHJlYWRPd25zSlNMb2NrKGNhbGxGcmFtZSkpCisgICAgaWYgKCFlbnN1cmVDdXJyZW50
VGhyZWFkT3duc0pTTG9jayhnbG9iYWxPYmplY3QpKQogICAgICAgICByZXR1cm47CiAgICAgRHVt
cEZyYW1lRnVuY3RvciBmdW5jdG9yKER1bXBGcmFtZUZ1bmN0b3I6OkR1bXBPbmUsIGZyYW1lc1Rv
U2tpcCk7CiAgICAgY2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOwpAQCAtNDU4LDkgKzQ1OCw5
IEBAIHZvaWQgVk1JbnNwZWN0b3I6OmR1bXBSZWdpc3RlcnMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiAgICAgZGF0YUxvZ0YoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIH0KIAotdm9pZCBWTUlu
c3BlY3Rvcjo6ZHVtcFN0YWNrKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1bnNpZ25lZCBmcmFt
ZXNUb1NraXApCit2b2lkIFZNSW5zcGVjdG9yOjpkdW1wU3RhY2soSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lc1RvU2tp
cCkKIHsKLSAgICBpZiAoIWVuc3VyZUN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKHRvcENhbGxGcmFt
ZSkpCisgICAgaWYgKCFlbnN1cmVDdXJyZW50VGhyZWFkT3duc0pTTG9jayhnbG9iYWxPYmplY3Qp
KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF0b3BDYWxsRnJhbWUpCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgKaW5kZXggZDRlZmI3
ODliNWM3NmVmMzE3ZmRkMDM3MTEwMzVmZTIxYTA0ZmY3MC4uNWY1YzFkOGFlZDhlMDM0YjdiNjgy
MWU1MWQ0NDk1MjdjNjQ1YzRmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL1ZNSW5zcGVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5z
cGVjdG9yLmgKQEAgLTY1LDE2ICs2NSwxNiBAQCBjbGFzcyBWTUluc3BlY3RvciB7CiAgICAgRXhw
ZWN0ZWQ8Ym9vbCwgRXJyb3I+IGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGNvbnN0IExvY2tlciYs
IHZvaWQqKTsKICAgICBFeHBlY3RlZDxDb2RlQmxvY2sqLCBFcnJvcj4gY29kZUJsb2NrRm9yTWFj
aGluZVBDKGNvbnN0IExvY2tlciYsIHZvaWQqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGN1cnJlbnRUaHJlYWRPd25zSlNMb2NrKEV4ZWNTdGF0ZSopOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdjKEV4ZWNTdGF0ZSopOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGVkZW5HQyhFeGVjU3RhdGUqKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBjdXJyZW50VGhyZWFkT3duc0pTTG9jayhKU0dsb2JhbE9iamVjdCop
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdjKEpTR2xvYmFsT2JqZWN0Kik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZWRlbkdDKEpTR2xvYmFsT2JqZWN0
Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaXNJbkhlYXAoSGVhcCosIHZv
aWQqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBpc1ZhbGlkQ2VsbChIZWFw
KiwgSlNDZWxsKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaXNWYWxpZENv
ZGVCbG9jayhFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JGcmFtZShDYWxsRnJhbWUqIHRvcENhbGxGcmFt
ZSwgdW5zaWduZWQgZnJhbWVOdW1iZXIpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGR1bXBDYWxsRnJhbWUoQ2FsbEZyYW1lKiwgdW5zaWduZWQgZnJhbWVzVG9Ta2lwID0gMCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaXNWYWxpZENvZGVCbG9jayhKU0ds
b2JhbE9iamVjdCosIENvZGVCbG9jayopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBD
b2RlQmxvY2sqIGNvZGVCbG9ja0ZvckZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiB0
b3BDYWxsRnJhbWUsIHVuc2lnbmVkIGZyYW1lTnVtYmVyKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBkdW1wQ2FsbEZyYW1lKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwg
dW5zaWduZWQgZnJhbWVzVG9Ta2lwID0gMCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBkdW1wU3RhY2soQ2FsbEZyYW1lKiB0b3BDYWxsRnJhbWUsIHVuc2lnbmVkIGZy
YW1lc1RvU2tpcCA9IDApOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGR1bXBT
dGFjayhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lLCB1bnNpZ25lZCBm
cmFtZXNUb1NraXAgPSAwKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkdW1w
VmFsdWUoSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZHVtcENl
bGxNZW1vcnkoSlNDZWxsKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZHVt
cENlbGxNZW1vcnlUb1N0cmVhbShKU0NlbGwqLCBQcmludFN0cmVhbSYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAppbmRleCA5N2Jj
MmQ2MzhhNTkwYTYwNWUyNmY3ZjU0M2VlZTA2ZDMyNDkxYjBlLi5kYjQwYWJlOGFiNDI2OWEzYzY1
MDIwZmVhZDU0YmNjMDY1ZWZiNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaApAQCAtODEsNyArODEsNyBAQCBzdHJ1Y3QgQ2Fs
bEluZm9ybWF0aW9uIHsKIAogY2xhc3MgV2FzbUNhbGxpbmdDb252ZW50aW9uIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzID0gRXhlY1N0
YXRlOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgaGVhZGVyU2l6ZUluQnl0ZXMgPSBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rlcik7CiAKICAgICBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24oVmVjdG9yPFJlZz4mJiBncHJzLCBWZWN0b3I8UmVnPiYmIGZwcnMsIFZlY3RvcjxH
UFJSZWc+JiYgc2NyYXRjaGVzLCBSZWdpc3RlclNldCYmIGNhbGxlZVNhdmVzLCBSZWdpc3RlclNl
dCYmIGNhbGxlclNhdmVzKQogICAgICAgICA6IGdwckFyZ3MoV1RGTW92ZShncHJzKSkKQEAgLTE2
Niw3ICsxNjYsNyBAQCBjbGFzcyBXYXNtQ2FsbGluZ0NvbnZlbnRpb24gewogCiBjbGFzcyBKU0Nh
bGxpbmdDb252ZW50aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGhlYWRlclNpemVJbkJ5dGVzID0gRXhlY1N0YXRlOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBz
aXplb2YoUmVnaXN0ZXIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaGVhZGVyU2l6
ZUluQnl0ZXMgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZihSZWdp
c3Rlcik7CiAKICAgICAvLyB2bUVudHJ5VG9XYXNtIHBhc3NlcyB0aGUgSlNXZWJBc3NlbWJseUlu
c3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gV2FzbTo6Q29udGV4dConcwogICAgIC8vIGluc3RhbmNl
IGFzIHRoZSBmaXJzdCBKUyBhcmd1bWVudCB3aGVuIHdlJ3JlIG5vdCB1c2luZyBmYXN0IFRMUyB0
byBob2xkIHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVt
YmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAppbmRl
eCA5N2JiMTBjOThlOGNmOTNlYTczZDE5ODU5ZWE3OGE2NDlkODY2OGNmLi43YTJmODZmZDMwNmZj
ZjFmNDNhMGY4NzIwZDgwZDg1NjZjOTliZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRW1iZWRkZXIuaApAQCAtMzcsNyArMzcsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIENhbGxGcmFtZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIAogbmFtZXNwYWNl
IFdhc20gewogCkBAIC01Miw3ICs1MSw3IEBAIHN0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxs
OwogdXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4oQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0
dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCk+OwogCiAvLyBDYWxsZWQgYXMgc29vbiBhcyBh
biBleGNlcHRpb24gaXMgZGV0ZWN0ZWQuIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIFBDIHRvIGNv
bnRpbnVlIGF0LgotdXNpbmcgVGhyb3dXYXNtRXhjZXB0aW9uID0gdm9pZCogKCopKEV4ZWNTdGF0
ZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKik7Cit1c2luZyBUaHJvd1dhc21FeGNl
cHRpb24gPSB2b2lkKiAoKikoQ2FsbEZyYW1lKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSW5zdGFu
Y2UqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCmluZGV4IDFhZGU4YThlOTQ0OWRhOGIzZjA2
Y2QzZDY5NDI1NzkyZTZjNWRmOWEuLmEyZWZiMTlkMTUzOTE2NjY4Y2FjOGIxYmY3ZmRmNThlMWZi
YjYwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRp
b25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5j
cHAKQEAgLTI4LDYgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1
ZGUgIkZyYW1lVHJhY2Vycy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNp
bmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgiCkBA
IC00Niw2ICs0OSwyMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dCYWRJNjQoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSkKK3sKKyAgICBWTSYgdm0gPSBpbnN0YW5jZS0+dm0oKTsKKyAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIHsKKyAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAg
IGF1dG8qIGVycm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGds
b2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoRXJyb3JUeXBlOjpUeXBlRXJyb3IpLCAiaTY0IG5v
dCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0
aW9uIl9zKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBlcnJvcik7CisgICAgfQorCisgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKKyAg
ICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7Cit9CisKIHN0YXRpYyBib29sIHNob3Vs
ZFRyaWdnZXJPTUdDb21waWxlKFRpZXJVcENvdW50JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFj
ZW1lbnQsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgaWYgKCFyZXBsYWNlbWVudCAm
JiAhdGllclVwLmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCmluZGV4IDFlN2JhMWM4MWEx
MDU1ZTk0MDQwMWEyNTcxZjBiN2Y5MWU1ZmQyOWQuLjg5YmRmYjAyNjI5ZmEyYWZmODA0NTVhZGIz
ZDYyN2FmMmE1OTM4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJh
dGlvbnMuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBJbnN0YW5jZTsKIAogdm9pZCBKSVRfT1BF
UkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhQcm9iZTo6Q29udGV4dCYpIFdURl9JTlRFUk5BTDsK
IHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEluc3RhbmNlKiwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRocm93QmFkSTY0KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopIFdURl9JTlRFUk5BTDsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwCmluZGV4IDhlMWI5Y2ViYmVhODkxMmM0NzVlMTk1NmMzMTczMGE2YTAxZjExYTYuLjFl
ZDZjZmZmYTBkNDRkMDEzMWFiYzdiZTM3MGNhMDJjZDU0NmNmZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKQEAgLTEzMCw5ICsxMzAsOSBAQCBib29sIFBsYW46OnRy
eVJlbW92ZUNvbnRleHRBbmRDYW5jZWxJZkxhc3QoQ29udGV4dCYgY29udGV4dCkKIAogdm9pZCBQ
bGFuOjpmYWlsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIFN0cmluZyYmIGVycm9yTWVz
c2FnZSkKIHsKLSAgICBBU1NFUlQoZXJyb3JNZXNzYWdlKTsKICAgICBpZiAoZmFpbGVkKCkpCiAg
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZXJyb3JNZXNzYWdlKTsKICAgICBkYXRhTG9nTG5J
ZihXYXNtUGxhbkludGVybmFsOjp2ZXJib3NlLCAiZmFpbGluZyB3aXRoIG1lc3NhZ2U6ICIsIGVy
cm9yTWVzc2FnZSk7CiAgICAgbV9lcnJvck1lc3NhZ2UgPSBXVEZNb3ZlKGVycm9yTWVzc2FnZSk7
CiAgICAgY29tcGxldGUobG9ja2VyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
VG9XYXNtLmNwcAppbmRleCAxNzJlODNhZjQwNTYzNGNkNGJhOTgyMTJiNzdlYjQ5MjJiOTZjZWYy
Li5lOGFkYmY0YjRiNjI4YzkwMDhiODQwM2E1N2E1ODI0ZmRiOWIwNzNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCkBAIC03NiwxMSArNzYsMTEgQEAgaW5s
aW5lIHZvaWQgYm94V2FzbVJlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgV2FzbTo6VHlwZSB0eXBl
LCBSZWcgc3JjLCBKU1ZhbHVlUmUKIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBtdWNoIGVhc2llciB0
byBpbmxpbmUgdGhpcyB3aGVuIHdlIGhhdmUgYSBnbG9iYWwgR0MsIHdoaWNoIGNvdWxkIHByb2Jh
Ymx5IG1lYW4gd2UgY291bGQgYXZvaWQKIC8vIHNwaWxsaW5nIHRoZSByZXN1bHRzIG9udG8gdGhl
IHN0YWNrLgogLy8gU2F2ZWQgcmVzdWx0IHJlZ2lzdGVycyBzaG91bGQgYmUgcGxhY2VkIG9uIHRo
ZSBzdGFjayBqdXN0IGFib3ZlIHRoZSBsYXN0IHN0YWNrIHJlc3VsdC4KLXN0YXRpYyBKU0FycmF5
KiBhbGxvY2F0ZVJlc3VsdHNBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFdhc206Okluc3RhbmNlKiBp
bnN0YW5jZSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUsIEpTVmFsdWUqIHN0YWNrUG9pbnRlckZyb21DYWxsZWUpCitzdGF0aWMgSklUX09QRVJB
VElPTiBKU0FycmF5KiBhbGxvY2F0ZVJlc3VsdHNBcnJheShDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
V2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgSlNWYWx1ZSogc3RhY2tQb2ludGVyRnJvbUNhbGxlZSkK
IHsKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3du
ZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOwogICAgIFZNJiB2bSA9IGpzSW5zdGFuY2UtPnZt
KCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKICAgICBP
YmplY3RJbml0aWFsaXphdGlvblNjb3BlIGluaXRpYWxpemF0aW9uU2NvcGUoZ2xvYmFsT2JqZWN0
LT52bSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eS5jcHAKaW5kZXggMzk0NjRhOGFjMDMzODEzZjI3NzIwNDFlNjhkYTdkMDAzOTc0YzA2ZC4uMjk1
YjJkMzUwNjYxN2E2ZTVlOWM5MzgwN2Q2ZDA4ZWIyOGY4NDBhNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKQEAgLTEyMywxOSArMTIzLDE4
IEBAIEpTV2ViQXNzZW1ibHk6OkpTV2ViQXNzZW1ibHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKIH0KIAotc3RhdGljIHZvaWQgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgQ2F0Y2hT
Y29wZSYgY2F0Y2hTY29wZSwgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UpCitzdGF0aWMgdm9p
ZCByZWplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2F0Y2hTY29wZSYgY2F0Y2hT
Y29wZSwgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UpCiB7CiAgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOwogICAgIEFTU0VSVChleGNlcHRpb24pOwog
ICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICBwcm9taXNlLT5yZWplY3QoZXhl
YywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKKyAgICBwcm9taXNlLT5yZWplY3QoZ2xvYmFsT2JqZWN0
LCBleGNlcHRpb24tPnZhbHVlKCkpOwogICAgIENMRUFSX0FORF9SRVRVUk5fSUZfRVhDRVBUSU9O
KGNhdGNoU2NvcGUsIHZvaWQoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYkFzc2VtYmx5TW9kdWxl
VmFsaWRhdGVBc3luY0ludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQq
IHByb21pc2UsIFZlY3Rvcjx1aW50OF90PiYmIHNvdXJjZSkKK3N0YXRpYyB2b2lkIHdlYkFzc2Vt
Ymx5TW9kdWxlVmFsaWRhdGVBc3luY0ludGVybmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2Up
CiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogCiAgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CiAgICAgZGVw
ZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgZ2xvYmFsT2JqZWN0KSk7CkBAIC0x
NDUsMTQgKzE0NCwxMyBAQCBzdGF0aWMgdm9pZCB3ZWJBc3NlbWJseU1vZHVsZVZhbGlkYXRlQXN5
bmNJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTUHJvbWlzZURlZgogICAgIFdhc206Ok1vZHVs
ZTo6dmFsaWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRl
U2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGdsb2JhbE9i
amVjdCwgJnZtXSAoV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRh
YmxlIHsKICAgICAgICAgdm0ucHJvbWlzZURlZmVycmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24o
cHJvbWlzZSwgW3Byb21pc2UsIGdsb2JhbE9iamVjdCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQp
LCAmdm1dICgpIG11dGFibGUgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwotICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgICAgICBKU1ZhbHVlIG1vZHVsZSA9IEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlN
b2R1bGVTdHJ1Y3R1cmUoKSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIEpTVmFsdWUg
bW9kdWxlID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUocmVz
dWx0KSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgICAg
ICAgICByZWplY3QoZ2xvYmFsT2JqZWN0LCBzY29wZSwgcHJvbWlzZSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZl
KGV4ZWMsIG1vZHVsZSk7CisgICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlKGdsb2JhbE9iamVj
dCwgbW9kdWxlKTsKICAgICAgICAgICAgIENMRUFSX0FORF9SRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwogICAgICAgICB9KTsKICAgICB9KSk7CkBAIC0xNjMsNTkgKzE2MSw1OSBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseUNvbXBpbGVG
dW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iYQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0
ZShjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCk7CisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21p
c2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIHsK
ICAgICAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUo
dm0sIGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKGNh
dGNoU2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgcmVqZWN0KGNhbGxGcmFtZSwgY2F0
Y2hTY29wZSwgcHJvbWlzZSk7CisgICAgICAgICAgICByZWplY3QoZ2xvYmFsT2JqZWN0LCBjYXRj
aFNjb3BlLCBwcm9taXNlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgd2ViQXNzZW1ibHlN
b2R1bGVWYWxpZGF0ZUFzeW5jSW50ZXJuYWwoY2FsbEZyYW1lLCBwcm9taXNlLCBXVEZNb3ZlKHNv
dXJjZSkpOworICAgICAgICAgICAgd2ViQXNzZW1ibHlNb2R1bGVWYWxpZGF0ZUFzeW5jSW50ZXJu
YWwoZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBXVEZNb3ZlKHNvdXJjZSkpOwogCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKICAgICB9CiB9CiAKIGVu
dW0gY2xhc3MgUmVzb2x2ZSB7IFdpdGhJbnN0YW5jZSwgV2l0aE1vZHVsZVJlY29yZCwgV2l0aE1v
ZHVsZUFuZEluc3RhbmNlIH07Ci1zdGF0aWMgdm9pZCByZXNvbHZlKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU09iamVjdCogaW1wb3J0
T2JqZWN0LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIGNvZGVCbG9jaywgUmVzb2x2ZSByZXNvbHZl
S2luZCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKK3N0YXRpYyB2b2lkIHJlc29s
dmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2VEZWZlcnJl
ZCogcHJvbWlzZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJs
eU1vZHVsZSogbW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBSZWY8V2FzbTo6Q29kZUJs
b2NrPiYmIGNvZGVCbG9jaywgUmVzb2x2ZSByZXNvbHZlS2luZCwgV2FzbTo6Q3JlYXRpb25Nb2Rl
IGNyZWF0aW9uTW9kZSkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7Ci0gICAgaW5zdGFuY2UtPmZpbmFsaXplQ3JlYXRpb24odm0sIGV4ZWMsIFdURk1vdmUoY29k
ZUJsb2NrKSwgaW1wb3J0T2JqZWN0LCBjcmVhdGlvbk1vZGUpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHJlamVjdChleGVjLCBzY29wZSwgcHJvbWlzZSkpOworICAgIGluc3RhbmNl
LT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoY29kZUJsb2NrKSwg
aW1wb3J0T2JqZWN0LCBjcmVhdGlvbk1vZGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHJlamVjdChnbG9iYWxPYmplY3QsIHNjb3BlLCBwcm9taXNlKSk7CiAKICAgICBpZiAocmVz
b2x2ZUtpbmQgPT0gUmVzb2x2ZTo6V2l0aEluc3RhbmNlKQotICAgICAgICBwcm9taXNlLT5yZXNv
bHZlKGV4ZWMsIGluc3RhbmNlKTsKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShnbG9iYWxPYmpl
Y3QsIGluc3RhbmNlKTsKICAgICBlbHNlIGlmIChyZXNvbHZlS2luZCA9PSBSZXNvbHZlOjpXaXRo
TW9kdWxlUmVjb3JkKSB7CiAgICAgICAgIGF1dG8qIG1vZHVsZVJlY29yZCA9IGluc3RhbmNlLT5t
b2R1bGVOYW1lc3BhY2VPYmplY3QoKS0+bW9kdWxlUmVjb3JkKCk7CiAgICAgICAgIGlmIChPcHRp
b25zOjpkdW1wTW9kdWxlUmVjb3JkKCkpCiAgICAgICAgICAgICBtb2R1bGVSZWNvcmQtPmR1bXAo
KTsKLSAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZShleGVjLCBtb2R1bGVSZWNvcmQpOworICAgICAg
ICBwcm9taXNlLT5yZXNvbHZlKGdsb2JhbE9iamVjdCwgbW9kdWxlUmVjb3JkKTsKICAgICB9IGVs
c2UgewotICAgICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhl
Yyk7CisgICAgICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9i
YWxPYmplY3QpOwogICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIm1vZHVsZSJfcyksIG1vZHVsZSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5zdGFuY2UiX3MpLCBpbnN0YW5j
ZSk7Ci0gICAgICAgIHByb21pc2UtPnJlc29sdmUoZXhlYywgcmVzdWx0KTsKKyAgICAgICAgcHJv
bWlzZS0+cmVzb2x2ZShnbG9iYWxPYmplY3QsIHJlc3VsdCk7CiAgICAgfQogICAgIENMRUFSX0FO
RF9SRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogfQogCi12b2lkIEpTV2ViQXNz
ZW1ibHk6OndlYkFzc2VtYmx5TW9kdWxlVmFsaWRhdGVBc3luYyhFeGVjU3RhdGUqIGV4ZWMsIEpT
UHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UpCit2b2lk
IEpTV2ViQXNzZW1ibHk6OndlYkFzc2VtYmx5TW9kdWxlVmFsaWRhdGVBc3luYyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgVmVjdG9yPHVp
bnQ4X3Q+JiYgc291cmNlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwotICAgIHdlYkFzc2VtYmx5TW9kdWxlVmFsaWRhdGVBc3luY0ludGVybmFs
KGV4ZWMsIHByb21pc2UsIFdURk1vdmUoc291cmNlKSk7CisgICAgd2ViQXNzZW1ibHlNb2R1bGVW
YWxpZGF0ZUFzeW5jSW50ZXJuYWwoZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBXVEZNb3ZlKHNvdXJj
ZSkpOwogICAgIENMRUFSX0FORF9SRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIHZvaWQo
KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxl
LCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIFJl
c29sdmUgcmVzb2x2ZUtpbmQsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCitzdGF0
aWMgdm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUs
IEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgUmVz
b2x2ZSByZXNvbHZlS2luZCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgLy8gSW4gb3JkZXIg
dG8gYXZvaWQgcG90ZW50aWFsbHkgcmVjb21waWxpbmcgYSBtb2R1bGUuIFdlIGZpcnN0IGdhdGhl
ciBhbGwgdGhlIGltcG9ydC9tZW1vcnkgaW5mb3JtYXRpb24gcHJpb3IgdG8gY29tcGlsaW5nIGNv
ZGUuCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6Y3JlYXRlKHZtLCBleGVjLCBtb2R1bGVLZXksIG1vZHVsZSwgaW1wb3J0T2JqZWN0
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPndlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1
cmUoKSwgUmVmPFdhc206Ok1vZHVsZT4obW9kdWxlLT5tb2R1bGUoKSksIGNyZWF0aW9uTW9kZSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9t
aXNlKSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIG1vZHVsZUtleSwgbW9kdWxlLCBp
bXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgp
LCBSZWY8V2FzbTo6TW9kdWxlPihtb2R1bGUtPm1vZHVsZSgpKSwgY3JlYXRpb25Nb2RlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCByZWplY3QoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
cHJvbWlzZSkpOwogCiAgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CiAg
ICAgLy8gVGhlIGluc3RhbmNlIGtlZXBzIHRoZSBtb2R1bGUgYWxpdmUuCkBAIC0yMjYsNTUgKzIy
NCw1MSBAQCBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEpTVwogICAgIG1vZHVsZS0+bW9kdWxlKCkuY29t
cGlsZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgY3JlYXRl
U2hhcmVkVGFzazxXYXNtOjpDb2RlQmxvY2s6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGluc3Rh
bmNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9uTW9kZSwgJnZt
XSAoUmVmPFdhc206OkNvZGVCbG9jaz4mJiByZWZDb2RlQmxvY2spIG11dGFibGUgewogICAgICAg
ICBSZWZQdHI8V2FzbTo6Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBXVEZNb3ZlKHJlZkNvZGVCbG9j
ayk7CiAgICAgICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHBy
b21pc2UsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIHJlc29sdmVL
aW5kLCBjcmVhdGlvbk1vZGUsICZ2bSwgY29kZUJsb2NrID0gV1RGTW92ZShjb2RlQmxvY2spXSAo
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGluc3RhbmNlLT5nbG9i
YWxPYmplY3Qodm0pLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgICAgICByZXNvbHZlKHZtLCBleGVj
LCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGNvZGVCbG9jay5yZWxl
YXNlTm9uTnVsbCgpLCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlKTsKKyAgICAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgICAgICAgICByZXNvbHZlKHZtLCBnbG9iYWxPYmplY3QsIHByb21pc2UsIGluc3RhbmNlLCBt
b2R1bGUsIGltcG9ydE9iamVjdCwgY29kZUJsb2NrLnJlbGVhc2VOb25OdWxsKCksIHJlc29sdmVL
aW5kLCBjcmVhdGlvbk1vZGUpOwogICAgICAgICB9KTsKICAgICB9KSwgJldhc206OmNyZWF0ZUpT
VG9XYXNtV3JhcHBlciwgJldhc206Ondhc21Ub0pTRXhjZXB0aW9uKTsKIH0KIAotc3RhdGljIHZv
aWQgY29tcGlsZUFuZEluc3RhbnRpYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZSwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1ZhbHVl
IGJ1ZmZlciwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgUmVzb2x2ZSByZXNvbHZlS2luZCwgV2Fz
bTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKK3N0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0
YW50aWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpTVmFsdWUgYnVm
ZmVyLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBSZXNvbHZlIHJlc29sdmVLaW5kLCBXYXNtOjpD
cmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKIAotICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKLQogICAgIEpTQ2VsbCogbW9kdWxlS2V5Q2VsbCA9IGlkZW50aWZpZXJU
b0pTVmFsdWUodm0sIG1vZHVsZUtleSkuYXNDZWxsKCk7CiAgICAgVmVjdG9yPFN0cm9uZzxKU0Nl
bGw+PiBkZXBlbmRlbmNpZXM7CiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxs
Pih2bSwgaW1wb3J0T2JqZWN0KSk7CiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlND
ZWxsPih2bSwgbW9kdWxlS2V5Q2VsbCkpOwogICAgIHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5h
ZGRQZW5kaW5nUHJvbWlzZSh2bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKIAot
ICAgIFZlY3Rvcjx1aW50OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUo
dm0sIGV4ZWMsIGJ1ZmZlcik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgcmVqZWN0
KGV4ZWMsIHNjb3BlLCBwcm9taXNlKSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNvdXJjZSA9IGNy
ZWF0ZVNvdXJjZUJ1ZmZlckZyb21WYWx1ZSh2bSwgZ2xvYmFsT2JqZWN0LCBidWZmZXIpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJlamVjdChnbG9iYWxPYmplY3QsIHNjb3BlLCBw
cm9taXNlKSk7CiAKICAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250
ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxs
YmFja1R5cGU+KFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIG1vZHVsZUtleUNlbGwsIGdsb2JhbE9i
amVjdCwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9uTW9kZSwgJnZtXSAoV2FzbTo6TW9kdWxlOjpWYWxp
ZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgdm0ucHJvbWlzZURlZmVy
cmVkVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGltcG9ydE9iamVj
dCwgbW9kdWxlS2V5Q2VsbCwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCks
IHJlc29sdmVLaW5kLCBjcmVhdGlvbk1vZGUsICZ2bV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgICAgIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0
dWIodm0sIGV4ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSwg
V1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVs
ZSA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHJlc3VsdCkp
OwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNjb3BlLCBwcm9taXNlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGdsb2JhbE9iamVjdCwgc2NvcGUsIHByb21pc2UpOwogCi0gICAg
ICAgICAgICBjb25zdCBJZGVudGlmaWVyIG1vZHVsZUtleSA9IEpTVmFsdWUobW9kdWxlS2V5Q2Vs
bCkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgbW9k
dWxlS2V5ID0gSlNWYWx1ZShtb2R1bGVLZXlDZWxsKS50b1Byb3BlcnR5S2V5KGdsb2JhbE9iamVj
dCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpOworICAgICAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZ2xvYmFsT2JqZWN0LCBzY29wZSwgcHJvbWlzZSk7CiAKLSAg
ICAgICAgICAgIGluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9taXNlLCBtb2R1bGUsIGltcG9ydE9i
amVjdCwgbW9kdWxlS2V5LCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlKTsKKyAgICAgICAgICAg
IGluc3RhbnRpYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb21pc2UsIG1vZHVsZSwgaW1wb3J0T2Jq
ZWN0LCBtb2R1bGVLZXksIHJlc29sdmVLaW5kLCBjcmVhdGlvbk1vZGUpOwogICAgICAgICB9KTsK
ICAgICB9KSk7CiB9CiAKLUpTVmFsdWUgSlNXZWJBc3NlbWJseTo6aW5zdGFudGlhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgY29uc3QgSWRlbnRpZmllciYg
bW9kdWxlS2V5LCBKU1ZhbHVlIGFyZ3VtZW50KQorSlNWYWx1ZSBKU1dlYkFzc2VtYmx5OjppbnN0
YW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZSwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1ZhbHVlIGFyZ3VtZW50KQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgY29tcGlsZUFuZEluc3RhbnRpYXRlKHZt
LCBleGVjLCBwcm9taXNlLCBtb2R1bGVLZXksIGFyZ3VtZW50LCBudWxscHRyLCBSZXNvbHZlOjpX
aXRoTW9kdWxlUmVjb3JkLCBXYXNtOjpDcmVhdGlvbk1vZGU6OkZyb21Nb2R1bGVMb2FkZXIpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBjb21waWxlQW5kSW5zdGFudGlh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvbWlzZSwgbW9kdWxlS2V5LCBhcmd1bWVudCwgbnVsbHB0
ciwgUmVzb2x2ZTo6V2l0aE1vZHVsZVJlY29yZCwgV2FzbTo6Q3JlYXRpb25Nb2RlOjpGcm9tTW9k
dWxlTG9hZGVyKTsKICAgICByZXR1cm4gcHJvbWlzZS0+cHJvbWlzZSgpOwogfQogCi1zdGF0aWMg
dm9pZCB3ZWJBc3NlbWJseU1vZHVsZUluc3RhbnRpbmF0ZUFzeW5jSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgVmVjdG9yPHVpbnQ4X3Q+JiYgc291
cmNlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0KQorc3RhdGljIHZvaWQgd2ViQXNzZW1ibHlNb2R1
bGVJbnN0YW50aW5hdGVBc3luY0ludGVybmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBWZWN0b3I8dWludDhfdD4mJiBzb3VyY2UsIEpT
T2JqZWN0KiBpbXBvcnRPYmplY3QpCiB7Ci0gICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiBk
ZXBlbmRlbmNpZXM7CiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwg
aW1wb3J0T2JqZWN0KSk7CkBAIC0yODQsMjIgKzI3OCwyMSBAQCBzdGF0aWMgdm9pZCB3ZWJBc3Nl
bWJseU1vZHVsZUluc3RhbnRpbmF0ZUFzeW5jSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1By
b21pcwogICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdU
Rk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlw
ZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1
bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAgICAgICB2bS5wcm9t
aXNlRGVmZXJyZWRUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW1w
b3J0T2JqZWN0LCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXSAo
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKLSAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gSlNXZWJB
c3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICAgICAgSlNX
ZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1
Yih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlU3RydWN0
dXJlKCksIFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2NvcGUs
IHByb21pc2UpOworICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgcHJvbWlzZSk7CiAKLSAgICAgICAgICAgIGluc3RhbnRpYXRlKHZtLCBleGVjLCBwcm9t
aXNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVQ
cml2YXRlTW9kdWxlS2V5KCksICBSZXNvbHZlOjpXaXRoTW9kdWxlQW5kSW5zdGFuY2UsIFdhc206
OkNyZWF0aW9uTW9kZTo6RnJvbUpTKTsKLSAgICAgICAgICAgIENMRUFSX0FORF9SRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCByZWplY3QoZXhlYywgc2NvcGUsIHByb21pc2UpKTsKKyAgICAgICAg
ICAgIGluc3RhbnRpYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb21pc2UsIG1vZHVsZSwgaW1wb3J0
T2JqZWN0LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZVByaXZhdGVNb2R1bGVLZXkoKSwg
IFJlc29sdmU6OldpdGhNb2R1bGVBbmRJbnN0YW5jZSwgV2FzbTo6Q3JlYXRpb25Nb2RlOjpGcm9t
SlMpOworICAgICAgICAgICAgQ0xFQVJfQU5EX1JFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHJl
amVjdChnbG9iYWxPYmplY3QsIHNjb3BlLCBwcm9taXNlKSk7CiAgICAgICAgIH0pOwogICAgIH0p
KTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Ojp3ZWJBc3NlbWJseU1vZHVsZUluc3RhbnRpbmF0
ZUFzeW5jKEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UsIFZlY3Rv
cjx1aW50OF90PiYmIHNvdXJjZSwgSlNPYmplY3QqIGltcG9ydGVkT2JqZWN0KQordm9pZCBKU1dl
YkFzc2VtYmx5Ojp3ZWJBc3NlbWJseU1vZHVsZUluc3RhbnRpbmF0ZUFzeW5jKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBWZWN0b3I8dWlu
dDhfdD4mJiBzb3VyY2UsIEpTT2JqZWN0KiBpbXBvcnRlZE9iamVjdCkKIHsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICB3ZWJBc3NlbWJseU1v
ZHVsZUluc3RhbnRpbmF0ZUFzeW5jSW50ZXJuYWwoZXhlYywgcHJvbWlzZSwgV1RGTW92ZShzb3Vy
Y2UpLCBpbXBvcnRlZE9iamVjdCk7CisgICAgd2ViQXNzZW1ibHlNb2R1bGVJbnN0YW50aW5hdGVB
c3luY0ludGVybmFsKGdsb2JhbE9iamVjdCwgcHJvbWlzZSwgV1RGTW92ZShzb3VyY2UpLCBpbXBv
cnRlZE9iamVjdCk7CiAgICAgQ0xFQVJfQU5EX1JFVFVSTl9JRl9FWENFUFRJT04oY2F0Y2hTY29w
ZSwgdm9pZCgpKTsKIH0KIApAQCAtMzA4LDcgKzMwMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEpTR2xvYmFsT2JqZWN0
KiBnCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHBy
b21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGNhbGxGcmFtZSwgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURlZmVycmVk
Ojp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgewpAQCAtMzE3LDE1ICszMTAsMTUgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0
ZUZ1bmMoSlNHbG9iYWxPYmplY3QqIGcKICAgICAgICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7CiAgICAgICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3Qg
PSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFpbXBv
cnRBcmd1bWVudC5pc1VuZGVmaW5lZCgpICYmICFpbXBvcnRPYmplY3QpKSB7Ci0gICAgICAgICAg
ICBwcm9taXNlLT5yZWplY3QoY2FsbEZyYW1lLCBjcmVhdGVUeXBlRXJyb3IoY2FsbEZyYW1lLAor
ICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGdsb2JhbE9iamVjdCwgY3JlYXRlVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwKICAgICAgICAgICAgICAgICAic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFz
c2VtYmx5Lmluc3RhbnRpYXRlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCJfcywgZGVm
YXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHZtLCBpbXBvcnRBcmd1bWVu
dCkpKTsKICAgICAgICAgICAgIENMRUFSX0FORF9SRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEpTVmFsdWUgZmlyc3RBcmd1bWVudCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CiAgICAgICAgICAgICBpZiAoYXV0byogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dl
YkFzc2VtYmx5TW9kdWxlKj4odm0sIGZpcnN0QXJndW1lbnQpKQotICAgICAgICAgICAgICAgIGlu
c3RhbnRpYXRlKHZtLCBjYWxsRnJhbWUsIHByb21pc2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZVByaXZhdGVNb2R1bGVLZXkoKSwgUmVzb2x2ZTo6
V2l0aEluc3RhbmNlLCBXYXNtOjpDcmVhdGlvbk1vZGU6OkZyb21KUyk7CisgICAgICAgICAgICAg
ICAgaW5zdGFudGlhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvbWlzZSwgbW9kdWxlLCBpbXBvcnRP
YmplY3QsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlUHJpdmF0ZU1vZHVsZUtleSgpLCBS
ZXNvbHZlOjpXaXRoSW5zdGFuY2UsIFdhc206OkNyZWF0aW9uTW9kZTo6RnJvbUpTKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21waWxlQW5kSW5zdGFudGlhdGUodm0sIGNh
bGxGcmFtZSwgcHJvbWlzZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVQcml2YXRlTW9k
dWxlS2V5KCksIGZpcnN0QXJndW1lbnQsIGltcG9ydE9iamVjdCwgUmVzb2x2ZTo6V2l0aE1vZHVs
ZUFuZEluc3RhbmNlLCBXYXNtOjpDcmVhdGlvbk1vZGU6OkZyb21KUyk7CisgICAgICAgICAgICAg
ICAgY29tcGlsZUFuZEluc3RhbnRpYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb21pc2UsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlUHJpdmF0ZU1vZHVsZUtleSgpLCBmaXJzdEFyZ3VtZW50
LCBpbXBvcnRPYmplY3QsIFJlc29sdmU6OldpdGhNb2R1bGVBbmRJbnN0YW5jZSwgV2FzbTo6Q3Jl
YXRpb25Nb2RlOjpGcm9tSlMpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwpAQCAtMzM3LDcgKzMzMCw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VmFsaWRhdGVGdW5jKEpTR2xv
YmFsT2JqZWN0KiBnbG9iCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8gW2Jhc2UsIGJ5
dGVTaXplXSA9IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApKTsKKyAgICBhdXRvIFtiYXNlLCBieXRlU2l6ZV0gPSBnZXRXYXNtQnVmZmVyRnJv
bVZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgQkJRUGxhbiBwbGFu
KCZ2bS53YXNtQ29udGV4dCwgQkJRUGxhbjo6VmFsaWRhdGlvbiwgUGxhbjo6ZG9udEZpbmFsaXpl
KCkpOwogICAgIC8vIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHRocm93IGFuIE9PTSBleGNlcHRp
b24gaGVyZSBpZiB3ZSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgd2lsbCBPT00uCkBAIC0zNTAsMTQg
KzM0MywxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5Q29tcGls
ZVN0cmVhbWluZ0ludGVybmFsKEpTR2xvYmFsT2JqZWN0KgogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKIAotICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlID0gSlNQcm9taXNlRGVmZXJyZWQ6
OnRyeUNyZWF0ZShjYWxsRnJhbWUsIGdsb2JhbE9iamVjdCk7CisgICAgSlNQcm9taXNlRGVmZXJy
ZWQqIHByb21pc2UgPSBKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCk7
CiAKICAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKICAgICBkZXBlbmRl
bmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBnbG9iYWxPYmplY3QpKTsKICAgICB2bS5w
cm9taXNlRGVmZXJyZWRUaW1lci0+YWRkUGVuZGluZ1Byb21pc2Uodm0sIHByb21pc2UsIFdURk1v
dmUoZGVwZW5kZW5jaWVzKSk7CiAKICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSgpLT5jb21waWxlU3RyZWFtaW5nKQotICAgICAgICBnbG9iYWxPYmplY3QtPmds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmNvbXBpbGVTdHJlYW1pbmcoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIHByb21pc2UsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgICAgICBnbG9i
YWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmNvbXBpbGVTdHJlYW1pbmcoZ2xv
YmFsT2JqZWN0LCBwcm9taXNlLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKICAgICBlbHNlIHsK
ICAgICAgICAgLy8gQ29tcGlsZVN0cmVhbWluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGpzYywgb25s
eSBpbiBicm93c2VyIGVudmlyb25tZW50CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMzczLDcgKzM2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1i
bHlJbnN0YW50aWF0ZVN0cmVhbWluZ0ludGVybmFsKEpTR2xvYmFsT2JqCiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1Byb21pc2VE
ZWZlcnJlZDo6dHJ5Q3JlYXRlKGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZSA9IEpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZ2xvYmFs
T2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIHsKICAgICAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CkBAIC0zODEsNyArMzc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCB3ZWJBc3NlbWJseUluc3RhbnRpYXRlU3RyZWFtaW5nSW50ZXJuYWwoSlNHbG9iYWxPYmoKICAg
ICAgICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSk7CiAg
ICAgICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3Qo
KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFpbXBvcnRBcmd1bWVudC5pc1VuZGVmaW5lZCgpICYm
ICFpbXBvcnRPYmplY3QpKSB7Ci0gICAgICAgICAgICBwcm9taXNlLT5yZWplY3QoY2FsbEZyYW1l
LCBjcmVhdGVUeXBlRXJyb3IoY2FsbEZyYW1lLAorICAgICAgICAgICAgcHJvbWlzZS0+cmVqZWN0
KGdsb2JhbE9iamVjdCwgY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwKICAgICAgICAgICAg
ICAgICAic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5n
IG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCJfcywgZGVmYXVsdFNvdXJjZUFwcGVuZGVy
LCBydW50aW1lVHlwZUZvclZhbHVlKHZtLCBpbXBvcnRBcmd1bWVudCkpKTsKICAgICAgICAgICAg
IENMRUFSX0FORF9SRVRVUk5fSUZfRVhDRVBUSU9OKGNhdGNoU2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShwcm9taXNlLT5wcm9taXNlKCkpKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTM5Miw3ICszODUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVT
dHJlYW1pbmdJbnRlcm5hbChKU0dsb2JhbE9iagogICAgICAgICAgICAgICAgIHZtLnByb21pc2VE
ZWZlcnJlZFRpbWVyLT5hZGRQZW5kaW5nUHJvbWlzZSh2bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBl
bmRlbmNpZXMpKTsKIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5v
cmcvYi8xODQ4ODg+IGlmIHRoZXJlJ3MgYW4gaW1wb3J0T2JqZWN0IGFuZCBpdCBjb250YWlucyBh
IE1lbW9yeSwgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGUgbW9kdWxlIHdpdGggdGhlIHJpZ2h0IG1l
bW9yeSB0eXBlIChmYXN0IG9yIG5vdCkgYnkgbG9va2luZyBhdCB0aGUgbWVtb3J5J3MgdHlwZS4K
LSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCkt
Pmluc3RhbnRpYXRlU3RyZWFtaW5nKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBwcm9taXNlLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApLCBpbXBvcnRPYmplY3QpOworICAgICAgICAgICAgICAgIGds
b2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+aW5zdGFudGlhdGVTdHJlYW1p
bmcoZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBpbXBvcnRP
YmplY3QpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBJbnN0YW50
aWF0ZVN0cmVhbWluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGpzYywgb25seSBpbiBicm93c2VyIGVu
dmlyb25tZW50LgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5oCmluZGV4IDcxZTQxZGM1
ZDhmMDA2NjcyMzIxYjU5ODVlMTE5OTZjNTg3YTc4NDAuLjEyNzdkYjFhOGI0YWMyZDc5NjI1ZTBk
NWYxZmIzNzRkMjZkNThjZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmgKQEAgLTQyLDkgKzQyLDkgQEAgY2xhc3MgSlNXZWJBc3NlbWJseSBmaW5h
bCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHdlYkFzc2VtYmx5TW9kdWxlVmFsaWRhdGVB
c3luYyhFeGVjU3RhdGUqLCBKU1Byb21pc2VEZWZlcnJlZCosIFZlY3Rvcjx1aW50OF90PiYmKTsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB3ZWJBc3NlbWJseU1vZHVsZUluc3Rh
bnRpbmF0ZUFzeW5jKEV4ZWNTdGF0ZSosIEpTUHJvbWlzZURlZmVycmVkKiwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIEpTT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTVmFsdWUgaW5zdGFudGlhdGUoRXhlY1N0
YXRlKiwgSlNQcm9taXNlRGVmZXJyZWQqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgd2ViQXNzZW1ibHlNb2R1bGVWYWxpZGF0
ZUFzeW5jKEpTR2xvYmFsT2JqZWN0KiwgSlNQcm9taXNlRGVmZXJyZWQqLCBWZWN0b3I8dWludDhf
dD4mJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgd2ViQXNzZW1ibHlNb2R1
bGVJbnN0YW50aW5hdGVBc3luYyhKU0dsb2JhbE9iamVjdCosIEpTUHJvbWlzZURlZmVycmVkKiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIEpTT2JqZWN0Kik7CisgICAgc3RhdGljIEpTVmFsdWUgaW5zdGFu
dGlhdGUoSlNHbG9iYWxPYmplY3QqLCBKU1Byb21pc2VEZWZlcnJlZCosIGNvbnN0IElkZW50aWZp
ZXImLCBKU1ZhbHVlKTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBKU0dsb2JhbE9iamVjdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAppbmRleCBlOGRhNmM5NDc4
OThkNzFjZjM0YmNkYjkzOTIxYmU5NWQyMzhlZDU2Li42MmZmNmFhOTBmOGY3NWQxYzhiNDBmZWQ0
ZWYwOGY3ZDgyODA1MjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcApAQCAtMzIsMTIgKzMyLDEy
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKiBKU1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcj4odm0uaGVhcCkpIEpTV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3Iodm0sIHN0cnVjdHVyZSk7CiAgICAgaW5zdGFuY2UtPm1fc291cmNl
QXBwZW5kZXIgPSBkZWZhdWx0U291cmNlQXBwZW5kZXI7CiAgICAgYm9vbCB1c2VDdXJyZW50RnJh
bWUgPSB0cnVlOwotICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSwgbWVzc2Fn
ZSwgdXNlQ3VycmVudEZyYW1lKTsKKyAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0LCB2bSwgbWVzc2FnZSwgdXNlQ3VycmVudEZyYW1lKTsKICAgICByZXR1cm4gaW5zdGFu
Y2U7CiB9CiAKQEAgLTQ5LDExICs0OSwxMCBAQCBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cgogY29u
c3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OnNfaW5mbyA9IHsgIldlYkFz
c2VtYmx5LkNvbXBpbGVFcnJvciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcikgfTsKIAogICAgIAot
SlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IoRXhlY1N0YXRlKiBleGVj
LCBWTSYgdm0sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVKU1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkp
OwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3I6OmNyZWF0ZShl
eGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUNvbXBpbGVFcnJvclN0cnVjdHVyZSgp
LCBtZXNzYWdlKTsKKyAgICByZXR1cm4gSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcjo6Y3JlYXRl
KGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlDb21waWxlRXJyb3JT
dHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVF
cnJvci5oCmluZGV4IDcxYzliMDgzM2QzMGFlYjZjNzRhMDJlZjljODczYWE3ZjRhM2NlNWYuLjZj
ZGRjNWQ1NDg3Yzk2NTkzYjdmNjZkMjliZjcyZTU4YTI1YTk3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9y
LmgKQEAgLTM1LDEwICszNSwxMCBAQCBjbGFzcyBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yIGZp
bmFsIDogcHVibGljIEVycm9ySW5zdGFuY2UgewogcHVibGljOgogICAgIHR5cGVkZWYgRXJyb3JJ
bnN0YW5jZSBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IqIGNy
ZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFN0cmluZyYpOwotICAgIHN0
YXRpYyBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCisgICAgc3RhdGlj
IEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCosIFZNJiwg
U3RydWN0dXJlKiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3IqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCiAgICAgewotICAgICAgICByZXR1
cm4gY3JlYXRlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UuaXNVbmRlZmluZWQoKSA/IFN0
cmluZygpIDogbWVzc2FnZS50b1dURlN0cmluZyhleGVjKSk7CisgICAgICAgIHJldHVybiBjcmVh
dGUoZ2xvYmFsT2JqZWN0LCB2bSwgc3RydWN0dXJlLCBtZXNzYWdlLmlzVW5kZWZpbmVkKCkgPyBT
dHJpbmcoKSA6IG1lc3NhZ2UudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KSk7CiAgICAgfQogCiAg
ICAgREVDTEFSRV9JTkZPOwpAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBKU1dlYkFzc2VtYmx5Q29t
cGlsZUVycm9yIGZpbmFsIDogcHVibGljIEVycm9ySW5zdGFuY2UgewogICAgIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IoVk0mLCBTdHJ1Y3R1cmUqKTsKIH07CiAKLUpTT2JqZWN0KiBjcmVhdGVK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yKEV4ZWNTdGF0ZSosIFZNJiwgY29uc3QgU3RyaW5nJik7
CitKU09iamVjdCogY3JlYXRlSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihKU0dsb2JhbE9iamVj
dCosIFZNJiwgY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApp
bmRleCA0MzExNjgwMGFmOGU5YzU1ODNlMmYwYjFiOGEzN2Q5YTI4OWEyODU5Li4yODI2Yzg1NmE5
Y2M1OTVlNmI0NDNiNDQwYTQwMjNhZWI5MzZhMjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTM1LDE1ICszNSwx
NSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotQUxXQVlTX0lOTElORSB1aW50MzJfdCB0b05vbldy
YXBwaW5nVWludDMyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK0FMV0FZU19JTkxJ
TkUgdWludDMyX3QgdG9Ob25XcmFwcGluZ1VpbnQzMihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0m
IHZtID0gZ2V0Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQogICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKIAotICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVl
LnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLnRvTnVtYmVy
KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogCiAgICAgaWYgKCFzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSAmJiAhc3RkOjppc2luZihkb3Vi
bGVWYWx1ZSkpIHsKQEAgLTUyLDEzICs1MiwxMyBAQCBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHRv
Tm9uV3JhcHBpbmdVaW50MzIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0cnVuY2VkVmFsdWUpOwogICAgIH0K
IAotICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiRXhwZWN0IGFuIGludGVnZXIgYXJndW1lbnQgaW4gdGhlIHJhbmdlOiBbMCwgMl4zMiAt
IDFdIl9zKSk7CisgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiRXhwZWN0IGFuIGludGVnZXIgYXJndW1lbnQg
aW4gdGhlIHJhbmdlOiBbMCwgMl4zMiAtIDFdIl9zKSk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
QUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8Y29uc3QgdWludDhfdCosIHNpemVfdD4gZ2V0V2FzbUJ1
ZmZlckZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitBTFdBWVNfSU5M
SU5FIHN0ZDo6cGFpcjxjb25zdCB1aW50OF90Kiwgc2l6ZV90PiBnZXRXYXNtQnVmZmVyRnJvbVZh
bHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYg
KGF1dG8qIHNvdXJjZSA9IGpzRHluYW1pY0Nhc3Q8SlNTb3VyY2VDb2RlKj4odm0sIHZhbHVlKSkg
ewpAQCAtNzAsMTMgKzcwLDEzIEBAIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3Q+IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoRXhlY1N0YXRlCiAgICAgSlNBcnJh
eUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB2YWx1ZS5nZXRPYmplY3QoKSA/IGpzRHluYW1pY0Nhc3Q8
SlNBcnJheUJ1ZmZlcio+KHZtLCB2YWx1ZS5nZXRPYmplY3QoKSkgOiBudWxscHRyOwogICAgIEpT
QXJyYXlCdWZmZXJWaWV3KiBhcnJheUJ1ZmZlclZpZXcgPSB2YWx1ZS5nZXRPYmplY3QoKSA/IGpz
RHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgdmFsdWUuZ2V0T2JqZWN0KCkpIDog
bnVsbHB0cjsKICAgICBpZiAoIShhcnJheUJ1ZmZlciB8fCBhcnJheUJ1ZmZlclZpZXcpKSB7Ci0g
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLAorICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsCiAgICAgICAgICAgICAiZmlyc3QgYXJndW1lbnQg
bXVzdCBiZSBhbiBBcnJheUJ1ZmZlclZpZXcgb3IgYW4gQXJyYXlCdWZmZXIiX3MsIGRlZmF1bHRT
b3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2bSwgdmFsdWUpKSk7CiAgICAgICAg
IHJldHVybiB7IG51bGxwdHIsIDAgfTsKICAgICB9CiAKICAgICBpZiAoYXJyYXlCdWZmZXJWaWV3
ID8gYXJyYXlCdWZmZXJWaWV3LT5pc05ldXRlcmVkKCkgOiBhcnJheUJ1ZmZlci0+aW1wbCgpLT5p
c05ldXRlcmVkKCkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsCisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwKICAgICAgICAgICAg
ICJ1bmRlcmx5aW5nIFR5cGVkQXJyYXkgaGFzIGJlZW4gZGV0YXRjaGVkIGZyb20gdGhlIEFycmF5
QnVmZmVyIl9zLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUodm0s
IHZhbHVlKSkpOwogICAgICAgICByZXR1cm4geyBudWxscHRyLCAwIH07CiAgICAgfQpAQCAtODYs
MTUgKzg2LDE1IEBAIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3Q+IGdldFdhc21CdWZmZXJGcm9tVmFsdWUoRXhlY1N0YXRlCiAgICAgcmV0dXJuIHsgYmFzZSwg
Ynl0ZVNpemUgfTsKIH0KIAotQUxXQVlTX0lOTElORSBWZWN0b3I8dWludDhfdD4gY3JlYXRlU291
cmNlQnVmZmVyRnJvbVZhbHVlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQorQUxXQVlTX0lOTElORSBWZWN0b3I8dWludDhfdD4gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZh
bHVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBh
dXRvIFtkYXRhLCBieXRlU2l6ZV0gPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGV4ZWMsIHZhbHVl
KTsKKyAgICBhdXRvIFtkYXRhLCBieXRlU2l6ZV0gPSBnZXRXYXNtQnVmZmVyRnJvbVZhbHVlKGds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
VmVjdG9yPHVpbnQ4X3Q+KCkpOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKICAgICBp
ZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkoYnl0ZVNpemUpKSB7Ci0gICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykp
OworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU91dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCAwYzhlNGFmNWU1ZjU5MTE3ODgwOTRlOTRkM2Jk
NDQ1Y2Y4MzJjYjYyLi44ODU4YjE0ZDI1NDY3OTRhN2E0ZDRiZWVhZDczNDM0NzEyMjk5OTdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlJbnN0YW5jZS5jcHAKQEAgLTUzLDYgKzUzLDcgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpK
U1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFcK
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICAsIG1faW5zdGFuY2UoV1RGTW92ZShpbnN0
YW5jZSkpCiAgICAgLCBtX3ZtKCZ2bSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KHZtLCB0aGlzLCBz
dHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKQogICAgICwgbV90YWJsZXMobV9pbnN0YW5jZS0+bW9k
dWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRoaXMtPmluc3RhbmNlKCkubnVtSW1wb3J0RnVuY3Rpb25zKCk7ICsr
aSkKQEAgLTEwMSwxNCArMTAyLDE0IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQod3JhcHBlci5nZXQoKSk7CiB9CiAKLXZvaWQgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIHdhc21Db2RlQmxvY2ssIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCit2b2lkIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgd2FzbUNvZGVCbG9jaywgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKICAgICBt
X2luc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHRoaXMsIHdhc21Db2RlQmxvY2suY29weVJlZigp
KTsKIAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlm
ICghd2FzbUNvZGVCbG9jay0+cnVubmFibGUoKSkgewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCBzY29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9i
YWxPYmplY3Qodm0pLT53ZWJBc3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCB3YXNtQ29kZUJs
b2NrLT5lcnJvck1lc3NhZ2UoKSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlua0Vycm9yOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2
bSwgdGhpcy0+Z2xvYmFsT2JqZWN0KCktPndlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJlKCks
IHdhc21Db2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTEyNCw3ICsxMjUsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxp
emVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgUmVmPFdhc206OgogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGpzQ29kZUJsb2NrID0gSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRl
KHZtLCBXVEZNb3ZlKHdhc21Db2RlQmxvY2spLCBtb2R1bGUoKS0+bW9kdWxlKCkubW9kdWxlSW5m
b3JtYXRpb24oKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghanNDb2RlQmxvY2stPnJ1bm5hYmxl
KCkpKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgSlNXZWJBc3Nl
bWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3Qodm0pLT53ZWJBc3Nl
bWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCBqc0NvZGVCbG9jay0+ZXJyb3JNZXNzYWdlKCkpKTsK
KyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIEpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3I6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCB0aGlzLT5nbG9iYWxPYmpl
Y3QoKS0+d2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwganNDb2RlQmxvY2stPmVycm9y
TWVzc2FnZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9j
b2RlQmxvY2suc2V0KHZtLCB0aGlzLCBqc0NvZGVCbG9jayk7CkBAIC0xNDAsMTAgKzE0MSwxMCBA
QCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgUmVmPFdhc206OgogICAgIG1vZHVsZVJlY29yZC0+cHJlcGFyZUxpbmso
dm0sIHRoaXMpOwogCiAgICAgaWYgKGNyZWF0aW9uTW9kZSA9PSBXYXNtOjpDcmVhdGlvbk1vZGU6
OkZyb21KUykgewotICAgICAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywganNOdWxsKCksIGlt
cG9ydE9iamVjdCwgY3JlYXRpb25Nb2RlKTsKKyAgICAgICAgbW9kdWxlUmVjb3JkLT5saW5rKGds
b2JhbE9iamVjdCwganNOdWxsKCksIGltcG9ydE9iamVjdCwgY3JlYXRpb25Nb2RlKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgICAgICBKU1ZhbHVl
IHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0ZShleGVjKTsKKyAgICAgICAgSlNW
YWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgVU5VU0VEX1BBUkFNKHN0YXJ0UmVzdWx0KTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CkBAIC0xNTQsMzIgKzE1NSwzMSBAQCBJZGVu
dGlmaWVyIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlUHJpdmF0ZU1vZHVsZUtleSgpCiAg
ICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRl
c2NyaXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKIH0KIAotSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBq
c01vZHVsZSwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVj
dHVyZSwgUmVmPFdhc206Ok1vZHVsZT4mJiBtb2R1bGUsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVh
dGlvbk1vZGUpCitKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRp
ZmllciYgbW9kdWxlS2V5LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSwgUmVmPFdhc206Ok1v
ZHVsZT4mJiBtb2R1bGUsIFdhc206OkNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCiB7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogZ2xv
YmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCiAgICAgY29uc3QgV2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCk7CiAKICAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVy
cm9yKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsK
KyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBlcnJvcik7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH07CiAKICAgICBpZiAoIWdsb2JhbE9iamVj
dC0+d2ViQXNzZW1ibHlFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRl
RXZhbEVycm9yKGV4ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxlZEVycm9yTWVz
c2FnZSgpKSk7CisgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseURpc2FibGVkRXJyb3JNZXNzYWdlKCkp
KTsKIAogICAgIGF1dG8gaW1wb3J0RmFpbE1lc3NhZ2UgPSBbJl0gKGNvbnN0IFdhc206OkltcG9y
dCYgaW1wb3J0LCBjb25zdCBjaGFyKiBiZWZvcmUsIGNvbnN0IGNoYXIqIGFmdGVyKSB7CiAgICAg
ICAgIHJldHVybiBtYWtlU3RyaW5nKGJlZm9yZSwgIiAiLCBTdHJpbmc6OmZyb21VVEY4KGltcG9y
dC5tb2R1bGUpLCAiOiIsIFN0cmluZzo6ZnJvbVVURjgoaW1wb3J0LmZpZWxkKSwgIiAiLCBhZnRl
cik7CiAgICAgfTsKIAotICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQg
PSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3Qt
PndlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwgbW9kdWxlSW5m
b3JtYXRpb24pOworICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9i
amVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1
bGVJbmZvcm1hdGlvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKIAotICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2UgPSBt
b2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKTsKKyAgICBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlID0gbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1l
c3BhY2UoZ2xvYmFsT2JqZWN0KTsKIAogICAgIGF1dG8gc3RvcmVUb3BDYWxsRnJhbWUgPSBbJnZt
XSAodm9pZCogdG9wQ2FsbEZyYW1lKSB7Ci0gICAgICAgIHZtLnRvcENhbGxGcmFtZSA9IGJpdHdp
c2VfY2FzdDxFeGVjU3RhdGUqPih0b3BDYWxsRnJhbWUpOworICAgICAgICB2bS50b3BDYWxsRnJh
bWUgPSBiaXR3aXNlX2Nhc3Q8Q2FsbEZyYW1lKj4odG9wQ2FsbEZyYW1lKTsKICAgICB9OwogCiAg
ICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJldHR5IGJpZyB3ZSBzaG91bGQg
dHJ5IHRvIHRocm93IE9PTSBoZXJlLgpAQCAtMTk1LDcgKzE5NSw3IEBAIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIGNvCiAgICAgaWYgKGNyZWF0aW9uTW9kZSA9PSBXYXNtOjpDcmVhdGlvbk1vZGU6OkZy
b21KUykgewogICAgICAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBub3Qg
ZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBp
cyB0aHJvd24uCiAgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSAm
JiAhaW1wb3J0T2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBl
RXJyb3IoZXhlYywgImNhbid0IG1ha2UgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYmVjYXVzZSB0aGVy
ZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSByZXF1aXJl
cyBpbXBvcnRzIl9zKSk7CisgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsICJjYW4ndCBtYWtlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIGJlY2F1
c2UgdGhlcmUgaXMgbm8gaW1wb3J0cyBPYmplY3QgYW5kIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUg
cmVxdWlyZXMgaW1wb3J0cyJfcykpOwogICAgIH0KIAogICAgIC8vIEZvciBlYWNoIGltcG9ydCBp
IGluIG1vZHVsZS5pbXBvcnRzOgpAQCAtMjI0LDE1ICsyMjQsMTUgQEAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgY28KICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAgaWYgKGNyZWF0aW9uTW9k
ZSA9PSBXYXNtOjpDcmVhdGlvbk1vZGU6OkZyb21KUykgewogICAgICAgICAgICAgLy8gMS4gTGV0
IG8gYmUgdGhlIHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmplY3Qs
IGkubW9kdWxlX25hbWUpLgotICAgICAgICAgICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9
IGltcG9ydE9iamVjdC0+Z2V0KGV4ZWMsIG1vZHVsZU5hbWUpOworICAgICAgICAgICAgSlNWYWx1
ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgbW9k
dWxlTmFtZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwogICAgICAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBub3QgT2JqZWN0LCB0aHJv
dyBhIFR5cGVFcnJvci4KICAgICAgICAgICAgIGlmICghaW1wb3J0TW9kdWxlVmFsdWUuaXNPYmpl
Y3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnQiLCAibXVzdCBiZSBhbiBvYmpl
Y3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHZtLCBpbXBv
cnRNb2R1bGVWYWx1ZSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9y
dCIsICJtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVU
eXBlRm9yVmFsdWUodm0sIGltcG9ydE1vZHVsZVZhbHVlKSkpOwogCiAgICAgICAgICAgICAvLyAz
LiBMZXQgdiBiZSB0aGUgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25hbWUpCiAg
ICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oaW1wb3J0TW9k
dWxlVmFsdWUpOwotICAgICAgICAgICAgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBmaWVsZE5h
bWUpOworICAgICAgICAgICAgdmFsdWUgPSBvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIGZpZWxk
TmFtZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwogICAgICAgICB9CiAgICAgICAgIGlmICghdmFsdWUpCkBAIC0yNTIsMjAgKzI1MiwyMCBA
QCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9y
eSogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVl
KTsKICAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9i
amVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCiAgICAgICAgICAgICBpZiAoIW1l
bW9yeSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZXhlYywgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgIk1lbW9yeSBp
bXBvcnQiLCAiaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgIk1lbW9yeSBp
bXBvcnQiLCAiaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSk7CiAK
ICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBkZWNsYXJlZEluaXRpYWwgPSBtb2R1bGVJbmZv
cm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpOwogICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGlt
cG9ydGVkSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCkuaW5pdGlhbCgpOwogICAgICAgICAgICAg
aWYgKGltcG9ydGVkSW5pdGlhbCA8IGRlY2xhcmVkSW5pdGlhbCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIGlt
cG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgIk1lbW9yeSBpbXBvcnQiLCAicHJvdmlkZWQgYW4gJ2lu
aXRpYWwnIHRoYXQgaXMgc21hbGxlciB0aGFuIHRoZSBtb2R1bGUncyBkZWNsYXJlZCAnaW5pdGlh
bCcgaW1wb3J0IG1lbW9yeSBzaXplIikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0
RmFpbE1lc3NhZ2UoaW1wb3J0LCAiTWVtb3J5IGltcG9ydCIsICJwcm92aWRlZCBhbiAnaW5pdGlh
bCcgdGhhdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1vZHVsZSdzIGRlY2xhcmVkICdpbml0aWFsJyBp
bXBvcnQgbWVtb3J5IHNpemUiKSkpOwogCiAgICAgICAgICAgICBpZiAoV2FzbTo6UGFnZUNvdW50
IGRlY2xhcmVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCkpIHsK
ICAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgaW1wb3J0ZWRNYXhpbXVtID0gbWVtb3J5
LT5tZW1vcnkoKS5tYXhpbXVtKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpbXBvcnRlZE1heGlt
dW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3Nl
bWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiTWVtb3J5
IGltcG9ydCIsICJkaWQgbm90IGhhdmUgYSAnbWF4aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWly
ZXMgdGhhdCBpdCBkb2VzIikpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZh
aWxNZXNzYWdlKGltcG9ydCwgIk1lbW9yeSBpbXBvcnQiLCAiZGlkIG5vdCBoYXZlIGEgJ21heGlt
dW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoaW1wb3J0ZWRNYXhpbXVtID4gZGVjbGFyZWRNYXhpbXVtKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgIk1lbW9yeSBpbXBvcnQiLCAicHJv
dmlkZWQgYSAnbWF4aW11bScgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZGVjbGFy
ZWQgJ21heGltdW0nIGltcG9ydCBtZW1vcnkgc2l6ZSIpKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmpl
Y3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJNZW1vcnkgaW1wb3J0IiwgInByb3Zp
ZGVkIGEgJ21heGltdW0nIHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGRlY2xhcmVk
ICdtYXhpbXVtJyBpbXBvcnQgbWVtb3J5IHNpemUiKSkpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAvLyBpaS4gQXBwZW5kIHYgdG8gbWVtb3JpZXMuCkBAIC0yODgsNyArMjg4LDcgQEAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1lbW9y
eSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7CiAKLSAgICAgICAgICAg
IGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGV4ZWMsIHZtLCBn
bG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkpOworICAgICAgICAgICAg
YXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZ2xvYmFsT2JqZWN0
LCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAKICAgICAg
ICAgICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6dHJ5Q3Jl
YXRlKG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5tYXhpbXVtKCksCkBAIC0yOTYsNyArMjk2LDcgQEAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YywgY28KICAgICAgICAgICAgICAgICBbJnZtXSAoV2FzbTo6TWVtb3J5OjpTeW5jVHJ5VG9SZWNs
YWltKSB7IHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsgfSwKICAg
ICAgICAgICAgICAgICBbJnZtLCBqc01lbW9yeV0gKFdhc206Ok1lbW9yeTo6R3Jvd1N1Y2Nlc3Ms
IFdhc206OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQsIFdhc206OlBhZ2VDb3VudCBuZXdQYWdlQ291
bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2FsbGJhY2sodm0sIG9sZFBhZ2VDb3VudCwgbmV3
UGFnZUNvdW50KTsgfSk7CiAgICAgICAgICAgICBpZiAoIW1lbW9yeSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxP
YmplY3QpKTsKIAogICAgICAgICAgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxlYXNlTm9u
TnVsbCgpKTsKICAgICAgICAgICAgIGpzSW5zdGFuY2UtPnNldE1lbW9yeSh2bSwganNNZW1vcnkp
OwpAQCAtMzA2LDcgKzMwNiw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgCiAgICAg
aWYgKCFqc0luc3RhbmNlLT5tZW1vcnkoKSkgewogICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2
ZSBhIGR1bW15IG1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lkIGNoZWNr
aW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQgcmVnaXN0
ZXJzLgotICAgICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsK
KyAgICAgICAgYXV0byoganNNZW1vcnkgPSBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoZ2xv
YmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgp
KTsKICAgICAgICAganNNZW1vcnktPmFkb3B0KFdhc206Ok1lbW9yeTo6Y3JlYXRlKCkpOwogICAg
ICAgICBqc0luc3RhbmNlLT5zZXRNZW1vcnkodm0sIGpzTWVtb3J5KTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggZTE2MzFm
Y2JiMTgzM2UwMThlZjdjNGQ2MTc4MDkxODI0ZDRlNjEyOC4uZDBlMGY2ZDE5MzYzNDM1YTU4ZWQ2
MjllYTA5MDRkMTU3NDIwZDA0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTUyLDEyICs1MiwxMiBAQCBjbGFz
cyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgewogCiAgICAgc3RhdGljIElkZW50aWZpZXIgY3JlYXRlUHJpdmF0ZU1vZHVsZUtleSgpOwog
Ci0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNP
YmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0dXJlKiwgUmVmPFdhc206Ok1vZHVsZT4mJiwgV2Fz
bTo6Q3JlYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVh
dGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSosIFJl
ZjxXYXNtOjpNb2R1bGU+JiYsIFdhc206OkNyZWF0aW9uTW9kZSk7CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICB2b2lkIGZpbmFsaXplQ3JlYXRpb24oVk0m
LCBFeGVjU3RhdGUqLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmLCBKU09iamVjdCogaW1wb3J0T2Jq
ZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGUpOworICAgIHZvaWQgZmluYWxpemVDcmVhdGlvbihWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiwgSlNPYmplY3QqIGltcG9y
dE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlKTsKICAgICAKICAgICBXYXNtOjpJbnN0YW5jZSYg
aW5zdGFuY2UoKSB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9CiAgICAgSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCgpIHsgcmV0dXJuIG1fbW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmdldCgpOyB9CkBAIC04MCw5ICs4MCwxMSBAQCBjbGFzcyBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogICAgICAg
ICBpbnN0YW5jZSgpLnNldFRhYmxlKGluZGV4LCBtYWtlUmVmKCp0YWJsZShpbmRleCktPnRhYmxl
KCkpKTsKICAgICB9CiAKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KiBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZS5nZXQoKTsgfQogCiAgICAgc3RhdGlj
IHNpemVfdCBvZmZzZXRPZkluc3RhbmNlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSwgbV9pbnN0YW5jZSk7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSwgbV9nbG9iYWxPYmplY3QpOyB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkNh
bGxlZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1f
Y2FsbGVlKTsgfQogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZWTSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdm0pOyB9CiAKQEAgLTk2LDYgKzk4
LDcgQEAgY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIGZpbmFsIDogcHVibGljIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0IHsKICAgICBSZWY8V2FzbTo6SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAg
Vk0qIG1fdm07CiAKKyAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2Jq
ZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAg
V3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9i
amVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUxpbmtFcnJvci5jcHAKaW5kZXggOWRiNGE1OTYxZDQ0MmY5ODgyNDNkYjYwZDFlZjE0
ZmRjNGVlYzQyOC4uNWQwNTg5NTc2M2E0YjI3MGNjOTdjNWZkZmY4YmYyOWNhOGMzNjhiOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUxpbmtF
cnJvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUxpbmtFcnJvci5jcHAKQEAgLTMyLDEyICszMiwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
SlNXZWJBc3NlbWJseUxpbmtFcnJvciogSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQorSlNXZWJBc3NlbWJseUxpbmtFcnJvciogSlNXZWJBc3NlbWJseUxpbmtFcnJv
cjo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBhdXRvKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I+KHZt
LmhlYXApKSBKU1dlYkFzc2VtYmx5TGlua0Vycm9yKHZtLCBzdHJ1Y3R1cmUpOwogICAgIGluc3Rh
bmNlLT5tX3NvdXJjZUFwcGVuZGVyID0gZGVmYXVsdFNvdXJjZUFwcGVuZGVyOwogICAgIGJvb2wg
dXNlQ3VycmVudEZyYW1lID0gdHJ1ZTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhl
Yywgdm0sIG1lc3NhZ2UsIHVzZUN1cnJlbnRGcmFtZSk7CisgICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbE9iamVjdCwgdm0sIG1lc3NhZ2UsIHVzZUN1cnJlbnRGcmFtZSk7CiAgICAg
cmV0dXJuIGluc3RhbmNlOwogfQogCkBAIC00OSwxMSArNDksMTAgQEAgSlNXZWJBc3NlbWJseUxp
bmtFcnJvcjo6SlNXZWJBc3NlbWJseUxpbmtFcnJvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OnNfaW5mbyA9IHsg
IldlYkFzc2VtYmx5LkxpbmtFcnJvciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUxpbmtFcnJvcikgfTsKIAogICAgIAot
SlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwg
Z2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUxpbmtFcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsK
KyAgICByZXR1cm4gSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGdsb2JhbE9iamVjdCwg
dm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2Fn
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUxpbmtFcnJvci5oCmluZGV4IGU5NDBiMmI4MjIx
NDQzMjg4NWU0NjdiMDY3YjA5Zjk4ZDJjNGVmNDEuLjc4NTU0MjM5MTA3Njc0N2IzMjE4MWQ4M2Q0
MzhiZjk2NWMxMTA2MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlMaW5rRXJyb3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgKQEAgLTM1LDEwICszNSwxMCBAQCBjbGFzcyBK
U1dlYkFzc2VtYmx5TGlua0Vycm9yIGZpbmFsIDogcHVibGljIEVycm9ySW5zdGFuY2UgewogcHVi
bGljOgogICAgIHR5cGVkZWYgRXJyb3JJbnN0YW5jZSBCYXNlOwogCi0gICAgc3RhdGljIEpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IqIGNyZWF0ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSosIGNv
bnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TGlua0Vycm9yKiBjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1l
c3NhZ2UpCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IqIGNyZWF0ZShKU0dsb2Jh
bE9iamVjdCosIFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCiAgICAgewot
ICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMsIHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UuaXNVbmRl
ZmluZWQoKSA/IFN0cmluZygpIDogbWVzc2FnZS50b1dURlN0cmluZyhleGVjKSk7CisgICAgICAg
IHJldHVybiBjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgc3RydWN0dXJlLCBtZXNzYWdlLmlzVW5k
ZWZpbmVkKCkgPyBTdHJpbmcoKSA6IG1lc3NhZ2UudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KSk7
CiAgICAgfQogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBKU1dl
YkFzc2VtYmx5TGlua0Vycm9yIGZpbmFsIDogcHVibGljIEVycm9ySW5zdGFuY2UgewogICAgIEpT
V2ViQXNzZW1ibHlMaW5rRXJyb3IoVk0mLCBTdHJ1Y3R1cmUqKTsKIH07CiAKLUpTT2JqZWN0KiBj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKEV4ZWNTdGF0ZSosIFZNJiwgY29uc3QgU3RyaW5n
Jik7CitKU09iamVjdCogY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihKU0dsb2JhbE9iamVj
dCosIFZNJiwgY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
CmluZGV4IDM0Yjk5MGQ1Y2EzN2MwZjk2ODlkYTIwZDg5YWE5ZTFkMjJjMzRlZWEuLjEzY2MyY2I2
OGI4M2MxODcyYzhkNWY3ZTM1MjNlZGNhMTljMGY3NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCkBAIC0zNywxOCAr
MzcsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5
TWVtb3J5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkp
IH07CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9iYWxPYmpl
Y3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAgICBhdXRvIGV4Y2VwdGlvbiA9
IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBlcnJvcik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH07CiAKICAg
ICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biBleGNlcHRpb24oY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlEaXNhYmxlZEVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlRXZhbEVycm9yKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseURpc2Fi
bGVkRXJyb3JNZXNzYWdlKCkpKTsKIAogICAgIGF1dG8qIG1lbW9yeSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5
TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOwogICAgIG1lbW9yeS0+ZmluaXNoQ3JlYXRpb24odm0pOwpA
QCAtODgsNyArODcsNyBAQCBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZm
ZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHJldHVybiBtX2J1
ZmZlcldyYXBwZXIuZ2V0KCk7CiB9CiAKLVdhc206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVt
b3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSkKK1dhc206
OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3QgZGVsdGEpCiB7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTk2LDE2ICs5NSwxNiBAQCBXYXNtOjpQ
YWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YywgdWludDMyX3QgZGVsdAogICAgIGlmICghZ3Jvd24pIHsKICAgICAgICAgc3dpdGNoIChncm93
bi5lcnJvcigpKSB7CiAgICAgICAgIGNhc2UgV2FzbTo6TWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6
SW52YWxpZERlbHRhOgotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0
cyB0aGUgZGVsdGEgdG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50Il9zKSk7CisgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3Io
Z2xvYmFsT2JqZWN0LCAiV2ViQXNzZW1ibHkuTWVtb3J5Lmdyb3cgZXhwZWN0cyB0aGUgZGVsdGEg
dG8gYmUgYSB2YWxpZCBwYWdlIGNvdW50Il9zKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJbnZhbGlkR3Jvd1NpemU6Ci0g
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyBleHBlY3RzIHRoZSBncm93biBzaXpl
IHRvIGJlIGEgdmFsaWQgcGFnZSBjb3VudCJfcykpOworICAgICAgICAgICAgdGhyb3dFeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVj
dCwgIldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IGV4cGVjdHMgdGhlIGdyb3duIHNpemUgdG8gYmUg
YSB2YWxpZCBwYWdlIGNvdW50Il9zKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBXYXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06Ci0gICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsICJXZWJBc3NlbWJseS5NZW1vcnkuZ3JvdyB3b3VsZCBleGNlZWQgdGhlIG1lbW9yeSdz
IGRlY2xhcmVkIG1heGltdW0gc2l6ZSJfcykpOworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwg
IldlYkFzc2VtYmx5Lk1lbW9yeS5ncm93IHdvdWxkIGV4Y2VlZCB0aGUgbWVtb3J5J3MgZGVjbGFy
ZWQgbWF4aW11bSBzaXplIl9zKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBX
YXNtOjpNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpPdXRPZk1lbW9yeToKLSAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhl
YykpOworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFdhc206OlBhZ2VDb3VudCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCmlu
ZGV4IDgyYTBkY2YxZjEyOGJkODcxODVlOTI1MTc3Mzg1NjE4ZmI0MTJhMGIuLjFmNjA2MjEzZmVk
NDlmNWZhZTgzZDJmYWQ3MTk3ZjEyMzNlYThhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKQEAgLTQ5LDcgKzQ5LDcgQEAg
Y2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeSBmaW5hbCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9i
amVjdCB7CiAgICAgICAgIHJldHVybiAmdm0uZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0
U3BhY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShF
eGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVt
b3J5KiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqLCBWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBK
U1dlYkFzc2VtYmx5TWVtb3J5IGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsK
ICAgICB2b2lkIGFkb3B0KFJlZjxXYXNtOjpNZW1vcnk+JiYpOwogICAgIFdhc206Ok1lbW9yeSYg
bWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBi
dWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopOwotICAgIFdhc206OlBhZ2VDb3VudCBncm93
KFZNJiwgRXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEpOworICAgIFdhc206OlBhZ2VDb3VudCBn
cm93KFZNJiwgSlNHbG9iYWxPYmplY3QqLCB1aW50MzJfdCBkZWx0YSk7CiAgICAgdm9pZCBncm93
U3VjY2Vzc0NhbGxiYWNrKFZNJiwgV2FzbTo6UGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgV2FzbTo6
UGFnZUNvdW50IG5ld1BhZ2VDb3VudCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmluZGV4IDNhYmJj
ZjU4NDdmOTQzODVlZGE4ZTUwZThiMjZmMjI5NTIxZWFhYTcuLjc2N2ZkNTllMTZkZWJlNjEwMjIy
NWJmNzFlMTE0YjNmOTVlOWIwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC00NCwxMyArNDQsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2lu
Zm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CiAKLUpTV2Vi
QXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpNb2R1bGU6OlZhbGlk
YXRpb25SZXN1bHQmJiByZXN1bHQpCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5
TW9kdWxlOjpjcmVhdGVTdHViKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJl
c3VsdCkKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
aWYgKCFyZXN1bHQuaGFzX3ZhbHVlKCkpIHsKLSAgICAgICAgYXV0byogZXJyb3IgPSBKU1dlYkFz
c2VtYmx5Q29tcGlsZUVycm9yOjpjcmVhdGUoZXhlYywgdm0sIHN0cnVjdHVyZS0+Z2xvYmFsT2Jq
ZWN0KCktPndlYkFzc2VtYmx5Q29tcGlsZUVycm9yU3RydWN0dXJlKCksIHJlc3VsdC5lcnJvcigp
KTsKKyAgICAgICAgYXV0byogZXJyb3IgPSBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yOjpjcmVh
dGUoZ2xvYmFsT2JqZWN0LCB2bSwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKS0+d2ViQXNzZW1i
bHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSwgcmVzdWx0LmVycm9yKCkpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGVycm9yKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCBzY29wZSwgZXJyb3IpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaApp
bmRleCA0YzIxMWI3ZWQ2NzZjNTU4ZDJhOWU1ODQ3NWRiZDM2NjVhNzVmZjRlLi5iMTEyNmY4NGRi
M2YyMWU3ZmM5ZjIyY2UzYTRhNzZmZGM3ZTZlZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBAIC01Niw3ICs1Niw3IEBA
IGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVP
YmplY3QgewogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVTdHViKFZNJiwgRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRXhwZWN0ZWQ8UmVmUHRyPFdhc206Ok1vZHVsZT4sIFN0cmluZz4mJik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0
ZVN0dWIoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEV4cGVjdGVkPFJlZlB0cjxX
YXNtOjpNb2R1bGU+LCBTdHJpbmc+JiYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBjb25zdCBXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJy
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvci5jcHAKaW5kZXggOGFiMmY5MDNhY2FjMTViMTNhMWRlMzkyNDdjMDU1MDUyZWRjZjM3
OS4uYTU5ZTk2Yzg2MDFlYmFiZjg5NGNkOWQxYjNkY2ViMTc1ZjI3OTAxMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVJ1bnRp
bWVFcnJvci5jcHAKQEAgLTMyLDEyICszMiwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQorSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvcjo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBhdXRv
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3I+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKHZtLCBzdHJ1Y3R1
cmUpOwogICAgIGluc3RhbmNlLT5tX3NvdXJjZUFwcGVuZGVyID0gZGVmYXVsdFNvdXJjZUFwcGVu
ZGVyOwogICAgIGJvb2wgdXNlQ3VycmVudEZyYW1lID0gdHJ1ZTsKLSAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24oZXhlYywgdm0sIG1lc3NhZ2UsIHVzZUN1cnJlbnRGcmFtZSk7CisgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCwgdm0sIG1lc3NhZ2UsIHVzZUN1cnJl
bnRGcmFtZSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCkBAIC00OCwxMSArNDgsMTAgQEAg
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXIKIAogY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3I6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvcikgfTsKIAotSlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K0pTT2JqZWN0KiBjcmVhdGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFT
U0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgcmV0dXJuIEpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+
d2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAgICAgCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaAppbmRleCA4NjFmNDcyZjNkYjc3MDk3
ZWEzYmNjMjRjOTI0NjNhOWMxMWI4ZTJmLi45NWM1ZDZhODIxYzdmNmI1OWUzODc4ZjQ1Y2U5NWFi
ZmUyNDE5ZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5UnVudGltZUVycm9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIEpT
V2ViQXNzZW1ibHlSdW50aW1lRXJyb3IgZmluYWwgOiBwdWJsaWMgRXJyb3JJbnN0YW5jZSB7CiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBFcnJvckluc3RhbmNlIEJhc2U7CiAKLSAgICBzdGF0aWMgSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJl
KiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3Iq
IGNyZWF0ZShKU0dsb2JhbE9iamVjdCosIFZNJiwgU3RydWN0dXJlKiwgY29uc3QgU3RyaW5nJik7
CiAKICAgICBERUNMQVJFX0lORk87CiAKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgSlNXZWJBc3Nl
bWJseVJ1bnRpbWVFcnJvciBmaW5hbCA6IHB1YmxpYyBFcnJvckluc3RhbmNlIHsKICAgICBKU1dl
YkFzc2VtYmx5UnVudGltZUVycm9yKFZNJiwgU3RydWN0dXJlKik7CiB9OwogCi1KU09iamVjdCog
Y3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihFeGVjU3RhdGUqLCBWTSYsIGNvbnN0IFN0
cmluZyYpOworSlNPYmplY3QqIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoSlNHbG9i
YWxPYmplY3QqLCBWTSYsIGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRh
YmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJs
ZS5jcHAKaW5kZXggYzcwOTIzMDk0OWMwZjFlZmY3NTgzZDllNzNiZGZkNTEyNDYyMGY4Mi4uMTBi
YjIyOTFlMWM5NWQ2NzIyYTQyMzRjOTVmOTQ0ZjI3OTQyZmRlZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwCkBAIC0zNiwx
MyArMzYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2Vt
Ymx5VGFibGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlRhYmxlIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5VGFibGUp
IH07CiAKLUpTV2ViQXNzZW1ibHlUYWJsZSogSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VGFi
bGU+JiYgdGFibGUpCitKU1dlYkFzc2VtYmx5VGFibGUqIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3Jl
YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFJlZjxXYXNtOjpUYWJsZT4mJiB0YWJsZSkKIHsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAgICBpZiAoIWdsb2JhbE9iamVjdC0+d2ViQXNz
ZW1ibHlFbmFibGVkKCkpIHsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlRXZhbEVycm9yKGV4ZWMsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlEaXNhYmxl
ZEVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlRXZhbEVycm9yKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53
ZWJBc3NlbWJseURpc2FibGVkRXJyb3JNZXNzYWdlKCkpKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWJsZS5oCmluZGV4IGFlNjZmOTc2Yjc3MDhkZTllOWE5MTI5NWE0YTk3MTcxNzY1
ODI0MjEuLjM3NGI3NWM3M2U5MDBmNjU0NDY2NDUwMWVlYTRkY2U2MWYzZDkzMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCkBA
IC00Miw3ICs0Miw3IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlUYWJsZSBmaW5hbCA6IHB1YmxpYyBK
U0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJs
ZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlUYWJsZSogY3JlYXRlKEV4
ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlKiwgUmVmPFdhc206OlRhYmxlPiYmKTsKKyAgICBzdGF0
aWMgSlNXZWJBc3NlbWJseVRhYmxlKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqLCBWTSYsIFN0cnVj
dHVyZSosIFJlZjxXYXNtOjpUYWJsZT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVf
SU5GTzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAppbmRleCA2
NGQ2NDdhOTYwMmZkYTlkNTRlNGRjMmZmOWUzZjRiNGI0OTg0ZjE4Li41MzY5ZDVkMGEzNDVmMjg3
OGU5YjQxNDI1NTQzOTNjM2EwMmMwY2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2FzbVRvSlMuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNt
SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJXYXNtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIldhc21T
aWduYXR1cmVJbmxpbmVzLmgiCiAKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25UcmFpdHMuaD4KQEAg
LTYyLDM3ICs2MywyMSBAQCBzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQm
IGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bAogc3RhdGljIEV4cGVjdGVk
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4g
aGFuZGxlQmFkSTY0VXNlKFZNJiB2bSwgSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4KQog
ewogICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bS50b3BFbnRyeUZyYW1lKTsKLSAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFu
Y2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFu
Y2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgIC8vIFN0b3JlIENhbGxlZS4KLSAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FsbGVlKCkpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjphcmd1bWVudEdQUjIsIEpJVDo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEluc3RhbmNlOjpvZmZz
ZXRPZk93bmVyKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWxsZWUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgSklUOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAKICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKIAotICAg
IHZvaWQgKCp0aHJvd0JhZEk2NCkoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKikg
PSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKSAt
PiB2b2lkIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCh2bSk7
Ci0gICAgICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCB2
bSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZShFcnJvclR5cGU6OlR5cGVFcnJvciksICJp
NjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQg
ZnVuY3Rpb24iX3MpOwotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgZXJyb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7
Ci0gICAgICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICB9OwotCiAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9m
TWVtb3J5KTsKIAotICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KHRocm93QmFkSTY0KSk7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVGhyb3dCYWRJNjQpKTsKICAgICByZXR1
cm4gRklOQUxJWkVfV0FTTV9DT0RFKGxpbmtCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIldlYkFz
c2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0
SW5kZXgpOwogfQogCkBAIC0yOTIsNiArMjc3LDkgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0K
ICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwogICAgIC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiBy
ZWdUMCBoZXJlLgogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNh
bGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGlu
IHJlZ1QyLgorICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjpyZWdUMyk7
CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6cmVnVDMpOwogICAgIEpJ
VDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGRvbmUubGluaygmaml0KTsK
IApAQCAtMzEyLDEwICszMDAsMTEgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICBHUFJSZWcg
ZGVzdCA9IHdhc21DYWxsSW5mby5yZXN1bHRzWzBdLmdwcigpOwogCi0gICAgICAgICAgICBpbnQz
Ml90ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7Ci0gICAgICAgICAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdi50b0ludDMyKGV4ZWMpOworICAg
ICAgICAgICAgaW50MzJfdCAoKmNvbnZlcnRUb0kzMikoQ2FsbEZyYW1lKiwgSlNWYWx1ZSkgPSBb
XSAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUUKKyAgICAgICAgICAgICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZt
KCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdi50b0ludDMyKGNhbGxGcmFtZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwpAQCAtMzQ0LDEwICszMzMsMTEgQEAgRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3
YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsK
ICAgICAgICAgICAgIEZQUlJlZyBkZXN0ID0gd2FzbUNhbGxJbmZvLnJlc3VsdHNbMF0uZnByKCk7
CiAKLSAgICAgICAgICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVl
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgewotICAgICAgICAg
ICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgIGZsb2F0ICgqY29u
dmVydFRvRjMyKShDYWxsRnJhbWUqLCBKU1ZhbHVlKSA9IFtdIChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSB2KSAtPiBmbG9hdCB7CisgICAgICAgICAgICAgICAgLy8gRklYTUUKKyAgICAg
ICAgICAgICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1iZXIoY2FsbEZyYW1lLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGF1dG8gbm90
QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
RG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKQEAgLTM4MSwxMCArMzcxLDExIEBAIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2Fz
bVRvSlMoVk0mIHZtCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CiAg
ICAgICAgICAgICBGUFJSZWcgZGVzdCA9IHdhc21DYWxsSW5mby5yZXN1bHRzWzBdLmZwcigpOwog
Ci0gICAgICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
ID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUgewotICAgICAgICAg
ICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHYudG9O
dW1iZXIoZXhlYyk7CisgICAgICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQpKENhbGxGcmFt
ZSosIEpTVmFsdWUpID0gW10gKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYpIC0+IGRv
dWJsZSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUUKKyAgICAgICAgICAgICAgICBWTSYgdm0g
PSBjYWxsRnJhbWUtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdi50b051bWJl
cihjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgICAgICAgICB9OwogCiAg
ICAgICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CkBAIC00MTUsMzQgKzQw
NiwzNSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwg
QmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpID4gMSkgewotICAgICAgICB2b2lk
KCppdGVyYXRlUmVzdWx0cykoRXhlY1N0YXRlKiwgSW5zdGFuY2UqLCBjb25zdCBTaWduYXR1cmUq
LCBKU1ZhbHVlLCB1aW50NjRfdCosIHVpbnQ2NF90KikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBJ
bnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBKU1ZhbHVlIHJl
c3VsdCwgdWludDY0X3QqIHJlZ2lzdGVyUmVzdWx0cywgdWludDY0X3QqIGNhbGxlZUZyYW1lUG9p
bnRlcikgLT4gdm9pZCB7CisgICAgICAgIHZvaWQoKml0ZXJhdGVSZXN1bHRzKShDYWxsRnJhbWUq
LCBJbnN0YW5jZSosIGNvbnN0IFNpZ25hdHVyZSosIEpTVmFsdWUsIHVpbnQ2NF90KiwgdWludDY0
X3QqKSA9IFtdIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdGFuY2UqIGluc3RhbmNlLCBjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgSlNWYWx1ZSByZXN1bHQsIHVpbnQ2NF90KiByZWdpc3Rl
clJlc3VsdHMsIHVpbnQ2NF90KiBjYWxsZWVGcmFtZVBvaW50ZXIpIC0+IHZvaWQgeworICAgICAg
ICAgICAgLy8gRklYTUUKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0
YW5jZSA9IGluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CiAgICAgICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2Jq
ZWN0KCk7CiAgICAgICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgICAgICBhdXRvIHdhc21DYWxsSW5m
byA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcigqc2lnbmF0dXJl
LCBDYWxsUm9sZTo6Q2FsbGVlKTsKICAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJl
Z2lzdGVyUmVzdWx0T2Zmc2V0cyA9IHdhc21DYWxsSW5mby5jb21wdXRlUmVzdWx0c09mZnNldExp
c3QoKTsKIAogICAgICAgICAgICAgdW5zaWduZWQgaXRlbXNJbnNlcnRlZCA9IDA7Ci0gICAgICAg
ICAgICBmb3JFYWNoSW5JdGVyYWJsZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgcmVzdWx0
LCBbJl0gKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKSAtPiB2b2lkIHsK
KyAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBbJl0g
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkgLT4g
dm9pZCB7CiAgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgICAgICAgICAgICAgIGlmIChpdGVtc0luc2VydGVkIDwgc2lnbmF0dXJlLT5yZXR1
cm5Db3VudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuYm94ZWRWYWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUtPnJldHVyblR5cGUoaXRlbXNJ
bnNlcnRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBJMzI6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB1bmJveGVkVmFsdWUgPSB2YWx1ZS50b0ludDMyKGV4ZWMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdW5ib3hlZFZhbHVlID0gdmFsdWUudG9JbnQzMihnbG9iYWxPYmplY3Qp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRjMyOgotICAgICAgICAgICAgICAgICAgICAgICAgdW5ib3hlZFZhbHVlID0gYml0d2lzZV9j
YXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zsb2F0KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVuYm94ZWRWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChn
bG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuYm94ZWRWYWx1
ZSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5ib3hlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2
YWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEZ1bmNyZWY6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24odm0pKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJGdW5jcmVmIHZhbHVlIGlzIG5v
dCBhIGZ1bmN0aW9uIl9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRnVuY3JlZiB2YWx1ZSBpcyBub3QgYSBmdW5jdGlv
biJfcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7CkBAIC00
NjUsNyArNDU3LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAg
ICAgIGlmIChpdGVtc0luc2VydGVkICE9IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSkKLSAgICAg
ICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiSW5jb3JyZWN0IG51bWJl
ciBvZiB2YWx1ZXMgcmV0dXJuZWQgdG8gV2FzbSBmcm9tIEpTIik7CisgICAgICAgICAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiSW5jb3JyZWN0IG51bWJlciBv
ZiB2YWx1ZXMgcmV0dXJuZWQgdG8gV2FzbSBmcm9tIEpTIik7CiAgICAgICAgIH07CiAKICAgICAg
ICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBQaW5uZWRSZWdpc3RlckluZm86Omdl
dCgpLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwpAQCAtNDkzLDEwICs0ODUsMTEgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoT3BlcmF0
aW9uUHRyVGFnKTsKICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwogCi0g
ICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBl
eGVjKSAtPiB2b2lkIHsKLSAgICAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLSAgICAgICAgICAg
IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKENh
bGxGcmFtZSopID0gW10gKENhbGxGcmFtZSogY2FsbEZyYW1lKSAtPiB2b2lkIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FCisgICAgICAgICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAg
ICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1lKTsKICAgICAgICAgICAgIEFTU0VS
VCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKICAgICAgICAgfTsKIApAQCAtNTE4LDEzICs1MTEs
MTMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICByZXR1cm4gRklOQUxJWkVfV0FTTV9D
T0RFKHBhdGNoQnVmZmVyLCBXYXNtRW50cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+SmF2YVNjcmlw
dCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKIH0KIAotdm9pZCogd2FzbVRvSlNFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVj
LCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIEluc3RhbmNlKiB3YXNtSW5zdGFuY2UpCit2b2lk
KiB3YXNtVG9KU0V4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6RXhjZXB0aW9u
VHlwZSB0eXBlLCBJbnN0YW5jZSogd2FzbUluc3RhbmNlKQogewotICAgIHdhc21JbnN0YW5jZS0+
c3RvcmVUb3BDYWxsRnJhbWUoZXhlYyk7CisgICAgd2FzbUluc3RhbmNlLT5zdG9yZVRvcENhbGxG
cmFtZShjYWxsRnJhbWUpOwogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSB3
YXNtSW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwogCi0gICAg
Ly8gRG8gbm90IHJldHJpZXZlIFZNJiBmcm9tIEV4ZWNTdGF0ZSBzaW5jZSBFeGVjU3RhdGUncyBj
YWxsZWUgaXMgbm90IGEgSlNDZWxsLgorICAgIC8vIERvIG5vdCByZXRyaWV2ZSBWTSYgZnJvbSBD
YWxsRnJhbWUgc2luY2UgQ2FsbEZyYW1lJ3MgY2FsbGVlIGlzIG5vdCBhIEpTQ2VsbC4KICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICB7CkBAIC01MzIsMTMgKzUyNSwxMyBA
QCB2b2lkKiB3YXNtVG9KU0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFdhc206OkV4Y2VwdGlv
blR5cGUgdHlwZSwgSW5zdGFuY2UqIHdhcwogCiAgICAgICAgIEpTT2JqZWN0KiBlcnJvcjsKICAg
ICAgICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3RhY2tPdmVyZmxvdykKLSAgICAgICAg
ICAgIGVycm9yID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CisgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxPYmpl
Y3QpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3I6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVJ1bnRp
bWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5
cGUpKTsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOwor
ICAgICAgICAgICAgZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZ2xv
YmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVj
dHVyZSgpLCBXYXNtOjplcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKKyAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBlcnJvcik7CiAgICAg
fQogCi0gICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgZ2VuZXJpY1Vud2luZCh2bSwg
Y2FsbEZyYW1lKTsKICAgICBBU1NFUlQoISF2bS5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgQVNT
RVJUKCEhdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBtYWtlIHRoaXMgYmV0dGVyOgpAQCAtNTQ4LDcgKzU0MSw3IEBAIHZvaWQqIHdhc21Ub0pTRXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBJbnN0YW5j
ZSogd2FzCiAgICAgLy8gZm9yIGV4Y2VwdGlvbnMgZmlyc3QgbG9hZCBjYWxsRnJhbWVGb3JDYXRj
aCBpbmZvIGNhbGwgZnJhbWUgcmVnaXN0ZXIgYmVmb3JlIGp1bXBpbmcKICAgICAvLyB0byB0aGUg
ZXhjZXB0aW9uIGhhbmRsZXIuIElmIHdlIGRpZCB0aGlzLCB3ZSBjb3VsZCByZW1vdmUgdGhpcyB0
ZXJyaWJsZSBoYWNrLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzA0NDAKLSAgICBiaXR3aXNlX2Nhc3Q8dWludDY0X3QqPihleGVjKVtDYWxsRnJhbWVT
bG90OjpjYWxsZWVdID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+d2ViQXNzZW1i
bHlUb0pTQ2FsbGVlKCkpOworICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlb
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2Ut
PndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKICAgICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBD
Rm9yVGhyb3c7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dhc21Ub0pTLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCmlu
ZGV4IDA1NmUzM2NmNTMyNDAzYmVjZTQzNzY4YzU5OTI5NzM4M2I4ODQ0YzcuLjQ4MTYwZTVjOTAx
ZWQ2OGM5MjI0OWFlZjNhYTcwNDNlOTFlOTBmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2FzbVRvSlMuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBJbnN0YW5jZTsKIAogRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9KUyhWTSYsIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWdu
YXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOwogCi12b2lkKiB3YXNtVG9KU0V4Y2Vw
dGlvbihFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5jZSopOwordm9pZCog
d2FzbVRvSlNFeGNlcHRpb24oQ2FsbEZyYW1lKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSW5zdGFu
Y2UqKTsKIHZvaWQgZW1pdFRocm93V2FzbVRvSlNFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIHdhc21JbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSk7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCmluZGV4
IGM3MzY4NWNkZjNlMGFlNTUwODZlM2ZjOTdhYTZiNjM3ZTEwNWU5MTYuLmExNjU2NzkxOWNiZjI5
NWQ0NTNjYzFmNjZlOWYwMWU4MDE1MmIxMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29u
c3RydWN0b3IuY3BwCkBAIC00OSwxNiArNDksMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvcihKU0dsb2JhbE8K
ICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKLSAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCksIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSk7CisgICAgYXV0
byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCksIGNhbGxGcmFtZS0+bmV3VGFyZ2V0
KCksIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlDb21waWxlRXJyb3JTdHJ1Y3R1cmUoKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseUNvbXBp
bGVFcnJvcjo6Y3JlYXRlKGNhbGxGcmFtZSwgdm0sIHN0cnVjdHVyZSwgbWVzc2FnZSkpKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgc3RydWN0dXJlLCBtZXNzYWdl
KSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJB
c3NlbWJseUNvbXBpbGVFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPndl
YkFzc2VtYmx5Q29tcGlsZUVycm9yU3RydWN0dXJlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoY2FsbEZyYW1lLCBlcnJvclN0cnVjdHVyZSwgbWVz
c2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBlcnJvclN0cnVjdHVy
ZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKIFdlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IqIFdlYkFzc2VtYmx5Q29tcGlsZUVycm9yQ29uc3Ry
dWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUNv
bXBpbGVFcnJvclByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggYjFlNjQ5
ZjdiYjY3M2Q4OGExNjlmZmE0MDk1MzYwNWFkODUwMTliYS4uYTg0ZjVlNTljMmU3MGQzZjM1ZmJj
NTMxNzEwZDJiNDM2MDIwMWNlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTgxLDExICs4MSwxMSBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihK
U0dsb2JhbE9iamVjdCogZ2xvYgogICAgICAgICBKU1ZhbHVlIGFyZyA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoYXJnSW5kZXgpOwogICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChhcmdJ
bmRleCkpIHsKICAgICAgICAgY2FzZSBXYXNtOjpJMzI6Ci0gICAgICAgICAgICBhcmcgPSBKU1Zh
bHVlOjpkZWNvZGUoYXJnLnRvSW50MzIoY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBhcmcgPSBK
U1ZhbHVlOjpkZWNvZGUoYXJnLnRvSW50MzIoZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBXYXNtOjpGdW5jcmVmOiB7CiAgICAgICAgICAgICBpZiAoIWlz
V2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGFyZykgJiYgIWFyZy5pc051bGwoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFt
ZSwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoY2FsbEZyYW1lLCB2bSwg
IkZ1bmNyZWYgbXVzdCBiZSBhbiBleHBvcnRlZCB3YXNtIGZ1bmN0aW9uIikpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2
bSwgIkZ1bmNyZWYgbXVzdCBiZSBhbiBleHBvcnRlZCB3YXNtIGZ1bmN0aW9uIikpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6QW55cmVmOgpAQCAt
OTQsMTAgKzk0LDEwIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxX
ZWJBc3NlbWJseUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgICAgICAgICBhcmcg
PSBKU1ZhbHVlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXYXNtOjpGMzI6
Ci0gICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQzMl90
PihhcmcudG9GbG9hdChjYWxsRnJhbWUpKSk7CisgICAgICAgICAgICBhcmcgPSBKU1ZhbHVlOjpk
ZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQzMl90PihhcmcudG9GbG9hdChnbG9iYWxPYmplY3QpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Ci0gICAgICAgICAg
ICBhcmcgPSBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9jYXN0PHVpbnQ2NF90PihhcmcudG9OdW1i
ZXIoY2FsbEZyYW1lKSkpOworICAgICAgICAgICAgYXJnID0gSlNWYWx1ZTo6ZGVjb2RlKGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oYXJnLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdhc206OlZvaWQ6CiAgICAgICAgIGNhc2UgV2FzbTo6
RnVuYzoKQEAgLTEyOCw3ICsxMjgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYgogICAgICAg
ICBjb25zdCBpbnRwdHJfdCBmcmFtZVNpemUgPSAoYm94ZWRBcmdzLnNpemUoKSArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgICAgIGNv
bnN0IGludHB0cl90IHN0YWNrU3BhY2VVc2VkID0gMiAqIGZyYW1lU2l6ZTsgLy8gV2UncmUgbWFr
aW5nIHR3byBjYWxscy4gT25lIHRvIHRoZSB3cmFwcGVyLCBhbmQgb25lIHRvIHRoZSBhY3R1YWwg
d2FzbSBjb2RlLgogICAgICAgICBpZiAoVU5MSUtFTFkoKHNwIDwgc3RhY2tTcGFjZVVzZWQpIHx8
ICgoc3AgLSBzdGFja1NwYWNlVXNlZCkgPCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZtLnNvZnRT
dGFja0xpbWl0KCkpKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
RnJhbWUpKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihnbG9iYWxP
YmplY3QpKSk7CiAgICAgfQogICAgIHZtLndhc21Db250ZXh0LnN0b3JlKHdhc21JbnN0YW5jZSwg
dm0uc29mdFN0YWNrTGltaXQoKSk7CiAgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2Uo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCAwOGY0NGE5NzQxNGY0YjA1
Y2Y4ZjEyODUxMGZlNzg0NGIwN2Y2ODcyLi42YTI0NWQxNGE4ZTgxYTllYTkzNDhlMTlhMjJkZWUw
ODBjZDIzN2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTY2LDMwICs2
NiwzMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dl
YkFzc2VtYmx5SW5zdGFuY2UoSlNHbG9iYWxPYmplYwogICAgIC8vIElmIG1vZHVsZU9iamVjdCBp
cyBub3QgYSBXZWJBc3NlbWJseS5Nb2R1bGUgaW5zdGFuY2UsIGEgVHlwZUVycm9yIGlzIHRocm93
bi4KICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2Vi
QXNzZW1ibHlNb2R1bGUqPih2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKCFt
b2R1bGUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oY2Fs
bEZyYW1lLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGNhbGxGcmFtZSwgImZpcnN0IGFyZ3VtZW50
IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUiX3Ms
IGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2bSwgY2FsbEZyYW1l
LT5hcmd1bWVudCgwKSkpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgImZpcnN0IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJB
c3NlbWJseS5Nb2R1bGUiX3MsIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZSh2bSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKSk7CiAKICAgICAvLyBJZiB0aGUgaW1w
b3J0T2JqZWN0IHBhcmFtZXRlciBpcyBub3QgdW5kZWZpbmVkIGFuZCBUeXBlKGltcG9ydE9iamVj
dCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgogICAgIEpTVmFsdWUgaW1w
b3J0QXJndW1lbnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpOwogICAgIEpTT2JqZWN0KiBpbXBv
cnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsKICAgICBpZiAoIWltcG9ydEFy
Z3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHNjb3BlLCBjcmVhdGVUeXBl
RXJyb3IoY2FsbEZyYW1lLCAic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNl
IG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCJfcywgZGVmYXVsdFNvdXJjZUFwcGVuZGVy
LCBydW50aW1lVHlwZUZvclZhbHVlKHZtLCBpbXBvcnRBcmd1bWVudCkpKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3Nl
bWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiX3MsIGRlZmF1bHRT
b3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2bSwgaW1wb3J0QXJndW1lbnQpKSkp
OwogICAgIAotICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0
aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+bmV3VGFy
Z2V0KCksIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAg
ICBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCksIGNh
bGxGcmFtZS0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlJbnN0YW5jZVN0
cnVjdHVyZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
Y3JlYXRlKHZtLCBjYWxsRnJhbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlUHJpdmF0
ZU1vZHVsZUtleSgpLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgaW5zdGFuY2VTdHJ1Y3R1cmUsIFJl
ZjxXYXNtOjpNb2R1bGU+KG1vZHVsZS0+bW9kdWxlKCkpLCBXYXNtOjpDcmVhdGlvbk1vZGU6OkZy
b21KUyk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y3JlYXRlUHJpdmF0ZU1vZHVsZUtleSgpLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgaW5zdGFu
Y2VTdHJ1Y3R1cmUsIFJlZjxXYXNtOjpNb2R1bGU+KG1vZHVsZS0+bW9kdWxlKCkpLCBXYXNtOjpD
cmVhdGlvbk1vZGU6OkZyb21KUyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAotICAgIGluc3RhbmNlLT5maW5hbGl6ZUNyZWF0aW9uKHZtLCBjYWxsRnJhbWUsIG1vZHVs
ZS0+bW9kdWxlKCkuY29tcGlsZVN5bmMoJnZtLndhc21Db250ZXh0LCBpbnN0YW5jZS0+bWVtb3J5
TW9kZSgpLCAmV2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVyLCAmV2FzbTo6d2FzbVRvSlNFeGNl
cHRpb24pLCBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZTo6RnJvbUpTKTsKKyAgICBp
bnN0YW5jZS0+ZmluYWxpemVDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBtb2R1bGUtPm1vZHVs
ZSgpLmNvbXBpbGVTeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwg
Jldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlciwgJldhc206Ondhc21Ub0pTRXhjZXB0aW9uKSwg
aW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGU6OkZyb21KUyk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3Rh
bmNlKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dl
YkFzc2VtYmx5SW5zdGFuY2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihjYWxsRnJhbWUs
IHNjb3BlLCAiV2ViQXNzZW1ibHkuSW5zdGFuY2UiKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5JbnN0YW5jZSIpKTsKIH0KIAogV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3I6
OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUluc3RhbmNl
UHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaAppbmRl
eCBjMjk5NmFmM2MxZmQ1MTJiODNkZWU3NGQxNGJlM2RhZGI1ZGQwOTk1Li43ZDU2OGJjMjRiMzgz
NTMzYjE5NDYyMTU1MTQ0NjVmZGRkN2Y1MmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
aApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Ig
ZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAKICAgICBERUNMQVJFX0lORk87CiAK
LSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBjcmVhdGVJbnN0YW5jZShFeGVjU3Rh
dGUqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgU3RydWN0
dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlSW5zdGFuY2Uo
SlNHbG9iYWxPYmplY3QqLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwgSlNPYmplY3QqIGltcG9ydE9i
amVjdCwgU3RydWN0dXJlKik7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZSopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlUHJvdG90
eXBlLmNwcAppbmRleCBjYTZmOTQyNTVhMWY5MzQ5ZjFiN2JmNTVmYzBlNjAyMjcxMDgxOWEzLi5k
OGVlZjM4YTI1MTI3ZmFjZmJkZjQxNDIwZTZmZTBmMWQwNDZiZTJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
UHJvdG90eXBlLmNwcApAQCAtNDksMTMgKzQ5LDEzIEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3Nl
bWJseUluc3RhbmNlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5JbnN0YW5jZSIs
CiAgQGVuZAogICovCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogZ2V0SW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTVmFsdWUgdikKK3N0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogZ2V0SW5zdGFuY2UoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBKU1ZhbHVlIHYpCiB7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiByZXN1bHQgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KHZt
LCB2KTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCAKLSAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiZXhwZWN0ZWQg
fHRoaXN8IHZhbHVlIHRvIGJlIGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlIl9z
KSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgCisg
ICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiZXhwZWN0ZWQgfHRoaXN8
IHZhbHVlIHRvIGJlIGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlIl9zKSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjYs
NyArNjYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eUluc3RhbmNlUHJvdG9GdW5jRXhwb3J0cyhKU0dsb2JhbAogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBnZXRJbnN0YW5jZShj
YWxsRnJhbWUsIHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsgCisgICAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSA9IGdldEluc3RhbmNlKGdsb2JhbE9iamVjdCwgdm0sIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOyAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpbnN0YW5jZS0+bW9kdWxlTmFtZXNw
YWNlT2JqZWN0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmNwcAppbmRleCAz
NDEwOGEwOWMzNDk1NzhjY2VkMjQ1MzBmNzdjZDhkMzNiNDlkMGZmLi5mNWU3NjNjMjUxOTkzOGJk
ZjMxYTIzYTkyOGI1MjJkZDNmODg1YjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9y
LmNwcApAQCAtNDksMTYgKzQ5LDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoSlNHbG9iYWxPYmplCiAgICAgYXV0
byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MCk7Ci0gICAgYXV0byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmpl
Y3QtPndlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJlKCkpOworICAgIGF1dG8qIHN0cnVjdHVy
ZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpLCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpLCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5TGlua0Vycm9yU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlMaW5rRXJyb3I6OmNyZWF0ZShj
YWxsRnJhbWUsIHZtLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRl
KGdsb2JhbE9iamVjdCwgdm0sIHN0cnVjdHVyZSwgbWVzc2FnZSkpKTsKIH0KIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAg
SlNWYWx1ZSBtZXNzYWdlID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUq
IGVycm9yU3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUxpbmtFcnJvclN0cnVj
dHVyZSgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGNhbGxGcmFtZSwgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5n
LCBmYWxzZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3Jl
YXRlKGdsb2JhbE9iamVjdCwgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVO
b3RoaW5nLCBmYWxzZSkpOwogfQogCiBXZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yKiBX
ZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlMaW5rRXJyb3JQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1l
bW9yeUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCmluZGV4IGE3YzFjNjFjYTM3OWJkM2NmOGY2ZmU4
ZDUxNTNlZmY5YTczODEyNjUuLjg3ZjlmOGIyYTczNzFkZDEwZjgxODQ1MzNkMTRkYjYxNWRiNGM3
MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCkBAIC01MywyNyArNTMsMjcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1l
bW9yeShKU0dsb2JhbE9iamVjdCoKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpICE9IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJy
b3IoY2FsbEZyYW1lLCAiV2ViQXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgZXhhY3RseSBvbmUgYXJn
dW1lbnQiX3MpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCAiV2ViQXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiX3MpKSk7
CiAKICAgICBKU09iamVjdCogbWVtb3J5RGVzY3JpcHRvcjsKICAgICB7CiAgICAgICAgIEpTVmFs
dWUgYXJndW1lbnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgICAgICBpZiAoIWFyZ3Vt
ZW50LmlzT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGNhbGxGcmFtZSwgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGNhbGxGcmFt
ZSwgIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGl0cyBmaXJzdCBhcmd1bWVudCB0byBiZSBh
biBvYmplY3QiX3MpKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGl0cyBmaXJzdCBhcmd1bWVudCB0
byBiZSBhbiBvYmplY3QiX3MpKSk7CiAgICAgICAgIG1lbW9yeURlc2NyaXB0b3IgPSBqc0Nhc3Q8
SlNPYmplY3QqPihhcmd1bWVudCk7CiAgICAgfQogCiAgICAgV2FzbTo6UGFnZUNvdW50IGluaXRp
YWxQYWdlQ291bnQ7CiAgICAgewogICAgICAgICBJZGVudGlmaWVyIGluaXRpYWwgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5pdGlhbCIpOwotICAgICAgICBKU1ZhbHVlIG1pblNpemVW
YWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChjYWxsRnJhbWUsIGluaXRpYWwpOworICAgICAg
ICBKU1ZhbHVlIG1pblNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChnbG9iYWxPYmpl
Y3QsIGluaXRpYWwpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwotICAgICAgICB1aW50MzJfdCBzaXplID0gdG9Ob25XcmFwcGluZ1Vp
bnQzMihjYWxsRnJhbWUsIG1pblNpemVWYWx1ZSk7CisgICAgICAgIHVpbnQzMl90IHNpemUgPSB0
b05vbldyYXBwaW5nVWludDMyKGdsb2JhbE9iamVjdCwgbWluU2l6ZVZhbHVlKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAg
ICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQoc2l6ZSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgdGhyb3dTY29wZSwg
Y3JlYXRlUmFuZ2VFcnJvcihjYWxsRnJhbWUsICJXZWJBc3NlbWJseS5NZW1vcnkgJ2luaXRpYWwn
IHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIl9zKSkpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiV2ViQXNzZW1ibHkuTWVtb3J5ICdpbml0aWFsJyBw
YWdlIGNvdW50IGlzIHRvbyBsYXJnZSJfcykpKTsKICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3Vu
dChzaXplKS5ieXRlcygpID4gTUFYX0FSUkFZX0JVRkZFUl9TSVpFKQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHRocm93U2NvcGUs
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKSkpOworICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0KSkpOwogICAgICAgICBpbml0aWFs
UGFnZUNvdW50ID0gV2FzbTo6UGFnZUNvdW50KHNpemUpOwogICAgIH0KIApAQCAtODIsMjMgKzgy
LDIzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2Vi
QXNzZW1ibHlNZW1vcnkoSlNHbG9iYWxPYmplY3QqCiAgICAgICAgIC8vIEluIFdlYklETCwgInBy
ZXNlbnQiIG1lYW5zIHRoYXQgW1tHZXRdXSByZXN1bHQgaXMgdW5kZWZpbmVkLCBub3QgW1tIYXNQ
cm9wZXJ0eV1dIHJlc3VsdC4KICAgICAgICAgLy8gaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jaWRsLWRpY3Rpb25hcmllcwogICAgICAgICBJZGVudGlmaWVyIG1heGltdW0gPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibWF4aW11bSIpOwotICAgICAgICBKU1ZhbHVlIG1heFNp
emVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChjYWxsRnJhbWUsIG1heGltdW0pOworICAg
ICAgICBKU1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChnbG9iYWxP
YmplY3QsIG1heGltdW0pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAoIW1heFNpemVWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBzaXplID0gdG9Ob25XcmFwcGluZ1VpbnQzMihj
YWxsRnJhbWUsIG1heFNpemVWYWx1ZSk7CisgICAgICAgICAgICB1aW50MzJfdCBzaXplID0gdG9O
b25XcmFwcGluZ1VpbnQzMihnbG9iYWxPYmplY3QsIG1heFNpemVWYWx1ZSk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
ICAgICAgICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQoc2l6ZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHRo
cm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiV2ViQXNzZW1ibHkuTWVtb3J5
ICdtYXhpbXVtJyBwYWdlIGNvdW50IGlzIHRvbyBsYXJnZSJfcykpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsICJXZWJBc3NlbWJseS5NZW1v
cnkgJ21heGltdW0nIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIl9zKSkpOwogICAgICAgICAgICAg
bWF4aW11bVBhZ2VDb3VudCA9IFdhc206OlBhZ2VDb3VudChzaXplKTsKIAogICAgICAgICAgICAg
aWYgKGluaXRpYWxQYWdlQ291bnQgPiBtYXhpbXVtUGFnZUNvdW50KSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHRocm93
U2NvcGUsCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAi
J21heGltdW0nIHBhZ2UgY291bnQgbXVzdCBiZSB0aGFuIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0
byB0aGUgJ2luaXRpYWwnIHBhZ2UgY291bnQiX3MpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
CisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiJ21h
eGltdW0nIHBhZ2UgY291bnQgbXVzdCBiZSB0aGFuIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0
aGUgJ2luaXRpYWwnIHBhZ2UgY291bnQiX3MpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0
ZShjYWxsRnJhbWUsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJl
KCkpOworICAgIGF1dG8qIGpzTWVtb3J5ID0gSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKGds
b2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUo
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIFJlZlB0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6dHJ5
Q3JlYXRlKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsCkBAIC0xMDYsMTggKzEw
NiwxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dl
YkFzc2VtYmx5TWVtb3J5KEpTR2xvYmFsT2JqZWN0KgogICAgICAgICBbJnZtXSAoV2FzbTo6TWVt
b3J5OjpTeW5jVHJ5VG9SZWNsYWltKSB7IHZtLmhlYXAuY29sbGVjdFN5bmMoQ29sbGVjdGlvblNj
b3BlOjpGdWxsKTsgfSwKICAgICAgICAgWyZ2bSwganNNZW1vcnldIChXYXNtOjpNZW1vcnk6Okdy
b3dTdWNjZXNzLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdlQ291bnQg
bmV3UGFnZUNvdW50KSB7IGpzTWVtb3J5LT5ncm93U3VjY2Vzc0NhbGxiYWNrKHZtLCBvbGRQYWdl
Q291bnQsIG5ld1BhZ2VDb3VudCk7IH0pOwogICAgIGlmICghbWVtb3J5KQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgdGhyb3dTY29wZSwg
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsRnJhbWUpKSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCkpKTsKIAogICAgIGpzTWVtb3J5LT5hZG9w
dChtZW1vcnkucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc01lbW9yeSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGxKU1dlYkFzc2VtYmx5TWVtb3J5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEpTV2ViQXNzZW1ibHlNZW1vcnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9y
KGNhbGxGcmFtZSwgdGhyb3dTY29wZSwgIldlYkFzc2VtYmx5Lk1lbW9yeSIpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rp
b25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAiV2ViQXNzZW1ibHkuTWVtb3J5
IikpOwogfQogCiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNz
ZW1ibHlNZW1vcnlQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5j
cHAKaW5kZXggYzE0MjExNzU0MGVhNGY4MTM4Zjk0NDU1MjkzYTNmYTI3YzA0NWYyMy4uZDk1NGU4
NzFmNjI2YjViZmQwNjcwNmNiZDc5MmZhMDk0OWUzNDk3OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
LmNwcApAQCAtNTMsMTQgKzUzLDE0IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1lbW9y
eVByb3RvdHlwZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTWVtb3J5IiwgJkJhCiBAZW5kCiAq
LwogCi1BTFdBWVNfSU5MSU5FIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGdldE1lbW9yeShFeGVjU3Rh
dGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK0FMV0FZU19JTkxJTkUgSlNXZWJBc3Nl
bWJseU1lbW9yeSogZ2V0TWVtb3J5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2
bSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1p
Y0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZtLCB2YWx1ZSk7IAogICAgIGlmICghbWVtb3J5
KSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIAotICAgICAgICAg
ICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJXZWJBc3NlbWJseS5NZW1vcnkucHJvdG90eXBlLmJ1
ZmZlciBnZXR0ZXIgY2FsbGVkIHdpdGggbm9uIFdlYkFzc2VtYmx5Lk1lbW9yeSB8dGhpc3wgdmFs
dWUiX3MpKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCAKKyAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJXZWJBc3NlbWJs
eS5NZW1vcnkucHJvdG90eXBlLmJ1ZmZlciBnZXR0ZXIgY2FsbGVkIHdpdGggbm9uIFdlYkFzc2Vt
Ymx5Lk1lbW9yeSB8dGhpc3wgdmFsdWUiX3MpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogICAgIHJldHVybiBtZW1vcnk7CkBAIC03MSwxMyArNzEsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0dyb3coSlNHbG9iYWxP
YmplY3QqIGdsb2IKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5
TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoY2FsbEZyYW1lLCB2bSwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7IAorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IGdldE1lbW9yeShn
bG9iYWxPYmplY3QsIHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsgCiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIAotICAgIHVpbnQzMl90IGRlbHRhID0g
dG9Ob25XcmFwcGluZ1VpbnQzMihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwor
ICAgIHVpbnQzMl90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKIAotICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdyb3codm0s
IGNhbGxGcmFtZSwgZGVsdGEpOworICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnkt
Pmdyb3codm0sIGdsb2JhbE9iamVjdCwgZGVsdGEpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
cmVzdWx0LnBhZ2VDb3VudCgpKSk7CkBAIC04OCw3ICs4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoSlNHbG9iYWxPYmpl
Y3QqIGdsCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNXZWJBc3NlbWJseU1lbW9y
eSogbWVtb3J5ID0gZ2V0TWVtb3J5KGNhbGxGcmFtZSwgdm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOyAKKyAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBnZXRNZW1vcnkoZ2xvYmFs
T2JqZWN0LCB2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7IAogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1lbW9y
eS0+YnVmZmVyKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3IuY3BwCmluZGV4IGViZmU3YTc3MjgxYjM5YWNmYTY0NDI1MjM5NmMyYmQ0
MmYxMTA2NjguLjMxMzVhZTQ4ZWI3MTFkNWUzZmNjNjU5NTVlY2E5ZGQzYjAzNjgzMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCkBAIC03MSwxNiArNzEsMTYgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1vZHVsZUN1c3RvbVNlY3Rpb25zKEpTR2xvYmFs
T2JqZWN0KiBnbG8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoY2FsbEZyYW1lKSkpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZ2xvYmFsT2JqZWN0
KSkpOwogCiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxK
U1dlYkFzc2VtYmx5TW9kdWxlKj4odm0sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIGlmICghbW9kdWxlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGNhbGxGcmFtZSwgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGNhbGxGcmFt
ZSwgIldlYkFzc2VtYmx5Lk1vZHVsZS5jdXN0b21TZWN0aW9ucyBjYWxsZWQgd2l0aCBub24gV2Vi
QXNzZW1ibHkuTW9kdWxlIGFyZ3VtZW50Il9zKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgIldlYkFzc2VtYmx5Lk1vZHVsZS5jdXN0b21TZWN0aW9ucyBj
YWxsZWQgd2l0aCBub24gV2ViQXNzZW1ibHkuTW9kdWxlIGFyZ3VtZW50Il9zKSkpOwogCi0gICAg
Y29uc3QgU3RyaW5nIHNlY3Rpb25OYW1lU3RyaW5nID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgxKS5nZXRTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBjb25zdCBTdHJpbmcgc2VjdGlvbk5h
bWVTdHJpbmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdldFN0cmluZyhnbG9i
YWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAot
ICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoY2FsbEZyYW1lLCBudWxs
cHRyLCBnbG9iYWxPYmplY3QpOworICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAKICAgICBjb25zdCBhdXRvJiBjdXN0b21TZWN0aW9ucyA9IG1vZHVs
ZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5jdXN0b21TZWN0aW9uczsKQEAgLTg4LDkgKzg4LDkgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1vZHVsZUN1c3RvbVNlY3Rp
b25zKEpTR2xvYmFsT2JqZWN0KiBnbG8KICAgICAgICAgaWYgKFN0cmluZzo6ZnJvbVVURjgoc2Vj
dGlvbi5uYW1lKSA9PSBzZWN0aW9uTmFtZVN0cmluZykgewogICAgICAgICAgICAgYXV0byBidWZm
ZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKHNlY3Rpb24ucGF5bG9hZC5kYXRhKCksIHNlY3Rp
b24ucGF5bG9hZC5zaXplKCkpOwogICAgICAgICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHRo
cm93U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKSkpOworICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCkpKTsKIAot
ICAgICAgICAgICAgcmVzdWx0LT5wdXNoKGNhbGxGcmFtZSwgSlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKEFycmF5QnVmZmVyU2hhcmlu
Z01vZGU6OkRlZmF1bHQpLCBXVEZNb3ZlKGJ1ZmZlcikpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+
cHVzaChnbG9iYWxPYmplY3QsIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShBcnJheUJ1ZmZlclNoYXJpbmdNb2RlOjpEZWZhdWx0KSwg
V1RGTW92ZShidWZmZXIpKSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDUsOSArMTA1LDkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1vZHVsZUltcG9ydHMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamUKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IGpz
RHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKTsKICAgICBpZiAoIW1vZHVsZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihjYWxs
RnJhbWUsICJXZWJBc3NlbWJseS5Nb2R1bGUuaW1wb3J0cyBjYWxsZWQgd2l0aCBub24gV2ViQXNz
ZW1ibHkuTW9kdWxlIGFyZ3VtZW50Il9zKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgIldlYkFzc2VtYmx5Lk1vZHVsZS5pbXBvcnRzIGNhbGxlZCB3aXRo
IG5vbiBXZWJBc3NlbWJseS5Nb2R1bGUgYXJndW1lbnQiX3MpKSk7CiAKLSAgICBKU0FycmF5KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGNhbGxGcmFtZSwgbnVsbHB0ciwgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9i
amVjdCwgbnVsbHB0cik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogCiAgICAgY29uc3QgYXV0byYgaW1wb3J0cyA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24o
KS5pbXBvcnRzOwpAQCAtMTE2LDEyICsxMTYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCB3ZWJBc3NlbWJseU1vZHVsZUltcG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUK
ICAgICAgICAgSWRlbnRpZmllciBuYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5h
bWUiKTsKICAgICAgICAgSWRlbnRpZmllciBraW5kID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImtpbmQiKTsKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpJbXBvcnQmIGltcCA6IGltcG9y
dHMpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChj
YWxsRnJhbWUpOworICAgICAgICAgICAgSlNPYmplY3QqIG9iaiA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgbW9kdWxlLCBqc1N0
cmluZyh2bSwgU3RyaW5nOjpmcm9tVVRGOChpbXAubW9kdWxlKSkpOwogICAgICAgICAgICAgb2Jq
LT5wdXREaXJlY3Qodm0sIG5hbWUsIGpzU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGltcC5m
aWVsZCkpKTsKICAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBraW5kLCBqc1N0cmluZyh2
bSwgU3RyaW5nKG1ha2VTdHJpbmcoaW1wLmtpbmQpKSkpOwotICAgICAgICAgICAgcmVzdWx0LT5w
dXNoKGNhbGxGcmFtZSwgb2JqKTsKKyAgICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmpl
Y3QsIG9iaik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzYsOSArMTM2LDkgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1vZHVsZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamUKIAogICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IGpzRHluYW1pY0Nh
c3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KHZtLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKICAg
ICBpZiAoIW1vZHVsZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihjYWxsRnJhbWUsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihjYWxsRnJhbWUsICJX
ZWJBc3NlbWJseS5Nb2R1bGUuZXhwb3J0cyBjYWxsZWQgd2l0aCBub24gV2ViQXNzZW1ibHkuTW9k
dWxlIGFyZ3VtZW50Il9zKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgIldlYkFzc2VtYmx5Lk1vZHVsZS5leHBvcnRzIGNhbGxlZCB3aXRoIG5vbiBXZWJB
c3NlbWJseS5Nb2R1bGUgYXJndW1lbnQiX3MpKSk7CiAKLSAgICBKU0FycmF5KiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGNhbGxGcmFtZSwgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0KTsKKyAg
ICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVs
bHB0cik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAg
Y29uc3QgYXV0byYgZXhwb3J0cyA9IG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5leHBvcnRz
OwpAQCAtMTQ2LDExICsxNDYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJB
c3NlbWJseU1vZHVsZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAgICAgICAg
SWRlbnRpZmllciBuYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKTsKICAg
ICAgICAgSWRlbnRpZmllciBraW5kID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImtpbmQi
KTsKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpFeHBvcnQmIGV4cCA6IGV4cG9ydHMpIHsKLSAg
ICAgICAgICAgIEpTT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChjYWxsRnJhbWUp
OworICAgICAgICAgICAgSlNPYmplY3QqIG9iaiA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2Jh
bE9iamVjdCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgbmFtZSwganNTdHJpbmcodm0sIFN0
cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSkpOwogICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qo
dm0sIGtpbmQsIGpzU3RyaW5nKHZtLCBTdHJpbmcobWFrZVN0cmluZyhleHAua2luZCkpKSk7Ci0g
ICAgICAgICAgICByZXN1bHQtPnB1c2goY2FsbEZyYW1lLCBvYmopOworICAgICAgICAgICAgcmVz
dWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgb2JqKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgfQogICAgIH0KQEAgLTE2MywyOCArMTYz
LDI4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2Vi
QXNzZW1ibHlNb2R1bGUoSlNHbG9iYWxPYmplY3QqCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAK
LSAgICBWZWN0b3I8dWludDhfdD4gc291cmNlID0gY3JlYXRlU291cmNlQnVmZmVyRnJvbVZhbHVl
KHZtLCBjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIFZlY3Rvcjx1aW50
OF90PiBzb3VyY2UgPSBjcmVhdGVTb3VyY2VCdWZmZXJGcm9tVmFsdWUodm0sIGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KFdlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShjYWxsRnJhbWUsIFdU
Rk1vdmUoc291cmNlKSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGVNb2R1bGUoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIFdURk1vdmUoc291cmNlKSkpKTsKIH0KIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRB
c0Z1bmN0aW9uVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJXZWJBc3NlbWJseS5Nb2R1bGUi
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVD
YWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJs
eS5Nb2R1bGUiKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGUqIFdlYkFzc2VtYmx5TW9kdWxl
Q29uc3RydWN0b3I6OmNyZWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIFZlY3Rvcjx1aW50OF90
PiYmIGJ1ZmZlcikKK0pTV2ViQXNzZW1ibHlNb2R1bGUqIFdlYkFzc2VtYmx5TW9kdWxlQ29uc3Ry
dWN0b3I6OmNyZWF0ZU1vZHVsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8qIHN0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5l
d1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPndlYkFzc2VtYmx5TW9kdWxl
U3RydWN0dXJlKCkpOworICAgIGF1dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNy
ZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5qc0NhbGxlZSgp
LCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxl
U3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwog
Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVh
dGVTdHViKHZtLCBleGVjLCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2
bS53YXNtQ29udGV4dCwgV1RGTW92ZShidWZmZXIpKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVTeW5jKCZ2bS53YXNtQ29udGV4dCwg
V1RGTW92ZShidWZmZXIpKSkpOwogfQogCiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yKiBX
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNv
bnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmgKaW5kZXggMDcxYzcyY2FkYTdiZDJiN2U3OTNhNmYyNzQxNjM3YzVl
ZTVlMGMzZS4uM2Q1ZmFjNDkxZWM2NjJlMWI4Nzg3ODVjNmUyZDQ1MWMzNTZiMzExMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuaApAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBXZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yIGZpbmFsIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogCiAgICAg
REVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZU1v
ZHVsZShFeGVjU3RhdGUqLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpOworICAgIHN0YXRpYyBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGVNb2R1bGUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHAKaW5kZXggMTZhZTZjZmIxNDg4MDI0NjZjYTIxZTdmYjcwOGY5YjgwYjM0OGM2MS4u
ZDliNGVkYjdjMzIyMjU1M2NjYmY2YTJkMmE0NDU3NjMzNjMzZDk2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcApAQCAtNTAsMTAgKzUwLDEwIEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZCogV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIG1v
ZHVsZUtleSwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
KQorV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVh
dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlS2V5LCBjb25zdCBXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24pCiB7CiAgICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ+KHZtLmhlYXApKSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCh2bSwgc3RydWN0dXJl
LCBtb2R1bGVLZXkpOwotICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSwgbW9k
dWxlSW5mb3JtYXRpb24pOworICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmpl
Y3QsIHZtLCBtb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCkBA
IC02OCw5ICs2OCw5IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjp+V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQoKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIGNvbnN0IFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbikKK3ZvaWQgV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZN
JiB2bSwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QsIHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOwogICAgIGZvciAoY29uc3QgYXV0byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24uZXhwb3J0
cykgewogICAgICAgICBJZGVudGlmaWVyIGZpZWxkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpKTsKQEAgLTkzLDEyICs5MywxMSBAQCB2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpwcmVwYXJlTGluayhWTSYgdm0sIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuYwogICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBpbnN0YW5j
ZSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBXYXNtOjpDcmVhdGlvbk1vZGUg
Y3JlYXRpb25Nb2RlKQordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBX
YXNtOjpDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0oc2NvcGUpOwotICAgIGF1
dG8qIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIAogICAgIFJF
TEVBU0VfQVNTRVJUKG1faW5zdGFuY2UpOwogCkBAIC0xMDcsNyArMTA2LDcgQEAgdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2Jq
ZWN0KiBpbXBvcnRPYmoKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxl
SW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAgICBhdXRvIGV4
Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBlcnJvcik7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgc2NvcGUsIGVycm9yKTsKICAgICB9OwogCiAgICAgYXV0byBpbXBvcnRGYWlsTWVzc2FnZSA9
IFsmXSAoY29uc3QgV2FzbTo6SW1wb3J0JiBpbXBvcnQsIGNvbnN0IGNoYXIqIGJlZm9yZSwgY29u
c3QgY2hhciogYWZ0ZXIpIHsKQEAgLTEzMSwzMiArMTMwLDMyIEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1w
b3J0T2JqCiAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAgIGlmIChjcmVhdGlvbk1vZGUg
PT0gV2FzbTo6Q3JlYXRpb25Nb2RlOjpGcm9tSlMpIHsKICAgICAgICAgICAgIC8vIDEuIExldCBv
IGJlIHRoZSByZXN1bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBp
Lm1vZHVsZV9uYW1lKS4KLSAgICAgICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUgPSBp
bXBvcnRPYmplY3QtPmdldChleGVjLCBtb2R1bGVOYW1lKTsKKyAgICAgICAgICAgIEpTVmFsdWUg
aW1wb3J0TW9kdWxlVmFsdWUgPSBpbXBvcnRPYmplY3QtPmdldChnbG9iYWxPYmplY3QsIG1vZHVs
ZU5hbWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICAgICAgICAgIC8vIDIuIElmIFR5cGUobykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBl
RXJyb3IuCiAgICAgICAgICAgICBpZiAoIWltcG9ydE1vZHVsZVZhbHVlLmlzT2JqZWN0KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJyb3IoZXhlYywgaW1w
b3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0IiwgIm11c3QgYmUgYW4gb2JqZWN0IiksIGRl
ZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2bSwgaW1wb3J0TW9kdWxl
VmFsdWUpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnQiLCAibXVz
dCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZh
bHVlKHZtLCBpbXBvcnRNb2R1bGVWYWx1ZSkpKTsKIAogICAgICAgICAgICAgLy8gMy4gTGV0IHYg
YmUgdGhlIHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KG8sIGkuaXRlbV9uYW1lKQogICAgICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGltcG9ydE1vZHVsZVZhbHVl
KTsKLSAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgZmllbGROYW1lKTsKKyAg
ICAgICAgICAgIHZhbHVlID0gb2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBmaWVsZE5hbWUpOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVs
ZSA9IGhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoZXhlYywgbW9kdWxlTmFtZSk7CisgICAgICAg
ICAgICBBYnN0cmFjdE1vZHVsZVJlY29yZCogaW1wb3J0ZWRNb2R1bGUgPSBob3N0UmVzb2x2ZUlt
cG9ydGVkTW9kdWxlKGdsb2JhbE9iamVjdCwgbW9kdWxlTmFtZSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICAgICAgUmVzb2x1dGlvbiBy
ZXNvbHV0aW9uID0gaW1wb3J0ZWRNb2R1bGUtPnJlc29sdmVFeHBvcnQoZXhlYywgZmllbGROYW1l
KTsKKyAgICAgICAgICAgIFJlc29sdXRpb24gcmVzb2x1dGlvbiA9IGltcG9ydGVkTW9kdWxlLT5y
ZXNvbHZlRXhwb3J0KGdsb2JhbE9iamVjdCwgZmllbGROYW1lKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgICAgICBzd2l0Y2ggKHJlc29s
dXRpb24udHlwZSkgewogICAgICAgICAgICAgY2FzZSBSZXNvbHV0aW9uOjpUeXBlOjpOb3RGb3Vu
ZDoKLSAgICAgICAgICAgICAgICB0aHJvd1N5bnRheEVycm9yKGV4ZWMsIHNjb3BlLCBtYWtlU3Ry
aW5nKCJJbXBvcnRpbmcgYmluZGluZyBuYW1lICciLCBTdHJpbmcoZmllbGROYW1lLmltcGwoKSks
ICInIGlzIG5vdCBmb3VuZC4iKSk7CisgICAgICAgICAgICAgICAgdGhyb3dTeW50YXhFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBtYWtlU3RyaW5nKCJJbXBvcnRpbmcgYmluZGluZyBuYW1lICci
LCBTdHJpbmcoZmllbGROYW1lLmltcGwoKSksICInIGlzIG5vdCBmb3VuZC4iKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBjYXNlIFJlc29sdXRpb246OlR5cGU6OkFt
YmlndW91czoKLSAgICAgICAgICAgICAgICB0aHJvd1N5bnRheEVycm9yKGV4ZWMsIHNjb3BlLCBt
YWtlU3RyaW5nKCJJbXBvcnRpbmcgYmluZGluZyBuYW1lICciLCBTdHJpbmcoZmllbGROYW1lLmlt
cGwoKSksICInIGNhbm5vdCBiZSByZXNvbHZlZCBkdWUgdG8gYW1iaWd1b3VzIG11bHRpcGxlIGJp
bmRpbmdzLiIpKTsKKyAgICAgICAgICAgICAgICB0aHJvd1N5bnRheEVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIG1ha2VTdHJpbmcoIkltcG9ydGluZyBiaW5kaW5nIG5hbWUgJyIsIFN0cmluZyhm
aWVsZE5hbWUuaW1wbCgpKSwgIicgY2Fubm90IGJlIHJlc29sdmVkIGR1ZSB0byBhbWJpZ3VvdXMg
bXVsdGlwbGUgYmluZGluZ3MuIikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICAgICAgY2FzZSBSZXNvbHV0aW9uOjpUeXBlOjpFcnJvcjoKLSAgICAgICAgICAgICAgICB0aHJv
d1N5bnRheEVycm9yKGV4ZWMsIHNjb3BlLCBtYWtlU3RyaW5nKCJJbXBvcnRpbmcgYmluZGluZyBu
YW1lICdkZWZhdWx0JyBjYW5ub3QgYmUgcmVzb2x2ZWQgYnkgc3RhciBleHBvcnQgZW50cmllcy4i
KSk7CisgICAgICAgICAgICAgICAgdGhyb3dTeW50YXhFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCBtYWtlU3RyaW5nKCJJbXBvcnRpbmcgYmluZGluZyBuYW1lICdkZWZhdWx0JyBjYW5ub3QgYmUg
cmVzb2x2ZWQgYnkgc3RhciBleHBvcnQgZW50cmllcy4iKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgICAgICBjYXNlIFJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkOgpAQCAt
MTg5LDcgKzE4OCw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqCiAgICAgICAgICAgICAvLyA0
LiBJZiBpIGlzIGEgZnVuY3Rpb24gaW1wb3J0OgogICAgICAgICAgICAgLy8gaS4gSWYgSXNDYWxs
YWJsZSh2KSBpcyBmYWxzZSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCiAgICAgICAg
ICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24odm0pKQotICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFp
bE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0IGZ1bmN0aW9uIiwgIm11c3QgYmUgY2FsbGFibGUiKSkp
OworICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBv
cnQgZnVuY3Rpb24iLCAibXVzdCBiZSBjYWxsYWJsZSIpKSk7CiAKICAgICAgICAgICAgIFdhc206
Okluc3RhbmNlKiBjYWxsZWVJbnN0YW5jZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlv
biA9IG51bGxwdHI7CkBAIC0yMTIsNyArMjExLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
ZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAo
aW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJy
b3IoZXhlYywgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIGZ1bmN0aW9u
IiwgInNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92aWRlZCBXZWJBc3NlbWJseSBmdW5j
dGlvbidzIHNpZ25hdHVyZSIpKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRG
YWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnRlZCBmdW5jdGlvbiIsICJzaWduYXR1cmUgZG9lc24n
dCBtYXRjaCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gaWlpLiBPdGhlcndpc2U6CiAgICAgICAg
ICAgICAvLyBhLiBMZXQgY2xvc3VyZSBiZSBhIG5ldyBob3N0IGZ1bmN0aW9uIG9mIHRoZSBnaXZl
biBzaWduYXR1cmUgd2hpY2ggY2FsbHMgdiBieSBjb2VyY2luZyBXZWJBc3NlbWJseSBhcmd1bWVu
dHMgdG8gSmF2YVNjcmlwdCBhcmd1bWVudHMgdmlhIFRvSlNWYWx1ZSBhbmQgcmV0dXJucyB0aGUg
cmVzdWx0LCBpZiBhbnksIGJ5IGNvZXJjaW5nIHZpYSBUb1dlYkFzc2VtYmx5VmFsdWUuCkBAIC0y
MzMsMjQgKzIzMiwyNCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAgICAgICAgQVNT
RVJUKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0ubXV0YWJpbGl0
eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0YWJsZSk7CiAgICAgICAgICAgICAvLyBpaS4gSWYgdGhl
IGdsb2JhbF90eXBlIG9mIGkgaXMgaTY0IG9yIFR5cGUodikgaXMgbm90IE51bWJlciwgdGhyb3cg
YSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCiAgICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRp
b24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS50eXBlID09IFdhc206Okk2NCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIGdsb2JhbCIsICJjYW5u
b3QgYmUgYW4gaTY0IikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3Nh
Z2UoaW1wb3J0LCAiaW1wb3J0ZWQgZ2xvYmFsIiwgImNhbm5vdCBiZSBhbiBpNjQiKSkpOwogICAg
ICAgICAgICAgaWYgKCFpc1N1YnR5cGUobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQu
a2luZEluZGV4XS50eXBlLCBXYXNtOjpBbnlyZWYpICYmICF2YWx1ZS5pc051bWJlcigpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0ZWQgZ2xvYmFsIiwg
Im11c3QgYmUgYSBudW1iZXIiKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWls
TWVzc2FnZShpbXBvcnQsICJpbXBvcnRlZCBnbG9iYWwiLCAibXVzdCBiZSBhIG51bWJlciIpKSk7
CiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1w
b3J0cy4KICAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBv
cnQua2luZEluZGV4XS50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkZ1bmNyZWY6CiAg
ICAgICAgICAgICAgICAgaWYgKCFpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCB2YWx1ZSkg
JiYgIXZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9u
KGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIGltcG9ydEZhaWxNZXNzYWdl
KGltcG9ydCwgImltcG9ydGVkIGdsb2JhbCIsICJtdXN0IGJlIGEgd2FzbSBleHBvcnRlZCBmdW5j
dGlvbiBvciBudWxsIikpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihj
cmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxN
ZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIGdsb2JhbCIsICJtdXN0IGJlIGEgd2FzbSBleHBvcnRl
ZCBmdW5jdGlvbiBvciBudWxsIikpKTsKICAgICAgICAgICAgICAgICBtX2luc3RhbmNlLT5pbnN0
YW5jZSgpLnNldEdsb2JhbChpbXBvcnQua2luZEluZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdhc206OkFueXJlZjoKICAgICAgICAgICAgICAg
ICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChpbXBvcnQua2luZEluZGV4LCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoK
LSAgICAgICAgICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChpbXBvcnQu
a2luZEluZGV4LCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBtX2luc3Rh
bmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChpbXBvcnQua2luZEluZGV4LCB2YWx1ZS50b0ludDMy
KGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpGMzI6Ci0gICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRH
bG9iYWwoaW1wb3J0LmtpbmRJbmRleCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zs
b2F0KGV4ZWMpKSk7CisgICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRH
bG9iYWwoaW1wb3J0LmtpbmRJbmRleCwgYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZS50b0Zs
b2F0KGdsb2JhbE9iamVjdCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgV2FzbTo6RjY0OgogICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCku
c2V0R2xvYmFsKGltcG9ydC5raW5kSW5kZXgsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUu
YXNOdW1iZXIoKSkpOwpAQCAtMjY3LDI1ICsyNjYsMjUgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRP
YmoKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBqc0R5bmFtaWNDYXN0
PEpTV2ViQXNzZW1ibHlUYWJsZSo+KHZtLCB2YWx1ZSk7CiAgICAgICAgICAgICAvLyBpLiBJZiB2
IGlzIG5vdCBhIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdCwgdGhyb3cgYSBXZWJBc3NlbWJseS5M
aW5rRXJyb3IuCiAgICAgICAgICAgICBpZiAoIXRhYmxlKQotICAgICAgICAgICAgICAgIHJldHVy
biBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0
RmFpbE1lc3NhZ2UoaW1wb3J0LCAiVGFibGUgaW1wb3J0IiwgImlzIG5vdCBhbiBpbnN0YW5jZSBv
ZiBXZWJBc3NlbWJseS5UYWJsZSIpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZh
aWxNZXNzYWdlKGltcG9ydCwgIlRhYmxlIGltcG9ydCIsICJpcyBub3QgYW4gaW5zdGFuY2Ugb2Yg
V2ViQXNzZW1ibHkuVGFibGUiKSkpOwogCiAgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZElu
aXRpYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi50YWJsZXNbaW1wb3J0LmtpbmRJbmRleF0uaW5pdGlh
bCgpOwogICAgICAgICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5sZW5ndGgo
KTsKICAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQotICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiVGFibGUgaW1wb3J0IiwgInBy
b3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9i
amVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgIlRhYmxlIGltcG9ydCIsICJwcm92
aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpOwogCiAgICAgICAgICAgICBp
ZiAoT3B0aW9uYWw8dWludDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9u
LnRhYmxlc1tpbXBvcnQua2luZEluZGV4XS5tYXhpbXVtKCkpIHsKICAgICAgICAgICAgICAgICBP
cHRpb25hbDx1aW50MzJfdD4gYWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVtKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIGltcG9y
dEZhaWxNZXNzYWdlKGltcG9ydCwgIlRhYmxlIGltcG9ydCIsICJkb2VzIG5vdCBoYXZlIGEgJ21h
eGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJUYWJsZSBpbXBv
cnQiLCAiZG9lcyBub3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0
aGF0IGl0IGRvZXMiKSkpOwogICAgICAgICAgICAgICAgIGlmICgqYWN0dWFsTWF4aW11bSA+ICpl
eHBlY3RlZE1heGltdW0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1w
b3J0LCAiSW1wb3J0ZWQgVGFibGUiLCAiJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1
bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwg
aW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiSW1wb3J0ZWQgVGFibGUiLCAiJ21heGltdW0nIGlz
IGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIGV4cGVjdGVkVHlwZSA9IG1vZHVsZUluZm9ybWF0
aW9uLnRhYmxlc1tpbXBvcnQua2luZEluZGV4XS50eXBlKCk7CiAgICAgICAgICAgICBhdXRvIGFj
dHVhbFR5cGUgPSB0YWJsZS0+dGFibGUoKS0+dHlwZSgpOwogICAgICAgICAgICAgaWYgKGV4cGVj
dGVkVHlwZSAhPSBhY3R1YWxUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24o
Y3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2Uo
aW1wb3J0LCAiVGFibGUgaW1wb3J0IiwgInByb3ZpZGVkIGEgJ3R5cGUnIHRoYXQgaXMgd3Jvbmci
KSkpOworICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJs
eUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJU
YWJsZSBpbXBvcnQiLCAicHJvdmlkZWQgYSAndHlwZScgdGhhdCBpcyB3cm9uZyIpKSk7CiAKICAg
ICAgICAgICAgIC8vIGlpLiBBcHBlbmQgdiB0byB0YWJsZXMuCiAgICAgICAgICAgICAvLyBpaWku
IEFwcGVuZCB2LltbVGFibGVdXSB0byBpbXBvcnRzLgpAQCAtMzEwLDggKzMwOSw4IEBAIHZvaWQg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBK
U09iamVjdCogaW1wb3J0T2JqCiAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVu
IGl0J3MgYSBUYWJsZSBkZWZpbml0aW9uLgogICAgICAgICAgICAgUmVmUHRyPFdhc206OlRhYmxl
PiB3YXNtVGFibGUgPSBXYXNtOjpUYWJsZTo6dHJ5Q3JlYXRlKG1vZHVsZUluZm9ybWF0aW9uLnRh
Ymxlc1tpXS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlc1tpXS5tYXhpbXVtKCks
IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlc1tpXS50eXBlKCkpOwogICAgICAgICAgICAgaWYgKCF3
YXNtVGFibGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCAiY291bGRuJ3QgY3JlYXRlIFRhYmxlIikpOwotICAg
ICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6
Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5VGFibGVTdHJ1Y3R1cmUo
KSwgd2FzbVRhYmxlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAi
Y291bGRuJ3QgY3JlYXRlIFRhYmxlIikpOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxl
KiB0YWJsZSA9IEpTV2ViQXNzZW1ibHlUYWJsZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLCB3YXNtVGFibGUucmVsZWFz
ZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8g
YWxsb2NhdGUgYSBKU1dlYkFzc2VtYmx5VGFibGUgd2UndmUgZGVmaW5lZC4KICAgICAgICAgICAg
IC8vIElmIGl0J3MgZGVmaW5lZCB0byBiZSB0b28gbGFyZ2UsIHdlIHNob3VsZCBoYXZlIHRocm93
biBhIHZhbGlkYXRpb24gZXJyb3IuCiAgICAgICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOwpAQCAtNDIwLDcgKzQxOSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxp
bmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgV2FzbTo6STY0OgotICAgICAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCAiZXhwb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQiX3MpKTsK
KyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sICJleHBvcnRlZCBnbG9i
YWwgY2Fubm90IGJlIGFuIGk2NCJfcykpOwogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CkBAIC00NDEsNyArNDQwLDcgQEAgdm9pZCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0
KiBpbXBvcnRPYmoKICAgICAgICAgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgPSBmYWxz
ZTsKICAgICAgICAgYm9vbCBpZ25vcmVSZWFkT25seUVycm9ycyA9IHRydWU7CiAgICAgICAgIGJv
b2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBv
aW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCBTdHJpbmc6OmZyb21VVEY4KGV4cC5maWVsZCkpLCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJv
d1JlYWRPbmx5RXJyb3IsIGlnbm9yZVJlYWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOworICAgICAg
ICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0Y2hwb2ludFNldChtb2R1bGVFbnZpcm9ubWVudCwgZ2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmc6OmZyb21VVEY4KGV4
cC5maWVsZCkpLCBleHBvcnRlZFZhbHVlLCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IsIGlnbm9y
ZVJlYWRPbmx5RXJyb3JzLCBwdXRSZXN1bHQpOwogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwdXRSZXN1bHQpOwogICAgIH0KQEAgLTQ2
OCwxNCArNDY3LDE0IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBTY29wZSwgdHlwZW5hbWUgTSwgdHlwZW5hbWUgTiwgdHlwZW5hbWUgLi4uQXJncz4K
LU5FVkVSX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBkYXRhU2VnbWVudEZhaWwoRXhlY1N0YXRlKiBl
eGVjLCBWTSYgdm0sIFNjb3BlJiBzY29wZSwgTSBtZW1vcnlTaXplLCBOIHNlZ21lbnRTaXplLCBO
IG9mZnNldCwgQXJncy4uLiBhcmdzKQorTkVWRVJfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGRhdGFT
ZWdtZW50RmFpbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFNjb3BlJiBz
Y29wZSwgTSBtZW1vcnlTaXplLCBOIHNlZ21lbnRTaXplLCBOIG9mZnNldCwgQXJncy4uLiBhcmdz
KQogewotICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgbWFrZVN0cmluZygiSW52YWxpZCBkYXRhIHNlZ21l
bnQgaW5pdGlhbGl6YXRpb246IHNlZ21lbnQgb2YgIl9zLCBTdHJpbmc6Om51bWJlcihzZWdtZW50
U2l6ZSksICIgYnl0ZXMgbWVtb3J5IG9mICJfcywgU3RyaW5nOjpudW1iZXIobWVtb3J5U2l6ZSks
ICIgYnl0ZXMsIGF0IG9mZnNldCAiX3MsIFN0cmluZzo6bnVtYmVyKG9mZnNldCksIGFyZ3MuLi4p
KSk7CisgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0
ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgbWFrZVN0cmluZygiSW52
YWxpZCBkYXRhIHNlZ21lbnQgaW5pdGlhbGl6YXRpb246IHNlZ21lbnQgb2YgIl9zLCBTdHJpbmc6
Om51bWJlcihzZWdtZW50U2l6ZSksICIgYnl0ZXMgbWVtb3J5IG9mICJfcywgU3RyaW5nOjpudW1i
ZXIobWVtb3J5U2l6ZSksICIgYnl0ZXMsIGF0IG9mZnNldCAiX3MsIFN0cmluZzo6bnVtYmVyKG9m
ZnNldCksIGFyZ3MuLi4pKSk7CiB9CiAKLUpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmV2YWx1YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgV2FzbTo6TW9kdWxlJiBt
b2R1bGUgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLm1vZHVsZSgpOwpAQCAtNTI4LDcgKzUyNyw3
IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICBmb3JFYWNoRWxlbWVudChbJl0gKGNvbnN0IFdhc206OkVsZW1lbnQmIGVsZW1l
bnQsIHVpbnQzMl90IHRhYmxlSW5kZXgsIHVpbnQzMl90IGVsZW1lbnRJbmRleCkgewogICAgICAg
ICB1aW50NjRfdCBsYXN0V3JpdHRlbkluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGVsZW1l
bnRJbmRleCkgKyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZWxlbWVudC5mdW5jdGlvbkluZGljZXMu
c2l6ZSgpKSAtIDE7CiAgICAgICAgIGlmIChVTkxJS0VMWShsYXN0V3JpdHRlbkluZGV4ID49IG1f
aW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5sZW5ndGgoKSkpCi0gICAgICAgICAgICBleGNl
cHRpb24gPSBKU1ZhbHVlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCAiRWxlbWVudCBpcyB0cnlpbmcgdG8gc2V0IGFuIG91
dCBvZiBib3VuZHMgdGFibGUgaW5kZXgiX3MpKSk7CisgICAgICAgICAgICBleGNlcHRpb24gPSBK
U1ZhbHVlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNz
ZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkVsZW1lbnQgaXMgdHJ5aW5nIHRvIHNl
dCBhbiBvdXQgb2YgYm91bmRzIHRhYmxlIGluZGV4Il9zKSkpOwogICAgIH0pOwogCiAgICAgaWYg
KFVOTElLRUxZKGV4Y2VwdGlvbikpCkBAIC01MzcsMTUgKzUzNiwxNCBAQCBKU1ZhbHVlIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgLy8gVmFs
aWRhdGlvbiBvZiBhbGwgc2VnbWVudCByYW5nZXMgY29tZXMgYmVmb3JlIGFsbCBUYWJsZSBhbmQg
TWVtb3J5IGluaXRpYWxpemF0aW9uLgogICAgIGZvckVhY2hTZWdtZW50KFsmXSAodWludDhfdCos
IHVpbnQ2NF90IHNpemVJbkJ5dGVzLCBjb25zdCBXYXNtOjpTZWdtZW50OjpQdHImIHNlZ21lbnQs
IHVpbnQzMl90IG9mZnNldCkgewogICAgICAgICBpZiAoVU5MSUtFTFkoc2l6ZUluQnl0ZXMgPCBz
ZWdtZW50LT5zaXplSW5CeXRlcykpCi0gICAgICAgICAgICBleGNlcHRpb24gPSBkYXRhU2VnbWVu
dEZhaWwoZXhlYywgdm0sIHNjb3BlLCBzaXplSW5CeXRlcywgc2VnbWVudC0+c2l6ZUluQnl0ZXMs
IG9mZnNldCwgIiwgc2VnbWVudCBpcyB0b28gYmlnIl9zKTsKKyAgICAgICAgICAgIGV4Y2VwdGlv
biA9IGRhdGFTZWdtZW50RmFpbChnbG9iYWxPYmplY3QsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMs
IHNlZ21lbnQtPnNpemVJbkJ5dGVzLCBvZmZzZXQsICIsIHNlZ21lbnQgaXMgdG9vIGJpZyJfcyk7
CiAgICAgICAgIGVsc2UgaWYgKFVOTElLRUxZKG9mZnNldCA+IHNpemVJbkJ5dGVzIC0gc2VnbWVu
dC0+c2l6ZUluQnl0ZXMpKQotICAgICAgICAgICAgZXhjZXB0aW9uID0gZGF0YVNlZ21lbnRGYWls
KGV4ZWMsIHZtLCBzY29wZSwgc2l6ZUluQnl0ZXMsIHNlZ21lbnQtPnNpemVJbkJ5dGVzLCBvZmZz
ZXQsICIsIHNlZ21lbnQgd3JpdGVzIG91dHNpZGUgb2YgbWVtb3J5Il9zKTsKKyAgICAgICAgICAg
IGV4Y2VwdGlvbiA9IGRhdGFTZWdtZW50RmFpbChnbG9iYWxPYmplY3QsIHZtLCBzY29wZSwgc2l6
ZUluQnl0ZXMsIHNlZ21lbnQtPnNpemVJbkJ5dGVzLCBvZmZzZXQsICIsIHNlZ21lbnQgd3JpdGVz
IG91dHNpZGUgb2YgbWVtb3J5Il9zKTsKICAgICB9KTsKIAogICAgIGlmIChVTkxJS0VMWShleGNl
cHRpb24pKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uLnZhbHVlKCk7CiAKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KHZtKTsKICAg
ICBmb3JFYWNoRWxlbWVudChbJl0gKGNvbnN0IFdhc206OkVsZW1lbnQmIGVsZW1lbnQsIHVpbnQz
Ml90IHRhYmxlSW5kZXgsIHVpbnQzMl90IGVsZW1lbnRJbmRleCkgewogICAgICAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgZWxlbWVudC5mdW5jdGlvbkluZGljZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGVzc2VudGlhbGx5IG1lYW5zIHdlJ3JlIGV4cG9y
dGluZyBhbiBpbXBvcnQuCkBAIC02MDMsNyArNjAxLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChKU09iamVjdCog
c3RhcnRGdW5jdGlvbiA9IG1fc3RhcnRGdW5jdGlvbi5nZXQoKSkgewogICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRh
KHZtLCBzdGFydEZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgICAgIGNhbGwoZXhlYywgc3RhcnRG
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCAqdm0uZW1wdHlMaXN0
KTsKKyAgICAgICAgY2FsbChnbG9iYWxPYmplY3QsIHN0YXJ0RnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwganNVbmRlZmluZWQoKSwgKnZtLmVtcHR5TGlzdCk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAppbmRleCAxOGUz
ZDQzZmE5MzFhYzIzY2QxZTUzZWNmMjlkODdhMjYwYzRlMWYwLi4xNGEyODQ5NzgzOWQzYzVkZjJi
YzVmM2RiOTFkMGIyYTQ2ZTI4Y2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKQEAgLTQ3LDE2ICs0NywxNiBA
QCBjbGFzcyBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCBmaW5hbCA6IHB1YmxpYyBBYnN0cmFjdE1v
ZHVsZVJlY29yZCB7CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7Ci0g
ICAgc3RhdGljIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiBjcmVhdGUoRXhlY1N0YXRlKiwgVk0m
LCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3Jt
YXRpb24mKTsKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIGNyZWF0ZShKU0ds
b2JhbE9iamVjdCosIFZNJiwgU3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAKICAgICB2b2lkIHByZXBhcmVMaW5rKFZNJiwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKik7Ci0gICAgdm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpTVmFsdWUg
c2NyaXB0RmV0Y2hlciwgSlNPYmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2Rl
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSopOwor
ICAgIHZvaWQgbGluayhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgc2NyaXB0RmV0Y2hlciwgSlNP
YmplY3QqIGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEpTR2xvYmFsT2JqZWN0Kik7CiAKIHByaXZhdGU6CiAg
ICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlm
aWVyJik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJiwgY29uc3Qg
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsT2JqZWN0KiwgVk0mLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwogICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVJ1bnRpbWVFcnJvckNvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3Ry
dWN0b3IuY3BwCmluZGV4IGEyZjQ4OWU0Zjc0MjE3ODgxOWVkMDNhYTg1ZWY5NzZmODYxMDNhNzgu
LjUzMjE4NzU0YjFkNTVjYzE2NjNlMjMwOWMzNjRmNDcxYTE3MjIxMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
UnVudGltZUVycm9yQ29uc3RydWN0b3IuY3BwCkBAIC00OSwxOCArNDksMTggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvcihKU0dsb2JhbE8KICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdl
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyA9IG1l
c3NhZ2UuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogbWVzc2FnZS50b1dURlN0cmluZyhjYWxs
RnJhbWUpOworICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS5pc1VuZGVmaW5lZCgp
ID8gU3RyaW5nKCkgOiBtZXNzYWdlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byogc3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5UnVu
dGltZUVycm9yU3RydWN0dXJlKCkpOworICAgIGF1dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVu
Y3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5q
c0NhbGxlZSgpLCBjYWxsRnJhbWUtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5UnVudGltZUVycm9yU3RydWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGNhbGxGcmFtZSwgdm0sIHN0cnVjdHVyZSwgV1RG
TW92ZShtZXNzYWdlU3RyaW5nKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIHN0cnVjdHVyZSwg
V1RGTW92ZShtZXNzYWdlU3RyaW5nKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBKU1ZhbHVlIG1lc3Nh
Z2UgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1
cmUgPSBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoY2FsbEZyYW1l
LCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFs
T2JqZWN0LCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZh
bHNlKSk7CiB9CiAKIFdlYkFzc2VtYmx5UnVudGltZUVycm9yQ29uc3RydWN0b3IqIFdlYkFzc2Vt
Ymx5UnVudGltZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBXZWJBc3NlbWJseVJ1bnRpbWVFcnJvclByb3RvdHlwZSogdGhpc1Byb3RvdHlwZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVRhYmxlQ29uc3RydWN0b3IuY3BwCmluZGV4IDQ5ZmU1ZTJiNjZlZTJlODBmNTU1ODA3Yjgz
MjY5ZWYwM2U3OGVhOGMuLjMxMzcwOGFlYzAyMDMxOGZiZjVmMmUyOWMyNDM4YTEzMDYzMDhlNWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFi
bGVDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlUYWJsZUNvbnN0cnVjdG9yLmNwcApAQCAtNTQsNjEgKzU0LDYxIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlUYWJsZShK
U0dsb2JhbE9iamVjdCoKICAgICB7CiAgICAgICAgIEpTVmFsdWUgYXJndW1lbnQgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApOwogICAgICAgICBpZiAoIWFyZ3VtZW50LmlzT2JqZWN0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwg
dGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGNhbGxGcmFtZSwgIldlYkFzc2VtYmx5LlRhYmxl
IGV4cGVjdHMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCJfcykpKTsKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiV2ViQXNzZW1ibHku
VGFibGUgZXhwZWN0cyBpdHMgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0Il9zKSkpOwog
ICAgICAgICBtZW1vcnlEZXNjcmlwdG9yID0ganNDYXN0PEpTT2JqZWN0Kj4oYXJndW1lbnQpOwog
ICAgIH0KIAogICAgIFdhc206OlRhYmxlRWxlbWVudFR5cGUgdHlwZTsKICAgICB7CiAgICAgICAg
IElkZW50aWZpZXIgZWxlbWVudElkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVs
ZW1lbnQiKTsKLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50VmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9y
LT5nZXQoY2FsbEZyYW1lLCBlbGVtZW50SWRlbnQpOworICAgICAgICBKU1ZhbHVlIGVsZW1lbnRW
YWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChnbG9iYWxPYmplY3QsIGVsZW1lbnRJZGVudCk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgICAgIFN0cmluZyBlbGVtZW50U3RyaW5nID0gZWxlbWVudFZhbHVlLnRvV1RGU3Ry
aW5nKGNhbGxGcmFtZSk7CisgICAgICAgIFN0cmluZyBlbGVtZW50U3RyaW5nID0gZWxlbWVudFZh
bHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChlbGVtZW50U3Ry
aW5nID09ICJmdW5jcmVmIiB8fCBlbGVtZW50U3RyaW5nID09ICJhbnlmdW5jIikKICAgICAgICAg
ICAgIHR5cGUgPSBXYXNtOjpUYWJsZUVsZW1lbnRUeXBlOjpGdW5jcmVmOwogICAgICAgICBlbHNl
IGlmIChlbGVtZW50U3RyaW5nID09ICJhbnlyZWYiKQogICAgICAgICAgICAgdHlwZSA9IFdhc206
OlRhYmxlRWxlbWVudFR5cGU6OkFueXJlZjsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIHRocm93U2NvcGUs
IGNyZWF0ZVR5cGVFcnJvcihjYWxsRnJhbWUsICJXZWJBc3NlbWJseS5UYWJsZSBleHBlY3RzIGl0
cyAnZWxlbWVudCcgZmllbGQgdG8gYmUgdGhlIHN0cmluZyAnZnVuY3JlZicgb3IgJ2FueXJlZici
X3MpKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
IldlYkFzc2VtYmx5LlRhYmxlIGV4cGVjdHMgaXRzICdlbGVtZW50JyBmaWVsZCB0byBiZSB0aGUg
c3RyaW5nICdmdW5jcmVmJyBvciAnYW55cmVmJyJfcykpKTsKICAgICB9CiAKICAgICBJZGVudGlm
aWVyIGluaXRpYWxJZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbml0aWFsIik7
Ci0gICAgSlNWYWx1ZSBpbml0aWFsU2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGNh
bGxGcmFtZSwgaW5pdGlhbElkZW50KTsKKyAgICBKU1ZhbHVlIGluaXRpYWxTaXplVmFsdWUgPSBt
ZW1vcnlEZXNjcmlwdG9yLT5nZXQoZ2xvYmFsT2JqZWN0LCBpbml0aWFsSWRlbnQpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgdWlu
dDMyX3QgaW5pdGlhbCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoY2FsbEZyYW1lLCBpbml0aWFsU2l6
ZVZhbHVlKTsKKyAgICB1aW50MzJfdCBpbml0aWFsID0gdG9Ob25XcmFwcGluZ1VpbnQzMihnbG9i
YWxPYmplY3QsIGluaXRpYWxTaXplVmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICAvLyBJbiBXZWJJREwsICJwcmVzZW50
IiBtZWFucyB0aGF0IFtbR2V0XV0gcmVzdWx0IGlzIHVuZGVmaW5lZCwgbm90IFtbSGFzUHJvcGVy
dHldXSByZXN1bHQuCiAgICAgLy8gaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRs
LWRpY3Rpb25hcmllcwogICAgIE9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtOwogICAgIElkZW50
aWZpZXIgbWF4aW11bUlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm1heGltdW0i
KTsKLSAgICBKU1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChjYWxs
RnJhbWUsIG1heGltdW1JZGVudCk7CisgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlE
ZXNjcmlwdG9yLT5nZXQoZ2xvYmFsT2JqZWN0LCBtYXhpbXVtSWRlbnQpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKCFtYXhT
aXplVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBtYXhpbXVtID0gdG9Ob25XcmFwcGlu
Z1VpbnQzMihjYWxsRnJhbWUsIG1heFNpemVWYWx1ZSk7CisgICAgICAgIG1heGltdW0gPSB0b05v
bldyYXBwaW5nVWludDMyKGdsb2JhbE9iamVjdCwgbWF4U2l6ZVZhbHVlKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgICAg
ICBpZiAoaW5pdGlhbCA+ICptYXhpbXVtKSB7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgdGhyb3dTY29wZSwKLSAgICAgICAgICAg
ICAgICBjcmVhdGVSYW5nZUVycm9yKGNhbGxGcmFtZSwgIidtYXhpbXVtJyBwcm9wZXJ0eSBtdXN0
IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgJ2luaXRpYWwnIHByb3BlcnR5Il9zKSkp
OworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsCisgICAgICAgICAgICAgICAgY3JlYXRlUmFuZ2VFcnJvcihn
bG9iYWxPYmplY3QsICInbWF4aW11bScgcHJvcGVydHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3Ig
ZXF1YWwgdG8gdGhlICdpbml0aWFsJyBwcm9wZXJ0eSJfcykpKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIFJlZlB0cjxXYXNtOjpUYWJsZT4gd2FzbVRhYmxlID0gV2FzbTo6VGFibGU6OnRyeUNy
ZWF0ZShpbml0aWFsLCBtYXhpbXVtLCB0eXBlKTsKICAgICBpZiAoIXdhc21UYWJsZSkgewotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgdGhy
b3dTY29wZSwKLSAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiY291bGRu
J3QgY3JlYXRlIFRhYmxlIl9zKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwKKyAgICAgICAgICAgIGNyZWF0
ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiY291bGRuJ3QgY3JlYXRlIFRhYmxlIl9zKSkpOwog
ICAgIH0KIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoY2FsbEZyYW1lLCB2bSwgZ2xvYmFsT2JqZWN0
LT53ZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5yZWxlYXNlTm9uTnVsbCgp
KSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUo
SlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0
LT53ZWJBc3NlbWJseVRhYmxlU3RydWN0dXJlKCksIHdhc21UYWJsZS5yZWxlYXNlTm9uTnVsbCgp
KSkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJB
c3NlbWJseVRhYmxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNz
ZW1ibHlUYWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0
cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUs
ICJXZWJBc3NlbWJseS5UYWJsZSIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIldlYkFzc2VtYmx5LlRhYmxlIikpOwogfQogCiBXZWJBc3NlbWJseVRhYmxlQ29u
c3RydWN0b3IqIFdlYkFzc2VtYmx5VGFibGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUqIHRoaXNQcm90b3R5
cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVRhYmxlUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCmluZGV4IDA5OWM0MGY5NTBiN2U5ZmYxYTYxOTg1MDhj
OGM1MmE5YTA1OTk5OTYuLmQxNjhmMzE4OTgzMGY0MTJhYWEwZGM0N2QzNjBmMjhlZDBjZjQwOTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFi
bGVQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5VGFibGVQcm90b3R5cGUuY3BwCkBAIC01NSwxMyArNTUsMTMgQEAgY29uc3QgQ2xhc3NJ
bmZvIFdlYkFzc2VtYmx5VGFibGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5LlRh
YmxlIiwgJkJhc2UKICBAZW5kCiAgKi8KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNXZWJBc3Nl
bWJseVRhYmxlKiBnZXRUYWJsZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB2KQor
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNXZWJBc3NlbWJseVRhYmxlKiBnZXRUYWJsZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTVmFsdWUgdikKIHsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHJlc3VsdCA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHYpOwog
ICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIAotICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJleHBlY3RlZCB8dGhpc3wg
dmFsdWUgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiX3MpKTsKKyAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCAKKyAgICAgICAgICAg
IGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJleHBlY3RlZCB8dGhpc3wgdmFsdWUgdG8g
YmUgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiX3MpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC03Miw3ICs3Miw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1
bmNMZW5ndGgoSlNHbG9iYWxPYmplCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNX
ZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGNhbGxGcmFtZSwgdm0sIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBnZXRUYWJs
ZShnbG9iYWxPYmplY3QsIHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGFibGUtPmxlbmd0aCgpKSk7CiB9CkBAIC04MiwxNiAr
ODIsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlU
YWJsZVByb3RvRnVuY0dyb3coSlNHbG9iYWxPYmplY3QKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0gZ2V0VGFibGUoY2FsbEZyYW1lLCB2
bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJs
ZSA9IGdldFRhYmxlKGdsb2JhbE9iamVjdCwgdm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
LSAgICB1aW50MzJfdCBkZWx0YSA9IHRvTm9uV3JhcHBpbmdVaW50MzIoY2FsbEZyYW1lLCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICB1aW50MzJfdCBkZWx0YSA9IHRvTm9uV3JhcHBpbmdV
aW50MzIoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgdWludDMy
X3Qgb2xkTGVuZ3RoID0gdGFibGUtPmxlbmd0aCgpOwogCiAgICAgaWYgKCF0YWJsZS0+Z3Jvdyhk
ZWx0YSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oY2Fs
bEZyYW1lLCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGNhbGxGcmFtZSwgIldlYkFzc2Vt
Ymx5LlRhYmxlLnByb3RvdHlwZS5ncm93IGNvdWxkIG5vdCBncm93IHRoZSB0YWJsZSJfcykpKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiV2ViQXNzZW1i
bHkuVGFibGUucHJvdG90eXBlLmdyb3cgY291bGQgbm90IGdyb3cgdGhlIHRhYmxlIl9zKSkpOwog
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihvbGRMZW5ndGgpKTsKIH0KQEAg
LTEwMSwxMyArMTAxLDEzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdl
YkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQoSlNHbG9iYWxPYmplY3QqCiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGNh
bGxGcmFtZSwgdm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTV2ViQXNzZW1ibHlU
YWJsZSogdGFibGUgPSBnZXRUYWJsZShnbG9iYWxPYmplY3QsIHZtLCBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogCi0gICAgdWludDMyX3QgaW5kZXggPSB0b05vbldyYXBwaW5nVWludDMyKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CisgICAgdWludDMyX3QgaW5kZXggPSB0b05v
bldyYXBwaW5nVWludDMyKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpZiAoaW5kZXggPj0gdGFibGUtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VF
cnJvcihjYWxsRnJhbWUsICJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ2V0IGV4cGVjdHMg
YW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgdGFibGUiX3MpKSk7CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIldlYkFzc2VtYmx5LlRh
YmxlLnByb3RvdHlwZS5nZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgbGVuZ3Ro
IG9mIHRoZSB0YWJsZSJfcykpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGFibGUt
PmdldChpbmRleCkpOwogfQpAQCAtMTE3LDIyICsxMTcsMjIgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldChKU0dsb2JhbE9i
amVjdCoKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU1dlYkFzc2VtYmx5VGFibGUq
IHRhYmxlID0gZ2V0VGFibGUoY2FsbEZyYW1lLCB2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7
CisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGdldFRhYmxlKGdsb2JhbE9iamVjdCwg
dm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgxKTsKIAotICAgIHVpbnQzMl90IGluZGV4ID0gdG9Ob25XcmFwcGluZ1Vp
bnQzMihjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIHVpbnQzMl90IGlu
ZGV4ID0gdG9Ob25XcmFwcGluZ1VpbnQzMihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAKICAgICBpZiAoaW5kZXggPj0gdGFibGUtPmxlbmd0aCgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgdGhyb3dTY29wZSwg
Y3JlYXRlUmFuZ2VFcnJvcihjYWxsRnJhbWUsICJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUu
c2V0IGV4cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgdGFibGUi
X3MpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIldl
YkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5zZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhh
biB0aGUgbGVuZ3RoIG9mIHRoZSB0YWJsZSJfcykpKTsKIAogICAgIGlmICh0YWJsZS0+dGFibGUo
KS0+YXNGdW5jcmVmVGFibGUoKSkgewogICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNt
RnVuY3Rpb247CiAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBl
ckZ1bmN0aW9uOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpICYmICFpc1dlYkFzc2VtYmx5
SG9zdEZ1bmN0aW9uKHZtLCB2YWx1ZSwgd2FzbUZ1bmN0aW9uLCB3YXNtV3JhcHBlckZ1bmN0aW9u
KSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oY2Fs
bEZyYW1lLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoY2FsbEZyYW1lLCAiV2ViQXNzZW1i
bHkuVGFibGUucHJvdG90eXBlLnNldCBleHBlY3RzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUg
bnVsbCBvciBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5GdW5jdGlvbiJfcykpKTsKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiV2ViQXNzZW1ibHku
VGFibGUucHJvdG90eXBlLnNldCBleHBlY3RzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgbnVs
bCBvciBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5GdW5jdGlvbiJfcykpKTsKIAogICAgICAg
ICBpZiAodmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICB0YWJsZS0+Y2xlYXIoaW5kZXgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uY3BwCmluZGV4IGIxZDJlNGVlYTE1Y2MxZTNlY2MwMzhkMTk4ZWY1
NTlkYzNiNGE1ODguLmY4NGQ3M2RmMmY1NTUzNTNmODJlYTIyNDNlMjAxNTRjN2FiYWE3NzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKEpTR2xv
YmFsT2JqZWMKICAgICBKU09iamVjdCogZnVuY3Rpb24gPSB3YXNtRnVuY3Rpb24tPmZ1bmN0aW9u
KCk7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUodm0pLT5n
ZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxU
eXBlICE9IENhbGxUeXBlOjpOb25lKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShjYWxsKGNhbGxGcmFtZSwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwganNVbmRlZmluZWQoKSwgQXJnTGlzdChjYWxsRnJhbWUpKSkpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZ2xvYmFsT2JqZWN0LCBmdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBBcmdMaXN0KGNhbGxGcmFtZSkp
KSk7CiB9CiAKIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGltcG9ydGFibGVG
dW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJFcnJv
ckNvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckVycm9yQ29kZS5jcHAK
aW5kZXggYWFlYmQ0NjEzZDk5NTg2NzhkZTc5ZTljZGNjN2MzYWY3MWE5OThhNi4uMWJmOWY5Yzk2
ZDllOTZmMmNlNzBkYjhhOWU2OTQxMmFmMjU2ODY4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckVycm9yQ29kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckVycm9yQ29kZS5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgY29uc3QgY2hhciog
ZXJyb3JNZXNzYWdlKEVycm9yQ29kZSBlcnJvcikKICAgICByZXR1cm4gZXJyb3JNZXNzYWdlc1tz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZXJyb3IpXTsKIH0KIAotSlNPYmplY3QqIGVycm9yVG9UaHJv
dyhFeGVjU3RhdGUqIGV4ZWMsIEVycm9yQ29kZSBlcnJvcikKK0pTT2JqZWN0KiBlcnJvclRvVGhy
b3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXJyb3JDb2RlIGVycm9yKQogewogICAg
IHN3aXRjaCAoZXJyb3IpIHsKICAgICBjYXNlIEVycm9yQ29kZTo6Tm9FcnJvcjoKQEAgLTg0LDkg
Kzg0LDkgQEAgSlNPYmplY3QqIGVycm9yVG9UaHJvdyhFeGVjU3RhdGUqIGV4ZWMsIEVycm9yQ29k
ZSBlcnJvcikKICAgICBjYXNlIEVycm9yQ29kZTo6SW52YWxpZFVuaWNvZGVQcm9wZXJ0eUV4cHJl
c3Npb246CiAgICAgY2FzZSBFcnJvckNvZGU6Ok9mZnNldFRvb0xhcmdlOgogICAgIGNhc2UgRXJy
b3JDb2RlOjpJbnZhbGlkUmVndWxhckV4cHJlc3Npb25GbGFnczoKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZVN5bnRheEVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZShlcnJvcikpOworICAgICAgICByZXR1
cm4gY3JlYXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCBlcnJvck1lc3NhZ2UoZXJyb3IpKTsK
ICAgICBjYXNlIEVycm9yQ29kZTo6VG9vTWFueURpc2p1bmN0aW9uczoKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlKGVycm9yKSk7CisgICAg
ICAgIHJldHVybiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgZXJyb3JNZXNz
YWdlKGVycm9yKSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRXJyb3JDb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUveWFyci9ZYXJyRXJyb3JDb2RlLmgKaW5kZXggNDRiNjhiMmYyY2NiNjIz
NmQ2OWRlY2Q0Yjk4YmE0YTY0OWYwMDgyOS4uZTI2OWI1MjdkOTQ0ZTQyMGY1YTE1OWYyOTNlYjA4
NjViNTc2NGM5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckVy
cm9yQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJFcnJvckNvZGUu
aApAQCAtMjgsOCArMjgsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENhbGxGcmFtZTsK
K2NsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7Ci11c2luZyBFeGVjU3RhdGUg
PSBDYWxsRnJhbWU7CiAKIG5hbWVzcGFjZSBZYXJyIHsKIApAQCAtNjgsNiArNjgsNiBAQCBpbmxp
bmUgYm9vbCBoYXNIYXJkRXJyb3IoRXJyb3JDb2RlIGVycm9yQ29kZSkKICAgICAvLyBBbGwgb3Ro
ZXIgZXJyb3JzIGFyZSBkdWUgdG8gcHJvYmxlbXMgaW4gdGhlIGV4cHJlc3Npb24uCiAgICAgcmV0
dXJuIGhhc0Vycm9yKGVycm9yQ29kZSkgJiYgZXJyb3JDb2RlICE9IEVycm9yQ29kZTo6VG9vTWFu
eURpc2p1bmN0aW9uczsKIH0KLUpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBlcnJvclRvVGhy
b3coRXhlY1N0YXRlKiwgRXJyb3JDb2RlKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBl
cnJvclRvVGhyb3coSlNHbG9iYWxPYmplY3QqLCBFcnJvckNvZGUpOwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6WWFycgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggOWMyYjIwNDg0YjlmZjQzMTYxNGIw
ZWU3ZTJjOGY0N2IyZGQ5NDc1ZS4uZTg1ZDllM2Y1Mzc0ZTUyMzVkOTEyNGEzNzE5NGEzYjI3NDI3
OTk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC01MjAsMTMgKzUyMCwxMyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVy
Q2xpZW50LmgKICAgICBmaWxlYXBpL05ldHdvcmtTZW5kUXVldWUuaAogCisgICAgaGlzdG9yeS9C
YWNrRm9yd2FyZENhY2hlLmgKICAgICBoaXN0b3J5L0JhY2tGb3J3YXJkQ2xpZW50LmgKICAgICBo
aXN0b3J5L0JhY2tGb3J3YXJkQ29udHJvbGxlci5oCiAgICAgaGlzdG9yeS9CYWNrRm9yd2FyZEl0
ZW1JZGVudGlmaWVyLmgKICAgICBoaXN0b3J5L0NhY2hlZEZyYW1lLmgKICAgICBoaXN0b3J5L0Nh
Y2hlZEZyYW1lUGxhdGZvcm1EYXRhLmgKICAgICBoaXN0b3J5L0hpc3RvcnlJdGVtLmgKLSAgICBo
aXN0b3J5L1BhZ2VDYWNoZS5oCiAKICAgICBodG1sL0F1dG9jYXBpdGFsaXplLmgKICAgICBodG1s
L0F1dG9jYXBpdGFsaXplVHlwZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
cHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwCmluZGV4IDY5ZjhlMzJkNjA4MmQyZjNhM2E1ZTA1
MGMzNzI0OThkYWZjMzAwNTQuLjJhZGE5YjZhZGQyOGYxMGQ1YTg3MTcyNTgwOTNiNDE3ZDZmYzZk
YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlT
ZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5
U2Vzc2lvbi5jcHAKQEAgLTU0MCw3ICs1NDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBh
eVNlc3Npb246OmFib3J0KCkKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lk
PiBBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIG1lcmNoYW50U2Vzc2lvblZhbHVlKQorRXhjZXB0aW9u
T3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihKU0M6
OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIG1lcmNoYW50U2Vzc2lvblZhbHVl
KQogewogICAgIGlmICghY2FuQ29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oKSkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmgKaW5kZXggM2E5MjUwN2Nm
ZTdlYjM3ZjIzM2NhMDY2MmY4MWQ0OTczNGE4MWYwNy4uMWM0NzgxZDZiNTg2ZThhMjc0NDc3OWFj
NzRiZjFlZjk3NTg0MzYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
ZXBheS9BcHBsZVBheVNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxl
cGF5L0FwcGxlUGF5U2Vzc2lvbi5oCkBAIC0zNyw4ICszNyw4IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgQ2FsbEZyYW1lOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU1ZhbHVl
OwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC04MCw3ICs4MCw3IEBAIGNsYXNzIEFwcGxlUGF5U2Vzc2lvbiBmaW5hbCA6IHB1YmxpYyBQ
YXltZW50U2Vzc2lvbiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHViCiAKICAgICBFeGNlcHRp
b25Pcjx2b2lkPiBiZWdpbihEb2N1bWVudCYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGFib3J0
KCk7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgbWVyY2hhbnRTZXNzaW9uKTsKKyAgICBFeGNlcHRp
b25Pcjx2b2lkPiBjb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0
JiwgSlNDOjpKU1ZhbHVlIG1lcmNoYW50U2Vzc2lvbik7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4g
Y29tcGxldGVTaGlwcGluZ01ldGhvZFNlbGVjdGlvbihBcHBsZVBheVNoaXBwaW5nTWV0aG9kVXBk
YXRlJiYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2Vs
ZWN0aW9uKEFwcGxlUGF5U2hpcHBpbmdDb250YWN0VXBkYXRlJiYpOwogICAgIEV4Y2VwdGlvbk9y
PHZvaWQ+IGNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihBcHBsZVBheVBheW1lbnRNZXRo
b2RVcGRhdGUmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5
L0FwcGxlUGF5U2Vzc2lvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0Fw
cGxlUGF5U2Vzc2lvbi5pZGwKaW5kZXggMDg1MGJkNWI2MDUwMmU2YmY4NWMwZWU2YmNjNzA1ZjY5
MDU5MzkwOS4uZGMwMmE5MjEzN2E4YzdmZTI5YmY3ZDFkZGVkZTU0OThhYWNlMTQ1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmlk
bApAQCAtNDgsNyArNDgsNyBAQAogCiAgICAgW0NhbGxXaXRoPURvY3VtZW50LCBNYXlUaHJvd0V4
Y2VwdGlvbl0gdm9pZCBiZWdpbigpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBhYm9y
dCgpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbiwgQ2FsbFdpdGg9RXhlY1N0YXRlXSB2b2lkIGNv
bXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGFueSBtZXJjaGFudFNlc3Npb24pOworICAgIFtNYXlU
aHJvd0V4Y2VwdGlvbiwgQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSB2b2lkIGNvbXBsZXRlTWVyY2hh
bnRWYWxpZGF0aW9uKGFueSBtZXJjaGFudFNlc3Npb24pOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlv
biwgQ29uZGl0aW9uYWw9QVBQTEVfUEFZX1NFU1NJT05fVjNdIHZvaWQgY29tcGxldGVTaGlwcGlu
Z01ldGhvZFNlbGVjdGlvbihBcHBsZVBheVNoaXBwaW5nTWV0aG9kVXBkYXRlIHVwZGF0ZSk7CiAg
ICAgW01heVRocm93RXhjZXB0aW9uLCBDb25kaXRpb25hbD1BUFBMRV9QQVlfU0VTU0lPTl9WM10g
dm9pZCBjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbihBcHBsZVBheVNoaXBwaW5nQ29u
dGFjdFVwZGF0ZSB1cGRhdGUpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbiwgQ29uZGl0aW9uYWw9
QVBQTEVfUEFZX1NFU1NJT05fVjNdIHZvaWQgY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9u
KEFwcGxlUGF5UGF5bWVudE1ldGhvZFVwZGF0ZSB1cGRhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50TWVyY2hhbnRTZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRNZXJjaGFudFNlc3Npb24uaAppbmRl
eCBiNDMwZDYzNjUzMTBhODlhN2Y5NTQ0M2UwZTY4MjQ2OTdjZWVmNDY0Li4yNjg2YTkwMTIwNTdm
NTE5NzNmYWVjMTg4ZTNhMzEzZDU2MjBmZThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxlcGF5L1BheW1lbnRNZXJjaGFudFNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRNZXJjaGFudFNlc3Npb24uaApAQCAtMzIsOCAr
MzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxGcmFtZTsKK2NsYXNzIEpTR2xv
YmFsT2JqZWN0OwogY2xhc3MgSlNWYWx1ZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsK
IH0KIAogT0JKQ19DTEFTUyBQS1BheW1lbnRNZXJjaGFudFNlc3Npb247CkBAIC00OCw3ICs0OCw3
IEBAIGNsYXNzIFBheW1lbnRNZXJjaGFudFNlc3Npb24gewogICAgIHsKICAgICB9CiAKLSAgICBz
dGF0aWMgT3B0aW9uYWw8UGF5bWVudE1lcmNoYW50U2Vzc2lvbj4gZnJvbUpTKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgc3RhdGljIE9w
dGlvbmFsPFBheW1lbnRNZXJjaGFudFNlc3Npb24+IGZyb21KUyhKU0M6OkpTR2xvYmFsT2JqZWN0
JiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKICAgICBQS1BheW1lbnRN
ZXJjaGFudFNlc3Npb24gKnBrUGF5bWVudE1lcmNoYW50U2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcGtQYXltZW50TWVyY2hhbnRTZXNzaW9uLmdldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1lcmNoYW50U2Vzc2lvbkNv
Y29hLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWVy
Y2hhbnRTZXNzaW9uQ29jb2EubW0KaW5kZXggZTZmYzNiOTNiMDZkNTMyNTg1YTYzZDg5NDhmMDU5
MWVhOTFkOGI1MS4uMDMzMmI4MzQwYjg4MzFmYTczMDU0M2YxMTEwZTcyNDg2ZDVlYzlkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWVy
Y2hhbnRTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBh
eS9jb2NvYS9QYXltZW50TWVyY2hhbnRTZXNzaW9uQ29jb2EubW0KQEAgLTMzLDEwICszMywxMCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9wdGlvbmFsPFBheW1lbnRNZXJjaGFudFNlc3Np
b24+IFBheW1lbnRNZXJjaGFudFNlc3Npb246OmZyb21KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nJikKK09wdGlvbmFsPFBheW1lbnRNZXJjaGFudFNl
c3Npb24+IFBheW1lbnRNZXJjaGFudFNlc3Npb246OmZyb21KUyhKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZyYpCiB7CiAg
ICAgLy8gRklYTUU6IERvbid0IHJvdW5kLXRyaXAgdXNpbmcgTlNTdHJpbmcuCi0gICAgYXV0byBq
c29uU3RyaW5nID0gSlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICBhdXRvIGpz
b25TdHJpbmcgPSBKU09OU3RyaW5naWZ5KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgMCk7
CiAgICAgaWYgKCFqc29uU3RyaW5nKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0
L0FwcGxlUGF5UGF5bWVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
ZXBheS9wYXltZW50cmVxdWVzdC9BcHBsZVBheVBheW1lbnRIYW5kbGVyLmNwcAppbmRleCAwN2Iz
Njk0YmIzY2RlMjA0Njc4Y2JkZDVkODRhY2M1OWU3YmVjMWQ0Li40MTk1YzJmNmI3MmVmNGUxMzJh
MTllYjE4ZjQxZTg5NjMyMDcwZjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0FwcGxlUGF5UGF5bWVudEhhbmRsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvcGF5bWVudHJlcXVlc3QvQXBwbGVQYXlQ
YXltZW50SGFuZGxlci5jcHAKQEAgLTI4NCwxNyArMjg0LDE3IEBAIEV4Y2VwdGlvbk9yPEFwcGxl
UGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4gQXBwbGVQYXlQYXlt
ZW50SGFuCiAgICAgICAgIGlmIChzZXJpYWxpemVkTW9kaWZpZXJEYXRhW2ldLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8mIGV4ZWNTdGF0ZSA9ICpkb2N1
bWVudCgpLmV4ZWNTdGF0ZSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShleGVjU3RhdGUudm0oKSk7CisgICAgICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3Qg
PSAqZG9jdW1lbnQoKS5leGVjU3RhdGUoKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpKTsKICAgICAgICAgSlNDOjpKU1Zh
bHVlIGRhdGE7CiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gbG9jayA9IEpTQzo6SlNMb2Nr
SG9sZGVyIHsgJmV4ZWNTdGF0ZSB9OwotICAgICAgICAgICAgZGF0YSA9IEpTT05QYXJzZSgmZXhl
Y1N0YXRlLCBzZXJpYWxpemVkTW9kaWZpZXJEYXRhW2ldKTsKKyAgICAgICAgICAgIGF1dG8gbG9j
ayA9IEpTQzo6SlNMb2NrSG9sZGVyIHsgJmxleGljYWxHbG9iYWxPYmplY3QgfTsKKyAgICAgICAg
ICAgIGRhdGEgPSBKU09OUGFyc2UoJmxleGljYWxHbG9iYWxPYmplY3QsIHNlcmlhbGl6ZWRNb2Rp
ZmllckRhdGFbaV0pOwogICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH07CiAg
ICAgICAgIH0KIAotICAgICAgICBhdXRvIGFwcGxlUGF5TW9kaWZpZXIgPSBjb252ZXJ0RGljdGlv
bmFyeTxBcHBsZVBheU1vZGlmaWVyPihleGVjU3RhdGUsIFdURk1vdmUoZGF0YSkpOworICAgICAg
ICBhdXRvIGFwcGxlUGF5TW9kaWZpZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxBcHBsZVBheU1vZGlm
aWVyPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGRhdGEpKTsKICAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEV4aXN0aW5n
RXhjZXB0aW9uRXJyb3IgfTsKIApAQCAtNTQ1LDEwICs1NDUsMTAgQEAgc3RhdGljIFJlZjxQYXlt
ZW50QWRkcmVzcz4gY29udmVydChjb25zdCBBcHBsZVBheVBheW1lbnRDb250YWN0JiBjb250YWN0
KQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNP
YmplY3Q+IHRvSlNEaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0IFQm
IHZhbHVlKQorc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IHRvSlNEaWN0aW9uYXJ5
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IFQmIHZhbHVl
KQogewotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sgeyAmZXhlY1N0YXRlIH07Ci0gICAgcmV0
dXJuIHsgZXhlY1N0YXRlLnZtKCksIGFzT2JqZWN0KHRvSlM8SURMRGljdGlvbmFyeTxUPj4oZXhl
Y1N0YXRlLCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjU3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpKSwgdmFsdWUpKSB9OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sg
eyAmbGV4aWNhbEdsb2JhbE9iamVjdCB9OworICAgIHJldHVybiB7IGxleGljYWxHbG9iYWxPYmpl
Y3Qudm0oKSwgYXNPYmplY3QodG9KUzxJRExEaWN0aW9uYXJ5PFQ+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHZhbHVlKSkgfTsKIH0KIAogdm9pZCBBcHBsZVBheVBheW1lbnRIYW5kbGVyOjpkaWRBdXRo
b3JpemVQYXltZW50KGNvbnN0IFBheW1lbnQmIHBheW1lbnQpCkBAIC01NTcsOCArNTU3LDggQEAg
dm9pZCBBcHBsZVBheVBheW1lbnRIYW5kbGVyOjpkaWRBdXRob3JpemVQYXltZW50KGNvbnN0IFBh
eW1lbnQmIHBheW1lbnQpCiAKICAgICBhdXRvIGFwcGxlUGF5UGF5bWVudCA9IHBheW1lbnQudG9B
cHBsZVBheVBheW1lbnQodmVyc2lvbigpKTsKICAgICBhdXRvIHNoaXBwaW5nQ29udGFjdCA9IGFw
cGxlUGF5UGF5bWVudC5zaGlwcGluZ0NvbnRhY3QudmFsdWVPcihBcHBsZVBheVBheW1lbnRDb250
YWN0KCkpOwotICAgIGF1dG8gZGV0YWlsc0Z1bmN0aW9uID0gW2FwcGxlUGF5UGF5bWVudCA9IFdU
Rk1vdmUoYXBwbGVQYXlQYXltZW50KV0oSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSkgewotICAg
ICAgICByZXR1cm4gdG9KU0RpY3Rpb25hcnkoZXhlY1N0YXRlLCBhcHBsZVBheVBheW1lbnQpOwor
ICAgIGF1dG8gZGV0YWlsc0Z1bmN0aW9uID0gW2FwcGxlUGF5UGF5bWVudCA9IFdURk1vdmUoYXBw
bGVQYXlQYXltZW50KV0oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkg
eworICAgICAgICByZXR1cm4gdG9KU0RpY3Rpb25hcnkobGV4aWNhbEdsb2JhbE9iamVjdCwgYXBw
bGVQYXlQYXltZW50KTsKICAgICB9OwogCiAgICAgbV9wYXltZW50UmVxdWVzdC0+YWNjZXB0KFdU
Rjo6Z2V0PFVSTD4obV9pZGVudGlmaWVyKS5zdHJpbmcoKSwgV1RGTW92ZShkZXRhaWxzRnVuY3Rp
b24pLCBjb252ZXJ0KHNoaXBwaW5nQ29udGFjdCksIHNoaXBwaW5nQ29udGFjdC5sb2NhbGl6ZWRO
YW1lLCBzaGlwcGluZ0NvbnRhY3QuZW1haWxBZGRyZXNzLCBzaGlwcGluZ0NvbnRhY3QucGhvbmVO
dW1iZXIpOwpAQCAtNTg3LDggKzU4Nyw4IEBAIHZvaWQgQXBwbGVQYXlQYXltZW50SGFuZGxlcjo6
ZGlkU2VsZWN0UGF5bWVudE1ldGhvZChjb25zdCBQYXltZW50TWV0aG9kJiBwYXltZW50CiAKICAg
ICBhdXRvIGFwcGxlUGF5UGF5bWVudE1ldGhvZCA9IHBheW1lbnRNZXRob2QudG9BcHBsZVBheVBh
eW1lbnRNZXRob2QoKTsKICAgICBtX3NlbGVjdGVkUGF5bWVudE1ldGhvZFR5cGUgPSBhcHBsZVBh
eVBheW1lbnRNZXRob2QudHlwZTsKLSAgICBtX3BheW1lbnRSZXF1ZXN0LT5wYXltZW50TWV0aG9k
Q2hhbmdlZChXVEY6OmdldDxVUkw+KG1faWRlbnRpZmllcikuc3RyaW5nKCksIFthcHBsZVBheVBh
eW1lbnRNZXRob2QgPSBXVEZNb3ZlKGFwcGxlUGF5UGF5bWVudE1ldGhvZCldKEpTQzo6RXhlY1N0
YXRlJiBleGVjU3RhdGUpIHsKLSAgICAgICAgcmV0dXJuIHRvSlNEaWN0aW9uYXJ5KGV4ZWNTdGF0
ZSwgYXBwbGVQYXlQYXltZW50TWV0aG9kKTsKKyAgICBtX3BheW1lbnRSZXF1ZXN0LT5wYXltZW50
TWV0aG9kQ2hhbmdlZChXVEY6OmdldDxVUkw+KG1faWRlbnRpZmllcikuc3RyaW5nKCksIFthcHBs
ZVBheVBheW1lbnRNZXRob2QgPSBXVEZNb3ZlKGFwcGxlUGF5UGF5bWVudE1ldGhvZCldKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIHRv
SlNEaWN0aW9uYXJ5KGxleGljYWxHbG9iYWxPYmplY3QsIGFwcGxlUGF5UGF5bWVudE1ldGhvZCk7
CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMt
Y2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNv
dXJjZS5jcHAKaW5kZXggNTAzODE0MTViMjAyZDc4OWFiMGIzZTBhOGY2MTQyZGEwNGM5OWFjZS4u
Y2ZjYjRlOTZhOWI1NmIwMzViNTdjMTgzODkzMTEzMjI2YTc3OWVhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdz
RGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9h
cmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAg
dm9pZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpnZXRUeXBlKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgUmVmPERlZmVycmVkUHIKICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyBzdHJp
bmc7Ci0gICAgICAgIHJlc3VsdC5nZXRTdHJpbmcoaXRlbVByb21pc2UtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIHN0cmluZyk7CisgICAgICAgIHJlc3VsdC5nZXRTdHJpbmcoaXRlbVBy
b21pc2UtPmdsb2JhbE9iamVjdCgpLCBzdHJpbmcpOwogICAgICAgICBpZiAoIXN0cmluZy5pc051
bGwoKSkgewogICAgICAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZTxJRExJbnRlcmZhY2U8QmxvYj4+
KGJsb2JGcm9tU3RyaW5nKHN0cmluZywgdHlwZSkpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVN0
YXR1c01hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlh
S2V5U3RhdHVzTWFwLmNwcAppbmRleCA0Y2E3OTNmNDIyNzUyOTc3Y2ZmOTFhMzM1OTNkYjNlYWRk
N2ZmMWEyLi43YTdkMDA4NmFiZWFjZmJkNTVjODE5MTE4M2UzZmRkNjZiMTI5NjVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U3RhdHVz
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlh
S2V5U3RhdHVzTWFwLmNwcApAQCAtNzUsNyArNzUsNyBAQCBib29sIE1lZGlhS2V5U3RhdHVzTWFw
OjpoYXMoY29uc3QgQnVmZmVyU291cmNlJiBrZXlJZCkKICAgICAgICAgWyZrZXlJZF0gKGF1dG8m
IGl0KSB7IHJldHVybiBrZXlJZHNNYXRjaChpdC5maXJzdCwga2V5SWQpOyB9KTsKIH0KIAotSlND
OjpKU1ZhbHVlIE1lZGlhS2V5U3RhdHVzTWFwOjpnZXQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBCdWZmZXJTb3VyY2UmIGtleUlkKQorSlNDOjpKU1ZhbHVlIE1lZGlhS2V5U3RhdHVzTWFw
OjpnZXQoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIGNvbnN0IEJ1ZmZlclNvdXJjZSYga2V5
SWQpCiB7CiAgICAgaWYgKCFtX3Nlc3Npb24pCiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZp
bmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L01lZGlhS2V5U3RhdHVzTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL01lZGlhS2V5U3RhdHVzTWFwLmgKaW5kZXggOTE1OTQyOWRjOTdhYTc3YzUxZmZiMzA0NzY1
ZTYyYTI3YjM0MzQ1Yy4uYTFkOWE1ZGJiMTUwZGU3OTRkZjdkYjQ4ZjE3ZDc0MmUxMjE5MGJjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtl
eVN0YXR1c01hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
TWVkaWFLZXlTdGF0dXNNYXAuaApAQCAtNTUsNyArNTUsNyBAQCBjbGFzcyBNZWRpYUtleVN0YXR1
c01hcCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhS2V5U3RhdHVzTWFwPiB7CiAKICAgICB1bnNp
Z25lZCBsb25nIHNpemUoKTsKICAgICBib29sIGhhcyhjb25zdCBCdWZmZXJTb3VyY2UmKTsKLSAg
ICBKU0M6OkpTVmFsdWUgZ2V0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgQnVmZmVyU291cmNlJik7
CisgICAgSlNDOjpKU1ZhbHVlIGdldChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgY29uc3QgQnVmZmVy
U291cmNlJik7CiAKICAgICBjbGFzcyBJdGVyYXRvciB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9NZWRpYUtleVN0YXR1c01h
cC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U3Rh
dHVzTWFwLmlkbAppbmRleCA4NTY3ZTEyYWNmNDVmZTEzNjc2OGRiM2RhMzZkMzM5NjI5MDJmNTY3
Li5jNmE4MzgxOTBhOWM1NjMzYjZjZDY3OWVmYjI3ZmNjMTFiNmQwMDIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U3RhdHVzTWFwLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL01lZGlhS2V5U3Rh
dHVzTWFwLmlkbApAQCAtNDQsNSArNDQsNSBAQCBlbnVtIE1lZGlhS2V5U3RhdHVzIHsKICAgICBp
dGVyYWJsZTxCdWZmZXJTb3VyY2UsIE1lZGlhS2V5U3RhdHVzPjsKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZyBzaXplOwogICAgIGJvb2xlYW4gaGFzKEJ1ZmZlclNvdXJjZSBr
ZXlJZCk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZV0gYW55IGdldChCdWZmZXJTb3VyY2Uga2V5
SWQpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3RdIGFueSBnZXQoQnVmZmVyU291cmNlIGtl
eUlkKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1l
ZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9sZWdhY3kvTGVnYWN5Q0RNU2Vzc2lvbkNsZWFyS2V5LmNw
cAppbmRleCA3ZDkzNDI0NjJkZWRjOTcxYWU1MTBkODA5YzY5Y2Y3ZjBiYWMxYTZkLi43M2JkY2Yy
ZTI5NjJlMzM4MjY5YWE4NTQyN2FhZDcyNTJmN2YzZGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL2xlZ2FjeS9MZWdhY3lDRE1TZXNzaW9uQ2xlYXJL
ZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvbGVnYWN5
L0xlZ2FjeUNETVNlc3Npb25DbGVhcktleS5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiV2ViS2l0
TWVkaWFLZXlFcnJvci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNPTk9iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+CkBAIC0xMDEs
MTUgKzEwMSwxNSBAQCBib29sIENETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyYXkq
IHJhd0tleXNEYXRhLCBSZWZQdHI8VWludDhBcnJheT4mIG5leAogICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2
bSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpKTsKLSAgICAg
ICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgIGF1
dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSAqZ2xvYmFsT2JqZWN0OwogCi0gICAgICAgIGF1dG8g
a2V5c0RhdGFWYWx1ZSA9IEpTT05QYXJzZSgmc3RhdGUsIHJhd0tleXNTdHJpbmcpOworICAgICAg
ICBhdXRvIGtleXNEYXRhVmFsdWUgPSBKU09OUGFyc2UoJmxleGljYWxHbG9iYWxPYmplY3QsIHJh
d0tleXNTdHJpbmcpOwogICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWtleXNEYXRh
VmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkNs
ZWFyS2V5Ojp1cGRhdGUoJXApIC0gZmFpbGVkOiBpbnZhbGlkIEpTT04iLCB0aGlzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBrZXlzQXJyYXlWYWx1ZSA9
IGFzT2JqZWN0KGtleXNEYXRhVmFsdWUpLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAia2V5cyIpKTsKKyAgICAgICAgYXV0byBrZXlzQXJyYXlWYWx1ZSA9IGFzT2JqZWN0
KGtleXNEYXRhVmFsdWUpLT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJrZXlzIikpOwogICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
IWlzSlNBcnJheShrZXlzQXJyYXlWYWx1ZSkpIHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNE
TVNlc3Npb25DbGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDoga2V5cyBhcnJheSBtaXNzaW5n
IG9yIGVtcHR5IiwgdGhpcyk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEyNCw3ICsxMjQsNyBA
QCBib29sIENETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyYXkqIHJhd0tleXNEYXRh
LCBSZWZQdHI8VWludDhBcnJheT4mIG5leAogCiAgICAgICAgIGJvb2wgZm91bmRWYWxpZEtleSA9
IGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIGF1dG8ga2V5VmFsdWUgPSBrZXlzQXJyYXktPmdldEluZGV4KCZzdGF0ZSwg
aSk7CisgICAgICAgICAgICBhdXRvIGtleVZhbHVlID0ga2V5c0FycmF5LT5nZXRJbmRleCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgaSk7CiAKICAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24o
KSB8fCAha2V5VmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIExPRyhNZWRpYSwg
IkNETVNlc3Npb25DbGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDogbnVsbCBrZXlEaWN0aW9u
YXJ5IiwgdGhpcyk7CkBAIC0xMzMsMTIgKzEzMywxMiBAQCBib29sIENETVNlc3Npb25DbGVhcktl
eTo6dXBkYXRlKFVpbnQ4QXJyYXkqIHJhd0tleXNEYXRhLCBSZWZQdHI8VWludDhBcnJheT4mIG5l
eAogCiAgICAgICAgICAgICBhdXRvIGtleU9iamVjdCA9IGFzT2JqZWN0KGtleVZhbHVlKTsKIAot
ICAgICAgICAgICAgYXV0byBnZXRTdHJpbmdQcm9wZXJ0eSA9IFsmc2NvcGUsICZzdGF0ZSwgJmtl
eU9iamVjdCwgJnZtXShjb25zdCBjaGFyKiBuYW1lKSAtPiBTdHJpbmcgewotICAgICAgICAgICAg
ICAgIGF1dG8gdmFsdWUgPSBrZXlPYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIG5hbWUpKTsKKyAgICAgICAgICAgIGF1dG8gZ2V0U3RyaW5nUHJvcGVydHkgPSBb
JnNjb3BlLCAmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmtleU9iamVjdCwgJnZtXShjb25zdCBjaGFy
KiBuYW1lKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBrZXlPYmpl
Y3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
bmFtZSkpOwogICAgICAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUu
aXNTdHJpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICAg
ICAgICAgIGF1dG8gc3RyaW5nID0gYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmc3RhdGUpOworICAg
ICAgICAgICAgICAgIGF1dG8gc3RyaW5nID0gYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaWRsIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaWRsCmluZGV4IGZmYzJlNDliOWYzYjEy
ZDY2YWIzNDU4OWQwYzlmMmIwN2IwMmE4ODEuLjI2ZDVkZjRmMzQzZWQzNzhmMDllOGVmMTIzNmFh
NWEyYjZjZjIzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hCb2R5LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5p
ZGwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBJbnRlcmZhY2VOYW1lPUJvZHksCiAgICAgTm9JbnRl
cmZhY2VPYmplY3QKIF0gaW50ZXJmYWNlIEZldGNoQm9keSB7Ci0gICAgW0ltcGxlbWVudGVkQXM9
cmVhZGFibGVTdHJlYW0sIENhbGxXaXRoPUV4ZWNTdGF0ZV0gcmVhZG9ubHkgYXR0cmlidXRlIFJl
YWRhYmxlU3RyZWFtPyBib2R5OworICAgIFtJbXBsZW1lbnRlZEFzPXJlYWRhYmxlU3RyZWFtLCBD
YWxsV2l0aD1HbG9iYWxPYmplY3RdIHJlYWRvbmx5IGF0dHJpYnV0ZSBSZWFkYWJsZVN0cmVhbT8g
Ym9keTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBib2R5VXNlZDsKICAgICBbTmV3
T2JqZWN0XSBQcm9taXNlPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcigpOwogICAgIFtOZXdPYmpl
Y3RdIFByb21pc2U8QmxvYj4gYmxvYigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoQm9keU93bmVyLmNwcAppbmRleCAzYjllMWJhYTAwNjRlYWE4MTdiM2ExM2RiMzAz
MjdlZDRkMzE2ZTk1Li5mY2RmYjQ1ODc2NjJiZmVjMjAyMzE3OTQxMjc5ODEyMjgxODJiMTU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNwcApA
QCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgRmV0Y2hCb2R5T3duZXI6OkJsb2JMb2FkZXI6OmRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYpCiAgICAgICAgIG93bmVyLmJsb2JMb2FkaW5nRmFpbGVk
KCk7CiB9CiAKLVJlZlB0cjxSZWFkYWJsZVN0cmVhbT4gRmV0Y2hCb2R5T3duZXI6OnJlYWRhYmxl
U3RyZWFtKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK1JlZlB0cjxSZWFkYWJsZVN0cmVhbT4gRmV0
Y2hCb2R5T3duZXI6OnJlYWRhYmxlU3RyZWFtKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlKQog
ewogICAgIGlmIChpc0JvZHlOdWxsT3JPcGFxdWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC0zMzUsNyArMzM1LDcgQEAgUmVmUHRyPFJlYWRhYmxlU3RyZWFtPiBGZXRjaEJvZHlPd25l
cjo6cmVhZGFibGVTdHJlYW0oSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogICAgIHJldHVybiBtX2Jv
ZHktPnJlYWRhYmxlU3RyZWFtKCk7CiB9CiAKLXZvaWQgRmV0Y2hCb2R5T3duZXI6OmNyZWF0ZVJl
YWRhYmxlU3RyZWFtKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3ZvaWQgRmV0Y2hCb2R5T3duZXI6
OmNyZWF0ZVJlYWRhYmxlU3RyZWFtKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlKQogewogICAg
IEFTU0VSVCghbV9yZWFkYWJsZVN0cmVhbVNvdXJjZSk7CiAgICAgaWYgKGlzRGlzdHVyYmVkKCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3du
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuaAppbmRl
eCBkMWU3ZjMzNmZjOTMyNTVmOGJkNDBmM2ZhY2ViODJlNDc0ZjU4MzM4Li5kZDIxZTU1NjZjYTQ4
MDdmODMzMThmMzIzNzk2MGVlZmM2ODQ5NTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaEJvZHlPd25lci5oCkBAIC01Nyw3ICs1Nyw3IEBAIGNsYXNzIEZldGNoQm9k
eU93bmVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmV0Y2hCb2R5T3duZXI+LCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0CiAKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gISFtX2Jsb2JM
b2FkZXI7IH0KIAotICAgIFJlZlB0cjxSZWFkYWJsZVN0cmVhbT4gcmVhZGFibGVTdHJlYW0oSlND
OjpFeGVjU3RhdGUmKTsKKyAgICBSZWZQdHI8UmVhZGFibGVTdHJlYW0+IHJlYWRhYmxlU3RyZWFt
KEpTQzo6SlNHbG9iYWxPYmplY3QmKTsKICAgICBib29sIGhhc1JlYWRhYmxlU3RyZWFtQm9keSgp
IGNvbnN0IHsgcmV0dXJuIG1fYm9keSAmJiBtX2JvZHktPmhhc1JlYWRhYmxlU3RyZWFtKCk7IH0K
IAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKQEAgLTgyLDcgKzgyLDcgQEAgY2xhc3MgRmV0Y2hC
b2R5T3duZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxGZXRjaEJvZHlPd25lcj4sIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QKICAgICB2b2lkIGNvbnN1bWVPbmNlTG9hZGluZ0ZpbmlzaGVkKEZldGNoQm9k
eUNvbnN1bWVyOjpUeXBlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKIAogICAgIHZvaWQgc2V0
Qm9keShGZXRjaEJvZHkmJiBib2R5KSB7IG1fYm9keSA9IFdURk1vdmUoYm9keSk7IH0KLSAgICB2
b2lkIGNyZWF0ZVJlYWRhYmxlU3RyZWFtKEpTQzo6RXhlY1N0YXRlJik7CisgICAgdm9pZCBjcmVh
dGVSZWFkYWJsZVN0cmVhbShKU0M6OkpTR2xvYmFsT2JqZWN0Jik7CiAKICAgICAvLyBBY3RpdmVE
T01PYmplY3QgQVBJCiAgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5oCmluZGV4IGYyNDA3ZmZlZDU0MjFkMjNlZjc1
NDJlNDBkMmY2NDQ5YjJkODQ3ODAuLjhhMGViZTlmZWNhNDNiN2M3MGJjZWUxZGFhNGNkZWYxMjRj
MTA4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNw
b25zZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5o
CkBAIC0zOCw3ICszOCw2IEBACiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxGcmFtZTsKIGNs
YXNzIEpTVmFsdWU7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiB9OwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0
aW9uL0dlb2xvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24v
R2VvbG9jYXRpb24uY3BwCmluZGV4IDFlYzczNmZiOGJlYzgyNzVlZDRkZjg3OGY4MGRjYmU5NWI0
YTA3NTEuLmFjZGFmNzllM2UxMzNjY2VkNWU0N2I4YTU2NTliYjI0NDFmMTk1ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwCkBA
IC0xNjUsNyArMTY1LDcgQEAgYm9vbCBHZW9sb2NhdGlvbjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50
U3VzcGVuc2lvbigpIGNvbnN0CiAgICAgCiB2b2lkIEdlb2xvY2F0aW9uOjpzdXNwZW5kKFJlYXNv
bkZvclN1c3BlbnNpb24gcmVhc29uKQogewotICAgIGlmIChyZWFzb24gPT0gUmVhc29uRm9yU3Vz
cGVuc2lvbjo6UGFnZUNhY2hlKSB7CisgICAgaWYgKHJlYXNvbiA9PSBSZWFzb25Gb3JTdXNwZW5z
aW9uOjpCYWNrRm9yd2FyZENhY2hlKSB7CiAgICAgICAgIHN0b3AoKTsKICAgICAgICAgbV9yZXNl
dE9uUmVzdW1lID0gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCA5MzNjYmE1MTEwOWQzMThjOGE5YjMzMTAwNzBhODUw
MTVlYTJjYmJhLi44NzcxMDIyMjBhNjlhMDZiOTJlZDI3YzJjNTM2NjQzZjViNGVjNzViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTEw
MSw3ICsxMDEsNyBAQCBJREJUcmFuc2FjdGlvbiYgSURCQ3Vyc29yOjp0cmFuc2FjdGlvbigpIGNv
bnN0CiAgICAgcmV0dXJuIGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkudHJhbnNhY3Rpb24oKTsKIH0K
IAotRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJDdXJzb3I6OnVwZGF0ZShFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJ
REJDdXJzb3I6OnVwZGF0ZShKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6dXBkYXRlIik7CiAgICAgQVNTRVJUKCZl
ZmZlY3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwpAQCAtMTY4LDcgKzE2OCw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IElEQkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBjb3VudCkKICAgICByZXR1cm4g
eyB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBJREJDdXJzb3I6OmNvbnRpbnVlUHJpbWFyeUtl
eShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHByaW1hcnlLZXlW
YWx1ZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IElEQkN1cnNvcjo6Y29udGludWVQcmltYXJ5S2V5KEpT
R2xvYmFsT2JqZWN0JiBzdGF0ZSwgSlNWYWx1ZSBrZXlWYWx1ZSwgSlNWYWx1ZSBwcmltYXJ5S2V5
VmFsdWUpCiB7CiAgICAgaWYgKCFtX3JlcXVlc3QpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciB9OwpAQCAtMjIwLDcgKzIyMCw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IElEQkN1cnNvcjo6Y29udGludWVQcmltYXJ5S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUga2V5VmFsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gSURCQ3Vy
c29yOjpjb250aW51ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBKU1ZhbHVlIGtleVZh
bHVlKQorRXhjZXB0aW9uT3I8dm9pZD4gSURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKEpTR2xv
YmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmFsdWUga2V5VmFsdWUpCiB7CiAgICAgUmVmUHRyPElE
QktleT4ga2V5OwogICAgIGlmICgha2V5VmFsdWUuaXNVbmRlZmluZWQoKSkKQEAgLTI4Miw3ICsy
ODIsNyBAQCB2b2lkIElEQkN1cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJL
ZXlEYXRhJiBrZXksIGNvbnN0IElEQktleURhdGEmCiAgICAgdHJhbnNhY3Rpb24oKS5pdGVyYXRl
Q3Vyc29yKCp0aGlzLCB7IGtleSwgcHJpbWFyeUtleSwgMCB9KTsKIH0KIAotRXhjZXB0aW9uT3I8
UmVmPFdlYkNvcmU6OklEQlJlcXVlc3Q+PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUpCitFeGNlcHRpb25PcjxSZWY8V2ViQ29yZTo6SURCUmVxdWVzdD4+IElEQkN1
cnNvcjo6ZGVsZXRlRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QmIHN0YXRlKQogewogICAgIExPRyhJ
bmRleGVkREIsICJJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uIik7CiAgICAgQVNTRVJUKCZlZmZl
Y3RpdmVPYmplY3RTdG9yZSgpLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQo
KSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuaAppbmRleCBmN2UyMDYyYzNkNTk0ZDI0MmNjZTRhMDlkNGU5MWVhMTE2
NTgwOTFlLi40NjIyZTcwMzM0NGIzNjA4MGE3MWRlYTMyZGY4YTUzMWRjZmM1OGFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAtNjYsMTEgKzY2
LDExIEBAIGNsYXNzIElEQkN1cnNvciA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBS
ZWZDb3VudGVkPElEQkN1cnNvcj4gewogICAgIEpTVmFsdWVJbldyYXBwZWRPYmplY3QmIHByaW1h
cnlLZXlXcmFwcGVyKCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5V3JhcHBlcjsgfQogICAgIEpTVmFs
dWVJbldyYXBwZWRPYmplY3QmIHZhbHVlV3JhcHBlcigpIHsgcmV0dXJuIG1fdmFsdWVXcmFwcGVy
OyB9CiAKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IHVwZGF0ZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiB1
cGRhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgRXhjZXB0aW9u
T3I8dm9pZD4gYWR2YW5jZSh1bnNpZ25lZCk7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gY29udGlu
dWVGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBrZXkpOwotICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IGNvbnRpbnVlUHJpbWFyeUtleShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSBrZXksIEpTQzo6SlNWYWx1ZSBwcmltYXJ5S2V5KTsKLSAgICBFeGNlcHRpb25PcjxSZWY8
SURCUmVxdWVzdD4+IGRlbGV0ZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlJik7CisgICAgRXhjZXB0
aW9uT3I8dm9pZD4gY29udGludWVGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpK
U1ZhbHVlIGtleSk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gY29udGludWVQcmltYXJ5S2V5KEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUga2V5LCBKU0M6OkpTVmFsdWUgcHJpbWFy
eUtleSk7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkZWxldGVGdW5jdGlvbihK
U0M6OkpTR2xvYmFsT2JqZWN0Jik7CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBjb250aW51ZUZ1
bmN0aW9uKGNvbnN0IElEQktleURhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKaW5kZXggMDZlM2E1MDNkMjdjZWQ5NGQ5NDM1MzZjYTRm
M2VjYTEyNDFlMWQ0Ny4uMmMzNGJhYTEyMmY2NDQ4ZjY3MGI3MWU1YTMwNWYyOTBhOWIwMjFhNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCkBA
IC0zNCw5ICszNCw5IEBACiAgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGFu
eSBrZXk7CiAgICAgW0N1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSBwcmltYXJ5
S2V5OwogCi0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJl
cXVlc3QgdXBkYXRlKGFueSB2YWx1ZSk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwgTWF5
VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgdXBkYXRlKGFueSB2YWx1ZSk7CiAgICAgW01heVRo
cm93RXhjZXB0aW9uXSB2b2lkIGFkdmFuY2UoW0VuZm9yY2VSYW5nZV0gdW5zaWduZWQgbG9uZyBj
b3VudCk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgSW1wbGVtZW50ZWRBcz1jb250aW51ZUZ1
bmN0aW9uLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBjb250aW51ZShvcHRpb25hbCBhbnkga2V5
KTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBjb250
aW51ZVByaW1hcnlLZXkoYW55IGtleSwgYW55IHByaW1hcnlLZXkpOwotICAgIFtDYWxsV2l0aD1F
eGVjU3RhdGUsIEltcGxlbWVudGVkQXM9ZGVsZXRlRnVuY3Rpb24sIE1heVRocm93RXhjZXB0aW9u
XSBJREJSZXF1ZXN0IGRlbGV0ZSgpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIEltcGxl
bWVudGVkQXM9Y29udGludWVGdW5jdGlvbiwgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgY29udGlu
dWUob3B0aW9uYWwgYW55IGtleSk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwgTWF5VGhy
b3dFeGNlcHRpb25dIHZvaWQgY29udGludWVQcmltYXJ5S2V5KGFueSBrZXksIGFueSBwcmltYXJ5
S2V5KTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBJbXBsZW1lbnRlZEFzPWRlbGV0ZUZ1
bmN0aW9uLCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBkZWxldGUoKTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCmluZGV4IDU3
YzU2ZGExZjBiYmY5YTI0NzJkNWRlMzAwOTYxOTBkYTdmOWZjYWQuLmIxM2M3MWU4OTFjYmIyMjk0
NzU0ZmQ1YjcwMzEyY2Y2ZDJmZWM4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgRXhjZXB0aW9uT3I8
UmVmPElEQk9wZW5EQlJlcXVlc3Q+PiBJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZShTY3JpcHRF
eGVjdXRpb25Db24KICAgICByZXR1cm4gbV9jb25uZWN0aW9uUHJveHktPmRlbGV0ZURhdGFiYXNl
KGNvbnRleHQsIGRhdGFiYXNlSWRlbnRpZmllcik7CiB9CiAKLUV4Y2VwdGlvbk9yPHNob3J0PiBJ
REJGYWN0b3J5OjpjbXAoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdWUgZmlyc3RWYWx1ZSwg
SlNWYWx1ZSBzZWNvbmRWYWx1ZSkKK0V4Y2VwdGlvbk9yPHNob3J0PiBJREJGYWN0b3J5OjpjbXAo
SlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBmaXJzdFZhbHVlLCBKU1ZhbHVlIHNl
Y29uZFZhbHVlKQogewogICAgIGF1dG8gZmlyc3QgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGV4ZWNT
dGF0ZSwgZmlyc3RWYWx1ZSk7CiAgICAgaWYgKCFmaXJzdC0+aXNWYWxpZCgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCmluZGV4IDRlMjA1MzVjNTZh
ZjJlN2RhZGFjMDA5ZTc2YWYwMmMzOTBhMWMzZDcuLjMxYzVmNzk4YzEyYjhkZjRjZTk4NGU4MGVh
YWFjZDlkODJhN2RiNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5LmgKQEAgLTM2LDcgKzM2LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2Fs
bEZyYW1lOwogY2xhc3MgSlNWYWx1ZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIH0K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTcsNyArNTYsNyBAQCBjbGFzcyBJREJGYWN0b3J5
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKICAgICBFeGNlcHRp
b25PcjxSZWY8SURCT3BlbkRCUmVxdWVzdD4+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IFN0cmluZyYgbmFtZSwgT3B0aW9uYWw8dWludDY0X3Q+IHZlcnNpb24pOwogICAgIEV4
Y2VwdGlvbk9yPFJlZjxJREJPcGVuREJSZXF1ZXN0Pj4gZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICBFeGNlcHRpb25Pcjxz
aG9ydD4gY21wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIGZpcnN0LCBKU0M6OkpTVmFs
dWUgc2Vjb25kKTsKKyAgICBFeGNlcHRpb25PcjxzaG9ydD4gY21wKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmLCBKU0M6OkpTVmFsdWUgZmlyc3QsIEpTQzo6SlNWYWx1ZSBzZWNvbmQpOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBnZXRBbGxEYXRhYmFzZU5hbWVzKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
JiBtYWluRnJhbWVPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcGVuaW5nT3JpZ2luLCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik+JiYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsCmluZGV4IGJlODE5
MWJiNDNmZDU2YzQ5ZjVjNmFmNjNkYmQ2ZjZkM2I4MmJlZDUuLmY5OGYzZjgzOWJjNGEzODNkZDQz
OTkyOTliNzkyNmIwNzY4N2EwYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnkuaWRsCkBAIC0yOSw1ICsyOSw1IEBACiBdIGludGVyZmFjZSBJREJG
YWN0b3J5IHsKICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgTWF5VGhyb3dF
eGNlcHRpb25dIElEQk9wZW5EQlJlcXVlc3Qgb3BlbihET01TdHJpbmcgbmFtZSwgb3B0aW9uYWwg
W0VuZm9yY2VSYW5nZV0gdW5zaWduZWQgbG9uZyBsb25nIHZlcnNpb24pOwogICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCT3BlbkRCUmVx
dWVzdCBkZWxldGVEYXRhYmFzZShET01TdHJpbmcgbmFtZSk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNT
dGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIHNob3J0IGNtcChhbnkgZmlyc3QsIGFueSBzZWNvbmQp
OworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBzaG9ydCBj
bXAoYW55IGZpcnN0LCBhbnkgc2Vjb25kKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleC5jcHAKaW5kZXggNGE3ZjY2ZTg1ODIwYWE0OTIyZGNiMjgzYzVj
YWMwY2M2YWRhM2E1My4uYjk5N2RiZjlmODdmMGMwYTU2YTM4ZWFjOWJjNDg4Yjk1OGZlYzM5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcApAQCAt
MTQ4LDcgKzE0OCw3IEBAIHZvaWQgSURCSW5kZXg6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFu
Z2VBYm9ydCgpCiAgICAgbV9kZWxldGVkID0gZmFsc2U7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJ
REJSZXF1ZXN0Pj4gSURCSW5kZXg6OmRvT3BlbkN1cnNvcihFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwg
SURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxS
ZWZQdHI8SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQorRXhjZXB0aW9uT3I8UmVmPElEQlJl
cXVlc3Q+PiBJREJJbmRleDo6ZG9PcGVuQ3Vyc29yKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUs
IElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8
UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCSW5kZXg6Om9wZW5DdXJzb3IiKTsKICAgICBBU1NFUlQoJm1fb2JqZWN0U3RvcmUudHJh
bnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQo
KSk7CkBAIC0xNzMsMTQgKzE3MywxNCBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElE
QkluZGV4Ojpkb09wZW5DdXJzb3IoRXhlY1N0YXRlJiBleGVjU3RhdGUsIElEQkN1cgogICAgIHJl
dHVybiBtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkucmVxdWVzdE9wZW5DdXJzb3IoZXhlY1N0
YXRlLCAqdGhpcywgaW5mbyk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURC
SW5kZXg6Om9wZW5DdXJzb3IoRXhlY1N0YXRlJiBleGVjU3RhdGUsIFJlZlB0cjxJREJLZXlSYW5n
ZT4mJiByYW5nZSwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKK0V4Y2VwdGlvbk9yPFJl
ZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6Om9wZW5DdXJzb3IoSlNHbG9iYWxPYmplY3QmIGV4ZWNT
dGF0ZSwgUmVmUHRyPElEQktleVJhbmdlPiYmIHJhbmdlLCBJREJDdXJzb3JEaXJlY3Rpb24gZGly
ZWN0aW9uKQogewogICAgIHJldHVybiBkb09wZW5DdXJzb3IoZXhlY1N0YXRlLCBkaXJlY3Rpb24s
IFtyYW5nZT1XVEZNb3ZlKHJhbmdlKV0oKSB7CiAgICAgICAgIHJldHVybiByYW5nZTsKICAgICB9
KTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRleDo6b3BlbkN1cnNv
cihFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXksIElEQkN1cnNvckRpcmVjdGlvbiBk
aXJlY3Rpb24pCitFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpvcGVuQ3Vy
c29yKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmFsdWUga2V5LCBJREJDdXJzb3JEaXJl
Y3Rpb24gZGlyZWN0aW9uKQogewogICAgIHJldHVybiBkb09wZW5DdXJzb3IoZXhlY1N0YXRlLCBk
aXJlY3Rpb24sIFtzdGF0ZT0mZXhlY1N0YXRlLCBrZXldKCkgewogICAgICAgICBhdXRvIG9ubHlS
ZXN1bHQgPSBJREJLZXlSYW5nZTo6b25seSgqc3RhdGUsIGtleSk7CkBAIC0xOTEsNyArMTkxLDcg
QEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRleDo6b3BlbkN1cnNvcihFeGVj
U3RhdGUmIGV4ZWNTdGF0ZSwgSlNWYWx1ZQogICAgIH0pOwogfQogCi1FeGNlcHRpb25PcjxSZWY8
SURCUmVxdWVzdD4+IElEQkluZGV4Ojpkb09wZW5LZXlDdXJzb3IoRXhlY1N0YXRlJiBleGVjU3Rh
dGUsIElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248RXhjZXB0aW9u
T3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKK0V4Y2VwdGlvbk9yPFJlZjxJ
REJSZXF1ZXN0Pj4gSURCSW5kZXg6OmRvT3BlbktleUN1cnNvcihKU0dsb2JhbE9iamVjdCYgZXhl
Y1N0YXRlLCBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBXVEY6OkZ1bmN0aW9uPEV4Y2Vw
dGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yIik7CiAgICAgQVNTRVJUKCZtX29iamVj
dFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFk
OjpjdXJyZW50KCkpOwpAQCAtMjExLDE0ICsyMTEsMTQgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJl
cXVlc3Q+PiBJREJJbmRleDo6ZG9PcGVuS2V5Q3Vyc29yKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBJ
REIKICAgICByZXR1cm4gbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLnJlcXVlc3RPcGVuQ3Vy
c29yKGV4ZWNTdGF0ZSwgKnRoaXMsIGluZm8pOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBSZWZQ
dHI8SURCS2V5UmFuZ2U+JiYgcmFuZ2UsIElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24pCitF
eGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKEpTR2xv
YmFsT2JqZWN0JiBleGVjU3RhdGUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiByYW5nZSwgSURCQ3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICByZXR1cm4gZG9PcGVuS2V5Q3Vyc29yKGV4
ZWNTdGF0ZSwgZGlyZWN0aW9uLCBbcmFuZ2U9V1RGTW92ZShyYW5nZSldKCkgewogICAgICAgICBy
ZXR1cm4gcmFuZ2U7CiAgICAgfSk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4g
SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdWUga2V5
LCBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQorRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihKU0dsb2JhbE9iamVjdCYgZXhlY1N0YXRlLCBK
U1ZhbHVlIGtleSwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICByZXR1cm4g
ZG9PcGVuS2V5Q3Vyc29yKGV4ZWNTdGF0ZSwgZGlyZWN0aW9uLCBbc3RhdGU9JmV4ZWNTdGF0ZSwg
a2V5XSgpIHsKICAgICAgICAgYXV0byBvbmx5UmVzdWx0ID0gSURCS2V5UmFuZ2U6Om9ubHkoKnN0
YXRlLCBrZXkpOwpAQCAtMjI5LDE0ICsyMjksMTQgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNWYWwK
ICAgICB9KTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRleDo6Y291
bnQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIElEQktleVJhbmdlKiByYW5nZSkKK0V4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmNvdW50KEpTR2xvYmFsT2JqZWN0JiBleGVjU3Rh
dGUsIElEQktleVJhbmdlKiByYW5nZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6
OmNvdW50Iik7CiAKICAgICByZXR1cm4gZG9Db3VudChleGVjU3RhdGUsIHJhbmdlID8gSURCS2V5
UmFuZ2VEYXRhKHJhbmdlKSA6IElEQktleVJhbmdlRGF0YTo6YWxsS2V5cygpKTsKIH0KIAotRXhj
ZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRleDo6Y291bnQoRXhlY1N0YXRlJiBleGVj
U3RhdGUsIEpTVmFsdWUga2V5KQorRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRl
eDo6Y291bnQoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXkpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3VudCIpOwogCkBAIC0yNDYsNyArMjQ2LDcgQEAg
RXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRleDo6Y291bnQoRXhlY1N0YXRlJiBl
eGVjU3RhdGUsIEpTVmFsdWUga2V5KQogICAgIHJldHVybiBkb0NvdW50KGV4ZWNTdGF0ZSwgSURC
S2V5UmFuZ2VEYXRhKGlkYktleVBvaW50ZXIpKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJl
cXVlc3Q+PiBJREJJbmRleDo6ZG9Db3VudChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiByYW5nZSkKK0V4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5k
ZXg6OmRvQ291bnQoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiByYW5nZSkKIHsKICAgICBBU1NFUlQoJm1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAKQEAgLTI2
MywxNCArMjYzLDE0IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmRv
Q291bnQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0IElEQktlCiAgICAgcmV0dXJuIHRyYW5z
YWN0aW9uLnJlcXVlc3RDb3VudChleGVjU3RhdGUsICp0aGlzLCByYW5nZSk7CiB9CiAKLUV4Y2Vw
dGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmdldChFeGVjU3RhdGUmIGV4ZWNTdGF0
ZSwgSURCS2V5UmFuZ2UqIHJhbmdlKQorRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJ
bmRleDo6Z2V0KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIElEQktleVJhbmdlKiByYW5nZSkK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldCIpOwogCiAgICAgcmV0dXJuIGRv
R2V0KGV4ZWNTdGF0ZSwgSURCS2V5UmFuZ2VEYXRhKHJhbmdlKSk7CiB9CiAKLUV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmdldChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNW
YWx1ZSBrZXkpCitFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXQoSlNH
bG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXkpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIklEQkluZGV4OjpnZXQiKTsKIApAQCAtMjgxLDcgKzI4MSw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmdldChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNWYWx1
ZSBrZXkpCiAgICAgcmV0dXJuIGRvR2V0KGV4ZWNTdGF0ZSwgSURCS2V5UmFuZ2VEYXRhKGlkYktl
eS5wdHIoKSkpOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4Ojpk
b0dldChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgRXhjZXB0aW9uT3I8SURCS2V5UmFuZ2VEYXRhPiBy
YW5nZSkKK0V4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmRvR2V0KEpTR2xv
YmFsT2JqZWN0JiBleGVjU3RhdGUsIEV4Y2VwdGlvbk9yPElEQktleVJhbmdlRGF0YT4gcmFuZ2Up
CiB7CiAgICAgQVNTRVJUKCZtX29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5v
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwogCkBAIC0zMDIsMTQgKzMwMiwx
NCBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4Ojpkb0dldChFeGVjU3Rh
dGUmIGV4ZWNTdGF0ZSwgRXhjZXB0aW9uT3I8SQogICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZXF1
ZXN0R2V0VmFsdWUoZXhlY1N0YXRlLCAqdGhpcywga2V5UmFuZ2UpOwogfQogCi1FeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXRLZXkoRXhlY1N0YXRlJiBleGVjU3RhdGUs
IElEQktleVJhbmdlKiByYW5nZSkKK0V4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5k
ZXg6OmdldEtleShKU0dsb2JhbE9iamVjdCYgZXhlY1N0YXRlLCBJREJLZXlSYW5nZSogcmFuZ2Up
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXRLZXkiKTsKIAogICAgIHJldHVy
biBkb0dldEtleShleGVjU3RhdGUsIElEQktleVJhbmdlRGF0YShyYW5nZSkpOwogfQogCi1FeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXRLZXkoRXhlY1N0YXRlJiBleGVj
U3RhdGUsIEpTVmFsdWUga2V5KQorRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJJbmRl
eDo6Z2V0S2V5KEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmFsdWUga2V5KQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Z2V0S2V5Iik7CiAKQEAgLTMyMCw3ICszMjAsNyBA
QCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXRLZXkoRXhlY1N0YXRl
JiBleGVjU3RhdGUsIEpTVmFsdWUga2V5KQogICAgIHJldHVybiBkb0dldEtleShleGVjU3RhdGUs
IElEQktleVJhbmdlRGF0YShpZGJLZXkucHRyKCkpKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBJREJJbmRleDo6ZG9HZXRLZXkoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEV4Y2Vw
dGlvbk9yPElEQktleVJhbmdlRGF0YT4gcmFuZ2UpCitFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVz
dD4+IElEQkluZGV4Ojpkb0dldEtleShKU0dsb2JhbE9iamVjdCYgZXhlY1N0YXRlLCBFeGNlcHRp
b25PcjxJREJLZXlSYW5nZURhdGE+IHJhbmdlKQogewogICAgIEFTU0VSVCgmbV9vYmplY3RTdG9y
ZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3Vy
cmVudCgpKTsKIApAQCAtMzQxLDcgKzM0MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0
Pj4gSURCSW5kZXg6OmRvR2V0S2V5KEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBFeGNlcHRpb25PCiAg
ICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlcXVlc3RHZXRLZXkoZXhlY1N0YXRlLCAqdGhpcywga2V5
UmFuZ2UpOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4Ojpkb0dl
dEFsbChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50LCBXVEY6
OkZ1bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+JiYgZnVuY3Rpb24p
CitFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4Ojpkb0dldEFsbChKU0dsb2Jh
bE9iamVjdCYgZXhlY1N0YXRlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQsIFdURjo6RnVuY3Rp
b248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldEFsbCIpOwogICAgIEFTU0VSVCgmbV9vYmpl
Y3RTdG9yZS50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKQEAgLTM2MCwxNCArMzYwLDE0IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gSURCSW5kZXg6OmRvR2V0QWxsKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBPcHRpb25h
bDx1CiAgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmUudHJhbnNhY3Rpb24oKS5yZXF1ZXN0R2V0QWxs
SW5kZXhSZWNvcmRzKGV4ZWNTdGF0ZSwgKnRoaXMsIGtleVJhbmdlUG9pbnRlciwgSW5kZXhlZERC
OjpHZXRBbGxUeXBlOjpWYWx1ZXMsIGNvdW50KTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJl
cXVlc3Q+PiBJREJJbmRleDo6Z2V0QWxsKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBSZWZQdHI8SURC
S2V5UmFuZ2U+JiYgcmFuZ2UsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCkKK0V4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmdldEFsbChKU0dsb2JhbE9iamVjdCYgZXhlY1N0
YXRlLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYgcmFuZ2UsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3Vu
dCkKIHsKICAgICByZXR1cm4gZG9HZXRBbGwoZXhlY1N0YXRlLCBjb3VudCwgW3JhbmdlID0gV1RG
TW92ZShyYW5nZSldKCkgewogICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgfSk7CiB9CiAKLUV4
Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmdldEFsbChFeGVjU3RhdGUmIGV4
ZWNTdGF0ZSwgSlNWYWx1ZSBrZXksIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCkKK0V4Y2VwdGlv
bk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmdldEFsbChKU0dsb2JhbE9iamVjdCYgZXhl
Y1N0YXRlLCBKU1ZhbHVlIGtleSwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50KQogewogICAgIHJl
dHVybiBkb0dldEFsbChleGVjU3RhdGUsIGNvdW50LCBbc3RhdGU9JmV4ZWNTdGF0ZSwga2V5XSgp
IHsKICAgICAgICAgYXV0byBvbmx5UmVzdWx0ID0gSURCS2V5UmFuZ2U6Om9ubHkoKnN0YXRlLCBr
ZXkpOwpAQCAtMzc4LDcgKzM3OCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURC
SW5kZXg6OmdldEFsbChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXksCiAgICAgfSk7
CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmRvR2V0QWxsS2V5
cyhFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50LCBXVEY6OkZ1
bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+JiYgZnVuY3Rpb24pCitF
eGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4Ojpkb0dldEFsbEtleXMoSlNHbG9i
YWxPYmplY3QmIGV4ZWNTdGF0ZSwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50LCBXVEY6OkZ1bmN0
aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+JiYgZnVuY3Rpb24pCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXRBbGxLZXlzIik7CiAgICAgQVNTRVJUKCZt
X29iamVjdFN0b3JlLnRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAm
VGhyZWFkOjpjdXJyZW50KCkpOwpAQCAtMzk3LDE0ICszOTcsMTQgQEAgRXhjZXB0aW9uT3I8UmVm
PElEQlJlcXVlc3Q+PiBJREJJbmRleDo6ZG9HZXRBbGxLZXlzKEV4ZWNTdGF0ZSYgZXhlY1N0YXRl
LCBPcHRpb24KICAgICByZXR1cm4gbV9vYmplY3RTdG9yZS50cmFuc2FjdGlvbigpLnJlcXVlc3RH
ZXRBbGxJbmRleFJlY29yZHMoZXhlY1N0YXRlLCAqdGhpcywga2V5UmFuZ2VQb2ludGVyLCBJbmRl
eGVkREI6OkdldEFsbFR5cGU6OktleXMsIGNvdW50KTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBJREJJbmRleDo6Z2V0QWxsS2V5cyhFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgUmVm
UHRyPElEQktleVJhbmdlPiYmIHJhbmdlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpCitFeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXRBbGxLZXlzKEpTR2xvYmFsT2Jq
ZWN0JiBleGVjU3RhdGUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiByYW5nZSwgT3B0aW9uYWw8dWlu
dDMyX3Q+IGNvdW50KQogewogICAgIHJldHVybiBkb0dldEFsbEtleXMoZXhlY1N0YXRlLCBjb3Vu
dCwgW3JhbmdlID0gV1RGTW92ZShyYW5nZSldKCkgewogICAgICAgICByZXR1cm4gcmFuZ2U7CiAg
ICAgfSk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCSW5kZXg6OmdldEFs
bEtleXMoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdWUga2V5LCBPcHRpb25hbDx1aW50MzJf
dD4gY291bnQpCitFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQkluZGV4OjpnZXRBbGxL
ZXlzKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmFsdWUga2V5LCBPcHRpb25hbDx1aW50
MzJfdD4gY291bnQpCiB7CiAgICAgcmV0dXJuIGRvR2V0QWxsS2V5cyhleGVjU3RhdGUsIGNvdW50
LCBbc3RhdGU9JmV4ZWNTdGF0ZSwga2V5XSgpIHsKICAgICAgICAgYXV0byBvbmx5UmVzdWx0ID0g
SURCS2V5UmFuZ2U6Om9ubHkoKnN0YXRlLCBrZXkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4LmgKaW5kZXggZjgzYzFmMTE3ZDZhMDk5ZDczNzBjNzk5YTZlY2Jj
ZDk5NGMzM2U1OC4uM2UzMGQyYjNiNDk4MzFhNTYwMjNmZmZlMjNlM2I3NWY2MzkzYmY2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCkBAIC0zMyw3ICsz
Myw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbEZyYW1lOwotdXNpbmcgRXhlY1N0
YXRlID0gQ2FsbEZyYW1lOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OSwyMyArNTgs
MjMgQEAgY2xhc3MgSURCSW5kZXggZmluYWwgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIAog
ICAgIHZvaWQgcm9sbGJhY2tJbmZvRm9yVmVyc2lvbkNoYW5nZUFib3J0KCk7CiAKLSAgICBFeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IG9wZW5DdXJzb3IoSlNDOjpFeGVjU3RhdGUmLCBSZWZQ
dHI8SURCS2V5UmFuZ2U+JiYsIElEQkN1cnNvckRpcmVjdGlvbik7Ci0gICAgRXhjZXB0aW9uT3I8
UmVmPElEQlJlcXVlc3Q+PiBvcGVuQ3Vyc29yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
IGtleSwgSURCQ3Vyc29yRGlyZWN0aW9uKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVz
dD4+IG9wZW5LZXlDdXJzb3IoSlNDOjpFeGVjU3RhdGUmLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYs
IElEQkN1cnNvckRpcmVjdGlvbik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBv
cGVuS2V5Q3Vyc29yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIGtleSwgSURCQ3Vyc29y
RGlyZWN0aW9uKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IG9wZW5DdXJzb3Io
SlNDOjpKU0dsb2JhbE9iamVjdCYsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiwgSURCQ3Vyc29yRGly
ZWN0aW9uKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IG9wZW5DdXJzb3IoSlND
OjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSBrZXksIElEQkN1cnNvckRpcmVjdGlvbik7
CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBvcGVuS2V5Q3Vyc29yKEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYsIElEQkN1cnNvckRpcmVjdGlvbik7
CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBvcGVuS2V5Q3Vyc29yKEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUga2V5LCBJREJDdXJzb3JEaXJlY3Rpb24pOwogCi0g
ICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBjb3VudChKU0M6OkV4ZWNTdGF0ZSYsIElE
QktleVJhbmdlKik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBjb3VudChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBrZXkpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gY291bnQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIElEQktleVJhbmdlKik7CisgICAg
RXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBjb3VudChKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
SlNDOjpKU1ZhbHVlIGtleSk7CiAKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGdl
dChKU0M6OkV4ZWNTdGF0ZSYsIElEQktleVJhbmdlKik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBnZXQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUga2V5KTsKLSAgICBF
eGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGdldEtleShKU0M6OkV4ZWNTdGF0ZSYsIElEQktl
eVJhbmdlKik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBnZXRLZXkoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUga2V5KTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IGdldChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSURCS2V5UmFuZ2UqKTsKKyAgICBFeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGdldChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpK
U1ZhbHVlIGtleSk7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBnZXRLZXkoSlND
OjpKU0dsb2JhbE9iamVjdCYsIElEQktleVJhbmdlKik7CisgICAgRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBnZXRLZXkoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSBrZXkp
OwogCi0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBnZXRBbGwoSlNDOjpFeGVjU3Rh
dGUmLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCk7Ci0g
ICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBnZXRBbGwoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUga2V5LCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpOwotICAgIEV4Y2VwdGlv
bk9yPFJlZjxJREJSZXF1ZXN0Pj4gZ2V0QWxsS2V5cyhKU0M6OkV4ZWNTdGF0ZSYsIFJlZlB0cjxJ
REJLZXlSYW5nZT4mJiwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50KTsKLSAgICBFeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IGdldEFsbEtleXMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUga2V5LCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxJ
REJSZXF1ZXN0Pj4gZ2V0QWxsKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBSZWZQdHI8SURCS2V5UmFu
Z2U+JiYsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCk7CisgICAgRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBnZXRBbGwoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSBrZXks
IE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCk7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVl
c3Q+PiBnZXRBbGxLZXlzKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBSZWZQdHI8SURCS2V5UmFuZ2U+
JiYsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCk7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJl
cXVlc3Q+PiBnZXRBbGxLZXlzKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUga2V5
LCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpOwogCiAgICAgY29uc3QgSURCSW5kZXhJbmZvJiBp
bmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CiAKQEAgLTkwLDEzICs4OSwxMyBAQCBjbGFz
cyBJREJJbmRleCBmaW5hbCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogICAgIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgRXhjZXB0aW9u
T3I8UmVmPElEQlJlcXVlc3Q+PiBkb0NvdW50KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkb0dldChKU0M6
OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlvbk9yPElEQktleVJhbmdlRGF0YT4pOwotICAgIEV4Y2VwdGlv
bk9yPFJlZjxJREJSZXF1ZXN0Pj4gZG9HZXRLZXkoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25P
cjxJREJLZXlSYW5nZURhdGE+KTsKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGRv
T3BlbkN1cnNvcihKU0M6OkV4ZWNTdGF0ZSYsIElEQkN1cnNvckRpcmVjdGlvbiwgV1RGOjpGdW5j
dGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiAmJik7Ci0gICAgRXhjZXB0
aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkb09wZW5LZXlDdXJzb3IoSlNDOjpFeGVjU3RhdGUmLCBJ
REJDdXJzb3JEaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktl
eVJhbmdlPj4oKT4gJiYpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gZG9HZXRB
bGwoSlNDOjpFeGVjU3RhdGUmLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQsIFdURjo6RnVuY3Rp
b248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4gJiYpOwotICAgIEV4Y2VwdGlv
bk9yPFJlZjxJREJSZXF1ZXN0Pj4gZG9HZXRBbGxLZXlzKEpTQzo6RXhlY1N0YXRlJiwgT3B0aW9u
YWw8dWludDMyX3Q+IGNvdW50LCBXVEY6OkZ1bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJL
ZXlSYW5nZT4+KCk+ICYmKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGRvQ291
bnQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIEV4
Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gZG9HZXQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEV4
Y2VwdGlvbk9yPElEQktleVJhbmdlRGF0YT4pOworICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1
ZXN0Pj4gZG9HZXRLZXkoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEV4Y2VwdGlvbk9yPElEQktleVJh
bmdlRGF0YT4pOworICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gZG9PcGVuQ3Vyc29y
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBJREJDdXJzb3JEaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248
RXhjZXB0aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4gJiYpOworICAgIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gZG9PcGVuS2V5Q3Vyc29yKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBJ
REJDdXJzb3JEaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktl
eVJhbmdlPj4oKT4gJiYpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gZG9HZXRB
bGwoSlNDOjpKU0dsb2JhbE9iamVjdCYsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCwgV1RGOjpG
dW5jdGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiAmJik7CisgICAgRXhj
ZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkb0dldEFsbEtleXMoSlNDOjpKU0dsb2JhbE9iamVj
dCYsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxS
ZWZQdHI8SURCS2V5UmFuZ2U+PigpPiAmJik7CiAKICAgICBjb25zdCBjaGFyKiBhY3RpdmVET01P
YmplY3ROYW1lKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRT
dXNwZW5zaW9uKCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5pZGwKaW5kZXggOWY2ODU0OGU2ODQ2ODM0N2M3NDg0YzAwZjAwMTg4Zjhi
ZTRmMmQ0NC4uMTUxYjRiNmViZjEzZTRlMTI0NTM1YTUyYTIyYzZkN2VlNzUwZmZmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbApAQCAtNDAsMjAg
KzQwLDIwIEBAIHR5cGVkZWYgKERPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+KSBJREJL
ZXlQYXRoOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIG11bHRpRW50cnk7CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gdW5pcXVlOwogCi0gICAgW0NhbGxXaXRoPUV4ZWNT
dGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3Qgb3BlbkN1cnNvcihvcHRpb25hbCBJ
REJLZXlSYW5nZT8gcmFuZ2UgPSBudWxsLCBvcHRpb25hbCBJREJDdXJzb3JEaXJlY3Rpb24gZGly
ZWN0aW9uID0gIm5leHQiKTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2Vw
dGlvbl0gSURCUmVxdWVzdCBvcGVuQ3Vyc29yKGFueSBrZXksIG9wdGlvbmFsIElEQkN1cnNvckRp
cmVjdGlvbiBkaXJlY3Rpb24gPSAibmV4dCIpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3Qs
IE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IG9wZW5DdXJzb3Iob3B0aW9uYWwgSURCS2V5
UmFuZ2U/IHJhbmdlID0gbnVsbCwgb3B0aW9uYWwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
biA9ICJuZXh0Iik7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRp
b25dIElEQlJlcXVlc3Qgb3BlbkN1cnNvcihhbnkga2V5LCBvcHRpb25hbCBJREJDdXJzb3JEaXJl
Y3Rpb24gZGlyZWN0aW9uID0gIm5leHQiKTsKIAotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGUsIE1h
eVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IG9wZW5LZXlDdXJzb3Iob3B0aW9uYWwgSURCS2V5
UmFuZ2U/IHJhbmdlID0gbnVsbCwgb3B0aW9uYWwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
biA9ICJuZXh0Iik7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25d
IElEQlJlcXVlc3Qgb3BlbktleUN1cnNvcihhbnkga2V5LCBvcHRpb25hbCBJREJDdXJzb3JEaXJl
Y3Rpb24gZGlyZWN0aW9uID0gIm5leHQiKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBN
YXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBvcGVuS2V5Q3Vyc29yKG9wdGlvbmFsIElEQktl
eVJhbmdlPyByYW5nZSA9IG51bGwsIG9wdGlvbmFsIElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rp
b24gPSAibmV4dCIpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0
aW9uXSBJREJSZXF1ZXN0IG9wZW5LZXlDdXJzb3IoYW55IGtleSwgb3B0aW9uYWwgSURCQ3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiA9ICJuZXh0Iik7CiAKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRl
LCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBnZXQoSURCS2V5UmFuZ2U/IGtleSk7Ci0g
ICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgZ2V0
KGFueSBrZXkpOwotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGUsIE1heVRocm93RXhjZXB0aW9uXSBJ
REJSZXF1ZXN0IGdldEtleShJREJLZXlSYW5nZT8ga2V5KTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0
YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBnZXRLZXkoYW55IGtleSk7Ci0gICAg
W0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgZ2V0QWxs
KG9wdGlvbmFsIElEQktleVJhbmdlPyByYW5nZSA9IG51bGwsIG9wdGlvbmFsIFtFbmZvcmNlUmFu
Z2VdIHVuc2lnbmVkIGxvbmcgY291bnQpOwotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGUsIE1heVRo
cm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGdldEFsbChhbnkga2V5LCBvcHRpb25hbCBbRW5mb3Jj
ZVJhbmdlXSB1bnNpZ25lZCBsb25nIGNvdW50KTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBN
YXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBnZXRBbGxLZXlzKG9wdGlvbmFsIElEQktleVJh
bmdlPyByYW5nZSA9IG51bGwsIG9wdGlvbmFsIFtFbmZvcmNlUmFuZ2VdIHVuc2lnbmVkIGxvbmcg
Y291bnQpOwotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGUsIE1heVRocm93RXhjZXB0aW9uXSBJREJS
ZXF1ZXN0IGdldEFsbEtleXMoYW55IGtleSwgb3B0aW9uYWwgW0VuZm9yY2VSYW5nZV0gdW5zaWdu
ZWQgbG9uZyBjb3VudCk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRp
b25dIElEQlJlcXVlc3QgY291bnQob3B0aW9uYWwgSURCS2V5UmFuZ2U/IHJhbmdlID0gbnVsbCk7
Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3Qg
Y291bnQoYW55IGtleSk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwgTWF5VGhyb3dFeGNl
cHRpb25dIElEQlJlcXVlc3QgZ2V0KElEQktleVJhbmdlPyBrZXkpOworICAgIFtDYWxsV2l0aD1H
bG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGdldChhbnkga2V5KTsK
KyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVz
dCBnZXRLZXkoSURCS2V5UmFuZ2U/IGtleSk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwg
TWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgZ2V0S2V5KGFueSBrZXkpOworICAgIFtDYWxs
V2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGdldEFsbChv
cHRpb25hbCBJREJLZXlSYW5nZT8gcmFuZ2UgPSBudWxsLCBvcHRpb25hbCBbRW5mb3JjZVJhbmdl
XSB1bnNpZ25lZCBsb25nIGNvdW50KTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlU
aHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBnZXRBbGwoYW55IGtleSwgb3B0aW9uYWwgW0VuZm9y
Y2VSYW5nZV0gdW5zaWduZWQgbG9uZyBjb3VudCk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVj
dCwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgZ2V0QWxsS2V5cyhvcHRpb25hbCBJREJL
ZXlSYW5nZT8gcmFuZ2UgPSBudWxsLCBvcHRpb25hbCBbRW5mb3JjZVJhbmdlXSB1bnNpZ25lZCBs
b25nIGNvdW50KTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4Y2VwdGlv
bl0gSURCUmVxdWVzdCBnZXRBbGxLZXlzKGFueSBrZXksIG9wdGlvbmFsIFtFbmZvcmNlUmFuZ2Vd
IHVuc2lnbmVkIGxvbmcgY291bnQpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRo
cm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGNvdW50KG9wdGlvbmFsIElEQktleVJhbmdlPyByYW5n
ZSA9IG51bGwpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9u
XSBJREJSZXF1ZXN0IGNvdW50KGFueSBrZXkpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcAppbmRleCBmNzUwNWRhMWYxMGExNTM4YWE4
YzdhNmU5YzUzNWMwMTk4ODM3MDM2Li43Y2YxNmVmMjYwMTk2ZDE5NDUzN2JiMDE3NWFhMzc5ODFi
OTU3YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UmFuZ2UuY3BwCkBAIC02OSwxMiArNjksMTIgQEAgRXhjZXB0aW9uT3I8UmVmPElEQktleVJhbmdl
Pj4gSURCS2V5UmFuZ2U6Om9ubHkoUmVmUHRyPElEQktleT4mJiBrZXkpCiAgICAgcmV0dXJuIGNy
ZWF0ZShXVEZNb3ZlKGtleSkpOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURCS2V5UmFuZ2U+PiBJ
REJLZXlSYW5nZTo6b25seShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIGtleVZhbHVlKQorRXhj
ZXB0aW9uT3I8UmVmPElEQktleVJhbmdlPj4gSURCS2V5UmFuZ2U6Om9ubHkoSlNHbG9iYWxPYmpl
Y3QmIHN0YXRlLCBKU1ZhbHVlIGtleVZhbHVlKQogewogICAgIHJldHVybiBvbmx5KHNjcmlwdFZh
bHVlVG9JREJLZXkoc3RhdGUsIGtleVZhbHVlKSk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJL
ZXlSYW5nZT4+IElEQktleVJhbmdlOjpsb3dlckJvdW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgYm91bmRWYWx1ZSwgYm9vbCBvcGVuKQorRXhjZXB0aW9uT3I8UmVmPElEQktleVJhbmdlPj4g
SURCS2V5UmFuZ2U6Omxvd2VyQm91bmQoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBKU1ZhbHVlIGJv
dW5kVmFsdWUsIGJvb2wgb3BlbikKIHsKICAgICBhdXRvIGJvdW5kID0gc2NyaXB0VmFsdWVUb0lE
QktleShzdGF0ZSwgYm91bmRWYWx1ZSk7CiAgICAgaWYgKCFib3VuZC0+aXNWYWxpZCgpKQpAQCAt
ODMsNyArODMsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCS2V5UmFuZ2U+PiBJREJLZXlSYW5nZTo6
bG93ZXJCb3VuZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlCiAgICAgcmV0dXJuIGNyZWF0ZShX
VEZNb3ZlKGJvdW5kKSwgbnVsbHB0ciwgb3BlbiwgdHJ1ZSk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJl
ZjxJREJLZXlSYW5nZT4+IElEQktleVJhbmdlOjp1cHBlckJvdW5kKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgYm91bmRWYWx1ZSwgYm9vbCBvcGVuKQorRXhjZXB0aW9uT3I8UmVmPElEQktleVJh
bmdlPj4gSURCS2V5UmFuZ2U6OnVwcGVyQm91bmQoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBKU1Zh
bHVlIGJvdW5kVmFsdWUsIGJvb2wgb3BlbikKIHsKICAgICBhdXRvIGJvdW5kID0gc2NyaXB0VmFs
dWVUb0lEQktleShzdGF0ZSwgYm91bmRWYWx1ZSk7CiAgICAgaWYgKCFib3VuZC0+aXNWYWxpZCgp
KQpAQCAtOTIsNyArOTIsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCS2V5UmFuZ2U+PiBJREJLZXlS
YW5nZTo6dXBwZXJCb3VuZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlCiAgICAgcmV0dXJuIGNy
ZWF0ZShudWxscHRyLCBXVEZNb3ZlKGJvdW5kKSwgdHJ1ZSwgb3Blbik7CiB9CiAKLUV4Y2VwdGlv
bk9yPFJlZjxJREJLZXlSYW5nZT4+IElEQktleVJhbmdlOjpib3VuZChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIGxvd2VyVmFsdWUsIEpTVmFsdWUgdXBwZXJWYWx1ZSwgYm9vbCBsb3dlck9wZW4s
IGJvb2wgdXBwZXJPcGVuKQorRXhjZXB0aW9uT3I8UmVmPElEQktleVJhbmdlPj4gSURCS2V5UmFu
Z2U6OmJvdW5kKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSlNWYWx1ZSBsb3dlclZhbHVlLCBKU1Zh
bHVlIHVwcGVyVmFsdWUsIGJvb2wgbG93ZXJPcGVuLCBib29sIHVwcGVyT3BlbikKIHsKICAgICBh
dXRvIGxvd2VyID0gc2NyaXB0VmFsdWVUb0lEQktleShzdGF0ZSwgbG93ZXJWYWx1ZSk7CiAgICAg
aWYgKCFsb3dlci0+aXNWYWxpZCgpKQpAQCAtMTEzLDcgKzExMyw3IEBAIGJvb2wgSURCS2V5UmFu
Z2U6OmlzT25seUtleSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbG93ZXIgJiYgbV91cHBlciAmJiAh
bV9pc0xvd2VyT3BlbiAmJiAhbV9pc1VwcGVyT3BlbiAmJiBtX2xvd2VyLT5pc0VxdWFsKCptX3Vw
cGVyKTsKIH0KIAotRXhjZXB0aW9uT3I8Ym9vbD4gSURCS2V5UmFuZ2U6OmluY2x1ZGVzKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGtleVZhbHVlKQorRXhjZXB0aW9uT3I8Ym9v
bD4gSURCS2V5UmFuZ2U6OmluY2x1ZGVzKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBKU0M6
OkpTVmFsdWUga2V5VmFsdWUpCiB7CiAgICAgYXV0byBrZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5
KHN0YXRlLCBrZXlWYWx1ZSk7CiAgICAgaWYgKCFrZXktPmlzVmFsaWQoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5oCmluZGV4IGE0OWViNDFhZGFm
MGFhNDU1MTk0Yjk2MDlkOTNmZGQ4ZGZlZjY0NmQuLjI4OTVhNThlZTY1NmFjOTg2ZmFlYzU5MTE1
N2U0MWU1ZTA4NDNjYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaApAQCAtMzQsOCArMzQsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IENhbGxGcmFtZTsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNWYWx1ZTsKLXVzaW5n
IEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTYs
MTQgKzU2LDE0IEBAIGNsYXNzIElEQktleVJhbmdlIGZpbmFsIDogcHVibGljIFNjcmlwdFdyYXBw
YWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SURCS2V5UmFuZ2U+CiAgICAgYm9vbCB1cHBlck9wZW4o
KSBjb25zdCB7IHJldHVybiBtX2lzVXBwZXJPcGVuOyB9CiAKICAgICBzdGF0aWMgRXhjZXB0aW9u
T3I8UmVmPElEQktleVJhbmdlPj4gb25seShSZWZQdHI8SURCS2V5PiYmIHZhbHVlKTsKLSAgICBz
dGF0aWMgRXhjZXB0aW9uT3I8UmVmPElEQktleVJhbmdlPj4gb25seShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSBrZXkpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SURCS2V5UmFu
Z2U+PiBvbmx5KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUga2V5KTsKIAotICAg
IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SURCS2V5UmFuZ2U+PiBsb3dlckJvdW5kKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlIGJvdW5kLCBib29sIG9wZW4pOwotICAgIHN0YXRpYyBFeGNl
cHRpb25PcjxSZWY8SURCS2V5UmFuZ2U+PiB1cHBlckJvdW5kKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlIGJvdW5kLCBib29sIG9wZW4pOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8
SURCS2V5UmFuZ2U+PiBsb3dlckJvdW5kKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFs
dWUgYm91bmQsIGJvb2wgb3Blbik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxJREJLZXlS
YW5nZT4+IHVwcGVyQm91bmQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSBib3Vu
ZCwgYm9vbCBvcGVuKTsKIAotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SURCS2V5UmFuZ2U+
PiBib3VuZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBsb3dlciwgSlNDOjpKU1ZhbHVl
IHVwcGVyLCBib29sIGxvd2VyT3BlbiwgYm9vbCB1cHBlck9wZW4pOworICAgIHN0YXRpYyBFeGNl
cHRpb25PcjxSZWY8SURCS2V5UmFuZ2U+PiBib3VuZChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlND
OjpKU1ZhbHVlIGxvd2VyLCBKU0M6OkpTVmFsdWUgdXBwZXIsIGJvb2wgbG93ZXJPcGVuLCBib29s
IHVwcGVyT3Blbik7CiAKLSAgICBFeGNlcHRpb25Pcjxib29sPiBpbmNsdWRlcyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSBrZXkpOworICAgIEV4Y2VwdGlvbk9yPGJvb2w+IGluY2x1ZGVz
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUga2V5KTsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaXNPbmx5S2V5KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbAppbmRleCA2NTlhZDQ0ZjQ5NmM5Yzk4OWM4
ZTViMzUzZDM3M2RhMGJhMGQ3NTIxLi5kMzdkYTE0NjM0YTc3YzQ4OTU3NmNhMTgwZDJmYzBkOTk1
ODE5MGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlSYW5nZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UmFuZ2UuaWRsCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9v
bGVhbiBsb3dlck9wZW47CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gdXBwZXJPcGVu
OwogCi0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIHN0YXRpYyBJ
REJLZXlSYW5nZSBvbmx5KGFueSB2YWx1ZSk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5
VGhyb3dFeGNlcHRpb25dIHN0YXRpYyBJREJLZXlSYW5nZSBsb3dlckJvdW5kKGFueSBsb3dlciwg
b3B0aW9uYWwgYm9vbGVhbiBvcGVuID0gZmFsc2UpOwotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGUs
IE1heVRocm93RXhjZXB0aW9uXSBzdGF0aWMgSURCS2V5UmFuZ2UgdXBwZXJCb3VuZChhbnkgdXBw
ZXIsIG9wdGlvbmFsIGJvb2xlYW4gb3BlbiA9IGZhbHNlKTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0
YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gc3RhdGljIElEQktleVJhbmdlIGJvdW5kKGFueSBsb3dl
ciwgYW55IHVwcGVyLCBvcHRpb25hbCBib29sZWFuIGxvd2VyT3BlbiA9IGZhbHNlLCBvcHRpb25h
bCBib29sZWFuIHVwcGVyT3BlbiA9IGZhbHNlKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0
LCBNYXlUaHJvd0V4Y2VwdGlvbl0gc3RhdGljIElEQktleVJhbmdlIG9ubHkoYW55IHZhbHVlKTsK
KyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4Y2VwdGlvbl0gc3RhdGljIElE
QktleVJhbmdlIGxvd2VyQm91bmQoYW55IGxvd2VyLCBvcHRpb25hbCBib29sZWFuIG9wZW4gPSBm
YWxzZSk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb25dIHN0
YXRpYyBJREJLZXlSYW5nZSB1cHBlckJvdW5kKGFueSB1cHBlciwgb3B0aW9uYWwgYm9vbGVhbiBv
cGVuID0gZmFsc2UpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0
aW9uXSBzdGF0aWMgSURCS2V5UmFuZ2UgYm91bmQoYW55IGxvd2VyLCBhbnkgdXBwZXIsIG9wdGlv
bmFsIGJvb2xlYW4gbG93ZXJPcGVuID0gZmFsc2UsIG9wdGlvbmFsIGJvb2xlYW4gdXBwZXJPcGVu
ID0gZmFsc2UpOwogCi0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25d
IGJvb2xlYW4gaW5jbHVkZXMoYW55IGtleSk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwg
TWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gaW5jbHVkZXMoYW55IGtleSk7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmlu
ZGV4IGE1OTdhYzE5YjYzYjg4OGMxMjJmOTI4M2E3ZGNhMmVmOTc0ZmVlMjAuLjJmZWI5MjIxMTgw
YTZhYTJmZmY2YTBiMmNhYjI4MGNhMzUzMDQyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTE0OSw3ICsxNDksNyBA
QCBib29sIElEQk9iamVjdFN0b3JlOjphdXRvSW5jcmVtZW50KCkgY29uc3QKICAgICByZXR1cm4g
bV9pbmZvLmF1dG9JbmNyZW1lbnQoKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+
PiBJREJPYmplY3RTdG9yZTo6ZG9PcGVuQ3Vyc29yKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBJREJD
dXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBXVEY6OkZ1bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0
cjxJREJLZXlSYW5nZT4+KCk+JiYgZnVuY3Rpb24pCitFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVz
dD4+IElEQk9iamVjdFN0b3JlOjpkb09wZW5DdXJzb3IoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0
ZSwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25P
cjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewogICAgIExPRyhJbmRleGVk
REIsICJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwogICAgIEFTU0VSVCgmbV90cmFuc2Fj
dGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CkBA
IC0xNjksMTQgKzE2OSwxNCBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVj
dFN0b3JlOjpkb09wZW5DdXJzb3IoRXhlY1N0YXRlJiBleGVjU3RhdGUsCiAgICAgcmV0dXJuIG1f
dHJhbnNhY3Rpb24ucmVxdWVzdE9wZW5DdXJzb3IoZXhlY1N0YXRlLCAqdGhpcywgaW5mbyk7CiB9
CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJz
b3IoRXhlY1N0YXRlJiBleGVjU3RhdGUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiByYW5nZSwgSURC
Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKK0V4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4g
SURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgUmVm
UHRyPElEQktleVJhbmdlPiYmIHJhbmdlLCBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQog
ewogICAgIHJldHVybiBkb09wZW5DdXJzb3IoZXhlY1N0YXRlLCBkaXJlY3Rpb24sIFtyYW5nZSA9
IFdURk1vdmUocmFuZ2UpXSgpIHsKICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH0pOwogfQog
Ci1FeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29y
KEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBKU1ZhbHVlIGtleSwgSURCQ3Vyc29yRGlyZWN0aW9uIGRp
cmVjdGlvbikKK0V4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6Om9w
ZW5DdXJzb3IoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXksIElEQkN1cnNv
ckRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgcmV0dXJuIGRvT3BlbkN1cnNvcihleGVjU3Rh
dGUsIGRpcmVjdGlvbiwgW3N0YXRlPSZleGVjU3RhdGUsIGtleV0oKSB7CiAgICAgICAgIGF1dG8g
b25seVJlc3VsdCA9IElEQktleVJhbmdlOjpvbmx5KCpzdGF0ZSwga2V5KTsKQEAgLTE4Nyw3ICsx
ODcsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpvcGVu
Q3Vyc29yKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBKUwogICAgIH0pOwogfQogCi1FeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpkb09wZW5LZXlDdXJzb3IoRXhlY1N0
YXRlJiBleGVjU3RhdGUsIElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIFdURjo6RnVuY3Rp
b248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKK0V4Y2Vw
dGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvT3BlbktleUN1cnNvcihK
U0dsb2JhbE9iamVjdCYgZXhlY1N0YXRlLCBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBX
VEY6OkZ1bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+JiYgZnVuY3Rp
b24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpvcGVuS2V5Q3Vyc29y
Iik7CiAgICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkg
PT0gJlRocmVhZDo6Y3VycmVudCgpKTsKQEAgLTIwNywxNCArMjA3LDE0IEBAIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvT3BlbktleUN1cnNvcihFeGVjU3Rh
dGUmIGV4ZWNTdGF0CiAgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24ucmVxdWVzdE9wZW5DdXJzb3Io
ZXhlY1N0YXRlLCAqdGhpcywgaW5mbyk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0
Pj4gSURCT2JqZWN0U3RvcmU6Om9wZW5LZXlDdXJzb3IoRXhlY1N0YXRlJiBleGVjU3RhdGUsIFJl
ZlB0cjxJREJLZXlSYW5nZT4mJiByYW5nZSwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikK
K0V4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6Om9wZW5LZXlDdXJz
b3IoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgUmVmUHRyPElEQktleVJhbmdlPiYmIHJhbmdl
LCBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIHJldHVybiBkb09wZW5LZXlD
dXJzb3IoZXhlY1N0YXRlLCBkaXJlY3Rpb24sIFtyYW5nZSA9IFdURk1vdmUocmFuZ2UpXSgpIHsK
ICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH0pOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURC
UmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpvcGVuS2V5Q3Vyc29yKEV4ZWNTdGF0ZSYgZXhlY1N0
YXRlLCBKU1ZhbHVlIGtleSwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKK0V4Y2VwdGlv
bk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6Om9wZW5LZXlDdXJzb3IoSlNHbG9i
YWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXksIElEQkN1cnNvckRpcmVjdGlvbiBkaXJl
Y3Rpb24pCiB7CiAgICAgcmV0dXJuIGRvT3BlbkN1cnNvcihleGVjU3RhdGUsIGRpcmVjdGlvbiwg
W3N0YXRlPSZleGVjU3RhdGUsIGtleV0oKSB7CiAgICAgICAgIGF1dG8gb25seVJlc3VsdCA9IElE
QktleVJhbmdlOjpvbmx5KCpzdGF0ZSwga2V5KTsKQEAgLTIyNSw3ICsyMjUsNyBAQCBFeGNlcHRp
b25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpvcGVuS2V5Q3Vyc29yKEV4ZWNT
dGF0ZSYgZXhlY1N0YXRlLAogICAgIH0pOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURCUmVxdWVz
dD4+IElEQk9iamVjdFN0b3JlOjpnZXQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdWUga2V5
KQorRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEpTR2xv
YmFsT2JqZWN0JiBleGVjU3RhdGUsIEpTVmFsdWUga2V5KQogewogICAgIExPRyhJbmRleGVkREIs
ICJJREJPYmplY3RTdG9yZTo6Z2V0Iik7CiAgICAgQVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFi
YXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKQEAgLTI0Myw3ICsy
NDMsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpnZXQo
RXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdWUgawogICAgIHJldHVybiBtX3RyYW5zYWN0aW9u
LnJlcXVlc3RHZXRSZWNvcmQoZXhlY1N0YXRlLCAqdGhpcywgeyBpZGJLZXkucHRyKCksIElEQkdl
dFJlY29yZERhdGFUeXBlOjpLZXlBbmRWYWx1ZSB9KTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0KEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBJREJL
ZXlSYW5nZSoga2V5UmFuZ2UpCitFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVj
dFN0b3JlOjpnZXQoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSURCS2V5UmFuZ2UqIGtleVJh
bmdlKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0Iik7CiAgICAg
QVNTRVJUKCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVh
ZDo6Y3VycmVudCgpKTsKQEAgLTI2MSw3ICsyNjEsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQk9iamVjdFN0b3JlOjpnZXQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIElEQktleVJh
bgogICAgIHJldHVybiBtX3RyYW5zYWN0aW9uLnJlcXVlc3RHZXRSZWNvcmQoZXhlY1N0YXRlLCAq
dGhpcywgeyBrZXlSYW5nZURhdGEsIElEQkdldFJlY29yZERhdGFUeXBlOjpLZXlBbmRWYWx1ZSB9
KTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0
S2V5KEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBKU1ZhbHVlIGtleSkKK0V4Y2VwdGlvbk9yPFJlZjxJ
REJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEtleShKU0dsb2JhbE9iamVjdCYgZXhlY1N0
YXRlLCBKU1ZhbHVlIGtleSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6
OmdldEtleSIpOwogICAgIEFTU0VSVCgmbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CkBAIC0yNzksNyArMjc5LDcgQEAgRXhjZXB0
aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Z2V0S2V5KEV4ZWNTdGF0ZSYg
ZXhlY1N0YXRlLCBKU1ZhbHUKICAgICByZXR1cm4gbV90cmFuc2FjdGlvbi5yZXF1ZXN0R2V0UmVj
b3JkKGV4ZWNTdGF0ZSwgKnRoaXMsIHsgaWRiS2V5LnB0cigpLCBJREJHZXRSZWNvcmREYXRhVHlw
ZTo6S2V5T25seSB9KTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmpl
Y3RTdG9yZTo6Z2V0S2V5KEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBJREJLZXlSYW5nZSoga2V5UmFu
Z2UpCitFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpnZXRLZXko
SlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSURCS2V5UmFuZ2UqIGtleVJhbmdlKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0S2V5Iik7CiAgICAgQVNTRVJUKCZt
X3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVu
dCgpKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElE
Qk9iamVjdFN0b3JlOjpnZXRLZXkoRXhlY1N0YXRlJiBleGVjU3RhdGUsIElEQktleQogICAgIHJl
dHVybiBtX3RyYW5zYWN0aW9uLnJlcXVlc3RHZXRSZWNvcmQoZXhlY1N0YXRlLCAqdGhpcywgeyBr
ZXlSYW5nZURhdGEsIElEQkdldFJlY29yZERhdGFUeXBlOjpLZXlPbmx5IH0pOwogfQogCi1FeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjphZGQoRXhlY1N0YXRlJiBl
eGVjU3RhdGUsIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUga2V5KQorRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUs
IEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUga2V5KQogewogICAgIFJlZlB0cjxJREJLZXk+IGlkYktl
eTsKICAgICBpZiAoIWtleS5pc1VuZGVmaW5lZCgpKQpAQCAtMzA1LDcgKzMwNSw3IEBAIEV4Y2Vw
dGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmFkZChFeGVjU3RhdGUmIGV4
ZWNTdGF0ZSwgSlNWYWx1ZSB2CiAgICAgcmV0dXJuIHB1dE9yQWRkKGV4ZWNTdGF0ZSwgdmFsdWUs
IGlkYktleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRl
LCBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1
ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OnB1dChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSwgSlNWYWx1ZSBrZXkpCitFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVj
dFN0b3JlOjpwdXQoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSlNW
YWx1ZSBrZXkpCiB7CiAgICAgUmVmUHRyPElEQktleT4gaWRiS2V5OwogICAgIGlmICgha2V5Lmlz
VW5kZWZpbmVkKCkpCkBAIC0zMTMsMTIgKzMxMywxMiBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQk9iamVjdFN0b3JlOjpwdXQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdWUg
dgogICAgIHJldHVybiBwdXRPckFkZChleGVjU3RhdGUsIHZhbHVlLCBpZGJLZXksIEluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOjpPdmVyd3JpdGUsIElubGluZUtleUNoZWNrOjpQ
ZXJmb3JtKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9y
ZTo6cHV0Rm9yQ3Vyc29yVXBkYXRlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIFJl
ZlB0cjxJREJLZXk+IGtleSkKK0V4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0
U3RvcmU6OnB1dEZvckN1cnNvclVwZGF0ZShKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUsIFJlZlB0cjxJREJLZXk+IGtleSkKIHsKICAgICByZXR1cm4gcHV0T3JBZGQoc3RhdGUs
IHZhbHVlLCBXVEZNb3ZlKGtleSksIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2Rl
OjpPdmVyd3JpdGVGb3JDdXJzb3IsIElubGluZUtleUNoZWNrOjpEb05vdFBlcmZvcm0pOwogfQog
Ci1FeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpwdXRPckFkZChF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8SURCS2V5PiBrZXksIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIElubGluZUtleUNo
ZWNrIGlubGluZUtleUNoZWNrKQorRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmpl
Y3RTdG9yZTo6cHV0T3JBZGQoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBS
ZWZQdHI8SURCS2V5PiBrZXksIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92
ZXJ3cml0ZU1vZGUsIElubGluZUtleUNoZWNrIGlubGluZUtleUNoZWNrKQogewogICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwpAQCAtMzg0LDE0ICszODQsMTQgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJP
YmplY3RTdG9yZTo6cHV0T3JBZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZQogICAgIHJldHVy
biBtX3RyYW5zYWN0aW9uLnJlcXVlc3RQdXRPckFkZChzdGF0ZSwgKnRoaXMsIFdURk1vdmUoa2V5
KSwgKnNlcmlhbGl6ZWRWYWx1ZSwgb3ZlcndyaXRlTW9kZSk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJl
ZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSYg
ZXhlY1N0YXRlLCBJREJLZXlSYW5nZSoga2V5UmFuZ2UpCitFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCYgZXhl
Y1N0YXRlLCBJREJLZXlSYW5nZSoga2V5UmFuZ2UpCiB7CiAgICAgcmV0dXJuIGRvRGVsZXRlKGV4
ZWNTdGF0ZSwgW2tleVJhbmdlXSgpIHsKICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoa2V5UmFu
Z2UpOwogICAgIH0pOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVj
dFN0b3JlOjpkb0RlbGV0ZShFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgV1RGOjpGdW5jdGlvbjxFeGNl
cHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQorRXhjZXB0aW9uT3I8
UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6ZG9EZWxldGUoSlNHbG9iYWxPYmplY3Qm
IGV4ZWNTdGF0ZSwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+
PigpPiYmIGZ1bmN0aW9uKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6
ZGVsZXRlRnVuY3Rpb24iKTsKICAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5v
cmlnaW5UaHJlYWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwpAQCAtNDIxLDcgKzQyMSw3IEBA
IEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvRGVsZXRlKEV4
ZWNTdGF0ZSYgZXhlY1N0YXRlLCBXVEY6CiAgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24ucmVxdWVz
dERlbGV0ZVJlY29yZChleGVjU3RhdGUsICp0aGlzLCBrZXlSYW5nZURhdGEpOwogfQogCi1FeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihF
eGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXkpCitFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCYgZXhl
Y1N0YXRlLCBKU1ZhbHVlIGtleSkKIHsKICAgICByZXR1cm4gZG9EZWxldGUoZXhlY1N0YXRlLCBb
c3RhdGU9JmV4ZWNTdGF0ZSwga2V5XSgpIHsKICAgICAgICAgYXV0byBpZGJLZXkgPSBzY3JpcHRW
YWx1ZVRvSURCS2V5KCpzdGF0ZSwga2V5KTsKQEAgLTQzMSw3ICs0MzEsNyBAQCBFeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihFeGVjU3Rh
dGUmIGV4ZWNTdGF0ZQogICAgIH0pOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+
IElEQk9iamVjdFN0b3JlOjpjbGVhcihFeGVjU3RhdGUmIGV4ZWNTdGF0ZSkKK0V4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmNsZWFyKEpTR2xvYmFsT2JqZWN0JiBl
eGVjU3RhdGUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjbGVhciIp
OwogICAgIEFTU0VSVCgmbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09
ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CkBAIC00NTMsNyArNDUzLDcgQEAgRXhjZXB0aW9uT3I8UmVm
PElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoRXhlY1N0YXRlJiBleGVjU3RhdGUp
CiAgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24ucmVxdWVzdENsZWFyT2JqZWN0U3RvcmUoZXhlY1N0
YXRlLCAqdGhpcyk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJJbmRleD4+IElEQk9iamVjdFN0
b3JlOjpjcmVhdGVJbmRleChFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBh
dGgmJiBrZXlQYXRoLCBjb25zdCBJbmRleFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCitFeGNlcHRp
b25PcjxSZWY8SURCSW5kZXg+PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoSlNHbG9iYWxP
YmplY3QmLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBhdGgmJiBrZXlQYXRoLCBjb25zdCBJ
bmRleFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9i
amVjdFN0b3JlOjpjcmVhdGVJbmRleCAlcyAoa2V5UGF0aDogJXMsIHVuaXF1ZTogJWksIG11bHRp
RW50cnk6ICVpKSIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbG9nZ2luZ1N0cmluZyhrZXlQYXRoKS51
dGY4KCkuZGF0YSgpLCBwYXJhbWV0ZXJzLnVuaXF1ZSwgcGFyYW1ldGVycy5tdWx0aUVudHJ5KTsK
ICAgICBBU1NFUlQoJm1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSA9PSAm
VGhyZWFkOjpjdXJyZW50KCkpOwpAQCAtNTYzLDcgKzU2Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IElEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9y
ZTo6Y291bnQoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFsdWUga2V5KQorRXhjZXB0aW9uT3I8
UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6Y291bnQoSlNHbG9iYWxPYmplY3QmIGV4
ZWNTdGF0ZSwgSlNWYWx1ZSBrZXkpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0
b3JlOjpjb3VudCIpOwogCkBAIC01NzIsMTQgKzU3MiwxNCBAQCBFeGNlcHRpb25PcjxSZWY8SURC
UmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpjb3VudChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNW
YWx1ZQogICAgIHJldHVybiBkb0NvdW50KGV4ZWNTdGF0ZSwgSURCS2V5UmFuZ2VEYXRhKGlkYktl
eS0+aXNWYWxpZCgpID8gaWRiS2V5LnB0cigpIDogbnVsbHB0cikpOwogfQogCi1FeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpjb3VudChFeGVjU3RhdGUmIGV4ZWNT
dGF0ZSwgSURCS2V5UmFuZ2UqIHJhbmdlKQorRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJ
REJPYmplY3RTdG9yZTo6Y291bnQoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgSURCS2V5UmFu
Z2UqIHJhbmdlKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Y291bnQi
KTsKIAogICAgIHJldHVybiBkb0NvdW50KGV4ZWNTdGF0ZSwgcmFuZ2UgPyBJREJLZXlSYW5nZURh
dGEocmFuZ2UpIDogSURCS2V5UmFuZ2VEYXRhOjphbGxLZXlzKCkpOwogfQogCi1FeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpkb0NvdW50KEV4ZWNTdGF0ZSYgZXhl
Y1N0YXRlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQorRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBJREJPYmplY3RTdG9yZTo6ZG9Db3VudChKU0dsb2JhbE9iamVjdCYgZXhlY1N0
YXRlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewogICAgIEFTU0VSVCgmbV90cmFu
c2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7
CiAKQEAgLTYwMCw3ICs2MDAsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9i
amVjdFN0b3JlOjpkb0NvdW50KEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdAogICAgIHJldHVy
biBtX3RyYW5zYWN0aW9uLnJlcXVlc3RDb3VudChleGVjU3RhdGUsICp0aGlzLCByYW5nZSk7CiB9
CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvR2V0QWxs
KEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQsIFdURjo6RnVu
Y3Rpb248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJiBmdW5jdGlvbikKK0V4
Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmRvR2V0QWxsKEpTR2xv
YmFsT2JqZWN0JiBleGVjU3RhdGUsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCwgV1RGOjpGdW5j
dGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiYmIGZ1bmN0aW9uKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0QWxsIik7CiAgICAgQVNTRVJU
KCZtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3Vy
cmVudCgpKTsKQEAgLTYxOSwxNCArNjE5LDE0IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0
Pj4gSURCT2JqZWN0U3RvcmU6OmRvR2V0QWxsKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBPcHRpCiAg
ICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24ucmVxdWVzdEdldEFsbE9iamVjdFN0b3JlUmVjb3Jkcyhl
eGVjU3RhdGUsICp0aGlzLCBrZXlSYW5nZVBvaW50ZXIsIEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6
VmFsdWVzLCBjb3VudCk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2Jq
ZWN0U3RvcmU6OmdldEFsbChFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgUmVmUHRyPElEQktleVJhbmdl
PiYmIHJhbmdlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpCitFeGNlcHRpb25PcjxSZWY8SURC
UmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpnZXRBbGwoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0
ZSwgUmVmUHRyPElEQktleVJhbmdlPiYmIHJhbmdlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQp
CiB7CiAgICAgcmV0dXJuIGRvR2V0QWxsKGV4ZWNTdGF0ZSwgY291bnQsIFtyYW5nZSA9IFdURk1v
dmUocmFuZ2UpXSgpIHsKICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH0pOwogfQogCi1FeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpnZXRBbGwoRXhlY1N0YXRl
JiBleGVjU3RhdGUsIEpTVmFsdWUga2V5LCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpCitFeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpnZXRBbGwoSlNHbG9iYWxP
YmplY3QmIGV4ZWNTdGF0ZSwgSlNWYWx1ZSBrZXksIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCkK
IHsKICAgICByZXR1cm4gZG9HZXRBbGwoZXhlY1N0YXRlLCBjb3VudCwgW3N0YXRlPSZleGVjU3Rh
dGUsIGtleV0oKSB7CiAgICAgICAgIGF1dG8gb25seVJlc3VsdCA9IElEQktleVJhbmdlOjpvbmx5
KCpzdGF0ZSwga2V5KTsKQEAgLTYzNyw3ICs2MzcsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IElEQk9iamVjdFN0b3JlOjpnZXRBbGwoRXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTVmFs
dQogICAgIH0pOwogfQogCi1FeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0
b3JlOjpkb0dldEFsbEtleXMoRXhlY1N0YXRlJiBleGVjU3RhdGUsIE9wdGlvbmFsPHVpbnQzMl90
PiBjb3VudCwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+Pigp
PiYmIGZ1bmN0aW9uKQorRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBJREJPYmplY3RTdG9y
ZTo6ZG9HZXRBbGxLZXlzKEpTR2xvYmFsT2JqZWN0JiBleGVjU3RhdGUsIE9wdGlvbmFsPHVpbnQz
Ml90PiBjb3VudCwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+
PigpPiYmIGZ1bmN0aW9uKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6
Z2V0QWxsS2V5cyIpOwogICAgIEFTU0VSVCgmbV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CkBAIC02NTYsMTQgKzY1NiwxNCBAQCBF
eGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpkb0dldEFsbEtleXMo
RXhlY1N0YXRlJiBleGVjU3RhdGUsCiAgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24ucmVxdWVzdEdl
dEFsbE9iamVjdFN0b3JlUmVjb3JkcyhleGVjU3RhdGUsICp0aGlzLCBrZXlSYW5nZVBvaW50ZXIs
IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cywgY291bnQpOwogfQogCi1FeGNlcHRpb25PcjxS
ZWY8SURCUmVxdWVzdD4+IElEQk9iamVjdFN0b3JlOjpnZXRBbGxLZXlzKEV4ZWNTdGF0ZSYgZXhl
Y1N0YXRlLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYgcmFuZ2UsIE9wdGlvbmFsPHVpbnQzMl90PiBj
b3VudCkKK0V4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEFs
bEtleXMoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0ZSwgUmVmUHRyPElEQktleVJhbmdlPiYmIHJh
bmdlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpCiB7CiAgICAgcmV0dXJuIGRvR2V0QWxsS2V5
cyhleGVjU3RhdGUsIGNvdW50LCBbcmFuZ2UgPSBXVEZNb3ZlKHJhbmdlKV0oKSB7CiAgICAgICAg
IHJldHVybiByYW5nZTsKICAgICB9KTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+
PiBJREJPYmplY3RTdG9yZTo6Z2V0QWxsS2V5cyhFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNWYWx1
ZSBrZXksIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCkKK0V4Y2VwdGlvbk9yPFJlZjxJREJSZXF1
ZXN0Pj4gSURCT2JqZWN0U3RvcmU6OmdldEFsbEtleXMoSlNHbG9iYWxPYmplY3QmIGV4ZWNTdGF0
ZSwgSlNWYWx1ZSBrZXksIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCkKIHsKICAgICByZXR1cm4g
ZG9HZXRBbGxLZXlzKGV4ZWNTdGF0ZSwgY291bnQsIFtzdGF0ZT0mZXhlY1N0YXRlLCBrZXldKCkg
ewogICAgICAgICBhdXRvIG9ubHlSZXN1bHQgPSBJREJLZXlSYW5nZTo6b25seSgqc3RhdGUsIGtl
eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuaAppbmRleCBkMzQyNTYzZGE4ZTQ0MzA0ZjNmZWI2YmY4YmU4NTU5OGMxNTdjZmI1Li5hY2Uw
MDE5NzViZjI4YTg4N2M1MmIxMzdkY2Y3YjQwNTRhZWM3MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTM3LDcgKzM3LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBKU1ZhbHVlOwogY2xh
c3MgU2xvdFZpc2l0b3I7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiB9CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTc0LDMwICs3MywzMCBAQCBjbGFzcyBJREJPYmplY3RTdG9yZSBm
aW5hbCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogICAgICAgICBib29sIG11bHRpRW50cnk7
CiAgICAgfTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gb3BlbkN1cnNvcihK
U0M6OkV4ZWNTdGF0ZSYsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiwgSURCQ3Vyc29yRGlyZWN0aW9u
KTsKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IG9wZW5DdXJzb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUga2V5LCBJREJDdXJzb3JEaXJlY3Rpb24pOwotICAgIEV4Y2Vw
dGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gb3BlbktleUN1cnNvcihKU0M6OkV4ZWNTdGF0ZSYsIFJl
ZlB0cjxJREJLZXlSYW5nZT4mJiwgSURCQ3Vyc29yRGlyZWN0aW9uKTsKLSAgICBFeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IG9wZW5LZXlDdXJzb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUga2V5LCBJREJDdXJzb3JEaXJlY3Rpb24pOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gZ2V0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIGtleSk7Ci0gICAgRXhj
ZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBnZXQoSlNDOjpFeGVjU3RhdGUmLCBJREJLZXlSYW5n
ZSopOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gZ2V0S2V5KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlIGtleSk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+
PiBnZXRLZXkoSlNDOjpFeGVjU3RhdGUmLCBJREJLZXlSYW5nZSopOwotICAgIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gYWRkKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTVmFsdWUga2V5KTsKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IHB1dChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlIGtleSk7Ci0gICAgRXhjZXB0
aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkZWxldGVGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIElE
QktleVJhbmdlKik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkZWxldGVGdW5j
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBrZXkpOwotICAgIEV4Y2VwdGlvbk9y
PFJlZjxJREJSZXF1ZXN0Pj4gY2xlYXIoSlNDOjpFeGVjU3RhdGUmKTsKLSAgICBFeGNlcHRpb25P
cjxSZWY8SURCSW5kZXg+PiBjcmVhdGVJbmRleChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCS2V5UGF0aCYmLCBjb25zdCBJbmRleFBhcmFtZXRlcnMmKTsKKyAgICBFeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IG9wZW5DdXJzb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IFJlZlB0cjxJREJLZXlSYW5nZT4mJiwgSURCQ3Vyc29yRGlyZWN0aW9uKTsKKyAgICBFeGNlcHRp
b25PcjxSZWY8SURCUmVxdWVzdD4+IG9wZW5DdXJzb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpT
Qzo6SlNWYWx1ZSBrZXksIElEQkN1cnNvckRpcmVjdGlvbik7CisgICAgRXhjZXB0aW9uT3I8UmVm
PElEQlJlcXVlc3Q+PiBvcGVuS2V5Q3Vyc29yKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBSZWZQdHI8
SURCS2V5UmFuZ2U+JiYsIElEQkN1cnNvckRpcmVjdGlvbik7CisgICAgRXhjZXB0aW9uT3I8UmVm
PElEQlJlcXVlc3Q+PiBvcGVuS2V5Q3Vyc29yKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpT
VmFsdWUga2V5LCBJREJDdXJzb3JEaXJlY3Rpb24pOworICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJS
ZXF1ZXN0Pj4gZ2V0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUga2V5KTsKKyAg
ICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGdldChKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
SURCS2V5UmFuZ2UqKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGdldEtleShK
U0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlIGtleSk7CisgICAgRXhjZXB0aW9uT3I8
UmVmPElEQlJlcXVlc3Q+PiBnZXRLZXkoSlNDOjpKU0dsb2JhbE9iamVjdCYsIElEQktleVJhbmdl
Kik7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBhZGQoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlIGtleSk7CisgICAgRXhjZXB0aW9uT3I8
UmVmPElEQlJlcXVlc3Q+PiBwdXQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU1ZhbHVlIGtleSk7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkZWxl
dGVGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSURCS2V5UmFuZ2UqKTsKKyAgICBFeGNl
cHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGRlbGV0ZUZ1bmN0aW9uKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmLCBKU0M6OkpTVmFsdWUga2V5KTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+
IGNsZWFyKEpTQzo6SlNHbG9iYWxPYmplY3QmKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCSW5k
ZXg+PiBjcmVhdGVJbmRleChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJLZXlQYXRoJiYsIGNvbnN0IEluZGV4UGFyYW1ldGVycyYpOwogICAgIEV4Y2VwdGlvbk9y
PFJlZjxJREJJbmRleD4+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgRXhjZXB0aW9u
T3I8dm9pZD4gZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBFeGNlcHRpb25P
cjxSZWY8SURCUmVxdWVzdD4+IGNvdW50KEpTQzo6RXhlY1N0YXRlJiwgSURCS2V5UmFuZ2UqKTsK
LSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGNvdW50KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlIGtleSk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBnZXRB
bGwoSlNDOjpFeGVjU3RhdGUmLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYsIE9wdGlvbmFsPHVpbnQz
Ml90PiBjb3VudCk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBnZXRBbGwoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUga2V5LCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQp
OwotICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gZ2V0QWxsS2V5cyhKU0M6OkV4ZWNT
dGF0ZSYsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50KTsK
LSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGdldEFsbEtleXMoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUga2V5LCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpOworICAgIEV4
Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gY291bnQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIElE
QktleVJhbmdlKik7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBjb3VudChKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlIGtleSk7CisgICAgRXhjZXB0aW9uT3I8UmVm
PElEQlJlcXVlc3Q+PiBnZXRBbGwoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFJlZlB0cjxJREJLZXlS
YW5nZT4mJiwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50KTsKKyAgICBFeGNlcHRpb25PcjxSZWY8
SURCUmVxdWVzdD4+IGdldEFsbChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlIGtl
eSwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50KTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVx
dWVzdD4+IGdldEFsbEtleXMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFJlZlB0cjxJREJLZXlSYW5n
ZT4mJiwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50KTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURC
UmVxdWVzdD4+IGdldEFsbEtleXMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSBr
ZXksIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCk7CiAKLSAgICBFeGNlcHRpb25PcjxSZWY8SURC
UmVxdWVzdD4+IHB1dEZvckN1cnNvclVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgUmVmUHRyPElEQktleT4pOworICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gcHV0
Rm9yQ3Vyc29yVXBkYXRlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUsIFJlZlB0
cjxJREJLZXk+KTsKIAogICAgIHZvaWQgbWFya0FzRGVsZXRlZCgpOwogICAgIGJvb2wgaXNEZWxl
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CkBAIC0xMTYsMTMgKzExNSwxMyBAQCBj
bGFzcyBJREJPYmplY3RTdG9yZSBmaW5hbCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogCiBw
cml2YXRlOgogICAgIGVudW0gY2xhc3MgSW5saW5lS2V5Q2hlY2sgeyBQZXJmb3JtLCBEb05vdFBl
cmZvcm0gfTsKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IHB1dE9yQWRkKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBSZWZQdHI8SURCS2V5PiwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUsIElubGluZUtleUNoZWNrKTsKLSAgICBFeGNlcHRpb25PcjxS
ZWY8SURCUmVxdWVzdD4+IGRvQ291bnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGRvRGVsZXRlKEpTQzo6
RXhlY1N0YXRlJiwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25PcjxSZWZQdHI8SURCS2V5UmFuZ2U+
PigpPiAmJik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkb09wZW5DdXJzb3Io
SlNDOjpFeGVjU3RhdGUmLCBJREJDdXJzb3JEaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248RXhjZXB0
aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4mJik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElE
QlJlcXVlc3Q+PiBkb09wZW5LZXlDdXJzb3IoSlNDOjpFeGVjU3RhdGUmLCBJREJDdXJzb3JEaXJl
Y3Rpb24sIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4m
Jik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+PiBkb0dldEFsbChKU0M6OkV4ZWNT
dGF0ZSYsIE9wdGlvbmFsPHVpbnQzMl90PiBjb3VudCwgV1RGOjpGdW5jdGlvbjxFeGNlcHRpb25P
cjxSZWZQdHI8SURCS2V5UmFuZ2U+PigpPiAmJik7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPElEQlJl
cXVlc3Q+PiBkb0dldEFsbEtleXMoSlNDOjpFeGVjU3RhdGUmLCBPcHRpb25hbDx1aW50MzJfdD4g
Y291bnQsIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8UmVmUHRyPElEQktleVJhbmdlPj4oKT4g
JiYpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gcHV0T3JBZGQoSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPElEQktleT4sIEluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBJbmxpbmVLZXlDaGVjayk7CisgICAgRXhjZXB0aW9uT3I8
UmVmPElEQlJlcXVlc3Q+PiBkb0NvdW50KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGRvRGVsZXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBXVEY6OkZ1bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJ
REJLZXlSYW5nZT4+KCk+ICYmKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGRv
T3BlbkN1cnNvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSURCQ3Vyc29yRGlyZWN0aW9uLCBXVEY6
OkZ1bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+JiYpOworICAgIEV4
Y2VwdGlvbk9yPFJlZjxJREJSZXF1ZXN0Pj4gZG9PcGVuS2V5Q3Vyc29yKEpTQzo6SlNHbG9iYWxP
YmplY3QmLCBJREJDdXJzb3JEaXJlY3Rpb24sIFdURjo6RnVuY3Rpb248RXhjZXB0aW9uT3I8UmVm
UHRyPElEQktleVJhbmdlPj4oKT4mJik7CisgICAgRXhjZXB0aW9uT3I8UmVmPElEQlJlcXVlc3Q+
PiBkb0dldEFsbChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50
LCBXVEY6OkZ1bmN0aW9uPEV4Y2VwdGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+ICYmKTsK
KyAgICBFeGNlcHRpb25PcjxSZWY8SURCUmVxdWVzdD4+IGRvR2V0QWxsS2V5cyhKU0M6OkpTR2xv
YmFsT2JqZWN0JiwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50LCBXVEY6OkZ1bmN0aW9uPEV4Y2Vw
dGlvbk9yPFJlZlB0cjxJREJLZXlSYW5nZT4+KCk+ICYmKTsKIAogICAgIGNvbnN0IGNoYXIqIGFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGNhblN1c3BlbmRGb3JE
b2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAppbmRleCAzYTdlZmU5MjA3ODA3
NDE0Yjg3ZjRhZjY2NzYwY2UyN2I2MTNmYzc0Li40MjY2Njc3OWI5NzNkOGFlMmE2ZTI0MTdlMjA4
MjVmZGMyZDg3MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaWRsCkBAIC00MCwyOCArNDAsMjggQEAgdHlwZWRlZiAoRE9NU3Ry
aW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4pIElEQktleVBhdGg7CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIElEQlRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBib29sZWFuIGF1dG9JbmNyZW1lbnQ7CiAKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlU
aHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBwdXQoYW55IHZhbHVlLCBvcHRpb25hbCBhbnkga2V5
KTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVz
dCBhZGQoYW55IHZhbHVlLCBvcHRpb25hbCBhbnkga2V5KTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0
YXRlLCBJbXBsZW1lbnRlZEFzPWRlbGV0ZUZ1bmN0aW9uLCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURC
UmVxdWVzdCBkZWxldGUoSURCS2V5UmFuZ2U/IGtleVJhbmdlKTsKLSAgICBbQ2FsbFdpdGg9RXhl
Y1N0YXRlLCBJbXBsZW1lbnRlZEFzPWRlbGV0ZUZ1bmN0aW9uLCBNYXlUaHJvd0V4Y2VwdGlvbl0g
SURCUmVxdWVzdCBkZWxldGUoYW55IGtleSk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5
VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgZ2V0KElEQktleVJhbmdlPyBrZXkpOwotICAgIFtD
YWxsV2l0aD1FeGVjU3RhdGUsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGdldChhbnkg
a2V5KTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVx
dWVzdCBnZXRLZXkoSURCS2V5UmFuZ2U/IGtleSk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwg
TWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgZ2V0S2V5KGFueSBrZXkpOwotICAgIFtDYWxs
V2l0aD1FeGVjU3RhdGUsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGNsZWFyKCk7Ci0g
ICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3Qgb3Bl
bkN1cnNvcihvcHRpb25hbCBJREJLZXlSYW5nZT8gcmFuZ2UgPSBudWxsLCBvcHRpb25hbCBJREJD
dXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gIm5leHQiKTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0
YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBvcGVuQ3Vyc29yKGFueSBrZXksIG9w
dGlvbmFsIElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSAibmV4dCIpOwotICAgIFtDYWxs
V2l0aD1FeGVjU3RhdGUsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IG9wZW5LZXlDdXJz
b3Iob3B0aW9uYWwgSURCS2V5UmFuZ2U/IHJhbmdlID0gbnVsbCwgb3B0aW9uYWwgSURCQ3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiA9ICJuZXh0Iik7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwg
TWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3Qgb3BlbktleUN1cnNvcihhbnkga2V5LCBvcHRp
b25hbCBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gIm5leHQiKTsKLSAgICBbQ2FsbFdp
dGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBnZXRBbGwob3B0aW9u
YWwgSURCS2V5UmFuZ2U/IHJhbmdlID0gbnVsbCwgb3B0aW9uYWwgW0VuZm9yY2VSYW5nZV0gdW5z
aWduZWQgbG9uZyBjb3VudCk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNl
cHRpb25dIElEQlJlcXVlc3QgZ2V0QWxsKGFueSBrZXksIG9wdGlvbmFsIFtFbmZvcmNlUmFuZ2Vd
IHVuc2lnbmVkIGxvbmcgY291bnQpOwotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGUsIE1heVRocm93
RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGdldEFsbEtleXMob3B0aW9uYWwgSURCS2V5UmFuZ2U/IHJh
bmdlID0gbnVsbCwgb3B0aW9uYWwgW0VuZm9yY2VSYW5nZV0gdW5zaWduZWQgbG9uZyBjb3VudCk7
Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3Qg
Z2V0QWxsS2V5cyhhbnkga2V5LCBvcHRpb25hbCBbRW5mb3JjZVJhbmdlXSB1bnNpZ25lZCBsb25n
IGNvdW50KTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURC
SW5kZXggY3JlYXRlSW5kZXgoRE9NU3RyaW5nIG5hbWUsIChET01TdHJpbmcgb3Igc2VxdWVuY2U8
RE9NU3RyaW5nPikga2V5UGF0aCwgb3B0aW9uYWwgSURCSW5kZXhQYXJhbWV0ZXJzIG9wdGlvbnMp
OworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1
ZXN0IHB1dChhbnkgdmFsdWUsIG9wdGlvbmFsIGFueSBrZXkpOworICAgIFtDYWxsV2l0aD1HbG9i
YWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGFkZChhbnkgdmFsdWUsIG9w
dGlvbmFsIGFueSBrZXkpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIEltcGxlbWVudGVk
QXM9ZGVsZXRlRnVuY3Rpb24sIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGRlbGV0ZShJ
REJLZXlSYW5nZT8ga2V5UmFuZ2UpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIEltcGxl
bWVudGVkQXM9ZGVsZXRlRnVuY3Rpb24sIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IGRl
bGV0ZShhbnkga2V5KTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4Y2Vw
dGlvbl0gSURCUmVxdWVzdCBnZXQoSURCS2V5UmFuZ2U/IGtleSk7CisgICAgW0NhbGxXaXRoPUds
b2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgZ2V0KGFueSBrZXkpOwor
ICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0
IGdldEtleShJREJLZXlSYW5nZT8ga2V5KTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBN
YXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBnZXRLZXkoYW55IGtleSk7CisgICAgW0NhbGxX
aXRoPUdsb2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgY2xlYXIoKTsK
KyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVz
dCBvcGVuQ3Vyc29yKG9wdGlvbmFsIElEQktleVJhbmdlPyByYW5nZSA9IG51bGwsIG9wdGlvbmFs
IElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSAibmV4dCIpOworICAgIFtDYWxsV2l0aD1H
bG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1ZXN0IG9wZW5DdXJzb3IoYW55
IGtleSwgb3B0aW9uYWwgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9ICJuZXh0Iik7Cisg
ICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3Qg
b3BlbktleUN1cnNvcihvcHRpb25hbCBJREJLZXlSYW5nZT8gcmFuZ2UgPSBudWxsLCBvcHRpb25h
bCBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gIm5leHQiKTsKKyAgICBbQ2FsbFdpdGg9
R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBvcGVuS2V5Q3Vyc29y
KGFueSBrZXksIG9wdGlvbmFsIElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSAibmV4dCIp
OworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBJREJSZXF1
ZXN0IGdldEFsbChvcHRpb25hbCBJREJLZXlSYW5nZT8gcmFuZ2UgPSBudWxsLCBvcHRpb25hbCBb
RW5mb3JjZVJhbmdlXSB1bnNpZ25lZCBsb25nIGNvdW50KTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFs
T2JqZWN0LCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBnZXRBbGwoYW55IGtleSwgb3B0
aW9uYWwgW0VuZm9yY2VSYW5nZV0gdW5zaWduZWQgbG9uZyBjb3VudCk7CisgICAgW0NhbGxXaXRo
PUdsb2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb25dIElEQlJlcXVlc3QgZ2V0QWxsS2V5cyhv
cHRpb25hbCBJREJLZXlSYW5nZT8gcmFuZ2UgPSBudWxsLCBvcHRpb25hbCBbRW5mb3JjZVJhbmdl
XSB1bnNpZ25lZCBsb25nIGNvdW50KTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlU
aHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBnZXRBbGxLZXlzKGFueSBrZXksIG9wdGlvbmFsIFtF
bmZvcmNlUmFuZ2VdIHVuc2lnbmVkIGxvbmcgY291bnQpOworICAgIFtDYWxsV2l0aD1HbG9iYWxP
YmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBJREJJbmRleCBjcmVhdGVJbmRleChET01TdHJpbmcg
bmFtZSwgKERPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+KSBrZXlQYXRoLCBvcHRpb25h
bCBJREJJbmRleFBhcmFtZXRlcnMgb3B0aW9ucyk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBJ
REJJbmRleCBpbmRleChET01TdHJpbmcgbmFtZSk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB2
b2lkIGRlbGV0ZUluZGV4KERPTVN0cmluZyBuYW1lKTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRl
LCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBjb3VudChvcHRpb25hbCBJREJLZXlSYW5n
ZT8gcmFuZ2UgPSBudWxsKTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2Vw
dGlvbl0gSURCUmVxdWVzdCBjb3VudChhbnkga2V5KTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2Jq
ZWN0LCBNYXlUaHJvd0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBjb3VudChvcHRpb25hbCBJREJLZXlS
YW5nZT8gcmFuZ2UgPSBudWxsKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJv
d0V4Y2VwdGlvbl0gSURCUmVxdWVzdCBjb3VudChhbnkga2V5KTsKIH07CiAKIGRpY3Rpb25hcnkg
SURCSW5kZXhQYXJhbWV0ZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCBmMDhjMmVhMDdjM2U0YjM3NmUzZGE4MGU1
MWM2ZWNiY2QyYTMxN2M2Li4xZDI3M2Y3OTMzMzlmNTFkODg0MTIwNGQ5ZjVhM2ZiZmMzMzZiMmVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCkBAIC04MzMsNyArODMzLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkUmVu
YW1lSW5kZXhPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogICAgIEFT
U0VSVF9VTlVTRUQocmVzdWx0RGF0YSwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlw
ZTo6UmVuYW1lSW5kZXhTdWNjZXNzIHx8IHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5
cGU6OkVycm9yKTsKIH0KIAotUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
T3BlbkN1cnNvcihFeGVjU3RhdGUmIHN0YXRlLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUs
IGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RPcGVuQ3Vyc29yKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCT2JqZWN0U3Rv
cmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQogewogICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IiKTsKICAgICBBU1NF
UlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CkBA
IC04NDQsNyArODQ0LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
T3BlbkN1cnNvcihFeGVjU3RhdGUmIHN0YXRlLCBJREJPYmplY3RTdG8KICAgICByZXR1cm4gZG9S
ZXF1ZXN0T3BlbkN1cnNvcihzdGF0ZSwgSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUob2JqZWN0
U3RvcmUsIGluZm8pKTsKIH0KIAotUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0T3BlbkN1cnNvcihFeGVjU3RhdGUmIHN0YXRlLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElE
QkN1cnNvckluZm8mIGluZm8pCitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVl
c3RPcGVuQ3Vyc29yKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5kZXgmIGluZGV4LCBjb25z
dCBJREJDdXJzb3JJbmZvJiBpbmZvKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IiKTsKICAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdp
blRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CkBAIC04NTUsNyArODU1LDcgQEAgUmVm
PElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvcihFeGVjU3RhdGUm
IHN0YXRlLCBJREJJbmRleCYgaW4KICAgICByZXR1cm4gZG9SZXF1ZXN0T3BlbkN1cnNvcihzdGF0
ZSwgSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoaW5kZXgsIGluZm8pKTsKIH0KIAotUmVmPElE
QlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpkb1JlcXVlc3RPcGVuQ3Vyc29yKEV4ZWNTdGF0ZSYg
c3RhdGUsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQorUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5z
YWN0aW9uOjpkb1JlcXVlc3RPcGVuQ3Vyc29yKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgUmVmPElE
QkN1cnNvcj4mJiBjdXJzb3IpCiB7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwogICAgIEFTU0VS
VCgmbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKQEAg
LTkyNSw3ICs5MjUsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRJdGVyYXRlQ3Vyc29yT25T
ZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdQogICAgIGNvbXBsZXRlQ3Vy
c29yUmVxdWVzdChyZXF1ZXN0LCByZXN1bHREYXRhKTsKIH0KIAotUmVmPElEQlJlcXVlc3Q+IElE
QlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0QWxsT2JqZWN0U3RvcmVSZWNvcmRzKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlRGF0YSwgSW5kZXhlZERCOjpHZXRBbGxUeXBlIGdldEFsbFR5cGUsIE9w
dGlvbmFsPHVpbnQzMl90PiBjb3VudCkKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6
cmVxdWVzdEdldEFsbE9iamVjdFN0b3JlUmVjb3JkcyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0
ZSwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtl
eVJhbmdlRGF0YSwgSW5kZXhlZERCOjpHZXRBbGxUeXBlIGdldEFsbFR5cGUsIE9wdGlvbmFsPHVp
bnQzMl90PiBjb3VudCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJl
cXVlc3RHZXRBbGxPYmplY3RTdG9yZVJlY29yZHMiKTsKICAgICBBU1NFUlQoaXNBY3RpdmUoKSk7
CkBAIC05NDgsNyArOTQ4LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0R2V0QWxsT2JqZWN0U3RvcmVSZWNvcmRzKEpTQzo6RXhlY1N0YXRlJgogICAgIHJldHVybiBy
ZXF1ZXN0OwogfQogCi1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRB
bGxJbmRleFJlY29yZHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBJREJJbmRleCYgaW5kZXgsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBJbmRleGVkREI6OkdldEFsbFR5cGUg
Z2V0QWxsVHlwZSwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50KQorUmVmPElEQlJlcXVlc3Q+IElE
QlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0QWxsSW5kZXhSZWNvcmRzKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIHN0YXRlLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFu
Z2VEYXRhLCBJbmRleGVkREI6OkdldEFsbFR5cGUgZ2V0QWxsVHlwZSwgT3B0aW9uYWw8dWludDMy
X3Q+IGNvdW50KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVz
dEdldEFsbEluZGV4UmVjb3JkcyIpOwogICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKQEAgLTEwMDQs
NyArMTAwNCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEdldEFsbFJlY29yZHNPblNlcnZl
cihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1CiAgICAgY29tcGxldGVOb25jdXJz
b3JSZXF1ZXN0KHJlcXVlc3QsIHJlc3VsdERhdGEpOwogfQogCi1SZWY8SURCUmVxdWVzdD4gSURC
VHJhbnNhY3Rpb246OnJlcXVlc3RHZXRSZWNvcmQoRXhlY1N0YXRlJiBzdGF0ZSwgSURCT2JqZWN0
U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRh
KQorUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0UmVjb3JkKEpTR2xv
YmFsT2JqZWN0JiBzdGF0ZSwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJH
ZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCIpOwogICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsK
QEAgLTEwMjgsNyArMTAyOCw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVx
dWVzdEdldFJlY29yZChFeGVjU3RhdGUmIHN0YXRlLCBJREJPYmplY3RTdG9yCiAgICAgcmV0dXJu
IHJlcXVlc3Q7CiB9CiAKLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdl
dFZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiByYW5nZSkKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdl
dFZhbHVlKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmIHJhbmdlKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6cmVxdWVzdEdldFZhbHVlIik7CiAgICAgQVNTRVJUKCZtX2RhdGFiYXNlLT5vcmlnaW5UaHJl
YWQoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkpOwpAQCAtMTAzNiw3ICsxMDM2LDcgQEAgUmVmPElE
QlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFsdWUoRXhlY1N0YXRlJiBzdGF0
ZSwgSURCSW5kZXgmIGluZGUKICAgICByZXR1cm4gcmVxdWVzdEluZGV4UmVjb3JkKHN0YXRlLCBp
bmRleCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGU6OlZhbHVlLCByYW5nZSk7CiB9CiAKLVJl
ZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldEtleShFeGVjU3RhdGUmIHN0
YXRlLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCitSZWY8
SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRLZXkoSlNHbG9iYWxPYmplY3Qm
IHN0YXRlLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFsdWUiKTsK
ICAgICBBU1NFUlQoJm1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpID09ICZUaHJlYWQ6OmN1cnJl
bnQoKSk7CkBAIC0xMDQ0LDcgKzEwNDQsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RHZXRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgSURCSW5kZXgmIGluZGV4LAogICAg
IHJldHVybiByZXF1ZXN0SW5kZXhSZWNvcmQoc3RhdGUsIGluZGV4LCBJbmRleGVkREI6OkluZGV4
UmVjb3JkVHlwZTo6S2V5LCByYW5nZSk7CiB9CiAKLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2Fj
dGlvbjo6cmVxdWVzdEluZGV4UmVjb3JkKEV4ZWNTdGF0ZSYgc3RhdGUsIElEQkluZGV4JiBpbmRl
eCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgdHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
JiByYW5nZSkKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEluZGV4UmVj
b3JkKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCSW5kZXgmIGluZGV4LCBJbmRleGVkREI6Oklu
ZGV4UmVjb3JkVHlwZSB0eXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlIik7CiAgICAg
QVNTRVJUKGlzQWN0aXZlKCkpOwpAQCAtMTEwOSw3ICsxMTA5LDcgQEAgdm9pZCBJREJUcmFuc2Fj
dGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURC
UmVzdWx0RGEKICAgICBjb21wbGV0ZU5vbmN1cnNvclJlcXVlc3QocmVxdWVzdCwgcmVzdWx0RGF0
YSk7CiB9CiAKLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50KEV4
ZWNTdGF0ZSYgc3RhdGUsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiByYW5nZSkKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVz
dENvdW50KEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3Jl
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewogICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50IChJREJPYmplY3RTdG9yZSkiKTsKICAgICBBU1NF
UlQoaXNBY3RpdmUoKSk7CkBAIC0xMTMxLDcgKzExMzEsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURC
VHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudChFeGVjU3RhdGUmIHN0YXRlLCBJREJPYmplY3RTdG9y
ZSYgbwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCi1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNh
Y3Rpb246OnJlcXVlc3RDb3VudChFeGVjU3RhdGUmIHN0YXRlLCBJREJJbmRleCYgaW5kZXgsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RDb3VudChKU0dsb2JhbE9iamVjdCYgc3RhdGUsIElEQkluZGV4JiBpbmRleCwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURC
VHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudCAoSURCSW5kZXgpIik7CiAgICAgQVNTRVJUKGlzQWN0
aXZlKCkpOwpAQCAtMTE3MCw3ICsxMTcwLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkR2V0
Q291bnRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXQKICAg
ICBjb21wbGV0ZU5vbmN1cnNvclJlcXVlc3QocmVxdWVzdCwgcmVzdWx0RGF0YSk7CiB9CiAKLVJl
ZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdERlbGV0ZVJlY29yZChFeGVjU3Rh
dGUmIHN0YXRlLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYgcmFuZ2UpCitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3REZWxl
dGVSZWNvcmQoSlNHbG9iYWxPYmplY3QmIHN0YXRlLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3Rv
cmUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0RGVsZXRlUmVjb3JkIik7CiAgICAgQVNTRVJUKGlzQWN0
aXZlKCkpOwpAQCAtMTIwOCw3ICsxMjA4LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkRGVs
ZXRlUmVjb3JkT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWwKICAg
ICBjb21wbGV0ZU5vbmN1cnNvclJlcXVlc3QocmVxdWVzdCwgcmVzdWx0RGF0YSk7CiB9CiAKLVJl
ZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUoRXhl
Y1N0YXRlJiBzdGF0ZSwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlKQorUmVmPElEQlJlcXVl
c3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q2xlYXJPYmplY3RTdG9yZShKU0dsb2JhbE9iamVj
dCYgc3RhdGUsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSkKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDbGVhck9iamVjdFN0b3JlIik7CiAgICAgQVNT
RVJUKGlzQWN0aXZlKCkpOwpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlv
bjo6ZGlkQ2xlYXJPYmplY3RTdG9yZU9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IElEQlIKICAgICBjb21wbGV0ZU5vbmN1cnNvclJlcXVlc3QocmVxdWVzdCwgcmVzdWx0RGF0YSk7
CiB9CiAKLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRkKEV4
ZWNTdGF0ZSYgc3RhdGUsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgUmVmUHRyPElEQktl
eT4mJiBrZXksIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0
U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUpCitSZWY8SURCUmVxdWVzdD4gSURCVHJh
bnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZChKU0dsb2JhbE9iamVjdCYgc3RhdGUsIElEQk9iamVj
dFN0b3JlJiBvYmplY3RTdG9yZSwgUmVmUHRyPElEQktleT4mJiBrZXksIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3
cml0ZU1vZGUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
UHV0T3JBZGQiKTsKICAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAppbmRleCAzZTY4NDA3MTFiYTg0
OTNhMGEwYjcxODc5YWFlNmE2YTA1MTJiNDZmLi43MzBjZTI2OTA4NGI1ZDc1ZjFiNGM4MDJjYWI5
ZmJlZTMyZDA2NmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmgKQEAgLTExNCwxOCArMTE0LDE4IEBAIGNsYXNzIElEQlRyYW5zYWN0
aW9uIGZpbmFsIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uPiwg
cHVibGljCiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChJREJPYmpl
Y3RTdG9yZSYsIGNvbnN0IElEQkluZGV4SW5mbyYpOwogICAgIHZvaWQgcmVuYW1lSW5kZXgoSURC
SW5kZXgmLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwogCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJl
cXVlc3RQdXRPckFkZChKU0M6OkV4ZWNTdGF0ZSYsIElEQk9iamVjdFN0b3JlJiwgUmVmUHRyPElE
QktleT4mJiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0R2V0UmVjb3JkKEpTQzo6
RXhlY1N0YXRlJiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJik7Ci0g
ICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RHZXRBbGxPYmplY3RTdG9yZVJlY29yZHMoSlNDOjpF
eGVjU3RhdGUmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEluZGV4
ZWREQjo6R2V0QWxsVHlwZSwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50KTsKLSAgICBSZWY8SURC
UmVxdWVzdD4gcmVxdWVzdEdldEFsbEluZGV4UmVjb3JkcyhKU0M6OkV4ZWNTdGF0ZSYsIElEQklu
ZGV4JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSW5kZXhlZERCOjpHZXRBbGxUeXBlLCBPcHRp
b25hbDx1aW50MzJfdD4gY291bnQpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0RGVsZXRl
UmVjb3JkKEpTQzo6RXhlY1N0YXRlJiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmKTsKLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdENsZWFyT2JqZWN0U3RvcmUoSlND
OjpFeGVjU3RhdGUmLCBJREJPYmplY3RTdG9yZSYpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1
ZXN0Q291bnQoSlNDOjpFeGVjU3RhdGUmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0Q291bnQoSlNDOjpFeGVjU3Rh
dGUmLCBJREJJbmRleCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIFJlZjxJREJSZXF1
ZXN0PiByZXF1ZXN0R2V0VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBJREJJbmRleCYsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0R2V0S2V5KEpTQzo6
RXhlY1N0YXRlJiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICBSZWY8
SURCUmVxdWVzdD4gcmVxdWVzdE9wZW5DdXJzb3IoSlNDOjpFeGVjU3RhdGUmLCBJREJPYmplY3RT
dG9yZSYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVz
dE9wZW5DdXJzb3IoSlNDOjpFeGVjU3RhdGUmLCBJREJJbmRleCYsIGNvbnN0IElEQkN1cnNvcklu
Zm8mKTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdFB1dE9yQWRkKEpTQzo6SlNHbG9iYWxP
YmplY3QmLCBJREJPYmplY3RTdG9yZSYsIFJlZlB0cjxJREJLZXk+JiYsIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKKyAgICBSZWY8
SURCUmVxdWVzdD4gcmVxdWVzdEdldFJlY29yZChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSURCT2Jq
ZWN0U3RvcmUmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJik7CisgICAgUmVmPElEQlJlcXVlc3Q+
IHJlcXVlc3RHZXRBbGxPYmplY3RTdG9yZVJlY29yZHMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIElE
Qk9iamVjdFN0b3JlJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSW5kZXhlZERCOjpHZXRBbGxU
eXBlLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1
ZXN0R2V0QWxsSW5kZXhSZWNvcmRzKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBJREJJbmRleCYsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYsIEluZGV4ZWREQjo6R2V0QWxsVHlwZSwgT3B0aW9uYWw8dWlu
dDMyX3Q+IGNvdW50KTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdERlbGV0ZVJlY29yZChK
U0M6OkpTR2xvYmFsT2JqZWN0JiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJLZXlSYW5nZURh
dGEmKTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdENsZWFyT2JqZWN0U3RvcmUoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIElEQk9iamVjdFN0b3JlJik7CisgICAgUmVmPElEQlJlcXVlc3Q+IHJl
cXVlc3RDb3VudChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmKTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdENvdW50KEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBJREJJbmRleCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAg
IFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0R2V0VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIElE
QkluZGV4JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgUmVmPElEQlJlcXVlc3Q+IHJl
cXVlc3RHZXRLZXkoSlNDOjpKU0dsb2JhbE9iamVjdCYsIElEQkluZGV4JiwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJik7CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RPcGVuQ3Vyc29yKEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsK
KyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdE9wZW5DdXJzb3IoSlNDOjpKU0dsb2JhbE9iamVj
dCYsIElEQkluZGV4JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwogICAgIHZvaWQgaXRlcmF0ZUN1
cnNvcihJREJDdXJzb3ImLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYpOwogCiAgICAgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CkBAIC0x
NzQsNyArMTc0LDcgQEAgY2xhc3MgSURCVHJhbnNhY3Rpb24gZmluYWwgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb24+LCBwdWJsaWMKICAgICB2b2lkIGZpcmVPbkFi
b3J0KCk7CiAgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKIAotICAgIFJlZjxJ
REJSZXF1ZXN0PiByZXF1ZXN0SW5kZXhSZWNvcmQoSlNDOjpFeGVjU3RhdGUmLCBJREJJbmRleCYs
IEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAg
ICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEluZGV4UmVjb3JkKEpTQzo6SlNHbG9iYWxPYmplY3Qm
LCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmKTsKIAogICAgIHZvaWQgY29tbWl0T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlv
bk9wZXJhdGlvbiYpOwogICAgIHZvaWQgYWJvcnRPblNlcnZlckFuZENhbmNlbFJlcXVlc3RzKElE
QkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mKTsKQEAgLTIxNSw3ICsyMTUsNyBAQCBjbGFz
cyBJREJUcmFuc2FjdGlvbiBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJU
cmFuc2FjdGlvbj4sIHB1YmxpYwogICAgIHZvaWQgZGVsZXRlSW5kZXhPblNlcnZlcihJREJDbGll
bnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgdWludDY0X3QmIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwogICAgIHZvaWQgZGlkRGVsZXRlSW5k
ZXhPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJik7CiAKLSAgICBSZWY8SURCUmVxdWVzdD4g
ZG9SZXF1ZXN0T3BlbkN1cnNvcihKU0M6OkV4ZWNTdGF0ZSYsIFJlZjxJREJDdXJzb3I+JiYpOwor
ICAgIFJlZjxJREJSZXF1ZXN0PiBkb1JlcXVlc3RPcGVuQ3Vyc29yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmLCBSZWY8SURCQ3Vyc29yPiYmKTsKICAgICB2b2lkIG9wZW5DdXJzb3JPblNlcnZlcihJREJD
bGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwogICAg
IHZvaWQgZGlkT3BlbkN1cnNvck9uU2VydmVyKElEQlJlcXVlc3QmLCBjb25zdCBJREJSZXN1bHRE
YXRhJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJpYWxpemF0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbkNvbnRleHQuY3BwCmluZGV4IDQyNzNl
YTJjNjQ0YWIyMzBkZTg3YWNmNTUyYzY0OGFjYjBlNmZlMDguLjUzNmE4M2JlMjIzNjZkNTVmNTc5
ODg1YWY5ZmEwYzEyMmQ2YzIzNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb25Db250ZXh0
LmNwcApAQCAtODcsMTAgKzg3LDEwIEBAIEpTQzo6Vk0mIElEQlNlcmlhbGl6YXRpb25Db250ZXh0
Ojp2bSgpCiAgICAgcmV0dXJuICptX3ZtOwogfQogCi1KU0M6OkV4ZWNTdGF0ZSYgSURCU2VyaWFs
aXphdGlvbkNvbnRleHQ6OmV4ZWNTdGF0ZSgpCitKU0M6OkpTR2xvYmFsT2JqZWN0JiBJREJTZXJp
YWxpemF0aW9uQ29udGV4dDo6ZXhlY1N0YXRlKCkKIHsKICAgICBpbml0aWFsaXplVk0oKTsKLSAg
ICByZXR1cm4gKm1fZ2xvYmFsT2JqZWN0LmdldCgpLT5nbG9iYWxFeGVjKCk7CisgICAgcmV0dXJu
ICptX2dsb2JhbE9iamVjdC5nZXQoKTsKIH0KIAogSURCU2VyaWFsaXphdGlvbkNvbnRleHQ6OklE
QlNlcmlhbGl6YXRpb25Db250ZXh0KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0
aW9uQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcmlhbGl6YXRpb25Db250ZXh0LmgKaW5kZXggNmEyYWEyNDFlZjE4NDRkM2JkZTc0ZDIzMjdl
YzEzZGJmYjczOGVhZS4uZTE3OTBmYjJiYTA0ODk5YWM1ZDgzZDUwODJjYmFiOGY4MzliNmJkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cmlhbGl6YXRpb25Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb25Db250ZXh0LmgKQEAgLTM0LDcgKzM0LDYgQEAKIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgVk07Ci11c2luZyBFeGVjU3Rh
dGUgPSBDYWxsRnJhbWU7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDcgKzQ3LDcg
QEAgY2xhc3MgSURCU2VyaWFsaXphdGlvbkNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJT
ZXJpYWxpemF0aW9uQ29udGV4dD4gewogICAgIH5JREJTZXJpYWxpemF0aW9uQ29udGV4dCgpOwog
CiAgICAgSlNDOjpWTSYgdm0oKTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlKCk7Cisg
ICAgSlNDOjpKU0dsb2JhbE9iamVjdCYgZXhlY1N0YXRlKCk7CiAKIHByaXZhdGU6CiAgICAgSURC
U2VyaWFsaXphdGlvbkNvbnRleHQoUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuY3BwCmluZGV4IGQ1
YWZkNDQ1OTcxYTg0NTBhYjM4NWE1MDAyMGViNmUyMTk2MTI5MmYuLjZjMTZmYmM5MmRjYTgyMDcx
ZjIyZGM1YjYwZmY5MzZkZDFlODE2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFyZWNvcmRlci9NZWRpYVJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRlci5jcHAKQEAgLTEwNiw3ICsxMDYsNyBA
QCBjb25zdCBjaGFyKiBNZWRpYVJlY29yZGVyOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QK
IAogYm9vbCBNZWRpYVJlY29yZGVyOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7IC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gYmV0dGVy
IGhlcmUgYXMgdGhpcyBwcmV2ZW50cyBlbnRlcmluZyBQYWdlQ2FjaGUuCisgICAgcmV0dXJuIGZh
bHNlOyAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGJldHRlciBoZXJlIGFzIHRoaXMgcHJldmVudHMg
ZW50ZXJpbmcgQmFja0ZvcndhcmRDYWNoZS4KIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gTWVkaWFS
ZWNvcmRlcjo6c3RhcnRSZWNvcmRpbmcoT3B0aW9uYWw8aW50PiB0aW1lc2xpY2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24uY3BwCmluZGV4IDgwNjlkNTJhMDU2ZjA1N2NiYTE2ZDExMDQ5OTMxYzFhZGI0OWI0NzQuLjAx
ZDk1OWQ2MzU3OTQ4MTRiMjc5NjQ5ZGE4MTY0ZWZjZDYyNDQ2M2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3Bw
CkBAIC01MDYsNyArNTA2LDcgQEAgYm9vbCBSVENQZWVyQ29ubmVjdGlvbjo6Y2FuU3VzcGVuZEZv
ckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiAKIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnN1
c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiB7Ci0gICAgaWYgKHJlYXNvbiAhPSBS
ZWFzb25Gb3JTdXNwZW5zaW9uOjpQYWdlQ2FjaGUpCisgICAgaWYgKHJlYXNvbiAhPSBSZWFzb25G
b3JTdXNwZW5zaW9uOjpCYWNrRm9yd2FyZENhY2hlKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X3Nob3VsZERlbGF5VGFza3MgPSB0cnVlOwpAQCAtNjQ2LDE3ICs2NDYsMTcgQEAgdm9pZCBSVENQ
ZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiAgICAgRXZlbnRUYXJn
ZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCi1zdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9y
PFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZvcm1hdGlvbj4gY2VydGlmaWNh
dGVUeXBlRnJvbUFsZ29yaXRobUlkZW50aWZpZXIoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBSVENQ
ZWVyQ29ubmVjdGlvbjo6QWxnb3JpdGhtSWRlbnRpZmllciYmIGFsZ29yaXRobUlkZW50aWZpZXIp
CitzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlm
aWNhdGVJbmZvcm1hdGlvbj4gY2VydGlmaWNhdGVUeXBlRnJvbUFsZ29yaXRobUlkZW50aWZpZXIo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgUlRDUGVlckNvbm5lY3Rp
b246OkFsZ29yaXRobUlkZW50aWZpZXImJiBhbGdvcml0aG1JZGVudGlmaWVyKQogewogICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciwgIkFsZ29yaXRobSBp
cyBub3Qgc3VwcG9ydGVkIl9zIH07CiAKICAgICBhdXRvJiB2YWx1ZSA9IFdURjo6Z2V0PEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+PihhbGdvcml0aG1JZGVudGlmaWVyKTsKIAotICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmpl
Y3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBjb252ZXJ0RGljdGlvbmFyeTxSVENQZWVyQ29ubmVjdGlvbjo6
Q2VydGlmaWNhdGVQYXJhbWV0ZXJzPihzdGF0ZSwgdmFsdWUuZ2V0KCkpOworICAgIGF1dG8gcGFy
YW1ldGVycyA9IGNvbnZlcnREaWN0aW9uYXJ5PFJUQ1BlZXJDb25uZWN0aW9uOjpDZXJ0aWZpY2F0
ZVBhcmFtZXRlcnM+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLmdldCgpKTsKICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IsICJVbmFibGUgdG8g
cmVhZCBjZXJ0aWZpY2F0ZSBwYXJhbWV0ZXJzIl9zIH07CkBAIC02OTIsMTQgKzY5MiwxNCBAQCBz
dGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNh
dGVJbmZvcm1hdGlvbj4gY2VydGlmaQogICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0
ZWRFcnJvciwgIkFsZ29yaXRobSBpcyBub3Qgc3VwcG9ydGVkIl9zIH07CiB9CiAKLXZvaWQgUlRD
UGVlckNvbm5lY3Rpb246OmdlbmVyYXRlQ2VydGlmaWNhdGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBBbGdvcml0aG1JZGVudGlmaWVyJiYgYWxnb3JpdGhtSWRlbnRpZmllciwgRE9NUHJvbWlzZURl
ZmVycmVkPElETEludGVyZmFjZTxSVENDZXJ0aWZpY2F0ZT4+JiYgcHJvbWlzZSkKK3ZvaWQgUlRD
UGVlckNvbm5lY3Rpb246OmdlbmVyYXRlQ2VydGlmaWNhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgQWxnb3JpdGhtSWRlbnRpZmllciYmIGFsZ29yaXRobUlkZW50
aWZpZXIsIERPTVByb21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8UlRDQ2VydGlmaWNhdGU+PiYm
IHByb21pc2UpCiB7Ci0gICAgYXV0byBwYXJhbWV0ZXJzID0gY2VydGlmaWNhdGVUeXBlRnJvbUFs
Z29yaXRobUlkZW50aWZpZXIoc3RhdGUsIFdURk1vdmUoYWxnb3JpdGhtSWRlbnRpZmllcikpOwor
ICAgIGF1dG8gcGFyYW1ldGVycyA9IGNlcnRpZmljYXRlVHlwZUZyb21BbGdvcml0aG1JZGVudGlm
aWVyKGxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUoYWxnb3JpdGhtSWRlbnRpZmllcikpOwog
ICAgIGlmIChwYXJhbWV0ZXJzLmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHByb21pc2UucmVq
ZWN0KHBhcmFtZXRlcnMucmVsZWFzZUV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqSlNDOjpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOworICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmdlbmVyYXRlQ2VydGlmaWNhdGUoZG9jdW1lbnQsIHBhcmFtZXRlcnMucmV0dXJuVmFsdWUoKSwg
V1RGTW92ZShwcm9taXNlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAppbmRleCA2MDg3MzY2ZjcxYmUxMjg4
YTk2OWMzZjAxNGEyYzgwYTJjNGJiMjhmLi4zNWZlY2YzOTVlOTgwNzc4NDEzOWE5NTJlZTA5NGUw
ZDhiMTdlNGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCkBAIC05Niw3ICs5Niw3IEBAIGNsYXNzIFJUQ1BlZXJD
b25uZWN0aW9uIGZpbmFsCiAgICAgfTsKIAogICAgIHVzaW5nIEFsZ29yaXRobUlkZW50aWZpZXIg
PSBWYXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+OwotICAgIHN0YXRp
YyB2b2lkIGdlbmVyYXRlQ2VydGlmaWNhdGUoSlNDOjpFeGVjU3RhdGUmLCBBbGdvcml0aG1JZGVu
dGlmaWVyJiYsIERPTVByb21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8UlRDQ2VydGlmaWNhdGU+
PiYmKTsKKyAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZUNlcnRpZmljYXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QmLCBBbGdvcml0aG1JZGVudGlmaWVyJiYsIERPTVByb21pc2VEZWZlcnJlZDxJRExJbnRl
cmZhY2U8UlRDQ2VydGlmaWNhdGU+PiYmKTsKIAogICAgIC8vIDQuMy4yIFJUQ1BlZXJDb25uZWN0
aW9uIEludGVyZmFjZQogICAgIHZvaWQgcXVldWVkQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25z
JiYsIFBlZXJDb25uZWN0aW9uOjpTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlJiYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLmlkbAppbmRleCBkNDc1ZTU3YjhkMDkzYzlkOGUwMjUwZmYwY2VmY2FlODEyZjY2ODUxLi40
YmQxZGFjMTBlODNjMDgwNDcyYmU0ZTYwM2UzYWEzN2JkZDJlZDliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmlk
bApAQCAtMTI4LDcgKzEyOCw3IEBAIHR5cGVkZWYgKG9iamVjdCBvciBET01TdHJpbmcpIEFsZ29y
aXRobUlkZW50aWZpZXI7CiAKIAogICAgIC8vIDQuMTEgQ2VydGlmaWNhdGUgbWFuYWdlbWVudAot
ICAgIFtDYWxsV2l0aD1FeGVjU3RhdGVdIHN0YXRpYyBQcm9taXNlPFJUQ0NlcnRpZmljYXRlPiBn
ZW5lcmF0ZUNlcnRpZmljYXRlKEFsZ29yaXRobUlkZW50aWZpZXIga2V5Z2VuQWxnb3JpdGhtKTsK
KyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSBzdGF0aWMgUHJvbWlzZTxSVENDZXJ0aWZpY2F0
ZT4gZ2VuZXJhdGVDZXJ0aWZpY2F0ZShBbGdvcml0aG1JZGVudGlmaWVyIGtleWdlbkFsZ29yaXRo
bSk7CiAKICAgICAvLyA1LjEgUlRDUGVlckNvbm5lY3Rpb24gZXh0ZW5zaW9ucwogICAgIC8vIFJU
UCBNZWRpYSBBUEkgZXh0ZW5zaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wYXltZW50cmVxdWVzdC9QYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50LmgKaW5k
ZXggMzY0N2IxMTc5M2I1MWMzMjkwYWYyYjYyMTg5ODg2YzVkMzk2OGNhMC4uNjJhYzE1MWU1YzBm
NDNhZTcxZGM5YzZjMDRkNTA2YzJhZGM4ZjQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRNZXRob2RDaGFuZ2VF
dmVudC5oCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFBheW1lbnRNZXRob2RDaGFuZ2VFdmVudCBm
aW5hbCA6IHB1YmxpYyBQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50IHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50KHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLikpOwogICAgIH0KIAotICAgIHVzaW5nIE1ldGhvZERldGFpbHNGdW5jdGlvbiA9
IHN0ZDo6ZnVuY3Rpb248SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4oSlNDOjpFeGVjU3RhdGUm
KT47CisgICAgdXNpbmcgTWV0aG9kRGV0YWlsc0Z1bmN0aW9uID0gc3RkOjpmdW5jdGlvbjxKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PihKU0M6OkpTR2xvYmFsT2JqZWN0Jik+OwogICAgIHVzaW5n
IE1ldGhvZERldGFpbHNUeXBlID0gVmFyaWFudDxKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LCBNZXRo
b2REZXRhaWxzRnVuY3Rpb24+OwogCiAgICAgY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRob2ROYW1lOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuY3BwCmluZGV4IGNjMDc3NGJj
NTcxMDRmZjIwNzI1Y2M2MzYwY2IyNWRkOTE4ODJkODguLjVlZjI3MTI0MGY4NDM1N2NmNGM2YmQx
NDZmY2E0YjMyNDRiODdiOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuY3BwCkBAIC0yNTEsNyArMjUxLDcgQEAg
ZW51bSBjbGFzcyBTaG91bGRWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVudGlmaWVyIHsKICAgICBZ
ZXMsCiB9OwogCi1zdGF0aWMgRXhjZXB0aW9uT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+Pj4gY2hlY2tBbmRDYW5vbmljYWxpemVEZXRhaWxzKEpTQzo6RXhlY1N0YXRlJiBleGVj
U3RhdGUsIFBheW1lbnREZXRhaWxzQmFzZSYgZGV0YWlscywgYm9vbCByZXF1ZXN0U2hpcHBpbmcs
IFNob3VsZFZhbGlkYXRlUGF5bWVudE1ldGhvZElkZW50aWZpZXIgc2hvdWxkVmFsaWRhdGVQYXlt
ZW50TWV0aG9kSWRlbnRpZmllcikKK3N0YXRpYyBFeGNlcHRpb25PcjxzdGQ6OnR1cGxlPFN0cmlu
ZywgVmVjdG9yPFN0cmluZz4+PiBjaGVja0FuZENhbm9uaWNhbGl6ZURldGFpbHMoSlNDOjpKU0ds
b2JhbE9iamVjdCYgZXhlY1N0YXRlLCBQYXltZW50RGV0YWlsc0Jhc2UmIGRldGFpbHMsIGJvb2wg
cmVxdWVzdFNoaXBwaW5nLCBTaG91bGRWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVudGlmaWVyIHNo
b3VsZFZhbGlkYXRlUGF5bWVudE1ldGhvZElkZW50aWZpZXIpCiB7CiAgICAgZm9yIChhdXRvJiBp
dGVtIDogZGV0YWlscy5kaXNwbGF5SXRlbXMpIHsKICAgICAgICAgYXV0byBleGNlcHRpb24gPSBj
aGVja0FuZENhbm9uaWNhbGl6ZUFtb3VudChpdGVtLmFtb3VudCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVzcG9uc2UuaAppbmRl
eCA5YWU5Zjg1YzMzMWJmMTgzMWJjZTIwNzVkNjVjN2RlOGFlYjczMmNiLi5jMmFiZjdjYTk0MDU1
NTE0YjFmNzk3OTIzODkyOWEyNTg2OWMyMjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXNwb25zZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlc3BvbnNlLmgKQEAgLTQ2LDcgKzQ2
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gY2xhc3MgRE9NUHJvbWlzZURlZmVycmVk
OwogY2xhc3MgUGF5bWVudFJlc3BvbnNlIGZpbmFsIDogcHVibGljIEFjdGl2ZURPTU9iamVjdCwg
cHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBSZWZDb3VudGVkPFBheW1l
bnRSZXNwb25zZT4gewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUGF5bWVudFJlc3BvbnNl
KTsKIHB1YmxpYzoKLSAgICB1c2luZyBEZXRhaWxzRnVuY3Rpb24gPSBGdW5jdGlvbjxKU0M6OlN0
cm9uZzxKU0M6OkpTT2JqZWN0PihKU0M6OkV4ZWNTdGF0ZSYpPjsKKyAgICB1c2luZyBEZXRhaWxz
RnVuY3Rpb24gPSBGdW5jdGlvbjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PihKU0M6OkpTR2xv
YmFsT2JqZWN0Jik+OwogCiAgICAgc3RhdGljIFJlZjxQYXltZW50UmVzcG9uc2U+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXltZW50UmVxdWVzdCYgcmVxdWVzdCkK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KaW5kZXggMTFhZGZhZGQ1YzRhODBmMGRhNDEz
NTc1YzNhZDUzZDdiN2ZiMmYwNS4uOTgxMjZlMDNmM2UzMjE0NzVmNzUxMTQ2NDJhZDhkMGIyNDhi
YWQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lu
cy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQpAQCAtMTUyLDkgKzE1Miw5IEBAIGJvb2wg
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2NyaXB0SW5qZWN0
ZWQoKQogICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9i
YWxPYmplY3Q7CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBn
bG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJj
cmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRG
dW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAg
IGlmIChyZXBsYWNlbWVudEZ1bmN0aW9uLmlzRnVuY3Rpb24odm0pKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAKQEAgLTE4MiwxMyArMTgyLDEzIEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQ6Omluc3RhbGxSZXBsYWNlbWVudChTaGFkb3dSb290JiByb290KQogICAgIEpTQzo6
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
dm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAKICAg
ICAvLyBMb29rdXAgdGhlICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIgZnVuY3Rpb24uCi0gICAg
SlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVj
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVu
dCIpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVj
dC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAgIGlmIChyZXBsYWNlbWVudEZ1bmN0
aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0M6
OkpTT2JqZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50RnVuY3Rpb24udG9PYmpl
Y3QoZXhlYyk7CisgICAgSlNDOjpKU09iamVjdCogcmVwbGFjZW1lbnRPYmplY3QgPSByZXBsYWNl
bWVudEZ1bmN0aW9uLnRvT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIHNjb3BlLmFz
c2VydE5vRXhjZXB0aW9uKCk7CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBKU0M6
OkNhbGxUeXBlIGNhbGxUeXBlID0gcmVwbGFjZW1lbnRPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxEYXRhKTsKQEAgLTE5NiwyMCArMTk2
LDIwIEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGxSZXBsYWNlbWVu
dChTaGFkb3dSb290JiByb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsICZyb290KSk7Ci0gICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIG1fcGFyZW50RWxlbWVudCkpOwotICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCB0aGlzKSk7Ci0gICAgYXJnTGlzdC5hcHBlbmQodG9KUzxJRExT
ZXF1ZW5jZTxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+Pj4oKmV4ZWMsICpnbG9iYWxPYmplY3Qs
IG1fbmFtZXMpKTsKLSAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPElETFNlcXVlbmNlPElETE51bGxh
YmxlPElETERPTVN0cmluZz4+PigqZXhlYywgKmdsb2JhbE9iamVjdCwgbV92YWx1ZXMpKTsKKyAg
ICBhcmdMaXN0LmFwcGVuZCh0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwg
JnJvb3QpKTsKKyAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgbV9wYXJlbnRFbGVtZW50KSk7CisgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHRoaXMpKTsKKyAgICBhcmdMaXN0LmFw
cGVuZCh0b0pTPElETFNlcXVlbmNlPElETE51bGxhYmxlPElETERPTVN0cmluZz4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmdsb2JhbE9iamVjdCwgbV9uYW1lcykpOworICAgIGFyZ0xpc3QuYXBw
ZW5kKHRvSlM8SURMU2VxdWVuY2U8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0LCBtX3ZhbHVlcykpOwogICAgIEFTU0VSVCghYXJn
TGlzdC5oYXNPdmVyZmxvd2VkKCkpOwotICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVudCA9IGNh
bGwoZXhlYywgcmVwbGFjZW1lbnRPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBhcmdMaXN0KTsKKyAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGxleGlj
YWxHbG9iYWxPYmplY3QsIHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGds
b2JhbE9iamVjdCwgYXJnTGlzdCk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkgewogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCiAgICAgLy8gR2V0IHRoZSA8dmlkZW8+IGNyZWF0ZWQgdG8gcmVwbGFjZSB0
aGUgcGx1Zy1pbi4KLSAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhl
YywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidmlkZW8iKSk7CisgICAgSlNDOjpK
U1ZhbHVlIHZhbHVlID0gcmVwbGFjZW1lbnQuZ2V0KGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInZpZGVvIikpOwogICAgIGlmICghc2NvcGUuZXhj
ZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIG1fbWVkaWFF
bGVtZW50ID0gSlNIVE1MVmlkZW9FbGVtZW50Ojp0b1dyYXBwZWQodm0sIHZhbHVlKTsKIApAQCAt
MjIwLDkgKzIyMCw5IEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGxS
ZXBsYWNlbWVudChTaGFkb3dSb290JiByb290KQogICAgIH0KIAogICAgIC8vIEdldCB0aGUgc2Ny
aXB0aW5nIGludGVyZmFjZS4KLSAgICB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzY3JpcHRPYmplY3QiKSk7CisgICAgdmFsdWUg
PSByZXBsYWNlbWVudC5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAic2NyaXB0T2JqZWN0IikpOwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9u
KCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgbV9zY3JpcHRPYmpl
Y3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKKyAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1
ZS50b09iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKICAgICB9CiAKQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgSlNWYWx1ZSAq
anNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlbUluQ29udGV4dChBVk1ldGFkYXRhSXRlbSAqaXRlbSwg
SlNDb250ZQogCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQ6OnRpbWVkTWV0YURhdGEoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAorSlNDOjpK
U1ZhbHVlIEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnRpbWVkTWV0YURhdGEoSlNDOjpK
U0dsb2JhbE9iamVjdCYgc3RhdGUpIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICBIVE1MVmlkZW9FbGVtZW50KiBwYXJlbnQgPSB3cmFwcGVkKCkucGFyZW50RWxlbWVudCgp
OwpAQCAtMzkxLDcgKzM5MSw3IEBAIEpTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Ojp0aW1lZE1ldGFEYXRhKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKICNlbmRpZgogfQog
Ci1KU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6YWNjZXNzTG9nKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKK0pTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUpIGNvbnN0
CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBIVE1MVmlkZW9FbGVtZW50KiBwYXJl
bnQgPSB3cmFwcGVkKCkucGFyZW50RWxlbWVudCgpOwpAQCAtNDEzLDcgKzQxMyw3IEBAIEpTQzo6
SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpFeGVj
U3RhdGUmIHN0YXRlKSBjb25zCiAjZW5kaWYKIH0KIAotSlNDOjpKU1ZhbHVlIEpTUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6OmVycm9yTG9nKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QK
K0pTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplcnJvckxvZyhKU0M6
OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIEhUTUxWaWRlb0VsZW1lbnQqIHBhcmVudCA9IHdyYXBwZWQoKS5wYXJlbnRFbGVtZW50
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZp
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVRGV2aWNlLmNwcApp
bmRleCA2ZGM4ZGIzMTQwYzkwOTM5MjhjZmE2ZmFmYzk5ZDhhNTIyYTgwMmQ0Li5hNmI5ZGVkNzQx
Y2Y1YjExMzNiNTUxMGY5NGJhZDhiMzY4OTQzZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBSZWY8V2Vi
R1BVQnVmZmVyPiBXZWJHUFVEZXZpY2U6OmNyZWF0ZUJ1ZmZlcihjb25zdCBHUFVCdWZmZXJEZXNj
cmlwdG9yJiBkZXNjcmlwdAogICAgIHJldHVybiBXZWJHUFVCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGJ1ZmZlciksIG1fZXJyb3JTY29wZXMpOwogfQogCi1WZWN0b3I8SlNDOjpKU1ZhbHVlPiBXZWJH
UFVEZXZpY2U6OmNyZWF0ZUJ1ZmZlck1hcHBlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IEdQVUJ1ZmZlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0CitWZWN0b3I8SlNDOjpKU1Zh
bHVlPiBXZWJHUFVEZXZpY2U6OmNyZWF0ZUJ1ZmZlck1hcHBlZChKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKSBjb25zdAogewogICAgIG1fZXJyb3JTY29wZXMtPnNldEVycm9yUHJlZml4KCJHUFVEZXZp
Y2UuY3JlYXRlQnVmZmVyTWFwcGVkKCk6ICIpOwogCkBAIC0xNzMsMTEgKzE3MywxMSBAQCBWZWN0
b3I8SlNDOjpKU1ZhbHVlPiBXZWJHUFVEZXZpY2U6OmNyZWF0ZUJ1ZmZlck1hcHBlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbgogICAgIGF1dG8gYnVmZmVyID0gbV9kZXZpY2UtPnRyeUNyZWF0
ZUJ1ZmZlcihkZXNjcmlwdG9yLCBHUFVCdWZmZXJNYXBwZWRPcHRpb246OklzTWFwcGVkLCBtX2Vy
cm9yU2NvcGVzKTsKICAgICBpZiAoYnVmZmVyKSB7CiAgICAgICAgIGF1dG8gYXJyYXlCdWZmZXIg
PSBidWZmZXItPm1hcE9uQ3JlYXRpb24oKTsKLSAgICAgICAgd3JhcHBlZEFycmF5QnVmZmVyID0g
dG9KUygmc3RhdGUsIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpKSwgYXJyYXlCdWZmZXIpOworICAgICAgICB3cmFwcGVkQXJyYXlCdWZm
ZXIgPSB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgYXJyYXlCdWZmZXIpOwogICAgIH0KIAogICAg
IGF1dG8gd2ViQnVmZmVyID0gV2ViR1BVQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpLCBt
X2Vycm9yU2NvcGVzKTsKLSAgICBhdXRvIHdyYXBwZWRXZWJCdWZmZXIgPSB0b0pTKCZzdGF0ZSwg
SlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLCB3ZWJCdWZmZXIpOworICAgIGF1dG8gd3JhcHBlZFdlYkJ1ZmZlciA9IHRvSlMoJmxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLCB3ZWJCdWZmZXIpOwogCiAgICAgcmV0dXJuIHsgd3JhcHBlZFdlYkJ1ZmZl
ciwgd3JhcHBlZEFycmF5QnVmZmVyIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dlYkdQVURldmljZS5oCmluZGV4IDVkMzViY2YyN2ZmOGQyNmI1MTQzNTE0ODlmYmFjODRj
Y2FkMTNmNjYuLmNmYTNiOTVlYTBiMzBkZGUwMzdkMzYwYWVlZDkzZmEyNzVkMmE5NDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5oCkBAIC05Miw3ICs5
Miw3IEBAIGNsYXNzIFdlYkdQVURldmljZSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkdQVURldmlj
ZT4sIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpCiAgICAgY29uc3QgR1BVRGV2aWNlJiBkZXZp
Y2UoKSBjb25zdCB7IHJldHVybiBtX2RldmljZS5nZXQoKTsgfQogCiAgICAgUmVmPFdlYkdQVUJ1
ZmZlcj4gY3JlYXRlQnVmZmVyKGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXB0b3ImKSBjb25zdDsKLSAg
ICBWZWN0b3I8SlNDOjpKU1ZhbHVlPiBjcmVhdGVCdWZmZXJNYXBwZWQoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJikgY29uc3Q7CisgICAgVmVjdG9yPEpTQzo6SlNW
YWx1ZT4gY3JlYXRlQnVmZmVyTWFwcGVkKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBjb25zdCBHUFVC
dWZmZXJEZXNjcmlwdG9yJikgY29uc3Q7CiAgICAgUmVmPFdlYkdQVVRleHR1cmU+IGNyZWF0ZVRl
eHR1cmUoY29uc3QgR1BVVGV4dHVyZURlc2NyaXB0b3ImKSBjb25zdDsKICAgICBSZWY8V2ViR1BV
U2FtcGxlcj4gY3JlYXRlU2FtcGxlcihjb25zdCBHUFVTYW1wbGVyRGVzY3JpcHRvciYpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZp
Y2UuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVRGV2aWNlLmlkbApp
bmRleCBjMThhN2FhMWVlODFiZmNkZjBlYjUyMWZlNGVjNjYzM2UxMzU5MTdlLi43OWU2ZGFhMjQz
N2Y5NzEyMTc0MWVhY2M5MmM2ZmViNmQ3NmQ0MTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5pZGwKQEAgLTM1LDcgKzM1LDcgQEAgdHlwZWRlZiBz
ZXF1ZW5jZTxhbnk+IEdQVU1hcHBlZEJ1ZmZlcjsgIC8vIFtHUFVCdWZmZXIsIEFycmF5QnVmZmVy
XQogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBXZWJHUFVBZGFwdGVyIGFkYXB0ZXI7CiAKICAgICBX
ZWJHUFVCdWZmZXIgY3JlYXRlQnVmZmVyKEdQVUJ1ZmZlckRlc2NyaXB0b3IgZGVzY3JpcHRvcik7
Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZV0gR1BVTWFwcGVkQnVmZmVyIGNyZWF0ZUJ1ZmZlck1h
cHBlZChHUFVCdWZmZXJEZXNjcmlwdG9yIGRlc2NyaXB0b3IpOworICAgIFtDYWxsV2l0aD1HbG9i
YWxPYmplY3RdIEdQVU1hcHBlZEJ1ZmZlciBjcmVhdGVCdWZmZXJNYXBwZWQoR1BVQnVmZmVyRGVz
Y3JpcHRvciBkZXNjcmlwdG9yKTsKICAgICBXZWJHUFVUZXh0dXJlIGNyZWF0ZVRleHR1cmUoR1BV
VGV4dHVyZURlc2NyaXB0b3IgZGVzY3JpcHRvcik7CiAgICAgV2ViR1BVU2FtcGxlciBjcmVhdGVT
YW1wbGVyKEdQVVNhbXBsZXJEZXNjcmlwdG9yIGRlc2NyaXB0b3IpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IDMwMzhhOTdkNTk1
MjM4YzA0MzA5MmYwNGU5YzY1ZmFkMGUwMTExYTAuLmIzMmJmOThiMjU4ZGNlYzM5ODhlYTVhOGEz
NGI3YmVjNTgzM2YzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXQuY3BwCkBAIC01MDgsNyArNTA4LDcgQEAgdm9pZCBXZWJTb2NrZXQ6OnN1c3Bl
bmQoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAgICAgbV9zaG91bGREZWxheUV2ZW50Rmly
aW5nID0gdHJ1ZTsKIAogICAgIGlmIChtX2NoYW5uZWwpIHsKLSAgICAgICAgaWYgKHJlYXNvbiA9
PSBSZWFzb25Gb3JTdXNwZW5zaW9uOjpQYWdlQ2FjaGUpIHsKKyAgICAgICAgaWYgKHJlYXNvbiA9
PSBSZWFzb25Gb3JTdXNwZW5zaW9uOjpCYWNrRm9yd2FyZENhY2hlKSB7CiAgICAgICAgICAgICAv
LyBUaGlzIHdpbGwgY2F1c2UgZGlkQ2xvc2UoKSB0byBiZSBjYWxsZWQuCiAgICAgICAgICAgICBt
X2NoYW5uZWwtPmZhaWwoIldlYlNvY2tldCBpcyBjbG9zZWQgZHVlIHRvIHN1c3BlbnNpb24uIik7
CiAgICAgICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCBlNjc0YTE5MGI0
ODhjNzkyNTQ3OTcxYjk4OTI0NmJlZDE1M2IyODE5Li43OTFkOTdiNDJhZDdlZjFiZWMwMTc1YmIw
NzNlYjE4ZjJkZmE4NTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtMSw1ICsxLDcg
QEAKIGluY2x1ZGUocGxhdGZvcm0vQ3VybC5jbWFrZSkKLWluY2x1ZGUocGxhdGZvcm0vSW1hZ2VE
ZWNvZGVycy5jbWFrZSkKK2lmIChOT1QgQVBQTEVfQlVJTEQpCisgICAgaW5jbHVkZShwbGF0Zm9y
bS9JbWFnZURlY29kZXJzLmNtYWtlKQorZW5kaWYgKCkKIGluY2x1ZGUocGxhdGZvcm0vVGV4dHVy
ZU1hcHBlci5jbWFrZSkKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElS
RUNUT1JJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZThmY2IxZTdiMmIyYmZlZTRjMDkwNmRhMjYxOGY0
MTRhNTdlNWUyYy4uZmZiZGE5NjIzMGQ2MWY1OGM5YzEyNWU0ZjU3OTRhZWE0YTlmZGIxMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTEwODUsMTEgKzEwODUsMTEgQEAgZmlsZWFwaS9GaWxlUmVhZGVyU3lu
Yy5jcHAKIGZpbGVhcGkvTmV0d29ya1NlbmRRdWV1ZS5jcHAKIGZpbGVhcGkvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5jcHAKIAoraGlzdG9yeS9CYWNrRm9yd2FyZENhY2hlLmNwcAogaGlzdG9yeS9C
YWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAogaGlzdG9y
eS9DYWNoZWRQYWdlLmNwcAogaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKLWhpc3RvcnkvUGFnZUNh
Y2hlLmNwcAogCiBodG1sL0F1dG9maWxsLmNwcAogaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNw
cApAQCAtMjIxOSw2ICsyMjE5LDcgQEAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKIHJlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKIAogcmVuZGVyaW5nL3N0eWxlL0Jhc2lj
U2hhcGVzLmNwcAorcmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuY3BwCiByZW5kZXJpbmcvc3R5
bGUvQ29udGVudERhdGEuY3BwCiByZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcAogcmVuZGVy
aW5nL3N0eWxlL0dhcExlbmd0aC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMmNhYjAyMWUzYzY0NzQwYTRkODg0YzY5Njlh
OWM4Mjg3NTQ1YTViLi45MTU1NDgzNTk4MGNiMzAyMTIxODA5YmZlNDRmNDgzMGI0ZmMwOGQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC00MTAsNyArNDEwLDcgQEAKIAkJMTQzMkU4NDcwQzUxNDkzODAwQjE1MDBGIC8qIEdDQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQzMkU4NDYwQzUxNDkzODAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NDc2QUE4MTVEQzRCQjEwMDMw
NURCMiAvKiBXcml0aW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ0NzZBQTcxNURDNEJCMTAwMzA1REIyIC8qIFdyaXRpbmdNb2RlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0OUUyNEMx
MDdENEE4NDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ5RTI0QTEwN0Q0QTg0MDBCNTc5M0YgLyogSlND
YWxsYmFja0RhdGEuaCAqLzsgfTsKLQkJMTQ3N0U3NzcwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VD
YWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0NzdFNzc3MEJGNDEzNEEwMDE1Mjg3MiAv
KiBCYWNrRm9yd2FyZENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDc3RTc3NTBCRjQxMzRBMDAxNTI4NzIgLyogQmFja0ZvcndhcmRDYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NzlG
QUVFMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5RkFFNjEwOUFFMzc1MDBERUQ2NTUgLyogUmVu
ZGVyUnVieS5oICovOyB9OwogCQkxNDc5RkFGMDEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVi
eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NzlGQUU4MTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5QmFzZS5oICovOyB9OwogCQkxNDc5
RkFGMjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVJ1bi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3OUZBRUExMDlBRTM3NTAwREVENjU1IC8q
IFJlbmRlclJ1YnlSdW4uaCAqLzsgfTsKQEAgLTU2MzIsNiArNTYzMiw3IEBACiAJCTBGMjZBN0FD
MjA1NUM4RDcwMDkwQTE0MSAvKiBYTUxEb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBYTUxEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjZBN0FEMjA1NjI2MTAwMDkwQTE0MSAvKiBTVkdVbmtub3duRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdVbmtub3duRWxlbWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjgzQThEMjM1NTgyRjgwMDQ3OTRD
QSAvKiBUaGVtZVR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRoZW1lVHlwZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI4M0E5MTIzNTYzMTI2MDA0Nzk0Q0EgLyog
Qm9yZGVyRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCb3JkZXJEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNkU3MzYxQkQxODM3QTAwMkRCODkxIC8qIExheW91
dFBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFBv
aW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNkU3MzgxQkQxODRCOTAw
MkRCODkxIC8qIExheW91dFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTGF5b3V0U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzdG
MDgzMjIwMkFDOEYwMEE4OUMwQiAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5MTYsOCArNTkx
Nyw4IEBACiAJCTE0NDc2QUE3MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0aW5nTW9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0aW5nTW9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDQ5RTI0QTEwN0Q0QTg0MDBCNTc5M0YgLyogSlNDYWxsYmFja0Rh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYWxsYmFja0RhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0OUUyODYxMDdENERCNDAwQjU3OTNGIC8q
IEpTQ2FsbGJhY2tEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQ2FsbGJhY2tEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ3N0U3
NzQwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFnZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAvKiBCYWNrRm9yd2FyZENhY2hlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYWNrRm9yd2FyZENhY2hl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQ3N0U3NzUwQkY0MTM0QTAwMTUy
ODcyIC8qIEJhY2tGb3J3YXJkQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJhY2tGb3J3YXJkQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3
OUZBRTUxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0NzlGQUU2MTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJ1YnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTQ3OUZBRTcxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlCYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclJ1YnlCYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4ODczLDYgKzE4ODc0LDggQEAK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTE2MEY0OTIwQjBBQTcx
NTAwQzFEMkFGIC8qIG1hYyAqLywKKwkJCQkxNDc3RTc3NDBCRjQxMzRBMDAxNTI4NzIgLyogQmFj
a0ZvcndhcmRDYWNoZS5jcHAgKi8sCisJCQkJMTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIEJh
Y2tGb3J3YXJkQ2FjaGUuaCAqLywKIAkJCQk1MTc0MUQwQjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFj
a0ZvcndhcmRDbGllbnQuaCAqLywKIAkJCQlCQ0E4QzgxRDExRTNEMzY5MDA4MTJGQjcgLyogQmFj
a0ZvcndhcmRDb250cm9sbGVyLmNwcCAqLywKIAkJCQlCQ0E4QzgxQzExRTNEMzY5MDA4MTJGQjcg
LyogQmFja0ZvcndhcmRDb250cm9sbGVyLmggKi8sCkBAIC0xODg4NCw4ICsxODg4Nyw2IEBACiAJ
CQkJNTEwMTg0NjcwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCAqLywKIAkJCQk1MTc0
MUQwRTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3BwICovLAogCQkJCTUxNzQxRDBE
MEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oICovLAotCQkJCTE0NzdFNzc0MEJGNDEz
NEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwICovLAotCQkJCTE0NzdFNzc1MEJGNDEzNEEwMDE1
Mjg3MiAvKiBQYWdlQ2FjaGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gaGlzdG9yeTsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNTE3MCw2ICsyNTE3MSw3IEBACiAJCQljaGlsZHJl
biA9ICgKIAkJCQlGQkQ2QUY4MjE1RUYyMUEzMDA4QjcxMTAgLyogQmFzaWNTaGFwZXMuY3BwICov
LAogCQkJCUZCRDZBRjgzMTVFRjIxQTMwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5oICovLAorCQkJ
CTBGMjgzQTkxMjM1NjMxMjYwMDQ3OTRDQSAvKiBCb3JkZXJEYXRhLmNwcCAqLywKIAkJCQlCQzVF
QjVFMDBFODFCRTg3MDBCMjU5NjUgLyogQm9yZGVyRGF0YS5oICovLAogCQkJCUJDNUVCNURBMEU4
MUI3RUEwMEIyNTk2NSAvKiBCb3JkZXJWYWx1ZS5oICovLAogCQkJCUJDNUVCNURFMEU4MUI5QUIw
MEIyNTk2NSAvKiBDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oICovLApAQCAtMjg3MzIsNiArMjg3MzQs
NyBAQAogCQkJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNl
dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjM4MEZCQjlDMUQwMDUxMDI5MyAvKiBBWE9i
amVjdENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MUM5RjJGOTFBRTNCRUIwMDA5NUI2MUMg
LyogQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0NzdFNzc3
MEJGNDEzNEEwMDE1Mjg3MiAvKiBCYWNrRm9yd2FyZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTc0MUQwRjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0ZvcndhcmRDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDQThDODFFMTFFM0QzNjkwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZENvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTFCODdEMjA4N0M0QzAwMDk3OUE3NSAvKiBC
YWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjE2LDcgKzMx
MjE5LDYgQEAKIAkJCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1
ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUEyMTQ2ODA5N0EzMjkxMDBCOTA1MEEg
LyogUGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTEyNzhENUUyMURFREFENjAwQjU3MTg0IC8q
IFBhZ2VBdWRpdEFnZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkxNDc3RTc3NzBCRjQxMzRBMDAx
NTI4NzIgLyogUGFnZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDVFNUI1RjFBMTVDRTU0
MDAwQzYwOUUgLyogUGFnZUNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE1Qjgx
Q0MyMUZBQTQ0QkMwMDM3RDFFNiAvKiBQYWdlQ29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlEQUVEMjAzMTE2RjI0NDQ4MDA3MEVDMEYgLyogUGFnZUNvbnNvbGVDbGllbnQuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFi
bGUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCmluZGV4IDUy
YjFhZTQ1NWU0N2Y1YzQzNmI0NzFlMjY2YTUxMjI1MDI5M2I3MjEuLjI3ZGFhM2JkMWI1M2UxZGIw
YzcyZjVlMTc2NjU5NDUzZjBjM2NkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRhYmxlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0
YWJsZS5pZGwKQEAgLTI3LDYgKzI3LDYgQEAKICAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1h
dGlvbnMsCiAgICAgTm9JbnRlcmZhY2VPYmplY3QKIF0gaW50ZXJmYWNlIEFuaW1hdGFibGUgewot
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbiwgQ2FsbFdpdGg9RXhlY1N0YXRlXSBXZWJBbmltYXRpb24g
YW5pbWF0ZShvYmplY3Q/IGtleWZyYW1lcywgb3B0aW9uYWwgKHVucmVzdHJpY3RlZCBkb3VibGUg
b3IgS2V5ZnJhbWVBbmltYXRpb25PcHRpb25zKSBvcHRpb25zKTsKKyAgICBbTWF5VGhyb3dFeGNl
cHRpb24sIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gV2ViQW5pbWF0aW9uIGFuaW1hdGUob2JqZWN0
PyBrZXlmcmFtZXMsIG9wdGlvbmFsICh1bnJlc3RyaWN0ZWQgZG91YmxlIG9yIEtleWZyYW1lQW5p
bWF0aW9uT3B0aW9ucykgb3B0aW9ucyk7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRB
bmltYXRpb25zKCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVj
dC5jcHAKaW5kZXggZmExNTdkYzNhYjY1MzhlNWNjY2JjZTk5YmMwZjFmYWIyMjZmNzNlZS4uNTNk
ZGM4MGFlZjc4MWM3MDZlZTYyYzAyNDdlMmVkMTlkZGQzNGY2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCkBAIC0xNTgsMTEgKzE1OCwxMSBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgY29tcHV0ZU1pc3NpbmdLZXlmcmFtZU9mZnNldHMoVmVjdG9yPEtleWZy
YW1lRWZmZWN0OjpQYXJzZWRLZQogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSBFeGNlcHRpb25P
cjxLZXlmcmFtZUVmZmVjdDo6S2V5ZnJhbWVMaWtlT2JqZWN0PiBwcm9jZXNzS2V5ZnJhbWVMaWtl
T2JqZWN0KEV4ZWNTdGF0ZSYgc3RhdGUsIFN0cm9uZzxKU09iamVjdD4mJiBrZXlmcmFtZXNJbnB1
dCwgYm9vbCBhbGxvd0xpc3RzKQorc3RhdGljIGlubGluZSBFeGNlcHRpb25PcjxLZXlmcmFtZUVm
ZmVjdDo6S2V5ZnJhbWVMaWtlT2JqZWN0PiBwcm9jZXNzS2V5ZnJhbWVMaWtlT2JqZWN0KEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBTdHJvbmc8SlNPYmplY3Q+JiYga2V5ZnJh
bWVzSW5wdXQsIGJvb2wgYWxsb3dMaXN0cykKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jcHJvY2Vzcy1hLWtleWZyYW1lLWxpa2Utb2JqZWN0CiAK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmpl
Y3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICAvLyAxLiBSdW4gdGhlIHByb2NlZHVyZSB0byBjb252ZXJ0IGFuIEVDTUFTY3JpcHQgdmFsdWUg
dG8gYSBkaWN0aW9uYXJ5IHR5cGUgW1dFQklETF0gd2l0aCBrZXlmcmFtZSBpbnB1dCBhcyB0aGUg
RUNNQVNjcmlwdCB2YWx1ZSBhcyBmb2xsb3dzOgpAQCAtMTg2LDkgKzE4Niw5IEBAIHN0YXRpYyBp
bmxpbmUgRXhjZXB0aW9uT3I8S2V5ZnJhbWVFZmZlY3Q6OktleWZyYW1lTGlrZU9iamVjdD4gcHJv
Y2Vzc0tleWZyYW1lTGlrCiAgICAgLy8gICAgU3RvcmUgdGhlIHJlc3VsdCBvZiB0aGlzIHByb2Nl
ZHVyZSBhcyBrZXlmcmFtZSBvdXRwdXQuCiAgICAgS2V5ZnJhbWVFZmZlY3Q6OkJhc2VQcm9wZXJ0
eUluZGV4ZWRLZXlmcmFtZSBiYXNlUHJvcGVydGllczsKICAgICBpZiAoYWxsb3dMaXN0cykKLSAg
ICAgICAgYmFzZVByb3BlcnRpZXMgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8S2V5ZnJhbWVFZmZl
Y3Q6OkJhc2VQcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZT4+KHN0YXRlLCBrZXlmcmFtZXNJbnB1dC5n
ZXQoKSk7CisgICAgICAgIGJhc2VQcm9wZXJ0aWVzID0gY29udmVydDxJRExEaWN0aW9uYXJ5PEtl
eWZyYW1lRWZmZWN0OjpCYXNlUHJvcGVydHlJbmRleGVkS2V5ZnJhbWU+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBrZXlmcmFtZXNJbnB1dC5nZXQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGF1dG8g
YmFzZUtleWZyYW1lID0gY29udmVydDxJRExEaWN0aW9uYXJ5PEtleWZyYW1lRWZmZWN0OjpCYXNl
S2V5ZnJhbWU+PihzdGF0ZSwga2V5ZnJhbWVzSW5wdXQuZ2V0KCkpOworICAgICAgICBhdXRvIGJh
c2VLZXlmcmFtZSA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxLZXlmcmFtZUVmZmVjdDo6QmFzZUtl
eWZyYW1lPj4obGV4aWNhbEdsb2JhbE9iamVjdCwga2V5ZnJhbWVzSW5wdXQuZ2V0KCkpOwogICAg
ICAgICBpZiAoYmFzZUtleWZyYW1lLm9mZnNldCkKICAgICAgICAgICAgIGJhc2VQcm9wZXJ0aWVz
Lm9mZnNldCA9IGJhc2VLZXlmcmFtZS5vZmZzZXQudmFsdWUoKTsKICAgICAgICAgZWxzZQpAQCAt
MjEwLDcgKzIxMCw3IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8S2V5ZnJhbWVFZmZlY3Q6
OktleWZyYW1lTGlrZU9iamVjdD4gcHJvY2Vzc0tleWZyYW1lTGlrCiAKICAgICAvLyAzLiBMZXQg
aW5wdXQgcHJvcGVydGllcyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIEVudW1lcmFibGVP
d25OYW1lcyBvcGVyYXRpb24gd2l0aCBrZXlmcmFtZSBpbnB1dCBhcyB0aGUgb2JqZWN0LgogICAg
IFByb3BlcnR5TmFtZUFycmF5IGlucHV0UHJvcGVydGllcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKGtleWZyYW1lc0lucHV0LmdldCgpLCAmc3RhdGUsIGlucHV0UHJvcGVy
dGllcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKGtleWZyYW1lc0lucHV0LmdldCgpLCAmbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5wdXRQcm9w
ZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CiAKICAgICAvLyA0LiBNYWtlIHVwIGEgbmV3IGxp
c3QgYW5pbWF0aW9uIHByb3BlcnRpZXMgdGhhdCBjb25zaXN0cyBvZiBhbGwgb2YgdGhlIHByb3Bl
cnRpZXMgdGhhdCBhcmUgaW4gYm90aCBpbnB1dCBwcm9wZXJ0aWVzIGFuZCBhbmltYXRhYmxlCiAg
ICAgLy8gICAgcHJvcGVydGllcywgb3Igd2hpY2ggYXJlIGluIGlucHV0IHByb3BlcnRpZXMgYW5k
IGNvbmZvcm0gdG8gdGhlIDxjdXN0b20tcHJvcGVydHktbmFtZT4gcHJvZHVjdGlvbi4KQEAgLTIz
MSw3ICsyMzEsNyBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPEtleWZyYW1lRWZmZWN0OjpL
ZXlmcmFtZUxpa2VPYmplY3Q+IHByb2Nlc3NLZXlmcmFtZUxpawogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZBbmltYXRpb25Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgLy8g
MS4gTGV0IHJhdyB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50
ZXJuYWwgbWV0aG9kIG9uIGtleWZyYW1lIGlucHV0LCB3aXRoIHByb3BlcnR5IG5hbWUgYXMgdGhl
IHByb3BlcnR5CiAgICAgICAgIC8vICAgIGtleSBhbmQga2V5ZnJhbWUgaW5wdXQgYXMgdGhlIHJl
Y2VpdmVyLgotICAgICAgICBhdXRvIHJhd1ZhbHVlID0ga2V5ZnJhbWVzSW5wdXQtPmdldCgmc3Rh
dGUsIGFuaW1hdGlvblByb3BlcnRpZXNbaV0pOworICAgICAgICBhdXRvIHJhd1ZhbHVlID0ga2V5
ZnJhbWVzSW5wdXQtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgYW5pbWF0aW9uUHJvcGVydGll
c1tpXSk7CiAKICAgICAgICAgLy8gMi4gQ2hlY2sgdGhlIGNvbXBsZXRpb24gcmVjb3JkIG9mIHJh
dyB2YWx1ZS4KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgRXhjZXB0aW9uIHsg
VHlwZUVycm9yIH0pOwpAQCAtMjQ1LDEzICsyNDUsMTMgQEAgc3RhdGljIGlubGluZSBFeGNlcHRp
b25PcjxLZXlmcmFtZUVmZmVjdDo6S2V5ZnJhbWVMaWtlT2JqZWN0PiBwcm9jZXNzS2V5ZnJhbWVM
aWsKICAgICAgICAgICAgIC8vIElmIHByb3BlcnR5IHZhbHVlcyBpcyBhIHNpbmdsZSBET01TdHJp
bmcsIHJlcGxhY2UgcHJvcGVydHkgdmFsdWVzIHdpdGggYSBzZXF1ZW5jZSBvZiBET01TdHJpbmdz
IHdpdGggdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHByb3BlcnR5CiAgICAgICAgICAgICAvLyBWYWx1
ZXMgYXMgdGhlIG9ubHkgZWxlbWVudC4KICAgICAgICAgICAgIGlmIChyYXdWYWx1ZS5pc09iamVj
dCgpKQotICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWVzID0gY29udmVydDxJRExTZXF1ZW5j
ZTxJRExET01TdHJpbmc+PihzdGF0ZSwgcmF3VmFsdWUpOworICAgICAgICAgICAgICAgIHByb3Bl
cnR5VmFsdWVzID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCByYXdWYWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cHJvcGVydHlWYWx1ZXMgPSB7IHJhd1ZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSkgfTsKKyAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVZhbHVlcyA9IHsgcmF3VmFsdWUudG9XVEZTdHJpbmcoJmxleGlj
YWxHbG9iYWxPYmplY3QpIH07CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBPdGhl
cndpc2UsCiAgICAgICAgICAgICAvLyBMZXQgcHJvcGVydHkgdmFsdWVzIGJlIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyByYXcgdmFsdWUgdG8gYSBET01TdHJpbmcgdXNpbmcgdGhlIHByb2NlZHVy
ZSBmb3IgY29udmVydGluZyBhbiBFQ01BU2NyaXB0IHZhbHVlIHRvIGEgRE9NU3RyaW5nLgotICAg
ICAgICAgICAgcHJvcGVydHlWYWx1ZXMgPSB7IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwg
cmF3VmFsdWUpIH07CisgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlcyA9IHsgY29udmVydDxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHJhd1ZhbHVlKSB9OwogICAgICAgICB9CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9
KTsKIApAQCAtMjY2LDIwICsyNjYsMjAgQEAgc3RhdGljIGlubGluZSBFeGNlcHRpb25PcjxLZXlm
cmFtZUVmZmVjdDo6S2V5ZnJhbWVMaWtlT2JqZWN0PiBwcm9jZXNzS2V5ZnJhbWVMaWsKICAgICBy
ZXR1cm4geyBXVEZNb3ZlKGtleWZyYW1lT3VwdXQpIH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXhj
ZXB0aW9uT3I8dm9pZD4gcHJvY2Vzc0l0ZXJhYmxlS2V5ZnJhbWVzKEV4ZWNTdGF0ZSYgc3RhdGUs
IFN0cm9uZzxKU09iamVjdD4mJiBrZXlmcmFtZXNJbnB1dCwgSlNWYWx1ZSBtZXRob2QsIFZlY3Rv
cjxLZXlmcmFtZUVmZmVjdDo6UGFyc2VkS2V5ZnJhbWU+JiBwYXJzZWRLZXlmcmFtZXMpCitzdGF0
aWMgaW5saW5lIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NJdGVyYWJsZUtleWZyYW1lcyhKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgU3Ryb25nPEpTT2JqZWN0PiYmIGtleWZy
YW1lc0lucHV0LCBKU1ZhbHVlIG1ldGhvZCwgVmVjdG9yPEtleWZyYW1lRWZmZWN0OjpQYXJzZWRL
ZXlmcmFtZT4mIHBhcnNlZEtleWZyYW1lcykKIHsKICAgICAvLyAxLiBMZXQgaXRlciBiZSBHZXRJ
dGVyYXRvcihvYmplY3QsIG1ldGhvZCkuCi0gICAgZm9yRWFjaEluSXRlcmFibGUoc3RhdGUsIGtl
eWZyYW1lc0lucHV0LmdldCgpLCBtZXRob2QsIFsmcGFyc2VkS2V5ZnJhbWVzXShWTSYgdm0sIEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgbmV4dFZhbHVlKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7
CisgICAgZm9yRWFjaEluSXRlcmFibGUobGV4aWNhbEdsb2JhbE9iamVjdCwga2V5ZnJhbWVzSW5w
dXQuZ2V0KCksIG1ldGhvZCwgWyZwYXJzZWRLZXlmcmFtZXNdKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgbmV4dFZhbHVlKSAtPiBFeGNlcHRpb25P
cjx2b2lkPiB7CiAgICAgICAgIC8vIFN0ZXBzIDIgdGhyb3VnaCA2IGFyZSBhbHJlYWR5IGltcGxl
bWVudGVkIGJ5IGZvckVhY2hJbkl0ZXJhYmxlKCkuCiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgaWYgKCFuZXh0VmFsdWUgfHwgIW5leHRWYWx1
ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlKSkpOwor
ICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBK
U0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBjcmVhdGVUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxP
YmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gNy4gQXBwZW5kIHRvIHByb2Nlc3NlZCBrZXlmcmFtZXMgdGhlIHJlc3VsdCBvZiBydW5uaW5n
IHRoZSBwcm9jZWR1cmUgdG8gcHJvY2VzcyBhIGtleWZyYW1lLWxpa2Ugb2JqZWN0IHBhc3Npbmcg
bmV4dEl0ZW0KICAgICAgICAgLy8gYXMgdGhlIGtleWZyYW1lIGlucHV0IGFuZCB3aXRoIHRoZSBh
bGxvdyBsaXN0cyBmbGFnIHNldCB0byBmYWxzZS4KLSAgICAgICAgYXV0byBwcm9jZXNzS2V5ZnJh
bWVMaWtlT2JqZWN0UmVzdWx0ID0gcHJvY2Vzc0tleWZyYW1lTGlrZU9iamVjdChzdGF0ZSwgU3Ry
b25nPEpTT2JqZWN0Pih2bSwgbmV4dFZhbHVlLnRvT2JqZWN0KCZzdGF0ZSkpLCBmYWxzZSk7Cisg
ICAgICAgIGF1dG8gcHJvY2Vzc0tleWZyYW1lTGlrZU9iamVjdFJlc3VsdCA9IHByb2Nlc3NLZXlm
cmFtZUxpa2VPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgU3Ryb25nPEpTT2JqZWN0Pih2bSwg
bmV4dFZhbHVlLnRvT2JqZWN0KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSksIGZhbHNlKTsKICAgICAg
ICAgaWYgKHByb2Nlc3NLZXlmcmFtZUxpa2VPYmplY3RSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0tleWZyYW1lTGlrZU9iamVjdFJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCk7CiAgICAgICAgIGF1dG8ga2V5ZnJhbWVMaWtlT2JqZWN0ID0gcHJvY2Vzc0tl
eWZyYW1lTGlrZU9iamVjdFJlc3VsdC5yZXR1cm5WYWx1ZSgpOwpAQCAtMzIxLDEwICszMjEsMTAg
QEAgc3RhdGljIGlubGluZSBFeGNlcHRpb25Pcjx2b2lkPiBwcm9jZXNzSXRlcmFibGVLZXlmcmFt
ZXMoRXhlY1N0YXRlJiBzdGF0ZSwgU3Ryb24KICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMg
aW5saW5lIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NQcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZXMo
RXhlY1N0YXRlJiBzdGF0ZSwgU3Ryb25nPEpTT2JqZWN0PiYmIGtleWZyYW1lc0lucHV0LCBWZWN0
b3I8S2V5ZnJhbWVFZmZlY3Q6OlBhcnNlZEtleWZyYW1lPiYgcGFyc2VkS2V5ZnJhbWVzLCBWZWN0
b3I8U3RyaW5nPiYgdW51c2VkRWFzaW5ncykKK3N0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9p
ZD4gcHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyhKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgU3Ryb25nPEpTT2JqZWN0PiYmIGtleWZyYW1lc0lucHV0LCBWZWN0b3I8
S2V5ZnJhbWVFZmZlY3Q6OlBhcnNlZEtleWZyYW1lPiYgcGFyc2VkS2V5ZnJhbWVzLCBWZWN0b3I8
U3RyaW5nPiYgdW51c2VkRWFzaW5ncykKIHsKICAgICAvLyAxLiBMZXQgcHJvcGVydHktaW5kZXhl
ZCBrZXlmcmFtZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIHByb2NlZHVyZSB0byBwcm9j
ZXNzIGEga2V5ZnJhbWUtbGlrZSBvYmplY3QgcGFzc2luZyBvYmplY3QgYXMgdGhlIGtleWZyYW1l
IGlucHV0LgotICAgIGF1dG8gcHJvY2Vzc0tleWZyYW1lTGlrZU9iamVjdFJlc3VsdCA9IHByb2Nl
c3NLZXlmcmFtZUxpa2VPYmplY3Qoc3RhdGUsIFdURk1vdmUoa2V5ZnJhbWVzSW5wdXQpLCB0cnVl
KTsKKyAgICBhdXRvIHByb2Nlc3NLZXlmcmFtZUxpa2VPYmplY3RSZXN1bHQgPSBwcm9jZXNzS2V5
ZnJhbWVMaWtlT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUoa2V5ZnJhbWVzSW5w
dXQpLCB0cnVlKTsKICAgICBpZiAocHJvY2Vzc0tleWZyYW1lTGlrZU9iamVjdFJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHByb2Nlc3NLZXlmcmFtZUxpa2VPYmplY3RSZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIGF1dG8gcHJvcGVydHlJbmRleGVkS2V5ZnJhbWUg
PSBwcm9jZXNzS2V5ZnJhbWVMaWtlT2JqZWN0UmVzdWx0LnJldHVyblZhbHVlKCk7CkBAIC00NjIs
NyArNDYyLDcgQEAgc3RhdGljIGlubGluZSBFeGNlcHRpb25Pcjx2b2lkPiBwcm9jZXNzUHJvcGVy
dHlJbmRleGVkS2V5ZnJhbWVzKEV4ZWNTdGF0ZSYgc3RhdGUKICAgICByZXR1cm4geyB9OwogfQog
Ci1FeGNlcHRpb25PcjxSZWY8S2V5ZnJhbWVFZmZlY3Q+PiBLZXlmcmFtZUVmZmVjdDo6Y3JlYXRl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEVsZW1lbnQqIHRhcmdldCwgU3Ryb25nPEpTT2JqZWN0PiYmIGtl
eWZyYW1lcywgT3B0aW9uYWw8VmFyaWFudDxkb3VibGUsIEtleWZyYW1lRWZmZWN0T3B0aW9ucz4+
JiYgb3B0aW9ucykKK0V4Y2VwdGlvbk9yPFJlZjxLZXlmcmFtZUVmZmVjdD4+IEtleWZyYW1lRWZm
ZWN0OjpjcmVhdGUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVsZW1lbnQq
IHRhcmdldCwgU3Ryb25nPEpTT2JqZWN0PiYmIGtleWZyYW1lcywgT3B0aW9uYWw8VmFyaWFudDxk
b3VibGUsIEtleWZyYW1lRWZmZWN0T3B0aW9ucz4+JiYgb3B0aW9ucykKIHsKICAgICBhdXRvIGtl
eWZyYW1lRWZmZWN0ID0gYWRvcHRSZWYoKm5ldyBLZXlmcmFtZUVmZmVjdCh0YXJnZXQpKTsKIApA
QCAtNDkwLDE0ICs0OTAsMTQgQEAgRXhjZXB0aW9uT3I8UmVmPEtleWZyYW1lRWZmZWN0Pj4gS2V5
ZnJhbWVFZmZlY3Q6OmNyZWF0ZShFeGVjU3RhdGUmIHN0YXRlLCBFbGVtZW4KICAgICAgICAgICAg
IHJldHVybiB1cGRhdGVUaW1pbmdSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KIAot
ICAgIGF1dG8gcHJvY2Vzc0tleWZyYW1lc1Jlc3VsdCA9IGtleWZyYW1lRWZmZWN0LT5wcm9jZXNz
S2V5ZnJhbWVzKHN0YXRlLCBXVEZNb3ZlKGtleWZyYW1lcykpOworICAgIGF1dG8gcHJvY2Vzc0tl
eWZyYW1lc1Jlc3VsdCA9IGtleWZyYW1lRWZmZWN0LT5wcm9jZXNzS2V5ZnJhbWVzKGxleGljYWxH
bG9iYWxPYmplY3QsIFdURk1vdmUoa2V5ZnJhbWVzKSk7CiAgICAgaWYgKHByb2Nlc3NLZXlmcmFt
ZXNSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBwcm9jZXNzS2V5ZnJhbWVz
UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKIAogICAgIHJldHVybiBrZXlmcmFtZUVmZmVjdDsK
IH0KIAotRXhjZXB0aW9uT3I8UmVmPEtleWZyYW1lRWZmZWN0Pj4gS2V5ZnJhbWVFZmZlY3Q6OmNy
ZWF0ZShKU0M6OkV4ZWNTdGF0ZSYsIFJlZjxLZXlmcmFtZUVmZmVjdD4mJiBzb3VyY2UpCitFeGNl
cHRpb25PcjxSZWY8S2V5ZnJhbWVFZmZlY3Q+PiBLZXlmcmFtZUVmZmVjdDo6Y3JlYXRlKEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBSZWY8S2V5ZnJhbWVFZmZlY3Q+JiYgc291cmNlKQogewogICAgIGF1
dG8ga2V5ZnJhbWVFZmZlY3QgPSBhZG9wdFJlZigqbmV3IEtleWZyYW1lRWZmZWN0KG51bGxwdHIp
KTsKICAgICBrZXlmcmFtZUVmZmVjdC0+Y29weVByb3BlcnRpZXNGcm9tU291cmNlKFdURk1vdmUo
c291cmNlKSk7CkBAIC01NTMsMTEgKzU1MywxMSBAQCB2b2lkIEtleWZyYW1lRWZmZWN0Ojpjb3B5
UHJvcGVydGllc0Zyb21Tb3VyY2UoUmVmPEtleWZyYW1lRWZmZWN0PiYmIHNvdXJjZSkKICAgICBz
ZXRCbGVuZGluZ0tleWZyYW1lcyhrZXlmcmFtZUxpc3QpOwogfQogCi1WZWN0b3I8U3Ryb25nPEpT
T2JqZWN0Pj4gS2V5ZnJhbWVFZmZlY3Q6OmdldEtleWZyYW1lcyhFeGVjU3RhdGUmIHN0YXRlKQor
VmVjdG9yPFN0cm9uZzxKU09iamVjdD4+IEtleWZyYW1lRWZmZWN0OjpnZXRLZXlmcmFtZXMoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFm
dHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2RvbS1rZXlmcmFtZWVmZmVjdHJlYWRvbmx5
LWdldGtleWZyYW1lcwogCi0gICAgYXV0byBsb2NrID0gSlNMb2NrSG9sZGVyIHsgJnN0YXRlIH07
CisgICAgYXV0byBsb2NrID0gSlNMb2NrSG9sZGVyIHsgJmxleGljYWxHbG9iYWxPYmplY3QgfTsK
IAogICAgIC8vIFNpbmNlIGtleWZyYW1lcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBwYXJ0aWFsbHkg
b3Blbi1lbmRlZCBkaWN0aW9uYXJ5IHR5cGUgdGhhdCBpcyBub3QgY3VycmVudGx5IGFibGUgdG8g
YmUgZXhwcmVzc2VkIHdpdGggV2ViSURMLAogICAgIC8vIHRoZSBwcm9jZWR1cmUgdXNlZCB0byBw
cmVwYXJlIHRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgaXMgZGVmaW5lZCBpbiBwcm9zZSBiZWxv
dzoKQEAgLTU5MSw3ICs1OTEsNyBAQCBWZWN0b3I8U3Ryb25nPEpTT2JqZWN0Pj4gS2V5ZnJhbWVF
ZmZlY3Q6OmdldEtleWZyYW1lcyhFeGVjU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgLy8gaGFz
IG5vIGJlYXJpbmcgc2luY2UsIGFzIHRoZSBsYXN0IGtleWZyYW1lLCBpdHMgdmFsdWUgd2lsbCBu
ZXZlciBiZSB1c2VkLgogICAgICAgICAgICAgY29tcHV0ZWRLZXlmcmFtZS5lYXNpbmcgPSBpczxD
U1NUcmFuc2l0aW9uPihhbmltYXRpb24oKSkgJiYgaSA9PSAxID8gImxpbmVhciIgOiB0aW1pbmdG
dW5jdGlvbkZvcktleWZyYW1lQXRJbmRleCgwKS0+Y3NzVGV4dCgpOwogCi0gICAgICAgICAgICBh
dXRvIG91dHB1dEtleWZyYW1lID0gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCAqanNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgY29tcHV0
ZWRLZXlmcmFtZSk7CisgICAgICAgICAgICBhdXRvIG91dHB1dEtleWZyYW1lID0gY29udmVydERp
Y3Rpb25hcnlUb0pTKGxleGljYWxHbG9iYWxPYmplY3QsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNvbXB1dGVkS2V5ZnJhbWUpOwogCiAgICAgICAg
ICAgICAvLyAzLiBGb3IgZWFjaCBhbmltYXRpb24gcHJvcGVydHktdmFsdWUgcGFpciBzcGVjaWZp
ZWQgb24ga2V5ZnJhbWUsIGRlY2xhcmF0aW9uLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6
CiAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9ICprZXlmcmFtZS5zdHlsZSgpOwpAQCAtNjA1LDE0
ICs2MDUsMTQgQEAgVmVjdG9yPFN0cm9uZzxKU09iamVjdD4+IEtleWZyYW1lRWZmZWN0OjpnZXRL
ZXlmcmFtZXMoRXhlY1N0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICBpZiAoYXV0byBjc3NW
YWx1ZSA9IGNvbXB1dGVkU3R5bGVFeHRyYWN0b3IudmFsdWVGb3JQcm9wZXJ0eUluU3R5bGUoc3R5
bGUsIGNzc1Byb3BlcnR5SWQpKQogICAgICAgICAgICAgICAgICAgICBpZGxWYWx1ZSA9IGNzc1Zh
bHVlLT5jc3NUZXh0KCk7CiAgICAgICAgICAgICAgICAgLy8gMy4gTGV0IHZhbHVlIGJlIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBJREwgdmFsdWUgdG8gYW4gRUNNQVNjcmlwdCBTdHJpbmcgdmFs
dWUuCi0gICAgICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0
ZSwgaWRsVmFsdWUpOworICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0
cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgaWRsVmFsdWUpOwogICAgICAgICAgICAgICAgIC8v
IDQuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb24gb3V0
cHV0IGtleWZyYW1lIHdpdGggcHJvcGVydHkgbmFtZSBwcm9wZXJ0eSBuYW1lLAogICAgICAgICAg
ICAgICAgIC8vICAgIFByb3BlcnR5IERlc2NyaXB0b3IgeyBbW1dyaXRhYmxlXV06IHRydWUsIFtb
RW51bWVyYWJsZV1dOiB0cnVlLCBbW0NvbmZpZ3VyYWJsZV1dOiB0cnVlLCBbW1ZhbHVlXV06IHZh
bHVlIH0gYW5kIEJvb2xlYW4gZmxhZyBmYWxzZS4KLSAgICAgICAgICAgICAgICBKU09iamVjdDo6
ZGVmaW5lT3duUHJvcGVydHkob3V0cHV0S2V5ZnJhbWUsICZzdGF0ZSwgQXRvbVN0cmluZyhwcm9w
ZXJ0eU5hbWUpLmltcGwoKSwgUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAwKSwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvdXRwdXRLZXlmcmFt
ZSwgJmxleGljYWxHbG9iYWxPYmplY3QsIEF0b21TdHJpbmcocHJvcGVydHlOYW1lKS5pbXBsKCks
IFByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgMCksIGZhbHNlKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgLy8gNS4gQXBwZW5kIG91dHB1dCBrZXlmcmFtZSB0byByZXN1bHQuCi0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IHsgc3RhdGUu
dm0oKSwgb3V0cHV0S2V5ZnJhbWUgfSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+IHsgbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBvdXRwdXRL
ZXlmcmFtZSB9KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9wYXJzZWRLZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKQEAgLTYzNSw3ICs2
MzUsNyBAQCBWZWN0b3I8U3Ryb25nPEpTT2JqZWN0Pj4gS2V5ZnJhbWVFZmZlY3Q6OmdldEtleWZy
YW1lcyhFeGVjU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgY29tcHV0ZWRLZXlmcmFtZS5lYXNp
bmcgPSB0aW1pbmdGdW5jdGlvbkZvcktleWZyYW1lQXRJbmRleChpKS0+Y3NzVGV4dCgpOwogICAg
ICAgICAgICAgY29tcHV0ZWRLZXlmcmFtZS5jb21wb3NpdGUgPSBwYXJzZWRLZXlmcmFtZS5jb21w
b3NpdGU7CiAKLSAgICAgICAgICAgIGF1dG8gb3V0cHV0S2V5ZnJhbWUgPSBjb252ZXJ0RGljdGlv
bmFyeVRvSlMoc3RhdGUsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLCBjb21wdXRlZEtleWZyYW1lKTsKKyAgICAgICAgICAgIGF1dG8gb3V0
cHV0S2V5ZnJhbWUgPSBjb252ZXJ0RGljdGlvbmFyeVRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwg
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY29tcHV0
ZWRLZXlmcmFtZSk7CiAKICAgICAgICAgICAgIC8vIDMuIEZvciBlYWNoIGFuaW1hdGlvbiBwcm9w
ZXJ0eS12YWx1ZSBwYWlyIHNwZWNpZmllZCBvbiBrZXlmcmFtZSwgZGVjbGFyYXRpb24sIHBlcmZv
cm0gdGhlIGZvbGxvd2luZyBzdGVwczoKICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHBhcnNl
ZEtleWZyYW1lLnVucGFyc2VkU3R5bGUuYmVnaW4oKSwgZW5kID0gcGFyc2VkS2V5ZnJhbWUudW5w
YXJzZWRTdHlsZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC02NDMsMTQgKzY0MywxNCBA
QCBWZWN0b3I8U3Ryb25nPEpTT2JqZWN0Pj4gS2V5ZnJhbWVFZmZlY3Q6OmdldEtleWZyYW1lcyhF
eGVjU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gQ1NT
UHJvcGVydHlJRFRvSURMQXR0cmlidXRlTmFtZShpdC0+a2V5KTsKICAgICAgICAgICAgICAgICAv
LyAyLiBMZXQgSURMIHZhbHVlIGJlIHRoZSByZXN1bHQgb2Ygc2VyaWFsaXppbmcgdGhlIHByb3Bl
cnR5IHZhbHVlIG9mIGRlY2xhcmF0aW9uIGJ5IHBhc3NpbmcgZGVjbGFyYXRpb24gdG8gdGhlIGFs
Z29yaXRobSB0byBzZXJpYWxpemUgYSBDU1MgdmFsdWUuCiAgICAgICAgICAgICAgICAgLy8gMy4g
TGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBJREwgdmFsdWUgdG8gYW4gRUNN
QVNjcmlwdCBTdHJpbmcgdmFsdWUuCi0gICAgICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8
SURMRE9NU3RyaW5nPihzdGF0ZSwgaXQtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZh
bHVlID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIGl0LT52YWx1ZSk7
CiAgICAgICAgICAgICAgICAgLy8gNC4gQ2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGlu
dGVybmFsIG1ldGhvZCBvbiBvdXRwdXQga2V5ZnJhbWUgd2l0aCBwcm9wZXJ0eSBuYW1lIHByb3Bl
cnR5IG5hbWUsCiAgICAgICAgICAgICAgICAgLy8gICAgUHJvcGVydHkgRGVzY3JpcHRvciB7IFtb
V3JpdGFibGVdXTogdHJ1ZSwgW1tFbnVtZXJhYmxlXV06IHRydWUsIFtbQ29uZmlndXJhYmxlXV06
IHRydWUsIFtbVmFsdWVdXTogdmFsdWUgfSBhbmQgQm9vbGVhbiBmbGFnIGZhbHNlLgotICAgICAg
ICAgICAgICAgIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvdXRwdXRLZXlmcmFtZSwgJnN0
YXRlLCBBdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkuaW1wbCgpLCBQcm9wZXJ0eURlc2NyaXB0b3Io
dmFsdWUsIDApLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgSlNPYmplY3Q6OmRlZmluZU93blBy
b3BlcnR5KG91dHB1dEtleWZyYW1lLCAmbGV4aWNhbEdsb2JhbE9iamVjdCwgQXRvbVN0cmluZyhw
cm9wZXJ0eU5hbWUpLmltcGwoKSwgUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAwKSwgZmFsc2Up
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyA0LiBBcHBlbmQgb3V0cHV0IGtleWZy
YW1lIHRvIHJlc3VsdC4KLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoSlNDOjpTdHJvbmc8SlND
OjpKU09iamVjdD4geyBzdGF0ZS52bSgpLCBvdXRwdXRLZXlmcmFtZSB9KTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4geyBsZXhpY2FsR2xvYmFs
T2JqZWN0LnZtKCksIG91dHB1dEtleWZyYW1lIH0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC02
NTgsMjUgKzY1OCwyNSBAQCBWZWN0b3I8U3Ryb25nPEpTT2JqZWN0Pj4gS2V5ZnJhbWVFZmZlY3Q6
OmdldEtleWZyYW1lcyhFeGVjU3RhdGUmIHN0YXRlKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUV4Y2VwdGlvbk9yPHZvaWQ+IEtleWZyYW1lRWZmZWN0OjpzZXRLZXlmcmFtZXMoRXhlY1N0YXRl
JiBzdGF0ZSwgU3Ryb25nPEpTT2JqZWN0PiYmIGtleWZyYW1lc0lucHV0KQorRXhjZXB0aW9uT3I8
dm9pZD4gS2V5ZnJhbWVFZmZlY3Q6OnNldEtleWZyYW1lcyhKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgU3Ryb25nPEpTT2JqZWN0PiYmIGtleWZyYW1lc0lucHV0KQogewotICAg
IHJldHVybiBwcm9jZXNzS2V5ZnJhbWVzKHN0YXRlLCBXVEZNb3ZlKGtleWZyYW1lc0lucHV0KSk7
CisgICAgcmV0dXJuIHByb2Nlc3NLZXlmcmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92
ZShrZXlmcmFtZXNJbnB1dCkpOwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBLZXlmcmFtZUVmZmVj
dDo6cHJvY2Vzc0tleWZyYW1lcyhFeGVjU3RhdGUmIHN0YXRlLCBTdHJvbmc8SlNPYmplY3Q+JiYg
a2V5ZnJhbWVzSW5wdXQpCitFeGNlcHRpb25Pcjx2b2lkPiBLZXlmcmFtZUVmZmVjdDo6cHJvY2Vz
c0tleWZyYW1lcyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgU3Ryb25nPEpT
T2JqZWN0PiYmIGtleWZyYW1lc0lucHV0KQogewogICAgIC8vIDEuIElmIG9iamVjdCBpcyBudWxs
LCByZXR1cm4gYW4gZW1wdHkgc2VxdWVuY2Ugb2Yga2V5ZnJhbWVzLgogICAgIGlmICgha2V5ZnJh
bWVzSW5wdXQuZ2V0KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyLiBMZXQgcHJvY2Vz
c2VkIGtleWZyYW1lcyBiZSBhbiBlbXB0eSBzZXF1ZW5jZSBvZiBrZXlmcmFtZXMuCiAgICAgVmVj
dG9yPFBhcnNlZEtleWZyYW1lPiBwYXJzZWRLZXlmcmFtZXM7CiAKICAgICAvLyAzLiBMZXQgbWV0
aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKG9iamVjdCwgQEBpdGVyYXRvcikuCi0gICAg
YXV0byBtZXRob2QgPSBrZXlmcmFtZXNJbnB1dC5nZXQoKS0+Z2V0KCZzdGF0ZSwgdm0ucHJvcGVy
dHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOworICAgIGF1dG8gbWV0aG9kID0ga2V5ZnJhbWVzSW5w
dXQuZ2V0KCktPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+aXRl
cmF0b3JTeW1ib2wpOwogCiAgICAgLy8gNC4gQ2hlY2sgdGhlIGNvbXBsZXRpb24gcmVjb3JkIG9m
IG1ldGhvZC4KICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBUeXBl
RXJyb3IgfSk7CkBAIC02ODQsOSArNjg0LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gS2V5ZnJhbWVF
ZmZlY3Q6OnByb2Nlc3NLZXlmcmFtZXMoRXhlY1N0YXRlJiBzdGF0ZSwgU3Ryb25nPEpTT2IKICAg
ICAvLyA1LiBQZXJmb3JtIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRj
aGluZyBjb25kaXRpb24gZnJvbSBiZWxvdywKICAgICBWZWN0b3I8U3RyaW5nPiB1bnVzZWRFYXNp
bmdzOwogICAgIGlmICghbWV0aG9kLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHByb2Nlc3NJdGVy
YWJsZUtleWZyYW1lcyhzdGF0ZSwgV1RGTW92ZShrZXlmcmFtZXNJbnB1dCksIFdURk1vdmUobWV0
aG9kKSwgcGFyc2VkS2V5ZnJhbWVzKTsKKyAgICAgICAgcHJvY2Vzc0l0ZXJhYmxlS2V5ZnJhbWVz
KGxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUoa2V5ZnJhbWVzSW5wdXQpLCBXVEZNb3ZlKG1l
dGhvZCksIHBhcnNlZEtleWZyYW1lcyk7CiAgICAgZWxzZQotICAgICAgICBwcm9jZXNzUHJvcGVy
dHlJbmRleGVkS2V5ZnJhbWVzKHN0YXRlLCBXVEZNb3ZlKGtleWZyYW1lc0lucHV0KSwgcGFyc2Vk
S2V5ZnJhbWVzLCB1bnVzZWRFYXNpbmdzKTsKKyAgICAgICAgcHJvY2Vzc1Byb3BlcnR5SW5kZXhl
ZEtleWZyYW1lcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGtleWZyYW1lc0lucHV0KSwg
cGFyc2VkS2V5ZnJhbWVzLCB1bnVzZWRFYXNpbmdzKTsKIAogICAgIC8vIDYuIElmIHByb2Nlc3Nl
ZCBrZXlmcmFtZXMgaXMgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldCwgdGhyb3cgYSBUeXBl
RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIC8vIDcuIElmIHRoZXJlIGV4aXN0IGFu
eSBrZXlmcmFtZSBpbiBwcm9jZXNzZWQga2V5ZnJhbWVzIHdob3NlIGtleWZyYW1lIG9mZnNldCBp
cyBub24tbnVsbCBhbmQgbGVzcyB0aGFuCkBAIC0xMjg0LDcgKzEyODQsNyBAQCB2b2lkIEtleWZy
YW1lRWZmZWN0OjphZGRQZW5kaW5nQWNjZWxlcmF0ZWRBY3Rpb24oQWNjZWxlcmF0ZWRBY3Rpb24g
YWN0aW9uKQogdm9pZCBLZXlmcmFtZUVmZmVjdDo6YW5pbWF0aW9uRGlkU2VlaygpCiB7CiAgICAg
Ly8gVGhlcmUgaXMgbm8gbmVlZCB0byBzZWVrIGlmIHdlJ3JlIG5vdCBwbGF5aW5nIGFuIGFuaW1h
dGlvbiBhbHJlYWR5LiBJZiBzZWVraW5nCi0gICAgLy8gbWVhbnMgd2UncmUgbW92aW5nIGludG8g
YW4gYWN0aXZlIHN0YXRlLCB3ZSdsbCBwaWNrIHRoaXMgdXAgaW4gYXBwbHkoKS4KKyAgICAvLyBt
ZWFucyB3ZSdyZSBtb3ZpbmcgaW50byBhbiBhY3RpdmUgbGV4aWNhbEdsb2JhbE9iamVjdCwgd2Un
bGwgcGljayB0aGlzIHVwIGluIGFwcGx5KCkuCiAgICAgaWYgKG1fc2hvdWxkUnVuQWNjZWxlcmF0
ZWQgJiYgaXNSdW5uaW5nQWNjZWxlcmF0ZWQoKSkKICAgICAgICAgYWRkUGVuZGluZ0FjY2VsZXJh
dGVkQWN0aW9uKEFjY2VsZXJhdGVkQWN0aW9uOjpTZWVrKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmgKaW5kZXggMmRmZmRiNzU3ZTgxZDViMGM5ZjcxMWNlNTM0
MGUyYzYwYTNjOWNlNS4uNGI4ZjRlZDEzNTY5MzViODc3YzY4NmYxNzZjMjc4Y2I0ZTZjYTdjNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmgKQEAgLTQ3LDggKzQ3
LDggQEAgY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKIGNsYXNzIEtleWZyYW1lRWZmZWN0IDogcHVi
bGljIEFuaW1hdGlvbkVmZmVjdAogICAgICwgcHVibGljIENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQgewogcHVibGljOgotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8S2V5ZnJhbWVFZmZlY3Q+
PiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBFbGVtZW50KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09i
amVjdD4mJiwgT3B0aW9uYWw8VmFyaWFudDxkb3VibGUsIEtleWZyYW1lRWZmZWN0T3B0aW9ucz4+
JiYpOwotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8S2V5ZnJhbWVFZmZlY3Q+PiBjcmVhdGUo
SlNDOjpFeGVjU3RhdGUmLCBSZWY8S2V5ZnJhbWVFZmZlY3Q+JiYpOworICAgIHN0YXRpYyBFeGNl
cHRpb25PcjxSZWY8S2V5ZnJhbWVFZmZlY3Q+PiBjcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEVsZW1lbnQqLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYmLCBPcHRpb25hbDxWYXJpYW50
PGRvdWJsZSwgS2V5ZnJhbWVFZmZlY3RPcHRpb25zPj4mJik7CisgICAgc3RhdGljIEV4Y2VwdGlv
bk9yPFJlZjxLZXlmcmFtZUVmZmVjdD4+IGNyZWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVm
PEtleWZyYW1lRWZmZWN0PiYmKTsKICAgICBzdGF0aWMgUmVmPEtleWZyYW1lRWZmZWN0PiBjcmVh
dGUoY29uc3QgRWxlbWVudCYpOwogICAgIH5LZXlmcmFtZUVmZmVjdCgpIHsgfQogCkBAIC0xMDEs
OCArMTAxLDggQEAgY2xhc3MgS2V5ZnJhbWVFZmZlY3QgOiBwdWJsaWMgQW5pbWF0aW9uRWZmZWN0
CiAgICAgRWxlbWVudCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0K
ICAgICB2b2lkIHNldFRhcmdldChSZWZQdHI8RWxlbWVudD4mJik7CiAKLSAgICBWZWN0b3I8SlND
OjpTdHJvbmc8SlNDOjpKU09iamVjdD4+IGdldEtleWZyYW1lcyhKU0M6OkV4ZWNTdGF0ZSYpOwot
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEtleWZyYW1lcyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiYpOworICAgIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpT
T2JqZWN0Pj4gZ2V0S2V5ZnJhbWVzKEpTQzo6SlNHbG9iYWxPYmplY3QmKTsKKyAgICBFeGNlcHRp
b25Pcjx2b2lkPiBzZXRLZXlmcmFtZXMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+JiYpOwogCiAgICAgSXRlcmF0aW9uQ29tcG9zaXRlT3BlcmF0aW9uIGl0
ZXJhdGlvbkNvbXBvc2l0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0aW9uQ29tcG9zaXRlT3Bl
cmF0aW9uOyB9CiAgICAgdm9pZCBzZXRJdGVyYXRpb25Db21wb3NpdGUoSXRlcmF0aW9uQ29tcG9z
aXRlT3BlcmF0aW9uIGl0ZXJhdGlvbkNvbXBvc2l0ZU9wZXJhdGlvbikgeyBtX2l0ZXJhdGlvbkNv
bXBvc2l0ZU9wZXJhdGlvbiA9IGl0ZXJhdGlvbkNvbXBvc2l0ZU9wZXJhdGlvbjsgfQpAQCAtMTQz
LDcgKzE0Myw3IEBAIGNsYXNzIEtleWZyYW1lRWZmZWN0IDogcHVibGljIEFuaW1hdGlvbkVmZmVj
dAogICAgIGVudW0gY2xhc3MgQWNjZWxlcmF0ZWRBY3Rpb24gOiB1aW50OF90IHsgUGxheSwgUGF1
c2UsIFNlZWssIFN0b3AgfTsKIAogICAgIHZvaWQgY29weVByb3BlcnRpZXNGcm9tU291cmNlKFJl
ZjxLZXlmcmFtZUVmZmVjdD4mJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gcHJvY2Vzc0tleWZy
YW1lcyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiYpOworICAg
IEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NLZXlmcmFtZXMoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiYpOwogICAgIHZvaWQgYWRkUGVuZGluZ0FjY2Vs
ZXJhdGVkQWN0aW9uKEFjY2VsZXJhdGVkQWN0aW9uKTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJh
dGVkQW5pbWF0aW9uU3RhdGUoKTsKICAgICB2b2lkIHNldEFuaW1hdGVkUHJvcGVydGllc0luU3R5
bGUoUmVuZGVyU3R5bGUmLCBkb3VibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlm
cmFtZUVmZmVjdC5pZGwKaW5kZXggN2IyMzJhNWE5MDFmMDFiNGZmZDc2ODVkNTA0NTRlNDA3ZmZi
ZDJhMC4uODBhM2RjMzVjMzIyMTg0ZTY5YzMyNmI0ZGVmNDVlMDkyZTMyYmQzZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCkBAIC0yOCwxNSArMjgsMTUg
QEAKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiAg
ICAgQ29uc3RydWN0b3JNYXlUaHJvd0V4Y2VwdGlvbiwKLSAgICBDb25zdHJ1Y3RvckNhbGxXaXRo
PUV4ZWNTdGF0ZSwKKyAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPUdsb2JhbE9iamVjdCwKICAgICBD
b25zdHJ1Y3RvcihFbGVtZW50PyB0YXJnZXQsIG9iamVjdD8ga2V5ZnJhbWVzLCBvcHRpb25hbCAo
dW5yZXN0cmljdGVkIGRvdWJsZSBvciBLZXlmcmFtZUVmZmVjdE9wdGlvbnMpIG9wdGlvbnMpLAog
ICAgIENvbnN0cnVjdG9yKEtleWZyYW1lRWZmZWN0IHNvdXJjZSkKIF0gaW50ZXJmYWNlIEtleWZy
YW1lRWZmZWN0IDogQW5pbWF0aW9uRWZmZWN0IHsKICAgICBhdHRyaWJ1dGUgRWxlbWVudD8gdGFy
Z2V0OwogICAgIGF0dHJpYnV0ZSBJdGVyYXRpb25Db21wb3NpdGVPcGVyYXRpb24gaXRlcmF0aW9u
Q29tcG9zaXRlOwogICAgIGF0dHJpYnV0ZSBDb21wb3NpdGVPcGVyYXRpb24gY29tcG9zaXRlOwot
ICAgIFtDYWxsV2l0aD1FeGVjU3RhdGVdIHNlcXVlbmNlPG9iamVjdD4gZ2V0S2V5ZnJhbWVzKCk7
Ci0gICAgW01heVRocm93RXhjZXB0aW9uLCBDYWxsV2l0aD1FeGVjU3RhdGVdIHZvaWQgc2V0S2V5
ZnJhbWVzKG9iamVjdD8ga2V5ZnJhbWVzKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSBz
ZXF1ZW5jZTxvYmplY3Q+IGdldEtleWZyYW1lcygpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbiwg
Q2FsbFdpdGg9R2xvYmFsT2JqZWN0XSB2b2lkIHNldEtleWZyYW1lcyhvYmplY3Q/IGtleWZyYW1l
cyk7CiB9OwogCiBkaWN0aW9uYXJ5IEJhc2VQcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwCmluZGV4IDMxOTRiMzI3NDc1ZmYx
NmU5YWRkMTE0MjljNjhlMGU1NWJhZTQxZmYuLjVmMGM5MDAzZGZmNzdlMDcxN2Q2ZDhmNWJlNjk2
ODYyMGZiNTJhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmlt
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3Bw
CkBAIC0xMTYxLDcgKzExNjEsNyBAQCBib29sIFdlYkFuaW1hdGlvbjo6Y2FuU3VzcGVuZEZvckRv
Y3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiB7CiAgICAgLy8gVXNlIHRoZSBiYXNlIGNsYXNzJ3Mg
aW1wbGVtZW50YXRpb24gb2YgaGFzUGVuZGluZ0FjdGl2aXR5KCkgc2luY2Ugd2Ugd291bGRuJ3Qg
d2FudCB0aGUgY3VzdG9tIGltcGxlbWVudGF0aW9uCiAgICAgLy8gaW4gdGhpcyBjbGFzcyBkZXNp
Z25lZCB0byBrZWVwIEpTIHdyYXBwZXJzIGFsaXZlIHRvIGludGVyZmVyZSB3aXRoIHRoZSBhYmls
aXR5IGZvciBhIHBhZ2UgdXNpbmcgYW5pbWF0aW9ucwotICAgIC8vIHRvIGVudGVyIHRoZSBwYWdl
IGNhY2hlLgorICAgIC8vIHRvIGVudGVyIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAgICAgcmV0
dXJuICFBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01Qcm9taXNlUHJveHkuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVByb21pc2VQcm94eS5oCmluZGV4IDYyMWI4OTA1MWJi
NDhkYjAzMDFlYTgwNDdjN2FmZWZmYjY4Y2RlNmEuLjY3MmYxM2NhZjE1OWI4N2FhNzFmZWRkNWRh
MmQ0MzUyNWRkYTEzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TVByb21pc2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVByb21p
c2VQcm94eS5oCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIERPTVByb21pc2VQcm94eSB7CiAgICAg
RE9NUHJvbWlzZVByb3h5KCkgPSBkZWZhdWx0OwogICAgIH5ET01Qcm9taXNlUHJveHkoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBKU0M6OkpTVmFsdWUgcHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0Jik7CisgICAgSlNDOjpKU1ZhbHVlIHByb21pc2UoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKQEAgLTY1
LDcgKzY1LDcgQEAgY2xhc3MgRE9NUHJvbWlzZVByb3h5PElETFZvaWQ+IHsKICAgICBET01Qcm9t
aXNlUHJveHkoKSA9IGRlZmF1bHQ7CiAgICAgfkRPTVByb21pc2VQcm94eSgpID0gZGVmYXVsdDsK
IAotICAgIEpTQzo6SlNWYWx1ZSBwcm9taXNlKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKKyAgICBKU0M6OkpTVmFsdWUgcHJvbWlzZShKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
SlNET01HbG9iYWxPYmplY3QmKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIApAQCAtOTQsNyArOTQs
NyBAQCBjbGFzcyBET01Qcm9taXNlUHJveHlXaXRoUmVzb2x2ZUNhbGxiYWNrIHsKICAgICBET01Q
cm9taXNlUHJveHlXaXRoUmVzb2x2ZUNhbGxiYWNrKFJlc29sdmVDYWxsYmFjayYmKTsKICAgICB+
RE9NUHJvbWlzZVByb3h5V2l0aFJlc29sdmVDYWxsYmFjaygpID0gZGVmYXVsdDsKIAotICAgIEpT
Qzo6SlNWYWx1ZSBwcm9taXNlKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmKTsK
KyAgICBKU0M6OkpTVmFsdWUgcHJvbWlzZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNET01HbG9i
YWxPYmplY3QmKTsKIAogICAgIHZvaWQgY2xlYXIoKTsKIApAQCAtMTE0LDE1ICsxMTQsMTYgQEAg
Y2xhc3MgRE9NUHJvbWlzZVByb3h5V2l0aFJlc29sdmVDYWxsYmFjayB7CiAvLyBNQVJLOiAtIERP
TVByb21pc2VQcm94eTxJRExUeXBlPiBnZW5lcmljIGltcGxlbWVudGF0aW9uCiAKIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIERPTVByb21pc2VQcm94eTxJ
RExUeXBlPjo6cHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCitpbmxpbmUgSlNDOjpKU1ZhbHVlIERPTVByb21pc2VQcm94eTxJRExU
eXBlPjo6cHJvbWlzZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogeworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1dG8mIGRlZmVycmVkUHJvbWlzZSA6IG1fZGVm
ZXJyZWRQcm9taXNlcykgewogICAgICAgICBpZiAoZGVmZXJyZWRQcm9taXNlLT5nbG9iYWxPYmpl
Y3QoKSA9PSAmZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkUHJvbWlz
ZS0+cHJvbWlzZSgpOwogICAgIH0KIAogICAgIC8vIERlZmVycmVkUHJvbWlzZSBjYW4gZmFpbCBj
b25zdHJ1Y3Rpb24gZHVyaW5nIHdvcmtlciBhYnJ1cHQgdGVybWluYXRpb24uCi0gICAgYXV0byBk
ZWZlcnJlZFByb21pc2UgPSBEZWZlcnJlZFByb21pc2U6OmNyZWF0ZShzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBEZWZlcnJlZFByb21pc2U6Ok1vZGU6OlJldGFpblByb21pc2VPblJlc29sdmUpOworICAg
IGF1dG8gZGVmZXJyZWRQcm9taXNlID0gRGVmZXJyZWRQcm9taXNlOjpjcmVhdGUoZ2xvYmFsT2Jq
ZWN0LCBEZWZlcnJlZFByb21pc2U6Ok1vZGU6OlJldGFpblByb21pc2VPblJlc29sdmUpOwogICAg
IGlmICghZGVmZXJyZWRQcm9taXNlKQogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgp
OwogCkBAIC0xODQsMTUgKzE4NSwxNiBAQCBpbmxpbmUgdm9pZCBET01Qcm9taXNlUHJveHk8SURM
VHlwZT46OnJlamVjdChFeGNlcHRpb24gZXhjZXB0aW9uKQogCiAvLyBNQVJLOiAtIERPTVByb21p
c2VQcm94eTxJRExWb2lkPiBzcGVjaWFsaXphdGlvbgogCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIERP
TVByb21pc2VQcm94eTxJRExWb2lkPjo6cHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCitpbmxpbmUgSlNDOjpKU1ZhbHVlIERPTVBy
b21pc2VQcm94eTxJRExWb2lkPjo6cHJvbWlzZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogeworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1dG8mIGRlZmVycmVk
UHJvbWlzZSA6IG1fZGVmZXJyZWRQcm9taXNlcykgewogICAgICAgICBpZiAoZGVmZXJyZWRQcm9t
aXNlLT5nbG9iYWxPYmplY3QoKSA9PSAmZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJu
IGRlZmVycmVkUHJvbWlzZS0+cHJvbWlzZSgpOwogICAgIH0KIAogICAgIC8vIERlZmVycmVkUHJv
bWlzZSBjYW4gZmFpbCBjb25zdHJ1Y3Rpb24gZHVyaW5nIHdvcmtlciBhYnJ1cHQgdGVybWluYXRp
b24uCi0gICAgYXV0byBkZWZlcnJlZFByb21pc2UgPSBEZWZlcnJlZFByb21pc2U6OmNyZWF0ZShz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBEZWZlcnJlZFByb21pc2U6Ok1vZGU6OlJldGFpblByb21pc2VP
blJlc29sdmUpOworICAgIGF1dG8gZGVmZXJyZWRQcm9taXNlID0gRGVmZXJyZWRQcm9taXNlOjpj
cmVhdGUoZ2xvYmFsT2JqZWN0LCBEZWZlcnJlZFByb21pc2U6Ok1vZGU6OlJldGFpblByb21pc2VP
blJlc29sdmUpOwogICAgIGlmICghZGVmZXJyZWRQcm9taXNlKQogICAgICAgICByZXR1cm4gSlND
Ojpqc1VuZGVmaW5lZCgpOwogCkBAIC0yNTEsMTUgKzI1MywxNiBAQCBpbmxpbmUgRE9NUHJvbWlz
ZVByb3h5V2l0aFJlc29sdmVDYWxsYmFjazxJRExUeXBlPjo6RE9NUHJvbWlzZVByb3h5V2l0aFJl
c29sdmVDYQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotaW5saW5lIEpTQzo6SlNW
YWx1ZSBET01Qcm9taXNlUHJveHlXaXRoUmVzb2x2ZUNhbGxiYWNrPElETFR5cGU+Ojpwcm9taXNl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K2lubGluZSBKU0M6OkpTVmFsdWUgRE9NUHJvbWlzZVByb3h5V2l0aFJlc29sdmVDYWxsYmFjazxJ
RExUeXBlPjo6cHJvbWlzZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogeworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBmb3IgKGF1dG8mIGRlZmVycmVkUHJvbWlzZSA6IG1f
ZGVmZXJyZWRQcm9taXNlcykgewogICAgICAgICBpZiAoZGVmZXJyZWRQcm9taXNlLT5nbG9iYWxP
YmplY3QoKSA9PSAmZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkUHJv
bWlzZS0+cHJvbWlzZSgpOwogICAgIH0KIAogICAgIC8vIERlZmVycmVkUHJvbWlzZSBjYW4gZmFp
bCBjb25zdHJ1Y3Rpb24gZHVyaW5nIHdvcmtlciBhYnJ1cHQgdGVybWluYXRpb24uCi0gICAgYXV0
byBkZWZlcnJlZFByb21pc2UgPSBEZWZlcnJlZFByb21pc2U6OmNyZWF0ZShzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBEZWZlcnJlZFByb21pc2U6Ok1vZGU6OlJldGFpblByb21pc2VPblJlc29sdmUpOwor
ICAgIGF1dG8gZGVmZXJyZWRQcm9taXNlID0gRGVmZXJyZWRQcm9taXNlOjpjcmVhdGUoZ2xvYmFs
T2JqZWN0LCBEZWZlcnJlZFByb21pc2U6Ok1vZGU6OlJldGFpblByb21pc2VPblJlc29sdmUpOwog
ICAgIGlmICghZGVmZXJyZWRQcm9taXNlKQogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5l
ZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVy
V29ybGQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oCmlu
ZGV4IGNiZDdlNmU1MjBlNjE2NGZkOWMxOTA2NGMzYjAyOTQ5ZWYyMDA2MGUuLjEwNWVmMjA0MzM4
MTg2MmZhY2Y1NTUyNmRiZTk0ZDYwMzdlNDFmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oCkBAIC03NSwxNSArNzUsMTUgQEAgV0VCQ09SRV9FWFBP
UlQgRE9NV3JhcHBlcldvcmxkJiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKTsKIGlubGluZSBET01X
cmFwcGVyV29ybGQmIGRlYnVnZ2VyV29ybGQoKSB7IHJldHVybiBtYWluVGhyZWFkTm9ybWFsV29y
bGQoKTsgfQogaW5saW5lIERPTVdyYXBwZXJXb3JsZCYgcGx1Z2luV29ybGQoKSB7IHJldHVybiBt
YWluVGhyZWFkTm9ybWFsV29ybGQoKTsgfQogCi1ET01XcmFwcGVyV29ybGQmIGN1cnJlbnRXb3Js
ZChKU0M6OkV4ZWNTdGF0ZSYpOworRE9NV3JhcHBlcldvcmxkJiBjdXJyZW50V29ybGQoSlNDOjpK
U0dsb2JhbE9iamVjdCYpOwogRE9NV3JhcHBlcldvcmxkJiB3b3JsZEZvckRPTU9iamVjdChKU0M6
OkpTT2JqZWN0Jik7CiAKIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29kZSBwYXRocyB0aGF0IG11
c3Qgbm90IHNoYXJlIG9iamVjdHMgYWNyb3NzIGlzb2xhdGVkIERPTSB3b3JsZHMuCi1ib29sIGlz
V29ybGRDb21wYXRpYmxlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK2Jvb2wgaXNX
b3JsZENvbXBhdGlibGUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CiAKLWlu
bGluZSBET01XcmFwcGVyV29ybGQmIGN1cnJlbnRXb3JsZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUp
CitpbmxpbmUgRE9NV3JhcHBlcldvcmxkJiBjdXJyZW50V29ybGQoSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT53b3JsZCgpOworICAg
IHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+d29ybGQoKTsKIH0KIAogaW5saW5lIERPTVdyYXBwZXJXb3JsZCYgd29ybGRGb3JET01P
YmplY3QoSlNDOjpKU09iamVjdCYgb2JqZWN0KQpAQCAtOTEsOSArOTEsOSBAQCBpbmxpbmUgRE9N
V3JhcHBlcldvcmxkJiB3b3JsZEZvckRPTU9iamVjdChKU0M6OkpTT2JqZWN0JiBvYmplY3QpCiAg
ICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4ob2JqZWN0Lmdsb2JhbE9i
amVjdCgpKS0+d29ybGQoKTsKIH0KIAotaW5saW5lIGJvb2wgaXNXb3JsZENvbXBhdGlibGUoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCitpbmxpbmUgYm9vbCBpc1dv
cmxkQ29tcGF0aWJsZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICF2YWx1ZS5pc09iamVjdCgpIHx8ICZ3
b3JsZEZvckRPTU9iamVjdCgqdmFsdWUuZ2V0T2JqZWN0KCkpID09ICZjdXJyZW50V29ybGQoc3Rh
dGUpOworICAgIHJldHVybiAhdmFsdWUuaXNPYmplY3QoKSB8fCAmd29ybGRGb3JET01PYmplY3Qo
KnZhbHVlLmdldE9iamVjdCgpKSA9PSAmY3VycmVudFdvcmxkKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDg1ZTVlOWYwZDBhNzc2YjE0
YTQwNDM2YzhjOGNhMzg3NjJkYWY3M2YuLjU3OGMxMzY3OWVkNzg5YTk4NjkzMTA1MmJjMDZhYTA0
MDA1YzcyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCkBAIC01Nyw3ICs1Nyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCi1zdGF0aWMgYm9vbCBnZXQoRXhlY1N0YXRlJiBleGVjLCBK
U1ZhbHVlIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSYgcmVz
dWx0KQorc3RhdGljIGJvb2wgZ2V0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSYg
cmVzdWx0KQogewogICAgIGlmIChvYmplY3QuaXNTdHJpbmcoKSAmJiBrZXlQYXRoRWxlbWVudCA9
PSAibGVuZ3RoIikgewogICAgICAgICByZXN1bHQgPSBqc051bWJlcihhc1N0cmluZyhvYmplY3Qp
LT5sZW5ndGgoKSk7CkBAIC02NiwxMSArNjYsMTEgQEAgc3RhdGljIGJvb2wgZ2V0KEV4ZWNTdGF0
ZSYgZXhlYywgSlNWYWx1ZSBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsIEoK
ICAgICBpZiAoIW9iamVjdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52
bSgpOwogICAgIGF1dG8qIG9iaiA9IGFzT2JqZWN0KG9iamVjdCk7CiAgICAgSWRlbnRpZmllciBp
ZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwga2V5UGF0aEVsZW1lbnQpOwog
ICAgIGlmIChvYmotPmluaGVyaXRzPEpTQXJyYXk+KHZtKSAmJiBrZXlQYXRoRWxlbWVudCA9PSAi
bGVuZ3RoIikgewotICAgICAgICByZXN1bHQgPSBvYmotPmdldCgmZXhlYywgaWRlbnRpZmllcik7
CisgICAgICAgIHJlc3VsdCA9IG9iai0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlm
aWVyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChvYmotPmluaGVyaXRz
PEpTQmxvYj4odm0pICYmIChrZXlQYXRoRWxlbWVudCA9PSAic2l6ZSIgfHwga2V5UGF0aEVsZW1l
bnQgPT0gInR5cGUiKSkgewpAQCAtOTMsMTggKzkzLDE4IEBAIHN0YXRpYyBib29sIGdldChFeGVj
U3RhdGUmIGV4ZWMsIEpTVmFsdWUgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50
LCBKCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoa2V5
UGF0aEVsZW1lbnQgPT0gImxhc3RNb2RpZmllZERhdGUiKSB7Ci0gICAgICAgICAgICByZXN1bHQg
PSBqc0RhdGUoZXhlYywganNDYXN0PEpTRmlsZSo+KG9iaiktPndyYXBwZWQoKS5sYXN0TW9kaWZp
ZWQoKSk7CisgICAgICAgICAgICByZXN1bHQgPSBqc0RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCwg
anNDYXN0PEpTRmlsZSo+KG9iaiktPndyYXBwZWQoKS5sYXN0TW9kaWZpZWQoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjcmlwdG9yOwotICAgIGlmICghb2JqLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
JmV4ZWMsIGlkZW50aWZpZXIsIGRlc2NyaXB0b3IpKQorICAgIGlmICghb2JqLT5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoJmxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXIsIGRlc2NyaXB0
b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZXNjcmlwdG9yLmVudW1lcmFi
bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVzdWx0ID0gb2JqLT5nZXQoJmV4
ZWMsIGlkZW50aWZpZXIpOworICAgIHJlc3VsdCA9IG9iai0+Z2V0KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpZGVudGlmaWVyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTE0LDE3ICsxMTQs
MTcgQEAgc3RhdGljIGJvb2wgY2FuU2V0KEpTVmFsdWUgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtl
eVBhdGhFbGVtZW50KQogICAgIHJldHVybiBvYmplY3QuaXNPYmplY3QoKTsKIH0KIAotc3RhdGlj
IGJvb2wgc2V0KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSYgb2JqZWN0LCBjb25zdCBTdHJpbmcm
IGtleVBhdGhFbGVtZW50LCBKU1ZhbHVlIGpzVmFsdWUpCitzdGF0aWMgYm9vbCBzZXQoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUmIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSBqc1ZhbHVlKQogewogICAgIGlmICghY2FuU2V0
KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVk0m
IHZtID0gZXhlYy52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsK
ICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBr
ZXlQYXRoRWxlbWVudCk7CiAgICAgYXNPYmplY3Qob2JqZWN0KS0+cHV0RGlyZWN0KHZtLCBpZGVu
dGlmaWVyLCBqc1ZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNWYWx1ZSB0b0pTKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIElEQktleSoga2V5
KQorSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0ds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBJREJLZXkqIGtleSkKIHsKICAgICBpZiAoIWtleSkg
ewogICAgICAgICAvLyBUaGlzIG11c3QgYmUgdW5kZWZpbmVkLCBub3QgbnVsbC4KQEAgLTEzMiw3
ICsxMzIsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNHbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgSURCS2V5KiBrZXkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIAotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC52bSgpOwogICAgIExvY2tlcjxKU0xvY2s+IGxvY2tlcih2bS5hcGlMb2Nr
KCkpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMTQw
LDEwICsxNDAsMTAgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIElEQktleSoga2V5KQogICAgIGNhc2UgSW5kZXhlZERCOjpLZXlU
eXBlOjpBcnJheTogewogICAgICAgICBhdXRvJiBpbkFycmF5ID0ga2V5LT5hcnJheSgpOwogICAg
ICAgICB1bnNpZ25lZCBzaXplID0gaW5BcnJheS5zaXplKCk7Ci0gICAgICAgIGF1dG8gb3V0QXJy
YXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KCZzdGF0ZSwgMCwgJmdsb2JhbE9iamVjdCwgc2l6ZSk7
CisgICAgICAgIGF1dG8gb3V0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KCZnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PEpTQzo6QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBz
aXplKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIG91
dEFycmF5LT5wdXREaXJlY3RJbmRleCgmc3RhdGUsIGksIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVj
dCwgaW5BcnJheS5hdChpKS5nZXQoKSkpOworICAgICAgICAgICAgb3V0QXJyYXktPnB1dERpcmVj
dEluZGV4KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLCB0b0pTKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgaW5BcnJheS5hdChpKS5nZXQoKSkpOwogICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gb3V0QXJyYXk7CkBAIC0xNjAsMTQgKzE2MCwxNCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSURCS2V5KiBrZXkpCiAgICAg
ICAgIGlmICghc3RydWN0dXJlKQogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAg
ICAgIHJldHVybiBKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUudm0oKSwgc3RydWN0dXJlLCBX
VEZNb3ZlKGFycmF5QnVmZmVyKSk7CisgICAgICAgIHJldHVybiBKU0FycmF5QnVmZmVyOjpjcmVh
dGUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZm
ZXIpKTsKICAgICB9CiAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKLSAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwga2V5LT5zdHJpbmcoKSk7CisgICAg
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwga2V5LT5z
dHJpbmcoKSk7CiAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkRhdGU6CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB0b0pTPElETERhdGU+KC4uLikgYXMgcGVy
OgogICAgICAgICAvLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9JbmRleGVkREIvI3JlcXVlc3QtY29u
dmVydC1hLWtleS10by1hLXZhbHVlCi0gICAgICAgIHJldHVybiB0b0pTPElETE51bGxhYmxlPElE
TERhdGU+PihzdGF0ZSwga2V5LT5kYXRlKCkpOworICAgICAgICByZXR1cm4gdG9KUzxJRExOdWxs
YWJsZTxJRExEYXRlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwga2V5LT5kYXRlKCkpOwogICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXI6CiAgICAgICAgIHJldHVybiBqc051bWJlcihr
ZXktPm51bWJlcigpKTsKICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgpAQCAtMTgz
LDE3ICsxODMsMTcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIElEQktleSoga2V5KQogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IG1h
eGltdW1EZXB0aCA9IDIwMDA7CiAKLXN0YXRpYyBSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlG
cm9tVmFsdWUoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8SlNBcnJheSo+
JiBzdGFjaykKK3N0YXRpYyBSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxK
U0FycmF5Kj4mIHN0YWNrKQogewotICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICBpZiAodmFs
dWUuaXNOdW1iZXIoKSAmJiAhc3RkOjppc25hbih2YWx1ZS50b051bWJlcigmZXhlYykpKQotICAg
ICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIodmFsdWUudG9OdW1iZXIoJmV4ZWMpKTsK
KyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgaWYgKHZhbHVlLmlz
TnVtYmVyKCkgJiYgIXN0ZDo6aXNuYW4odmFsdWUudG9OdW1iZXIoJmxleGljYWxHbG9iYWxPYmpl
Y3QpKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHZhbHVlLnRvTnVtYmVy
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlU3RyaW5nKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUo
JmV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlU3RyaW5nKGFzU3RyaW5nKHZh
bHVlKS0+dmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QpKTsKIAogICAgIGlmICh2YWx1ZS5pbmhl
cml0czxEYXRlSW5zdGFuY2U+KHZtKSkgewotICAgICAgICBhdXRvIGRhdGVWYWx1ZSA9IHZhbHVl
VG9EYXRlKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgYXV0byBkYXRlVmFsdWUgPSB2YWx1ZVRvRGF0
ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIGlmICghc3RkOjppc25hbihk
YXRlVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZShkYXRlVmFs
dWUpOwogICAgIH0KQEAgLTIxMyw4ICsyMTMsOCBAQCBzdGF0aWMgUmVmUHRyPElEQktleT4gY3Jl
YXRlSURCS2V5RnJvbVZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdAog
CiAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+IHN1YmtleXM7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
SlNWYWx1ZSBpdGVtID0gYXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKLSAgICAgICAgICAgICAg
ICBSZWZQdHI8SURCS2V5PiBzdWJrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgaXRl
bSwgc3RhY2spOworICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRl
eCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgaSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPElEQktl
eT4gc3Via2V5ID0gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIGl0
ZW0sIHN0YWNrKTsKICAgICAgICAgICAgICAgICBpZiAoIXN1YmtleSkKICAgICAgICAgICAgICAg
ICAgICAgc3Via2V5cy5hcHBlbmQoSURCS2V5OjpjcmVhdGVJbnZhbGlkKCkpOwogICAgICAgICAg
ICAgICAgIGVsc2UKQEAgLTIzNCwyOCArMjM0LDI4IEBAIHN0YXRpYyBSZWZQdHI8SURCS2V5PiBj
cmVhdGVJREJLZXlGcm9tVmFsdWUoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWY8SURCS2V5PiBjcmVhdGVJREJL
ZXlGcm9tVmFsdWUoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIFJlZjxJ
REJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBWZWN0b3I8SlNBcnJheSo+IHN0YWNrOwot
ICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCB2YWx1
ZSwgc3RhY2spOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1
ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgc3RhY2spOwogICAgIGlmIChrZXkpCiAgICAg
ICAgIHJldHVybiAqa2V5OwogICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKIH0K
IAotc3RhdGljIEpTVmFsdWUgZ2V0TnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRlJiBleGVjLCBK
U1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywg
c2l6ZV90IGluZGV4KQorc3RhdGljIEpTVmFsdWUgZ2V0TnRoVmFsdWVPbktleVBhdGgoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgcm9vdFZhbHVlLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCiB7CiAgICAgSlNW
YWx1ZSBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKICAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0
aEVsZW1lbnRzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleDsgaSsr
KSB7CiAgICAgICAgIEpTVmFsdWUgcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKLSAgICAgICAg
aWYgKCFnZXQoZXhlYywgcGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50c1tpXSwgY3VycmVudFZh
bHVlKSkKKyAgICAgICAgaWYgKCFnZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcGFyZW50VmFsdWUs
IGtleVBhdGhFbGVtZW50c1tpXSwgY3VycmVudFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KICAgICByZXR1cm4gY3VycmVudFZhbHVlOwogfQogCi1zdGF0
aWMgUmVmUHRyPElEQktleT4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRL
ZXlQYXRoKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCkKK3N0YXRpYyBSZWZQdHI8SURCS2V5PiBpbnRlcm5hbENyZWF0ZUlEQktleUZy
b21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGNvbnN0IEpTVmFsdWUmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7CiAgICAg
VmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQYXJzZUVycm9y
IGVycm9yOwpAQCAtMjYzLDEzICsyNjMsMTMgQEAgc3RhdGljIFJlZlB0cjxJREJLZXk+IGludGVy
bmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3RhdGUmIGUKICAg
ICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3I6Ok5vbmUpOwogCiAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gdmFsdWU7Ci0gICAganNWYWx1ZSA9IGdldE50aFZhbHVlT25LZXlQYXRo
KGV4ZWMsIGpzVmFsdWUsIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7
CisgICAganNWYWx1ZSA9IGdldE50aFZhbHVlT25LZXlQYXRoKGxleGljYWxHbG9iYWxPYmplY3Qs
IGpzVmFsdWUsIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CiAgICAg
aWYgKGpzVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGNyZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCBqc1ZhbHVlKTsKKyAgICByZXR1cm4g
Y3JlYXRlSURCS2V5RnJvbVZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIGpzVmFsdWUpOwogfQog
Ci1zdGF0aWMgSlNWYWx1ZSBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMs
IEpTVmFsdWUgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRz
LCBzaXplX3QgaW5kZXgpCitzdGF0aWMgSlNWYWx1ZSBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aChK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSByb290VmFsdWUsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKIHsKICAg
ICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOwogCkBAIC0yNzcsOSArMjc3LDkgQEAg
c3RhdGljIEpTVmFsdWUgZW5zdXJlTnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRlJiBleGVjLCBK
U1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4
OyBpKyspIHsKICAgICAgICAgSlNWYWx1ZSBwYXJlbnRWYWx1ZShjdXJyZW50VmFsdWUpOwogICAg
ICAgICBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50ID0ga2V5UGF0aEVsZW1lbnRzW2ldOwot
ICAgICAgICBpZiAoIWdldChleGVjLCBwYXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQsIGN1cnJl
bnRWYWx1ZSkpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdCgmZXhlYyk7Ci0gICAgICAgICAgICBpZiAoIXNldChleGVjLCBwYXJlbnRWYWx1ZSwg
a2V5UGF0aEVsZW1lbnQsIEpTVmFsdWUob2JqZWN0KSkpCisgICAgICAgIGlmICghZ2V0KGxleGlj
YWxHbG9iYWxPYmplY3QsIHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVl
KSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghc2V0KGxleGljYWxHbG9i
YWxPYmplY3QsIHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZShvYmplY3QpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGN1cnJl
bnRWYWx1ZSA9IEpTVmFsdWUob2JqZWN0KTsKICAgICAgICAgfQpAQCAtMjg4LDcgKzI4OCw3IEBA
IHN0YXRpYyBKU1ZhbHVlIGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSYgZXhlYywg
SlNWYWx1ZSByb290VmFsdWUsIGNvbnN0CiAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTsKIH0KIAot
c3RhdGljIGJvb2wgY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRlJiBleGVjLCBK
U1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywg
c2l6ZV90IGluZGV4KQorc3RhdGljIGJvb2wgY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgcm9vdFZhbHVlLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCiB7CiAgICAg
aWYgKCFyb290VmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjk5
LDEzICsyOTksMTMgQEAgc3RhdGljIGJvb2wgY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoRXhl
Y1N0YXRlJiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8PSBpbmRleDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgcGFyZW50VmFsdWUoY3Vy
cmVudFZhbHVlKTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBh
dGhFbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKCFnZXQoZXhlYywgcGFyZW50VmFsdWUsIGtleVBh
dGhFbGVtZW50LCBjdXJyZW50VmFsdWUpKQorICAgICAgICBpZiAoIWdldChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwYXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQsIGN1cnJlbnRWYWx1ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gY2FuU2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCk7CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1
ZShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIEpTVmFsdWUgdmFs
dWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCitib29sIGluamVjdElEQktleUludG9TY3Jp
cHRWYWx1ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSURCS2V5
RGF0YSYga2V5RGF0YSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAK
QEAgLTMxOSw3ICszMTksNyBAQCBib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShFeGVj
U3RhdGUmIGV4ZWMsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIEpTVgogICAgIGlmIChrZXlQ
YXRoRWxlbWVudHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU1Zh
bHVlIHBhcmVudCA9IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIHZhbHVlLCBrZXlQYXRo
RWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkgLSAxKTsKKyAgICBKU1ZhbHVlIHBhcmVu
dCA9IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBr
ZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkgLSAxKTsKICAgICBpZiAocGFy
ZW50LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzI5LDIzICsz
MjksMjMgQEAgYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YXRlJiBleGVj
LCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBKU1YKIAogICAgIC8vIERvIG5vdCBzZXQgaWYg
b2JqZWN0IGFscmVhZHkgaGFzIHRoZSBjb3JyZWN0IHByb3BlcnR5IHZhbHVlLgogICAgIEpTVmFs
dWUgZXhpc3RpbmdLZXk7Ci0gICAgaWYgKGdldChleGVjLCBwYXJlbnQsIGtleVBhdGhFbGVtZW50
cy5sYXN0KCksIGV4aXN0aW5nS2V5KSAmJiAha2V5LT5jb21wYXJlKGNyZWF0ZUlEQktleUZyb21W
YWx1ZShleGVjLCBleGlzdGluZ0tleSkpKQorICAgIGlmIChnZXQobGV4aWNhbEdsb2JhbE9iamVj
dCwgcGFyZW50LCBrZXlQYXRoRWxlbWVudHMubGFzdCgpLCBleGlzdGluZ0tleSkgJiYgIWtleS0+
Y29tcGFyZShjcmVhdGVJREJLZXlGcm9tVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgZXhpc3Rp
bmdLZXkpKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFzZXQoZXhlYywgcGFyZW50
LCBrZXlQYXRoRWxlbWVudHMubGFzdCgpLCB0b0pTKGV4ZWMsICpleGVjLmxleGljYWxHbG9iYWxP
YmplY3QoKSwga2V5LmdldCgpKSkpCisgICAgaWYgKCFzZXQobGV4aWNhbEdsb2JhbE9iamVjdCwg
cGFyZW50LCBrZXlQYXRoRWxlbWVudHMubGFzdCgpLCB0b0pTKGxleGljYWxHbG9iYWxPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIGtleS5nZXQoKSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCi1SZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlE
QktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1Zh
bHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK1JlZlB0cjxJREJLZXk+IG1h
eWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBh
dGgmIGtleVBhdGgpCiB7CiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0
cmluZz4+KGtleVBhdGgpKSB7CiAgICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8VmVjdG9y
PFN0cmluZz4+KGtleVBhdGgpOwogICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+IHJlc3Vs
dDsKICAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJyYXkuc2l6ZSgpKTsK
ICAgICAgICAgZm9yIChhdXRvJiBzdHJpbmcgOiBhcnJheSkgewotICAgICAgICAgICAgUmVmUHRy
PElEQktleT4ga2V5ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQ
YXRoKGV4ZWMsIHZhbHVlLCBzdHJpbmcpOworICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5
ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlLCBzdHJpbmcpOwogICAgICAgICAgICAgaWYgKCFrZXkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoa2V5KSk7CkBAIC0zNTMsMTAgKzM1MywxMCBAQCBSZWZQdHI8SURCS2V5
PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlJiBl
eGVjLCBjb25zdAogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShXVEZNb3ZlKHJl
c3VsdCkpOwogICAgIH0KIAotICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3Jp
cHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aCkp
OworICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBh
dGgobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aCkp
OwogfQogCi1ib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShFeGVjU3RhdGUmIGV4
ZWMsIGNvbnN0IEpTVmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
KQorYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEpTVmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiY2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlIik7CiAKQEAgLTM2OSwxMCArMzY5LDEwIEBAIGJvb2wgY2FuSW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgc2Ny
aXB0VmFsdWUsCiAgICAgaWYgKCFrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoZXhlYywg
c2NyaXB0VmFsdWUsIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEp
OworICAgIHJldHVybiBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY3JpcHRWYWx1ZSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgp
IC0gMSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBJREJWYWx1ZSYgdmFsdWUpCitzdGF0aWMgSlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9K
U1ZhbHVlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKIHsKICAgICAvLyBG
SVhNRTogSSB0aGluayBpdCdzIHBlY3VsaWFyIHRvIHVzZSB1bmRlZmluZWQgdG8gbWVhbiAibnVs
bCBkYXRhIiBhbmQgbnVsbCB0byBtZWFuICJlbXB0eSBkYXRhIi4KICAgICAvLyBCdXQgSSBhbSBu
b3QgY2hhbmdpbmcgdGhpcyBhdCB0aGUgbW9tZW50IGJlY2F1c2UgYXQgbGVhc3Qgc29tZSBjYWxs
ZXJzIGFyZSBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgaXNVbmRlZmluZWQuCkBAIC0zODYsNDYgKzM4
Niw0NiBAQCBzdGF0aWMgSlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplYwogCiAgICAgYXV0byBzZXJpYWxpemVkVmFs
dWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMoVmVjdG9yPHVp
bnQ4X3Q+KGRhdGEpKTsKIAotICAgIHN0YXRlLnZtKCkuYXBpTG9jaygpLmxvY2soKTsKKyAgICBs
ZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCkuYXBpTG9jaygpLmxvY2soKTsKICAgICBWZWN0b3I8UmVm
UHRyPE1lc3NhZ2VQb3J0Pj4gbWVzc2FnZVBvcnRzOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gc2Vy
aWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCwgbWVzc2FnZVBv
cnRzLCB2YWx1ZS5ibG9iVVJMcygpLCB2YWx1ZS5ibG9iRmlsZVBhdGhzKCksIFNlcmlhbGl6YXRp
b25FcnJvck1vZGU6Ok5vblRocm93aW5nKTsKLSAgICBzdGF0ZS52bSgpLmFwaUxvY2soKS51bmxv
Y2soKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUo
bGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCB2YWx1ZS5i
bG9iVVJMcygpLCB2YWx1ZS5ibG9iRmlsZVBhdGhzKCksIFNlcmlhbGl6YXRpb25FcnJvck1vZGU6
Ok5vblRocm93aW5nKTsKKyAgICBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCkuYXBpTG9jaygpLnVu
bG9jaygpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBkZXNlcmlhbGl6ZUlE
QlZhbHVlVG9KU1ZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkK
K0pTVmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBk
ZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKHN0YXRlLCAqc3RhdGUubGV4aWNhbEdsb2JhbE9i
amVjdCgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUo
bGV4aWNhbEdsb2JhbE9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogfQogCi1K
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKK0pTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQo
c3RhdGUpOwotICAgIHJldHVybiBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpzdGF0ZSwg
Kmdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIEFTU0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICByZXR1cm4gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZSgqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmdsb2JhbE9iamVjdCwgdmFsdWUpOwogfQogCi1SZWY8SURCS2V5PiBzY3JpcHRWYWx1
ZVRvSURCS2V5KEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgc2NyaXB0VmFsdWUpCitS
ZWY8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURCS2V5KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjb25zdCBKU1ZhbHVlJiBzY3JpcHRWYWx1ZSkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIHNjcmlwdFZhbHVlKTsKKyAgICByZXR1cm4gY3JlYXRl
SURCS2V5RnJvbVZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHNjcmlwdFZhbHVlKTsKIH0KIAot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQorSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKIHsKLSAg
ICBBU1NFUlQoc3RhdGUpOworICAgIEFTU0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBB
U1NFUlQoZ2xvYmFsT2JqZWN0KTsKIAotICAgIHJldHVybiB0b0pTKCpzdGF0ZSwgKmdsb2JhbE9i
amVjdCwga2V5RGF0YS5tYXliZUNyZWF0ZUlEQktleSgpLmdldCgpKTsKKyAgICByZXR1cm4gdG9K
UygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmdsb2JhbE9iamVjdCwga2V5RGF0YS5tYXliZUNyZWF0
ZUlEQktleSgpLmdldCgpKTsKIH0KIAotc3RhdGljIFZlY3RvcjxJREJLZXlEYXRhPiBjcmVhdGVL
ZXlQYXRoQXJyYXkoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBJREJJbmRl
eEluZm8mIGluZm8sIE9wdGlvbmFsPElEQktleVBhdGg+IG9iamVjdFN0b3JlS2V5UGF0aCwgY29u
c3QgSURCS2V5RGF0YSYgb2JqZWN0U3RvcmVLZXkpCitzdGF0aWMgVmVjdG9yPElEQktleURhdGE+
IGNyZWF0ZUtleVBhdGhBcnJheShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBPcHRpb25hbDxJREJLZXlQ
YXRoPiBvYmplY3RTdG9yZUtleVBhdGgsIGNvbnN0IElEQktleURhdGEmIG9iamVjdFN0b3JlS2V5
KQogewogICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKSAtPiBWZWN0b3I8SURCS2V5RGF0YT4gewogICAgICAgICAvLyBWYWx1ZSBkb2Vz
bid0IGNvbnRhaW4gYXV0by1nZW5lcmF0ZWQga2V5LCBzbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGFk
ZCBrZXkgaWYgaXQgaXMgcG9zc2libHkgYXV0by1nZW5lcmF0ZWQuCiAgICAgICAgIGlmIChvYmpl
Y3RTdG9yZUtleVBhdGggJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG9iamVjdFN0
b3JlS2V5UGF0aC52YWx1ZSgpKSAmJiBJREJLZXlQYXRoKHN0cmluZykgPT0gb2JqZWN0U3RvcmVL
ZXlQYXRoLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4geyBvYmplY3RTdG9yZUtleSB9Owog
Ci0gICAgICAgIGF1dG8gaWRiS2V5ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBzdHJpbmcpOworICAgICAgICBhdXRvIGlkYktleSA9
IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSwgc3RyaW5nKTsKICAgICAgICAgaWYgKCFpZGJLZXkpCiAgICAgICAg
ICAgICByZXR1cm4geyB9OwogCkBAIC00NDIsNyArNDQyLDcgQEAgc3RhdGljIFZlY3RvcjxJREJL
ZXlEYXRhPiBjcmVhdGVLZXlQYXRoQXJyYXkoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBjb24KICAgICAgICAgICAgIGlmIChvYmplY3RTdG9yZUtleVBhdGggJiYgV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxTdHJpbmc+KG9iamVjdFN0b3JlS2V5UGF0aC52YWx1ZSgpKSAmJiBJREJLZXlQ
YXRoKGVudHJ5KSA9PSBvYmplY3RTdG9yZUtleVBhdGgudmFsdWUoKSkKICAgICAgICAgICAgICAg
ICBrZXlzLmFwcGVuZChvYmplY3RTdG9yZUtleSk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGtleSA9IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgZW50cnkpOworICAgICAgICAgICAgICAgIGF1dG8ga2V5
ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlLCBlbnRyeSk7CiAgICAgICAgICAgICAgICAgaWYgKCFrZXkgfHwg
IWtleS0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAg
ICAgICAgICAgIGtleXMuYXBwZW5kKGtleS5nZXQoKSk7CkBAIC00NTQsMjUgKzQ1NCwyNSBAQCBz
dGF0aWMgVmVjdG9yPElEQktleURhdGE+IGNyZWF0ZUtleVBhdGhBcnJheShFeGVjU3RhdGUmIGV4
ZWMsIEpTVmFsdWUgdmFsdWUsIGNvbgogICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGlu
Zm8ua2V5UGF0aCgpKTsKIH0KIAotdm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoRXhlY1N0
YXRlJiBleGVjLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIEpTVmFsdWUgdmFsdWUsIEluZGV4
S2V5JiBvdXRLZXksIGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+JiBvYmplY3RTdG9yZUtleVBh
dGgsIGNvbnN0IElEQktleURhdGEmIG9iamVjdFN0b3JlS2V5KQordm9pZCBnZW5lcmF0ZUluZGV4
S2V5Rm9yVmFsdWUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IElE
QkluZGV4SW5mbyYgaW5mbywgSlNWYWx1ZSB2YWx1ZSwgSW5kZXhLZXkmIG91dEtleSwgY29uc3Qg
T3B0aW9uYWw8SURCS2V5UGF0aD4mIG9iamVjdFN0b3JlS2V5UGF0aCwgY29uc3QgSURCS2V5RGF0
YSYgb2JqZWN0U3RvcmVLZXkpCiB7Ci0gICAgYXV0byBrZXlEYXRhcyA9IGNyZWF0ZUtleVBhdGhB
cnJheShleGVjLCB2YWx1ZSwgaW5mbywgb2JqZWN0U3RvcmVLZXlQYXRoLCBvYmplY3RTdG9yZUtl
eSk7CisgICAgYXV0byBrZXlEYXRhcyA9IGNyZWF0ZUtleVBhdGhBcnJheShsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSwgaW5mbywgb2JqZWN0U3RvcmVLZXlQYXRoLCBvYmplY3RTdG9yZUtleSk7
CiAgICAgaWYgKGtleURhdGFzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgb3V0
S2V5ID0gSW5kZXhLZXkoV1RGTW92ZShrZXlEYXRhcykpOwogfQogCi1PcHRpb25hbDxKU0M6OkpT
VmFsdWU+IGRlc2VyaWFsaXplSURCVmFsdWVXaXRoS2V5SW5qZWN0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCBP
cHRpb25hbDxJREJLZXlQYXRoPiYga2V5UGF0aCkKK09wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gZGVz
ZXJpYWxpemVJREJWYWx1ZVdpdGhLZXlJbmplY3Rpb24oSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5RGF0YSYga2V5
LCBjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYga2V5UGF0aCkKIHsKLSAgICBhdXRvIGpzVmFs
dWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0
byBqc1ZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWQoKSB8fCAha2V5UGF0aCB8
fCAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgudmFsdWUoKSkgfHwgIWlz
SURCS2V5UGF0aFZhbGlkKGtleVBhdGgudmFsdWUoKSkpCiAgICAgICAgIHJldHVybiBqc1ZhbHVl
OwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihzdGF0ZS52bSgpKTsKLSAgICBpZiAoIWluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShzdGF0ZSwga2V5LCBqc1ZhbHVlLCBrZXlQYXRoLnZhbHVl
KCkpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUudm0oKSk7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
RXhjZXB0aW9uKFVua25vd25FcnJvciwgIkNhbm5vdCBpbmplY3Qga2V5IGludG8gc2NyaXB0IHZh
bHVlIl9zKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihsZXhpY2FsR2xvYmFsT2JqZWN0LnZt
KCkpOworICAgIGlmICghaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKGxleGljYWxHbG9iYWxP
YmplY3QsIGtleSwganNWYWx1ZSwga2V5UGF0aC52YWx1ZSgpKSkgeworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSk7
CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBFeGNlcHRpb24oVW5rbm93bkVycm9yLCAiQ2Fubm90IGluamVjdCBrZXkgaW50byBzY3Jp
cHQgdmFsdWUiX3MpKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRl
eCAyZmJhMzI2OTRlYzk1OTA4MzUzMTk0OWY1N2FkMjhlMDUxNDdlYjBiLi40NmRhNWFlZWRkNmEz
YjU5NGJhODk2MGY4NTJhYTcyZGUzMjFiN2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCkBAIC0zNSw3ICszNSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBK
U1ZhbHVlOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogfQogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00NywyMSArNDYsMjEgQEAgY2xhc3MgSURCVmFsdWU7CiBjbGFzcyBJbmRleEtl
eTsKIGNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OwogCi1SZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0
ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBK
U0M6OkpTVmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Ci1ib29sIGNhbkluamVjdElEQktleUlu
dG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYsIGNvbnN0
IElEQktleVBhdGgmKTsKLWJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgSURCS2V5RGF0YSYsIEpTQzo6SlNWYWx1ZSwgY29uc3QgSURCS2V5UGF0
aCYpOworUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRL
ZXlQYXRoKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6OkpTVmFsdWUmLCBjb25zdCBJ
REJLZXlQYXRoJik7Citib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpKU1ZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwor
Ym9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIGNv
bnN0IElEQktleURhdGEmLCBKU0M6OkpTVmFsdWUsIGNvbnN0IElEQktleVBhdGgmKTsKIAotdm9p
ZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJJbmRl
eEluZm8mLCBKU0M6OkpTVmFsdWUsIEluZGV4S2V5JiBvdXRLZXksIGNvbnN0IE9wdGlvbmFsPElE
QktleVBhdGg+JiwgY29uc3QgSURCS2V5RGF0YSYpOwordm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9y
VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEpTQzo6SlNW
YWx1ZSwgSW5kZXhLZXkmIG91dEtleSwgY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mLCBjb25z
dCBJREJLZXlEYXRhJik7CiAKLVJlZjxJREJLZXk+IHNjcmlwdFZhbHVlVG9JREJLZXkoSlNDOjpF
eGVjU3RhdGUmLCBjb25zdCBKU0M6OkpTVmFsdWUmKTsKK1JlZjxJREJLZXk+IHNjcmlwdFZhbHVl
VG9JREJLZXkoSlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYpOwogCi1K
U0M6OkpTVmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IElEQlZhbHVlJiwgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+Jik7Ci1K
U0M6OkpTVmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IElEQlZhbHVlJik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgSURCVmFsdWUmKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCYsIElEQktleSopOwotSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IElEQktl
eURhdGEmKTsKK0pTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBjb25zdCBJREJWYWx1ZSYsIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5n
LCBTdHJpbmc+PiYpOworSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IElEQlZhbHVlJik7CitKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBJREJWYWx1
ZSYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBJREJLZXkqKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IElEQktleURhdGEmKTsKIAotT3B0aW9uYWw8
SlNDOjpKU1ZhbHVlPiBkZXNlcmlhbGl6ZUlEQlZhbHVlV2l0aEtleUluamVjdGlvbihKU0M6OkV4
ZWNTdGF0ZSYsIGNvbnN0IElEQlZhbHVlJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IE9wdGlv
bmFsPElEQktleVBhdGg+Jik7CitPcHRpb25hbDxKU0M6OkpTVmFsdWU+IGRlc2VyaWFsaXplSURC
VmFsdWVXaXRoS2V5SW5qZWN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBjb25zdCBJREJWYWx1
ZSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYpOwogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAKaW5kZXggOWMw
NzJjNmE1NGM3NGMyNjcxYTU4YjI1NWI3MTcyNDQ2MTIwOWY4Ny4uYzM5ZGI0NGQyMzBlMTdkNjBm
MzY2YTExODY1M2U3MjAyMGNmMWI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBbmltYXRpb25FZmZlY3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQW5pbWF0aW9uRWZmZWN0Q3VzdG9tLmNwcApAQCAtMzQsMTYgKzM0LDE2IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxBbmltYXRpb25FZmZlY3Q+JiYgdmFsdWUpCitKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
QW5pbWF0aW9uRWZmZWN0PiYmIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNLZXlmcmFtZUVm
ZmVjdCgpKQogICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxLZXlmcmFtZUVmZmVjdD4oZ2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8QW5p
bWF0aW9uRWZmZWN0PihnbG9iYWxPYmplY3QsIFdURk1vdmUodmFsdWUpKTsKIH0KIAotSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEFuaW1hdGlvbkVmZmVjdCYgdmFsdWUpCitKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFuaW1h
dGlvbkVmZmVjdCYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVj
dCwgdmFsdWUpOworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCwgdmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FuaW1hdGlvblRpbWVsaW5lQ3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQW5pbWF0aW9uVGltZWxpbmVDdXN0b20uY3Bw
CmluZGV4IDMwZDc4MTQ5NDEwZWVjZTYyM2UwOTJmNDkxODZmODVlYjExNzk4ZTYuLmNlOWFmYmFi
YmZlMmNiMDUxMmI1MzYwYjdhM2VkNzMwZmJlZjM5MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQW5pbWF0aW9uVGltZWxpbmVDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQW5pbWF0aW9uVGltZWxpbmVDdXN0b20uY3BwCkBAIC0z
NSwxNiArMzUsMTYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1KU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPEFuaW1hdGlvblRpbWVsaW5lPiYmIHZhbHVlKQorSlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPEFuaW1hdGlvblRpbWVsaW5lPiYmIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+aXNEb2N1bWVudFRpbWVsaW5lKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVy
PERvY3VtZW50VGltZWxpbmU+KGdsb2JhbE9iamVjdCwgV1RGTW92ZSh2YWx1ZSkpOwogICAgIHJl
dHVybiBjcmVhdGVXcmFwcGVyPEFuaW1hdGlvblRpbWVsaW5lPihnbG9iYWxPYmplY3QsIFdURk1v
dmUodmFsdWUpKTsKIH0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFuaW1hdGlvblRpbWVsaW5lJiB2YWx1ZSkKK0pTVmFs
dWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQW5pbWF0aW9uVGltZWxpbmUmIHZhbHVlKQogewotICAgIHJl
dHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICByZXR1cm4gd3JhcChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dXRoZW50aWNhdG9yUmVzcG9uc2VDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNBdXRoZW50aWNhdG9yUmVzcG9uc2VDdXN0b20uY3BwCmluZGV4IGVjY2YyYmUxMzVkNzZj
NmY4NTllZjJiNzAxNjAwMjBjNTA2ZmNkYmIuLjFlNjJjYmE5OGQ0OThmNzMwNDJhZjI1M2NhM2Iy
ZmRjNmZhNTQ0OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXV0
aGVudGljYXRvclJlc3BvbnNlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1dGhlbnRpY2F0b3JSZXNwb25zZUN1c3RvbS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLUpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZjxBdXRoZW50aWNhdG9yUmVzcG9uc2U+JiYgcmVzcG9uc2UpCitKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxBdXRoZW50aWNhdG9yUmVzcG9uc2U+JiYgcmVzcG9uc2UpCiB7CiAg
ICAgaWYgKGlzPEF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlPihyZXNwb25zZSkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPEF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3Bv
bnNlPihnbG9iYWxPYmplY3QsIFdURk1vdmUocmVzcG9uc2UpKTsKQEAgLTQ0LDkgKzQ0LDkgQEAg
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPEEKICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxBdXRoZW50
aWNhdG9yUmVzcG9uc2U+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShyZXNwb25zZSkpOwogfQogCi1K
U1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQXV0aGVudGljYXRvclJlc3BvbnNlJiByZXNwb25zZSkKK0pTVmFsdWUgdG9KUyhKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQXV0aGVudGljYXRvclJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICByZXR1cm4g
d3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCByZXNwb25zZSk7CisgICAgcmV0dXJuIHdyYXAobGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCByZXNwb25zZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QmFzaWNDcmVkZW50aWFsQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QmFzaWNDcmVkZW50aWFsQ3VzdG9tLmNwcAppbmRleCA4ZTgzZTUxNDVjNjg0NzQwYTJhNjlmZGU5
Y2MyMWViMGQxZmU4OTNhLi4zMjJkNWMxYmQyNTRmYTkzNWZlNzdmOTMyMTg3ZDI1OTVmMDVmYzlj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jhc2ljQ3JlZGVudGlh
bEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCYXNpY0NyZWRl
bnRpYWxDdXN0b20uY3BwCkBAIC0zNCwxNiArMzQsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLUpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxCYXNpY0NyZWRl
bnRpYWw+JiYgY3JlZGVudGlhbCkKK0pTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPEJhc2ljQ3Jl
ZGVudGlhbD4mJiBjcmVkZW50aWFsKQogewogICAgIGlmIChpczxQdWJsaWNLZXlDcmVkZW50aWFs
PihjcmVkZW50aWFsKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8UHVibGljS2V5Q3Jl
ZGVudGlhbD4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGNyZWRlbnRpYWwpKTsKICAgICByZXR1cm4g
Y3JlYXRlV3JhcHBlcjxCYXNpY0NyZWRlbnRpYWw+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShjcmVk
ZW50aWFsKSk7CiB9CiAKLUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCYXNpY0NyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCitKU1Zh
bHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJhc2ljQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKLSAg
ICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBjcmVkZW50aWFsKTsKKyAgICByZXR1
cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGNyZWRlbnRpYWwpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcAppbmRleCBmZDdiZjg0YjE1ZjhiNTRlNjUyNDI0NzA4ODViNzhlYmMy
MGQzYTkwLi4wYjQzNmFlNjViNTI3NDcwN2U3YzJmMDJhNzQ1ZTBiZjAxYTk1MzVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKQEAgLTM5LDE2ICszOSwx
NiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPEJsb2I+JiYgYmxvYikKK0pTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PEJsb2I+JiYgYmxvYikKIHsKICAgICBpZiAoaXM8RmlsZT4oYmxvYikpCiAgICAgICAgIHJldHVy
biBjcmVhdGVXcmFwcGVyPEZpbGU+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShibG9iKSk7CiAgICAg
cmV0dXJuIGNyZWF0ZVdyYXBwZXI8QmxvYj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGJsb2IpKTsK
IH0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJsb2ImIGJsb2IpCitKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJsb2Im
IGJsb2IpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgYmxvYik7Cisg
ICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBibG9iKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKaW5kZXggODI1MTJhOTM1NmI4YzYxM2U1MmRhM2IyY2E0
MDFmN2QxYjVlNjYxOS4uNWE4ODA2YzM0ODc4ZWQ1ZTUwNzdjOGZkMzYyYzU1N2Y5OTZkNjA2NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCkBA
IC01OCw3ICs1OCw3IEBAIHZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmd3Jh
cHBlZCgpKSk7CiB9CiAKLUpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Q1NTUnVsZT4mJiBydWxlKQorSlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPENTU1J1bGU+JiYgcnVsZSkKIHsKICAgICBzd2l0Y2ggKHJ1bGUtPnR5
cGUoKSkgewogICAgIGNhc2UgQ1NTUnVsZTo6U1RZTEVfUlVMRToKQEAgLTg4LDkgKzg4LDkgQEAg
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxDU1NSdWwKICAgICB9CiB9CiAKLUpTVmFsdWUgdG9KUyhFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDU1NSdWxlJiBvYmpl
Y3QpCitKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENTU1J1bGUmIG9iamVjdCkKIHsKLSAgICBy
ZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOworICAgIHJldHVybiB3cmFw
KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDYWxsYmFja0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFj
a0RhdGEuY3BwCmluZGV4IGZjNTI4YmQyZmVmMGViZTI3YTI1NzBlMjUzZWUyMjFiYjg0M2U5Njgu
LjZiNzc5NDk5NjYwZjUzOWVjNTU4MzQ5N2RjYWE4NTNmN2NhNGMxZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAKQEAgLTQyLDggKzQyLDggQEAg
SlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgSlNPYmplY3QKIHsKICAgICBBU1NFUlQoY2FsbGJhY2spOwogCi0gICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMoKTsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0g
Jmdsb2JhbE9iamVjdDsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUg
ZnVuY3Rpb247CkBAIC01NiwxMiArNTYsMTIgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52
b2tlQ2FsbGJhY2soSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNPYmplY3QKICAg
ICB9CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgIGlmICht
ZXRob2QgPT0gQ2FsbGJhY2tUeXBlOjpGdW5jdGlvbikgewotICAgICAgICAgICAgcmV0dXJuZWRF
eGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YykpOworICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y3Jl
YXRlKHZtLCBjcmVhdGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVCghZnVuY3Rp
b25OYW1lLmlzTnVsbCgpKTsKLSAgICAgICAgZnVuY3Rpb24gPSBjYWxsYmFjay0+Z2V0KGV4ZWMs
IGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIGZ1bmN0aW9uID0gY2FsbGJhY2stPmdldChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBmdW5jdGlvbk5hbWUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4
Y2VwdGlvbigpOwogICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKQEAgLTcwLDcg
KzcwLDcgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNPYmplY3QKIAogICAgICAgICBjYWxsVHlwZSA9IGdl
dENhbGxEYXRhKHZtLCBmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGU6Ok5vbmUpIHsKLSAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gSlND
OjpFeGNlcHRpb246OmNyZWF0ZSh2bSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMpKTsKKyAgICAgICAg
ICAgIHJldHVybmVkRXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZSh2bSwgY3JlYXRl
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC04Niw3ICs4Niw3IEBAIEpTVmFsdWUgSlNDYWxs
YmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0CiAgICAgSlNFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoY29udGV4
dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKIAogICAgIHJldHVybmVkRXhjZXB0aW9uID0gbnVsbHB0
cjsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTRXhlY1N0YXRlOjpwcm9maWxlZENhbGwoZXhlYywg
SlNDOjpQcm9maWxpbmdSZWFzb246Ok90aGVyLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzVmFsdWUsIGFyZ3MsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IEpTRXhlY1N0YXRlOjpwcm9maWxlZENhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpQ
cm9maWxpbmdSZWFzb246Ok90aGVyLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
VmFsdWUsIGFyZ3MsIHJldHVybmVkRXhjZXB0aW9uKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcAppbmRleCA5
ZDVkYTJiNjY2ZWRiMGEwYjA1ODU1NTE5OTk0MThkZTMzMTQ3MjI5Li44MTYyNGUzN2VjOWFkMTk1
YjVmOGM0NmFiM2M2M2ZjMmJiNmVjYmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAKQEAgLTU1LDcgKzU1LDcg
QEAgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgSlMKIAogSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp+
SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKCkgPSBkZWZhdWx0OwogCi1zdGF0aWMgUmVmUHRyPEVs
ZW1lbnQ+IGNvbnN0cnVjdEN1c3RvbUVsZW1lbnRTeW5jaHJvbm91c2x5KERvY3VtZW50JiwgVk0m
LCBFeGVjU3RhdGUmLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEF0b21TdHJpbmcmIGxv
Y2FsTmFtZSk7CitzdGF0aWMgUmVmUHRyPEVsZW1lbnQ+IGNvbnN0cnVjdEN1c3RvbUVsZW1lbnRT
eW5jaHJvbm91c2x5KERvY3VtZW50JiwgVk0mLCBKU0dsb2JhbE9iamVjdCYsIEpTT2JqZWN0KiBj
b25zdHJ1Y3RvciwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lKTsKIAogUmVmPEVsZW1lbnQ+
IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6Y29uc3RydWN0RWxlbWVudFdpdGhGYWxsYmFjayhE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSkKIHsKQEAgLTk5
LDEzICs5OSwxMyBAQCBSZWZQdHI8RWxlbWVudD4gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp0
cnlUb0NvbnN0cnVjdEN1c3RvbUVsZW1lbnQoRG9jdW1lbnQmCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgQVNTRVJUKCZkb2N1bWVudCA9PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwotICAgIGF1dG8mIHN0YXRlID0gKmRvY3VtZW50LmV4ZWNTdGF0ZSgpOwotICAgIGF1dG8gZWxl
bWVudCA9IGNvbnN0cnVjdEN1c3RvbUVsZW1lbnRTeW5jaHJvbm91c2x5KGRvY3VtZW50LCB2bSwg
c3RhdGUsIG1fY29uc3RydWN0b3IuZ2V0KCksIGxvY2FsTmFtZSk7CisgICAgYXV0byYgbGV4aWNh
bEdsb2JhbE9iamVjdCA9ICpkb2N1bWVudC5leGVjU3RhdGUoKTsKKyAgICBhdXRvIGVsZW1lbnQg
PSBjb25zdHJ1Y3RDdXN0b21FbGVtZW50U3luY2hyb25vdXNseShkb2N1bWVudCwgdm0sIGxleGlj
YWxHbG9iYWxPYmplY3QsIG1fY29uc3RydWN0b3IuZ2V0KCksIGxvY2FsTmFtZSk7CiAgICAgRVhD
RVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFlbGVtZW50KTsKICAgICBpZiAo
IWVsZW1lbnQpIHsKICAgICAgICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7
CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlv
bigmc3RhdGUsIGV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmbGV4aWNhbEds
b2JhbE9iamVjdCwgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CkBAIC0xMTQsNyArMTE0LDcgQEAgUmVmUHRyPEVsZW1lbnQ+IEpTQ3VzdG9tRWxlbWVudEludGVy
ZmFjZTo6dHJ5VG9Db25zdHJ1Y3RDdXN0b21FbGVtZW50KERvY3VtZW50JgogCiAvLyBodHRwczov
L2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtY3JlYXRlLWVsZW1lbnQKIC8vIDYuIDEuIElm
IHRoZSBzeW5jaHJvbm91cyBjdXN0b20gZWxlbWVudHMgZmxhZyBpcyBzZXQKLXN0YXRpYyBSZWZQ
dHI8RWxlbWVudD4gY29uc3RydWN0Q3VzdG9tRWxlbWVudFN5bmNocm9ub3VzbHkoRG9jdW1lbnQm
IGRvY3VtZW50LCBWTSYgdm0sIEV4ZWNTdGF0ZSYgc3RhdGUsIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lKQorc3RhdGljIFJlZlB0cjxFbGVtZW50PiBj
b25zdHJ1Y3RDdXN0b21FbGVtZW50U3luY2hyb25vdXNseShEb2N1bWVudCYgZG9jdW1lbnQsIFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBjb25z
dHJ1Y3RvciwgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lKQogewogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7CkBAIC0xMjcsMzYgKzEyNywzNiBAQCBzdGF0aWMgUmVmUHRyPEVsZW1lbnQ+IGNvbnN0cnVj
dEN1c3RvbUVsZW1lbnRTeW5jaHJvbm91c2x5KERvY3VtZW50JiBkb2N1bWVudCwgVgogICAgIEpT
RXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25Db25zdHJ1Y3QoJmRvY3VtZW50LCBjb25zdHJ1
Y3RUeXBlLCBjb25zdHJ1Y3REYXRhKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwog
ICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwotICAgIEpTVmFsdWUgbmV3RWxlbWVu
dCA9IGNvbnN0cnVjdCgmc3RhdGUsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1
Y3REYXRhLCBhcmdzKTsKKyAgICBKU1ZhbHVlIG5ld0VsZW1lbnQgPSBjb25zdHJ1Y3QoJmxleGlj
YWxHbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRh
LCBhcmdzKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbigm
ZG9jdW1lbnQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAg
ICAgQVNTRVJUKCFuZXdFbGVtZW50LmlzRW1wdHkoKSk7CiAgICAgSFRNTEVsZW1lbnQqIHdyYXBw
ZWRFbGVtZW50ID0gSlNIVE1MRWxlbWVudDo6dG9XcmFwcGVkKHZtLCBuZXdFbGVtZW50KTsKICAg
ICBpZiAoIXdyYXBwZWRFbGVtZW50KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUsICJUaGUgcmVzdWx0IG9mIGNvbnN0cnVjdGluZyBhIGN1c3RvbSBlbGVtZW50IG11c3Qg
YmUgYSBIVE1MRWxlbWVudCJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRoZSByZXN1bHQgb2YgY29uc3RydWN0aW5nIGEgY3VzdG9tIGVs
ZW1lbnQgbXVzdCBiZSBhIEhUTUxFbGVtZW50Il9zKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCiAgICAgaWYgKHdyYXBwZWRFbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihzdGF0ZSwgc2NvcGUsICJBIG5ld2x5IGNvbnN0
cnVjdGVkIGN1c3RvbSBlbGVtZW50IG11c3Qgbm90IGhhdmUgYXR0cmlidXRlcyJfcyk7CisgICAg
ICAgIHRocm93Tm90U3VwcG9ydGVkRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJB
IG5ld2x5IGNvbnN0cnVjdGVkIGN1c3RvbSBlbGVtZW50IG11c3Qgbm90IGhhdmUgYXR0cmlidXRl
cyJfcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAod3JhcHBlZEVs
ZW1lbnQtPmhhc0NoaWxkTm9kZXMoKSkgewotICAgICAgICB0aHJvd05vdFN1cHBvcnRlZEVycm9y
KHN0YXRlLCBzY29wZSwgIkEgbmV3bHkgY29uc3RydWN0ZWQgY3VzdG9tIGVsZW1lbnQgbXVzdCBu
b3QgaGF2ZSBjaGlsZCBub2RlcyJfcyk7CisgICAgICAgIHRocm93Tm90U3VwcG9ydGVkRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJBIG5ld2x5IGNvbnN0cnVjdGVkIGN1c3RvbSBl
bGVtZW50IG11c3Qgbm90IGhhdmUgY2hpbGQgbm9kZXMiX3MpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgaWYgKHdyYXBwZWRFbGVtZW50LT5wYXJlbnROb2RlKCkpIHsKLSAg
ICAgICAgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihzdGF0ZSwgc2NvcGUsICJBIG5ld2x5IGNvbnN0
cnVjdGVkIGN1c3RvbSBlbGVtZW50IG11c3Qgbm90IGhhdmUgYSBwYXJlbnQgbm9kZSJfcyk7Cisg
ICAgICAgIHRocm93Tm90U3VwcG9ydGVkRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
ICJBIG5ld2x5IGNvbnN0cnVjdGVkIGN1c3RvbSBlbGVtZW50IG11c3Qgbm90IGhhdmUgYSBwYXJl
bnQgbm9kZSJfcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoJndy
YXBwZWRFbGVtZW50LT5kb2N1bWVudCgpICE9ICZkb2N1bWVudCkgewotICAgICAgICB0aHJvd05v
dFN1cHBvcnRlZEVycm9yKHN0YXRlLCBzY29wZSwgIkEgbmV3bHkgY29uc3RydWN0ZWQgY3VzdG9t
IGVsZW1lbnQgYmVsb25ncyB0byBhIHdyb25nIGRvY3VtZW50Il9zKTsKKyAgICAgICAgdGhyb3dO
b3RTdXBwb3J0ZWRFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIkEgbmV3bHkgY29u
c3RydWN0ZWQgY3VzdG9tIGVsZW1lbnQgYmVsb25ncyB0byBhIHdyb25nIGRvY3VtZW50Il9zKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEFTU0VSVCh3cmFwcGVkRWxlbWVu
dC0+bmFtZXNwYWNlVVJJKCkgPT0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSk7CiAgICAg
aWYgKHdyYXBwZWRFbGVtZW50LT5sb2NhbE5hbWUoKSAhPSBsb2NhbE5hbWUpIHsKLSAgICAgICAg
dGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihzdGF0ZSwgc2NvcGUsICJBIG5ld2x5IGNvbnN0cnVjdGVk
IGN1c3RvbSBlbGVtZW50IGhhcyBpbmNvcnJlY3QgbG9jYWwgbmFtZSJfcyk7CisgICAgICAgIHRo
cm93Tm90U3VwcG9ydGVkRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJBIG5ld2x5
IGNvbnN0cnVjdGVkIGN1c3RvbSBlbGVtZW50IGhhcyBpbmNvcnJlY3QgbG9jYWwgbmFtZSJfcyk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTg0LDcgKzE4NCw3IEBAIHZv
aWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3coZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KS5mcmFtZSgpLCBtX2lzb2xhdGVkV29ybGQpOwogICAgIGlmICghZ2xv
YmFsT2JqZWN0KQogICAgICAgICByZXR1cm47Ci0gICAgRXhlY1N0YXRlKiBzdGF0ZSA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwogCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRh
OwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IG1fY29uc3RydWN0b3ItPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0Q29uc3RydWN0RGF0YShtX2NvbnN0cnVjdG9yLmdldCgpLCBjb25zdHJ1
Y3REYXRhKTsKQEAgLTIwMCwyNyArMjAwLDI3IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJm
YWNlOjp1cGdyYWRlRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3M7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAgICAgSlNF
eGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNvbnN0cnVjdChjb250ZXh0LCBjb25zdHJ1Y3RU
eXBlLCBjb25zdHJ1Y3REYXRhKTsKLSAgICBKU1ZhbHVlIHJldHVybmVkRWxlbWVudCA9IGNvbnN0
cnVjdChzdGF0ZSwgbV9jb25zdHJ1Y3Rvci5nZXQoKSwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0
RGF0YSwgYXJncyk7CisgICAgSlNWYWx1ZSByZXR1cm5lZEVsZW1lbnQgPSBjb25zdHJ1Y3QobGV4
aWNhbEdsb2JhbE9iamVjdCwgbV9jb25zdHJ1Y3Rvci5nZXQoKSwgY29uc3RydWN0VHlwZSwgY29u
c3RydWN0RGF0YSwgYXJncyk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxs
RnVuY3Rpb24oY29udGV4dCk7CiAKICAgICBtX2NvbnN0cnVjdGlvblN0YWNrLnJlbW92ZUxhc3Qo
KTsKIAogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgZWxl
bWVudC5zZXRJc0ZhaWxlZEN1c3RvbUVsZW1lbnQoKnRoaXMpOwotICAgICAgICByZXBvcnRFeGNl
cHRpb24oc3RhdGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9u
KGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIEVsZW1lbnQqIHdyYXBwZWRFbGVtZW50ID0gSlNFbGVtZW50Ojp0b1dy
YXBwZWQodm0sIHJldHVybmVkRWxlbWVudCk7CiAgICAgaWYgKCF3cmFwcGVkRWxlbWVudCB8fCB3
cmFwcGVkRWxlbWVudCAhPSAmZWxlbWVudCkgewogICAgICAgICBlbGVtZW50LnNldElzRmFpbGVk
Q3VzdG9tRWxlbWVudCgqdGhpcyk7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwgY3Jl
YXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBUeXBlRXJyb3IsICJDdXN0b20gZWxlbWVudCBjb25zdHJ1
Y3RvciByZXR1cm5lZCBhIHdyb25nIGVsZW1lbnQiKSk7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlv
bihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjcmVhdGVET01FeGNlcHRpb24obGV4aWNhbEdsb2JhbE9i
amVjdCwgVHlwZUVycm9yLCAiQ3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IgcmV0dXJuZWQgYSB3
cm9uZyBlbGVtZW50IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGVsZW1lbnQuc2V0
SXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgqdGhpcyk7CiB9CiAKLXZvaWQgSlNDdXN0b21FbGVtZW50
SW50ZXJmYWNlOjppbnZva2VDYWxsYmFjayhFbGVtZW50JiBlbGVtZW50LCBKU09iamVjdCogY2Fs
bGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik+JiBhZGRBcmd1bWVudHMpCit2b2lkIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZTo6aW52b2tlQ2FsbGJhY2soRWxlbWVudCYgZWxlbWVudCwgSlNP
YmplY3QqIGNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoSlNHbG9iYWxPYmplY3Qq
LCBKU0RPTUdsb2JhbE9iamVjdCosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik+JiBhZGRBcmd1bWVu
dHMpCiB7CiAgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQogICAgICAgICByZXR1cm47CkBA
IC0yMzYsMjcgKzIzNiwyNyBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6aW52b2tl
Q2FsbGJhY2soRWxlbWVudCYgZWxlbWVudCwgSlNPYmplY3QqIGNhbGxiYQogICAgIGF1dG8qIGds
b2JhbE9iamVjdCA9IHRvSlNET01XaW5kb3coZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KS5m
cmFtZSgpLCBtX2lzb2xhdGVkV29ybGQpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAg
ICByZXR1cm47Ci0gICAgRXhlY1N0YXRlKiBzdGF0ZSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOworICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2Jq
ZWN0OwogCi0gICAgSlNPYmplY3QqIGpzRWxlbWVudCA9IGFzT2JqZWN0KHRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgIEpTT2JqZWN0KiBqc0VsZW1lbnQgPSBhc09iamVj
dCh0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwogCiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBjYWxsYmFjay0+
bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShjYWxsYmFjaywgY2FsbERhdGEpOwogICAgIEFT
U0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOwotICAgIGFkZEFyZ3VtZW50cyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBhcmdzKTsK
KyAgICBhZGRBcmd1bWVudHMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBhcmdz
KTsKICAgICBSRUxFQVNFX0FTU0VSVCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgSlNF
eGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoY29udGV4dCwgY2FsbFR5cGUsIGNhbGxE
YXRhKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiBleGNlcHRpb247Ci0gICAgSlNF
eGVjU3RhdGU6OmNhbGwoc3RhdGUsIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzRWxl
bWVudCwgYXJncywgZXhjZXB0aW9uKTsKKyAgICBKU0V4ZWNTdGF0ZTo6Y2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc0VsZW1lbnQsIGFyZ3Ms
IGV4Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5j
dGlvbihjb250ZXh0KTsKIAogICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgIHJlcG9ydEV4Y2Vw
dGlvbihzdGF0ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGxleGljYWxH
bG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiB9CiAKIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJm
YWNlOjpzZXRDb25uZWN0ZWRDYWxsYmFjayhKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaykKQEAgLTI4
Niw5ICsyODYsOSBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6c2V0QWRvcHRlZENh
bGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrKQogCiB2b2lkIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZTo6aW52b2tlQWRvcHRlZENhbGxiYWNrKEVsZW1lbnQmIGVsZW1lbnQsIERvY3VtZW50
JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQogewotICAgIGludm9rZUNhbGxi
YWNrKGVsZW1lbnQsIG1fYWRvcHRlZENhbGxiYWNrLmdldCgpLCBbJl0oRXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXIm
IGFyZ3MpIHsKLSAgICAgICAgYXJncy5hcHBlbmQodG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBv
bGREb2N1bWVudCkpOwotICAgICAgICBhcmdzLmFwcGVuZCh0b0pTKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIG5ld0RvY3VtZW50KSk7CisgICAgaW52b2tlQ2FsbGJhY2soZWxlbWVudCwgbV9hZG9wdGVk
Q2FsbGJhY2suZ2V0KCksIFsmXShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFy
Z3MpIHsKKyAgICAgICAgYXJncy5hcHBlbmQodG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsIG9sZERvY3VtZW50KSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKHRvSlMobGV4aWNh
bEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBuZXdEb2N1bWVudCkpOwogICAgIH0pOwogfQog
CkBAIC0zMDIsMTEgKzMwMiwxMSBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6c2V0
QXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYQogCiB2b2lkIEpT
Q3VzdG9tRWxlbWVudEludGVyZmFjZTo6aW52b2tlQXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0
IEF0b21TdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9tU3RyaW5nJiBuZXdWYWx1ZSkKIHsKLSAg
ICBpbnZva2VDYWxsYmFjayhlbGVtZW50LCBtX2F0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjay5nZXQo
KSwgWyZdKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgTWFya2VkQXJndW1l
bnRCdWZmZXImIGFyZ3MpIHsKLSAgICAgICAgYXJncy5hcHBlbmQodG9KUzxJRExET01TdHJpbmc+
KCpzdGF0ZSwgYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSkpOwotICAgICAgICBhcmdzLmFwcGVu
ZCh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgb2xkVmFsdWUpKTsKLSAg
ICAgICAgYXJncy5hcHBlbmQodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+Pigqc3RhdGUs
IG5ld1ZhbHVlKSk7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMTnVsbGFibGU8SURMRE9N
U3RyaW5nPj4oKnN0YXRlLCBhdHRyaWJ1dGVOYW1lLm5hbWVzcGFjZVVSSSgpKSk7CisgICAgaW52
b2tlQ2FsbGJhY2soZWxlbWVudCwgbV9hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2suZ2V0KCksIFsm
XShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3Qq
LCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncykgeworICAgICAgICBhcmdzLmFwcGVuZCh0b0pT
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGF0dHJpYnV0ZU5hbWUubG9jYWxO
YW1lKCkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJp
bmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgb2xkVmFsdWUpKTsKKyAgICAgICAgYXJncy5hcHBl
bmQodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
bmV3VmFsdWUpKTsKKyAgICAgICAgYXJncy5hcHBlbmQodG9KUzxJRExOdWxsYWJsZTxJRExET01T
dHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXR0cmlidXRlTmFtZS5uYW1lc3BhY2VVUkko
KSkpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oCmluZGV4IDQ2YjgxNTRkYzMzYjc5MWIxNzgwNjk4
NGE3OGRmMmMyOTM5M2IyZjAuLjM5OWYyYzIwNTJmN2ZmMzc1NGMzNzk0ZGI5YWE2MjgyNTQ0YWIy
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVu
dEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxl
bWVudEludGVyZmFjZS5oCkBAIC05NCw3ICs5NCw3IEBAIGNsYXNzIEpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZT4sIHB1
CiAKICAgICBSZWZQdHI8RWxlbWVudD4gdHJ5VG9Db25zdHJ1Y3RDdXN0b21FbGVtZW50KERvY3Vt
ZW50JiwgY29uc3QgQXRvbVN0cmluZyYpOwogCi0gICAgdm9pZCBpbnZva2VDYWxsYmFjayhFbGVt
ZW50JiwgSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1
ZmZlciYpPiYgYWRkQXJndW1lbnRzID0gW10oSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXImKSB7IH0pOworICAgIHZvaWQgaW52b2tl
Q2FsbGJhY2soRWxlbWVudCYsIEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPHZvaWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYpPiYgYWRkQXJndW1lbnRzID0gW10oSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYp
IHsgfSk7CiAKICAgICBRdWFsaWZpZWROYW1lIG1fbmFtZTsKICAgICBKU0M6OldlYWs8SlNDOjpK
U09iamVjdD4gbV9jb25zdHJ1Y3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAppbmRleCBhZWNi
NzljNzU5YWFlNjUyZjY5Y2UzZTcxY2I1Yzc1MGEwN2M0NjYwLi44MTI4MmMxOGNkY2NjZDFmODU4
YTAwOGQ1OWIxZDdlYzdhMzQ2ODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20uY3BwCkBAIC00MCw0
MiArNDAsNDIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
LXN0YXRpYyBKU09iamVjdCogZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTT2JqZWN0JiBwcm90b3R5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkKQorc3RhdGljIEpT
T2JqZWN0KiBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTT2JqZWN0JiBwcm90b3R5cGUsIGNvbnN0IElkZW50aWZpZXImIGlkKQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIEpTVmFsdWUgY2FsbGJhY2sgPSBwcm90b3R5cGUuZ2V0KCZzdGF0ZSwgaWQpOworICAgIEpT
VmFsdWUgY2FsbGJhY2sgPSBwcm90b3R5cGUuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgaWYgKGNhbGxi
YWNrLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghY2Fs
bGJhY2suaXNGdW5jdGlvbih2bSkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSwgIkEgY3VzdG9tIGVsZW1lbnQgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIl9zKTsK
KyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiQSBj
dXN0b20gZWxlbWVudCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iX3MpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIGNhbGxiYWNrLmdldE9iamVjdCgpOwog
fQogCi1zdGF0aWMgYm9vbCB2YWxpZGF0ZUN1c3RvbUVsZW1lbnROYW1lQW5kVGhyb3dJZk5lZWRl
ZChFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQorc3RhdGljIGJvb2wg
dmFsaWRhdGVDdXN0b21FbGVtZW50TmFtZUFuZFRocm93SWZOZWVkZWQoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCiB7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpKTsKICAgICBz
d2l0Y2ggKERvY3VtZW50Ojp2YWxpZGF0ZUN1c3RvbUVsZW1lbnROYW1lKG5hbWUpKSB7CiAgICAg
Y2FzZSBDdXN0b21FbGVtZW50TmFtZVZhbGlkYXRpb25TdGF0dXM6OlZhbGlkOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEN1c3RvbUVsZW1lbnROYW1lVmFsaWRhdGlvblN0YXR1czo6
Rmlyc3RDaGFyYWN0ZXJJc05vdExvd2VyY2FzZUFTQ0lJTGV0dGVyOgotICAgICAgICB0aHJvd0RP
TVN5bnRheEVycm9yKHN0YXRlLCBzY29wZSwgIkN1c3RvbSBlbGVtZW50IG5hbWUgbXVzdCBoYXZl
IGEgbG93ZXJjYXNlIEFTQ0lJIGxldHRlciBhcyBpdHMgZmlyc3QgY2hhcmFjdGVyIl9zKTsKKyAg
ICAgICAgdGhyb3dET01TeW50YXhFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIkN1
c3RvbSBlbGVtZW50IG5hbWUgbXVzdCBoYXZlIGEgbG93ZXJjYXNlIEFTQ0lJIGxldHRlciBhcyBp
dHMgZmlyc3QgY2hhcmFjdGVyIl9zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2Ug
Q3VzdG9tRWxlbWVudE5hbWVWYWxpZGF0aW9uU3RhdHVzOjpDb250YWluc1VwcGVyY2FzZUFTQ0lJ
TGV0dGVyOgotICAgICAgICB0aHJvd0RPTVN5bnRheEVycm9yKHN0YXRlLCBzY29wZSwgIkN1c3Rv
bSBlbGVtZW50IG5hbWUgY2Fubm90IGNvbnRhaW4gYW4gdXBwZXJjYXNlIEFTQ0lJIGxldHRlciJf
cyk7CisgICAgICAgIHRocm93RE9NU3ludGF4RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsICJDdXN0b20gZWxlbWVudCBuYW1lIGNhbm5vdCBjb250YWluIGFuIHVwcGVyY2FzZSBBU0NJ
SSBsZXR0ZXIiX3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBDdXN0b21FbGVt
ZW50TmFtZVZhbGlkYXRpb25TdGF0dXM6OkNvbnRhaW5zTm9IeXBoZW46Ci0gICAgICAgIHRocm93
RE9NU3ludGF4RXJyb3Ioc3RhdGUsIHNjb3BlLCAiQ3VzdG9tIGVsZW1lbnQgbmFtZSBtdXN0IGNv
bnRhaW4gYSBoeXBoZW4iX3MpOworICAgICAgICB0aHJvd0RPTVN5bnRheEVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAiQ3VzdG9tIGVsZW1lbnQgbmFtZSBtdXN0IGNvbnRhaW4gYSBo
eXBoZW4iX3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBDdXN0b21FbGVtZW50
TmFtZVZhbGlkYXRpb25TdGF0dXM6OkNvbnRhaW5zRGlzYWxsb3dlZENoYXJhY3RlcjoKLSAgICAg
ICAgdGhyb3dET01TeW50YXhFcnJvcihzdGF0ZSwgc2NvcGUsICJDdXN0b20gZWxlbWVudCBuYW1l
IGNvbnRhaW5zIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGFsbG93ZWQiX3MpOworICAgICAgICB0
aHJvd0RPTVN5bnRheEVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiQ3VzdG9tIGVs
ZW1lbnQgbmFtZSBjb250YWlucyBhIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhbGxvd2VkIl9zKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgQ3VzdG9tRWxlbWVudE5hbWVWYWxpZGF0
aW9uU3RhdHVzOjpDb25mbGljdHNXaXRoU3RhbmRhcmRFbGVtZW50TmFtZToKLSAgICAgICAgdGhy
b3dET01TeW50YXhFcnJvcihzdGF0ZSwgc2NvcGUsICJDdXN0b20gZWxlbWVudCBuYW1lIGNhbm5v
dCBiZSBzYW1lIGFzIG9uZSBvZiB0aGUgc3RhbmRhcmQgZWxlbWVudHMiX3MpOworICAgICAgICB0
aHJvd0RPTVN5bnRheEVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiQ3VzdG9tIGVs
ZW1lbnQgbmFtZSBjYW5ub3QgYmUgc2FtZSBhcyBvbmUgb2YgdGhlIHN0YW5kYXJkIGVsZW1lbnRz
Il9zKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTgzLDc0ICs4Myw3NCBAQCBzdGF0aWMgYm9vbCB2YWxpZGF0ZUN1c3RvbUVsZW1l
bnROYW1lQW5kVGhyb3dJZk5lZWRlZChFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBBdAogfQogCiAv
LyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkb20tY3VzdG9tZWxlbWVudHJlZ2lzdHJ5
LWRlZmluZQotSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKEV4ZWNTdGF0
ZSYgc3RhdGUpCitKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAyKSkKLSAgICAgICAgcmV0dXJu
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKCZzdGF0ZSkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgp
IDwgMikpCisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAKLSAgICBBdG9tU3RyaW5nIGxvY2FsTmFtZShzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1N0cmluZygmc3RhdGUpLT50b0F0b21TdHJpbmcoJnN0YXRlKSk7CisgICAgQXRvbVN0
cmluZyBsb2NhbE5hbWUoY2FsbEZyYW1lLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+dG9BdG9tU3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAotICAgIEpTVmFs
dWUgY29uc3RydWN0b3JWYWx1ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgIEpT
VmFsdWUgY29uc3RydWN0b3JWYWx1ZSA9IGNhbGxGcmFtZS51bmNoZWNrZWRBcmd1bWVudCgxKTsK
ICAgICBpZiAoIWNvbnN0cnVjdG9yVmFsdWUuaXNDb25zdHJ1Y3Rvcih2bSkpCi0gICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCAiVGhlIHNlY29uZCBhcmd1bWVudCBt
dXN0IGJlIGEgY29uc3RydWN0b3IiX3MpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
JmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJl
IGEgY29uc3RydWN0b3IiX3MpOwogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGNvbnN0cnVj
dG9yVmFsdWUuZ2V0T2JqZWN0KCk7CiAKLSAgICBpZiAoIXZhbGlkYXRlQ3VzdG9tRWxlbWVudE5h
bWVBbmRUaHJvd0lmTmVlZGVkKHN0YXRlLCBsb2NhbE5hbWUpKQorICAgIGlmICghdmFsaWRhdGVD
dXN0b21FbGVtZW50TmFtZUFuZFRocm93SWZOZWVkZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgbG9j
YWxOYW1lKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBDdXN0b21FbGVt
ZW50UmVnaXN0cnkmIHJlZ2lzdHJ5ID0gd3JhcHBlZCgpOwogCiAgICAgaWYgKHJlZ2lzdHJ5LmVs
ZW1lbnREZWZpbml0aW9uSXNSdW5uaW5nKCkpIHsKLSAgICAgICAgdGhyb3dOb3RTdXBwb3J0ZWRF
cnJvcihzdGF0ZSwgc2NvcGUsICJDYW5ub3QgZGVmaW5lIGEgY3VzdG9tIGVsZW1lbnQgd2hpbGUg
ZGVmaW5pbmcgYW5vdGhlciBjdXN0b20gZWxlbWVudCJfcyk7CisgICAgICAgIHRocm93Tm90U3Vw
cG9ydGVkRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3QgZGVmaW5lIGEg
Y3VzdG9tIGVsZW1lbnQgd2hpbGUgZGVmaW5pbmcgYW5vdGhlciBjdXN0b20gZWxlbWVudCJfcyk7
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBTZXRGb3JTY29wZTxi
b29sPiBjaGFuZ2UocmVnaXN0cnkuZWxlbWVudERlZmluaXRpb25Jc1J1bm5pbmcoKSwgdHJ1ZSk7
CiAKICAgICBpZiAocmVnaXN0cnkuZmluZEludGVyZmFjZShsb2NhbE5hbWUpKSB7Ci0gICAgICAg
IHRocm93Tm90U3VwcG9ydGVkRXJyb3Ioc3RhdGUsIHNjb3BlLCAiQ2Fubm90IGRlZmluZSBtdWx0
aXBsZSBjdXN0b20gZWxlbWVudHMgd2l0aCB0aGUgc2FtZSB0YWcgbmFtZSJfcyk7CisgICAgICAg
IHRocm93Tm90U3VwcG9ydGVkRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5u
b3QgZGVmaW5lIG11bHRpcGxlIGN1c3RvbSBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIHRhZyBuYW1l
Il9zKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgaWYgKHJl
Z2lzdHJ5LmNvbnRhaW5zQ29uc3RydWN0b3IoY29uc3RydWN0b3IpKSB7Ci0gICAgICAgIHRocm93
Tm90U3VwcG9ydGVkRXJyb3Ioc3RhdGUsIHNjb3BlLCAiQ2Fubm90IGRlZmluZSBtdWx0aXBsZSBj
dXN0b20gZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBjbGFzcyJfcyk7CisgICAgICAgIHRocm93Tm90
U3VwcG9ydGVkRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3QgZGVmaW5l
IG11bHRpcGxlIGN1c3RvbSBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIGNsYXNzIl9zKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSBwcm90b3R5cGVW
YWx1ZSA9IGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5
cGUpOworICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBjb25zdHJ1Y3Rvci0+Z2V0KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAgICAgaWYgKCFwcm90b3R5cGVWYWx1
ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSwgIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlIG11c3QgYmUgYW4gb2Jq
ZWN0Il9zKTsKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlIG11c3Qg
YmUgYW4gb2JqZWN0Il9zKTsKICAgICBKU09iamVjdCYgcHJvdG90eXBlT2JqZWN0ID0gKmFzT2Jq
ZWN0KHByb3RvdHlwZVZhbHVlKTsKIAogICAgIFF1YWxpZmllZE5hbWUgbmFtZShudWxsQXRvbSgp
LCBsb2NhbE5hbWUsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpOwogICAgIGF1dG8gZWxl
bWVudEludGVyZmFjZSA9IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6Y3JlYXRlKG5hbWUsIGNv
bnN0cnVjdG9yLCBnbG9iYWxPYmplY3QoKSk7CiAKLSAgICBhdXRvKiBjb25uZWN0ZWRDYWxsYmFj
ayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSk7CisgICAgYXV0byog
Y29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2sobGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29u
bmVjdGVkQ2FsbGJhY2siKSk7CiAgICAgaWYgKGNvbm5lY3RlZENhbGxiYWNrKQogICAgICAgICBl
bGVtZW50SW50ZXJmYWNlLT5zZXRDb25uZWN0ZWRDYWxsYmFjayhjb25uZWN0ZWRDYWxsYmFjayk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAotICAgIGF1dG8q
IGRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBw
cm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkaXNjb25uZWN0ZWRD
YWxsYmFjayIpKTsKKyAgICBhdXRvKiBkaXNjb25uZWN0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVs
ZW1lbnRDYWxsYmFjayhsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm90b3R5cGVPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJkaXNjb25uZWN0ZWRDYWxsYmFjayIpKTsKICAgICBpZiAo
ZGlzY29ubmVjdGVkQ2FsbGJhY2spCiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldERpc2Nv
bm5lY3RlZENhbGxiYWNrKGRpc2Nvbm5lY3RlZENhbGxiYWNrKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCi0gICAgYXV0byogYWRvcHRlZENhbGxiYWNrID0g
Z2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJhZG9wdGVkQ2FsbGJhY2siKSk7CisgICAgYXV0byogYWRvcHRl
ZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFkb3B0ZWRDYWxs
YmFjayIpKTsKICAgICBpZiAoYWRvcHRlZENhbGxiYWNrKQogICAgICAgICBlbGVtZW50SW50ZXJm
YWNlLT5zZXRBZG9wdGVkQ2FsbGJhY2soYWRvcHRlZENhbGxiYWNrKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogCi0gICAgYXV0byogYXR0cmlidXRlQ2hhbmdl
ZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2si
KSk7CisgICAgYXV0byogYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVu
dENhbGxiYWNrKGxleGljYWxHbG9iYWxPYmplY3QsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgIGlmIChhdHRyaWJ1dGVDaGFu
Z2VkQ2FsbGJhY2spIHsKLSAgICAgICAgYXV0byBvYnNlcnZlZEF0dHJpYnV0ZXNWYWx1ZSA9IGNv
bnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAib2JzZXJ2
ZWRBdHRyaWJ1dGVzIikpOworICAgICAgICBhdXRvIG9ic2VydmVkQXR0cmlidXRlc1ZhbHVlID0g
Y29uc3RydWN0b3ItPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIm9ic2VydmVkQXR0cmlidXRlcyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKCFvYnNlcnZlZEF0dHJpYnV0ZXNW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBhdXRvIG9ic2VydmVkQXR0cmlidXRl
cyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oc3RhdGUsIG9ic2VydmVkQXR0
cmlidXRlc1ZhbHVlKTsKKyAgICAgICAgICAgIGF1dG8gb2JzZXJ2ZWRBdHRyaWJ1dGVzID0gY29u
dmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBvYnNl
cnZlZEF0dHJpYnV0ZXNWYWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0QXR0cmli
dXRlQ2hhbmdlZENhbGxiYWNrKGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaywgb2JzZXJ2ZWRBdHRy
aWJ1dGVzKTsKICAgICAgICAgfQpAQCAtMTc1LDE3ICsxNzUsMTcgQEAgSlNWYWx1ZSBKU0N1c3Rv
bUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKEV4ZWNTdGF0ZSYgc3RhdGUpCiB9CiAKIC8vIGh0dHBz
Oi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1jdXN0b21lbGVtZW50cmVnaXN0cnktd2hlbmRl
ZmluZWQKLXN0YXRpYyBKU1ZhbHVlIHdoZW5EZWZpbmVkUHJvbWlzZShFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBDdXN0b21FbGVtZW50UmVnaXN0cnkm
IHJlZ2lzdHJ5LCBKU1Byb21pc2VEZWZlcnJlZCYgcHJvbWlzZURlZmVycmVkKQorc3RhdGljIEpT
VmFsdWUgd2hlbkRlZmluZWRQcm9taXNlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JiByZWdpc3RyeSwgSlNQcm9taXNlRGVmZXJyZWQmIHBy
b21pc2VEZWZlcnJlZCkKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShz
dGF0ZS52bSgpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2Fs
R2xvYmFsT2JqZWN0LnZtKCkpOwogCi0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CisgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QpKTsKIAotICAgIEF0b21TdHJpbmcgbG9jYWxO
YW1lKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnRvQXRvbVN0
cmluZygmc3RhdGUpKTsKKyAgICBBdG9tU3RyaW5nIGxvY2FsTmFtZShjYWxsRnJhbWUudW5jaGVj
a2VkQXJndW1lbnQoMCkudG9TdHJpbmcoJmxleGljYWxHbG9iYWxPYmplY3QpLT50b0F0b21TdHJp
bmcoJmxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU1ZhbHVlKCkpOwogCi0gICAgaWYgKCF2YWxpZGF0ZUN1c3RvbUVsZW1lbnROYW1lQW5kVGhy
b3dJZk5lZWRlZChzdGF0ZSwgbG9jYWxOYW1lKSkgeworICAgIGlmICghdmFsaWRhdGVDdXN0b21F
bGVtZW50TmFtZUFuZFRocm93SWZOZWVkZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgbG9jYWxOYW1l
KSkgewogICAgICAgICBFWENFUFRJT05fQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQpAQCAtMjAyLDE3ICsyMDIsMTcgQEAgc3Rh
dGljIEpTVmFsdWUgd2hlbkRlZmluZWRQcm9taXNlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmoKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+
cHJvbWlzZSgpOwogfQogCi1KU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp3aGVuRGVm
aW5lZChFeGVjU3RhdGUmIHN0YXRlKQorSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6
d2hlbkRlZmluZWQoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSYgY2FsbEZyYW1lKQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHN0
YXRlLnZtKCkpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGxleGljYWxH
bG9iYWxPYmplY3Qudm0oKSk7CiAKICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KCkpOwotICAgIGF1
dG8gcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZSgmc3RhdGUs
IGdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURl
ZmVycmVkOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHBy
b21pc2VEZWZlcnJlZCk7Ci0gICAgSlNWYWx1ZSBwcm9taXNlID0gd2hlbkRlZmluZWRQcm9taXNl
KHN0YXRlLCAqZ2xvYmFsT2JqZWN0KCksIHdyYXBwZWQoKSwgKnByb21pc2VEZWZlcnJlZCk7Cisg
ICAgSlNWYWx1ZSBwcm9taXNlID0gd2hlbkRlZmluZWRQcm9taXNlKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgKmdsb2JhbE9iamVjdCgpLCB3cmFwcGVkKCksICpwcm9taXNlRGVmZXJy
ZWQpOwogCiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICBy
ZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0YXRlLCAqZ2xvYmFsT2JqZWN0KCksICpw
cm9taXNlRGVmZXJyZWQpOworICAgICAgICByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55
KGxleGljYWxHbG9iYWxPYmplY3QsICpnbG9iYWxPYmplY3QoKSwgKnByb21pc2VEZWZlcnJlZCk7
CiAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBwcm9t
aXNlRGVmZXJyZWQtPnByb21pc2UoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCmluZGV4IGY5NjM0ODViNWEzYzQxZDEy
NzE1ODY1YjFiMTg4OWYyNTg0OGM5MWIuLjE3MGVlYTY1MmIxOTdjNzQyN2Y3OTU0ZGRiZWNhNTVi
ZThjZDE5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9t
RXZlbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9t
RXZlbnRDdXN0b20uY3BwCkBAIC0zNCw5ICszNCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSlNDOjpKU1ZhbHVlIEpTQ3VzdG9tRXZlbnQ6OmRldGFpbChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUpIGNvbnN0CitKU0M6OkpTVmFsdWUgSlNDdXN0b21FdmVudDo6ZGV0YWlsKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhY2hl
ZFByb3BlcnR5VmFsdWUoc3RhdGUsICp0aGlzLCB3cmFwcGVkKCkuY2FjaGVkRGV0YWlsKCksIFt0
aGlzXSB7CisgICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUobGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXMsIHdyYXBwZWQoKS5jYWNoZWREZXRhaWwoKSwgW3RoaXNdIHsKICAgICAgICAgSlND
OjpKU1ZhbHVlIGRldGFpbCA9IHdyYXBwZWQoKS5kZXRhaWwoKTsKICAgICAgICAgcmV0dXJuIGRl
dGFpbCA/IGRldGFpbCA6IEpTQzo6anNOdWxsKCk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKaW5kZXgg
MmVmNDdiZjU2ZWY4NjI1NmM4NjE4NTgzNzM0ZmFiNDJhYzdmYWQyNi4uNDQ0MDAzZGEwNDdjZTFl
NDJhMzEyNjU1NDk4MDRmNjJkOWZmZTk5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcApAQCAtNDMsNyArNDMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLUV4Y2VwdGlv
bk9yPFJlZjxKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcj4+IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
OjpjcmVhdGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK0V4Y2VwdGlvbk9yPFJl
ZjxKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcj4+IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpjcmVh
dGUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUeXBlRXJyb3IgfTsKQEAgLTUyLDggKzUyLDggQEAgRXhjZXB0aW9uT3I8UmVmPEpT
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyPj4gSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShF
eGVjU3QKICAgICBpZiAoIXJlc29sdmVyT2JqZWN0KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgVHlwZU1pc21hdGNoRXJyb3IgfTsKIAotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIodm0sIHJlc29sdmVy
T2JqZWN0LCBhc0pTRE9NV2luZG93KHZtLnZtRW50cnlHbG9iYWxPYmplY3QoJnN0YXRlKSkpKTsK
KyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIodm0sIHJlc29sdmVyT2JqZWN0LCBhc0pT
RE9NV2luZG93KHZtLnZtRW50cnlHbG9iYWxPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QpKSkp
OwogfQogCiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIo
Vk0mIHZtLCBKU09iamVjdCogY3VzdG9tUmVzb2x2ZXIsIEpTRE9NV2luZG93KiBnbG9iYWxPYmpl
Y3QpCkBAIC03MCwxMCArNzAsMTAgQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjps
b29rdXBOYW1lc3BhY2VVUkkoY29uc3QgU3RyaW5nJiBwcmVmaXgpCiAKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb21tb25WTSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOworICAg
IFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIAotICAgIEpTVmFs
dWUgZnVuY3Rpb24gPSBtX2N1c3RvbVJlc29sdmVyLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImxvb2t1cE5hbWVzcGFjZVVSSSIpKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gbV9jdXN0b21SZXNvbHZlci0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJsb29rdXBOYW1lc3BhY2VVUkkiKSk7CiAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24s
IGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKQEAgLTg5
LDE4ICs4OSwxOCBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVz
cGFjZVVSSShjb25zdCBTdHJpbmcmIHByZWZpeCkKICAgICBSZWY8SlNDdXN0b21YUGF0aE5TUmVz
b2x2ZXI+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKLSAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBwcmVmaXgpKTsK
KyAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cmVmaXgpKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIE5ha2Vk
UHRyPEpTQzo6RXhjZXB0aW9uPiBleGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXR2YWwgPSBKU0V4
ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2N1c3Rv
bVJlc29sdmVyLmdldCgpLCBhcmdzLCBleGNlcHRpb24pOworICAgIEpTVmFsdWUgcmV0dmFsID0g
SlNFeGVjU3RhdGU6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwgbV9jdXN0b21SZXNvbHZlci5nZXQoKSwgYXJncywgZXhjZXB0aW9uKTsKIAog
ICAgIFN0cmluZyByZXN1bHQ7CiAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmVwb3J0RXhj
ZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogICAgIGVsc2UgewogICAgICAgICBpZiAoIXJldHZh
bC5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmVzdWx0ID0gcmV0dmFsLnRvV1RG
U3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0ID0gcmV0dmFsLnRvV1RGU3RyaW5nKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaApp
bmRleCA3M2Y1ZjVhNGI1MThlMjk1MzQ5YjQwNGIxMGM0Y2MxYWJjNjIzY2FlLi43ZWU0NjA2Njc5
Zjg1MDY1MTViODQ1MTlhNWM0MGZhYWJhYTY0NzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgKQEAgLTM4LDcgKzM4LDcg
QEAgY2xhc3MgSlNET01XaW5kb3c7CiAKIGNsYXNzIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyIGZp
bmFsIDogcHVibGljIFhQYXRoTlNSZXNvbHZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEV4Y2Vw
dGlvbk9yPFJlZjxKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcj4+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxKU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlcj4+IGNyZWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVl
KTsKICAgICB2aXJ0dWFsIH5KU0N1c3RvbVhQYXRoTlNSZXNvbHZlcigpOwogCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01BYnN0cmFjdE9wZXJh
dGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQWJzdHJhY3RPcGVyYXRp
b25zLmgKaW5kZXggOWNlNmU3YTgwYjIzMTZmMzYwN2M1ODYwZjVmNTYzOGQwM2M5ZTdmNi4uMjlh
MTA0NTEzMjgyMDIxZGUwNzhmMDQ4MWMyNWQ0ODkwM2YzZThjZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oCkBAIC00MCw3
ICs0MCw3IEBAIGVudW0gY2xhc3MgT3ZlcnJpZGVCdWlsdGlucyB7CiAvLyBBbiBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgJ25hbWVkIHByb3BlcnR5IHZpc2liaWxpdHkgYWxnb3JpdGhtJwogLy8gaHR0
cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLW5hbWVkLXByb3BlcnR5LXZpc2liaWxp
dHkKIHRlbXBsYXRlPE92ZXJyaWRlQnVpbHRpbnMgb3ZlcnJpZGVCdWlsdGlucywgY2xhc3MgSlND
bGFzcz4KLXN0YXRpYyBib29sIGlzVmlzaWJsZU5hbWVkUHJvcGVydHkoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0NsYXNzJiB0aGlzT2JqZWN0LCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCitzdGF0aWMgYm9vbCBpc1Zpc2libGVOYW1lZFByb3BlcnR5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQ2xhc3MmIHRoaXNPYmplY3QsIEpTQzo6UHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICAvLyBGSVhNRTogSXQgc2VlbXMgdW5mb3J0dW5h
dGUgdGhhdCBoYXZlIHRvIGRvIHR3byBsb29rdXBzIGZvciB0aGUgcHJvcGVydHkgbmFtZSwKICAg
ICAvLyBvbmUgZm9yIGlzU3VwcG9ydGVkUHJvcGVydHlOYW1lIGFuZCBvbmUgYnkgdGhlIHVzZXIg
b2YgdGhpcyBhbGdvcml0aG0gdG8gYWNjZXNzCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBib29s
IGlzVmlzaWJsZU5hbWVkUHJvcGVydHkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0NsYXNzJiB0
aGlzT2JqZWN0LCBKCiAgICAgCiAgICAgLy8gMi4gSWYgTyBoYXMgYW4gb3duIHByb3BlcnR5IG5h
bWVkIFAsIHRoZW4gcmV0dXJuIGZhbHNlLgogICAgIEpTQzo6UHJvcGVydHlTbG90IHNsb3QgeyAm
dGhpc09iamVjdCwgSlNDOjpQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1
aXJ5IH07Ci0gICAgaWYgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCgmdGhpc09i
amVjdCwgJnN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgIGlmIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoJnRoaXNPYmplY3QsICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8g
My4gSWYgTyBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSB0aGF0IGhhcyB0aGUgW092ZXJyaWRlQnVp
bHRpbnNdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdHJ1ZS4KQEAgLTcyLDggKzcy
LDggQEAgc3RhdGljIGJvb2wgaXNWaXNpYmxlTmFtZWRQcm9wZXJ0eShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQ2xhc3MmIHRoaXNPYmplY3QsIEoKICAgICAvLyAgICAxLiBJZiBwcm90b3R5cGUg
aXMgbm90IGEgbmFtZWQgcHJvcGVydGllcyBvYmplY3QsIGFuZCBwcm90b3R5cGUgaGFzIGFuIG93
biBwcm9wZXJ0eSBuYW1lZCBQLCB0aGVuIHJldHVybiBmYWxzZS4KICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGNoZWNraW5nIGZvciAnbmFtZWQgcHJvcGVydGllcyBvYmplY3QnLgogICAgIC8vICAg
IDIuIFNldCBwcm90b3R5cGUgdG8gYmUgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcm5hbCBbW1Byb3Rv
dHlwZV1dIHByb3BlcnR5IG9mIHByb3RvdHlwZS4KLSAgICBhdXRvIHByb3RvdHlwZSA9IHRoaXNP
YmplY3QuZ2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLnZtKCkpOwotICAgIGlmIChwcm90b3R5cGUu
aXNPYmplY3QoKSAmJiBKU0M6OmFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdCgm
c3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgYXV0byBwcm90b3R5cGUgPSB0aGlzT2Jq
ZWN0LmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CisgICAgaWYgKHByb3RvdHlwZS5pc09iamVjdCgpICYmIEpTQzo6YXNPYmplY3QocHJvdG90eXBl
KS0+Z2V0UHJvcGVydHlTbG90KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyA2LiBSZXR1cm4gdHJ1ZS4KQEAg
LTg2LDcgKzg2LDcgQEAgc3RhdGljIGJvb2wgaXNWaXNpYmxlTmFtZWRQcm9wZXJ0eShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQ2xhc3MmIHRoaXNPYmplY3QsIEoKIC8vIHRoZSBwcm9wZXJ0eSBu
YW1lIHR3aWNlOyBvbmNlIGZvciAnbmFtZWQgcHJvcGVydHkgdmlzaWJpbGl0eSBhbGdvcml0aG0n
IGNoZWNrLCBhbmQgdGhlbgogLy8gYWdhaW4gd2hlbiB0aGUgdmFsdWUgaXMgbmVlZGVkLgogdGVt
cGxhdGU8T3ZlcnJpZGVCdWlsdGlucyBvdmVycmlkZUJ1aWx0aW5zLCBjbGFzcyBKU0NsYXNzLCBj
bGFzcyBGdW5jdG9yPgotc3RhdGljIGF1dG8gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHkoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0NsYXNzJiB0aGlzT2JqZWN0LCBKU0M6OlByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEZ1bmN0b3ImJiBpdGVtQWNjZXNzb3IpIC0+IGRlY2x0eXBlKGl0ZW1B
Y2Nlc3Nvcih0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKQorc3RhdGljIGF1dG8gYWNjZXNzVmlz
aWJsZU5hbWVkUHJvcGVydHkoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDbGFzcyYgdGhpc09iamVjdCwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBG
dW5jdG9yJiYgaXRlbUFjY2Vzc29yKSAtPiBkZWNsdHlwZShpdGVtQWNjZXNzb3IodGhpc09iamVj
dCwgcHJvcGVydHlOYW1lKSkKIHsKICAgICAvLyBOT1RFOiBXaGlsZSBpdCBpcyBub3Qgc3BlY2lm
aWVkLCBhIFN5bWJvbCBjYW4gbmV2ZXIgYmUgYSAnc3VwcG9ydGVkIHByb3BlcnR5CiAgICAgLy8g
bmFtZScgc28gd2UgY2hlY2sgdGhhdCBmaXJzdC4KQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMg
YXV0byBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Q2xhc3MmIHRoaXNPYmplYwogCiAgICAgLy8gMi4gSWYgTyBoYXMgYW4gb3duIHByb3BlcnR5IG5h
bWVkIFAsIHRoZW4gcmV0dXJuIGZhbHNlLgogICAgIEpTQzo6UHJvcGVydHlTbG90IHNsb3QgeyAm
dGhpc09iamVjdCwgSlNDOjpQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1
aXJ5IH07Ci0gICAgaWYgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCgmdGhpc09i
amVjdCwgJnN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgIGlmIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoJnRoaXNPYmplY3QsICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
Ly8gMy4gSWYgTyBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSB0aGF0IGhhcyB0aGUgW092ZXJyaWRl
QnVpbHRpbnNdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdHJ1ZS4KQEAgLTExMiw4
ICsxMTIsOCBAQCBzdGF0aWMgYXV0byBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQ2xhc3MmIHRoaXNPYmplYwogICAgIC8vICAgIDEuIElmIHByb3Rv
dHlwZSBpcyBub3QgYSBuYW1lZCBwcm9wZXJ0aWVzIG9iamVjdCwgYW5kIHByb3RvdHlwZSBoYXMg
YW4gb3duIHByb3BlcnR5IG5hbWVkIFAsIHRoZW4gcmV0dXJuIGZhbHNlLgogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgY2hlY2tpbmcgZm9yICduYW1lZCBwcm9wZXJ0aWVzIG9iamVjdCcuCiAgICAg
Ly8gICAgMi4gU2V0IHByb3RvdHlwZSB0byBiZSB0aGUgdmFsdWUgb2YgdGhlIGludGVybmFsIFtb
UHJvdG90eXBlXV0gcHJvcGVydHkgb2YgcHJvdG90eXBlLgotICAgIGF1dG8gcHJvdG90eXBlID0g
dGhpc09iamVjdC5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUudm0oKSk7Ci0gICAgaWYgKHByb3Rv
dHlwZS5pc09iamVjdCgpICYmIEpTQzo6YXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlT
bG90KCZzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBhdXRvIHByb3RvdHlwZSA9IHRo
aXNPYmplY3QuZ2V0UHJvdG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKKyAgICBpZiAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgSlNDOjphc09iamVjdChwcm90
b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QoJmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyA2LiBSZXR1
cm4gdHJ1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQXR0
cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUF0dHJpYnV0ZS5oCmlu
ZGV4IGIyYWQ5NjY3MjhkMGJjOWJjNjJiY2ZmODJlM2Y2MzkwYjVkOWUyMTAuLjRmOTA3Y2QyMjdj
MWJkMTllNDQ2NzdhNzUzNGFiNGY3ZjY0NzdmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQXR0cmlidXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01BdHRyaWJ1dGUuaApAQCAtMzEsNzkgKzMxLDc5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+CiBjbGFzcyBJRExBdHRyaWJ1dGUgewog
cHVibGljOgotICAgIHVzaW5nIFNldHRlciA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNz
JiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93U2NvcGUmKTsKLSAgICB1c2luZyBTdGF0aWNTZXR0
ZXIgPSBib29sKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93U2NvcGUm
KTsKLSAgICB1c2luZyBHZXR0ZXIgPSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBKU0Ns
YXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgU3RhdGljR2V0dGVyID0gSlNDOjpK
U1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgU2V0
dGVyID0gYm9vbChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgU3RhdGljU2V0dGVyID0gYm9vbChKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2lu
ZyBHZXR0ZXIgPSBKU0M6OkpTVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQ2xhc3MmLCBK
U0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBTdGF0aWNHZXR0ZXIgPSBKU0M6OkpTVmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYpOwogICAgIAotICAgIHN0YXRp
YyBKU0NsYXNzKiBjYXN0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Cisg
ICAgc3RhdGljIEpTQ2xhc3MqIGNhc3QoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwogCiAgICAgdGVtcGxhdGU8U2V0dGVyIHNldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0g
ICAgc3RhdGljIGJvb2wgc2V0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBj
aGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHN0YXRpYyBib29sIHNldChKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpCiAgICAgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHN0YXRlLnZtKCkpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpKTsKIAotICAgICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0gY2FzdChzdGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgYXV0byogdGhpc09i
amVjdCA9IGNhc3QobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlKTsKICAgICAgICAgaWYg
KFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cg
PT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRl
TmFtZSkgOiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRy
aWJ1dGVOYW1lKSA6IGZhbHNlOwogCi0gICAgICAgIHJldHVybiBzZXR0ZXIoc3RhdGUsICp0aGlz
T2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsK
KyAgICAgICAgcmV0dXJuIHNldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwg
SlNDOjpKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7CiAgICAgfQog
ICAgIAogICAgIHRlbXBsYXRlPFN0YXRpY1NldHRlciBzZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAg
IHN0YXRpYyBib29sIHNldFN0YXRpYyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKikK
KyAgICBzdGF0aWMgYm9vbCBzZXRTdGF0aWMoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIGNvbnN0IGNoYXIqKQogICAgIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gc2V0dGVyKHN0YXRlLCBKU0M6OkpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHNldHRlcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0
aHJvd1Njb3BlKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8R2V0dGVyIGdldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgZ2V0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpCisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgZ2V0KEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQogICAgIHsKLSAgICAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKyAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CiAKICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQpIHsKLSAgICAgICAgICAgIEFTU0VSVChjYXN0KHN0YXRlLCB0aGlz
VmFsdWUpKTsKKyAgICAgICAgICAgIEFTU0VSVChjYXN0KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSkpOwogICAgICAgICAgICAgYXV0byogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpT
Q2xhc3MqPihKU0M6OkpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKLSAgICAgICAgICAgIHJl
dHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJv
d1Njb3BlKSk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoZ2V0dGVy
KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdChzdGF0ZSwgdGhpc1ZhbHVlKTsK
KyAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3QobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgewogICAgICAgICAg
ICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwog
ICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpS
ZWplY3RQcm9taXNlKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aEdl
dHRlclR5cGVFcnJvcihzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0
ZU5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwg
YXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUo
SlNDOjpqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBKU0M6OkpT
VmFsdWU6OmVuY29kZShnZXR0ZXIoc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7Cisg
ICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIobGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxh
dGU8U3RhdGljR2V0dGVyIGdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhy
b3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6RW5j
b2RlZEpTVmFsdWUgZ2V0U3RhdGljKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgY29uc3QgY2hhciopCisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgZ2V0
U3RhdGljKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIGNvbnN0IGNoYXIqKQogICAgIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKyAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoZ2V0dGVy
KHN0YXRlLCB0aHJvd1Njb3BlKSk7CisgICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29k
ZShnZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSkpOwogICAgIH0KIH07CiAK
IHN0cnVjdCBBdHRyaWJ1dGVTZXR0ZXIgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgc3RhdGljIGF1dG8gY2FsbChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IEZ1bmN0b3ImJiBmdW5jdG9yKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTx2b2lk
LCBkZWNsdHlwZShmdW5jdG9yKCkpPjo6dmFsdWU+CisgICAgc3RhdGljIGF1dG8gY2FsbChKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPHZvaWQsIGRlY2x0eXBlKGZ1bmN0b3IoKSk+
Ojp2YWx1ZT4KICAgICB7CiAgICAgICAgIGZ1bmN0b3IoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHN0YXRpYyBhdXRvIGNhbGwoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEZ1bmN0b3ImJiBmdW5jdG9yKSAt
PiBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8dm9pZCwgZGVjbHR5cGUoZnVuY3Rvcigp
KT46OnZhbHVlPgorICAgIHN0YXRpYyBhdXRvIGNhbGwoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBGdW5jdG9yJiYg
ZnVuY3RvcikgLT4gc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPHZvaWQsIGRlY2x0eXBl
KGZ1bmN0b3IoKSk+Ojp2YWx1ZT4KICAgICB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuY3Rv
cigpOwogICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCByZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwog
ICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZ1NlY3VyaXR5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZ1NlY3VyaXR5LmNwcAppbmRleCAwZjgwMmYxNzc5MmUxNzVkNGRlZGZlNTQ4MzZlMDM3NTI3
OWNmOWE4Li44OGFjYmQ0M2UwNzk5OTE1NTRlNTI1YjM1YTIwYjI2NjYwZjNkNjM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuY3Bw
CkBAIC00Miw5ICs0Miw5IEBAIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSog
ZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9t
V2luZG93KCktPnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgY2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVudCog
dGFyZ2V0RG9jdW1lbnQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikK
K3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEb2N1bWVudCogdGFyZ2V0RG9jdW1lbnQsIFNlY3VyaXR5
UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICghdGFyZ2V0RG9jdW1l
bnQpCkBAIC01MywxNCArNTMsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vzc0RvY3Vt
ZW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERvY3UKICAgICBpZiAo
YXV0byogdGVtcGxhdGVIb3N0ID0gdGFyZ2V0RG9jdW1lbnQtPnRlbXBsYXRlRG9jdW1lbnRIb3N0
KCkpCiAgICAgICAgIHRhcmdldERvY3VtZW50ID0gdGVtcGxhdGVIb3N0OwogCi0gICAgRE9NV2lu
ZG93JiBhY3RpdmUgPSBhY3RpdmVET01XaW5kb3coKnN0YXRlKTsKKyAgICBET01XaW5kb3cmIGFj
dGl2ZSA9IGFjdGl2ZURPTVdpbmRvdygqbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKICAgICBpZiAo
YWN0aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2FuQWNjZXNzKHRhcmdldERvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBzd2l0
Y2ggKHJlcG9ydGluZ09wdGlvbikgewogICAgIGNhc2UgVGhyb3dTZWN1cml0eUVycm9yOgotICAg
ICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29wZSwgdGFyZ2V0RG9jdW1lbnQtPmRv
bVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUsIEluY2x1ZGVU
YXJnZXRPcmlnaW46Ok5vKSk7CisgICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21h
aW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlLCBJbmNsdWRlVGFyZ2V0T3JpZ2luOjpObykpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6CiAgICAgICAgIHByaW50
RXJyb3JNZXNzYWdlRm9yRnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3Vt
ZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlLCBJ
bmNsdWRlVGFyZ2V0T3JpZ2luOjpZZXMpKTsKQEAgLTcyLDQ1ICs3Miw0NSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgY2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVu
dCogdGFyZ2V0RG9jdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJh
bWUsIFN0cmluZyYgbWVzc2FnZSkKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEZyYW1lJiBm
cmFtZSwgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVy
cm9yKSkKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUo
JmxleGljYWxHbG9iYWxPYmplY3QsICZmcmFtZSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGZyYW1lLmRvY3VtZW50KCktPmRv
bVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3co
c3RhdGUpLCBJbmNsdWRlVGFyZ2V0T3JpZ2luOjpObyk7CisgICAgbWVzc2FnZSA9IGZyYW1lLmRv
Y3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3Rp
dmVET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCksIEluY2x1ZGVUYXJnZXRPcmlnaW46Ok5v
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyogZ2xvYmFs
T2JqZWN0LCBTdHJpbmcmIG1lc3NhZ2UpCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
RE9NV2luZG93KiBnbG9iYWxPYmplY3QsIFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICByZXR1cm4g
Z2xvYmFsT2JqZWN0ICYmIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsICpnbG9i
YWxPYmplY3QsIG1lc3NhZ2UpOworICAgIHJldHVybiBnbG9iYWxPYmplY3QgJiYgc2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0LCBt
ZXNzYWdlKTsKIH0KIAotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBnbG9iYWxPYmplY3QsIFN0cmlu
ZyYgbWVzc2FnZSkKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBET01XaW5kb3cmIGds
b2JhbE9iamVjdCwgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90
UmVwb3J0U2VjdXJpdHlFcnJvcikpCisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdygmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBE
b05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBtZXNz
YWdlID0gZ2xvYmFsT2JqZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURP
TVdpbmRvdyhzdGF0ZSksIEluY2x1ZGVUYXJnZXRPcmlnaW46Ok5vKTsKKyAgICBtZXNzYWdlID0g
Z2xvYmFsT2JqZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRv
dyhsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSW5jbHVkZVRhcmdldE9yaWdpbjo6Tm8pOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBET01XaW5kb3cmIHRhcmdldCwgU2Vj
dXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQorYm9vbCBCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0
aW9uIHJlcG9ydGluZ09wdGlvbikKIHsKLSAgICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3Rh
dGUsIHRhcmdldC5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOworICAgIHJldHVybiBjYW5B
Y2Nlc3NEb2N1bWVudChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0YXJnZXQuZG9jdW1lbnQoKSwgcmVw
b3J0aW5nT3B0aW9uKTsKIH0KIAotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBET01XaW5kb3cqIHRhcmdldCwg
U2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQorYm9vbCBCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRE9NV2luZG93KiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5n
T3B0aW9uIHJlcG9ydGluZ09wdGlvbikKIHsKLSAgICByZXR1cm4gdGFyZ2V0ICYmIHNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsICp0YXJnZXQsIHJlcG9ydGluZ09wdGlvbik7Cisg
ICAgcmV0dXJuIHRhcmdldCAmJiBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxH
bG9iYWxPYmplY3QsICp0YXJnZXQsIHJlcG9ydGluZ09wdGlvbik7CiB9CiAKLWJvb2wgQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBGcmFtZSogdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24p
Citib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEZyYW1lKiB0YXJnZXQsIFNlY3VyaXR5
UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKIHsKLSAgICByZXR1cm4gdGFyZ2V0ICYm
IGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9ydGluZ09w
dGlvbik7CisgICAgcmV0dXJuIHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVudChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7CiB9CiAKLWJv
b2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIE5vZGUqIHRhcmdldCkKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvTm9kZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBO
b2RlKiB0YXJnZXQpCiB7Ci0gICAgcmV0dXJuICF0YXJnZXQgfHwgY2FuQWNjZXNzRG9jdW1lbnQo
JnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVudCgpLCBMb2dTZWN1cml0eUVycm9yKTsKKyAgICByZXR1
cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgJnRh
cmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZ1NlY3VyaXR5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdT
ZWN1cml0eS5oCmluZGV4IDdmMmZlMTdjZjA5Y2I1NGVmZDE4OGM1MzA0YzNjMTc5MmNkM2ViZTUu
Ljc1ZWM1MzdhZTc4YmM1NDNjYTliOTg4NDllZDg4NzM4NGFiYWM3ZmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuaApAQCAtMjgsNyAr
MjgsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxGcmFtZTsKLXVzaW5nIEV4ZWNT
dGF0ZSA9IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsNDMgKzQy
LDQzIEBAIGVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5
RXJyb3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93CiAKIG5hbWVzcGFjZSBCaW5kaW5nU2VjdXJp
dHkgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6
OkV4ZWNTdGF0ZSYsIFQmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlG
b3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0
aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9u
T3I8VCo+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2Vj
dXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCY+JiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpKU0dsb2JhbE9iamVj
dCYsIFQmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBUKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25P
cjxUKj4gY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEV4Y2VwdGlv
bk9yPFQqPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1Nl
Y3VyaXR5Rm9yTm9kZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uT3I8VCY+JiYpOwog
Ci1ib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqLCBET01X
aW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOwotYm9v
bCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlJiwgRE9NV2luZG93
JiwgU3RyaW5nJiBtZXNzYWdlKTsKLWJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhK
U0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyosIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9n
U2VjdXJpdHlFcnJvcik7Ci1ib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUmLCBET01XaW5kb3cqLCBTdHJpbmcmIG1lc3NhZ2UpOwotYm9vbCBzaG91bGRBbGxv
d0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3VyaXR5UmVwb3J0aW5n
T3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci1ib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFt
ZShKU0M6OkV4ZWNTdGF0ZSYsIEZyYW1lJiwgU3RyaW5nJiBtZXNzYWdlKTsKLWJvb2wgc2hvdWxk
QWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Citib29sIHNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpKU0dsb2JhbE9iamVjdCosIERPTVdpbmRvdyYsIFNl
Y3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Citib29sIHNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpKU0dsb2JhbE9iamVjdCYsIERPTVdpbmRvdyYsIFN0
cmluZyYgbWVzc2FnZSk7Citib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpK
U0dsb2JhbE9iamVjdCosIERPTVdpbmRvdyosIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9n
U2VjdXJpdHlFcnJvcik7Citib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpK
U0dsb2JhbE9iamVjdCYsIERPTVdpbmRvdyosIFN0cmluZyYgbWVzc2FnZSk7Citib29sIHNob3Vs
ZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgRnJhbWUqLCBTZWN1cml0
eVJlcG9ydGluZ09wdGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOworYm9vbCBzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEZyYW1lJiwgU3RyaW5nJiBtZXNzYWdl
KTsKK2Jvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIE5v
ZGUqKTsKIAogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3Vy
aXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQmIG5vZGUp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1Nl
Y3VyaXR5Rm9yTm9kZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBU
JiBub2RlKQogewotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgJm5v
ZGUpID8gJm5vZGUgOiBudWxscHRyOworICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9k
ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAmbm9kZSkgPyAmbm9kZSA6IG51bGxwdHI7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJp
dHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCogbm9kZSkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIFQqIG5vZGUpCiB7Ci0gICAg
cmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxs
cHRyOworICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBub2RlKSA/IG5vZGUgOiBudWxscHRyOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5v
ZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUKj4mJiB2YWx1ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5Ojpj
aGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25PcjxUKj4mJiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaGFzRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0
dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7CisgICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgRXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIHJl
dHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVl
KCkpOworICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNv
bnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25z
dHJ1Y3Rvci5oCmluZGV4IGU0ZWI0NzMyMzA5NGY5M2NmNjZlZWUyZDllOGI0OGFmZWFkMDQwMTUu
LmY4OTRmN2Q4NzQ5YzNkYWMwNmQ0OGYyNGIyYTBjMGM5MTNiYTAyMzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3IuaApAQCAt
NDcsOCArNDcsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBjbGFzcyBKU0RPTUJ1aWx0
aW5Db25zdHJ1Y3RvciA6IHB1YmxpYyBKU0RPTUJ1aWx0aW5DbwogICAgIHN0YXRpYyBKU0M6OkNv
bnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0
RGF0YSYpOwogICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCi0gICAgSlND
OjpFbmNvZGVkSlNWYWx1ZSBjYWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
T2JqZWN0Jik7Ci0gICAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0Kik7CisgICAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxs
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwgSlNDOjpK
U09iamVjdCYpOworICAgIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbENvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIEpTQzo6SlNPYmplY3QqKTsKIAogICAg
IC8vIFVzdWFsbHkgZGVmaW5lZCBmb3IgZWFjaCBzcGVjaWFsaXphdGlvbiBjbGFzcy4KICAgICB2
b2lkIGluaXRpYWxpemVQcm9wZXJ0aWVzKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpIHsg
fQpAQCAtNzYsMTkgKzc2LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSB2
b2lkIEpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yPEpTQ2xhc3M+OjpmaW5pc2hDCiAgICAgaW5pdGlh
bGl6ZVByb3BlcnRpZXModm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yPEpTQ2xhc3M+OjpjYWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTT2JqZWN0JiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y2FsbENv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIEpTQzo6SlNPYmplY3QmIG9iamVjdCkKIHsKLSAgICBCYXNl
OjpjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgb2JqZWN0LCAqaW5pdGlh
bGl6ZUZ1bmN0aW9uKCkpOworICAgIEJhc2U6OmNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1l
bnRzKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgb2JqZWN0LCAqaW5pdGlhbGl6ZUZ1
bmN0aW9uKCkpOwogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZSgmb2JqZWN0KTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNET01CdWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmNhbGxDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIG9iamVjdCkKK3RlbXBsYXRlPHR5cGVuYW1l
IEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTRE9NQnVpbHRpbkNvbnN0cnVj
dG9yPEpTQ2xhc3M+OjpjYWxsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgSlNDOjpKU09iamVjdCog
b2JqZWN0KQogewotICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBKU0M6OlZNJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJu
IHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihz
dGF0ZSwgc2NvcGUsIGluZm8oKS0+Y2xhc3NOYW1lKTsKLSAgICByZXR1cm4gY2FsbENvbnN0cnVj
dG9yKHN0YXRlLCAqb2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JTY3Jp
cHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgaW5mbygpLT5jbGFzc05hbWUpOworICAgIHJldHVybiBjYWxsQ29uc3RydWN0b3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCAqb2JqZWN0KTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgSlNDbGFzcz4KQEAgLTExMSwxMSArMTExLDExIEBAIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPEpTRE9NT2JqZWN0SW5zcGVjdG9yPEpTQ2xhc3M+Ojppc0NvbXBsZXhXcmFwcGVyLCBKU0M6
OkpTCiAgICAgcmV0dXJuIGNvbnRleHQgPyBjcmVhdGVXcmFwcGVyPHR5cGVuYW1lIEpTQ2xhc3M6
OkRPTVdyYXBwZWQ+KGNvbnN0cnVjdG9yLmdsb2JhbE9iamVjdCgpLCBKU0NsYXNzOjpET01XcmFw
cGVkOjpjcmVhdGUoKmNvbnRleHQpKSA6IG51bGxwdHI7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNET01C
dWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmNvbnN0cnVjdChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNET01CdWlsdGluQ29u
c3RydWN0b3I8SlNDbGFzcz46OmNvbnN0cnVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEFTU0VSVChj
YWxsRnJhbWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBKU0M6OmpzQ2FzdDxKU0RPTUJ1aWx0
aW5Db25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Ci0gICAgcmV0dXJuIGNhc3Rl
ZFRoaXMtPmNhbGxDb25zdHJ1Y3RvcigqY2FsbEZyYW1lLCBjcmVhdGVKU09iamVjdCgqY2FzdGVk
VGhpcykpOworICAgIHJldHVybiBjYXN0ZWRUaGlzLT5jYWxsQ29uc3RydWN0b3IoKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIGNyZWF0ZUpTT2JqZWN0KCpjYXN0ZWRUaGlzKSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkNvbnN0cnVjdFR5cGUg
SlNET01CdWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDOjpK
U0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNl
LmNwcAppbmRleCA4OGIzNGRlNTFlMGQyNTlmYTFmZmM5YzgyNTZjMjY4ODkxMjBhYThhLi5kOWVi
MWZmZDU0NTE4NWM2ZjliODNiZGFhMjg5MjAyNWMyZjhjYzI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9yQmFzZS5j
cHAKQEAgLTI3LDIyICsyNywyMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKICAgICAKLXZvaWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjpjYWxsRnVu
Y3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNP
YmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCit2b2lkIEpTRE9N
QnVpbHRpbkNvbnN0cnVjdG9yQmFzZTo6Y2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUm
IGNhbGxGcmFtZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJiBm
dW5jdGlvbikKIHsKLSAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgSlNDOjpWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgSlNDOjpD
YWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEodm0sICZmdW5jdGlvbiwgY2FsbERh
dGEpOwogICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CiAKICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoY2FsbEZyYW1lLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKICAgICBpZiAoVU5MSUtFTFko
YXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoJmxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBKU0M6
OmNhbGwoJnN0YXRlLCAmZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3Qs
IGFyZ3VtZW50cyk7CisgICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7CiB9CiAKIHZv
aWQgSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlOjp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxs
KiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0b3JCYXNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAppbmRleCBj
NmNmMjk0ZjFjZWUwMjg4NDllZTk3ZWVhMTU4NTA0ZWVjZTYxN2FiLi5iZDI0MGEwYmNlYTZmYWQ0
MWUxYTJlYjEzYmNiOTBjYmJjNWI3OTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UuaApAQCAtMzgsNyArMzgs
NyBAQCBjbGFzcyBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvckJhc2UgOiBwdWJsaWMgSlNET01Db25z
dHJ1Y3RvckJhc2UgewogICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7
CiAgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlv
biYpOwogCi0gICAgc3RhdGljIHZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rp
b24mKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhK
U0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKIAogcHJpdmF0ZToKICAgICBKU0M6OldyaXRlQmFy
cmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuY3BwCmluZGV4IDI2
MzQyMjE4Y2U2ODhhYTI2NGZjZDAwYjU1ZGRkZTYzNDc5ODUyN2MuLjIwZjQwNjk0ZmVkZDZlNDJh
YWNmMGZiMDVhOWNhODRiNDQwZDUyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5jcHAKQEAgLTI5LDExICsyOSwxMSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElC
TEUoSlNET01Db25zdHJ1Y3RvckJhc2UpOwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsVGhyb3dUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsVGhyb3dUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFt
ZSwgc2NvcGUsICJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciJfcyk7CisgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkNvbnN0cnVjdG9yIHJlcXVpcmVz
ICduZXcnIG9wZXJhdG9yIl9zKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KTsKIH0KIApAQCAtNDgsOSArNDgsOSBAQCBTdHJpbmcgSlNET01Db25zdHJ1Y3RvckJhc2U6OmNs
YXNzTmFtZShjb25zdCBKU09iamVjdCosIEpTQzo6Vk0mKQogICAgIHJldHVybiAiRnVuY3Rpb24i
X3M7CiB9CiAKLVN0cmluZyBKU0RPTUNvbnN0cnVjdG9yQmFzZTo6dG9TdHJpbmdOYW1lKGNvbnN0
IEpTT2JqZWN0KiBvYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjKQorU3RyaW5nIEpTRE9NQ29u
c3RydWN0b3JCYXNlOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgY29u
c3QgQ2xhc3NJbmZvKiBpbmZvID0gb2JqZWN0LT5jbGFzc0luZm8odm0pOwogICAgIEFTU0VSVChp
bmZvKTsKICAgICByZXR1cm4gaW5mby0+bWV0aG9kVGFibGUuY2xhc3NOYW1lKG9iamVjdCwgdm0p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rv
ckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNl
LmgKaW5kZXggZGFlMjUwMmZmZTg2NmI4YjUyZmFhMjE3NGI3YTRlZjQxODdkMjVlYy4uODE1NmMw
ODI2YTk5OWNlMjcxYWFiNjlkZTk2OTQ5MDg4MWIzYjZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yQmFzZS5oCkBAIC0zOCw3ICszOCw3IEBA
IGNsYXNzIEpTRE9NQ29uc3RydWN0b3JCYXNlIDogcHVibGljIEpTRE9NT2JqZWN0IHsKICAgICB9
CiAKICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCosIEpTQzo6Vk0m
KTsKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKik7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIEpTQzo6Q2FsbFR5cGUgZ2V0
Q2FsbERhdGEoSlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlLmgKaW5kZXggYjkwMTFkZWQyOWE2MDY0ODQ2ZWZkZjk4ZGYxNjg3MGNmYTRmYzM2Mi4u
ZDQ0ZTY3YjMyM2RkNmRiZTRmODVhMDJmZTgxMmIyMjJiZTk1MjljYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oCkBAIC00NiwxMSArNDYsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4gY2xhc3MgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUgOiBwdWJsaWMgSlNET00K
ICAgICAvLyBVc3VhbGx5IGRlZmluZWQgZm9yIGVhY2ggc3BlY2lhbGl6YXRpb24gY2xhc3MuCiAg
ICAgdm9pZCBpbml0aWFsaXplUHJvcGVydGllcyhKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KSB7IH0KIAotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bFRocm93VHlwZUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKikKICAgICB7CiAgICAgICAgIEpTQzo6Vk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgICAgIEpTQzo6dGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgIkls
bGVnYWwgY29uc3RydWN0b3IiX3MpOworICAgICAgICBKU0M6OnRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJJbGxlZ2FsIGNvbnN0cnVjdG9yIl9zKTsKICAgICAgICAgcmV0dXJu
IEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNOdWxsKCkpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QW55LmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRBbnkuaAppbmRleCA5ZTdjYTA5OTgzYjc0
YWYxYmMzMDI2ZDM4N2M5NjMyYzlkM2RhZDQ5Li5mMWQ3NWI3ZmE0ZDFmOWM4NmFjNDNhZmJkM2Qy
MTY3ZjMzNzM4ZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnRBbnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRBbnkuaApAQCAtMzUsNyArMzUsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
QW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgY29udmVyc2lvbkhhc1NpZGVFZmZlY3RzID0gZmFsc2U7CiAKLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQpAQCAt
NjQsMTIgKzY0LDEyIEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewog
dGVtcGxhdGU8PiBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXI8SURMQW55PiB7CiAgICAgdXNpbmcg
SXRlbSA9IHR5cGVuYW1lIElETEFueTo6SW1wbGVtZW50YXRpb25UeXBlOwogCi0gICAgc3RhdGlj
IE9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgc3RhdGljIE9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsK
LSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURM
QW55Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZl
cnRlcjxJRExBbnk+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgV1RGOjpudWxsb3B0KTsKIAogICAgICAgICBy
ZXR1cm4gSXRlbSB7IHZtLCByZXN1bHQgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydEJhc2UuaAppbmRleCA0N2U1Njc0Njc1YTY5MWVkZmIwOGUyMjhkNWE1NGVk
NWE5ZmZmYTFjLi4wMDIwZjRlY2Q2MmMyZTgzNDRjZjUzMGI4NTIxOGE3NjgyNGI2MDZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCYXNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QmFzZS5oCkBAIC00Myw0
NyArNDMsNDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihj
b25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KIH0KIAogc3RydWN0IERlZmF1bHRF
eGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KQogICAgIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAg
IHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgfQogfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlv
blRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFs
T2JqZWN0JiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xv
YmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNl
cHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRp
b25UaHJvd2VyJiYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkK
IHsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09i
amVjdCk7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSwgdGhpc09iamVjdCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
CiB7Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCk7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQogewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKIHsKLSAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2Vw
dGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCiB7Ci0gICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CiB9CiAKIApA
QCAtOTUsNDggKzk1LDQ4IEBAIHN0cnVjdCBJc0V4Y2VwdGlvbk9yIDogcHVibGljIHN0ZDo6aW50
ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgV1RGOjpJc1RlbXBsYXRlPHN0ZDo6CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
VSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBVJiYpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8SXNFeGNlcHRp
b25PcjxVPjo6dmFsdWUsIEpTQzo6SlNWYWx1ZT47Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgYXV0byB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgVSYmKSAtPiBzdGQ6OmVuYWJsZV9pZl90PCFJc0V4Y2VwdGlvbk9yPFU+Ojp2YWx1ZSwgSlND
OjpKU1ZhbHVlPjsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRv
IHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29w
ZSYsIFUmJikgLT4gc3RkOjplbmFibGVfaWZfdDxJc0V4Y2VwdGlvbk9yPFU+Ojp2YWx1ZSwgSlND
OjpKU1ZhbHVlPjsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRv
IHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29w
ZSYsIFUmJikgLT4gc3RkOjplbmFibGVfaWZfdDwhSXNFeGNlcHRpb25PcjxVPjo6dmFsdWUsIEpT
Qzo6SlNWYWx1ZT47Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYXV0
byB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBVJiYpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8SXNFeGNlcHRpb25PcjxV
Pjo6dmFsdWUsIEpTQzo6SlNWYWx1ZT47Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgYXV0byB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBVJiYpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8IUlz
RXhjZXB0aW9uT3I8VT46OnZhbHVlLCBKU0M6OkpTVmFsdWU+OwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUm
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRv
SlMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIFUmJikgLT4gc3RkOjpl
bmFibGVfaWZfdDxJc0V4Y2VwdGlvbk9yPFU+Ojp2YWx1ZSwgSlNDOjpKU1ZhbHVlPjsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRvSlMoSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIFUmJikgLT4gc3RkOjplbmFibGVfaWZfdDwhSXNF
eGNlcHRpb25PcjxVPjo6dmFsdWUsIEpTQzo6SlNWYWx1ZT47Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgYXV0byB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIFUmJikgLT4gc3RkOjplbmFibGVfaWZf
dDxJc0V4Y2VwdGlvbk9yPFU+Ojp2YWx1ZSwgSlNDOjpKU1ZhbHVlPjsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgVSYmKSAtPiBzdGQ6OmVuYWJs
ZV9pZl90PCFJc0V4Y2VwdGlvbk9yPFU+Ojp2YWx1ZSwgSlNDOjpKU1ZhbHVlPjsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpKU0dsb2JhbE9iamVjdCYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwg
VSYmKSAtPiBzdGQ6OmVuYWJsZV9pZl90PElzRXhjZXB0aW9uT3I8VT46OnZhbHVlLCBKU0M6OkpT
VmFsdWU+OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGF1dG8gdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBVJiYpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8IUlzRXhjZXB0aW9uT3I8
VT46OnZhbHVlLCBKU0M6OkpTVmFsdWU+OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5l
ZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KIHN0cnVjdCBKU0NvbnZl
cnRlck92ZXJsb2FkZXI7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgSlNDb252ZXJ0
ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIHN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJiB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4KIHN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZh
bHVlKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCiAg
ICAgewogICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CiAgICAgfQpAQCAtMTQ3LDY0ICsxNDcsNjQgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gSlNDb252ZXJ0
ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZl
cnQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIFUmJiB2YWx1
ZSkgLT4gc3RkOjplbmFibGVfaWZfdDxJc0V4Y2VwdGlvbk9yPFU+Ojp2YWx1ZSwgSlNDOjpKU1Zh
bHVlPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGF1dG8gdG9KUyhK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUsIFUmJiB2YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZfdDxJc0V4Y2VwdGlvbk9y
PFU+Ojp2YWx1ZSwgSlNDOjpKU1ZhbHVlPgogewogICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNF
eGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4gdG9KUzxUPihz
dGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIHJldHVybiB0b0pTPFQ+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGF1dG8gdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYsIFUmJiB2YWx1ZSkgLT4gc3RkOjplbmFibGVf
aWZfdDwhSXNFeGNlcHRpb25PcjxVPjo6dmFsdWUsIEpTQzo6SlNWYWx1ZT4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiwgVSYmIHZhbHVlKSAtPiBz
dGQ6OmVuYWJsZV9pZl90PCFJc0V4Y2VwdGlvbk9yPFU+Ojp2YWx1ZSwgSlNDOjpKU1ZhbHVlPgog
ewotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICByZXR1cm4gdG9KUzxUPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGF1dG8g
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgVSYmIHZhbHVlKSAtPiBzdGQ6OmVuYWJs
ZV9pZl90PElzRXhjZXB0aW9uT3I8VT46OnZhbHVlLCBKU0M6OkpTVmFsdWU+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYXV0byB0b0pTKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgVSYmIHZhbHVlKSAtPiBzdGQ6OmVuYWJsZV9p
Zl90PElzRXhjZXB0aW9uT3I8VT46OnZhbHVlLCBKU0M6OkpTVmFsdWU+CiB7CiAgICAgaWYgKFVO
TElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAg
IHByb3BhZ2F0ZUV4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCB2YWx1
ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAg
IHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpKTsKKyAgICByZXR1cm4gdG9KUzxUPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGF1dG8gdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYsIFUmJiB2
YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZfdDwhSXNFeGNlcHRpb25PcjxVPjo6dmFsdWUsIEpTQzo6
SlNWYWx1ZT4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRv
SlMoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiwgVSYmIHZhbHVlKSAtPiBzdGQ6
OmVuYWJsZV9pZl90PCFJc0V4Y2VwdGlvbk9yPFU+Ojp2YWx1ZSwgSlNDOjpKU1ZhbHVlPgogewot
ICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworICAgIHJldHVybiB0b0pTPFQ+KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUsIFUmJiB2YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZfdDxJc0V4Y2VwdGlvbk9y
PFU+Ojp2YWx1ZSwgSlNDOjpKU1ZhbHVlPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIGF1dG8gdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUsIFUmJiB2YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZfdDxJc0V4
Y2VwdGlvbk9yPFU+Ojp2YWx1ZSwgSlNDOjpKU1ZhbHVlPgogewogICAgIGlmIChVTkxJS0VMWSh2
YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRl
LCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4g
dG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSk7CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBhdXRvIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmLCBVJiYgdmFsdWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8IUlz
RXhjZXB0aW9uT3I8VT46OnZhbHVlLCBKU0M6OkpTVmFsdWU+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgYXV0byB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYsIFUmJiB2YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZfdDwhSXNF
eGNlcHRpb25PcjxVPjo6dmFsdWUsIEpTQzo6SlNWYWx1ZT4KIHsKLSAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogfQogCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJvb2xlYW4uaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJvb2xlYW4uaAppbmRleCBlNjM2M2Y1
OTQ1NzNlZDQ3OWY5ZWI0MGQ5NDVmNzRkNmMwNjZlN2E1Li5lZDhlYTUyMTFlNmQ3ODBkMTk4ODVj
ZTUyNzU0OTY0ZDFhZDkyODE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRCb29sZWFuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0Qm9vbGVhbi5oCkBAIC0zNCw5ICszNCw5IEBAIHRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewog
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGNvbnZlcnNpb25IYXNTaWRlRWZmZWN0cyA9IGZh
bHNlOwogCi0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlLnRvQm9vbGVhbigmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgfQogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QnVmZmVyU291cmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2Uu
aAppbmRleCAyMWRlOTdmNGExYmY0YjQ1NWE0MGNiYmM4MTYwYjUzMGE1NWY5MWJmLi5jZTMyYzEw
OGZlNzQzNTc4YmU4NzYwOWYwM2IwZGM0NzUwNDVkMDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaApAQCAtNjMsMzIg
KzYzLDMyIEBAIGlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQz
MkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUKIGlubGluZSBSZWZQdHI8SlNDOjpGbG9h
dDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6Rmxv
YXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KIGlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJy
YXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFk
YXB0b3I+KHZtLCB2YWx1ZSk7IH0KIAotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJh
eUJ1ZmZlciYgYnVmZmVyKQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKIHsKICAgICBpZiAoYXV0byByZXN1bHQgPSBn
ZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVmZmVyKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKIAogICAgIC8vIFRoZSBKU0FycmF5QnVmZmVyOjpjcmVhdGUgZnVuY3Rp
b24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVhdGlvbi4KLSAgICByZXR1
cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCksIGdsb2JhbE9iamVjdC0+
YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkpLCAmYnVmZmVyKTsKKyAg
ICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShidWZmZXIuc2hh
cmluZ01vZGUoKSksICZidWZmZXIpOwogfQogCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmIHZpZXcpCiB7Ci0gICAgcmV0dXJu
IHZpZXcud3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdmlldy53cmFwKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCk7CiB9CiAKLWlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCiB7CiAgICAgaWYg
KCFidWZmZXIpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIHJldHVybiB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOworICAgIHJldHVybiB0b0pTKGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7CiB9CiAKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCitpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyogdmlldykK
IHsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIHJl
dHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICp2aWV3KTsKKyAgICByZXR1cm4gdG9KUyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICp2aWV3KTsKIH0KIAogaW5saW5lIFJl
ZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmll
dyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpAQCAtMTE1LDEzICsxMTUsMTMgQEAg
c3RydWN0IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB7CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIENvbnZlcnRlcjxCdWZmZXJTb3VyY2VUeXBlPjo6UmV0dXJuVHlwZTsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
CiAgICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBX
cmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
b2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpOwog
ICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIH0KIH07CkBAIC0xMzMsOSArMTMzLDkgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFycmF5QnVmZmVyPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQXJyYXlCdWZmZXI+IHsKICAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1
ZmZlcio7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhj
ZXB0aW9uVGhyb3dlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6QnVmZmVyU291
cmNlQ29udmVydGVyPElETEFycmF5QnVmZmVyPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgICAgIHJl
dHVybiBEZXRhaWw6OkJ1ZmZlclNvdXJjZUNvbnZlcnRlcjxJRExBcnJheUJ1ZmZlcj46OmNvbnZl
cnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7CiAgICAgfQogfTsKIApAQCAtMTQ0LDkgKzE0NCw5IEBA
IHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFycmF5QnVmZmVyPiB7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUm
IHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBVJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgICAgICByZXR1cm4g
dG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJP
clJlZih2YWx1ZSkpOwogICAgIH0KIH07CiAKQEAgLTE1NSw5ICsxNTUsOSBAQCB0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0YVZpZXc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRh
Vmlldz4gewogICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpEYXRhVmlldz47CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6QnVmZmVyU291cmNlQ29udmVy
dGVyPElETERhdGFWaWV3Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgICAgIHJldHVybiBEZXRhaWw6
OkJ1ZmZlclNvdXJjZUNvbnZlcnRlcjxJRExEYXRhVmlldz46OmNvbnZlcnQobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7CiAgICAgfQogfTsKIApAQCAtMTY2LDkgKzE2Niw5IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERhdGFWaWV3PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwogICAg
IH0KIH07CiAKQEAgLTE3Nyw5ICsxNzcsOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMSW50OEFycmF5PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50OEFycmF5PiB7CiAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkludDhBcnJheT47CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIERldGFpbDo6QnVmZmVyU291cmNlQ29udmVydGVyPElETEludDhBcnJh
eT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOworICAgICAgICByZXR1cm4gRGV0YWlsOjpCdWZmZXJTb3VyY2VD
b252ZXJ0ZXI8SURMSW50OEFycmF5Pjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKICAg
ICB9CiB9OwogCkBAIC0xODgsOSArMTg4LDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMSW50OEFycmF5PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJl
Zih2YWx1ZSkpOworICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmds
b2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwogICAgIH0KIH07CiAKQEAg
LTE5OSw5ICsxOTksOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50MTZBcnJh
eT4gOiBEZWZhdWx0Q29udmVydGVyPElETEludDE2QXJyYXk+IHsKICAgICB1c2luZyBSZXR1cm5U
eXBlID0gUmVmUHRyPEpTQzo6SW50MTZBcnJheT47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIERldGFpbDo6QnVmZmVyU291cmNlQ29udmVydGVyPElETEludDE2QXJyYXk+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlv
blRocm93ZXIpKTsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6QnVmZmVyU291cmNlQ29udmVydGVy
PElETEludDE2QXJyYXk+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBzdGQ6
OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwogICAgIH0KIH07
CiAKQEAgLTIxMCw5ICsyMTAsOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJ
bnQxNkFycmF5PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1
ZSkpOworICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9i
amVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwogICAgIH0KIH07CiAKQEAgLTIyMSw5
ICsyMjEsOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50MzJBcnJheT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEludDMyQXJyYXk+IHsKICAgICB1c2luZyBSZXR1cm5UeXBlID0g
UmVmUHRyPEpTQzo6SW50MzJBcnJheT47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IERldGFpbDo6QnVmZmVyU291cmNlQ29udmVydGVyPElETEludDMyQXJyYXk+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6QnVmZmVyU291cmNlQ29udmVydGVyPElETElu
dDMyQXJyYXk+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwogICAgIH0KIH07CiAKQEAg
LTIzMiw5ICsyMzIsOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnQzMkFy
cmF5PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0
b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwor
ICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwg
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwogICAgIH0KIH07CiAKQEAgLTI0Myw5ICsyNDMs
OSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVWludDhBcnJheT4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVpbnQ4QXJyYXk+IHsKICAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRy
PEpTQzo6VWludDhBcnJheT47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFp
bDo6QnVmZmVyU291cmNlQ29udmVydGVyPElETFVpbnQ4QXJyYXk+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsK
KyAgICAgICAgcmV0dXJuIERldGFpbDo6QnVmZmVyU291cmNlQ29udmVydGVyPElETFVpbnQ4QXJy
YXk+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwogICAgIH0KIH07CiAKQEAgLTI1NCw5
ICsyNTQsOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVaW50OEFycmF5PiB7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFUmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgICAg
ICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOwogICAgIH0KIH07CiAKQEAgLTI2NSw5ICsyNjUsOSBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVWludDE2QXJyYXk+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVaW50MTZBcnJheT4gewogICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8SlND
OjpVaW50MTZBcnJheT47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6
QnVmZmVyU291cmNlQ29udmVydGVyPElETFVpbnQxNkFycmF5Pjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cisg
ICAgICAgIHJldHVybiBEZXRhaWw6OkJ1ZmZlclNvdXJjZUNvbnZlcnRlcjxJRExVaW50MTZBcnJh
eT46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CiAgICAgfQogfTsKIApAQCAtMjc2LDkg
KzI3Niw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVpbnQxNkFycmF5PiB7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFUmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgICAg
ICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOwogICAgIH0KIH07CiAKQEAgLTI4Nyw5ICsyODcsOSBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVWludDMyQXJyYXk+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVaW50MzJBcnJheT4gewogICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8SlND
OjpVaW50MzJBcnJheT47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6
QnVmZmVyU291cmNlQ29udmVydGVyPElETFVpbnQzMkFycmF5Pjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cisg
ICAgICAgIHJldHVybiBEZXRhaWw6OkJ1ZmZlclNvdXJjZUNvbnZlcnRlcjxJRExVaW50MzJBcnJh
eT46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CiAgICAgfQogfTsKIApAQCAtMjk4LDkg
KzI5OCw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVpbnQzMkFycmF5PiB7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFUmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgICAg
ICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOwogICAgIH0KIH07CiAKQEAgLTMwOSw5ICszMDksOSBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVWludDhDbGFtcGVkQXJyYXk+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVaW50OENsYQogICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8SlND
OjpVaW50OENsYW1wZWRBcnJheT47CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIERl
dGFpbDo6QnVmZmVyU291cmNlQ29udmVydGVyPElETFVpbnQ4Q2xhbXBlZEFycmF5Pjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7CisgICAgICAgIHJldHVybiBEZXRhaWw6OkJ1ZmZlclNvdXJjZUNvbnZlcnRlcjxJ
RExVaW50OENsYW1wZWRBcnJheT46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CiAgICAg
fQogfTsKIApAQCAtMzIwLDkgKzMyMCw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETFVpbnQ4Q2xhbXBlZEFycmF5PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQ
dHJPclJlZih2YWx1ZSkpOworICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwogICAgIH0KIH07
CiAKQEAgLTMzMSw5ICszMzEsOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxv
YXQzMkFycmF5PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQzMkFycmF5PgogICAgIHVzaW5n
IFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+OwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OkJ1ZmZlclNvdXJjZUNvbnZlcnRlcjxJRExGbG9hdDMy
QXJyYXk+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6QnVmZmVyU291
cmNlQ29udmVydGVyPElETEZsb2F0MzJBcnJheT46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2Vy
KSk7CiAgICAgfQogfTsKIApAQCAtMzQyLDkgKzM0Miw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETEZsb2F0MzJBcnJheT4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6
Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxP
YmplY3QsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKICAgICB9
CiB9OwogCkBAIC0zNTMsOSArMzUzLDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEZsb2F0NjRBcnJheT4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0NjRBcnJheT4KICAgICB1
c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PjsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4
Y2VwdGlvblRocm93ZXIoKSkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCiAg
ICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpCdWZmZXJTb3VyY2VDb252ZXJ0ZXI8SURMRmxv
YXQ2NEFycmF5Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgICAgIHJldHVybiBEZXRhaWw6OkJ1ZmZl
clNvdXJjZUNvbnZlcnRlcjxJRExGbG9hdDY0QXJyYXk+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOwogICAgIH0KIH07CiAKQEAgLTM2NCw5ICszNjQsOSBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExGbG9hdDY0QXJyYXk+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CiAg
ICAgfQogfTsKIApAQCAtMzc1LDkgKzM3NSw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExBcnJheUJ1ZmZlclZpZXc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBcnJheUJ1ZmZlCiAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz47CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dl
cigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6QnVmZmVyU291cmNlQ29udmVydGVy
PElETEFycmF5QnVmZmVyVmlldz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgICAgICByZXR1cm4gRGV0
YWlsOjpCdWZmZXJTb3VyY2VDb252ZXJ0ZXI8SURMQXJyYXlCdWZmZXJWaWV3Pjo6Y29udmVydChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKICAgICB9CiB9OwogCkBAIC0zODYsOSArMzg2LDkgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQXJyYXlCdWZmZXJWaWV3PiB7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUm
IHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBVJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgICAgICByZXR1cm4g
dG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJP
clJlZih2YWx1ZSkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0Q2FsbGJhY2tzLmgKaW5kZXggNmNkYzc5Mzk5ZGJiZjY5M2VlNDM4
NTBkZDBlNjliOWFkM2JhMjA1My4uYTU0YTRiM2NiYTYzMTlmNDAyYjhhNWI0NjE4Yjg2ZWU5MWQ5
MjkwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
Q2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
Q2FsbGJhY2tzLmgKQEAgLTM1LDEzICszNSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBjb252ZXJzaW9uSGFzU2lkZUVmZmVjdHMgPSBmYWxz
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKHZtKSkgewotICAgICAgICAgICAgZXhjZXB0aW9u
VGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTY5LDEzICs2OSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0g
ICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICBzdGF0
aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIo
KSkKICAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgSlND
OjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIGlmICghdmFsdWUu
aXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUp
OworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnREYXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERhdGUuY3BwCmluZGV4IGMzMTI1MDkw
OGUyNWJhNWQ2MDJlYWIzZTAyOWY2YjY5YjEyZGRiNTMuLjY0MGU3N2UzMzYwZmY3ZTY5YTNiNzA5
YzZjZGJjODA3NTFiMGU5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydERhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydERhdGUuY3BwCkBAIC0zMSwxOCArMzEsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGdldCBwYXNz
ZWQgYSBnbG9iYWwgb2JqZWN0IHJhdGhlciB0aGFuIGdldHRpbmcgaXQgb3V0IG9mIHRoZSBFeGVj
U3RhdGUuCi1KU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCitK
U1ZhbHVlIGpzRGF0ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgZG91Ymxl
IHZhbHVlKQogewotICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShzdGF0ZS52bSgpLCBz
dGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOworICAg
IHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIGxl
eGljYWxHbG9iYWxPYmplY3QuZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7CiB9CiAKLWRvdWJsZSB2
YWx1ZVRvRGF0ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorZG91YmxlIHZhbHVl
VG9EYXRlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gdmFsdWUuYXNO
dW1iZXIoKTsKLSAgICBpZiAoIXZhbHVlLmluaGVyaXRzPERhdGVJbnN0YW5jZT4oc3RhdGUudm0o
KSkpCisgICAgaWYgKCF2YWx1ZS5pbmhlcml0czxEYXRlSW5zdGFuY2U+KGxleGljYWxHbG9iYWxP
YmplY3Qudm0oKSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1
ZS50b09iamVjdCgmc3RhdGUpKS0+aW50ZXJuYWxOdW1iZXIoKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3Qp
KS0+aW50ZXJuYWxOdW1iZXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5oCmluZGV4IDQzMTRkZTZl
NGJhZDAxOWQ0YmQxZmEyOTNmM2QxZDYxNGQ2YzJiZTAuLjUyNWFlODcwMzY1MTZkMmI1ZWQ3ZmU4
MjkxMGFkYmFiNjk1NzE3MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydERhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnREYXRlLmgKQEAgLTMwLDEzICszMCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUpTQzo6SlNWYWx1ZSBqc0RhdGUoSlNDOjpFeGVjU3RhdGUmLCBkb3VibGUgdmFsdWUpOwot
ZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsgLy8gTmFO
IGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRlLgorSlNDOjpKU1ZhbHVl
IGpzRGF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgZG91YmxlIHZhbHVlKTsKK2RvdWJsZSB2YWx1
ZVRvRGF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsgLy8gTmFOIGlmIHRo
ZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRlLgogCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKLSAgICBz
dGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZVRvRGF0ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdmFsdWVUb0Rh
dGUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTQ1LDkgKzQ1
LDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwogCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIHRha2luZyBhIEpTRE9NR2xvYmFsT2JqZWN0IGFuZCBwYXNzaW5n
IGl0IHRvIGpzRGF0ZS4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGRvdWJsZSB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIGpzRGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGljdGlv
bmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGljdGlvbmFy
eS5oCmluZGV4IDE5ZmNlZmY4M2I1OGMwNTMwNzAwN2Y3N2Q2ZTUxOTdlNWI2NmQ1MGUuLjk0MTcz
YjE2ZmRiOTg4MmEzODBhNDRiMDVjYWE4M2U0NTkwMjRkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERpY3Rpb25hcnkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnREaWN0aW9uYXJ5LmgKQEAgLTMxLDE1ICsz
MSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpKU1ZhbHVlKTsKIAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5
PFQ+PiB7CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7CiAKLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0
RGljdGlvbmFyeTxUPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogfTsKIApA
QCAtNDcsOSArNDcsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFy
eSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVCYgZGljdGlvbmFyeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFy
eVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAgICAgIHJldHVybiBj
b252ZXJ0RGljdGlvbmFyeVRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBk
aWN0aW9uYXJ5KTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0RW51bWVyYXRpb24uaAppbmRleCAxZmViODk3OTI5YjI5YjMxZjU3
YWVjNWI3ZTMyZDlmYTY2OGQ1ZTdkLi45Mjg5Y2M2N2FmM2Q4YTcxNjg3MGVmOGNmMDU5YWU2MjNk
NzZkNjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRFbnVtZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydEVudW1lcmF0aW9uLmgKQEAgLTMxLDI1ICszMSwyNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9u
IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBPcHRpb25hbDxUPiBwYXJzZUVudW1l
cmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IE9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpT
Qzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVu
dW1lcmF0aW9uVmFsdWVzKCk7CiAKIC8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZv
ciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6
SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIFQpOwogCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVt
ZXJhdGlvbjxUPj4gewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCiAgICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgICAgIGF1dG8gcmVzdWx0
ID0gcGFyc2VFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOworICAgICAgICBhdXRvIHJlc3Vs
dCA9IHBhcnNlRW51bWVyYXRpb248VD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICAgICAgaWYg
KFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKQEAgLTYwLDkgKzYwLDkgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwogCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBUIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJh
dGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9u
VG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RXZlbnRMaXN0ZW5lci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RXZlbnRMaXN0ZW5lci5o
CmluZGV4IGNhNWY4OGUxYzgwNmU4YThhZDI0YzcwODIyZDc1ZGZlNzk4Y2I3MTYuLmQxMGJlNjdl
NmY0YjU3YjliYzlhMDQ2Njg0OGZiMjM4ZjRkMjFhMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEV2ZW50TGlzdGVuZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRFdmVudExpc3RlbmVyLmgKQEAgLTMzLDEz
ICszMywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExF
dmVudExpc3RlbmVyPFQ+PiB7CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKIAot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCiAgICAgewot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCkpOwogCi0gICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFs
dWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKKyAgICAgICAgYXV0
byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRX
b3JsZChsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgCiAgICAgICAgIHJl
dHVybiBsaXN0ZW5lcjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRJbmRleGVkREIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydEluZGV4ZWREQi5oCmluZGV4IDc4ZDdlMzc2MzQxZDg2NmExMDRlNTM1NzBi
NDRhMTg3ZGE4Yjk2ZmUuLmM3ZDAxMGY3NWQ5NzM3YmIzYTY5ZDQ1NzI2NDg5YmRkMTU2MDBiNWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4
ZWREQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4
ZWREQi5oCkBAIC0zOCw5ICszOCw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TElEQktleT4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKHN0
YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgICAgICByZXR1
cm4gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwogICAgIH0KIH07CiAKQEAgLTQ5LDkgKzQ5LDkgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5RGF0YT4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICB9CiB9OwogCkBAIC02MCw5
ICs2MCw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQlZhbHVlPiB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0SW50ZXJmYWNlLmgKaW5kZXggYWVmOGFiM2M4ZDIwNDM3NjQ1NWZlYTJiNGY3YWQ1MjRk
MmNiMDhlNS4uYmYxOWU5NzNhMzA5MzY5MzZhZDMwZmNlYTZmNWVhNzQ5ODk3NzliYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW50ZXJmYWNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW50ZXJmYWNlLmgK
QEAgLTM4LDkgKzM4LDkgQEAgc3RydWN0IEpTVG9XcmFwcGVkT3ZlcmxvYWRlciB7CiAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6
VG9XcmFwcGVkUmV0dXJuVHlwZTsKICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwogCi0gICAgc3RhdGlj
IFJldHVyblR5cGUgdG9XcmFwcGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIHRvV3JhcHBlZChKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICByZXR1cm4gV3JhcHBlclR5cGU6OnRvV3JhcHBlZChzdGF0ZS52bSgpLCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCB2YWx1ZSk7CiAgICAgfQogfTsKIApAQCAtNDksOSArNDksOSBAQCBzdHJ1
Y3QgSlNUb1dyYXBwZWRPdmVybG9hZGVyPFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYQogICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CiAgICAgdXNp
bmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46
OldyYXBwZXJDbGFzczsKIAotICAgIHN0YXRpYyBSZXR1cm5UeXBlIHRvV3JhcHBlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSB0b1dyYXBwZWQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdyYXBwZXJUeXBlOjp0b1dy
YXBwZWQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdyYXBwZXJUeXBlOjp0b1dyYXBw
ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTYwLDEzICs2
MCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFj
ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludAogICAgIHVzaW5nIFdyYXBwZXJUeXBlID0g
dHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQogICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2Jq
ZWN0ID0gSlNUb1dyYXBwZWRPdmVybG9hZGVyPFQ+Ojp0b1dyYXBwZWQoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBKU1RvV3JhcHBlZE92ZXJsb2FkZXI8VD46OnRv
V3JhcHBlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VM
WSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUp
OwogICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIH0KIH07CkBAIC03NiwyNCArNzYsMjQgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4g
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBVJiB2YWx1ZSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIERldGFp
bDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKICAgICB1
c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKIAotICAgIHN0YXRpYyBPcHRp
b25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHN0YXRpYyBPcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8VD4+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICByZXR1
cm4gT3B0aW9uYWw8SXRlbT4geyAqcmVzdWx0IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRKU09OLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRKU09OLmgKaW5kZXggMzc4ZGNjN2Q2ZTM0OWUyNGQ4OTMxYjQxNTdi
OWRhNTE0ZDJhYjQwMS4uNmE0NzE2ZGVlN2E1N2RjMDhhMTNhMjk5OGQ5ZTIxNGI5M2E1NGQ3MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SlNPTi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEpTT04uaApAQCAt
MzIsOSArMzIsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAgICAgIHJldHVybiBK
U0M6OkpTT05TdHJpbmdpZnkoJmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCAwKTsKICAgICB9
CiB9OwogCkBAIC00Miw5ICs0Miw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEpTT04+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CiAKLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAg
ICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnROdWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRO
dWxsLmgKaW5kZXggMjYyZDc1MTA2NThkODkwMTE1MzNjYjgzYjY1M2I4NWY3ZTk0ZjgzYi4uYjEz
MjgyNWQyZDA3ZDNmOGYyZTM2ZDE3MTYwZGU3MTEzNWYzM2JkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVsbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bGwuaApAQCAtMzEsNyArMzEsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4g
OiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICBzdGF0aWMgc3RkOjpu
dWxscHRyX3QgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVsbGFibGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bGxhYmxlLmgKaW5kZXggYmFhZGI0NDA2OTI3M2M1
N2JkOGE3MDc0Y2M5YWEwMGFmZjFhMTQ4Ny4uZmE1NzZlYmMwMmE4ZjRmZTU0MmM2MDQwOGYwNTMy
ZWVlZWRjNmVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0TnVsbGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnROdWxsYWJsZS5oCkBAIC02OCw0NCArNjgsNDQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51
bGwKICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4g
cmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgogICAgIC8vIDMuIE90
aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxl
cyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCiAKLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3Qp
CiAgICAgewogICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCB0aGlzT2JqZWN0KTsK
ICAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQogICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwg
Z2xvYmFsT2JqZWN0KTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKICAgICB7CiAgICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKICAgICB7CiAgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikK
ICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CiAgICAgfQogfTsK
IApAQCAtMTIzLDI2ICsxMjMsMjYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETE51bGxhYmxlPFQ+PiB7CiAgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKICAgICB9CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKICAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZh
bHVlKSk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1
ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQogICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUp
KTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7
CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0TnVtYmVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnROdW1iZXJzLmNwcAppbmRleCA2YWUyNGNhMTIzYWIzNzFhYzQ4M2I4MTJjMmNmMzA1OTFl
Mzc5Y2ExLi5lYTkyZDc3ZjcwNTViOThhMjUwYWRhNzQ4MTQ3ZDgxNTBjZTcxNjMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1iZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1iZXJzLmNwcApA
QCAtNDQsMTggKzQ0LDE4IEBAIHN0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3VibGUg
dmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlZh
bHVlICIsIHZhbHVlLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBtaW4sICIsICIsIG1heCwg
J10nKTsKIH0KIAotc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwg
ZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3N0YXRpYyBkb3VibGUg
ZW5mb3JjZVJhbmdlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBkb3VibGUg
eCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChzdGQ6OmlzbmFuKHgp
IHx8IHN0ZDo6aXNpbmYoeCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHRocm93
VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4
LCBtaW5pbXVtLCBtYXhpbXVtKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICB4ID0g
dHJ1bmMoeCk7CiAgICAgaWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7Ci0gICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11
bSwgbWF4aW11bSkpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgcmV0dXJuIHg7CkBAIC05Niw5ICs5Niw5IEBAIHN0cnVj
dCBJbnRUeXBlTGltaXRzPHVpbnQxNl90PiB7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbj4KLXN0YXRpYyBpbmxp
bmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRp
YyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NpZ25lZDxUPjo6
dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2Vk
IGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMg
aW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiAg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CiAgICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1Ry
YWl0OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhW
YWx1ZTsKQEAgLTEyMiwxNCArMTIyLDE0IEBAIHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51bWJl
ck9mVmFsdWVzIDogZCk7CiAgICAgfQogCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogCiAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7CiAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAg
ICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKGxleGljYWxHbG9iYWxPYmplY3QsIHgsIExpbWl0c1Ry
YWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CiAgICAgICAgIHJldHVybiBzdGQ6OmlzbmFu
KHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CiAgICAgfQpAQCAtMTQ0LDkgKzE0NCw5IEBAIHN0YXRp
YyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uPgotc3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3Jh
bDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0
eXBlcyIpOwpAQCAtMTYxLDIxICsxNjEsMjEgQEAgc3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJ
bnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUPihkKTsKICAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CiAgICAgICAgICAgICByZXR1cm4gTGltaXRzVHJhaXQ6
Om1heFZhbHVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwogCiAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CiAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5n
ZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFs
dWUpOwogICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKICAg
ICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKICAgICB9CkBA
IC0xODcsMTcwICsxODcsMTcwIEBAIHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZt
b2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7CiB9CiAKLXRlbXBsYXRlPD4gaW50
OF90IGNvbnZlcnRUb0ludGVnZXJFbmZvcmNlUmFuZ2U8aW50OF90PihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gaW50OF90IGNvbnZlcnRUb0lu
dGVnZXJFbmZvcmNlUmFuZ2U8aW50OF90PihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHRvU21hbGxlcklu
dDxpbnQ4X3QsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlPihz
dGF0ZSwgdmFsdWUpOworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90LCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZT4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogfQogCi10ZW1wbGF0ZTw+IHVpbnQ4X3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VS
YW5nZTx1aW50OF90PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3RlbXBsYXRlPD4gdWludDhfdCBjb252ZXJ0VG9JbnRlZ2VyRW5mb3JjZVJhbmdlPHVpbnQ4X3Q+
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90LCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZT4oc3RhdGUsIHZhbHVlKTsKKyAgICByZXR1
cm4gdG9TbWFsbGVyVUludDx1aW50OF90LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogfQogCi10ZW1wbGF0
ZTw+IGludDhfdCBjb252ZXJ0VG9JbnRlZ2VyQ2xhbXA8aW50OF90PihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gaW50OF90IGNvbnZlcnRUb0lu
dGVnZXJDbGFtcDxpbnQ4X3Q+KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhf
dCwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcD4oc3RhdGUsIHZhbHVlKTsK
KyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdCwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogfQogCi10ZW1wbGF0
ZTw+IHVpbnQ4X3QgY29udmVydFRvSW50ZWdlckNsYW1wPHVpbnQ4X3Q+KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiB1aW50OF90IGNvbnZlcnRU
b0ludGVnZXJDbGFtcDx1aW50OF90PihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8
dWludDhfdCwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcD4oc3RhdGUsIHZh
bHVlKTsKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90LCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiB9CiAK
LXRlbXBsYXRlPD4gaW50OF90IGNvbnZlcnRUb0ludGVnZXI8aW50OF90PihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gaW50OF90IGNvbnZlcnRU
b0ludGVnZXI8aW50OF90PihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Qs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsPihzdGF0ZSwgdmFsdWUpOwor
ICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogfQogCi10ZW1wbGF0
ZTw+IHVpbnQ4X3QgY29udmVydFRvSW50ZWdlcjx1aW50OF90PihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gdWludDhfdCBjb252ZXJ0VG9JbnRl
Z2VyPHVpbnQ4X3Q+KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90LCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbD4oc3RhdGUsIHZhbHVlKTsKKyAg
ICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogfQogCi10ZW1wbGF0
ZTw+IGludDE2X3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTxpbnQxNl90PihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gaW50MTZfdCBj
b252ZXJ0VG9JbnRlZ2VyRW5mb3JjZVJhbmdlPGludDE2X3Q+KEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
dG9TbWFsbGVySW50PGludDE2X3QsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlPihzdGF0ZSwgdmFsdWUpOworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZf
dCwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8PiB1aW50MTZfdCBjb252ZXJ0VG9J
bnRlZ2VyRW5mb3JjZVJhbmdlPHVpbnQxNl90PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gdWludDE2X3QgY29udmVydFRvSW50ZWdlckVuZm9y
Y2VSYW5nZTx1aW50MTZfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQx
Nl90LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZT4oc3RhdGUs
IHZhbHVlKTsKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdCwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKIH0KIAotdGVtcGxhdGU8PiBpbnQxNl90IGNvbnZlcnRUb0ludGVnZXJDbGFtcDxpbnQx
Nl90PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRl
PD4gaW50MTZfdCBjb252ZXJ0VG9JbnRlZ2VyQ2xhbXA8aW50MTZfdD4oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIHJl
dHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdCwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcD4oc3RhdGUsIHZhbHVlKTsKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Qs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8PiB1aW50MTZfdCBjb252ZXJ0VG9JbnRlZ2VyQ2xh
bXA8dWludDE2X3Q+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
dGVtcGxhdGU8PiB1aW50MTZfdCBjb252ZXJ0VG9JbnRlZ2VyQ2xhbXA8dWludDE2X3Q+KEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdCwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcD4oc3RhdGUsIHZhbHVlKTsKKyAgICByZXR1cm4gdG9TbWFsbGVy
VUludDx1aW50MTZfdCwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcD4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogfQogCi10ZW1wbGF0ZTw+IGludDE2X3QgY29udmVy
dFRvSW50ZWdlcjxpbnQxNl90PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKK3RlbXBsYXRlPD4gaW50MTZfdCBjb252ZXJ0VG9JbnRlZ2VyPGludDE2X3Q+KEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3QsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsPihzdGF0ZSwgdmFsdWUpOworICAgIHJldHVybiB0b1NtYWxsZXJJ
bnQ8aW50MTZfdCwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8PiB1aW50MTZfdCBjb252ZXJ0
VG9JbnRlZ2VyPHVpbnQxNl90PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKK3RlbXBsYXRlPD4gdWludDE2X3QgY29udmVydFRvSW50ZWdlcjx1aW50MTZfdD4oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90LCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbD4oc3RhdGUsIHZhbHVlKTsKKyAgICByZXR1cm4gdG9TbWFs
bGVyVUludDx1aW50MTZfdCwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8PiBpbnQzMl90IGNv
bnZlcnRUb0ludGVnZXJFbmZvcmNlUmFuZ2U8aW50MzJfdD4oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IGludDMyX3QgY29udmVydFRvSW50ZWdl
ckVuZm9yY2VSYW5nZTxpbnQzMl90PihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
ICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKIAotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1
cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7CisgICAgcmV0
dXJuIGVuZm9yY2VSYW5nZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB4LCBrTWluSW50MzIsIGtNYXhJ
bnQzMik7CiB9CiAKLXRlbXBsYXRlPD4gdWludDMyX3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VS
YW5nZTx1aW50MzJfdD4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Cit0ZW1wbGF0ZTw+IHVpbnQzMl90IGNvbnZlcnRUb0ludGVnZXJFbmZvcmNlUmFuZ2U8dWludDMy
X3Q+KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZh
bHVlLmFzVUludDMyKCk7CiAKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9
IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShz
dGF0ZSwgeCwgMCwga01heFVJbnQzMik7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB4LCAwLCBrTWF4VUludDMyKTsKIH0KIAotdGVtcGxhdGU8PiBpbnQzMl90
IGNvbnZlcnRUb0ludGVnZXJDbGFtcDxpbnQzMl90PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gaW50MzJfdCBjb252ZXJ0VG9JbnRlZ2VyQ2xh
bXA8aW50MzJfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgIHJl
dHVybiB2YWx1ZS5hc0ludDMyKCk7CiAKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsK
IH0KIAotdGVtcGxhdGU8PiB1aW50MzJfdCBjb252ZXJ0VG9JbnRlZ2VyQ2xhbXA8dWludDMyX3Q+
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiB1
aW50MzJfdCBjb252ZXJ0VG9JbnRlZ2VyQ2xhbXA8dWludDMyX3Q+KEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAo
dmFsdWUuaXNVSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CiAKLSAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgZG91YmxlIHggPSB2YWx1
ZS50b051bWJlcigmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIHN0ZDo6aXNuYW4o
eCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7CiB9CiAKLXRlbXBsYXRlPD4gaW50MzJfdCBj
b252ZXJ0VG9JbnRlZ2VyPGludDMyX3Q+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQordGVtcGxhdGU8PiBpbnQzMl90IGNvbnZlcnRUb0ludGVnZXI8aW50MzJfdD4o
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQogewotICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHZh
bHVlLnRvSW50MzIoJmxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCi10ZW1wbGF0ZTw+IHVpbnQz
Ml90IGNvbnZlcnRUb0ludGVnZXI8dWludDMyX3Q+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiB1aW50MzJfdCBjb252ZXJ0VG9JbnRlZ2VyPHVp
bnQzMl90PihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAg
cmV0dXJuIHZhbHVlLnRvVUludDMyKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIAotdGVtcGxh
dGU8PiBpbnQ2NF90IGNvbnZlcnRUb0ludGVnZXJFbmZvcmNlUmFuZ2U8aW50NjRfdD4oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IGludDY0X3Qg
Y29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTxpbnQ2NF90PihKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZh
bHVlLmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKIAotICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwg
a0pTTWF4SW50ZWdlcik7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7CiB9CiAKLXRlbXBsYXRlPD4g
dWludDY0X3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTx1aW50NjRfdD4oSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IHVpbnQ2NF90IGNv
bnZlcnRUb0ludGVnZXJFbmZvcmNlUmFuZ2U8dWludDY0X3Q+KEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFs
dWUuaXNVSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CiAKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4SW50ZWdl
cik7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB4LCAwLCBr
SlNNYXhJbnRlZ2VyKTsKIH0KIAotdGVtcGxhdGU8PiBpbnQ2NF90IGNvbnZlcnRUb0ludGVnZXJD
bGFtcDxpbnQ2NF90PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3RlbXBsYXRlPD4gaW50NjRfdCBjb252ZXJ0VG9JbnRlZ2VyQ2xhbXA8aW50NjRfdD4oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMy
KCk7CiAKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIHN0
ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihz
dGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pTTWF4SW50ZWdlcikpOwogfQog
Ci10ZW1wbGF0ZTw+IHVpbnQ2NF90IGNvbnZlcnRUb0ludGVnZXJDbGFtcDx1aW50NjRfdD4oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IHVpbnQ2
NF90IGNvbnZlcnRUb0ludGVnZXJDbGFtcDx1aW50NjRfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1
ZS5pc1VJbnQzMigpKQogICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKIAotICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/
IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3Vi
bGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7CiB9CiAKLXRlbXBsYXRlPD4gaW50NjRfdCBjb252
ZXJ0VG9JbnRlZ2VyPGludDY0X3Q+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQordGVtcGxhdGU8PiBpbnQ2NF90IGNvbnZlcnRUb0ludGVnZXI8aW50NjRfdD4oSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc0lu
dDMyKCk7CiAKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKICAgICAvLyBN
YXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVs
byAyXjY0LgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwpAQCAtMzU4LDEyICszNTgsMTIgQEAg
dGVtcGxhdGU8PiBpbnQ2NF90IGNvbnZlcnRUb0ludGVnZXI8aW50NjRfdD4oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUKICAgICByZXR1cm4gbjsKIH0KIAotdGVtcGxhdGU8PiB1
aW50NjRfdCBjb252ZXJ0VG9JbnRlZ2VyPHVpbnQ2NF90PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gdWludDY0X3QgY29udmVydFRvSW50ZWdl
cjx1aW50NjRfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQogICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKIAotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKIAogICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZp
bml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCiAgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1iZXJzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1iZXJzLmgKaW5kZXgg
Mjk0NzJjMzU2YzU2NmE2M2MyMDdiYzY4MDI5OTc2Yzk0OTkyZTc0My4uMGY0N2QzM2IxYjg3MjYx
MmIwNjQ4ZTAzNzIwZjZhZjZkMzk0YjkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMuaApAQCAtMzcsNDMgKzM3LDQzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3Qg
YmUgY29udmVydGVkIHRvIGEgbnVtYmVyIG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lmaWVk
LAogLy8gdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlvbiBp
bnRlZ2VyIHR5cGUuCiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydFRvSW50ZWdlcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTw+IFdFQkNPUkVfRVhQT1JU
IGludDhfdCBjb252ZXJ0VG9JbnRlZ2VyPGludDhfdD4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotdGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCB1aW50OF90IGNvbnZlcnRUb0ludGVn
ZXI8dWludDhfdD4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8PiBX
RUJDT1JFX0VYUE9SVCBpbnQxNl90IGNvbnZlcnRUb0ludGVnZXI8aW50MTZfdD4oSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCB1aW50MTZf
dCBjb252ZXJ0VG9JbnRlZ2VyPHVpbnQxNl90PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci10ZW1wbGF0ZTw+IFdFQkNPUkVfRVhQT1JUIGludDMyX3QgY29udmVydFRvSW50ZWdlcjxp
bnQzMl90PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTw+IFdFQkNP
UkVfRVhQT1JUIHVpbnQzMl90IGNvbnZlcnRUb0ludGVnZXI8dWludDMyX3Q+KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgaW50NjRfdCBj
b252ZXJ0VG9JbnRlZ2VyPGludDY0X3Q+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LXRlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgY29udmVydFRvSW50ZWdlcjx1aW50
NjRfdD4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUIGNvbnZlcnRUb0ludGVnZXJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwotdGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgY29udmVydFRvSW50
ZWdlckVuZm9yY2VSYW5nZTxpbnQ4X3Q+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LXRlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgdWludDhfdCBjb252ZXJ0VG9JbnRlZ2VyRW5mb3Jj
ZVJhbmdlPHVpbnQ4X3Q+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRl
PD4gV0VCQ09SRV9FWFBPUlQgaW50MTZfdCBjb252ZXJ0VG9JbnRlZ2VyRW5mb3JjZVJhbmdlPGlu
dDE2X3Q+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPD4gV0VCQ09S
RV9FWFBPUlQgdWludDE2X3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTx1aW50MTZfdD4o
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9S
VCBpbnQzMl90IGNvbnZlcnRUb0ludGVnZXJFbmZvcmNlUmFuZ2U8aW50MzJfdD4oSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCB1aW50MzJf
dCBjb252ZXJ0VG9JbnRlZ2VyRW5mb3JjZVJhbmdlPHVpbnQzMl90PihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTw+IFdFQkNPUkVfRVhQT1JUIGludDY0X3QgY29udmVy
dFRvSW50ZWdlckVuZm9yY2VSYW5nZTxpbnQ2NF90PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci10ZW1wbGF0ZTw+IFdFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IGNvbnZlcnRUb0ludGVn
ZXJFbmZvcmNlUmFuZ2U8dWludDY0X3Q+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0VG9JbnRlZ2VyQ2xhbXAoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCBpbnQ4X3Qg
Y29udmVydFRvSW50ZWdlckNsYW1wPGludDhfdD4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotdGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCB1aW50OF90IGNvbnZlcnRUb0ludGVnZXJD
bGFtcDx1aW50OF90PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTw+
IFdFQkNPUkVfRVhQT1JUIGludDE2X3QgY29udmVydFRvSW50ZWdlckNsYW1wPGludDE2X3Q+KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQg
dWludDE2X3QgY29udmVydFRvSW50ZWdlckNsYW1wPHVpbnQxNl90PihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTw+IFdFQkNPUkVfRVhQT1JUIGludDMyX3QgY29udmVy
dFRvSW50ZWdlckNsYW1wPGludDMyX3Q+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LXRlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgY29udmVydFRvSW50ZWdlckNsYW1w
PHVpbnQzMl90PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTw+IFdF
QkNPUkVfRVhQT1JUIGludDY0X3QgY29udmVydFRvSW50ZWdlckNsYW1wPGludDY0X3Q+KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgdWlu
dDY0X3QgY29udmVydFRvSW50ZWdlckNsYW1wPHVpbnQ2NF90PihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRUb0ludGVnZXIoSlND
OjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IFdFQkNPUkVfRVhQ
T1JUIGludDhfdCBjb252ZXJ0VG9JbnRlZ2VyPGludDhfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IFdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgY29udmVy
dFRvSW50ZWdlcjx1aW50OF90PihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsK
K3RlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgaW50MTZfdCBjb252ZXJ0VG9JbnRlZ2VyPGludDE2
X3Q+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBXRUJD
T1JFX0VYUE9SVCB1aW50MTZfdCBjb252ZXJ0VG9JbnRlZ2VyPHVpbnQxNl90PihKU0M6OkpTR2xv
YmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgaW50
MzJfdCBjb252ZXJ0VG9JbnRlZ2VyPGludDMyX3Q+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6
OkpTVmFsdWUpOwordGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCBjb252ZXJ0VG9J
bnRlZ2VyPHVpbnQzMl90PihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3Rl
bXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgaW50NjRfdCBjb252ZXJ0VG9JbnRlZ2VyPGludDY0X3Q+
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBXRUJDT1JF
X0VYUE9SVCB1aW50NjRfdCBjb252ZXJ0VG9JbnRlZ2VyPHVpbnQ2NF90PihKU0M6OkpTR2xvYmFs
T2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0
VG9JbnRlZ2VyRW5mb3JjZVJhbmdlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUp
OwordGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgY29udmVydFRvSW50ZWdlckVuZm9y
Y2VSYW5nZTxpbnQ4X3Q+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwordGVt
cGxhdGU8PiBXRUJDT1JFX0VYUE9SVCB1aW50OF90IGNvbnZlcnRUb0ludGVnZXJFbmZvcmNlUmFu
Z2U8dWludDhfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0
ZTw+IFdFQkNPUkVfRVhQT1JUIGludDE2X3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTxp
bnQxNl90PihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4g
V0VCQ09SRV9FWFBPUlQgdWludDE2X3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTx1aW50
MTZfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IFdF
QkNPUkVfRVhQT1JUIGludDMyX3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTxpbnQzMl90
PihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gV0VCQ09S
RV9FWFBPUlQgdWludDMyX3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTx1aW50MzJfdD4o
SlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IFdFQkNPUkVf
RVhQT1JUIGludDY0X3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTxpbnQ2NF90PihKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gV0VCQ09SRV9FWFBP
UlQgdWludDY0X3QgY29udmVydFRvSW50ZWdlckVuZm9yY2VSYW5nZTx1aW50NjRfdD4oSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQg
Y29udmVydFRvSW50ZWdlckNsYW1wKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUp
OwordGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgY29udmVydFRvSW50ZWdlckNsYW1w
PGludDhfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+
IFdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgY29udmVydFRvSW50ZWdlckNsYW1wPHVpbnQ4X3Q+KEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBXRUJDT1JFX0VY
UE9SVCBpbnQxNl90IGNvbnZlcnRUb0ludGVnZXJDbGFtcDxpbnQxNl90PihKU0M6OkpTR2xvYmFs
T2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgdWludDE2
X3QgY29udmVydFRvSW50ZWdlckNsYW1wPHVpbnQxNl90PihKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
SlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gV0VCQ09SRV9FWFBPUlQgaW50MzJfdCBjb252ZXJ0
VG9JbnRlZ2VyQ2xhbXA8aW50MzJfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1
ZSk7Cit0ZW1wbGF0ZTw+IFdFQkNPUkVfRVhQT1JUIHVpbnQzMl90IGNvbnZlcnRUb0ludGVnZXJD
bGFtcDx1aW50MzJfdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1w
bGF0ZTw+IFdFQkNPUkVfRVhQT1JUIGludDY0X3QgY29udmVydFRvSW50ZWdlckNsYW1wPGludDY0
X3Q+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBXRUJD
T1JFX0VYUE9SVCB1aW50NjRfdCBjb252ZXJ0VG9JbnRlZ2VyQ2xhbXA8dWludDY0X3Q+KEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwogCiAvLyBNQVJLOiAtCiAvLyBNQVJLOiBJ
bnRlZ2VyIHR5cGVzCiAKIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgaW50OF90
IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0ludGVnZXI8aW50
OF90PihzdGF0ZSwgdmFsdWUpOworICAgICAgICByZXR1cm4gY29udmVydFRvSW50ZWdlcjxpbnQ4
X3Q+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiB9OwogCkBAIC05MCw5ICs5
MCw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKIH07CiAKIHRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9JbnRlZ2VyPHVpbnQ4X3Q+KHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9JbnRlZ2VyPHVpbnQ4X3Q+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiB9OwogCkBAIC0xMDksOSArMTA5LDkgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKIH07CiAKIHRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7
Ci0gICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBjb252ZXJ0VG9JbnRlZ2VyPGludDE2X3Q+KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9JbnRlZ2VyPGludDE2X3Q+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICB9CiB9OwogCkBAIC0xMjgsOSArMTI4LDkgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRT
aG9ydD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9JbnRlZ2VyPHVpbnQxNl90PihzdGF0ZSwg
dmFsdWUpOworICAgICAgICByZXR1cm4gY29udmVydFRvSW50ZWdlcjx1aW50MTZfdD4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTE0NywxNCArMTQ3LDE0IEBA
IHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKIH07CiAK
IHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMTG9uZz4gewotICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICBzdGF0aWMgaW5saW5l
IGludDMyX3QgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwg
ZG91YmxlIG51bWJlcikKICAgICB7CiAgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVy
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0ludGVnZXI8aW50MzJfdD4oc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0ludGVnZXI8aW50MzJfdD4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTE3MSw5ICsxNzEsOSBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CiB9OwogCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZl
cnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0ludGVnZXI8dWludDMyX3Q+
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9JbnRlZ2VyPHVpbnQzMl90
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogfTsKIApAQCAtMTkwLDkgKzE5
MCw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewog
fTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBpbnQ2NF90
IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0ludGVnZXI8aW50
NjRfdD4oc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0ludGVnZXI8aW50
NjRfdD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTIwOSw5
ICsyMDksOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewog
fTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2
NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb0ludGVnZXI8dWludDY0X3Q+KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBj
b252ZXJ0VG9JbnRlZ2VyPHVpbnQ2NF90PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgfQogfTsKIApAQCAtMjMzLDkgKzIzMyw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQ2xhbXBBZGFwdG9yPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2xhbXBB
ZGFwdG9yPFQ+PiB7CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETENsYW1wQWRh
cHRvcjxUPjo6SW1wbGVtZW50YXRpb25UeXBlOwogCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
VG9JbnRlZ2VyQ2xhbXA8UmV0dXJuVHlwZT4oc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb0ludGVnZXJDbGFtcDxSZXR1cm5UeXBlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgfQogfTsKIApAQCAtMjU1LDkgKzI1NSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDbGFtcEFkYXB0b3I8VD4+IHsKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW5mb3JjZVJhbmdlQWRhcHRvcjxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEVuZm9yY2VSYW5nZUFkYXB0b3I8VD4+IHsKICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMRW5mb3JjZVJhbmdlQWRhcHRvcjxUPjo6SW1wbGVtZW50
YXRpb25UeXBlOwogCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9JbnRlZ2VyRW5mb3JjZVJh
bmdlPFJldHVyblR5cGU+KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9J
bnRlZ2VyRW5mb3JjZVJhbmdlPFJldHVyblR5cGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICB9CiB9OwogCkBAIC0yNzksMjAgKzI3OSwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW5mb3JjZVJhbmdlQWRhcHRvcjxUPj4gewogCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExG
bG9hdD4gewogCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICBzdGF0
aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKICAgICB7CiAg
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICB0aHJv
d05vbkZpbml0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAg
ICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKICAgICB9CiB9OwpAQCAt
MzEwLDE0ICszMTAsMTQgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+
IHsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9h
dD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGlj
IGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
ZG91YmxlIG51bWJlcikKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCiAgICAgewogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CiAgICAgfQogCi0gICAgc3Rh
dGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmbGV4aWNhbEdsb2JhbE9iamVj
dCkpOwogICAgIH0KIH07CiAKQEAgLTMzNCwyMCArMzM0LDIwIEBAIHRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7
Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgc3RhdGljIGlubGlu
ZSBkb3VibGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQogICAgIHsKICAgICAgICAg
aWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHRocm93Tm9uRmlu
aXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJu
IG51bWJlcjsKICAgICB9CiAKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVt
YmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZh
bHVlLnRvTnVtYmVyKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIG51bWJlcjsKICAg
ICB9CiB9OwpAQCAtMzY2LDE0ICszNjYsMTQgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRG91YmxlPiB7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
PiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgc3RhdGljIGlubGluZSBkb3VibGUg
Y29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51
bWJlcikKICAgICB7CiAgICAgICAgIHJldHVybiBudW1iZXI7CiAgICAgfQogCi0gICAgc3RhdGlj
IGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydE9iamVjdC5oCmluZGV4IDA5NjkwNjQyYTUyNjU1ZjhmOGNi
NGQ0Y2I3ZDNmODA2YjgyNDYxN2IuLjQ0OTBkNjU1NTg0OTg4ZGU4YjlhN2ZkMWU0ODQ2ZDc4NTFk
NzYyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE9i
amVjdC5oCkBAIC0zNiwxMyArMzYsMTMgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4gewogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBjb252ZXJzaW9uSGFzU2lkZUVmZmVjdHMgPSBmYWxzZTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
LSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3RhdGljIEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKICAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0UHJvbWlzZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0UHJvbWlzZS5oCmluZGV4IGY2MGIwMzNkZjM1M2JjMzhkNmEzYTdkZjdkZGY5ZjY0
YTQ3ZjM4ZTcuLjNlYTIzNzI4MWExY2ZjMTFjYWY2NzBhOTRmNDEwNWI0NWU4NmE1YzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFByb21pc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRQcm9taXNlLmgKQEAg
LTM2LDE5ICszNiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TFByb21pc2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExQcm9taQogCiAgICAgLy8gaHR0cHM6
Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtcHJvbWlzZQogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCiAgICAgewotICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gSlNDOjpq
c0R5bmFtaWNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4odm0sIHN0YXRlLmxleGljYWxHbG9iYWxP
YmplY3QoKSk7CisgICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHZtLCAmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAg
IGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAg
ICAgLy8gMS4gTGV0IHJlc29sdmUgYmUgdGhlIG9yaWdpbmFsIHZhbHVlIG9mICVQcm9taXNlJS5y
ZXNvbHZlLgogICAgICAgICAvLyAyLiBMZXQgcHJvbWlzZSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxp
bmcgcmVzb2x2ZSB3aXRoICVQcm9taXNlJSBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgViBhcyB0aGUg
c2luZ2xlIGFyZ3VtZW50IHZhbHVlLgotICAgICAgICBhdXRvKiBwcm9taXNlID0gSlNDOjpKU1By
b21pc2U6OnJlc29sdmUoKmdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgICAgICBhdXRvKiBwcm9t
aXNlID0gSlNDOjpKU1Byb21pc2U6OnJlc29sdmUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
ICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
fQogICAgICAgICBBU1NFUlQocHJvbWlzZSk7CkBAIC02MiwxNSArNjIsMTUgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFByb21pc2U8VD4+IHsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRE9NUHJvbWlz
ZSYgcHJvbWlzZSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRE9NUHJvbWlzZSYgcHJvbWlzZSkKICAgICB7
CiAgICAgICAgIHJldHVybiBwcm9taXNlLnByb21pc2UoKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVPFQ+JiBwcm9taXNlUHJveHkpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFU8VD4mIHByb21pc2VQcm94eSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBwcm9taXNlUHJveHkucHJvbWlzZShzdGF0ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
cmV0dXJuIHByb21pc2VQcm94eS5wcm9taXNlKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0UmVjb3JkLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnRSZWNvcmQuaAppbmRleCBiYjg2NjBiNGMzYjNkMzkxNWZlMDIyNDA5NDI0MTUzMjQ0
OTRlZWM1Li42MGNiNjRhOWU2OWVhOTQ5YjMyYjQ4NjE3YmY5ZWRhNDdkYWUzNjI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaApAQCAtMzgs
MjMgKzM4LDIzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+CiBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRl
cjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlk
ZW50aWZpZXIpCiAgICAgewogICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKICAg
ICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVT
dHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKICAgICB7Ci0gICAgICAgIHJldHVybiBpZGVudGlm
aWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuIGlkZW50
aWZpZXJUb0J5dGVTdHJpbmcobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllcik7CiAgICAg
fQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJp
bmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgc3RhdGljIFN0cmluZyBjb252
ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgaWRlbnRpZmllcikKICAgICB7Ci0gICAgICAgIHJldHVybiBpZGVudGlmaWVy
VG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICByZXR1cm4gaWRlbnRpZmll
clRvVVNWU3RyaW5nKGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXIpOwogICAgIH0KIH07
CiAKQEAgLTY1LDIxICs2NSwyMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBz
dHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udgogICAgIHVzaW5n
IEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7CiAgICAgdXNpbmcgVmFs
dWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOwogCi0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBjb252ZXJ0UmVjb3JkPEpTRE9NR2xvYmFsT2JqZWN0Jj4oc3RhdGUsIHZh
bHVlLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gY29udmVydFJlY29yZDxKU0RPTUds
b2JhbE9iamVjdCY+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFs
dWUpCiAgICAgewotICAgICAgICByZXR1cm4gY29udmVydFJlY29yZChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICByZXR1cm4gY29udmVydFJlY29yZChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgfQogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzLi4uQXJncz4KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0UmVjb3JkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBBcmdzIC4uLiBhcmdzKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnRSZWNvcmQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBBcmdzIC4uLiBhcmdzKQogICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNv
cmQ8SywgVj4uCkBAIC04OSw3ICs4OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1l
IFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252CiAgICAg
ICAgIAogICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlw
ZUVycm9yLgogICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC05OSw3ICs5OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEss
IHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRD
b252CiAgICAgCiAgICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5
c11dKCkuCiAgICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cyh2bSwgSlNDOjpQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBKU0M6OlByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
LSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKEpTQzo6RG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBrZXlzLCBK
U0M6OkVudW1lcmF0aW9uTW9kZShKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUp
KTsKIAogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCkBAIC0xMDcs
NyArMTA3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZl
cnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnYKICAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBrZXlzKSB7CiAgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Q
cm9wZXJ0eV1dKGtleSkuCiAgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNj
cmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAg
ICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoJmxleGljYWxHbG9iYWxPYmplY3QsIGtleSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgICAgICAvLyAyLiBJZiBk
ZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKQEAg
LTExNiwxNSArMTE2LDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252CiAgICAgICAgICAgICAv
LyB0byBwcmV2ZW50IGFuIG9ic2VydmFibGUgZXh0cmEgW1tHZXRPd25Qcm9wZXJ0eV1dIG9wZXJh
dGlvbiBpbiB0aGUgY2FzZSBvZiBQcm94eU9iamVjdCByZWNvcmRzLgogICAgICAgICAgICAgaWYg
KGRpZEdldERlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFs
dWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6Oklk
ZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisgICAgICAgICAgICAg
ICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVy
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBrZXkpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUg
YmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmpl
Y3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwga2V5KTsKICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgICAgICAgICAgLy8gMy4gTGV0
IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYu
Ci0gICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0
KHN0YXRlLCBzdWJWYWx1ZSwgYXJncy4uLik7CisgICAgICAgICAgICAgICAgYXV0byB0eXBlZFZh
bHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHN1YlZhbHVl
LCBhcmdzLi4uKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5
IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUu
CkBAIC0xNDYsMTIgKzE0NiwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYg
bWFwKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBNYXBUeXBlJiBtYXApCiAgICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgCiAgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFBy
b3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIDIuIFJlcGVhdCwg
Zm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKICAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKQEAgLTE2MCw3ICsxNjAsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+
PiB7CiAgICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgogCiAgICAg
ICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNj
cmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGds
b2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKKyAgICAgICAgICAgIGF1dG8gZXNWYWx1
ZSA9IHRvSlM8Vj4obGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBh
aXIudmFsdWUpOwogCiAgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURh
dGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KICAgICAgICAgICAgIGJvb2wgY3Jl
YXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFNjaGVkdWxlZEFjdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U2NoZWR1bGVkQWN0aW9uLmgKaW5kZXggZjcw
NDA0NWFmYzkyN2ZjYWExOWMxOGU1YTQ4ZDY5MmI2ZmRhOGIyMi4uZDE2ZDIzZmQ0YjE4NDE1YTJk
ODkwYWYyYzAxYTM1YjY4ZDU0N2UxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0U2NoZWR1bGVkQWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0U2NoZWR1bGVkQWN0aW9uLmgKQEAgLTMzLDE0ICszMywx
NCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMU2NoZWR1bGVkQWN0aW9uPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2NoZWR1bGVkQWN0aW9u
PiB7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRB
Y3Rpb24+IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBKU0M6OlZNJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgSlNDOjpDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICAgICAgaWYgKGdldENhbGxEYXRhKHZtLCB2YWx1ZSwgY2FsbERhdGEpID09IEpT
Qzo6Q2FsbFR5cGU6Ok5vbmUpIHsKLSAgICAgICAgICAgIGF1dG8gY29kZSA9IENvbnZlcnRlcjxJ
RExET01TdHJpbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBhdXRvIGNv
ZGUgPSBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKICAgICAgICAgICAgIHJldHVybiBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShnbG9iYWxPYmpl
Y3Qud29ybGQoKSwgV1RGTW92ZShjb2RlKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFNlcXVlbmNlcy5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U2VxdWVuY2VzLmgKaW5kZXggM2FlOTM5ZTQ1
MmEyMmI3ODU5ZWFlOWFiOTUxMDgwZTAwNjQ1ZWRjZS4uYzQ5ZGQ5MzhmY2UyNzE2NWY3NDdlNThm
ZTA4YTU1M2RiYmZkZjVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0U2VxdWVuY2VzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0U2VxdWVuY2VzLmgKQEAgLTQyLDE3ICs0MiwxNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgogc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CiAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU+OwogCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNPYmplY3QqIG9iamVjdCkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3Qq
IG9iamVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0KHN0YXRlLCBvYmplY3QsIFJl
dHVyblR5cGUoKSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3Qs
IG9iamVjdCwgUmV0dXJuVHlwZSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCogb2JqZWN0LCBSZXR1
cm5UeXBlJiYgcmVzdWx0KQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCogb2JqZWN0LCBS
ZXR1cm5UeXBlJiYgcmVzdWx0KQogICAgIHsKLSAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0
YXRlLCBvYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTVmFsdWUgbmV4dFZhbHVlKSB7CisgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBvYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIG5leHRWYWx1
ZSkgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KCpzdGF0ZSwgbmV4dFZhbHVlKTsKKyAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKmxleGljYWxHbG9iYWxPYmplY3QsIG5l
eHRWYWx1ZSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92
ZShjb252ZXJ0ZWRWYWx1ZSkpOwpAQCAtNjAsMTcgKzYwLDE3IEBAIHN0cnVjdCBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXIgewogICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogICAgIH0K
IAotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6SlNWYWx1ZSBtZXRob2QpCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6SlNWYWx1ZSBtZXRob2QpCiAgICAgewotICAg
ICAgICByZXR1cm4gY29udmVydChzdGF0ZSwgb2JqZWN0LCBtZXRob2QsIFJldHVyblR5cGUoKSk7
CisgICAgICAgIHJldHVybiBjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIG9iamVjdCwgbWV0
aG9kLCBSZXR1cm5UeXBlKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6SlNW
YWx1ZSBtZXRob2QsIFJldHVyblR5cGUmJiByZXN1bHQpCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpT
T2JqZWN0KiBvYmplY3QsIEpTQzo6SlNWYWx1ZSBtZXRob2QsIFJldHVyblR5cGUmJiByZXN1bHQp
CiAgICAgewotICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZShzdGF0ZSwgb2JqZWN0LCBtZXRob2Qs
IFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgbmV4dFZhbHVlKSB7CisgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKGxleGljYWxHbG9iYWxP
YmplY3QsIG9iamVjdCwgbWV0aG9kLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBuZXh0VmFsdWUpIHsK
ICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
ICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgbmV4dFZhbHVlKTsKKyAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgbmV4dFZhbHVl
KTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZl
cnRlZFZhbHVlKSk7CkBAIC04OCw3ICs4OCw3IEBAIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252
ZXJ0ZXIgewogICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252
ZXJ0ZXI8SURMVHlwZT47CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWND
b252ZXJ0ZXI6OlJldHVyblR5cGU7CiAKLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0QXJy
YXkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBKU0M6OkpT
QXJyYXkqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgsIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSwgUmV0dXJuVHlwZSYmIHJlc3VsdCkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
QXJyYXkoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgSlNDOjpKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoLCBKU0M6
OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIFJldHVyblR5cGUmJiByZXN1bHQpCiAgICAgewog
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMDgsNyArMTA4
LDcgQEAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CiAgICAgICAgICAgICBpZiAo
c3RkOjppc25hbihkb3VibGVWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCgwKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBk
b3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZG91Ymxl
VmFsdWUpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKQEAgLTExNywyMyArMTE3LDIzIEBAIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIg
ewogICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogICAgIH0KIAotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBh
dXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAg
IHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHRocm93
U2VxdWVuY2VUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQogCiAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwogICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9i
amVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0
ZSwgb2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0
KGxleGljYWxHbG9iYWxPYmplY3QsIG9iamVjdCk7CiAKICAgICAgICAgSlNDOjpKU0FycmF5KiBh
cnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwogICAgICAgICBpZiAoIWFycmF5LT5pc0l0ZXJh
dG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisgICAgICAgICAgICByZXR1
cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCBvYmplY3Qp
OwogCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7CkBAIC0xNDUsMjggKzE0NSwyOCBAQCBzdHJ1Y3QgTnVtZXJpY1Nl
cXVlbmNlQ29udmVydGVyIHsKICAgICAgICAgLy8gSWYgd2UgYXJlIGFuIGludDMyL2RvdWJsZSBh
cnJheSwgdGhlbiBsZW5ndGggaXMgcHJlY2lzZWx5IHRoZSBjYXBhY2l0eSB3ZSBuZWVkLgogICAg
ICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4geyB9
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwog
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlICE9IEpTQzo6SW50MzJTaGFwZSAmJiBpbmRleGluZ1R5
cGUgIT0gSlNDOjpEb3VibGVTaGFwZSkKLSAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QsIFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgICAg
ICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCBv
YmplY3QsIFdURk1vdmUocmVzdWx0KSk7CiAKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJheShz
dGF0ZSwgc2NvcGUsIGFycmF5LCBsZW5ndGgsIGluZGV4aW5nVHlwZSwgV1RGTW92ZShyZXN1bHQp
KTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJheShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgYXJyYXksIGxlbmd0aCwgaW5kZXhpbmdUeXBlLCBXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6SlNWYWx1ZSBtZXRob2QpCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6SlNWYWx1ZSBtZXRob2QpCiAgICAgewotICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0g
ICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0
LCBtZXRob2QpOworICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBtZXRob2QpOwogCiAgICAgICAgIEpTQzo6SlNB
cnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKICAgICAgICAgaWYgKCFhcnJheS0+
aXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QsIG1ldGhvZCk7Cisg
ICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBvYmplY3QsIG1ldGhvZCk7CiAKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJy
YXktPmxlbmd0aCgpOwogICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKQEAgLTE3OCwxNSArMTc4
LDE1IEBAIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewogICAgICAgICAvLyBJZiB3
ZSBhcmUgYW4gaW50MzIvZG91YmxlIGFycmF5LCB0aGVuIGxlbmd0aCBpcyBwcmVjaXNlbHkgdGhl
IGNhcGFjaXR5IHdlIG5lZWQuCiAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0
eShsZW5ndGgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlv
biB0byB0aHJvdz8KLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsK
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpT
Qzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpT
Qzo6SW5kZXhpbmdTaGFwZU1hc2s7CiAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgIT0gSlNDOjpJ
bnQzMlNoYXBlICYmIGluZGV4aW5nVHlwZSAhPSBKU0M6OkRvdWJsZVNoYXBlKQotICAgICAgICAg
ICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCwgbWV0aG9k
LCBXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6
OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBtZXRob2QsIFdURk1vdmUocmVz
dWx0KSk7CiAKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRBcnJheShzdGF0ZSwgc2NvcGUsIGFycmF5
LCBsZW5ndGgsIGluZGV4aW5nVHlwZSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRBcnJheShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgYXJyYXksIGxlbmd0aCwg
aW5kZXhpbmdUeXBlLCBXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH0KIH07CiAKQEAgLTE5NSwxNCAr
MTk1LDE0IEBAIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CiAgICAgdXNpbmcgR2VuZXJpY0Nv
bnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKIAotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnRBcnJheShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIEpTQzo6SlNBcnJheSogYXJyYXkpCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydEFycmF5KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIEpTQzo6SlNBcnJheSogYXJyYXkpCiAgICAg
ewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAKICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7CiAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0
eShsZW5ndGgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlv
biB0byB0aHJvdz8KLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsK
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KIApAQCAtMjE0LDcgKzIxNCw3IEBA
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CiAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQogICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgp
OwogCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBpbmRleFZhbHVlKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7CkBAIC0yMjMsMTMgKzIyMywxMyBAQCBzdHJ1Y3QgU2VxdWVuY2VDb252
ZXJ0ZXIgewogICAgICAgICB9CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGly
ZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5
LT5nZXREaXJlY3RJbmRleCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCiAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsK
IAotICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIGlu
ZGV4VmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0
ZWRWYWx1ZSk7CkBAIC0yMzcsNDYgKzIzNyw0NiBAQCBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIg
ewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93U2Vx
dWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHRocm93U2VxdWVuY2VU
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICAgICAgfQogCiAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6
YXNPYmplY3QodmFsdWUpOwogICAgICAgICBpZiAoQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJz
aW9uSGFzU2lkZUVmZmVjdHMpCi0gICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6
Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIG9iamVjdCk7CiAKICAgICAgICAgaWYg
KCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252
ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCBvYmplY3QpOwogCiAgICAg
ICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKICAgICAgICAg
aWYgKCFhcnJheS0+aXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3Qp
OworICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQobGV4aWNhbEds
b2JhbE9iamVjdCwgb2JqZWN0KTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBjb252ZXJ0QXJy
YXkoc3RhdGUsIHNjb3BlLCBhcnJheSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0QXJyYXkobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGFycmF5KTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCogb2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgbWV0aG9kKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCog
b2JqZWN0LCBKU0M6OkpTVmFsdWUgbWV0aG9kKQogICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICAgICAgaWYgKENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVyc2lvbkhhc1NpZGVFZmZlY3Rz
KQotICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCwgbWV0aG9kKTsKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIG9iamVjdCwgbWV0aG9kKTsKIAogICAgICAgICBpZiAo
IUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0LCBtZXRob2QpOworICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBt
ZXRob2QpOwogCiAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2Jq
ZWN0KTsKICAgICAgICAgaWYgKCFhcnJheS0+aXNJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9i
c2VydmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0
KHN0YXRlLCBvYmplY3QsIG1ldGhvZCk7CisgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCBvYmplY3QsIG1ldGhvZCk7CiAKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRBcnJheShzdGF0ZSwgc2NvcGUsIGFycmF5KTsKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRBcnJheShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgYXJyYXkpOwog
ICAgIH0KIH07CiAKQEAgLTI4NCwxNCArMjg0LDE0IEBAIHRlbXBsYXRlPD4KIHN0cnVjdCBTZXF1
ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKIAotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
TG9uZz46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIAotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
T2JqZWN0KiBvYmplY3QsIEpTQzo6SlNWYWx1ZSBtZXRob2QpCisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6SlNWYWx1ZSBtZXRob2QpCiAgICAgewotICAgICAgICBy
ZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCBv
YmplY3QsIG1ldGhvZCk7CisgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMTG9uZz46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBtZXRob2QpOwog
ICAgIH0KIH07CiAKQEAgLTI5OSwxNCArMjk5LDE0IEBAIHRlbXBsYXRlPD4KIHN0cnVjdCBTZXF1
ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewogICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOwogCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMRmxvYXQ+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkpTVmFsdWUgbWV0aG9kKQorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkpTVmFsdWUgbWV0aG9kKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3Rh
dGUsIG9iamVjdCwgbWV0aG9kKTsKKyAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExGbG9hdD46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBtZXRo
b2QpOwogICAgIH0KIH07CiAKQEAgLTMxNCwxNCArMzE0LDE0IEBAIHRlbXBsYXRlPD4KIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewogICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwogCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U09iamVjdCogb2JqZWN0LCBKU0M6OkpTVmFsdWUgbWV0aG9kKQorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkpTVmFsdWUgbWV0aG9kKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCwgbWV0aG9kKTsKKyAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQobGV4aWNhbEdsb2Jh
bE9iamVjdCwgb2JqZWN0LCBtZXRob2QpOwogICAgIH0KIH07CiAKQEAgLTMyOSwxNCArMzI5LDE0
IEBAIHRlbXBsYXRlPD4KIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TERvdWJsZT46OlJldHVyblR5cGU7CiAKLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlNDOjpK
U1ZhbHVlIG1ldGhvZCkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlND
OjpKU1ZhbHVlIG1ldGhvZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgb2JqZWN0LCBtZXRob2QpOworICAg
ICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBtZXRob2QpOwogICAgIH0KIH07CiAKQEAgLTM0
NCwxNCArMzQ0LDE0IEBAIHRlbXBsYXRlPD4KIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+IHsKICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7
CiAKLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBOdW1l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlND
OjpKU1ZhbHVlIG1ldGhvZCkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QqIG9iamVjdCwg
SlNDOjpKU1ZhbHVlIG1ldGhvZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgb2JqZWN0
LCBtZXRob2QpOworICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBt
ZXRob2QpOwogICAgIH0KIH07CiAKQEAgLTM2MCwxNCArMzYwLDE0IEBAIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
ZXF1ZW5jZTxUPj4gewogICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwogCi0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBEZXRh
aWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkpTVmFs
dWUgbWV0aG9kKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkpT
VmFsdWUgbWV0aG9kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIG9iamVjdCwgbWV0aG9kKTsKKyAgICAgICAgcmV0dXJu
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVj
dCwgb2JqZWN0LCBtZXRob2QpOwogICAgIH0KIH07CiAKQEAgLTM3NiwzMiArMzc2LDMyIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKICAgICB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gZXhlYy52bSgpOworICAgICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAg
ICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBl
bmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgICAgIGxp
c3QuYXBwZW5kKHRvSlM8VD4obGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBlbGVt
ZW50KSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShsaXN0Lmhhc092ZXJmbG93ZWQoKSkpIHsKLSAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcigmZXhlYywgc2NvcGUpOworICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAg
ICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU0M6OmNv
bnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
SlNDOjpBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIGxpc3QpOwogICAgIH0KIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewogICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlOwogCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkpTVmFsdWUgbWV0aG9kKQorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkpTVmFsdWUgbWV0aG9kKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCwgbWV0aG9kKTsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8
VD46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0LCBtZXRob2QpOwogICAgIH0K
IH07CiAKQEAgLTQxMCwxOSArNDEwLDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBh
Y2l0eT4mIHZlY3RvcikKICAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOwor
ICAgICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIEpT
Qzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxP
YmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4obGV4aWNh
bEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShsaXN0Lmhhc092ZXJmbG93ZWQoKSkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcigmZXhlYywgc2NvcGUpOworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICB9Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhl
YywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJldHVybiBKU0M6Om9i
amVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgICAgIGF1dG8qIGFycmF5
ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU0M6OkFy
cmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgbGlzdCk7CisgICAgICAgIHJldHVybiBK
U0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcnJheSk7
CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0U2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCAxMGI2OWY5YWM4
ZGZkYTg4Y2JjYmVhYWM3MDgzZWI2MGQ1ZjJiMGU1Li5iYTcxNGZmNjdjYjdjOTg3OGMwZmZlOTBi
NWU2ZDkwNjhiNzExY2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtMzEsOSAr
MzEsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNy
ZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiB9OwogCkBAIC00MSw5ICs0MSw5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
VD4+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xv
YmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVl
LT5kZXNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6
anNOdWxsKCk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0U3RyaW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRTdHJpbmdzLmNwcAppbmRleCAxODdmM2QzY2YyM2RlYTRkZjRjMjcwODEw
MDFhNTRkMjIzNDI4MzJmLi5lYWIwMWY3MzYwYzAxNmU5YTFkNDQwMzRlODBlNDM3YTM1MjJkZTg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJp
bmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJp
bmdzLmNwcApAQCAtMzIsMzQgKzMyLDM0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi1zdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmco
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5n
KQorc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9CeXRlU3RyaW5nKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBz
dHJpbmcpCiB7CiAgICAgaWYgKCFzdHJpbmcuaXNBbGxMYXRpbjEoKSkgewotICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICByZXR1cm4gV1RGTW92ZShzdHJpbmcpOwogfQogCi1TdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0
cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorU3Ry
aW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byBzdHJpbmcgPSBp
ZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUs
IHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmco
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7CiB9CiAKLVN0cmlu
ZyB2YWx1ZVRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorU3Ry
aW5nIHZhbHVlVG9CeXRlU3RyaW5nKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8gc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0
YXRlKTsKKyAgICBhdXRvIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgcmV0
dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cisg
ICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
V1RGTW92ZShzdHJpbmcpKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGhhc1VucGFpcmVkU3Vy
cm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQpAQCAtOTQsMTggKzk0LDE4IEBAIHN0YXRpYyBpbmxp
bmUgU3RyaW5nIHN0cmluZ1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykKICAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhl
Y1N0YXRlJiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK1N0cmluZyBpZGVudGlmaWVy
VG9VU1ZTdHJpbmcoSlNHbG9iYWxPYmplY3QmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQogewogICAgIGF1dG8gc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKICAgICByZXR1cm4g
c3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKIH0KIAotU3RyaW5nIHZhbHVlVG9V
U1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK1N0cmluZyB2YWx1ZVRv
VVNWU3RyaW5nKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIGF1dG8gc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBh
dXRvIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgcmV0dXJuIHN0cmluZ1Rv
VVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmgKaW5kZXggYjliNDc0ZDBlNDUxZWM2NjkxODljMGMw
NDE0NTAxZWJkOTUyNWY5ZS4uOTc5OGY1NzM2NTc5NDMyZDI5ODNmYjk5ZGMzYTEzODI1Y2YzZmJm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U3Ry
aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmlu
Z3MuaApAQCAtMzEsMTAgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBj
b25zdCBKU0M6OklkZW50aWZpZXImKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0
ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBT
dHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRp
ZmllclRvQnl0ZVN0cmluZyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRp
ZmllclRvVVNWU3RyaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwogCiBpbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFtZVRv
U3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKQEAgLTUxLDkgKzUxLDkg
QEAgaW5saW5lIEF0b21TdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9tU3RyaW5nKEpTQzo6UHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKIC8vIE1BUks6IFN0cmluZyB0eXBlcwogCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9N
U3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9CiB9
OwogCkBAIC02MSwyNiArNjEsMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwog
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
dmFsdWUpOworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmbGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFVuY2FjaGVkU3RyaW5nJiB2YWx1ZSkK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgVW5jYWNoZWRTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmcoc3RhdGUudm0oKSwgdmFsdWUuc3RyaW5nKTsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmcoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHZhbHVlLnN0cmluZyk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgT3duZWRTdHJpbmcmIHZhbHVlKQorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjb25zdCBPd25lZFN0cmluZyYgdmFsdWUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc093bmVkU3RyaW5nKHN0YXRlLnZtKCksIHZhbHVlLnN0cmluZyk7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzT3duZWRTdHJpbmcoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHZhbHVlLnN0cmluZyk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7
Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlVG9CeXRlU3RyaW5nKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9
CiB9OwogCkBAIC04OCwyNiArODgsMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQnl0ZVN0cmluZz4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJmxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBVbmNhY2hlZFN0cmluZyYgdmFs
dWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IFVuY2FjaGVkU3RyaW5nJiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nKHN0YXRlLnZtKCksIHZhbHVlLnN0cmluZyk7
CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCB2YWx1ZS5zdHJpbmcpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IE93bmVkU3RyaW5nJiB2YWx1ZSkK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgT3duZWRTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNPd25lZFN0cmluZyhzdGF0ZS52bSgpLCB2YWx1ZS5zdHJpbmcpOwor
ICAgICAgICByZXR1cm4gSlNDOjpqc093bmVkU3RyaW5nKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB2YWx1ZS5zdHJpbmcpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJl
dHVybiB2YWx1ZVRvVVNWU3RyaW5nKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9
CiB9OwogCkBAIC0xMTUsMTkgKzExNSwxOSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVU1ZTdHJpbmc+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgVW5jYWNoZWRTdHJpbmcmIHZh
bHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBVbmNhY2hlZFN0cmluZyYgdmFsdWUpCiAgICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZyhzdGF0ZS52bSgpLCB2YWx1ZS5zdHJpbmcp
OworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZyhKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KSwgdmFsdWUuc3RyaW5nKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBPd25lZFN0cmluZyYgdmFsdWUp
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IE93bmVkU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzT3duZWRTdHJpbmcoc3RhdGUudm0oKSwgdmFsdWUuc3RyaW5nKTsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNPd25lZFN0cmluZyhKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgdmFsdWUuc3RyaW5nKTsKICAgICB9CiB9OwogCkBAIC0xMzUsMTEgKzEzNSwx
MSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKIC8vIE1B
Uks6IFN0cmluZyB0eXBlIGFkYXB0b3JzCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxUPj4gewotICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgp
KQogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogfTsKIApA
QCAtMTQ3LDE4ICsxNDcsMTggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gIHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxUPj4gewogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiB9Owog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEF0b21TdHJpbmdBZGFw
dG9yPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQXRvbVN0cmluZ0FkYXB0b3I8VD4+IHsKLSAg
ICBzdGF0aWMgQXRvbVN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBBdG9tU3RyaW5nIGNvbnZlcnQoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsK
ICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8VCwgSURMRE9NU3RyaW5nPjo6dmFs
dWUsICJUaGlzIGFkYXB0b3IgaXMgb25seSBzdXBwb3J0ZWQgZm9yIElETERPTVN0cmluZyBhdCB0
aGUgbW9tZW50LiIpOwogCi0gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT50
b0F0b21TdHJpbmcoJnN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+dG9BdG9tU3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICB9CiB9OwogCkBAIC0xNjYsMjAgKzE2NiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAgc3Ry
dWN0IEpTQ29udmVydGVyPElETEF0b21TdHJpbmdBZGFwdG9yPFQ+PiB7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8VCwgSURMRE9NU3RyaW5nPjo6dmFsdWUsICJUaGlz
IGFkYXB0b3IgaXMgb25seSBzdXBwb3J0ZWQgZm9yIElETERPTVN0cmluZyBhdCB0aGUgbW9tZW50
LiIpOwogCi0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMUmVxdWlyZXNFeGlzdGluZ0F0b21TdHJpbmdBZGFwdG9yPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMUmVxdWlyZXNFeGlzdGluZ0F0b21TdHJpbmdBZGFwdG9yPFQ+PiB7
Ci0gICAgc3RhdGljIEF0b21TdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgQXRvbVN0cmluZyBjb252ZXJ0KEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPFQsIElETERPTVN0cmluZz46
OnZhbHVlLCAiVGhpcyBhZGFwdG9yIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBJRExET01TdHJpbmcg
YXQgdGhlIG1vbWVudC4iKTsKICAgICAKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcodmFsdWUu
dG9TdHJpbmcoJnN0YXRlKS0+dG9FeGlzdGluZ0F0b21TdHJpbmcoJnN0YXRlKSk7CisgICAgICAg
IHJldHVybiBBdG9tU3RyaW5nKHZhbHVlLnRvU3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
dG9FeGlzdGluZ0F0b21TdHJpbmcoJmxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICB9CiB9Owog
CkBAIC0xODcsMTEgKzE4NywxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAgc3RydWN0IEpTQ29u
dmVydGVyPElETFJlcXVpcmVzRXhpc3RpbmdBdG9tU3RyaW5nQWRhcHRvcjxUPgogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKIAotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVl
KQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPFQsIElETERPTVN0cmluZz46OnZhbHVlLCAi
VGhpcyBhZGFwdG9yIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBJRExET01TdHJpbmcgYXQgdGhlIG1v
bWVudC4iKTsKIAotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAppbmRleCAyMzU3MTU3MzcyZDI1Y2ZjNTYzMWY5
NTdjYjJjNmI0MWMzNjQzYjk5Li5jZDhlY2Q4YjdjNjNiYTlhNjc4N2JjY2RlMGY4ZDhkNmIxYmFk
YzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRV
bmlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9u
LmgKQEAgLTYyLDE1ICs2MiwxNSBAQCBzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAgIHN0YXRpYyBPcHRpb25hbDxS
ZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHN0YXRpYyBPcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KIHN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBPcHRpb25hbDxSZXR1cm5UeXBl
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHN0YXRpYyBPcHRp
b25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFs
dWUpCiAgICAgewogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KQEAgLTgxLDE1
ICs4MSwxNSBAQCBzdHJ1Y3QgQ29uZGl0aW9uYWxTZXF1ZW5jZUNvbnZlcnRlcjsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KIHN0cnVjdCBDb25kaXRpb25hbFNl
cXVlbmNlQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0aWMgT3B0aW9u
YWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCwgSlNDOjpKU1ZhbHVlIG1ldGhvZCkKKyAgICBzdGF0aWMgT3B0aW9uYWw8UmV0
dXJuVHlwZT4gY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6SlNWYWx1ZSBtZXRob2QpCiAgICAgewotICAg
ICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIG9iamVj
dCwgbWV0aG9kKSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29u
dmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCBvYmplY3QsIG1ldGhvZCkpOwogICAgIH0KIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgQ29uZGl0
aW9uYWxTZXF1ZW5jZUNvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRp
YyBPcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09i
amVjdCosIEpTQzo6SlNWYWx1ZSkKKyAgICBzdGF0aWMgT3B0aW9uYWw8UmV0dXJuVHlwZT4gY29u
dmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTYzLDE2ICsx
NjMsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlv
bjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFUKICAgICB1c2luZyBJbnRlcmZhY2VUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6
XzE+PjsKICAgICB1c2luZyBUeXBlZEFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMVHlwZWRBcnJheTxicmlnYW5kOjpfMT4+OwogCi0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEg
bnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSBudWxsLgogICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJy
aWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46
OnZhbHVlOwogICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKICAgICAgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQobGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpLnZhbHVlKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUg
dW5pb24gdHlwZS4KQEAgLTE4Miw3ICsxODIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVQog
ICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICByZXR1
cm4gQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0Rp
Y3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlU
eXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpLnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjAwLDcgKzIwMCw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4u
Lj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVCiAgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVt
ZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwogICAgICAg
ICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwogCi0gICAg
ICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IEpTVG9XcmFwcGVkT3ZlcmxvYWRlcjxSYXdU
eXBlPjo6dG9XcmFwcGVkKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBjYXN0
ZWRWYWx1ZSA9IEpTVG9XcmFwcGVkT3ZlcmxvYWRlcjxSYXdUeXBlPjo6dG9XcmFwcGVkKGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVl
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCkBAIC0yMzEs
NyArMjMxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFUKICAgICAgICAgICAgIGlmIChhcnJh
eUJ1ZmZlcikgewogICAgICAgICAgICAgICAgIGlmIChoYXNBcnJheUJ1ZmZlclR5cGUpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDb25kaXRpb25hbFJldHVybmVyPFJldHVyblR5cGUsIGhh
c0FycmF5QnVmZmVyVHlwZT46OmdldChXVEZNb3ZlKGFycmF5QnVmZmVyKSkudmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgT2Jq
ZWN0VHlwZSwgaGFzT2JqZWN0VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBP
YmplY3RUeXBlLCBoYXNPYmplY3RUeXBlPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSkudmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yNDEsNyArMjQx
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxU
Li4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFUKICAgICAgICAgICAgIGlmIChhcnJheUJ1ZmZl
clZpZXcpIHsKICAgICAgICAgICAgICAgICBpZiAoaGFzQXJyYXlCdWZmZXJWaWV3VHlwZSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbmRpdGlvbmFsUmV0dXJuZXI8UmV0dXJuVHlwZSwg
aGFzQXJyYXlCdWZmZXJWaWV3VHlwZT46OmdldChXVEZNb3ZlKGFycmF5QnVmZmVyVmlldykpLnZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIE9iamVjdFR5cGUsIGhhc09iamVjdFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgT2JqZWN0VHlwZSwgaGFzT2JqZWN0VHlwZT46OmNvbnZlcnQobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpLnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAt
MjU0LDcgKzI1NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVCiAgICAgICAgICAgICBpZiAo
ZGF0YVZpZXcpIHsKICAgICAgICAgICAgICAgICBpZiAoaGFzRGF0YVZpZXdUeXBlKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxSZXR1cm5lcjxSZXR1cm5UeXBlLCBoYXNE
YXRhVmlld1R5cGU+OjpnZXQoV1RGTW92ZShkYXRhVmlldykpLnZhbHVlKCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE9iamVjdFR5cGUs
IGhhc09iamVjdFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgT2JqZWN0VHlw
ZSwgaGFzT2JqZWN0VHlwZT46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpLnZh
bHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMzA0LDEwICszMDQsMTAgQEAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETFUKICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzICE9IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5
cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWV0aG9kID0gSlNDOjppdGVyYXRv
ck1ldGhvZChzdGF0ZSwgb2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWV0
aG9kID0gSlNDOjppdGVyYXRvck1ldGhvZCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVy
blR5cGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZC5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb25kaXRpb25hbFNlcXVl
bmNlQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6
Y29udmVydChzdGF0ZSwgb2JqZWN0LCBtZXRob2QpLnZhbHVlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvbmRpdGlvbmFsU2VxdWVuY2VDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxP
YmplY3QsIG9iamVjdCwgbWV0aG9kKS52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVu
IGFycmF5IHR5cGUsIHRoZW46CkBAIC0zMTcsMjcgKzMxNywyNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMVQogICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBv
ZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAh
PSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIG1ldGhvZCA9IEpTQzo6aXRlcmF0b3JNZXRob2Qoc3Rh
dGUsIG9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG1ldGhvZCA9IEpTQzo6
aXRlcmF0b3JNZXRob2QoJmxleGljYWxHbG9iYWxPYmplY3QsIG9iamVjdCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXRob2QuaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxTZXF1ZW5jZUNvbnZlcnRl
cjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZl
cnQoc3RhdGUsIG9iamVjdCwgbWV0aG9kKS52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBDb25kaXRpb25hbFNlcXVlbmNlQ29udmVydGVyPFJldHVyblR5cGUsIEZy
b3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBvYmplY3QsIG1ldGhvZCkudmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rp
b25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgogICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgogICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5
cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSkudmFsdWUoKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KICAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhh
c1JlY29yZFR5cGU+Ojpjb252ZXJ0KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKS52YWx1ZSgp
OwogCiAgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNh
bGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgogICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBz
dGVwIDEyLjUpCiAKICAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1
ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNl
IHRvIHRoZSBvYmplY3QgVi4KICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdFR5cGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgT2JqZWN0VHlwZSwgaGFzT2JqZWN0VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIE9iamVjdFR5cGUsIGhhc09iamVjdFR5cGU+Ojpjb252ZXJ0KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzQ3LDcgKzM0Nyw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVCiAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6
dmFsdWU7CiAgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewogICAgICAgICAgICAgaWYgKHZh
bHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpLnZhbHVlKCk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgpAQCAtMzU1LDI0
ICszNTUsMjQgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFUKICAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVl
ICE9IDA7CiAgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewogICAgICAgICAgICAgaWYgKHZh
bHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKS52YWx1ZSgpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgogICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlz
dD46OnZhbHVlICE9IDA7CiAgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAgICAgICAg
cmV0dXJuIENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0
cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJp
bmdUeXBlPjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSkudmFsdWUoKTsKIAog
ICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgogICAg
ICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVy
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSkudmFsdWUoKTsKIAogICAgICAgICAvLyAxNi4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byBib29sZWFuLgogICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAg
ICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVh
biwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFu
LCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpLnZh
bHVlKCk7CiAKICAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKICAg
ICB9CiB9OwpAQCAtMzg3LDcgKzM4Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewogCiAgICAgdXNpbmcgU2VxdWVuY2UgPSBi
cmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50
X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwogCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRh
dGlvblR5cGUmIHZhcmlhbnQpCiAgICAgewogICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5p
bmRleCgpOwogCkBAIC0zOTYsNyArMzk2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CiAgICAgICAgICAgICB1c2luZyBJID0g
dHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6
OnR5cGU7CiAgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9
IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6
OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0g
dG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydFZhcmlhZGljLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRWYXJpYWRpYy5oCmluZGV4IGMwYjc5NWZjOWVkODNjYTQ2MjJlOWFhMWM2ODI1NWFhNDU1Zjc1
ZGMuLmMyM2IzNjhmZWE3YTBjYjViM2JhODc2YTczNzAxYTI2OWU4ZmQ0MWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFZhcmlhZGljLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VmFyaWFkaWMuaApAQCAtMzQs
MjEgKzM0LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CiBzdHJ1Y3QgVmFyaWFkaWND
b252ZXJ0ZXIgewogICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CiAKLSAgICBzdGF0aWMgT3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgT3B0aW9uYWw8SXRl
bT4gY29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgICAgICBhdXRv
IHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFdU
Rjo6bnVsbG9wdCk7CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPiBWZWN0b3I8dHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXI8
SURMVHlwZT46Okl0ZW0+IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gVmVj
dG9yPHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpJdGVtPiBjb252ZXJ0VmFy
aWFkaWNBcmd1bWVudHMoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCiB7Ci0gICAgc2l6
ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBzaXplX3QgbGVuZ3RoID0g
Y2FsbEZyYW1lLmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAoc3RhcnRJbmRleCA+PSBsZW5ndGgp
CiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTU2LDcgKzU2LDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4gVmVjdG9yPHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpJ
dGVtPiBjb24KICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFy
dEluZGV4KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IFZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGF1dG8g
dmFsdWUgPSBWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUudW5jaGVja2VkQXJndW1lbnQoaSkpOwogICAgICAgICBpZiAoIXZh
bHVlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0V2ViR0wuY3BwCmluZGV4IDQwMjM5NGQ2YThmMzk0MDMyNTE4YmJmZGY3YjU2
MzRmMDcwNGI2Y2EuLjkwMGUwZjc2MjEyNjA2N2Y5YzIyYTA3ZjBkYTNiZmNkM2QxYWQ1Y2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAK
QEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgSURMVW5pb24gSlNDb252ZXJ0ZXIu
Ci1KU1ZhbHVlIGNvbnZlcnRUb0pTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIGFueSkKK0pTVmFsdWUgY29udmVy
dFRvSlNWYWx1ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIGFueSkKIHsKICAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihhbnksCiAgICAgICAgIFtdIChzdGQ6Om51bGxwdHJfdCkgewpAQCAt
ODYsMTA4ICs4NiwxMDggQEAgSlNWYWx1ZSBjb252ZXJ0VG9KU1ZhbHVlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnMKICAgICAgICAgICAgIHJl
dHVybiBqc051bWJlcih2YWx1ZSk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkgewotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgVmVj
dG9yPGJvb2w+JiB2YWx1ZXMpIHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQogICAgICAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZSkpOwogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWxpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheSgmc3RhdGUsIDAsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdEFycmF5KCZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpTQzo6QXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBsaXN0KTsKICAgICAgICAgfSwKICAgICAgICAg
WyZdIChjb25zdCBWZWN0b3I8aW50PiYgdmFsdWVzKSB7CiAgICAgICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OwogICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykK
ICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChqc051bWJlcih2YWx1ZSkpOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWxpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBjb25zdHJ1Y3RBcnJheSgmc3RhdGUsIDAsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KCZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PEpTQzo6QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBsaXN0KTsKICAgICAgICAg
fSwKICAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8RmxvYXQzMkFycmF5PiYgYXJyYXkpIHsKLSAg
ICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkp
OworICAgICAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxP
YmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBSZWZQ
dHI8SW50MzJBcnJheT4mIGFycmF5KSB7Ci0gICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAg
IH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFVpbnQ4QXJyYXk+JiBhcnJheSkgewotICAg
ICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7
CisgICAgICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9i
amVjdCwgYXJyYXkuZ2V0KCkpOwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IFJlZlB0
cjxVaW50MzJBcnJheT4mIGFycmF5KSB7Ci0gICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAg
IH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMQnVmZmVyPiYgYnVmZmVyKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQo
KSk7CisgICAgICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2Jh
bE9iamVjdCwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBS
ZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4mIGJ1ZmZlcikgewotICAgICAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBidWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQo
KSk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMUHJvZ3JhbT4m
IHByb2dyYW0pIHsKLSAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVj
dCwgcHJvZ3JhbS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgJmdsb2JhbE9iamVjdCwgcHJvZ3JhbS5nZXQoKSk7CiAgICAgICAgIH0sCiAgICAg
ICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiYgYnVmZmVyKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7
CisgICAgICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9i
amVjdCwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBSZWZQ
dHI8V2ViR0xUZXh0dXJlPiYgdGV4dHVyZSkgewotICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCB0ZXh0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0
b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCB0ZXh0dXJlLmdldCgpKTsK
ICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUz4mIGFycmF5KSB7Ci0gICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9i
YWxPYmplY3QsIGFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0KICNp
ZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICAsCiAgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdl
YkdMVmVydGV4QXJyYXlPYmplY3Q+JiBhcnJheSkgewotICAgICAgICAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4g
dG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkpOwog
ICAgICAgICB9CiAjZW5kaWYKICAgICApOwogfQogCi1KU1ZhbHVlIGNvbnZlcnRUb0pTVmFsdWUo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgV2ViR0xF
eHRlbnNpb24mIGV4dGVuc2lvbikKK0pTVmFsdWUgY29udmVydFRvSlNWYWx1ZShKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgV2ViR0xFeHRlbnNpb24mIGV4dGVuc2lvbikKIHsKICAgICBzd2l0Y2ggKGV4dGVuc2lvbi5n
ZXROYW1lKCkpIHsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTExvc2VDb250ZXh0TmFt
ZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxXZWJHTExvc2VDb250ZXh0Jj4oZXh0ZW5zaW9uKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VD
b250ZXh0Jj4oZXh0ZW5zaW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVy
VGV4dHVyZUxPRE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8RVhUU2hhZGVyVGV4dHVyZUxPRCY+KGV4dGVuc2lvbikpOworICAgICAg
ICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8RVhUU2hhZGVyVGV4dHVyZUxPRCY+KGV4dGVuc2lvbikpOwogICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljJj4oZXh0ZW5zaW9uKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMmPihleHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRz
UkdCTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxFWFRzUkdCJj4oZXh0ZW5zaW9uKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRzUkdCJj4oZXh0
ZW5zaW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhURnJhZ0RlcHRoTmFtZToKLSAg
ICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRG
cmFnRGVwdGgmPihleHRlbnNpb24pKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9i
YWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEZyYWdEZXB0aCY+KGV4dGVu
c2lvbikpOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEJsZW5kTWluTWF4TmFtZToKLSAg
ICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRC
bGVuZE1pbk1heCY+KGV4dGVuc2lvbikpOworICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEds
b2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUQmxlbmRNaW5NYXgmPihl
eHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNTdGFuZGFyZERlcml2YXRp
dmVzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNTdGFuZGFyZERlcml2YXRpdmVzJj4oZXh0ZW5zaW9uKSk7CisgICAgICAgIHJl
dHVybiB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxPRVNTdGFuZGFyZERlcml2YXRpdmVzJj4oZXh0ZW5zaW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4
dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXQmPihleHRlbnNpb24p
KTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCY+KGV4dGVuc2lvbikpOwogICAgIGNhc2Ug
V2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdExpbmVhck5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0
TGluZWFyJj4oZXh0ZW5zaW9uKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXRMaW5lYXIm
PihleHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZs
b2F0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0Jj4oZXh0ZW5zaW9uKSk7CisgICAgICAgIHJldHVy
biB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxP
RVNUZXh0dXJlSGFsZkZsb2F0Jj4oZXh0ZW5zaW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVh
ciY+KGV4dGVuc2lvbikpOworICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhciY+
KGV4dGVuc2lvbikpOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1ZlcnRleEFycmF5T2Jq
ZWN0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCY+KGV4dGVuc2lvbikpOworICAgICAgICByZXR1
cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
T0VTVmVydGV4QXJyYXlPYmplY3QmPihleHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpPRVNFbGVtZW50SW5kZXhVaW50TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Jj4oZXh0ZW5z
aW9uKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Jj4oZXh0ZW5zaW9uKSk7CiAg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6Ci0gICAg
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mbyY+KGV4dGVuc2lvbikpOworICAgICAgICByZXR1cm4gdG9KUygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbyY+KGV4dGVuc2lvbikpOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdM
RGVidWdTaGFkZXJzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnU2hhZGVycyY+KGV4dGVuc2lvbikpOworICAgICAg
ICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8V2ViR0xEZWJ1Z1NoYWRlcnMmPihleHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZToKLSAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDJj4oZXh0ZW5zaW9uKSk7CisgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDJj4oZXh0ZW5zaW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMmPihleHRlbnNp
b24pKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyY+KGV4dGVuc2lv
bikpOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RD
TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyY+KGV4dGVuc2lvbikpOworICAgICAgICBy
ZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMmPihleHRlbnNpb24pKTsKICAgICBjYXNlIFdl
YkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQ05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVz
c2VkVGV4dHVyZUFTVEMmPihleHRlbnNpb24pKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBU1RDJj4oZXh0ZW5zaW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2Vi
R0xEZXB0aFRleHR1cmVOYW1lOgotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVwdGhUZXh0dXJlJj4oZXh0ZW5zaW9uKSk7CisgICAg
ICAgIHJldHVybiB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSY+KGV4dGVuc2lvbikpOwogICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRHJhd0J1ZmZlcnNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUygmc3Rh
dGUsICZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJhd0J1ZmZlcnMmPihleHRlbnNp
b24pKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJhd0J1ZmZlcnMmPihleHRlbnNpb24pKTsKICAgICBj
YXNlIFdlYkdMRXh0ZW5zaW9uOjpBTkdMRUluc3RhbmNlZEFycmF5c05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5j
ZWRBcnJheXMmPihleHRlbnNpb24pKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9i
YWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEFOR0xFSW5zdGFuY2VkQXJyYXlz
Jj4oZXh0ZW5zaW9uKSk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBqc051bGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFdlYkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRXZWJHTC5oCmluZGV4IDI2ZjNjYThiZmM1OWM5NzU0NDdmODE4MThiYWVhZDY0NjNiNGFmZTQu
LmFlOGY3ZTY4OGQ5ZjVmMTFmODZiMzM3NjFmNTNlNjhkYzk4MDViZjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuaApAQCAtMzIsMjMgKzMyLDIz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNDOjpKU1ZhbHVlIGNvbnZlcnRUb0pTVmFs
dWUoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IFdlYkdMQW55Jik7
Ci1KU0M6OkpTVmFsdWUgY29udmVydFRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgV2ViR0xFeHRlbnNpb24mKTsKK0pTQzo6SlNWYWx1ZSBjb252ZXJ0VG9KU1Zh
bHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IFdlYkdM
QW55Jik7CitKU0M6OkpTVmFsdWUgY29udmVydFRvSlNWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0
JiwgSlNET01HbG9iYWxPYmplY3QmLCBXZWJHTEV4dGVuc2lvbiYpOwogCi1pbmxpbmUgSlNDOjpK
U1ZhbHVlIGNvbnZlcnRUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uKQoraW5saW5l
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0VG9KU1ZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0
ZW5zaW9uKiBleHRlbnNpb24pCiB7CiAgICAgaWYgKCFleHRlbnNpb24pCiAgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOwotICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9i
YWxPYmplY3QsICpleHRlbnNpb24pOworICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmV4dGVuc2lvbik7CiB9CiAKIHRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgfQogfTsKIApAQCAtNTcsOSArNTcsOSBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEV4dGVuc2lvbj4gewogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYg
dmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBj
b252ZXJ0VG9KU1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFhQYXRoTlNSZXNvbHZlci5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0WFBhdGhOU1Jlc29sdmVyLmgKaW5kZXgg
OTRkZjNmNDVhOGViYmE0ZWFiMTlhOTg5YWJjYjllMGY2N2I3NzRkNS4uNjU4OTQxNTljYmI4MTdh
MmQ0NDllZjRjZTBjNWU0ZTQ4MjVmZGVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0WFBhdGhOU1Jlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0WFBhdGhOU1Jlc29sdmVyLmgKQEAgLTM1LDEzICsz
NSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNS
ZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPAogICAgIHVzaW5nIFdyYXBwZXJUeXBlID0g
dHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQogICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5
cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkK
LSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAg
IGV4Y2VwdGlvblRocm93ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICBy
ZXR1cm4gb2JqZWN0OwogICAgIH0KIH07CkBAIC01MSwxNSArNTEsMTUgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBVJiB2YWx1ZSkKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgVSYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAKaW5kZXggYTUwMDY0
MTY0ZTYwNWUyZTM0MDBjYzE2N2I4ZmJhMzQ3YThkNjJkOS4uOWJlYjk1MzFmYzY5OTc5OTVlNmMy
ZWQ5ODRmYzdmMzJmNTg3ZTczMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAKQEAgLTM5LDI5ICszOSwyOSBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotdm9pZCByZXBvcnRFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3Jp
cHQqIGNhY2hlZFNjcmlwdCkKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQq
IGNhY2hlZFNjcmlwdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5h
bWljQ2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25WYWx1ZSk7CiAgICAgaWYgKCFl
eGNlcHRpb24pIHsKICAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4Y2VwdGlvbigpOwogICAg
ICAgICBpZiAoIWV4Y2VwdGlvbikKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0
aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEpTQzo6RXhjZXB0aW9uOjpE
b05vdENhcHR1cmVTdGFjayk7CisgICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlv
bjo6Y3JlYXRlKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6
OkV4Y2VwdGlvbjo6RG9Ob3RDYXB0dXJlU3RhY2spOwogICAgIH0KIAotICAgIHJlcG9ydEV4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb24sIGNhY2hlZFNjcmlwdCk7CisgICAgcmVwb3J0RXhjZXB0aW9u
KGxleGljYWxHbG9iYWxPYmplY3QsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKIH0KIAotU3Ry
aW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1
ZSBleGNlcHRpb24sIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUpCitTdHJpbmcgcmV0cmlldmVFcnJv
ck1lc3NhZ2UoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNW
YWx1ZSBleGNlcHRpb24sIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUpCiB7CiAgICAgLy8gRklYTUU6
IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVw
b3J0RXhjZXB0aW9uIHNob3VsZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNl
cHRpb25zCiAgICAgLy8gSWYgdGhpcyBpcyBhIGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxs
IHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRp
b24gZm9yIHRoZSBleGNlcHRpb24uCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKICAgICBpZiAo
YXV0byogZXJyb3IgPSBqc0R5bmFtaWNDYXN0PEVycm9ySW5zdGFuY2UqPih2bSwgZXhjZXB0aW9u
KSkKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3ItPnNhbml0aXplZFRvU3RyaW5nKCZzdGF0
ZSk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgZWxzZQotICAgICAgICBlcnJvck1lc3NhZ2UgPSBleGNl
cHRpb24udG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0
aW9uLnRvV1RGU3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gY2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0
cmluZygpIGNhbGwgYWJvdmUuCiAgICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMgbm90IHN1cHBv
c2VkIHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KQEAgLTcwLDIyICs3MCwyMiBAQCBTdHJp
bmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVl
IGV4Y2VwdGlvbiwgQ2F0Y2hTYwogICAgIHJldHVybiBlcnJvck1lc3NhZ2U7CiB9CiAKLXZvaWQg
cmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlv
biwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQsIEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlv
bkRldGFpbHMpCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNo
ZWRTY3JpcHQsIEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIGlmIChp
c1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOwor
ICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCkpOwogCi0gICAgYXV0byBjYWxsU3RhY2sgPSBJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdENhbGxT
dGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICBhdXRvIGNhbGxTdGFjayA9
IEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBleGNlcHRpb24pOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
dm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CiAKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAg
IGF1dG8qIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGlmIChhdXRvKiB3aW5kb3cgPSBqc0R5bmFtaWNDYXN0PEpTRE9N
V2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKICAgICAgICAgaWYgKCF3aW5kb3ctPndyYXBw
ZWQoKS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogYwogICAgICAgICBleGNl
cHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOwogICAgIH0KIAotICAgIGF1
dG8gZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3NhZ2UoKmV4ZWMsIHZtLCBleGNlcHRp
b24tPnZhbHVlKCksIHNjb3BlKTsKKyAgICBhdXRvIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJy
b3JNZXNzYWdlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBz
Y29wZSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnJlcG9y
dEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0
aW9uU291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrLnB0
cigpIDogbnVsbHB0ciwgY2FjaGVkU2NyaXB0KTsKIAogICAgIGlmIChleGNlcHRpb25EZXRhaWxz
KSB7CkBAIC0xMTEsMTYgKzExMSwxNiBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogYwogICAgIH0K
IH0KIAotdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQg
cmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogICAgIGF1dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cisg
ICAgcmVwb3J0RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiB9CiAK
LUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29k
ZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24o
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEV4Y2VwdGlvbkNvZGUgZWMsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBpZiAoZWMgPT0gRXhpc3RpbmdFeGNlcHRpb25F
cnJvcikKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xMjgsNDQgKzEyOCw0NCBA
QCBKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUgZWMsIGNvbnN0IFN0cmluZyYgbWVzcwogICAgIC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgV2Vi
SURMIGV4Y2VwdGlvbiB0eXBlcy4KICAgICBpZiAoZWMgPT0gVHlwZUVycm9yKSB7CiAgICAgICAg
IGlmIChtZXNzYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJy
b3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSk7
CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIG1l
c3NhZ2UpOwogICAgIH0KIAogICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7CiAgICAgICAgIGlm
IChtZXNzYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsICJCYWQgdmFsdWUiX3MpOwotICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsICJCYWQgdmFsdWUiX3MpOworICAgICAgICByZXR1cm4gY3JlYXRlUmFu
Z2VFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBtZXNzYWdlKTsKICAgICB9CiAKICAgICBpZiAo
ZWMgPT0gU3RhY2tPdmVyZmxvd0Vycm9yKQotICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVy
Zmxvd0Vycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpOwogCiAgICAgLy8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNy
ZWF0ZURPTUV4Y2VwdGlvbiBuZWVkIHRvIHBhc3MgaW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVj
dC4KICAgICAvLyBGb3Igbm93LCB3ZSdyZSBnb2luZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9i
YWxPYmplY3QuIFdoaWNoIGlzIHdyb25nIGluIGNhc2VzIGxpa2UgdGhpczoKICAgICAvLyBmcmFt
ZXNbMF0uZG9jdW1lbnQuY3JlYXRlRWxlbWVudChudWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4
Y2VwdGlvbiB3aGljaCBzaG91bGQgaGF2ZSB0aGUgc3ViZnJhbWUncyBwcm90b3R5cGVzLgotICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0
Rm9yUHJvdG90eXBlKGV4ZWMpOwotICAgIEpTVmFsdWUgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgRE9NRXhjZXB0aW9uOjpjcmVhdGUoZWMsIG1lc3NhZ2UpKTsKKyAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZv
clByb3RvdHlwZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBKU1ZhbHVlIGVycm9yT2JqZWN0
ID0gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIERPTUV4Y2VwdGlvbjo6
Y3JlYXRlKGVjLCBtZXNzYWdlKSk7CiAgICAgCiAgICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKLSAg
ICBhZGRFcnJvckluZm8oZXhlYywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKKyAgICBh
ZGRFcnJvckluZm8obGV4aWNhbEdsb2JhbE9iamVjdCwgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0
cnVlKTsKICAgICByZXR1cm4gZXJyb3JPYmplY3Q7CiB9CiAKLUpTVmFsdWUgY3JlYXRlRE9NRXhj
ZXB0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK0pTVmFsdWUg
Y3JlYXRlRE9NRXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
eGNlcHRpb24mJiBleGNlcHRpb24pCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5yZWxlYXNlTWVzc2FnZSgpKTsKKyAg
ICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBleGNlcHRp
b24uY29kZSgpLCBleGNlcHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7CiB9CiAKLXZvaWQgcHJvcGFn
YXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3ZvaWQgcHJvcGFnYXRlRXhj
ZXB0aW9uU2xvd1BhdGgoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCiB7CiAg
ICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2Vw
dGlvbikpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUoZXhj
ZXB0aW9uKSkpOwogfQogICAgIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRocm93VHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBlRXJyb3Io
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKKyAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7
CiB9CiAKIHN0YXRpYyB2b2lkIGFwcGVuZEFyZ3VtZW50TXVzdEJlKFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQpAQCAt
MTc4LDU0ICsxNzgsNTQgQEAgc3RhdGljIHZvaWQgYXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5n
QnVpbGRlciYgYnVpbGRlciwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwKICAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOwogfQogCi12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBBU0NJSUxp
dGVyYWwgbWVzc2FnZSkKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBBU0NJ
SUxpdGVyYWwgbWVzc2FnZSkKIHsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAg
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUs
IE5vdFN1cHBvcnRlZEVycm9yLCBtZXNzYWdlKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJmxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJmxleGljYWxHbG9iYWxP
YmplY3QsIE5vdFN1cHBvcnRlZEVycm9yLCBtZXNzYWdlKSk7CiB9CiAKLXZvaWQgdGhyb3dJbnZh
bGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCBtZXNzYWdlKQordm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCBtZXNzYWdlKQogewogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0
aW9uKCZzdGF0ZSwgSW52YWxpZFN0YXRlRXJyb3IsIG1lc3NhZ2UpKTsKKyAgICB0aHJvd0V4Y2Vw
dGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmbGV4
aWNhbEdsb2JhbE9iamVjdCwgSW52YWxpZFN0YXRlRXJyb3IsIG1lc3NhZ2UpKTsKIH0KIAotdm9p
ZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIHRocm93U2VjdXJpdHlFcnJv
cihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgc2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01F
eGNlcHRpb24oJnN0YXRlLCBTZWN1cml0eUVycm9yLCBtZXNzYWdlKSk7CisgICAgdGhyb3dFeGNl
cHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJmxl
eGljYWxHbG9iYWxPYmplY3QsIFNlY3VyaXR5RXJyb3IsIG1lc3NhZ2UpKTsKIH0KIAotSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwg
Y29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMp
CitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwogICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3Vt
ZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwogICAgIGJ1aWxk
ZXIuYXBwZW5kKCJvbmUgb2Y6ICIsIGV4cGVjdGVkVmFsdWVzKTsKLSAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgYnVpbGRlci50
b1N0cmluZygpKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJl
RnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQorSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1
bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKIHsKICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJn
dW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwog
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOwotICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBidWlsZGVy
LnRvU3RyaW5nKCkpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNp
Z25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBj
aGFyKiBleHBlY3RlZFR5cGUpCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBl
RXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1l
bnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQogewogICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKICAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudElu
ZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsK
ICAgICBidWlsZGVyLmFwcGVuZCgiYW4gaW5zdGFuY2Ugb2YgIiwgZXhwZWN0ZWRUeXBlKTsKLSAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5n
KCkpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKIH0KIAotdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNo
YXIqIGV4cGVjdGVkVHlwZSkKK3ZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSwgY29u
c3QgY2hhciogZXhwZWN0ZWRUeXBlKQogewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwg
IiBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiLCBleHBlY3RlZFR5cGUpKTsKKyAg
ICB0aHJvd1R5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgbWFrZVN0cmluZygi
VGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBhdHRyaWJ1dGUgbXVz
dCBiZSBhbiBpbnN0YW5jZSBvZiAiLCBleHBlY3RlZFR5cGUpKTsKIH0KIAotSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3Qg
Y2hhciogZGljdGlvbmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciog
ZXhwZWN0ZWRUeXBlKQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKQEAgLTIzNCwyMiArMjM0LDIyIEBAIEpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyCiAgICAgYnVpbGRlci5hcHBlbmQobWVtYmVyTmFtZSk7CiAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gaW5zdGFuY2Ug
b2YgIik7CiAgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgYnVpbGRl
ci50b1N0cmluZygpKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9y
U2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKQor
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4
dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkKIHsK
LSAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVy
cm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFzc29j
aWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSkpOworICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VF
cnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNv
bnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSkp
OwogfQogCi12b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQordm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpCiB7Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiVmFsdWUgaXMgbm90
IGEgc2VxdWVuY2UiX3MpOworICAgIHRocm93VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVmFsdWUgaXMgbm90IGEgc2VxdWVuY2UiX3MpOwogfQogCi12b2lkIHRocm93Tm9u
RmluaXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
Cit2b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQogewotICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUsICJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSJfcyk7Cisg
ICAgdGhyb3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGhlIHByb3Zp
ZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiX3MpOwogfQogCiBTdHJpbmcgbWFrZUdldHRlclR5cGVF
cnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSkKQEAgLTI1NywxOSArMjU3LDE5IEBAIFN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9y
TWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1CiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0
ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVy
ZmFjZU5hbWUpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKIHsKLSAgICByZXR1cm4gdGhyb3dW
TUdldHRlclR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2Fn
ZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7CisgICAgcmV0dXJuIHRocm93Vk1HZXR0
ZXJUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBtYWtlR2V0dGVyVHlwZUVy
cm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7CiB9CiAKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVF
cnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQogewotICAgIHJldHVy
biBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlw
ZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSwgUmVqZWN0ZWRQcm9t
aXNlV2l0aFR5cGVFcnJvckNhdXNlOjpOYXRpdmVHZXR0ZXIpOworICAgIHJldHVybiBjcmVhdGVS
ZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIG1ha2VHZXR0
ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpLCBSZWplY3Rl
ZFByb21pc2VXaXRoVHlwZUVycm9yQ2F1c2U6Ok5hdGl2ZUdldHRlcik7CiB9CiAKLWJvb2wgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQorYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQogewotICAgIHRocm93VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywg
YXR0cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2Yg
IiwgaW50ZXJmYWNlTmFtZSkpOworICAgIHRocm93VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1
dGVOYW1lLCAiIHNldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRl
cmZhY2VOYW1lKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0yNzgsOSArMjc4LDkgQEAg
U3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk4KICAgICByZXR1cm4gbWFrZVN0cmluZygiQ2FuIG9ubHkg
Y2FsbCAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0YW5jZXMg
b2YgIiwgaW50ZXJmYWNlTmFtZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK0VuY29kZWRK
U1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7Ci0gICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUs
IGZ1bmN0aW9uTmFtZSkpOworICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGZ1
bmN0aW9uTmFtZSkpOwogfQogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRo
VGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCkBAIC0yODksMjEgKzI4OSwyMSBAQCBK
U0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJl
ZFByb21pc2UmIHByb21pc2UsIGNvbgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlz
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJv
bWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUp
CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUs
IG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSwgUmVq
ZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvckNhdXNlOjpJbnZhbGlkVGhpcyk7CisgICAgcmV0dXJu
IGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
bWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpLCBSZWpl
Y3RlZFByb21pc2VXaXRoVHlwZUVycm9yQ2F1c2U6OkludmFsaWRUaGlzKTsKIH0KIAotdm9pZCB0
aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgQVNDSUlMaXRlcmFsIG1lc3NhZ2UpCit2b2lkIHRocm93RE9NU3ludGF4RXJyb3Io
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgQVNDSUlMaXRlcmFsIG1lc3NhZ2UpCiB7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNl
cHRpb24oJnN0YXRlLCBTeW50YXhFcnJvciwgbWVzc2FnZSkpOworICAgIHRocm93RXhjZXB0aW9u
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBTeW50YXhFcnJvciwgbWVzc2FnZSkpOwogfQogCi12b2lkIHRocm93RGF0
YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KQordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCiB7CiAgICAgc2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVE
T01FeGNlcHRpb24oJnN0YXRlLCBEYXRhQ2xvbmVFcnJvcikpOworICAgIHRocm93RXhjZXB0aW9u
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBEYXRhQ2xvbmVFcnJvcikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgKaW5kZXggNjRhYzNlMjY2OTBjYzZjZTNhMDk0OGY2NjE1ZTljODBjNTVkYTNjZi4u
NjIyYmQ0ODc4MDkwMmM5NTBhNTE3YTFmMmM2Y2ZmYTVlNGEwNzQwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaApAQCAtNDMs
NTUgKzQzLDU1IEBAIHN0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKICAgICBTdHJpbmcgc291cmNl
VVJMOwogfTsKIAotdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJDT1JFX0VYUE9S
VCBib29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSk7Ci0KLXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYpOwotdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgQVNDSUlMaXRlcmFsKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2YVNj
cmlwdCBzeW50YXggZXJyb3IuCi12b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBBU0NJSUxpdGVyYWwpOwotV0VCQ09SRV9FWFBPUlQg
dm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgQVNDSUlMaXRlcmFsKTsKLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
LVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcyk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlv
bmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUpOwordm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
SlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dFQkNPUkVfRVhQT1JU
IGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6VGhy
b3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpOworCit2b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBBU0NJSUxpdGVyYWwpOyAvLyBOb3QgdGhlIHNh
bWUgYXMgYSBKYXZhU2NyaXB0IHN5bnRheCBlcnJvci4KK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVF
cnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgQVNDSUlMaXRlcmFs
KTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3IoSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVy
cm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBBU0NJSUxpdGVyYWwp
Owordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6VGhy
b3dTY29wZSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29w
ZSYpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRN
dXN0QmVFbnVtRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIHVu
c2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGV4cGVjdGVkVmFsdWVzKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFy
Z3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUm
LCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNW
YWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0
aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9y
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lKTsKIAogU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwogU3RyaW5nIG1h
a2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBhdHRyaWJ1dGVOYW1lKTsKIAotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1
ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwot
V0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpU
aHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5
cGVFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKIAotV0VCQ09SRV9F
WFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWpl
Y3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CiBXRUJDT1JF
X0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJv
cihEZWZlcnJlZFByb21pc2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBvcGVyYXRpb25OYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVq
ZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9S
VCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
b3BlcmF0aW9uTmFtZSk7CiAKLVN0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBKU0M6OkNhdGNoU2NvcGUm
KTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOwotV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2Vw
dGlvbiosIENhY2hlZFNjcmlwdCogPSBudWxscHRyLCBFeGNlcHRpb25EZXRhaWxzKiA9IG51bGxw
dHIpOwotdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CitTdHJp
bmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBKU0M6OkNhdGNoU2NvcGUmKTsKK1dFQkNPUkVfRVhQT1JU
IHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUg
ZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcG9ydEV4Y2VwdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGNlcHRpb24qLCBD
YWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRyKTsKK3Zv
aWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAKLUpTQzo6
SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb24mJik7
Ci1KU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0
aW9uQ29kZSwgY29uc3QgU3RyaW5nJiA9IGVtcHR5U3RyaW5nKCkpOworSlNDOjpKU1ZhbHVlIGNy
ZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uJiYpOworSlND
OjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgRXhjZXB0
aW9uQ29kZSwgY29uc3QgU3RyaW5nJiA9IGVtcHR5U3RyaW5nKCkpOwogCi0vLyBDb252ZXJ0IGEg
RE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRpb24g
aW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KLVdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvcGFnYXRlRXhj
ZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b24mJik7CisvLyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEg
SmF2YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBsZXhpY2FsR2xvYmFsT2JqZWN0
LgorV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCitBTFdBWVNf
SU5MSU5FIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYg
ZXhjZXB0aW9uKQogewogICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoc3RhdGUsIHRocm93U2NvcGUs
IFdURk1vdmUoZXhjZXB0aW9uKSk7CisgICAgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKIH0KIAot
aW5saW5lIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQoraW5s
aW5lIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8dm9p
ZD4mJiB2YWx1ZSkKIHsKICAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKQot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAKaW5kZXggZjk3MDE3NDkxZWNiNGQ4YzNhZjI2NzRlNmVjM2I3NmJj
ZTBiNzM0ZS4uNzg2MDJkODcxNDY2YWI5M2Q5ZGFjNGUzNjIzZGEzMDYxMzJhMmI4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAt
ODIsMTEgKzgyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVRoaXNUeXBl
RXJyb3JGb3JCdWlsdGlucyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKIAotICAgIGF1dG8gaW50ZXJmYWNlTmFtZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkuZ2V0U3RyaW5nKGNhbGxGcmFtZSk7CisgICAgYXV0byBpbnRlcmZhY2VOYW1lID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAg
ICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGF1dG8gZnVuY3Rpb25OYW1lID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKS5nZXRTdHJpbmcoY2FsbEZyYW1lKTsKKyAgICBh
dXRvIGZ1bmN0aW9uTmFtZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuZ2V0U3Ry
aW5nKGdsb2JhbE9iamVjdCk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZVR5cGVFcnJvcihjYWxsRnJhbWUsIG1ha2VUaGlz
VHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0ZjgoKS5kYXRhKCksIGZ1bmN0aW9uTmFt
ZS51dGY4KCkuZGF0YSgpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5h
bWUudXRmOCgpLmRhdGEoKSwgZnVuY3Rpb25OYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZUdldHRlclR5cGVFcnJvckZvckJ1aWx0aW5z
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAt
OTYsMTIgKzk2LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZUdldHRlclR5
cGVFcnJvckZvckJ1aWx0aW5zKEpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKIAotICAgIGF1dG8gaW50ZXJmYWNlTmFtZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkuZ2V0U3RyaW5nKGNhbGxGcmFtZSk7CisgICAgYXV0byBpbnRlcmZhY2VOYW1lID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAg
ICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGF1dG8gYXR0cmlidXRlTmFtZSA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuZ2V0U3RyaW5nKGNhbGxGcmFtZSk7CisgICAg
YXV0byBhdHRyaWJ1dGVOYW1lID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKS5nZXRT
dHJpbmcoZ2xvYmFsT2JqZWN0KTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCi0g
ICAgYXV0byBlcnJvciA9IHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihjcmVhdGVUeXBlRXJy
b3IoY2FsbEZyYW1lLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0
ZjgoKS5kYXRhKCksIGF0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSkpKTsKKyAgICBhdXRvIGVy
cm9yID0gc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUudXRmOCgpLmRh
dGEoKSwgYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKSkpOwogICAgIGVycm9yLT5zZXROYXRp
dmVHZXR0ZXJUeXBlRXJyb3IoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVycm9yKTsK
IH0KQEAgLTIxMiw3ICsyMTIsNyBAQCBFdmVudCogSlNET01HbG9iYWxPYmplY3Q6OmN1cnJlbnRF
dmVudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY3VycmVudEV2ZW50OwogfQogCi12b2lkIEpTRE9N
R2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihKU0dsb2JhbE9iamVjdCoganNH
bG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNQcm9taXNlKiBwcm9taXNlLCBKU1Byb21p
c2VSZWplY3Rpb25PcGVyYXRpb24gb3BlcmF0aW9uKQordm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6
cHJvbWlzZVJlamVjdGlvblRyYWNrZXIoSlNHbG9iYWxPYmplY3QqIGpzR2xvYmFsT2JqZWN0LCBK
U1Byb21pc2UqIHByb21pc2UsIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbiBvcGVyYXRpb24p
CiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBw
YXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVjdGlvbnRyYWNrZXItaW1wbGVtZW50YXRpb24K
IApAQCAtMjI2LDE1ICsyMjYsMTUgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6cHJvbWlzZVJl
amVjdGlvblRyYWNrZXIoSlNHbG9iYWxPYmplY3QqIGpzR2xvYmFsT2JqZWN0LAogCiAgICAgc3dp
dGNoIChvcGVyYXRpb24pIHsKICAgICBjYXNlIEpTUHJvbWlzZVJlamVjdGlvbk9wZXJhdGlvbjo6
UmVqZWN0OgotICAgICAgICBjb250ZXh0LT5lbnN1cmVSZWplY3RlZFByb21pc2VUcmFja2VyKCku
cHJvbWlzZVJlamVjdGVkKCpleGVjLCBnbG9iYWxPYmplY3QsICpwcm9taXNlKTsKKyAgICAgICAg
Y29udGV4dC0+ZW5zdXJlUmVqZWN0ZWRQcm9taXNlVHJhY2tlcigpLnByb21pc2VSZWplY3RlZChn
bG9iYWxPYmplY3QsICpwcm9taXNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKU1Byb21p
c2VSZWplY3Rpb25PcGVyYXRpb246OkhhbmRsZToKLSAgICAgICAgY29udGV4dC0+ZW5zdXJlUmVq
ZWN0ZWRQcm9taXNlVHJhY2tlcigpLnByb21pc2VIYW5kbGVkKCpleGVjLCBnbG9iYWxPYmplY3Qs
ICpwcm9taXNlKTsKKyAgICAgICAgY29udGV4dC0+ZW5zdXJlUmVqZWN0ZWRQcm9taXNlVHJhY2tl
cigpLnByb21pc2VIYW5kbGVkKGdsb2JhbE9iamVjdCwgKnByb21pc2UpOwogICAgICAgICBicmVh
azsKICAgICB9CiB9CiAKLUpTRE9NR2xvYmFsT2JqZWN0JiBjYWxsZXJHbG9iYWxPYmplY3QoRXhl
Y1N0YXRlJiBzdGF0ZSkKK0pTRE9NR2xvYmFsT2JqZWN0JiBjYWxsZXJHbG9iYWxPYmplY3QoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQog
ewogICAgIGNsYXNzIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgewogICAgIHB1YmxpYzoK
QEAgLTI2OCwxMiArMjY4LDEyIEBAIEpTRE9NR2xvYmFsT2JqZWN0JiBjYWxsZXJHbG9iYWxPYmpl
Y3QoRXhlY1N0YXRlJiBzdGF0ZSkKICAgICB9OwogCiAgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0
RnVuY3RvciBpdGVyOwotICAgIHN0YXRlLml0ZXJhdGUoaXRlcik7CisgICAgY2FsbEZyYW1lLml0
ZXJhdGUoaXRlcik7CiAgICAgaWYgKGl0ZXIuZ2xvYmFsT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oaXRlci5nbG9iYWxPYmplY3QoKSk7CiAKLSAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIHJldHVybiAqanNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4odm0udm1FbnRyeUdsb2JhbE9iamVjdCgmc3RhdGUpKTsKKyAgICBWTSYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgcmV0dXJuICpqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPih2bS52bUVudHJ5R2xvYmFsT2JqZWN0KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiB9CiAK
IEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9NR2xvYmFsT2JqZWN0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAppbmRleCBiM2U3NThlZjU0MjUzZTFk
MjcxY2Y5ZGFhOWYyOTY1NDkzM2IxNDM2Li5mY2Q2N2Q1N2Y5NjdiNGIwZjViZjMyMjIyNmZjNTJl
YTBiMjBhNzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUds
b2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmgKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgV0VCQ09SRV9FWFBPUlQgSlNET01HbG9i
YWxPYmplY3QgOiBwdWJsaWMgSlNDOjpKU0dsb2JhbE9iamVjdCB7CiAgICAgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIHZvaWQgcHJvbWlzZVJlamVjdGlvblRyYWNrZXIoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Byb21pc2UqLCBKU0M6OkpTUHJvbWlz
ZVJlamVjdGlvbk9wZXJhdGlvbik7CisgICAgc3RhdGljIHZvaWQgcHJvbWlzZVJlamVjdGlvblRy
YWNrZXIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNQcm9taXNlKiwgSlNDOjpKU1Byb21p
c2VSZWplY3Rpb25PcGVyYXRpb24pOwogCiAgICAgSlNET01TdHJ1Y3R1cmVNYXAgbV9zdHJ1Y3R1
cmVzOwogICAgIEpTRE9NQ29uc3RydWN0b3JNYXAgbV9jb25zdHJ1Y3RvcnM7CkBAIC0xMjQsNyAr
MTI0LDcgQEAgaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTUNvbnN0cnVjdG9yKEpTQzo6Vk0m
IHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2wKICAgICByZXR1cm4gY29uc3RydWN0b3I7
CiB9CiAKLVdFQkNPUkVfRVhQT1JUIEpTRE9NR2xvYmFsT2JqZWN0JiBjYWxsZXJHbG9iYWxPYmpl
Y3QoSlNDOjpFeGVjU3RhdGUmKTsKK1dFQkNPUkVfRVhQT1JUIEpTRE9NR2xvYmFsT2JqZWN0JiBj
YWxsZXJHbG9iYWxPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJik7
CiAKIEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9NR2xvYmFsT2JqZWN0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBET01XcmFwcGVyV29ybGQmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAKaW5kZXggMzU0NWQ1ZDUxMWZm
ODY4MTk4YjE5MzUyYTA4ZDRlMWQyNTZhMzNjZC4uNDMxODFlMjRjOTA3NTVhYjhjYzU4MWIzMWZi
NzIyYmE2OTAwM2I1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3RUYXNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCkBAIC01MywxMyArNTMsMTMgQEAgY2xhc3MgSlNHbG9i
YWxPYmplY3RDYWxsYmFjayBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFsT2JqZWN0
Q2FsbGJhY2s+LAogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgICAgICBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwogCiAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBtX2dsb2JhbE9iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAvLyBXZSB3aWxsIGZhaWwgdG8gZ2V0IHRoZSBj
b250ZXh0IGlmIHRoZSBmcmFtZSBoYXMgYmVlbiBkZXRhY2hlZC4KICAgICAgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBKU0V4ZWNTdGF0ZTo6cnVuVGFzayhl
eGVjLCBtX3Rhc2spOworICAgICAgICBKU0V4ZWNTdGF0ZTo6cnVuVGFzayhsZXhpY2FsR2xvYmFs
T2JqZWN0LCBtX3Rhc2spOwogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmNwcAppbmRl
eCBkNmViZWU4OTZiMThlMzM3OGQ4NWU5YWJkOGQ2OGZlZTVmMzA3MmI1Li4zNDgxYjE4NzA5NDE5
NjliMmZiZDVlNDUxMDliNmQ1YmI3Y2FiNTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUl0ZXJhdG9yLmNwcApAQCAtMzYsOSArMzYsOSBAQCB2b2lkIGFkZFZhbHVlSXRl
cmFibGVNZXRob2RzKEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU09i
amVjdCYgcAogICAgIEpTQzo6QXJyYXlQcm90b3R5cGUqIGFycmF5UHJvdG90eXBlID0gZ2xvYmFs
T2JqZWN0LmFycmF5UHJvdG90eXBlKCk7CiAgICAgQVNTRVJUKGFycmF5UHJvdG90eXBlKTsKIAot
ICAgIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSA9IGdsb2JhbE9iamVjdC5nbG9iYWxFeGVjKCk7Ci0g
ICAgQVNTRVJUKHN0YXRlKTsKLSAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSAmZ2xvYmFsT2JqZWN0Owor
ICAgIEFTU0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBKU0M6OlZNJiB2bSA9IGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBhdXRvIGNvcHlQcm9wZXJ0eSA9IFsmXSAoY29u
c3QgSlNDOjpJZGVudGlmaWVyJiBhcnJheUlkZW50aWZpZXIsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgb3RoZXJJZGVudGlmaWVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCkgewogICAgICAgICBK
U0M6OkpTVmFsdWUgdmFsdWUgPSBhcnJheVByb3RvdHlwZS0+Z2V0RGlyZWN0KHZtLCBhcnJheUlk
ZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01J
dGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCmlu
ZGV4IGFkOWZhODUxNzQ3YjM2YmYyOTRhNDJiMGU2NDZkOTk1ZmYxYmZhMWYuLjM2NzlmYjIwYjBi
ZmY3OTRjOTE5NzQwNGFiYzY5ZGRiN2QxYzIwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUl0ZXJhdG9yLmgKQEAgLTEwMyw3ICsxMDMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBKU1dyYXBwZXIsIHR5cGVuYW1lIEl0ZXJhdG9yVHJhaXRzPiBjbGFzcyBKU0RPTUl0ZXJhdG9y
IDogcHVibAogICAgICAgICByZXR1cm4gUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmpl
Y3QsIFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QuaXRlcmF0b3JQcm90b3R5cGUoKSkpOwogICAgIH0KIAotICAgIEpTQzo6SlNWYWx1ZSBu
ZXh0KEpTQzo6RXhlY1N0YXRlJik7CisgICAgSlNDOjpKU1ZhbHVlIG5leHQoSlNDOjpKU0dsb2Jh
bE9iamVjdCYpOwogCiBwcml2YXRlOgogICAgIEpTRE9NSXRlcmF0b3IoSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNXcmFwcGVyJiBpdGVyYXRlZE9iamVjdCwgSXRlcmF0aW9uS2luZCBraW5k
KQpAQCAtMTEzLDggKzExMyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5h
bWUgSXRlcmF0b3JUcmFpdHM+IGNsYXNzIEpTRE9NSXRlcmF0b3IgOiBwdWJsCiAgICAgewogICAg
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVmFsdWUsIHR5cGVuYW1lIFQgPSBU
cmFpdHM+IEVuYWJsZUlmTWFwPFQsIEpTQzo6SlNWYWx1ZT4gYXNKUyhKU0M6OkV4ZWNTdGF0ZSYs
IEl0ZXJhdG9yVmFsdWUmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclZhbHVlLCB0
eXBlbmFtZSBUID0gVHJhaXRzPiBFbmFibGVJZlNldDxULCBKU0M6OkpTVmFsdWU+IGFzSlMoSlND
OjpFeGVjU3RhdGUmLCBJdGVyYXRvclZhbHVlJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmF0b3JWYWx1ZSwgdHlwZW5hbWUgVCA9IFRyYWl0cz4gRW5hYmxlSWZNYXA8VCwgSlNDOjpKU1Zh
bHVlPiBhc0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBJdGVyYXRvclZhbHVlJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JWYWx1ZSwgdHlwZW5hbWUgVCA9IFRyYWl0cz4gRW5hYmxl
SWZTZXQ8VCwgSlNDOjpKU1ZhbHVlPiBhc0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBJdGVyYXRv
clZhbHVlJik7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKQEAg
LTEyMiwyMyArMTIyLDIzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUg
SXRlcmF0b3JUcmFpdHM+IGNsYXNzIEpTRE9NSXRlcmF0b3IgOiBwdWJsCiAgICAgSXRlcmF0aW9u
S2luZCBtX2tpbmQ7CiB9OwogCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIGpzUGFpcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSB2YWx1ZTEsIEpTQzo6SlNWYWx1ZSB2YWx1ZTIpCitpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzUGFp
cihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHZhbHVlMSwgSlNDOjpKU1ZhbHVlIHZhbHVlMikKIHsKICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVl
MSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZTIpOwogICAgIEFTU0VSVCghYXJndW1lbnRz
Lmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KCZzdGF0ZSwgbnVs
bHB0ciwgJmdsb2JhbE9iamVjdCwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gY29uc3RydWN0QXJy
YXkoJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNDOjpBcnJheUFsbG9jYXRpb25Qcm9maWxl
Kj4obnVsbHB0ciksIGFyZ3VtZW50cyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZpcnN0VHlw
ZSwgdHlwZW5hbWUgU2Vjb25kVHlwZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gCi1pbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzUGFpcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIHZhbHVlMSwgY29uc3QgVSYgdmFsdWUyKQoraW5s
aW5lIEpTQzo6SlNWYWx1ZSBqc1BhaXIoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUx
LCBjb25zdCBVJiB2YWx1ZTIpCiB7Ci0gICAgcmV0dXJuIGpzUGFpcihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB0b0pTPEZpcnN0VHlwZT4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUxKSwgdG9KUzxT
ZWNvbmRUeXBlPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZTIpKTsKKyAgICByZXR1cm4ganNQ
YWlyKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgdG9KUzxGaXJzdFR5cGU+KGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgdmFsdWUxKSwgdG9KUzxTZWNvbmRUeXBl
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHZhbHVlMikpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBKU0l0ZXJhdG9yPiBKU0M6OkpTVmFsdWUgaXRlcmF0b3JDcmVhdGUodHlw
ZW5hbWUgSlNJdGVyYXRvcjo6V3JhcHBlciYsIEl0ZXJhdGlvbktpbmQpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgSlNJdGVyYXRvcj4gSlNDOjpKU1ZhbHVlIGl0ZXJhdG9yRm9yRWFjaChKU0M6OkV4ZWNT
dGF0ZSYsIHR5cGVuYW1lIEpTSXRlcmF0b3I6OldyYXBwZXImLCBKU0M6OlRocm93U2NvcGUmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIEpTSXRlcmF0b3I+IEpTQzo6SlNWYWx1ZSBpdGVyYXRvckZvckVh
Y2goSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwgdHlwZW5hbWUgSlNJdGVy
YXRvcjo6V3JhcHBlciYsIEpTQzo6VGhyb3dTY29wZSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBK
U0l0ZXJhdG9yPiBKU0M6OkpTVmFsdWUgaXRlcmF0b3JDcmVhdGUodHlwZW5hbWUgSlNJdGVyYXRv
cjo6V3JhcHBlciYgdGhpc09iamVjdCwgSXRlcmF0aW9uS2luZCBraW5kKQogewpAQCAtMTQ4LDE3
ICsxNDgsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSlNJdGVyYXRvcj4gSlNDOjpKU1ZhbHVlIGl0
ZXJhdG9yQ3JlYXRlKHR5cGVuYW1lIEpTSXRlcmF0b3I6OlcKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBJdGVyYXRvclRyYWl0cz4KLXRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yVmFsdWUsIHR5cGVuYW1lIFQ+IGlubGluZSBFbmFibGVJZk1hcDxULCBKU0M6OkpT
VmFsdWU+IEpTRE9NSXRlcmF0b3I8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46OmFzSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBJdGVyYXRvclZhbHVlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVu
YW1lIEl0ZXJhdG9yVmFsdWUsIHR5cGVuYW1lIFQ+IGlubGluZSBFbmFibGVJZk1hcDxULCBKU0M6
OkpTVmFsdWU+IEpTRE9NSXRlcmF0b3I8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46OmFzSlMo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSXRlcmF0b3JWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAKICAgICBzd2l0Y2ggKG1fa2luZCkg
ewogICAgIGNhc2UgSXRlcmF0aW9uS2luZDo6S2V5OgotICAgICAgICByZXR1cm4gdG9KUzx0eXBl
bmFtZSBUcmFpdHM6OktleVR5cGU+KHN0YXRlLCAqZ2xvYmFsT2JqZWN0KCksIHZhbHVlLT5rZXkp
OworICAgICAgICByZXR1cm4gdG9KUzx0eXBlbmFtZSBUcmFpdHM6OktleVR5cGU+KGxleGljYWxH
bG9iYWxPYmplY3QsICpnbG9iYWxPYmplY3QoKSwgdmFsdWUtPmtleSk7CiAgICAgY2FzZSBJdGVy
YXRpb25LaW5kOjpWYWx1ZToKLSAgICAgICAgcmV0dXJuIHRvSlM8dHlwZW5hbWUgVHJhaXRzOjpW
YWx1ZVR5cGU+KHN0YXRlLCAqZ2xvYmFsT2JqZWN0KCksIHZhbHVlLT52YWx1ZSk7CisgICAgICAg
IHJldHVybiB0b0pTPHR5cGVuYW1lIFRyYWl0czo6VmFsdWVUeXBlPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHZhbHVlLT52YWx1ZSk7CiAgICAgY2FzZSBJdGVyYXRpb25L
aW5kOjpLZXlWYWx1ZToKLSAgICAgICAgcmV0dXJuIGpzUGFpcjx0eXBlbmFtZSBUcmFpdHM6Oktl
eVR5cGUsIHR5cGVuYW1lIFRyYWl0czo6VmFsdWVUeXBlPihzdGF0ZSwgKmdsb2JhbE9iamVjdCgp
LCB2YWx1ZS0+a2V5LCB2YWx1ZS0+dmFsdWUpOworICAgICAgICByZXR1cm4ganNQYWlyPHR5cGVu
YW1lIFRyYWl0czo6S2V5VHlwZSwgdHlwZW5hbWUgVHJhaXRzOjpWYWx1ZVR5cGU+KGxleGljYWxH
bG9iYWxPYmplY3QsICpnbG9iYWxPYmplY3QoKSwgdmFsdWUtPmtleSwgdmFsdWUtPnZhbHVlKTsK
ICAgICB9OwogICAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTY2LDYwICsxNjYs
NjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JWYWx1ZSwgdHlwZW5hbWUgVD4gaW5saW5l
IEVuYWJsZUlmTWFwPFQsIEpTQzo6SlNWYWx1ZT4KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNX
cmFwcGVyLCB0eXBlbmFtZSBJdGVyYXRvclRyYWl0cz4KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yVmFsdWUsIHR5cGVuYW1lIFQ+IGlubGluZSBFbmFibGVJZlNldDxULCBKU0M6OkpTVmFsdWU+
IEpTRE9NSXRlcmF0b3I8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46OmFzSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBJdGVyYXRvclZhbHVlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yVmFsdWUsIHR5cGVuYW1lIFQ+IGlubGluZSBFbmFibGVJZlNldDxULCBKU0M6OkpTVmFs
dWU+IEpTRE9NSXRlcmF0b3I8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46OmFzSlMoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSXRlcmF0b3JWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKIAogICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gdGhpcy0+
Z2xvYmFsT2JqZWN0KCk7Ci0gICAgYXV0byByZXN1bHQgPSB0b0pTPHR5cGVuYW1lIFRyYWl0czo6
VmFsdWVUeXBlPihzdGF0ZSwgKmdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIGF1dG8gcmVzdWx0
ID0gdG9KUzx0eXBlbmFtZSBUcmFpdHM6OlZhbHVlVHlwZT4obGV4aWNhbEdsb2JhbE9iamVjdCwg
Kmdsb2JhbE9iamVjdCwgdmFsdWUpOwogCiAgICAgc3dpdGNoIChtX2tpbmQpIHsKICAgICBjYXNl
IEl0ZXJhdGlvbktpbmQ6OktleToKICAgICBjYXNlIEl0ZXJhdGlvbktpbmQ6OlZhbHVlOgogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIGNhc2UgSXRlcmF0aW9uS2luZDo6S2V5VmFsdWU6Ci0g
ICAgICAgIHJldHVybiBqc1BhaXIoc3RhdGUsICpnbG9iYWxPYmplY3QsIHJlc3VsdCwgcmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIGpzUGFpcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2Jq
ZWN0LCByZXN1bHQsIHJlc3VsdCk7CiAgICAgfTsKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIHJldHVybiB7IH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEpTSXRlcmF0b3IsIHR5
cGVuYW1lIEl0ZXJhdG9yVmFsdWU+IEVuYWJsZUlmTWFwPHR5cGVuYW1lIEpTSXRlcmF0b3I6OlRy
YWl0cz4gYXBwZW5kRm9yRWFjaEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXImIGFy
Z3VtZW50cywgSXRlcmF0b3JWYWx1ZSYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0l0ZXJh
dG9yLCB0eXBlbmFtZSBJdGVyYXRvclZhbHVlPiBFbmFibGVJZk1hcDx0eXBlbmFtZSBKU0l0ZXJh
dG9yOjpUcmFpdHM+IGFwcGVuZEZvckVhY2hBcmd1bWVudHMoSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJndW1lbnRzLCBJdGVyYXRvclZhbHVlJiB2YWx1ZSkK
IHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIGFyZ3VtZW50cy5hcHBlbmQodG9KUzx0eXBlbmFt
ZSBKU0l0ZXJhdG9yOjpUcmFpdHM6OlZhbHVlVHlwZT4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFs
dWUtPnZhbHVlKSk7Ci0gICAgYXJndW1lbnRzLmFwcGVuZCh0b0pTPHR5cGVuYW1lIEpTSXRlcmF0
b3I6OlRyYWl0czo6S2V5VHlwZT4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUtPmtleSkpOwor
ICAgIGFyZ3VtZW50cy5hcHBlbmQodG9KUzx0eXBlbmFtZSBKU0l0ZXJhdG9yOjpUcmFpdHM6OlZh
bHVlVHlwZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS0+dmFsdWUp
KTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKHRvSlM8dHlwZW5hbWUgSlNJdGVyYXRvcjo6VHJhaXRz
OjpLZXlUeXBlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHZhbHVlLT5rZXkp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSlNJdGVyYXRvciwgdHlwZW5hbWUgSXRlcmF0b3JW
YWx1ZT4gRW5hYmxlSWZTZXQ8dHlwZW5hbWUgSlNJdGVyYXRvcjo6VHJhaXRzPiBhcHBlbmRGb3JF
YWNoQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJndW1lbnRzLCBJdGVyYXRv
clZhbHVlJiB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEpTSXRlcmF0b3IsIHR5cGVuYW1lIEl0
ZXJhdG9yVmFsdWU+IEVuYWJsZUlmU2V0PHR5cGVuYW1lIEpTSXRlcmF0b3I6OlRyYWl0cz4gYXBw
ZW5kRm9yRWFjaEFyZ3VtZW50cyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6Ok1hcmtlZEFyZ3VtZW50
QnVmZmVyJiBhcmd1bWVudHMsIEl0ZXJhdG9yVmFsdWUmIHZhbHVlKQogewogICAgIEFTU0VSVCh2
YWx1ZSk7Ci0gICAgYXV0byBhcmd1bWVudCA9IHRvSlM8dHlwZW5hbWUgSlNJdGVyYXRvcjo6VHJh
aXRzOjpWYWx1ZVR5cGU+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBhdXRvIGFy
Z3VtZW50ID0gdG9KUzx0eXBlbmFtZSBKU0l0ZXJhdG9yOjpUcmFpdHM6OlZhbHVlVHlwZT4obGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgYXJndW1lbnRzLmFw
cGVuZChhcmd1bWVudCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChhcmd1bWVudCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEpTSXRlcmF0b3I+IEpTQzo6SlNWYWx1ZSBpdGVyYXRvckZvckVhY2go
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCB0eXBlbmFtZSBKU0l0ZXJhdG9yOjpXcmFwcGVyJiB0aGlz
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQordGVtcGxhdGU8dHlwZW5hbWUgSlNJdGVy
YXRvcj4gSlNDOjpKU1ZhbHVlIGl0ZXJhdG9yRm9yRWFjaChKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCB0eXBlbmFtZSBK
U0l0ZXJhdG9yOjpXcmFwcGVyJiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQog
ewotICAgIEpTQzo6SlNWYWx1ZSBjYWxsYmFjayA9IHN0YXRlLmFyZ3VtZW50KDApOwotICAgIEpT
Qzo6SlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKKyAgICBKU0M6OkpTVmFs
dWUgY2FsbGJhY2sgPSBjYWxsRnJhbWUuYXJndW1lbnQoMCk7CisgICAgSlNDOjpKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGNhbGxGcmFtZS5hcmd1bWVudCgxKTsKIAogICAgIEpTQzo6Q2FsbERhdGEgY2Fs
bERhdGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoc3Rh
dGUudm0oKSwgY2FsbGJhY2ssIGNhbGxEYXRhKTsKKyAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBl
ID0gSlNDOjpnZXRDYWxsRGF0YShKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2Fs
bGJhY2ssIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9u
ZSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsICJDYW5ub3Qg
Y2FsbCBjYWxsYmFjayJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmbGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3QgY2FsbCBjYWxsYmFjayJfcyk7CiAKICAgICBh
dXRvIGl0ZXJhdG9yID0gdGhpc09iamVjdC53cmFwcGVkKCkuY3JlYXRlSXRlcmF0b3IoKTsKICAg
ICB3aGlsZSAoYXV0byB2YWx1ZSA9IGl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAgICAgICAgYXBwZW5kRm9yRWFjaEFyZ3Vt
ZW50czxKU0l0ZXJhdG9yPihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIGFyZ3Vt
ZW50cywgdmFsdWUpOworICAgICAgICBhcHBlbmRGb3JFYWNoQXJndW1lbnRzPEpTSXRlcmF0b3I+
KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBhcmd1bWVu
dHMsIHZhbHVlKTsKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCgmdGhpc09iamVjdCk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWShhcmd1bWVudHMuaGFzT3ZlcmZsb3dlZCgpKSkgewotICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIEpTQzo6Y2FsbCgmc3RhdGUsIGNh
bGxiYWNrLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJndW1lbnRzKTsKKyAgICAg
ICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsYmFjaywgY2FsbFR5cGUsIGNh
bGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cyk7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0yMzQsMTUgKzIz
NCwxNSBAQCB2b2lkIEpTRE9NSXRlcmF0b3I8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU1dyYXBwZXIsIHR5
cGVuYW1lIEl0ZXJhdG9yVHJhaXRzPgotSlNDOjpKU1ZhbHVlIEpTRE9NSXRlcmF0b3I8SlNXcmFw
cGVyLCBJdGVyYXRvclRyYWl0cz46Om5leHQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQorSlNDOjpK
U1ZhbHVlIEpTRE9NSXRlcmF0b3I8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46Om5leHQoSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICBpZiAobV9pdGVy
YXRvcikgewogICAgICAgICBhdXRvIGl0ZXJhdG9yVmFsdWUgPSBtX2l0ZXJhdG9yLT5uZXh0KCk7
CiAgICAgICAgIGlmIChpdGVyYXRvclZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUl0
ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgYXNKUyhzdGF0ZSwgaXRlcmF0b3JWYWx1ZSksIGZh
bHNlKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXNKUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBpdGVyYXRvclZhbHVl
KSwgZmFsc2UpOwogICAgICAgICBtX2l0ZXJhdG9yID0gV1RGOjpudWxsb3B0OwogICAgIH0KLSAg
ICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZp
bmVkKCksIHRydWUpOworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpqc1VuZGVmaW5lZCgpLCB0cnVlKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBJdGVyYXRvclRyYWl0cz4KQEAgLTI1Myw5
ICsyNTMsOSBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNET01JdGVyYXRv
clByb3RvdHlwZTxKU1dyYXBwZXIsIEl0ZXJhdG9yVHJhaQogCiAgICAgYXV0byBpdGVyYXRvciA9
IEpTQzo6anNEeW5hbWljQ2FzdDxKU0RPTUl0ZXJhdG9yPEpTV3JhcHBlciwgSXRlcmF0b3JUcmFp
dHM+Kj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghaXRlcmF0b3IpCi0g
ICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJh
bWUsIHNjb3BlLCAiQ2Fubm90IGNhbGwgbmV4dCgpIG9uIGEgbm9uLUl0ZXJhdG9yIG9iamVjdCJf
cykpOworICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIkNhbm5vdCBjYWxsIG5leHQoKSBvbiBhIG5vbi1JdGVyYXRv
ciBvYmplY3QiX3MpKTsKIAotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShpdGVyYXRv
ci0+bmV4dCgqY2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKGl0
ZXJhdG9yLT5uZXh0KCpnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNX
cmFwcGVyLCB0eXBlbmFtZSBJdGVyYXRvclRyYWl0cz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTU1hcExpa2UuY3BwCmluZGV4IGZmYTM1YjA1ZmQxNWVhNzFlYTEwZjZiY2NmMGE2
M2EzNzAyZWFkNzMuLmY3ZTYxZmViZGUyZWVhYWMwODEzYTlkZTVlM2Q2MmEyNWQ1M2YwM2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmNwcApAQCAtMzEsMTAg
KzMxLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBKU0M6OkpT
T2JqZWN0JiBnZXRCYWNraW5nTWFwKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVj
dCYgbWFwTGlrZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU09iamVjdCYgZ2V0QmFja2luZ01hcChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBt
YXBMaWtlKQogewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIGJhY2tpbmdN
YXAgPSBtYXBMaWtlLmdldCgmc3RhdGUsIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0u
Y2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmJhY2tpbmdNYXBQcml2YXRlTmFtZSgpKTsKKyAg
ICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKKyAgICBhdXRvIGJhY2tpbmdN
YXAgPSBtYXBMaWtlLmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuYmFja2luZ01hcFByaXZh
dGVOYW1lKCkpOwogICAgIHJldHVybiAqSlNDOjphc09iamVjdChiYWNraW5nTWFwKTsKIH0KIApA
QCAtNDMsNTUgKzQzLDU1IEBAIHZvaWQgaW5pdGlhbGl6ZUJhY2tpbmdNYXAoSlNDOjpWTSYgdm0s
IEpTQzo6SlNPYmplY3QmIG1hcExpa2UsIEpTQzo6SlNNYXAmIGJhY2tpCiAgICAgbWFwTGlrZS5w
dXREaXJlY3Qodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSkt
PmJ1aWx0aW5OYW1lcygpLmJhY2tpbmdNYXBQcml2YXRlTmFtZSgpLCAmYmFja2luZ01hcCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9
CiAKLUpTQzo6SlNNYXAmIGNyZWF0ZUJhY2tpbmdNYXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QmIG1hcExpa2Up
CitKU0M6OkpTTWFwJiBjcmVhdGVCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpK
U09iamVjdCYgbWFwTGlrZSkKIHsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0
byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgQVNTRVJUKG1hcExpa2UuZ2V0KCZzdGF0ZSwgc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCku
YmFja2luZ01hcFByaXZhdGVOYW1lKCkpLmlzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gYmFja2lu
Z01hcCA9IEpTQzo6SlNNYXA6OmNyZWF0ZSgmc3RhdGUsIHZtLCBnbG9iYWxPYmplY3QubWFwU3Ry
dWN0dXJlKCkpOworICAgIEFTU0VSVChtYXBMaWtlLmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVz
KCkuYmFja2luZ01hcFByaXZhdGVOYW1lKCkpLmlzVW5kZWZpbmVkKCkpOworICAgIGF1dG8gYmFj
a2luZ01hcCA9IEpTQzo6SlNNYXA6OmNyZWF0ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgdm0sIGds
b2JhbE9iamVjdC5tYXBTdHJ1Y3R1cmUoKSk7CiAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhj
ZXB0aW9uKCk7CiAgICAgbWFwTGlrZS5wdXREaXJlY3Qodm0sIHN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmJhY2tpbmdNYXBQcml2YXRl
TmFtZSgpLCBiYWNraW5nTWFwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICByZXR1cm4gKmJhY2tpbmdNYXA7CiB9CiAKLUpTQzo6
SlNWYWx1ZSBmb3J3YXJkQXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFwKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgbWFwTGlrZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBh
dHRyaWJ1dGVOYW1lKQorSlNDOjpKU1ZhbHVlIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tp
bmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09i
amVjdCYgbWFwTGlrZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBhdHRyaWJ1dGVOYW1lKQogewot
ICAgIHJldHVybiBnZXRCYWNraW5nTWFwKHN0YXRlLCBtYXBMaWtlKS5nZXQoJnN0YXRlLCBhdHRy
aWJ1dGVOYW1lKTsKKyAgICByZXR1cm4gZ2V0QmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBtYXBMaWtlKS5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIGF0dHJpYnV0ZU5hbWUpOwogfQog
Ci1KU0M6OkpTVmFsdWUgZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIG1hcExpa2UsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgZnVuY3Rpb25OYW1lKQorSlNDOjpKU1ZhbHVlIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUmIGNhbGxGcmFtZSwgSlNDOjpKU09iamVjdCYgbWFwTGlrZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBmdW5jdGlvbk5hbWUpCiB7Ci0gICAgYXV0byYgYmFja2luZ01hcCA9IGdldEJhY2tp
bmdNYXAoc3RhdGUsIG1hcExpa2UpOworICAgIGF1dG8mIGJhY2tpbmdNYXAgPSBnZXRCYWNraW5n
TWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2UpOwogCi0gICAgSlNDOjpKU1ZhbHVlIGZ1
bmN0aW9uID0gYmFja2luZ01hcC5nZXQoJnN0YXRlLCBmdW5jdGlvbk5hbWUpOworICAgIEpTQzo6
SlNWYWx1ZSBmdW5jdGlvbiA9IGJhY2tpbmdNYXAuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBm
dW5jdGlvbk5hbWUpOwogICAgIEFTU0VSVChmdW5jdGlvbik7CiAKICAgICBKU0M6OkNhbGxEYXRh
IGNhbGxEYXRhOwotICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRh
KHN0YXRlLnZtKCksIGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxs
VHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBmdW5jdGlv
biwgY2FsbERhdGEpOwogICAgIEFTU0VSVChjYWxsVHlwZSAhPSBKU0M6OkNhbGxUeXBlOjpOb25l
KTsKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAgICBmb3IgKHNp
emVfdCBjcHRyID0gMDsgY3B0ciA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytjcHRyKQotICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGNwdHIpKTsKKyAg
ICBmb3IgKHNpemVfdCBjcHRyID0gMDsgY3B0ciA8IGNhbGxGcmFtZS5hcmd1bWVudENvdW50KCk7
ICsrY3B0cikKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsRnJhbWUudW5jaGVja2VkQXJn
dW1lbnQoY3B0cikpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0g
ICAgcmV0dXJuIEpTQzo6Y2FsbCgmc3RhdGUsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
ICZiYWNraW5nTWFwLCBhcmd1bWVudHMpOworICAgIHJldHVybiBKU0M6OmNhbGwoJmxleGljYWxH
bG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsICZiYWNraW5nTWFwLCBh
cmd1bWVudHMpOwogfQogCi1KU0M6OkpTVmFsdWUgZm9yd2FyZEZvckVhY2hDYWxsVG9CYWNraW5n
TWFwKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNDOjpKU09iamVjdCYgbWFwTGlrZSkKK0pTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFjaENh
bGxUb0JhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNDOjpKU09iamVjdCYgbWFwTGlrZSkKIHsKICAgICBhdXRvKiBmdW5jdGlvbiA9IGdsb2Jh
bE9iamVjdC5idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoKS5qc0RPTUJpbmRpbmdJbnRlcm5hbHMo
KS5tX21hcExpa2VGb3JFYWNoRnVuY3Rpb24uZ2V0KCk7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsK
IAotICAgIGdldEJhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UpOworICAgIGdldEJhY2tpbmdNYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSk7CiAKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxE
YXRhOwotICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRhKHN0YXRl
LnZtKCksIGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9
IEpTQzo6Z2V0Q2FsbERhdGEobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBmdW5jdGlvbiwgY2Fs
bERhdGEpOwogICAgIEFTU0VSVChjYWxsVHlwZSAhPSBKU0M6OkNhbGxUeXBlOjpOb25lKTsKICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAgICBmb3IgKHNpemVfdCBj
cHRyID0gMDsgY3B0ciA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytjcHRyKQotICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGNwdHIpKTsKKyAgICBmb3Ig
KHNpemVfdCBjcHRyID0gMDsgY3B0ciA8IGNhbGxGcmFtZS5hcmd1bWVudENvdW50KCk7ICsrY3B0
cikKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsRnJhbWUudW5jaGVja2VkQXJndW1lbnQo
Y3B0cikpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgcmV0
dXJuIEpTQzo6Y2FsbCgmc3RhdGUsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsICZtYXBM
aWtlLCBhcmd1bWVudHMpOworICAgIHJldHVybiBKU0M6OmNhbGwoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsICZtYXBMaWtlLCBhcmd1bWVudHMpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1hcExp
a2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NTWFwTGlrZS5oCmluZGV4IGE3
YmU3NGY4ZjUzYWI2ZmExNTIxMjFhMmZhYjYwNTJmZmNmZjBmNjYuLmZlYjA5YmJmMjc5OGViMThl
OWJhNWU1NDU5Y2ZmNTdhMGM2YmFkNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NTWFwTGlrZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NTWFwTGlrZS5oCkBAIC0zNCwyMyArMzQsMjMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1KU0M6OkpTTWFwJiBjcmVhdGVCYWNraW5nTWFwKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QmKTsKK0pTQzo6SlNNYXAmIGNyZWF0ZUJhY2tpbmdN
YXAoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2Jq
ZWN0Jik7CiB2b2lkIGluaXRpYWxpemVCYWNraW5nTWFwKEpTQzo6Vk0mLCBKU0M6OkpTT2JqZWN0
JiwgSlNDOjpKU01hcCYpOwotSlNDOjpKU1ZhbHVlIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0Jh
Y2tpbmdNYXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJik7Ci1KU0M6OkpTVmFsdWUgZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmplY3QmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsK
LUpTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFjaENhbGxUb0JhY2tpbmdNYXAoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QmKTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiB2b2lkIHN5bmNocm9uaXplQmFja2luZ01hcChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgV3JhcHBlckNsYXNzJik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkU2l6ZVRvTWFwTGlrZShKU0M6
OkV4ZWNTdGF0ZSYsIFdyYXBwZXJDbGFzcyYpOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNs
YXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEVudHJpZXNUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUm
LCBXcmFwcGVyQ2xhc3MmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpK
U1ZhbHVlIGZvcndhcmRLZXlzVG9NYXBMaWtlKEpTQzo6RXhlY1N0YXRlJiwgV3JhcHBlckNsYXNz
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3YXJk
VmFsdWVzVG9NYXBMaWtlKEpTQzo6RXhlY1N0YXRlJiwgV3JhcHBlckNsYXNzJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkQ2xlYXJUb01hcExp
a2UoSlNDOjpFeGVjU3RhdGUmLCBXcmFwcGVyQ2xhc3MmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFdy
YXBwZXJDbGFzcywgdHlwZW5hbWUgQ2FsbGJhY2s+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkRm9yRWFj
aFRvTWFwTGlrZShKU0M6OkV4ZWNTdGF0ZSYsIFdyYXBwZXJDbGFzcyYsIENhbGxiYWNrJiYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJdGVtVHlwZT4gSlNDOjpK
U1ZhbHVlIGZvcndhcmRHZXRUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmLCBXcmFwcGVyQ2xhc3Mm
LCBJdGVtVHlwZSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlwZW5hbWUg
SXRlbVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkSGFzVG9NYXBMaWtlKEpTQzo6RXhlY1N0YXRl
JiwgV3JhcHBlckNsYXNzJiwgSXRlbVR5cGUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVy
Q2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEFkZFRvTWFwTGlr
ZShKU0M6OkV4ZWNTdGF0ZSYsIFdyYXBwZXJDbGFzcyYsIEl0ZW1UeXBlJiYpOwotdGVtcGxhdGU8
dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJdGVtVHlwZT4gSlNDOjpKU1ZhbHVlIGZv
cndhcmREZWxldGVUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmLCBXcmFwcGVyQ2xhc3MmLCBJdGVt
VHlwZSYmKTsKK0pTQzo6SlNWYWx1ZSBmb3J3YXJkQXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFw
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0JiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJik7CitKU0M6OkpTVmFsdWUgZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBKU0M6OkpTT2JqZWN0JiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJik7CitKU0M6OkpTVmFsdWUgZm9yd2FyZEZvckVhY2hDYWxsVG9CYWNr
aW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgSlNDOjpKU09iamVjdCYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xh
c3M+IHZvaWQgc3luY2hyb25pemVCYWNraW5nTWFwKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFdyYXBwZXJDbGFzcyYpOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZFNpemVUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIFdyYXBwZXJDbGFzcyYpOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBK
U0M6OkpTVmFsdWUgZm9yd2FyZEVudHJpZXNUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEtleXNUb01hcExpa2UoSlND
OjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFz
cyYpOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTVmFsdWUgZm9yd2Fy
ZFZhbHVlc1RvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmIGNh
bGxGcmFtZSwgV3JhcHBlckNsYXNzJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+
IEpTQzo6SlNWYWx1ZSBmb3J3YXJkQ2xlYXJUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBDYWxsYmFjaz4gSlNDOjpKU1ZhbHVlIGZvcndh
cmRGb3JFYWNoVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYg
Y2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmLCBDYWxsYmFjayYmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkR2V0
VG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1l
LCBXcmFwcGVyQ2xhc3MmLCBJdGVtVHlwZSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkSGFzVG9NYXBMaWtl
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVy
Q2xhc3MmLCBJdGVtVHlwZSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlw
ZW5hbWUgSXRlbVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkQWRkVG9NYXBMaWtlKEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmLCBJ
dGVtVHlwZSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgSXRl
bVR5cGU+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkRGVsZXRlVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxP
YmplY3QmLCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xhc3MmLCBJdGVtVHlw
ZSYmKTsKIAogY2xhc3MgRE9NTWFwTGlrZSBmaW5hbCA6IHB1YmxpYyBET01HdWFyZGVkPEpTQzo6
SlNNYXA+IHsKIHB1YmxpYzoKQEAgLTY4LDg0ICs2OCw4NCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlPiBpbmxpbmUgdm9pZCBET01NYXBMaWtlOjpzZXQodHlwZW5hbWUg
S2V5OgogewogICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvKiBz
dGF0ZSA9IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9ja2VyKHN0YXRlKTsKLSAgICBiYWNraW5nTWFwKCktPnNldChzdGF0ZSwKLSAgICAgICAg
dG9KUzxLZXk+KCpzdGF0ZSwgKmdsb2JhbE9iamVjdCgpLCBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUg
S2V5OjpQYXJhbWV0ZXJUeXBlPihrZXkpKSwKLSAgICAgICAgdG9KUzxWYWx1ZT4oKnN0YXRlLCAq
Z2xvYmFsT2JqZWN0KCksIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBWYWx1ZTo6UGFyYW1ldGVyVHlw
ZT4odmFsdWUpKSk7CisgICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVj
dCgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBiYWNraW5nTWFwKCktPnNldChsZXhpY2FsR2xvYmFsT2JqZWN0LAorICAgICAgICB0b0pT
PEtleT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpnbG9iYWxPYmplY3QoKSwgc3RkOjpmb3J3YXJk
PHR5cGVuYW1lIEtleTo6UGFyYW1ldGVyVHlwZT4oa2V5KSksCisgICAgICAgIHRvSlM8VmFsdWU+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHN0ZDo6Zm9yd2FyZDx0eXBl
bmFtZSBWYWx1ZTo6UGFyYW1ldGVyVHlwZT4odmFsdWUpKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgc3luY2hyb25pemVCYWNraW5nTWFwKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgV3JhcHBl
ckNsYXNzJiBtYXBMaWtlKQordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUg
dm9pZCBzeW5jaHJvbml6ZUJhY2tpbmdNYXAoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNz
JiBtYXBMaWtlKQogewogICAgIGF1dG8gYmFja2luZ01hcCA9IG1hcExpa2Uud3JhcHBlZCgpLmJh
Y2tpbmdNYXAoKTsKICAgICBpZiAoYmFja2luZ01hcCkgewogICAgICAgICBBU1NFUlQoYmFja2lu
Z01hcC0+YmFja2luZ01hcCgpKTsKLSAgICAgICAgaW5pdGlhbGl6ZUJhY2tpbmdNYXAoc3RhdGUu
dm0oKSwgbWFwTGlrZSwgKmJhY2tpbmdNYXAtPmJhY2tpbmdNYXAoKSk7CisgICAgICAgIGluaXRp
YWxpemVCYWNraW5nTWFwKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBtYXBMaWtl
LCAqYmFja2luZ01hcC0+YmFja2luZ01hcCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBhdXRvJiBtYXAgPSBjcmVhdGVCYWNraW5nTWFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIG1hcExp
a2UpOworICAgIGF1dG8mIG1hcCA9IGNyZWF0ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBtYXBMaWtlKTsKICAgICBtYXBMaWtlLndyYXBwZWQoKS5zeW5jaHJv
bml6ZUJhY2tpbmdNYXAoRE9NTWFwTGlrZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgbWFwKSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBm
b3J3YXJkU2l6ZVRvTWFwTGlrZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdyYXBwZXJDbGFzcyYg
bWFwTGlrZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNW
YWx1ZSBmb3J3YXJkU2l6ZVRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UpCiB7Ci0gICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgIHJldHVybiBmb3J3YXJkQXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFw
KHN0YXRlLCBtYXBMaWtlLCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXplKTsKKyAgICBKU0M6OlZNJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBmb3J3YXJk
QXR0cmlidXRlR2V0dGVyVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1hcExpa2Us
IHZtLnByb3BlcnR5TmFtZXMtPnNpemUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEVudHJpZXNUb01hcExpa2UoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEVudHJpZXNUb01hcExp
a2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlKQogewotICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKLSAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01h
cChzdGF0ZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmll
c1B1YmxpY05hbWUoKSk7CisgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEtleXNUb01hcExp
a2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEtleXNU
b01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlKQogewotICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFj
a2luZ01hcChzdGF0ZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
a2V5c1B1YmxpY05hbWUoKSk7CisgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01h
cChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZFZhbHVlc1RvTWFw
TGlrZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkVmFs
dWVzVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsKLSAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxU
b0JhY2tpbmdNYXAoc3RhdGUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1l
cygpLnZhbHVlc1B1YmxpY05hbWUoKSk7CisgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFj
a2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkQ2xl
YXJUb01hcExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2Up
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9y
d2FyZENsZWFyVG9NYXBMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSkKIHsK
ICAgICBtYXBMaWtlLndyYXBwZWQoKS5jbGVhcigpOwotICAgIHJldHVybiBmb3J3YXJkRnVuY3Rp
b25DYWxsVG9CYWNraW5nTWFwKHN0YXRlLCBtYXBMaWtlLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFt
ZXMtPmNsZWFyKTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLnByb3BlcnR5TmFtZXMtPmNsZWFyKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBDYWxsYmFjaz4gaW5saW5lIEpTQzo6SlNWYWx1
ZSBmb3J3YXJkRm9yRWFjaFRvTWFwTGlrZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdyYXBwZXJD
bGFzcyYgbWFwTGlrZSwgQ2FsbGJhY2smJikKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFz
cywgdHlwZW5hbWUgQ2FsbGJhY2s+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEZvckVhY2hU
b01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlLCBDYWxsYmFjayYmKQog
ewotICAgIHJldHVybiBmb3J3YXJkRm9yRWFjaENhbGxUb0JhY2tpbmdNYXAoc3RhdGUsICptYXBM
aWtlLmdsb2JhbE9iamVjdCgpLCBtYXBMaWtlKTsKKyAgICByZXR1cm4gZm9yd2FyZEZvckVhY2hD
YWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgKm1hcExpa2Uu
Z2xvYmFsT2JqZWN0KCksIG1hcExpa2UpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVy
Q2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRHZXRU
b01hcExpa2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UsIEl0
ZW1UeXBlJiYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1U
eXBlPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGZvcndhcmRHZXRUb01hcExpa2UoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwg
V3JhcHBlckNsYXNzJiBtYXBMaWtlLCBJdGVtVHlwZSYmKQogewotICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChz
dGF0ZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHVibGlj
TmFtZSgpKTsKKyAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgbWFwTGlrZSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRp
bk5hbWVzKCkuZ2V0UHVibGljTmFtZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBl
ckNsYXNzLCB0eXBlbmFtZSBJdGVtVHlwZT4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkSGFz
VG9NYXBMaWtlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlLCBJ
dGVtVHlwZSYmKQordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBJdGVt
VHlwZT4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkSGFzVG9NYXBMaWtlKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUs
IFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwgSXRlbVR5cGUmJikKIHsKLSAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAo
c3RhdGUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmhhc1B1Ymxp
Y05hbWUoKSk7CisgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIG1hcExpa2UsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmhhc1B1YmxpY05hbWUoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBw
ZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZEFk
ZFRvTWFwTGlrZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwg
SXRlbVR5cGUmJiBpdGVtKQordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFt
ZSBJdGVtVHlwZT4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkQWRkVG9NYXBMaWtlKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxs
RnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwgSXRlbVR5cGUmJiBpdGVtKQogewogICAgIGlm
IChtYXBMaWtlLndyYXBwZWQoKS5hZGRGcm9tTWFwTGlrZShzdGQ6OmZvcndhcmQ8SXRlbVR5cGU+
KGl0ZW0pKSkKLSAgICAgICAgZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChzdGF0ZSwg
bWFwTGlrZSwgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT5hZGQpOworICAgICAgICBmb3J3YXJk
RnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
bWFwTGlrZSwgSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCkucHJvcGVydHlOYW1lcy0+
YWRkKTsKICAgICByZXR1cm4gJm1hcExpa2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBw
ZXJDbGFzcywgdHlwZW5hbWUgSXRlbVR5cGU+IGlubGluZSBKU0M6OkpTVmFsdWUgZm9yd2FyZERl
bGV0ZVRvTWFwTGlrZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdyYXBwZXJDbGFzcyYgbWFwTGlr
ZSwgSXRlbVR5cGUmJiBpdGVtKQordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBl
bmFtZSBJdGVtVHlwZT4gaW5saW5lIEpTQzo6SlNWYWx1ZSBmb3J3YXJkRGVsZXRlVG9NYXBMaWtl
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1l
JiBjYWxsRnJhbWUsIFdyYXBwZXJDbGFzcyYgbWFwTGlrZSwgSXRlbVR5cGUmJiBpdGVtKQogewog
ICAgIGF1dG8gaXNEZWxldGVkID0gbWFwTGlrZS53cmFwcGVkKCkucmVtb3ZlKHN0ZDo6Zm9yd2Fy
ZDxJdGVtVHlwZT4oaXRlbSkpOwogICAgIFVOVVNFRF9QQVJBTShpc0RlbGV0ZWQpOwotICAgIGF1
dG8gcmVzdWx0ID0gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChzdGF0ZSwgbWFwTGlr
ZSwgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBtYXBMaWtlLCBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KS5w
cm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmFzQm9vbGVhbigpID09IGlzRGVsZXRlZCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NT3BlcmF0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU9wZXJhdGlvbi5oCmluZGV4IDgwYTEy
MGNiOWQ5Y2EyZTUzN2YzZTBhMDVhYTY5NDFlOTY3Njg1NTQuLjgyNWM5ZjViYjVhNTliZDk5MzJk
MWZjZjcyYmZmNjg3NTNmZDIzMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01PcGVyYXRpb24uaApAQCAtMzIsMzQgKzMyLDM0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xh
c3M+CiBjbGFzcyBJRExPcGVyYXRpb24gewogcHVibGljOgogICAgIHVzaW5nIENsYXNzUGFyYW1l
dGVyID0gSlNDbGFzcyo7Ci0gICAgdXNpbmcgT3BlcmF0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSosIENsYXNzUGFyYW1ldGVyLCBKU0M6OlRocm93U2NvcGUmKTsKLSAg
ICB1c2luZyBTdGF0aWNPcGVyYXRpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgT3BlcmF0aW9uID0gSlNDOjpFbmNv
ZGVkSlNWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqLCBDbGFzc1Bh
cmFtZXRlciwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgU3RhdGljT3BlcmF0aW9uID0g
SlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUq
LCBKU0M6OlRocm93U2NvcGUmKTsKIAotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0KEpTQzo6RXhl
Y1N0YXRlJik7CisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3QoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6Q2FsbEZyYW1lJik7CiAKICAgICB0ZW1wbGF0ZTxPcGVyYXRpb24gb3BlcmF0aW9uLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpUaHJvdz4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKKyAgICBzdGF0aWMgSlND
OjpFbmNvZGVkSlNWYWx1ZSBjYWxsKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5h
bWUpCiAgICAgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHN0YXRlLnZtKCkpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgCi0gICAgICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0KHN0YXRlKTsKKyAgICAgICAgYXV0byogdGhpc09iamVj
dCA9IGNhc3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKTsKICAgICAgICAgaWYgKHNo
b3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFko
IXRoaXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUp
OworICAgICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFt
ZSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CiAgICAgICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKICAgICAg
ICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2Vu
ZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0Lgot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uKCZzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJh
dGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIGxleGljYWxHbG9iYWxPYmplY3QgYW5kIHRo
aXNPYmplY3QuCisgICAgICAgIHJldHVybiBvcGVyYXRpb24oJmxleGljYWxHbG9iYWxPYmplY3Qs
ICZjYWxsRnJhbWUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPFN0YXRpY09wZXJhdGlvbiBvcGVyYXRpb24sIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNo
b3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBK
U0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxTdGF0aWMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBjaGFyKikKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsU3RhdGljKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxs
RnJhbWUsIGNvbnN0IGNoYXIqKQogICAgIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAK
LSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0
ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUuCi0gICAgICAgIHJldHVybiBvcGVy
YXRpb24oJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBy
ZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Ig
bGV4aWNhbEdsb2JhbE9iamVjdC4KKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbigmbGV4aWNhbEds
b2JhbE9iamVjdCwgJmNhbGxGcmFtZSwgdGhyb3dTY29wZSk7CiAgICAgfQogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01PcGVyYXRpb25SZXR1cm5pbmdQ
cm9taXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU9wZXJhdGlvblJldHVy
bmluZ1Byb21pc2UuaAppbmRleCA1NjU4ZjljODc0ZmQ0ODk0OTQzMDFhY2Y0ZDJkOTAxZDVkYzIw
ZmU5Li4wZmY3NDcxYzAyMzc0MGFiMDdkN2JkZThlYmM1MjNjNTlhODI0ZDNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU9wZXJhdGlvblJldHVybmluZ1Byb21p
c2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU9wZXJhdGlvblJldHVy
bmluZ1Byb21pc2UuaApAQCAtMzIsNjUgKzMyLDY1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xh
c3M+CiBjbGFzcyBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlIHsKIHB1YmxpYzoKICAgICB1
c2luZyBDbGFzc1BhcmFtZXRlciA9IEpTQ2xhc3MqOwotICAgIHVzaW5nIE9wZXJhdGlvbiA9IEpT
Qzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBDbGFzc1BhcmFtZXRlciwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgU3RhdGljT3Bl
cmF0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIE9wZXJhdGlvbiA9IEpT
Qzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKiwg
Q2xhc3NQYXJhbWV0ZXIsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYp
OworICAgIHVzaW5nIFN0YXRpY09wZXJhdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAKICAgICB0ZW1wbGF0ZTxPcGVyYXRpb24gb3BlcmF0aW9uLCBQ
cm9taXNlRXhlY3V0aW9uU2NvcGUgZXhlY3V0aW9uU2NvcGUsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+
Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpT
VmFsdWUgY2FsbChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVuY3Rpb248
ZXhlY3V0aW9uU2NvcGU+KHN0YXRlLCBbJm9wZXJhdGlvbk5hbWVdIChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkgewotICAgICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKyAgICAgICAg
cmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVuY3Rpb248ZXhlY3V0aW9u
U2NvcGU+KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgWyZvcGVyYXRpb25OYW1lXSAo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUm
IGNhbGxGcmFtZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKSB7CisgICAgICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byogdGhpc09i
amVjdCA9IElETE9wZXJhdGlvbjxKU0NsYXNzPjo6Y2FzdChzdGF0ZSk7CisgICAgICAgICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0gSURMT3BlcmF0aW9uPEpTQ2xhc3M+OjpjYXN0KGxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihwcm9t
aXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKICAgICAgICAgICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0
aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5k
IHRoaXNPYmplY3QuCi0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uKCZzdGF0ZSwgdGhpc09i
amVjdCwgV1RGTW92ZShwcm9taXNlKSwgdGhyb3dTY29wZSk7CisgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSBy
ZWZlcmVuY2VzIGZvciBsZXhpY2FsR2xvYmFsT2JqZWN0IGFuZCB0aGlzT2JqZWN0LgorICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmNhbGxGcmFtZSwg
dGhpc09iamVjdCwgV1RGTW92ZShwcm9taXNlKSwgdGhyb3dTY29wZSk7CiAgICAgICAgIH0pKTsK
ICAgICB9CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBjdXN0
b20gb3BlcmF0aW9ucyB3YW50IHRvIGhhbmRsZSB0aGUgY3JlYXRpb24gb2YgdGhlIHByb21pc2Ug
dGhlbXNlbHZlcy4KICAgICAvLyBJdCBpcyB0cmlnZ2VyZWQgdmlhIHRoZSBleHRlbmRlZCBhdHRy
aWJ1dGUgW1JldHVybnNPd25Qcm9taXNlXS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNDbGFzcz46Ok9wZXJhdGlvbiBvcGVyYXRpb24sIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+
Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFJldHVybmluZ093blByb21pc2Uo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQorICAgIHN0
YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxSZXR1cm5pbmdPd25Qcm9taXNlKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJh
bWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCiAgICAgewotICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpKTsKIAotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gSURMT3BlcmF0aW9uPEpTQ2xh
c3M+OjpjYXN0KHN0YXRlKTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9IElETE9wZXJhdGlv
bjxKU0NsYXNzPjo6Y2FzdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOwogICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBV
TkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdp
dGhUaGlzVHlwZUVycm9yKHN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0
aW9uTmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVy
YXRpb25OYW1lKTsKIAogICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CiAgICAgICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKIAotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBj
b2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbigmc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2Rl
IHRvIHVzZSByZWZlcmVuY2VzIGZvciBsZXhpY2FsR2xvYmFsT2JqZWN0IGFuZCB0aGlzT2JqZWN0
LgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmY2FsbEZy
YW1lLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxTdGF0
aWNPcGVyYXRpb24gb3BlcmF0aW9uLCBQcm9taXNlRXhlY3V0aW9uU2NvcGUgZXhlY3V0aW9uU2Nv
cGUsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OlJlamVjdFByb21pc2U+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUg
Y2FsbFN0YXRpYyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqKQorICAgIHN0YXRp
YyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxTdGF0aWMoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgY29uc3QgY2hhciop
CiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoY2FsbFByb21pc2VG
dW5jdGlvbjxleGVjdXRpb25TY29wZT4oc3RhdGUsIFtdIChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkgewotICAgICAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKyAgICAgICAgcmV0dXJu
IEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKGNhbGxQcm9taXNlRnVuY3Rpb248ZXhlY3V0aW9uU2NvcGU+
KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgW10gKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYgcHJvbWlzZSkgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhl
IGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlLgotICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbigmc3RhdGUsIFdURk1vdmUocHJvbWlzZSksIHRocm93
U2NvcGUpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmlu
ZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3IgbGV4aWNhbEdsb2JhbE9i
amVjdC4KKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb24oJmxleGljYWxHbG9iYWxPYmplY3Qs
ICZjYWxsRnJhbWUsIFdURk1vdmUocHJvbWlzZSksIHRocm93U2NvcGUpOwogICAgICAgICB9KSk7
CiAgICAgfQogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgY3Vz
dG9tIG9wZXJhdGlvbnMgd2FudCB0byBoYW5kbGUgdGhlIGNyZWF0aW9uIG9mIHRoZSBwcm9taXNl
IHRoZW1zZWx2ZXMuCiAgICAgLy8gSXQgaXMgdHJpZ2dlcmVkIHZpYSB0aGUgZXh0ZW5kZWQgYXR0
cmlidXRlIFtSZXR1cm5zT3duUHJvbWlzZV0uCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTQ2xhc3M+OjpTdGF0aWNPcGVyYXRpb24gb3BlcmF0aW9uLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQ
cm9taXNlPgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxTdGF0aWNSZXR1cm5p
bmdPd25Qcm9taXNlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciopCisgICAgc3Rh
dGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFN0YXRpY1JldHVybmluZ093blByb21pc2UoSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNh
bGxGcmFtZSwgY29uc3QgY2hhciopCiAgICAgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworICAgICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpKTsK
IAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVy
YXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZS4KLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZv
ciBsZXhpY2FsR2xvYmFsT2JqZWN0LgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAmY2FsbEZyYW1lLCB0aHJvd1Njb3BlKTsKICAgICB9CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAppbmRleCBlMWVlNmU3MzM5
NTFiNWVmNGI3NWIwOTkyZTgxOTZmOTQ3NjQ5NzNjLi45YTM4ZmQyMzgyNjlmNzliYmMwZWJkYzYz
MTM3OTY5NWVjYmQxYmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVByb21pc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJv
bWlzZS5jcHAKQEAgLTM4LDE2ICszOCwxNiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGNhbGxGdW5jdGlv
bihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc0Z1bmN0aW9uLCBKU0M6OkpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3VtZW50cykKK3N0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGNhbGxGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUganNGdW5jdGlvbiwgSlNDOjpKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmd1bWVudHMpCiB7Ci0gICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQzo6Q2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgYXV0byBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEodm0sIGpzRnVu
Y3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgIT0gSlNDOjpDYWxsVHlwZTo6
Tm9uZSk7Ci0gICAgYXV0byByZXN1bHQgPSBjYWxsKCZzdGF0ZSwganNGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cyk7CisgICAgYXV0byByZXN1bHQgPSBj
YWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IHRoaXNWYWx1ZSwgYXJndW1lbnRzKTsKIAotICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHNj
b3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkgfHwgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9u
KHN0YXRlLnZtKCksIHNjb3BlLmV4Y2VwdGlvbigpKSk7CisgICAgRVhDRVBUSU9OX0FTU0VSVF9V
TlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSB8fCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25F
eGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBzY29wZS5leGNlcHRpb24oKSkpOwog
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTU5LDggKzU5LDggQEAgdm9pZCBET01Qcm9taXNl
Ojp3aGVuU2V0dGxlZChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFjaykKIAogdm9pZCBE
T01Qcm9taXNlOjp3aGVuUHJvbWlzZUlzU2V0dGxlZChKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTT2JqZWN0KiBwcm9taXNlLCBGdW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJh
Y2spCiB7Ci0gICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0g
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3Qg
PSAqZ2xvYmFsT2JqZWN0OworICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgp
OwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvKiBoYW5kbGVyID0gSlNDOjpK
U05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgU3RyaW5nIHsg
fSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSopIG11dGFibGUgewogICAgICAgICBjYWxsYmFjaygpOwpAQCAtNjgsMjMgKzY4LDIzIEBA
IHZvaWQgRE9NUHJvbWlzZTo6d2hlblByb21pc2VJc1NldHRsZWQoSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU09iCiAgICAgfSk7CiAKICAgICBjb25zdCBKU0M6OklkZW50
aWZpZXImIHByaXZhdGVOYW1lID0gdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudGhl
blByaXZhdGVOYW1lKCk7Ci0gICAgYXV0byB0aGVuRnVuY3Rpb24gPSBwcm9taXNlLT5nZXQoJnN0
YXRlLCBwcml2YXRlTmFtZSk7CisgICAgYXV0byB0aGVuRnVuY3Rpb24gPSBwcm9taXNlLT5nZXQo
JmxleGljYWxHbG9iYWxPYmplY3QsIHByaXZhdGVOYW1lKTsKICAgICBBU1NFUlQodGhlbkZ1bmN0
aW9uLmlzRnVuY3Rpb24odm0pKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
dW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaGFuZGxlcik7CiAgICAgYXJndW1lbnRzLmFw
cGVuZChoYW5kbGVyKTsKLSAgICBjYWxsRnVuY3Rpb24oc3RhdGUsIHRoZW5GdW5jdGlvbiwgcHJv
bWlzZSwgYXJndW1lbnRzKTsKKyAgICBjYWxsRnVuY3Rpb24obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhlbkZ1bmN0aW9uLCBwcm9taXNlLCBhcmd1bWVudHMpOwogfQogCiBKU0M6OkpTVmFsdWUgRE9N
UHJvbWlzZTo6cmVzdWx0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gcHJvbWlzZSgpLT5yZXN1bHQo
bV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKS0+dm0oKSk7CisgICAgcmV0dXJuIHByb21pc2Uo
KS0+cmVzdWx0KG1fZ2xvYmFsT2JqZWN0LT52bSgpKTsKIH0KIAogRE9NUHJvbWlzZTo6U3RhdHVz
IERPTVByb21pc2U6OnN0YXR1cygpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChwcm9taXNlKCktPnN0
YXR1cyhtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLT52bSgpKSkgeworICAgIHN3aXRjaCAo
cHJvbWlzZSgpLT5zdGF0dXMobV9nbG9iYWxPYmplY3QtPnZtKCkpKSB7CiAgICAgY2FzZSBKU0M6
OkpTUHJvbWlzZTo6U3RhdHVzOjpQZW5kaW5nOgogICAgICAgICByZXR1cm4gU3RhdHVzOjpQZW5k
aW5nOwogICAgIGNhc2UgSlNDOjpKU1Byb21pc2U6OlN0YXR1czo6RnVsZmlsbGVkOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlRGVmZXJyZWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlRGVmZXJyZWQuY3BwCmlu
ZGV4IDAyZTY5NzgyYTA2MmRlNTk5NzI4NzkyYzRlNjc3ZGRmNDc4OGVhYzguLjMwMzQ0ZGM3MGE3
ZDE3N2ZkYTY2MzMzM2U1MzU5Mjc1YThlNmU2MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZURlZmVycmVkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHAKQEAgLTQzLDEyICs0MywxMiBA
QCBKU0M6OkpTVmFsdWUgRGVmZXJyZWRQcm9taXNlOjpwcm9taXNlKCkgY29uc3QKICAgICByZXR1
cm4gZGVmZXJyZWQoKS0+cHJvbWlzZSgpOwogfQogCi12b2lkIERlZmVycmVkUHJvbWlzZTo6Y2Fs
bEZ1bmN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSBmdW5jdGlvbiwgSlNWYWx1ZSByZXNv
bHV0aW9uKQordm9pZCBEZWZlcnJlZFByb21pc2U6OmNhbGxGdW5jdGlvbihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSBmdW5jdGlvbiwgSlNWYWx1ZSByZXNvbHV0
aW9uKQogewogICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmpl
Y3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBEZWZlcnJlZFByb21p
c2U6OmNhbGxGdW5jdGlvbihFeGVjU3RhdGUmIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24sIEpTVmFs
dWUgcmUKICAgICBhcmd1bWVudHMuYXBwZW5kKHJlc29sdXRpb24pOwogICAgIEFTU0VSVCghYXJn
dW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7CiAKLSAgICBjYWxsKCZleGVjLCBmdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOworICAgIGNhbGwoJmxl
eGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZp
bmVkKCksIGFyZ3VtZW50cyk7CiAKICAgICAvLyBEZWZlcnJlZFByb21pc2Ugc2hvdWxkIG9ubHkg
YmUgdXNlZCBieSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgd2VsbCBiZWhhdmVk
LgogICAgIC8vIEluIHByYWN0aWNlLCB0aGUgb25seSBleGNlcHRpb24gd2Ugc2hvdWxkIGV2ZXIg
c2VlIGhlcmUgaXMgdGhlIFRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24uCkBAIC04MSw5ICs4
MSw5IEBAIHZvaWQgRGVmZXJyZWRQcm9taXNlOjpyZWplY3QoKQogCiAgICAgQVNTRVJUKGRlZmVy
cmVkKCkpOwogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7Ci0gICAgYXV0byYgc3RhdGUgPSAq
bV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
ZXIoJnN0YXRlKTsKLSAgICByZWplY3Qoc3RhdGUsIEpTQzo6anNVbmRlZmluZWQoKSk7CisgICAg
YXV0byYgbGV4aWNhbEdsb2JhbE9iamVjdCA9ICptX2dsb2JhbE9iamVjdDsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrZXIoJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJlamVjdChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OmpzVW5kZWZpbmVkKCkpOwogfQogCiB2b2lkIERlZmVycmVk
UHJvbWlzZTo6cmVqZWN0KHN0ZDo6bnVsbHB0cl90KQpAQCAtOTMsOSArOTMsOSBAQCB2b2lkIERl
ZmVycmVkUHJvbWlzZTo6cmVqZWN0KHN0ZDo6bnVsbHB0cl90KQogCiAgICAgQVNTRVJUKGRlZmVy
cmVkKCkpOwogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7Ci0gICAgYXV0byYgc3RhdGUgPSAq
bV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
ZXIoJnN0YXRlKTsKLSAgICByZWplY3Qoc3RhdGUsIEpTQzo6anNOdWxsKCkpOworICAgIGF1dG8m
IGxleGljYWxHbG9iYWxPYmplY3QgPSAqbV9nbG9iYWxPYmplY3Q7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9ja2VyKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZWplY3QobGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpqc051bGwoKSk7CiB9CiAKIHZvaWQgRGVmZXJyZWRQcm9taXNlOjpy
ZWplY3QoRXhjZXB0aW9uIGV4Y2VwdGlvbikKQEAgLTEwNSwxMSArMTA1LDExIEBAIHZvaWQgRGVm
ZXJyZWRQcm9taXNlOjpyZWplY3QoRXhjZXB0aW9uIGV4Y2VwdGlvbikKIAogICAgIEFTU0VSVChk
ZWZlcnJlZCgpKTsKICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3QpOwotICAgIGF1dG8mIHN0YXRl
ID0gKm1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9ja2VyKCZzdGF0ZSk7CisgICAgYXV0byYgbGV4aWNhbEdsb2JhbE9iamVjdCA9ICptX2dsb2Jh
bE9iamVjdDsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogCiAgICAgaWYgKGV4Y2VwdGlvbi5jb2RlKCkgPT0gRXhpc3RpbmdFeGNlcHRpb25FcnJv
cikgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShzdGF0ZS52bSgp
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUobGV4aWNhbEdsb2Jh
bE9iamVjdC52bSgpKTsKIAogICAgICAgICBFWENFUFRJT05fQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpKTsKIApAQCAtMTIwLDE0ICsxMjAsMTQgQEAgdm9pZCBEZWZlcnJlZFByb21pc2U6OnJlamVj
dChFeGNlcHRpb24gZXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0gICAgYXV0byBlcnJv
ciA9IGNyZWF0ZURPTUV4Y2VwdGlvbihzdGF0ZSwgV1RGTW92ZShleGNlcHRpb24pKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCkp
OworICAgIGF1dG8gZXJyb3IgPSBjcmVhdGVET01FeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVj
dCwgV1RGTW92ZShleGNlcHRpb24pKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKSB7Ci0gICAgICAgIEFTU0VSVChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oc3Rh
dGUudm0oKSwgc2NvcGUuZXhjZXB0aW9uKCkpKTsKKyAgICAgICAgQVNTRVJUKGlzVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIHNjb3BlLmV4Y2Vw
dGlvbigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZWplY3Qoc3RhdGUsIGVy
cm9yKTsKKyAgICByZWplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgZXJyb3IpOwogfQogCiB2b2lk
IERlZmVycmVkUHJvbWlzZTo6cmVqZWN0KEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKQEAgLTEzNywxMSArMTM3LDExIEBAIHZvaWQgRGVmZXJyZWRQcm9taXNlOjpyZWpl
Y3QoRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogCiAgICAgQVNTRVJU
KGRlZmVycmVkKCkpOwogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7Ci0gICAgYXV0byYgc3Rh
dGUgPSAqbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrZXIoJnN0YXRlKTsKKyAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gKm1fZ2xv
YmFsT2JqZWN0OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcigmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAKICAgICBpZiAoZWMgPT0gRXhpc3RpbmdFeGNlcHRpb25FcnJvcikgewotICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShzdGF0ZS52bSgpKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgp
KTsKIAogICAgICAgICBFWENFUFRJT05fQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKIApAQCAt
MTUyLDE1ICsxNTIsMTUgQEAgdm9pZCBEZWZlcnJlZFByb21pc2U6OnJlamVjdChFeGNlcHRpb25D
b2RlIGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLSAgICBh
dXRvIGVycm9yID0gY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMsIG1lc3NhZ2UpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qudm0o
KSk7CisgICAgYXV0byBlcnJvciA9IGNyZWF0ZURPTUV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZWMsIG1lc3NhZ2UpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKLSAgICAgICAgQVNTRVJUKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihzdGF0ZS52
bSgpLCBzY29wZS5leGNlcHRpb24oKSkpOworICAgICAgICBBU1NFUlQoaXNUZXJtaW5hdGVkRXhl
Y3V0aW9uRXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgc2NvcGUuZXhjZXB0aW9u
KCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogCi0gICAgcmVqZWN0KHN0YXRlLCBlcnJv
cik7CisgICAgcmVqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGVycm9yKTsKIH0KIAogdm9pZCBE
ZWZlcnJlZFByb21pc2U6OnJlamVjdChjb25zdCBKU0M6OlByaXZhdGVOYW1lJiBwcml2YXRlTmFt
ZSkKQEAgLTE3MCwxNCArMTcwLDE0IEBAIHZvaWQgRGVmZXJyZWRQcm9taXNlOjpyZWplY3QoY29u
c3QgSlNDOjpQcml2YXRlTmFtZSYgcHJpdmF0ZU5hbWUpCiAKICAgICBBU1NFUlQoZGVmZXJyZWQo
KSk7CiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2tlcihzdGF0ZSk7Ci0gICAgcmVqZWN0KCpzdGF0ZSwgSlNDOjpTeW1ib2w6OmNyZWF0ZShz
dGF0ZS0+dm0oKSwgcHJpdmF0ZU5hbWUudWlkKCkpKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9ja2VyKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJlamVjdCgqbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpTeW1ib2w6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSkpOwogfQogCi12b2lkIHJlamVjdFByb21pc2VXaXRo
RXhjZXB0aW9uSWZBbnkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU1Byb21pc2VEZWZlcnJlZCYgcHJvbWlzZURlZmVycmVkKQordm9pZCBy
ZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTUHJvbWlz
ZURlZmVycmVkJiBwcm9taXNlRGVmZXJyZWQpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgaWYgKExJS0VMWSghc2NvcGUuZXhjZXB0
aW9uKCkpKQpAQCAtMTg5LDQ1ICsxODksNDQgQEAgdm9pZCByZWplY3RQcm9taXNlV2l0aEV4Y2Vw
dGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGcKICAg
ICBEZWZlcnJlZFByb21pc2U6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHByb21pc2VEZWZlcnJlZCkt
PnJlamVjdDxJRExBbnk+KGVycm9yKTsKIH0KIAotUmVmPERlZmVycmVkUHJvbWlzZT4gY3JlYXRl
RGVmZXJyZWRQcm9taXNlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01XaW5kb3cmIGRvbVdp
bmRvdykKK1JlZjxEZWZlcnJlZFByb21pc2U+IGNyZWF0ZURlZmVycmVkUHJvbWlzZShKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgSlNET01XaW5kb3cmIGRvbVdpbmRvdykKIHsKLSAgICBKU0M6OkpTUHJv
bWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0
ZSgmc3RhdGUsICZkb21XaW5kb3cpOworICAgIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqIGRlZmVy
cmVkID0gSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKCZkb21XaW5kb3cpOwogICAg
IC8vIGRlZmVycmVkIGNhbiBvbmx5IGJlIG51bGwgaW4gd29ya2Vycy4KICAgICBSRUxFQVNFX0FT
U0VSVChkZWZlcnJlZCk7CiAgICAgcmV0dXJuIERlZmVycmVkUHJvbWlzZTo6Y3JlYXRlKGRvbVdp
bmRvdywgKmRlZmVycmVkKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVSZWplY3Rl
ZFByb21pc2VXaXRoVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIFJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3JDYXVzZSBjYXVzZSkK
K0pTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSwgUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvckNhdXNlIGNhdXNlKQogewot
ICAgIEFTU0VSVChzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIGF1dG8mIGdsb2Jh
bE9iamVjdCA9ICpzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgZ2xvYmFs
T2JqZWN0ID0gbGV4aWNhbEdsb2JhbE9iamVjdDsKIAogICAgIGF1dG8gcHJvbWlzZUNvbnN0cnVj
dG9yID0gZ2xvYmFsT2JqZWN0LnByb21pc2VDb25zdHJ1Y3RvcigpOwotICAgIGF1dG8gcmVqZWN0
RnVuY3Rpb24gPSBwcm9taXNlQ29uc3RydWN0b3ItPmdldCgmc3RhdGUsIHN0YXRlLnZtKCkucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJpdmF0ZU5hbWUoKSk7Ci0gICAgYXV0
byogcmVqZWN0aW9uVmFsdWUgPSBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oY3JlYXRlVHlw
ZUVycm9yKCZzdGF0ZSwgZXJyb3JNZXNzYWdlKSk7CisgICAgYXV0byByZWplY3RGdW5jdGlvbiA9
IHByb21pc2VDb25zdHJ1Y3Rvci0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LnZtKCkucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJpdmF0
ZU5hbWUoKSk7CisgICAgYXV0byogcmVqZWN0aW9uVmFsdWUgPSBzdGF0aWNfY2FzdDxFcnJvcklu
c3RhbmNlKj4oY3JlYXRlVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBlcnJvck1lc3Nh
Z2UpKTsKICAgICBpZiAoY2F1c2UgPT0gUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvckNhdXNl
OjpOYXRpdmVHZXR0ZXIpCiAgICAgICAgIHJlamVjdGlvblZhbHVlLT5zZXROYXRpdmVHZXR0ZXJU
eXBlRXJyb3IoKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIGF1dG8gY2FsbFR5cGUg
PSBnZXRDYWxsRGF0YShzdGF0ZS52bSgpLCByZWplY3RGdW5jdGlvbiwgY2FsbERhdGEpOworICAg
IGF1dG8gY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIHJl
amVjdEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBl
OjpOb25lKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1
bWVudHMuYXBwZW5kKHJlamVjdGlvblZhbHVlKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNP
dmVyZmxvd2VkKCkpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKCZzdGF0ZSwg
cmVqZWN0RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgcHJvbWlzZUNvbnN0cnVjdG9yLCBh
cmd1bWVudHMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoJmxleGljYWxHbG9i
YWxPYmplY3QsIHJlamVjdEZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHByb21pc2VDb25z
dHJ1Y3RvciwgYXJndW1lbnRzKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIHBh
cnNlQXNKU09OKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBkYXRhKQorc3Rh
dGljIGlubGluZSBKU0M6OkpTVmFsdWUgcGFyc2VBc0pTT04oSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBkYXRhKQogewotICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2soc3RhdGUpOwotICAgIHJldHVybiBKU0M6OkpTT05QYXJzZShzdGF0ZSwg
ZGF0YSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UobGV4aWNhbEdsb2JhbE9iamVjdCwgZGF0YSk7CiB9
CiAKIHZvaWQgZnVsZmlsbFByb21pc2VXaXRoSlNPTihSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHBy
b21pc2UsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKLSAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSBw
YXJzZUFzSlNPTihwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBkYXRhKTsK
KyAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSBwYXJzZUFzSlNPTihwcm9taXNlLT5nbG9iYWxPYmpl
Y3QoKSwgZGF0YSk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcHJvbWlzZS0+cmVqZWN0KFN5
bnRheEVycm9yKTsKICAgICBlbHNlCkBAIC0yMzcsNyArMjM2LDcgQEAgdm9pZCBmdWxmaWxsUHJv
bWlzZVdpdGhKU09OKFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgY29uc3QgU3RyaW5n
JiBkYXRhKQogdm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhBcnJheUJ1ZmZlcihSZWY8RGVmZXJyZWRQ
cm9taXNlPiYmIHByb21pc2UsIEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcikKIHsKICAgICBpZiAo
IWFycmF5QnVmZmVyKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdDxJRExBbnk+KGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IocHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOwor
ICAgICAgICBwcm9taXNlLT5yZWplY3Q8SURMQW55PihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHBy
b21pc2UtPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcHJv
bWlzZS0+cmVzb2x2ZTxJRExJbnRlcmZhY2U8QXJyYXlCdWZmZXI+PigqYXJyYXlCdWZmZXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlRGVmZXJy
ZWQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZURlZmVycmVkLmgK
aW5kZXggYmM3NGFhZjNjYWYyOWRlMzg5NjA4ODI5ZjRmZjAyZmM0ZDIyNTQ2Zi4uNjY5N2I3M2M2
OGQ0ZjQxYjE1NGU4YmY2M2VkOWRlMTQzMDI0Zjg4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlRGVmZXJyZWQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5oCkBAIC00Miw5ICs0Miw5IEBAIGNs
YXNzIERlZmVycmVkUHJvbWlzZSA6IHB1YmxpYyBET01HdWFyZGVkPEpTQzo6SlNQcm9taXNlRGVm
ZXJyZWQ+IHsKICAgICAgICAgUmV0YWluUHJvbWlzZU9uUmVzb2x2ZQogICAgIH07CiAKLSAgICBz
dGF0aWMgUmVmUHRyPERlZmVycmVkUHJvbWlzZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgTW9kZSBtb2RlID0gTW9kZTo6Q2xl
YXJQcm9taXNlT25SZXNvbHZlKQorICAgIHN0YXRpYyBSZWZQdHI8RGVmZXJyZWRQcm9taXNlPiBj
cmVhdGUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgTW9kZSBtb2RlID0gTW9kZTo6
Q2xlYXJQcm9taXNlT25SZXNvbHZlKQogICAgIHsKLSAgICAgICAgYXV0byogcHJvbWlzZURlZmVy
cmVkID0gSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCk7CisgICAgICAgIGF1dG8qIHByb21pc2VEZWZlcnJlZCA9IEpTQzo6SlNQcm9taXNlRGVm
ZXJyZWQ6OnRyeUNyZWF0ZSgmZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYgKCFwcm9taXNlRGVm
ZXJyZWQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBEZWZlcnJlZFByb21pc2UoZ2xvYmFsT2JqZWN0LCAqcHJvbWlzZURlZmVycmVkLCBt
b2RlKSk7CkBAIC02Miw5ICs2Miw5IEBAIGNsYXNzIERlZmVycmVkUHJvbWlzZSA6IHB1YmxpYyBE
T01HdWFyZGVkPEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ+IHsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgQVNTRVJUKGRlZmVycmVkKCkpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
KCkpOwotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKLSAgICAg
ICAgcmVzb2x2ZSgqZXhlYywgdG9KUzxJRExUeXBlPigqZXhlYywgKmdsb2JhbE9iamVjdCgpLCBz
dGQ6OmZvcndhcmQ8dHlwZW5hbWUgSURMVHlwZTo6UGFyYW1ldGVyVHlwZT4odmFsdWUpKSk7Cisg
ICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxP
YmplY3QoKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgICAgICByZXNvbHZlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0b0pTPElETFR5
cGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHN0ZDo6Zm9yd2FyZDx0
eXBlbmFtZSBJRExUeXBlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSkpKTsKICAgICB9CiAKICAgICB2
b2lkIHJlc29sdmUoKQpAQCAtNzMsOSArNzMsOSBAQCBjbGFzcyBEZWZlcnJlZFByb21pc2UgOiBw
dWJsaWMgRE9NR3VhcmRlZDxKU0M6OkpTUHJvbWlzZURlZmVycmVkPiB7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIEFTU0VSVChkZWZlcnJlZCgpKTsKICAgICAgICAgQVNTRVJUKGdsb2Jh
bE9iamVjdCgpKTsKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7
Ci0gICAgICAgIHJlc29sdmUoKmV4ZWMsIEpTQzo6anNVbmRlZmluZWQoKSk7CisgICAgICAgIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3QoKTsK
KyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgICAgICByZXNvbHZlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OmpzVW5kZWZpbmVkKCkp
OwogICAgIH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIElETFR5cGU+CkBAIC04NSw5ICs4NSw5IEBA
IGNsYXNzIERlZmVycmVkUHJvbWlzZSA6IHB1YmxpYyBET01HdWFyZGVkPEpTQzo6SlNQcm9taXNl
RGVmZXJyZWQ+IHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQVNTRVJUKGRlZmVycmVk
KCkpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KCkpOwotICAgICAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKLSAgICAgICAgcmVzb2x2ZSgqZXhlYywgdG9KU05l
d2x5Q3JlYXRlZDxJRExUeXBlPigqZXhlYywgKmdsb2JhbE9iamVjdCgpLCBzdGQ6OmZvcndhcmQ8
dHlwZW5hbWUgSURMVHlwZTo6UGFyYW1ldGVyVHlwZT4odmFsdWUpKSk7CisgICAgICAgIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
ICAgICByZXNvbHZlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0b0pTTmV3bHlDcmVhdGVkPElETFR5
cGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHN0ZDo6Zm9yd2FyZDx0
eXBlbmFtZSBJRExUeXBlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSkpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxjbGFzcyBJRExUeXBlPgpAQCAtOTcsOSArOTcsOSBAQCBjbGFzcyBEZWZlcnJlZFBy
b21pc2UgOiBwdWJsaWMgRE9NR3VhcmRlZDxKU0M6OkpTUHJvbWlzZURlZmVycmVkPiB7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVChkZWZlcnJlZCgpKTsKICAgICAgICAgQVNT
RVJUKGdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgYXV0byogZXhlYyA9IGdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsK
LSAgICAgICAgcmVzb2x2ZSgqZXhlYywgdG9KU05ld2x5Q3JlYXRlZDxJRExUeXBlPigqZXhlYywg
Kmdsb2JhbE9iamVjdCgpLCBjcmVhdGVWYWx1ZSgqZ2xvYmFsT2JqZWN0KCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSkpKTsKKyAgICAgICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGds
b2JhbE9iamVjdCgpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIobGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgICAgIHJlc29sdmUoKmxleGljYWxHbG9iYWxPYmplY3QsIHRvSlNO
ZXdseUNyZWF0ZWQ8SURMVHlwZT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpnbG9iYWxPYmplY3Qo
KSwgY3JlYXRlVmFsdWUoKmdsb2JhbE9iamVjdCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
KSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgSURMVHlwZT4KQEAgLTEwOSw5ICsxMDks
OSBAQCBjbGFzcyBEZWZlcnJlZFByb21pc2UgOiBwdWJsaWMgRE9NR3VhcmRlZDxKU0M6OkpTUHJv
bWlzZURlZmVycmVkPiB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVChkZWZl
cnJlZCgpKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7Ci0gICAgICAgIHJlamVjdCgqZXhlYywgdG9K
UzxJRExUeXBlPigqZXhlYywgKmdsb2JhbE9iamVjdCgpLCBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUg
SURMVHlwZTo6UGFyYW1ldGVyVHlwZT4odmFsdWUpKSk7CisgICAgICAgIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3QoKTsKKyAgICAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9ja2VyKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICByZWpl
Y3QoKmxleGljYWxHbG9iYWxPYmplY3QsIHRvSlM8SURMVHlwZT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpnbG9iYWxPYmplY3QoKSwgc3RkOjpmb3J3YXJkPHR5cGVuYW1lIElETFR5cGU6OlBhcmFt
ZXRlclR5cGU+KHZhbHVlKSkpOwogICAgIH0KIAogICAgIHZvaWQgcmVqZWN0KCk7CkBAIC0xMjcs
OSArMTI3LDkgQEAgY2xhc3MgRGVmZXJyZWRQcm9taXNlIDogcHVibGljIERPTUd1YXJkZWQ8SlND
OjpKU1Byb21pc2VEZWZlcnJlZD4gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBBU1NF
UlQoZGVmZXJyZWQoKSk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QoKSk7Ci0gICAgICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAg
ICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwotICAgICAgICByZXNvbHZlKCpl
eGVjLCBjYWxsYmFjaygqZXhlYywgKmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3QoKTsKKyAgICAg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAg
ICByZXNvbHZlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsYmFjaygqZ2xvYmFsT2JqZWN0KCkp
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFjaz4KQEAgLTEzOSw5ICsx
MzksOSBAQCBjbGFzcyBEZWZlcnJlZFByb21pc2UgOiBwdWJsaWMgRE9NR3VhcmRlZDxKU0M6OkpT
UHJvbWlzZURlZmVycmVkPiB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVChk
ZWZlcnJlZCgpKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7Ci0gICAgICAgIHJlamVjdCgqZXhlYywg
Y2FsbGJhY2soKmV4ZWMsICpnbG9iYWxPYmplY3QoKSkpOworICAgICAgICBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0KCk7CisgICAgICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2tlcihsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmVq
ZWN0KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsYmFjaygqZ2xvYmFsT2JqZWN0KCkpKTsKICAg
ICB9CiAKICAgICBKU0M6OkpTVmFsdWUgcHJvbWlzZSgpIGNvbnN0OwpAQCAtMTU3LDEwICsxNTcs
MTAgQEAgY2xhc3MgRGVmZXJyZWRQcm9taXNlIDogcHVibGljIERPTUd1YXJkZWQ8SlNDOjpKU1By
b21pc2VEZWZlcnJlZD4gewogCiAgICAgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQo
KSBjb25zdCB7IHJldHVybiBndWFyZGVkKCk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2FsbEZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uLCBKU0M6
OkpTVmFsdWUgcmVzb2x1dGlvbik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjYWxsRnVuY3Rp
b24oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiwgSlNDOjpKU1Zh
bHVlIHJlc29sdXRpb24pOwogCi0gICAgdm9pZCByZXNvbHZlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHJlc29sdXRpb24pIHsgY2FsbEZ1bmN0aW9uKHN0YXRlLCBkZWZlcnJl
ZCgpLT5yZXNvbHZlKCksIHJlc29sdXRpb24pOyB9Ci0gICAgdm9pZCByZWplY3QoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgcmVzb2x1dGlvbikgeyBjYWxsRnVuY3Rpb24oc3Rh
dGUsIGRlZmVycmVkKCktPnJlamVjdCgpLCByZXNvbHV0aW9uKTsgfQorICAgIHZvaWQgcmVzb2x2
ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cmVzb2x1dGlvbikgeyBjYWxsRnVuY3Rpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgZGVmZXJyZWQo
KS0+cmVzb2x2ZSgpLCByZXNvbHV0aW9uKTsgfQorICAgIHZvaWQgcmVqZWN0KEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSByZXNvbHV0aW9uKSB7
IGNhbGxGdW5jdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBkZWZlcnJlZCgpLT5yZWplY3QoKSwg
cmVzb2x1dGlvbik7IH0KIAogICAgIE1vZGUgbV9tb2RlOwogfTsKQEAgLTI2OSw3MSArMjY5LDcx
IEBAIHRlbXBsYXRlPD4gY2xhc3MgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+IDogcHVibGljIERP
TVByb21pc2VEZWZlcnJlZEJhc2UgewogfTsKIAogCi1SZWY8RGVmZXJyZWRQcm9taXNlPiBjcmVh
dGVEZWZlcnJlZFByb21pc2UoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTVdpbmRvdyYpOworUmVmPERl
ZmVycmVkUHJvbWlzZT4gY3JlYXRlRGVmZXJyZWRQcm9taXNlKEpTQzo6SlNHbG9iYWxPYmplY3Qm
LCBKU0RPTVdpbmRvdyYpOwogCiB2b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEpTT04oUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiwgY29uc3QgU3RyaW5nJik7CiB2b2lkIGZ1bGZpbGxQcm9taXNlV2l0aEFy
cmF5QnVmZmVyKFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEFycmF5QnVmZmVyKik7CiB2b2lkIGZ1
bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIGNvbnN0
IHZvaWQqLCBzaXplX3QpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCByZWplY3RQcm9taXNlV2l0aEV4
Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpT
UHJvbWlzZURlZmVycmVkJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlamVjdFByb21pc2VXaXRo
RXhjZXB0aW9uSWZBbnkoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpKU1Byb21pc2VEZWZlcnJlZCYpOwogCiBlbnVtIGNsYXNzIFJlamVjdGVkUHJvbWlzZVdp
dGhUeXBlRXJyb3JDYXVzZSB7IE5hdGl2ZUdldHRlciwgSW52YWxpZFRoaXMgfTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IFN0cmluZyYsIFJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3JDYXVzZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Io
SlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IFN0cmluZyYsIFJlamVjdGVkUHJvbWlzZVdpdGhU
eXBlRXJyb3JDYXVzZSk7CiAKLXVzaW5nIFByb21pc2VGdW5jdGlvbiA9IHZvaWQoSlNDOjpFeGVj
U3RhdGUmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKK3VzaW5nIFByb21pc2VGdW5jdGlvbiA9
IHZvaWQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwgUmVmPERlZmVycmVk
UHJvbWlzZT4mJik7CiAKIGVudW0gY2xhc3MgUHJvbWlzZUV4ZWN1dGlvblNjb3BlIHsgV2luZG93
T25seSwgV2luZG93T3JXb3JrZXIgfTsKIAogdGVtcGxhdGU8UHJvbWlzZUZ1bmN0aW9uIHByb21p
c2VGdW5jdGlvbiwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlIGV4ZWN1dGlvblNjb3BlPgotaW5saW5l
IEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkK
K2lubGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21pc2VGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQogewot
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKIAotICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9IGNhbGxlckdsb2JhbE9iamVj
dChzdGF0ZSk7Ci0gICAgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0g
SlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCk7
CisgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gY2FsbGVyR2xvYmFsT2JqZWN0KGxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSk7CisgICAgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKCZnbG9iYWxPYmpl
Y3QpOwogCiAgICAgLy8gcHJvbWlzZURlZmVycmVkIGNhbiBiZSBudWxsIHdoZW4gdGVybWluYXRp
bmcgYSBXb3JrZXIgYWJydXB0bHkuCiAgICAgaWYgKGV4ZWN1dGlvblNjb3BlID09IFByb21pc2VF
eGVjdXRpb25TY29wZTo6V2luZG93T3JXb3JrZXIgJiYgIXByb21pc2VEZWZlcnJlZCkKICAgICAg
ICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKIAotICAgIHByb21pc2VGdW5jdGlvbihzdGF0
ZSwgRGVmZXJyZWRQcm9taXNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCAqcHJvbWlzZURlZmVycmVk
KSk7CisgICAgcHJvbWlzZUZ1bmN0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
RGVmZXJyZWRQcm9taXNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCAqcHJvbWlzZURlZmVycmVkKSk7
CiAKLSAgICByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsICpwcm9taXNlRGVmZXJyZWQpOworICAgIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZB
bnkobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqcHJvbWlzZURlZmVycmVkKTsK
ICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKIHRlbXBsYXRlPFBy
b21pc2VFeGVjdXRpb25TY29wZSBleGVjdXRpb25TY29wZSwgdHlwZW5hbWUgUHJvbWlzZUZ1bmN0
b3I+Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIGNhbGxQcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBQcm9taXNlRnVuY3RvciBmdW5jdG9yKQoraW5saW5lIEpTQzo6SlNWYWx1ZSBj
YWxsUHJvbWlzZUZ1bmN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIFByb21pc2VGdW5jdG9yIGZ1bmN0b3IpCiB7
Ci0gICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogCi0gICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gY2FsbGVyR2xvYmFsT2Jq
ZWN0KHN0YXRlKTsKLSAgICBKU0M6OkpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQg
PSBKU0M6OkpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
KTsKKyAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSBjYWxsZXJHbG9iYWxPYmplY3QobGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lKTsKKyAgICBKU0M6OkpTUHJvbWlzZURlZmVycmVkKiBwcm9t
aXNlRGVmZXJyZWQgPSBKU0M6OkpTUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoJmdsb2JhbE9i
amVjdCk7CiAKICAgICAvLyBwcm9taXNlRGVmZXJyZWQgY2FuIGJlIG51bGwgd2hlbiB0ZXJtaW5h
dGluZyBhIFdvcmtlciBhYnJ1cHRseS4KICAgICBpZiAoZXhlY3V0aW9uU2NvcGUgPT0gUHJvbWlz
ZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPcldvcmtlciAmJiAhcHJvbWlzZURlZmVycmVkKQogICAg
ICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogCi0gICAgZnVuY3RvcihzdGF0ZSwgRGVm
ZXJyZWRQcm9taXNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCAqcHJvbWlzZURlZmVycmVkKSk7Cisg
ICAgZnVuY3RvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIERlZmVycmVkUHJvbWlz
ZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgKnByb21pc2VEZWZlcnJlZCkpOwogCi0gICAgcmVqZWN0
UHJvbWlzZVdpdGhFeGNlcHRpb25JZkFueShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqcHJvbWlzZURl
ZmVycmVkKTsKKyAgICByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKnByb21pc2VEZWZlcnJlZCk7CiAgICAgRVhDRVBUSU9O
X0FTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHBy
b21pc2VEZWZlcnJlZC0+cHJvbWlzZSgpOwogfQogCi11c2luZyBCaW5kaW5nUHJvbWlzZUZ1bmN0
aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYpOwordXNpbmcgQmluZGluZ1Byb21pc2VGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpT
VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKiwgUmVmPERlZmVycmVk
UHJvbWlzZT4mJik7CiB0ZW1wbGF0ZTxCaW5kaW5nUHJvbWlzZUZ1bmN0aW9uIGJpbmRpbmdGdW5j
dGlvbj4KLWlubGluZSB2b2lkIGJpbmRpbmdQcm9taXNlRnVuY3Rpb25BZGFwdGVyKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQoraW5saW5lIHZv
aWQgYmluZGluZ1Byb21pc2VGdW5jdGlvbkFkYXB0ZXIoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgUmVmPERlZmVycmVk
UHJvbWlzZT4mJiBwcm9taXNlKQogewotICAgIGJpbmRpbmdGdW5jdGlvbigmc3RhdGUsIFdURk1v
dmUocHJvbWlzZSkpOworICAgIGJpbmRpbmdGdW5jdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwg
JmNhbGxGcmFtZSwgV1RGTW92ZShwcm9taXNlKSk7CiB9CiAKIHRlbXBsYXRlPEJpbmRpbmdQcm9t
aXNlRnVuY3Rpb24gYmluZGluZ1Byb21pc2VGdW5jdGlvbiwgUHJvbWlzZUV4ZWN1dGlvblNjb3Bl
IGV4ZWN1dGlvblNjb3BlPgotaW5saW5lIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlzZUZ1bmN0aW9u
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK2lubGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21pc2VG
dW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGJp
bmRpbmdQcm9taXNlRnVuY3Rpb25BZGFwdGVyPGJpbmRpbmdQcm9taXNlRnVuY3Rpb24+LCBleGVj
dXRpb25TY29wZT4oc3RhdGUpOworICAgIHJldHVybiBjYWxsUHJvbWlzZUZ1bmN0aW9uPGJpbmRp
bmdQcm9taXNlRnVuY3Rpb25BZGFwdGVyPGJpbmRpbmdQcm9taXNlRnVuY3Rpb24+LCBleGVjdXRp
b25TY29wZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHAKaW5kZXggYzVjNDcwNjFiZmFjYTFmY2E3MjhiZTI3YjBhMmI0YTlmMGIzMDI1Zi4u
MGNlYWJiYTM3ODFiMWU1YjU0OTQ3ZDU0YzRhY2ExZmJlMjc3OTI3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBAIC0xMjYsMTEgKzEyNiwx
MSBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQoKQogICAgIC8vIHVzZXJz
IGNhbm5vdCBjaGFuZ2UgaXRzIGF0dHJpYnV0ZXMgZnVydGhlci4KICAgICAvLyBSZWFjaGluZyBo
ZXJlLCB0aGUgYXR0cmlidXRlcyBvZiAiZG9jdW1lbnQiIHByb3BlcnR5IHNob3VsZCBiZSBuZXZl
ciBjaGFuZ2VkLgogICAgIEFTU0VSVChtX3dyYXBwZWQtPmRvY3VtZW50KCkpOwotICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbEV4ZWMoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCA9IHRoaXM7CiAgICAgYm9vbCBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgPSBm
YWxzZTsKICAgICBib29sIGlnbm9yZVJlYWRPbmx5RXJyb3JzID0gdHJ1ZTsKICAgICBib29sIHB1
dFJlc3VsdCA9IGZhbHNlOwotICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0KHRo
aXMsIGV4ZWMsIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oZXhlYy0+dm0oKS5jbGllbnRE
YXRhKS0+YnVpbHRpbk5hbWVzKCkuZG9jdW1lbnRQdWJsaWNOYW1lKCksIHRvSlMoZXhlYywgdGhp
cywgbV93cmFwcGVkLT5kb2N1bWVudCgpKSwgc2hvdWxkVGhyb3dSZWFkT25seUVycm9yLCBpZ25v
cmVSZWFkT25seUVycm9ycywgcHV0UmVzdWx0KTsKKyAgICBzeW1ib2xUYWJsZVB1dFRvdWNoV2F0
Y2hwb2ludFNldCh0aGlzLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkuY2xpZW50RGF0YSktPmJ1aWx0aW5O
YW1lcygpLmRvY3VtZW50UHVibGljTmFtZSgpLCB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXMsIG1fd3JhcHBlZC0+ZG9jdW1lbnQoKSksIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciwgaWdu
b3JlUmVhZE9ubHlFcnJvcnMsIHB1dFJlc3VsdCk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIEpTRE9NV2luZG93QmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkBAIC0x
NjIsNyArMTYyLDcgQEAgYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnN1cHBvcnRzUmljaFNvdXJjZUlu
Zm8oY29uc3QgSlNHbG9iYWxPYmplY3QqIG9iamVjdCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRJbnRlcnJ1cHRTY3JpcHRUb1ByZXZlbnRJbmZpbml0ZVJlY3Vyc2lvbldoZW5DbG9zaW5nUGFn
ZShQYWdlKiBwYWdlKQogewogICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ3OTQ0Mz4uIFdl
IGRvbid0IHRoaW5rIHRoYXQgcGFnZSBjYW4gZXZlciBiZSBOVUxMCi0gICAgLy8gaW4gdGhpcyBj
YXNlLCBidXQgaWYgaXQgaXMsIHdlJ3ZlIGdvdHRlbiBpbnRvIGEgc3RhdGUgd2hlcmUgd2UgbWF5
IGhhdmUKKyAgICAvLyBpbiB0aGlzIGNhc2UsIGJ1dCBpZiBpdCBpcywgd2UndmUgZ290dGVuIGlu
dG8gYSBsZXhpY2FsR2xvYmFsT2JqZWN0IHdoZXJlIHdlIG1heSBoYXZlCiAgICAgLy8gaHVuZyB0
aGUgVUksIHdpdGggbm8gd2F5IHRvIGFzayB0aGUgY2xpZW50IHdoZXRoZXIgdG8gY2FuY2VsIGV4
ZWN1dGlvbi4KICAgICAvLyBGb3Igbm93LCBvdXIgc29sdXRpb24gaXMganVzdCB0byBjYW5jZWwg
ZXhlY3V0aW9uIG5vIG1hdHRlciB3aGF0LAogICAgIC8vIGVuc3VyaW5nIHRoYXQgd2UgbmV2ZXIg
aGFuZy4gV2UgbWlnaHQgd2FudCB0byBjb25zaWRlciBvdGhlciBzb2x1dGlvbnMKQEAgLTIyNywx
MiArMjI3LDEyIEBAIEpTV2luZG93UHJveHkqIEpTRE9NV2luZG93QmFzZTo6cHJveHkoKSBjb25z
dAogICAgIHJldHVybiBtX3Byb3h5OwogfQogCi1KU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBzdGF0
ZSwgRE9NV2luZG93JiBkb21XaW5kb3cpCitKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIERPTVdpbmRvdyYgZG9tV2luZG93KQogewogICAgIGF1dG8qIGZy
YW1lID0gZG9tV2luZG93LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgIHJldHVybiB0b0pTKHN0YXRlLCBmcmFtZS0+d2luZG93UHJveHkoKSk7
CisgICAgcmV0dXJuIHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZnJhbWUtPndpbmRvd1Byb3h5
KCkpOwogfQogCiBKU0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhGcmFtZSYgZnJhbWUsIERPTVdy
YXBwZXJXb3JsZCYgd29ybGQpCkBAIC0yNTcsMjYgKzI1NywyNiBAQCBKU0RPTVdpbmRvdyogdG9K
U0RPTVdpbmRvdyhKU0M6OlZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotRE9NV2luZG93JiBpbmN1bWJlbnRET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSkK
K0RPTVdpbmRvdyYgaW5jdW1iZW50RE9NV2luZG93KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gYXNKU0RPTVdp
bmRvdygmY2FsbGVyR2xvYmFsT2JqZWN0KHN0YXRlKSktPndyYXBwZWQoKTsKKyAgICByZXR1cm4g
YXNKU0RPTVdpbmRvdygmY2FsbGVyR2xvYmFsT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSkpLT53cmFwcGVkKCk7CiB9CiAKLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4
ZWNTdGF0ZSYgc3RhdGUpCitET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIGFzSlNET01X
aW5kb3coJmxleGljYWxHbG9iYWxPYmplY3QpLT53cmFwcGVkKCk7CiB9CiAKLURPTVdpbmRvdyYg
Zmlyc3RET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSkKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5k
b3coSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyh2bS52bUVudHJ5R2xvYmFsT2Jq
ZWN0KCZzdGF0ZSkpLT53cmFwcGVkKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC52bSgpOworICAgIHJldHVybiBhc0pTRE9NV2luZG93KHZtLnZtRW50cnlHbG9iYWxPYmplY3Qo
JmxleGljYWxHbG9iYWxPYmplY3QpKS0+d3JhcHBlZCgpOwogfQogCi1Eb2N1bWVudCogcmVzcG9u
c2libGVEb2N1bWVudChFeGVjU3RhdGUmIHN0YXRlKQorRG9jdW1lbnQqIHJlc3BvbnNpYmxlRG9j
dW1lbnQoQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7CiAgICAgQ2FsbGVyRnVuY3RvciBmdW5jdG9y
OwotICAgIHN0YXRlLml0ZXJhdGUoZnVuY3Rvcik7CisgICAgY2FsbEZyYW1lLml0ZXJhdGUoZnVu
Y3Rvcik7CiAgICAgYXV0byogY2FsbGVyRnJhbWUgPSBmdW5jdG9yLmNhbGxlckZyYW1lKCk7CiAg
ICAgaWYgKCFjYWxsZXJGcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zMDIsNjAg
KzMwMiw2MCBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6ZmlyZUZyYW1lQ2xlYXJlZFdhdGNocG9p
bnRzRm9yV2luZG93KERPTVdpbmRvdyogd2luZG93KQogICAgIH0KIH0KIAotSlNDOjpJZGVudGlm
aWVyIEpTRE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTTW9kdWxlTG9h
ZGVyKiBtb2R1bGVMb2FkZXIsIEpTQzo6SlNWYWx1ZSBtb2R1bGVOYW1lLCBKU0M6OkpTVmFsdWUg
aW1wb3J0ZXJNb2R1bGVLZXksIEpTQzo6SlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQorSlNDOjpJZGVu
dGlmaWVyIEpTRE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNNb2R1bGVMb2FkZXIqIG1vZHVsZUxvYWRlciwg
SlNDOjpKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTQzo6SlNWYWx1ZSBpbXBvcnRlck1vZHVsZUtleSwg
SlNDOjpKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlz
T2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oZ2xvYmFsT2JqZWN0KTsKICAg
ICBpZiAoUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5k
b2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZG9jdW1lbnQtPm1vZHVsZUxvYWRlcigpLnJlc29s
dmUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZU5hbWUsIGltcG9ydGVy
TW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1
bGVMb2FkZXIoKS5yZXNvbHZlKGdsb2JhbE9iamVjdCwgbW9kdWxlTG9hZGVyLCBtb2R1bGVOYW1l
LCBpbXBvcnRlck1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJG
ZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiBtb2R1bGVMb2FkZXIsIEpTQzo6SlNWYWx1ZSBtb2R1
bGVLZXksIEpTQzo6SlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU0M6OkpTVmFsdWUgc2NyaXB0RmV0Y2hl
cikKK0pTQzo6SlNJbnRlcm5hbFByb21pc2UqIEpTRE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVy
RmV0Y2goSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTTW9kdWxlTG9h
ZGVyKiBtb2R1bGVMb2FkZXIsIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXksIEpTQzo6SlNWYWx1ZSBw
YXJhbWV0ZXJzLCBKU0M6OkpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlz
T2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oZ2xvYmFsT2JqZWN0KTsKICAg
ICBpZiAoUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5k
b2N1bWVudCgpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRvY3VtZW50LT5t
b2R1bGVMb2FkZXIoKS5mZXRjaChnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9k
dWxlS2V5LCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRjaGVyKSk7Ci0gICAgSlNDOjpKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZDo6dHJ5Q3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgZG9jdW1lbnQtPm1vZHVsZUxvYWRlcigpLmZldGNoKGdsb2JhbE9iamVjdCwg
bW9kdWxlTG9hZGVyLCBtb2R1bGVLZXksIHBhcmFtZXRlcnMsIHNjcmlwdEZldGNoZXIpKTsKKyAg
ICBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVy
bmFsUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNVbmRlZmluZWQoKSkpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgZGVmZXJyZWQtPnJlamVjdChnbG9iYWxPYmplY3QsIGpzVW5kZWZp
bmVkKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTRE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVy
RXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpKU01vZHVsZUxvYWRlciogbW9kdWxlTG9hZGVyLCBKU0M6OkpTVmFsdWUg
bW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUgbW9kdWxlUmVjb3JkLCBKU0M6OkpTVmFsdWUgc2NyaXB0
RmV0Y2hlcikKK0pTQzo6SlNWYWx1ZSBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckV2YWx1
YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU01vZHVsZUxvYWRl
ciogbW9kdWxlTG9hZGVyLCBKU0M6OkpTVmFsdWUgbW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUgbW9k
dWxlUmVjb3JkLCBKU0M6OkpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKIHsKICAgICBKU0RPTVdpbmRv
d0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxP
YmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9h
ZGVyKCkuZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtl
eSwgbW9kdWxlUmVjb3JkLCBzY3JpcHRGZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50
LT5tb2R1bGVMb2FkZXIoKS5ldmFsdWF0ZShnbG9iYWxPYmplY3QsIG1vZHVsZUxvYWRlciwgbW9k
dWxlS2V5LCBtb2R1bGVSZWNvcmQsIHNjcmlwdEZldGNoZXIpOwogICAgIHJldHVybiBKU0M6Ompz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTQzo6SlNJbnRlcm5hbFByb21pc2UqIEpTRE9NV2luZG93QmFz
ZTo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNNb2R1bGVMb2FkZXIqIG1vZHVsZUxv
YWRlciwgSlNDOjpKU1N0cmluZyogbW9kdWxlTmFtZSwgSlNDOjpKU1ZhbHVlIHBhcmFtZXRlcnMs
IGNvbnN0IEpTQzo6U291cmNlT3JpZ2luJiBzb3VyY2VPcmlnaW4pCitKU0M6OkpTSW50ZXJuYWxQ
cm9taXNlKiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNNb2R1bGVMb2FkZXIqIG1vZHVsZUxv
YWRlciwgSlNDOjpKU1N0cmluZyogbW9kdWxlTmFtZSwgSlNDOjpKU1ZhbHVlIHBhcmFtZXRlcnMs
IGNvbnN0IEpTQzo6U291cmNlT3JpZ2luJiBzb3VyY2VPcmlnaW4pCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTRE9NV2luZG93QmFzZSogdGhp
c09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAg
ICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCku
ZG9jdW1lbnQoKSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBkb2N1bWVudC0+
bW9kdWxlTG9hZGVyKCkuaW1wb3J0TW9kdWxlKGdsb2JhbE9iamVjdCwgZXhlYywgbW9kdWxlTG9h
ZGVyLCBtb2R1bGVOYW1lLCBwYXJhbWV0ZXJzLCBzb3VyY2VPcmlnaW4pKTsKLSAgICBKU0M6OkpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCkuaW1wb3J0TW9kdWxl
KGdsb2JhbE9iamVjdCwgbW9kdWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBwYXJhbWV0ZXJzLCBzb3Vy
Y2VPcmlnaW4pKTsKKyAgICBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVk
ID0gSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNVbmRlZmluZWQoKSkp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGVmZXJyZWQtPnJlamVjdChnbG9iYWxP
YmplY3QsIGpzVW5kZWZpbmVkKCkpKTsKIH0KIAotSlNDOjpKU09iamVjdCogSlNET01XaW5kb3dC
YXNlOjptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTTW9kdWxl
TG9hZGVyKiBtb2R1bGVMb2FkZXIsIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXksIEpTQzo6SlNNb2R1
bGVSZWNvcmQqIG1vZHVsZVJlY29yZCwgSlNDOjpKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCitKU0M6
OkpTT2JqZWN0KiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQ
cm9wZXJ0aWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU01vZHVs
ZUxvYWRlciogbW9kdWxlTG9hZGVyLCBKU0M6OkpTVmFsdWUgbW9kdWxlS2V5LCBKU0M6OkpTTW9k
dWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQsIEpTQzo6SlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewog
ICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93
QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3Vt
ZW50LT5tb2R1bGVMb2FkZXIoKS5jcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhnbG9iYWxPYmpl
Y3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5LCBtb2R1bGVSZWNvcmQsIHNjcmlwdEZl
dGNoZXIpOwotICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBnbG9iYWxPYmpl
Y3QtPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgICAgIHJldHVybiBkb2N1
bWVudC0+bW9kdWxlTG9hZGVyKCkuY3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoZ2xvYmFsT2Jq
ZWN0LCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVjb3JkLCBzY3JpcHRGZXRjaGVy
KTsKKyAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBn
bG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiB9CiAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCi1zdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiB0cnlB
bGxvY2F0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZSwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGJ5dGVTaXplKQorc3RhdGljIE9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gdHJ5QWxsb2NhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGJ5dGVTaXplKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBhcnJheUJ1
ZmZlcjsKICAgICBpZiAoIWFycmF5QnVmZmVyLnRyeVJlc2VydmVDYXBhY2l0eShieXRlU2l6ZSkp
IHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
ZXhlYykpOworICAgICAgICBwcm9taXNlLT5yZWplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgY3Jl
YXRlT3V0T2ZNZW1vcnlFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCkBAIC0zNjUsNDkgKzM2NSw0OCBAQCBzdGF0aWMgT3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiB0cnlBbGxvY2F0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1Byb21pcwogICAgIHJldHVybiBhcnJheUJ1ZmZlcjsKIH0KIAotc3RhdGljIGJvb2wg
aXNSZXNwb25zZUNvcnJlY3QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEZldGNoUmVzcG9uc2UqIGlu
cHV0UmVzcG9uc2UsIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UpCitzdGF0aWMgYm9v
bCBpc1Jlc3BvbnNlQ29ycmVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBGZXRjaFJlc3BvbnNlKiBpbnB1dFJlc3BvbnNlLCBKU0M6OkpTUHJvbWlzZURlZmVycmVk
KiBwcm9taXNlKQogewogICAgIGJvb2wgaXNSZXNwb25zZUNvcnNTYW1lT3JpZ2luID0gaW5wdXRS
ZXNwb25zZS0+dHlwZSgpID09IFJlc291cmNlUmVzcG9uc2U6OlR5cGU6OkJhc2ljIHx8IGlucHV0
UmVzcG9uc2UtPnR5cGUoKSA9PSBSZXNvdXJjZVJlc3BvbnNlOjpUeXBlOjpDb3JzIHx8IGlucHV0
UmVzcG9uc2UtPnR5cGUoKSA9PSBSZXNvdXJjZVJlc3BvbnNlOjpUeXBlOjpEZWZhdWx0OwogCiAg
ICAgaWYgKCFpc1Jlc3BvbnNlQ29yc1NhbWVPcmlnaW4pIHsKLSAgICAgICAgcHJvbWlzZS0+cmVq
ZWN0KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVzcG9uc2UgaXMgbm90IENPUlMtc2Ft
ZS1vcmlnaW4iX3MpKTsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGxleGljYWxHbG9iYWxPYmpl
Y3QsIGNyZWF0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVzcG9uc2UgaXMgbm90
IENPUlMtc2FtZS1vcmlnaW4iX3MpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIGlmICghaW5wdXRSZXNwb25zZS0+b2soKSkgewotICAgICAgICBwcm9taXNlLT5yZWplY3Qo
ZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZXNwb25zZSBoYXMgbm90IHJldHVybmVkIE9L
IHN0YXR1cyJfcykpOworICAgICAgICBwcm9taXNlLT5yZWplY3QobGV4aWNhbEdsb2JhbE9iamVj
dCwgY3JlYXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsICJSZXNwb25zZSBoYXMgbm90
IHJldHVybmVkIE9LIHN0YXR1cyJfcykpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgYXV0byBjb250ZW50VHlwZSA9IGlucHV0UmVzcG9uc2UtPmhlYWRlcnMoKS5mYXN0R2V0
KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSk7CiAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShjb250ZW50VHlwZSwgImFwcGxpY2F0aW9uL3dhc20iKSkgewotICAgICAg
ICBwcm9taXNlLT5yZWplY3QoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJVbmV4cGVjdGVk
IHJlc3BvbnNlIE1JTUUgdHlwZS4gRXhwZWN0ZWQgJ2FwcGxpY2F0aW9uL3dhc20nIl9zKSk7Cisg
ICAgICAgIHByb21pc2UtPnJlamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjcmVhdGVUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgIlVuZXhwZWN0ZWQgcmVzcG9uc2UgTUlNRSB0eXBlLiBF
eHBlY3RlZCAnYXBwbGljYXRpb24vd2FzbSciX3MpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVSZXNwb25z
ZU9uU3RyZWFtaW5nQWN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEZldGNoUmVzcG9uc2UqIGlucHV0UmVzcG9uc2UsIEpTQzo6SlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2UsIEZ1bmN0aW9uPHZvaWQoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBieXRlU2l6ZSk+JiYgYWN0aW9uQ2FsbGJhY2sp
CitzdGF0aWMgdm9pZCBoYW5kbGVSZXNwb25zZU9uU3RyZWFtaW5nQWN0aW9uKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRmV0Y2hSZXNwb25zZSogaW5wdXRSZXNwb25zZSwgSlND
OjpKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgRnVuY3Rpb248dm9pZChKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgYnl0
ZVNpemUpPiYmIGFjdGlvbkNhbGxiYWNrKQogewotICAgIGlmICghaXNSZXNwb25zZUNvcnJlY3Qo
ZXhlYywgaW5wdXRSZXNwb25zZSwgcHJvbWlzZSkpCisgICAgaWYgKCFpc1Jlc3BvbnNlQ29ycmVj
dChnbG9iYWxPYmplY3QsIGlucHV0UmVzcG9uc2UsIHByb21pc2UpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoaW5wdXRSZXNwb25zZS0+aXNCb2R5UmVjZWl2ZWRCeUNodW5rKCkpIHsKICAg
ICAgICAgaW5wdXRSZXNwb25zZS0+Y29uc3VtZUJvZHlSZWNlaXZlZEJ5Q2h1bmsoW3Byb21pc2Us
IGNhbGxiYWNrID0gV1RGTW92ZShhY3Rpb25DYWxsYmFjayksIGdsb2JhbE9iamVjdCwgZGF0YSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCldIChhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAg
ICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgICAgIHBy
b21pc2UtPnJlamVjdChleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgcmVzdWx0LmV4Y2VwdGlv
bigpLm1lc3NhZ2UoKSkpOworICAgICAgICAgICAgICAgIHByb21pc2UtPnJlamVjdChnbG9iYWxP
YmplY3QsIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHJlc3VsdC5leGNlcHRpb24oKS5t
ZXNzYWdlKCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChhdXRvIGNodW5rID0gcmVzdWx0LnJldHVyblZhbHVlKCkpCiAgICAgICAg
ICAgICAgICAgZGF0YS0+YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNodW5r
LT5kYXRhKSwgY2h1bmstPnNpemUpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgICAgICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCi0g
ICAgICAgICAgICAgICAgY2FsbGJhY2soZXhlYywgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkp
OworICAgICAgICAgICAgICAgIGNhbGxiYWNrKGdsb2JhbE9iamVjdCwgZGF0YS0+ZGF0YSgpLCBk
YXRhLT5zaXplKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJu
OwpAQCAtNDE2LDU5ICs0MTUsNTkgQEAgc3RhdGljIHZvaWQgaGFuZGxlUmVzcG9uc2VPblN0cmVh
bWluZ0FjdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEoKICAgICBhdXRv
IGJvZHkgPSBpbnB1dFJlc3BvbnNlLT5jb25zdW1lQm9keSgpOwogICAgIFdURjo6c3dpdGNoT24o
Ym9keSwgWyZdIChSZWY8Rm9ybURhdGE+JiBmb3JtRGF0YSkgewogICAgICAgICBpZiAoYXV0byBi
dWZmZXIgPSBmb3JtRGF0YS0+YXNTaGFyZWRCdWZmZXIoKSkgewotICAgICAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAotICAgICAgICAgICAgYWN0aW9u
Q2FsbGJhY2soZXhlYywgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAg
ICAgIGFjdGlvbkNhbGxiYWNrKGdsb2JhbE9iamVjdCwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
c2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhN
RTogaHR0cDovL3dlYmtpdC5vcmcvYi8xODQ4ODY+IEltcGxlbWVudCBsb2FkaW5nIGZvciB0aGUg
QmxvYiB0eXBlCi0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIlVuZXhwZWN0ZWQgUmVzcG9uc2UncyBDb250ZW50LXR5cGUiX3MpKTsKKyAgICAgICAg
cHJvbWlzZS0+cmVqZWN0KGdsb2JhbE9iamVjdCwgY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgIlVuZXhwZWN0ZWQgUmVzcG9uc2UncyBDb250ZW50LXR5cGUiX3MpKTsKICAgICB9LCBbJl0g
KFJlZjxTaGFyZWRCdWZmZXI+JiBidWZmZXIpIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAKLSAgICAgICAgYWN0aW9uQ2FsbGJhY2soZXhlYywgYnVmZmVyLT5k
YXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgYWN0aW9uQ2FsbGJhY2soZ2xvYmFsT2Jq
ZWN0LCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwogICAgIH0sIFsmXSAoc3RkOjpu
dWxscHRyX3QmKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIlVuZXhwZWN0ZWQgUmVzcG9uc2UncyBDb250ZW50LXR5cGUiX3MpKTsKKyAgICAg
ICAgcHJvbWlzZS0+cmVqZWN0KGdsb2JhbE9iamVjdCwgY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgIlVuZXhwZWN0ZWQgUmVzcG9uc2UncyBDb250ZW50LXR5cGUiX3MpKTsKICAgICB9KTsK
IH0KIAotdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmNvbXBpbGVTdHJlYW1pbmcoSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZSwgSlNDOjpKU1ZhbHVlIHNvdXJjZSkKK3ZvaWQgSlNET01XaW5k
b3dCYXNlOjpjb21waWxlU3RyZWFtaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwgSlNDOjpKU1ZhbHVlIHNvdXJjZSkK
IHsKICAgICBBU1NFUlQoc291cmNlKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgQVNTRVJUKHZtLnByb21pc2VEZWZl
cnJlZFRpbWVyLT5oYXNQZW5kaW5nUHJvbWlzZShwcm9taXNlKSk7CiAgICAgQVNTRVJUKHZtLnBy
b21pc2VEZWZlcnJlZFRpbWVyLT5oYXNEZXBlbmRhbmN5SW5QZW5kaW5nUHJvbWlzZShwcm9taXNl
LCBnbG9iYWxPYmplY3QpKTsKIAogICAgIGlmIChhdXRvIGlucHV0UmVzcG9uc2UgPSBKU0ZldGNo
UmVzcG9uc2U6OnRvV3JhcHBlZCh2bSwgc291cmNlKSkgewotICAgICAgICBoYW5kbGVSZXNwb25z
ZU9uU3RyZWFtaW5nQWN0aW9uKGdsb2JhbE9iamVjdCwgZXhlYywgaW5wdXRSZXNwb25zZSwgcHJv
bWlzZSwgW3Byb21pc2VdIChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGJ5dGVTaXplKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGlmIChhdXRvIGFycmF5QnVm
ZmVyID0gdHJ5QWxsb2NhdGUoZXhlYywgcHJvbWlzZSwgZGF0YSwgYnl0ZVNpemUpKQotICAgICAg
ICAgICAgICAgIEpTQzo6SlNXZWJBc3NlbWJseTo6d2ViQXNzZW1ibHlNb2R1bGVWYWxpZGF0ZUFz
eW5jKGV4ZWMsIHByb21pc2UsIFdURk1vdmUoKmFycmF5QnVmZmVyKSk7CisgICAgICAgIGhhbmRs
ZVJlc3BvbnNlT25TdHJlYW1pbmdBY3Rpb24oZ2xvYmFsT2JqZWN0LCBpbnB1dFJlc3BvbnNlLCBw
cm9taXNlLCBbcHJvbWlzZV0gKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBieXRlU2l6ZSkgbXV0YWJsZSB7CisgICAgICAg
ICAgICBpZiAoYXV0byBhcnJheUJ1ZmZlciA9IHRyeUFsbG9jYXRlKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb21pc2UsIGRhdGEsIGJ5dGVTaXplKSkKKyAgICAgICAgICAgICAgICBKU0M6OkpTV2Vi
QXNzZW1ibHk6OndlYkFzc2VtYmx5TW9kdWxlVmFsaWRhdGVBc3luYyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBwcm9taXNlLCBXVEZNb3ZlKCphcnJheUJ1ZmZlcikpOwogICAgICAgICB9KTsKICAgICB9
IGVsc2UKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBSZXNwb25zZSBvciBQcm9taXNlIGZvciBSZXNw
b25zZSJfcykpOworICAgICAgICBwcm9taXNlLT5yZWplY3QoZ2xvYmFsT2JqZWN0LCBjcmVhdGVU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBSZXNwb25z
ZSBvciBQcm9taXNlIGZvciBSZXNwb25zZSJfcykpOwogfQogCi12b2lkIEpTRE9NV2luZG93QmFz
ZTo6aW5zdGFudGlhdGVTdHJlYW1pbmcoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZSwg
SlNDOjpKU1ZhbHVlIHNvdXJjZSwgSlNDOjpKU09iamVjdCogaW1wb3J0ZWRPYmplY3QpCit2b2lk
IEpTRE9NV2luZG93QmFzZTo6aW5zdGFudGlhdGVTdHJlYW1pbmcoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlLCBKU0M6OkpT
VmFsdWUgc291cmNlLCBKU0M6OkpTT2JqZWN0KiBpbXBvcnRlZE9iamVjdCkKIHsKICAgICBBU1NF
UlQoc291cmNlKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogCiAgICAgQVNTRVJUKHZtLnByb21pc2VEZWZlcnJlZFRpbWVyLT5o
YXNQZW5kaW5nUHJvbWlzZShwcm9taXNlKSk7CiAgICAgQVNTRVJUKHZtLnByb21pc2VEZWZlcnJl
ZFRpbWVyLT5oYXNEZXBlbmRhbmN5SW5QZW5kaW5nUHJvbWlzZShwcm9taXNlLCBnbG9iYWxPYmpl
Y3QpKTsKICAgICBBU1NFUlQodm0ucHJvbWlzZURlZmVycmVkVGltZXItPmhhc0RlcGVuZGFuY3lJ
blBlbmRpbmdQcm9taXNlKHByb21pc2UsIGltcG9ydGVkT2JqZWN0KSk7CiAKICAgICBpZiAoYXV0
byBpbnB1dFJlc3BvbnNlID0gSlNGZXRjaFJlc3BvbnNlOjp0b1dyYXBwZWQodm0sIHNvdXJjZSkp
IHsKLSAgICAgICAgaGFuZGxlUmVzcG9uc2VPblN0cmVhbWluZ0FjdGlvbihnbG9iYWxPYmplY3Qs
IGV4ZWMsIGlucHV0UmVzcG9uc2UsIHByb21pc2UsIFtwcm9taXNlLCBpbXBvcnRlZE9iamVjdF0g
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgYnl0ZVNpemUp
IG11dGFibGUgewotICAgICAgICAgICAgaWYgKGF1dG8gYXJyYXlCdWZmZXIgPSB0cnlBbGxvY2F0
ZShleGVjLCBwcm9taXNlLCBkYXRhLCBieXRlU2l6ZSkpCi0gICAgICAgICAgICAgICAgSlNDOjpK
U1dlYkFzc2VtYmx5Ojp3ZWJBc3NlbWJseU1vZHVsZUluc3RhbnRpbmF0ZUFzeW5jKGV4ZWMsIHBy
b21pc2UsIFdURk1vdmUoKmFycmF5QnVmZmVyKSwgaW1wb3J0ZWRPYmplY3QpOworICAgICAgICBo
YW5kbGVSZXNwb25zZU9uU3RyZWFtaW5nQWN0aW9uKGdsb2JhbE9iamVjdCwgaW5wdXRSZXNwb25z
ZSwgcHJvbWlzZSwgW3Byb21pc2UsIGltcG9ydGVkT2JqZWN0XSAoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGJ5dGVTaXpl
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGFycmF5QnVmZmVyID0gdHJ5QWxsb2Nh
dGUobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvbWlzZSwgZGF0YSwgYnl0ZVNpemUpKQorICAgICAg
ICAgICAgICAgIEpTQzo6SlNXZWJBc3NlbWJseTo6d2ViQXNzZW1ibHlNb2R1bGVJbnN0YW50aW5h
dGVBc3luYyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9taXNlLCBXVEZNb3ZlKCphcnJheUJ1ZmZl
ciksIGltcG9ydGVkT2JqZWN0KTsKICAgICAgICAgfSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHBy
b21pc2UtPnJlamVjdChleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgImZpcnN0IGFyZ3VtZW50
IG11c3QgYmUgYW4gUmVzcG9uc2Ugb3IgUHJvbWlzZSBmb3IgUmVzcG9uc2UiX3MpKTsKKyAgICAg
ICAgcHJvbWlzZS0+cmVqZWN0KGdsb2JhbE9iamVjdCwgY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gUmVzcG9uc2Ugb3IgUHJvbWlzZSBmb3Ig
UmVzcG9uc2UiX3MpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5oCmluZGV4IDg0ZjI4NTIyMDhlZjFiYTk3ZmMwOTFiNzA4NWE0Njky
NDJhY2VjN2EuLjVjYTE3OWFiNDliMWQ3ODU3OGY0NzUxM2I1N2JjZjhhZjIyMjNlMWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCkBAIC05MSwyNyAr
OTEsMjcgQEAgY2xhc3MgV0VCQ09SRV9FWFBPUlQgSlNET01XaW5kb3dCYXNlIDogcHVibGljIEpT
RE9NR2xvYmFsT2JqZWN0IHsKIHByaXZhdGU6CiAgICAgdXNpbmcgUmVzcG9uc2VDYWxsYmFjayA9
IFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBjaGFyKiwgc2l6ZV90KT47CiAKLSAgICBzdGF0aWMg
SlNDOjpJZGVudGlmaWVyIG1vZHVsZUxvYWRlclJlc29sdmUoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyBKU0M6OkpTSW50ZXJuYWxQcm9t
aXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBtb2R1bGVMb2FkZXJFdmFsdWF0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTTW9kdWxlTG9h
ZGVyKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3Rh
dGljIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwg
SlNDOjpKU1N0cmluZyosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpTb3VyY2VPcmlnaW4mKTsK
LSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogbW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVBy
b3BlcnRpZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU01v
ZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU01vZHVsZVJlY29yZCosIEpTQzo6SlNW
YWx1ZSk7CisgICAgc3RhdGljIEpTQzo6SWRlbnRpZmllciBtb2R1bGVMb2FkZXJSZXNvbHZlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIEpTQzo6SlNJbnRlcm5hbFBy
b21pc2UqIG1vZHVsZUxvYWRlckZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTTW9k
dWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSk7Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBtb2R1bGVMb2FkZXJFdmFsdWF0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBtb2R1
bGVMb2FkZXJJbXBvcnRNb2R1bGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNNb2R1bGVM
b2FkZXIqLCBKU0M6OkpTU3RyaW5nKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OlNvdXJjZU9y
aWdpbiYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBv
cnRNZXRhUHJvcGVydGllcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU01vZHVsZUxvYWRl
ciosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU01vZHVsZVJlY29yZCosIEpTQzo6SlNWYWx1ZSk7CiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgc3RhdGljIHZvaWQgY29tcGlsZVN0cmVhbWlu
ZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTUHJvbWlzZURl
ZmVycmVkKiwgSlNDOjpKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZVN0cmVh
bWluZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTUHJvbWlz
ZURlZmVycmVkKiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Kik7CisgICAgc3RhdGljIHZv
aWQgY29tcGlsZVN0cmVhbWluZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU1Byb21pc2VE
ZWZlcnJlZCosIEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIHZvaWQgaW5zdGFudGlhdGVTdHJl
YW1pbmcoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQqLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QqKTsKICNlbmRpZgogCiAgICAgUmVmUHRyPERPTVdpbmRv
dz4gbV93cmFwcGVkOwogICAgIEpTV2luZG93UHJveHkqIG1fcHJveHk7CiB9OwogCi1XRUJDT1JF
X0VYUE9SVCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYpOwor
V0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIERP
TVdpbmRvdyYpOwogLy8gVGhlIGZvbGxvd2luZyByZXR1cm4gYSBKU1dpbmRvd1Byb3h5IG9yIGpz
TnVsbCgpCiAvLyBKU0RPTUdsb2JhbE9iamVjdCogaXMgaWdub3JlZCwgYWNjZXNzaW5nIGEgd2lu
ZG93IGluIGFueSBjb250ZXh0IHdpbGwgdXNlIHRoYXQgRE9NV2luZG93J3MgcHJvdG90eXBlIGNo
YWluLgotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqLCBET01XaW5kb3cmIHdpbmRvdykgeyByZXR1cm4gdG9KUyhzdGF0ZSwg
d2luZG93KTsgfQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NV2luZG93KiB3aW5kb3cpIHsg
cmV0dXJuIHdpbmRvdyA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKndpbmRvdykgOiBKU0M6
OmpzTnVsbCgpOyB9Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBET01XaW5kb3cqIHdpbmRvdykgeyByZXR1cm4gd2luZG93ID8gdG9KUyhzdGF0ZSwgKndp
bmRvdykgOiBKU0M6OmpzTnVsbCgpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqLCBE
T01XaW5kb3cmIHdpbmRvdykgeyByZXR1cm4gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB3aW5k
b3cpOyB9CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NV2lu
ZG93KiB3aW5kb3cpIHsgcmV0dXJuIHdpbmRvdyA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCAqd2luZG93KSA6IEpTQzo6anNOdWxsKCk7IH0KK2lubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBET01X
aW5kb3cqIHdpbmRvdykgeyByZXR1cm4gd2luZG93ID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqd2luZG93KSA6IEpTQzo6anNOdWxsKCk7IH0KIAogLy8gVGhlIGZvbGxvd2luZyByZXR1cm4g
YSBKU0RPTVdpbmRvdyBvciBudWxscHRyLgogSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coRnJh
bWUmLCBET01XcmFwcGVyV29ybGQmKTsKQEAgLTEyMywxNiArMTIzLDE2IEBAIFdFQkNPUkVfRVhQ
T1JUIEpTRE9NV2luZG93KiB0b0pTRE9NV2luZG93KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwog
Ly8gKDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0
bWwjY29uY2VwdC1pbmN1bWJlbnQtZXZlcnl0aGluZz4sIDI3IEFwcmlsIDIwMTcpCiAvLyBGSVhN
RTogTWFrZSB0aGlzIHdvcmsgZm9yIGFuICJhdXRob3IgZnVuY3Rpb24gb3Igc2NyaXB0IHRoYXQg
b3JpZ2luYWxseSBzY2hlZHVsZWQgdGhlIGN1cnJlbnRseS1ydW5uaW5nIGNhbGxiYWNrLiIKIC8v
IFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQxMj4uCi1E
T01XaW5kb3cmIGluY3VtYmVudERPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSYpOworRE9NV2luZG93
JiBpbmN1bWJlbnRET01XaW5kb3coSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1l
Jik7CiAKLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlJik7Ci1ET01X
aW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlJik7CitET01XaW5kb3cmIGFjdGl2
ZURPTVdpbmRvdyhKU0M6OkpTR2xvYmFsT2JqZWN0Jik7CitET01XaW5kb3cmIGZpcnN0RE9NV2lu
ZG93KEpTQzo6SlNHbG9iYWxPYmplY3QmKTsKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2Jh
Ymx5IGJlIHJlbW92ZWQgaW4gZmF2b3Igb2Ygb25lIG9mIHRoZSBvdGhlciBET01XaW5kb3cgYWNj
ZXNzb3JzLiBJdCBpcyBpbnRlbmRlZAogLy8gICAgICAgIHRvIHByb3ZpZGUgdGhlIGRvY3VtZW50
IHNwZWNmaWVkIGFzIHRoZSAncmVzcG9uc2libGUgZG9jdW1lbnQnIGluIHRoZSBhbGdvcml0aG0g
Zm9yIGRvY3VtZW50Lm9wZW4oKQogLy8gICAgICAgIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cu
b3JnL211bHRpcGFnZS9keW5hbWljLW1hcmt1cC1pbnNlcnRpb24uaHRtbCNkb2N1bWVudC1vcGVu
LXN0ZXBzIHN0ZXBzIDQKIC8vICAgICAgICBhbmQgMjMgYW5kIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNyZXNwb25zaWJsZS1kb2N1bWVudCku
IEl0IGlzIG9ubHkKIC8vICAgICAgICB1c2VkIGJ5IEpTRG9jdW1lbnQuCi1Eb2N1bWVudCogcmVz
cG9uc2libGVEb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSYpOworRG9jdW1lbnQqIHJlc3BvbnNpYmxl
RG9jdW1lbnQoSlNDOjpDYWxsRnJhbWUmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCmluZGV4
IGEwNjA2YjgyZDM3ODNjOTdlZWI2MWUzNDUzMzU1OWJiYmQzMzQ5OTEuLjgxZjUwNDM3Mzk3NjM5
NmFmYjdjMzVjNzE2NjJlMDBiZTZkYTEzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTgyLDIwICs4MiwyMCBAQCB2b2lkIEpT
RE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
IH0KIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUganNET01XaW5kb3dXZWJLaXQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBqc0RPTVdpbmRv
d1dlYktpdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTRE9NV2luZG93
KiBjYXN0ZWRUaGlzID0gdG9KU0RPTVdpbmRvdyh2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2lu
ZG93KGV4ZWMsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSkpCisgICAgaWYgKCFCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGNhc3RlZFRoaXMtPndyYXBwZWQoKS53ZWJraXROYW1lc3Bh
Y2UoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLndl
YmtpdE5hbWVzcGFjZSgpKSk7CiB9CiAjZW5kaWYKIAogdGVtcGxhdGUgPERPTVdpbmRvd1R5cGUg
d2luZG93VHlwZT4KLWJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVk
QWNjZXNzKEpTRE9NR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0LCBBYnN0cmFjdERPTVdpbmRvdyYg
d2luZG93LCBFeGVjU3RhdGUmIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQorYm9vbCBqc0RPTVdp
bmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nlc3MoSlNET01HbG9iYWxPYmplY3Qq
IHRoaXNPYmplY3QsIEFic3RyYWN0RE9NV2luZG93JiB3aW5kb3csIEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8mIGJ1aWx0aW5O
YW1lcyA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0
aW5OYW1lcygpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9w
ZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzKEpTRE9NR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0CiAg
ICAgICAgIC8vIEZvciBhbnkgb3RoZXIgZW50cmllcyBpbiB0aGUgc3RhdGljIHByb3BlcnR5IHRh
YmxlLCBkZW55IGFjY2Vzcy4gKEVhcmx5IHJldHVybiBhbHNvIHByZXZlbnRzCiAgICAgICAgIC8v
IG5hbWVkIGdldHRlciBmcm9tIHJldHVybmluZyBmcmFtZXMgd2l0aCBtYXRjaGluZyBuYW1lcyAt
IHRoaXMgc2VlbXMgYSBsaXR0bGUgcXVlc3Rpb25hYmxlLCBzZWUKICAgICAgICAgLy8gRklYTUUg
Y29tbWVudCBvbiBwcm90b3R5cGUgc2VhcmNoIGJlbG93LikKLSAgICAgICAgdGhyb3dTZWN1cml0
eUVycm9yKHN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgdGhyb3dTZWN1cml0
eUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogICAgICAg
ICBzbG90LnNldFVuZGVmaW5lZCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAt
MTU4LDcgKzE1OCw3IEBAIGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmlj
dGVkQWNjZXNzKEpTRE9NR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0CiAgICAgYXV0byogZnJhbWUg
PSB3aW5kb3cuZnJhbWUoKTsKICAgICBpZiAoZnJhbWUgJiYgaXM8RnJhbWU+KCpmcmFtZSkpIHsK
ICAgICAgICAgaWYgKGF1dG8qIHNjb3BlZENoaWxkID0gZG93bmNhc3Q8RnJhbWU+KCpmcmFtZSku
dHJlZSgpLnNjb3BlZENoaWxkKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUp
KSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwgdG9KUygmc3RhdGUsIHNjb3BlZENo
aWxkLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSkpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSwgdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGVkQ2hpbGQtPmRvY3VtZW50KCkt
PmRvbVdpbmRvdygpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0KQEAgLTE2NiwxMiArMTY2LDEyIEBAIGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNs
b3RSZXN0cmljdGVkQWNjZXNzKEpTRE9NR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0CiAgICAgaWYg
KGhhbmRsZUNvbW1vbkNyb3NzT3JpZ2luUHJvcGVydGllcyh0aGlzT2JqZWN0LCB2bSwgcHJvcGVy
dHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICB0aHJvd1NlY3VyaXR5
RXJyb3Ioc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOworICAgIHRocm93U2VjdXJpdHlFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKICAgICBzbG90LnNl
dFVuZGVmaW5lZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KLXRlbXBsYXRlIGJvb2wganNET01X
aW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzPERPTVdpbmRvd1R5cGU6Okxv
Y2FsPihKU0RPTUdsb2JhbE9iamVjdCosIEFic3RyYWN0RE9NV2luZG93JiwgRXhlY1N0YXRlJiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmLCBjb25zdCBTdHJpbmcmKTsKLXRlbXBsYXRlIGJv
b2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzPERPTVdpbmRv
d1R5cGU6OlJlbW90ZT4oSlNET01HbG9iYWxPYmplY3QqLCBBYnN0cmFjdERPTVdpbmRvdyYsIEV4
ZWNTdGF0ZSYsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiwgY29uc3QgU3RyaW5nJik7Cit0
ZW1wbGF0ZSBib29sIGpzRE9NV2luZG93R2V0T3duUHJvcGVydHlTbG90UmVzdHJpY3RlZEFjY2Vz
czxET01XaW5kb3dUeXBlOjpMb2NhbD4oSlNET01HbG9iYWxPYmplY3QqLCBBYnN0cmFjdERPTVdp
bmRvdyYsIEpTR2xvYmFsT2JqZWN0JiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmLCBjb25z
dCBTdHJpbmcmKTsKK3RlbXBsYXRlIGJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RS
ZXN0cmljdGVkQWNjZXNzPERPTVdpbmRvd1R5cGU6OlJlbW90ZT4oSlNET01HbG9iYWxPYmplY3Qq
LCBBYnN0cmFjdERPTVdpbmRvdyYsIEpTR2xvYmFsT2JqZWN0JiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmLCBjb25zdCBTdHJpbmcmKTsKIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy8jY3Jvc3NvcmlnaW5nZXRvd25wcm9wZXJ0eWhlbHBlci0oLW8sLXAtKQogYm9vbCBoYW5k
bGVDb21tb25Dcm9zc09yaWdpblByb3BlcnRpZXMoSlNPYmplY3QqIHRoaXNPYmplY3QsIFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTg4
LDE5ICsxODgsMTkgQEAgYm9vbCBoYW5kbGVDb21tb25Dcm9zc09yaWdpblByb3BlcnRpZXMoSlNP
YmplY3QqIHRoaXNPYmplY3QsIFZNJiB2bSwgUHJvcGVydHlOYW0KIC8vICgxKSBpbmRleGVkIHBy
b3BlcnRpZXMsCiAvLyAoMikgcmVndWxhciBvd24gcHJvcGVydGllcywKIC8vICgzKSBuYW1lZCBw
cm9wZXJ0aWVzIChpbiBmYWN0LCB0aGVzZSBzaG91bGRuJ3QgYmUgb24gdGhlIHdpbmRvdywgc2hv
dWxkIGJlIG9uIHRoZSBOUE8pLgotYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNET01XaW5kb3c6OmdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIC8vICgxKSBGaXJzdCwgaW5kZXhlZCBwcm9wZXJ0aWVzLgogICAgIC8vIEhhbmQgb2ZmIGFs
bCBpbmRleGVkIGFjY2VzcyB0byBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4LCB3aGljaCBzdXBw
b3J0cyB0aGUgaW5kZXhlZCBnZXR0ZXIuCiAgICAgaWYgKE9wdGlvbmFsPHVuc2lnbmVkPiBpbmRl
eCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgcmV0dXJuIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgudmFsdWUoKSwgc2xvdCk7CisgICAg
ICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaW5kZXgudmFsdWUoKSwgc2xvdCk7CiAKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKIAogICAgIC8vIEhhbmQgb2ZmIGFsbCBjcm9z
cy1kb21haW4gYWNjZXNzIHRvIGpzRE9NV2luZG93R2V0T3duUHJvcGVydHlTbG90UmVzdHJpY3Rl
ZEFjY2Vzcy4KICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCpzdGF0ZSwgdGhpc09iamVjdC0+d3Jh
cHBlZCgpLCBlcnJvck1lc3NhZ2UpKQotICAgICAgICByZXR1cm4ganNET01XaW5kb3dHZXRPd25Q
cm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzPERPTVdpbmRvd1R5cGU6OkxvY2FsPih0aGlzT2Jq
ZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksICpzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBl
cnJvck1lc3NhZ2UpOworICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCks
IGVycm9yTWVzc2FnZSkpCisgICAgICAgIHJldHVybiBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5
U2xvdFJlc3RyaWN0ZWRBY2Nlc3M8RE9NV2luZG93VHlwZTo6TG9jYWw+KHRoaXNPYmplY3QsIHRo
aXNPYmplY3QtPndyYXBwZWQoKSwgKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
c2xvdCwgZXJyb3JNZXNzYWdlKTsKIAogICAgIC8vIEZJWE1FOiB0aGlzIG5lZWRzIG1vcmUgZXhw
bGFuYXRpb24uCiAgICAgLy8gKFBhcnRpY3VsYXJseSwgaXMgaXQgY29ycmVjdCB0aGF0IHRoaXMg
ZXhpc3RzIGhlcmUgYnV0IG5vdCBpbiBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4PykKQEAgLTIw
OCwxMyArMjA4LDEzIEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0CiAKICAgICAvLyAoMikgUmVn
dWxhciBvd24gcHJvcGVydGllcy4KICAgICBQcm9wZXJ0eVNsb3Qgc2xvdENvcHkgPSBzbG90Owot
ICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpIHsKKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKICAgICAg
ICAgYXV0byogZnJhbWUgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKTsKIAogICAgICAg
ICAvLyBEZXRlY3Qgd2hlbiB3ZSdyZSBnZXR0aW5nIHRoZSBwcm9wZXJ0eSAnc2hvd01vZGFsRGlh
bG9nJywgdGhpcyBpcyBkaXNhYmxlZCwgYW5kIGhhcyBpdHMgb3JpZ2luYWwgdmFsdWUuCi0gICAg
ICAgIGJvb2wgaXNTaG93TW9kYWxEaWFsb2dBbmRTaG91bGRIaWRlID0gcHJvcGVydHlOYW1lID09
IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oc3RhdGUtPnZtKCkuY2xpZW50RGF0YSktPmJ1
aWx0aW5OYW1lcygpLnNob3dNb2RhbERpYWxvZ1B1YmxpY05hbWUoKQorICAgICAgICBib29sIGlz
U2hvd01vZGFsRGlhbG9nQW5kU2hvdWxkSGlkZSA9IHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkuY2xpZW50RGF0YSkt
PmJ1aWx0aW5OYW1lcygpLnNob3dNb2RhbERpYWxvZ1B1YmxpY05hbWUoKQogICAgICAgICAgICAg
JiYgKCFmcmFtZSB8fCAhRE9NV2luZG93OjpjYW5TaG93TW9kYWxEaWFsb2coKmZyYW1lKSkKLSAg
ICAgICAgICAgICYmIHNsb3QuaXNWYWx1ZSgpICYmIGlzSG9zdEZ1bmN0aW9uKHNsb3QuZ2V0VmFs
dWUoc3RhdGUsIHByb3BlcnR5TmFtZSksIGpzRE9NV2luZG93SW5zdGFuY2VGdW5jdGlvblNob3dN
b2RhbERpYWxvZyk7CisgICAgICAgICAgICAmJiBzbG90LmlzVmFsdWUoKSAmJiBpc0hvc3RGdW5j
dGlvbihzbG90LmdldFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSksIGpz
RE9NV2luZG93SW5zdGFuY2VGdW5jdGlvblNob3dNb2RhbERpYWxvZyk7CiAgICAgICAgIC8vIFVu
bGVzcyB3ZSdyZSBpbiB0aGUgc2hvd01vZGFsRGlhbG9nIHNwZWNpYWwgY2FzZSwgd2UncmUgZG9u
ZS4KICAgICAgICAgaWYgKCFpc1Nob3dNb2RhbERpYWxvZ0FuZFNob3VsZEhpZGUpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBib29sIEpTRE9NV2luZG93Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJv
cGVydAogICAgIH0KIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCi0gICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHN0YXRlLT52bSgp
LmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS53ZWJraXRQdWJsaWNOYW1lKCkgJiYgdGhpc09i
amVjdC0+d3JhcHBlZCgpLnNob3VsZEhhdmVXZWJLaXROYW1lc3BhY2VGb3JXb3JsZCh0aGlzT2Jq
ZWN0LT53b3JsZCgpKSkgeworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gc3RhdGljX2Nhc3Q8SlNW
TUNsaWVudERhdGEqPihsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLmNsaWVudERhdGEpLT5idWls
dGluTmFtZXMoKS53ZWJraXRQdWJsaWNOYW1lKCkgJiYgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNo
b3VsZEhhdmVXZWJLaXROYW1lc3BhY2VGb3JXb3JsZCh0aGlzT2JqZWN0LT53b3JsZCgpKSkgewog
ICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHks
IGpzRE9NV2luZG93V2ViS2l0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjM1
LDkgKzIzNSw5IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0CiAvLyAoMSkgaW5kZXhlZCBwcm9w
ZXJ0aWVzLAogLy8gKDIpIHJlZ3VsYXIgb3duIHByb3BlcnRpZXMsCiAvLyAoMykgbmFtZWQgcHJv
cGVydGllcyAoaW4gZmFjdCwgdGhlc2Ugc2hvdWxkbid0IGJlIG9uIHRoZSB3aW5kb3csIHNob3Vs
ZCBiZSBvbiB0aGUgTlBPKS4KLWJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKICAg
ICBhdXRvJiB3aW5kb3cgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgYXV0byogZnJhbWUg
PSB3aW5kb3cuZnJhbWUoKTsKQEAgLTI0OSwyOCArMjQ5LDI4IEBAIGJvb2wgSlNET01XaW5kb3c6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwKICAgICBPcHRpb25hbDxib29sPiBjYWNoZWRJc0Nyb3NzT3JpZ2luQWNjZXNzOwogICAg
IGF1dG8gaXNDcm9zc09yaWdpbkFjY2VzcyA9IFsmXSB7CiAgICAgICAgIGlmICghY2FjaGVkSXND
cm9zc09yaWdpbkFjY2VzcykKLSAgICAgICAgICAgIGNhY2hlZElzQ3Jvc3NPcmlnaW5BY2Nlc3Mg
PSAhQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCpzdGF0ZSwg
d2luZG93LCBlcnJvck1lc3NhZ2UpOworICAgICAgICAgICAgY2FjaGVkSXNDcm9zc09yaWdpbkFj
Y2VzcyA9ICFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxl
eGljYWxHbG9iYWxPYmplY3QsIHdpbmRvdywgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJu
ICpjYWNoZWRJc0Nyb3NzT3JpZ2luQWNjZXNzOwogICAgIH07CiAKICAgICAvLyAoMSkgRmlyc3Qs
IGluZGV4ZWQgcHJvcGVydGllcy4KICAgICAvLyBUaGVzZSBhcmUgYWxzbyBhbGxvd2VkIGNyb3Nz
LW9yaWdpbiwgc28gY29tZSBiZWZvcmUgdGhlIGFjY2VzcyBjaGVjay4KICAgICBpZiAoZnJhbWUg
JiYgaW5kZXggPCBmcmFtZS0+dHJlZSgpLnNjb3BlZENoaWxkQ291bnQoKSkgewotICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSksIHRvSlMoc3RhdGUsIGZyYW1lLT50cmVlKCkuc2NvcGVk
Q2hpbGQoaW5kZXgpLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSkpOworICAgICAgICBzbG90LnNl
dFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSksIHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZnJhbWUtPnRyZWUo
KS5zY29wZWRDaGlsZChpbmRleCktPmRvY3VtZW50KCktPmRvbVdpbmRvdygpKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIEhhbmQgb2ZmIGFsbCBjcm9zcy1kb21haW4v
ZnJhbWVsZXNzIGFjY2VzcyB0byBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0
ZWRBY2Nlc3MuCiAgICAgaWYgKGlzQ3Jvc3NPcmlnaW5BY2Nlc3MoKSkKLSAgICAgICAgcmV0dXJu
IGpzRE9NV2luZG93R2V0T3duUHJvcGVydHlTbG90UmVzdHJpY3RlZEFjY2VzczxET01XaW5kb3dU
eXBlOjpMb2NhbD4odGhpc09iamVjdCwgd2luZG93LCAqc3RhdGUsIElkZW50aWZpZXI6OmZyb20o
dm0sIGluZGV4KSwgc2xvdCwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIGpzRE9NV2lu
ZG93R2V0T3duUHJvcGVydHlTbG90UmVzdHJpY3RlZEFjY2VzczxET01XaW5kb3dUeXBlOjpMb2Nh
bD4odGhpc09iamVjdCwgd2luZG93LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpLCBzbG90LCBlcnJvck1lc3NhZ2UpOwogCiAgICAgLy8gKDIpIFJlZ3Vs
YXIgb3duIHByb3BlcnRpZXMuCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNET01XaW5kb3c6OmRvUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrKEpTT2JqZWN0KiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQordm9pZCBKU0RPTVdpbmRvdzo6ZG9QdXRQ
cm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNs
b3QmKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KGNlbGwp
OwpAQCAtMjc4LDE4ICsyNzgsMTggQEAgdm9pZCBKU0RPTVdpbmRvdzo6ZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2soSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFAKICAgICAgICAg
cmV0dXJuOwogCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqc3RhdGUsIHRoaXNPYmplY3QtPndy
YXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgeworICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
LT53cmFwcGVkKCksIGVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBz
ZXR0aW5nICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9yaWdpbi4KICAgICAgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
LT5idWlsdGluTmFtZXMoKS5sb2NhdGlvblB1YmxpY05hbWUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2Fn
ZSk7CisgICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIGVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLWJvb2wgSlNE
T01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jv
b2wgSlNET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAg
Vk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RE9NV2luZG93Kj4oY2VsbCk7CkBAIC0yOTcsNDYgKzI5Nyw0NiBAQCBib29sIEpTRE9NV2luZG93
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
OwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93
KCpzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBlcnJvck1lc3NhZ2UpKSB7CisgICAgaWYg
KCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkgewogICAg
ICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxvY2F0aW9uIiBhdHRyaWJ1dGUgY3Jvc3Mt
b3JpZ2luLgogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IHN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLmxvY2F0aW9uUHVibGljTmFt
ZSgpKSB7CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAg
aWYgKGxvb2t1cFB1dChzdGF0ZSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LCB2YWx1ZSwgKnNf
aW5mby5zdGF0aWNQcm9wSGFzaFRhYmxlLCBzbG90LCBwdXRSZXN1bHQpKQorICAgICAgICAgICAg
aWYgKGxvb2t1cFB1dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmpl
Y3QsIHZhbHVlLCAqc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUsIHNsb3QsIHB1dFJlc3VsdCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29w
ZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLWJvb2wg
SlNET01XaW5kb3c6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQorYm9vbCBKU0RP
TVdpbmRvdzo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2Vs
bCk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSB8fCAhQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPndy
YXBwZWQoKSkpCisgICAgaWYgKCF0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSB8fCAhQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICByZXR1cm4gQmFzZTo6cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwg
dmFsdWUsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gQmFzZTo6cHV0QnlJbmRleCh0aGlzT2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0K
IAotYm9vbCBKU0RPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpTRE9NV2luZG93Ojpk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTRE9NV2luZG93KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CiAgICAgLy8gT25seSBhbGxv
dyBkZWxldGluZyBwcm9wZXJ0aWVzIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCi0gICAg
aWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywg
dGhpc09iamVjdC0+d3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQorICAgIGlmICghQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi1i
b29sIEpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNET01XaW5kb3c6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNET01XaW5kb3cq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKICAgICAvLyBPbmx5IGFs
bG93IGRlbGV0aW5nIHByb3BlcnRpZXMgYnkgZnJhbWVzIGluIHRoZSBzYW1lIG9yaWdpbi4KLSAg
ICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVj
LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpCisgICAgaWYgKCFC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBCYXNlOjpkZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKTsKIH0KIAogdm9pZCBKU0RPTVdpbmRvdzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxs
LCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpAQCAtMzc4LDkgKzM3OCw5IEBAIHN0YXRpYyB2b2lk
IGFkZENyb3NzT3JpZ2luUHJvcGVydHlOYW1lcyhWTSYgdm0sIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzCiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3Nzb3Jp
Z2lub3ducHJvcGVydHlrZXlzLSgtby0pCiB0ZW1wbGF0ZSA8Q3Jvc3NPcmlnaW5PYmplY3Qgb2Jq
ZWN0VHlwZT4KLXZvaWQgYWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKK3ZvaWQg
YWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7
Ci0gICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC52bSgpOwogICAgIGFkZENyb3NzT3JpZ2luUHJvcGVydHlOYW1lczxvYmplY3RUeXBl
Pih2bSwgcHJvcGVydHlOYW1lcyk7CiAKICAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciogY29u
c3QgcHJvcGVydGllc1tdID0gewpAQCAtMzkxLDEwICszOTEsMTAgQEAgdm9pZCBhZGRDcm9zc09y
aWdpbk93blByb3BlcnR5TmFtZXMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlByb3BlcnR5
TmFtZUFycmEKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoKnByb3BlcnR5KTsKIAogfQotdGVt
cGxhdGUgdm9pZCBhZGRDcm9zc09yaWdpbk93blByb3BlcnR5TmFtZXM8Q3Jvc3NPcmlnaW5PYmpl
Y3Q6OldpbmRvdz4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jik7Ci10
ZW1wbGF0ZSB2b2lkIGFkZENyb3NzT3JpZ2luT3duUHJvcGVydHlOYW1lczxDcm9zc09yaWdpbk9i
amVjdDo6TG9jYXRpb24+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYp
OwordGVtcGxhdGUgdm9pZCBhZGRDcm9zc09yaWdpbk93blByb3BlcnR5TmFtZXM8Q3Jvc3NPcmln
aW5PYmplY3Q6OldpbmRvdz4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkmKTsKK3RlbXBsYXRlIHZvaWQgYWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzPENy
b3NzT3JpZ2luT2JqZWN0OjpMb2NhdGlvbj4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkmKTsKIAotc3RhdGljIHZvaWQgYWRkU2NvcGVkQ2hpbGRyZW5JbmRleGVz
KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgd2luZG93LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcykKK3N0YXRpYyB2b2lkIGFkZFNjb3BlZENoaWxkcmVuSW5kZXhlcyhKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRE9NV2luZG93JiB3aW5kb3csIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewogICAgIGF1dG8qIGRvY3VtZW50ID0gd2lu
ZG93LmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTQwNCw4MyArNDA0LDg0IEBA
IHN0YXRpYyB2b2lkIGFkZFNjb3BlZENoaWxkcmVuSW5kZXhlcyhFeGVjU3RhdGUmIHN0YXRlLCBE
T01XaW5kb3cmIHdpbmRvdywgUHJvcGVyCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LnZtKCk7CiAgICAgdW5zaWduZWQgc2NvcGVkQ2hpbGRDb3VudCA9IGZyYW1lLT50cmVl
KCkuc2NvcGVkQ2hpbGRDb3VudCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY29w
ZWRDaGlsZENvdW50OyArK2kpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20odm0sIGkpKTsKIH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jd2lu
ZG93cHJveHktb3ducHJvcGVydHlrZXlzCi12b2lkIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0RPTVdpbmRv
dzo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKIAotICAgIGFkZFNjb3BlZENoaWxkcmVuSW5kZXhl
cygqZXhlYywgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBhZGRT
Y29wZWRDaGlsZHJlbkluZGV4ZXMoKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndy
YXBwZWQoKSwgcHJvcGVydHlOYW1lcyk7CiAKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hv
dWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT53cmFwcGVkKCksIERv
Tm90UmVwb3J0U2VjdXJpdHlFcnJvcikpIHsKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hv
dWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
LT53cmFwcGVkKCksIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpIHsKICAgICAgICAgaWYgKG1v
ZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQotICAgICAgICAgICAgYWRkQ3Jvc3NPcmln
aW5Pd25Qcm9wZXJ0eU5hbWVzPENyb3NzT3JpZ2luT2JqZWN0OjpXaW5kb3c+KCpleGVjLCBwcm9w
ZXJ0eU5hbWVzKTsKKyAgICAgICAgICAgIGFkZENyb3NzT3JpZ2luT3duUHJvcGVydHlOYW1lczxD
cm9zc09yaWdpbk9iamVjdDo6V2luZG93PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTRE9NV2luZG93OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBib29sIHNob3VsZFRocm93KQorYm9vbCBKU0RPTVdpbmRvdzo6ZGVmaW5lT3duUHJv
cGVydHkoSlNDOjpKU09iamVjdCogb2JqZWN0LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQogewotICAg
IEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
T01XaW5kb3cqPihvYmplY3QpOwogICAgIC8vIE9ubHkgYWxsb3cgZGVmaW5pbmcgcHJvcGVydGll
cyBpbiB0aGlzIHdheSBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLCBhcyBpdCBhbGxvd3Mg
c2V0dGVycyB0byBiZSBpbnRyb2R1Y2VkLgotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhy
b3dTZWN1cml0eUVycm9yKSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVk
KCksIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IERvbid0IGFsbG93IHNoYWRvd2luZyBsb2NhdGlvbiB1c2luZyBhY2Nlc3NvciBwcm9wZXJ0aWVz
LgogICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgcHJvcGVydHlO
YW1lID09IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb2NhdGlvbiIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CisgICAg
cmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQogCi1KU1Zh
bHVlIEpTRE9NV2luZG93OjpnZXRQcm90b3R5cGUoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6Z2V0UHJvdG90eXBlKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQogewogICAgIEpTRE9NV2lu
ZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKLSAgICBpZiAo
IUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlz
T2JqZWN0LT53cmFwcGVkKCksIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCisgICAgaWYgKCFC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3Ip
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICByZXR1cm4gQmFzZTo6Z2V0UHJvdG90
eXBlKG9iamVjdCwgZXhlYyk7CisgICAgcmV0dXJuIEJhc2U6OmdldFByb3RvdHlwZShvYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCi1ib29sIEpTRE9NV2luZG93OjpwcmV2ZW50RXh0
ZW5zaW9ucyhKU09iamVjdCosIEV4ZWNTdGF0ZSogZXhlYykKK2Jvb2wgSlNET01XaW5kb3c6OnBy
ZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QpCiB7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0o
KSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKSk7CiAKLSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgIkNhbm5vdCBw
cmV2ZW50IGV4dGVuc2lvbnMgb24gdGhpcyBvYmplY3QiX3MpOworICAgIHRocm93VHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHByZXZlbnQgZXh0ZW5zaW9ucyBv
biB0aGlzIG9iamVjdCJfcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmcgSlNET01X
aW5kb3c6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMpCitTdHJpbmcgSlNET01XaW5kb3c6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKLSAgICBpZiAo
IUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlz
T2JqZWN0LT53cmFwcGVkKCksIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCisgICAgaWYgKCFC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3Ip
KQogICAgICAgICByZXR1cm4gIk9iamVjdCJfczsKICAgICByZXR1cm4gIldpbmRvdyJfczsKIH0K
IAogLy8gQ3VzdG9tIEF0dHJpYnV0ZXMKIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhl
Y1N0YXRlJiBzdGF0ZSkgY29uc3QKK0pTVmFsdWUgSlNET01XaW5kb3c6OmV2ZW50KEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIEV2ZW50KiBldmVudCA9
IGN1cnJlbnRFdmVudCgpOwogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgY29uc3RfY2FzdDxKU0RPTVdpbmRvdyo+
KHRoaXMpLCBldmVudCk7CisgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsIGNv
bnN0X2Nhc3Q8SlNET01XaW5kb3cqPih0aGlzKSwgZXZlbnQpOwogfQogCiAvLyBDdXN0b20gZnVu
Y3Rpb25zCiAKIGNsYXNzIERpYWxvZ0hhbmRsZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IERp
YWxvZ0hhbmRsZXIoRXhlY1N0YXRlJiBleGVjKQotICAgICAgICA6IG1fZXhlYyhleGVjKQorICAg
IGV4cGxpY2l0IERpYWxvZ0hhbmRsZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQorICAgICAgICA6IG1fZ2xvYmFsT2JqZWN0KGxleGlj
YWxHbG9iYWxPYmplY3QpCisgICAgICAgICwgbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQogICAgIHsK
ICAgICB9CiAKQEAgLTQ4OCw2OCArNDg5LDY5IEBAIGNsYXNzIERpYWxvZ0hhbmRsZXIgewogICAg
IEpTVmFsdWUgcmV0dXJuVmFsdWUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBFeGVjU3RhdGUm
IG1fZXhlYzsKKyAgICBKU0dsb2JhbE9iamVjdCYgbV9nbG9iYWxPYmplY3Q7CisgICAgQ2FsbEZy
YW1lJiBtX2NhbGxGcmFtZTsKICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiB9OwogCiBpbmxp
bmUgdm9pZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkKERPTVdpbmRvdyYgZGlhbG9nKQog
ewotICAgIFZNJiB2bSA9IG1fZXhlYy52bSgpOworICAgIFZNJiB2bSA9IG1fZ2xvYmFsT2JqZWN0
LnZtKCk7CiAgICAgbV9mcmFtZSA9IGRpYWxvZy5mcmFtZSgpOwogICAgIAogICAgIC8vIEZJWE1F
OiBUaGlzIGxvb2tzIGxpa2UgYSBsZWFrIGJldHdlZW4gdGhlIG5vcm1hbCB3b3JsZCBhbmQgYW4g
aXNvbGF0ZWQKICAgICAvLyAgICAgICAgd29ybGQgaWYgZGlhbG9nQXJndW1lbnRzIGNvbWVzIGZy
b20gYW4gaXNvbGF0ZWQgd29ybGQuCiAgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHRv
SlNET01XaW5kb3cobV9mcmFtZS5nZXQoKSwgbm9ybWFsV29ybGQodm0pKTsKLSAgICBpZiAoSlNW
YWx1ZSBkaWFsb2dBcmd1bWVudHMgPSBtX2V4ZWMuYXJndW1lbnQoMSkpCisgICAgaWYgKEpTVmFs
dWUgZGlhbG9nQXJndW1lbnRzID0gbV9jYWxsRnJhbWUuYXJndW1lbnQoMSkpCiAgICAgICAgIGds
b2JhbE9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGlh
bG9nQXJndW1lbnRzIiksIGRpYWxvZ0FyZ3VtZW50cyk7CiB9CiAKIGlubGluZSBKU1ZhbHVlIERp
YWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKCkgY29uc3QKIHsKLSAgICBWTSYgdm0gPSBtX2V4ZWMu
dm0oKTsKKyAgICBWTSYgdm0gPSBtX2dsb2JhbE9iamVjdC52bSgpOwogICAgIEpTRE9NV2luZG93
KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxk
KHZtKSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJyZXR1cm5WYWx1ZSIpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVjdCwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAgaWYgKCFKU0dsb2Jh
bE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgJm1fZXhlYywgaWRlbnRp
Zmllciwgc2xvdCkpCisgICAgaWYgKCFKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KGdsb2JhbE9iamVjdCwgJm1fZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyLCBzbG90KSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoJm1fZXhl
YywgaWRlbnRpZmllcik7CisgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoJm1fZ2xvYmFsT2JqZWN0
LCBpZGVudGlmaWVyKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9n
KEV4ZWNTdGF0ZSYgc3RhdGUpCitKU1ZhbHVlIEpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2co
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1l
KQogewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAg
cmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKCZzdGF0ZSkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUuYXJndW1lbnRD
b3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CiAKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExET01TdHJpbmc+PihzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkpOworICAgIFN0cmluZyB1
cmxTdHJpbmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKLSAgICBTdHJpbmcgZGlhbG9nRmVhdHVyZXNTdHJpbmcgPSBj
b252ZXJ0PElETE51bGxhYmxlPElETERPTVN0cmluZz4+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgy
KSk7CisgICAgU3RyaW5nIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUuYXJndW1lbnQo
MikpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKLSAgICBE
aWFsb2dIYW5kbGVyIGhhbmRsZXIoc3RhdGUpOworICAgIERpYWxvZ0hhbmRsZXIgaGFuZGxlcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOwogCi0gICAgd3JhcHBlZCgpLnNob3dNb2Rh
bERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBhY3RpdmVET01XaW5kb3co
c3RhdGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSksIFsmaGFuZGxlcl0oRE9NV2luZG93JiBkaWFs
b2cpIHsKKyAgICB3cmFwcGVkKCkuc2hvd01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlhbG9nRmVh
dHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0KSwgZmlyc3RE
T01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCksIFsmaGFuZGxlcl0oRE9NV2luZG93JiBkaWFs
b2cpIHsKICAgICAgICAgaGFuZGxlci5kaWFsb2dDcmVhdGVkKGRpYWxvZyk7CiAgICAgfSk7CiAK
ICAgICByZXR1cm4gaGFuZGxlci5yZXR1cm5WYWx1ZSgpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2lu
ZG93OjpxdWV1ZU1pY3JvdGFzayhFeGVjU3RhdGUmIHN0YXRlKQorSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6cXVldWVNaWNyb3Rhc2soSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0m
IHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5hcmd1bWVudENvdW50
KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOworICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUuYXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFs
dWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uVmFs
dWUgPSBjYWxsRnJhbWUudW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgaWYgKFVOTElLRUxZKCFm
dW5jdGlvblZhbHVlLmlzRnVuY3Rpb24odm0pKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRl
Y29kZSh0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJj
YWxsYmFjayIsICJXaW5kb3ciLCAicXVldWVNaWNyb3Rhc2siKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUodGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIDAsICJjYWxsYmFjayIsICJXaW5kb3ciLCAicXVldWVNaWNyb3Rh
c2siKSk7CiAKICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgQmFzZTo6cXVldWVNaWNyb3Rhc2so
SlNDOjpjcmVhdGVKU01pY3JvdGFzayh2bSwgZnVuY3Rpb25WYWx1ZSkpOwpAQCAtNTcwLDg5ICs1
NzIsODkgQEAgRE9NV2luZG93KiBKU0RPTVdpbmRvdzo6dG9XcmFwcGVkKFZNJiB2bSwgSlNWYWx1
ZSB2YWx1ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBKU0RPTVdpbmRvdzo6c2V0
T3BlbmVyKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQordm9pZCBK
U0RPTVdpbmRvdzo6c2V0T3BlbmVyKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6
c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIHdyYXBwZWQoKSwgVGhyb3dTZWN1
cml0eUVycm9yKSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdygmbGV4aWNhbEdsb2JhbE9iamVjdCwgd3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5
RXJyb3IpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKICAg
ICAgICAgd3JhcHBlZCgpLmRpc293bk9wZW5lcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC52bSgpOwogICAgIHJlcGxhY2VTdGF0aWNQcm9wZXJ0eVNsb3Qodm0sIHRoaXMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJvcGVuZXIiKSwgdmFsdWUpOwogfQogCi1KU1ZhbHVlIEpTRE9N
V2luZG93OjpzZWxmKEpTQzo6RXhlY1N0YXRlJikgY29uc3QKK0pTVmFsdWUgSlNET01XaW5kb3c6
OnNlbGYoSlNDOjpKU0dsb2JhbE9iamVjdCYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdsb2JhbFRo
aXMoKTsKIH0KIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6d2luZG93KEpTQzo6RXhlY1N0YXRlJikg
Y29uc3QKK0pTVmFsdWUgSlNET01XaW5kb3c6OndpbmRvdyhKU0M6OkpTR2xvYmFsT2JqZWN0Jikg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2xvYmFsVGhpcygpOwogfQogCi1KU1ZhbHVlIEpTRE9NV2lu
ZG93OjpmcmFtZXMoSlNDOjpFeGVjU3RhdGUmKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6
ZnJhbWVzKEpTQzo6SlNHbG9iYWxPYmplY3QmKSBjb25zdAogewogICAgIHJldHVybiBnbG9iYWxU
aGlzKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc0RPTVdpbmRv
d0luc3RhbmNlRnVuY3Rpb25PcGVuRGF0YWJhc2VCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTRE9NV2luZG93Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzRE9NV2luZG93SW5zdGFuY2VGdW5jdGlvbk9wZW5EYXRhYmFzZUJvZHko
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU0RPTVdpbmRvdz46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhzdGF0ZSwgY2FzdGVk
VGhpcy0+d3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQorICAgIGlmICghQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3Qs
IGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgNCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBuYW1lID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCA0KSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Cisg
ICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdmVyc2lvbiA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7
CisgICAgYXV0byB2ZXJzaW9uID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gZGlzcGxh
eU5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMikpOworICAgIGF1dG8gZGlzcGxheU5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMikpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0g
ICAgYXV0byBlc3RpbWF0ZWRTaXplID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKKyAgICBhdXRvIGVzdGltYXRlZFNpemUgPSBj
b252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMykpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViU1FMRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChuYW1lICE9
ICJudWxsIiB8fCB2ZXJzaW9uICE9ICJudWxsIiB8fCBkaXNwbGF5TmFtZSAhPSAibnVsbCIgfHwg
ZXN0aW1hdGVkU2l6ZSkKLSAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbihVbmtub3duRXJyb3IsICJXZWIgU1FMIGlzIGRlcHJlY2F0ZWQi
X3MpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eU9iamVj
dChzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSk7
CisgICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbihVbmtub3duRXJyb3IsICJXZWIgU1FMIGlzIGRlcHJlY2F0ZWQi
X3MpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eU9iamVj
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpKTsKICAgICB9CiAKLSAgICBhdXRvIGNyZWF0aW9uQ2FsbGJhY2sgPSBjb252
ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrRnVuY3Rpb248SlNEYXRhYmFzZUNhbGxiYWNrPj4+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDQpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgewotICAg
ICAgICB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDQsICJj
cmVhdGlvbkNhbGxiYWNrIiwgIldpbmRvdyIsICJvcGVuRGF0YWJhc2UiKTsKKyAgICBhdXRvIGNy
ZWF0aW9uQ2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrRnVuY3Rpb248
SlNEYXRhYmFzZUNhbGxiYWNrPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDQpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsKKyAg
ICAgICAgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIDQsICJjcmVhdGlvbkNhbGxiYWNrIiwgIldpbmRvdyIsICJvcGVuRGF0YWJhc2Ui
KTsKICAgICB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExOdWxsYWJsZTxJ
RExJbnRlcmZhY2U8RGF0YWJhc2U+Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIFdlYkNvcmU6OkRPTVdpbmRvd1dlYkRhdGFiYXNlOjpvcGVuRGF0YWJh
c2UoaW1wbCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh2ZXJzaW9uKSwgV1RGTW92ZShkaXNwbGF5
TmFtZSksIFdURk1vdmUoZXN0aW1hdGVkU2l6ZSksIFdURk1vdmUoY3JlYXRpb25DYWxsYmFjaykp
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETEludGVy
ZmFjZTxEYXRhYmFzZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBXZWJDb3JlOjpET01XaW5kb3dXZWJEYXRhYmFzZTo6b3Bl
bkRhdGFiYXNlKGltcGwsIFdURk1vdmUobmFtZSksIFdURk1vdmUodmVyc2lvbiksIFdURk1vdmUo
ZGlzcGxheU5hbWUpLCBXVEZNb3ZlKGVzdGltYXRlZFNpemUpLCBXVEZNb3ZlKGNyZWF0aW9uQ2Fs
bGJhY2spKSkpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU0RPTVdpbmRvdyogSURMT3BlcmF0
aW9uPEpTRE9NV2luZG93Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8PiBpbmxp
bmUgSlNET01XaW5kb3cqIElETE9wZXJhdGlvbjxKU0RPTVdpbmRvdz46OmNhc3QoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAg
IHJldHVybiB0b0pTRE9NV2luZG93KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpLnRvVGhp
cygmc3RhdGUsIE5vdFN0cmljdE1vZGUpKTsKKyAgICByZXR1cm4gdG9KU0RPTVdpbmRvdyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LnZtKCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKS50b1RoaXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsIE5vdFN0cmljdE1vZGUpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc0RPTVdpbmRvd0luc3RhbmNlRnVuY3Rpb25PcGVuRGF0YWJhc2UoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNET01XaW5kb3dJbnN0YW5jZUZ1bmN0aW9uT3BlbkRhdGFiYXNlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNET01XaW5kb3c+OjpjYWxsPGpzRE9NV2luZG93SW5zdGFuY2VGdW5jdGlv
bk9wZW5EYXRhYmFzZUJvZHk+KCpjYWxsRnJhbWUsICJvcGVuRGF0YWJhc2UiKTsKKyAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTRE9NV2luZG93Pjo6Y2FsbDxqc0RPTVdpbmRvd0luc3RhbmNlRnVu
Y3Rpb25PcGVuRGF0YWJhc2VCb2R5PigqZ2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAib3BlbkRh
dGFiYXNlIik7CiB9CiAKLUpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW5EYXRhYmFzZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CitKU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVuRGF0YWJhc2Uo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0o
KTsKICAgICBTdHJpbmdJbXBsKiBuYW1lID0gUHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLm9wZW5EYXRhYmFzZVB1
YmxpY05hbWUoKSkucHVibGljTmFtZSgpOwogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYlNRTEVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEpTRnVu
Y3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpLCA0LCBuYW1lLCBq
c0RPTVdpbmRvd0luc3RhbmNlRnVuY3Rpb25PcGVuRGF0YWJhc2UsIE5vSW50cmluc2ljKTsKKyAg
ICAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgJmxleGljYWxHbG9iYWxPYmplY3Qs
IDQsIG5hbWUsIGpzRE9NV2luZG93SW5zdGFuY2VGdW5jdGlvbk9wZW5EYXRhYmFzZSwgTm9JbnRy
aW5zaWMpOwogCi0gICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZUZ1bmN0aW9uVGhhdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQodm0sIHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSwgNCwgbmFt
ZSwganNET01XaW5kb3dJbnN0YW5jZUZ1bmN0aW9uT3BlbkRhdGFiYXNlLCBOb0ludHJpbnNpYyk7
CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZUZ1bmN0aW9uVGhhdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQodm0sICZsZXhpY2FsR2xvYmFsT2JqZWN0LCA0LCBuYW1lLCBqc0RPTVdpbmRvd0lu
c3RhbmNlRnVuY3Rpb25PcGVuRGF0YWJhc2UsIE5vSW50cmluc2ljKTsKIH0KIAotdm9pZCBKU0RP
TVdpbmRvdzo6c2V0T3BlbkRhdGFiYXNlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQordm9pZCBKU0RPTVdpbmRvdzo6c2V0T3BlbkRhdGFiYXNlKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3Rh
dGUsIHdyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
d3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0o
KTsKICAgICByZXBsYWNlU3RhdGljUHJvcGVydHlTbG90KHZtLCB0aGlzLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAib3BlbkRhdGFiYXNlIiksIHZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmgKaW5kZXggNGVlYzAxNmNjNWQx
ZmZjOWIzNWY0ZWUzNTdjYjcwYzI4NGVjN2IzZS4uN2NmYTdhNmJiM2E3YzRhMGFkZjZjYWZhNzM2
OWI3MmJiNTcwN2E3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0N1c3RvbS5oCkBAIC0zOCwxMiArMzgsMTIgQEAgaW5saW5lIGNvbnN0IEpTRE9NV2luZG93
KiBhc0pTRE9NV2luZG93KGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IGVudW0gY2xhc3MgRE9NV2luZG93VHlwZSB7IExvY2FsLCBSZW1vdGUgfTsKIAogdGVtcGxhdGUg
PERPTVdpbmRvd1R5cGUgd2luZG93VHlwZT4KLWJvb2wganNET01XaW5kb3dHZXRPd25Qcm9wZXJ0
eVNsb3RSZXN0cmljdGVkQWNjZXNzKEpTRE9NR2xvYmFsT2JqZWN0KiwgQWJzdHJhY3RET01XaW5k
b3cmLCBKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYsIGNvbnN0IFN0cmluZyYpOworYm9vbCBqc0RPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJl
c3RyaWN0ZWRBY2Nlc3MoSlNET01HbG9iYWxPYmplY3QqLCBBYnN0cmFjdERPTVdpbmRvdyYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
LCBjb25zdCBTdHJpbmcmKTsKIAogZW51bSBjbGFzcyBDcm9zc09yaWdpbk9iamVjdCB7IFdpbmRv
dywgTG9jYXRpb24gfTsKIAogdGVtcGxhdGUgPENyb3NzT3JpZ2luT2JqZWN0IG9iamVjdFR5cGU+
Ci12b2lkIGFkZENyb3NzT3JpZ2luT3duUHJvcGVydHlOYW1lcyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmKTsKK3ZvaWQgYWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5h
bWVzKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jik7CiBib29s
IGhhbmRsZUNvbW1vbkNyb3NzT3JpZ2luUHJvcGVydGllcyhKU0M6OkpTT2JqZWN0KiB0aGlzT2Jq
ZWN0LCBKU0M6OlZNJiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCmluZGV4IDdlMTNkNWYyOTliZjViZmFmZDE5
YzQwNTFiN2E3NDdkNzEzNGU0OWEuLjhjOGQyNTFlZGEzMjg2OWY3M2M0N2VmNTRmYjZhZGY3MTky
YWMzYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
UHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dQcm9wZXJ0aWVzLmNwcApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CiBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpzX2luZm8gPSB7ICJXaW5k
b3dQcm9wZXJ0aWVzIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0RPTVdpbmRvd1Byb3BlcnRpZXMpIH07CiAKLXN0YXRpYyBib29sIGpzRE9N
V2luZG93UHJvcGVydGllc0dldE93blByb3BlcnR5U2xvdE5hbWVkSXRlbUdldHRlcihKU0RPTVdp
bmRvd1Byb3BlcnRpZXMqIHRoaXNPYmplY3QsIERPTVdpbmRvdyYgd2luZG93LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3N0
YXRpYyBib29sIGpzRE9NV2luZG93UHJvcGVydGllc0dldE93blByb3BlcnR5U2xvdE5hbWVkSXRl
bUdldHRlcihKU0RPTVdpbmRvd1Byb3BlcnRpZXMqIHRoaXNPYmplY3QsIERPTVdpbmRvdyYgd2lu
ZG93LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIC8vIENoZWNrIGZvciBjaGls
ZCBmcmFtZXMgYnkgbmFtZSBiZWZvcmUgYnVpbHQtaW4gcHJvcGVydGllcyB0byBtYXRjaCBNb3pp
bGxhLiBUaGlzIGRvZXMKICAgICAvLyBub3QgbWF0Y2ggSUUsIGJ1dCBzb21lIHNpdGVzIGVuZCB1
cCBuYW1pbmcgZnJhbWVzIHRoaW5ncyB0aGF0IGNvbmZsaWN0IHdpdGggd2luZG93CkBAIC00OSwx
MiArNDksMTIgQEAgc3RhdGljIGJvb2wganNET01XaW5kb3dQcm9wZXJ0aWVzR2V0T3duUHJvcGVy
dHlTbG90TmFtZWRJdGVtR2V0dGVyKEpTRE9NV2luZG93UHIKICAgICAvLyB0aGUgTW96IHdheS4K
ICAgICBpZiAoYXV0byogZnJhbWUgPSB3aW5kb3cuZnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0
byogc2NvcGVkQ2hpbGQgPSBmcmFtZS0+dHJlZSgpLnNjb3BlZENoaWxkKHByb3BlcnR5TmFtZVRv
QXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSwgdG9KUyhleGVjLCBzY29wZWRDaGlsZC0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpKTsKKyAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0sIHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGVkQ2hpbGQtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHdpbmRvdywgVGhyb3dTZWN1cml0eUVycm9y
KSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB3aW5kb3csIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBTZWFyY2ggdGhlIHdob2xlIGZyYW1l
IGhpZXJhcmNoeSBzb21ld2hlcmUgYXJvdW5kIGhlcmUuCkBAIC03MCw5ICs3MCw5IEBAIHN0YXRp
YyBib29sIGpzRE9NV2luZG93UHJvcGVydGllc0dldE93blByb3BlcnR5U2xvdE5hbWVkSXRlbUdl
dHRlcihKU0RPTVdpbmRvd1ByCiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoaHRtbERvY3VtZW50
LndpbmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqYXRvbWljUHJvcGVydHlO
YW1lKSkpIHsKICAgICAgICAgICAgICAgICBSZWY8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24g
PSBkb2N1bWVudC0+d2luZG93TmFtZWRJdGVtcyhhdG9taWNQcm9wZXJ0eU5hbWUpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVChjb2xsZWN0aW9uLT5sZW5ndGgoKSA+IDEpOwotICAgICAgICAgICAg
ICAgIG5hbWVkSXRlbSA9IHRvSlMoZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGNv
bGxlY3Rpb24pOworICAgICAgICAgICAgICAgIG5hbWVkSXRlbSA9IHRvSlMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24pOwogICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbmFtZWRJdGVtID0gdG9KUyhleGVjLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaHRtbERvY3VtZW50LndpbmRvd05hbWVkSXRlbSgqYXRv
bWljUHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICAgICAgbmFtZWRJdGVtID0gdG9KUyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaHRtbERvY3VtZW50
LndpbmRvd05hbWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICBzbG90
LnNldFZhbHVlKHRoaXNPYmplY3QsIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtLCBuYW1lZEl0ZW0pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KQEAgLTgxLDE3ICs4MSwxNyBAQCBzdGF0aWMgYm9vbCBqc0RPTVdpbmRvd1Byb3BlcnRp
ZXNHZXRPd25Qcm9wZXJ0eVNsb3ROYW1lZEl0ZW1HZXR0ZXIoSlNET01XaW5kb3dQcgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OmdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTRE9NV2luZG93UHJvcGVy
dGllczo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRv
d1Byb3BlcnRpZXMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKLSAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgIGlmIChCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgSlNWYWx1ZSBwcm90byA9IHRoaXNP
YmplY3QtPmdldFByb3RvdHlwZURpcmVjdChzdGF0ZS0+dm0oKSk7Ci0gICAgaWYgKHByb3RvLmlz
T2JqZWN0KCkgJiYganNDYXN0PEpTT2JqZWN0Kj4ocHJvdG8pLT5oYXNQcm9wZXJ0eShzdGF0ZSwg
cHJvcGVydHlOYW1lKSkKKyAgICBKU1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+Z2V0UHJvdG90
eXBlRGlyZWN0KGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgIGlmIChwcm90by5pc09i
amVjdCgpICYmIGpzQ2FzdDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkobGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
YXV0byYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGFkZCBzdXBwb3J0
IGZvciBKU1JlbW90ZURPTVdpbmRvd0Jhc2UgdG9vLgogICAgIGF1dG8qIGpzV2luZG93ID0ganNE
eW5hbWljQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih2bSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpOwpAQCAtOTksMTMgKzk5LDEzIEBAIGJvb2wgSlNET01XaW5kb3dQcm9wZXJ0aWVzOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIHdpbmRvdyA9IGpzV2luZG93LT53cmFwcGVkKCk7
Ci0gICAgcmV0dXJuIGpzRE9NV2luZG93UHJvcGVydGllc0dldE93blByb3BlcnR5U2xvdE5hbWVk
SXRlbUdldHRlcih0aGlzT2JqZWN0LCB3aW5kb3csIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OworICAgIHJldHVybiBqc0RPTVdpbmRvd1Byb3BlcnRpZXNHZXRPd25Qcm9wZXJ0eVNsb3ROYW1l
ZEl0ZW1HZXR0ZXIodGhpc09iamVjdCwgd2luZG93LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTRE9NV2luZG93UHJvcGVydGllczo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1
bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU0RPTVdpbmRvd1Byb3Bl
cnRpZXM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgcmV0dXJuIGdldE93
blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCks
IHNsb3QpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgcmV0
dXJuIGdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KSwgc2xvdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJv
cGVydGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0
aWVzLmgKaW5kZXggZTE3OTQ4NmVkOGJiYmE5YzE4N2E0NGE1ZjMyZTI2MzNkY2U3NDdlZS4uN2M1
YmYwODQ0Njk3NTg3MmYwYWEyY2UzMDE0OGYzNGNhY2U5NTZkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmgKQEAgLTQ2LDggKzQ2
LDggQEAgY2xhc3MgSlNET01XaW5kb3dQcm9wZXJ0aWVzIDogcHVibGljIEpTRE9NT2JqZWN0IHsK
ICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJc0ltbXV0YWJsZVByb3RvdHlwZUV4
b3RpY09iamVjdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5j
cHAKaW5kZXggMDcxOGIxNDc2MTU4ZGQwNDBhZjYxMjQxZjk2YmYzZDhhMDk1NGYwZS4uMDU2YmRi
ZDJkZjFlM2YzYTQ0NmQxNzk5YTMxMjlhNzM5ZjgwY2NjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuY3BwCkBAIC01NCwxNyArNTQsMTcgQEAgSlNDOjpDb21w
bGV0ZVN1YnNwYWNlKiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNs
aWVudERhdGEpLT5nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2UoKTsKIH0KIAotSlND
OjpKU1ZhbHVlIGNsb25lQWNyb3NzV29ybGRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3Qg
SlNET01PYmplY3QmIG93bmVyLCBKU0M6OkpTVmFsdWUgdmFsdWUpCitKU0M6OkpTVmFsdWUgY2xv
bmVBY3Jvc3NXb3JsZHMoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y29uc3QgSlNET01PYmplY3QmIG93bmVyLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYg
KGlzV29ybGRDb21wYXRpYmxlKHN0YXRlLCB2YWx1ZSkpCisgICAgaWYgKGlzV29ybGRDb21wYXRp
YmxlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwog
ICAgIC8vIEZJWE1FOiBJcyBpdCBiZXN0IHRvIGhhbmRsZSBlcnJvcnMgYnkgcmV0dXJuaW5nIG51
bGwgcmF0aGVyIHRoYW4gdGhyb3dpbmcgYW4gZXhjZXB0aW9uPwotICAgIGF1dG8gc2VyaWFsaXpl
ZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCBTZXJp
YWxpemF0aW9uRXJyb3JNb2RlOjpOb25UaHJvd2luZyk7CisgICAgYXV0byBzZXJpYWxpemVkVmFs
dWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSwgU2VyaWFsaXphdGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcpOwogICAgIGlmICghc2Vy
aWFsaXplZFZhbHVlKQogICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAvLyBGSVhN
RTogV2h5IGlzIG93bmVyLT5nbG9iYWxPYmplY3QoKSBiZXR0ZXIgdGhhbiBzdGF0ZS5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkgaGVyZT8KLSAgICAvLyBVbmxpa2UgdGhpcywgaXNXb3JsZENvbXBhdGli
bGUgdXNlcyBzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7IHNob3VsZCB0aGUgdHdvIG1hdGNo
PwotICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCBvd25lci5n
bG9iYWxPYmplY3QoKSk7CisgICAgLy8gRklYTUU6IFdoeSBpcyBvd25lci0+Z2xvYmFsT2JqZWN0
KCkgYmV0dGVyIHRoYW4gbGV4aWNhbEdsb2JhbE9iamVjdC5sZXhpY2FsR2xvYmFsT2JqZWN0KCkg
aGVyZT8KKyAgICAvLyBVbmxpa2UgdGhpcywgaXNXb3JsZENvbXBhdGlibGUgdXNlcyBsZXhpY2Fs
R2xvYmFsT2JqZWN0LmxleGljYWxHbG9iYWxPYmplY3QoKTsgc2hvdWxkIHRoZSB0d28gbWF0Y2g/
CisgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9i
amVjdCwgb3duZXIuZ2xvYmFsT2JqZWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oCmluZGV4IGI1NDNiNmFm
YzQ4NmY2ZjhmNzc0OGRlMTAyYmNlZDEzZGI0MzlkMTAuLjk2ZDM5ZTk0ZDZhZjkzNjRlYjgwOWNj
ZWQ4NjA3MjAzZWVjY2ExNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV3JhcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3Jh
cHBlci5oCkBAIC0xMDksNiArMTA5LDYgQEAgc3RydWN0IEpTRE9NT2JqZWN0SW5zcGVjdG9yPEpT
Q2xhc3MsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEpTQ2xhc3M6OmlzRE9NV3JhcHAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNCdWlsdGluID0gZmFsc2U7CiB9OwogCi1KU0M6OkpTVmFs
dWUgY2xvbmVBY3Jvc3NXb3JsZHMoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0RPTU9iamVjdCYg
b3duZXIsIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUgY2xvbmVBY3Jvc3NXb3JsZHMoSlND
OjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IEpTRE9NT2JqZWN0JiBvd25lciwgSlNDOjpKU1ZhbHVl
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV3JhcHBlckNhY2hlLmgKaW5kZXggMDI2MGU0NDU2Zjc4MGNlNDUxODk4YTYwYTdm
YzI1MTQ1Njk5MTQ5Yy4uNWRmY2RjYmZjMDQ4YjIyZDRhZDQ4ZWM4NDg4MDRhNTJlYzg3N2ZkMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5oCkBA
IC00MCw3ICs0MCw3IEBAIFdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRE
T01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBKCiBXRUJDT1JFX0VYUE9SVCBK
U0M6OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OlN0cnVjdHVyZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiwg
SlNET01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlND
OjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0
ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbE9iamVjdCopOwogdGVtcGxhdGU8dHlwZW5h
bWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKIAogSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJP
d25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7CkBAIC02NSwxNyArNjUs
MTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4g
dm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGUKIHRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNz
LCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8
VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBU
Pjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46
OldyYXBwZXJDbGFzcyo+Ojp0eXBlOwogdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVu
YW1lIFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFs
dWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBw
ZXJDbGFzcyo+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU1Zh
bHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIERPTUNsYXNzJik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3MmKTsKIAogCiAvLyBJbmxp
bmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBkZWZpbml0aW9ucy4KIAotaW5saW5lIEpTRE9NR2xv
YmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKEpTQzo6RXhlY1N0
YXRlKiBleGVjKQoraW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2Jq
ZWN0Rm9yUHJvdG90eXBlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qp
CiB7CiAgICAgLy8gRklYTUU6IENhbGxlcnMgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNp
bmcgdGhlIGdsb2JhbCBvYmplY3QKICAgICAvLyBmcm9tIHdoaWNoIHRoZSBvYmplY3QgaXMgYmVp
bmcgY3JlYXRlZCwgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUgbGV4aWNhbCBvbmUuCiAgICAgLy8g
ZS5nLiBzdWJmcmFtZS5kb2N1bWVudC5ib2R5IHNob3VsZCB1c2UgdGhlIHN1YmZyYW1lJ3MgZ2xv
YmFsIG9iamVjdCwgbm90IHRoZSBsZXhpY2FsIG9uZS4KLSAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIHJl
dHVybiBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3Qp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVj
dHVyZSogZ2V0RE9NU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQpAQCAtODUsMTAgKzg1LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYKICAg
ICByZXR1cm4gY2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpLCBXcmFwcGVyQ2xhc3M6OmluZm8oKSk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBkZXBy
ZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQordGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRE
T01TdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3Jvbmcg
Z2xvYmFsIG9iamVjdCBmb3IgY3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCi0gICAg
cmV0dXJuIGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNh
dGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpKTsKKyAgICByZXR1cm4gZ2V0RE9NU3Ry
dWN0dXJlPFdyYXBwZXJDbGFzcz4oSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgKmRl
cHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUobGV4aWNhbEdsb2JhbE9iamVjdCkpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0
KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCkBAIC0xOTQsMTEgKzE5NCwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywg
dHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iagogICAg
IHJldHVybiBjcmVhdGVXcmFwcGVyPERPTUNsYXNzPihnbG9iYWxPYmplY3QsIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxET01DbGFzcz4oV1RGTW92ZShkb21PYmplY3QpKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBET01DbGFzcyYgZG9t
T2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUg
d3JhcChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBET01DbGFzcyYgZG9tT2JqZWN0KQogewogICAgIGlmIChh
dXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGRv
bU9iamVjdCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIFJlZjxET01DbGFzcz4oZG9tT2JqZWN0KSk7Cisg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRD
U1NPTVZhbHVlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVj
YXRlZENTU09NVmFsdWVDdXN0b20uY3BwCmluZGV4IDYxNDRmYmIwNDljYWY4MzdiOGEyYzZjZDRi
NjBkMGIzMTkwOThlMTYuLjFkNzI0ZmQ5MTY1ZWJlMWIwMjIxOGQwZDFjMzM5NTczZmFhY2UyNWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZENTU09N
VmFsdWVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVj
YXRlZENTU09NVmFsdWVDdXN0b20uY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIGJvb2wgSlNEZXByZWNh
dGVkQ1NTT01WYWx1ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRs
ZTxKU0M6OlVuCiAgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QoJmpz
Q1NTVmFsdWUtPndyYXBwZWQoKS5vd25lcigpKSk7CiB9CiAKLUpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8RGVw
cmVjYXRlZENTU09NVmFsdWU+JiYgdmFsdWUpCitKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNH
bG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8RGVwcmVj
YXRlZENTU09NVmFsdWU+JiYgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQogICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxEZXByZWNhdGVkQ1NTT01WYWx1ZUxpc3Q+
KGdsb2JhbE9iamVjdCwgV1RGTW92ZSh2YWx1ZSkpOwpAQCAtNTYsOSArNTYsOSBAQCBKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPERlcHJlYwogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPERlcHJlY2F0ZWRDU1NP
TVZhbHVlPihnbG9iYWxPYmplY3QsIFdURk1vdmUodmFsdWUpKTsKIH0KIAotSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERlcHJl
Y2F0ZWRDU1NPTVZhbHVlJiB2YWx1ZSkKK0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRGVwcmVj
YXRlZENTU09NVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxP
YmplY3QsIHZhbHVlKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsIHZhbHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAppbmRleCBkZjMyYTM3
ZWQyODBkNDAxMGI3Nzk4Njk3ZjQ1ZjcxMmIwN2YzZDNmLi5mNDAwYjllMmE4ZmVkODk0ZjNlYjk3
MTc4Y2E0NDk5YmQzNzAyY2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcApAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGNyZWF0ZU5l
d0RvY3VtZW50V3JhcHBlcihFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBSZWY8RG9jdW1lbnQ+JiYgcGFzc2VkRG9jdW1lbnQpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUgY3JlYXRlTmV3RG9jdW1lbnRXcmFwcGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8RG9jdW1l
bnQ+JiYgcGFzc2VkRG9jdW1lbnQpCiB7CiAgICAgYXV0byYgZG9jdW1lbnQgPSBwYXNzZWREb2N1
bWVudC5nZXQoKTsKICAgICBKU09iamVjdCogd3JhcHBlcjsKQEAgLTQzLDEyICs0MywxMiBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUgY3JlYXRlTmV3RG9jdW1lbnRXcmFwcGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZQogICAgIGVsc2UKICAgICAgICAgd3JhcHBlciA9IGNyZWF0
ZVdyYXBwZXI8RG9jdW1lbnQ+KCZnbG9iYWxPYmplY3QsIFdURk1vdmUocGFzc2VkRG9jdW1lbnQp
KTsKIAotICAgIHJlcG9ydE1lbW9yeUZvckRvY3VtZW50SWZGcmFtZWxlc3Moc3RhdGUsIGRvY3Vt
ZW50KTsKKyAgICByZXBvcnRNZW1vcnlGb3JEb2N1bWVudElmRnJhbWVsZXNzKGxleGljYWxHbG9i
YWxPYmplY3QsIGRvY3VtZW50KTsKIAogICAgIHJldHVybiB3cmFwcGVyOwogfQogCi1KU09iamVj
dCogY2FjaGVkRG9jdW1lbnRXcmFwcGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIERvY3VtZW50JiBkb2N1bWVudCkKK0pTT2JqZWN0KiBjYWNoZWRE
b2N1bWVudFdyYXBwZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBp
ZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LndvcmxkKCks
IGRvY3VtZW50KSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CkBAIC01Nyw3ICs1Nyw3IEBAIEpT
T2JqZWN0KiBjYWNoZWREb2N1bWVudFdyYXBwZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjCiAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgYXV0byogZG9jdW1lbnRHbG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93
KHN0YXRlLnZtKCksIHRvSlMoJnN0YXRlLCAqd2luZG93KSk7CisgICAgYXV0byogZG9jdW1lbnRH
bG9iYWxPYmplY3QgPSB0b0pTRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgdG9K
UygmbGV4aWNhbEdsb2JhbE9iamVjdCwgKndpbmRvdykpOwogICAgIGlmICghZG9jdW1lbnRHbG9i
YWxPYmplY3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC02NSwxMyArNjUsMTMgQEAg
SlNPYmplY3QqIGNhY2hlZERvY3VtZW50V3JhcHBlcihFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWMKICAgICByZXR1cm4gZ2V0Q2FjaGVkV3JhcHBlcihkb2N1
bWVudEdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9jdW1lbnQpOwogfQogCi12b2lkIHJlcG9ydE1l
bW9yeUZvckRvY3VtZW50SWZGcmFtZWxlc3MoRXhlY1N0YXRlJiBzdGF0ZSwgRG9jdW1lbnQmIGRv
Y3VtZW50KQordm9pZCByZXBvcnRNZW1vcnlGb3JEb2N1bWVudElmRnJhbWVsZXNzKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAg
Ly8gTWFrZSBzdXJlIHRoZSBkb2N1bWVudCBpcyBrZXB0IGFyb3VuZCBieSB0aGUgd2luZG93IG9i
amVjdCwgYW5kIHdvcmtzIHJpZ2h0IHdpdGggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICBp
ZiAoZG9jdW1lbnQuZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgc2l6
ZV90IG1lbW9yeUNvc3QgPSAwOwogICAgIGZvciAoTm9kZSogbm9kZSA9ICZkb2N1bWVudDsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKQogICAgICAgICBtZW1vcnlDb3N0
ICs9IG5vZGUtPmFwcHJveGltYXRlTWVtb3J5Q29zdCgpOwpAQCAtODEsMTYgKzgxLDE2IEBAIHZv
aWQgcmVwb3J0TWVtb3J5Rm9yRG9jdW1lbnRJZkZyYW1lbGVzcyhFeGVjU3RhdGUmIHN0YXRlLCBE
b2N1bWVudCYgZG9jdW1lbnQpCiAgICAgdm0uaGVhcC5kZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1v
cnkobWVtb3J5Q29zdCk7CiB9CiAKLUpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8RG9jdW1lbnQ+JiYg
ZG9jdW1lbnQpCitKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxEb2N1
bWVudD4mJiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTmV3RG9jdW1lbnRXcmFwcGVy
KCpzdGF0ZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShkb2N1bWVudCkpOworICAgIHJldHVybiBj
cmVhdGVOZXdEb2N1bWVudFdyYXBwZXIoKmxleGljYWxHbG9iYWxPYmplY3QsICpnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoZG9jdW1lbnQpKTsKIH0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERvY3VtZW50JiBkb2N1bWVudCkK
K0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlm
IChhdXRvKiB3cmFwcGVyID0gY2FjaGVkRG9jdW1lbnRXcmFwcGVyKCpzdGF0ZSwgKmdsb2JhbE9i
amVjdCwgZG9jdW1lbnQpKQorICAgIGlmIChhdXRvKiB3cmFwcGVyID0gY2FjaGVkRG9jdW1lbnRX
cmFwcGVyKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0LCBkb2N1bWVudCkpCiAg
ICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0YXRl
LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1bWVudD4oZG9jdW1lbnQpKTsKKyAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIFJlZjxEb2N1
bWVudD4oZG9jdW1lbnQpKTsKIH0KIAogdm9pZCBKU0RvY3VtZW50Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRG9jdW1lbnRDdXN0b20uaAppbmRleCBhZjU0ZjNlZWY4YjI1YzNjMzBhNjY3ODk4OTJi
MDdiOTQ3MzA0NjEyLi5hNTM5NjM2NDg0YWQzYTQxNWM5ZTM5ZjBjYzIzNzkzMjQyZGFiNTkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5oCkBAIC00
Niw3ICs0Niw3IEBAIHN0cnVjdCBJbmhlcml0c1RyYWl0czxXZWJDb3JlOjpKU0RvY3VtZW50PiB7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNDOjpKU09iamVjdCogY2FjaGVkRG9jdW1lbnRX
cmFwcGVyKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBEb2N1bWVudCYpOwot
dm9pZCByZXBvcnRNZW1vcnlGb3JEb2N1bWVudElmRnJhbWVsZXNzKEpTQzo6RXhlY1N0YXRlJiwg
RG9jdW1lbnQmKTsKK0pTQzo6SlNPYmplY3QqIGNhY2hlZERvY3VtZW50V3JhcHBlcihKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgSlNET01HbG9iYWxPYmplY3QmLCBEb2N1bWVudCYpOwordm9pZCByZXBv
cnRNZW1vcnlGb3JEb2N1bWVudElmRnJhbWVsZXNzKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBEb2N1
bWVudCYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50RnJhZ21lbnRDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcAppbmRleCBiNTA4
MmU4MGExZjA3YTI3MTVmZDIzNjA4ZWE3ZWZlN2RhMmI0OTZkLi4zNzA2NWE0NjU4ZTc0ZGMwZDJh
ZWNkMTJjMTNmMmY0ZTg0ZThlMTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RvY3VtZW50RnJhZ21lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRG9jdW1lbnRGcmFnbWVudEN1c3RvbS5jcHAKQEAgLTMyLDE2ICszMiwxNiBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxEb2N1bWVudEZyYWdtZW50PiYmIGltcGwpCitKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
RG9jdW1lbnRGcmFnbWVudD4mJiBpbXBsKQogewogICAgIGlmIChpbXBsLT5pc1NoYWRvd1Jvb3Qo
KSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8U2hhZG93Um9vdD4oZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKTsKICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxEb2N1bWVudEZyYWdt
ZW50PihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU1ZhbHVlIHRvSlMoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRG9jdW1lbnRG
cmFnbWVudCYgaW1wbCkKK0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRG9jdW1lbnRGcmFnbWVu
dCYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsK
KyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAppbmRleCAwZGFjMjE2YjRhNjJiOWNlMmRjM2Y2YmU4
NzIyOTRlYTVjNzgxZThlLi4xMGY5OTc0MmJjNWU3OWE0NGJiNDUzZDVjMGExZTZiMzA1MmY4YmVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAK
QEAgLTYwLDE0ICs2MCwxNCBAQCBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVOZXdFbGVtZW50V3JhcHBl
cihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8RWxlbQogICAgIHJldHVybiBj
cmVhdGVXcmFwcGVyPEVsZW1lbnQ+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShlbGVtZW50KSk7CiB9
CiAKLUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbGVtZW50JiBlbGVtZW50KQorSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBp
ZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgp
LCBlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgcmV0dXJuIGNyZWF0ZU5l
d0VsZW1lbnRXcmFwcGVyKGdsb2JhbE9iamVjdCwgZWxlbWVudCk7CiB9CiAKLUpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8RWxlbWVudD4mJiBlbGVtZW50KQorSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPEVsZW1lbnQ+
JiYgZWxlbWVudCkKIHsKICAgICBpZiAoZWxlbWVudC0+aXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgp
KQogICAgICAgICByZXR1cm4gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCks
IGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJv
ckhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIu
Y3BwCmluZGV4IDAzMjY3MzVkZjU5OTA0MTBhZDFhOGM1NzAwMWM1MDQyOWQ3NzBhOWMuLjkyNzY4
NzJiMWNiZDNlMTkzYWYyNTBkZjg4YjU3ZGNhZjlmYmUwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKQEAgLTc1LDggKzc1LDYgQEAgdm9pZCBK
U0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0K
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGpzRnVuY3Rp
b24tPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEoanNGdW5jdGlvbiwgY2FsbERhdGEpOwog
CkBAIC04OSwxMSArODcsMTEgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKICAgICAgICAgYXV0
byYgZXJyb3JFdmVudCA9IGRvd25jYXN0PEVycm9yRXZlbnQ+KGV2ZW50KTsKIAogICAgICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgICAgICBhcmdzLmFwcGVuZCh0b0pTPElETERP
TVN0cmluZz4oKmV4ZWMsIGVycm9yRXZlbnQubWVzc2FnZSgpKSk7Ci0gICAgICAgIGFyZ3MuYXBw
ZW5kKHRvSlM8SURMVVNWU3RyaW5nPigqZXhlYywgZXJyb3JFdmVudC5maWxlbmFtZSgpKSk7Cisg
ICAgICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMRE9NU3RyaW5nPigqZ2xvYmFsT2JqZWN0LCBlcnJv
ckV2ZW50Lm1lc3NhZ2UoKSkpOworICAgICAgICBhcmdzLmFwcGVuZCh0b0pTPElETFVTVlN0cmlu
Zz4oKmdsb2JhbE9iamVjdCwgZXJyb3JFdmVudC5maWxlbmFtZSgpKSk7CiAgICAgICAgIGFyZ3Mu
YXBwZW5kKHRvSlM8SURMVW5zaWduZWRMb25nPihlcnJvckV2ZW50LmxpbmVubygpKSk7CiAgICAg
ICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMVW5zaWduZWRMb25nPihlcnJvckV2ZW50LmNvbG5vKCkp
KTsKLSAgICAgICAgYXJncy5hcHBlbmQoZXJyb3JFdmVudC5lcnJvcigqZXhlYywgKmdsb2JhbE9i
amVjdCkpOworICAgICAgICBhcmdzLmFwcGVuZChlcnJvckV2ZW50LmVycm9yKCpnbG9iYWxPYmpl
Y3QpKTsKICAgICAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMTAyLDE0ICsxMDAsMTQgQEAgdm9pZCBK
U0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwKICAgICAgICAgSlNFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlv
bkNhbGwoJnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAKICAg
ICAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IGV4Y2VwdGlvbjsKLSAgICAgICAgSlNWYWx1
ZSByZXR1cm5WYWx1ZSA9IEpTRXhlY1N0YXRlOjpwcm9maWxlZENhbGwoZXhlYywgSlNDOjpQcm9m
aWxpbmdSZWFzb246Ok90aGVyLCBqc0Z1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2Jh
bE9iamVjdCwgYXJncywgZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IEpTRXhlY1N0YXRlOjpwcm9maWxlZENhbGwoZ2xvYmFsT2JqZWN0LCBKU0M6OlByb2ZpbGluZ1Jl
YXNvbjo6T3RoZXIsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBhcmdzLCBleGNlcHRpb24pOwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkQ2FsbEZ1bmN0aW9uKCZzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIAogICAgICAgICBnbG9i
YWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChzYXZlZEV2ZW50KTsKIAogICAgICAgICBpZiAoZXhj
ZXB0aW9uKQotICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICByZXBvcnRFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZS5pc1RydWUoKSkKICAgICAg
ICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JIYW5kbGVyLmgKaW5kZXggMzAyNDcyNzk2YjVmYjdmMGM0N2JhYWNhNzg4
YmNiYjQ2ZmYzNzgxNS4uZmMzZmU5YjE5NmEzZWM2ZWU1ODc1MDdmNTFkODIwZGVmMmFjMDRkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5oCkBAIC00Nywx
MSArNDcsMTEgQEAgY2xhc3MgSlNFcnJvckhhbmRsZXIgZmluYWwgOiBwdWJsaWMgSlNFdmVudExp
c3RlbmVyIHsKIAogLy8gQ3JlYXRlcyBhIGxpc3RlbmVyIGZvciAib25lcnJvciIgZXZlbnQgaGFu
ZGxlci4KIC8vIEl0IGhhcyBjdXN0b20gaW1wbGVtZW50YXRpb24gYmVjYXVzZSwgdW5saWtlIG90
aGVyIGV2ZW50IGxpc3RlbmVycywgaXQgYWNjZXB0cyB0aHJlZSBwYXJhbWV0ZXJzLgotaW5saW5l
IFJlZlB0cjxKU0Vycm9ySGFuZGxlcj4gY3JlYXRlSlNFcnJvckhhbmRsZXIoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgbGlzdGVuZXIsIEpTQzo6SlNPYmplY3QmIHdyYXBwZXIp
CitpbmxpbmUgUmVmUHRyPEpTRXJyb3JIYW5kbGVyPiBjcmVhdGVKU0Vycm9ySGFuZGxlcihKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgbGlzdGVu
ZXIsIEpTQzo6SlNPYmplY3QmIHdyYXBwZXIpCiB7CiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gSlNFcnJvckhhbmRsZXI6
OmNyZWF0ZSgqYXNPYmplY3QobGlzdGVuZXIpLCB3cmFwcGVyLCB0cnVlLCBjdXJyZW50V29ybGQo
c3RhdGUpKTsKKyAgICByZXR1cm4gSlNFcnJvckhhbmRsZXI6OmNyZWF0ZSgqYXNPYmplY3QobGlz
dGVuZXIpLCB3cmFwcGVyLCB0cnVlLCBjdXJyZW50V29ybGQobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRDdXN0b20uY3BwCmluZGV4IDEzNjE5NmI1ZTI1MWY2MjgyNTQ5NjVjMmRkNWZk
ZTY3YmI1ZGRiY2MuLjViZWI0ZDhjYjUwN2NjZGE4NjRjYzUxYjQ2ODlkMjdkMjA0NzE5NzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCkBAIC00Miw5
ICs0Miw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1K
U1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRXZlbnQmIGV2ZW50KQorSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFdmVudCYgZXZl
bnQpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgZXZlbnQpOworICAg
IHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgZXZlbnQpOwog
fQogCiAjdW5kZWYgVFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGNkYTk0NGY5MjFkZWFhMmI4
YTQyNTg3ZGYyNTEzM2YyMTA5NWMxMzguLjY5YThkMDFmNzI4OTA5ZjFmNWZiOGFkZTA3Y2E1NjFk
OWQzYjkyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRM
aXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QgPSBnbG9iYWxPYmplY3Q7CiAKICAgICBKU1ZhbHVlIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBq
c0Z1bmN0aW9uOwogCkBAIC0xMzksMTIgKzEzOSwxMiBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6
aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dAogCiAgICAgLy8gSWYganNGdW5jdGlvbiBpcyBub3QgYWN0dWFsbHkgYSBmdW5jdGlvbiwgc2Vl
IGlmIGl0IGltcGxlbWVudHMgdGhlIEV2ZW50TGlzdGVuZXIgaW50ZXJmYWNlIGFuZCB1c2UgdGhh
dAogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkgewotICAgICAgICBoYW5kbGVF
dmVudEZ1bmN0aW9uID0ganNGdW5jdGlvbi0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJoYW5kbGVFdmVudCIpKTsKKyAgICAgICAgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IGpz
RnVuY3Rpb24tPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiaGFuZGxlRXZlbnQiKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpIHsKICAgICAgICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigp
OwogICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIGV2ZW50
LnRhcmdldCgpLT51bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7Ci0gICAgICAgICAg
ICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJlcG9ydEV4
Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIGhhbmRs
ZUV2ZW50RnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEpTRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dAogICAgIFJlZjxKU0V2ZW50TGlzdGVuZXI+IHByb3RlY3RlZFRoaXMoKnRo
aXMpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgJmV2ZW50KSk7CisgICAgYXJncy5hcHBlbmQodG9KUyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICZldmVudCkpOwogICAgIEFTU0VSVCgh
YXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCiAgICAgRXZlbnQqIHNhdmVkRXZlbnQgPSBnbG9iYWxP
YmplY3QtPmN1cnJlbnRFdmVudCgpOwpAQCAtMTcwLDkgKzE3MCw5IEBAIHZvaWQgSlNFdmVudExp
c3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0CiAKICAgICBKU0V4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbCgmc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKIAotICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gaGFuZGxlRXZlbnRGdW5jdGlvbiA9PSBqc0Z1bmN0aW9uID8gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIGV2ZW50LmN1cnJlbnRUYXJnZXQoKSkgOiBqc0Z1bmN0aW9uOworICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gaGFuZGxlRXZlbnRGdW5jdGlvbiA9PSBqc0Z1bmN0aW9uID8g
dG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGV2ZW50LmN1cnJlbnRUYXJn
ZXQoKSkgOiBqc0Z1bmN0aW9uOwogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiBleGNlcHRp
b247Ci0gICAgSlNWYWx1ZSByZXR2YWwgPSBKU0V4ZWNTdGF0ZTo6cHJvZmlsZWRDYWxsKGV4ZWMs
IEpTQzo6UHJvZmlsaW5nUmVhc29uOjpPdGhlciwgaGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSBy
ZXR2YWwgPSBKU0V4ZWNTdGF0ZTo6cHJvZmlsZWRDYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6UHJvZmlsaW5nUmVhc29uOjpPdGhlciwgaGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MsIGV4Y2VwdGlvbik7CiAKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbigmc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
CiAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dAogCiAgICAgaWYg
KGV4Y2VwdGlvbikgewogICAgICAgICBldmVudC50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25J
bkV2ZW50SGFuZGxlcigpOwotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIGV4Y2VwdGlv
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIEpT
RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dAogICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJl
Zm9yZXVubG9hZEV2ZW50KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBPbkJlZm9yZVVubG9hZEV2
ZW50SGFuZGxlciwgYW5kIHRoZXJlZm9yZSB0aGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgY29lcmNl
ZCBpbnRvIGEgU3RyaW5nLgogICAgICAgICBpZiAoaXM8QmVmb3JlVW5sb2FkRXZlbnQ+KGV2ZW50
KSkKLSAgICAgICAgICAgIGhhbmRsZUJlZm9yZVVubG9hZEV2ZW50UmV0dXJuVmFsdWUoZG93bmNh
c3Q8QmVmb3JlVW5sb2FkRXZlbnQ+KGV2ZW50KSwgY29udmVydDxJRExOdWxsYWJsZTxJRExET01T
dHJpbmc+PigqZXhlYywgcmV0dmFsKSk7CisgICAgICAgICAgICBoYW5kbGVCZWZvcmVVbmxvYWRF
dmVudFJldHVyblZhbHVlKGRvd25jYXN0PEJlZm9yZVVubG9hZEV2ZW50PihldmVudCksIGNvbnZl
cnQ8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHJldHZh
bCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMjksMTEgKzIyOSwxMSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSBldmVudEhhbmRsZXJBdHRyaWJ1dGUoRXZlbnRMaXN0ZW5l
ciogYWJzdHJhY3RMaXN0ZW5lcgogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIAotc3RhdGljIGlu
bGluZSBSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBjcmVhdGVFdmVudExpc3RlbmVyRm9yRXZlbnRI
YW5kbGVyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGxpc3Rl
bmVyLCBKU0M6OkpTT2JqZWN0JiB3cmFwcGVyKQorc3RhdGljIGlubGluZSBSZWZQdHI8SlNFdmVu
dExpc3RlbmVyPiBjcmVhdGVFdmVudExpc3RlbmVyRm9yRXZlbnRIYW5kbGVyQXR0cmlidXRlKEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBsaXN0
ZW5lciwgSlNDOjpKU09iamVjdCYgd3JhcHBlcikKIHsKICAgICBpZiAoIWxpc3RlbmVyLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBKU0V2ZW50TGlzdGVu
ZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksICZ3cmFwcGVyLCB0cnVlLCBjdXJyZW50V29y
bGQoc3RhdGUpKTsKKyAgICByZXR1cm4gSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3Qo
bGlzdGVuZXIpLCAmd3JhcHBlciwgdHJ1ZSwgY3VycmVudFdvcmxkKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKIH0KIAogSlNDOjpKU1ZhbHVlIGV2ZW50SGFuZGxlckF0dHJpYnV0ZShFdmVudFRhcmdl
dCYgdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIERPTVdyYXBwZXJXb3JsZCYg
aXNvbGF0ZWRXb3JsZCkKQEAgLTI0MSw5ICsyNDEsOSBAQCBKU0M6OkpTVmFsdWUgZXZlbnRIYW5k
bGVyQXR0cmlidXRlKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50
VAogICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGFyZ2V0LmF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoZXZlbnRUeXBlLCBpc29sYXRlZFdvcmxkKSwgKnRhcmdldC5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwogfQogCi12b2lkIHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHdyYXBwZXIsIEV2ZW50VGFyZ2V0JiB0YXJn
ZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQordm9p
ZCBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgd3JhcHBlciwgRXZlbnRUYXJnZXQmIHRhcmdldCwg
Y29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
dGFyZ2V0LnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjcmVhdGVFdmVudExp
c3RlbmVyRm9yRXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0YXRlLCB2YWx1ZSwgd3JhcHBlciksIGN1
cnJlbnRXb3JsZChzdGF0ZSkpOworICAgIHRhcmdldC5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgY3JlYXRlRXZlbnRMaXN0ZW5lckZvckV2ZW50SGFuZGxlckF0dHJpYnV0ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgd3JhcHBlciksIGN1cnJlbnRXb3JsZChsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CiB9CiAKIEpTQzo6SlNWYWx1ZSB3aW5kb3dFdmVudEhhbmRsZXJBdHRy
aWJ1dGUoSFRNTEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwg
RE9NV3JhcHBlcldvcmxkJiBpc29sYXRlZFdvcmxkKQpAQCAtMjUyLDEwICsyNTIsMTAgQEAgSlND
OjpKU1ZhbHVlIHdpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZShIVE1MRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgQXRvbVN0cmluZyYKICAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKGRv
Y3VtZW50LmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBpc29sYXRl
ZFdvcmxkKSwgZG9jdW1lbnQpOwogfQogCi12b2lkIHNldFdpbmRvd0V2ZW50SGFuZGxlckF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHdyYXBwZXIsIEhUTUxF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKK3ZvaWQgc2V0V2luZG93RXZlbnRIYW5kbGVyQXR0cmlidXRlKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QmIHdyYXBwZXIsIEhU
TUxFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBBU1NFUlQod3JhcHBlci5nbG9iYWxPYmplY3QoKSk7Ci0gICAg
ZWxlbWVudC5kb2N1bWVudCgpLnNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRU
eXBlLCBjcmVhdGVFdmVudExpc3RlbmVyRm9yRXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0YXRlLCB2
YWx1ZSwgKndyYXBwZXIuZ2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKKyAg
ICBlbGVtZW50LmRvY3VtZW50KCkuc2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dFR5cGUsIGNyZWF0ZUV2ZW50TGlzdGVuZXJGb3JFdmVudEhhbmRsZXJBdHRyaWJ1dGUobGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUsICp3cmFwcGVyLmdsb2JhbE9iamVjdCgpKSwgY3VycmVudFdv
cmxkKGxleGljYWxHbG9iYWxPYmplY3QpKTsKIH0KIAogSlNDOjpKU1ZhbHVlIHdpbmRvd0V2ZW50
SGFuZGxlckF0dHJpYnV0ZShET01XaW5kb3cmIHdpbmRvdywgY29uc3QgQXRvbVN0cmluZyYgZXZl
bnRUeXBlLCBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQpCkBAIC0yNjMsOSArMjYzLDkg
QEAgSlNDOjpKU1ZhbHVlIHdpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZShET01XaW5kb3cmIHdp
bmRvdywgY29uc3QgQXRvbVN0cmluZyYgZXYKICAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmli
dXRlKHdpbmRvdywgZXZlbnRUeXBlLCBpc29sYXRlZFdvcmxkKTsKIH0KIAotdm9pZCBzZXRXaW5k
b3dFdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2Jq
ZWN0JiB3cmFwcGVyLCBET01XaW5kb3cmIHdpbmRvdywgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRU
eXBlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit2b2lkIHNldFdpbmRvd0V2ZW50SGFuZGxlckF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2Jq
ZWN0JiB3cmFwcGVyLCBET01XaW5kb3cmIHdpbmRvdywgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRU
eXBlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRl
KHN0YXRlLCB3cmFwcGVyLCB3aW5kb3csIGV2ZW50VHlwZSwgdmFsdWUpOworICAgIHNldEV2ZW50
SGFuZGxlckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB3cmFwcGVyLCB3aW5kb3csIGV2
ZW50VHlwZSwgdmFsdWUpOwogfQogCiBKU0M6OkpTVmFsdWUgZG9jdW1lbnRFdmVudEhhbmRsZXJB
dHRyaWJ1dGUoSFRNTEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlw
ZSwgRE9NV3JhcHBlcldvcmxkJiBpc29sYXRlZFdvcmxkKQpAQCAtMjc0LDEzICsyNzQsMTMgQEAg
SlNDOjpKU1ZhbHVlIGRvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlKEhUTUxFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBBdG9tU3RyaW4KICAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRl
KGRvY3VtZW50LmF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBpc29sYXRlZFdvcmxk
KSwgZG9jdW1lbnQpOwogfQogCi12b2lkIHNldERvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgd3JhcHBlciwgSFRNTEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQordm9pZCBzZXREb2N1bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiB3cmFwcGVyLCBIVE1M
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHdyYXBwZXIuZ2xvYmFsT2JqZWN0KCkpOwogICAgIGF1
dG8mIGRvY3VtZW50ID0gZWxlbWVudC5kb2N1bWVudCgpOwotICAgIGF1dG8qIGRvY3VtZW50V3Jh
cHBlciA9IEpTQzo6anNDYXN0PEpTRG9jdW1lbnQqPih0b0pTKCZzdGF0ZSwgSlNDOjpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPih3cmFwcGVyLmdsb2JhbE9iamVjdCgpKSwgZG9jdW1lbnQpKTsK
KyAgICBhdXRvKiBkb2N1bWVudFdyYXBwZXIgPSBKU0M6OmpzQ2FzdDxKU0RvY3VtZW50Kj4odG9K
UygmbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPih3
cmFwcGVyLmdsb2JhbE9iamVjdCgpKSwgZG9jdW1lbnQpKTsKICAgICBBU1NFUlQoZG9jdW1lbnRX
cmFwcGVyKTsKLSAgICBkb2N1bWVudC5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSwgY3JlYXRlRXZlbnRMaXN0ZW5lckZvckV2ZW50SGFuZGxlckF0dHJpYnV0ZShzdGF0ZSwgdmFs
dWUsICpkb2N1bWVudFdyYXBwZXIpLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKKyAgICBkb2N1bWVu
dC5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY3JlYXRlRXZlbnRMaXN0ZW5l
ckZvckV2ZW50SGFuZGxlckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgKmRv
Y3VtZW50V3JhcHBlciksIGN1cnJlbnRXb3JsZChsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiB9CiAK
IEpTQzo6SlNWYWx1ZSBkb2N1bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZShEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRE9NV3JhcHBlcldvcmxkJiBpc29s
YXRlZFdvcmxkKQpAQCAtMjg4LDkgKzI4OCw5IEBAIEpTQzo6SlNWYWx1ZSBkb2N1bWVudEV2ZW50
SGFuZGxlckF0dHJpYnV0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmCiAg
ICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZShkb2N1bWVudCwgZXZlbnRUeXBlLCBpc29s
YXRlZFdvcmxkKTsKIH0KIAotdm9pZCBzZXREb2N1bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHdyYXBwZXIsIERvY3VtZW50JiBk
b2N1bWVudCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Cit2b2lkIHNldERvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QmIHdyYXBwZXIsIERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0YXRlLCB3cmFwcGVyLCBkb2N1
bWVudCwgZXZlbnRUeXBlLCB2YWx1ZSk7CisgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKGxl
eGljYWxHbG9iYWxPYmplY3QsIHdyYXBwZXIsIGRvY3VtZW50LCBldmVudFR5cGUsIHZhbHVlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuaAppbmRleCA4MjYzYjhkMWFmMmYxOTdmNGY2NWQ4OGQ1MDBjZTVi
OTRlNzFjNmFiLi5lZWZhMDEzYjFkMTEyNDBjMzQ0NmUxZDFhY2YyNTdlOGZhODk3ZjgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaApAQCAtNzUsMTkg
Kzc1LDE5IEBAIGNsYXNzIEpTRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsK
IAogLy8gRm9yICJvbnh4eCIgYXR0cmlidXRlcyB0aGF0IGF1dG9tYXRpY2FsbHkgc2V0IHVwIEph
dmFTY3JpcHQgZXZlbnQgbGlzdGVuZXJzLgogSlNDOjpKU1ZhbHVlIGV2ZW50SGFuZGxlckF0dHJp
YnV0ZShFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRE9NV3JhcHBl
cldvcmxkJik7Ci12b2lkIHNldEV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNPYmplY3QmLCBFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlw
ZSwgSlNDOjpKU1ZhbHVlKTsKK3ZvaWQgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0JiwgRXZlbnRUYXJnZXQmLCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIEpTQzo6SlNWYWx1ZSk7CiAKIC8vIExpa2UgdGhlIGZ1bmN0aW9ucyBh
Ym92ZSwgYnV0IGZvciBhdHRyaWJ1dGVzIHRoYXQgZm9yd2FyZCBldmVudCBoYW5kbGVycyB0byB0
aGUgd2luZG93IG9iamVjdCByYXRoZXIgdGhhbiBzZXR0aW5nIHRoZW0gb24gdGhlIHRhcmdldC4K
IEpTQzo6SlNWYWx1ZSB3aW5kb3dFdmVudEhhbmRsZXJBdHRyaWJ1dGUoSFRNTEVsZW1lbnQmLCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIERPTVdyYXBwZXJXb3JsZCYpOwotdm9pZCBzZXRX
aW5kb3dFdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0
JiwgSFRNTEVsZW1lbnQmLCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEpTQzo6SlNWYWx1
ZSk7Cit2b2lkIHNldFdpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpKU09iamVjdCYsIEhUTUxFbGVtZW50JiwgY29uc3QgQXRvbVN0cmluZyYgZXZl
bnRUeXBlLCBKU0M6OkpTVmFsdWUpOwogSlNDOjpKU1ZhbHVlIHdpbmRvd0V2ZW50SGFuZGxlckF0
dHJpYnV0ZShET01XaW5kb3cmLCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIERPTVdyYXBw
ZXJXb3JsZCYpOwotdm9pZCBzZXRXaW5kb3dFdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTT2JqZWN0JiwgRE9NV2luZG93JiwgY29uc3QgQXRvbVN0cmluZyYgZXZl
bnRUeXBlLCBKU0M6OkpTVmFsdWUpOwordm9pZCBzZXRXaW5kb3dFdmVudEhhbmRsZXJBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QmLCBET01XaW5kb3cmLCBjb25z
dCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEpTQzo6SlNWYWx1ZSk7CiAKIC8vIExpa2UgdGhlIGZ1
bmN0aW9ucyBhYm92ZSwgYnV0IGZvciBhdHRyaWJ1dGVzIHRoYXQgZm9yd2FyZCBldmVudCBoYW5k
bGVycyB0byB0aGUgZG9jdW1lbnQgcmF0aGVyIHRoYW4gc2V0dGluZyB0aGVtIG9uIHRoZSB0YXJn
ZXQuCiBKU0M6OkpTVmFsdWUgZG9jdW1lbnRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoSFRNTEVsZW1l
bnQmLCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIERPTVdyYXBwZXJXb3JsZCYpOwotdm9p
ZCBzZXREb2N1bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNPYmplY3QmLCBIVE1MRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgSlND
OjpKU1ZhbHVlKTsKK3ZvaWQgc2V0RG9jdW1lbnRFdmVudEhhbmRsZXJBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QmLCBIVE1MRWxlbWVudCYsIGNvbnN0IEF0b21T
dHJpbmcmIGV2ZW50VHlwZSwgSlNDOjpKU1ZhbHVlKTsKIEpTQzo6SlNWYWx1ZSBkb2N1bWVudEV2
ZW50SGFuZGxlckF0dHJpYnV0ZShEb2N1bWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlw
ZSwgRE9NV3JhcHBlcldvcmxkJik7Ci12b2lkIHNldERvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVjdCYsIERvY3VtZW50JiwgY29uc3QgQXRv
bVN0cmluZyYgZXZlbnRUeXBlLCBKU0M6OkpTVmFsdWUpOwordm9pZCBzZXREb2N1bWVudEV2ZW50
SGFuZGxlckF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCYsIERv
Y3VtZW50JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBKU0M6OkpTVmFsdWUpOwogCiBp
bmxpbmUgSlNDOjpKU09iamVjdCogSlNFdmVudExpc3RlbmVyOjpqc0Z1bmN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIGNvbnN0CiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmgKaW5kZXggMzg0
MzQzMzNkMzgwZTEyMDE5MWYyZjU1NThjYTVmYzA0MmEzOTRhYy4uMDkyODUxNzYzY2EwZDFhY2Ex
YmM3MzQ2NTM1MGI2ZTJjMGVlZTUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uaApAQCAtNTUsMjYgKzU1LDI2IEBAIHN0ZDo6dW5pcXVl
X3B0cjxKU0V2ZW50VGFyZ2V0V3JhcHBlcj4ganNFdmVudFRhcmdldENhc3QoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSB0CiB0ZW1wbGF0ZTw+IGNsYXNzIElETE9wZXJhdGlvbjxKU0V2ZW50VGFyZ2V0
PiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQ2xhc3NQYXJhbWV0ZXIgPSBKU0V2ZW50VGFyZ2V0V3Jh
cHBlcio7Ci0gICAgdXNpbmcgT3BlcmF0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSosIENsYXNzUGFyYW1ldGVyLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBP
cGVyYXRpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkNhbGxGcmFtZSosIENsYXNzUGFyYW1ldGVyLCBKU0M6OlRocm93U2NvcGUmKTsKIAogICAgIHRl
bXBsYXRlPE9wZXJhdGlvbiBvcGVyYXRpb24sIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yID0gQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1Zh
bHVlIGNhbGwoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1l
KQorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGwoSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgY29uc3Qg
Y2hhciogb3BlcmF0aW9uTmFtZSkKICAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICAgICAgYXV0byB0aGlzT2JqZWN0ID0ganNFdmVudFRhcmdldENhc3Qodm0sIHN0YXRlLnRoaXNW
YWx1ZSgpLnRvVGhpcygmc3RhdGUsIEpTQzo6Tm90U3RyaWN0TW9kZSkpOworICAgICAgICBhdXRv
IHRoaXNPYmplY3QgPSBqc0V2ZW50VGFyZ2V0Q2FzdCh2bSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgp
LnRvVGhpcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpOb3RTdHJpY3RNb2RlKSk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiRXZlbnRUYXJnZXQiLCBvcGVyYXRpb25O
YW1lKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgIkV2ZW50VGFyZ2V0Iiwgb3BlcmF0aW9uTmFtZSk7CiAKICAg
ICAgICAgYXV0byYgd3JhcHBlZCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICAgICAgaWYg
KGlzPERPTVdpbmRvdz4od3JhcHBlZCkpIHsKICAgICAgICAgICAgIGF1dG8mIHdpbmRvdyA9IGRv
d25jYXN0PERPTVdpbmRvdz4od3JhcHBlZCk7Ci0gICAgICAgICAgICBpZiAoIXdpbmRvdy5mcmFt
ZSgpIHx8ICFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0
YXRlLCB3aW5kb3csIFRocm93U2VjdXJpdHlFcnJvcikpCisgICAgICAgICAgICBpZiAoIXdpbmRv
dy5mcmFtZSgpIHx8ICFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coJmxleGljYWxHbG9iYWxPYmplY3QsIHdpbmRvdywgVGhyb3dTZWN1cml0eUVycm9yKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBvcGVyYXRpb24oJnN0YXRlLCB0aGlz
T2JqZWN0LmdldCgpLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbigmbGV4
aWNhbEdsb2JhbE9iamVjdCwgJmNhbGxGcmFtZSwgdGhpc09iamVjdC5nZXQoKSwgdGhyb3dTY29w
ZSk7CiAgICAgfQogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFeGVjU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFeGVjU3RhdGUu
Y3BwCmluZGV4IDIwZGQyNTU4MTZjMGY3MmQxYjlhNjNmNWZhZjM4N2JkMGUxYTk4N2EuLmVkYjg3
ODIzZmRlNjUzNTQyMzk1NDUzMjVjMjU3YzE4YTlhNzgzYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhlY1N0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V4ZWNTdGF0ZS5jcHAKQEAgLTM0LDIzICszNCwyMyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNFeGVjU3RhdGU6OmRpZExlYXZlU2NyaXB0Q29udGV4dChK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKK3ZvaWQgSlNFeGVjU3RhdGU6OmRpZExlYXZlU2NyaXB0Q29u
dGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQogewotICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJv
bUV4ZWNTdGF0ZShleGVjKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgTWljcm90YXNrUXVldWU6
OmNvbnRleHRRdWV1ZSgqY29udGV4dCkucGVyZm9ybU1pY3JvdGFza0NoZWNrcG9pbnQoKTsKICAg
ICBjb250ZXh0LT5lbnN1cmVSZWplY3RlZFByb21pc2VUcmFja2VyKCkucHJvY2Vzc1F1ZXVlU29v
bigpOwogfQogCi1KU0M6OkpTVmFsdWUgZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNDOjpD
YWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgTmFrZWRQdHI8SlNDOjpF
eGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKK0pTQzo6SlNWYWx1ZSBmdW5jdGlvbkNhbGxI
YW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUs
IGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJu
ZWRFeGNlcHRpb24pCiB7Ci0gICAgcmV0dXJuIEpTRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0
aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRF
eGNlcHRpb24pOworICAgIHJldHVybiBKU0V4ZWNTdGF0ZTo6Y2FsbChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3Ms
IHJldHVybmVkRXhjZXB0aW9uKTsKIH0KIAotSlNDOjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxlckZy
b21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6U291cmNlQ29kZSYg
c291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4m
IHJldHVybmVkRXhjZXB0aW9uKQorSlNDOjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxlckZyb21BbnlU
aHJlYWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSlND
OjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEpT
Qzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7Ci0gICAgcmV0dXJuIEpTRXhlY1N0
YXRlOjpldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgcmV0dXJuZWRFeGNlcHRpb24p
OworICAgIHJldHVybiBKU0V4ZWNTdGF0ZTo6ZXZhbHVhdGUobGV4aWNhbEdsb2JhbE9iamVjdCwg
c291cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFeGVj
U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhlY1N0YXRlLmgKaW5kZXgg
NTgxOTc0Nzk4ZDBhNGFhYjdmZTgwMmZlMDFlMjY3MjA5NTA0YjBiMi4uMTZiMzM5MzllZDJhZWNh
NzhkNmMzMjI0MTc2YTk4OWY4Y2NjODNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFeGVjU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V4ZWNTdGF0ZS5oCkBAIC00NCw3MiArNDQsNzIgQEAgY2xhc3MgSlNFeGVjU3RhdGUgewogICAg
IFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOwogICAgIGZyaWVuZCBjbGFzcyBKU01haW5UaHJl
YWROdWxsU3RhdGU7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEpTQzo6RXhlY1N0YXRlKiBjdXJyZW50
U3RhdGUoKQorICAgIHN0YXRpYyBKU0M6OkpTR2xvYmFsT2JqZWN0KiBjdXJyZW50U3RhdGUoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHRocmVhZEdsb2JhbERhdGEoKS5jdXJyZW50U3RhdGUoKTsK
ICAgICB9OwogICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2FsbChKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlIGNhbGxU
eXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1
ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4mIHJl
dHVybmVkRXhjZXB0aW9uKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2FsbChKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmpl
Y3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRh
LCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIE5ha2Vk
UHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiAgICAgewotICAgICAgICBK
U0V4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNhbGwo
ZXhlYywgZnVuY3Rpb25PYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdz
LCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIEpTRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUs
IGFyZ3MsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICB9OwogCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpTb3VyY2VDb2Rl
JiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9u
PiYgcmV0dXJuZWRFeGNlcHRpb24pCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBKU0M6OlNvdXJj
ZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8SlNDOjpFeGNl
cHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKICAgICB7Ci0gICAgICAgIEpTRXhlY1N0YXRlIGN1
cnJlbnRTdGF0ZShleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291
cmNlLCB0aGlzVmFsdWUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICAgICAgSlNFeGVjU3RhdGUg
Y3VycmVudFN0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gSlNDOjpl
dmFsdWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzb3VyY2UsIHRoaXNWYWx1ZSwgcmV0dXJuZWRF
eGNlcHRpb24pOwogICAgIH07CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpK
U1ZhbHVlIHRoaXNWYWx1ZSA9IEpTQzo6SlNWYWx1ZSgpKQorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29u
c3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUgPSBKU0M6
OkpTVmFsdWUoKSkKICAgICB7CiAgICAgICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiB1bnVz
ZWQ7Ci0gICAgICAgIHJldHVybiBldmFsdWF0ZShleGVjLCBzb3VyY2UsIHRoaXNWYWx1ZSwgdW51
c2VkKTsKKyAgICAgICAgcmV0dXJuIGV2YWx1YXRlKGxleGljYWxHbG9iYWxPYmplY3QsIHNvdXJj
ZSwgdGhpc1ZhbHVlLCB1bnVzZWQpOwogICAgIH07CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IHByb2ZpbGVkQ2FsbChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpQcm9maWxpbmdSZWFzb24g
cmVhc29uLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2FsbFR5
cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0
dXJuZWRFeGNlcHRpb24pCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBwcm9maWxlZENhbGwoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpQcm9maWxpbmdSZWFz
b24gcmVhc29uLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUgY2Fs
bFR5cGUsIGNvbnN0IEpTQzo6Q2FsbERhdGEmIGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1Zh
bHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYg
cmV0dXJuZWRFeGNlcHRpb24pCiAgICAgewotICAgICAgICBKU0V4ZWNTdGF0ZSBjdXJyZW50U3Rh
dGUoZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU0M6OnByb2ZpbGVkQ2FsbChleGVjLCByZWFzb24s
IGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0
dXJuZWRFeGNlcHRpb24pOworICAgICAgICBKU0V4ZWNTdGF0ZSBjdXJyZW50U3RhdGUobGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBKU0M6OnByb2ZpbGVkQ2FsbChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCByZWFzb24sIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEs
IHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgcHJvZmlsZWRFdmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpQcm9maWxpbmdSZWFzb24gcmVhc29uLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwg
SlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+JiByZXR1cm5l
ZEV4Y2VwdGlvbikKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIHByb2ZpbGVkRXZhbHVhdGUoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpQcm9maWxpbmdSZWFz
b24gcmVhc29uLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVlIHRo
aXNWYWx1ZSwgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKICAg
ICB7Ci0gICAgICAgIEpTRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKLSAgICAgICAgcmV0
dXJuIEpTQzo6cHJvZmlsZWRFdmFsdWF0ZShleGVjLCByZWFzb24sIHNvdXJjZSwgdGhpc1ZhbHVl
LCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIEpTRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6cHJvZmlsZWRFdmFsdWF0
ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCByZWFzb24sIHNvdXJjZSwgdGhpc1ZhbHVlLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBwcm9maWxlZEV2
YWx1YXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlByb2ZpbGluZ1JlYXNvbiByZWFzb24s
IGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlID0g
SlNDOjpKU1ZhbHVlKCkpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBwcm9maWxlZEV2YWx1YXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6UHJvZmlsaW5n
UmVhc29uIHJlYXNvbiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1
ZSB0aGlzVmFsdWUgPSBKU0M6OkpTVmFsdWUoKSkKICAgICB7CiAgICAgICAgIE5ha2VkUHRyPEpT
Qzo6RXhjZXB0aW9uPiB1bnVzZWQ7Ci0gICAgICAgIHJldHVybiBwcm9maWxlZEV2YWx1YXRlKGV4
ZWMsIHJlYXNvbiwgc291cmNlLCB0aGlzVmFsdWUsIHVudXNlZCk7CisgICAgICAgIHJldHVybiBw
cm9maWxlZEV2YWx1YXRlKGxleGljYWxHbG9iYWxPYmplY3QsIHJlYXNvbiwgc291cmNlLCB0aGlz
VmFsdWUsIHVudXNlZCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcnVuVGFzayhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpNaWNyb3Rhc2smIHRhc2spCisgICAgc3RhdGljIHZvaWQgcnVu
VGFzayhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6Ok1pY3Jv
dGFzayYgdGFzaykKICAgICB7Ci0gICAgICAgIEpTRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVj
KTsKLSAgICAgICAgdGFzay5ydW4oZXhlYyk7CisgICAgICAgIEpTRXhlY1N0YXRlIGN1cnJlbnRT
dGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgdGFzay5ydW4obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQzo6SlNJbnRlcm5hbFByb21pc2UmIGxv
YWRNb2R1bGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUs
IEpTQzo6SlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU0M6OkpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKKyAg
ICBzdGF0aWMgSlNDOjpKU0ludGVybmFsUHJvbWlzZSYgbG9hZE1vZHVsZShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUsIEpT
Qzo6SlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU0M6OkpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKICAgICB7
Ci0gICAgICAgIEpTRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZSgmc3RhdGUpOwotICAgICAgICByZXR1
cm4gKkpTQzo6bG9hZE1vZHVsZSgmc3RhdGUsIG1vZHVsZU5hbWUsIHBhcmFtZXRlcnMsIHNjcmlw
dEZldGNoZXIpOworICAgICAgICBKU0V4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgICAgICByZXR1cm4gKkpTQzo6bG9hZE1vZHVsZSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgbW9kdWxlTmFtZSwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7CiAgICAgfQog
Ci0gICAgc3RhdGljIEpTQzo6SlNJbnRlcm5hbFByb21pc2UmIGxvYWRNb2R1bGUoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIEpTQzo6SlNW
YWx1ZSBzY3JpcHRGZXRjaGVyKQorICAgIHN0YXRpYyBKU0M6OkpTSW50ZXJuYWxQcm9taXNlJiBs
b2FkTW9kdWxlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0
IEpTQzo6U291cmNlQ29kZSYgc291cmNlQ29kZSwgSlNDOjpKU1ZhbHVlIHNjcmlwdEZldGNoZXIp
CiAgICAgewotICAgICAgICBKU0V4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoJnN0YXRlKTsKLSAgICAg
ICAgcmV0dXJuICpKU0M6OmxvYWRNb2R1bGUoJnN0YXRlLCBzb3VyY2VDb2RlLCBzY3JpcHRGZXRj
aGVyKTsKKyAgICAgICAgSlNFeGVjU3RhdGUgY3VycmVudFN0YXRlKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuICpKU0M6OmxvYWRNb2R1bGUoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIHNvdXJjZUNvZGUsIHNjcmlwdEZldGNoZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgbGlua0FuZEV2YWx1YXRlTW9kdWxlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpTQzo6SlNWYWx1ZSBzY3JpcHRGZXRjaGVy
LCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgbGlua0FuZEV2YWx1YXRlTW9kdWxlKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgbW9kdWxlS2V5LCBK
U0M6OkpTVmFsdWUgc2NyaXB0RmV0Y2hlciwgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+JiByZXR1
cm5lZEV4Y2VwdGlvbikKICAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICAgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIAotICAg
ICAgICBKU0V4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoJnN0YXRlKTsKLSAgICAgICAgYXV0byByZXR1
cm5WYWx1ZSA9IEpTQzo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKCZzdGF0ZSwgbW9kdWxlS2V5LCBz
Y3JpcHRGZXRjaGVyKTsKKyAgICAgICAgSlNFeGVjU3RhdGUgY3VycmVudFN0YXRlKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICAgICAgYXV0byByZXR1cm5WYWx1ZSA9IEpTQzo6bGlua0FuZEV2
YWx1YXRlTW9kdWxlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBtb2R1bGVLZXksIHNjcmlwdEZldGNo
ZXIpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAg
ICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKQEAgLTEyMiwxMSArMTIyLDExIEBAIGNsYXNzIEpTRXhl
Y1N0YXRlIHsKICAgICBzdGF0aWMgdm9pZCBpbnN0cnVtZW50RnVuY3Rpb25Db25zdHJ1Y3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIEpTQzo6Q29uc3RydWN0VHlwZSwgY29uc3QgSlNDOjpDb25z
dHJ1Y3REYXRhJik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgSlNFeGVjU3RhdGUoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCisgICAgZXhwbGljaXQgSlNFeGVjU3RhdGUoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKICAgICAgICAgOiBtX3ByZXZpb3VzU3RhdGUoY3Vy
cmVudFN0YXRlKCkpCi0gICAgICAgICwgbV9sb2NrKGV4ZWMpCisgICAgICAgICwgbV9sb2NrKGxl
eGljYWxHbG9iYWxPYmplY3QpCiAgICAgewotICAgICAgICBzZXRDdXJyZW50U3RhdGUoZXhlYyk7
CisgICAgICAgIHNldEN1cnJlbnRTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9Owog
CiAgICAgfkpTRXhlY1N0YXRlKCkKQEAgLTEzNSwyOSArMTM1LDI5IEBAIGNsYXNzIEpTRXhlY1N0
YXRlIHsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAg
ICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogCi0gICAgICAgIEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOwotICAgICAgICBib29sIGRpZEV4aXRKYXZhU2NyaXB0
ID0gc3RhdGUgJiYgIW1fcHJldmlvdXNTdGF0ZTsKKyAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGN1cnJlbnRTdGF0ZSgpOworICAgICAgICBib29sIGRp
ZEV4aXRKYXZhU2NyaXB0ID0gbGV4aWNhbEdsb2JhbE9iamVjdCAmJiAhbV9wcmV2aW91c1N0YXRl
OwogCiAgICAgICAgIHNldEN1cnJlbnRTdGF0ZShtX3ByZXZpb3VzU3RhdGUpOwogCiAgICAgICAg
IGlmIChkaWRFeGl0SmF2YVNjcmlwdCkKLSAgICAgICAgICAgIGRpZExlYXZlU2NyaXB0Q29udGV4
dChzdGF0ZSk7CisgICAgICAgICAgICBkaWRMZWF2ZVNjcmlwdENvbnRleHQobGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFN0YXRlKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50U3RhdGUoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKICAgICB7Ci0gICAgICAgIHRocmVh
ZEdsb2JhbERhdGEoKS5zZXRDdXJyZW50U3RhdGUoc3RhdGUpOworICAgICAgICB0aHJlYWRHbG9i
YWxEYXRhKCkuc2V0Q3VycmVudFN0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGUsIFR5cGUganNUeXBlLCB0eXBlbmFtZSBEYXRhVHlw
ZT4gc3RhdGljIHZvaWQgaW5zdHJ1bWVudEZ1bmN0aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFR5cGUsIGNvbnN0IERhdGFUeXBlJik7CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSog
bV9wcmV2aW91c1N0YXRlOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIG1fcHJldmlvdXNTdGF0
ZTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBtX2xvY2s7CiAKLSAgICBzdGF0aWMgdm9pZCBkaWRM
ZWF2ZVNjcmlwdENvbnRleHQoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRM
ZWF2ZVNjcmlwdENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCopOwogfTsKIAotLy8gTnVsbCBz
dGF0ZSBwcmV2ZW50cyBvcmlnaW4gc2VjdXJpdHkgY2hlY2tzLgorLy8gTnVsbCBsZXhpY2FsR2xv
YmFsT2JqZWN0IHByZXZlbnRzIG9yaWdpbiBzZWN1cml0eSBjaGVja3MuCiAvLyBVc2VkIGJ5IG5v
bi1KYXZhU2NyaXB0IGJpbmRpbmdzIChPYmpDLCBHT2JqZWN0KS4KIGNsYXNzIEpTTWFpblRocmVh
ZE51bGxTdGF0ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNNYWluVGhyZWFkTnVsbFN0
YXRlKTsKQEAgLTE3OCwxMSArMTc4LDExIEBAIGNsYXNzIEpTTWFpblRocmVhZE51bGxTdGF0ZSB7
CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTQzo6RXhlY1N0YXRlKiBtX3ByZXZpb3VzU3RhdGU7
CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbV9wcmV2aW91c1N0YXRlOwogICAgIEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblN0YWNrIG1fY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7CiB9OwogCi1K
U0M6OkpTVmFsdWUgZnVuY3Rpb25DYWxsSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTQzo6Q2FsbFR5cGUsIGNvbnN0IEpT
Qzo6Q2FsbERhdGEmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
IGFyZ3MsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pOwotSlND
OjpKU1ZhbHVlIGV2YWx1YXRlSGFuZGxlckZyb21BbnlUaHJlYWQoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OlNvdXJjZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0cjxK
U0M6OkV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKK0pTQzo6SlNWYWx1ZSBmdW5jdGlv
bkNhbGxIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBKU0M6OkNhbGxUeXBlLCBjb25zdCBKU0M6OkNhbGxEYXRhJiwg
SlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBOYWtlZFB0
cjxKU0M6OkV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKK0pTQzo6SlNWYWx1ZSBldmFs
dWF0ZUhhbmRsZXJGcm9tQW55VGhyZWFkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6
OlNvdXJjZUNvZGUmLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0cjxKU0M6OkV4Y2Vw
dGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFeHRlbmRhYmxlTWVzc2FnZUV2
ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXh0ZW5kYWJsZU1l
c3NhZ2VFdmVudEN1c3RvbS5jcHAKaW5kZXggMzQ2MjgxNDIyZjM3MGI3N2Q1ZWE3Y2I0MWYxZDFm
YjBlMDc0MDc4OC4uNDViYTJlYzk1ZmVkMDAxM2Q4YzgwODYyZWRjOGEzZmI3Y2I0NzgwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFeHRlbmRhYmxlTWVzc2FnZUV2
ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V4dGVuZGFi
bGVNZXNzYWdlRXZlbnRDdXN0b20uY3BwCkBAIC0zNiw0MCArMzYsNDAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGNv
bnN0cnVjdEpTRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK0pTQzo6RW5jb2RlZEpTVmFsdWUgY29u
c3RydWN0SlNFeHRlbmRhYmxlTWVzc2FnZUV2ZW50KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogCi0gICAgYXV0byoganNDb25zdHJ1Y3RvciA9
IGpzQ2FzdDxKU0RPTUNvbnN0cnVjdG9yQmFzZSo+KHN0YXRlLmpzQ2FsbGVlKCkpOworICAgIGF1
dG8qIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNET01Db25zdHJ1Y3RvckJhc2UqPihjYWxsRnJh
bWUuanNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGpzQ29uc3RydWN0b3IpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZz
dGF0ZSkpOwotICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUuYXJn
dW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIGF1dG8gZXZlbnRJbml0RGljdCA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxFeHRlbmRhYmxl
TWVzc2FnZUV2ZW50OjpJbml0Pj4oc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpKTsKKyAgICBhdXRv
IGV2ZW50SW5pdERpY3QgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8RXh0ZW5kYWJsZU1lc3NhZ2VF
dmVudDo6SW5pdD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUuYXJndW1lbnQoMSkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICBKU1ZhbHVlIGRhdGEgPSBldmVudEluaXREaWN0LmRhdGE7Ci0gICAgYXV0byBvYmpl
Y3QgPSBFeHRlbmRhYmxlTWVzc2FnZUV2ZW50OjpjcmVhdGUoc3RhdGUsIFdURk1vdmUodHlwZSks
IFdURk1vdmUoZXZlbnRJbml0RGljdCkpOworICAgIGF1dG8gb2JqZWN0ID0gRXh0ZW5kYWJsZU1l
c3NhZ2VFdmVudDo6Y3JlYXRlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHR5cGUpLCBX
VEZNb3ZlKGV2ZW50SW5pdERpY3QpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgSlNWYWx1ZSB3cmFwcGVyID0gdG9KU05ld2x5
Q3JlYXRlZDxJRExJbnRlcmZhY2U8RXh0ZW5kYWJsZU1lc3NhZ2VFdmVudD4+KHN0YXRlLCAqanND
b25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CisgICAgSlNWYWx1
ZSB3cmFwcGVyID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8RXh0ZW5kYWJsZU1lc3Nh
Z2VFdmVudD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2Jq
ZWN0KCksIFdURk1vdmUob2JqZWN0KSk7CiAKICAgICAvLyBDYWNoZSB0aGUgSlNWYWx1ZSBwYXNz
ZWQgaW4gZm9yIGRhdGEgcGFyYW1ldGVyIGluIHRoZSB3cmFwcGVyIHNvIHRoZSBnZXR0ZXIgcmV0
dXJucyB0aGUgZXhhY3QgdmFsdWUKICAgICAvLyBpdCB3YXMgaW5pdGlhbGl6ZWQgdG9vLiBXZSBk
byBub3Qgc3RvcmUgdGhlIEpTVmFsdWUgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9iamVjdCB0byBh
dm9pZCBsZWFrcy4KICAgICBhdXRvKiBqc01lc3NhZ2VFdmVudCA9IGpzQ2FzdDxKU0V4dGVuZGFi
bGVNZXNzYWdlRXZlbnQqPih3cmFwcGVyKTsKLSAgICBqc01lc3NhZ2VFdmVudC0+bV9kYXRhLnNl
dChzdGF0ZS52bSgpLCBqc01lc3NhZ2VFdmVudCwgZGF0YSk7CisgICAganNNZXNzYWdlRXZlbnQt
Pm1fZGF0YS5zZXQodm0sIGpzTWVzc2FnZUV2ZW50LCBkYXRhKTsKIAogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUod3JhcHBlcik7CiB9CiAKLUpTVmFsdWUgSlNFeHRlbmRhYmxlTWVzc2FnZUV2
ZW50OjpkYXRhKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CitKU1ZhbHVlIEpTRXh0ZW5kYWJsZU1l
c3NhZ2VFdmVudDo6ZGF0YShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29u
c3QKIHsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IG1fZGF0YS5nZXQoKSkgewogICAg
ICAgICAvLyBXZSBjYW5ub3QgdXNlIGEgY2FjaGVkIG9iamVjdCBpZiB3ZSBhcmUgaW4gYSBkaWZm
ZXJlbnQgd29ybGQgdGhhbiB0aGUgb25lIGl0IHdhcyBjcmVhdGVkIGluLgotICAgICAgICBpZiAo
aXNXb3JsZENvbXBhdGlibGUoc3RhdGUsIGNhY2hlZFZhbHVlKSkKKyAgICAgICAgaWYgKGlzV29y
bGRDb21wYXRpYmxlKGxleGljYWxHbG9iYWxPYmplY3QsIGNhY2hlZFZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQpAQCAtNzcsMTIgKzc3LDEyIEBAIEpTVmFsdWUgSlNFeHRlbmRhYmxlTWVzc2FnZUV2ZW50
OjpkYXRhKEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiAgICAgYXV0byYgZXZlbnQgPSB3cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgaWYgKGF1dG8qIHNlcmlhbGl6ZWRWYWx1ZSA9
IGV2ZW50LmRhdGEoKSkKLSAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlh
bGl6ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGV2ZW50LnBvcnRzKCksIFNlcmlhbGl6YXRpb25F
cnJvck1vZGU6Ok5vblRocm93aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVl
LT5kZXNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QoKSwgZXZlbnQu
cG9ydHMoKSwgU2VyaWFsaXphdGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcpOwogICAgIGVsc2UK
ICAgICAgICAgcmVzdWx0ID0ganNOdWxsKCk7CiAKICAgICAvLyBTYXZlIHRoZSByZXN1bHQgc28g
d2UgZG9uJ3QgaGF2ZSB0byBkZXNlcmlhbGl6ZSB0aGUgdmFsdWUgYWdhaW4uCi0gICAgbV9kYXRh
LnNldChzdGF0ZS52bSgpLCB0aGlzLCByZXN1bHQpOworICAgIG1fZGF0YS5zZXQobGV4aWNhbEds
b2JhbE9iamVjdC52bSgpLCB0aGlzLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbUVudHJ5
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVN5c3RlbUVudHJ5
Q3VzdG9tLmNwcAppbmRleCA2OWM3OGZlMTcxZjFkODY0MTdhNzNmMDEwYmRiMmMyZGU2YWJkY2Ey
Li4zY2ZlZDZjNDdiZWYwOTFjNTNjNjg0Mzk2M2Q4ODQwZGIyODFjZDM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVTeXN0ZW1FbnRyeUN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlU3lzdGVtRW50cnlDdXN0b20uY3Bw
CkBAIC0zNiwxNiArMzYsMTYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKLUpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxGaWxlU3lzdGVtRW50cnk+JiYgZW50cnkp
CitKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxGaWxlU3lzdGVtRW50cnk+JiYgZW50cnkpCiB7
CiAgICAgaWYgKGlzPEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeT4oZW50cnkpKQogICAgICAgICBy
ZXR1cm4gY3JlYXRlV3JhcHBlcjxGaWxlU3lzdGVtRGlyZWN0b3J5RW50cnk+KGdsb2JhbE9iamVj
dCwgV1RGTW92ZShlbnRyeSkpOwogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPEZpbGVTeXN0ZW1G
aWxlRW50cnk+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShlbnRyeSkpOwogfQogCi1KU1ZhbHVlIHRv
SlMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRmls
ZVN5c3RlbUVudHJ5JiBlbnRyeSkKK0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRmlsZVN5c3Rl
bUVudHJ5JiBlbnRyeSkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBl
bnRyeSk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LCBlbnRyeSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKaW5kZXggMDIy
MTEyNTY1ODE1ZDg5OGU3OWM1Njc0ODYzODU1ZWE1MDM1YTllOS4uM2ZlZTcwMjYxNWNhZTg0OTA3
N2MzNGIyNDkzNzExZDFlYzc4ZGNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLUpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8SFRNTENvbGxlY3Rpb24+JiYgY29sbGVjdGlvbikKK0pTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxI
VE1MQ29sbGVjdGlvbj4mJiBjb2xsZWN0aW9uKQogewogICAgIHN3aXRjaCAoY29sbGVjdGlvbi0+
dHlwZSgpKSB7CiAgICAgY2FzZSBGb3JtQ29udHJvbHM6CkBAIC00NSw5ICs0NSw5IEBAIEpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWY8SFRNTENvCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8SFRNTENvbGxlY3Rp
b24+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShjb2xsZWN0aW9uKSk7CiB9CiAKLUpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBIVE1M
Q29sbGVjdGlvbiYgY29sbGVjdGlvbikKK0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSFRNTENv
bGxlY3Rpb24mIGNvbGxlY3Rpb24pCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9i
amVjdCwgY29sbGVjdGlvbik7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBjb2xsZWN0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20u
Y3BwCmluZGV4IDlhMjg1OTkwYjI5OTA5MGZiNjFmMjQzNDlhYmE0MDY1YjUxYWJiOTguLjg2NmRk
NjA0NDRlNDliMGQ0NDE4YWM2MjI4Yzg0YTU0ZTczZDAzNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTMwLDE5ICsz
MCwxOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxIVE1MRG9jdW1lbnQ+JiYgcGFzc2VkRG9jdW1lbnQpCitKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxIVE1MRG9jdW1lbnQ+JiYgcGFz
c2VkRG9jdW1lbnQpCiB7CiAgICAgYXV0byYgZG9jdW1lbnQgPSBwYXNzZWREb2N1bWVudC5nZXQo
KTsKICAgICBhdXRvKiB3cmFwcGVyID0gY3JlYXRlV3JhcHBlcjxIVE1MRG9jdW1lbnQ+KGdsb2Jh
bE9iamVjdCwgV1RGTW92ZShwYXNzZWREb2N1bWVudCkpOwotICAgIHJlcG9ydE1lbW9yeUZvckRv
Y3VtZW50SWZGcmFtZWxlc3MoKnN0YXRlLCBkb2N1bWVudCk7CisgICAgcmVwb3J0TWVtb3J5Rm9y
RG9jdW1lbnRJZkZyYW1lbGVzcygqbGV4aWNhbEdsb2JhbE9iamVjdCwgZG9jdW1lbnQpOwogICAg
IHJldHVybiB3cmFwcGVyOwogfQogCi1KU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSFRNTERvY3VtZW50JiBkb2N1bWVudCkKK0pT
VmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSFRNTERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBp
ZiAoYXV0byogd3JhcHBlciA9IGNhY2hlZERvY3VtZW50V3JhcHBlcigqc3RhdGUsICpnbG9iYWxP
YmplY3QsIGRvY3VtZW50KSkKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGNhY2hlZERvY3VtZW50
V3JhcHBlcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmdsb2JhbE9iamVjdCwgZG9jdW1lbnQpKQog
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBSZWY8SFRNTERvY3VtZW50Pihkb2N1bWVudCkpOworICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgUmVm
PEhUTUxEb2N1bWVudD4oZG9jdW1lbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNw
cAppbmRleCBlNWE1Y2Y0NjVlNTFmN2M4NWUwMDdjNzg3MjY5ZGNhMjQ1ZTkyNDRiLi4zYzQxMTk5
MDFhOGZiMDM3NTkxM2Q3NzQyNjFkZTczNmU4ZGVjZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcApAQCAtNDEsNDMgKzQxLDQz
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotRW5jb2Rl
ZEpTVmFsdWUgY29uc3RydWN0SlNIVE1MRWxlbWVudChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFeGVjU3RhdGUmIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU0hUTUxFbGVt
ZW50KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxG
cmFtZSkKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0g
bGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBhdXRvKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTRE9NQ29u
c3RydWN0b3JCYXNlKj4oZXhlYy5qc0NhbGxlZSgpKTsKKyAgICBhdXRvKiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PEpTRE9NQ29uc3RydWN0b3JCYXNlKj4oY2FsbEZyYW1lLmpzQ2FsbGVlKCkpOwog
ICAgIEFTU0VSVChqc0NvbnN0cnVjdG9yKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBqc0NvbnN0
cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAg
ICAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWls
YWJsZUVycm9yKGV4ZWMsIHNjb3BlLCAiSFRNTEVsZW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJIVE1MRWxlbWVudCIpOwogICAgIEFTU0VSVChjb250
ZXh0LT5pc0RvY3VtZW50KCkpOwogCi0gICAgSlNWYWx1ZSBuZXdUYXJnZXRWYWx1ZSA9IGV4ZWMu
dGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBuZXdUYXJnZXRWYWx1ZSA9IGNhbGxGcmFtZS50aGlz
VmFsdWUoKTsKICAgICBhdXRvKiBuZXdUYXJnZXQgPSBuZXdUYXJnZXRWYWx1ZS5nZXRPYmplY3Qo
KTsKICAgICBhdXRvKiBuZXdUYXJnZXRHbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihuZXdUYXJnZXQtPmdsb2JhbE9iamVjdCh2bSkpOwogICAgIEpTVmFsdWUgaHRtbEVs
ZW1lbnRDb25zdHJ1Y3RvclZhbHVlID0gSlNIVE1MRWxlbWVudDo6Z2V0Q29uc3RydWN0b3Iodm0s
IG5ld1RhcmdldEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKG5ld1RhcmdldFZhbHVlID09IGh0bWxF
bGVtZW50Q29uc3RydWN0b3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
JmV4ZWMsIHNjb3BlLCAibmV3LnRhcmdldCBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxlbWVudCBj
b25zdHJ1Y3RvciJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAibmV3LnRhcmdldCBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxl
bWVudCBjb25zdHJ1Y3RvciJfcyk7CiAKICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CiAKICAgICBhdXRvKiB3aW5kb3cgPSBkb2N1bWVudC5kb21XaW5k
b3coKTsKICAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
JmV4ZWMsIHNjb3BlLCAibmV3LnRhcmdldCBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxlbWVudCBj
b25zdHJ1Y3RvciJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAibmV3LnRhcmdldCBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxl
bWVudCBjb25zdHJ1Y3RvciJfcyk7CiAKICAgICBhdXRvKiByZWdpc3RyeSA9IHdpbmRvdy0+Y3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5KCk7CiAgICAgaWYgKCFyZWdpc3RyeSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJmV4ZWMsIHNjb3BlLCAibmV3LnRhcmdldCBpcyBub3QgYSB2YWxp
ZCBjdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvciJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAibmV3LnRhcmdldCBpcyBub3Qg
YSB2YWxpZCBjdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvciJfcyk7CiAKICAgICBhdXRvKiBlbGVt
ZW50SW50ZXJmYWNlID0gcmVnaXN0cnktPmZpbmRJbnRlcmZhY2UobmV3VGFyZ2V0KTsKICAgICBp
ZiAoIWVsZW1lbnRJbnRlcmZhY2UpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZl
eGVjLCBzY29wZSwgIm5ldy50YXJnZXQgZG9lcyBub3QgZGVmaW5lIGEgY3VzdG9tIGVsZW1lbnQi
X3MpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgIm5ldy50YXJnZXQgZG9lcyBub3QgZGVmaW5lIGEgY3VzdG9tIGVsZW1lbnQiX3Mp
OwogCiAgICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5pc1VwZ3JhZGluZ0VsZW1lbnQoKSkgewog
ICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBnZXRET01TdHJ1Y3R1cmU8SlNIVE1M
RWxlbWVudD4odm0sICpuZXdUYXJnZXRHbG9iYWxPYmplY3QpOwotICAgICAgICBhdXRvKiBuZXdF
bGVtZW50U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmUoJmV4ZWMsIG5ld1RhcmdldFZhbHVlLCBiYXNlU3RydWN0dXJlKTsKKyAgICAgICAgYXV0byog
bmV3RWxlbWVudFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3Ry
dWN0dXJlKGxleGljYWxHbG9iYWxPYmplY3QsIGpzQ29uc3RydWN0b3IsIG5ld1RhcmdldFZhbHVl
LCBiYXNlU3RydWN0dXJlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAKICAgICAgICAgUmVmPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gSFRN
TEVsZW1lbnQ6OmNyZWF0ZShlbGVtZW50SW50ZXJmYWNlLT5uYW1lKCksIGRvY3VtZW50KTsKQEAg
LTg5LDE4ICs4OSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU0hUTUxFbGVtZW50KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSYgZQogCiAgICAgRWxlbWVudCog
ZWxlbWVudFRvVXBncmFkZSA9IGVsZW1lbnRJbnRlcmZhY2UtPmxhc3RFbGVtZW50SW5Db25zdHJ1
Y3Rpb25TdGFjaygpOwogICAgIGlmICghZWxlbWVudFRvVXBncmFkZSkgewotICAgICAgICB0aHJv
d1R5cGVFcnJvcigmZXhlYywgc2NvcGUsICJDYW5ub3QgaW5zdGFudGlhdGUgYSBjdXN0b20gZWxl
bWVudCBpbnNpZGUgaXRzIG93biBjb25zdHJ1Y3RvciBkdXJpbmcgdXBncmFkZXMiX3MpOworICAg
ICAgICB0aHJvd1R5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIkNhbm5vdCBp
bnN0YW50aWF0ZSBhIGN1c3RvbSBlbGVtZW50IGluc2lkZSBpdHMgb3duIGNvbnN0cnVjdG9yIGR1
cmluZyB1cGdyYWRlcyJfcyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSBlbGVtZW50V3JhcHBlclZhbHVlID0gdG9K
UygmZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksICplbGVtZW50VG9VcGdyYWRl
KTsKKyAgICBKU1ZhbHVlIGVsZW1lbnRXcmFwcGVyVmFsdWUgPSB0b0pTKGxleGljYWxHbG9iYWxP
YmplY3QsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCAqZWxlbWVudFRvVXBncmFkZSk7
CiAgICAgQVNTRVJUKGVsZW1lbnRXcmFwcGVyVmFsdWUuaXNPYmplY3QoKSk7CiAKLSAgICBKU1Zh
bHVlIG5ld1Byb3RvdHlwZSA9IG5ld1RhcmdldC0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUpOworICAgIEpTVmFsdWUgbmV3UHJvdG90eXBlID0gbmV3VGFyZ2V0LT5nZXQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIEpTT2Jq
ZWN0KiBlbGVtZW50V3JhcHBlck9iamVjdCA9IGFzT2JqZWN0KGVsZW1lbnRXcmFwcGVyVmFsdWUp
OwotICAgIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoZWxlbWVudFdyYXBwZXJPYmplY3QsICZleGVj
LCBuZXdQcm90b3R5cGUsIHRydWUgLyogc2hvdWxkVGhyb3dJZkNhbnRTZXQgKi8pOworICAgIEpT
T2JqZWN0OjpzZXRQcm90b3R5cGUoZWxlbWVudFdyYXBwZXJPYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIG5ld1Byb3RvdHlwZSwgdHJ1ZSAvKiBzaG91bGRUaHJvd0lmQ2FudFNldCAqLyk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBl
bGVtZW50SW50ZXJmYWNlLT5kaWRVcGdyYWRlTGFzdEVsZW1lbnRJbkNvbnN0cnVjdGlvblN0YWNr
KCk7CkBAIC0xMDgsNyArMTA4LDcgQEAgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNIVE1MRWxl
bWVudChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUmIGUKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGVsZW1lbnRXcmFwcGVyVmFsdWUpOwogfQogCi1KU1Njb3BlKiBK
U0hUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhlY1N0YXRlKiBleGVjLCBKU1Nj
b3BlKiBzY29wZSkgY29uc3QKK0pTU2NvcGUqIEpTSFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRs
ZXJTY29wZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNTY29wZSogc2Nv
cGUpIGNvbnN0CiB7CiAgICAgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSB3cmFwcGVkKCk7CiAKQEAg
LTExNywxNyArMTE3LDE2IEBAIEpTU2NvcGUqIEpTSFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRs
ZXJTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKSBjCiAgICAgLy8gZnVuY3Rp
b24sIHRoZW4gaXQgd291bGQgYmUgY29ycmVjdCBidXQgbm90IG9wdGltYWwgc2luY2UgdGhlIG5h
dGl2ZSBmdW5jdGlvbiB3b3VsZCAqa25vdyoKICAgICAvLyB0aGUgZ2xvYmFsIG9iamVjdC4gQnV0
LCBpdCBtYXkgYmUgdGhhdCBnbG9iYWxPYmplY3QoKSBpcyBtb3JlIGNvcnJlY3QuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDkzMgotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICAKLSAgICBzY29wZSA9IEpTV2l0aFNjb3BlOjpjcmVhdGUodm0s
IGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBhc09iamVjdCh0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBlbGVtZW50LmRvY3VtZW50KCkpKSk7CisgICAgc2NvcGUgPSBKU1dpdGhTY29wZTo6
Y3JlYXRlKHZtLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgYXNPYmplY3QodG9KUyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QoKSwgZWxlbWVudC5kb2N1bWVudCgpKSkpOwog
CiAgICAgLy8gVGhlIGZvcm0gaXMgbmV4dCwgc2VhcmNoZWQgYmVmb3JlIHRoZSBkb2N1bWVudCwg
YnV0IGFmdGVyIHRoZSBlbGVtZW50IGl0c2VsZi4KICAgICBpZiAoSFRNTEZvcm1FbGVtZW50KiBm
b3JtID0gZWxlbWVudC5mb3JtKCkpCi0gICAgICAgIHNjb3BlID0gSlNXaXRoU2NvcGU6OmNyZWF0
ZSh2bSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0KCksICpmb3JtKSkpOworICAgICAgICBzY29wZSA9IEpTV2l0aFNjb3BlOjpjcmVh
dGUodm0sIGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBhc09iamVjdCh0b0pTKGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCgpLCAqZm9ybSkpKTsKIAogICAgIC8vIFRoZSBlbGVt
ZW50IGlzIG9uIHRvcCwgc2VhcmNoZWQgZmlyc3QuCi0gICAgcmV0dXJuIEpTV2l0aFNjb3BlOjpj
cmVhdGUodm0sIGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBhc09iamVjdCh0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBlbGVtZW50KSkpOworICAgIHJldHVybiBKU1dpdGhTY29wZTo6Y3Jl
YXRlKHZtLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgYXNPYmplY3QodG9KUyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QoKSwgZWxlbWVudCkpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAKaW5kZXggMWJhOTI4ZTVkOGM0ZTljZTZjOTYyOGU2MmI0MTNiZjk4OGNkYWFjZC4u
Y2MzNjhjZDY5Yjc1YTUzZTUxNDNiZTBhNDllYTIyYmE3ZGZjNWQwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCkBAIC0zNiwxMSArMzYsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVl
IEpTSGlzdG9yeTo6c3RhdGUoRXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKK0pTVmFsdWUgSlNIaXN0
b3J5OjpzdGF0ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKIHsK
LSAgICByZXR1cm4gY2FjaGVkUHJvcGVydHlWYWx1ZShzdGF0ZSwgKnRoaXMsIHdyYXBwZWQoKS5j
YWNoZWRTdGF0ZSgpLCBbdGhpcywgJnN0YXRlXSB7CisgICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5
VmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXMsIHdyYXBwZWQoKS5jYWNoZWRTdGF0ZSgp
LCBbdGhpcywgJmxleGljYWxHbG9iYWxPYmplY3RdIHsKICAgICAgICAgYXV0byogc2VyaWFsaXpl
ZCA9IHdyYXBwZWQoKS5zdGF0ZSgpOwotICAgICAgICByZXR1cm4gc2VyaWFsaXplZCA/IHNlcmlh
bGl6ZWQtPmRlc2VyaWFsaXplKHN0YXRlLCBnbG9iYWxPYmplY3QoKSkgOiBqc051bGwoKTsKKyAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQgPyBzZXJpYWxpemVkLT5kZXNlcmlhbGl6ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QoKSkgOiBqc051bGwoKTsKICAgICB9KTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCmlu
ZGV4IDk2MTY1ZWNkMzQ3ZWU0OThjYjJlMjgzNDg3MjE0NWU4ZTE2Y2YyNzkuLmFlNTI0Yjc2MTI3
YjdmMmZmYzE5N2ZjNTE5YWVhZDZhMmY0MjA4NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKQEAgLTM2LDE3ICszNiwxNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNDOjpKU1ZhbHVlIEpT
SURCQ3Vyc29yOjprZXkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAorSlNDOjpKU1ZhbHVl
IEpTSURCQ3Vyc29yOjprZXkoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gY2FjaGVkUHJvcGVydHlWYWx1ZShzdGF0ZSwgKnRoaXMs
IHdyYXBwZWQoKS5rZXlXcmFwcGVyKCksIFsmXSB7Ci0gICAgICAgIHJldHVybiB0b0pTKHN0YXRl
LCAqc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpLCB3cmFwcGVkKCkua2V5KCkpOworICAgIHJl
dHVybiBjYWNoZWRQcm9wZXJ0eVZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzLCB3cmFw
cGVkKCkua2V5V3JhcHBlcigpLCBbJl0geworICAgICAgICByZXR1cm4gdG9KUyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCB3cmFwcGVkKCkua2V5KCkpOwogICAgIH0p
OwogfQogCi1KU0M6OkpTVmFsdWUgSlNJREJDdXJzb3I6OnByaW1hcnlLZXkoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlKSBjb25zdAorSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yOjpwcmltYXJ5S2V5KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUoc3RhdGUsICp0aGlzLCB3cmFwcGVkKCkucHJpbWFyeUtl
eVdyYXBwZXIoKSwgWyZdIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsICpzdGF0ZS5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIHdyYXBwZWQoKS5wcmltYXJ5S2V5KCkpOworICAgIHJldHVybiBj
YWNoZWRQcm9wZXJ0eVZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzLCB3cmFwcGVkKCku
cHJpbWFyeUtleVdyYXBwZXIoKSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIHRvSlMobGV4aWNhbEds
b2JhbE9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgd3JhcHBlZCgpLnByaW1hcnlLZXkoKSk7
CiAgICAgfSk7CiB9CiAKQEAgLTU5LDE2ICs1OSwxNiBAQCB2b2lkIEpTSURCQ3Vyc29yOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBjdXJzb3IucHJp
bWFyeUtleVdyYXBwZXIoKS52aXNpdCh2aXNpdG9yKTsKIH0KIAotSlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCitKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJREJD
dXJzb3I+JiYgY3Vyc29yKQogewogICAgIGlmIChpczxJREJDdXJzb3JXaXRoVmFsdWU+KGN1cnNv
cikpCiAgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPElEQkN1cnNvcldpdGhWYWx1ZT4oZ2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKGN1cnNvcikpOwogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPElE
QkN1cnNvcj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGN1cnNvcikpOwogfQogCi1KU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBJREJDdXJzb3ImIGN1cnNvcikKK0pTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJREJD
dXJzb3ImIGN1cnNvcikKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBj
dXJzb3IpOworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgY3Vyc29yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3Bw
CmluZGV4IDIyOGRhYjQ1NDNjZjA1OTZhZmVmYTI0NzIyNTE3MzYzZGNiYzhjZjIuLjdkMTYxNjI5
NGQ3ZTY1ZDE0M2Y3NDgwYTYxN2MyM2M4MTI5ODk5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKQEAg
LTM1LDEwICszNSwxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotSlNDOjpKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZhbHVlOjp2YWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUpIGNvbnN0CitKU0M6OkpTVmFsdWUgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZh
bHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUoc3RhdGUsICp0aGlzLCB3cmFwcGVkKCkudmFs
dWVXcmFwcGVyKCksIFsmXSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZGVzZXJpYWxpemVJREJW
YWx1ZVdpdGhLZXlJbmplY3Rpb24oc3RhdGUsIHdyYXBwZWQoKS52YWx1ZSgpLCB3cmFwcGVkKCku
cHJpbWFyeUtleSgpLCB3cmFwcGVkKCkucHJpbWFyeUtleVBhdGgoKSk7CisgICAgcmV0dXJuIGNh
Y2hlZFByb3BlcnR5VmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXMsIHdyYXBwZWQoKS52
YWx1ZVdyYXBwZXIoKSwgWyZdIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBkZXNlcmlhbGl6ZUlE
QlZhbHVlV2l0aEtleUluamVjdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCB3cmFwcGVkKCkudmFs
dWUoKSwgd3JhcHBlZCgpLnByaW1hcnlLZXkoKSwgd3JhcHBlZCgpLnByaW1hcnlLZXlQYXRoKCkp
OwogICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LnZhbHVlKCkgOiBqc051bGwoKTsKICAg
ICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVx
dWVzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlJlcXVlc3RD
dXN0b20uY3BwCmluZGV4IDExNzFkZTEzYjU0NjlmZWE4OTQ0OWVkMGVlMGMzODMyOWJmMzAyNDAu
LmZjNzRkNTYyOTI0ZWYzMDdmNmFlY2VkMTUzZGNmZTk4NDJlMTk1ZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCUmVxdWVzdEN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtMzgsNDcg
KzM4LDQ3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1K
U0M6OkpTVmFsdWUgSlNJREJSZXF1ZXN0OjpyZXN1bHQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBj
b25zdAorSlNDOjpKU1ZhbHVlIEpTSURCUmVxdWVzdDo6cmVzdWx0KEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhY2hlZFByb3Bl
cnR5VmFsdWUoc3RhdGUsICp0aGlzLCB3cmFwcGVkKCkucmVzdWx0V3JhcHBlcigpLCBbJl0gewor
ICAgIHJldHVybiBjYWNoZWRQcm9wZXJ0eVZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
LCB3cmFwcGVkKCkucmVzdWx0V3JhcHBlcigpLCBbJl0gewogICAgICAgICBhdXRvIHJlc3VsdCA9
IHdyYXBwZWQoKS5yZXN1bHQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkpIHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUudm0oKSk7Ci0gICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LnZt
KCkpOworICAgICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogICAgICAgICB9CiAKICAgICAgICAgSURCUmVxdWVzdDo6UmVzdWx0IHJl
c3VsdFZhbHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihyZXN1bHRWYWx1ZSwgWyZzdGF0ZV0gKFJlZlB0cjxJREJDdXJzb3I+JiBj
dXJzb3IpIHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUudm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8SURC
Q3Vyc29yPj4oc3RhdGUsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLCB0aHJvd1Njb3BlLCBjdXJzb3IuZ2V0KCkpOwotICAgICAgICB9LCBb
JnN0YXRlXSAoUmVmUHRyPElEQkRhdGFiYXNlPiYgZGF0YWJhc2UpIHsKLSAgICAgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8SURCRGF0YWJhc2U+PihzdGF0ZSwgKmpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSksIHRocm93
U2NvcGUsIGRhdGFiYXNlLmdldCgpKTsKLSAgICAgICAgfSwgWyZzdGF0ZV0gKElEQktleURhdGEg
a2V5RGF0YSkgewotICAgICAgICAgICAgcmV0dXJuIHRvSlM8SURMSURCS2V5RGF0YT4oc3RhdGUs
ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LCBrZXlEYXRhKTsKLSAgICAgICAgfSwgWyZzdGF0ZV0gKFZlY3RvcjxJREJLZXlEYXRhPiBrZXlE
YXRhcykgewotICAgICAgICAgICAgcmV0dXJuIHRvSlM8SURMU2VxdWVuY2U8SURMSURCS2V5RGF0
YT4+KHN0YXRlLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2Jh
bE9iamVjdCgpKSwga2V5RGF0YXMpOwotICAgICAgICB9LCBbJnN0YXRlXSAoSURCR2V0UmVzdWx0
IGdldFJlc3VsdCkgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBkZXNlcmlhbGl6ZUlEQlZh
bHVlV2l0aEtleUluamVjdGlvbihzdGF0ZSwgZ2V0UmVzdWx0LnZhbHVlKCksIGdldFJlc3VsdC5r
ZXlEYXRhKCksIGdldFJlc3VsdC5rZXlQYXRoKCkpOworICAgICAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihyZXN1bHRWYWx1ZSwgWyZsZXhpY2FsR2xvYmFsT2JqZWN0XSAoUmVmUHRyPElEQkN1cnNv
cj4mIGN1cnNvcikgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCkpOworICAgICAgICAgICAgcmV0dXJuIHRv
SlM8SURMSW50ZXJmYWNlPElEQkN1cnNvcj4+KGxleGljYWxHbG9iYWxPYmplY3QsICpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRocm93U2NvcGUsIGN1
cnNvci5nZXQoKSk7CisgICAgICAgIH0sIFsmbGV4aWNhbEdsb2JhbE9iamVjdF0gKFJlZlB0cjxJ
REJEYXRhYmFzZT4mIGRhdGFiYXNlKSB7CisgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSk7CisgICAgICAgICAg
ICByZXR1cm4gdG9KUzxJRExJbnRlcmZhY2U8SURCRGF0YWJhc2U+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aHJvd1Njb3BlLCBkYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIH0sIFsmbGV4aWNhbEdsb2JhbE9i
amVjdF0gKElEQktleURhdGEga2V5RGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIHRvSlM8SURM
SURCS2V5RGF0YT4obGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwga2V5RGF0YSk7CisgICAgICAgIH0sIFsmbGV4aWNh
bEdsb2JhbE9iamVjdF0gKFZlY3RvcjxJREJLZXlEYXRhPiBrZXlEYXRhcykgeworICAgICAgICAg
ICAgcmV0dXJuIHRvSlM8SURMU2VxdWVuY2U8SURMSURCS2V5RGF0YT4+KGxleGljYWxHbG9iYWxP
YmplY3QsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCks
IGtleURhdGFzKTsKKyAgICAgICAgfSwgWyZsZXhpY2FsR2xvYmFsT2JqZWN0XSAoSURCR2V0UmVz
dWx0IGdldFJlc3VsdCkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBkZXNlcmlhbGl6ZUlE
QlZhbHVlV2l0aEtleUluamVjdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnZXRSZXN1bHQudmFs
dWUoKSwgZ2V0UmVzdWx0LmtleURhdGEoKSwgZ2V0UmVzdWx0LmtleVBhdGgoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LnZhbHVlKCkgOiBqc051bGwoKTsKLSAgICAgICAg
fSwgWyZzdGF0ZV0gKElEQkdldEFsbFJlc3VsdCBnZXRBbGxSZXN1bHQpIHsKKyAgICAgICAgfSwg
WyZsZXhpY2FsR2xvYmFsT2JqZWN0XSAoSURCR2V0QWxsUmVzdWx0IGdldEFsbFJlc3VsdCkgewog
ICAgICAgICAgICAgYXV0byYga2V5cyA9IGdldEFsbFJlc3VsdC5rZXlzKCk7CiAgICAgICAgICAg
ICBhdXRvJiB2YWx1ZXMgPSBnZXRBbGxSZXN1bHQudmFsdWVzKCk7CiAgICAgICAgICAgICBhdXRv
JiBrZXlQYXRoID0gZ2V0QWxsUmVzdWx0LmtleVBhdGgoKTsKLSAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpKTsKICAg
ICAgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyBpICsrKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlV2l0aEtleUluamVjdGlvbihz
dGF0ZSwgdmFsdWVzW2ldLCBrZXlzW2ldLCBrZXlQYXRoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IGRlc2VyaWFsaXplSURCVmFsdWVXaXRoS2V5SW5qZWN0aW9uKGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlc1tpXSwga2V5c1tpXSwga2V5UGF0aCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAg
ICAgICAgICAgICBsaXN0LmFwcGVuZChyZXN1bHQudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGxpc3QuaGFzT3ZlcmZsb3dlZCgpKSkgewotICAgICAgICAgICAgICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBFeGNlcHRpb24oVW5rbm93bkVycm9y
KSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgRXhjZXB0aW9uKFVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoSlNDOjpjb25zdHJ1Y3RBcnJheSgmc3RhdGUsIG51
bGxwdHIsIHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGlzdCkpOworICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoSlNDOjpjb25zdHJ1Y3RBcnJheSgmbGV4aWNhbEdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8SlNDOjpBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIGxpc3Qp
KTsKICAgICAgICAgfSwgW10gKHVpbnQ2NF90IG51bWJlcikgewogICAgICAgICAgICAgcmV0dXJu
IHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4obnVtYmVyKTsKICAgICAgICAgfSwgW10gKElEQlJl
cXVlc3Q6Ok51bGxSZXN1bHRUeXBlIG90aGVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAKaW5kZXggZmFiNDBjYThhY2NkNmNhNjI1NTUw
ZjBmMzNhZGNjZDUzZGRiNzExNC4uMjVmZTBjMWViYmY5NzIxYjM4Njk5ZjM2ODljYTFlN2E0MWVh
OTRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3Vz
dG9tLmNwcApAQCAtMzcsMTMgKzM3LDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFn
ZURhdGEpCitKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJbWFnZURh
dGE+JiYgaW1hZ2VEYXRhKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byogZGF0YSA9IGltYWdlRGF0
YS0+ZGF0YSgpOwogICAgIGF1dG8qIHdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyPEltYWdlRGF0YT4o
Z2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltYWdlRGF0YSkpOwogICAgIElkZW50aWZpZXIgZGF0YU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGF0YSIpOwotICAgIHdyYXBwZXItPnB1
dERpcmVjdCh2bSwgZGF0YU5hbWUsIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGF0YSksIFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
KTsKKyAgICB3cmFwcGVyLT5wdXREaXJlY3Qodm0sIGRhdGFOYW1lLCB0b0pTKGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgZGF0YSksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVs
ZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKICAgICAvLyBGSVhNRTogQWRvcHQg
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkLCBhbmQgc3dpdGNoIHRvIHJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDI1OTUKICAgICB2bS5oZWFwLmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShkYXRhLT5s
ZW5ndGgoKSk7CkBAIC01MSw5ICs1MSw5IEBAIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8CiAgICAg
cmV0dXJuIHdyYXBwZXI7CiB9CiAKLUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJbWFnZURhdGEmIGltYWdlRGF0YSkKK0pTVmFs
dWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSW1hZ2VEYXRhJiBpbWFnZURhdGEpCiB7Ci0gICAgcmV0dXJu
IHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1hZ2VEYXRhKTsKKyAgICByZXR1cm4gd3JhcChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltYWdlRGF0YSk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAK
aW5kZXggZjE0OWI4NzRiNzMxNmM2YWIzYjQ0ZmE5NTc3YjNkMDU2NTk4Mzk0Yi4uYTUzY2U5OTM0
MTg2NDM0N2EwMjJjOTY4OTkyNGYwNzhmMzU0YTc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTE0NiwyMyArMTQ2LDIz
IEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBleGVjCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBn
bG9iYWxPYmplY3Q7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3Mu
YXBwZW5kKGpzTm9udHJpdmlhbFN0cmluZyh2bSwgbV9ldmVudFBhcmFtZXRlck5hbWUpKTsKLSAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBtX2NvZGUpKTsKKyAgICBhcmdz
LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2NvZGUpKTsK
ICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIC8vIFdlIHdhbnQgYWxs
IGVycm9ycyB0byByZWZlciBiYWNrIHRvIHRoZSBsaW5lIG9uIHdoaWNoIG91ciBhdHRyaWJ1dGUg
d2FzCiAgICAgLy8gZGVjbGFyZWQsIHJlZ2FyZGxlc3Mgb2YgYW55IG5ld2xpbmVzIGluIG91ciBK
YXZhU2NyaXB0IHNvdXJjZSB0ZXh0LgogICAgIGludCBvdmVycmlkZUxpbmVOdW1iZXIgPSBtX3Nv
dXJjZVBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpOwogCi0gICAgSlNPYmplY3QqIGpzRnVu
Y3Rpb24gPSBjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZhbEVuYWJsZWRDaGVjayhleGVjLAot
ICAgICAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGFyZ3MsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIG1fZnVuY3Rpb25OYW1lKSwKKyAgICBKU09iamVjdCoganNGdW5jdGlvbiA9
IGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRW5hYmxlZENoZWNrKAorICAgICAgICBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcmdzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBtX2Z1bmN0
aW9uTmFtZSksCiAgICAgICAgIFNvdXJjZU9yaWdpbiB7IG1fc291cmNlVVJMLCBDYWNoZWRTY3Jp
cHRGZXRjaGVyOjpjcmVhdGUoZG9jdW1lbnQuY2hhcnNldCgpKSB9LAogICAgICAgICBtX3NvdXJj
ZVVSTCwgbV9zb3VyY2VQb3NpdGlvbiwgb3ZlcnJpZGVMaW5lTnVtYmVyKTsKICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRp
b24oZXhlYyk7CisgICAgICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KQEAgLTE3MywxMiArMTczLDEyIEBAIEpTT2JqZWN0KiBKU0xhenlFdmVu
dExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBl
eGVjCiAgICAgICAgIGlmICghd3JhcHBlcigpKSB7CiAgICAgICAgICAgICAvLyBFbnN1cmUgdGhh
dCAnbm9kZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIG1hcmsgdGhlIGV2ZW50IGxpc3Rl
bmVyIHdlJ3JlIGNyZWF0aW5nLgogICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBwYXNzIHRo
ZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQotICAgICAgICAgICAgc2V0
V3JhcHBlcih2bSwgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsICptX29yaWdpbmFs
Tm9kZSkpKTsKKyAgICAgICAgICAgIHNldFdyYXBwZXIodm0sIGFzT2JqZWN0KHRvSlMobGV4aWNh
bEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBBZGQgdGhlIGV2ZW50J3MgaG9tZSBlbGVtZW50IHRvIHRoZSBzY29w
ZQogICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRN
TEVsZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQotICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24t
PnNldFNjb3BlKHZtLCBqc0Nhc3Q8SlNOb2RlKj4od3JhcHBlcigpKS0+cHVzaEV2ZW50SGFuZGxl
clNjb3BlKGV4ZWMsIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2NvcGUoKSkpOworICAgICAgICBsaXN0
ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKHZtLCBqc0Nhc3Q8SlNOb2RlKj4od3JhcHBlcigpKS0+
cHVzaEV2ZW50SGFuZGxlclNjb3BlKGxleGljYWxHbG9iYWxPYmplY3QsIGxpc3RlbmVyQXNGdW5j
dGlvbi0+c2NvcGUoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBqc0Z1bmN0aW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAppbmRleCAwNTRk
NzU0OTRjZmJiYzllZTg4YzM1MTZmYzU1MGFlYjcyMTk1OTQ5Li4zZDE0ZGI0Zjc3NWEyMDdhOTQw
MzljNzIzMjQwNzE5NDUxNTJjOTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0xvY2F0aW9uQ3VzdG9tLmNwcApAQCAtMzUsOSArMzUsOSBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90Q29tbW9uKEpTTG9jYXRpb24mIHRoaXNPYmplY3QsIEV4ZWNTdGF0ZSYgc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3N0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdENvbW1vbihKU0xvY2F0aW9uJiB0aGlzT2JqZWN0LCBKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgVk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8qIHdpbmRvdyA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
LndpbmRvdygpOwpAQCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RDb21tb24oSlNMb2NhdGlvbiYgdGhpc09iamVjdCwgRXhlY1N0YXRlJiBzdGF0ZSwgUAogICAg
IC8vIE91ciBjdXN0b20gY29kZSBpcyBvbmx5IG5lZWRlZCB0byBpbXBsZW1lbnQgdGhlIFdpbmRv
dyBjcm9zcy1kb21haW4gc2NoZW1lLCBzbyBpZiBhY2Nlc3MgaXMKICAgICAvLyBhbGxvd2VkLCBy
ZXR1cm4gZmFsc2Ugc28gdGhlIG5vcm1hbCBsb29rdXAgd2lsbCB0YWtlIHBsYWNlLgogICAgIFN0
cmluZyBtZXNzYWdlOwotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9ET01XaW5kb3coc3RhdGUsIHdpbmRvdywgbWVzc2FnZSkpCisgICAgaWYgKEJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB3
aW5kb3csIG1lc3NhZ2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBodHRwczov
L2h0bWwuc3BlYy53aGF0d2cub3JnLyNjcm9zc29yaWdpbmdldG93bnByb3BlcnR5aGVscGVyLSgt
bywtcC0pCkBAIC03MSw0NCArNzEsNDQgQEAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
Q29tbW9uKEpTTG9jYXRpb24mIHRoaXNPYmplY3QsIEV4ZWNTdGF0ZSYgc3RhdGUsIFAKICAgICBp
ZiAoaGFuZGxlQ29tbW9uQ3Jvc3NPcmlnaW5Qcm9wZXJ0aWVzKCZ0aGlzT2JqZWN0LCB2bSwgcHJv
cGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICB0aHJvd1NlY3Vy
aXR5RXJyb3Ioc3RhdGUsIHNjb3BlLCBtZXNzYWdlKTsKKyAgICB0aHJvd1NlY3VyaXR5RXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIG1lc3NhZ2UpOwogICAgIHNsb3Quc2V0VW5kZWZp
bmVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTTG9jYXRpb246OmdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTTG9jYXRpb246Omdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0g
ICAgYm9vbCByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oKnRoaXNPYmplY3QsICpz
dGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBib29sIHJlc3VsdCA9IGdldE93blByb3Bl
cnR5U2xvdENvbW1vbigqdGhpc09iamVjdCwgKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwg
IXJlc3VsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgIGlm
IChyZXN1bHQpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKTsKIH0KIAotYm9vbCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKLSAgICBib29sIHJlc3VsdCA9IGdldE93
blByb3BlcnR5U2xvdENvbW1vbigqdGhpc09iamVjdCwgKnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
KHZtLCBpbmRleCksIHNsb3QpOworICAgIGJvb2wgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlTbG90
Q29tbW9uKCp0aGlzT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bSh2bSwgaW5kZXgpLCBzbG90KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSB8fCAhcmVzdWx0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3Qs
IHN0YXRlLCBpbmRleCwgc2xvdCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbmRleCwgc2xvdCkpOwogfQogCi1zdGF0aWMgYm9vbCBwdXRDb21tb24oSlNMb2NhdGlv
biYgdGhpc09iamVjdCwgRXhlY1N0YXRlJiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKK3N0YXRpYyBib29sIHB1dENvbW1vbihKU0xvY2F0aW9uJiB0aGlzT2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxP
YmplY3Qudm0oKTsKICAgICAvLyBTaWxlbnRseSBibG9jayBhY2Nlc3MgdG8gdG9TdHJpbmcgYW5k
IHZhbHVlT2YuCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZyB8fCBwcm9wZXJ0eU5hbWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZikKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMjAsMTggKzEyMCwxOCBAQCBzdGF0aWMgYm9vbCBwdXRDb21t
b24oSlNMb2NhdGlvbiYgdGhpc09iamVjdCwgRXhlY1N0YXRlJiBzdGF0ZSwgUHJvcGVydHlOYW1l
IHBybwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBCbG9jayBhY2Nlc3MgYW5kIHRo
cm93IGlmIHRoZXJlIGlzIGEgc2VjdXJpdHkgZXJyb3IuCi0gICAgaWYgKCFCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCB0aGlzT2JqZWN0LndyYXBw
ZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc09iamVjdC53cmFwcGVkKCkud2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEpTTG9jYXRp
b246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFB1dFByb3BlcnR5U2xvdCYpCit2
b2lkIEpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQdXRQcm9wZXJ0eVNsb3QmKQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAg
Vk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKIAogICAgIC8vIEFsd2F5cyBhbGxv
dyBhc3NpZ25pbmcgdG8gdGhlIHdob2xlIGxvY2F0aW9uLgogICAgIC8vIEhvd2V2ZXIsIGFsbGxv
d2luZyBhc3NpZ25pbmcgb2YgcGllY2VzIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgZGlzY2xvc2UgcGFy
dHMgb2YgdGhlIG9yaWdpbmFsIGxvY2F0aW9uLgpAQCAtMTQwLDExMyArMTQwLDExMyBAQCB2b2lk
IEpTTG9jYXRpb246OmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEJsb2NrIGFjY2Vz
cyBhbmQgdGhyb3cgaWYgdGhlcmUgaXMgYSBzZWN1cml0eSBlcnJvci4KLSAgICBCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIHRoaXNPYmplY3QtPndy
YXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9yKTsKKyAgICBCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c09iamVjdC0+d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpOwogfQogCi1i
b29sIEpTTG9jYXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0
UHJvcGVydHlTbG90KQorYm9vbCBKU0xvY2F0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCi0gICAgaWYgKHB1dENv
bW1vbigqdGhpc09iamVjdCwgKnN0YXRlLCBwcm9wZXJ0eU5hbWUpKQorICAgIGlmIChwdXRDb21t
b24oKnRoaXNPYmplY3QsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0
LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKKyAgICByZXR1
cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogfQogCi1ib29sIEpTTG9jYXRpb246OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNMb2NhdGlvbjo6cHV0QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1
bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KGNlbGwpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAotICAg
IGlmIChwdXRDb21tb24oKnRoaXNPYmplY3QsICpzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpKSkKKyAgICBpZiAocHV0Q29tbW9uKCp0aGlzT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwg
dmFsdWUsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2Vs
bCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAK
LWJvb2wgSlNMb2NhdGlvbjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpTTG9jYXRpb246OmRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNMb2NhdGlvbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4oY2VsbCk7CiAgICAgLy8gT25seSBhbGxvdyBkZWxl
dGluZyBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgotICAgIGlmICghQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPndyYXBw
ZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0LT53cmFwcGVkKCkud2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVy
dHkodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAot
Ym9vbCBKU0xvY2F0aW9uOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNMb2NhdGlvbjo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU0xvY2F0aW9uKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihjZWxsKTsKICAgICAvLyBPbmx5IGFsbG93
IGRlbGV0aW5nIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCi0gICAgaWYgKCFCaW5kaW5n
U2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+
d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQorICAgIGlmICghQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9yKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gQmFzZTo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNMb2NhdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewogICAgIEpTTG9jYXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2Nh
dGlvbio+KG9iamVjdCk7Ci0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+d3JhcHBlZCgpLndpbmRvdygpLCBEb05v
dFJlcG9ydFNlY3VyaXR5RXJyb3IpKSB7CisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+
d3JhcHBlZCgpLndpbmRvdygpLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKSB7CiAgICAgICAg
IGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKLSAgICAgICAgICAgIGFkZENy
b3NzT3JpZ2luT3duUHJvcGVydHlOYW1lczxDcm9zc09yaWdpbk9iamVjdDo6TG9jYXRpb24+KCpl
eGVjLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICAgICAgICAgIGFkZENyb3NzT3JpZ2luT3duUHJvcGVy
dHlOYW1lczxDcm9zc09yaWdpbk9iamVjdDo6TG9jYXRpb24+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBCYXNlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwor
ICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNMb2NhdGlvbjo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJv
b2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTTG9jYXRpb246OmRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAgSlNMb2NhdGlvbiogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0xvY2F0aW9uKj4ob2JqZWN0KTsKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6
c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT53cmFwcGVkKCku
d2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcikpCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09i
amVjdC0+d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRl
c2NyaXB0b3IoKSAmJiAocHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
IHx8IHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIHJl
dHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQogCi1KU1ZhbHVl
IEpTTG9jYXRpb246OmdldFByb3RvdHlwZShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMpCitKU1ZhbHVlIEpTTG9jYXRpb246OmdldFByb3RvdHlwZShKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICBKU0xvY2F0aW9uKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwotICAgIGlmICghQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3Qt
PndyYXBwZWQoKS53aW5kb3coKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKKyAgICBpZiAo
IUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkud2luZG93KCksIERvTm90UmVwb3J0U2Vj
dXJpdHlFcnJvcikpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIHJldHVybiBCYXNl
OjpnZXRQcm90b3R5cGUob2JqZWN0LCBleGVjKTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0UHJvdG90
eXBlKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCk7CiB9CiAKLWJvb2wgSlNMb2NhdGlvbjo6
cHJldmVudEV4dGVuc2lvbnMoSlNPYmplY3QqLCBFeGVjU3RhdGUqIGV4ZWMpCitib29sIEpTTG9j
YXRpb246OnByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QpCiB7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
ZXhlYy0+dm0oKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKSk7CiAKLSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
IkNhbm5vdCBwcmV2ZW50IGV4dGVuc2lvbnMgb24gdGhpcyBvYmplY3QiX3MpOworICAgIHRocm93
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHByZXZlbnQgZXh0
ZW5zaW9ucyBvbiB0aGlzIG9iamVjdCJfcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJp
bmcgSlNMb2NhdGlvbjo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYykKK1N0cmluZyBKU0xvY2F0aW9uOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxjb25zdCBKU0xvY2F0aW9uKj4ob2JqZWN0KTsKLSAg
ICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVj
LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkud2luZG93KCksIERvTm90UmVwb3J0U2VjdXJpdHlFcnJv
cikpCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLndpbmRvdygpLCBE
b05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQogICAgICAgICByZXR1cm4gIk9iamVjdCJfczsKICAg
ICByZXR1cm4gIkxvY2F0aW9uIl9zOwogfQogCi1ib29sIEpTTG9jYXRpb25Qcm90b3R5cGU6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNMb2NhdGlv
blByb3RvdHlwZTo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNMb2NhdGlvblByb3RvdHlwZSo+KGNlbGwpOwogICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcgfHwgcHJvcGVydHlOYW1lID09IHZtLnByb3Bl
cnR5TmFtZXMtPnZhbHVlT2YpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gQmFz
ZTo6cHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAg
ICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi1ib29sIEpTTG9jYXRpb25Qcm90b3R5cGU6OmRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBib29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU0xvY2F0aW9uUHJvdG90eXBlOjpkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBp
ZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIChwcm9wZXJ0eU5hbWUgPT0g
dm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcgfHwgcHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5
TmFtZXMtPnZhbHVlT2YpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEJhc2U6
OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
LCB0aHJvd0V4Y2VwdGlvbik7CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJv
d0V4Y2VwdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVkaWFTdHJlYW1UcmFja0N1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lZGlhU3RyZWFtVHJhY2tDdXN0b20uY3BwCmlu
ZGV4IDE1Njg3YmU5MzAyNDU5NzAzOGY4OWRlYWRkN2UxMTlkODU5Mzk1M2YuLjMzZGIzNGRhZDJm
NDQ4ZDE3NTBiMzM4ODg5MDBkYWEwYzJkNjdiYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVkaWFTdHJlYW1UcmFja0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZWRpYVN0cmVhbVRyYWNrQ3VzdG9tLmNwcApAQCAtMzMsMTYg
KzMzLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiBvYmplY3QpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPE1lZGlhU3RyZWFtVHJhY2s+JiYgb2JqZWN0KQogewogICAgIGlmIChpczxDYW52
YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjaz4ob2JqZWN0KSkKICAgICAgICAgcmV0dXJuIGNyZWF0
ZVdyYXBwZXI8Q2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2s+KGdsb2JhbE9iamVjdCwgV1RG
TW92ZShvYmplY3QpKTsKICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxNZWRpYVN0cmVhbVRyYWNr
PihnbG9iYWxPYmplY3QsIFdURk1vdmUob2JqZWN0KSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
TWVkaWFTdHJlYW1UcmFjayYgdHJhY2spCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBNZWRpYVN0cmVhbVRyYWNrJiB0cmFjaykKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCB0cmFjayk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCB0cmFjayk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAppbmRleCBmZjY4ZWYzMzQwODY2
OTZlNTg0ZGQzN2ExMzM4MzRiYjEzMDFiY2JkLi5lYTA4MDEyODM4NTcxNTk4MWI3YTFkODM3Yjgz
OGZiY2MxMDFjNDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlRXZlbnRDdXN0b20uY3BwCkBAIC00MywyOSArNDMsMjkgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1KU0M6OkpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OnBvcnRzKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSkgY29uc3QKK0pTQzo6SlNWYWx1ZSBKU01lc3NhZ2VFdmVudDo6cG9ydHMoSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotICAgIHJldHVy
biBjYWNoZWRQcm9wZXJ0eVZhbHVlKHN0YXRlLCAqdGhpcywgd3JhcHBlZCgpLmNhY2hlZFBvcnRz
KCksIFsmXSB7Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSBwb3J0cyA9IHRvSlM8SURMRnJvemVuQXJy
YXk8SURMSW50ZXJmYWNlPE1lc3NhZ2VQb3J0Pj4+KHN0YXRlLCAqZ2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIHdyYXBwZWQoKS5wb3J0cygpKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSk7CisgICAgcmV0dXJuIGNh
Y2hlZFByb3BlcnR5VmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXMsIHdyYXBwZWQoKS5j
YWNoZWRQb3J0cygpLCBbJl0geworICAgICAgICBKU0M6OkpTVmFsdWUgcG9ydHMgPSB0b0pTPElE
TEZyb3plbkFycmF5PElETEludGVyZmFjZTxNZXNzYWdlUG9ydD4+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIHdyYXBwZWQoKS5wb3J0cygpKTsKICAg
ICAgICAgcmV0dXJuIHBvcnRzOwogICAgIH0pOwogfQogCi1KU0M6OkpTVmFsdWUgSlNNZXNzYWdl
RXZlbnQ6OmRhdGEoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAorSlNDOjpKU1ZhbHVlIEpT
TWVzc2FnZUV2ZW50OjpkYXRhKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUoc3RhdGUsICp0aGlz
LCB3cmFwcGVkKCkuY2FjaGVkRGF0YSgpLCBbdGhpcywgJnN0YXRlXSB7CisgICAgcmV0dXJuIGNh
Y2hlZFByb3BlcnR5VmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXMsIHdyYXBwZWQoKS5j
YWNoZWREYXRhKCksIFt0aGlzLCAmbGV4aWNhbEdsb2JhbE9iamVjdF0gewogICAgICAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkuZGF0YSgpLCBbXSAoSlNDOjpKU1ZhbHVlIGRhdGEp
IHsKICAgICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YSA6IEpTQzo6anNOdWxsKCk7Ci0gICAg
ICAgIH0sIFt0aGlzLCAmc3RhdGVdIChjb25zdCBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYg
ZGF0YSkgeworICAgICAgICB9LCBbdGhpcywgJmxleGljYWxHbG9iYWxPYmplY3RdIChjb25zdCBS
ZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYgZGF0YSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IElzIGl0IGJlc3QgdG8gaGFuZGxlIGVycm9ycyBieSByZXR1cm5pbmcgbnVsbCByYXRoZXIgdGhh
biB0aHJvd2luZyBhbiBleGNlcHRpb24/Ci0gICAgICAgICAgICByZXR1cm4gZGF0YS0+ZGVzZXJp
YWxpemUoc3RhdGUsIGdsb2JhbE9iamVjdCgpLCB3cmFwcGVkKCkucG9ydHMoKSwgU2VyaWFsaXph
dGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcpOwotICAgICAgICB9LCBbJnN0YXRlXSAoY29uc3Qg
U3RyaW5nJiBkYXRhKSB7Ci0gICAgICAgICAgICByZXR1cm4gdG9KUzxJRExET01TdHJpbmc+KHN0
YXRlLCBkYXRhKTsKLSAgICAgICAgfSwgW3RoaXMsICZzdGF0ZV0gKGNvbnN0IFJlZjxCbG9iPiYg
ZGF0YSkgewotICAgICAgICAgICAgcmV0dXJuIHRvSlM8SURMSW50ZXJmYWNlPEJsb2I+PihzdGF0
ZSwgKmdsb2JhbE9iamVjdCgpLCBkYXRhKTsKLSAgICAgICAgfSwgW3RoaXMsICZzdGF0ZV0gKGNv
bnN0IFJlZjxBcnJheUJ1ZmZlcj4mIGRhdGEpIHsKLSAgICAgICAgICAgIHJldHVybiB0b0pTPElE
TEludGVyZmFjZTxBcnJheUJ1ZmZlcj4+KHN0YXRlLCAqZ2xvYmFsT2JqZWN0KCksIGRhdGEpOwor
ICAgICAgICAgICAgcmV0dXJuIGRhdGEtPmRlc2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCgpLCB3cmFwcGVkKCkucG9ydHMoKSwgU2VyaWFsaXphdGlvbkVycm9yTW9k
ZTo6Tm9uVGhyb3dpbmcpOworICAgICAgICB9LCBbJmxleGljYWxHbG9iYWxPYmplY3RdIChjb25z
dCBTdHJpbmcmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiB0b0pTPElETERPTVN0cmluZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgZGF0YSk7CisgICAgICAgIH0sIFt0aGlzLCAmbGV4aWNhbEds
b2JhbE9iamVjdF0gKGNvbnN0IFJlZjxCbG9iPiYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJu
IHRvSlM8SURMSW50ZXJmYWNlPEJsb2I+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2Jq
ZWN0KCksIGRhdGEpOworICAgICAgICB9LCBbdGhpcywgJmxleGljYWxHbG9iYWxPYmplY3RdIChj
b25zdCBSZWY8QXJyYXlCdWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gdG9KUzxJ
RExJbnRlcmZhY2U8QXJyYXlCdWZmZXI+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2Jq
ZWN0KCksIGRhdGEpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWljcm90YXNrQ2FsbGJhY2suaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWljcm90YXNrQ2FsbGJhY2suaAppbmRleCAxYTBiNTNmYzM0M2Q1
YzViMTRmNzM3ZTI1OGIzN2E2NGQ4MjQ0ZTRjLi5lZDBkODcwNzI4ZjBjNmFjYWZmOGJkY2ZmYWIy
MmFmZjllZWQzZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01p
Y3JvdGFza0NhbGxiYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNaWNy
b3Rhc2tDYWxsYmFjay5oCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIEpTTWljcm90YXNrQ2FsbGJh
Y2sgOiBwdWJsaWMgUmVmQ291bnRlZDxKU01pY3JvdGFza0NhbGxiYWNrPiB7CiAgICAgICAgIEpT
Qzo6Vk0mIHZtID0gbV9nbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgICAgIEpTRXhlY1N0YXRlOjpydW5UYXNrKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCksIG1fdGFzayk7CisgICAgICAgIEpTRXhlY1N0YXRlOjpydW5UYXNrKG1fZ2xvYmFsT2Jq
ZWN0LmdldCgpLCBtX3Rhc2spOwogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKaW5k
ZXggNjdjMGZjZGZiMzg0NWFmMTJmZjAyYzFmZDk1ODNkN2M4YzcwOGZmOC4uZDNkZGZhYzhiMzc3
YTRkYWE5OGQ5ZTI4ZjdjMmEzYjI1OGRhMDkxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0xMjksMTAgKzEyOSwxMCBAQCBib29sIEpTTm9kZU93
bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
IGhhbmRsZSwgdgogICAgIHJldHVybiBpc1JlYWNoYWJsZUZyb21ET00oJmpzTm9kZS0+d3JhcHBl
ZCgpLCB2aXNpdG9yLCByZWFzb24pOwogfQogCi1KU1Njb3BlKiBKU05vZGU6OnB1c2hFdmVudEhh
bmRsZXJTY29wZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIG5vZGUpIGNvbnN0CitKU1Njb3Bl
KiBKU05vZGU6OnB1c2hFdmVudEhhbmRsZXJTY29wZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNTY29wZSogbm9kZSkgY29uc3QKIHsKLSAgICBpZiAoaW5oZXJpdHM8SlNI
VE1MRWxlbWVudD4oZXhlYy0+dm0oKSkpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8Y29uc3QgSlNI
VE1MRWxlbWVudCo+KHRoaXMpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbm9kZSk7Cisg
ICAgaWYgKGluaGVyaXRzPEpTSFRNTEVsZW1lbnQ+KGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkp
KQorICAgICAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTSFRNTEVsZW1lbnQqPih0aGlzKS0+cHVz
aEV2ZW50SGFuZGxlclNjb3BlKGxleGljYWxHbG9iYWxPYmplY3QsIG5vZGUpOwogICAgIHJldHVy
biBub2RlOwogfQogCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBKU05vZGU6OnZpc2l0QWRkaXRp
b25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYWRkT3BhcXVl
Um9vdChyb290KHdyYXBwZWQoKSkpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGNyZWF0ZVdyYXBwZXJJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8Tm9kZT4mJiBub2RlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBjcmVhdGVXcmFwcGVySW5saW5lKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8Tm9kZT4mJiBub2RlKQog
ewogICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIG5v
ZGUpKTsKICAgICAKQEAgLTE3NCw3ICsxNzQsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGNyZWF0ZVdyYXBwZXJJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iagog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKICAg
ICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY2FjaGUgdGhlIGRvY3VtZW50IGl0c2VsZiBp
biB0aGUgcGVyLWRvY3VtZW50IGRpY3Rpb25hcnkKLSAgICAgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgZG93bmNhc3Q8RG9jdW1lbnQ+KG5vZGUuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgZG93
bmNhc3Q8RG9jdW1lbnQ+KG5vZGUuZ2V0KCkpKTsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9UWVBFX05PREU6CiAgICAgICAgICAgICB3cmFwcGVyID0gY3JlYXRlV3JhcHBlcjxEb2N1bWVu
dFR5cGU+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShub2RlKSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTE5MSwxNCArMTkxLDE0IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRl
V3JhcHBlcklubGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqCiAgICAgcmV0dXJu
IHdyYXBwZXI7CiB9CiAKLUpTVmFsdWUgY3JlYXRlV3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxOb2RlPiYmIG5vZGUpCitKU1ZhbHVl
IGNyZWF0ZVdyYXBwZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxOb2RlPiYmIG5vZGUpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXJJbmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5vZGUp
KTsKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcklubGluZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIFdURk1vdmUobm9kZSkpOwogfQogICAgIAotSlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPE5vZGU+JiYgbm9kZSkKK0pTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPE5vZGU+JiYgbm9kZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcklubGluZShleGVj
LCBnbG9iYWxPYmplY3QsIFdURk1vdmUobm9kZSkpOworICAgIHJldHVybiBjcmVhdGVXcmFwcGVy
SW5saW5lKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShub2RlKSk7
CiB9CiAKIEpTQzo6SlNPYmplY3QqIGdldE91dE9mTGluZUNhY2hlZFdyYXBwZXIoSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9kZSYgbm9kZSkKQEAgLTIwOSwxMiArMjA5LDEyIEBA
IEpTQzo6SlNPYmplY3QqIGdldE91dE9mTGluZUNhY2hlZFdyYXBwZXIoSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgTm9kZSYKIAogdm9pZCB3aWxsQ3JlYXRlUG9zc2libHlPcnBoYW5l
ZFRyZWVCeVJlbW92YWxTbG93Q2FzZShOb2RlKiByb290KQogewotICAgIEpTQzo6RXhlY1N0YXRl
KiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZShyb290LT5kb2N1bWVudCgpLmZyYW1l
KCkpOwotICAgIGlmICghc2NyaXB0U3RhdGUpCisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCA9IG1haW5Xb3JsZEV4ZWNTdGF0ZShyb290LT5kb2N1bWVudCgpLmZy
YW1lKCkpOworICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwotICAgIHRvSlMoc2NyaXB0U3Rh
dGUsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKSksICpyb290KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCksICpyb290KTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0
b20uaAppbmRleCBmY2ExYjNkOWViNmNlNDE4MWI5NWNjYjVjZTYxOTdkNWI1MDJhYzlkLi41ODk1
MGNiZTIwYmI2MjExMWIxOGI2OWZiMDg2ZWYwMjQ5NmYyZDY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVDdXN0b20uaApAQCAtNDYsMTAgKzQ2LDEwIEBAIHN0cnVjdCBJbmhl
cml0c1RyYWl0czxXZWJDb3JlOjpKU05vZGU+IHsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1X
RUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgY3JlYXRlV3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPE5vZGU+JiYpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpK
U1ZhbHVlIGNyZWF0ZVdyYXBwZXIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUmVmPE5vZGU+JiYpOwogV0VCQ09SRV9FWFBPUlQgSlNDOjpKU09iamVjdCogZ2V0T3V0
T2ZMaW5lQ2FjaGVkV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIE5vZGUmKTsKIAotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBOb2RlJiBub2RlKQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKExJS0VMWShnbG9iYWxPYmpl
Y3QtPndvcmxkSXNOb3JtYWwoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBub2Rl
LndyYXBwZXIoKSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAg
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZVdyYXBw
ZXIoZXhlYywgZ2xvYmFsT2JqZWN0LCBub2RlKTsKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG5vZGUpOwogfQogCiAvLyBJbiB0aGUg
QysrIERPTSwgYSBub2RlIHRyZWUgc3Vydml2ZXMgYXMgbG9uZyBhcyB0aGVyZSBpcyBhIHJlZmVy
ZW5jZSB0byBpdHMKQEAgLTg4LDcgKzg4LDcgQEAgaW5saW5lIHZvaWQqIHJvb3QoTm9kZSYgbm9k
ZSkKICAgICByZXR1cm4gcm9vdCgmbm9kZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNDOjpKU1Zh
bHVlIEpTTm9kZTo6bm9kZVR5cGUoSlNDOjpFeGVjU3RhdGUmKSBjb25zdAorQUxXQVlTX0lOTElO
RSBKU0M6OkpTVmFsdWUgSlNOb2RlOjpub2RlVHlwZShKU0M6OkpTR2xvYmFsT2JqZWN0JikgY29u
c3QKIHsKICAgICByZXR1cm4gSlNDOjpqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90Pih0eXBl
KCkpICYgSlNOb2RlVHlwZU1hc2spOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVMaXN0Q3VzdG9tLmNwcAppbmRleCAxYjc4ZTgxNTA5ZTI5Njk4Yzg5MDU2YjRkNGYz
YzlmMzcyMzU1NDE2Li5lMzBjOTZhZmM5NzM5ZTViNTU1OTRlODBkYzZjNWFjNWE5NTIzZWUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcApA
QCAtNzQsNyArNzQsNyBAQCBKU0M6OkpTVmFsdWUgY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8Tm9kZUxpc3Q+JiYgbm9kZQogICAgIHJldHVybiBjcmVh
dGVXcmFwcGVyPE5vZGVMaXN0PigmZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5vZGVMaXN0KSk7CiB9
CiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxOb2RlTGlzdD4mJiBub2RlTGlzdCkKK0pTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPE5vZGVMaXN0PiYmIG5vZGVMaXN0KQogewogICAgIHJldHVybiBj
cmVhdGVXcmFwcGVyKCpnbG9iYWxPYmplY3QsIFdURk1vdmUobm9kZUxpc3QpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uaAppbmRleCA5MGM5Y2Q1
MzI5NDY2Yjk0ODVjNTZlMDM5MDNhMzk5NjUwMTAyNDU4Li41OTU0ZTVjNzU0MTRjMzEwNDNkOTA5
YjQ0ODg2NTJhODcwNjZiMzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVMaXN0Q3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlTGlzdEN1c3RvbS5oCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
V0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmpl
Y3QmLCBSZWY8Tm9kZUxpc3Q+JiYpOwogCi1BTFdBWVNfSU5MSU5FIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9kZUxp
c3QmIG5vZGVMaXN0KQorQUxXQVlTX0lOTElORSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9kZUxpc3QmIG5v
ZGVMaXN0KQogewogICAgIGlmIChhdXRvIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2Jh
bE9iamVjdC0+d29ybGQoKSwgbm9kZUxpc3QpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5n
ZUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAppbmRleCA5NzE2NTg4YjUwMTc4YmIwMGYxMjc3MDk2
OTFlNTBlMmU3YTUzMjA0Li40MjJjMmM4NDYxMGZmMzFmYjNhNjk4MTYwMmEyMmNlYTBjODYzMzFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RD
aGFuZ2VFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
YXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCkBAIC0zMCwxMyArMzAsMTMgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU0M6OkpTVmFsdWUgSlNQYXltZW50TWV0aG9kQ2hhbmdl
RXZlbnQ6Om1ldGhvZERldGFpbHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAorSlNDOjpK
U1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OjptZXRob2REZXRhaWxzKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNh
Y2hlZFByb3BlcnR5VmFsdWUoc3RhdGUsICp0aGlzLCB3cmFwcGVkKCkuY2FjaGVkTWV0aG9kRGV0
YWlscygpLCBbdGhpcywgJnN0YXRlXSB7CisgICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUo
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXMsIHdyYXBwZWQoKS5jYWNoZWRNZXRob2REZXRhaWxz
KCksIFt0aGlzLCAmbGV4aWNhbEdsb2JhbE9iamVjdF0gewogICAgICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbih3cmFwcGVkKCkubWV0aG9kRGV0YWlscygpLCBbXShKU0M6OkpTVmFsdWUgbWV0aG9k
RGV0YWlscykgewogICAgICAgICAgICAgcmV0dXJuIG1ldGhvZERldGFpbHMgPyBtZXRob2REZXRh
aWxzIDogSlNDOjpqc051bGwoKTsKLSAgICAgICAgfSwgWyZzdGF0ZV0oY29uc3QgUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50OjpNZXRob2REZXRhaWxzRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RhdGUpLmdldCgpOworICAgICAgICB9LCBbJmxleGlj
YWxHbG9iYWxPYmplY3RdKGNvbnN0IFBheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6TWV0aG9kRGV0
YWlsc0Z1bmN0aW9uJiBmdW5jdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGxl
eGljYWxHbG9iYWxPYmplY3QpLmdldCgpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudFJlc3BvbnNlQ3VzdG9t
LmNwcAppbmRleCBjNjI3ZjM5YjAyYmQ1MDFkZTFkZGI3NTZmODMzYjg2ZjU3ZjM3ODQ3Li5iZGE4
NmZjYjFjMDY5Zjg2ZTM2MTcxM2U2OGNlODY3N2JmYThkNjBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwCkBAIC0z
MCwxMCArMzAsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU0M6OkpTVmFsdWUgSlNQ
YXltZW50UmVzcG9uc2U6OmRldGFpbHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAorSlND
OjpKU1ZhbHVlIEpTUGF5bWVudFJlc3BvbnNlOjpkZXRhaWxzKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5
VmFsdWUoc3RhdGUsICp0aGlzLCB3cmFwcGVkKCkuY2FjaGVkRGV0YWlscygpLCBbdGhpcywgJnN0
YXRlXSB7Ci0gICAgICAgIHJldHVybiB3cmFwcGVkKCkuZGV0YWlsc0Z1bmN0aW9uKCkoc3RhdGUp
LmdldCgpOworICAgIHJldHVybiBjYWNoZWRQcm9wZXJ0eVZhbHVlKGxleGljYWxHbG9iYWxPYmpl
Y3QsICp0aGlzLCB3cmFwcGVkKCkuY2FjaGVkRGV0YWlscygpLCBbdGhpcywgJmxleGljYWxHbG9i
YWxPYmplY3RdIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQoKS5kZXRhaWxzRnVuY3Rpb24oKShs
ZXhpY2FsR2xvYmFsT2JqZWN0KS5nZXQoKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZUVudHJ5Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHAKaW5k
ZXggZGEyN2JlZmFkMWM3OTlhNTMyNDk0NWVmMzJmNzAyMDMzZmExYzIwYi4uMzE3OGExZmQwNjJh
YzRjOWNmM2VkNzA2ZWJiNjI3ODZjNGI3OGI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQZXJmb3JtYW5jZUVudHJ5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BlcmZvcm1hbmNlRW50cnlDdXN0b20uY3BwCkBAIC00NCw3ICs0
NCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUmVmPFBlcmZvcm1hbmNlRW50cnk+JiYgZW50cnkpCitKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8UGVyZm9ybWFuY2VFbnRyeT4mJiBlbnRyeSkKIHsKICAgICBpZiAoaXM8UGVyZm9ybWFu
Y2VSZXNvdXJjZVRpbWluZz4oZW50cnkpKQogICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxQ
ZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPihnbG9iYWxPYmplY3QsIFdURk1vdmUoZW50cnkpKTsK
QEAgLTU4LDkgKzU4LDkgQEAgSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxQZXJmb3IKICAgICByZXR1cm4gY3Jl
YXRlV3JhcHBlcjxQZXJmb3JtYW5jZUVudHJ5PihnbG9iYWxPYmplY3QsIFdURk1vdmUoZW50cnkp
KTsKIH0KIAotSlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUGVyZm9ybWFuY2VFbnRyeSYgZW50cnkpCitKU1ZhbHVlIHRv
SlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUGVyZm9ybWFuY2VFbnRyeSYgZW50cnkpCiB7Ci0gICAgcmV0
dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgZW50cnkpOworICAgIHJldHVybiB3cmFwKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgZW50cnkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bs
dWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQ
bHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAppbmRleCA0Mjk1ODllODhkMDcyMWQwZmUyOWU2NzI4
MTU3ZTQ1ZWQ0YzM3MmRlLi5kZGNmMjg1YTZlNThiNzMyNTIxNmIzZDk3MjkwMTY5NGJjYzU5MzJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRG
dW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxl
bWVudEZ1bmN0aW9ucy5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgc3RhdGljIEpTT2JqZWN0KiBwbHVn
aW5TY3JpcHRPYmplY3RGcm9tUGx1Z2luVmlld0Jhc2UoSlNIVE1MRWxlbWVudCoganNIVE1MRWxl
bWUKICAgICByZXR1cm4gcGx1Z2luU2NyaXB0T2JqZWN0RnJvbVBsdWdpblZpZXdCYXNlKHBsdWdp
bkVsZW1lbnQsIGpzSFRNTEVsZW1lbnQtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAotSlNPYmplY3Qq
IHBsdWdpblNjcmlwdE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTSFRNTEVsZW1lbnQqIGpzSFRN
TEVsZW1lbnQpCitKU09iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0hUTUxFbGVtZW50KiBqc0hUTUxFbGVtZW50KQogewogICAg
IEhUTUxFbGVtZW50JiBlbGVtZW50ID0ganNIVE1MRWxlbWVudC0+d3JhcHBlZCgpOwogICAgIGlm
ICghaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KGVsZW1lbnQpKQpAQCAtOTEsNjAgKzkxLDYwIEBAIEpT
T2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0hUTUxFbGVtZW50
KiBqc0hUTUxFbGVtZW50KQogICAgIGlmICghaW5zdGFuY2UgfHwgIWluc3RhbmNlLT5yb290T2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGluc3RhbmNlLT5j
cmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBpbnN0YW5jZS0+Y3JlYXRlUnVu
dGltZU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KICAgICAKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBwbHVnaW5FbGVtZW50UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgcGx1Z2luRWxlbWVudFByb3BlcnR5R2V0dGVyKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmplY3QgPSBqc0R5
bmFtaWNDYXN0PEpTSFRNTEVsZW1lbnQqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmICghdGhpc09iamVjdCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwotICAgIEpTT2JqZWN0KiBzY3JpcHRPYmplY3QgPSBwbHVnaW5TY3JpcHRP
YmplY3QoZXhlYywgdGhpc09iamVjdCk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICBKU09iamVjdCogc2NyaXB0T2JqZWN0
ID0gcGx1Z2luU2NyaXB0T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwog
ICAgIGlmICghc2NyaXB0T2JqZWN0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2NyaXB0T2Jq
ZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShzY3JpcHRPYmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsK
IH0KIAotYm9vbCBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KEpTSFRNTEVs
ZW1lbnQqIGVsZW1lbnQsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJv
cGVydHlTbG90KEpTSFRNTEVsZW1lbnQqIGVsZW1lbnQsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgaWYgKCFlbGVtZW50LT5nbG9iYWxPYmplY3QoKS0+d29ybGQoKS5pc05vcm1h
bCgpKSB7Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSBwcm90byA9IGVsZW1lbnQtPmdldFByb3RvdHlw
ZURpcmVjdChleGVjLT52bSgpKTsKLSAgICAgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkgJiYgSlND
Ojpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KHByb3RvKSktPmhhc1Byb3BlcnR5KGV4
ZWMsIHByb3BlcnR5TmFtZSkpCisgICAgICAgIEpTQzo6SlNWYWx1ZSBwcm90byA9IGVsZW1lbnQt
PmdldFByb3RvdHlwZURpcmVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAg
aWYgKHByb3RvLmlzT2JqZWN0KCkgJiYgSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2Jq
ZWN0KHByb3RvKSktPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgSlNPYmplY3QqIHNj
cmlwdE9iamVjdCA9IHBsdWdpblNjcmlwdE9iamVjdChleGVjLCBlbGVtZW50KTsKKyAgICBKU09i
amVjdCogc2NyaXB0T2JqZWN0ID0gcGx1Z2luU2NyaXB0T2JqZWN0KGxleGljYWxHbG9iYWxPYmpl
Y3QsIGVsZW1lbnQpOwogICAgIGlmICghc2NyaXB0T2JqZWN0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoIXNjcmlwdE9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lKSkKKyAgICBpZiAoIXNjcmlwdE9iamVjdC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc2xvdC5z
ZXRDdXN0b20oZWxlbWVudCwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtLCBwbHVnaW5FbGVtZW50UHJvcGVydHlHZXR0
ZXIpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHBsdWdpbkVsZW1lbnRDdXN0b21QdXQo
SlNIVE1MRWxlbWVudCogZWxlbWVudCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIGJvb2wmIHB1
dFJlc3VsdCkKK2Jvb2wgcGx1Z2luRWxlbWVudEN1c3RvbVB1dChKU0hUTUxFbGVtZW50KiBlbGVt
ZW50LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90LCBib29sJiBw
dXRSZXN1bHQpCiB7Ci0gICAgSlNPYmplY3QqIHNjcmlwdE9iamVjdCA9IHBsdWdpblNjcmlwdE9i
amVjdChleGVjLCBlbGVtZW50KTsKKyAgICBKU09iamVjdCogc2NyaXB0T2JqZWN0ID0gcGx1Z2lu
U2NyaXB0T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGVsZW1lbnQpOwogICAgIGlmICghc2Ny
aXB0T2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFzY3JpcHRPYmplY3Qt
Pmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCisgICAgaWYgKCFzY3JpcHRPYmplY3Qt
Pmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBwdXRSZXN1bHQgPSBzY3JpcHRPYmplY3QtPm1ldGhvZFRhYmxl
KGV4ZWMtPnZtKCkpLT5wdXQoc2NyaXB0T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKKyAgICBwdXRSZXN1bHQgPSBzY3JpcHRPYmplY3QtPm1ldGhvZFRhYmxlKGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCkpLT5wdXQoc2NyaXB0T2JqZWN0LCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFBsdWdpbihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxQbHVnaW4oSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIEpTSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSBqc0Nhc3Q8SlNIVE1MRWxlbWVudCo+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7
CiAKICAgICAvLyBHZXQgdGhlIHBsdWctaW4gc2NyaXB0IG9iamVjdC4KLSAgICBKU09iamVjdCog
c2NyaXB0T2JqZWN0ID0gcGx1Z2luU2NyaXB0T2JqZWN0KGNhbGxGcmFtZSwgZWxlbWVudCk7Cisg
ICAgSlNPYmplY3QqIHNjcmlwdE9iamVjdCA9IHBsdWdpblNjcmlwdE9iamVjdChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBlbGVtZW50KTsKICAgICBBU1NFUlQoc2NyaXB0T2JqZWN0KTsKIAogICAgIHNp
emVfdCBhcmd1bWVudENvdW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7CkBAIC0xNTQs
MTEgKzE1NCwxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsUGx1
Z2luKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbAogICAgIEFTU0VSVCghYXJndW1l
bnRMaXN0Lmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGdsb2JhbE9iamVjdC0+dm0oKSwgc2NyaXB0
T2JqZWN0LCBjYWxsRGF0YSk7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBzY3JpcHRPYmplY3QsIGNhbGxEYXRhKTsKICAgICBB
U1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Okhvc3QpOwogCiAgICAgLy8gQ2FsbCB0aGUgb2Jq
ZWN0LgotICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChjYWxsRnJhbWUsIHNjcmlwdE9iamVjdCwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpLCBhcmd1bWVudExpc3Qp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY3JpcHRP
YmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSwgYXJndW1l
bnRMaXN0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9u
cy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25z
LmgKaW5kZXggMTI3ZjE2YTY0NjQ4Yjc3OTc3YjdkNmMxYzNhZWE0MWExMTQxZmEwNC4uOGQ1YjI4
ZGMzMTVjNGRhOTBiOTY0ZDQzMmE0MTVjYmFiNDJiNjFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgKQEAgLTM1LDEw
ICszNSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gSmF2YVNjcmlwdCBhY2Nlc3Mg
dG8gcGx1Zy1pbi1leHBvcnRlZCBwcm9wZXJ0aWVzIGZvciBKU0hUTUxBcHBsZXRFbGVtZW50LCBK
U0hUTUxFbWJlZEVsZW1lbnQgYW5kIEpTSFRNTE9iamVjdEVsZW1lbnQuCiAKICAgICBKU0M6OkJp
bmRpbmdzOjpJbnN0YW5jZSogcGx1Z2luSW5zdGFuY2UoSFRNTEVsZW1lbnQmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBKU0M6OkpTT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QoSlNDOjpFeGVjU3Rh
dGUqLCBKU0hUTUxFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgSlNDOjpKU09iamVjdCog
cGx1Z2luU2NyaXB0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0hUTUxFbGVtZW50Kik7
CiAKLSAgICBib29sIHBsdWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoSlNIVE1M
RWxlbWVudCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7Ci0gICAgYm9vbCBwbHVnaW5FbGVtZW50Q3VzdG9tUHV0KEpTSFRNTEVsZW1lbnQq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHV0UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KTsKKyAgICBib29sIHBsdWdpbkVsZW1l
bnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QoSlNIVE1MRWxlbWVudCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29s
IHBsdWdpbkVsZW1lbnRDdXN0b21QdXQoSlNIVE1MRWxlbWVudCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xv
dCYsIGJvb2wmIHB1dFJlc3VsdCk7CiAgICAgSlNDOjpDYWxsVHlwZSBwbHVnaW5FbGVtZW50Q3Vz
dG9tR2V0Q2FsbERhdGEoSlNIVE1MRWxlbWVudCosIEpTQzo6Q2FsbERhdGEmKTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKaW5kZXggZDMxYmRjNzc5YjkxN2VjNWU1ODIxZjZmODlm
NDBiYmZlMDJhZGE4OC4uOGUwNjQ1MTE5YmY3ZTAwYTA0MjAwYzRmZGFhZWU2ZjliZWY4Y2RlMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRD
dXN0b20uY3BwCkBAIC0zOSwyOSArMzksMjkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLUpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShFeGVjU3Rh
dGUmIHN0YXRlKSBjb25zdAorSlNWYWx1ZSBKU1BvcFN0YXRlRXZlbnQ6OnN0YXRlKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIGlmIChtX3N0YXRlKSB7
CiAgICAgICAgIC8vIFdlIGNhbm5vdCB1c2UgYSBjYWNoZWQgb2JqZWN0IGlmIHdlIGFyZSBpbiBh
IGRpZmZlcmVudCB3b3JsZCB0aGFuIHRoZSBvbmUgaXQgd2FzIGNyZWF0ZWQgaW4uCi0gICAgICAg
IGlmIChpc1dvcmxkQ29tcGF0aWJsZShzdGF0ZSwgbV9zdGF0ZS5nZXQoKSkpCisgICAgICAgIGlm
IChpc1dvcmxkQ29tcGF0aWJsZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3N0YXRlLmdldCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlLmdldCgpOwogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKLSAgICAvLyBTYXZlIHRoZSBzdGF0ZSB2YWx1ZSB0byB0aGUgbV9z
dGF0ZSBtZW1iZXIgb2YgYSBKU1BvcFN0YXRlRXZlbnQsIGFuZCByZXR1cm4gaXQsIGZvciBjb252
ZW5pZW5jZS4KLSAgICBhdXRvIGNhY2hlU3RhdGUgPSBbJnN0YXRlLCB0aGlzXSAoSlNDOjpKU1Zh
bHVlIGV2ZW50U3RhdGUpIHsKLSAgICAgICAgbV9zdGF0ZS5zZXQoc3RhdGUudm0oKSwgdGhpcywg
ZXZlbnRTdGF0ZSk7CisgICAgLy8gU2F2ZSB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdCB2YWx1ZSB0
byB0aGUgbV9zdGF0ZSBtZW1iZXIgb2YgYSBKU1BvcFN0YXRlRXZlbnQsIGFuZCByZXR1cm4gaXQs
IGZvciBjb252ZW5pZW5jZS4KKyAgICBhdXRvIGNhY2hlU3RhdGUgPSBbJmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNdIChKU0M6OkpTVmFsdWUgZXZlbnRTdGF0ZSkgeworICAgICAgICBtX3N0YXRl
LnNldChsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIHRoaXMsIGV2ZW50U3RhdGUpOwogICAgICAg
ICByZXR1cm4gZXZlbnRTdGF0ZTsKICAgICB9OwogCiAgICAgUG9wU3RhdGVFdmVudCYgZXZlbnQg
PSB3cmFwcGVkKCk7CiAKICAgICBpZiAoSlNDOjpKU1ZhbHVlIGV2ZW50U3RhdGUgPSBldmVudC5z
dGF0ZSgpKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIGEgUG9wU3RhdGVFdmVu
dCBkb2VzIG5vdCBsZWFrIG9iamVjdHMgaW4gaXRzIHN0YXRlIHByb3BlcnR5IGFjcm9zcyBpc29s
YXRlZCBET00gd29ybGRzLgorICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBhIFBvcFN0
YXRlRXZlbnQgZG9lcyBub3QgbGVhayBvYmplY3RzIGluIGl0cyBsZXhpY2FsR2xvYmFsT2JqZWN0
IHByb3BlcnR5IGFjcm9zcyBpc29sYXRlZCBET00gd29ybGRzLgogICAgICAgICAvLyBJZGVhbGx5
LCB3ZSB3b3VsZCBjaGVjayB0aGF0IHRoZSB3b3JsZHMgaGF2ZSBkaWZmZXJlbnQgcHJpdmlsZWdl
cyBidXQgdGhhdCdzIG5vdCBwb3NzaWJsZSB5ZXQuCi0gICAgICAgIGlmICghaXNXb3JsZENvbXBh
dGlibGUoc3RhdGUsIGV2ZW50U3RhdGUpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBzZXJpYWxp
emVkVmFsdWUgPSBldmVudC50cnlTZXJpYWxpemVTdGF0ZShzdGF0ZSkpCi0gICAgICAgICAgICAg
ICAgZXZlbnRTdGF0ZSA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsIGdsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgaWYgKCFpc1dvcmxkQ29tcGF0aWJsZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCBldmVudFN0YXRlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gc2VyaWFsaXplZFZh
bHVlID0gZXZlbnQudHJ5U2VyaWFsaXplU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCkpCisgICAg
ICAgICAgICAgICAgZXZlbnRTdGF0ZSA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUobGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0KCkpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGV2ZW50U3RhdGUgPSBqc051bGwoKTsKICAgICAgICAgfQpAQCAtNzIsMjAg
KzcyLDIwIEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShFeGVjU3RhdGUmIHN0YXRl
KSBjb25zdAogICAgIGlmICghaGlzdG9yeSB8fCAhZXZlbnQuc2VyaWFsaXplZFN0YXRlKCkpCiAg
ICAgICAgIHJldHVybiBjYWNoZVN0YXRlKGpzTnVsbCgpKTsKIAotICAgIC8vIFRoZXJlJ3Mgbm8g
Y2FjaGVkIHZhbHVlIGZyb20gYSBwcmV2aW91cyBpbnZvY2F0aW9uLCBub3IgYSBzdGF0ZSB2YWx1
ZSB3YXMgcHJvdmlkZWQgYnkgdGhlCi0gICAgLy8gZXZlbnQsIGJ1dCB0aGVyZSBpcyBhIGhpc3Rv
cnkgb2JqZWN0LCBzbyBmaXJzdCB3ZSBuZWVkIHRvIHNlZSBpZiB0aGUgc3RhdGUgb2JqZWN0IGhh
cyBiZWVuCisgICAgLy8gVGhlcmUncyBubyBjYWNoZWQgdmFsdWUgZnJvbSBhIHByZXZpb3VzIGlu
dm9jYXRpb24sIG5vciBhIGxleGljYWxHbG9iYWxPYmplY3QgdmFsdWUgd2FzIHByb3ZpZGVkIGJ5
IHRoZQorICAgIC8vIGV2ZW50LCBidXQgdGhlcmUgaXMgYSBoaXN0b3J5IG9iamVjdCwgc28gZmly
c3Qgd2UgbmVlZCB0byBzZWUgaWYgdGhlIGxleGljYWxHbG9iYWxPYmplY3Qgb2JqZWN0IGhhcyBi
ZWVuCiAgICAgLy8gZGVzZXJpYWxpemVkIHRocm91Z2ggdGhlIGhpc3Rvcnkgb2JqZWN0IGFscmVh
ZHkuCi0gICAgLy8gVGhlIGN1cnJlbnQgaGlzdG9yeSBzdGF0ZSBvYmplY3QgbWlnaHQndmUgY2hh
bmdlZCBpbiB0aGUgbWVhbnRpbWUsIHNvIHdlIG5lZWQgdG8gdGFrZSBjYXJlCi0gICAgLy8gb2Yg
dXNpbmcgdGhlIGNvcnJlY3Qgb25lLCBhbmQgYWx3YXlzIHNoYXJlIHRoZSBzYW1lIGRlc2VyaWFs
aXphdGlvbiB3aXRoIGhpc3Rvcnkuc3RhdGUuCisgICAgLy8gVGhlIGN1cnJlbnQgaGlzdG9yeSBs
ZXhpY2FsR2xvYmFsT2JqZWN0IG9iamVjdCBtaWdodCd2ZSBjaGFuZ2VkIGluIHRoZSBtZWFudGlt
ZSwgc28gd2UgbmVlZCB0byB0YWtlIGNhcmUKKyAgICAvLyBvZiB1c2luZyB0aGUgY29ycmVjdCBv
bmUsIGFuZCBhbHdheXMgc2hhcmUgdGhlIHNhbWUgZGVzZXJpYWxpemF0aW9uIHdpdGggaGlzdG9y
eS5sZXhpY2FsR2xvYmFsT2JqZWN0LgogCiAgICAgYm9vbCBpc1NhbWVTdGF0ZSA9IGhpc3Rvcnkt
PmlzU2FtZUFzQ3VycmVudFN0YXRlKGV2ZW50LnNlcmlhbGl6ZWRTdGF0ZSgpKTsKICAgICBKU1Zh
bHVlIHJlc3VsdDsKIAogICAgIGlmIChpc1NhbWVTdGF0ZSkgewotICAgICAgICBKU0hpc3Rvcnkq
IGpzSGlzdG9yeSA9IGpzQ2FzdDxKU0hpc3RvcnkqPih0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCksICpoaXN0b3J5KS5hc0NlbGwoKSk7Ci0gICAgICAgIHJlc3VsdCA9IGpzSGlzdG9yeS0+c3Rh
dGUoc3RhdGUpOworICAgICAgICBKU0hpc3RvcnkqIGpzSGlzdG9yeSA9IGpzQ2FzdDxKU0hpc3Rv
cnkqPih0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QoKSwgKmhpc3Rvcnkp
LmFzQ2VsbCgpKTsKKyAgICAgICAgcmVzdWx0ID0ganNIaXN0b3J5LT5zdGF0ZShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZXZlbnQuc2VyaWFsaXpl
ZFN0YXRlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CisgICAgICAgIHJl
c3VsdCA9IGV2ZW50LnNlcmlhbGl6ZWRTdGF0ZSgpLT5kZXNlcmlhbGl6ZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QoKSk7CiAKICAgICByZXR1cm4gY2FjaGVTdGF0ZShyZXN1bHQp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0
cmVhbVNvdXJjZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRh
YmxlU3RyZWFtU291cmNlQ3VzdG9tLmNwcAppbmRleCBiNjUwMjZlZjk2YTg3YTAwOThkYThkODdi
OGJiMGYzOTIwMGQzODE2Li4wZGFmOTY1NDI2MTVkYTEyYzI2ZDY1NGM5MGE3YmY5YWQ4YjgyOTJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFt
U291cmNlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRh
YmxlU3RyZWFtU291cmNlQ3VzdG9tLmNwcApAQCAtMzYsMTMgKzM2LDEzIEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlIEpTUmVhZGFibGVTdHJl
YW1Tb3VyY2U6OnN0YXJ0KEV4ZWNTdGF0ZSYgc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYg
cHJvbWlzZSkKK0pTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbVNvdXJjZTo6c3RhcnQoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgCiAgICAgLy8gRklYTUU6
IFdoeSBpcyBpdCBvayB0byBBU1NFUlQgdGhlIGFyZ3VtZW50IGNvdW50IGhlcmU/Ci0gICAgQVNT
RVJUKHN0YXRlLmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRD
b250cm9sbGVyKiBjb250cm9sbGVyID0ganNEeW5hbWljQ2FzdDxKU1JlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIqPih2bSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIEFT
U0VSVChjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBKU1JlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBqc0R5bmFtaWNDYXN0PEpTUmVhZGFibGVTdHJl
YW1EZWZhdWx0Q29udHJvbGxlcio+KHZtLCBjYWxsRnJhbWUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIEFTU0VSVChjb250cm9sbGVyKTsKIAogICAgIG1fY29udHJvbGxlci5zZXQodm0sIHRo
aXMsIGNvbnRyb2xsZXIpOwpAQCAtNTIsMTMgKzUyLDEzIEBAIEpTVmFsdWUgSlNSZWFkYWJsZVN0
cmVhbVNvdXJjZTo6c3RhcnQoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNSZWFkYWJsZVN0
cmVhbVNvdXJjZTo6cHVsbChFeGVjU3RhdGUmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21p
c2UpCitKU1ZhbHVlIEpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnB1bGwoSlNHbG9iYWxPYmplY3Qm
LCBDYWxsRnJhbWUmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7CiAgICAgd3Jh
cHBlZCgpLnB1bGwoV1RGTW92ZShwcm9taXNlKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUgSlNSZWFkYWJsZVN0cmVhbVNvdXJjZTo6Y29udHJvbGxlcihFeGVjU3Rh
dGUmKSBjb25zdAorSlNWYWx1ZSBKU1JlYWRhYmxlU3RyZWFtU291cmNlOjpjb250cm9sbGVyKEpT
R2xvYmFsT2JqZWN0JikgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCAwZGJiMDQyZTEwNzQzNjc2N2Zj
NjUwYWY4Y2Q3ZWNhYWY0MmIyNDhlLi5lMmVlZGZkNWIwYzVhYTcxODcwZGE3NjU0Mzk3ZTM1Yjk5
YTgyY2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURP
TVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1v
dGVET01XaW5kb3dDdXN0b20uY3BwCkBAIC0zMywxOCArMzMsMTggQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWJvb2wgSlNSZW1vdGVET01XaW5kb3c6Omdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTUmVtb3Rl
RE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBpZiAoT3B0aW9uYWw8dW5zaWduZWQ+IGluZGV4ID0g
cGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQotICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleC52YWx1ZSgpLCBzbG90KTsKKyAgICAgICAg
cmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbmRleC52YWx1ZSgpLCBzbG90KTsKIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNSZW1vdGVET01XaW5kb3cqPihvYmplY3QpOwotICAgIHJldHVybiBqc0RPTVdpbmRvd0dl
dE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nlc3M8RE9NV2luZG93VHlwZTo6UmVtb3RlPih0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksICpzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90LCBTdHJpbmcoKSk7CisgICAgcmV0dXJuIGpzRE9NV2luZG93R2V0T3duUHJvcGVydHlTbG90
UmVzdHJpY3RlZEFjY2VzczxET01XaW5kb3dUeXBlOjpSZW1vdGU+KHRoaXNPYmplY3QsIHRoaXNP
YmplY3QtPndyYXBwZWQoKSwgKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xv
dCwgU3RyaW5nKCkpOwogfQogCi1ib29sIEpTUmVtb3RlRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTUmVtb3RlRE9NV2luZG93OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1JlbW90ZURPTVdp
bmRvdyo+KG9iamVjdCk7CiAKICAgICAvLyBJbmRleGVkIGdldHRlcnMgdGFrZSBwcmVjZW5kZW5j
ZSBvdmVyIHJlZ3VsYXIgcHJvcGVydGllcywgc28gY2FjaGluZyB3b3VsZCBiZSBpbnZhbGlkLgpA
QCAtNTIsMTIgKzUyLDEyIEBAIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzCiAKICAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIGluZGV4ZWQgcHJvcGVydGllcy4KIAotICAgIHJldHVybiBqc0RP
TVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nlc3M8RE9NV2luZG93VHlwZTo6
UmVtb3RlPih0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksICpzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBzbG90LCBTdHJpbmcoKSk7CisgICAgcmV0dXJuIGpzRE9N
V2luZG93R2V0T3duUHJvcGVydHlTbG90UmVzdHJpY3RlZEFjY2VzczxET01XaW5kb3dUeXBlOjpS
ZW1vdGU+KHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgKmxleGljYWxHbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgc2xvdCwgU3RyaW5nKCkpOwogfQog
Ci1ib29sIEpTUmVtb3RlRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCitib29sIEpTUmVtb3RlRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1JlbW90ZURPTVdpbmRvdyo+KGNlbGwpOwpAQCAtNjksNjcg
KzY5LDY3IEBAIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0CiAgICAgLy8gV2Ugb25seSBhbGxvdyBz
ZXR0aW5nICJsb2NhdGlvbiIgYXR0cmlidXRlIGNyb3NzLW9yaWdpbi4KICAgICBpZiAocHJvcGVy
dHlOYW1lID09IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1
aWx0aW5OYW1lcygpLmxvY2F0aW9uUHVibGljTmFtZSgpKSB7CiAgICAgICAgIGJvb2wgcHV0UmVz
dWx0ID0gZmFsc2U7Ci0gICAgICAgIGlmIChsb29rdXBQdXQoc3RhdGUsIHByb3BlcnR5TmFtZSwg
dGhpc09iamVjdCwgdmFsdWUsICpzX2luZm8uc3RhdGljUHJvcEhhc2hUYWJsZSwgc2xvdCwgcHV0
UmVzdWx0KSkKKyAgICAgICAgaWYgKGxvb2t1cFB1dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHRoaXNPYmplY3QsIHZhbHVlLCAqc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUs
IHNsb3QsIHB1dFJlc3VsdCkpCiAgICAgICAgICAgICByZXR1cm4gcHV0UmVzdWx0OwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHRocm93U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNj
b3BlLCBlcnJvck1lc3NhZ2UpOworICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIEpTUmVtb3RlRE9NV2luZG93OjpwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkLCBKU1ZhbHVlLCBib29sKQorYm9vbCBKU1JlbW90ZURPTVdpbmRvdzo6cHV0QnlJbmRl
eChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sKQogewog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU1JlbW90ZURPTVdpbmRvdzo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lKQorYm9vbCBKU1Jl
bW90ZURPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIHRocm93U2VjdXJpdHlFcnJv
cigqc3RhdGUsIHNjb3BlLCBTdHJpbmcoKSk7CisgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgU3RyaW5nKCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBKU1JlbW90ZURPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCos
IEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkKQorYm9vbCBKU1JlbW90ZURPTVdpbmRvdzo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIHRocm93U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3Bl
LCBTdHJpbmcoKSk7CisgICAgdGhyb3dTZWN1cml0eUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgU3RyaW5nKCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBKU1JlbW90
ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU1JlbW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgLy8gRklYTUU6IEFk
ZCBzY29wZWQgY2hpbGRyZW4gaW5kZXhlcy4KIAogICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMoKSkKLSAgICAgICAgYWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzPENy
b3NzT3JpZ2luT2JqZWN0OjpXaW5kb3c+KCpleGVjLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICAgICAg
YWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzPENyb3NzT3JpZ2luT2JqZWN0OjpXaW5kb3c+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIAotYm9vbCBKU1JlbW90
ZURPTVdpbmRvdzo6ZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCkKK2Jvb2wgSlNSZW1vdGVET01XaW5kb3c6OmRlZmluZU93blByb3BlcnR5KEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sKQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgdGhyb3dTZWN1cml0eUVycm9yKCpzdGF0ZSwgc2NvcGUsIFN0cmluZygpKTsKKyAgICB0
aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBTdHJpbmcoKSk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU1ZhbHVlIEpTUmVtb3RlRE9NV2luZG93OjpnZXRQ
cm90b3R5cGUoSlNPYmplY3QqLCBFeGVjU3RhdGUqKQorSlNWYWx1ZSBKU1JlbW90ZURPTVdpbmRv
dzo6Z2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKQogewogICAgIHJldHVy
biBqc051bGwoKTsKIH0KIAotYm9vbCBKU1JlbW90ZURPTVdpbmRvdzo6cHJldmVudEV4dGVuc2lv
bnMoSlNPYmplY3QqLCBFeGVjU3RhdGUqIGV4ZWMpCitib29sIEpTUmVtb3RlRE9NV2luZG93Ojpw
cmV2ZW50RXh0ZW5zaW9ucyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0KQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZt
KCkpOwotICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQ2Fubm90IHByZXZlbnQgZXh0
ZW5zaW9ucyBvbiB0aGlzIG9iamVjdCJfcyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgdGhyb3dUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJDYW5ub3QgcHJldmVudCBleHRlbnNpb25zIG9u
IHRoaXMgb2JqZWN0Il9zKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0cmluZyBKU1JlbW90
ZURPTVdpbmRvdzo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKK1N0
cmluZyBKU1JlbW90ZURPTVdpbmRvdzo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqKQogewogICAgIHJldHVybiAiT2JqZWN0Il9zOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAKaW5kZXggMDgxNzNl
ZTAxOTU5OWJkYTZmNzVkYmVhZDE4MzQxYTAyODVmOTk4ZS4uMTY5OTQ3NWU2ZTYxYTkwOGJiMmZk
ZWVkZTMxODAwY2U5NjlhMDU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCkBAIC00NSw3ICs0NSw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFNWR1BhdGhT
ZWc+JiYgb2JqZWN0KQorSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFNWR1BhdGhTZWc+JiYgb2JqZWN0
KQogewogICAgIHN3aXRjaCAob2JqZWN0LT5wYXRoU2VnVHlwZSgpKSB7CiAgICAgY2FzZSBTVkdQ
YXRoU2VnOjpQQVRIU0VHX0NMT1NFUEFUSDoKQEAgLTkyLDkgKzkyLDkgQEAgSlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxTVkdQYXQKICAgICB9CiB9CiAKLUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTVkdQYXRoU2VnJiBvYmplY3QpCitKU1Zh
bHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFNWR1BhdGhTZWcmIG9iamVjdCkKIHsKLSAgICByZXR1cm4g
d3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOworICAgIHJldHVybiB3cmFwKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyQ2xpZW50Q3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2VydmljZVdvcmtlckNsaWVudEN1
c3RvbS5jcHAKaW5kZXggOGQ0YzVhYTU0ZWFlZDc0NTJiY2RkYzQwZTdhMjAyODE4NjdmNTAwMC4u
OWNkYTkyMzliZTRhNDdkMjQxNWMxODc0NGM1ZTEwNmFhOGU1Y2NmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTZXJ2aWNlV29ya2VyQ2xpZW50Q3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NlcnZpY2VXb3JrZXJDbGllbnRDdXN0
b20uY3BwCkBAIC0zNSwxNiArMzUsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoRXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFNlcnZpY2VXb3JrZXJDbGllbnQ+JiYg
Y2xpZW50KQorSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTR2xvYmFsT2JqZWN0KiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFNlcnZpY2VXb3JrZXJDbGllbnQ+JiYgY2xp
ZW50KQogewogICAgIGlmIChpczxTZXJ2aWNlV29ya2VyV2luZG93Q2xpZW50PihjbGllbnQpKQog
ICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxTZXJ2aWNlV29ya2VyV2luZG93Q2xpZW50Pihn
bG9iYWxPYmplY3QsIFdURk1vdmUoY2xpZW50KSk7CiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8
U2VydmljZVdvcmtlckNsaWVudD4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGNsaWVudCkpOwogfQog
Ci1KU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU2VydmljZVdvcmtlckNsaWVudCYgY2xpZW50KQorSlNWYWx1ZSB0b0pTKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTZXJ2aWNlV29ya2VyQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgcmV0dXJuIHdyYXAo
c3RhdGUsIGdsb2JhbE9iamVjdCwgY2xpZW50KTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGNsaWVudCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVl
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0
b20uY3BwCmluZGV4IDVjM2I4MmYxM2I4YWM2YzkzMDQ0NTFjNjU2ZTE0OTQyZDdjNDJkMDUuLjU0
YWM1MDk3MzgxZDVmNjRkMzk1OGViY2Y5OGVlZGYwNGVlYzRkMmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcApAQCAtMzUsMTYgKzM1
LDE2IEBAIHZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ3cmFw
cGVkKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8U3R5bGVTaGVldD4mJiBz
dHlsZVNoZWV0KQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxTdHlsZVNoZWV0PiYm
IHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQog
ICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxDU1NTdHlsZVNoZWV0PihnbG9iYWxPYmplY3Qs
IFdURk1vdmUoc3R5bGVTaGVldCkpOwogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFN0eWxlU2hl
ZXQ+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShzdHlsZVNoZWV0KSk7CiB9CiAKLUpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3R5bGVTaGVldCYgc3R5bGVzaGVldCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0eWxlU2hlZXQmIHN0eWxlc2hlZXQpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgc3R5bGVzaGVldCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBzdHlsZXNoZWV0KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dEN1c3RvbS5jcHAK
aW5kZXggMTIxM2QxNTg2ZjU5ZmUwYTJlMzA5ZDY1MTExNGI5NThhNDhmZDc5Yi4uYjJhNjA4MDAx
MDkyNmNhNmVmMzZkMDExNDAyZjM5ZjMzYzhmZjQzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUZXh0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RleHRDdXN0b20uY3BwCkBAIC0zMiwxNiArMzIsMTYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1KU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRleHQ+
JiYgdGV4dCkKK0pTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCosIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXh0PiYmIHRleHQpCiB7CiAgICAgaWYg
KGlzPENEQVRBU2VjdGlvbj4odGV4dCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPENE
QVRBU2VjdGlvbj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKHRleHQpKTsKICAgICByZXR1cm4gY3Jl
YXRlV3JhcHBlcjxUZXh0PihnbG9iYWxPYmplY3QsIFdURk1vdmUodGV4dCkpOwogfQogCi1KU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVGV4dCYgdGV4dCkKK0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGV4dCYgdGV4dCkKIHsK
LSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB0ZXh0KTsKKyAgICByZXR1cm4g
d3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHRleHQpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1RleHRUcmFja0N1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RleHRUcmFja0N1ZUN1c3RvbS5jcHAKaW5kZXggM2M0ODc5NTJjMzg2NWEwNzcwYTQ3ZGFiZmNk
NWNlOGZhYjVmZDRkZC4uNmVjYWNlZTlmODgyYWY1N2Y1Mjg4YjEzMTc5OTg2ZTIwYjg4ZDQ4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3Vz
dG9tLmNwcApAQCAtNjEsNyArNjEsNyBAQCBib29sIEpTVGV4dFRyYWNrQ3VlT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaAogICAgIHJl
dHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KHRleHRUcmFja0N1ZS50cmFjaygp
KSk7CiB9CiAKLUpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGV4dFRyYWNrQ3VlPiYmIGN1ZSkKK0pTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUZXh0VHJhY2tDdWU+JiYgY3VlKQogewogICAgIHN3aXRjaCAoY3VlLT5j
dWVUeXBlKCkpIHsKICAgICBjYXNlIFRleHRUcmFja0N1ZTo6RGF0YToKQEAgLTc1LDkgKzc1LDkg
QEAgSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxUZXh0VHIKICAgICB9CiB9CiAKLUpTVmFsdWUgdG9KUyhFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXh0VHJhY2tD
dWUmIGN1ZSkKK0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGV4dFRyYWNrQ3VlJiBjdWUpCiB7
Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgY3VlKTsKKyAgICByZXR1cm4g
d3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGN1ZSk7CiB9CiAKIHZvaWQg
SlNUZXh0VHJhY2tDdWU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0N1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAppbmRl
eCA1YjhlZWFjNmI1ODY2NGY3ZGRkNTk5NmEyY2JiODUzMTdhNzU1NDFhLi43OWYyZTdlMTNmZjVm
NTczMmU5ZWJjMWM0YzhmMGQ3ZmQzZjg0MDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1RyYWNrQ3VzdG9tLmNwcApAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUcmFja0Jhc2Um
IHRyYWNrKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVHJhY2tCYXNlJiB0
cmFjaykKIHsKICAgICBzd2l0Y2ggKHRyYWNrLnR5cGUoKSkgewogICAgIGNhc2UgVHJhY2tCYXNl
OjpCYXNlVHJhY2s6CkBAIC00NiwxMSArNDYsMTEgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUcmFja0IK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFRyYWNrQmFzZTo6QXVkaW9UcmFjazoKLSAgICAg
ICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgZG93bmNhc3Q8QXVkaW9UcmFjaz4o
dHJhY2spKTsKKyAgICAgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBkb3duY2FzdDxBdWRpb1RyYWNrPih0cmFjaykpOwogICAgIGNhc2UgVHJhY2tCYXNl
OjpWaWRlb1RyYWNrOgotICAgICAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBk
b3duY2FzdDxWaWRlb1RyYWNrPih0cmFjaykpOworICAgICAgICByZXR1cm4gd3JhcChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGRvd25jYXN0PFZpZGVvVHJhY2s+KHRyYWNrKSk7
CiAgICAgY2FzZSBUcmFja0Jhc2U6OlRleHRUcmFjazoKLSAgICAgICAgcmV0dXJuIHdyYXAoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgZG93bmNhc3Q8VGV4dFRyYWNrPih0cmFjaykpOworICAgICAgICBy
ZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGRvd25jYXN0PFRl
eHRUcmFjaz4odHJhY2spKTsKICAgICB9CiAKICAgICByZXR1cm4ganNOdWxsKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmgKaW5kZXggMzBkZDk5MDY2YjgwNmI0
MGZiMTEzYjkzYjQ4NWU1YmM4YjA3Yjc0OC4uM2MwZjkyNzk3NTVlNWY1NzM2YWQ2YzZkNmRlMzc2
ZDFhZDA5YWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFj
a0N1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20u
aApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUcmFja0Jhc2UmKTsK
K0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRyYWNrQmFzZSYpOwogCiBpbmxpbmUgdm9pZCogcm9vdChUcmFja0Jhc2UqIHRyYWNrKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUeXBlZE9NQ1NTU3R5
bGVWYWx1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1R5cGVkT01D
U1NTdHlsZVZhbHVlQ3VzdG9tLmNwcAppbmRleCBiZjI2ZTgwMjBjNTdmYzdlMTZlMjA2ZjJkMmFh
ZGRjZmExYmY4Y2RkLi4xZTZlZmJkMGIyZmYzYTllNjFlOGYzNzBkYmUyNzAxMThjZjU3YmZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1R5cGVkT01DU1NTdHlsZVZh
bHVlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1R5cGVkT01D
U1NTdHlsZVZhbHVlQ3VzdG9tLmNwcApAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUeXBlZE9NQ1NT
U3R5bGVWYWx1ZT4mJiB2YWx1ZSkKK0pTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUeXBlZE9NQ1NTU3R5
bGVWYWx1ZT4mJiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmlzVW5pdFZhbHVlKCkpCiAgICAg
ICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFR5cGVkT01DU1NVbml0VmFsdWU+KGdsb2JhbE9iamVj
dCwgV1RGTW92ZSh2YWx1ZSkpOwpAQCAtNDksOSArNDksOSBAQCBKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFR5
cGVkTwogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFR5cGVkT01DU1NTdHlsZVZhbHVlPihnbG9i
YWxPYmplY3QsIFdURk1vdmUodmFsdWUpKTsKIH0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFR5cGVkT01DU1NTdHlsZVZh
bHVlJiBvYmplY3QpCitKU1ZhbHVlIHRvSlMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFR5cGVkT01DU1NTdHlsZVZh
bHVlJiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgb2Jq
ZWN0KTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IG9iamVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAppbmRleCA5ZjVkZGEy
N2UyNjY2OWIyNjdmZDI0NjVkODc1YzVhYTg0YzU2OTNiLi5mNmY3Njk3MGE1MTU4NDc0NDlmY2Ri
NDM5ODgwOGFhMzAyNDVjYTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNzIEpTVmFs
dWVJbldyYXBwZWRPYmplY3QgewogICAgIFZhbHVlIG1fdmFsdWU7CiB9OwogCi1KU0M6OkpTVmFs
dWUgY2FjaGVkUHJvcGVydHlWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTRE9NT2JqZWN0
JiBvd25lciwgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgY2FjaGVTbG90LCBjb25zdCBXVEY6OkZ1
bmN0aW9uPEpTQzo6SlNWYWx1ZSgpPiYpOworSlNDOjpKU1ZhbHVlIGNhY2hlZFByb3BlcnR5VmFs
dWUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IEpTRE9NT2JqZWN0JiBvd25lciwgSlNWYWx1
ZUluV3JhcHBlZE9iamVjdCYgY2FjaGVTbG90LCBjb25zdCBXVEY6OkZ1bmN0aW9uPEpTQzo6SlNW
YWx1ZSgpPiYpOwogCiBpbmxpbmUgYXV0byBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0OjptYWtlVmFs
dWUoSlNDOjpKU1ZhbHVlIHZhbHVlKSAtPiBWYWx1ZQogewpAQCAtMTE0LDEyICsxMTQsMTIgQEAg
aW5saW5lIHZvaWQgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6Y2xlYXIoKQogICAgIH0sIFtdIChh
dXRvJikgeyB9KTsKIH0KIAotaW5saW5lIEpTQzo6SlNWYWx1ZSBjYWNoZWRQcm9wZXJ0eVZhbHVl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNET01PYmplY3QmIG93bmVyLCBKU1ZhbHVl
SW5XcmFwcGVkT2JqZWN0JiBjYWNoZWRWYWx1ZSwgY29uc3QgV1RGOjpGdW5jdGlvbjxKU0M6OkpT
VmFsdWUoKT4mIGZ1bmN0aW9uKQoraW5saW5lIEpTQzo6SlNWYWx1ZSBjYWNoZWRQcm9wZXJ0eVZh
bHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEpTRE9N
T2JqZWN0JiBvd25lciwgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYgY2FjaGVkVmFsdWUsIGNvbnN0
IFdURjo6RnVuY3Rpb248SlNDOjpKU1ZhbHVlKCk+JiBmdW5jdGlvbikKIHsKLSAgICBpZiAoY2Fj
aGVkVmFsdWUgJiYgaXNXb3JsZENvbXBhdGlibGUoc3RhdGUsIGNhY2hlZFZhbHVlKSkKKyAgICBp
ZiAoY2FjaGVkVmFsdWUgJiYgaXNXb3JsZENvbXBhdGlibGUobGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FjaGVkVmFsdWUpKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7Ci0gICAgY2FjaGVkVmFs
dWUgPSBjbG9uZUFjcm9zc1dvcmxkcyhzdGF0ZSwgb3duZXIsIGZ1bmN0aW9uKCkpOwotICAgIEFT
U0VSVChpc1dvcmxkQ29tcGF0aWJsZShzdGF0ZSwgY2FjaGVkVmFsdWUpKTsKKyAgICBjYWNoZWRW
YWx1ZSA9IGNsb25lQWNyb3NzV29ybGRzKGxleGljYWxHbG9iYWxPYmplY3QsIG93bmVyLCBmdW5j
dGlvbigpKTsKKyAgICBBU1NFUlQoaXNXb3JsZENvbXBhdGlibGUobGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FjaGVkVmFsdWUpKTsKICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViQW5pbWF0aW9uQ3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViQW5pbWF0aW9uQ3VzdG9tLmNwcAppbmRl
eCBiODA0YWMxYmM1OTU1YzkwOTVkMmRkMDFjODRjYjY1ZjE1MGQ1ZTBmLi4zZjNhMTdhY2E2ODQy
ZjM4MDkyMzc3Y2EwMTIzNjEyZWJlZWUyMTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkFuaW1hdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJBbmltYXRpb25DdXN0b20uY3BwCkBAIC0zOCw3ICszOCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotSlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxXZWJBbmltYXRpb24+JiYgdmFsdWUpCitKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNH
bG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8V2ViQW5p
bWF0aW9uPiYmIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+aXNDU1NBbmltYXRpb24oKSkKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8Q1NTQW5pbWF0aW9uPihnbG9iYWxPYmplY3QsIFdU
Rk1vdmUodmFsdWUpKTsKQEAgLTQ3LDM4ICs0NywzOCBAQCBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdlYkFu
aQogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFdlYkFuaW1hdGlvbj4oZ2xvYmFsT2JqZWN0LCBX
VEZNb3ZlKHZhbHVlKSk7CiB9CiAKLUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJBbmltYXRpb24mIHZhbHVlKQorSlNWYWx1
ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBXZWJBbmltYXRpb24mIHZhbHVlKQogewotICAgIHJldHVybiB3
cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
Y29uc3RydWN0SlNXZWJBbmltYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhl
Y1N0YXRlJiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTV2ViQW5pbWF0aW9uKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkK
IHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byoganND
b25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RPTUNvbnN0cnVjdG9yQmFzZSo+KHN0YXRlLmpzQ2FsbGVl
KCkpOworICAgIGF1dG8qIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNET01Db25zdHJ1Y3RvckJh
c2UqPihjYWxsRnJhbWUuanNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGpzQ29uc3RydWN0b3IpOwog
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIHRocm93Q29u
c3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgIkFuaW1hdGlvbiIpOworICAgICAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvclNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCAiQW5pbWF0aW9uIik7CiAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOwotICAgIGF1dG8gZWZmZWN0ID0gY29udmVydDxJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8QW5pbWF0aW9uRWZmZWN0Pj4+KHN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCgwKSwgW10oRXhlY1N0YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgc2NvcGUpIHsKLSAgICAgICAg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJlZmZlY3QiLCAiQW5pbWF0
aW9uIiwgbnVsbHB0ciwgIkFuaW1hdGlvbkVmZmVjdCIpOworICAgIGF1dG8gZWZmZWN0ID0gY29u
dmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8QW5pbWF0aW9uRWZmZWN0Pj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUuYXJndW1lbnQoMCksIFtdKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBUaHJvd1Njb3BlJiBzY29wZSkgeworICAgICAgICB0aHJvd0Fy
Z3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiZWZmZWN0Iiwg
IkFuaW1hdGlvbiIsIG51bGxwdHIsICJBbmltYXRpb25FZmZlY3QiKTsKICAgICB9KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAg
aWYgKHN0YXRlLmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICBpZiAoY2FsbEZyYW1l
LmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgYXV0byBvYmplY3QgPSBXZWJB
bmltYXRpb246OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92ZShlZmZlY3QpKTsKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxXZWJBbmlt
YXRpb24+PihzdGF0ZSwgKmpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9i
amVjdCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVk
PElETEludGVyZmFjZTxXZWJBbmltYXRpb24+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmpzQ29u
c3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKICAgICB9CiAKLSAg
ICBhdXRvIHRpbWVsaW5lID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8QW5pbWF0
aW9uVGltZWxpbmU+Pj4oc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShFeGVj
U3RhdGUmIHN0YXRlLCBUaHJvd1Njb3BlJiBzY29wZSkgewotICAgICAgICB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMSwgInRpbWVsaW5lIiwgIkFuaW1hdGlvbiIsIG51bGxw
dHIsICJBbmltYXRpb25UaW1lbGluZSIpOworICAgIGF1dG8gdGltZWxpbmUgPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETEludGVyZmFjZTxBbmltYXRpb25UaW1lbGluZT4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgc2NvcGUpIHsKKyAgICAgICAgdGhy
b3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgInRpbWVs
aW5lIiwgIkFuaW1hdGlvbiIsIG51bGxwdHIsICJBbmltYXRpb25UaW1lbGluZSIpOwogICAgIH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgYXV0byBvYmplY3QgPSBXZWJBbmltYXRpb246OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92
ZShlZmZlY3QpLCBXVEZNb3ZlKHRpbWVsaW5lKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxXZWJBbmltYXRpb24+PihzdGF0ZSwgKmpz
Q29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFdlYkFuaW1h
dGlvbj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0
KCksIFdURk1vdmUob2JqZWN0KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHkuY3BwCmluZGV4IGMyMjk3NDk4
NjBiNWE1MjQwYWM1NWM4ODRhMDI0ZGJhOWQ2NjI5ZTIuLjdhYzhmNzk0MTRkZWRkMGE2ZDY5NDVk
MTQ4ZjI4ZThiZDI3MTM0NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2luZG93UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2lu
ZG93UHJveHkuY3BwCkBAIC0xNDUsOSArMTQ1LDkgQEAgQWJzdHJhY3RET01XaW5kb3cmIEpTV2lu
ZG93UHJveHk6OndyYXBwZWQoKSBjb25zdAogICAgIHJldHVybiBqc0Nhc3Q8SlNET01XaW5kb3dC
YXNlKj4od2luZG93KS0+d3JhcHBlZCgpOwogfQogCi1KU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBz
dGF0ZSwgV2luZG93UHJveHkmIHdpbmRvd1Byb3h5KQorSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBXaW5kb3dQcm94eSYgd2luZG93UHJveHkpCiB7Ci0g
ICAgYXV0byoganNXaW5kb3dQcm94eSA9IHdpbmRvd1Byb3h5LmpzV2luZG93UHJveHkoY3VycmVu
dFdvcmxkKCpzdGF0ZSkpOworICAgIGF1dG8qIGpzV2luZG93UHJveHkgPSB3aW5kb3dQcm94eS5q
c1dpbmRvd1Byb3h5KGN1cnJlbnRXb3JsZCgqbGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIHJl
dHVybiBqc1dpbmRvd1Byb3h5ID8gSlNWYWx1ZShqc1dpbmRvd1Byb3h5KSA6IGpzTnVsbCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dpbmRvd1Byb3h5LmgKaW5kZXggMDgw
OTNkYzZlMTcyMDNjNDdlYWI0ZTE3NWFjMzI5OGQ5YzJjMTQxMC4uZjQ0YzgwYTY5YjA0YTlhYzVl
ZGMyM2Y2OGM4ODEyZmRiOWVhMWRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXaW5kb3dQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2luZG93UHJveHkuaApAQCAtNzIsMTAgKzcyLDEwIEBAIGNsYXNzIEpTV2luZG93UHJveHkgZmlu
YWwgOiBwdWJsaWMgSlNDOjpKU1Byb3h5IHsKIAogLy8gSlNXaW5kb3dQcm94eSBpcyBhIGxpdHRs
ZSBvZGQgaW4gdGhhdCBpdCdzIG5vdCBhIHRyYWRpdGlvbmFsIHdyYXBwZXIgYW5kIGhhcyBubyBi
YWNrIHBvaW50ZXIuCiAvLyBJdCBpcywgaG93ZXZlciwgc3Ryb25nbHkgb3duZWQgYnkgQWJzdHJh
Y3RGcmFtZSB2aWEgaXRzIFdpbmRvd1Byb3h5LCBzbyB3ZSBjYW4gZ2V0IG9uZSBmcm9tIGEgV2lu
ZG93UHJveHkuCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSosIFdpbmRvd1Byb3h5Jik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBXaW5kb3dQcm94eSogd2luZG93UHJveHkpIHsgcmV0dXJuIHdpbmRvd1Byb3h5
ID8gdG9KUyhzdGF0ZSwgKndpbmRvd1Byb3h5KSA6IEpTQzo6anNOdWxsKCk7IH0KLWlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiwgV2luZG93UHJveHkmIHdpbmRvd1Byb3h5KSB7IHJldHVybiB0b0pTKHN0YXRlLCB3aW5kb3dQ
cm94eSk7IH0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdpbmRvd1Byb3h5KiB3aW5kb3dQcm94
eSkgeyByZXR1cm4gd2luZG93UHJveHkgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICp3aW5k
b3dQcm94eSkgOiBKU0M6OmpzTnVsbCgpOyB9CitXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgV2luZG93UHJveHkmKTsKK2lubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBXaW5k
b3dQcm94eSogd2luZG93UHJveHkpIHsgcmV0dXJuIHdpbmRvd1Byb3h5ID8gdG9KUyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqd2luZG93UHJveHkpIDogSlNDOjpqc051bGwoKTsgfQoraW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTRE9NR2xvYmFsT2JqZWN0KiwgV2luZG93UHJveHkmIHdpbmRvd1Byb3h5KSB7IHJldHVybiB0
b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIHdpbmRvd1Byb3h5KTsgfQoraW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdpbmRvd1Byb3h5KiB3aW5kb3dQcm94eSkgeyBy
ZXR1cm4gd2luZG93UHJveHkgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgKndpbmRvd1Byb3h5KSA6IEpTQzo6anNOdWxsKCk7IH0KIAogSlNXaW5kb3dQcm94eSogdG9K
U1dpbmRvd1Byb3h5KFdpbmRvd1Byb3h5JiwgRE9NV3JhcHBlcldvcmxkJik7CiBpbmxpbmUgSlNX
aW5kb3dQcm94eSogdG9KU1dpbmRvd1Byb3h5KFdpbmRvd1Byb3h5KiB3aW5kb3dQcm94eSwgRE9N
V3JhcHBlcldvcmxkJiB3b3JsZCkgeyByZXR1cm4gd2luZG93UHJveHkgPyB0b0pTV2luZG93UHJv
eHkoKndpbmRvd1Byb3h5LCB3b3JsZCkgOiBudWxscHRyOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKaW5kZXggZmMz
NmIzMzBlMTVjM2E4Yzk0NWY3OTU1YTU4NTE3ZjVmYjEzZDg1Ni4uNWJhMTNjMWYwMWJjMDFjNzFi
YzcyNzBhZTk4MWE1NDRlMWFlZGJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcApAQCAtMTQzLDEyICsxNDMsMTIg
QEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6cXVldWVUYXNrVG9FdmVudExvb3AoSlNH
bG9iYWxPYmplY3QmIG9iamVjdCwgUmVmPEoKICAgICBjb250ZXh0Lm1pY3JvdGFza1F1ZXVlKCku
YXBwZW5kKFdURk1vdmUobWljcm90YXNrKSk7CiB9CiAKLUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiwgV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2Jh
bFNjb3BlKQorSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCosIFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29w
ZSkKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCB3b3JrZXJHbG9iYWxTY29wZSk7CisgICAgcmV0
dXJuIHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgd29ya2VyR2xvYmFsU2NvcGUpOwogfQogCi1K
U1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiwgV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNj
b3BlKQorSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0KiwgV29ya2VyR2xvYmFsU2NvcGUmIHdv
cmtlckdsb2JhbFNjb3BlKQogewogICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCA9
IHdvcmtlckdsb2JhbFNjb3BlLnNjcmlwdCgpOwogICAgIGlmICghc2NyaXB0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmgKaW5k
ZXggOTM3ZjJiMDg1MzAyNTgxYmUwNzk4YTVmOTliMGU4ZWQyZTA4NDE2Mi4uNWQzNDI0MWFlMmJl
M2VmNmYwMjU1ZDJjMmY0MzFkZjk1NTkxZTJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5oCkBAIC04NiwxMCArODYsMTAg
QEAgY2xhc3MgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UgOiBwdWJsaWMgSlNET01HbG9iYWxPYmpl
Y3QgewogCiAvLyBSZXR1cm5zIGEgSlNXb3JrZXJHbG9iYWxTY29wZSBvciBqc051bGwoKQogLy8g
QWx3YXlzIGlnbm9yZXMgdGhlIGV4ZWNTdGF0ZSBhbmQgcGFzc2VkIGdsb2JhbE9iamVjdCwgV29y
a2VyR2xvYmFsU2NvcGUgaXMgaXRzZWxmIGEgZ2xvYmFsT2JqZWN0IGFuZCB3aWxsIGFsd2F5cyB1
c2UgaXRzIG93biBwcm90b3R5cGUgY2hhaW4uCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgV29ya2VyR2xvYmFsU2NvcGUmKTsKLWlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgV29ya2VyR2xvYmFsU2NvcGUqIHNjb3BlKSB7IHJldHVybiBzY29wZSA/
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAqc2NvcGUpIDogSlNDOjpqc051bGwoKTsgfQotSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBXb3JrZXJHbG9iYWxTY29wZSYpOwotaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXb3JrZXJHbG9iYWxT
Y29wZSogc2NvcGUpIHsgcmV0dXJuIHNjb3BlID8gdG9KUyhleGVjLCAqc2NvcGUpIDogSlNDOjpq
c051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgV29ya2VyR2xvYmFsU2NvcGUmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXb3JrZXJHbG9iYWxTY29wZSogc2NvcGUpIHsgcmV0dXJu
IHNjb3BlID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICpzY29wZSkg
OiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgV29ya2VyR2xvYmFsU2NvcGUmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBXb3JrZXJHbG9iYWxTY29wZSogc2Nv
cGUpIHsgcmV0dXJuIHNjb3BlID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAqc2NvcGUpIDog
SlNDOjpqc051bGwoKTsgfQogCiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKiB0b0pTRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGUoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiBKU1dvcmtl
ckdsb2JhbFNjb3BlKiB0b0pTV29ya2VyR2xvYmFsU2NvcGUoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xv
YmFsU2NvcGVDdXN0b20uY3BwCmluZGV4IGRkM2RlMmNlZjczNTIzMzRkMTJlMjkyOTQwZTZmMjQz
ZjZhMDUzZDEuLmIyZDQyOWNiZDljMDQ0ZWI1NjhmMmY5ZjU2Yzk2ZDYyNDQ3MmUzNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCkBAIC00OCwxNyArNDgsMTcgQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3Bl
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB3cmFw
cGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCi1KU1ZhbHVlIEpTV29y
a2VyR2xvYmFsU2NvcGU6OnF1ZXVlTWljcm90YXNrKEV4ZWNTdGF0ZSYgc3RhdGUpCitKU1ZhbHVl
IEpTV29ya2VyR2xvYmFsU2NvcGU6OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUuYXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCkpOwogCi0gICAg
SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAg
SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gY2FsbEZyYW1lLnVuY2hlY2tlZEFyZ3VtZW50KDApOwog
ICAgIGlmIChVTkxJS0VMWSghZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKHZtKSkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Io
c3RhdGUsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiV29ya2VyR2xvYmFsU2NvcGUiLCAicXVldWVN
aWNyb3Rhc2siKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJjYWxs
YmFjayIsICJXb3JrZXJHbG9iYWxTY29wZSIsICJxdWV1ZU1pY3JvdGFzayIpKTsKIAogICAgIHNj
b3BlLnJlbGVhc2UoKTsKICAgICBCYXNlOjpxdWV1ZU1pY3JvdGFzayhKU0M6OmNyZWF0ZUpTTWlj
cm90YXNrKHZtLCBmdW5jdGlvblZhbHVlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAppbmRleCA4OTQzNmU5M2Jj
ZGUzMzIyNTdkYTVkZjUyNGNiMWE4NjkzMmU5N2ViLi4zNzdkM2RmMmJmOTAwNmYyZDE2NWQ0Njg2
MWZjMTY1MGRiMzYzYzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKQEAgLTEyMiwxMiArMTIyLDEyIEBAIFJ1
bnRpbWVGbGFncyBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OmphdmFTY3JpcHRSdW50aW1lRmxh
Z3MoY29uc3QgSlNHbG9iYWxPYmplCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1fd3JhcHBlZC0+
anNSdW50aW1lRmxhZ3MoKTsKIH0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqLCBXb3JrbGV0R2xvYmFsU2NvcGUmIHdvcmtsZXRHbG9iYWxTY29wZSkK
K0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqLCBXb3JrbGV0R2xvYmFsU2NvcGUmIHdvcmtsZXRHbG9iYWxTY29wZSkKIHsK
LSAgICByZXR1cm4gdG9KUyhleGVjLCB3b3JrbGV0R2xvYmFsU2NvcGUpOworICAgIHJldHVybiB0
b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIHdvcmtsZXRHbG9iYWxTY29wZSk7CiB9CiAKLUpTVmFs
dWUgdG9KUyhFeGVjU3RhdGUqLCBXb3JrbGV0R2xvYmFsU2NvcGUmIHdvcmtsZXRHbG9iYWxTY29w
ZSkKK0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCosIFdvcmtsZXRHbG9iYWxTY29wZSYgd29y
a2xldEdsb2JhbFNjb3BlKQogewogICAgIGlmICghd29ya2xldEdsb2JhbFNjb3BlLnNjcmlwdCgp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgKaW5kZXggYWNjZTRhZGYw
YWRjZjk4MmQyOGI3YTZmODdiN2E2YTNlYmEyNjM0ZC4uYzgzZTM0ODk5YjJmNDZjNjFlOTAyYjQy
MTQyZjcxYzZhYWI4MjhiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmgKQEAgLTc2LDEwICs3NiwxMCBAQCBjbGFzcyBK
U1dvcmtsZXRHbG9iYWxTY29wZUJhc2UgOiBwdWJsaWMgSlNET01HbG9iYWxPYmplY3QgewogCiAv
LyBSZXR1cm5zIGEgSlNXb3JrbGV0R2xvYmFsU2NvcGUgb3IganNOdWxsKCkKIC8vIEFsd2F5cyBp
Z25vcmVzIHRoZSBleGVjU3RhdGUgYW5kIHBhc3NlZCBnbG9iYWxPYmplY3QsIFdvcmtsZXRHbG9i
YWxTY29wZSBpcyBpdHNlbGYgYSBnbG9iYWxPYmplY3QgYW5kIHdpbGwgYWx3YXlzIHVzZSBpdHMg
b3duIHByb3RvdHlwZSBjaGFpbi4KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBXb3JrbGV0R2xvYmFsU2NvcGUmKTsKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgV29ya2xldEdsb2JhbFNjb3BlKiBzY29wZSkgeyByZXR1cm4gc2NvcGUgPyB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgKnNjb3BlKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgV29ya2xldEdsb2JhbFNjb3BlJik7Ci1pbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdvcmtsZXRHbG9iYWxTY29w
ZSogc2NvcGUpIHsgcmV0dXJuIHNjb3BlID8gdG9KUyhleGVjLCAqc2NvcGUpIDogSlNDOjpqc051
bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgV29ya2xldEdsb2JhbFNjb3BlJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgV29ya2xldEdsb2JhbFNjb3BlKiBzY29wZSkgeyByZXR1cm4g
c2NvcGUgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKnNjb3BlKSA6
IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBXb3JrbGV0R2xvYmFsU2NvcGUmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBXb3JrbGV0R2xvYmFsU2NvcGUqIHNj
b3BlKSB7IHJldHVybiBzY29wZSA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgKnNjb3BlKSA6
IEpTQzo6anNOdWxsKCk7IH0KIAogSlNXb3JrbGV0R2xvYmFsU2NvcGUqIHRvSlNXb3JrbGV0R2xv
YmFsU2NvcGUoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MRG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNYTUxEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggOWM4MmM1MDBiNWYz
ODEyNDUxN2YzNzMyYjllOWMwN2E0NTdkNTMyMy4uOWZhMTBiNjcxMmY3ZjE2NjY2ZGQwMjE4ZTg2
NjZhOWEwODdiODNiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNY
TUxEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNY
TUxEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTM1LDE4ICszNSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLUpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8WE1M
RG9jdW1lbnQ+JiYgZG9jdW1lbnQpCitKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxYTUxEb2N1bWVudD4mJiBkb2N1bWVudCkKIHsKLSAgICByZXBvcnRNZW1vcnlGb3JE
b2N1bWVudElmRnJhbWVsZXNzKCpzdGF0ZSwgZG9jdW1lbnQuZ2V0KCkpOworICAgIHJlcG9ydE1l
bW9yeUZvckRvY3VtZW50SWZGcmFtZWxlc3MoKmxleGljYWxHbG9iYWxPYmplY3QsIGRvY3VtZW50
LmdldCgpKTsKIAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFhNTERvY3VtZW50PihnbG9iYWxP
YmplY3QsIFdURk1vdmUoZG9jdW1lbnQpKTsKIH0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFhNTERvY3VtZW50JiBkb2N1
bWVudCkKK0pTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgWE1MRG9jdW1lbnQmIGRvY3VtZW50KQog
ewotICAgIGlmIChhdXRvKiB3cmFwcGVyID0gY2FjaGVkRG9jdW1lbnRXcmFwcGVyKCpzdGF0ZSwg
Kmdsb2JhbE9iamVjdCwgZG9jdW1lbnQpKQorICAgIGlmIChhdXRvKiB3cmFwcGVyID0gY2FjaGVk
RG9jdW1lbnRXcmFwcGVyKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0LCBkb2N1
bWVudCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIFJlZjxYTUxEb2N1bWVudD4oZG9jdW1lbnQpKTsKKyAg
ICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIFJlZjxYTUxEb2N1bWVudD4oZG9jdW1lbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcAppbmRleCA2ZGMyOGJmMTAwODA2ZWFlOTE3ODFmMzJlYTBhOWJmMDYxY2I0
MDY2Li4zZGRlZGM3MGE0NGZjMDE1MDY0ZGY0NmVjYjEzOGY3MzdmMGY5MzNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNw
cApAQCAtNTAsMTAgKzUwLDEwIEBAIHZvaWQgSlNYTUxIdHRwUmVxdWVzdDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHZpc2l0b3IuYWRkT3Bh
cXVlUm9vdChyZXNwb25zZURvY3VtZW50KTsKIH0KIAotSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0
OjpyZXNwb25zZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAorSlNWYWx1ZSBKU1hNTEh0dHBSZXF1
ZXN0OjpyZXNwb25zZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QK
IHsKICAgICBhdXRvIGNhY2hlUmVzdWx0ID0gWyZdIChKU1ZhbHVlIHZhbHVlKSAtPiBKU1ZhbHVl
IHsKLSAgICAgICAgbV9yZXNwb25zZS5zZXQoc3RhdGUudm0oKSwgdGhpcywgdmFsdWUpOworICAg
ICAgICBtX3Jlc3BvbnNlLnNldChsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIHRoaXMsIHZhbHVl
KTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH07CiAKQEAgLTY2LDggKzY2LDggQEAgSlNW
YWx1ZSBKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVHlw
ZTo6RW1wdHlTdHJpbmc6CiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VUeXBlOjpU
ZXh0OiB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZt
KCkpOwotICAgICAgICByZXR1cm4gY2FjaGVSZXN1bHQodG9KUzxJRExOdWxsYWJsZTxJRExVU1ZT
dHJpbmc+PihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5yZXNwb25zZVRleHQoKSkpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2JqZWN0LnZt
KCkpOworICAgICAgICByZXR1cm4gY2FjaGVSZXN1bHQodG9KUzxJRExOdWxsYWJsZTxJRExVU1ZT
dHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgd3JhcHBlZCgpLnJlc3BvbnNlVGV4
dCgpKSk7CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtODQsNyArODQs
NyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEV4ZWNTdGF0ZSYgc3RhdGUp
IGNvbnN0CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgY2FzZSBYTUxIdHRw
UmVxdWVzdDo6UmVzcG9uc2VUeXBlOjpKc29uOgotICAgICAgICB2YWx1ZSA9IHRvSlM8SURMSlNP
Tj4oKmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHdyYXBwZWQoKS5yZXNwb25zZVRleHRJ
Z25vcmluZ1Jlc3BvbnNlVHlwZSgpKTsKKyAgICAgICAgdmFsdWUgPSB0b0pTPElETEpTT04+KCpn
bG9iYWxPYmplY3QoKSwgd3JhcHBlZCgpLnJlc3BvbnNlVGV4dElnbm9yaW5nUmVzcG9uc2VUeXBl
KCkpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgdmFsdWUgPSBqc051bGwoKTsK
ICAgICAgICAgYnJlYWs7CkBAIC05MiwxNiArOTIsMTYgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1
ZXN0OjpyZXNwb25zZShFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAogICAgIGNhc2UgWE1MSHR0cFJl
cXVlc3Q6OlJlc3BvbnNlVHlwZTo6RG9jdW1lbnQ6IHsKICAgICAgICAgYXV0byBkb2N1bWVudCA9
IHdyYXBwZWQoKS5yZXNwb25zZVhNTCgpOwogICAgICAgICBBU1NFUlQoIWRvY3VtZW50Lmhhc0V4
Y2VwdGlvbigpKTsKLSAgICAgICAgdmFsdWUgPSB0b0pTPElETEludGVyZmFjZTxEb2N1bWVudD4+
KHN0YXRlLCAqZ2xvYmFsT2JqZWN0KCksIGRvY3VtZW50LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
KyAgICAgICAgdmFsdWUgPSB0b0pTPElETEludGVyZmFjZTxEb2N1bWVudD4+KGxleGljYWxHbG9i
YWxPYmplY3QsICpnbG9iYWxPYmplY3QoKSwgZG9jdW1lbnQucmVsZWFzZVJldHVyblZhbHVlKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpSZXNw
b25zZVR5cGU6OkJsb2I6Ci0gICAgICAgIHZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRl
cmZhY2U8QmxvYj4+KHN0YXRlLCAqZ2xvYmFsT2JqZWN0KCksIHdyYXBwZWQoKS5jcmVhdGVSZXNw
b25zZUJsb2IoKSk7CisgICAgICAgIHZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZh
Y2U8QmxvYj4+KGxleGljYWxHbG9iYWxPYmplY3QsICpnbG9iYWxPYmplY3QoKSwgd3JhcHBlZCgp
LmNyZWF0ZVJlc3BvbnNlQmxvYigpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFhNTEh0
dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGU6OkFycmF5YnVmZmVyOgotICAgICAgICB2YWx1ZSA9IHRv
SlM8SURMSW50ZXJmYWNlPEFycmF5QnVmZmVyPj4oc3RhdGUsICpnbG9iYWxPYmplY3QoKSwgd3Jh
cHBlZCgpLmNyZWF0ZVJlc3BvbnNlQXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHZhbHVlID0gdG9K
UzxJRExJbnRlcmZhY2U8QXJyYXlCdWZmZXI+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFs
T2JqZWN0KCksIHdyYXBwZWQoKS5jcmVhdGVSZXNwb25zZUFycmF5QnVmZmVyKCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWFBhdGhOU1Jlc29sdmVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTWFBhdGhOU1Jlc29sdmVyQ3VzdG9tLmNwcAppbmRleCAxOWU5MmI2Mjc5OTQ1MmNlM2NjNmE2
NWJmOTQ5YzI1YTdhMTgwYzY0Li44MzhjMmQxZGNiNzg2Y2Y3ZjRkODYyMGEzNzllOWNiZjIyNzFi
MTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoTlNSZXNv
bHZlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aE5T
UmVzb2x2ZXJDdXN0b20uY3BwCkBAIC0zMywxNSArMzMsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLVJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IEpTWFBh
dGhOU1Jlc29sdmVyOjp0b1dyYXBwZWQoVk0mIHZtLCBFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQorUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3Jh
cHBlZChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pbmhlcml0czxKU1hQYXRoTlNSZXNvbHZlcj4odm0p
KQogICAgICAgICByZXR1cm4gJmpzQ2FzdDxKU1hQYXRoTlNSZXNvbHZlcio+KGFzT2JqZWN0KHZh
bHVlKSktPndyYXBwZWQoKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gSlNDdXN0b21YUGF0aE5TUmVz
b2x2ZXI6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gcmVzdWx0ID0gSlNDdXN0b21Y
UGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkpIHsKICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24o
c3RhdGUsIHNjb3BlLCByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCByZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9SZWFkYWJsZVN0cmVhbS5jcHAKaW5kZXggYjc5M2Q0MWJhOTBjZDgwYTk0NWM0YjczYjAwM2Qy
YTc3MmQwZDdhZi4uZTRjMjUwNGRjZTdlYmU3YjgyNmM1ZDZmM2EwMWU2MzhkMDM1YzNiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtLmNwcApAQCAtMzUs
MzkgKzM1LDM5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwog
Ci1SZWY8UmVhZGFibGVTdHJlYW0+IFJlYWRhYmxlU3RyZWFtOjpjcmVhdGUoSlNDOjpFeGVjU3Rh
dGUmIGV4ZWNTdGF0ZSwgUmVmUHRyPFJlYWRhYmxlU3RyZWFtU291cmNlPiYmIHNvdXJjZSkKK1Jl
ZjxSZWFkYWJsZVN0cmVhbT4gUmVhZGFibGVTdHJlYW06OmNyZWF0ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWZQdHI8UmVhZGFibGVTdHJlYW1Tb3VyY2U+JiYg
c291cmNlKQogewotICAgIFZNJiB2bSA9IGV4ZWNTdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CiAKICAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSk7Ci0gICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlY1N0YXRlLmxleGljYWxHbG9iYWxPYmplY3Qo
KSk7CisgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpOwogCi0gICAgYXV0byogY29uc3RydWN0b3IgPSBK
U0M6OmFzT2JqZWN0KGdsb2JhbE9iamVjdC5nZXQoJmV4ZWNTdGF0ZSwgY2xpZW50RGF0YS5idWls
dGluTmFtZXMoKS5SZWFkYWJsZVN0cmVhbVByaXZhdGVOYW1lKCkpKTsKKyAgICBhdXRvKiBjb25z
dHJ1Y3RvciA9IEpTQzo6YXNPYmplY3QoZ2xvYmFsT2JqZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5SZWFkYWJsZVN0cmVhbVByaXZhdGVOYW1l
KCkpKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RU
eXBlIGNvbnN0cnVjdFR5cGUgPSBjb25zdHJ1Y3Rvci0+bWV0aG9kVGFibGUodm0pLT5nZXRDb25z
dHJ1Y3REYXRhKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3REYXRhKTsKICAgICBBU1NFUlQoY29uc3Ry
dWN0VHlwZSAhPSBDb25zdHJ1Y3RUeXBlOjpOb25lKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQoc291cmNlID8gdG9KU05ld2x5Q3JlYXRlZCgmZXhl
Y1N0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzb3VyY2UucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6Ompz
VW5kZWZpbmVkKCkpOworICAgIGFyZ3MuYXBwZW5kKHNvdXJjZSA/IHRvSlNOZXdseUNyZWF0ZWQo
JmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHNvdXJjZS5yZWxlYXNlTm9uTnVs
bCgpKSA6IEpTQzo6anNVbmRlZmluZWQoKSk7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93
ZWQoKSk7CiAKLSAgICBhdXRvIG5ld1JlYWRhYmxlU3RyZWFtID0ganNEeW5hbWljQ2FzdDxKU1Jl
YWRhYmxlU3RyZWFtKj4odm0sIEpTQzo6Y29uc3RydWN0KCZleGVjU3RhdGUsIGNvbnN0cnVjdG9y
LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzKSk7CisgICAgYXV0byBuZXdSZWFk
YWJsZVN0cmVhbSA9IGpzRHluYW1pY0Nhc3Q8SlNSZWFkYWJsZVN0cmVhbSo+KHZtLCBKU0M6OmNv
bnN0cnVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3RydWN0b3IsIGNvbnN0cnVjdFR5cGUs
IGNvbnN0cnVjdERhdGEsIGFyZ3MpKTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
CiAgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QsICpuZXdSZWFkYWJsZVN0cmVhbSk7CiB9
CiAKIG5hbWVzcGFjZSBSZWFkYWJsZVN0cmVhbUludGVybmFsIHsKLXN0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGNhbGxGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSBqc0Z1bmN0aW9uLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
IGFyZ3VtZW50cykKK3N0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGNhbGxGdW5jdGlvbihKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUganNGdW5j
dGlvbiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmd1bWVu
dHMpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgYXV0byBjYWxsVHlwZSA9IEpTQzo6
Z2V0Q2FsbERhdGEodm0sIGpzRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBBU1NFUlQoY2FsbFR5
cGUgIT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSk7Ci0gICAgYXV0byByZXN1bHQgPSBjYWxsKCZzdGF0
ZSwganNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cyk7
CisgICAgYXV0byByZXN1bHQgPSBjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBqc0Z1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJndW1lbnRzKTsKICAgICBzY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC03NSwzNiArNzUs
MzYgQEAgc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgY2FsbEZ1bmN0aW9uKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzRnUKIAogdm9pZCBSZWFkYWJsZVN0cmVhbTo6cGlw
ZVRvKFJlYWRhYmxlU3RyZWFtU2luayYgc2luaykKIHsKLSAgICBhdXRvJiBzdGF0ZSA9ICptX2ds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTVk1DbGllbnREYXRhKiBjbGllbnREYXRh
ID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihzdGF0ZS52bSgpLmNsaWVudERhdGEpOwor
ICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSAqbV9nbG9iYWxPYmplY3Q7CisgICAgSlNW
TUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KGxl
eGljYWxHbG9iYWxPYmplY3Qudm0oKS5jbGllbnREYXRhKTsKICAgICBjb25zdCBJZGVudGlmaWVy
JiBwcml2YXRlTmFtZSA9IGNsaWVudERhdGEtPmJ1aWx0aW5GdW5jdGlvbnMoKS5yZWFkYWJsZVN0
cmVhbUludGVybmFsc0J1aWx0aW5zKCkucmVhZGFibGVTdHJlYW1QaXBlVG9Qcml2YXRlTmFtZSgp
OwogCi0gICAgYXV0byByZWFkYWJsZVN0cmVhbVBpcGVUbyA9IG1fZ2xvYmFsT2JqZWN0LT5nZXQo
JnN0YXRlLCBwcml2YXRlTmFtZSk7Ci0gICAgQVNTRVJUKHJlYWRhYmxlU3RyZWFtUGlwZVRvLmlz
RnVuY3Rpb24oc3RhdGUudm0oKSkpOworICAgIGF1dG8gcmVhZGFibGVTdHJlYW1QaXBlVG8gPSBt
X2dsb2JhbE9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcml2YXRlTmFtZSk7Cisg
ICAgQVNTRVJUKHJlYWRhYmxlU3RyZWFtUGlwZVRvLmlzRnVuY3Rpb24obGV4aWNhbEdsb2JhbE9i
amVjdC52bSgpKSk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAg
YXJndW1lbnRzLmFwcGVuZChyZWFkYWJsZVN0cmVhbSgpKTsKLSAgICBhcmd1bWVudHMuYXBwZW5k
KHRvSlMoJnN0YXRlLCBtX2dsb2JhbE9iamVjdC5nZXQoKSwgc2luaykpOworICAgIGFyZ3VtZW50
cy5hcHBlbmQodG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QuZ2V0KCks
IHNpbmspKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwotICAgIFJl
YWRhYmxlU3RyZWFtSW50ZXJuYWw6OmNhbGxGdW5jdGlvbihzdGF0ZSwgcmVhZGFibGVTdHJlYW1Q
aXBlVG8sIEpTQzo6anNVbmRlZmluZWQoKSwgYXJndW1lbnRzKTsKKyAgICBSZWFkYWJsZVN0cmVh
bUludGVybmFsOjpjYWxsRnVuY3Rpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgcmVhZGFibGVTdHJl
YW1QaXBlVG8sIEpTQzo6anNVbmRlZmluZWQoKSwgYXJndW1lbnRzKTsKIH0KIAogc3RkOjpwYWly
PFJlZjxSZWFkYWJsZVN0cmVhbT4sIFJlZjxSZWFkYWJsZVN0cmVhbT4+IFJlYWRhYmxlU3RyZWFt
Ojp0ZWUoKQogewotICAgIGF1dG8mIHN0YXRlID0gKm1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHN0YXRlLnZtKCkuY2xpZW50RGF0YSk7CisgICAgYXV0byYgbGV4aWNhbEdsb2Jh
bE9iamVjdCA9ICptX2dsb2JhbE9iamVjdDsKKyAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0
YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4obGV4aWNhbEdsb2JhbE9iamVjdC52bSgp
LmNsaWVudERhdGEpOwogICAgIGNvbnN0IElkZW50aWZpZXImIHByaXZhdGVOYW1lID0gY2xpZW50
RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMo
KS5yZWFkYWJsZVN0cmVhbVRlZVByaXZhdGVOYW1lKCk7CiAKLSAgICBhdXRvIHJlYWRhYmxlU3Ry
ZWFtVGVlID0gbV9nbG9iYWxPYmplY3QtPmdldCgmc3RhdGUsIHByaXZhdGVOYW1lKTsKLSAgICBB
U1NFUlQocmVhZGFibGVTdHJlYW1UZWUuaXNGdW5jdGlvbihzdGF0ZS52bSgpKSk7CisgICAgYXV0
byByZWFkYWJsZVN0cmVhbVRlZSA9IG1fZ2xvYmFsT2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxP
YmplY3QsIHByaXZhdGVOYW1lKTsKKyAgICBBU1NFUlQocmVhZGFibGVTdHJlYW1UZWUuaXNGdW5j
dGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCkpKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHJlYWRhYmxlU3RyZWFtKCkpOwog
ICAgIGFyZ3VtZW50cy5hcHBlbmQoSlNDOjpqc0Jvb2xlYW4odHJ1ZSkpOwogICAgIEFTU0VSVCgh
YXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgYXV0byByZXR1cm5lZFZhbHVlID0gUmVh
ZGFibGVTdHJlYW1JbnRlcm5hbDo6Y2FsbEZ1bmN0aW9uKHN0YXRlLCByZWFkYWJsZVN0cmVhbVRl
ZSwgSlNDOjpqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOworICAgIGF1dG8gcmV0dXJuZWRWYWx1
ZSA9IFJlYWRhYmxlU3RyZWFtSW50ZXJuYWw6OmNhbGxGdW5jdGlvbihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCByZWFkYWJsZVN0cmVhbVRlZSwgSlNDOjpqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOwog
Ci0gICAgYXV0byByZXN1bHRzID0gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8UmVhZGFibGVTdHJlYW0+Pjo6Y29udmVydChzdGF0ZSwgcmV0dXJuZWRWYWx1ZSk7CisgICAg
YXV0byByZXN1bHRzID0gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxJRExJbnRlcmZhY2U8UmVh
ZGFibGVTdHJlYW0+Pjo6Y29udmVydChsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXR1cm5lZFZhbHVl
KTsKIAogICAgIEFTU0VSVChyZXN1bHRzLnNpemUoKSA9PSAyKTsKICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIocmVzdWx0c1swXS5yZWxlYXNlTm9uTnVsbCgpLCByZXN1bHRzWzFdLnJlbGVhc2VO
b25OdWxsKCkpOwpAQCAtMTEyLDEzICsxMTIsMTMgQEAgc3RkOjpwYWlyPFJlZjxSZWFkYWJsZVN0
cmVhbT4sIFJlZjxSZWFkYWJsZVN0cmVhbT4+IFJlYWRhYmxlU3RyZWFtOjp0ZWUoKQogCiB2b2lk
IFJlYWRhYmxlU3RyZWFtOjpsb2NrKCkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9ICptX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byYg
bGV4aWNhbEdsb2JhbE9iamVjdCA9ICptX2dsb2JhbE9iamVjdDsKKyAgICBWTSYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOwogCiAgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KHZtLmNsaWVudERhdGEpOwogCi0gICAgYXV0byogY29uc3RydWN0b3IgPSBKU0M6OmFz
T2JqZWN0KG1fZ2xvYmFsT2JqZWN0LT5nZXQoJnN0YXRlLCBjbGllbnREYXRhLmJ1aWx0aW5OYW1l
cygpLlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlclByaXZhdGVOYW1lKCkpKTsKKyAgICBhdXRv
KiBjb25zdHJ1Y3RvciA9IEpTQzo6YXNPYmplY3QobV9nbG9iYWxPYmplY3QtPmdldCgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5SZWFkYWJsZVN0cmVhbURl
ZmF1bHRSZWFkZXJQcml2YXRlTmFtZSgpKSk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVj
dERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gY29uc3RydWN0b3ItPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3RvciwgY29uc3RydWN0RGF0
YSk7CkBAIC0xMjgsMTkgKzEyOCwxOSBAQCB2b2lkIFJlYWRhYmxlU3RyZWFtOjpsb2NrKCkKICAg
ICBhcmdzLmFwcGVuZChyZWFkYWJsZVN0cmVhbSgpKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3Zl
cmZsb3dlZCgpKTsKIAotICAgIEpTQzo6Y29uc3RydWN0KCZzdGF0ZSwgY29uc3RydWN0b3IsIGNv
bnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MpOworICAgIEpTQzo6Y29uc3RydWN0KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdHJ1Y3RvciwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0
RGF0YSwgYXJncyk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIH0KIAogc3RhdGlj
IGlubGluZSBib29sIGNoZWNrUmVhZGFibGVTdHJlYW0oSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgSlNSZWFkYWJsZVN0cmVhbSogcmVhZGFibGVTdHJlYW0sIEpTQzo6SlNWYWx1ZSBm
dW5jdGlvbikKIHsKLSAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QuZ2xvYmFsRXhlYygp
OworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAKICAgICBB
U1NFUlQoZnVuY3Rpb24pOwogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRz
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVhZGFibGVTdHJlYW0pOwogICAgIEFTU0VSVCghYXJn
dW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtSW50ZXJu
YWw6OmNhbGxGdW5jdGlvbihzdGF0ZSwgZnVuY3Rpb24sIEpTQzo6anNVbmRlZmluZWQoKSwgYXJn
dW1lbnRzKS5pc1RydWUoKTsKKyAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1JbnRlcm5hbDo6Y2Fs
bEZ1bmN0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBKU0M6OmpzVW5kZWZpbmVk
KCksIGFyZ3VtZW50cykuaXNUcnVlKCk7CiB9CiAKIGJvb2wgUmVhZGFibGVTdHJlYW06OmlzTG9j
a2VkKCkgY29uc3QKQEAgLTE1MywxMCArMTUzLDEwIEBAIGJvb2wgUmVhZGFibGVTdHJlYW06Omlz
RGlzdHVyYmVkKCkgY29uc3QKICAgICByZXR1cm4gY2hlY2tSZWFkYWJsZVN0cmVhbSgqZ2xvYmFs
T2JqZWN0KCksIHJlYWRhYmxlU3RyZWFtKCksIGdsb2JhbE9iamVjdCgpLT5idWlsdGluSW50ZXJu
YWxGdW5jdGlvbnMoKS5yZWFkYWJsZVN0cmVhbUludGVybmFscygpLm1faXNSZWFkYWJsZVN0cmVh
bURpc3R1cmJlZEZ1bmN0aW9uLmdldCgpKTsKIH0KIAotYm9vbCBSZWFkYWJsZVN0cmVhbTo6aXNE
aXN0dXJiZWQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK2Jvb2wgUmVhZGFibGVT
dHJlYW06OmlzRGlzdHVyYmVkKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvJiBn
bG9iYWxPYmplY3QgPSAqanNEeW5hbWljQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHZtLCBzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC52bSgpOworICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpqc0R5bmFtaWNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4odm0sICZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiByZWFk
YWJsZVN0cmVhbSA9IGpzRHluYW1pY0Nhc3Q8SlNSZWFkYWJsZVN0cmVhbSo+KHZtLCB2YWx1ZSk7
CiAKICAgICByZXR1cm4gY2hlY2tSZWFkYWJsZVN0cmVhbShnbG9iYWxPYmplY3QsIHJlYWRhYmxl
U3RyZWFtLCBnbG9iYWxPYmplY3QuYnVpbHRpbkludGVybmFsRnVuY3Rpb25zKCkucmVhZGFibGVT
dHJlYW1JbnRlcm5hbHMoKS5tX2lzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWRGdW5jdGlvbi5nZXQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVh
bS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW0uaAppbmRleCBi
ZTZkNjI5ZDU3MDhjMjkxMTM1MjJlNWVmY2ZiZTE1NjNlNjdkMTM3Li45ZmE0ZDk5MDJlYmZjODM4
MDc0MGVhZDExNjQwNzZjYmJhOGJhNjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9SZWFkYWJsZVN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtLmgKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgUmVhZGFibGVTdHJlYW0g
ZmluYWwgOiBwdWJsaWMgRE9NR3VhcmRlZDxKU1JlYWRhYmxlU3RyZWFtPiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxSZWFkYWJsZVN0cmVhbT4gY3JlYXRlKEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIEpTUmVhZGFibGVTdHJlYW0mIHJlYWRhYmxlU3RyZWFtKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IFJlYWRhYmxlU3RyZWFtKGdsb2JhbE9iamVjdCwgcmVhZGFibGVTdHJlYW0p
KTsgfQogCi0gICAgc3RhdGljIFJlZjxSZWFkYWJsZVN0cmVhbT4gY3JlYXRlKEpTQzo6RXhlY1N0
YXRlJiwgUmVmUHRyPFJlYWRhYmxlU3RyZWFtU291cmNlPiYmKTsKKyAgICBzdGF0aWMgUmVmPFJl
YWRhYmxlU3RyZWFtPiBjcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFJlZlB0cjxSZWFkYWJs
ZVN0cmVhbVNvdXJjZT4mJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBpc0Rp
c3R1cmJlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGJvb2wgaXNEaXN0dXJiZWQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNW
YWx1ZSk7CiAKICAgICBzdGQ6OnBhaXI8UmVmPFJlYWRhYmxlU3RyZWFtPiwgUmVmPFJlYWRhYmxl
U3RyZWFtPj4gdGVlKCk7CiAKQEAgLTU3LDEwICs1NywxMCBAQCBjbGFzcyBSZWFkYWJsZVN0cmVh
bSBmaW5hbCA6IHB1YmxpYyBET01HdWFyZGVkPEpTUmVhZGFibGVTdHJlYW0+IHsKIH07CiAKIHN0
cnVjdCBKU1JlYWRhYmxlU3RyZWFtV3JhcHBlckNvbnZlcnRlciB7Ci0gICAgc3RhdGljIFJlZlB0
cjxSZWFkYWJsZVN0cmVhbT4gdG9XcmFwcGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBSZWZQdHI8UmVhZGFibGVTdHJlYW0+IHRvV3JhcHBl
ZChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
dmFsdWUpCiAgICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAg
IGF1dG8qIGdsb2JhbE9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KHZtLCBzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgICAgICBKU0M6OlZNJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICBhdXRvKiBnbG9i
YWxPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPih2bSwgJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCkBAIC03OCw3ICs3OCw3IEBAIHRlbXBsYXRlPD4gc3RydWN0
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSZWFkYWJsZVN0cmVhbT4gewogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKIH07CiAKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBSZWFkYWJs
ZVN0cmVhbSogc3RyZWFtKQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUmVhZGFibGVTdHJlYW0qIHN0cmVhbSkKIHsK
ICAgICByZXR1cm4gc3RyZWFtID8gc3RyZWFtLT5yZWFkYWJsZVN0cmVhbSgpIDogSlNDOjpqc1Vu
ZGVmaW5lZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcAppbmRleCBjYjUzMDcyOTRm
NjAxMTcyMDE3YTY3MTNlZTdmZjJkOTdmYTE0MTczLi4wMWQ1MTUxNGI0ZjNmODZjZTI2ZDgzYjU0
MmMxZmRmNzllMzM4MzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9S
ZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcApAQCAtNDEsMjUg
KzQxLDI1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBKU0M6OkpT
VmFsdWUgcmVhZGFibGVTdHJlYW1DYWxsRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUganNGdW5jdGlvbiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgSlND
OjpBcmdMaXN0JiBhcmd1bWVudHMpCitzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1ZSByZWFkYWJs
ZVN0cmVhbUNhbGxGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUganNGdW5jdGlvbiwgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmd1bWVudHMpCiB7CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0
YTsKLSAgICBhdXRvIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YShzdGF0ZS52bSgpLCBqc0Z1
bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgcmV0dXJuIGNhbGwoJnN0YXRlLCBqc0Z1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJndW1lbnRzKTsKKyAgICBhdXRvIGNhbGxU
eXBlID0gSlNDOjpnZXRDYWxsRGF0YShsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIGpzRnVuY3Rp
b24sIGNhbGxEYXRhKTsKKyAgICByZXR1cm4gY2FsbCgmbGV4aWNhbEdsb2JhbE9iamVjdCwganNG
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cyk7CiB9CiAK
LUpTQzo6SlNWYWx1ZSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjppbnZva2UoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0JiBvYmplY3QsIGNvbnN0IGNoYXIqIHBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlIHBhcmFtZXRlcikKK0pTQzo6SlNWYWx1ZSBSZWFkYWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjppbnZva2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSBwYXJhbWV0ZXIpCiB7Ci0gICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIEpTQzo6Vk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwog
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8gZnVuY3Rpb24gPSBvYmplY3QuZ2V0KCZzdGF0
ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBh
dXRvIGZ1bmN0aW9uID0gb2JqZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CiAKICAgICBpZiAoIWZ1bmN0aW9uLmlzRnVu
Y3Rpb24odm0pKSB7CiAgICAgICAgIGlmICghZnVuY3Rpb24uaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsICJSZWFkYWJsZVN0cmVhbSB0cnlp
bmcgdG8gY2FsbCBhIHByb3BlcnR5IHRoYXQgaXMgbm90IGNhbGxhYmxlIl9zKTsKKyAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlJlYWRhYmxl
U3RyZWFtIHRyeWluZyB0byBjYWxsIGEgcHJvcGVydHkgdGhhdCBpcyBub3QgY2FsbGFibGUiX3Mp
OwogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIH0KIApAQCAtNjcsNyAr
NjcsNyBAQCBKU0M6OkpTVmFsdWUgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6aW52
b2tlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOgogICAgIGFyZ3VtZW50cy5hcHBlbmQocGFy
YW1ldGVyKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50cy5oYXNPdmVyZmxvd2VkKCkpOwogCi0gICAg
cmV0dXJuIHJlYWRhYmxlU3RyZWFtQ2FsbEZ1bmN0aW9uKHN0YXRlLCBmdW5jdGlvbiwgJm9iamVj
dCwgYXJndW1lbnRzKTsKKyAgICByZXR1cm4gcmVhZGFibGVTdHJlYW1DYWxsRnVuY3Rpb24obGV4
aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sICZvYmplY3QsIGFyZ3VtZW50cyk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAppbmRleCBhN2U0ZTdh
YmZhOTI1ZjA3Nzc4Yjk3YmNhNTg3MTFhOTFmNDFhYzI0Li4yM2E2ZWQ3ZWE1NDI4MmEwZWM5NzBh
ODk3NTk0Y2E3OTk3MGE3ODRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oCkBAIC00NSwyMSAr
NDUsMjAgQEAgY2xhc3MgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciB7CiBwdWJsaWM6
CiAgICAgZXhwbGljaXQgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcihKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIpIDogbV9qc0NvbnRyb2xsZXIoY29u
dHJvbGxlcikgeyB9CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGludm9rZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNPYmplY3QmLCBjb25zdCBjaGFyKiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGludm9rZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09i
amVjdCYsIGNvbnN0IGNoYXIqLCBKU0M6OkpTVmFsdWUpOwogCiAgICAgYm9vbCBlbnF1ZXVlKFJl
ZlB0cjxKU0M6OkFycmF5QnVmZmVyPiYmKTsKIAogICAgIHZvaWQgZXJyb3IoY29uc3QgRXhjZXB0
aW9uJik7CiAKLSAgICB2b2lkIGNsb3NlKCkgeyBpbnZva2UoKmdsb2JhbE9iamVjdCgpLmdsb2Jh
bEV4ZWMoKSwganNDb250cm9sbGVyKCksICJjbG9zZSIsIEpTQzo6anNVbmRlZmluZWQoKSk7IH0K
KyAgICB2b2lkIGNsb3NlKCkgeyBpbnZva2UoZ2xvYmFsT2JqZWN0KCksIGpzQ29udHJvbGxlcigp
LCAiY2xvc2UiLCBKU0M6OmpzVW5kZWZpbmVkKCkpOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBl
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBpbnZva2Uo
c3RhdGUsIGpzQ29udHJvbGxlcigpLCAiZXJyb3IiLCB2YWx1ZSk7IH0KLSAgICB2b2lkIGVucXVl
dWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgaW52b2tlKHN0
YXRlLCBqc0NvbnRyb2xsZXIoKSwgImVucXVldWUiLCB2YWx1ZSk7IH0KKyAgICB2b2lkIGVycm9y
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyBpbnZva2UobGV4aWNhbEdsb2JhbE9iamVjdCwganNDb250cm9sbGVyKCksICJlcnJv
ciIsIHZhbHVlKTsgfQorICAgIHZvaWQgZW5xdWV1ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgaW52b2tlKGxleGljYWxHbG9i
YWxPYmplY3QsIGpzQ29udHJvbGxlcigpLCAiZW5xdWV1ZSIsIHZhbHVlKTsgfQogICAgIEpTUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciYganNDb250cm9sbGVyKCkgY29uc3Q7CiAKICAg
ICBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KCkgY29uc3Q7Ci0gICAgSlNDOjpFeGVj
U3RhdGUmIGdsb2JhbEV4ZWMoKSBjb25zdDsKIAogICAgIC8vIFRoZSBvd25lciBvZiBSZWFkYWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGtlZXAgdW5jb2xsZWN0
ZWQgdGhlIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci4KICAgICBKU1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIqIG1fanNDb250cm9sbGVyIHsgbnVsbHB0ciB9OwpAQCAt
NzgsMzYgKzc3LDMwIEBAIGlubGluZSBKU0RPTUdsb2JhbE9iamVjdCYgUmVhZGFibGVTdHJlYW1E
ZWZhdWx0Q29udHJvbGxlcjo6Z2xvYmFsT2JqZWN0KCkgY29uc3QKICAgICByZXR1cm4gKnN0YXRp
Y19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9qc0NvbnRyb2xsZXItPmdsb2JhbE9iamVjdCgp
KTsKIH0KIAotaW5saW5lIEpTQzo6RXhlY1N0YXRlJiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250
cm9sbGVyOjpnbG9iYWxFeGVjKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KCku
Z2xvYmFsRXhlYygpKTsKLSAgICByZXR1cm4gKmdsb2JhbE9iamVjdCgpLmdsb2JhbEV4ZWMoKTsK
LX0KLQogaW5saW5lIGJvb2wgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6ZW5xdWV1
ZShSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4mJiBidWZmZXIpCiB7CiAgICAgYXV0byYgZ2xvYmFs
T2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxP
YmplY3Qudm0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUgPSBnbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCA9IGdsb2JhbE9iamVjdDsKIAogICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIGVy
cm9yKHN0YXRlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSkpOworICAgICAgICBlcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgYXV0byBsZW5n
dGggPSBidWZmZXItPmJ5dGVMZW5ndGgoKTsKICAgICBhdXRvIGNodW5rID0gSlNDOjpVaW50OEFy
cmF5OjpjcmVhdGUoV1RGTW92ZShidWZmZXIpLCAwLCBsZW5ndGgpOwotICAgIGVucXVldWUoc3Rh
dGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBjaHVuay5wdHIoKSkpOworICAgIGVucXVl
dWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2Jh
bE9iamVjdCwgY2h1bmsucHRyKCkpKTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCiBpbmxpbmUgdm9pZCBSZWFkYWJsZVN0cmVhbURlZmF1bHRD
b250cm9sbGVyOjplcnJvcihjb25zdCBFeGNlcHRpb24mIGV4Y2VwdGlvbikKIHsKLSAgICBKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUgPSBnbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9ja2VyKCZzdGF0ZSk7Ci0gICAgZXJyb3Ioc3RhdGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3Rh
dGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5tZXNzYWdlKCkpKTsKKyAgICBKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0KCk7CisgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBlcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjcmVhdGVET01FeGNlcHRpb24oJmxleGljYWxHbG9iYWxP
YmplY3QsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5tZXNzYWdlKCkpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NoZWR1bGVkQWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHAKaW5kZXggYjYzMTVhMmFmN2QxZjk1MTgzNGI3NWZjMGU2Yjk4NTQwZDc3
ZTNhYi4uMjhjZjU2NDY2YmNhM2M5YzJkMjA4ODk1MWM5ODA4MmZkYjUxYTg1NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCkBAIC0xMDAsMjcg
KzEwMCwyNyBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5Db250ZXh0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVgogICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmd1bWVudHM7CiAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IG1fYXJndW1lbnRzKQogICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50LmdldCgpKTsKICAgICBpZiAoVU5MSUtFTFkoYXJn
dW1lbnRzLmhhc092ZXJmbG93ZWQoKSkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+IGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uKTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3Qs
IGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBKU0V4ZWNTdGF0ZTo6
aW5zdHJ1bWVudEZ1bmN0aW9uQ2FsbCgmY29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKIAog
ICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiBleGNlcHRpb247Ci0gICAgSlNFeGVjU3RhdGU6
OnByb2ZpbGVkQ2FsbChleGVjLCBKU0M6OlByb2ZpbGluZ1JlYXNvbjo6T3RoZXIsIG1fZnVuY3Rp
b24uZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMsIGV4Y2Vw
dGlvbik7CisgICAgSlNFeGVjU3RhdGU6OnByb2ZpbGVkQ2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlByb2ZpbGluZ1JlYXNvbjo6T3RoZXIsIG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxUeXBl
LCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CiAKICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbigmY29udGV4dCk7CiAKICAgICBp
ZiAoZXhjZXB0aW9uKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsK
KyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7
CiB9CiAKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKERvY3VtZW50JiBkb2N1bWVudCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5k
ZXggYWIwNDE1NmZlMDllMzA1YjBjZjgzYzUxMTMyZWUzMTliZWRhZjgzMS4uMzE1NTRkZTNjYTU5
MWJhMjI1NTBjY2FiNDA4M2I2OGZiMGNlNTUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCBKU1ZhbHVl
IFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2Rl
JiBzb3VyY2VDb2RlLCBETwogICAgIC8vIGV4cGVjdGVkIHZhbHVlIGluIGFsbCBjYXNlcy4KICAg
ICAvLyBTZWUgc21hcnQgd2luZG93Lm9wZW4gcG9saWN5IGZvciB3aGVyZSB0aGlzIGlzIHVzZWQu
CiAgICAgYXV0byYgcHJveHkgPSBqc1dpbmRvd1Byb3h5KHdvcmxkKTsKLSAgICBhdXRvJiBleGVj
ID0gKnByb3h5LndpbmRvdygpLT5nbG9iYWxFeGVjKCk7CisgICAgYXV0byYgbGV4aWNhbEdsb2Jh
bE9iamVjdCA9ICpwcm94eS53aW5kb3coKTsKICAgICBjb25zdCBTdHJpbmcqIHNhdmVkU291cmNl
VVJMID0gbV9zb3VyY2VVUkw7CiAgICAgbV9zb3VyY2VVUkwgPSAmc291cmNlVVJMOwogCkBAIC0x
MzEsMTIgKzEzMSwxMiBAQCBKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3Js
ZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBETwogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0KG1fZnJhbWUsIHNvdXJjZVVSTCwgc291
cmNlQ29kZS5zdGFydExpbmUoKSwgc291cmNlQ29kZS5zdGFydENvbHVtbigpKTsKIAogICAgIE5h
a2VkUHRyPEpTQzo6RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwotICAgIEpTVmFsdWUg
cmV0dXJuVmFsdWUgPSBKU0V4ZWNTdGF0ZTo6cHJvZmlsZWRFdmFsdWF0ZSgmZXhlYywgSlNDOjpQ
cm9maWxpbmdSZWFzb246Ok90aGVyLCBqc1NvdXJjZUNvZGUsICZwcm94eSwgZXZhbHVhdGlvbkV4
Y2VwdGlvbik7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTRXhlY1N0YXRlOjpwcm9maWxl
ZEV2YWx1YXRlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlByb2ZpbGluZ1JlYXNvbjo6T3Ro
ZXIsIGpzU291cmNlQ29kZSwgJnByb3h5LCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKIAogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQobV9mcmFtZSk7CiAKICAg
ICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJmV4
ZWMsIGV2YWx1YXRpb25FeGNlcHRpb24sIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCksIGV4Y2Vw
dGlvbkRldGFpbHMpOworICAgICAgICByZXBvcnRFeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmpl
Y3QsIGV2YWx1YXRpb25FeGNlcHRpb24sIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCksIGV4Y2Vw
dGlvbkRldGFpbHMpOwogICAgICAgICBtX3NvdXJjZVVSTCA9IHNhdmVkU291cmNlVVJMOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTE1NSw5ICsxNTUsOSBAQCB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmxvYWRNb2R1bGVTY3JpcHRJbldvcmxkKExvYWRhYmxlTW9kdWxlU2NyaXB0JiBt
b2R1bGVTY3JpcAogICAgIEpTTG9ja0hvbGRlciBsb2NrKHdvcmxkLnZtKCkpOwogCiAgICAgYXV0
byYgcHJveHkgPSBqc1dpbmRvd1Byb3h5KHdvcmxkKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpwcm94
eS53aW5kb3coKS0+Z2xvYmFsRXhlYygpOworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3Qg
PSAqcHJveHkud2luZG93KCk7CiAKLSAgICBhdXRvJiBwcm9taXNlID0gSlNFeGVjU3RhdGU6Omxv
YWRNb2R1bGUoc3RhdGUsIG1vZHVsZU5hbWUsIEpTQzo6SlNTY3JpcHRGZXRjaFBhcmFtZXRlcnM6
OmNyZWF0ZShzdGF0ZS52bSgpLCBXVEZNb3ZlKHRvcExldmVsRmV0Y2hQYXJhbWV0ZXJzKSksIEpT
Qzo6SlNTY3JpcHRGZXRjaGVyOjpjcmVhdGUoc3RhdGUudm0oKSwgeyAmbW9kdWxlU2NyaXB0IH0p
KTsKKyAgICBhdXRvJiBwcm9taXNlID0gSlNFeGVjU3RhdGU6OmxvYWRNb2R1bGUobGV4aWNhbEds
b2JhbE9iamVjdCwgbW9kdWxlTmFtZSwgSlNDOjpKU1NjcmlwdEZldGNoUGFyYW1ldGVyczo6Y3Jl
YXRlKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgV1RGTW92ZSh0b3BMZXZlbEZldGNoUGFyYW1l
dGVycykpLCBKU0M6OkpTU2NyaXB0RmV0Y2hlcjo6Y3JlYXRlKGxleGljYWxHbG9iYWxPYmplY3Qu
dm0oKSwgeyAmbW9kdWxlU2NyaXB0IH0pKTsKICAgICBzZXR1cE1vZHVsZVNjcmlwdEhhbmRsZXJz
KG1vZHVsZVNjcmlwdCwgcHJvbWlzZSwgd29ybGQpOwogfQogCkBAIC0xNzEsOSArMTcxLDkgQEAg
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpsb2FkTW9kdWxlU2NyaXB0SW5Xb3JsZChMb2FkYWJsZU1v
ZHVsZVNjcmlwdCYgbW9kdWxlU2NyaXAKICAgICBKU0xvY2tIb2xkZXIgbG9jayh3b3JsZC52bSgp
KTsKIAogICAgIGF1dG8mIHByb3h5ID0ganNXaW5kb3dQcm94eSh3b3JsZCk7Ci0gICAgYXV0byYg
c3RhdGUgPSAqcHJveHkud2luZG93KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBhdXRvJiBsZXhpY2Fs
R2xvYmFsT2JqZWN0ID0gKnByb3h5LndpbmRvdygpOwogCi0gICAgYXV0byYgcHJvbWlzZSA9IEpT
RXhlY1N0YXRlOjpsb2FkTW9kdWxlKHN0YXRlLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBK
U0M6OkpTU2NyaXB0RmV0Y2hlcjo6Y3JlYXRlKHN0YXRlLnZtKCksIHsgJm1vZHVsZVNjcmlwdCB9
KSk7CisgICAgYXV0byYgcHJvbWlzZSA9IEpTRXhlY1N0YXRlOjpsb2FkTW9kdWxlKGxleGljYWxH
bG9iYWxPYmplY3QsIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIEpTQzo6SlNTY3JpcHRGZXRj
aGVyOjpjcmVhdGUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCB7ICZtb2R1bGVTY3JpcHQgfSkp
OwogICAgIHNldHVwTW9kdWxlU2NyaXB0SGFuZGxlcnMobW9kdWxlU2NyaXB0LCBwcm9taXNlLCB3
b3JsZCk7CiB9CiAKQEAgLTE4OCwxOCArMTg4LDE4IEBAIEpTQzo6SlNWYWx1ZSBTY3JpcHRDb250
cm9sbGVyOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGVTY3JpcHRJbldvcmxkKExvYWRhYmxlTW9kdWxl
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgYXV0byYgcHJveHkgPSBqc1dpbmRv
d1Byb3h5KHdvcmxkKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpwcm94eS53aW5kb3coKS0+Z2xvYmFs
RXhlYygpOworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSAqcHJveHkud2luZG93KCk7
CiAKICAgICAvLyBGSVhNRTogUHJldmVudGluZyBGcmFtZSBmcm9tIGJlaW5nIGRlc3Ryb3llZCBp
cyBlc3NlbnRpYWxseSB1bm5lY2Vzc2FyeS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NzYzCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFt
ZSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsK
LSAgICBhdXRvIHJldHVyblZhbHVlID0gSlNFeGVjU3RhdGU6OmxpbmtBbmRFdmFsdWF0ZU1vZHVs
ZShzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgbW9kdWxlU2NyaXB0Lm1vZHVsZUtleSgp
KSwganNVbmRlZmluZWQoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgYXV0byByZXR1cm5W
YWx1ZSA9IEpTRXhlY1N0YXRlOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUobGV4aWNhbEdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgbW9kdWxlU2NyaXB0Lm1vZHVsZUtleSgpKSwg
anNVbmRlZmluZWQoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgaWYgKGV2YWx1YXRpb25F
eGNlcHRpb24pIHsKICAgICAgICAgLy8gRklYTUU6IEdpdmUgYSBjaGFuY2UgdG8gZHVtcCB0aGUg
c3RhY2sgdHJhY2UgaWYgdGhlICJjcm9zc29yaWdpbiIgYXR0cmlidXRlIGFsbG93cy4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDUzOQotICAg
ICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCBldmFsdWF0aW9uRXhjZXB0aW9uLCBudWxscHRy
KTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBldmFsdWF0
aW9uRXhjZXB0aW9uLCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgfQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKQEAgLTIxNywxMyArMjE3LDEzIEBAIEpTQzo6
SlNWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZU1vZHVsZShjb25zdCBVUkwmIHNvdXJj
ZVVSTCwgSlNNb2R1bGVSZWNvCiAgICAgY29uc3QgYXV0byYganNTb3VyY2VDb2RlID0gbW9kdWxl
UmVjb3JkLnNvdXJjZUNvZGUoKTsKIAogICAgIGF1dG8mIHByb3h5ID0ganNXaW5kb3dQcm94eSh3
b3JsZCk7Ci0gICAgYXV0byYgc3RhdGUgPSAqcHJveHkud2luZG93KCktPmdsb2JhbEV4ZWMoKTsK
KyAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gKnByb3h5LndpbmRvdygpOwogICAgIFNl
dEZvclNjb3BlPGNvbnN0IFN0cmluZyo+IHNvdXJjZVVSTFNjb3BlKG1fc291cmNlVVJMLCAmc291
cmNlVVJMLnN0cmluZygpKTsKIAogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwog
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQobV9mcmFt
ZSwgc291cmNlVVJMLCBqc1NvdXJjZUNvZGUuZmlyc3RMaW5lKCkub25lQmFzZWRJbnQoKSwganNT
b3VyY2VDb2RlLnN0YXJ0Q29sdW1uKCkub25lQmFzZWRJbnQoKSk7Ci0gICAgYXV0byByZXR1cm5W
YWx1ZSA9IG1vZHVsZVJlY29yZC5ldmFsdWF0ZSgmc3RhdGUpOworICAgIGF1dG8gcmV0dXJuVmFs
dWUgPSBtb2R1bGVSZWNvcmQuZXZhbHVhdGUoJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRXZhbHVhdGVTY3JpcHQobV9mcmFtZSk7CiAKICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CkBAIC0yNjIsMTggKzI2MiwxOCBAQCB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmluaXRTY3JpcHRGb3JXaW5kb3dQcm94eShKU1dpbmRvd1Byb3h5JiB3aW5kb3dQ
cm94eSkKICAgICBtX2ZyYW1lLmxvYWRlcigpLmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJ
bldvcmxkKHdvcmxkKTsKIH0KIAotc3RhdGljIElkZW50aWZpZXIganNWYWx1ZVRvTW9kdWxlS2V5
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBJZGVudGlmaWVyIGpzVmFs
dWVUb01vZHVsZUtleShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJuIElk
ZW50aWZpZXI6OmZyb21VaWQoanNDYXN0PFN5bWJvbCo+KHZhbHVlKS0+cHJpdmF0ZU5hbWUoKSk7
CiAgICAgQVNTRVJUKHZhbHVlLmlzU3RyaW5nKCkpOwotICAgIHJldHVybiBhc1N0cmluZyh2YWx1
ZSktPnRvSWRlbnRpZmllcihleGVjKTsKKyAgICByZXR1cm4gYXNTdHJpbmcodmFsdWUpLT50b0lk
ZW50aWZpZXIobGV4aWNhbEdsb2JhbE9iamVjdCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6c2V0dXBNb2R1bGVTY3JpcHRIYW5kbGVycyhMb2FkYWJsZU1vZHVsZVNjcmlwdCYgbW9kdWxl
U2NyaXB0UmVmLCBKU0ludGVybmFsUHJvbWlzZSYgcHJvbWlzZSwgRE9NV3JhcHBlcldvcmxkJiB3
b3JsZCkKIHsKICAgICBhdXRvJiBwcm94eSA9IGpzV2luZG93UHJveHkod29ybGQpOwotICAgIGF1
dG8mIHN0YXRlID0gKnByb3h5LndpbmRvdygpLT5nbG9iYWxFeGVjKCk7CisgICAgYXV0byYgbGV4
aWNhbEdsb2JhbE9iamVjdCA9ICpwcm94eS53aW5kb3coKTsKIAogICAgIC8vIEl0IGlzIG5vdCBn
dWFyYW50ZWVkIHRoYXQgZWl0aGVyIGZ1bGZpbGxIYW5kbGVyIG9yIHJlamVjdEhhbmRsZXIgaXMg
ZXZlbnR1YWxseSBjYWxsZWQuCiAgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSBwYWdlIGxvYWQg
aXMgY2FuY2VsZWQsIHRoZSBEZWZlcnJlZFByb21pc2UgdXNlZCBpbiB0aGUgbW9kdWxlIGxvYWRl
ciBwaXBlbGluZSB3aWxsIHN0b3AgZXhlY3V0aW5nIEpTIGNvZGUuCkBAIC0yODEsMTYgKzI4MSwx
NiBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnNldHVwTW9kdWxlU2NyaXB0SGFuZGxlcnMoTG9h
ZGFibGVNb2R1bGVTY3JpcHQmIG1vZHVsZVNjcgogCiAgICAgUmVmUHRyPExvYWRhYmxlTW9kdWxl
U2NyaXB0PiBtb2R1bGVTY3JpcHQoJm1vZHVsZVNjcmlwdFJlZik7CiAKLSAgICBhdXRvJiBmdWxm
aWxsSGFuZGxlciA9ICpKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUoc3RhdGUudm0oKSwgcHJv
eHkud2luZG93KCksIDEsIFN0cmluZygpLCBbbW9kdWxlU2NyaXB0XShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkgLT4gSlNDOjpFbmNvZGVkSlNWYWx1
ZSB7CisgICAgYXV0byYgZnVsZmlsbEhhbmRsZXIgPSAqSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3Jl
YXRlKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgcHJveHkud2luZG93KCksIDEsIFN0cmluZygp
LCBbbW9kdWxlU2NyaXB0XShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkgLT4gSlNDOjpFbmNvZGVkSlNWYWx1ZSB7CiAgICAgICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgICAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IGpzVmFsdWVUb01vZHVsZUtl
eShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgICAgICBJZGVudGlmaWVy
IG1vZHVsZUtleSA9IGpzVmFsdWVUb01vZHVsZUtleShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICBtb2R1bGVTY3JpcHQtPm5vdGlmeUxvYWRDb21wbGV0ZWQoKm1vZHVsZUtleS5pbXBs
KCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0pOwogCi0gICAgYXV0byYgcmVqZWN0SGFuZGxlciA9ICpKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpj
cmVhdGUoc3RhdGUudm0oKSwgcHJveHkud2luZG93KCksIDEsIFN0cmluZygpLCBbbW9kdWxlU2Ny
aXB0XShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkg
eworICAgIGF1dG8mIHJlamVjdEhhbmRsZXIgPSAqSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRl
KGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgcHJveHkud2luZG93KCksIDEsIFN0cmluZygpLCBb
bW9kdWxlU2NyaXB0XShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkgewogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IEpTVmFsdWUgZXJyb3JWYWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgICAgIGlm
IChlcnJvclZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTMxOCwxMyArMzE4LDEzIEBAIHZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6c2V0dXBNb2R1bGVTY3JpcHRIYW5kbGVycyhMb2FkYWJsZU1vZHVsZVNj
cmlwdCYgbW9kdWxlU2NyCiAgICAgICAgICAgICBMb2FkYWJsZVNjcmlwdDo6Q29uc29sZU1lc3Nh
Z2UgewogICAgICAgICAgICAgICAgIE1lc3NhZ2VTb3VyY2U6OkpTLAogICAgICAgICAgICAgICAg
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsCi0gICAgICAgICAgICAgICAgcmV0cmlldmVFcnJvck1lc3Nh
Z2UoKmNhbGxGcmFtZSwgdm0sIGVycm9yVmFsdWUsIHNjb3BlKSwKKyAgICAgICAgICAgICAgICBy
ZXRyaWV2ZUVycm9yTWVzc2FnZSgqZ2xvYmFsT2JqZWN0LCB2bSwgZXJyb3JWYWx1ZSwgc2NvcGUp
LAogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9KTsKIAotICAgIHByb21pc2UudGhlbigmc3RhdGUs
ICZmdWxmaWxsSGFuZGxlciwgJnJlamVjdEhhbmRsZXIpOworICAgIHByb21pc2UudGhlbigmbGV4
aWNhbEdsb2JhbE9iamVjdCwgJmZ1bGZpbGxIYW5kbGVyLCAmcmVqZWN0SGFuZGxlcik7CiB9CiAK
IFdpbmRvd1Byb3h5JiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dQcm94eSgpCkBAIC0zODYsMTUg
KzM4NiwxNSBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVXZWJBc3NlbWJseShjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKIAogYm9vbCBTY3JpcHRDb250cm9sbGVyOjpjYW5BY2Nl
c3NGcm9tQ3VycmVudE9yaWdpbihGcmFtZSogZnJhbWUsIERvY3VtZW50JiBhY2Nlc3NpbmdEb2N1
bWVudCkKIHsKLSAgICBhdXRvKiBzdGF0ZSA9IEpTRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKTsK
KyAgICBhdXRvKiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gSlNFeGVjU3RhdGU6OmN1cnJlbnRTdGF0
ZSgpOwogCi0gICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgbnVsbCB3ZSBzaG91bGQgdXNl
IHRoZSBhY2Nlc3NpbmcgZG9jdW1lbnQgZm9yIHRoZSBzZWN1cml0eSBjaGVjay4KLSAgICBpZiAo
IXN0YXRlKSB7CisgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGV4aWNhbEdsb2JhbE9iamVjdCBpcyBu
dWxsIHdlIHNob3VsZCB1c2UgdGhlIGFjY2Vzc2luZyBkb2N1bWVudCBmb3IgdGhlIHNlY3VyaXR5
IGNoZWNrLgorICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdCkgewogICAgICAgICBhdXRvKiB0
YXJnZXREb2N1bWVudCA9IGZyYW1lID8gZnJhbWUtPmRvY3VtZW50KCkgOiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gdGFyZ2V0RG9jdW1lbnQgJiYgYWNjZXNzaW5nRG9jdW1lbnQuc2VjdXJpdHlP
cmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpOwogICAg
IH0KIAotICAgIHJldHVybiBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFt
ZShzdGF0ZSwgZnJhbWUpOworICAgIHJldHVybiBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9GcmFtZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBmcmFtZSk7CiB9CiAKIHZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQpAQCAtNDQxLDEyICs0NDEsMTIgQEAgUmVm
PEJpbmRpbmdzOjpSb290T2JqZWN0PiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVSb290T2JqZWN0
KHZvaWQqIG5hdGl2ZUhhbmRsZSkKICAgICByZXR1cm4gcm9vdE9iamVjdDsKIH0KIAotdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyhWZWN0b3I8c3RkOjpwYWly
PEpTQzo6RXhlY1N0YXRlKiwgU2VjdXJpdHlPcmlnaW4qPj4mIHJlc3VsdCkKK3ZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0ZDo6cGFpcjxKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgU2VjdXJpdHlPcmlnaW4qPj4mIHJlc3VsdCkKIHsKICAgICBmb3Ig
KGF1dG8mIGpzV2luZG93UHJveHkgOiB3aW5kb3dQcm94eSgpLmpzV2luZG93UHJveGllc0FzVmVj
dG9yKCkpIHsKLSAgICAgICAgYXV0byogZXhlYyA9IGpzV2luZG93UHJveHktPndpbmRvdygpLT5n
bG9iYWxFeGVjKCk7CisgICAgICAgIGF1dG8qIGxleGljYWxHbG9iYWxPYmplY3QgPSBqc1dpbmRv
d1Byb3h5LT53aW5kb3coKTsKICAgICAgICAgYXV0byogb3JpZ2luID0gJmRvd25jYXN0PERPTVdp
bmRvdz4oanNXaW5kb3dQcm94eS0+d3JhcHBlZCgpKS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGV4ZWMsIG9yaWdpbikp
OworICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGxleGljYWxHbG9iYWxPYmpl
Y3QsIG9yaWdpbikpOwogICAgIH0KIH0KIApAQCAtNDk0LDcgKzQ5NCw3IEBAIEpTT2JqZWN0KiBT
Y3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1l
bnQqIHBsdWdpbikKICAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1l
bnQKICAgICBhdXRvKiBnbG9iYWxPYmogPSBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CiAg
ICAgLy8gRklYTUU6IGlzIG5vcm1hbCBva2F5PyAtIHVzZWQgZm9yIE5QIHBsdWdpbnM/Ci0gICAg
SlNWYWx1ZSBqc0VsZW1lbnRWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqLT5nbG9iYWxFeGVjKCksIGds
b2JhbE9iaiwgcGx1Z2luKTsKKyAgICBKU1ZhbHVlIGpzRWxlbWVudFZhbHVlID0gdG9KUyhnbG9i
YWxPYmosIGdsb2JhbE9iaiwgcGx1Z2luKTsKICAgICBpZiAoIWpzRWxlbWVudFZhbHVlIHx8ICFq
c0VsZW1lbnRWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAK
QEAgLTY0MCw3ICs2NDAsNyBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVJZkphdmFT
Y3JpcHRVUkwoY29uc3QgVVJMJiB1cmwsIFNob3VsZFJlcGxhY2VEb2N1bQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIFN0cmluZyBzY3JpcHRSZXN1bHQ7Ci0gICAgaWYgKCFyZXN1bHQgfHwg
IXJlc3VsdC5nZXRTdHJpbmcoanNXaW5kb3dQcm94eShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSku
d2luZG93KCktPmdsb2JhbEV4ZWMoKSwgc2NyaXB0UmVzdWx0KSkKKyAgICBpZiAoIXJlc3VsdCB8
fCAhcmVzdWx0LmdldFN0cmluZyhqc1dpbmRvd1Byb3h5KG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KS53aW5kb3coKSwgc2NyaXB0UmVzdWx0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGFsd2F5cyByZXBsYWNlIHRoZSBkb2N1bWVudCwgYnV0IGRvaW5n
IHNvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKaW5k
ZXggZGQxM2M3ZDMzMTEyMjk3M2NhYmRkMzViMzYyZTVlM2JhNzEwYmM3OC4uMTMyNzRhNWQxY2Y2
ZDUyYjRhMjZlYzQ4ZGI1MDBhYmZmZTMzZWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaApAQCAtNDQsNyArNDQsNiBAQCBjbGFzcyBDYWxsRnJh
bWU7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTSW50ZXJuYWxQcm9taXNlOwogY2xh
c3MgSlNNb2R1bGVSZWNvcmQ7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIG5hbWVz
cGFjZSBCaW5kaW5ncyB7CiBjbGFzcyBJbnN0YW5jZTsKQEAgLTE0OSw3ICsxNDgsNyBAQCBjbGFz
cyBTY3JpcHRDb250cm9sbGVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFNjcmlwdENvbnRyb2xs
ZXI+IHsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0
PiBjcmVhdGVSb290T2JqZWN0KHZvaWQqIG5hdGl2ZUhhbmRsZSk7CiAKLSAgICB2b2lkIGNvbGxl
Y3RJc29sYXRlZENvbnRleHRzKFZlY3RvcjxzdGQ6OnBhaXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1
cml0eU9yaWdpbio+PiYpOworICAgIHZvaWQgY29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9y
PHN0ZDo6cGFpcjxKU0M6OkpTR2xvYmFsT2JqZWN0KiwgU2VjdXJpdHlPcmlnaW4qPj4mKTsKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdFQkNPUkVfRVhQT1JUIFdlYlNjcmlwdE9iamVjdCog
d2luZG93U2NyaXB0T2JqZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlck1hYy5tbQppbmRleCBkZjk0NzZhMTZiYjNmYmM4YzQ4YzZlYzdkNjhi
M2MyZWJkNjVhMzdlLi45ODUzZDBhNjRmOTIzNzEwM2JkZDdiZGMyYTNmMmI3NDMxN2EyNjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMu
bW0KQEAgLTExNCw3ICsxMTQsNyBAQCBKU0NvbnRleHQgKlNjcmlwdENvbnRyb2xsZXI6OmphdmFT
Y3JpcHRDb250ZXh0KCkKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIGlmICghY2FuRXhl
Y3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxD
b250ZXh0UmVmOnRvR2xvYmFsUmVmKGJpbmRpbmdSb290T2JqZWN0KCktPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCkpXTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNv
bnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGJpbmRpbmdSb290T2JqZWN0
KCktPmdsb2JhbE9iamVjdCgpKV07CiAgICAgcmV0dXJuIGNvbnRleHQ7CiAjZWxzZQogICAgIHJl
dHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0TW9k
dWxlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE1vZHVsZUxv
YWRlci5jcHAKaW5kZXggNWVhZTIxMjA0NzI5MDllZTVmMDM1YjQwNjc5ODJlYWNjMzgxN2E3MC4u
MzM0NjhiYzFhNTM2MDJjMDFhMmMxNzIwNDQwNjBmZGFjYTM2NmZmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0TW9kdWxlTG9hZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRNb2R1bGVMb2FkZXIuY3BwCkBAIC04Niw5ICs4
Niw5IEBAIHN0YXRpYyBFeHBlY3RlZDxVUkwsIEFTQ0lJTGl0ZXJhbD4gcmVzb2x2ZU1vZHVsZVNw
ZWNpZmllcihEb2N1bWVudCYgZG9jdW1lbnQsIGNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNDOjpJZGVudGlmaWVyIFNjcmlwdE1vZHVsZUxvYWRlcjo6cmVzb2x2ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6
OkpTVmFsdWUgbW9kdWxlTmFtZVZhbHVlLCBKU0M6OkpTVmFsdWUgaW1wb3J0ZXJNb2R1bGVLZXks
IEpTQzo6SlNWYWx1ZSkKK0pTQzo6SWRlbnRpZmllciBTY3JpcHRNb2R1bGVMb2FkZXI6OnJlc29s
dmUoSlNDOjpKU0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3QsIEpTQzo6SlNNb2R1bGVMb2Fk
ZXIqLCBKU0M6OkpTVmFsdWUgbW9kdWxlTmFtZVZhbHVlLCBKU0M6OkpTVmFsdWUgaW1wb3J0ZXJN
b2R1bGVLZXksIEpTQzo6SlNWYWx1ZSkKIHsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNDOjpWTSYgdm0gPSBqc0dsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBXZSB1c2UgYSBTeW1ib2wgYXMg
YSBzcGVjaWFsIHB1cnBvc2U7IEl0IG1lYW5zIHRoaXMgbW9kdWxlIGlzIGFuIGlubGluZSBtb2R1
bGUuCkBAIC05OCwxMSArOTgsMTEgQEAgSlNDOjpJZGVudGlmaWVyIFNjcmlwdE1vZHVsZUxvYWRl
cjo6cmVzb2x2ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUKICAgICAgICAg
cmV0dXJuIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVVpZChhc1N5bWJvbChtb2R1bGVOYW1lVmFsdWUp
LT5wcml2YXRlTmFtZSgpKTsKIAogICAgIGlmICghbW9kdWxlTmFtZVZhbHVlLmlzU3RyaW5nKCkp
IHsKLSAgICAgICAgSlNDOjp0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgIkltcG9ydGVyIG1v
ZHVsZSBrZXkgaXMgbm90IGEgU3ltYm9sIG9yIGEgU3RyaW5nLiJfcyk7CisgICAgICAgIEpTQzo6
dGhyb3dUeXBlRXJyb3IoanNHbG9iYWxPYmplY3QsIHNjb3BlLCAiSW1wb3J0ZXIgbW9kdWxlIGtl
eSBpcyBub3QgYSBTeW1ib2wgb3IgYSBTdHJpbmcuIl9zKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAKLSAgICBTdHJpbmcgc3BlY2lmaWVyID0gYXNTdHJpbmcobW9kdWxlTmFtZVZhbHVl
KS0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIHNwZWNpZmllciA9IGFzU3RyaW5nKG1vZHVsZU5h
bWVWYWx1ZSktPnZhbHVlKGpzR2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgVVJMIGJhc2VVUkw7CkBAIC0xMTAsNyArMTEwLDcgQEAgSlND
OjpJZGVudGlmaWVyIFNjcmlwdE1vZHVsZUxvYWRlcjo6cmVzb2x2ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUKICAgICAgICAgYmFzZVVSTCA9IG1fZG9jdW1lbnQuYmFzZVVS
TCgpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQoaW1wb3J0ZXJNb2R1bGVLZXkuaXNTdHJp
bmcoKSk7Ci0gICAgICAgIFVSTCBpbXBvcnRlck1vZHVsZVJlcXVlc3RVUkwoVVJMKCksIGFzU3Ry
aW5nKGltcG9ydGVyTW9kdWxlS2V5KS0+dmFsdWUoZXhlYykpOworICAgICAgICBVUkwgaW1wb3J0
ZXJNb2R1bGVSZXF1ZXN0VVJMKFVSTCgpLCBhc1N0cmluZyhpbXBvcnRlck1vZHVsZUtleSktPnZh
bHVlKGpzR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaW1wb3J0
ZXJNb2R1bGVSZXF1ZXN0VVJMLmlzVmFsaWQoKSwgIkludmFsaWQgbW9kdWxlIHJlZmVycmVyIG5l
dmVyIHN0YXJ0cyBpbXBvcnRpbmcgZGVwZW5kZW50IG1vZHVsZXMuIik7CiAKICAgICAgICAgYXV0
byBpdGVyYXRvciA9IG1fcmVxdWVzdFVSTFRvUmVzcG9uc2VVUkxNYXAuZmluZChpbXBvcnRlck1v
ZHVsZVJlcXVlc3RVUkwpOwpAQCAtMTIwLDcgKzEyMCw3IEBAIEpTQzo6SWRlbnRpZmllciBTY3Jp
cHRNb2R1bGVMb2FkZXI6OnJlc29sdmUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0
YXRlCiAKICAgICBhdXRvIHJlc3VsdCA9IHJlc29sdmVNb2R1bGVTcGVjaWZpZXIobV9kb2N1bWVu
dCwgc3BlY2lmaWVyLCBiYXNlVVJMKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBKU0M6
OnRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIEpT
Qzo6dGhyb3dUeXBlRXJyb3IoanNHbG9iYWxPYmplY3QsIHNjb3BlLCByZXN1bHQuZXJyb3IoKSk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0xMjksMjUgKzEyOSwyNSBAQCBKU0M6
OklkZW50aWZpZXIgU2NyaXB0TW9kdWxlTG9hZGVyOjpyZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZQogCiBzdGF0aWMgdm9pZCByZWplY3RUb1Byb3BhZ2F0ZU5ldHdv
cmtFcnJvcihEZWZlcnJlZFByb21pc2UmIGRlZmVycmVkLCBNb2R1bGVGZXRjaEZhaWx1cmVLaW5k
IGZhaWx1cmVLaW5kLCBBU0NJSUxpdGVyYWwgbWVzc2FnZSkKIHsKLSAgICBkZWZlcnJlZC5yZWpl
Y3RXaXRoQ2FsbGJhY2soWyZdIChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JikgeworICAgIGRlZmVycmVkLnJlamVjdFdpdGhDYWxsYmFjayhbJl0gKEpTRE9NR2xvYmFs
T2JqZWN0JiBqc0dsb2JhbE9iamVjdCkgewogICAgICAgICAvLyBXZSBhbm5vdGF0ZSBleGNlcHRp
b24gd2l0aCBzcGVjaWFsIHByaXZhdGUgc3ltYm9sLiBJdCBhbGxvd3MgdXMgdG8gZGlzdGluZ3Vp
c2ggdGhlc2UgZXJyb3JzIGZyb20gdGhlIHVzZXIgdGhyb3duIG9uZXMuCi0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBqc0dsb2JhbE9iamVj
dC52bSgpOwogICAgICAgICAvLyBGSVhNRTogUHJvcGFnYXRlIG1vcmUgZGVzY3JpcHRpdmUgZXJy
b3IuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Njc1NTMKLSAgICAgICAgYXV0byogZXJyb3IgPSBKU0M6OmNyZWF0ZVR5cGVFcnJvcigmc3RhdGUs
IG1lc3NhZ2UpOworICAgICAgICBhdXRvKiBlcnJvciA9IEpTQzo6Y3JlYXRlVHlwZUVycm9yKCZq
c0dsb2JhbE9iamVjdCwgbWVzc2FnZSk7CiAgICAgICAgIEFTU0VSVChlcnJvcik7CiAgICAgICAg
IGVycm9yLT5wdXREaXJlY3Qodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhJj4oKnZtLmNs
aWVudERhdGEpLmJ1aWx0aW5OYW1lcygpLmZhaWx1cmVLaW5kUHJpdmF0ZU5hbWUoKSwgSlNDOjpq
c051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihmYWlsdXJlS2luZCkpKTsKICAgICAgICAgcmV0
dXJuIGVycm9yOwogICAgIH0pOwogfQogCi1KU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBTY3JpcHRN
b2R1bGVMb2FkZXI6OmZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3QqIGpzR2xvYmFsT2JqZWN0LCBK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSBt
b2R1bGVLZXlWYWx1ZSwgSlNDOjpKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTQzo6SlNWYWx1ZSBzY3Jp
cHRGZXRjaGVyKQorSlNDOjpKU0ludGVybmFsUHJvbWlzZSogU2NyaXB0TW9kdWxlTG9hZGVyOjpm
ZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNDOjpKU01vZHVsZUxv
YWRlciosIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXlWYWx1ZSwgSlNDOjpKU1ZhbHVlIHBhcmFtZXRl
cnMsIEpTQzo6SlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewotICAgIEpTQzo6Vk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGpzR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEFT
U0VSVChKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU1NjcmlwdEZldGNoZXIqPih2bSwgc2NyaXB0
RmV0Y2hlcikpOwogCiAgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oanNHbG9iYWxPYmplY3QpOwotICAgIGF1dG8qIGpzUHJvbWlzZSA9IEpT
Qzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGV4ZWMsICZnbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8qIGpzUHJvbWlzZSA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZDo6dHJ5Q3JlYXRlKCZnbG9iYWxPYmplY3QpOwogICAgIFJFTEVBU0VfQVNTRVJUKGpzUHJvbWlz
ZSk7CiAgICAgYXV0byBkZWZlcnJlZCA9IERlZmVycmVkUHJvbWlzZTo6Y3JlYXRlKGdsb2JhbE9i
amVjdCwgKmpzUHJvbWlzZSk7CiAgICAgaWYgKG1vZHVsZUtleVZhbHVlLmlzU3ltYm9sKCkpIHsK
QEAgLTE2Miw3ICsxNjIsNyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBTY3JpcHRNb2R1bGVM
b2FkZXI6OmZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3QqIGpzR2xvYmFsTwogCiAgICAgLy8gaHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2ZldGNo
LWEtc2luZ2xlLW1vZHVsZS1zY3JpcHQKIAotICAgIFVSTCBjb21wbGV0ZWRVUkwoVVJMKCksIGFz
U3RyaW5nKG1vZHVsZUtleVZhbHVlKS0+dmFsdWUoZXhlYykpOworICAgIFVSTCBjb21wbGV0ZWRV
UkwoVVJMKCksIGFzU3RyaW5nKG1vZHVsZUtleVZhbHVlKS0+dmFsdWUoanNHbG9iYWxPYmplY3Qp
KTsKICAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkpIHsKICAgICAgICAgZGVmZXJyZWQt
PnJlamVjdChUeXBlRXJyb3IsICJNb2R1bGUga2V5IGlzIGEgdmFsaWQgVVJMLiJfcyk7CiAgICAg
ICAgIHJldHVybiBqc1Byb21pc2UtPnByb21pc2UoKTsKQEAgLTE4NCwxOCArMTg0LDE4IEBAIEpT
Qzo6SlNJbnRlcm5hbFByb21pc2UqIFNjcmlwdE1vZHVsZUxvYWRlcjo6ZmV0Y2goSlNDOjpKU0ds
b2JhbE9iamVjdCoganNHbG9iYWxPCiAgICAgcmV0dXJuIGpzUHJvbWlzZS0+cHJvbWlzZSgpOwog
fQogCi1VUkwgU2NyaXB0TW9kdWxlTG9hZGVyOjptb2R1bGVVUkwoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgbW9kdWxlS2V5VmFsdWUpCitVUkwgU2NyaXB0TW9kdWxlTG9hZGVy
Ojptb2R1bGVVUkwoSlNDOjpKU0dsb2JhbE9iamVjdCYganNHbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBtb2R1bGVLZXlWYWx1ZSkKIHsKICAgICBpZiAobW9kdWxlS2V5VmFsdWUuaXNTeW1ib2wo
KSkKICAgICAgICAgcmV0dXJuIG1fZG9jdW1lbnQudXJsKCk7CiAKICAgICBBU1NFUlQobW9kdWxl
S2V5VmFsdWUuaXNTdHJpbmcoKSk7Ci0gICAgcmV0dXJuIFVSTChVUkwoKSwgYXNTdHJpbmcobW9k
dWxlS2V5VmFsdWUpLT52YWx1ZSgmc3RhdGUpKTsKKyAgICByZXR1cm4gVVJMKFVSTCgpLCBhc1N0
cmluZyhtb2R1bGVLZXlWYWx1ZSktPnZhbHVlKCZqc0dsb2JhbE9iamVjdCkpOwogfQogCi1KU0M6
OkpTVmFsdWUgU2NyaXB0TW9kdWxlTG9hZGVyOjpldmFsdWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6OkpTVmFs
dWUgbW9kdWxlS2V5VmFsdWUsIEpTQzo6SlNWYWx1ZSBtb2R1bGVSZWNvcmRWYWx1ZSwgSlNDOjpK
U1ZhbHVlKQorSlNDOjpKU1ZhbHVlIFNjcmlwdE1vZHVsZUxvYWRlcjo6ZXZhbHVhdGUoSlNDOjpK
U0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3QsIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6
OkpTVmFsdWUgbW9kdWxlS2V5VmFsdWUsIEpTQzo6SlNWYWx1ZSBtb2R1bGVSZWNvcmRWYWx1ZSwg
SlNDOjpKU1ZhbHVlKQogewotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6
OlZNJiB2bSA9IGpzR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIHdlIG9ubHkgc3Vw
cG9ydCBKU01vZHVsZVJlY29yZC4KQEAgLTIwNSwyOCArMjA1LDI3IEBAIEpTQzo6SlNWYWx1ZSBT
Y3JpcHRNb2R1bGVMb2FkZXI6OmV2YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSoKICAgICBpZiAoIW1vZHVsZVJlY29yZCkKICAgICAgICAgcmV0dXJuIEpTQzo6anNV
bmRlZmluZWQoKTsKIAotICAgIFVSTCBzb3VyY2VVUkwgPSBtb2R1bGVVUkwoKmV4ZWMsIG1vZHVs
ZUtleVZhbHVlKTsKKyAgICBVUkwgc291cmNlVVJMID0gbW9kdWxlVVJMKCpqc0dsb2JhbE9iamVj
dCwgbW9kdWxlS2V5VmFsdWUpOwogICAgIGlmICghc291cmNlVVJMLmlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuIEpTQzo6dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsICJNb2R1bGUga2V5IGlz
IGFuIGludmFsaWQgVVJMLiJfcyk7CisgICAgICAgIHJldHVybiBKU0M6OnRocm93VHlwZUVycm9y
KGpzR2xvYmFsT2JqZWN0LCBzY29wZSwgIk1vZHVsZSBrZXkgaXMgYW4gaW52YWxpZCBVUkwuIl9z
KTsKIAogICAgIGlmIChhdXRvKiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKSkKICAgICAgICAg
cmV0dXJuIGZyYW1lLT5zY3JpcHQoKS5ldmFsdWF0ZU1vZHVsZShzb3VyY2VVUkwsICptb2R1bGVS
ZWNvcmQpOwogICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBKU0M6
OkpTSW50ZXJuYWxQcm9taXNlKiByZWplY3RQcm9taXNlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uQ29kZSBlYywgQVNDSUlM
aXRlcmFsIG1lc3NhZ2UpCitzdGF0aWMgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogcmVqZWN0UHJv
bWlzZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25Db2RlIGVjLCBB
U0NJSUxpdGVyYWwgbWVzc2FnZSkKIHsKLSAgICBhdXRvKiBqc1Byb21pc2UgPSBKU0M6OkpTSW50
ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZSgmc3RhdGUsICZnbG9iYWxPYmplY3QpOwor
ICAgIGF1dG8qIGpzUHJvbWlzZSA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5
Q3JlYXRlKCZnbG9iYWxPYmplY3QpOwogICAgIFJFTEVBU0VfQVNTRVJUKGpzUHJvbWlzZSk7CiAg
ICAgYXV0byBkZWZlcnJlZCA9IERlZmVycmVkUHJvbWlzZTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwg
KmpzUHJvbWlzZSk7CiAgICAgZGVmZXJyZWQtPnJlamVjdChlYywgV1RGTW92ZShtZXNzYWdlKSk7
CiAgICAgcmV0dXJuIGpzUHJvbWlzZS0+cHJvbWlzZSgpOwogfQogCi1KU0M6OkpTSW50ZXJuYWxQ
cm9taXNlKiBTY3JpcHRNb2R1bGVMb2FkZXI6OmltcG9ydE1vZHVsZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNNb2R1bGVM
b2FkZXIqLCBKU0M6OkpTU3RyaW5nKiBtb2R1bGVOYW1lLCBKU0M6OkpTVmFsdWUgcGFyYW1ldGVy
cywgY29uc3QgSlNDOjpTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbikKK0pTQzo6SlNJbnRlcm5h
bFByb21pc2UqIFNjcmlwdE1vZHVsZUxvYWRlcjo6aW1wb3J0TW9kdWxlKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGpzR2xvYmFsT2JqZWN0LCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1N0cmlu
ZyogbW9kdWxlTmFtZSwgSlNDOjpKU1ZhbHVlIHBhcmFtZXRlcnMsIGNvbnN0IEpTQzo6U291cmNl
T3JpZ2luJiBzb3VyY2VPcmlnaW4pCiB7Ci0gICAgYXV0byYgc3RhdGUgPSAqZXhlYzsKLSAgICBK
U0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBqc0dsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqSlNDOjpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihqc0dsb2JhbE9iamVjdCk7CiAKICAgICAvLyBJZiBTb3VyY2VPcmlnaW4gYW5k
L29yIENhY2hlZFNjcmlwdEZldGNoZXIgaXMgbnVsbCwgd2UgaW1wb3J0IHRoZSBtb2R1bGUgd2l0
aCB0aGUgZGVmYXVsdCBmZXRjaGVyLgpAQCAtMjQ0LDcgKzI0Myw3IEBAIEpTQzo6SlNJbnRlcm5h
bFByb21pc2UqIFNjcmlwdE1vZHVsZUxvYWRlcjo6aW1wb3J0TW9kdWxlKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGpzCiAgICAgfSBlbHNlIHsKICAgICAgICAgYmFzZVVSTCA9IFVSTChVUkwoKSwgc291
cmNlT3JpZ2luLnN0cmluZygpKTsKICAgICAgICAgaWYgKCFiYXNlVVJMLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlKHN0YXRlLCBnbG9iYWxPYmplY3QsIFR5cGVF
cnJvciwgIkltcG9ydGVyIG1vZHVsZSBrZXkgaXMgbm90IGEgU3ltYm9sIG9yIGEgU3RyaW5nLiJf
cyk7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZShnbG9iYWxPYmplY3QsIFR5cGVF
cnJvciwgIkltcG9ydGVyIG1vZHVsZSBrZXkgaXMgbm90IGEgU3ltYm9sIG9yIGEgU3RyaW5nLiJf
cyk7CiAKICAgICAgICAgaWYgKHNvdXJjZU9yaWdpbi5mZXRjaGVyKCkpCiAgICAgICAgICAgICBz
Y3JpcHRGZXRjaGVyID0gc291cmNlT3JpZ2luLmZldGNoZXIoKTsKQEAgLTI1NCwyMyArMjUzLDIz
IEBAIEpTQzo6SlNJbnRlcm5hbFByb21pc2UqIFNjcmlwdE1vZHVsZUxvYWRlcjo6aW1wb3J0TW9k
dWxlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGpzCiAgICAgQVNTRVJUKGJhc2VVUkwuaXNWYWxpZCgp
KTsKICAgICBBU1NFUlQoc2NyaXB0RmV0Y2hlcik7CiAKLSAgICBhdXRvIHNwZWNpZmllciA9IG1v
ZHVsZU5hbWUtPnZhbHVlKGV4ZWMpOworICAgIGF1dG8gc3BlY2lmaWVyID0gbW9kdWxlTmFtZS0+
dmFsdWUoanNHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gcmVzdWx0ID0gcmVzb2x2ZU1vZHVsZVNw
ZWNpZmllcihtX2RvY3VtZW50LCBzcGVjaWZpZXIsIGJhc2VVUkwpOwogICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUeXBl
RXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2UoZ2xv
YmFsT2JqZWN0LCBUeXBlRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKIAotICAgIHJldHVybiBKU0M6
OmltcG9ydE1vZHVsZShleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlc3Vs
dC0+c3RyaW5nKCkpLCBwYXJhbWV0ZXJzLCBKU0M6OkpTU2NyaXB0RmV0Y2hlcjo6Y3JlYXRlKHZt
LCBXVEZNb3ZlKHNjcmlwdEZldGNoZXIpICkpOworICAgIHJldHVybiBKU0M6OmltcG9ydE1vZHVs
ZShqc0dsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZXN1bHQt
PnN0cmluZygpKSwgcGFyYW1ldGVycywgSlNDOjpKU1NjcmlwdEZldGNoZXI6OmNyZWF0ZSh2bSwg
V1RGTW92ZShzY3JpcHRGZXRjaGVyKSApKTsKIH0KIAotSlNDOjpKU09iamVjdCogU2NyaXB0TW9k
dWxlTG9hZGVyOjpjcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTTW9kdWxlTG9hZGVy
KiwgSlNDOjpKU1ZhbHVlIG1vZHVsZUtleVZhbHVlLCBKU0M6OkpTTW9kdWxlUmVjb3JkKiwgSlND
OjpKU1ZhbHVlKQorSlNDOjpKU09iamVjdCogU2NyaXB0TW9kdWxlTG9hZGVyOjpjcmVhdGVJbXBv
cnRNZXRhUHJvcGVydGllcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVjdCwgSlND
OjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXlWYWx1ZSwgSlNDOjpKU01v
ZHVsZVJlY29yZCosIEpTQzo6SlNWYWx1ZSkKIHsKLSAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byYgdm0gPSBqc0dsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBVUkwgc291cmNlVVJMID0gbW9kdWxlVVJM
KCpleGVjLCBtb2R1bGVLZXlWYWx1ZSk7CisgICAgVVJMIHNvdXJjZVVSTCA9IG1vZHVsZVVSTCgq
anNHbG9iYWxPYmplY3QsIG1vZHVsZUtleVZhbHVlKTsKICAgICBBU1NFUlQoc291cmNlVVJMLmlz
VmFsaWQoKSk7CiAKLSAgICBhdXRvKiBtZXRhUHJvcGVydGllcyA9IEpTQzo6Y29uc3RydWN0RW1w
dHlPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJl
KCkpOworICAgIGF1dG8qIG1ldGFQcm9wZXJ0aWVzID0gSlNDOjpjb25zdHJ1Y3RFbXB0eU9iamVj
dCh2bSwganNHbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBtZXRhUHJvcGVy
dGllcy0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1cmwi
KSwgSlNDOjpqc1N0cmluZyh2bSwgc291cmNlVVJMLnN0cmluZygpKSk7CkBAIC0zMjAsOCArMzE5
LDggQEAgdm9pZCBTY3JpcHRNb2R1bGVMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZE1vZHVs
ZVNjcmlwdExvYWRlciYgbG9hZGVyLCBSZWZQdHIKICAgICB9CiAKICAgICBtX3JlcXVlc3RVUkxU
b1Jlc3BvbnNlVVJMTWFwLmFkZChjYWNoZWRTY3JpcHQudXJsKCksIGNhY2hlZFNjcmlwdC5yZXNw
b25zZSgpLnVybCgpKTsKLSAgICBwcm9taXNlLT5yZXNvbHZlV2l0aENhbGxiYWNrKFsmXSAoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYpIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6SlNTb3VyY2VDb2RlOjpjcmVhdGUoc3RhdGUudm0oKSwKKyAgICBwcm9taXNlLT5yZXNv
bHZlV2l0aENhbGxiYWNrKFsmXSAoSlNET01HbG9iYWxPYmplY3QmIGpzR2xvYmFsT2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBKU0M6OkpTU291cmNlQ29kZTo6Y3JlYXRlKGpzR2xvYmFsT2JqZWN0
LnZtKCksCiAgICAgICAgICAgICBKU0M6OlNvdXJjZUNvZGUgeyBTY3JpcHRTb3VyY2VDb2RlIHsg
JmNhY2hlZFNjcmlwdCwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSwgbG9h
ZGVyLnNjcmlwdEZldGNoZXIoKSB9LmpzU291cmNlQ29kZSgpIH0pOwogICAgIH0pOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0TW9kdWxlTG9hZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRNb2R1bGVMb2FkZXIuaAppbmRleCAw
MmUzYzQ3NWNlYjY2MjFkMmVkNTlhNjk0MTI5ZmZjZDU1ZTYwMDJjLi40MGMzYmQxNmM1NzI4ZWU1
NzBiMDYxZjFkMmZhNDdhN2Q1YmEzNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRNb2R1bGVMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRNb2R1bGVMb2FkZXIuaApAQCAtNDAsNyArNDAsNiBAQCBjbGFzcyBKU0ludGVy
bmFsUHJvbWlzZTsKIGNsYXNzIEpTTW9kdWxlTG9hZGVyOwogY2xhc3MgSlNNb2R1bGVSZWNvcmQ7
CiBjbGFzcyBTb3VyY2VPcmlnaW47Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiAKIH0K
IApAQCAtNTcsMTUgKzU2LDE1IEBAIGNsYXNzIFNjcmlwdE1vZHVsZUxvYWRlciBmaW5hbCA6IHBy
aXZhdGUgQ2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVyQ2xpZW50IHsKIAogICAgIERvY3VtZW50JiBk
b2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAotICAgIEpTQzo6SWRlbnRpZmllciBy
ZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNNb2R1
bGVMb2FkZXIqLCBKU0M6OkpTVmFsdWUgbW9kdWxlTmFtZSwgSlNDOjpKU1ZhbHVlIGltcG9ydGVy
TW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7Ci0gICAgSlNDOjpKU0ludGVy
bmFsUHJvbWlzZSogZmV0Y2goSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXksIEpTQzo6SlNWYWx1
ZSBwYXJhbWV0ZXJzLCBKU0M6OkpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7Ci0gICAgSlNDOjpKU1Zh
bHVlIGV2YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNNb2R1bGVMb2FkZXIqLCBKU0M6OkpTVmFsdWUgbW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUgbW9k
dWxlUmVjb3JkLCBKU0M6OkpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7Ci0gICAgSlNDOjpKU0ludGVy
bmFsUHJvbWlzZSogaW1wb3J0TW9kdWxlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6OkpTU3RyaW5nKiwgSlNDOjpKU1ZhbHVl
IHBhcmFtZXRlcnMsIGNvbnN0IEpTQzo6U291cmNlT3JpZ2luJik7Ci0gICAgSlNDOjpKU09iamVj
dCogY3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU01v
ZHVsZVJlY29yZCosIEpTQzo6SlNWYWx1ZSk7CisgICAgSlNDOjpJZGVudGlmaWVyIHJlc29sdmUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6OkpTVmFsdWUg
bW9kdWxlTmFtZSwgSlNDOjpKU1ZhbHVlIGltcG9ydGVyTW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUg
c2NyaXB0RmV0Y2hlcik7CisgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogZmV0Y2goSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6OkpTVmFsdWUgbW9kdWxl
S2V5LCBKU0M6OkpTVmFsdWUgcGFyYW1ldGVycywgSlNDOjpKU1ZhbHVlIHNjcmlwdEZldGNoZXIp
OworICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpK
U01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1ZSBtb2R1bGVLZXksIEpTQzo6SlNWYWx1ZSBtb2R1
bGVSZWNvcmQsIEpTQzo6SlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKKyAgICBKU0M6OkpTSW50ZXJu
YWxQcm9taXNlKiBpbXBvcnRNb2R1bGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNNb2R1
bGVMb2FkZXIqLCBKU0M6OkpTU3RyaW5nKiwgSlNDOjpKU1ZhbHVlIHBhcmFtZXRlcnMsIGNvbnN0
IEpTQzo6U291cmNlT3JpZ2luJik7CisgICAgSlNDOjpKU09iamVjdCogY3JlYXRlSW1wb3J0TWV0
YVByb3BlcnRpZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNNb2R1bGVSZWNvcmQqLCBKU0M6OkpTVmFsdWUpOwogCiBwcml2
YXRlOgogICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVyJiwg
UmVmUHRyPERlZmVycmVkUHJvbWlzZT4pIGZpbmFsOwotICAgIFVSTCBtb2R1bGVVUkwoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworICAgIFVSTCBtb2R1bGVVUkwoSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CiAKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKICAg
ICBIYXNoTWFwPFVSTCwgVVJMPiBtX3JlcXVlc3RVUkxUb1Jlc3BvbnNlVVJMTWFwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCmluZGV4IGU5ODQxMGJlZWUzN2Vh
ZWMyMjMyMGZmNGE4YzZiODIzM2JhNjM0YTMuLjg1NTBhZDhhNGJkODRiMjY5YjQ2ODQ0OGYxNTkx
MzY3YWMyMDA5YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5j
cHAKQEAgLTQ5LDM5ICs0OSwzOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURPTVdpbmRv
dyogZG9tV2luZG93RnJvbUV4ZWNTdGF0ZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCitE
T01XaW5kb3cqIGRvbVdpbmRvd0Zyb21FeGVjU3RhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCkKIHsKLSAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGxleGljYWxHbG9iYWxPYmplY3Q7CiAgICAgSlNDOjpW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmluaGVy
aXRzPEpTRE9NV2luZG93QmFzZT4odm0pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gJkpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCktPndyYXBw
ZWQoKTsKIH0KIAotRnJhbWUqIGZyYW1lRnJvbUV4ZWNTdGF0ZShKU0M6OkV4ZWNTdGF0ZSogc2Ny
aXB0U3RhdGUpCitGcmFtZSogZnJhbWVGcm9tRXhlY1N0YXRlKEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QpCiB7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKHNjcmlwdFN0YXRlKTsK
KyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEZyb21FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gaXM8RG9jdW1lbnQ+KGNvbnRleHQpID8gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRl
eHQpIDogbnVsbHB0cjsKICAgICByZXR1cm4gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA6
IG51bGxwdHI7CiB9CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRGcm9tRXhlY1N0YXRlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkKK1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCiB7Ci0gICAgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBsZXhpY2FsR2xvYmFs
T2JqZWN0OwogICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGlmICgh
Z2xvYmFsT2JqZWN0LT5pbmhlcml0czxKU0RPTUdsb2JhbE9iamVjdD4odm0pKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiB9CiAKLUpTQzo6RXhl
Y1N0YXRlKiBtYWluV29ybGRFeGVjU3RhdGUoRnJhbWUqIGZyYW1lKQorSlNDOjpKU0dsb2JhbE9i
amVjdCogbWFpbldvcmxkRXhlY1N0YXRlKEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZnJhbWUtPndpbmRvd1Byb3h5
KCkuanNXaW5kb3dQcm94eShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPndpbmRvdygpLT5nbG9i
YWxFeGVjKCk7CisgICAgcmV0dXJuIGZyYW1lLT53aW5kb3dQcm94eSgpLmpzV2luZG93UHJveHko
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT53aW5kb3coKTsKIH0KIAotSlNDOjpFeGVjU3RhdGUq
IGV4ZWNTdGF0ZUZyb21Ob2RlKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIE5vZGUqIG5vZGUpCitK
U0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjU3RhdGVGcm9tTm9kZShET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC05MCwyNSArOTAsMjUgQEAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Ob2Rl
KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0
VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGZy
YW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3Qod29ybGQpLT5nbG9iYWxFeGVjKCk7CisgICAgcmV0
dXJuIGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3Qod29ybGQpOwogfQogCi1KU0M6OkV4ZWNT
dGF0ZSogZXhlY1N0YXRlRnJvbVBhZ2UoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgUGFnZSogcGFn
ZSkKK0pTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWNTdGF0ZUZyb21QYWdlKERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQsIFBhZ2UqIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIHBhZ2UgPyBwYWdlLT5tYWluRnJh
bWUoKS5zY3JpcHQoKS5nbG9iYWxPYmplY3Qod29ybGQpLT5nbG9iYWxFeGVjKCkgOiBudWxscHRy
OworICAgIHJldHVybiBwYWdlID8gcGFnZS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZ2xvYmFsT2Jq
ZWN0KHdvcmxkKSA6IG51bGxwdHI7CiB9CiAKLUpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGVGcm9t
V29ya2VyR2xvYmFsU2NvcGUoV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlKQor
SlNDOjpKU0dsb2JhbE9iamVjdCogZXhlY1N0YXRlRnJvbVdvcmtlckdsb2JhbFNjb3BlKFdvcmtl
ckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSkKIHsKLSAgICByZXR1cm4gd29ya2VyR2xv
YmFsU2NvcGUuc2NyaXB0KCktPndvcmtlckdsb2JhbFNjb3BlV3JhcHBlcigpLT5nbG9iYWxFeGVj
KCk7CisgICAgcmV0dXJuIHdvcmtlckdsb2JhbFNjb3BlLnNjcmlwdCgpLT53b3JrZXJHbG9iYWxT
Y29wZVdyYXBwZXIoKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQotSlNDOjpF
eGVjU3RhdGUqIGV4ZWNTdGF0ZUZyb21Xb3JrbGV0R2xvYmFsU2NvcGUoV29ya2xldEdsb2JhbFNj
b3BlJiB3b3JrbGV0R2xvYmFsU2NvcGUpCitKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjU3RhdGVG
cm9tV29ya2xldEdsb2JhbFNjb3BlKFdvcmtsZXRHbG9iYWxTY29wZSYgd29ya2xldEdsb2JhbFNj
b3BlKQogewogICAgIGlmICghd29ya2xldEdsb2JhbFNjb3BlLnNjcmlwdCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gd29ya2xldEdsb2JhbFNjb3BlLnNjcmlwdCgpLT53
b3JrbGV0R2xvYmFsU2NvcGVXcmFwcGVyKCktPmdsb2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gd29y
a2xldEdsb2JhbFNjb3BlLnNjcmlwdCgpLT53b3JrbGV0R2xvYmFsU2NvcGVXcmFwcGVyKCk7CiB9
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmgKaW5kZXgg
N2NhNWY4OGZiZmFjOTUwNzYzNDM3NGQzNWY1MTVhYzc5N2M0YTBhYS4uZGZmOTk4MWY3YjQxMzBh
OWE4YzQzYzY5MzQ2NWJhOThhZGZmNzIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0U3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRTdGF0ZS5oCkBAIC0zMyw3ICszMyw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3Mg
Q2FsbEZyYW1lOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogfQogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00OSwxNyArNDgsMTcgQEAgY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7CiBj
bGFzcyBXb3JrbGV0R2xvYmFsU2NvcGU7CiAjZW5kaWYKIAotRE9NV2luZG93KiBkb21XaW5kb3dG
cm9tRXhlY1N0YXRlKEpTQzo6RXhlY1N0YXRlKik7Ci1GcmFtZSogZnJhbWVGcm9tRXhlY1N0YXRl
KEpTQzo6RXhlY1N0YXRlKik7Ci1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0RnJvbUV4ZWNTdGF0ZShKU0M6OkV4ZWNTdGF0ZSopOworRE9NV2luZG93KiBkb21X
aW5kb3dGcm9tRXhlY1N0YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKK0ZyYW1lKiBmcmFtZUZy
b21FeGVjU3RhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCopOworU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoSlNDOjpKU0dsb2JhbE9iamVj
dCopOwogCi1KU0M6OkV4ZWNTdGF0ZSogbWFpbldvcmxkRXhlY1N0YXRlKEZyYW1lKik7CitKU0M6
OkpTR2xvYmFsT2JqZWN0KiBtYWluV29ybGRFeGVjU3RhdGUoRnJhbWUqKTsKIAotSlNDOjpFeGVj
U3RhdGUqIGV4ZWNTdGF0ZUZyb21Ob2RlKERPTVdyYXBwZXJXb3JsZCYsIE5vZGUqKTsKLVdFQkNP
UkVfRVhQT1JUIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGVGcm9tUGFnZShET01XcmFwcGVyV29y
bGQmLCBQYWdlKik7Ci1KU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlRnJvbVdvcmtlckdsb2JhbFNj
b3BlKFdvcmtlckdsb2JhbFNjb3BlJik7CitKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjU3RhdGVG
cm9tTm9kZShET01XcmFwcGVyV29ybGQmLCBOb2RlKik7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBleGVjU3RhdGVGcm9tUGFnZShET01XcmFwcGVyV29ybGQmLCBQYWdlKik7
CitKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjU3RhdGVGcm9tV29ya2VyR2xvYmFsU2NvcGUoV29y
a2VyR2xvYmFsU2NvcGUmKTsKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKLUpTQzo6RXhl
Y1N0YXRlKiBleGVjU3RhdGVGcm9tV29ya2xldEdsb2JhbFNjb3BlKFdvcmtsZXRHbG9iYWxTY29w
ZSYpOworSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlY1N0YXRlRnJvbVdvcmtsZXRHbG9iYWxTY29w
ZShXb3JrbGV0R2xvYmFsU2NvcGUmKTsKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAppbmRleCAzYjAwMGI4ODEwMDNkMmI0OTE1YjA4NDc4ZmJhYzk5MzIzMGY1YTI1Li5h
N2ZlNjcxODI1OTZlNTYwM2EyNDY3OWNhYjI5MmNhMmI5Nzk3NWE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTQ1
OCwxNSArNDU4LDE1IEBAIHVzaW5nIERlc2VyaWFsaXphdGlvblJlc3VsdCA9IHN0ZDo6cGFpcjxK
U0M6OkpTVmFsdWUsIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlPjsKIAogY2xhc3MgQ2xvbmVCYXNl
IHsKIHByb3RlY3RlZDoKLSAgICBDbG9uZUJhc2UoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICA6
IG1fZXhlYyhleGVjKQorICAgIENsb25lQmFzZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCkKKyAgICAgICAgOiBtX2xleGljYWxHbG9iYWxPYmplY3QobGV4aWNhbEdsb2JhbE9i
amVjdCkKICAgICAgICAgLCBtX2ZhaWxlZChmYWxzZSkKICAgICB7CiAgICAgfQogCiAgICAgYm9v
bCBzaG91bGRUZXJtaW5hdGUoKQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gbV9leGVjLT52bSgp
OworICAgICAgICBWTSYgdm0gPSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgcmV0dXJuIHNj
b3BlLmV4Y2VwdGlvbigpOwogICAgIH0KQEAgLTQ3NiwyMyArNDc2LDIzIEBAIGNsYXNzIENsb25l
QmFzZSB7CiAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICB9CiAKLSAgICBFeGVjU3RhdGUq
IG1fZXhlYzsKKyAgICBKU0dsb2JhbE9iamVjdCogbV9sZXhpY2FsR2xvYmFsT2JqZWN0OwogICAg
IGJvb2wgbV9mYWlsZWQ7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbV9nY0J1ZmZlcjsKIH07
CiAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKLXN0YXRpYyBib29sIHdyYXBDcnlwdG9LZXkoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+
JiB3cmFwcGVkS2V5KQorc3RhdGljIGJvb2wgd3JhcENyeXB0b0tleShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1
aW50OF90PiYgd3JhcHBlZEtleSkKIHsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUo
ZXhlYyk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT53cmFwQ3J5cHRvS2V5KGtl
eSwgd3JhcHBlZEtleSk7CiB9CiAKLXN0YXRpYyBib29sIHVud3JhcENyeXB0b0tleShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXkpCitzdGF0aWMgYm9vbCB1bndyYXBDcnlwdG9LZXkoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXkpCiB7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKGV4
ZWMpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+dW53cmFwQ3J5cHRvS2V5KHdy
YXBwZWRLZXksIGtleSk7CkBAIC01NDYsMTMgKzU0NiwxMyBAQCB0ZW1wbGF0ZSA8PiBib29sIHdy
aXRlTGl0dGxlRW5kaWFuPHVpbnQ4X3Q+KFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCB1
aW50OAogCiBjbGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogcHVibGljOgotICAg
IHN0YXRpYyBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0
cywgVmVjdG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgY29uc3Qg
VmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiBpbWFnZUJpdG1hcHMsCisgICAgc3RhdGljIFNl
cmlhbGl6YXRpb25SZXR1cm5Db2RlIHNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBt
ZXNzYWdlUG9ydHMsIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+JiBhcnJheUJ1ZmZl
cnMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYgaW1hZ2VCaXRtYXBzLAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAgICAgICAgIFdhc21Nb2R1bGVBcnJheSYgd2FzbU1v
ZHVsZXMsCiAjZW5kaWYKICAgICAgICAgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBWZWN0b3I8
dWludDhfdD4mIG91dCwgU2VyaWFsaXphdGlvbkNvbnRleHQgY29udGV4dCwgQXJyYXlCdWZmZXJD
b250ZW50c0FycmF5JiBzaGFyZWRCdWZmZXJzKQogICAgIHsKLSAgICAgICAgQ2xvbmVTZXJpYWxp
emVyIHNlcmlhbGl6ZXIoZXhlYywgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMsIGltYWdlQml0
bWFwcywKKyAgICAgICAgQ2xvbmVTZXJpYWxpemVyIHNlcmlhbGl6ZXIobGV4aWNhbEdsb2JhbE9i
amVjdCwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMsIGltYWdlQml0bWFwcywKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICAgICB3YXNtTW9kdWxlcywKICNlbmRpZgpAQCAtNTc5
LDE1ICs1NzksMTUgQEAgY2xhc3MgQ2xvbmVTZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKIHByaXZh
dGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgdWludDMyX3Q+IE9iamVjdFBvb2w7
CiAKLSAgICBDbG9uZVNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8UmVmUHRyPE1l
c3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVy
Pj4mIGFycmF5QnVmZmVycywgY29uc3QgVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiBpbWFn
ZUJpdG1hcHMsCisgICAgQ2xvbmVTZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVj
dG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgY29uc3QgVmVjdG9y
PFJlZlB0cjxJbWFnZUJpdG1hcD4+JiBpbWFnZUJpdG1hcHMsCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgICAgICAgICAgV2FzbU1vZHVsZUFycmF5JiB3YXNtTW9kdWxlcywKICNlbmRpZgog
ICAgICAgICBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIFZlY3Rvcjx1aW50OF90PiYgb3V0LCBT
ZXJpYWxpemF0aW9uQ29udGV4dCBjb250ZXh0LCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkmIHNo
YXJlZEJ1ZmZlcnMpCi0gICAgICAgIDogQ2xvbmVCYXNlKGV4ZWMpCisgICAgICAgIDogQ2xvbmVC
YXNlKGxleGljYWxHbG9iYWxPYmplY3QpCiAgICAgICAgICwgbV9idWZmZXIob3V0KQogICAgICAg
ICAsIG1fYmxvYlVSTHMoYmxvYlVSTHMpCi0gICAgICAgICwgbV9lbXB0eUlkZW50aWZpZXIoSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLT52bSgpLCBlbXB0eVN0cmluZygpKSkKKyAgICAgICAg
LCBtX2VtcHR5SWRlbnRpZmllcihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCksIGVtcHR5U3RyaW5nKCkpKQogICAgICAgICAsIG1fY29udGV4dChjb250ZXh0
KQogICAgICAgICAsIG1fc2hhcmVkQnVmZmVycyhzaGFyZWRCdWZmZXJzKQogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKQEAgLTYwNSw5ICs2MDUsOSBAQCBjbGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBD
bG9uZUJhc2UgewogICAgIHsKICAgICAgICAgaWYgKGlucHV0LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsK
KyAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KG1fbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaW5wdXQuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIEpTQzo6SlNWYWx1
ZSB2YWx1ZSA9IHRvSlMobV9leGVjLCBnbG9iYWxPYmplY3QsIGlucHV0W2ldLmdldCgpKTsKKyAg
ICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9IHRvSlMobV9sZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QsIGlucHV0W2ldLmdldCgpKTsKICAgICAgICAgICAgIEpTQzo6SlNPYmpl
Y3QqIG9iaiA9IHZhbHVlLmdldE9iamVjdCgpOwogICAgICAgICAgICAgaWYgKG9iaiAmJiAhcmVz
dWx0LmNvbnRhaW5zKG9iaikpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChvYmosIGkpOwpA
QCAtNzE0LDggKzcxNCw4IEBAIGNsYXNzIENsb25lU2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAg
ICAgSlNWYWx1ZSBnZXRQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
KG9iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAgICAg
IGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwg
bV9leGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgICAgICAgICAgcmV0dXJuIHNsb3QuZ2V0
VmFsdWUobV9leGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAob2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVl
KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKICAgICB9CiAKQEAgLTc2OSwxMCArNzY5LDEwIEBAIGNsYXNzIENsb25lU2VyaWFs
aXplciA6IENsb25lQmFzZSB7CiAKICAgICBKU0M6OkpTVmFsdWUgdG9KU0FycmF5QnVmZmVyKEFy
cmF5QnVmZmVyJiBhcnJheUJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gbV9leGVj
LT52bSgpOwotICAgICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBtX2V4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKTsKKyAgICAgICAgYXV0byYgdm0gPSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdDsK
ICAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+aW5oZXJpdHM8SlNET01HbG9iYWxPYmplY3Q+KHZt
KSkKLSAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgJmFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybiB0
b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KSwgJmFycmF5QnVmZmVyKTsKIAogICAgICAgICBpZiAoYXV0byogYnVmZmVyID0g
YXJyYXlCdWZmZXIubV93cmFwcGVyLmdldCgpKQogICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjsK
QEAgLTc4Miw3ICs3ODIsNyBAQCBjbGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBDbG9uZUJhc2Ugewog
CiAgICAgYm9vbCBkdW1wQXJyYXlCdWZmZXJWaWV3KEpTT2JqZWN0KiBvYmosIFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlJiBjb2RlKQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gbV9leGVjLT52bSgp
OworICAgICAgICBWTSYgdm0gPSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IHdyaXRlKEFycmF5QnVmZmVyVmlld1RhZyk7CiAgICAgICAgIGlmIChvYmotPmluaGVyaXRzPEpT
RGF0YVZpZXc+KHZtKSkKICAgICAgICAgICAgIHdyaXRlKERhdGFWaWV3VGFnKTsKQEAgLTgyOSw3
ICs4MjksNyBAQCBjbGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogCiAgICAgdm9p
ZCBkdW1wRE9NUG9pbnQoSlNPYmplY3QqIG9iaikKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9IG1f
ZXhlYy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OwogICAgICAgICBpZiAob2JqLT5pbmhlcml0czxKU0RPTVBvaW50Pih2bSkpCiAgICAgICAgICAg
ICB3cml0ZShET01Qb2ludFRhZyk7CiAgICAgICAgIGVsc2UKQEAgLTg0MCw3ICs4NDAsNyBAQCBj
bGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogCiAgICAgdm9pZCBkdW1wRE9NUmVj
dChKU09iamVjdCogb2JqKQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOwor
ICAgICAgICBWTSYgdm0gPSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIGlm
IChvYmotPmluaGVyaXRzPEpTRE9NUmVjdD4odm0pKQogICAgICAgICAgICAgd3JpdGUoRE9NUmVj
dFRhZyk7CiAgICAgICAgIGVsc2UKQEAgLTg1NSw3ICs4NTUsNyBAQCBjbGFzcyBDbG9uZVNlcmlh
bGl6ZXIgOiBDbG9uZUJhc2UgewogCiAgICAgdm9pZCBkdW1wRE9NTWF0cml4KEpTT2JqZWN0KiBv
YmopCiAgICAgewotICAgICAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgICAgIFZNJiB2
bSA9IG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgaWYgKG9iai0+aW5oZXJp
dHM8SlNET01NYXRyaXg+KHZtKSkKICAgICAgICAgICAgIHdyaXRlKERPTU1hdHJpeFRhZyk7CiAg
ICAgICAgIGVsc2UKQEAgLTk1MSw3ICs5NTEsNyBAQCBjbGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBD
bG9uZUJhc2UgewogICAgICAgICBBU1NFUlQodmFsdWUuaXNDZWxsKCkpOwogCiAgICAgICAgIGlm
ICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBkdW1wU3RyaW5nKGFzU3RyaW5nKHZh
bHVlKS0+dmFsdWUobV9leGVjKSk7CisgICAgICAgICAgICBkdW1wU3RyaW5nKGFzU3RyaW5nKHZh
bHVlKS0+dmFsdWUobV9sZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCkBAIC05NjAsNyArOTYwLDcgQEAgY2xhc3MgQ2xvbmVTZXJpYWxp
emVyIDogQ2xvbmVCYXNlIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAK
LSAgICAgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgICAgICBWTSYgdm0gPSBtX2xleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIGlmIChpc0FycmF5KHZtLCB2YWx1ZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTk3NCwxMyArOTc0LDEzIEBAIGNsYXNzIENs
b25lU2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAgICAgICAgICAgICBpZiAoYXV0byogYm9vbGVh
bk9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Qm9vbGVhbk9iamVjdCo+KHZtLCBvYmopKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFzdGFydE9iamVjdEludGVybmFsKGJvb2xlYW5PYmplY3QpKSAvLyBo
YW5kbGUgZHVwbGljYXRlcwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB3cml0ZShib29sZWFuT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCkudG9Cb29sZWFu
KG1fZXhlYykgPyBUcnVlT2JqZWN0VGFnIDogRmFsc2VPYmplY3RUYWcpOworICAgICAgICAgICAg
ICAgIHdyaXRlKGJvb2xlYW5PYmplY3QtPmludGVybmFsVmFsdWUoKS50b0Jvb2xlYW4obV9sZXhp
Y2FsR2xvYmFsT2JqZWN0KSA/IFRydWVPYmplY3RUYWcgOiBGYWxzZU9iamVjdFRhZyk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
YXV0byogc3RyaW5nT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxTdHJpbmdPYmplY3QqPih2bSwgb2Jq
KSkgewogICAgICAgICAgICAgICAgIGlmICghc3RhcnRPYmplY3RJbnRlcm5hbChzdHJpbmdPYmpl
Y3QpKSAvLyBoYW5kbGUgZHVwbGljYXRlcwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc3RyID0gYXNTdHJpbmcoc3RyaW5nT2JqZWN0LT5p
bnRlcm5hbFZhbHVlKCkpLT52YWx1ZShtX2V4ZWMpOworICAgICAgICAgICAgICAgIFN0cmluZyBz
dHIgPSBhc1N0cmluZyhzdHJpbmdPYmplY3QtPmludGVybmFsVmFsdWUoKSktPnZhbHVlKG1fbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgZHVtcFN0cmluZ09iamVjdChzdHIp
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMTA5Miwx
NCArMTA5MiwxNCBAQCBjbGFzcyBDbG9uZVNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAg
ICAgICAgICAgIFdhc21Nb2R1bGVBcnJheSBkdW1teU1vZHVsZXM7CiAjZW5kaWYKICAgICAgICAg
ICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkgZHVtbXlTaGFyZWRCdWZmZXJzOwotICAg
ICAgICAgICAgICAgIENsb25lU2VyaWFsaXplciByYXdLZXlTZXJpYWxpemVyKG1fZXhlYywgZHVt
bXlNZXNzYWdlUG9ydHMsIGR1bW15QXJyYXlCdWZmZXJzLCB7IH0sCisgICAgICAgICAgICAgICAg
Q2xvbmVTZXJpYWxpemVyIHJhd0tleVNlcmlhbGl6ZXIobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBk
dW1teU1lc3NhZ2VQb3J0cywgZHVtbXlBcnJheUJ1ZmZlcnMsIHsgfSwKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgICAgICAgICAgICAgICAgIGR1bW15TW9kdWxlcywKICNlbmRpZgogICAg
ICAgICAgICAgICAgICAgICBkdW1teUJsb2JVUkxzLCBzZXJpYWxpemVkS2V5LCBTZXJpYWxpemF0
aW9uQ29udGV4dDo6RGVmYXVsdCwgZHVtbXlTaGFyZWRCdWZmZXJzKTsKICAgICAgICAgICAgICAg
ICByYXdLZXlTZXJpYWxpemVyLndyaXRlKGtleSk7CiAgICAgICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHdyYXBwZWRLZXk7Ci0gICAgICAgICAgICAgICAgaWYgKCF3cmFwQ3J5cHRvS2V5KG1f
ZXhlYywgc2VyaWFsaXplZEtleSwgd3JhcHBlZEtleSkpCisgICAgICAgICAgICAgICAgaWYgKCF3
cmFwQ3J5cHRvS2V5KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgc2VyaWFsaXplZEtleSwgd3JhcHBl
ZEtleSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICB3cml0ZSh3cmFwcGVkS2V5KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEy
ODYsNyArMTI4Niw3IEBAIGNsYXNzIENsb25lU2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAgICAg
ICAgIGlmIChzdHIuaXNOdWxsKCkpCiAgICAgICAgICAgICB3cml0ZShtX2VtcHR5SWRlbnRpZmll
cik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlKElkZW50aWZpZXI6OmZyb21TdHJp
bmcobV9leGVjLT52bSgpLCBzdHIpKTsKKyAgICAgICAgICAgIHdyaXRlKElkZW50aWZpZXI6OmZy
b21TdHJpbmcobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBzdHIpKTsKICAgICB9CiAKICAg
ICB2b2lkIHdyaXRlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yKQpAQCAtMTUxMSw3ICsx
NTExLDcgQEAgY2xhc3MgQ2xvbmVTZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKIAogU2VyaWFsaXph
dGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKIHsK
LSAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbV9sZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIFZlY3Rvcjx1aW50MzJfdCwgMTY+IGluZGV4U3RhY2s7CiAgICAg
VmVjdG9yPHVpbnQzMl90LCAxNj4gbGVuZ3RoU3RhY2s7CiAgICAgVmVjdG9yPFByb3BlcnR5TmFt
ZUFycmF5LCAxNj4gcHJvcGVydHlTdGFjazsKQEAgLTE1MjAsMTAgKzE1MjAsMTAgQEAgU2VyaWFs
aXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikK
ICAgICBWZWN0b3I8SlNTZXRJdGVyYXRvciosIDQ+IHNldEl0ZXJhdG9yU3RhY2s7CiAgICAgVmVj
dG9yPEpTVmFsdWUsIDQ+IG1hcEl0ZXJhdG9yVmFsdWVTdGFjazsKICAgICBWZWN0b3I8V2Fsa2Vy
U3RhdGUsIDE2PiBzdGF0ZVN0YWNrOwotICAgIFdhbGtlclN0YXRlIHN0YXRlID0gU3RhdGVVbmtu
b3duOworICAgIFdhbGtlclN0YXRlIGxleGljYWxHbG9iYWxPYmplY3QgPSBTdGF0ZVVua25vd247
CiAgICAgSlNWYWx1ZSBpblZhbHVlID0gaW47CiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgc3dp
dGNoIChzdGF0ZSkgeworICAgICAgICBzd2l0Y2ggKGxleGljYWxHbG9iYWxPYmplY3QpIHsKICAg
ICAgICAgICAgIGFycmF5U3RhcnRTdGF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlTdGFydFN0
YXRlOiB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzQXJyYXkodm0sIGluVmFsdWUpKTsKQEAg
LTE1NDgsNyArMTU0OCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXpl
cjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFN0YWNr
LnJlbW92ZUxhc3QoKTsKIAogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVu
ZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0
ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKGFycmF5LCBtX2V4ZWMsIHBy
b3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGFycmF5LT5tZXRob2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhh
cnJheSwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVy
YXRpb25Nb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlTdGFjay5sYXN0
KCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZShOb25JbmRleFByb3Bl
cnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7
CkBAIC0xNTYwLDcgKzE1NjAsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlh
bGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgICAgICBpbnB1dE9i
amVjdFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0
SW5kZXgobV9leGVjLCBpbmRleCk7CisgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5n
ZXREaXJlY3RJbmRleChtX2xleGljYWxHbG9iYWxPYmplY3QsIGluZGV4KTsKICAgICAgICAgICAg
ICAgICBpZiAoIWluVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5sYXN0
KCkrKzsKICAgICAgICAgICAgICAgICAgICAgZ290byBhcnJheVN0YXJ0VmlzaXRNZW1iZXI7CkBA
IC0xNTk4LDcgKzE1OTgsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6
ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgIGlucHV0T2JqZWN0U3Rh
Y2suYXBwZW5kKGluT2JqZWN0KTsKICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgw
KTsKICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJh
eSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1
ZGUpKTsKLSAgICAgICAgICAgICAgICBpbk9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGluT2JqZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVt
ZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgaW5PYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhpbk9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKICAgICAgICAgICAgIEZBTExUSFJP
VUdIOwpAQCAtMTY2MSwxMiArMTY2MSwxMiBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9u
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgY2FzZSBNYXBE
YXRhU3RhcnRWaXNpdEVudHJ5OiB7CiAgICAgICAgICAgICAgICAgSlNNYXBJdGVyYXRvciogaXRl
cmF0b3IgPSBtYXBJdGVyYXRvclN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVl
IGtleSwgdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+bmV4dEtleVZhbHVl
KG1fZXhlYywga2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLT5u
ZXh0S2V5VmFsdWUobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBrZXksIHZhbHVlKSkgewogICAgICAg
ICAgICAgICAgICAgICBtYXBJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAg
ICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KHZtLCBvYmplY3Qp
KTsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1l
QXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpF
eGNsdWRlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwg
RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgd3JpdGUoTm9uTWFwUHJvcGVydGllc1RhZyk7CiAgICAgICAgICAgICAgICAgICAg
IGluZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0
YXJ0VmlzaXRNZW1iZXI7CkBAIC0xNzA1LDEyICsxNzA1LDEyIEBAIFNlcmlhbGl6YXRpb25SZXR1
cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAgICAg
ICBjYXNlIFNldERhdGFTdGFydFZpc2l0RW50cnk6IHsKICAgICAgICAgICAgICAgICBKU1NldEl0
ZXJhdG9yKiBpdGVyYXRvciA9IHNldEl0ZXJhdG9yU3RhY2subGFzdCgpOwogICAgICAgICAgICAg
ICAgIEpTVmFsdWUga2V5OwotICAgICAgICAgICAgICAgIGlmICghaXRlcmF0b3ItPm5leHQobV9l
eGVjLCBrZXkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+bmV4dChtX2xleGlj
YWxHbG9iYWxPYmplY3QsIGtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0SXRlcmF0b3JT
dGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpz
RHluYW1pY0Nhc3Q8SlNTZXQqPih2bSwgb2JqZWN0KSk7CiAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2Rl
OjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOwotICAgICAgICAgICAgICAg
ICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
IG1fZXhlYywgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBF
bnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vblNldFByb3Bl
cnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKICAg
ICAgICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOwpAQCAtMTc0NCw3
ICsxNzQ0LDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJp
YWxpemUoSlNWYWx1ZSBpbikKICAgICAgICAgaWYgKHN0YXRlU3RhY2suaXNFbXB0eSgpKQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgc3RhdGUgPSBzdGF0ZVN0YWNrLmxhc3QoKTsKKyAg
ICAgICAgbGV4aWNhbEdsb2JhbE9iamVjdCA9IHN0YXRlU3RhY2subGFzdCgpOwogICAgICAgICBz
dGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICB9CiAgICAgaWYgKG1fZmFpbGVkKQpAQCAtMTc3
OCw3ICsxNzc4LDcgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAg
ICAgICByZXR1cm4gc3RyOwogICAgIH0KIAotICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1
bHQgZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVj
dG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBib29sPj4mJiBpbWFn
ZUJ1ZmZlcnMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhzLCBBcnJheUJ1ZmZl
ckNvbnRlbnRzQXJyYXkqIHNoYXJlZEJ1ZmZlcnMKKyAgICBzdGF0aWMgRGVzZXJpYWxpemF0aW9u
UmVzdWx0IGRlc2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQ
b3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+LCBib29sPj4mJiBpbWFnZUJ1ZmZlcnMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eSogYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZl
ciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBi
bG9iRmlsZVBhdGhzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNoYXJlZEJ1ZmZlcnMKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICwgV2FzbU1vZHVsZUFycmF5KiB3YXNtTW9k
dWxlcwogI2VuZGlmCkBAIC0xNzg2LDcgKzE3ODYsNyBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXpl
ciA6IENsb25lQmFzZSB7CiAgICAgewogICAgICAgICBpZiAoIWJ1ZmZlci5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoanNOdWxsKCksIFNlcmlhbGl6YXRpb25SZXR1
cm5Db2RlOjpVbnNwZWNpZmllZEVycm9yKTsKLSAgICAgICAgQ2xvbmVEZXNlcmlhbGl6ZXIgZGVz
ZXJpYWxpemVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlckNv
bnRlbnRzQXJyYXksIGJ1ZmZlciwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMsIHNoYXJlZEJ1ZmZl
cnMsIFdURk1vdmUoaW1hZ2VCdWZmZXJzKQorICAgICAgICBDbG9uZURlc2VyaWFsaXplciBkZXNl
cmlhbGl6ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMs
IGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgYnVmZmVyLCBibG9iVVJMcywgYmxvYkZpbGVQYXRo
cywgc2hhcmVkQnVmZmVycywgV1RGTW92ZShpbWFnZUJ1ZmZlcnMpCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogICAgICAgICAgICAgLCB3YXNtTW9kdWxlcwogI2VuZGlmCkBAIC0xODAzLDEwICsx
ODAzLDEwIEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CisgICAgICAgIEpTVmFsdWUganNTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9qc1N0cmluZykKLSAgICAgICAg
ICAgICAgICBtX2pzU3RyaW5nID0gSlNDOjpqc1N0cmluZyhleGVjLT52bSgpLCBtX3N0cmluZyk7
CisgICAgICAgICAgICAgICAgbV9qc1N0cmluZyA9IEpTQzo6anNTdHJpbmcobGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKSwgbV9zdHJpbmcpOwogICAgICAgICAgICAgcmV0dXJuIG1fanNTdHJpbmc7
CiAgICAgICAgIH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSB7IHJldHVybiBtX3N0
cmluZzsgfQpAQCAtMTgzNiwxMiArMTgzNiwxMiBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6
IENsb25lQmFzZSB7CiAgICAgICAgIHNpemVfdCBtX2luZGV4OwogICAgIH07CiAKLSAgICBDbG9u
ZURlc2VyaWFsaXplcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVudHMsIFZlY3RvcjxzdGQ6OnBh
aXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgYm9vbD4+JiYgaW1hZ2VCdWZmZXJzLAor
ICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3Nh
Z2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1
ZmZlckNvbnRlbnRzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4sIGJvb2w+PiYmIGltYWdlQnVmZmVycywKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAg
ICAgIFdhc21Nb2R1bGVBcnJheSogd2FzbU1vZHVsZXMsCiAjZW5kaWYKICAgICAgICAgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCi0gICAgICAgIDogQ2xvbmVCYXNlKGV4ZWMpCisgICAg
ICAgIDogQ2xvbmVCYXNlKGxleGljYWxHbG9iYWxPYmplY3QpCiAgICAgICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQogICAgICAgICAsIG1faXNET01HbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0LT5pbmhlcml0czxKU0RPTUdsb2JhbE9iamVjdD4oZ2xvYmFsT2JqZWN0LT52bSgpKSkK
ICAgICAgICAgLCBtX3B0cihidWZmZXIuZGF0YSgpKQpAQCAtMTg2MCwxMiArMTg2MCwxMiBAQCBj
bGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAgICAgICAgICAgICBtX3ZlcnNp
b24gPSAweEZGRkZGRkZGOwogICAgIH0KIAotICAgIENsb25lRGVzZXJpYWxpemVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0
cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSog
YXJyYXlCdWZmZXJDb250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQ
YXRocywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3Rk
OjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIGJvb2w+PiYmIGltYWdlQnVmZmVy
cworICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1l
c3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJh
eUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhz
LCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNoYXJlZEJ1ZmZlcnMsIFZlY3RvcjxzdGQ6OnBh
aXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgYm9vbD4+JiYgaW1hZ2VCdWZmZXJzCiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICAsIFdhc21Nb2R1bGVBcnJheSogd2FzbU1v
ZHVsZXMKICNlbmRpZgogICAgICAgICApCi0gICAgICAgIDogQ2xvbmVCYXNlKGV4ZWMpCisgICAg
ICAgIDogQ2xvbmVCYXNlKGxleGljYWxHbG9iYWxPYmplY3QpCiAgICAgICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQogICAgICAgICAsIG1faXNET01HbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0LT5pbmhlcml0czxKU0RPTUdsb2JhbE9iamVjdD4oZ2xvYmFsT2JqZWN0LT52bSgpKSkK
ICAgICAgICAgLCBtX3B0cihidWZmZXIuZGF0YSgpKQpAQCAtMjA4MywxMiArMjA4MywxMiBAQCBj
bGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAKICAgICB2b2lkIHB1dFByb3Bl
cnR5KEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlKQogICAg
IHsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGluZGV4LCB2YWx1ZSk7
CisgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bmRleCwgdmFsdWUpOwogICAgIH0KIAogICAgIHZvaWQgcHV0UHJvcGVydHkoSlNPYmplY3QqIG9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIEpTVmFsdWUgdmFsdWUpCiAgICAgewot
ICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgobV9leGVjLCBwcm9wZXJ0eSwgdmFs
dWUpOworICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgobV9sZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUpOwogICAgIH0KIAogICAgIGJvb2wgcmVhZEZpbGUoUmVm
UHRyPEZpbGU+JiBmaWxlKQpAQCAtMjE2MSwzNCArMjE2MSwzNCBAQCBjbGFzcyBDbG9uZURlc2Vy
aWFsaXplciA6IENsb25lQmFzZSB7CiAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlC
dWZmZXIgPSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXIodm0sIGFycmF5QnVmZmVyT2JqKTsK
ICAgICAgICAgc3dpdGNoIChhcnJheUJ1ZmZlclZpZXdTdWJ0YWcpIHsKICAgICAgICAgY2FzZSBE
YXRhVmlld1RhZzoKLSAgICAgICAgICAgIGFycmF5QnVmZmVyVmlldyA9IHRvSlMobV9leGVjLCBt
X2dsb2JhbE9iamVjdCwgRGF0YVZpZXc6OmNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0
ZU9mZnNldCwgbGVuZ3RoKS5nZXQoKSk7CisgICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0
b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QsIERhdGFWaWV3OjpjcmVh
dGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0KCkpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgSW50OEFycmF5VGFnOgotICAgICAg
ICAgICAgYXJyYXlCdWZmZXJWaWV3ID0gdG9KUyhtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LCBJbnQ4
QXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KS5nZXQoKSk7CisgICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0b0pTKG1fbGV4aWNhbEds
b2JhbE9iamVjdCwgbV9nbG9iYWxPYmplY3QsIEludDhBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUo
YXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICBjYXNlIFVpbnQ4QXJyYXlUYWc6Ci0gICAgICAgICAgICBhcnJh
eUJ1ZmZlclZpZXcgPSB0b0pTKG1fZXhlYywgbV9nbG9iYWxPYmplY3QsIFVpbnQ4QXJyYXk6OnRy
eUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKS5nZXQoKSk7
CisgICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVj
dCwgbV9nbG9iYWxPYmplY3QsIFVpbnQ4QXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVm
ZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKS5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgY2FzZSBVaW50OENsYW1wZWRBcnJheVRhZzoKLSAgICAgICAgICAgIGFycmF5
QnVmZmVyVmlldyA9IHRvSlMobV9leGVjLCBtX2dsb2JhbE9iamVjdCwgVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKS5n
ZXQoKSk7CisgICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0b0pTKG1fbGV4aWNhbEdsb2Jh
bE9iamVjdCwgbV9nbG9iYWxPYmplY3QsIFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RG
TW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0KCkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgSW50MTZBcnJheVRhZzoKLSAgICAgICAgICAg
IGFycmF5QnVmZmVyVmlldyA9IHRvSlMobV9leGVjLCBtX2dsb2JhbE9iamVjdCwgSW50MTZBcnJh
eTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdl
dCgpKTsKKyAgICAgICAgICAgIGFycmF5QnVmZmVyVmlldyA9IHRvSlMobV9sZXhpY2FsR2xvYmFs
T2JqZWN0LCBtX2dsb2JhbE9iamVjdCwgSW50MTZBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJy
YXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBjYXNlIFVpbnQxNkFycmF5VGFnOgotICAgICAgICAgICAgYXJyYXlC
dWZmZXJWaWV3ID0gdG9KUyhtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LCBVaW50MTZBcnJheTo6dHJ5
Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsK
KyAgICAgICAgICAgIGFycmF5QnVmZmVyVmlldyA9IHRvSlMobV9sZXhpY2FsR2xvYmFsT2JqZWN0
LCBtX2dsb2JhbE9iamVjdCwgVWludDE2QXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVm
ZmVyKSwgYnl0ZU9mZnNldCwgbGVuZ3RoKS5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgY2FzZSBJbnQzMkFycmF5VGFnOgotICAgICAgICAgICAgYXJyYXlCdWZmZXJW
aWV3ID0gdG9KUyhtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LCBJbnQzMkFycmF5Ojp0cnlDcmVhdGUo
V1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0KCkpOworICAgICAg
ICAgICAgYXJyYXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xv
YmFsT2JqZWN0LCBJbnQzMkFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5
dGVPZmZzZXQsIGxlbmd0aCkuZ2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGNhc2UgVWludDMyQXJyYXlUYWc6Ci0gICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0
b0pTKG1fZXhlYywgbV9nbG9iYWxPYmplY3QsIFVpbnQzMkFycmF5Ojp0cnlDcmVhdGUoV1RGTW92
ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0KCkpOworICAgICAgICAgICAg
YXJyYXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2Jq
ZWN0LCBVaW50MzJBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCBieXRlT2Zm
c2V0LCBsZW5ndGgpLmdldCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBj
YXNlIEZsb2F0MzJBcnJheVRhZzoKLSAgICAgICAgICAgIGFycmF5QnVmZmVyVmlldyA9IHRvSlMo
bV9leGVjLCBtX2dsb2JhbE9iamVjdCwgRmxvYXQzMkFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShh
cnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQsIGxlbmd0aCkuZ2V0KCkpOworICAgICAgICAgICAgYXJy
YXlCdWZmZXJWaWV3ID0gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0
LCBGbG9hdDMyQXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKS5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2Fz
ZSBGbG9hdDY0QXJyYXlUYWc6Ci0gICAgICAgICAgICBhcnJheUJ1ZmZlclZpZXcgPSB0b0pTKG1f
ZXhlYywgbV9nbG9iYWxPYmplY3QsIEZsb2F0NjRBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJy
YXlCdWZmZXIpLCBieXRlT2Zmc2V0LCBsZW5ndGgpLmdldCgpKTsKKyAgICAgICAgICAgIGFycmF5
QnVmZmVyVmlldyA9IHRvSlMobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVjdCwg
RmxvYXQ2NEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIGJ5dGVPZmZzZXQs
IGxlbmd0aCkuZ2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNTM3LDEzICsyNTM3LDEzIEBAIGNs
YXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICAgICB0ZW1wbGF0ZTxjbGFzcyBU
PgogICAgIEpTVmFsdWUgZ2V0SlNWYWx1ZShUKiBuYXRpdmVPYmopCiAgICAgewotICAgICAgICBy
ZXR1cm4gdG9KUyhtX2V4ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2Jq
ZWN0KSwgbmF0aXZlT2JqKTsKKyAgICAgICAgcmV0dXJuIHRvSlMobV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIG5hdGl2ZU9i
aik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4KICAgICBKU1ZhbHVlIGdldEpTVmFs
dWUoVCYgbmF0aXZlT2JqKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMobV9leGVjLCBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIG5hdGl2ZU9iaik7CisgICAg
ICAgIHJldHVybiB0b0pTKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBuYXRpdmVPYmopOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPGNsYXNzIFQ+CkBAIC0yNTYyLDcgKzI1NjIsNyBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXpl
ciA6IENsb25lQmFzZSB7CiAgICAgICAgIGlmICghcmVhZCh3KSkKICAgICAgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobV9leGVjLCBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIFQ6OmNyZWF0ZSh4LCB5LCB6LCB3
KSk7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKG1fbGV4aWNhbEdsb2JhbE9iamVj
dCwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBUOjpjcmVhdGUo
eCwgeSwgeiwgdykpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+CkBAIC0yNTkzLDcg
KzI1OTMsNyBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bWF0cml4KG0xMSwgbTEyLCBtMjEsIG0yMiwgbTQxLCBtNDIpOwotICAgICAgICAgICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQobV9leGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2ds
b2JhbE9iamVjdCksIFQ6OmNyZWF0ZShXVEZNb3ZlKG1hdHJpeCksIERPTU1hdHJpeFJlYWRPbmx5
OjpJczJEOjpZZXMpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKG1fbGV4
aWNhbEdsb2JhbE9iamVjdCwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmpl
Y3QpLCBUOjpjcmVhdGUoV1RGTW92ZShtYXRyaXgpLCBET01NYXRyaXhSZWFkT25seTo6SXMyRDo6
WWVzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkb3VibGUgbTExOwogICAgICAg
ICAgICAgaWYgKCFyZWFkKG0xMSkpCkBAIC0yNjQ1LDcgKzI2NDUsNyBAQCBjbGFzcyBDbG9uZURl
c2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KG0xMSwgbTEyLCBtMTMsIG0x
NCwgbTIxLCBtMjIsIG0yMywgbTI0LCBtMzEsIG0zMiwgbTMzLCBtMzQsIG00MSwgbTQyLCBtNDMs
IG00NCk7Ci0gICAgICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChtX2V4ZWMsIGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgVDo6Y3JlYXRlKFdURk1vdmUo
bWF0cml4KSwgRE9NTWF0cml4UmVhZE9ubHk6OklzMkQ6Ok5vKSk7CisgICAgICAgICAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZChtX2xleGljYWxHbG9iYWxPYmplY3QsIGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgVDo6Y3JlYXRlKFdURk1vdmUobWF0cml4KSwg
RE9NTWF0cml4UmVhZE9ubHk6OklzMkQ6Ok5vKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2
NjUsNyArMjY2NSw3IEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICAg
ICAgICAgaWYgKCFyZWFkKGhlaWdodCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
ICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKG1fZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBUOjpjcmVhdGUoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwor
ICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChtX2xleGljYWxHbG9iYWxPYmplY3QsIGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgVDo6Y3JlYXRlKHgsIHks
IHdpZHRoLCBoZWlnaHQpKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxET01Qb2ludEluaXQ+IHJl
YWRET01Qb2ludEluaXQoKQpAQCAtMjY5OCw3ICsyNjk4LDcgQEAgY2xhc3MgQ2xvbmVEZXNlcmlh
bGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAgICBpZiAoIXA0KQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKIAotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChtX2V4ZWMsIGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgRE9NUXVhZDo6Y3JlYXRl
KHAxLnZhbHVlKCksIHAyLnZhbHVlKCksIHAzLnZhbHVlKCksIHA0LnZhbHVlKCkpKTsKKyAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIERPTVF1YWQ6OmNyZWF0ZShwMS52
YWx1ZSgpLCBwMi52YWx1ZSgpLCBwMy52YWx1ZSgpLCBwNC52YWx1ZSgpKSk7CiAgICAgfQogCiAg
ICAgSlNWYWx1ZSByZWFkVHJhbnNmZXJyZWRJbWFnZUJpdG1hcCgpCkBAIC0yNzU3LDEwICsyNzU3
LDEwIEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghbV9pc0RPTUdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBj
b25zdHJ1Y3RFbXB0eU9iamVjdChtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSk7CisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QobV9sZXhpY2Fs
R2xvYmFsT2JqZWN0LCBtX2dsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpOwogCiAgICAg
ICAgIGF1dG8gcnRjQ2VydGlmaWNhdGUgPSBSVENDZXJ0aWZpY2F0ZTo6Y3JlYXRlKFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG9yaWdpbi0+c3RyaW5nKCkpLCBleHBpcmVzLCBXVEZN
b3ZlKGZpbmdlcnByaW50cyksIGNlcnRpZmljYXRlLT50YWtlU3RyaW5nKCksIGtleWVkTWF0ZXJp
YWwtPnRha2VTdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKG1fZXhl
YywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBXVEZNb3ZlKHJ0
Y0NlcnRpZmljYXRlKSk7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKG1fbGV4aWNh
bEdsb2JhbE9iamVjdCwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3Qp
LCBXVEZNb3ZlKHJ0Y0NlcnRpZmljYXRlKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTI4MTgsMTQg
KzI4MTgsMTQgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAg
ICBjYXNlIFRydWVUYWc6CiAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRydWUpOwogICAg
ICAgICBjYXNlIEZhbHNlT2JqZWN0VGFnOiB7Ci0gICAgICAgICAgICBCb29sZWFuT2JqZWN0KiBv
YmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+
Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIG9iai0+c2V0SW50ZXJuYWxW
YWx1ZShtX2V4ZWMtPnZtKCksIGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICAgICAgQm9vbGVh
bk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKG1fbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgICAgICBvYmotPnNldEludGVybmFsVmFsdWUobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
LCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENy
YXNoT25PdmVyZmxvdyhvYmopOwogICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIFRydWVPYmplY3RUYWc6IHsKLSAgICAgICAgICAgIEJvb2xlYW5PYmplY3Qq
IG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0
LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAgICAgICAgICAgb2JqLT5zZXRJbnRlcm5h
bFZhbHVlKG1fZXhlYy0+dm0oKSwganNCb29sZWFuKHRydWUpKTsKKyAgICAgICAgICAgIEJvb2xl
YW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShtX2xleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KSwganNCb29sZWFuKHRydWUpKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENy
YXNoT25PdmVyZmxvdyhvYmopOwogICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgfQpA
QCAtMjgzOSw3ICsyODM5LDcgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2Ug
ewogICAgICAgICAgICAgZG91YmxlIGQ7CiAgICAgICAgICAgICBpZiAoIXJlYWQoZCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAgIE51bWJlck9iamVjdCog
b2JqID0gY29uc3RydWN0TnVtYmVyKG1fZXhlYywgbV9nbG9iYWxPYmplY3QsIGpzTnVtYmVyKGQp
KTsKKyAgICAgICAgICAgIE51bWJlck9iamVjdCogb2JqID0gY29uc3RydWN0TnVtYmVyKG1fZ2xv
YmFsT2JqZWN0LCBqc051bWJlcihkKSk7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdp
dGhDcmFzaE9uT3ZlcmZsb3cob2JqKTsKICAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAg
IH0KQEAgLTI4NDcsNyArMjg0Nyw3IEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVC
YXNlIHsKICAgICAgICAgICAgIGRvdWJsZSBkOwogICAgICAgICAgICAgaWYgKCFyZWFkKGQpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICByZXR1cm4gRGF0
ZUluc3RhbmNlOjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+ZGF0ZVN0cnVj
dHVyZSgpLCBkKTsKKyAgICAgICAgICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShtX2xl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCks
IGQpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsZVRhZzogewogICAgICAgICAgICAgUmVm
UHRyPEZpbGU+IGZpbGU7CkBAIC0yODU1LDcgKzI4NTUsNyBAQCBjbGFzcyBDbG9uZURlc2VyaWFs
aXplciA6IENsb25lQmFzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAg
ICAgICAgICAgIGlmICghbV9pc0RPTUdsb2JhbE9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1
cm4ganNOdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gdG9KUyhtX2V4ZWMsIGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgZmlsZS5nZXQoKSk7CisgICAgICAgICAg
ICByZXR1cm4gdG9KUyhtX2xleGljYWxHbG9iYWxPYmplY3QsIGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgZmlsZS5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBGaWxlTGlzdFRhZzogewogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKQEAg
LTI5MjMsMjAgKzI5MjMsMjAgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2Ug
ewogICAgICAgICAgICAgQ2FjaGVkU3RyaW5nUmVmIGNhY2hlZFN0cmluZzsKICAgICAgICAgICAg
IGlmICghcmVhZFN0cmluZ0RhdGEoY2FjaGVkU3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFN0cmluZy0+anNTdHJpbmco
bV9leGVjKTsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdHJpbmctPmpzU3RyaW5nKG1fbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFbXB0eVN0cmluZ1Rh
ZzoKLSAgICAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKG1fZXhlYy0+dm0oKSk7CisgICAg
ICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkp
OwogICAgICAgICBjYXNlIFN0cmluZ09iamVjdFRhZzogewogICAgICAgICAgICAgQ2FjaGVkU3Ry
aW5nUmVmIGNhY2hlZFN0cmluZzsKICAgICAgICAgICAgIGlmICghcmVhZFN0cmluZ0RhdGEoY2Fj
aGVkU3RyaW5nKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAg
ICAgU3RyaW5nT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RTdHJpbmcobV9leGVjLT52bSgpLCBtX2ds
b2JhbE9iamVjdCwgY2FjaGVkU3RyaW5nLT5qc1N0cmluZyhtX2V4ZWMpKTsKKyAgICAgICAgICAg
IFN0cmluZ09iamVjdCogb2JqID0gY29uc3RydWN0U3RyaW5nKG1fbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSwgbV9nbG9iYWxPYmplY3QsIGNhY2hlZFN0cmluZy0+anNTdHJpbmcobV9sZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9u
T3ZlcmZsb3cob2JqKTsKICAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBFbXB0eVN0cmluZ09iamVjdFRhZzogewotICAgICAgICAgICAgVk0mIHZtID0gbV9l
eGVjLT52bSgpOworICAgICAgICAgICAgVk0mIHZtID0gbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpOwogICAgICAgICAgICAgU3RyaW5nT2JqZWN0KiBvYmogPSBjb25zdHJ1Y3RTdHJpbmcodm0s
IG1fZ2xvYmFsT2JqZWN0LCBqc0VtcHR5U3RyaW5nKHZtKSk7CiAgICAgICAgICAgICBtX2djQnVm
ZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqKTsKICAgICAgICAgICAgIHJldHVybiBv
Ymo7CkBAIC0yOTUwLDcgKzI5NTAsNyBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25l
QmFzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIGF1
dG8gcmVGbGFncyA9IFlhcnI6OnBhcnNlRmxhZ3MoZmxhZ3MtPnN0cmluZygpKTsKICAgICAgICAg
ICAgIEFTU0VSVChyZUZsYWdzLmhhc1ZhbHVlKCkpOwotICAgICAgICAgICAgVk0mIHZtID0gbV9l
eGVjLT52bSgpOworICAgICAgICAgICAgVk0mIHZtID0gbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpOwogICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSh2bSwgcGF0
dGVybi0+c3RyaW5nKCksIHJlRmxhZ3MudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm4gUmVn
RXhwT2JqZWN0OjpjcmVhdGUodm0sIG1fZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwg
cmVnRXhwKTsKICAgICAgICAgfQpAQCAtMjk3OSw4ICsyOTc5LDggQEAgY2xhc3MgQ2xvbmVEZXNl
cmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobV9leGVjLT52bSgpKTsKLSAgICAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKG1f
ZXhlYy0+dm0oKSwgbV9leGVjLCBtX2dsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVTdHJ1
Y3R1cmUoKSwgbV93YXNtTW9kdWxlcy0+YXQoaW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3Jl
YXRlU3R1YihtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCksIG1fbGV4aWNhbEdsb2JhbE9iamVj
dCwgbV9nbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIG1fd2FzbU1v
ZHVsZXMtPmF0KGluZGV4KSk7CiAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgY2xvbmluZyBh
IEpTV2ViQXNzZW1ibHlNb2R1bGUsIGl0J3MgaW1wb3NzaWJsZSBmb3IgdGhhdAogICAgICAgICAg
ICAgLy8gbW9kdWxlIHRvIG5vdCBoYXZlIGJlZW4gYSB2YWxpZCBtb2R1bGUuIFRoZXJlZm9yZSwg
Y3JlYXRlU3R1YiBzaG91bGQKICAgICAgICAgICAgIC8vIG5vdCB0cm93LgpAQCAtMzAwMiw3ICsz
MDAyLDcgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAgICAg
ICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVh
dGUobV9leGVjLT52bSgpLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZmZXIpKTsKKyAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKG1fbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlLCBXVEZNb3ZlKGFycmF5QnVmZmVyKSk7CiAgICAg
ICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cocmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTMwMzUsNyArMzAzNSw3IEBA
IGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEFycmF5QnVmZmVyVmlld1RhZzogewogICAgICAgICAgICAgSlNWYWx1ZSBhcnJheUJ1
ZmZlclZpZXc7Ci0gICAgICAgICAgICBpZiAoIXJlYWRBcnJheUJ1ZmZlclZpZXcobV9leGVjLT52
bSgpLCBhcnJheUJ1ZmZlclZpZXcpKSB7CisgICAgICAgICAgICBpZiAoIXJlYWRBcnJheUJ1ZmZl
clZpZXcobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBhcnJheUJ1ZmZlclZpZXcpKSB7CiAg
ICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CiAgICAgICAgICAgICB9CkBAIC0zMDUwLDEzICszMDUwLDEzIEBAIGNsYXNzIENsb25lRGVzZXJp
YWxpemVyIDogQ2xvbmVCYXNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcmlhbGl6ZWRLZXk7
Ci0gICAgICAgICAgICBpZiAoIXVud3JhcENyeXB0b0tleShtX2V4ZWMsIHdyYXBwZWRLZXksIHNl
cmlhbGl6ZWRLZXkpKSB7CisgICAgICAgICAgICBpZiAoIXVud3JhcENyeXB0b0tleShtX2xleGlj
YWxHbG9iYWxPYmplY3QsIHdyYXBwZWRLZXksIHNlcmlhbGl6ZWRLZXkpKSB7CiAgICAgICAgICAg
ICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBKU1ZhbHVlIGNyeXB0b0tleTsKICAgICAgICAgICAgIFZlY3Rv
cjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBkdW1teU1lc3NhZ2VQb3J0czsKLSAgICAgICAgICAgIENs
b25lRGVzZXJpYWxpemVyIHJhd0tleURlc2VyaWFsaXplcihtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0
LCBkdW1teU1lc3NhZ2VQb3J0cywgbnVsbHB0ciwgeyB9LAorICAgICAgICAgICAgQ2xvbmVEZXNl
cmlhbGl6ZXIgcmF3S2V5RGVzZXJpYWxpemVyKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9nbG9i
YWxPYmplY3QsIGR1bW15TWVzc2FnZVBvcnRzLCBudWxscHRyLCB7IH0sCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgICAgICAgICAgICAgIG51bGxwdHIsCiAjZW5kaWYKQEAgLTMxMzksNyAr
MzEzOSw3IEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKIAogRGVzZXJp
YWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgpCiB7Ci0gICAg
Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIFZNJiB2bSA9IG1fbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBWZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNrOwpAQCAtMzE0OSwxMSArMzE0OSwxMSBA
QCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkK
ICAgICBWZWN0b3I8SlNNYXAqLCA0PiBtYXBTdGFjazsKICAgICBWZWN0b3I8SlNTZXQqLCA0PiBz
ZXRTdGFjazsKICAgICBWZWN0b3I8V2Fsa2VyU3RhdGUsIDE2PiBzdGF0ZVN0YWNrOwotICAgIFdh
bGtlclN0YXRlIHN0YXRlID0gU3RhdGVVbmtub3duOworICAgIFdhbGtlclN0YXRlIGxleGljYWxH
bG9iYWxPYmplY3QgPSBTdGF0ZVVua25vd247CiAgICAgSlNWYWx1ZSBvdXRWYWx1ZTsKIAogICAg
IHdoaWxlICgxKSB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgc3dpdGNoIChs
ZXhpY2FsR2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIGFycmF5U3RhcnRTdGF0ZToKICAgICAgICAg
Y2FzZSBBcnJheVN0YXJ0U3RhdGU6IHsKICAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKQEAg
LTMxNjEsNyArMzE2MSw3IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXpl
cjo6ZGVzZXJpYWxpemUoKQogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAg
ICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgSlNBcnJheSogb3V0QXJy
YXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KG1fZXhlYywgMCwgbV9nbG9iYWxPYmplY3QsIGxlbmd0
aCk7CisgICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
bV9nbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpTQzo6QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+
KG51bGxwdHIpLCBsZW5ndGgpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1
ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG91dEFycmF5KTsKQEAgLTMyMDQsNyArMzIw
NCw3IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxp
emUoKQogICAgICAgICBjYXNlIE9iamVjdFN0YXJ0U3RhdGU6IHsKICAgICAgICAgICAgIGlmIChv
dXRwdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQogICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlKCksIFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlOjpTdGFja092ZXJmbG93RXJyb3IpOwotICAgICAgICAgICAgSlNPYmplY3QqIG91
dE9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYywgbV9nbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvdXRPYmplY3QgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChtX2xleGljYWxHbG9iYWxPYmplY3QsIG1fZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSk7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFz
aE9uT3ZlcmZsb3cob3V0T2JqZWN0KTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFw
cGVuZChvdXRPYmplY3QpOwogICAgICAgICB9CkBAIC0zMjM5LDcgKzMyMzksNyBAQCBEZXNlcmlh
bGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAgICAgICAg
bWFwT2JqZWN0U3RhcnRTdGF0ZTogewogICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNr
LnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwgU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlN0YWNr
T3ZlcmZsb3dFcnJvcik7Ci0gICAgICAgICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZSht
X2V4ZWMsIG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKG1fbGV4aWNhbEdsb2JhbE9iamVj
dCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBtX2dsb2JhbE9iamVjdC0+bWFwU3RydWN0
dXJlKCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRX
aXRoQ3Jhc2hPbk92ZXJmbG93KG1hcCk7CkBAIC0zMjYyLDcgKzMyNjIsNyBAQCBEZXNlcmlhbGl6
YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAgICAgICAgICAg
IGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTWFwRGF0YUVuZFZp
c2l0VmFsdWU6IHsKLSAgICAgICAgICAgIG1hcFN0YWNrLmxhc3QoKS0+c2V0KG1fZXhlYywgbWFw
S2V5U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7CisgICAgICAgICAgICBtYXBTdGFjay5sYXN0KCkt
PnNldChtX2xleGljYWxHbG9iYWxPYmplY3QsIG1hcEtleVN0YWNrLmxhc3QoKSwgb3V0VmFsdWUp
OwogICAgICAgICAgICAgbWFwS2V5U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgZ290
byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwogICAgICAgICB9CkBAIC0zMjcwLDcgKzMyNzAsNyBA
QCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkK
ICAgICAgICAgc2V0T2JqZWN0U3RhcnRTdGF0ZTogewogICAgICAgICAgICAgaWYgKG91dHB1dE9i
amVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwgU2VyaWFsaXphdGlvblJldHVybkNv
ZGU6OlN0YWNrT3ZlcmZsb3dFcnJvcik7Ci0gICAgICAgICAgICBKU1NldCogc2V0ID0gSlNTZXQ6
OmNyZWF0ZShtX2V4ZWMsIG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVjdHVy
ZSgpKTsKKyAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKG1fbGV4aWNhbEds
b2JhbE9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBtX2dsb2JhbE9iamVjdC0+
c2V0U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1ZmZl
ci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KHNldCk7CkBAIC0zMjg5LDcgKzMyODksNyBAQCBE
ZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFNldERhdGFFbmRWaXNpdEtleTogewogICAgICAgICAgICAg
SlNTZXQqIHNldCA9IHNldFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgIHNldC0+YWRkKG1fZXhl
Yywgb3V0VmFsdWUpOworICAgICAgICAgICAgc2V0LT5hZGQobV9sZXhpY2FsR2xvYmFsT2JqZWN0
LCBvdXRWYWx1ZSk7CiAgICAgICAgICAgICBnb3RvIHNldERhdGFTdGFydFZpc2l0RW50cnk7CiAg
ICAgICAgIH0KIApAQCAtMzMxMyw3ICszMzEzLDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENs
b25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgpCiAgICAgICAgIGlmIChzdGF0ZVN0YWNrLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHN0YXRlID0gc3RhdGVTdGFj
ay5sYXN0KCk7CisgICAgICAgIGxleGljYWxHbG9iYWxPYmplY3QgPSBzdGF0ZVN0YWNrLmxhc3Qo
KTsKICAgICAgICAgc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgfQogICAgIEFTU0VSVChv
dXRWYWx1ZSk7CkBAIC0zMzc4LDIyICszMzc4LDIyIEBAIHN0YXRpYyBFeGNlcHRpb25PcjxzdGQ6
OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5Pj4gdHJhbnNmZXJBcnJheUJ1ZmZl
CiAgICAgcmV0dXJuIGNvbnRlbnRzOwogfQogCi1zdGF0aWMgdm9pZCBtYXliZVRocm93RXhjZXB0
aW9uSWZTZXJpYWxpemF0aW9uRmFpbGVkKEV4ZWNTdGF0ZSYgc3RhdGUsIFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlIGNvZGUpCitzdGF0aWMgdm9pZCBtYXliZVRocm93RXhjZXB0aW9uSWZTZXJpYWxp
emF0aW9uRmFpbGVkKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBTZXJpYWxp
emF0aW9uUmV0dXJuQ29kZSBjb2RlKQogewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICBjYXNl
IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpTdWNjZXNzZnVsbHlDb21wbGV0ZWQ6CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlN0YWNrT3ZlcmZsb3dF
cnJvcjoKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKCZzdGF0ZSkpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcigmbGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOjpWYWxpZGF0aW9uRXJyb3I6Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUsICJVbmFibGUgdG8gZGVzZXJpYWxpemUgZGF0YS4iX3MpOworICAgICAgICB0aHJvd1R5cGVF
cnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJVbmFibGUgdG8gZGVzZXJpYWxpemUg
ZGF0YS4iX3MpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOjpEYXRhQ2xvbmVFcnJvcjoKLSAgICAgICAgdGhyb3dEYXRhQ2xvbmVFcnJvcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICB0aHJvd0RhdGFDbG9uZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXJpYWxpemF0aW9uUmV0dXJuQ29k
ZTo6RXhpc3RpbmdFeGNlcHRpb25FcnJvcjoKICAgICBjYXNlIFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOjpVbnNwZWNpZmllZEVycm9yOgpAQCAtMzQyNyw3ICszNDI3LDcgQEAgc3RhdGljIEV4Y2Vw
dGlvbiBleGNlcHRpb25Gb3JTZXJpYWxpemF0aW9uRmFpbHVyZShTZXJpYWxpemF0aW9uUmV0dXJu
Q29kZSBjb2RlKQogICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIH0KIAotUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
RXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRo
cm93RXhjZXB0aW9ucykKK1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9ucykKIHsK
ICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwogICAgIFZlY3RvcjxTdHJpbmc+IGJsb2JVUkxz
OwpAQCAtMzQzOCw3ICszNDM4LDcgQEAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoRXhlY1N0YXRlJiBleGVjLCBKU1YKICAgICBXYXNt
TW9kdWxlQXJyYXkgZHVtbXlNb2R1bGVzOwogI2VuZGlmCiAgICAgQXJyYXlCdWZmZXJDb250ZW50
c0FycmF5IGR1bW15U2hhcmVkQnVmZmVyczsKLSAgICBhdXRvIGNvZGUgPSBDbG9uZVNlcmlhbGl6
ZXI6OnNlcmlhbGl6ZSgmZXhlYywgdmFsdWUsIGR1bW15TWVzc2FnZVBvcnRzLCBkdW1teUFycmF5
QnVmZmVycywgZHVtbXlJbWFnZUJpdG1hcHMsCisgICAgYXV0byBjb2RlID0gQ2xvbmVTZXJpYWxp
emVyOjpzZXJpYWxpemUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBkdW1teU1lc3NhZ2VQ
b3J0cywgZHVtbXlBcnJheUJ1ZmZlcnMsIGR1bW15SW1hZ2VCaXRtYXBzLAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKICAgICAgICAgZHVtbXlNb2R1bGVzLAogI2VuZGlmCkBAIC0zNDQ5LDcgKzM0
NDksNyBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShFeGVjU3RhdGUmIGV4ZWMsIEpTVgogI2VuZGlmCiAKICAgICBpZiAodGhyb3dF
eGNlcHRpb25zID09IFNlcmlhbGl6YXRpb25FcnJvck1vZGU6OlRocm93aW5nKQotICAgICAgICBt
YXliZVRocm93RXhjZXB0aW9uSWZTZXJpYWxpemF0aW9uRmFpbGVkKGV4ZWMsIGNvZGUpOworICAg
ICAgICBtYXliZVRocm93RXhjZXB0aW9uSWZTZXJpYWxpemF0aW9uRmFpbGVkKGxleGljYWxHbG9i
YWxPYmplY3QsIGNvZGUpOwogCiAgICAgaWYgKGNvZGUgIT0gU2VyaWFsaXphdGlvblJldHVybkNv
ZGU6OlN1Y2Nlc3NmdWxseUNvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0z
NDcxLDkgKzM0NzEsOSBAQCBzdGF0aWMgYm9vbCBjb250YWluc0R1cGxpY2F0ZXMoY29uc3QgVmVj
dG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiBpbWFnZUJpdG1hcHMpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1FeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgVmVj
dG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmIHRyYW5zZmVyTGlzdCwgVmVjdG9yPFJl
ZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6YXRpb25Db250ZXh0IGNv
bnRleHQpCitFeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4mJiB0cmFu
c2Zlckxpc3QsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBTZXJp
YWxpemF0aW9uQ29udGV4dCBjb250ZXh0KQogewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIFZlY3RvcjxSZWZQdHI8
SlNDOjpBcnJheUJ1ZmZlcj4+IGFycmF5QnVmZmVyczsKICAgICBWZWN0b3I8UmVmUHRyPEltYWdl
Qml0bWFwPj4gaW1hZ2VCaXRtYXBzOwogICAgIGZvciAoYXV0byYgdHJhbnNmZXJhYmxlIDogdHJh
bnNmZXJMaXN0KSB7CkBAIC0zNDgyLDcgKzM0ODIsNyBAQCBFeGNlcHRpb25PcjxSZWY8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPj4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoRXhlY1N0YXRl
JgogICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRhQ2xvbmVFcnJvciB9Owog
ICAgICAgICAgICAgaWYgKGFycmF5QnVmZmVyLT5pc0xvY2tlZCgpKSB7CiAgICAgICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICAgICAgICAg
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNhc2dlRm9yVHJhbnNmZXIo
YXJyYXlCdWZmZXIpKTsKKyAgICAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNhc2dlRm9yVHJhbnNmZXIoYXJyYXlCdWZmZXIp
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25F
cnJvciB9OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXJyYXlCdWZmZXJzLmFwcGVuZChX
VEZNb3ZlKGFycmF5QnVmZmVyKSk7CkBAIC0zNTE0LDcgKzM1MTQsNyBAQCBFeGNlcHRpb25PcjxS
ZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
RXhlY1N0YXRlJgogICAgIFdhc21Nb2R1bGVBcnJheSB3YXNtTW9kdWxlczsKICNlbmRpZgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlcnMg
PSBtYWtlVW5pcXVlPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4oKTsKLSAgICBhdXRvIGNvZGUg
PSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSgmc3RhdGUsIHZhbHVlLCBtZXNzYWdlUG9ydHMs
IGFycmF5QnVmZmVycywgaW1hZ2VCaXRtYXBzLAorICAgIGF1dG8gY29kZSA9IENsb25lU2VyaWFs
aXplcjo6c2VyaWFsaXplKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgbWVzc2FnZVBvcnRz
LCBhcnJheUJ1ZmZlcnMsIGltYWdlQml0bWFwcywKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgICAgIHdhc21Nb2R1bGVzLCAKICNlbmRpZgpAQCAtMzU0NiwxNiArMzU0NiwxNiBAQCBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShT
dHJpbmdWaWV3IHN0cmluZykKIAogUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDb250ZXh0UmVmIG9yaWdpbkNvbnRleHQsIEpTVmFs
dWVSZWYgYXBpVmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKG9yaWdpbkNvbnRleHQpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSB0b0pTKG9yaWdpbkNvbnRl
eHQpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2tlcih2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IHRvSlMoZXhlYywgYXBpVmFsdWUpOwotICAgIGF1
dG8gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoKmV4ZWMs
IHZhbHVlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cGlWYWx1ZSk7CisgICAgYXV0byBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7
CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0zNTY4LDQ2ICszNTY4LDQ2IEBA
IFN0cmluZyBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRvU3RyaW5nKCkKICAgICByZXR1cm4gQ2xv
bmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplU3RyaW5nKG1fZGF0YSk7CiB9CiAKLUpTVmFsdWUg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShFeGVjU3RhdGUmIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNl
cHRpb25zKQorSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9ucykKIHsKLSAgICByZXR1
cm4gZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0LCB7IH0sIHRocm93RXhjZXB0aW9ucyk7
CisgICAgcmV0dXJuIGRlc2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgeyB9LCB0aHJvd0V4Y2VwdGlvbnMpOwogfQogCi1KU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6ZGVzZXJpYWxpemUoRXhlY1N0YXRlJiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywg
U2VyaWFsaXphdGlvbkVycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCitKU1ZhbHVlIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93
RXhjZXB0aW9ucykKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBkdW1teUJsb2JzOwogICAgIFZlY3Rv
cjxTdHJpbmc+IGR1bW15UGF0aHM7Ci0gICAgcmV0dXJuIGRlc2VyaWFsaXplKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgbWVzc2FnZVBvcnRzLCBkdW1teUJsb2JzLCBkdW1teVBhdGhzLCB0aHJvd0V4Y2Vw
dGlvbnMpOworICAgIHJldHVybiBkZXNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgZHVtbXlCbG9icywgZHVtbXlQYXRocywgdGhyb3dFeGNl
cHRpb25zKTsKIH0KIAotSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXpl
KEV4ZWNTdGF0ZSYgZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVj
dG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMsIFNlcmlh
bGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQorSlNWYWx1ZSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3Nh
Z2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocywgU2VyaWFsaXphdGlvbkVycm9yTW9k
ZSB0aHJvd0V4Y2VwdGlvbnMpCiB7Ci0gICAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IHJlc3VsdCA9
IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgmZXhlYywgZ2xvYmFsT2JqZWN0LCBtZXNz
YWdlUG9ydHMsIFdURk1vdmUobV9pbWFnZUJ1ZmZlcnMpLCBtX2FycmF5QnVmZmVyQ29udGVudHNB
cnJheS5nZXQoKSwgbV9kYXRhLCBibG9iVVJMcywgYmxvYkZpbGVQYXRocywgbV9zaGFyZWRCdWZm
ZXJDb250ZW50c0FycmF5LmdldCgpCisgICAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IHJlc3VsdCA9
IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIFdURk1vdmUobV9pbWFnZUJ1ZmZlcnMpLCBtX2FycmF5
QnVmZmVyQ29udGVudHNBcnJheS5nZXQoKSwgbV9kYXRhLCBibG9iVVJMcywgYmxvYkZpbGVQYXRo
cywgbV9zaGFyZWRCdWZmZXJDb250ZW50c0FycmF5LmdldCgpCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgICAgICAsIG1fd2FzbU1vZHVsZXNBcnJheS5nZXQoKQogI2VuZGlmCiAgICAgICAg
ICk7CiAgICAgaWYgKHRocm93RXhjZXB0aW9ucyA9PSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpU
aHJvd2luZykKLSAgICAgICAgbWF5YmVUaHJvd0V4Y2VwdGlvbklmU2VyaWFsaXphdGlvbkZhaWxl
ZChleGVjLCByZXN1bHQuc2Vjb25kKTsKKyAgICAgICAgbWF5YmVUaHJvd0V4Y2VwdGlvbklmU2Vy
aWFsaXphdGlvbkZhaWxlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXN1bHQuc2Vjb25kKTsKICAg
ICByZXR1cm4gcmVzdWx0LmZpcnN0ID8gcmVzdWx0LmZpcnN0IDoganNOdWxsKCk7CiB9CiAKIEpT
VmFsdWVSZWYgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0NvbnRleHRSZWYg
ZGVzdGluYXRpb25Db250ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgRXhlY1N0
YXRlKiBleGVjID0gdG9KUyhkZXN0aW5hdGlvbkNvbnRleHQpOwotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSB0b0pTKGRl
c3RpbmF0aW9uQ29udGV4dCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemUoKmV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGRl
c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGlmIChleGNlcHRp
b24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgc2NvcGUuZXhjZXB0aW9u
KCktPnZhbHVlKCkpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsKICAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEFTU0VS
VCh2YWx1ZSk7Ci0gICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHZhbHVlKTsKKyAgICByZXR1cm4gdG9S
ZWYobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogfQogCiBSZWY8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IDVkYTgy
NDU1YTRmMTQzNTgxYTliMTVjM2EwMzJhMzNjZTE1MzZjOGYuLmU1Njk2Mjg4MmRmMzcyZDA0YmM2
ZDgzMWFmYWQxYjFiZjI1MTQ3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC02Myw5ICs2Myw5IEBAIHVzaW5nIFdhc21N
b2R1bGVBcnJheSA9IFZlY3RvcjxSZWZQdHI8SlNDOjpXYXNtOjpNb2R1bGU+PjsKIAogY2xhc3Mg
U2VyaWFsaXplZFNjcmlwdFZhbHVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBTZXJpYWxpemF0aW9uRXJyb3JNb2Rl
OjpUaHJvd2luZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlLCBT
ZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gU2VyaWFsaXphdGlvbkVycm9yTW9kZTo6VGhyb3dpbmcp
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+PiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFZlY3Rv
cjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4mJiB0cmFuc2ZlciwgVmVjdG9yPFJlZlB0cjxN
ZXNzYWdlUG9ydD4+JiwgU2VyaWFsaXphdGlvbkNvbnRleHQgPSBTZXJpYWxpemF0aW9uQ29udGV4
dDo6RGVmYXVsdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBjcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6
SlNWYWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmIHRyYW5zZmVyLCBW
ZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mLCBTZXJpYWxpemF0aW9uQ29udGV4dCA9IFNlcmlh
bGl6YXRpb25Db250ZXh0OjpEZWZhdWx0KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoU3RyaW5nVmlldyk7CiAgICAgc3Rh
dGljIFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGFkb3B0KFZlY3Rvcjx1aW50OF90PiYmIGJ1
ZmZlcikKQEAgLTc1LDkgKzc1LDkgQEAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4KIAogICAgIHN0
YXRpYyBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBudWxsVmFsdWUoKTsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gU2VyaWFsaXphdGlvbkVy
cm9yTW9kZTo6VGhyb3dpbmcpOwotICAgIFdFQkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSBkZXNl
cmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0
b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gU2VyaWFs
aXphdGlvbkVycm9yTW9kZTo6VGhyb3dpbmcpOwotICAgIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8UmVm
UHRyPE1lc3NhZ2VQb3J0Pj4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZVBhdGhzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0g
U2VyaWFsaXphdGlvbkVycm9yTW9kZTo6VGhyb3dpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIEpT
Qzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBTZXJpYWxpemF0aW9uRXJyb3JNb2Rl
OjpUaHJvd2luZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXpl
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9y
PFJlZlB0cjxNZXNzYWdlUG9ydD4+JiwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSA9IFNlcmlhbGl6
YXRpb25FcnJvck1vZGU6OlRocm93aW5nKTsKKyAgICBKU0M6OkpTVmFsdWUgZGVzZXJpYWxpemUo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8
UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZVBhdGhzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2Rl
ID0gU2VyaWFsaXphdGlvbkVycm9yTW9kZTo6VGhyb3dpbmcpOwogCiAgICAgc3RhdGljIHVpbnQz
Ml90IHdpcmVGb3JtYXRWZXJzaW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TdHJ1Y3R1cmVkQ2xvbmUuY3BwCmluZGV4IGE2ZGE2MzkzZjAwNzJmM2JkMzNjZjYyYWFmOGY5
OGIwZmI1YmM5NGQuLjY3NWYyMTc0ZjlhN2NiY2MyZDI2MDllNjg4ZjRkOTZiOWJkMTJlNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25lLmNwcApAQCAt
MzksMjYgKzM5LDI2IEBAIGVudW0gY2xhc3MgQ2xvbmVNb2RlIHsKICAgICBQYXJ0aWFsLAogfTsK
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNsb25lQXJyYXlCdWZmZXJJbXBsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIENsb25lTW9kZSBtb2RlKQorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIGNsb25lQXJyYXlCdWZmZXJJbXBsKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2xvbmVNb2RlIG1vZGUp
CiB7Ci0gICAgQVNTRVJUKHN0YXRlKTsKLSAgICBBU1NFUlQoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSk7Ci0gICAgQVNTRVJUKHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkgPT0gZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBBU1NFUlQobGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byogYnVmZmVyID0gdG9VbnNoYXJlZEFycmF5QnVmZmVy
KHZtLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byogYnVmZmVyID0gdG9VbnNoYXJlZEFycmF5QnVm
ZmVyKHZtLCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWJ1ZmZl
cikgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
ICAgIHRocm93RGF0YUNsb25lRXJyb3IoKnN0YXRlLCBzY29wZSk7CisgICAgICAgIHRocm93RGF0
YUNsb25lRXJyb3IoKmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAgICAgaWYgKG1vZGUgPT0gQ2xvbmVNb2RlOjpQYXJ0aWFsKSB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0ZS0+YXJndW1lbnRDb3VudCgpID09IDMpOwotICAgICAgICBpbnQgc3Jj
Qnl0ZU9mZnNldCA9IHN0YXRpY19jYXN0PGludD4oc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvTnVtYmVyKHN0YXRlKSk7Ci0gICAgICAgIGludCBzcmNMZW5ndGggPSBzdGF0aWNfY2FzdDxp
bnQ+KHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b051bWJlcihzdGF0ZSkpOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0o
KSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShBcnJheUJ1ZmZlclNoYXJpbmdN
b2RlOjpEZWZhdWx0KSwgYnVmZmVyLT5zbGljZShzcmNCeXRlT2Zmc2V0LCBzcmNCeXRlT2Zmc2V0
ICsgc3JjTGVuZ3RoKSkpOworICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPT0gMyk7CisgICAgICAgIGludCBzcmNCeXRlT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50Pihj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvTnVtYmVyKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKKyAgICAgICAgaW50IHNyY0xlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgyKS50b051bWJlcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCksIGxleGljYWxHbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3Ry
dWN0dXJlKEFycmF5QnVmZmVyU2hhcmluZ01vZGU6OkRlZmF1bHQpLCBidWZmZXItPnNsaWNlKHNy
Y0J5dGVPZmZzZXQsIHNyY0J5dGVPZmZzZXQgKyBzcmNMZW5ndGgpKSk7CiAgICAgfQotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCBn
bG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKEFycmF5QnVmZmVyU2hhcmluZ01vZGU6
OkRlZmF1bHQpLCBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXIt
PmJ5dGVMZW5ndGgoKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQXJyYXlCdWZm
ZXI6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0
LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShBcnJheUJ1ZmZlclNoYXJpbmdNb2RlOjpEZWZhdWx0KSwg
QXJyYXlCdWZmZXI6OnRyeUNyZWF0ZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2xvbmVBcnJheUJ1ZmZl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAg
LTg0LDMyICs4NCwzMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cnVjdHVyZWRD
bG9uZUFycmF5QnVmZmVyVmlldyhKU0dsb2JhbE9iamVjdCogZ2xvYgogICAgIGF1dG8qIGJ1ZmZl
ciA9IGJ1ZmZlclZpZXctPnVuc2hhcmVkQnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpIHsKICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICB0aHJv
d0RhdGFDbG9uZUVycm9yKCpjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgdGhyb3dEYXRhQ2xv
bmVFcnJvcigqZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogICAgIGF1dG8gYnVmZmVyQ2xvbmUgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRlKGJ1ZmZlci0+
ZGF0YSgpLCBidWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBidWZmZXJWaWV3LT5zdHJ1Y3R1cmUodm0pOwogCiAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNJ
bnQ4QXJyYXkqPih2bSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
SW50OEFycmF5OjpjcmVhdGUoY2FsbEZyYW1lLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYnVmZmVyQ2xv
bmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNJbnQ4QXJyYXk6OmNyZWF0ZShnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVP
ZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U0ludDE2QXJyYXkqPih2bSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTSW50MTZBcnJheTo6Y3JlYXRlKGNhbGxGcmFtZSwgc3RydWN0dXJlLCBXVEZNb3ZlKGJ1ZmZl
ckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSkp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTSW50MTZBcnJheTo6Y3JlYXRlKGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+
Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSkpOwogICAgIGlmIChqc0R5bmFtaWND
YXN0PEpTSW50MzJBcnJheSo+KHZtLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNJbnQzMkFycmF5OjpjcmVhdGUoY2FsbEZyYW1lLCBzdHJ1Y3R1cmUsIFdURk1vdmUo
YnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0
aCgpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNJbnQzMkFycmF5OjpjcmVh
dGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJW
aWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CiAgICAgaWYgKGpzRHlu
YW1pY0Nhc3Q8SlNVaW50OEFycmF5Kj4odm0sIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1VpbnQ4QXJyYXk6OmNyZWF0ZShjYWxsRnJhbWUsIHN0cnVjdHVyZSwgV1RG
TW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+
bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1VpbnQ4QXJyYXk6
OmNyZWF0ZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1
ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKICAgICBpZiAo
anNEeW5hbWljQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4odm0sIHZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1VpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoY2FsbEZy
YW1lLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zm
c2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJW
aWV3LT5sZW5ndGgoKSkpOwogICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTVWludDE2QXJyYXkqPih2
bSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVWludDE2QXJyYXk6
OmNyZWF0ZShjYWxsRnJhbWUsIHN0cnVjdHVyZSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZl
clZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1VpbnQxNkFycmF5OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIFdURk1vdmUoYnVmZmVyQ2xvbmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCks
IGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CiAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNVaW50MzJB
cnJheSo+KHZtLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNVaW50
MzJBcnJheTo6Y3JlYXRlKGNhbGxGcmFtZSwgc3RydWN0dXJlLCBXVEZNb3ZlKGJ1ZmZlckNsb25l
KSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSkpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVWludDMyQXJyYXk6OmNyZWF0ZShnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgV1RGTW92ZShidWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVP
ZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKICAgICBpZiAoanNEeW5hbWljQ2FzdDxK
U0Zsb2F0MzJBcnJheSo+KHZtLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNGbG9hdDMyQXJyYXk6OmNyZWF0ZShjYWxsRnJhbWUsIHN0cnVjdHVyZSwgV1RGTW92ZShi
dWZmZXJDbG9uZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3Ro
KCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Zsb2F0MzJBcnJheTo6Y3Jl
YXRlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVy
Vmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJWaWV3LT5sZW5ndGgoKSkpOwogICAgIGlmIChqc0R5
bmFtaWNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4odm0sIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU0Zsb2F0NjRBcnJheTo6Y3JlYXRlKGNhbGxGcmFtZSwgc3RydWN0dXJl
LCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZmZXJW
aWV3LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRmxvYXQ2
NEFycmF5OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdURk1vdmUoYnVmZmVyQ2xv
bmUpLCBidWZmZXJWaWV3LT5ieXRlT2Zmc2V0KCksIGJ1ZmZlclZpZXctPmxlbmd0aCgpKSk7CiAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KHZtLCB2YWx1ZSkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNEYXRhVmlldzo6Y3JlYXRlKGNhbGxGcmFtZSwgc3RydWN0
dXJlLCBXVEZNb3ZlKGJ1ZmZlckNsb25lKSwgYnVmZmVyVmlldy0+Ynl0ZU9mZnNldCgpLCBidWZm
ZXJWaWV3LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRGF0
YVZpZXc6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV1RGTW92ZShidWZmZXJDbG9u
ZSksIGJ1ZmZlclZpZXctPmJ5dGVPZmZzZXQoKSwgYnVmZmVyVmlldy0+bGVuZ3RoKCkpKTsKIAog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJ1
Y3R1cmVkQ2xvbmUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9u
ZS5oCmluZGV4IDI0NjZiOWY3NWU3ZjA2YmQzNWFhNDczNjliNmM3Y2QwMDAwYTA3YWYuLjk5ODkx
YzgzODgxNTgwNjc4NzMzNjllMzg5NjNlNjYzNzg5M2NhNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5oCkBAIC0yOCw3ICsyOCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiB1c2luZyBF
bmNvZGVkSlNWYWx1ZSA9IGludDY0X3Q7Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiB9
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVCdWlsdGluTmFtZXMuaAppbmRleCA3NzEyZDIxYjNhZDk3MWRiNzcxNDc0NDM2ZTcw
ZjAzN2VkNzNkMDNkLi5iZTc4MjViN2RjYWE3OTg0NDI5NjliNWRhZTc0ODFmMWQyYTA1MTk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5o
CkBAIC0zMzUsNyArMzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKHN0YXJ0
Q29uc3VtaW5nU3RyZWFtKSBcCiAgICAgbWFjcm8oc3RhcnRlZCkgXAogICAgIG1hY3JvKHN0YXJ0
ZWRQcm9taXNlKSBcCi0gICAgbWFjcm8oc3RhdGUpIFwKKyAgICBtYWNybyhsZXhpY2FsR2xvYmFs
T2JqZWN0KSBcCiAgICAgbWFjcm8oc3RvcmVkRXJyb3IpIFwKICAgICBtYWNybyhzdHJhdGVneSkg
XAogICAgIG1hY3JvKHN0cmF0ZWd5SFdNKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAppbmRleCAyMGI1
Zjk4MTY4ZGJkZTNhN2YxOTA2OTMxOTMzNWZhOWE1NGFkZjViLi5jMThmYThlMzY0OGE0NjZiZWEy
YzFmOGM4OTNkMTUzZjA5ODc0MGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKQEAgLTM4LDkgKzM4
LDkgQEAgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIoKSA9IGRlZmF1bHQ7CiAKIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6fldlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlcigpID0gZGVmYXVsdDsKIAotSlNDOjpKU0FycmF5QnVmZmVy
KiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1
ZmZlcikKK0pTQzo6SlNBcnJheUJ1ZmZlciogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0
b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQogewotICAg
IHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTQXJyYXlCdWZmZXIqPihXZWJDb3JlOjp0b0pTKHN0
YXRlLCBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIGJ1ZmZl
cikpOworICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTQXJyYXlCdWZmZXIqPihXZWJDb3Jl
Ojp0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KSwgYnVmZmVyKSk7CiB9CiAKIHZvaWQgV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyOjpyZWdpc3RlcldyYXBwZXIoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBuYXRpdmUsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmgKaW5kZXggZTBiYjk1NmI5OTQ0YmEyMmJjZTk3YTI5Njc2Y2Y4MWRk
MGEyYjg0MS4uZmFhYzIyNjIyMTJlNTM2OGIwOGFjMjkwZmQ4MDliYTY4NGMyZGM2MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmgKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyIDogcHVibGljIEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXIgewogICAgIFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlcigpOwogICAgIHZpcnR1YWwgfldlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlcigpOwogICAgIAotICAgIEpTQzo6SlNBcnJheUJ1ZmZlciogdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyKikgb3ZlcnJpZGU7
CisgICAgSlNDOjpKU0FycmF5QnVmZmVyKiB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopIG92ZXJyaWRlOwogICAgIHZvaWQg
cmVnaXN0ZXJXcmFwcGVyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciosIEpTQzo6
SlNBcnJheUJ1ZmZlciopIG92ZXJyaWRlOwogICAgIGJvb2wgaXNBdG9taWNzV2FpdEFsbG93ZWRP
bkN1cnJlbnRUaHJlYWQoKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2luZG93UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2luZG93UHJveHkuY3BwCmluZGV4IDAyZTNjNzI0ZjE2MWNmZGJkYTc1YmE3ZWIwMDU3MDU0MmVj
Y2ZkMTcuLmRlMGJmODg3OWY4M2I5NjVmZmJhZmI5ZDIwOTAzYTIwYmE0YWZmMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5jcHAKQEAgLTEyNiw3ICsxMjYsNyBA
QCBKU1dpbmRvd1Byb3h5JiBXaW5kb3dQcm94eTo6Y3JlYXRlSlNXaW5kb3dQcm94eVdpdGhJbml0
aWFsaXplZFNjcmlwdChET01XcmFwcGVyVwogICAgIHJldHVybiB3aW5kb3dQcm94eTsKIH0KIAot
dm9pZCBXaW5kb3dQcm94eTo6Y2xlYXJKU1dpbmRvd1Byb3hpZXNOb3RNYXRjaGluZ0RPTVdpbmRv
dyhBYnN0cmFjdERPTVdpbmRvdyogbmV3RE9NV2luZG93LCBib29sIGdvaW5nSW50b1BhZ2VDYWNo
ZSkKK3ZvaWQgV2luZG93UHJveHk6OmNsZWFySlNXaW5kb3dQcm94aWVzTm90TWF0Y2hpbmdET01X
aW5kb3coQWJzdHJhY3RET01XaW5kb3cqIG5ld0RPTVdpbmRvdywgYm9vbCBnb2luZ0ludG9CYWNr
Rm9yd2FyZENhY2hlKQogewogICAgIGlmIChtX2pzV2luZG93UHJveGllcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIFdpbmRvd1Byb3h5OjpjbGVh
ckpTV2luZG93UHJveGllc05vdE1hdGNoaW5nRE9NV2luZG93KEFic3RyYWN0RE9NV2luZG93KiBu
ZQogCiAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCByZXNldHRpbmcgb3VyIHdpbmRvd3MgY3JlYXRl
ZCBhIGxvdCBvZiBnYXJiYWdlLCB1bmxlc3MKICAgICAvLyBpdCB3ZW50IGluIGEgYmFjay9mb3J3
YXJkIGNhY2hlLgotICAgIGlmICghZ29pbmdJbnRvUGFnZUNhY2hlKQorICAgIGlmICghZ29pbmdJ
bnRvQmFja0ZvcndhcmRDYWNoZSkKICAgICAgICAgY29sbGVjdEdhcmJhZ2VBZnRlcldpbmRvd1By
b3h5RGVzdHJ1Y3Rpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2luZG93UHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1By
b3h5LmgKaW5kZXggNDcyMmU0OTNiMDYwOWQ5MTE3NmE2MmFkMzU3ODQwZWQwZDc3ZGU4My4uMmM4
MDhiZGM3OWM3MjczN2UxNWExYmE0MTcxMDU1M2FlZmMyOGE1OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XaW5kb3dQcm94eS5oCkBAIC03OCw3ICs3OCw3IEBAIGNsYXNzIFdpbmRvd1By
b3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2luZG93UHJveHk+IHsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoRE9NV3JhcHBlcldvcmxkJik7CiAK
LSAgICB2b2lkIGNsZWFySlNXaW5kb3dQcm94aWVzTm90TWF0Y2hpbmdET01XaW5kb3coQWJzdHJh
Y3RET01XaW5kb3cqLCBib29sIGdvaW5nSW50b1BhZ2VDYWNoZSk7CisgICAgdm9pZCBjbGVhckpT
V2luZG93UHJveGllc05vdE1hdGNoaW5nRE9NV2luZG93KEFic3RyYWN0RE9NV2luZG93KiwgYm9v
bCBnb2luZ0ludG9CYWNrRm9yd2FyZENhY2hlKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0RE9NV2luZG93KEFic3RyYWN0RE9NV2luZG93Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggZDIzOTg1
N2FhM2JkZGU5ZmViOWNiODc0MGZjZjVkNjQ5ZTM1MGRiZi4uMGU5ZTM5NjUwOTgwMWFlZWYxMjBl
NjY4MTE2OGUyM2ZmOTk3NjkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lk
IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUsIFN0cmluZwogICAgIGV2YWx1YXRlKHNvdXJjZUNvZGUsIGV4Y2VwdGlvbiwg
cmV0dXJuZWRFeGNlcHRpb25NZXNzYWdlKTsKICAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKCkpOwotICAgICAgICByZXBvcnRFeGNlcHRpb24obV93b3Jr
ZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAg
cmVwb3J0RXhjZXB0aW9uKG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLmdldCgpLCBleGNlcHRp
b24pOwogICAgIH0KIH0KIApAQCAtMTQ1LDExICsxNDUsMTEgQEAgdm9pZCBXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBO
YWtlZFAKIAogICAgIGluaXRTY3JpcHRJZk5lZWRlZCgpOwogCi0gICAgYXV0byYgc3RhdGUgPSAq
bV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKLSAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSAqbV93b3JrZXJHbG9i
YWxTY29wZVdyYXBwZXIuZ2V0KCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52
bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrIHsgdm0gfTsKIAotICAgIEpTRXhlY1N0YXRlOjpw
cm9maWxlZEV2YWx1YXRlKCZzdGF0ZSwgSlNDOjpQcm9maWxpbmdSZWFzb246Ok90aGVyLCBzb3Vy
Y2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFs
VGhpcygpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgSlNFeGVjU3RhdGU6OnByb2ZpbGVkRXZh
bHVhdGUoJmxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6UHJvZmlsaW5nUmVhc29uOjpPdGhlciwg
c291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmds
b2JhbFRoaXMoKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogCiAgICAgaWYgKChyZXR1cm5lZEV4Y2Vw
dGlvbiAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIHJldHVybmVkRXhjZXB0
aW9uKSkgfHwgaXNUZXJtaW5hdGluZ0V4ZWN1dGlvbigpKSB7CiAgICAgICAgIGZvcmJpZEV4ZWN1
dGlvbigpOwpAQCAtMTYxLDIzICsxNjEsMjMgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBOYWtlZFAKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBncmVhdCB0aGF0IHRoaXMgY2FuIHJ1biBhcmJp
dHJhcnkgY29kZSB0byBzdHJpbmctaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgZXhjZXB0aW9uLgogICAg
ICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBkbyBhbnl0aGluZyB0byBoYW5kbGUgdGhhdCBwcm9w
ZXJseSwgaWYgaXQsIHNheSwgcmFpc2VzIGFub3RoZXIgZXhjZXB0aW9uPwogICAgICAgICAgICAg
aWYgKHJldHVybmVkRXhjZXB0aW9uTWVzc2FnZSkKLSAgICAgICAgICAgICAgICAqcmV0dXJuZWRF
eGNlcHRpb25NZXNzYWdlID0gcmV0dXJuZWRFeGNlcHRpb24tPnZhbHVlKCkudG9XVEZTdHJpbmco
JnN0YXRlKTsKKyAgICAgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25NZXNzYWdlID0gcmV0
dXJuZWRFeGNlcHRpb24tPnZhbHVlKCkudG9XVEZTdHJpbmcoJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gT3ZlcndyaXRlIHRoZSBkZXRhaWxl
ZCBlcnJvciB3aXRoIGEgZ2VuZXJpYyBlcnJvci4KICAgICAgICAgICAgIFN0cmluZyBnZW5lcmlj
RXJyb3JNZXNzYWdlIHsgIlNjcmlwdCBlcnJvci4iX3MgfTsKICAgICAgICAgICAgIGlmIChyZXR1
cm5lZEV4Y2VwdGlvbk1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9u
TWVzc2FnZSA9IGdlbmVyaWNFcnJvck1lc3NhZ2U7Ci0gICAgICAgICAgICByZXR1cm5lZEV4Y2Vw
dGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUodm0sIGNyZWF0ZUVycm9yKCZzdGF0ZSwgZ2Vu
ZXJpY0Vycm9yTWVzc2FnZSkpOworICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBKU0M6
OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBjcmVhdGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2VuZXJpY0Vycm9yTWVzc2FnZSkpOwogICAgICAgICB9CiAgICAgfQogfQogCiB2b2lkIFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OnNldEV4Y2VwdGlvbihKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9u
KQogewotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gbV93b3JrZXJHbG9iYWxTY29wZVdyYXBw
ZXItPmdsb2JhbEV4ZWMoKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBtX3dvcmtlckdsb2JhbFNjb3BlV3Jh
cHBlci5nZXQoKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgZXhjZXB0aW9uKTsKKyAgICB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uKTsKIH0KIAogdm9pZCBXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpzY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKCkKQEAgLTE4OCw3ICsxODgsNyBA
QCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OnNjaGVkdWxlRXhlY3V0aW9uVGVybWluYXRp
b24oKQogICAgIHsKICAgICAgICAgLy8gVGhlIG11dGV4IHByb3ZpZGVzIGEgbWVtb3J5IGJhcnJp
ZXIgdG8gZW5zdXJlIHRoYXQgb25jZQogICAgICAgICAvLyB0ZXJtaW5hdGlvbiBpcyBzY2hlZHVs
ZWQsIGlzVGVybWluYXRpbmdFeGVjdXRpb24oKSB3aWxsCi0gICAgICAgIC8vIGFjY3VyYXRlbHkg
cmVmbGVjdCB0aGF0IHN0YXRlIHdoZW4gY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQuCisgICAg
ICAgIC8vIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGF0IGxleGljYWxHbG9iYWxPYmplY3Qgd2hlbiBj
YWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9z
Y2hlZHVsZWRUZXJtaW5hdGlvbk11dGV4KTsKICAgICAgICAgbV9pc1Rlcm1pbmF0aW5nRXhlY3V0
aW9uID0gdHJ1ZTsKICAgICB9CkBAIC0yNjksMTIgKzI2OSwxMiBAQCB2b2lkIFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OnJlbW92ZVRpbWVyU2V0Tm90aWZpY2F0aW9uKEpTQzo6SlNSdW5Mb29wVGlt
ZXI6OlRpbQogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihKU0M6
OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKIHsKICAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsKLSAgICBk
ZWJ1Z2dlci0+YXR0YWNoKG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgZGVidWdnZXItPmF0dGFjaChtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci5nZXQo
KSk7CiB9CiAKIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZGV0YWNoRGVidWdnZXIoSlND
OjpEZWJ1Z2dlciogZGVidWdnZXIpCiB7Ci0gICAgZGVidWdnZXItPmRldGFjaChtX3dvcmtlckds
b2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsT2JqZWN0KCksIEpTQzo6RGVidWdnZXI6OlRlcm1pbmF0
aW5nRGVidWdnaW5nU2Vzc2lvbik7CisgICAgZGVidWdnZXItPmRldGFjaChtX3dvcmtlckdsb2Jh
bFNjb3BlV3JhcHBlci5nZXQoKSwgSlNDOjpEZWJ1Z2dlcjo6VGVybWluYXRpbmdEZWJ1Z2dpbmdT
ZXNzaW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAxZjRmNzU1YzQ2
MDc4YTkwOGI0Nzg5ZWJmM2NlN2JiOGFhZDhmYmQwLi40ZjQ5Zjc0OGUxMzJiY2FhNDE4NzRmN2Yw
MDc4OGNiODBiM2UwMGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtNjI1LDcgKzYyNSw3IEBAIHN1YiBHZW5lcmF0ZUdl
dE93blByb3BlcnR5U2xvdAogICAgIAogICAgIHJldHVybiBpZiAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3R9OwogICAgIAotICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9v
bCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xu
Iik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsK
QEAgLTYzNCw3ICs2MzQsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3QKICAgICBt
eSAkaW5kZXhlZEdldHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGlu
dGVyZmFjZSk7CiAgICAgCiAgICAgaWYgKCgkbmFtZWRHZXR0ZXJPcGVyYXRpb24gJiYgJG5hbWVk
R2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntNYXlUaHJvd0V4Y2VwdGlvbn0p
IHx8ICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbiAmJiAkaW5kZXhlZEdldHRlck9wZXJhdGlvbi0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TWF5VGhyb3dFeGNlcHRpb259KSkgewotICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS0+dm0oKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7XG4iKTsKICAgICB9CiAgICAgCiAgICAgIyBOT1RFOiBUaGUgYWxvZ2l0aG0g
Zm9yIFtbR2V0T3duUHJvcGVydHldXSBjb250YWlucyBvbmx5IHRoZSBmb2xsb3dpbmcgc3RlcDoK
QEAgLTY2OCw3ICs2NjgsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3QKICAgICAg
ICAgIyBOT1RFOiBTZXR0aW5nIGlnbm9yZU5hbWVkUHJvcHMgaGFzIHRoZSBlZmZlY3Qgb2Ygc2tp
cHBpbmcgc3RlcCAyLCBzbyB3ZSBjYW4gZWFybHkgcmV0dXJuIGhlcmUKICAgICAgICAgIyAgICAg
ICByYXRoZXIgdGhhbiBnb2luZyB0aHJvdWdoIHRoZSBwYWNlcyBvZiBoYXZpbmcgYW4gYWN0dWFs
IGlnbm9yZU5hbWVkUHJvcHMgdXBkYXRlLgogICAgICAgICBpZiAoJG5hbWVkR2V0dGVyT3BlcmF0
aW9uIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1BsdWdpbn0pIHsKLSAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCk7XG4iKTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgfVxuIik7CiAgICAgfQpAQCAtNjg4LDcgKzY4OCw3IEBAIHN1YiBHZW5lcmF0ZUdldE93
blByb3BlcnR5U2xvdAogICAgICAgICBHZW5lcmF0ZU5hbWVkR2V0dGVyTGFtYmRhKCRvdXRwdXRB
cnJheSwgJGludGVyZmFjZSwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uLCAkbmFtZWRHZXR0ZXJGdW5j
dGlvbk5hbWUsICJHZXR0ZXJJRExUeXBlIik7CiAgICAgICAgIAogICAgICAgICBteSAkb3ZlcnJp
ZGVCdWlsdGluID0gJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzRXh0ZW5kZWRBdHRyaWJ1dGUoJGlu
dGVyZmFjZSwgIk92ZXJyaWRlQnVpbHRpbnMiKSA/ICJPdmVycmlkZUJ1aWx0aW5zOjpZZXMiIDog
Ik92ZXJyaWRlQnVpbHRpbnM6Ok5vIjsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTwke292
ZXJyaWRlQnVpbHRpbn0+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVy
RnVuY3RvcikpIHtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGF1
dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PCR7b3ZlcnJpZGVC
dWlsdGlufT4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGdldHRlckZ1bmN0b3IpKSB7XG4iKTsKICAgICAgICAgCiAgICAgICAgICMgTk9URTogR2VuZXJh
dGVOYW1lZEdldHRlciBpbXBsZW1lbnRzIHN0ZXBzIDIuMSAtIDIuMTAuCiAgICAgICAgIApAQCAt
NzA0LDEyICs3MDQsMTIgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90CiAKICAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UGx1Z2lufSkgewogICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgiKTsKLSAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAocGx1Z2luRWxlbWVudEN1c3RvbUdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKVxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
cmV0dXJuIHRydWU7XG4iKTsKICAgICB9CiAKICAgICAjIDMuIFJldHVybiBPcmRpbmFyeUdldE93
blByb3BlcnR5KE8sIFApLgotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTtcbiIpOwogICAgIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7
CiB9CkBAIC03MzQsMTAgKzczNCwxMCBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4CiAgICAgbXkgJG5hbWVkR2V0dGVyT3BlcmF0aW9uID0gR2V0TmFtZWRHZXR0ZXJPcGVy
YXRpb24oJGludGVyZmFjZSk7CiAgICAgbXkgJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXRJ
bmRleGVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOwogICAgIAotICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0
eVNsb3QmIHNsb3QpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y2xhc3NO
YW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xv
dCYgc2xvdClcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIGlmICgk
bmFtZWRHZXR0ZXJPcGVyYXRpb24gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
UGx1Z2lufSB8fCAoJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24gJiYgJGluZGV4ZWRHZXR0ZXJPcGVy
YXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e01heVRocm93RXhjZXB0aW9ufSkpIHsKLSAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpO1xuIik7CiAgICAgfQogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsK
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CkBAIC03NzcsNyArNzc3LDcgQEAgc3ViIEdlbmVyYXRl
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgICAgICAjIE5PVEU6IFNldHRpbmcgaWdub3Jl
TmFtZWRQcm9wcyBoYXMgdGhlIGVmZmVjdCBvZiBza2lwcGluZyBzdGVwIDIsIHNvIHdlIGNhbiBl
YXJseSByZXR1cm4gaGVyZQogICAgICAgICAjICAgICAgIHJhdGhlciB0aGFuIGdvaW5nIHRocm91
Z2ggdGhlIHBhY2VzIG9mIGhhdmluZyBhbiBhY3R1YWwgaWdub3JlTmFtZWRQcm9wcyB1cGRhdGUu
CiAgICAgICAgIGlmICgkbmFtZWRHZXR0ZXJPcGVyYXRpb24gfHwgJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57UGx1Z2lufSkgewotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2Jq
ZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTtcbiIpOwogICAgICAg
ICB9CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKICAgICB9CkBAIC03
OTksNyArNzk5LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAg
ICAgICBHZW5lcmF0ZU5hbWVkR2V0dGVyTGFtYmRhKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwg
JG5hbWVkR2V0dGVyT3BlcmF0aW9uLCAkbmFtZWRHZXR0ZXJGdW5jdGlvbk5hbWUsICJHZXR0ZXJJ
RExUeXBlIik7CiAgICAgICAgIAogICAgICAgICBteSAkb3ZlcnJpZGVCdWlsdGluID0gJGNvZGVH
ZW5lcmF0b3ItPkluaGVyaXRzRXh0ZW5kZWRBdHRyaWJ1dGUoJGludGVyZmFjZSwgIk92ZXJyaWRl
QnVpbHRpbnMiKSA/ICJPdmVycmlkZUJ1aWx0aW5zOjpZZXMiIDogIk92ZXJyaWRlQnVpbHRpbnM6
Ok5vIjsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChhdXRvIG5hbWVkUHJv
cGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTwke292ZXJyaWRlQnVpbHRpbn0+KCpz
dGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHtcbiIpOwor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9
IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PCR7b3ZlcnJpZGVCdWlsdGlufT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7
XG4iKTsKICAgICAgICAgCiAgICAgICAgICMgTk9URTogR2VuZXJhdGVOYW1lZEdldHRlciBpbXBs
ZW1lbnRzIHN0ZXBzIDIuMSAtIDIuMTAuCiAgICAgICAgIApAQCAtODE3LDEyICs4MTcsMTIgQEAg
c3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgICAgICAmJHByb3BlcnR5
TmFtZUdlbmVyYXRpb24oKTsKIAogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNQbHVnaW5F
bGVtZW50RnVuY3Rpb25zLmgiKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlm
IChwbHVnaW5FbGVtZW50Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAocGx1Z2luRWxlbWVudEN1c3RvbUdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CiAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICB9CiAK
ICAgICAjIDMuIFJldHVybiBPcmRpbmFyeUdldE93blByb3BlcnR5KE8sIFApLgotICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpO1xuIik7CisgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChv
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTtcbiIpOwogICAgIAogICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CiB9CkBAIC04MzcsMTAgKzgzNywxMCBAQCBz
dWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzCiAgICAgbXkgJG5hbWVkR2V0dGVyT3BlcmF0
aW9uID0gR2V0TmFtZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7CiAgICAgbXkgJGluZGV4
ZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXRJbmRleGVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2Up
OwogICAgIAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSlcbiIpOwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKICAgICBpZiAoJGluZGV4
ZWRHZXR0ZXJPcGVyYXRpb24gfHwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTtcbiIpOwogICAgIH0KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xuIik7CiAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0
LCBpbmZvKCkpO1xuIik7CkBAIC04NzIsNyArODcyLDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJv
cGVydHlOYW1lcwogICAgIAogICAgICMgMy4gRmluYWxseSwgYW55IGVudW1lcmFibGUgb3duIHBy
b3BlcnRpZXMgb3IgcHJvcGVydGllcyBmcm9tIHRoZSBvYmplY3TigJlzCiAgICAgIyAgICBwcm90
b3R5cGUgY2hhaW4gYXJlIHRoZW4gZW51bWVyYXRlZCwgaW4gbm8gZGVmaW5lZCBvcmRlci4KLSAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7XG4iKTsKKyAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTtcbiIpOwogICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIn1cblxuIik7CiB9CiAKQEAgLTg4MywxNiArODgzLDE2IEBAIHN1YiBHZW5l
cmF0ZUludm9rZUluZGV4ZWRQcm9wZXJ0eVNldHRlcgogICAgIAogICAgICMgVGhlIHNlY29uZCBh
cmd1bWVudCBvZiB0aGUgaW5kZXhlZCBzZXR0ZXIgb3BlcmF0aW9uIGlzIHRoZSBhcmd1bWVudCBi
ZWluZyBjb252ZXJ0ZWQuCiAgICAgbXkgJGFyZ3VtZW50ID0gQHskaW5kZXhlZFNldHRlck9wZXJh
dGlvbi0+YXJndW1lbnRzfVsxXTsKLSAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRp
dmUoJGludGVyZmFjZSwgJGFyZ3VtZW50LCAkdmFsdWUsICRpbmRleGVkU2V0dGVyT3BlcmF0aW9u
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH0sICJzdGF0ZSIsICIqc3RhdGUiLCAi
dGhpc09iamVjdCIsICIiLCAiIik7CisgICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0
aXZlKCRpbnRlcmZhY2UsICRhcmd1bWVudCwgJHZhbHVlLCAkaW5kZXhlZFNldHRlck9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9LCAibGV4aWNhbEdsb2JhbE9iamVj
dCIsICIqbGV4aWNhbEdsb2JhbE9iamVjdCIsICJ0aGlzT2JqZWN0IiwgIiIsICIiKTsKICAgICAK
LSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICRpbmRlbnQgLiAiYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgJGluZGVudCAuICJhdXRvIG5hdGl2ZVZhbHVlID0gJHtuYXRpdmVWYWx1ZX07XG4iKTsKICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB0cnVlKTtcbiIpOwogICAgIAogICAgIG15ICRpbmRleGVkU2V0dGVyRnVuY3Rpb25O
YW1lID0gJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24tPm5hbWUgfHwgInNldEl0ZW0iOwogICAgIG15
ICRuYXRpdmVWYWx1ZVBhc3NFeHByZXNzaW9uID0gUGFzc0FyZ3VtZW50RXhwcmVzc2lvbigibmF0
aXZlVmFsdWUiLCAkYXJndW1lbnQpOwogICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICJ0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuJHtpbmRleGVkU2V0dGVyRnVuY3Rpb25OYW1lfSgke2luZGV4RXhwcmVz
c2lvbn0sICR7bmF0aXZlVmFsdWVQYXNzRXhwcmVzc2lvbn0pIjsKLSAgICAkZnVuY3Rpb25TdHJp
bmcgPSAicHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgJHtmdW5jdGlvblN0
cmluZ30pIiBpZiBOZWVkc0V4cGxpY2l0UHJvcGFnYXRlRXhjZXB0aW9uQ2FsbCgkaW5kZXhlZFNl
dHRlck9wZXJhdGlvbik7CisgICAgJGZ1bmN0aW9uU3RyaW5nID0gInByb3BhZ2F0ZUV4Y2VwdGlv
bigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgJHtmdW5jdGlvblN0cmluZ30pIiBp
ZiBOZWVkc0V4cGxpY2l0UHJvcGFnYXRlRXhjZXB0aW9uQ2FsbCgkaW5kZXhlZFNldHRlck9wZXJh
dGlvbik7CiAgICAgCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gJGZ1bmN0aW9u
U3RyaW5nIC4gIjtcbiIpOwogfQpAQCAtOTAzLDkgKzkwMyw5IEBAIHN1YiBHZW5lcmF0ZUludm9r
ZU5hbWVkUHJvcGVydHlTZXR0ZXIKICAgICBteSAoJG91dHB1dEFycmF5LCAkaW5kZW50LCAkaW50
ZXJmYWNlLCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24sICR2YWx1ZSkgPSBAXzsKICAgICAKICAgICBt
eSAkYXJndW1lbnQgPSBAeyRuYW1lZFNldHRlck9wZXJhdGlvbi0+YXJndW1lbnRzfVsxXTsKLSAg
ICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJGFyZ3VtZW50
LCAkdmFsdWUsICRuYW1lZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29u
ZGl0aW9uYWx9LCAic3RhdGUiLCAiKnN0YXRlIiwgInRoaXNPYmplY3QiLCAiIiwgIiIpOworICAg
IG15ICRuYXRpdmVWYWx1ZSA9IEpTVmFsdWVUb05hdGl2ZSgkaW50ZXJmYWNlLCAkYXJndW1lbnQs
ICR2YWx1ZSwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25k
aXRpb25hbH0sICJsZXhpY2FsR2xvYmFsT2JqZWN0IiwgIipsZXhpY2FsR2xvYmFsT2JqZWN0Iiwg
InRoaXNPYmplY3QiLCAiIiwgIiIpOwogICAgIAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGlu
ZGVudCAuICJhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgp
KTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkp
O1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImF1dG8gbmF0aXZlVmFs
dWUgPSAke25hdGl2ZVZhbHVlfTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVu
dCAuICJSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpO1xuIik7CiAKQEAgLTky
MCw3ICs5MjAsNyBAQCBzdWIgR2VuZXJhdGVJbnZva2VOYW1lZFByb3BlcnR5U2V0dGVyCiAgICAg
cHVzaChAYXJndW1lbnRzLCAiaXNQcm9wZXJ0eVN1cHBvcnRlZCIpIGlmICRuYW1lZFNldHRlck9w
ZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbE5hbWVkU2V0dGVyT25seUZvclN1cHBv
cnRlZFByb3BlcnRpZXN9OwogCiAgICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gInRoaXNPYmplY3Qt
PndyYXBwZWQoKS4ke25hbWVkU2V0dGVyRnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJn
dW1lbnRzKSAuICIpIjsKLSAgICAkZnVuY3Rpb25TdHJpbmcgPSAicHJvcGFnYXRlRXhjZXB0aW9u
KCpzdGF0ZSwgdGhyb3dTY29wZSwgJHtmdW5jdGlvblN0cmluZ30pIiBpZiBOZWVkc0V4cGxpY2l0
UHJvcGFnYXRlRXhjZXB0aW9uQ2FsbCgkbmFtZWRTZXR0ZXJPcGVyYXRpb24pOworICAgICRmdW5j
dGlvblN0cmluZyA9ICJwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsICR7ZnVuY3Rpb25TdHJpbmd9KSIgaWYgTmVlZHNFeHBsaWNpdFByb3BhZ2F0ZUV4
Y2VwdGlvbkNhbGwoJG5hbWVkU2V0dGVyT3BlcmF0aW9uKTsKIAogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgJGluZGVudCAuICRmdW5jdGlvblN0cmluZyAuICI7XG4iKTsKIH0KQEAgLTkzNCw3ICs5
MzQsNyBAQCBzdWIgR2VuZXJhdGVQdXQKICAgICBteSAkbmFtZWRTZXR0ZXJPcGVyYXRpb24gPSBH
ZXROYW1lZFNldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKICAgICBteSAkaW5kZXhlZFNldHRl
ck9wZXJhdGlvbiA9IEdldEluZGV4ZWRTZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7CiAgICAg
Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAke2NsYXNzTmFtZX06OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KVxuIik7CisgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiYm9vbCAke2NsYXNzTmFtZX06OnB1dChKU0NlbGwqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdClcbiIp
OwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xu
Iik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTtcblxuIik7CkBAIC05NDIsMTAgKzk0MiwxMCBAQCBzdWIg
R2VuZXJhdGVQdXQKICAgICBhc3NlcnQoIkNFUmVhY3Rpb25zIGlzIG5vdCBzdXBwb3J0ZWQgb24g
aGF2aW5nIGJvdGggbmFtZWQgc2V0dGVycyBhbmQgaW5kZXhlZCBzZXR0ZXJzIikgaWYgJG5hbWVk
U2V0dGVyT3BlcmF0aW9uICYmICRuYW1lZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Q0VSZWFjdGlvbnN9CiAgICAgICAgICYmICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uICYm
ICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9u
c307CiAgICAgaWYgKCRuYW1lZFNldHRlck9wZXJhdGlvbikgewotICAgICAgICBHZW5lcmF0ZUN1
c3RvbUVsZW1lbnRSZWFjdGlvbnNTdGFja0lmTmVlZGVkKCRvdXRwdXRBcnJheSwgJG5hbWVkU2V0
dGVyT3BlcmF0aW9uLCAiKnN0YXRlIik7CisgICAgICAgIEdlbmVyYXRlQ3VzdG9tRWxlbWVudFJl
YWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24s
ICIqbGV4aWNhbEdsb2JhbE9iamVjdCIpOwogICAgIH0KICAgICBpZiAoJGluZGV4ZWRTZXR0ZXJP
cGVyYXRpb24pIHsKLSAgICAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJ
Zk5lZWRlZCgkb3V0cHV0QXJyYXksICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLCAiKnN0YXRlIik7
CisgICAgICAgIEdlbmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91
dHB1dEFycmF5LCAkaW5kZXhlZFNldHRlck9wZXJhdGlvbiwgIipsZXhpY2FsR2xvYmFsT2JqZWN0
Iik7CiAgICAgfQogICAgIAogICAgIGlmICgkaW5kZXhlZFNldHRlck9wZXJhdGlvbikgewpAQCAt
OTY2LDE1ICs5NjYsMTUgQEAgc3ViIEdlbmVyYXRlUHV0CiAgICAgICAgIG15ICRvdmVycmlkZUJ1
aWx0aW5zID0gJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzRXh0ZW5kZWRBdHRyaWJ1dGUoJGludGVy
ZmFjZSwgIk92ZXJyaWRlQnVpbHRpbnMiKTsKICAgICAgICAgaWYgKCEkb3ZlcnJpZGVCdWlsdGlu
cykgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnkgfTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChzdGF0
ZS0+dm0oKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
aWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJv
cGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkge1xuIik7CisgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09i
amVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkp
O1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmICghKHBy
b3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xv
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkge1xuIik7CiAgICAg
ICAgICAgICAkYWRkaXRpb25hbEluZGVudCAuPSAiICAgICI7CiAgICAgICAgIH0KIAogICAgICAg
ICBHZW5lcmF0ZUludm9rZU5hbWVkUHJvcGVydHlTZXR0ZXIoJG91dHB1dEFycmF5LCAkYWRkaXRp
b25hbEluZGVudCAuICIgICAgICAgICIsICRpbnRlcmZhY2UsICRuYW1lZFNldHRlck9wZXJhdGlv
biwgInZhbHVlIik7CiAgICAgICAgIGlmICgkbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0NhbGxOYW1lZFNldHRlck9ubHlGb3JTdXBwb3J0ZWRQcm9wZXJ0aWVzfSkg
ewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIg
ICAgICAgIGlmICghaXNQcm9wZXJ0eVN1cHBvcnRlZClcbiIpOwotICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAgICAgICByZXR1cm4gSlNP
YmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJv
cGVydHlTbG90KTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRp
b25hbEluZGVudCAuICIgICAgICAgICAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNs
b3QpO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRp
b25hbEluZGVudCAuICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAKQEAgLTk5MCwxMSArOTkw
LDExIEBAIHN1YiBHZW5lcmF0ZVB1dAogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNQbHVn
aW5FbGVtZW50RnVuY3Rpb25zLmgiKTsKIAogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhpc09iamVjdCwgc3RhdGUsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0KSlcbiIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQo
dGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0
UHJvcGVydHlTbG90LCBwdXRSZXN1bHQpKVxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDtcblxuIik7CiAgICAgfQogCi0gICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpO1xuIik7CisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7XG4i
KTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogfQogCkBAIC0xMDEwLDEwICsx
MDEwLDEwIEBAIHN1YiBHZW5lcmF0ZVB1dEJ5SW5kZXgKICAgICBteSAkb3ZlcnJpZGVCdWlsdGlu
cyA9ICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0V4dGVuZGVkQXR0cmlidXRlKCRpbnRlcmZhY2Us
ICJPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgbXkgJGVsbGlkZXNDYWxsc1RvQmFzZSA9ICgkbmFt
ZWRTZXR0ZXJPcGVyYXRpb24gJiYgJG92ZXJyaWRlQnVpbHRpbnMpICYmICEkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntQbHVnaW59ICYmICEkbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxOYW1lZFNldHRlck9ubHlGb3JTdXBwb3J0ZWRQcm9wZXJ0
aWVzfTsKICAgICAKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y2xhc3NOYW1lfTo6
cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4
LCBKU1ZhbHVlIHZhbHVlLCBib29sIiAuICghJGVsbGlkZXNDYWxsc1RvQmFzZSA/ICIgc2hvdWxk
VGhyb3ciIDogIiIpIC4gIilcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgJHtj
bGFzc05hbWV9OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIiAuICgh
JGVsbGlkZXNDYWxsc1RvQmFzZSA/ICIgc2hvdWxkVGhyb3ciIDogIiIpIC4gIilcbiIpOwogICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIGlmICgkbmFtZWRTZXR0ZXJPcGVyYXRp
b24gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UGx1Z2lufSkgewotICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7XG4iKTsKICAgICB9CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpO1xuXG4iKTsKQEAgLTEwMjEsMTAgKzEwMjEsMTAgQEAgc3ViIEdlbmVy
YXRlUHV0QnlJbmRleAogICAgIGFzc2VydCgiQ0VSZWFjdGlvbnMgaXMgbm90IHN1cHBvcnRlZCBv
biBoYXZpbmcgYm90aCBuYW1lZCBzZXR0ZXJzIGFuZCBpbmRleGVkIHNldHRlcnMiKSBpZiAkbmFt
ZWRTZXR0ZXJPcGVyYXRpb24gJiYgJG5hbWVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntDRVJlYWN0aW9uc30KICAgICAgICAgJiYgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24g
JiYgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rp
b25zfTsKICAgICBpZiAoJG5hbWVkU2V0dGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgIEdlbmVyYXRl
Q3VzdG9tRWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkbmFtZWRT
ZXR0ZXJPcGVyYXRpb24sICIqc3RhdGUiKTsKKyAgICAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50
UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0QXJyYXksICRuYW1lZFNldHRlck9wZXJhdGlv
biwgIipsZXhpY2FsR2xvYmFsT2JqZWN0Iik7CiAgICAgfQogICAgIGlmICgkaW5kZXhlZFNldHRl
ck9wZXJhdGlvbikgewotICAgICAgICBHZW5lcmF0ZUN1c3RvbUVsZW1lbnRSZWFjdGlvbnNTdGFj
a0lmTmVlZGVkKCRvdXRwdXRBcnJheSwgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24sICIqc3RhdGUi
KTsKKyAgICAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgk
b3V0cHV0QXJyYXksICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLCAiKmxleGljYWxHbG9iYWxPYmpl
Y3QiKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCRpbmRleGVkU2V0dGVyT3BlcmF0aW9uKSB7CkBA
IC0xMDQzLDE0ICsxMDQzLDE0IEBAIHN1YiBHZW5lcmF0ZVB1dEJ5SW5kZXgKICAgICAgICAgaWYg
KCEkb3ZlcnJpZGVCdWlsdGlucykgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9O1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3Qodm0pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVy
dHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkge1xuIik7CisgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNP
YmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpKSB7XG4iKTsKICAgICAgICAgICAgICRhZGRpdGlvbmFsSW5kZW50
IC49ICIgICAgIjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgR2VuZXJhdGVJbnZva2VO
YW1lZFByb3BlcnR5U2V0dGVyKCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAg
ICIsICRpbnRlcmZhY2UsICRuYW1lZFNldHRlck9wZXJhdGlvbiwgInZhbHVlIik7CiAgICAgICAg
IGlmICgkbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhbGxOYW1l
ZFNldHRlck9ubHlGb3JTdXBwb3J0ZWRQcm9wZXJ0aWVzfSkgewogICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgaWYgKCFpc1Byb3BlcnR5U3Vw
cG9ydGVkKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFs
SW5kZW50IC4gIiAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIHN0YXRl
LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAgIHJldHVybiBKU09iamVjdDo6
cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3Vs
ZFRocm93KTtcbiIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFk
ZGl0aW9uYWxJbmRlbnQgLiAiICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgICAgIApAQCAtMTA2
NSwxMiArMTA2NSwxMiBAQCBzdWIgR2VuZXJhdGVQdXRCeUluZGV4CiAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0s
IGluZGV4KTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUHV0UHJvcGVy
dHlTbG90IHB1dFByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzaG91bGRUaHJvdyk7XG4iKTsKICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7XG4i
KTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChwbHVnaW5FbGVtZW50Q3Vz
dG9tUHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0
eVNsb3QsIHB1dFJlc3VsdCkpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmIChwbHVnaW5FbGVtZW50Q3VzdG9tUHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0KSlcbiIp
OwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7
XG5cbiIpOwogICAgIH0KIAogICAgIGlmICghJGVsbGlkZXNDYWxsc1RvQmFzZSkgewotICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNl
bGwsIHN0YXRlLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxl
eGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpO1xuIik7CiAgICAg
fQogICAgIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CkBAIC0xMTEzLDcgKzEx
MTMsNyBAQCBzdWIgR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0eQogICAgIAogICAgIHJldHVybiBp
ZiAhJG5hbWVkU2V0dGVyT3BlcmF0aW9uICYmICEkaW5kZXhlZFNldHRlck9wZXJhdGlvbjsKICAg
ICAKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y2xhc3NOYW1lfTo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0
b3IsIGJvb2wgc2hvdWxkVGhyb3cpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29s
ICR7Y2xhc3NOYW1lfTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3Vs
ZFRocm93KVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9
Kj4ob2JqZWN0KTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG5cbiIpOwpAQCAtMTEyMSwxMCAr
MTEyMSwxMCBAQCBzdWIgR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0eQogICAgIGFzc2VydCgiQ0VS
ZWFjdGlvbnMgaXMgbm90IHN1cHBvcnRlZCBvbiBoYXZpbmcgYm90aCBuYW1lZCBzZXR0ZXJzIGFu
ZCBpbmRleGVkIHNldHRlcnMiKSBpZiAkbmFtZWRTZXR0ZXJPcGVyYXRpb24gJiYgJG5hbWVkU2V0
dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc30KICAgICAgICAg
JiYgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24gJiYgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24tPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rpb25zfTsKICAgICBpZiAoJG5hbWVkU2V0dGVyT3Bl
cmF0aW9uKSB7Ci0gICAgICAgIEdlbmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0aW9uc1N0YWNrSWZO
ZWVkZWQoJG91dHB1dEFycmF5LCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24sICIqc3RhdGUiKTsKKyAg
ICAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0
QXJyYXksICRuYW1lZFNldHRlck9wZXJhdGlvbiwgIipsZXhpY2FsR2xvYmFsT2JqZWN0Iik7CiAg
ICAgfQogICAgIGlmICgkaW5kZXhlZFNldHRlck9wZXJhdGlvbikgewotICAgICAgICBHZW5lcmF0
ZUN1c3RvbUVsZW1lbnRSZWFjdGlvbnNTdGFja0lmTmVlZGVkKCRvdXRwdXRBcnJheSwgJGluZGV4
ZWRTZXR0ZXJPcGVyYXRpb24sICIqc3RhdGUiKTsKKyAgICAgICAgR2VuZXJhdGVDdXN0b21FbGVt
ZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0QXJyYXksICRpbmRleGVkU2V0dGVyT3Bl
cmF0aW9uLCAiKmxleGljYWxHbG9iYWxPYmplY3QiKTsKICAgICB9CiAgICAgCiAgICAgIyAxLiBJ
ZiBPIHN1cHBvcnRzIGluZGV4ZWQgcHJvcGVydGllcyBhbmQgUCBpcyBhbiBhcnJheSBpbmRleCBw
cm9wZXJ0eSBuYW1lLCB0aGVuOgpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAgc3ViIEdlbmVyYXRlRGVm
aW5lT3duUHJvcGVydHkKICAgICAgICAgICAgICMgICAgICAgIG9ubHkgbG9vayBhdCB0aGUgYWN0
dWFsIHByb3BlcnRpZXMsIGFuZCBub3QgY2FsbCBpbnRvIG91ciBpbXBsZW1lbnRhdGlvbiBvZiB0
aGUKICAgICAgICAgICAgICMgICAgICAgIFtbR2V0T3duUHJvcGVydHldXSBob29rPwogICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudC4gIiAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5IH07XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
JGFkZGl0aW9uYWxJbmRlbnQuICIgICAgICAgIGlmICghSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkge1xuIik7CisgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50LiAiICAgICAgICBp
ZiAoIUpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkge1xuIik7CiAgICAgICAgICAgICAkYWRkaXRp
b25hbEluZGVudCAuPSAiICAgICI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCEkbmFtZWRTZXR0
ZXJPcGVyYXRpb24pIHsKQEAgLTExOTUsNyArMTE5NSw3IEBAIHN1YiBHZW5lcmF0ZURlZmluZU93
blByb3BlcnR5CiAgICAgICAgICAgICBHZW5lcmF0ZUludm9rZU5hbWVkUHJvcGVydHlTZXR0ZXIo
JG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAgICIsICRpbnRlcmZhY2Us
ICRuYW1lZFNldHRlck9wZXJhdGlvbiwgInByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpIik7CiAg
ICAgICAgICAgICBpZiAoJG5hbWVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntDYWxsTmFtZWRTZXR0ZXJPbmx5Rm9yU3VwcG9ydGVkUHJvcGVydGllc30pIHsKICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50IC4gIiAgICBpZiAo
IWlzUHJvcGVydHlTdXBwb3J0ZWQpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICRhZGRpdGlvbmFsSW5kZW50IC4gIiAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5RGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5l
T3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHBy
b3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAjIDIuMi4zLiBSZXR1cm4gdHJ1ZS4KICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwpAQCAt
MTIyMyw3ICsxMjIzLDcgQEAgc3ViIEdlbmVyYXRlRGVmaW5lT3duUHJvcGVydHkKICAgICAKICAg
ICAjIDQuIFJldHVybiBPcmRpbmFyeURlZmluZU93blByb3BlcnR5KE8sIFAsIERlc2MpLgogICAg
ICMgRklYTUU6IERvZXMgdGhpcyBkbyB0aGUgc2FtZSB0aGluZz8KLSAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0
YXRlLCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpO1xu
Iik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5l
T3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIG5l
d1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpO1xuIik7CiAgICAgCiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAifVxuXG4iKTsKIH0KQEAgLTEyNDQsOSArMTI0NCw5IEBAIHN1YiBHZW5l
cmF0ZURlbGV0ZVByb3BlcnR5Q29tbW9uCiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01B
YnN0cmFjdE9wZXJhdGlvbnMuaCIsICRjb25kaXRpb25hbCk7CiAgICAgbXkgJG92ZXJyaWRlQnVp
bHRpbiA9ICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0V4dGVuZGVkQXR0cmlidXRlKCRpbnRlcmZh
Y2UsICJPdmVycmlkZUJ1aWx0aW5zIikgPyAiT3ZlcnJpZGVCdWlsdGluczo6WWVzIiA6ICJPdmVy
cmlkZUJ1aWx0aW5zOjpObyI7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChpc1Zp
c2libGVOYW1lZFByb3BlcnR5PCR7b3ZlcnJpZGVCdWlsdGlufT4oKnN0YXRlLCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUpKSB7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KGlzVmlzaWJsZU5hbWVkUHJvcGVydHk8JHtvdmVycmlkZUJ1aWx0aW59PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lKSkge1xuIik7CiAKLSAgICBHZW5lcmF0
ZUN1c3RvbUVsZW1lbnRSZWFjdGlvbnNTdGFja0lmTmVlZGVkKCRvdXRwdXRBcnJheSwgJG9wZXJh
dGlvbiwgIipzdGF0ZSIpOworICAgIEdlbmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0aW9uc1N0YWNr
SWZOZWVkZWQoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9uLCAiKmxleGljYWxHbG9iYWxPYmplY3Qi
KTsKIAogICAgICMgMi4xLiBJZiBPIGRvZXMgbm90IGltcGxlbWVudCBhbiBpbnRlcmZhY2Ugd2l0
aCBhIG5hbWVkIHByb3BlcnR5IGRlbGV0ZXIsIHRoZW4gcmV0dXJuIGZhbHNlLgogICAgICMgMi4y
LiBMZXQgb3BlcmF0aW9uIGJlIHRoZSBvcGVyYXRpb24gdXNlZCB0byBkZWNsYXJlIHRoZSBuYW1l
ZCBwcm9wZXJ0eSBkZWxldGVyLgpAQCAtMTI3Myw4ICsxMjczLDggQEAgc3ViIEdlbmVyYXRlRGVs
ZXRlUHJvcGVydHlDb21tb24KICAgICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57TWF5VGhyb3dFeGNlcHRpb259KSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgYXV0byByZXN1bHQgPSAke2Z1bmN0aW9uQ2FsbH07XG4iKTsKICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7XG4iKTsK
LSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7XG4iKTsKLSAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhy
b3dTY29wZSwgcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7XG4iKTsKKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTtcbiIpOworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpO1xu
Iik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHJldHVybiB0cnVl
O1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgfVxuXG4iKTsKIApA
QCAtMTMwMiw3ICsxMzAyLDcgQEAgc3ViIEdlbmVyYXRlRGVsZXRlUHJvcGVydHkKICAgICAjIFRo
aXMgaW1wbGVtZW50cyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNsZWdhY3ktcGxh
dGZvcm0tb2JqZWN0LWRlbGV0ZSBmb3IgdGhlCiAgICAgIyBmb3IgdGhlIGRlbGV0ZVByb3BlcnR5
IG92ZXJyaWRlIGhvb2suCiAKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y2xhc3NO
YW1lfTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9v
bCAke2NsYXNzTmFtZX06OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpXG4iKTsK
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBhdXRvJiB0aGlzT2JqZWN0ID0gKmpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtc
biIpOwpAQCAtMTMyMiw3ICsxMzIyLDcgQEAgc3ViIEdlbmVyYXRlRGVsZXRlUHJvcGVydHkKIAog
ICAgICMgRklYTUU6IEluc3RlYWQgb2YgY2FsbGluZyBkb3duIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSwgcGVyaGFwcyB3ZSBzaG91bGQgaW1wbGVtZW50CiAgICAgIyB0aGUgcmVtYWluZWQgb2Yg
dGhlIGFsZ29yaXRobSBvdXJzZWx2ZXMuCi0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJl
dHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgc3RhdGUsIHByb3BlcnR5TmFtZSk7
XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eShjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpO1xuIik7
CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKIH0KIApAQCAtMTMzMyw3ICsxMzMz
LDcgQEAgc3ViIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlCeUluZGV4CiAgICAgIyBUaGlzIGltcGxl
bWVudHMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRmb3JtLW9i
amVjdC1kZWxldGUgZm9yIHRoZQogICAgICMgZm9yIHRoZSBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgg
b3ZlcnJpZGUgaG9vay4KIAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgJHtjbGFzc05h
bWV9OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRl
LCB1bnNpZ25lZCBpbmRleClcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgJHtj
bGFzc05hbWV9OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgpXG4iKTsKICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBh
dXRvJiB0aGlzT2JqZWN0ID0gKmpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwpAQCAt
MTM1MCw3ICsxMzUwLDcgQEAgc3ViIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlCeUluZGV4CiAgICAg
aWYgKEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSkpIHsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiAhaW1wbC5pc1N1cHBvcnRlZFByb3BlcnR5SW5k
ZXgoaW5kZXgpO1xuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpO1xuIik7
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTtcbiIpOwogCiAgICAgICAgICMgR2VuZXJhdGVEZWxl
dGVQcm9wZXJ0eUNvbW1vbiBpbXBsZW1lbnRzIHN0ZXAgMi4KQEAgLTEzNjQsNyArMTM2NCw3IEBA
IHN1YiBHZW5lcmF0ZURlbGV0ZVByb3BlcnR5QnlJbmRleAogICAgICAgICAjICAgIDIuIE90aGVy
d2lzZSwgcmVtb3ZlIHRoZSBwcm9wZXJ0eSBmcm9tIE8uCiAgICAgICAgICMgMy4gUmV0dXJuIHRy
dWUuCiAgICAgICAgIAotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpT
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4KTtcbiIpOwor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgpO1xuIik7CiAg
ICAgfQogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKQEAgLTE1MDcsMTYgKzE1
MDcsMTYgQEAgc3ViIEdldEFyZ3VtZW50RXhjZXB0aW9uRnVuY3Rpb24KIAogICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNDYWxsYmFja0ludGVyZmFjZSgkYXJndW1lbnQtPnR5cGUpIHx8ICRjb2Rl
R2VuZXJhdG9yLT5Jc0NhbGxiYWNrRnVuY3Rpb24oJGFyZ3VtZW50LT50eXBlKSkgewogICAgICAg
ICAjIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBzcGVjaWFsaXplZCBtZXNzYWdlcyBmb3IgY2FsbGJh
Y2sgaW50ZXJmYWNlcyB2cy4gY2FsbGJhY2sgZnVuY3Rpb25zLgotICAgICAgICByZXR1cm4gInRo
cm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgJHthcmd1bWVudElu
ZGV4fSwgXCIke25hbWV9XCIsIFwiJHt2aXNpYmxlSW50ZXJmYWNlTmFtZX1cIiwgJHtxdW90ZWRG
dW5jdGlvbk5hbWV9KTsiOworICAgICAgICByZXR1cm4gInRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAke2FyZ3VtZW50SW5kZXh9LCBc
IiR7bmFtZX1cIiwgXCIke3Zpc2libGVJbnRlcmZhY2VOYW1lfVwiLCAke3F1b3RlZEZ1bmN0aW9u
TmFtZX0pOyI7CiAgICAgfQogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBl
KCRhcmd1bWVudC0+dHlwZSkgfHwgJGNvZGVHZW5lcmF0b3ItPklzQnVmZmVyU291cmNlVHlwZSgk
YXJndW1lbnQtPnR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAidGhyb3dBcmd1bWVudFR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsICR7YXJndW1lbnRJbmRleH0sIFwiJHtuYW1lfVwiLCBcIiR7dmlzaWJs
ZUludGVyZmFjZU5hbWV9XCIsICR7cXVvdGVkRnVuY3Rpb25OYW1lfSwgXCIke3R5cGVOYW1lfVwi
KTsiOworICAgICAgICByZXR1cm4gInRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsICR7YXJndW1lbnRJbmRleH0sIFwiJHtuYW1lfVwiLCBcIiR7dmlzaWJs
ZUludGVyZmFjZU5hbWV9XCIsICR7cXVvdGVkRnVuY3Rpb25OYW1lfSwgXCIke3R5cGVOYW1lfVwi
KTsiOwogICAgIH0KIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkYXJndW1l
bnQtPnR5cGUpKSB7CiAgICAgICAgIG15ICRjbGFzc05hbWUgPSBHZXRFbnVtZXJhdGlvbkNsYXNz
TmFtZSgkYXJndW1lbnQtPnR5cGUsICRpbnRlcmZhY2UpOwotICAgICAgICByZXR1cm4gInRocm93
QXJndW1lbnRNdXN0QmVFbnVtRXJyb3Ioc3RhdGUsIHNjb3BlLCAke2FyZ3VtZW50SW5kZXh9LCBc
IiR7bmFtZX1cIiwgXCIke3Zpc2libGVJbnRlcmZhY2VOYW1lfVwiLCAke3F1b3RlZEZ1bmN0aW9u
TmFtZX0sIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8JHtjbGFzc05hbWV9PigpKTsiOworICAg
ICAgICByZXR1cm4gInRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsICR7YXJndW1lbnRJbmRleH0sIFwiJHtuYW1lfVwiLCBcIiR7dmlzaWJsZUlu
dGVyZmFjZU5hbWV9XCIsICR7cXVvdGVkRnVuY3Rpb25OYW1lfSwgZXhwZWN0ZWRFbnVtZXJhdGlv
blZhbHVlczwke2NsYXNzTmFtZX0+KCkpOyI7CiAgICAgfQogCiAgICAgcmV0dXJuIHVuZGVmOwpA
QCAtMTUyNyw3ICsxNTI3LDcgQEAgc3ViIEdldEFyZ3VtZW50RXhjZXB0aW9uVGhyb3dlcgogICAg
IG15ICgkaW50ZXJmYWNlLCAkYXJndW1lbnQsICRhcmd1bWVudEluZGV4LCAkcXVvdGVkRnVuY3Rp
b25OYW1lKSA9IEBfOwogCiAgICAgbXkgJGZ1bmN0aW9uQ2FsbCA9IEdldEFyZ3VtZW50RXhjZXB0
aW9uRnVuY3Rpb24oJGludGVyZmFjZSwgJGFyZ3VtZW50LCAkYXJndW1lbnRJbmRleCwgJHF1b3Rl
ZEZ1bmN0aW9uTmFtZSk7Ci0gICAgcmV0dXJuICJbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgIiAuICRmdW5jdGlvbkNhbGwgLiAiIH0iIGlmICRmdW5j
dGlvbkNhbGw7CisgICAgcmV0dXJuICJbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7ICIgLiAkZnVuY3Rpb25DYWxsIC4g
IiB9IiBpZiAkZnVuY3Rpb25DYWxsOwogfQogCiBzdWIgR2V0QXR0cmlidXRlRXhjZXB0aW9uRnVu
Y3Rpb24KQEAgLTE1MzksNyArMTUzOSw3IEBAIHN1YiBHZXRBdHRyaWJ1dGVFeGNlcHRpb25GdW5j
dGlvbgogICAgIG15ICR0eXBlTmFtZSA9IEdldFR5cGVOYW1lRm9yRGlzcGxheUluRXhjZXB0aW9u
KCRhdHRyaWJ1dGUtPnR5cGUpOwogCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJU
eXBlKCRhdHRyaWJ1dGUtPnR5cGUpIHx8ICRjb2RlR2VuZXJhdG9yLT5Jc0J1ZmZlclNvdXJjZVR5
cGUoJGF0dHJpYnV0ZS0+dHlwZSkpIHsKLSAgICAgICAgcmV0dXJuICJ0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIFwiJHt2aXNpYmxlSW50ZXJmYWNlTmFtZX1cIiwgXCIke25h
bWV9XCIsIFwiJHt0eXBlTmFtZX1cIik7IjsKKyAgICAgICAgcmV0dXJuICJ0aHJvd0F0dHJpYnV0
ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgXCIke3Zpc2libGVJbnRlcmZh
Y2VOYW1lfVwiLCBcIiR7bmFtZX1cIiwgXCIke3R5cGVOYW1lfVwiKTsiOwogICAgIH0KIH0KIApA
QCAtMTU0OCw3ICsxNTQ4LDcgQEAgc3ViIEdldEF0dHJpYnV0ZUV4Y2VwdGlvblRocm93ZXIKICAg
ICBteSAoJGludGVyZmFjZSwgJGF0dHJpYnV0ZSkgPSBAXzsKIAogICAgIG15ICRmdW5jdGlvbkNh
bGwgPSBHZXRBdHRyaWJ1dGVFeGNlcHRpb25GdW5jdGlvbigkaW50ZXJmYWNlLCAkYXR0cmlidXRl
KTsKLSAgICByZXR1cm4gIltdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyAiIC4gJGZ1bmN0aW9uQ2FsbCAuICIgfSIgaWYgJGZ1bmN0aW9uQ2FsbDsKKyAg
ICByZXR1cm4gIltdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgIiAuICRmdW5jdGlvbkNhbGwgLiAiIH0iIGlmICRmdW5j
dGlvbkNhbGw7CiAKIH0KIApAQCAtMTYyNCwxNCArMTYyNCwxNyBAQCBzdWIgR2V0RnVsbHlRdWFs
aWZpZWRJbXBsZW1lbnRhdGlvbkNhbGxOYW1lCiAKIHN1YiBBZGRBZGRpdGlvbmFsQXJndW1lbnRz
Rm9ySW1wbGVtZW50YXRpb25DYWxsCiB7Ci0gICAgbXkgKCRhcmd1bWVudHMsICRpbnRlcmZhY2Us
ICRwcm9wZXJ0eSwgJGltcGxFeHByZXNzaW9uLCAkc3RhdGVFeHByZXNzaW9uLCAkdGhpc09iamVj
dEV4cHJlc3Npb24pID0gQF87CisgICAgbXkgKCRhcmd1bWVudHMsICRpbnRlcmZhY2UsICRwcm9w
ZXJ0eSwgJGltcGxFeHByZXNzaW9uLCAkZ2xvYmFsT2JqZWN0LCAkY2FsbEZyYW1lLCAkdGhpc09i
amVjdEV4cHJlc3Npb24pID0gQF87CiAgICAgCiAgICAgaWYgKCRwcm9wZXJ0eS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRCeX0gJiYgISRwcm9wZXJ0eS0+aXNTdGF0aWMpIHsKICAg
ICAgICAgdW5zaGlmdChAJGFyZ3VtZW50cywgJGltcGxFeHByZXNzaW9uKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKCRwcm9wZXJ0eS0+aXNNYXBMaWtlKSB7Ci0gICAgICAgIHB1c2goQCRhcmd1bWVu
dHMsICRzdGF0ZUV4cHJlc3Npb24pOworICAgICAgICBwdXNoKEAkYXJndW1lbnRzLCAkZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgaWYgKHJlZigkcHJvcGVydHkpIGVxICJJRExPcGVyYXRpb24iKSB7
CisgICAgICAgICAgICBwdXNoKEAkYXJndW1lbnRzLCAkY2FsbEZyYW1lKTsKKyAgICAgICAgfQog
ICAgICAgICBwdXNoKEAkYXJndW1lbnRzLCAkdGhpc09iamVjdEV4cHJlc3Npb24pOwogICAgIH0K
IH0KQEAgLTIwOTMsMTggKzIwOTYsMTggQEAgc3ViIEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1l
bnRhdGlvbkNvbnRlbnQKICAgICAkcmVzdWx0IC49ICJ9XG5cbiI7CiAKIAotICAgICMgRklYTUU6
IENoYW5nZSB0byB0YWtlIFZNJiBpbnN0ZWFkIG9mIEV4ZWNTdGF0ZSouCi0gICAgJHJlc3VsdCAu
PSAidGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhFeGVjU3RhdGUm
IHN0YXRlLCAkY2xhc3NOYW1lIGVudW1lcmF0aW9uVmFsdWUpXG4iOworICAgICMgRklYTUU6IENo
YW5nZSB0byB0YWtlIFZNJiBpbnN0ZWFkIG9mIEpTR2xvYmFsT2JqZWN0Ki4KKyAgICAkcmVzdWx0
IC49ICJ0ZW1wbGF0ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCAkY2xhc3NOYW1lIGVudW1lcmF0aW9uVmFsdWUp
XG4iOwogICAgICRyZXN1bHQgLj0gIntcbiI7Ci0gICAgJHJlc3VsdCAuPSAiICAgIHJldHVybiBq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1l
cmF0aW9uVmFsdWUpKTtcbiI7CisgICAgJHJlc3VsdCAuPSAiICAgIHJldHVybiBqc1N0cmluZ1dp
dGhDYWNoZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmco
ZW51bWVyYXRpb25WYWx1ZSkpO1xuIjsKICAgICAkcmVzdWx0IC49ICJ9XG5cbiI7CiAKLSAgICAj
IEZJWE1FOiBDaGFuZ2UgdG8gdGFrZSBWTSYgaW5zdGVhZCBvZiBFeGVjU3RhdGUmLgorICAgICMg
RklYTUU6IENoYW5nZSB0byB0YWtlIFZNJiBpbnN0ZWFkIG9mIEpTR2xvYmFsT2JqZWN0Ji4KICAg
ICAjIEZJWE1FOiBDb25zaWRlciB1c2luZyB0b1N0cmluZ09yTnVsbCB0byBtYWtlIGV4Y2VwdGlv
biBjaGVja2luZyBmYXN0ZXIuCiAgICAgIyBGSVhNRTogQ29uc2lkZXIgZmluZGluZyBhIG1vcmUg
ZWZmaWNpZW50IHdheSB0byBtYXRjaCBhZ2FpbnN0IGFsbCB0aGUgc3RyaW5ncyBxdWlja2x5Lgot
ICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gT3B0aW9uYWw8JGNsYXNzTmFtZT4gcGFyc2VFbnVt
ZXJhdGlvbjwkY2xhc3NOYW1lPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKVxuIjsK
KyAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+IE9wdGlvbmFsPCRjbGFzc05hbWU+IHBhcnNlRW51
bWVyYXRpb248JGNsYXNzTmFtZT4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpXG4iOwogICAgICRyZXN1bHQgLj0gIntcbiI7Ci0gICAgJHJlc3VsdCAu
PSAiICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpO1xuIjsK
KyAgICAkcmVzdWx0IC49ICIgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiI7CiAgICAgZm9yZWFjaCBteSAkdmFsdWUgKEB7JGVu
dW1lcmF0aW9uLT52YWx1ZXN9KSB7CiAgICAgICAgIG15ICRlbnVtZXJhdGlvblZhbHVlTmFtZSA9
IEdldEVudW1lcmF0aW9uVmFsdWVOYW1lKCR2YWx1ZSk7CiAgICAgICAgIGlmICgkdmFsdWUgZXEg
IiIpIHsKQEAgLTIxNTQsOCArMjE1Nyw4IEBAIHN1YiBHZW5lcmF0ZUVudW1lcmF0aW9uSGVhZGVy
Q29udGVudAogICAgIG15ICRleHBvcnRNYWNybyA9IEdldEV4cG9ydE1hY3JvRm9ySlNDbGFzcygk
ZW51bWVyYXRpb24pOwogCiAgICAgJHJlc3VsdCAuPSAiJHtleHBvcnRNYWNyb31TdHJpbmcgY29u
dmVydEVudW1lcmF0aW9uVG9TdHJpbmcoJGNsYXNzTmFtZSk7XG4iOwotICAgICRyZXN1bHQgLj0g
InRlbXBsYXRlPD4gJHtleHBvcnRNYWNyb31KU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRp
b25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgJGNsYXNzTmFtZSk7XG5cbiI7Ci0gICAgJHJlc3VsdCAu
PSAidGVtcGxhdGU8PiAke2V4cG9ydE1hY3JvfU9wdGlvbmFsPCRjbGFzc05hbWU+IHBhcnNlRW51
bWVyYXRpb248JGNsYXNzTmFtZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpO1xuIjsK
KyAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+ICR7ZXhwb3J0TWFjcm99SlNDOjpKU1N0cmluZyog
Y29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgJGNsYXNzTmFtZSk7
XG5cbiI7CisgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiAke2V4cG9ydE1hY3JvfU9wdGlvbmFs
PCRjbGFzc05hbWU+IHBhcnNlRW51bWVyYXRpb248JGNsYXNzTmFtZT4oSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTQzo6SlNWYWx1ZSk7XG4iOwogICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gJHtl
eHBvcnRNYWNyb31jb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPCRjbGFzc05h
bWU+KCk7XG5cbiI7CiAgICAgJHJlc3VsdCAuPSAiI2VuZGlmXG5cbiIgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwogICAgIApAQCAtMjIyNSw3ICsyMjI4LDcgQEAgc3ViIEdlbmVyYXRlRGVmYXVsdFZh
bHVlCiAgICAgICAgICAgICByZXR1cm4gIldURjo6bnVsbG9wdCIgaWYgJHR5cGUtPmlzTnVsbGFi
bGU7CiAKICAgICAgICAgICAgIG15ICRJRExUeXBlID0gR2V0SURMVHlwZSgkdHlwZVNjb3BlLCAk
dHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gImNvbnZlcnQ8JHtJRExUeXBlfT4oc3RhdGUsIGpz
TnVsbCgpKTsiOworICAgICAgICAgICAgcmV0dXJuICJjb252ZXJ0PCR7SURMVHlwZX0+KGxleGlj
YWxHbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsiOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJu
ICJqc051bGwoKSIgaWYgJHR5cGUtPm5hbWUgZXEgImFueSI7CkBAIC0yMjU1LDEwICsyMjU4LDEw
IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlIZWFkZXJDb250ZW50CiAKICAgICBteSAkcmVzdWx0
ID0gIiI7CiAgICAgJHJlc3VsdCAuPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYg
JGNvbmRpdGlvbmFsU3RyaW5nOwotICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gJHtleHBvcnRN
YWNyb30ke2NsYXNzTmFtZX0gY29udmVydERpY3Rpb25hcnk8JHtjbGFzc05hbWV9PihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7XG5cbiI7CisgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8
PiAke2V4cG9ydE1hY3JvfSR7Y2xhc3NOYW1lfSBjb252ZXJ0RGljdGlvbmFyeTwke2NsYXNzTmFt
ZX0+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpO1xuXG4iOwogCiAgICAgaWYg
KCRkaWN0aW9uYXJ5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0dlbmVyYXRlVG9KU09iamVjdH0p
IHsKLSAgICAgICAgJHJlc3VsdCAuPSAiJHtleHBvcnRNYWNyb31KU0M6OkpTT2JqZWN0KiBjb252
ZXJ0RGljdGlvbmFyeVRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNv
bnN0ICR7Y2xhc3NOYW1lfSYpO1xuXG4iOworICAgICAgICAkcmVzdWx0IC49ICIke2V4cG9ydE1h
Y3JvfUpTQzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCAke2NsYXNzTmFtZX0mKTtcblxuIjsKICAg
ICB9CiAKICAgICAkcmVzdWx0IC49ICIjZW5kaWZcblxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7
CkBAIC0yMzAxLDE2ICsyMzA0LDE2IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRh
dGlvbkNvbnRlbnQKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01Db252ZXJ0RGljdGlvbmFy
eS5oIik7CiAKICAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLWRpY3Rp
b25hcnkKLSAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+ICRjbGFzc05hbWUgY29udmVydERpY3Rp
b25hcnk8JGNsYXNzTmFtZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSlcbiI7Cisg
ICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiAkY2xhc3NOYW1lIGNvbnZlcnREaWN0aW9uYXJ5PCRj
bGFzc05hbWU+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKVxuIjsKICAgICAkcmVzdWx0IC49ICJ7XG4iOwotICAgICRyZXN1bHQgLj0gIiAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpO1xuIjsKKyAgICAkcmVzdWx0IC49ICIgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7XG4iOwogICAgICRyZXN1bHQgLj0gIiAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiI7CiAgICAgJHJlc3VsdCAu
PSAiICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
O1xuIjsKICAgICAkcmVzdWx0IC49ICIgICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7XG4iOwogCiAgICAgIyAxLiBJZiBUeXBl
KFYpIGlzIG5vdCBVbmRlZmluZWQsIE51bGwgb3IgT2JqZWN0LCB0aGVuIHRocm93IGEgVHlwZUVy
cm9yLgogICAgICRyZXN1bHQgLj0gIiAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVk
ICYmICFvYmplY3QpKSB7XG4iOwotICAgICRyZXN1bHQgLj0gIiAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCB0aHJvd1Njb3BlKTtcbiI7CisgICAgJHJlc3VsdCAuPSAiICAgICAgICB0aHJv
d1R5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7XG4iOwogICAgICRy
ZXN1bHQgLj0gIiAgICAgICAgcmV0dXJuIHsgfTtcbiI7CiAgICAgJHJlc3VsdCAuPSAiICAgIH1c
biI7CiAKQEAgLTIzNTcsNyArMjM2MCw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1l
bnRhdGlvbkNvbnRlbnQKICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBpZiAoaXNOdWxsT3JV
bmRlZmluZWQpXG4iOwogICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgICAgICAke2tleX1WYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7XG4iOwogICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGVsc2Ug
e1xuIjsKLSAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgJHtrZXl9VmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtrZXl9XCIpKTtc
biI7CisgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgICAgICR7a2V5fVZhbHVlID0gb2JqZWN0
LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwi
JHtrZXl9XCIpKTtcbiI7CiAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTtcbiI7CiAgICAgICAgICAgICAkcmVzdWx0IC49
ICIgICAgfVxuIjsKIApAQCAtMjM2Niw3ICsyMzY5LDcgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFy
eUltcGxlbWVudGF0aW9uQ29udGVudAogICAgICAgICAgICAgIyA0LjMuIElmIHZhbHVlIGlzIG5v
dCB1bmRlZmluZWQsIHRoZW46CiAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKCEke2tl
eX1WYWx1ZS5pc1VuZGVmaW5lZCgpKSB7XG4iOwogCi0gICAgICAgICAgICBteSAkbmF0aXZlVmFs
dWUgPSBKU1ZhbHVlVG9OYXRpdmUoJHR5cGVTY29wZSwgJG1lbWJlciwgIiR7a2V5fVZhbHVlIiwg
JG1lbWJlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9LCAiJnN0YXRlIiwgInN0
YXRlIiwgIiIsICIqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2Jh
bE9iamVjdCgpKSIpOworICAgICAgICAgICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0
aXZlKCR0eXBlU2NvcGUsICRtZW1iZXIsICIke2tleX1WYWx1ZSIsICRtZW1iZXItPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfSwgIiZsZXhpY2FsR2xvYmFsT2JqZWN0IiwgImxleGlj
YWxHbG9iYWxPYmplY3QiLCAiIiwgIipqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCkiKTsKICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgcmVzdWx0
LiRpbXBsZW1lbnRlZEFzS2V5ID0gJG5hdGl2ZVZhbHVlO1xuIjsKICAgICAgICAgICAgICRyZXN1
bHQgLj0gIiAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pO1xuIjsK
IApAQCAtMjM3OCw3ICsyMzgxLDcgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0
aW9uQ29udGVudAogICAgICAgICAgICAgfSBlbHNpZiAoJG1lbWJlci0+aXNSZXF1aXJlZCkgewog
ICAgICAgICAgICAgICAgICMgNC41LiBPdGhlcndpc2UsIGlmIHZhbHVlIGlzIHVuZGVmaW5lZCBh
bmQgdGhlIGRpY3Rpb25hcnkgbWVtYmVyIGlzIGEgcmVxdWlyZWQgZGljdGlvbmFyeSBtZW1iZXIs
IHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAg
IH0gZWxzZSB7XG4iOwotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgdGhyb3dS
ZXF1aXJlZE1lbWJlclR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgXCIiLiAkbWVtYmVyLT5u
YW1lIC4iXCIsIFwiJG5hbWVcIiwgXCIiLiBHZXRUeXBlTmFtZUZvckRpc3BsYXlJbkV4Y2VwdGlv
bigkdHlwZSkgLiJcIik7XG4iOworICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAg
dGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBcIiIuICRtZW1iZXItPm5hbWUgLiJcIiwgXCIkbmFtZVwiLCBcIiIuIEdldFR5cGVOYW1l
Rm9yRGlzcGxheUluRXhjZXB0aW9uKCR0eXBlKSAuIlwiKTtcbiI7CiAgICAgICAgICAgICAgICAg
JHJlc3VsdCAuPSAiICAgICAgICByZXR1cm4geyB9O1xuIjsKICAgICAgICAgICAgICAgICAkcmVz
dWx0IC49ICIgICAgfVxuIjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMzk3LDEyICsyNDAw
LDEyIEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQKICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NR2xvYmFsT2JqZWN0LmgiKTsKICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9PYmplY3RDb25zdHJ1Y3Rvci5oPiIpOwog
Ci0gICAgICAgICRyZXN1bHQgLj0gIkpTQzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0ICR7Y2xhc3NOYW1lfSYgZGljdGlvbmFyeSlcbiI7CisgICAgICAgICRyZXN1bHQgLj0g
IkpTQzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCAke2NsYXNzTmFtZX0mIGRpY3Rpb25hcnkpXG4iOwogICAgICAgICAkcmVzdWx0IC49ICJ7
XG4iOwotICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpO1xuXG4i
OworICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTtcblxuIjsKIAogICAgICAgICAjIDEuIExldCBPIGJlICEgT2JqZWN0Q3Jl
YXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAgJHJlc3VsdCAuPSAiICAgIGF1dG8gcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlLCBnbG9iYWxPYmplY3Qub2JqZWN0UHJv
dG90eXBlKCkpO1xuXG4iOworICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0byByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9i
amVjdFByb3RvdHlwZSgpKTtcblxuIjsKIAogICAgICAgICAjIDIuIExldCBkaWN0aW9uYXJpZXMg
YmUgYSBsaXN0IGNvbnNpc3Rpbmcgb2YgRCBhbmQgYWxsIG9mIETigJlzIGluaGVyaXRlZCBkaWN0
aW9uYXJpZXMsCiAgICAgICAgICMgICAgaW4gb3JkZXIgZnJvbSBsZWFzdCB0byBtb3N0IGRlcml2
ZWQuCkBAIC0yNjMzLDcgKzI2MzYsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgIyBG
SVhNRTogQWRkIGV4dGVuZGVkIGF0dHJpYnV0ZSBmb3IgdGhpcy4KICAgICAgICAgbXkgQHRvV3Jh
cHBlZEFyZ3VtZW50cyA9ICgpOwogICAgICAgICBwdXNoKEB0b1dyYXBwZWRBcmd1bWVudHMsICJK
U0M6OlZNJiIpOwotICAgICAgICBwdXNoKEB0b1dyYXBwZWRBcmd1bWVudHMsICJKU0M6OkV4ZWNT
dGF0ZSYiKSBpZiAkaW50ZXJmYWNlLT50eXBlLT5uYW1lIGVxICJYUGF0aE5TUmVzb2x2ZXIiOwor
ICAgICAgICBwdXNoKEB0b1dyYXBwZWRBcmd1bWVudHMsICJKU0M6OkpTR2xvYmFsT2JqZWN0JiIp
IGlmICRpbnRlcmZhY2UtPnR5cGUtPm5hbWUgZXEgIlhQYXRoTlNSZXNvbHZlciI7CiAgICAgICAg
IHB1c2goQHRvV3JhcHBlZEFyZ3VtZW50cywgIkpTQzo6SlNWYWx1ZSIpOwogCiAgICAgICAgIG15
ICR0b1dyYXBwZWRUeXBlID0gJGludGVyZmFjZS0+dHlwZS0+bmFtZSBlcSAiWFBhdGhOU1Jlc29s
dmVyIiA/ICJSZWZQdHI8JHtpbXBsVHlwZX0+IiA6ICIke2ltcGxUeXBlfSoiOwpAQCAtMjY2MCwz
NCArMjY2MywzNCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAjIENsYXNzSW5mbyBNZXRob2RU
YWJsZSBkZWNsYXJhdGlvbnMuCiAgICAgCiAgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7
CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgJHN0cnVjdHVyZUZs
YWdzeyJKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCJ9ID0gMTsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8ifSA9IDE7
CiAgICAgfQogCiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNr
U2VjdXJpdHl9KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZv
aWQgZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5
U2VjdXJpdHlDaGVjayhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgICRzdHJ1
Y3R1cmVGbGFnc3siSlNDOjpIYXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sifSA9IDE7CiAgICAg
fQogICAgIAogICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoJGlu
dGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVy
YXRpb25Nb2RlKCkpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9
IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpO1xuIik7CiAgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3si
SlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIn0gPSAxOwogICAgIH0KICAgICAKICAgICBp
ZiAoSW5zdGFuY2VPdmVycmlkZXNQdXQoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlT
bG90Jik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9v
bCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlND
OjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpO1xuIik7CiAgICAgfQogICAgIAogICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc0RlZmluZU93
blByb3BlcnR5KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIik7CiAgICAgfQogCiAgICAgaWYgKEluc3Rh
bmNlT3ZlcnJpZGVzRGVsZXRlUHJvcGVydHkoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2Vs
bCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCk7XG4iKTsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQp
O1xuIik7CiAgICAgfQogCiAgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzR2V0Q2FsbERhdGEoJGlu
dGVyZmFjZSkpIHsKQEAgLTI2OTcsMTUgKzI3MDAsMTUgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAg
ICAgfQogICAgIAogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0
b21HZXRQcm90b3R5cGV9KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGdldFByb3RvdHlwZShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopO1xuIik7CiAgICAgfQogICAgIAogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntDdXN0b21Ub1N0cmluZ05hbWV9KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopO1xuIik7CiAgICAgfQogICAgIAogICAgIGlmICgkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21QcmV2ZW50RXh0ZW5zaW9uc30pIHsKLSAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwcmV2ZW50RXh0ZW5zaW9ucyhK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIHByZXZlbnRFeHRlbnNpb25zKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XG4iKTsKICAgICB9CiAKICAgICBpZiAoSW5zdGFu
Y2VOZWVkc0VzdGltYXRlZFNpemUoJGludGVyZmFjZSkpIHsKQEAgLTI3NDUsNyArMjc0OCw3IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgIyBDdXN0b20gcHVzaEV2ZW50SGFuZGxlclNjb3Bl
IGZ1bmN0aW9uCiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3Rv
bVB1c2hFdmVudEhhbmRsZXJTY29wZX0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBKU0M6OkpTU2NvcGUqIHB1c2hFdmVudEhhbmRsZXJTY29wZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNTY29wZSopIGNvbnN0O1xuXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBKU0M6OkpTU2NvcGUqIHB1c2hFdmVudEhhbmRsZXJTY29wZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpKU1Njb3BlKikgY29uc3Q7XG5cbiIpOwogICAgIH0KICAgICAKICAgICAj
IENvbnN0cnVjdG9yIG9iamVjdCBnZXR0ZXIKQEAgLTI3NTYsNyArMjc1OSw3IEBAIHN1YiBHZW5l
cmF0ZUhlYWRlcgogCiAgICAgIyBTZXJpYWxpemVyIGZ1bmN0aW9uLgogICAgIGlmICgkaW50ZXJm
YWNlLT5zZXJpYWxpemFibGUpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgJHtjbGFzc05h
bWV9JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYpO1xu
Iik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIHNlcmlhbGl6ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgJHtjbGFzc05hbWV9JiB0aGlzT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYpO1xuIik7CiAgICAgfQog
ICAgIAogICAgIG15ICRudW1DdXN0b21PcGVyYXRpb25zID0gMDsKQEAgLTI4MjEsMTIgKzI4MjQs
MTIgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVy
KCRhdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNp
ZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAg
ICAgICAgICAgIG15ICRtZXRob2ROYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0
dHJpYnV0ZS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBKU0M6OkpTVmFsdWUgIiAuICRtZXRob2ROYW1lIC4gIihKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0
O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpT
VmFsdWUgIiAuICRtZXRob2ROYW1lIC4gIihKU0M6OkpTR2xvYmFsT2JqZWN0JikgY29uc3Q7XG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiI2VuZGlmXG4iKSBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoSGFzQ3Vz
dG9tU2V0dGVyKCRhdHRyaWJ1dGUpICYmICFJc1JlYWRvbmx5KCRhdHRyaWJ1dGUpKSB7CiAgICAg
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAgICAgICAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgdm9pZCBzZXQiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0
dHJpYnV0ZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBzZXQiIC4gJGNv
ZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+bmFtZSkgLiAiKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0yODYwLDcgKzI4NjMsOCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIK
ICAgICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9ICRvcGVyYXRpb24t
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVkQXN9IHx8ICRjb2RlR2VuZXJhdG9yLT5X
S19sY2ZpcnN0KCRvcGVyYXRpb24tPm5hbWUpOwogCiAgICAgICAgICAgICBteSBAZnVuY3Rpb25B
cmd1bWVudHMgPSAoKTsKLSAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQXJndW1lbnRzLCAiSlND
OjpFeGVjU3RhdGUmIik7CisgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkFyZ3VtZW50cywgIkpT
Qzo6SlNHbG9iYWxPYmplY3QmIik7CisgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkFyZ3VtZW50
cywgIkpTQzo6Q2FsbEZyYW1lJiIpOwogICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Bcmd1bWVu
dHMsICJSZWY8RGVmZXJyZWRQcm9taXNlPiYmIikgaWYgJGNvZGVHZW5lcmF0b3ItPklzUHJvbWlz
ZVR5cGUoJG9wZXJhdGlvbi0+dHlwZSkgJiYgISRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e1JldHVybnNPd25Qcm9taXNlfTsKIAogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICAiIC4gKCRvcGVyYXRpb24tPmlzU3RhdGljID8gInN0YXRpYyAiIDogIiIpIC4gIkpT
Qzo6SlNWYWx1ZSAiIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIigiIC4gam9pbigi
LCAiLCBAZnVuY3Rpb25Bcmd1bWVudHMpIC4gIik7XG4iKTsKQEAgLTI5NDEsMTQgKzI5NDUsMTQg
QEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICMgTm9kZSBhbmQgTm9kZUxpc3QgaGF2ZSBj
dXN0b20gaW5saW5lIGltcGxlbWVudGF0aW9ucyB3aGljaCB0aHVzIGNhbm5vdCBiZSBleHBvcnRl
ZC4KICAgICAgICAgIyBGSVhNRTogVGhlIHNwZWNpYWwgY2FzZSBmb3IgTm9kZSBhbmQgTm9kZUxp
c3Qgc2hvdWxkIHByb2JhYmx5IGJlIGltcGxlbWVudGVkIHZpYSBhbiBJREwgYXR0cmlidXRlLgog
ICAgICAgICBpZiAoJGltcGxUeXBlIGVxICJOb2RlIiBvciAkaW1wbFR5cGUgZXEgIk5vZGVMaXN0
IikgewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCAkaW1wbFR5cGUmKTtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosICRpbXBsVHlwZSYpO1xuIik7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkZXhwb3J0
TWFjcm8uIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCAkaW1wbFR5cGUmKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
JGV4cG9ydE1hY3JvLiJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqLCAkaW1wbFR5cGUmKTtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAkaW1wbFR5cGUqIGlt
cGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpT
Qzo6anNOdWxsKCk7IH1cbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICRpbXBsVHlwZSogaW1wbCkgeyBy
ZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1w
bCkgOiBKU0M6OmpzTnVsbCgpOyB9XG4iKTsKIAotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIFJlZjwkaW1wbFR5cGU+JiYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8JGlt
cGxUeXBlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBn
bG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9XG4i
KTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjwkaW1w
bFR5cGU+JiYpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPCRpbXBs
VHlwZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6Ompz
TnVsbCgpOyB9XG4iKTsKICAgIH0KIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwpA
QCAtMjk5MiwxMCArMjk5NiwxMCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgIG15
ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFs
U3RyaW5nKCRhdHRyaWJ1dGUpOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNp
ZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAg
ICAgICAgbXkgJGdldHRlciA9IEdldEF0dHJpYnV0ZUdldHRlck5hbWUoJGludGVyZmFjZSwgJGNs
YXNzTmFtZSwgJGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
SlNDOjpFbmNvZGVkSlNWYWx1ZSAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJKU0M6OkVuY29kZWRKU1ZhbHVlICR7Z2V0dGVyfShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7CiAg
ICAgICAgICAgICBpZiAoIUlzUmVhZG9ubHkoJGF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAg
ICBteSAkc2V0dGVyID0gR2V0QXR0cmlidXRlU2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NO
YW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
Ym9vbCAke3NldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJib29sICR7c2V0dGVyfShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmlu
ZzsKICAgICAgICAgfQpAQCAtMzQ0MCw3ICszNDQ0LDcgQEAgc3ViIEdlbmVyYXRlT3ZlcmxvYWRE
aXNwYXRjaGVyCiAKICAgICBteSAkbWF4QXJnQ291bnQgPSBMZW5ndGhPZkxvbmdlc3RPcGVyYXRp
b25QYXJhbWV0ZXJMaXN0KCRvcGVyYXRpb24tPntvdmVybG9hZHN9KTsKIAotICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KCR7bWF4
QXJnQ291bnR9LCBzdGF0ZS0+YXJndW1lbnRDb3VudCgpKTtcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KCR7bWF4QXJn
Q291bnR9LCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7XG4iKTsKIAogICAgIGZvciBteSAk
bGVuZ3RoICggc29ydCBrZXlzICVhbGxTZXRzICkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoYXJnc0NvdW50ID09ICR7bGVuZ3RofSkge1xuIik7CkBAIC0zNDQ4LDcgKzM0
NTIsNyBAQCBzdWIgR2VuZXJhdGVPdmVybG9hZERpc3BhdGNoZXIKICAgICAgICAgbXkgJFMgPSAk
YWxsU2V0c3skbGVuZ3RofTsKICAgICAgICAgaWYgKHNjYWxhcihAJFMpID4gMSkgewogICAgICAg
ICAgICAgbXkgJGQgPSBHZXREaXN0aW5ndWlzaGluZ0FyZ3VtZW50SW5kZXgoJG9wZXJhdGlvbiwg
JFMpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIEpTVmFsdWUgZGlz
dGluZ3Vpc2hpbmdBcmcgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoJGQpO1xuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGlu
Z0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoJGQpO1xuIik7CiAKICAgICAgICAg
ICAgIG15ICRvdmVybG9hZCA9IEdldE92ZXJsb2FkVGhhdE1hdGNoZXNJZ25vcmluZ1VuaW9uU3Vi
dHlwZXMoJFMsICRkLCBcJiRpc09wdGlvbmFsUGFyYW1ldGVyKTsKICAgICAgICAgICAgICYkZ2Vu
ZXJhdGVPdmVybG9hZENhbGxJZk5lY2Vzc2FyeSgkb3ZlcmxvYWQsICJkaXN0aW5ndWlzaGluZ0Fy
Zy5pc1VuZGVmaW5lZCgpIik7CkBAIC0zNDg3LDcgKzM0OTEsNyBAQCBzdWIgR2VuZXJhdGVPdmVy
bG9hZERpc3BhdGNoZXIKIAogICAgICAgICAgICAgIyBGSVhNRTogQXZvaWQgaW52b2tpbmcgR2V0
TWV0aG9kKG9iamVjdCwgU3ltYm9sLml0ZXJhdG9yKSBhZ2FpbiBpbiBjb252ZXJ0PElETFNlcXVl
bmNlPFQ+PiguLi4pLgogICAgICAgICAgICAgJG92ZXJsb2FkID0gR2V0T3ZlcmxvYWRUaGF0TWF0
Y2hlcygkUywgJGQsIFwmJGlzU2VxdWVuY2VPckZyb3plbkFycmF5UGFyYW1ldGVyKTsKLSAgICAg
ICAgICAgICYkZ2VuZXJhdGVPdmVybG9hZENhbGxJZk5lY2Vzc2FyeSgkb3ZlcmxvYWQsICJoYXNJ
dGVyYXRvck1ldGhvZCgqc3RhdGUsIGRpc3Rpbmd1aXNoaW5nQXJnKSIsICI8SmF2YVNjcmlwdENv
cmUvSXRlcmF0b3JPcGVyYXRpb25zLmg+Iik7CisgICAgICAgICAgICAmJGdlbmVyYXRlT3Zlcmxv
YWRDYWxsSWZOZWNlc3NhcnkoJG92ZXJsb2FkLCAiaGFzSXRlcmF0b3JNZXRob2QobGV4aWNhbEds
b2JhbE9iamVjdCwgZGlzdGluZ3Vpc2hpbmdBcmcpIiwgIjxKYXZhU2NyaXB0Q29yZS9JdGVyYXRv
ck9wZXJhdGlvbnMuaD4iKTsKIAogICAgICAgICAgICAgJG92ZXJsb2FkID0gR2V0T3ZlcmxvYWRU
aGF0TWF0Y2hlcygkUywgJGQsIFwmJGlzRGljdGlvbmFyeU9yUmVjb3JkT3JPYmplY3RPckNhbGxi
YWNrSW50ZXJmYWNlUGFyYW1ldGVyKTsKICAgICAgICAgICAgICYkZ2VuZXJhdGVPdmVybG9hZENh
bGxJZk5lY2Vzc2FyeSgkb3ZlcmxvYWQsICJkaXN0aW5ndWlzaGluZ0FyZy5pc09iamVjdCgpIik7
CkBAIC0zNTIxLDkgKzM1MjUsOSBAQCBFTkQKICAgICB9CiAgICAgbXkgJG1pbkFyZ0NvdW50ID0g
R2V0RnVuY3Rpb25MZW5ndGgoJG9wZXJhdGlvbik7CiAgICAgaWYgKCRtaW5BcmdDb3VudCA+IDAp
IHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGFyZ3NDb3VudCA8ICRt
aW5BcmdDb3VudCA/IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpO1xuIikKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGFyZ3ND
b3VudCA8ICRtaW5BcmdDb3VudCA/IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSkgOiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUp
O1xuIikKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7XG4iKQorICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlKTtcbiIpCiAgICAgfQogfQogCkBAIC0zODQyLDcgKzM4NDYsNyBA
QCBzdWIgYWRkVW5zY29wYWJsZVByb3BlcnRpZXMKICAgICByZXR1cm4gaWYgc2NhbGFyKEB1bnNj
b3BhYmxlcykgPT0gMDsKIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8SmF2YVNjcmlwdENvcmUv
T2JqZWN0Q29uc3RydWN0b3IuaD4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU09i
amVjdCYgdW5zY29wYWJsZXMgPSAqY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0KCktPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1
cmUoKSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU09iamVjdCYgdW5zY29w
YWJsZXMgPSAqY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KCktPnZtKCksIGdsb2Jh
bE9iamVjdCgpLT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpO1xuIik7CiAgICAgZm9y
ZWFjaCBteSAkdW5zY29wYWJsZSAoQHVuc2NvcGFibGVzKSB7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHVuc2NvcGFibGVzLnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgXCIkdW5zY29wYWJsZVwiKSwganNCb29sZWFuKHRydWUpKTtcbiIpOwogICAgIH0K
QEAgLTM5NzQsNyArMzk3OCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RE9NSklUfSkgewogICAg
ICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkRPTUpJVElETFR5cGUuaCJ9ID0gMTsKICAgICAg
ICAgICAgICAgICBteSAkbmFtZU9mRnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrID0gJGNvZGVHZW5l
cmF0b3ItPldLX2xjZmlyc3QoJGZ1bmN0aW9uTmFtZSkgLiAiV2l0aG91dFR5cGVDaGVjayI7Ci0g
ICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU2lnbmF0dXJlID0gIkpTQzo6RW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiAke25hbWVPZkZ1bmN0aW9uV2l0aG91dFR5cGVDaGVja30oSlNDOjpF
eGVjU3RhdGUqLCAkY2xhc3NOYW1lKiI7CisgICAgICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU2ln
bmF0dXJlID0gIkpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAke25hbWVPZkZ1bmN0
aW9uV2l0aG91dFR5cGVDaGVja30oSlNDOjpKU0dsb2JhbE9iamVjdCosICRjbGFzc05hbWUqIjsK
ICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRhcmd1bWVudCAoQHskb3BlcmF0aW9uLT5hcmd1
bWVudHN9KSB7CiAgICAgICAgICAgICAgICAgICAgIG15ICR0eXBlID0gJGFyZ3VtZW50LT50eXBl
OwogICAgICAgICAgICAgICAgICAgICBteSAkYXJndW1lbnRUeXBlID0gR2V0QXJndW1lbnRUeXBl
Rm9yRnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrKCRpbnRlcmZhY2UsICR0eXBlKTsKQEAgLTM5OTQs
MTAgKzM5OTgsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICBpZiAo
TmVlZHNDb25zdHJ1Y3RvclByb3BlcnR5KCRpbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICBteSAk
Y29uc3RydWN0b3JHZXR0ZXIgPSAianMiIC4gJGludGVyZmFjZU5hbWUgLiAiQ29uc3RydWN0b3Ii
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkVuY29kZWRKU1ZhbHVlICR7
Y29uc3RydWN0b3JHZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IkpTQzo6RW5jb2RlZEpTVmFsdWUgJHtjb25zdHJ1Y3RvckdldHRlcn0oSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTtcbiIpOwogCiAg
ICAgICAgICAgICBteSAkY29uc3RydWN0b3JTZXR0ZXIgPSAic2V0SlMiIC4gJGludGVyZmFjZU5h
bWUgLiAiQ29uc3RydWN0b3IiOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29s
ICR7Y29uc3RydWN0b3JTZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiYm9vbCAke2NvbnN0cnVjdG9yU2V0dGVyfShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7XG4iKTsKICAgICAgICAgfQog
CiAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQGF0dHJpYnV0ZXMpIHsKQEAgLTQwMDcs
NyArNDAxMSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAk
Y29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0
cmluZygkYXR0cmlidXRlKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7
Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAg
ICBteSAkZ2V0dGVyID0gR2V0QXR0cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NO
YW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpF
bmNvZGVkSlNWYWx1ZSAke2dldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiSlNDOjpFbmNvZGVkSlNWYWx1ZSAke2dldHRlcn0oSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTtcbiIpOwogICAgICAgICAg
ICAgaWYgKCFJc1JlYWRvbmx5KCRhdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAgbXkgJHJl
YWRXcml0ZUNvbmRpdGlvbmFsID0gJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZX07CiAgICAgICAgICAgICAgICAgaWYgKCRyZWFkV3JpdGVDb25k
aXRpb25hbCkgewpAQCAtNDAxNSw3ICs0MDE5LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHtyZWFkV3Jp
dGVDb25kaXRpb25hbFN0cmluZ31cbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBteSAkc2V0dGVyID0gR2V0QXR0cmlidXRlU2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xh
c3NOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
ImJvb2wgJHtzZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgImJvb2wgJHtzZXR0ZXJ9KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiI2VuZGlmXG4iKSBpZiAkcmVhZFdyaXRlQ29uZGl0aW9uYWw7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNv
bmRpdGlvbmFsU3RyaW5nOwpAQCAtNDI3Miw3ICs0Mjc2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBoYXNEaXNh
YmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwiJG5hbWVcIiksIHN0cmxl
bihcIiRuYW1lXCIpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3Bl
cnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMs
IGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
I2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIH0KQEAgLTQzODEsNyAr
NDM4NSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgfQogCiAgICAgaWYgKCRp
bnRlcmZhY2UtPm1hcExpa2UpIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3lu
Y2hyb25pemVCYWNraW5nTWFwKCpnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCAqZ2xvYmFs
T2JqZWN0KCksICp0aGlzKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBz
eW5jaHJvbml6ZUJhY2tpbmdNYXAoKmdsb2JhbE9iamVjdCgpLCAqZ2xvYmFsT2JqZWN0KCksICp0
aGlzKTtcbiIpOwogICAgIH0KIAogICAgICMgU3VwcG9ydCBmb3IgUnVudGltZUVuYWJsZWQgYXR0
cmlidXRlcyBvbiBpbnN0YW5jZXMuCkBAIC00NTE2LDE4ICs0NTIwLDE4IEBAIHN1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIG15ICRjYXN0aW5nRnVuY3Rpb24gPSAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21Qcm94eVRvSlNPYmplY3R9ID8gInRvJHtjbGFz
c05hbWV9IiA6IEdldENhc3RpbmdIZWxwZXJGb3JUaGlzT2JqZWN0KCRpbnRlcmZhY2UpOwogICAg
ICAgICAjIEZJWE1FOiBSZW1vdmUgSW1wbGljaXRUaGlzIGtleXdvcmQgYXMgaXQgaXMgbm8gbG9u
Z2VyIGRlZmluZWQgYnkgV2ViSURMIHNwZWMgYW5kIGlzIG9ubHkgdXNlZCBpbiBET01XaW5kb3cu
CiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBsaWNpdFRo
aXN9KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPD4gaW5saW5l
ICR7Y2xhc3NOYW1lfSogSURMQXR0cmlidXRlPCR7Y2xhc3NOYW1lfT46OmNhc3QoRXhlY1N0YXRl
JiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKVxuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgInRlbXBsYXRlPD4gaW5saW5lICR7Y2xhc3NOYW1lfSogSURMQXR0cmli
dXRlPCR7Y2xhc3NOYW1lfT46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIGRlY29kZWRUaGlzVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKGRlY29kZWRUaGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSlcbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGRlY29kZWRUaGlzVmFs
dWUgPSBzdGF0ZS50aGlzVmFsdWUoKS50b1RoaXMoJnN0YXRlLCBOb3RTdHJpY3RNb2RlKTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICRjYXN0aW5nRnVu
Y3Rpb24odm0sIGRlY29kZWRUaGlzVmFsdWUpOyIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIGRlY29kZWRUaGlzVmFsdWUgPSBKU1ZhbHVlKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS50b1RoaXMoJmxleGljYWxHbG9iYWxPYmplY3QsIE5vdFN0cmljdE1vZGUpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJGNhc3RpbmdGdW5j
dGlvbih2bSwgZGVjb2RlZFRoaXNWYWx1ZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidGVtcGxhdGU8PiBpbmxpbmUgJHtjbGFzc05hbWV9KiBJRExBdHRyaWJ1dGU8
JHtjbGFzc05hbWV9Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8PiBp
bmxpbmUgJHtjbGFzc05hbWV9KiBJRExBdHRyaWJ1dGU8JHtjbGFzc05hbWV9Pjo6Y2FzdChKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICRjYXN0aW5nRnVuY3Rpb24oc3RhdGUu
dm0oKSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJGNhc3RpbmdGdW5jdGlvbihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpO1xuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgICAgIH0KICAgICB9
CkBAIC00NTM3LDI4ICs0NTQxLDI4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAg
ICAgICAgIyBGSVhNRTogTWFrZSBjb25zaXN0ZW50IElETEF0dHJpYnV0ZTw+OjpjYXN0IGFuZCBJ
RExPcGVyYXRpb248Pjo6Y2FzdCBpbiBjYXNlIG9mIEN1c3RvbVByb3h5VG9KU09iamVjdC4KICAg
ICAgICAgbXkgJGNhc3RpbmdGdW5jdGlvbiA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0N1c3RvbVByb3h5VG9KU09iamVjdH0gPyAidG8ke2NsYXNzTmFtZX0iIDogR2V0Q2FzdGlu
Z0hlbHBlckZvclRoaXNPYmplY3QoJGludGVyZmFjZSk7Ci0gICAgICAgIG15ICR0aGlzVmFsdWUg
PSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21Qcm94eVRvSlNPYmplY3R9
ID8gInN0YXRlLnRoaXNWYWx1ZSgpLnRvVGhpcygmc3RhdGUsIE5vdFN0cmljdE1vZGUpIiA6ICJz
dGF0ZS50aGlzVmFsdWUoKSI7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidGVtcGxhdGU8
PiBpbmxpbmUgJHtjbGFzc05hbWV9KiBJRExPcGVyYXRpb248JHtjbGFzc05hbWV9Pjo6Y2FzdChF
eGVjU3RhdGUmIHN0YXRlKVxuIik7CisgICAgICAgIG15ICR0aGlzVmFsdWUgPSAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21Qcm94eVRvSlNPYmplY3R9ID8gImNhbGxGcmFt
ZS50aGlzVmFsdWUoKS50b1RoaXMoJmxleGljYWxHbG9iYWxPYmplY3QsIE5vdFN0cmljdE1vZGUp
IiA6ICJjYWxsRnJhbWUudGhpc1ZhbHVlKCkiOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
InRlbXBsYXRlPD4gaW5saW5lICR7Y2xhc3NOYW1lfSogSURMT3BlcmF0aW9uPCR7Y2xhc3NOYW1l
fT46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYg
Y2FsbEZyYW1lKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAkY2FzdGluZ0Z1bmN0aW9uKHN0YXRl
LnZtKCksICR0aGlzVmFsdWUpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiAkY2FzdGluZ0Z1bmN0aW9uKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCAkdGhpc1ZhbHVlKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CiAgICAgfQogCiAgICAgaWYgKE5lZWRzQ29uc3RydWN0b3JQcm9wZXJ0eSgkaW50ZXJmYWNlKSkg
ewogICAgICAgICBteSAkY29uc3RydWN0b3JHZXR0ZXIgPSAianMiIC4gJGludGVyZmFjZU5hbWUg
LiAiQ29uc3RydWN0b3IiOwogCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpT
VmFsdWUgJHtjb25zdHJ1Y3RvckdldHRlcn0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJFbmNvZGVkSlNWYWx1ZSAke2NvbnN0cnVjdG9yR2V0dGVyfShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PCR7Y2xhc3NOYW1l
fVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKVxuIik7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpO1xuIik7CiAKICAgICAgICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntOb0ludGVyZmFjZU9iamVjdH0pIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtjbGFzc05hbWV9OjpnZXRDb25zdHJ1
Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpO1xuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7
Y2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0g
JHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgJHtjbGFzc05hbWV9
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShzdGF0ZS0+dm0oKSwgKnByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgp
KSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkp
KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBjb25z
dHJ1Y3RvciA9ICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjcmVhdGUoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgJHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCAqcHJvdG90eXBlLT5nbG9iYWxPYmpl
Y3QoKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpLCAqanND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4ocHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpO1xuIik7
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgY29uc3Ry
dWN0b3IgcHJvcGVydHkgdG8gZW5zdXJlIHJldXNpbmcgdGhlIHNhbWUgY29uc3RydWN0b3Igb2Jq
ZWN0XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHByb3RvdHlwZS0+
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgY29uc3RydWN0b3Is
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
O1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNvbnN0cnVjdG9yKTtcbiIpOwpAQCAtNDU2NywxMyArNDU3MSwxMyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgIG15ICRjb25zdHJ1Y3RvclNldHRlciA9
ICJzZXRKUyIgLiAkaW50ZXJmYWNlTmFtZSAuICJDb25zdHJ1Y3RvciI7CiAKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJib29sICR7Y29uc3RydWN0b3JTZXR0ZXJ9KEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NvbnN0cnVjdG9yU2V0
dGVyfShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpXG4iKTsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBw
cm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PCR7Y2xhc3NOYW1lfVByb3RvdHlwZSo+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7XG4iKTsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpO1xu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpO1xuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgfVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yXG4iKTsKQEAgLTQ4MDEsNyArNDgwNSw3
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKIEVORAogCi0gICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8JGltcGxUeXBlPiYmIGltcGwp
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPCRpbXBsVHlwZT4mJiBpbXBsKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCkgaWYgJHZ0YWJs
ZU5hbWVHbnU7CiAKQEAgLTQ4MzgsOSArNDg0Miw5IEBAIEVORAogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjwke2ltcGxUeXBlfT4oZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGltcGwpKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1c
blxuIik7CiAKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICR7
aW1wbFR5cGV9JiBpbXBsKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgJHtpbXBsVHlwZX0mIGltcGwpXG4iKTsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7XG4iKTsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cblxuIik7CiAgICAgfQogCkBAIC00ODY0LDMwICs0ODY4LDMwIEBAIHN1YiBHZW5lcmF0
ZUF0dHJpYnV0ZUdldHRlckJvZHlEZWZpbml0aW9uCiAgICAgbXkgKCRvdXRwdXRBcnJheSwgJGlu
dGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSwgJGF0dHJpYnV0ZUdldHRlckJvZHlOYW1l
LCAkY29uZGl0aW9uYWwpID0gQF87CiAgICAgCiAgICAgbXkgQHNpZ25hdHVyZUFyZ3VtZW50cyA9
ICgpOwotICAgIHB1c2goQHNpZ25hdHVyZUFyZ3VtZW50cywgIkV4ZWNTdGF0ZSYgc3RhdGUiKTsK
KyAgICBwdXNoKEBzaWduYXR1cmVBcmd1bWVudHMsICJKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCIpOwogICAgIHB1c2goQHNpZ25hdHVyZUFyZ3VtZW50cywgIiR7Y2xhc3NOYW1l
fSYgdGhpc09iamVjdCIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKICAgICBwdXNoKEBzaWdu
YXR1cmVBcmd1bWVudHMsICJUaHJvd1Njb3BlJiB0aHJvd1Njb3BlIik7CiAgICAgCiAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7YXR0cmlidXRlR2V0dGVy
Qm9keU5hbWV9KCIgLiBqb2luKCIsICIsIEBzaWduYXR1cmVBcmd1bWVudHMpIC4gIilcbiIpOwog
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7XG4iKTsKIAogICAgIGlm
ICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDaGVja1NlY3VyaXR5fSAmJgogICAg
ICAgICAhJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RG9Ob3RDaGVja1NlY3VyaXR5
fSAmJgogICAgICAgICAhJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RG9Ob3RDaGVj
a1NlY3VyaXR5T25HZXR0ZXJ9KSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUJp
bmRpbmdTZWN1cml0eS5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PnR5cGUtPm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxu
Iik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3Qud3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCB0aGlzT2Jq
ZWN0LndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOworICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
LndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOwogICAgICAgICB9
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7XG4iKTsKICAgICB9CiAgICAgCiAgICAgaWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRl
KSkgewogICAgICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9y
LT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVk
QXN9IHx8ICRhdHRyaWJ1dGUtPm5hbWUpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgcmV0dXJuIHRoaXNPYmplY3QuJHtpbXBsR2V0dGVyRnVuY3Rpb25OYW1lfShzdGF0ZSk7XG4i
KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LiR7
aW1wbEdldHRlckZ1bmN0aW9uTmFtZX0obGV4aWNhbEdsb2JhbE9iamVjdCk7XG4iKTsKICAgICB9
IGVsc2lmICgkYXR0cmlidXRlLT50eXBlLT5uYW1lIGVxICJFdmVudEhhbmRsZXIiKSB7CiAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IkV2ZW50TmFtZXMuaCJ9ID0gMTsKICAgICAgICAgbXkgJGdldHRl
ciA9ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1dpbmRvd0V2ZW50SGFuZGxlcn0g
PyAid2luZG93RXZlbnRIYW5kbGVyQXR0cmlidXRlIgpAQCAtNDkwMywxMCArNDkwNywxMCBAQCBz
dWIgR2VuZXJhdGVBdHRyaWJ1dGVHZXR0ZXJCb2R5RGVmaW5pdGlvbgogICAgICAgICBpZiAoJGlu
dGVyZmFjZS0+dHlwZS0+bmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAgICAgbXkgJG5h
bWVkID0gKCRjb25zdHJ1Y3RvclR5cGUgPX4gL05hbWVkJC8pID8gIk5hbWVkIiA6ICIiOwogICAg
ICAgICAgICAgJGNvbnN0cnVjdG9yVHlwZSA9fiBzL05hbWVkJC8vOwotICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6
Z2V0JHtuYW1lZH1Db25zdHJ1Y3RvcihzdGF0ZS52bSgpLCAmdGhpc09iamVjdCk7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVj
dG9yVHlwZSAuICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksICZ0aGlzT2JqZWN0KTtcbiIpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiLmgiLCAk
Y29uZGl0aW9uYWwpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVy
biBKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTtcbiIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCRh
dHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhY2hlZEF0dHJpYnV0ZX0pIHsKQEAgLTQ5
MTgsMTEgKzQ5MjIsMTEgQEAgc3ViIEdlbmVyYXRlQXR0cmlidXRlR2V0dGVyQm9keURlZmluaXRp
b24KICAgICAgICAgCiAgICAgICAgIG15ICgkYmFzZUZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykg
PSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNsdWRlcywgJGludGVy
ZmFjZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0ZSk7CiAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUg
PSBHZXRGdWxseVF1YWxpZmllZEltcGxlbWVudGF0aW9uQ2FsbE5hbWUoJGludGVyZmFjZSwgJGF0
dHJpYnV0ZSwgJGJhc2VGdW5jdGlvbk5hbWUsICJpbXBsIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAg
ICAgQWRkQWRkaXRpb25hbEFyZ3VtZW50c0ZvckltcGxlbWVudGF0aW9uQ2FsbChcQGFyZ3VtZW50
cywgJGludGVyZmFjZSwgJGF0dHJpYnV0ZSwgImltcGwiLCAic3RhdGUiLCAidGhpc09iamVjdCIp
OworICAgICAgICBBZGRBZGRpdGlvbmFsQXJndW1lbnRzRm9ySW1wbGVtZW50YXRpb25DYWxsKFxA
YXJndW1lbnRzLCAkaW50ZXJmYWNlLCAkYXR0cmlidXRlLCAiaW1wbCIsICJsZXhpY2FsR2xvYmFs
T2JqZWN0IiwgIiIsICJ0aGlzT2JqZWN0Iik7CiAgICAgICAgIAogICAgICAgICB1bnNoaWZ0KEBh
cmd1bWVudHMsIEBjYWxsV2l0aEFyZ3MpOwogCi0gICAgICAgIG15ICRnbG9iYWxPYmplY3RSZWZl
cmVuY2UgPSAkYXR0cmlidXRlLT5pc1N0YXRpYyA/ICIqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKSIgOiAiKnRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCkiOworICAgICAgICBteSAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNlID0gJGF0dHJpYnV0ZS0+
aXNTdGF0aWMgPyAiKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSIgOiAiKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkiOwogICAgICAgICBteSAkdG9KU0V4
cHJlc3Npb24gPSBOYXRpdmVUb0pTVmFsdWVVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZSwgJGlu
dGVyZmFjZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIp
IiwgJGdsb2JhbE9iamVjdFJlZmVyZW5jZSk7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7XG4iKSB1bmxlc3MgJGF0dHJp
YnV0ZS0+aXNTdGF0aWMgb3IgJGF0dHJpYnV0ZS0+aXNNYXBMaWtlOwogCkBAIC00OTM1LDcgKzQ5
MzksNyBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVHZXR0ZXJCb2R5RGVmaW5pdGlvbgogICAgICAg
ICB9CiAKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0g
JHt0b0pTRXhwcmVzc2lvbn07XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHRoaXNPYmplY3QubV8iIC4gJGF0dHJpYnV0ZS0+bmFtZSAuICIuc2V0KHN0YXRlLnZtKCksICZ0
aGlzT2JqZWN0LCByZXN1bHQpO1xuIikgaWYgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q2FjaGVkQXR0cmlidXRlfTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHRo
aXNPYmplY3QubV8iIC4gJGF0dHJpYnV0ZS0+bmFtZSAuICIuc2V0KEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCAmdGhpc09iamVjdCwgcmVzdWx0KTtcbiIpIGlmICRhdHRyaWJ1dGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0NhY2hlZEF0dHJpYnV0ZX07CiAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgfQogICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIn1cblxuIik7CkBAIC00OTYwLDkgKzQ5NjQsOSBAQCBzdWIgR2VuZXJhdGVB
dHRyaWJ1dGVHZXR0ZXJUcmFtcG9saW5lRGVmaW5pdGlvbgogICAgICAgICBwdXNoKEB0ZW1wbGF0
ZVBhcmFtZXRlcnMsICJDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Iik7CiAgICAgfQog
ICAgIAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlICR7YXR0cmlidXRl
R2V0dGVyTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1
ZSAke2F0dHJpYnV0ZUdldHRlck5hbWV9KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSlcbiIpOwogICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPCR7Y2xhc3NOYW1lfT46OiR7Y2FsbEF0dHJpYnV0ZUdldHRlck5h
bWV9PCIgLiBqb2luKCIsICIsIEB0ZW1wbGF0ZVBhcmFtZXRlcnMpIC4gIj4oKnN0YXRlLCB0aGlz
VmFsdWUsIFwiIiAuICRhdHRyaWJ1dGUtPm5hbWUgLiAgIlwiKTtcbiIpOworICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICByZXR1cm4gSURMQXR0cmlidXRlPCR7Y2xhc3NOYW1lfT46OiR7Y2Fs
bEF0dHJpYnV0ZUdldHRlck5hbWV9PCIgLiBqb2luKCIsICIsIEB0ZW1wbGF0ZVBhcmFtZXRlcnMp
IC4gIj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgXCIiIC4gJGF0dHJpYnV0ZS0+
bmFtZSAuICAiXCIpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKIH0K
IApAQCAtNDk5MiwzNSArNDk5NiwzNSBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVTZXR0ZXJCb2R5
RGVmaW5pdGlvbgogICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUs
ICRhdHRyaWJ1dGUsICRhdHRyaWJ1dGVTZXR0ZXJCb2R5TmFtZSwgJGNvbmRpdGlvbmFsKSA9IEBf
OwogCiAgICAgbXkgQHNpZ25hdHVyZUFyZ3VtZW50cyA9ICgpOwotICAgIHB1c2goQHNpZ25hdHVy
ZUFyZ3VtZW50cywgIkV4ZWNTdGF0ZSYgc3RhdGUiKTsKKyAgICBwdXNoKEBzaWduYXR1cmVBcmd1
bWVudHMsICJKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCIpOwogICAgIHB1c2go
QHNpZ25hdHVyZUFyZ3VtZW50cywgIiR7Y2xhc3NOYW1lfSYgdGhpc09iamVjdCIpIGlmICEkYXR0
cmlidXRlLT5pc1N0YXRpYzsKICAgICBwdXNoKEBzaWduYXR1cmVBcmd1bWVudHMsICJKU1ZhbHVl
IHZhbHVlIik7CiAgICAgcHVzaChAc2lnbmF0dXJlQXJndW1lbnRzLCAiVGhyb3dTY29wZSYgdGhy
b3dTY29wZSIpOwogICAgIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInN0YXRpYyBpbmxpbmUg
Ym9vbCAke2F0dHJpYnV0ZVNldHRlckJvZHlOYW1lfSgiIC4gam9pbigiLCAiLCBAc2lnbmF0dXJl
QXJndW1lbnRzKSAuICIpXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKLSAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOworICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7XG4iKTsKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRhdHRy
aWJ1dGUtPnR5cGUpIHx8ICRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlcGxhY2Vh
YmxlfSB8fCAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdXRGb3J3YXJkc30pIHsK
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0o
KTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKICAgICB9CiAKLSAgICBHZW5lcmF0ZUN1c3Rv
bUVsZW1lbnRSZWFjdGlvbnNTdGFja0lmTmVlZGVkKCRvdXRwdXRBcnJheSwgJGF0dHJpYnV0ZSwg
InN0YXRlIik7CisgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRl
ZCgkb3V0cHV0QXJyYXksICRhdHRyaWJ1dGUsICJsZXhpY2FsR2xvYmFsT2JqZWN0Iik7CiAKICAg
ICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0gJiYg
ISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1cml0eX0gJiYg
ISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1cml0eU9uU2V0
dGVyfSkgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01CaW5kaW5nU2VjdXJpdHku
aCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT50eXBlLT5uYW1lIGVx
ICJET01XaW5kb3ciKSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCB0
aGlzT2JqZWN0LndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOworICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0Lndy
YXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5Ojpz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwgdGhpc09iamVjdC53cmFwcGVkKCku
d2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdygmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC53cmFwcGVkKCkud2lu
ZG93KCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKICAgICAgICAgfQogICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgIH0KICAgICAK
ICAgICBpZiAoSGFzQ3VzdG9tU2V0dGVyKCRhdHRyaWJ1dGUpKSB7CiAgICAgICAgIG15ICRpbXBs
U2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0
ZS0+bmFtZSk7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB0aGlzT2JqZWN0LnNl
dCR7aW1wbFNldHRlckZ1bmN0aW9uTmFtZX0oc3RhdGUsIHZhbHVlKTtcbiIpOworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgdGhpc09iamVjdC5zZXQke2ltcGxTZXR0ZXJGdW5jdGlv
bk5hbWV9KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTtcbiIpOwogICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICB9IGVsc2lmICgkYXR0cmli
dXRlLT50eXBlLT5uYW1lIGVxICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJKU0V2ZW50TGlzdGVuZXIuaCIsICRjb25kaXRpb25hbCk7CkBAIC01MDI4LDEzICs1
MDMyLDEzIEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW9uCiAgICAg
ICAgICMgRklYTUU6IEZpbmQgYSB3YXkgdG8gZG8gdGhpcyBzcGVjaWFsIGNhc2Ugd2l0aG91dCBo
YXJkY29kaW5nIHRoZSBjbGFzcyBhbmQgYXR0cmlidXRlIG5hbWVzIGhlcmUuCiAgICAgICAgIGlm
ICgoJGludGVyZmFjZS0+dHlwZS0+bmFtZSBlcSAiRE9NV2luZG93IiBvciAkaW50ZXJmYWNlLT50
eXBlLT5uYW1lIGVxICJXb3JrZXJHbG9iYWxTY29wZSIpIGFuZCAkYXR0cmlidXRlLT5uYW1lIGVx
ICJvbmVycm9yIikgewogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRXJyb3JIYW5k
bGVyLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHRoaXNPYmplY3Qud3JhcHBlZCgpLnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoJGV2ZW50
TmFtZSwgY3JlYXRlSlNFcnJvckhhbmRsZXIoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KSwgd29y
bGRGb3JET01PYmplY3QodGhpc09iamVjdCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgdGhpc09iamVjdC53cmFwcGVkKCkuc2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcigkZXZlbnROYW1lLCBjcmVhdGVKU0Vycm9ySGFuZGxlcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSwgdGhpc09iamVjdCksIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmplY3QpKTtcbiIp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRXZl
bnRMaXN0ZW5lci5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgICAgIG15ICRzZXR0ZXIgPSAk
YXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntXaW5kb3dFdmVudEhhbmRsZXJ9ID8gInNl
dFdpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICA6ICRhdHRyaWJ1
dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvY3VtZW50RXZlbnRIYW5kbGVyfSA/ICJzZXREb2N1
bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICA6ICJzZXRFdmVudEhh
bmRsZXJBdHRyaWJ1dGUiOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICRz
ZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCAke2V2ZW50TmFt
ZX0sIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICRz
ZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhpc09iamVjdC53cmFwcGVk
KCksICR7ZXZlbnROYW1lfSwgdmFsdWUpO1xuIik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgfSBlbHNpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpKSB7CkBAIC01MDYz
LDEyICs1MDY3LDEyIEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW9u
CiAgICAgICAgICMgMy41LjkuMS4gTGV0IFEgYmUgPyBHZXQoTywgaWQpLgogICAgICAgICBteSAk
aWQgPSAkYXR0cmlidXRlLT5uYW1lOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
YXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihcIiR7aWR9XCIpLCBzdHJsZW4oXCIke2lkfVwiKSk7XG4iKTsKLSAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmpl
Y3QuZ2V0KCZzdGF0ZSwgaWQpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgaWQpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTtcbiIpOwogICAgICAgICAKICAgICAgICAg
IyAzLjUuOS4yLiBJZiBUeXBlKFEpIGlzIG5vdCBPYmplY3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJy
b3IuCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoIXZhbHVl
VG9Gb3J3YXJkVG8uaXNPYmplY3QoKSkpIHtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICB0aHJvd1R5cGVFcnJvcigmbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIH1cbiIpOwogICAgICAgICAKQEAgLTUwODAsNyArNTA4NCw3IEBAIHN1YiBHZW5l
cmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW9uCiAgICAgICAgICMgRklYTUU6IFdoYXQg
c2hvdWxkIHRoZSBzZWNvbmQgdmFsdWUgdG8gdGhlIFB1dFByb3BlcnR5U2xvdCBiZT8KICAgICAg
ICAgIyAoaHR0cHM6Ly9naXRodWIuY29tL2hleWNhbS93ZWJpZGwvaXNzdWVzLzM2OCkKICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhbHVlVG9G
b3J3YXJkVG8sIGZhbHNlKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
YXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZtKS0+cHV0KGFzT2JqZWN0
KHZhbHVlVG9Gb3J3YXJkVG8pLCAmc3RhdGUsIGZvcndhcmRJZCwgdmFsdWUsIHNsb3QpO1xuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2Fy
ZFRvKS0+bWV0aG9kVGFibGUodm0pLT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBmb3J3YXJkSWQsIHZhbHVlLCBzbG90KTtcbiIpOwogICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7XG4iKTsKICAgICAgICAgCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICByZXR1cm4gdHJ1ZTtcbiIpOwpAQCAtNTA5MCwxNiArNTA5NCwxNiBAQCBzdWIgR2VuZXJhdGVB
dHRyaWJ1dGVTZXR0ZXJCb2R5RGVmaW5pdGlvbgogICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzRW51bVR5cGUoJGF0dHJpYnV0ZS0+dHlwZSkpIHsKICAgICAgICAgICAgICMgQXMgcGVyIHNl
Y3Rpb24gMy41LjYgb2YgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLWF0dHJp
YnV0ZS1zZXR0ZXIsIGVudW1lcmF0aW9ucyBkbyBub3QgdXNlCiAgICAgICAgICAgICAjIHRoZSBz
dGFuZGFyZCBjb252ZXJzaW9uLCBidXQgcmF0aGVyIHNpbGVudGx5IGZhaWwgb24gaW52YWxpZCBl
bnVtZXJhdGlvbiB2YWx1ZXMuCi0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
YXV0byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjwiIC4gR2V0RW51bWVy
YXRpb25DbGFzc05hbWUoJGF0dHJpYnV0ZS0+dHlwZSwgJGludGVyZmFjZSkgLiAiPihzdGF0ZSwg
dmFsdWUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBv
cHRpb25hbE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjwiIC4gR2V0RW51bWVyYXRpb25D
bGFzc05hbWUoJGF0dHJpYnV0ZS0+dHlwZSwgJGludGVyZmFjZSkgLiAiPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxOYXRpdmVW
YWx1ZSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0
dXJuIGZhbHNlO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IG9wdGlvbmFsTmF0aXZlVmFsdWUudmFsdWUoKTtcbiIpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgbXkgJGdsb2JhbE9iamVjdFJlZmVyZW5jZSA9ICRhdHRy
aWJ1dGUtPmlzU3RhdGljID8gIipqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKSIgOiAiKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkiOworICAg
ICAgICAgICAgbXkgJGdsb2JhbE9iamVjdFJlZmVyZW5jZSA9ICRhdHRyaWJ1dGUtPmlzU3RhdGlj
ID8gIipqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSIgOiAi
KnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkiOwogICAgICAgICAgICAgbXkgJGV4Y2VwdGlvblRo
cm93ZXIgPSBHZXRBdHRyaWJ1dGVFeGNlcHRpb25UaHJvd2VyKCRpbnRlcmZhY2UsICRhdHRyaWJ1
dGUpOwogCi0gICAgICAgICAgICBteSAkdG9OYXRpdmVFeHByZXNzaW9uID0gSlNWYWx1ZVRvTmF0
aXZlKCRpbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJ2YWx1ZSIsICRhdHRyaWJ1dGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfSwgIiZzdGF0ZSIsICJzdGF0ZSIsICJ0aGlzT2JqZWN0
IiwgJGdsb2JhbE9iamVjdFJlZmVyZW5jZSwgJGV4Y2VwdGlvblRocm93ZXIpOworICAgICAgICAg
ICAgbXkgJHRvTmF0aXZlRXhwcmVzc2lvbiA9IEpTVmFsdWVUb05hdGl2ZSgkaW50ZXJmYWNlLCAk
YXR0cmlidXRlLCAidmFsdWUiLCAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25k
aXRpb25hbH0sICImbGV4aWNhbEdsb2JhbE9iamVjdCIsICJsZXhpY2FsR2xvYmFsT2JqZWN0Iiwg
InRoaXNPYmplY3QiLCAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNlLCAkZXhjZXB0aW9uVGhyb3dlcik7
CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byBuYXRpdmVWYWx1ZSA9
ICR7dG9OYXRpdmVFeHByZXNzaW9ufTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpO1xuIik7CiAg
ICAgICAgIH0KQEAgLTUxMDksNyArNTExMyw3IEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZVNldHRl
ckJvZHlEZWZpbml0aW9uCiAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgUGFzc0FyZ3VtZW50RXhw
cmVzc2lvbigibmF0aXZlVmFsdWUiLCAkYXR0cmlidXRlKSk7CiAKICAgICAgICAgbXkgJGZ1bmN0
aW9uTmFtZSA9IEdldEZ1bGx5UXVhbGlmaWVkSW1wbGVtZW50YXRpb25DYWxsTmFtZSgkaW50ZXJm
YWNlLCAkYXR0cmlidXRlLCAkYmFzZUZ1bmN0aW9uTmFtZSwgImltcGwiLCAkY29uZGl0aW9uYWwp
OwotICAgICAgICBBZGRBZGRpdGlvbmFsQXJndW1lbnRzRm9ySW1wbGVtZW50YXRpb25DYWxsKFxA
YXJndW1lbnRzLCAkaW50ZXJmYWNlLCAkYXR0cmlidXRlLCAiaW1wbCIsICJzdGF0ZSIsICJ0aGlz
T2JqZWN0Iik7CisgICAgICAgIEFkZEFkZGl0aW9uYWxBcmd1bWVudHNGb3JJbXBsZW1lbnRhdGlv
bkNhbGwoXEBhcmd1bWVudHMsICRpbnRlcmZhY2UsICRhdHRyaWJ1dGUsICJpbXBsIiwgImxleGlj
YWxHbG9iYWxPYmplY3QiLCAiIiwgInRoaXNPYmplY3QiKTsKIAogICAgICAgICB1bnNoaWZ0KEBh
cmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57U2V0dGVyQ2FsbFdpdGh9LCAkb3V0cHV0QXJyYXksICJmYWxzZSIs
ICJ0aGlzT2JqZWN0IikpOwogICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2Fs
bFdpdGhVc2luZ1JlZmVyZW5jZXMoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2Fs
bFdpdGh9LCAkb3V0cHV0QXJyYXksICJmYWxzZSIsICJ0aGlzT2JqZWN0IikpOwpAQCAtNTEyMiw3
ICs1MTI2LDcgQEAgc3ViIEdlbmVyYXRlQXR0cmlidXRlU2V0dGVyQm9keURlZmluaXRpb24KICAg
ICAgICAgfQogCiAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICIke2Z1bmN0aW9uTmFtZX0o
IiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSI7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7
XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0ge1xuIik7CiAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuICRmdW5jdGlvblN0cmluZztcbiIp
OwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfSk7XG4iKTsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0cnVlO1xuIik7CkBAIC01MTQzLDkgKzUxNDcs
OSBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVTZXR0ZXJUcmFtcG9saW5lRGVmaW5pdGlvbgogICAg
IHB1c2goQHRlbXBsYXRlUGFyYW1ldGVycywgJGF0dHJpYnV0ZVNldHRlckJvZHlOYW1lKTsKICAg
ICBwdXNoKEB0ZW1wbGF0ZVBhcmFtZXRlcnMsICJDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0
dXJuRWFybHkiKSBpZiAkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntMZW5pZW50VGhp
c307CiAgICAgCi0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAke2F0dHJpYnV0ZVNldHRl
ck5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9v
bCAke2F0dHJpYnV0ZVNldHRlck5hbWV9KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSlcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICByZXR1cm4gSURMQXR0cmlidXRlPCR7Y2xhc3NOYW1lfT46OiR7Y2FsbEF0
dHJpYnV0ZVNldHRlck5hbWV9PCIgLiBqb2luKCIsICIsIEB0ZW1wbGF0ZVBhcmFtZXRlcnMpIC4g
Ij4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgXCIiIC4gJGF0dHJpYnV0ZS0+bmFt
ZSAuICJcIik7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTwke2NsYXNzTmFtZX0+Ojoke2NhbGxBdHRyaWJ1dGVTZXR0ZXJOYW1lfTwiIC4gam9p
bigiLCAiLCBAdGVtcGxhdGVQYXJhbWV0ZXJzKSAuICI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgXCIiIC4gJGF0dHJpYnV0ZS0+bmFtZSAuICJcIik7XG4i
KTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogfQogCkBAIC01MTk1LDEwICs1
MTk5LDkgQEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9uVHJhbXBvbGluZURlZmluaXRpb24KICAgICBw
dXNoKEBjYWxsRnVuY3Rpb25UZW1wbGF0ZUFyZ3VtZW50cywgIlByb21pc2VFeGVjdXRpb25TY29w
ZTo6JHtleHBvc3VyZVNjb3BlfSIpIGlmICRoYXNQcm9taXNlUmV0dXJuVHlwZSAmJiAhJG9wZXJh
dGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UmV0dXJuc093blByb21pc2V9OwogICAgIHB1c2go
QGNhbGxGdW5jdGlvblRlbXBsYXRlQXJndW1lbnRzLCAiQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OkFzc2VydCIpIGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRl
bnRpZmllcn0gYW5kIG5vdCAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQdWJsaWNJ
ZGVudGlmaWVyfSk7CiAKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIHN0YXRlKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFtZX0oSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKVxuIik7CiAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHJldHVybiAke2lkbE9wZXJhdGlvblR5cGV9PCR7Y2xhc3NOYW1lfT46OiR7Y2FsbEZ1bmN0aW9u
TmFtZX08IiAuIGpvaW4oIiwgIiwgQGNhbGxGdW5jdGlvblRlbXBsYXRlQXJndW1lbnRzKSAuICI+
KCpzdGF0ZSwgXCIiIC4gJG9wZXJhdGlvbi0+bmFtZSAuICJcIik7XG4iKTsKKyAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgcmV0dXJuICR7aWRsT3BlcmF0aW9uVHlwZX08JHtjbGFzc05hbWV9
Pjo6JHtjYWxsRnVuY3Rpb25OYW1lfTwiIC4gam9pbigiLCAiLCBAY2FsbEZ1bmN0aW9uVGVtcGxh
dGVBcmd1bWVudHMpIC4gIj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwiIiAu
ICRvcGVyYXRpb24tPm5hbWUgLiAiXCIpO1xuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
fVxuXG4iKTsKIH0KIApAQCAtNTIxMSwyOCArNTIxNCwzMCBAQCBzdWIgR2VuZXJhdGVPcGVyYXRp
b25Cb2R5RGVmaW5pdGlvbgogICAgIG15ICRjb25kaXRpb25hbCA9ICRvcGVyYXRpb24tPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfTsKIAogICAgIG15IEBzaWduYXR1cmVBcmd1bWVu
dHMgPSAoKTsKLSAgICBwdXNoKEBzaWduYXR1cmVBcmd1bWVudHMsICJKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUiKTsKKyAgICBwdXNoKEBzaWduYXR1cmVBcmd1bWVudHMsICJKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0Iik7CisgICAgcHVzaChAc2lnbmF0dXJlQXJndW1lbnRz
LCAiSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSIpOwogICAgIHB1c2goQHNpZ25hdHVyZUFyZ3Vt
ZW50cywgInR5cGVuYW1lICR7aWRsT3BlcmF0aW9uVHlwZX08JHtjbGFzc05hbWV9Pjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcyIpIGlmICEkb3BlcmF0aW9uLT5pc1N0YXRpYzsKICAgICBwdXNo
KEBzaWduYXR1cmVBcmd1bWVudHMsICJSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UiKSBp
ZiAkaGFzUHJvbWlzZVJldHVyblR5cGUgJiYgISRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e1JldHVybnNPd25Qcm9taXNlfTsKICAgICBwdXNoKEBzaWduYXR1cmVBcmd1bWVudHMsICJK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUiKTsKIAogICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
InN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9uQm9keU5hbWV9KCIg
LiBqb2luKCIsICIsIEBzaWduYXR1cmVBcmd1bWVudHMpIC4gIilcbiIpOwogICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIntcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURf
UEFSQU0oc3RhdGUpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKIAogICAgIGlmICghJGdlbmVy
YXRpbmdPdmVybG9hZERpc3BhdGNoZXIpIHsKLSAgICAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50
UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0QXJyYXksICRvcGVyYXRpb24sICIqc3RhdGUi
KTsKKyAgICAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgk
b3V0cHV0QXJyYXksICRvcGVyYXRpb24sICIqbGV4aWNhbEdsb2JhbE9iamVjdCIpOwogCiAgICAg
ICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDaGVja1NlY3VyaXR5fSBh
bmQgISRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1cml0eX0p
IHsKICAgICAgICAgICAgIGFzc2VydCgiU2VjdXJpdHkgY2hlY2tzIGFyZSBub3Qgc3VwcG9ydGVk
IGZvciBzdGF0aWMgb3BlcmF0aW9ucy4iKSBpZiAkb3BlcmF0aW9uLT5pc1N0YXRpYzsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQmluZGluZ1NlY3Vy
aXR5LmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPnR5cGUt
Pm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIUJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYXN0ZWRUaGlzLT53cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5Ojpz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCku
d2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+d3JhcHBlZCgp
LndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUyNDEsMTEgKzUyNDYs
MTIgQEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRpb24KICAgICBteSAkaW5kZW50
ID0gIiAgICAiOwogCiAgICAgaWYgKCRnZW5lcmF0aW5nT3ZlcmxvYWREaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgVU5VU0VEX1BBUkFNKHZtKTtcbiIpOwogCiAgICAgICAgIG15IEBhcmd1bWVudHNUb0Zvcndh
cmQgPSAoKTsKLSAgICAgICAgcHVzaChAYXJndW1lbnRzVG9Gb3J3YXJkLCAic3RhdGUiKTsKKyAg
ICAgICAgcHVzaChAYXJndW1lbnRzVG9Gb3J3YXJkLCAibGV4aWNhbEdsb2JhbE9iamVjdCIpOwor
ICAgICAgICBwdXNoKEBhcmd1bWVudHNUb0ZvcndhcmQsICJjYWxsRnJhbWUiKTsKICAgICAgICAg
cHVzaChAYXJndW1lbnRzVG9Gb3J3YXJkLCAiY2FzdGVkVGhpcyIpIGlmICEkb3BlcmF0aW9uLT5p
c1N0YXRpYzsKICAgICAgICAgcHVzaChAYXJndW1lbnRzVG9Gb3J3YXJkLCAiV1RGTW92ZShwcm9t
aXNlKSIpIGlmICRoYXNQcm9taXNlUmV0dXJuVHlwZSAmJiAhJG9wZXJhdGlvbi0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57UmV0dXJuc093blByb21pc2V9OwogICAgICAgICBwdXNoKEBhcmd1bWVudHNU
b0ZvcndhcmQsICJ0aHJvd1Njb3BlIik7CkBAIC01MzQ2LDcgKzUzNTIsNyBAQCBzdWIgR2VuZXJh
dGVPcGVyYXRpb25EZWZpbml0aW9uCiAKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZh
U2NyaXB0Q29yZS9GcmFtZVRyYWNlcnMuaD4iLCAkY29uZGl0aW9uYWwpOwogICAgICAgICBteSAk
bmFtZU9mRnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmly
c3QoJGZ1bmN0aW9uTmFtZSkgLiAiV2l0aG91dFR5cGVDaGVjayI7Ci0gICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIkpTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAke25hbWVPZkZ1
bmN0aW9uV2l0aG91dFR5cGVDaGVja30oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCAkY2xhc3NOYW1l
KiBjYXN0ZWRUaGlzIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiAke25hbWVPZkZ1bmN0aW9uV2l0aG91dFR5cGVDaGVja30o
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgJGNsYXNzTmFtZSogY2Fz
dGVkVGhpcyIpOwogICAgICAgICBmb3JlYWNoIG15ICRhcmd1bWVudCAoQHskb3BlcmF0aW9uLT5h
cmd1bWVudHN9KSB7CiAgICAgICAgICAgICBteSAkdHlwZSA9ICRhcmd1bWVudC0+dHlwZTsKICAg
ICAgICAgICAgIG15ICRhcmd1bWVudFR5cGUgPSBHZXRBcmd1bWVudFR5cGVGb3JGdW5jdGlvbldp
dGhvdXRUeXBlQ2hlY2soJGludGVyZmFjZSwgJHR5cGUpOwpAQCAtNTM1Niw5ICs1MzYyLDEwIEBA
IHN1YiBHZW5lcmF0ZU9wZXJhdGlvbkRlZmluaXRpb24KICAgICAgICAgfQogICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIpXG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xu
Iik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0oc3RhdGUp
O1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlNDOjpOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBzdGF0ZSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOwor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pO1xuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CiAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4i
KTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7XG4iKTsKQEAgLTUzNjYsNyArNTM3Myw3IEBAIHN1YiBHZW5lcmF0ZU9w
ZXJhdGlvbkRlZmluaXRpb24KICAgICAgICAgbXkgJGltcGxGdW5jdGlvbk5hbWUgPSBHZXRGdWxs
eVF1YWxpZmllZEltcGxlbWVudGF0aW9uQ2FsbE5hbWUoJGludGVyZmFjZSwgJG9wZXJhdGlvbiwg
JGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lLCAiaW1wbCIsICRjb25kaXRpb25hbCk7CiAgICAg
ICAgIAogICAgICAgICBteSBAYXJndW1lbnRzID0gKCk7Ci0gICAgICAgIEFkZEFkZGl0aW9uYWxB
cmd1bWVudHNGb3JJbXBsZW1lbnRhdGlvbkNhbGwoXEBhcmd1bWVudHMsICRpbnRlcmZhY2UsICRv
cGVyYXRpb24sICJpbXBsIiwgIipzdGF0ZSIsICIqY2FzdGVkVGhpcyIpOworICAgICAgICBBZGRB
ZGRpdGlvbmFsQXJndW1lbnRzRm9ySW1wbGVtZW50YXRpb25DYWxsKFxAYXJndW1lbnRzLCAkaW50
ZXJmYWNlLCAkb3BlcmF0aW9uLCAiaW1wbCIsICIqbGV4aWNhbEdsb2JhbE9iamVjdCIsICIqY2Fs
bEZyYW1lIiwgIipjYXN0ZWRUaGlzIik7CiAgICAgICAgIAogICAgICAgICBmb3JlYWNoIG15ICRh
cmd1bWVudCAoQHskb3BlcmF0aW9uLT5hcmd1bWVudHN9KSB7CiAgICAgICAgICAgICBteSAkdmFs
dWUgPSAiIjsKQEAgLTUzODYsNyArNTM5Myw3IEBAIHN1YiBHZW5lcmF0ZU9wZXJhdGlvbkRlZmlu
aXRpb24KICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgJHZhbHVlKTsKICAgICAgICAgfQog
ICAgICAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiJGltcGxGdW5jdGlvbk5hbWUoIiAuIGpvaW4o
IiwgIiwgQGFyZ3VtZW50cykgLiAiKSI7Ci0gICAgICAgICRmdW5jdGlvblN0cmluZyA9ICJwcm9w
YWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCAkZnVuY3Rpb25TdHJpbmcpIiBpZiBO
ZWVkc0V4cGxpY2l0UHJvcGFnYXRlRXhjZXB0aW9uQ2FsbCgkb3BlcmF0aW9uKTsKKyAgICAgICAg
JGZ1bmN0aW9uU3RyaW5nID0gInByb3BhZ2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgJGZ1bmN0aW9uU3RyaW5nKSIgaWYgTmVlZHNFeHBsaWNpdFByb3BhZ2F0
ZUV4Y2VwdGlvbkNhbGwoJG9wZXJhdGlvbik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCIgLiBOYXRpdmVUb0pTVmFsdWVVc2luZ1BvaW50
ZXJzKCRvcGVyYXRpb24sICRpbnRlcmZhY2UsICRmdW5jdGlvblN0cmluZywgIipjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSIpIC4gIik7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAifVxuXG4iKTsKIApAQCAtNTQzNiwxNSArNTQ0MywxNSBAQCBzdWIgR2VuZXJhdGVTZXJpYWxp
emVyRGVmaW5pdGlvbgogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxKYXZhU2NyaXB0Q29yZS9P
YmplY3RDb25zdHJ1Y3Rvci5oPiIpOwogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpT
T2JqZWN0KiBKUyR7aW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShFeGVjU3RhdGUmIHN0YXRlLCAk
e2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpT
Qzo6SlNPYmplY3QqIEpTJHtpbnRlcmZhY2VOYW1lfTo6c2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX0mIHRoaXNPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpXG4iKTsKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7XG4iKTsKIAogICAg
IGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmhhc0luaGVyaXQpIHsKICAgICAgICAgbXkg
JHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZhY2VOYW1lID0gJHBhcmVudFNlcmlhbGl6ZXJJbnRlcmZh
Y2UtPnR5cGUtPm5hbWU7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJl
c3VsdCA9IEpTJHtwYXJlbnRTZXJpYWxpemVySW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZShzdGF0
ZSwgdGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTtcbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBKUyR7cGFyZW50U2VyaWFsaXpl
ckludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTtcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTtcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgp
KTtcbiIpOwogICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAKQEAgLTU0NTMs
MTkgKzU0NjAsMTkgQEAgc3ViIEdlbmVyYXRlU2VyaWFsaXplckRlZmluaXRpb24KIAogICAgICAg
ICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7CiAgICAgICAgIG15ICRnZXRGdW5jdGlvbk5h
bWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRy
aWJ1dGUpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvICR7bmFtZX1WYWx1
ZSA9ICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byAke25hbWV9VmFs
dWUgPSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCwgdGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
dGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpO1xuIik7CiAKICAgICAgICAgaWYgKCRjb2Rl
R2VuZXJhdG9yLT5Jc0ludGVyZmFjZVR5cGUoJGF0dHJpYnV0ZS0+dHlwZSkpIHsKICAgICAgICAg
ICAgIG15ICRhdHRyaWJ1dGVJbnRlcmZhY2VOYW1lID0gJGF0dHJpYnV0ZS0+dHlwZS0+bmFtZTsK
ICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT50eXBlLT5pc051bGxhYmxlKSB7CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEke25hbWV9VmFsdWUuaXNOdWxs
KCkpIHtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBh
dXRvKiAke25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9
OjpzZXJpYWxpemUoc3RhdGUsICpqc0Nhc3Q8SlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9Kj4o
JHtuYW1lfVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTtcbiIpOworICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBhdXRvKiAke25hbWV9U2VyaWFsaXpl
ZFZhbHVlID0gSlMke2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUobGV4aWNhbEds
b2JhbE9iamVjdCwgKmpzQ2FzdDxKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX0qPigke25hbWV9
VmFsdWUpLCBnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpO1xuIik7CiAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCBcIiR7bmFtZX1cIiksICR7bmFtZX1TZXJpYWxpemVkVmFsdWUp
O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfSBlbHNlXG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFwiJHtuYW1lfVwiKSwgJHtu
YW1lfVZhbHVlKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiAke25hbWV9U2VyaWFsaXplZFZhbHVlID0gSlMk
e2F0dHJpYnV0ZUludGVyZmFjZU5hbWV9OjpzZXJpYWxpemUoc3RhdGUsICpqc0Nhc3Q8SlMke2F0
dHJpYnV0ZUludGVyZmFjZU5hbWV9Kj4oJHtuYW1lfVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1
dG8qICR7bmFtZX1TZXJpYWxpemVkVmFsdWUgPSBKUyR7YXR0cmlidXRlSW50ZXJmYWNlTmFtZX06
OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTJHthdHRyaWJ1dGVJbnRl
cmZhY2VOYW1lfSo+KCR7bmFtZX1WYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7XG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgXCIke25hbWV9XCIpLCAke25hbWV9
U2VyaWFsaXplZFZhbHVlKTtcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpA
QCAtNTQ3OSwxNSArNTQ4NiwxNCBAQCBzdWIgR2VuZXJhdGVTZXJpYWxpemVyRGVmaW5pdGlvbgog
ICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
biIpOwogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX1Cb2R5KEV4ZWNTdGF0ZSogc3RhdGUs
ICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKVxu
Iik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
ICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX1Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSlcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKUyR7aW50ZXJmYWNlTmFtZX06OnNlcmlhbGl6ZSgqc3RhdGUsICp0aGlzT2JqZWN0LCAqdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUpKTtcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlMke2ludGVyZmFjZU5hbWV9
OjpzZXJpYWxpemUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUpKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwotICAgIHB1c2goQGlt
cGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRp
dmVGdW5jdGlvbk5hbWV9KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
c3RhdGUpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKUyR7aW50ZXJmYWNlTmFtZX0+OjpjYWxsPCR7c2VyaWFsaXpl
ck5hdGl2ZUZ1bmN0aW9uTmFtZX1Cb2R5Pigqc3RhdGUsIFwiJHtzZXJpYWxpemVyRnVuY3Rpb25O
YW1lfVwiKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBJRExPcGVy
YXRpb248SlMke2ludGVyZmFjZU5hbWV9Pjo6Y2FsbDwke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlv
bk5hbWV9Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFwiJHtzZXJpYWxp
emVyRnVuY3Rpb25OYW1lfVwiKTtcbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogfQpAQCAtNTUzMywxMyArNTUzOSwxMyBA
QCBzdWIgR2VuZXJhdGVMZWdhY3lDYWxsZXJEZWZpbml0aW9ucwogCiAgICAgICAgIG15ICRvdmVy
bG9hZEZ1bmN0aW9uUHJlZml4ID0gImNhbGwke2NsYXNzTmFtZX0iOwogCi0gICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtvdmVybG9hZEZ1
bmN0aW9uUHJlZml4fShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0
YXRlKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgJHtvdmVybG9hZEZ1bmN0aW9uUHJlZml4fShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7XG4iKTsKICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKIAotICAgICAgICBHZW5lcmF0ZU92ZXJsb2Fk
RGlzcGF0Y2hlcigkbGVnYWN5Q2FsbGVyc1swXSwgJGludGVyZmFjZSwgJG92ZXJsb2FkRnVuY3Rp
b25QcmVmaXgsICIiLCAiZ2xvYmFsT2JqZWN0LCBzdGF0ZSIpOworICAgICAgICBHZW5lcmF0ZU92
ZXJsb2FkRGlzcGF0Y2hlcigkbGVnYWN5Q2FsbGVyc1swXSwgJGludGVyZmFjZSwgJG92ZXJsb2Fk
RnVuY3Rpb25QcmVmaXgsICIiLCAibGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lIik7CiAK
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKICAgICB9IGVsc2UgewpAQCAt
NTU2MCwyMCArNTU2NiwyMCBAQCBzdWIgR2VuZXJhdGVMZWdhY3lDYWxsZXJEZWZpbml0aW9uCiAK
ICAgICBteSAkaXNPdmVybG9hZGVkID0gJG9wZXJhdGlvbi0+e292ZXJsb2Fkc30gJiYgQHskb3Bl
cmF0aW9uLT57b3ZlcmxvYWRzfX0gPiAxOwogICAgIGlmICgkaXNPdmVybG9hZGVkKSB7Ci0gICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY2Fs
bCR7Y2xhc3NOYW1lfSRvcGVyYXRpb24tPntvdmVybG9hZEluZGV4fShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgInN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY2FsbCR7Y2xhc3NOYW1lfSRv
cGVyYXRpb24tPntvdmVybG9hZEluZGV4fShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsJHtjbGFzc05hbWV9KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
c3RhdGUpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAic3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbCR7Y2xhc3NOYW1lfShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKICAgICB9CiAKICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7XG4iKTsKICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpO1xuIik7CiAKICAgICBteSAkaW5kZW50ID0gIiAgICAiOwogICAgIEdlbmVy
YXRlQXJndW1lbnRzQ291bnRDaGVjaygkb3V0cHV0QXJyYXksICRvcGVyYXRpb24sICRpbnRlcmZh
Y2UsICRpbmRlbnQpOwogCi0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oc3RhdGUtPmpzQ2FsbGVlKCkpO1xuIik7Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8JHtj
bGFzc05hbWV9Kj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTtcbiIpOwogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBBU1NFUlQoY2FzdGVkVGhpcyk7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwogCkBA
IC01NTg5LDkgKzU1OTUsOSBAQCBzdWIgR2VuZXJhdGVDYWxsV2l0aFVzaW5nUmVmZXJlbmNlcwog
ewogICAgIG15ICgkY2FsbFdpdGgsICRvdXRwdXRBcnJheSwgJHJldHVyblZhbHVlLCAkdGhpc1Jl
ZmVyZW5jZSwgJGluZGVudCkgPSBAXzsKIAotICAgIG15ICRzdGF0ZVBvaW50ZXIgPSAiJnN0YXRl
IjsKLSAgICBteSAkc3RhdGVSZWZlcmVuY2UgPSAic3RhdGUiOwotICAgIG15ICRnbG9iYWxPYmpl
Y3QgPSAianNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKSI7CisgICAgbXkgJHN0YXRlUG9pbnRlciA9ICJjYWxsRnJhbWUiOworICAgIG15ICRzdGF0
ZVJlZmVyZW5jZSA9ICIqY2FsbEZyYW1lIjsKKyAgICBteSAkZ2xvYmFsT2JqZWN0ID0gImpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSI7CiAKICAgICByZXR1
cm4gR2VuZXJhdGVDYWxsV2l0aCgkY2FsbFdpdGgsICRvdXRwdXRBcnJheSwgJHJldHVyblZhbHVl
LCAkcmV0dXJuVmFsdWUsICRzdGF0ZVBvaW50ZXIsICRzdGF0ZVJlZmVyZW5jZSwgJGdsb2JhbE9i
amVjdCwgJGdsb2JhbE9iamVjdCwgJHRoaXNSZWZlcmVuY2UsICRpbmRlbnQpOwogfQpAQCAtNTYw
MSw5ICs1NjA3LDkgQEAgc3ViIEdlbmVyYXRlQ2FsbFdpdGhVc2luZ1BvaW50ZXJzCiB7CiAgICAg
bXkgKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICR0aGlzUmVmZXJlbmNl
LCAkaW5kZW50KSA9IEBfOwogCi0gICAgbXkgJHN0YXRlUG9pbnRlciA9ICJzdGF0ZSI7Ci0gICAg
bXkgJHN0YXRlUmVmZXJlbmNlID0gIipzdGF0ZSI7Ci0gICAgbXkgJGdsb2JhbE9iamVjdCA9ICJq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSI7
CisgICAgbXkgJHN0YXRlUG9pbnRlciA9ICJjYWxsRnJhbWUiOworICAgIG15ICRzdGF0ZVJlZmVy
ZW5jZSA9ICIqY2FsbEZyYW1lIjsKKyAgICBteSAkZ2xvYmFsT2JqZWN0ID0gImpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpIjsKIAogICAgIHJldHVybiBHZW5l
cmF0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkcmV0dXJuVmFsdWUsICRyZXR1
cm5WYWx1ZSwgJHN0YXRlUG9pbnRlciwgJHN0YXRlUmVmZXJlbmNlLCAkZ2xvYmFsT2JqZWN0LCAk
Z2xvYmFsT2JqZWN0LCAkdGhpc1JlZmVyZW5jZSwgJGluZGVudCk7CiB9CkBAIC01NjEyLDEwICs1
NjE4LDEwIEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbFdpdGhVc2luZ1BvaW50ZXJzCiB7
CiAgICAgbXkgKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAkdmlzaWJsZUludGVyZmFjZU5hbWUs
ICR0aGlzUmVmZXJlbmNlLCAkaW5kZW50KSA9IEBfOwogCi0gICAgbXkgJHN0YXRlUG9pbnRlciA9
ICJzdGF0ZSI7Ci0gICAgbXkgJHN0YXRlUmVmZXJlbmNlID0gIipzdGF0ZSI7CisgICAgbXkgJHN0
YXRlUG9pbnRlciA9ICJjYWxsRnJhbWUiOworICAgIG15ICRzdGF0ZVJlZmVyZW5jZSA9ICIqY2Fs
bEZyYW1lIjsKICAgICBteSAkZ2xvYmFsT2JqZWN0ID0gImNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpIjsKLSAgICBteSAkY29udGV4dE1pc3NpbmcgPSAidGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgXCIke3Zp
c2libGVJbnRlcmZhY2VOYW1lfVwiKSI7CisgICAgbXkgJGNvbnRleHRNaXNzaW5nID0gInRocm93
Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgXCIke3Zpc2libGVJbnRlcmZhY2VOYW1lfVwiKSI7
CiAgICAgbXkgJHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBY2Nlc3NvciA9ICJjYXN0ZWRUaGlzIjsK
IAogICAgIHJldHVybiBHZW5lcmF0ZUNhbGxXaXRoKCRjYWxsV2l0aCwgJG91dHB1dEFycmF5LCAi
IiwgJGNvbnRleHRNaXNzaW5nLCAkc3RhdGVQb2ludGVyLCAkc3RhdGVSZWZlcmVuY2UsICRnbG9i
YWxPYmplY3QsICRzY3JpcHRFeGVjdXRpb25Db250ZXh0QWNjZXNzb3IsICR0aGlzUmVmZXJlbmNl
LCAkaW5kZW50KTsKQEAgLTU2MzAsOCArNTYzNiwxMyBAQCBzdWIgR2VuZXJhdGVDYWxsV2l0aAog
ICAgICRpbmRlbnQgfHw9ICIgICAgIjsKIAogICAgIG15IEBjYWxsV2l0aEFyZ3M7Ci0gICAgcHVz
aChAY2FsbFdpdGhBcmdzLCAkc3RhdGVSZWZlcmVuY2UpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRl
bmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkV4ZWNTdGF0ZSIpOwotICAgIHB1c2go
QGNhbGxXaXRoQXJncywgIioke2dsb2JhbE9iamVjdH0iKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0
ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJHbG9iYWxPYmplY3QiKTsKKyAgICBp
ZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAi
RXhlY1N0YXRlIikpIHsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiKiR7Z2xvYmFsT2Jq
ZWN0fSIpOworICAgICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICRzdGF0ZVJlZmVyZW5jZSk7Cisg
ICAgfQorICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygk
Y2FsbFdpdGgsICJHbG9iYWxPYmplY3QiKSkgeworICAgICAgICBwdXNoKEBjYWxsV2l0aEFyZ3Ms
ICIqJHtnbG9iYWxPYmplY3R9Iik7CisgICAgfQogICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0
ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
IikpIHsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImF1dG8qIGNvbnRl
eHQgPSAke3NjcmlwdEV4ZWN1dGlvbkNvbnRleHRBY2Nlc3Nvcn0tPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiaWYg
KFVOTElLRUxZKCFjb250ZXh0KSlcbiIpOwpAQCAtNTY1MCw3ICs1NjYxLDcgQEAgc3ViIEdlbmVy
YXRlQ2FsbFdpdGgKICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29u
dGFpbnMoJGNhbGxXaXRoLCAiSW5jdW1iZW50RG9jdW1lbnQiKSkgewogICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiRE9NV2luZG93LmgiKTsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpT
RE9NV2luZG93QmFzZS5oIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAu
ICJhdXRvKiBpbmN1bWJlbnREb2N1bWVudCA9IGluY3VtYmVudERPTVdpbmRvdygkc3RhdGVSZWZl
cmVuY2UpLmRvY3VtZW50KCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5k
ZW50IC4gImF1dG8qIGluY3VtYmVudERvY3VtZW50ID0gaW5jdW1iZW50RE9NV2luZG93KCokZ2xv
YmFsT2JqZWN0LCAkc3RhdGVSZWZlcmVuY2UpLmRvY3VtZW50KCk7XG4iKTsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImlmICghaW5jdW1iZW50RG9jdW1lbnQpXG4iKTsK
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAgICByZXR1cm4iIC4gKCRy
ZXR1cm5WYWx1ZSA/ICIgIiAuICRyZXR1cm5WYWx1ZSA6ICIiKSAuICI7XG4iKTsKICAgICAgICAg
cHVzaChAY2FsbFdpdGhBcmdzLCAiKmluY3VtYmVudERvY3VtZW50Iik7CkBAIC01NjYzLDE3ICs1
Njc0LDE3IEBAIHN1YiBHZW5lcmF0ZUNhbGxXaXRoCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5F
eHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkFjdGl2ZVdpbmRvdyIpKSB7CiAg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJET01XaW5kb3cuaCIpOwogICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiSlNET01XaW5kb3dCYXNlLmgiKTsKLSAgICAgICAgcHVzaChAY2FsbFdpdGhB
cmdzLCAiYWN0aXZlRE9NV2luZG93KCRzdGF0ZVJlZmVyZW5jZSkiKTsKKyAgICAgICAgcHVzaChA
Y2FsbFdpdGhBcmdzLCAiYWN0aXZlRE9NV2luZG93KCokZ2xvYmFsT2JqZWN0KSIpOwogICAgIH0K
ICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxX
aXRoLCAiRmlyc3RXaW5kb3ciKSkgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NV2lu
ZG93LmgiKTsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NV2luZG93QmFzZS5oIik7
Ci0gICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgImZpcnN0RE9NV2luZG93KCRzdGF0ZVJlZmVy
ZW5jZSkiKTsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiZmlyc3RET01XaW5kb3coKiRn
bG9iYWxPYmplY3QpIik7CiAgICAgfQogICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRB
dHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJJbmN1bWJlbnRXaW5kb3ciKSkgewogICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiRE9NV2luZG93LmgiKTsKICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIkpTRE9NV2luZG93QmFzZS5oIik7Ci0gICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywg
ImluY3VtYmVudERPTVdpbmRvdygkc3RhdGVSZWZlcmVuY2UpIik7CisgICAgICAgIHB1c2goQGNh
bGxXaXRoQXJncywgImluY3VtYmVudERPTVdpbmRvdygqJGdsb2JhbE9iamVjdCwgJHN0YXRlUmVm
ZXJlbmNlKSIpOwogICAgIH0KICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmli
dXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiUnVudGltZUZsYWdzIikpIHsKICAgICAgICAgcHVzaChA
Y2FsbFdpdGhBcmdzLCAiJHtnbG9iYWxPYmplY3R9LT5ydW50aW1lRmxhZ3MoKSIpOwpAQCAtNTcw
Miw4ICs1NzEzLDggQEAgc3ViIEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVjawogICAgICAgICB9
CiAgICAgfQogICAgIGlmICgkbnVtTWFuZGF0b3J5QXJndW1lbnRzID49IDEpIHsKLSAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgJG51bU1hbmRhdG9yeUFyZ3VtZW50cykpXG4iKTsKLSAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpO1xuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAkbnVtTWFuZGF0b3J5QXJndW1lbnRzKSlcbiIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpO1xuIik7CiAgICAgfQogfQogCkBAIC01Nzcw
LDcgKzU3ODEsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICBteSAkZnVuY3Rp
b25OYW1lID0gR2V0RnVsbHlRdWFsaWZpZWRJbXBsZW1lbnRhdGlvbkNhbGxOYW1lKCRpbnRlcmZh
Y2UsICRvcGVyYXRpb24sICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSwgImltcGwiLCAkY29u
ZGl0aW9uYWwpOwogICAgIAogICAgIG15IEBhcmd1bWVudHMgPSAoKTsKLSAgICBBZGRBZGRpdGlv
bmFsQXJndW1lbnRzRm9ySW1wbGVtZW50YXRpb25DYWxsKFxAYXJndW1lbnRzLCAkaW50ZXJmYWNl
LCAkb3BlcmF0aW9uLCAiaW1wbCIsICIqc3RhdGUiLCAiKmNhc3RlZFRoaXMiKTsKKyAgICBBZGRB
ZGRpdGlvbmFsQXJndW1lbnRzRm9ySW1wbGVtZW50YXRpb25DYWxsKFxAYXJndW1lbnRzLCAkaW50
ZXJmYWNlLCAkb3BlcmF0aW9uLCAiaW1wbCIsICIqbGV4aWNhbEdsb2JhbE9iamVjdCIsICIqY2Fs
bEZyYW1lIiwgIipjYXN0ZWRUaGlzIik7CiAgICAgCiAgICAgbXkgJHF1b3RlZEZ1bmN0aW9uTmFt
ZTsKICAgICBpZiAoISRpc0NvbnN0cnVjdG9yKSB7CkBAIC01ODE4LDcgKzU4MjksNyBAQCBzdWIg
R2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgCiAgICAgICAgICAgICBteSAkSURMVHlw
ZSA9IEdldElETFR5cGUoJGludGVyZmFjZSwgJHR5cGUpOwogCi0gICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byAke25hbWV9ID0gY29udmVydFZhcmlhZGljQXJn
dW1lbnRzPCR7SURMVHlwZX0+KCpzdGF0ZSwgJHthcmd1bWVudEluZGV4fSk7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvICR7bmFtZX0gPSBjb252
ZXJ0VmFyaWFkaWNBcmd1bWVudHM8JHtJRExUeXBlfT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YWxsRnJhbWUsICR7YXJndW1lbnRJbmRleH0pO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICRpbmRlbnQgLiAiUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTtcbiIpOwogCiAgICAgICAgICAgICAkdmFsdWUgPSAiV1RGTW92ZSgke25h
bWV9KSI7CkBAIC01ODMyLDExICs1ODQzLDExIEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVj
awogCiAgICAgICAgICAgICAgICAgaWYgKGRlZmluZWQoJGFyZ3VtZW50LT5kZWZhdWx0KSkgewog
ICAgICAgICAgICAgICAgICAgICBpZiAoV2lsbENvbnZlcnRVbmRlZmluZWRUb0RlZmF1bHRQYXJh
bWV0ZXJWYWx1ZSgkdHlwZSwgJGFyZ3VtZW50LT5kZWZhdWx0KSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgJGFyZ3VtZW50TG9va3VwRm9yQ29udmVyc2lvbiA9ICJzdGF0ZS0+YXJndW1lbnQo
JGFyZ3VtZW50SW5kZXgpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICRhcmd1bWVudExvb2t1
cEZvckNvbnZlcnNpb24gPSAiY2FsbEZyYW1lLT5hcmd1bWVudCgkYXJndW1lbnRJbmRleCkiOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgbXkg
JGRlZmF1bHRWYWx1ZSA9IEdlbmVyYXRlRGVmYXVsdFZhbHVlKCRpbnRlcmZhY2UsICRhcmd1bWVu
dCwgJGFyZ3VtZW50LT50eXBlLCAkYXJndW1lbnQtPmRlZmF1bHQpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgJG9wdGlvbmFsQ2hlY2sgPSAic3RhdGUtPmFyZ3VtZW50KCRhcmd1bWVudEluZGV4
KS5pc1VuZGVmaW5lZCgpID8gJGRlZmF1bHRWYWx1ZSA6ICI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uID0gInN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgkYXJndW1lbnRJbmRleCkiCisgICAgICAgICAgICAgICAgICAgICAgICAkb3B0aW9uYWxD
aGVjayA9ICJjYWxsRnJhbWUtPmFyZ3VtZW50KCRhcmd1bWVudEluZGV4KS5pc1VuZGVmaW5lZCgp
ID8gJGRlZmF1bHRWYWx1ZSA6ICI7CisgICAgICAgICAgICAgICAgICAgICAgICAkYXJndW1lbnRM
b29rdXBGb3JDb252ZXJzaW9uID0gImNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3Vt
ZW50SW5kZXgpIgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgbXkgJGFyZ3VtZW50SURMVHlwZSA9IEdldElETFR5cGUo
JGludGVyZmFjZSwgJGFyZ3VtZW50LT50eXBlKTsKQEAgLTU4NDksMjIgKzU4NjAsMjIgQEAgc3Vi
IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAkbmF0aXZl
VmFsdWVDYXN0RnVuY3Rpb24gPSAiT3B0aW9uYWw8Q29udmVydGVyPCRhcmd1bWVudElETFR5cGU+
OjpSZXR1cm5UeXBlPiI7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICAkb3B0aW9uYWxDaGVjayA9ICJzdGF0ZS0+YXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpLmlz
VW5kZWZpbmVkKCkgPyAkZGVmYXVsdFZhbHVlIDogIjsKLSAgICAgICAgICAgICAgICAgICAgJGFy
Z3VtZW50TG9va3VwRm9yQ29udmVyc2lvbiA9ICJzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoJGFy
Z3VtZW50SW5kZXgpIjsKKyAgICAgICAgICAgICAgICAgICAgJG9wdGlvbmFsQ2hlY2sgPSAiY2Fs
bEZyYW1lLT5hcmd1bWVudCgkYXJndW1lbnRJbmRleCkuaXNVbmRlZmluZWQoKSA/ICRkZWZhdWx0
VmFsdWUgOiAiOworICAgICAgICAgICAgICAgICAgICAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJz
aW9uID0gImNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3VtZW50SW5kZXgpIjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlm
ICgkYXJndW1lbnQtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JldHVyblZhbHVlfSkgewotICAgICAg
ICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byByZXR1cm5W
YWx1ZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgkYXJndW1lbnRJbmRleCk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImF1dG8gcmV0
dXJuVmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmd1bWVudEluZGV4KTtc
biIpOwogICAgICAgICAgICAgICAgICAgICAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uID0g
InJldHVyblZhbHVlIjsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uID0gInN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgkYXJndW1lbnRJbmRleCkiOworICAgICAgICAgICAgICAgICAgICAkYXJndW1lbnRMb29r
dXBGb3JDb252ZXJzaW9uID0gImNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3VtZW50
SW5kZXgpIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IG15ICRnbG9iYWxPYmplY3RSZWZlcmVuY2UgPSAkb3BlcmF0aW9uLT5pc1N0YXRpYyA/ICIqanND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkiIDog
IipjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSI7CisgICAgICAgICAgICBteSAkZ2xvYmFsT2Jq
ZWN0UmVmZXJlbmNlID0gJG9wZXJhdGlvbi0+aXNTdGF0aWMgPyAiKmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpIiA6ICIqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCkiOwogICAgICAgICAgICAgbXkgJGFyZ3VtZW50RXhjZXB0aW9uVGhyb3dlciA9IEdldEFy
Z3VtZW50RXhjZXB0aW9uVGhyb3dlcigkaW50ZXJmYWNlLCAkYXJndW1lbnQsICRhcmd1bWVudElu
ZGV4LCAkcXVvdGVkRnVuY3Rpb25OYW1lKTsKIAotICAgICAgICAgICAgbXkgJG5hdGl2ZVZhbHVl
ID0gSlNWYWx1ZVRvTmF0aXZlKCRpbnRlcmZhY2UsICRhcmd1bWVudCwgJGFyZ3VtZW50TG9va3Vw
Rm9yQ29udmVyc2lvbiwgJGNvbmRpdGlvbmFsLCAic3RhdGUiLCAiKnN0YXRlIiwgIipjYXN0ZWRU
aGlzIiwgJGdsb2JhbE9iamVjdFJlZmVyZW5jZSwgJGFyZ3VtZW50RXhjZXB0aW9uVGhyb3dlcik7
CisgICAgICAgICAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFj
ZSwgJGFyZ3VtZW50LCAkYXJndW1lbnRMb29rdXBGb3JDb252ZXJzaW9uLCAkY29uZGl0aW9uYWws
ICJsZXhpY2FsR2xvYmFsT2JqZWN0IiwgIipsZXhpY2FsR2xvYmFsT2JqZWN0IiwgIipjYXN0ZWRU
aGlzIiwgJGdsb2JhbE9iamVjdFJlZmVyZW5jZSwgJGFyZ3VtZW50RXhjZXB0aW9uVGhyb3dlcik7
CiAKICAgICAgICAgICAgICRuYXRpdmVWYWx1ZSA9ICIke25hdGl2ZVZhbHVlQ2FzdEZ1bmN0aW9u
fSgiIC4gJG5hdGl2ZVZhbHVlIC4gIikiIGlmIGRlZmluZWQgJG5hdGl2ZVZhbHVlQ2FzdEZ1bmN0
aW9uOwogICAgICAgICAgICAgJG5hdGl2ZVZhbHVlID0gJG9wdGlvbmFsQ2hlY2sgLiAkbmF0aXZl
VmFsdWUgaWYgZGVmaW5lZCAkb3B0aW9uYWxDaGVjazsKQEAgLTU4ODIsNyArNTg5Myw3IEBAIHN1
YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgIHB1c2goQGFyZ3VtZW50cywgIldURk1vdmUo
cHJvbWlzZSkiKSBpZiAkb3BlcmF0aW9uLT50eXBlICYmICRjb2RlR2VuZXJhdG9yLT5Jc1Byb21p
c2VUeXBlKCRvcGVyYXRpb24tPnR5cGUpICYmICEkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntQcm9taXNlUHJveHl9OwogCiAgICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gIiRmdW5jdGlv
bk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSI7Ci0gICAgJGZ1bmN0aW9uU3Ry
aW5nID0gInByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsICRmdW5jdGlvblN0
cmluZykiIGlmIE5lZWRzRXhwbGljaXRQcm9wYWdhdGVFeGNlcHRpb25DYWxsKCRvcGVyYXRpb24p
OworICAgICRmdW5jdGlvblN0cmluZyA9ICJwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsICRmdW5jdGlvblN0cmluZykiIGlmIE5lZWRzRXhwbGljaXRQ
cm9wYWdhdGVFeGNlcHRpb25DYWxsKCRvcGVyYXRpb24pOwogCiAgICAgcmV0dXJuICRmdW5jdGlv
blN0cmluZzsKIH0KQEAgLTYyNDQsNyArNjI1NSw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1w
bGVtZW50YXRpb25Db250ZW50CiAgICAgICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBh
dXRvJiB2bSA9IGdsb2JhbE9iamVjdC52bSgpO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRj
b250ZW50UmVmLCAiICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTtcbiIpOwogCi0gICAgICAgICAg
ICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QuZ2xv
YmFsRXhlYygpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBhdXRv
JiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0O1xuIik7CiAKICAgICAgICAgICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gJHt0aGlzVmFsdWV9
O1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzO1xuIik7CkBAIC02Mjc0LDkgKzYyODUsOSBAQCBzdWIgR2VuZXJhdGVDYWxs
YmFja0ltcGxlbWVudGF0aW9uQ29udGVudAogICAgICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYs
ICIgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7XG4iKTsKICAgICAgICAgICAgIGlmICgkb3Bl
cmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXRocm93RXhjZXB0aW9ufSkgewogICAgICAg
ICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRjb250
ZW50UmVmLCAiICAgICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIHJldHVy
bmVkRXhjZXB0aW9uKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAi
ICAgICAgICB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
cmV0dXJuZWRFeGNlcHRpb24pO1xuIik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRl
LCByZXR1cm5lZEV4Y2VwdGlvbik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkY29udGVu
dFJlZiwgIiAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXR1
cm5lZEV4Y2VwdGlvbik7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHB1c2goQCRj
b250ZW50UmVmLCAiICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25U
aHJvd247XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgICB9XG5cbiIp
OwpAQCAtNjI4NCw3ICs2Mjk1LDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlv
bkNvbnRlbnQKICAgICAgICAgICAgIGlmICgkb3BlcmF0aW9uLT50eXBlLT5uYW1lIGVxICJ2b2lk
IikgewogICAgICAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHJldHVybiB7IH07
XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVZh
bHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRpbnRlcmZhY2VPckNhbGxiYWNrLCAkb3BlcmF0aW9uLCAi
anNSZXN1bHQiLCAiIiwgIiZzdGF0ZSIsICJzdGF0ZSIpOworICAgICAgICAgICAgICAgIG15ICRu
YXRpdmVWYWx1ZSA9IEpTVmFsdWVUb05hdGl2ZSgkaW50ZXJmYWNlT3JDYWxsYmFjaywgJG9wZXJh
dGlvbiwgImpzUmVzdWx0IiwgIiIsICImbGV4aWNhbEdsb2JhbE9iamVjdCIsICJsZXhpY2FsR2xv
YmFsT2JqZWN0Iik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBwdXNoKEAkY29udGVu
dFJlZiwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIGF1dG8gcmV0dXJuVmFs
dWUgPSAke25hdGl2ZVZhbHVlfTtcbiIpOwpAQCAtNjMyOCw3ICs2MzM5LDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAkaW5kZW50IC4gIiRmdW5jdGlvblN0cmluZztcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICRpbmRlbnQgLiAicmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtc
biIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG15ICRnbG9iYWxPYmplY3RSZWZlcmVuY2UgPSAk
b3BlcmF0aW9uLT5pc1N0YXRpYyA/ICIqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSkiIDogIipjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSI7
CisgICAgICAgIG15ICRnbG9iYWxPYmplY3RSZWZlcmVuY2UgPSAkb3BlcmF0aW9uLT5pc1N0YXRp
YyA/ICIqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkiIDog
IipjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSI7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgJGluZGVudCAuICJyZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCIgLiBOYXRpdmVUb0pTVmFsdWVV
c2luZ1BvaW50ZXJzKCRvcGVyYXRpb24sICRpbnRlcmZhY2UsICRmdW5jdGlvblN0cmluZywgJGds
b2JhbE9iamVjdFJlZmVyZW5jZSkgLiAiKTtcbiIpOwogICAgIH0KIH0KQEAgLTYzMzgsNyArNjM0
OSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ3VzdG9tRnVuY3Rpb25DYWxsCiAgICAg
bXkgKCRvdXRwdXRBcnJheSwgJG9wZXJhdGlvbiwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGZ1
bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lLCAkaW5kZW50KSA9IEBfOwogCiAgICAgbXkgQGN1c3Rv
bUZ1bmN0aW9uQXJndW1lbnRzID0gKCk7Ci0gICAgcHVzaChAY3VzdG9tRnVuY3Rpb25Bcmd1bWVu
dHMsICIqc3RhdGUiKTsKKyAgICBwdXNoKEBjdXN0b21GdW5jdGlvbkFyZ3VtZW50cywgIipsZXhp
Y2FsR2xvYmFsT2JqZWN0Iik7CisgICAgcHVzaChAY3VzdG9tRnVuY3Rpb25Bcmd1bWVudHMsICIq
Y2FsbEZyYW1lIik7CiAgICAgcHVzaChAY3VzdG9tRnVuY3Rpb25Bcmd1bWVudHMsICJXVEZNb3Zl
KHByb21pc2UpIikgaWYgJGNvZGVHZW5lcmF0b3ItPklzUHJvbWlzZVR5cGUoJG9wZXJhdGlvbi0+
dHlwZSkgJiYgISRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JldHVybnNPd25Qcm9t
aXNlfTsKIAogICAgIGlmICgkb3BlcmF0aW9uLT5pc1N0YXRpYykgewpAQCAtNjQxMiw5ICs2NDI0
LDkgQEAgRU5ECiAKICAgICAgICAgaWYgKCRwcm9wZXJ0eU5hbWUgZXEgImZvckVhY2giKSB7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIDw8RU5EKTsKLXN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9Q2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTJGlu
dGVyZmFjZU5hbWUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9Q2FsbGVyKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlMkaW50
ZXJmYWNlTmFtZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3JGb3JFYWNoPCR7aXRlcmF0b3JOYW1l
fT4oKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoaXRlcmF0b3JGb3JFYWNoPCR7aXRlcmF0b3JOYW1lfT4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CiB9CiAKIEVORApA
QCAtNjQyNSw3ICs2NDM3LDcgQEAgRU5ECiAgICAgICAgICAgICAkaXRlcmF0aW9uS2luZCA9ICJW
YWx1ZSIgaWYgJHByb3BlcnR5TmFtZSBlcSAiZW50cmllcyIgYW5kIG5vdCAkaW50ZXJmYWNlLT5p
dGVyYWJsZS0+aXNLZXlWYWx1ZTsKIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICA8
PEVORCk7Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUNhbGxl
cihFeGVjU3RhdGUqLCBKUyRpbnRlcmZhY2VOYW1lKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmKQorc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1DYWxsZXIo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBKUyRpbnRlcmZhY2VOYW1lKiB0aGlzT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmKQogewogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0
b3JDcmVhdGU8JHtpdGVyYXRvck5hbWV9PigqdGhpc09iamVjdCwgSXRlcmF0aW9uS2luZDo6JHtp
dGVyYXRpb25LaW5kfSkpOwogfQpAQCAtNjQzNCwxMCArNjQ0Niw5IEBAIEVORAogICAgICAgICB9
CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICA8PEVORCk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIHN0YXRlKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMICR7ZnVuY3Rpb25OYW1lfShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248JHtjbGFzc05hbWV9
Pjo6Y2FsbDwke2Z1bmN0aW9uTmFtZX1DYWxsZXI+KCpzdGF0ZSwgIiR7cHJvcGVydHlOYW1lfSIp
OworICAgIHJldHVybiBJRExPcGVyYXRpb248JHtjbGFzc05hbWV9Pjo6Y2FsbDwke2Z1bmN0aW9u
TmFtZX1DYWxsZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiJHtwcm9wZXJ0
eU5hbWV9Iik7CiB9CiAKIEVORApAQCAtNjY0OCw4ICs2NjU5LDggQEAgc3ViIEpTVmFsdWVUb05h
dGl2ZQogICAgIG15ICR0eXBlID0gJGNvbnRleHQtPnR5cGU7CiAKICAgICAjIEZJWE1FOiBSZW1v
dmUgdGhlc2UgMyB2YXJpYWJsZXMgd2hlbiBhbGwgSlNWYWx1ZVRvTmF0aXZlIHVzZSByZWZlcmVu
Y2VzLgotICAgICRzdGF0ZVBvaW50ZXIgPSAic3RhdGUiIHVubGVzcyAkc3RhdGVQb2ludGVyOwot
ICAgICRzdGF0ZVJlZmVyZW5jZSA9ICIqc3RhdGUiIHVubGVzcyAkc3RhdGVSZWZlcmVuY2U7Cisg
ICAgJHN0YXRlUG9pbnRlciA9ICJjYWxsRnJhbWUiIHVubGVzcyAkc3RhdGVQb2ludGVyOworICAg
ICRzdGF0ZVJlZmVyZW5jZSA9ICIqY2FsbEZyYW1lIiB1bmxlc3MgJHN0YXRlUmVmZXJlbmNlOwog
ICAgICR0aGlzT2JqZWN0UmVmZXJlbmNlID0gIipjYXN0ZWRUaGlzIiB1bmxlc3MgJHRoaXNPYmpl
Y3RSZWZlcmVuY2U7CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlc0ZvcklETFR5cGUoJHR5cGUsICRj
b25kaXRpb25hbCk7CkBAIC02NjY5LDE2ICs2NjgwLDE3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUK
IAogc3ViIFRvTmF0aXZlRm9yRnVuY3Rpb25XaXRob3V0VHlwZUNoZWNrCiB7Ci0gICAgbXkgKCRp
bnRlcmZhY2UsICRjb250ZXh0LCAkdmFsdWUsICRjb25kaXRpb25hbCwgJHN0YXRlUG9pbnRlciwg
JHN0YXRlUmVmZXJlbmNlLCAkdGhpc09iamVjdFJlZmVyZW5jZSkgPSBAXzsKKyAgICBteSAoJGlu
dGVyZmFjZSwgJGNvbnRleHQsICR2YWx1ZSwgJGNvbmRpdGlvbmFsLCAkc3RhdGVQb2ludGVyLCAk
c3RhdGVSZWZlcmVuY2UsICR0aGlzT2JqZWN0UmVmZXJlbmNlLCAkZ2xvYmFsT2JqZWN0UmVmZXJl
bmNlKSA9IEBfOwogCiAgICAgYXNzZXJ0KCJJbnZhbGlkIGNvbnRleHQgdHlwZSIpIGlmICFJc1Zh
bGlkQ29udGV4dEZvckpTVmFsdWVUb05hdGl2ZSgkY29udGV4dCk7CiAKICAgICBteSAkdHlwZSA9
ICRjb250ZXh0LT50eXBlOwogCiAgICAgIyBGSVhNRTogUmVtb3ZlIHRoZXNlIDMgdmFyaWFibGVz
IHdoZW4gYWxsIEpTVmFsdWVUb05hdGl2ZSB1c2UgcmVmZXJlbmNlcy4KLSAgICAkc3RhdGVQb2lu
dGVyID0gInN0YXRlIiB1bmxlc3MgJHN0YXRlUG9pbnRlcjsKLSAgICAkc3RhdGVSZWZlcmVuY2Ug
PSAiKnN0YXRlIiB1bmxlc3MgJHN0YXRlUmVmZXJlbmNlOworICAgICRzdGF0ZVBvaW50ZXIgPSAi
Y2FsbEZyYW1lIiB1bmxlc3MgJHN0YXRlUG9pbnRlcjsKKyAgICAkc3RhdGVSZWZlcmVuY2UgPSAi
KmNhbGxGcmFtZSIgdW5sZXNzICRzdGF0ZVJlZmVyZW5jZTsKICAgICAkdGhpc09iamVjdFJlZmVy
ZW5jZSA9ICIqY2FzdGVkVGhpcyIgdW5sZXNzICR0aGlzT2JqZWN0UmVmZXJlbmNlOworICAgICRn
bG9iYWxPYmplY3RSZWZlcmVuY2UgPSAiKmxleGljYWxHbG9iYWxPYmplY3QiIHVubGVzcyAkZ2xv
YmFsT2JqZWN0UmVmZXJlbmNlOwogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXNGb3JJRExUeXBlKCR0
eXBlLCAkY29uZGl0aW9uYWwpOwogCkBAIC02Njg5LDcgKzY3MDEsNyBAQCBzdWIgVG9OYXRpdmVG
b3JGdW5jdGlvbldpdGhvdXRUeXBlQ2hlY2sKICAgICBteSAkSURMVHlwZSA9IEdldElETFR5cGUo
JGludGVyZmFjZSwgJHR5cGUpOwogCiAgICAgbXkgQGNvbnZlcnNpb25Bcmd1bWVudHMgPSAoKTsK
LSAgICBwdXNoKEBjb252ZXJzaW9uQXJndW1lbnRzLCAiJHN0YXRlUmVmZXJlbmNlIik7CisgICAg
cHVzaChAY29udmVyc2lvbkFyZ3VtZW50cywgIiRnbG9iYWxPYmplY3RSZWZlcmVuY2UiKTsKICAg
ICBwdXNoKEBjb252ZXJzaW9uQXJndW1lbnRzLCAiJHZhbHVlIik7CiAKICAgICByZXR1cm4gKCJE
T01KSVQ6OkRpcmVjdENvbnZlcnRlcjwkSURMVHlwZT46OmRpcmVjdENvbnZlcnQoIiAuIGpvaW4o
IiwgIiwgQGNvbnZlcnNpb25Bcmd1bWVudHMpIC4gIikiLCAxKTsKQEAgLTY3MDEsNyArNjcxMyw3
IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWVET01Db252ZXJ0TmVlZHNTdGF0ZQogCiAgICAgIyBGSVhN
RTogV2UgbmVlZCBhIG1vcmUgcm9idXN0IHdheSB0byBzcGVjaWZ5IHRoaXMgcmVxdWlyZW1lbnQg
c28gYXMgbm90CiAgICAgIyB0byByZXF1aXJlIHNwZWNpYWxpemluZyBlYWNoIHR5cGUuIFBlcmhh
cHMganVzdCByZXF1aXJpbmcgYWxsIG92ZXJyaWRlCi0gICAgIyB0eXBlcyB0byB0YWtlIGJvdGgg
c3RhdGUgYW5kIHRoZSBnbG9iYWwgb2JqZWN0IHdvdWxkIHdvcms/CisgICAgIyB0eXBlcyB0byB0
YWtlIGJvdGggbGV4aWNhbEdsb2JhbE9iamVjdCBhbmQgdGhlIGdsb2JhbCBvYmplY3Qgd291bGQg
d29yaz8KICAgICBpZiAoJHR5cGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e092ZXJyaWRlSURMVHlw
ZX0pIHsKICAgICAgICAgbXkgJG92ZXJyaWRlVHlwZU5hbWUgPSAkdHlwZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57T3ZlcnJpZGVJRExUeXBlfTsKICAgICAgICAgcmV0dXJuIDEgaWYgJG92ZXJyaWRl
VHlwZU5hbWUgZXEgIklETElEQktleSI7CkBAIC02NzExLDcgKzY3MjMsNyBAQCBzdWIgTmF0aXZl
VG9KU1ZhbHVlRE9NQ29udmVydE5lZWRzU3RhdGUKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgIyBGSVhNRTogVGhpcyBzaG91bGQgYWN0dWFsbHkgY2hlY2sgaWYgYWxsIHRoZSBzdWIt
b2JqZWN0cyBvZiB0aGUgdW5pb24gbmVlZCB0aGUgc3RhdGUuCisgICAgIyBGSVhNRTogVGhpcyBz
aG91bGQgYWN0dWFsbHkgY2hlY2sgaWYgYWxsIHRoZSBzdWItb2JqZWN0cyBvZiB0aGUgdW5pb24g
bmVlZCB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KICAgICByZXR1cm4gMSBpZiAkdHlwZS0+aXNV
bmlvbjsKICAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+SXNTZXF1ZW5jZU9yRnJvemVu
QXJyYXlUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+SXNSZWNv
cmRUeXBlKCR0eXBlKTsKQEAgLTY3MzUsNyArNjc0Nyw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWVE
T01Db252ZXJ0TmVlZHNHbG9iYWxPYmplY3QKICAgICAKICAgICAjIEZJWE1FOiBXZSBuZWVkIGEg
bW9yZSByb2J1c3Qgd2F5IHRvIHNwZWNpZnkgdGhpcyByZXF1aXJlbWVudCBzbyBhcyBub3QKICAg
ICAjIHRvIHJlcXVpcmUgc3BlY2lhbGl6aW5nIGVhY2ggdHlwZS4gUGVyaGFwcyBqdXN0IHJlcXVp
cmluZyBhbGwgb3ZlcnJpZGUKLSAgICAjIHR5cGVzIHRvIHRha2UgYm90aCBzdGF0ZSBhbmQgdGhl
IGdsb2JhbCBvYmplY3Qgd291bGQgd29yaz8KKyAgICAjIHR5cGVzIHRvIHRha2UgYm90aCBsZXhp
Y2FsR2xvYmFsT2JqZWN0IGFuZCB0aGUgZ2xvYmFsIG9iamVjdCB3b3VsZCB3b3JrPwogICAgIGlm
ICgkdHlwZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57T3ZlcnJpZGVJRExUeXBlfSkgewogICAgICAg
ICBteSAkb3ZlcnJpZGVUeXBlTmFtZSA9ICR0eXBlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntPdmVy
cmlkZUlETFR5cGV9OwogICAgICAgICByZXR1cm4gMSBpZiAkb3ZlcnJpZGVUeXBlTmFtZSBlcSAi
SURMSURCS2V5IjsKQEAgLTY3NjMsNyArNjc3NSw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWVVc2lu
Z1JlZmVyZW5jZXMKIHsKICAgICBteSAoJGNvbnRleHQsICRpbnRlcmZhY2UsICR2YWx1ZSwgJGds
b2JhbE9iamVjdFJlZmVyZW5jZSkgPSBAXzsKIAotICAgIHJldHVybiBOYXRpdmVUb0pTVmFsdWUo
JGNvbnRleHQsICRpbnRlcmZhY2UsICR2YWx1ZSwgInN0YXRlIiwgJGdsb2JhbE9iamVjdFJlZmVy
ZW5jZSk7CisgICAgcmV0dXJuIE5hdGl2ZVRvSlNWYWx1ZSgkY29udGV4dCwgJGludGVyZmFjZSwg
JHZhbHVlLCAibGV4aWNhbEdsb2JhbE9iamVjdCIsICRnbG9iYWxPYmplY3RSZWZlcmVuY2UpOwog
fQogCiAjIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRl
cnMgYW5kIGNvbWJpbmUgTmF0aXZlVG9KU1ZhbHVlVXNpbmdSZWZlcmVuY2VzIGFuZCBOYXRpdmVU
b0pTVmFsdWUKQEAgLTY3NzEsNyArNjc4Myw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWVVc2luZ1Bv
aW50ZXJzCiB7CiAgICAgbXkgKCRjb250ZXh0LCAkaW50ZXJmYWNlLCAkdmFsdWUsICRnbG9iYWxP
YmplY3RSZWZlcmVuY2UpID0gQF87CiAKLSAgICByZXR1cm4gTmF0aXZlVG9KU1ZhbHVlKCRjb250
ZXh0LCAkaW50ZXJmYWNlLCAkdmFsdWUsICIqc3RhdGUiLCAkZ2xvYmFsT2JqZWN0UmVmZXJlbmNl
KTsKKyAgICByZXR1cm4gTmF0aXZlVG9KU1ZhbHVlKCRjb250ZXh0LCAkaW50ZXJmYWNlLCAkdmFs
dWUsICIqbGV4aWNhbEdsb2JhbE9iamVjdCIsICRnbG9iYWxPYmplY3RSZWZlcmVuY2UpOwogfQog
CiBzdWIgSXNWYWxpZENvbnRleHRGb3JOYXRpdmVUb0pTVmFsdWUKQEAgLTY4MDMsNyArNjgxNSw3
IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKIAogICAgIGlmICgkY29udGV4dC0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q2hlY2tTZWN1cml0eUZvck5vZGV9KSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgJHZh
bHVlID0gIkJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoJHN0YXRlUmVmZXJl
bmNlLCAkdmFsdWUpIjsKKyAgICAgICAgJHZhbHVlID0gIkJpbmRpbmdTZWN1cml0eTo6Y2hlY2tT
ZWN1cml0eUZvck5vZGUoJGdsb2JhbE9iamVjdFJlZmVyZW5jZSwgJHZhbHVlKSI7CiAgICAgfQog
CiAgICAgbXkgJElETFR5cGUgPSBHZXRJRExUeXBlKCRpbnRlcmZhY2UsICR0eXBlKTsKQEAgLTcx
MzcsMTIgKzcxNDksMTIgQEAgc3ViIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24KICAgICAj
IEZJWE1FOiBTaG91bGQgdGhpcyBvdmVycmlkZSBwdXRCeUluZGV4IGFzIHdlbGw/CiAgICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbVB1dE9uUHJvdG90eXBlfSkg
ewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiIpOwotICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xv
dCYpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgIH0KIAogICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21EZWZpbmVPd25Qcm9w
ZXJ0eU9uUHJvdG90eXBlfSkgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiIpOwot
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJv
cGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7
XG4iKTsKICAgICB9CiAKICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SXNJbW11dGFibGVQcm90
b3R5cGVFeG90aWNPYmplY3QifSA9IDEgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3RPblByb3RvdHlwZX07CkBAIC03MTk4
LDEzICs3MjEwLDEzIEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbnMKIAogICAg
ICAgICAgICAgbXkgJG92ZXJsb2FkRnVuY3Rpb25QcmVmaXggPSAiY29uc3RydWN0JHtjbGFzc05h
bWV9IjsKIAotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ0ZW1wbGF0ZTw+IEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjbGFzc05hbWV9Q29uc3RydWN0b3I6OmNvbnN0cnVj
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKVxuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCAke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSlcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwog
Ci0gICAgICAgICAgICBHZW5lcmF0ZU92ZXJsb2FkRGlzcGF0Y2hlcihAeyRpbnRlcmZhY2UtPmNv
bnN0cnVjdG9yc31bMF0sICRpbnRlcmZhY2UsICRvdmVybG9hZEZ1bmN0aW9uUHJlZml4LCAiIiwg
Imdsb2JhbE9iamVjdCwgc3RhdGUiKTsKKyAgICAgICAgICAgIEdlbmVyYXRlT3ZlcmxvYWREaXNw
YXRjaGVyKEB7JGludGVyZmFjZS0+Y29uc3RydWN0b3JzfVswXSwgJGludGVyZmFjZSwgJG92ZXJs
b2FkRnVuY3Rpb25QcmVmaXgsICIiLCAibGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lIik7
CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfSBl
bHNpZiAoQGNvbnN0cnVjdG9ycyA9PSAxKSB7CkBAIC03MjI4LDI1ICs3MjQwLDI0IEBAIHN1YiBH
ZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogCiAgICAgaWYgKElzQ29uc3RydWN0YWJsZSgk
aW50ZXJmYWNlKSkgewogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q3VzdG9tQ29uc3RydWN0b3J9KSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJ0ZW1wbGF0ZTw+IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVj
dG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpDYWxsRnJhbWUqIHN0YXRlKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJ0ZW1wbGF0ZTw+IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Nv
bnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUpXG4iKTsKICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIEFTU0VSVChzdGF0ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0o
Z2xvYmFsT2JqZWN0LCAqc3RhdGUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgQVNTRVJUKGNhbGxGcmFtZSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICByZXR1cm4gY29uc3RydWN0JHtjbGFzc05hbWV9KGxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJ9XG5cbiIpOwogICAgICAgICAgfSBlbHNpZiAoIUhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRl
cmZhY2UpICYmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TmFtZWRDb25zdHJ1
Y3Rvcn0gfHwgJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSkgewogICAgICAgICAgICAgbXkg
JGlzT3ZlcmxvYWRlZCA9ICRvcGVyYXRpb24tPntvdmVybG9hZHN9ICYmIEB7JG9wZXJhdGlvbi0+
e292ZXJsb2Fkc319ID4gMTsKICAgICAgICAgICAgIGlmICgkaXNPdmVybG9hZGVkKSB7Ci0gICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0kb3BlcmF0aW9uLT57b3ZlcmxvYWRJbmRleH0oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSlcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgY29uc3RydWN0JHtjbGFzc05hbWV9JG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9KEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSlcbiIp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICJ0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3Rv
ckNsYXNzTmFtZX06OmNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIHN0YXRlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
dGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFz
c05hbWV9Ojpjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKVxuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTtcbiIpOworICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8JHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX0qPihzdGF0ZS0+anNDYWxsZWUoKSk7XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PCR7
Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTtcbiIpOwogICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChjYXN0ZWRUaGlzKTtcbiIp
OwogCiAgICAgICAgICAgICBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2soJG91dHB1dEFycmF5
LCAkb3BlcmF0aW9uLCAkaW50ZXJmYWNlLCAiICAgICIpOwpAQCAtNzI2Miw3ICs3MjczLDcgQEAg
c3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uCiAgICAgICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiKTsKIAogICAgICAgICAgICAgbXkgQGNv
bnN0cnVjdGlvbkNvbnZlcnNpb25Bcmd1bWVudHMgPSAoKTsKLSAgICAgICAgICAgIHB1c2goQGNv
bnN0cnVjdGlvbkNvbnZlcnNpb25Bcmd1bWVudHMsICIqc3RhdGUiKTsKKyAgICAgICAgICAgIHB1
c2goQGNvbnN0cnVjdGlvbkNvbnZlcnNpb25Bcmd1bWVudHMsICIqbGV4aWNhbEdsb2JhbE9iamVj
dCIpOwogICAgICAgICAgICAgcHVzaChAY29uc3RydWN0aW9uQ29udmVyc2lvbkFyZ3VtZW50cywg
IipjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIpOwogICAgICAgICAgICAgcHVzaChAY29uc3Ry
dWN0aW9uQ29udmVyc2lvbkFyZ3VtZW50cywgInRocm93U2NvcGUiKSBpZiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntDb25zdHJ1Y3Rvck1heVRocm93RXhjZXB0aW9ufTsKICAgICAg
ICAgICAgIHB1c2goQGNvbnN0cnVjdGlvbkNvbnZlcnNpb25Bcmd1bWVudHMsICJXVEZNb3ZlKG9i
amVjdCkiKTsKQEAgLTc0MDAsNyArNzQxMSw3IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9ySGVs
cGVyTWV0aG9kcwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEke3J1bnRp
bWVFbmFibGVDb25kaXRpb25hbFN0cmluZ30pIHtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KFwiJG5hbWVcIiksIHN0cmxlbihc
IiRuYW1lXCIpKTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIFZN
OjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9k
ZTo6SWdub3JlQ29uZmlndXJhYmxlKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QuZ2xv
YmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsICZnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1c
biIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIjZW5kaWZcbiIpIGlmICRjb25kaXRp
b25hbFN0cmluZzsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVyZmFjZU5hbWUuY3BwCmluZGV4IDQ2MGViYWIyYjdh
MDlkYmNiYWE0Zjc1YjMwZTgwYzljYTBlMDVhYzYuLjdhYmViZmQ5YjMwNDhiNWE2NTdjYzkxZDBm
YTYwYzk2NmUzNzk2YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU0ludGVyZmFjZU5hbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVyZmFjZU5hbWUuY3BwCkBAIC00MCw4ICs0MCw4IEBA
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc0ludGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNJbnRlcmZhY2VOYW1l
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNJbnRlcmZhY2VOYW1lQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNJbnRlcmZhY2VOYW1lQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwog
CiBjbGFzcyBKU0ludGVyZmFjZU5hbWVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEzNywyMyArMTM3LDIzIEBAIHZvaWQgSlNJbnRlcmZhY2VO
YW1lOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTSW50ZXJm
YWNlTmFtZTo6fkpTSW50ZXJmYWNlTmFtZSgpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc0ludGVy
ZmFjZU5hbWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzSW50ZXJmYWNlTmFtZUNvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNJbnRlcmZhY2VOYW1lUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTSW50ZXJmYWNlTmFtZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU0ludGVyZmFjZU5hbWU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0K
IAotYm9vbCBzZXRKU0ludGVyZmFjZU5hbWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNJbnRlcmZhY2VOYW1lQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2Fz
dDxKU0ludGVyZmFjZU5hbWVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgpAQCAtMjA3LDcgKzIw
Nyw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTEzSW50ZXJmYWNl
TmFtZUVbXTsgfQogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
SW50ZXJmYWNlTmFtZT4mJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxJ
bnRlcmZhY2VOYW1lPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkp
CkBAIC0yMzIsOSArMjMyLDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBj
cmVhdGVXcmFwcGVyPEludGVyZmFjZU5hbWU+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7
CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSW50ZXJmYWNlTmFtZSYgaW1wbCkKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEludGVyZmFjZU5hbWUmIGltcGwpCiB7Ci0gICAgcmV0
dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogSW50ZXJmYWNlTmFt
ZSogSlNJbnRlcmZhY2VOYW1lOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU0ludGVyZmFjZU5hbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0ludGVyZmFjZU5hbWUuaAppbmRleCA5NTEwY2Q3NmI5OTVlMTRjOWQ4Nzc4M2Q1YmE5
NTE4ZDkyODJmMDhkLi41MDY5MTNkYTNmZjQ2OWYzMTM4MDI5MmFmODEyNDMyZjJhZGI0NzAxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRl
cmZhY2VOYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTSW50ZXJmYWNlTmFtZS5oCkBAIC03NiwxMCArNzYsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBw
ZXJLZXkoSW50ZXJmYWNlTmFtZSogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFi
bGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBJbnRlcmZhY2VOYW1lJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJ
bnRlcmZhY2VOYW1lKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPEludGVyZmFjZU5h
bWU+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPEludGVy
ZmFjZU5hbWU+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0K
K0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVj
dCosIEludGVyZmFjZU5hbWUmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBJbnRlcmZhY2VOYW1lKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUds
b2JhbE9iamVjdCosIFJlZjxJbnRlcmZhY2VOYW1lPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8SW50ZXJmYWNlTmFtZT4m
JiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgp
OyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxJbnRl
cmZhY2VOYW1lPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNJbnRlcmZhY2VOYW1lOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFw
TGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBM
aWtlLmNwcAppbmRleCA2Y2FhM2MzMDgyYmQ4NTlhYjA3NmUwZDY3ZjE1ZjYzMmM4MmU1OTkyLi4z
Njg3YjgzMjMzMGI4Njc2N2FmYTdjZDBjMjg1NmUwOWQwMWI2NWRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcApAQCAt
NTgsOSArNTgsOSBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNNYXBMaWtl
UHJvdG90eXBlRnVuY3Rpb25EZWxldGUoSlNDOjpKU0dsb2JhbAogCiAvLyBBdHRyaWJ1dGVzCiAK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTTWFw
TGlrZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVNpemUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
TWFwTGlrZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtl
U2l6ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwogCiBjbGFzcyBKU01hcExpa2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIEpTTWFwTGlr
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogCiAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19i
YXNlX29mPEFjdGl2ZURPTU9iamVjdCwgTWFwTGlrZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5v
dCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24g
Y2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CiAKLSAgICBzeW5jaHJvbml6ZUJh
Y2tpbmdNYXAoKmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksICpnbG9iYWxPYmplY3QoKSwg
KnRoaXMpOworICAgIHN5bmNocm9uaXplQmFja2luZ01hcCgqZ2xvYmFsT2JqZWN0KCksICpnbG9i
YWxPYmplY3QoKSwgKnRoaXMpOwogfQogCiBKU09iamVjdCogSlNNYXBMaWtlOjpjcmVhdGVQcm90
b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpAQCAtMTY4LDE4
OCArMTY4LDE4OCBAQCB2b2lkIEpTTWFwTGlrZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkK
ICAgICB0aGlzT2JqZWN0LT5KU01hcExpa2U6On5KU01hcExpa2UoKTsKIH0KIAotdGVtcGxhdGU8
PiBpbmxpbmUgSlNNYXBMaWtlKiBJRExBdHRyaWJ1dGU8SlNNYXBMaWtlPjo6Y2FzdChFeGVjU3Rh
dGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSBK
U01hcExpa2UqIElETEF0dHJpYnV0ZTxKU01hcExpa2U+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8SlNNYXBMaWtlKj4oc3RhdGUudm0oKSwgSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTTWFwTGlrZSo+KEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTTWFwTGlrZSogSURMT3BlcmF0aW9uPEpTTWFwTGlr
ZT46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTTWFwTGlrZSog
SURMT3BlcmF0aW9uPEpTTWFwTGlrZT46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVybiBqc0R5bmFtaWND
YXN0PEpTTWFwTGlrZSo+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1
cm4ganNEeW5hbWljQ2FzdDxKU01hcExpa2UqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNNYXBM
aWtlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFt
aWNDYXN0PEpTTWFwTGlrZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU01hcExpa2U6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNNYXBM
aWtlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90
b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNNYXBMaWtlQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTTWFwTGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNNYXBMaWtlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93Vk1UeXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKICAg
ICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0
cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc01hcExpa2VTaXplR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTTWFwTGlr
ZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc01hcExpa2VTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU01hcExpa2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEFueT4oc3RhdGUsIHRocm93U2NvcGUsIGZvcndh
cmRTaXplVG9NYXBMaWtlKHN0YXRlLCB0aGlzT2JqZWN0KSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExBbnk+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGZvcndhcmRTaXplVG9NYXBMaWtlKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBqc01hcExpa2VTaXplKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNNYXBMaWtlU2l6
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU01hcExp
a2U+OjpnZXQ8anNNYXBMaWtlU2l6ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzaXplIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU01hcExpa2U+OjpnZXQ8anNNYXBMaWtlU2l6ZUdl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInNpemUiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9u
R2V0Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU01h
cExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90
eXBlRnVuY3Rpb25HZXRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU01h
cExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBrZXkg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
KyAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkR2V0VG9NYXBMaWtlKCpzdGF0ZSwgKmNhc3RlZFRo
aXMsIFdURk1vdmUoa2V5KSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
QW55Pihmb3J3YXJkR2V0VG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAqY2FzdGVkVGhpcywgV1RGTW92ZShrZXkpKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTTWFwTGlrZT46OmNhbGw8
anNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25HZXRCb2R5Pigqc3RhdGUsICJnZXQiKTsKKyAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTTWFwTGlrZT46OmNhbGw8anNNYXBMaWtlUHJvdG90eXBlRnVu
Y3Rpb25HZXRCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImdldCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBl
RnVuY3Rpb25IYXNCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTTWFwTGlrZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExp
a2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTTWFwTGlrZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBh
dXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCkpOworICAgIGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRIYXNUb01hcExpa2UoKnN0YXRlLCAq
Y2FzdGVkVGhpcywgV1RGTW92ZShrZXkpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExBbnk+KGZvcndhcmRIYXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXMoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXMoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNNYXBMaWtl
Pjo6Y2FsbDxqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHk+KCpzdGF0ZSwgImhhcyIp
OworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNNYXBMaWtlPjo6Y2FsbDxqc01hcExpa2VQcm90
b3R5cGVGdW5jdGlvbkhhc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAi
aGFzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQ
cm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTTWFwTGlrZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU01hcExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpz
dGF0ZSwgKmNhc3RlZFRoaXMpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TEFueT4oZm9yd2FyZEVudHJpZXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICpjYXN0ZWRUaGlzKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNNYXBMaWtlPjo6Y2FsbDxq
c01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5Pigqc3RhdGUsICJlbnRyaWVzIik7
CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU01hcExpa2U+OjpjYWxsPGpzTWFwTGlrZVByb3Rv
dHlwZUZ1bmN0aW9uRW50cmllc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAiZW50cmllcyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNN
YXBMaWtlUHJvdG90eXBlRnVuY3Rpb25LZXlzQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU01hcExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25LZXlzQm9keShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNNYXBMaWtlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkS2V5c1RvTWFwTGlrZSgqc3Rh
dGUsICpjYXN0ZWRUaGlzKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRLZXlzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAqY2FzdGVkVGhpcykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc01h
cExpa2VQcm90b3R5cGVGdW5jdGlvbktleXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNNYXBMaWtl
UHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0
KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTTWFwTGlrZT46OmNhbGw8anNNYXBMaWtlUHJv
dG90eXBlRnVuY3Rpb25LZXlzQm9keT4oKnN0YXRlLCAia2V5cyIpOworICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNNYXBMaWtlPjo6Y2FsbDxqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbktleXNC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImtleXMiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9u
VmFsdWVzQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U01hcExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJv
dG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU01hcExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExBbnk+KGZvcndhcmRWYWx1ZXNUb01hcExpa2UoKnN0YXRlLCAqY2FzdGVkVGhpcykp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkVmFsdWVz
VG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc01hcExpa2VQcm90b3R5cGVG
dW5jdGlvblZhbHVlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0
YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc01hcExpa2VQcm90b3R5cGVGdW5j
dGlvblZhbHVlcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU01hcExpa2U+OjpjYWxsPGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0
aW9uVmFsdWVzQm9keT4oKnN0YXRlLCAidmFsdWVzIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU01hcExpa2U+OjpjYWxsPGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQm9keT4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ2YWx1ZXMiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9y
RWFjaEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNN
YXBMaWtlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3Rv
dHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTTWFwTGlrZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRv
IGNhbGxiYWNrID0gY29udmVydDxJRExBbnk+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQW55PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRm9yRWFjaFRvTWFwTGlrZSgqc3RhdGUsICpj
YXN0ZWRUaGlzLCBXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRm9yRWFjaFRvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoY2FsbGJhY2spKSkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9u
Rm9yRWFjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkZv
ckVhY2goSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNNYXBMaWtlPjo6Y2FsbDxqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkZv
ckVhY2hCb2R5Pigqc3RhdGUsICJmb3JFYWNoIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U01hcExpa2U+OjpjYWxsPGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHk+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZm9yRWFjaCIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25BZGRC
b2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTTWFwTGlr
ZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVG
dW5jdGlvbkFkZEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTTWFwTGlr
ZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGtleSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAg
IGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExBbnk+KGZvcndhcmRBZGRUb01hcExpa2UoKnN0YXRlLCAqY2FzdGVkVGhpcywg
V1RGTW92ZShrZXkpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+
KGZvcndhcmRBZGRUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpj
YXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25BZGQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25BZGQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNNYXBMaWtlPjo6Y2FsbDxqc01h
cExpa2VQcm90b3R5cGVGdW5jdGlvbkFkZEJvZHk+KCpzdGF0ZSwgImFkZCIpOworICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNNYXBMaWtlPjo6Y2FsbDxqc01hcExpa2VQcm90b3R5cGVGdW5jdGlv
bkFkZEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiYWRkIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5j
dGlvbkNsZWFyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU01hcExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtl
UHJvdG90eXBlRnVuY3Rpb25DbGVhckJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTTWFwTGlrZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgZm9yd2FyZENsZWFyVG9NYXBMaWtl
KCpzdGF0ZSwgKmNhc3RlZFRoaXMpOworICAgIGZvcndhcmRDbGVhclRvTWFwTGlrZSgqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25DbGVhcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkNsZWFyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTTWFwTGlrZT46OmNhbGw8
anNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25DbGVhckJvZHk+KCpzdGF0ZSwgImNsZWFyIik7Cisg
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU01hcExpa2U+OjpjYWxsPGpzTWFwTGlrZVByb3RvdHlw
ZUZ1bmN0aW9uQ2xlYXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImNs
ZWFyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQ
cm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFt
ZSBJRExPcGVyYXRpb248SlNNYXBMaWtlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRGVsZXRlQm9keShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNNYXBMaWtlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBrZXkgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZERlbGV0ZVRv
TWFwTGlrZSgqc3RhdGUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZERlbGV0ZVRvTWFwTGlrZSgqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5KSkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc01hcExpa2VQcm90b3R5cGVG
dW5jdGlvbkRlbGV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0
YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc01hcExpa2VQcm90b3R5cGVGdW5j
dGlvbkRlbGV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU01hcExpa2U+OjpjYWxsPGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0
aW9uRGVsZXRlQm9keT4oKnN0YXRlLCAiZGVsZXRlIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU01hcExpa2U+OjpjYWxsPGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRGVsZXRlQm9keT4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJkZWxldGUiKTsKIH0KIAogdm9pZCBK
U01hcExpa2U6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXpl
cikKQEAgLTM4NSw3ICszODUsNyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dl
YkNvcmU3TWFwTGlrZUVbXTsgfQogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8TWFwTGlrZT4mJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxNYXBMaWtlPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBA
IC00MDksOSArNDA5LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVh
dGVXcmFwcGVyPE1hcExpa2U+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgTWFwTGlrZSYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIE1hcExpa2UmIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogTWFwTGlrZSogSlNNYXBMaWtlOjp0b1dyYXBwZWQoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuaAppbmRleCA3M2QxNDU4ZjAxYTgzYWNm
ZGVmZDgzYmQ3MjZjZDY4NzBmMWYwNWY5Li44ZWVlYzNkMWIyZGIzMDAyNzc1NTgwNmI3YjA1OGZk
NDVmMGMwY2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNNYXBMaWtlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTTWFwTGlrZS5oCkBAIC03MywxMCArNzMsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBw
ZXJLZXkoTWFwTGlrZSogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFibGVPYmpl
Y3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBNYXBMaWtlJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNYXBMaWtlKiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6
OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPE1hcExpa2U+JiYpOwotaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPE1hcExpa2U+JiYgaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIE1hcExpa2UmKTsKK2lubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNYXBMaWtlKiBpbXBsKSB7IHJldHVybiBpbXBs
ID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6
anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxNYXBMaWtlPiYmKTsKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8TWFwTGlr
ZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVs
bCgpOyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxN
YXBMaWtlPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNNYXBMaWtlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBM
aWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRP
bmx5TWFwTGlrZS5jcHAKaW5kZXggNzNjNzdiZjE1MTRkOGQyOTU2MzY1YWZlMGM1Y2I0NzQ3Mzhj
ZjIwZC4uM2U2NWRkNzNkOTJkNzdlNjNmMDFlY2NmMGI1OWE2YzYzMzc3YzljOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBM
aWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNS
ZWFkT25seU1hcExpa2UuY3BwCkBAIC01NSw5ICs1NSw5IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChK
U0M6CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFw
TGlrZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1JlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlU2l6ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Jl
YWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNS
ZWFkT25seU1hcExpa2VTaXplKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAKIGNsYXNzIEpTUmVhZE9ubHlNYXBMaWtlUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xMzgsNyAr
MTM4LDcgQEAgdm9pZCBKU1JlYWRPbmx5TWFwTGlrZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
CiAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgUmVh
ZE9ubHlNYXBMaWtlPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZl
RE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFj
dGl2ZURPTU9iamVjdC4iKTsKIAotICAgIHN5bmNocm9uaXplQmFja2luZ01hcCgqZ2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgKmdsb2JhbE9iamVjdCgpLCAqdGhpcyk7CisgICAgc3luY2hy
b25pemVCYWNraW5nTWFwKCpnbG9iYWxPYmplY3QoKSwgKmdsb2JhbE9iamVjdCgpLCAqdGhpcyk7
CiB9CiAKIEpTT2JqZWN0KiBKU1JlYWRPbmx5TWFwTGlrZTo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKQEAgLTE2MiwxNDAgKzE2MiwxNDAg
QEAgdm9pZCBKU1JlYWRPbmx5TWFwTGlrZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAg
ICB0aGlzT2JqZWN0LT5KU1JlYWRPbmx5TWFwTGlrZTo6fkpTUmVhZE9ubHlNYXBMaWtlKCk7CiB9
CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTUmVhZE9ubHlNYXBMaWtlKiBJRExBdHRyaWJ1dGU8SlNS
ZWFkT25seU1hcExpa2U+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTUmVhZE9ubHlNYXBMaWtlKiBJRExBdHRyaWJ1
dGU8SlNSZWFkT25seU1hcExpa2U+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1p
Y0Nhc3Q8SlNSZWFkT25seU1hcExpa2UqPihzdGF0ZS52bSgpLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNSZWFkT25seU1hcExpa2UqPihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1JlYWRPbmx5TWFwTGlrZSogSURMT3BlcmF0
aW9uPEpTUmVhZE9ubHlNYXBMaWtlPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8
PiBpbmxpbmUgSlNSZWFkT25seU1hcExpa2UqIElETE9wZXJhdGlvbjxKU1JlYWRPbmx5TWFwTGlr
ZT46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYg
Y2FsbEZyYW1lKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTUmVhZE9ubHlNYXBMaWtl
Kj4oc3RhdGUudm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBqc0R5bmFtaWND
YXN0PEpTUmVhZE9ubHlNYXBMaWtlKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCks
IGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlN
YXBMaWtlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZUNvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNSZWFkT25seU1hcExpa2VQcm90b3R5cGUqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNSZWFkT25seU1hcExpa2U6OmdldENvbnN0cnVjdG9yKHN0
YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNSZWFkT25seU1hcExpa2U6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkp
KTsKIH0KIAotYm9vbCBzZXRKU1JlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorYm9vbCBzZXRKU1JlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Nhc3Q8SlNSZWFkT25seU1hcExpa2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgog
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlU2l6ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1JlYWRPbmx5TWFwTGlrZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVNpemVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTUmVhZE9ubHlNYXBMaWtlJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UzxJRExBbnk+KHN0YXRlLCB0aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvTWFwTGlrZShzdGF0ZSwg
dGhpc09iamVjdCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBmb3J3YXJkU2l6ZVRvTWFwTGlrZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNSZWFkT25s
eU1hcExpa2VTaXplKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VTaXplKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTUmVhZE9ubHlNYXBM
aWtlPjo6Z2V0PGpzUmVhZE9ubHlNYXBMaWtlU2l6ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJzaXplIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1JlYWRPbmx5TWFwTGlrZT46Omdl
dDxqc1JlYWRPbmx5TWFwTGlrZVNpemVHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsICJzaXplIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0Qm9keShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1JlYWRPbmx5TWFwTGlrZT46OkNsYXNzUGFy
YW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0
aW9uR2V0Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNSZWFkT25seU1h
cExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBrZXkg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
KyAgICBhdXRvIGtleSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkR2V0VG9NYXBMaWtlKCpzdGF0ZSwgKmNhc3RlZFRo
aXMsIFdURk1vdmUoa2V5KSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
QW55Pihmb3J3YXJkR2V0VG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAqY2FzdGVkVGhpcywgV1RGTW92ZShrZXkpKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25HZXQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkdldChKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1JlYWRPbmx5TWFwTGlrZT46OmNhbGw8anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlv
bkdldEJvZHk+KCpzdGF0ZSwgImdldCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNSZWFk
T25seU1hcExpa2U+OjpjYWxsPGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25HZXRC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImdldCIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VQcm90b3R5cGVG
dW5jdGlvbkhhc0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNSZWFkT25seU1hcExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTUmVhZE9ubHlNYXBMaWtlPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8ga2V5ID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBrZXkgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2Fy
ZEhhc1RvTWFwTGlrZSgqc3RhdGUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGtleSkpKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEhhc1RvTWFwTGlrZSgq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMsIFdURk1vdmUoa2V5
KSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1JlYWRPbmx5TWFwTGlr
ZVByb3RvdHlwZUZ1bmN0aW9uSGFzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzUmVhZE9ubHlNYXBM
aWtlUHJvdG90eXBlRnVuY3Rpb25IYXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmpl
Y3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNSZWFkT25seU1hcExpa2U+OjpjYWxsPGpz
UmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5Pigqc3RhdGUsICJoYXMiKTsK
KyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTUmVhZE9ubHlNYXBMaWtlPjo6Y2FsbDxqc1JlYWRP
bmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYWxsRnJhbWUsICJoYXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1JlYWRPbmx5TWFwTGlrZT46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3Rv
dHlwZUZ1bmN0aW9uRW50cmllc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTUmVhZE9ubHlNYXBMaWtlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRW50cmllc1RvTWFwTGlrZSgqc3RhdGUsICpjYXN0
ZWRUaGlzKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndh
cmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2Fz
dGVkVGhpcykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1JlYWRPbmx5
TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Jl
YWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1JlYWRPbmx5TWFw
TGlrZT46OmNhbGw8anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5
Pigqc3RhdGUsICJlbnRyaWVzIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1JlYWRPbmx5
TWFwTGlrZT46OmNhbGw8anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImVudHJpZXMiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90
eXBlRnVuY3Rpb25LZXlzQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1JlYWRPbmx5TWFwTGlrZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTUmVhZE9ubHlNYXBMaWtlPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkS2V5c1Rv
TWFwTGlrZSgqc3RhdGUsICpjYXN0ZWRUaGlzKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1JlYWRPbmx5TWFwTGlrZT46OmNhbGw8anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlv
bktleXNCb2R5Pigqc3RhdGUsICJrZXlzIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Jl
YWRPbmx5TWFwTGlrZT46OmNhbGw8anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbktl
eXNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImtleXMiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90
eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTUmVhZE9ubHlNYXBMaWtlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1JlYWRPbmx5TWFwTGlrZT46OkNsYXNzUGFy
YW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZh
bHVlc1RvTWFwTGlrZSgqc3RhdGUsICpjYXN0ZWRUaGlzKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRWYWx1ZXNUb01hcExpa2UoKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvblZh
bHVlcyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1JlYWRPbmx5TWFwTGlrZT46OmNhbGw8anNSZWFkT25seU1hcExpa2VQcm90
b3R5cGVGdW5jdGlvblZhbHVlc0JvZHk+KCpzdGF0ZSwgInZhbHVlcyIpOworICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNSZWFkT25seU1hcExpa2U+OjpjYWxsPGpzUmVhZE9ubHlNYXBMaWtlUHJv
dG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgInZhbHVlcyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNS
ZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTUmVhZE9ubHlNYXBMaWtlPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVu
Y3Rpb25Gb3JFYWNoQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNSZWFk
T25seU1hcExpa2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0
byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQW55Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETEFueT4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEZvckVhY2hUb01hcExpa2UoKnN0YXRlLCAq
Y2FzdGVkVGhpcywgV1RGTW92ZShjYWxsYmFjaykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTPElETEFueT4oZm9yd2FyZEZvckVhY2hUb01hcExpa2UoKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzLCBXVEZNb3ZlKGNhbGxiYWNrKSkpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlw
ZUZ1bmN0aW9uRm9yRWFjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1JlYWRPbmx5TWFwTGlrZVBy
b3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1JlYWRPbmx5TWFwTGlrZT46OmNhbGw8anNS
ZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5Pigqc3RhdGUsICJmb3JF
YWNoIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1JlYWRPbmx5TWFwTGlrZT46OmNhbGw8
anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hCb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImZvckVhY2giKTsKIH0KIAogdm9pZCBKU1JlYWRPbmx5
TWFwTGlrZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVy
KQpAQCAtMzMxLDcgKzMzMSw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2Vi
Q29yZTE1UmVhZE9ubHlNYXBMaWtlRVtdOyB9CiAjZW5kaWYKICNlbmRpZgogCi1KU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxSZWFkT25seU1hcExpa2U+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8UmVhZE9ubHlNYXBMaWtlPiYmIGltcGwpCiB7CiAKICNpZiBFTkFC
TEUoQklORElOR19JTlRFR1JJVFkpCkBAIC0zNTUsOSArMzU1LDkgQEAgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFJlYWRPbmx5TWFwTGlrZT4oZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWFkT25seU1h
cExpa2UmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWFkT25s
eU1hcExpa2UmIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwg
aW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LCBpbXBsKTsKIH0KIAogUmVhZE9ubHlNYXBMaWtlKiBKU1JlYWRPbmx5TWFwTGlrZTo6dG9XcmFw
cGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5o
CmluZGV4IGViYjZlZTc2NWJkZjJiYTkyYmQ0NzAxZTMzYzY3NDA0Y2E5YTNkZjAuLjI2NDA3OTJl
YzAwYTJkZjNlODEwNTIxNDU4OTdiNzQwODY2NDAyMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5o
CkBAIC03MywxMCArNzMsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoUmVhZE9ubHlNYXBM
aWtlKiB3cmFwcGFibGVPYmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJl
YWRPbmx5TWFwTGlrZSYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVhZE9ubHlNYXBMaWtl
KiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkg
OiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFJlYWRPbmx5TWFwTGlrZT4mJik7Ci1p
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8UmVhZE9ubHlNYXBMaWtl
PiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxP
YmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWFk
T25seU1hcExpa2UmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWFkT25seU1hcExpa2UqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgUmVmPFJlYWRPbmx5TWFwTGlrZT4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFJlYWRPbmx5TWFwTGlrZT4m
JiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgp
OyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSZWFk
T25seU1hcExpa2U+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1JlYWRPbmx5TWFwTGlr
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggYjUwOWU4Zjg2ZTA5NjVi
Yzk5NWZiNGFkM2NiNDg4YjdiMjcwNDk3NS4uZGE1M2ZmOTY0ZDdkYzcxNjk4MDkxOWMxYjVhNWM1
ZjQ5ZjQwZDYyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTUyLDkg
KzUyLDkgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3MKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEFj
dGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAKIGNsYXNzIEpTVGVzdEFjdGl2
ZURPTU9iamVjdFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgpAQCAtMTY2LDkzICsxNjYsOTMgQEAgdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmRl
c3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0QWN0aXZlRE9N
T2JqZWN0Ojp+SlNUZXN0QWN0aXZlRE9NT2JqZWN0KCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5l
IEpTVGVzdEFjdGl2ZURPTU9iamVjdCogSURMQXR0cmlidXRlPEpTVGVzdEFjdGl2ZURPTU9iamVj
dD46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiBJRExBdHRyaWJ1dGU8SlNUZXN0
QWN0aXZlRE9NT2JqZWN0Pjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0
PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3Qq
PihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RBY3RpdmVET01PYmplY3QqIElE
TE9wZXJhdGlvbjxKU1Rlc3RBY3RpdmVET01PYmplY3Q+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUp
Cit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RBY3RpdmVET01PYmplY3QqIElETE9wZXJhdGlvbjxK
U1Rlc3RBY3RpdmVET01PYmplY3Q+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RBY3RpdmVET01PYmplY3QqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7
CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJv
dG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1i
b29sIHNldEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAg
ICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
CiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5j
b25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01P
YmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RP
TVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3Vy
aXR5RXJyb3IpKQorICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC53cmFwcGVkKCkud2luZG93KCksIFRocm93U2VjdXJp
dHlFcnJvcikpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9u
Zz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuZXhjaXRpbmdBdHRyKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmV4Y2l0aW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pjo6Z2V0PGpzVGVz
dEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJleGNpdGluZ0F0dHIiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmdldDxqc1Rlc3RBY3RpdmVE
T01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJleGNpdGluZ0F0dHIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVj
dFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlw
ZUZ1bmN0aW9uRXhjaXRpbmdGdW5jdGlvbkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgaWYgKCFC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9yKSkKKyAgICBpZiAo
IUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT53cmFwcGVkKCkud2luZG93KCksIFRocm93U2VjdXJpdHlF
cnJvcikpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwotICAgIGF1dG8gbmV4dENoaWxkID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUsIDAsICJuZXh0Q2hpbGQiLCAiVGVzdEFjdGl2ZURPTU9iamVjdCIsICJleGNpdGluZ0Z1
bmN0aW9uIiwgIk5vZGUiKTsgfSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gbmV4dENoaWxkID0gY29udmVydDxJRExJbnRlcmZh
Y2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsIDAsICJuZXh0Q2hpbGQiLCAiVGVzdEFjdGl2ZURPTU9iamVjdCIsICJl
eGNpdGluZ0Z1bmN0aW9uIiwgIk5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmV4Y2l0aW5nRnVuY3Rpb24o
Km5leHRDaGlsZCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQ
cm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhbGw8anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlRnVuY3Rpb25FeGNpdGluZ0Z1bmN0aW9uQm9keT4oKnN0YXRlLCAiZXhjaXRpbmdGdW5jdGlv
biIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pjo6Y2Fs
bDxqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbkV4Y2l0aW5nRnVuY3Rpb25C
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImV4Y2l0aW5nRnVuY3Rpb24i
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURP
TU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2VCb2R5KEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5
cGVGdW5jdGlvblBvc3RNZXNzYWdlQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBt
ZXNzYWdlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CisgICAgYXV0byBtZXNzYWdlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwu
cG9zdE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3Nh
Z2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0QWN0aXZlRE9NT2JqZWN0Pjo6Y2FsbDxqc1Rlc3RBY3RpdmVET01PYmpl
Y3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlQm9keT4oKnN0YXRlLCAicG9zdE1lc3NhZ2Ui
KTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEFjdGl2ZURPTU9iamVjdD46OmNhbGw8
anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZUJvZHk+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAicG9zdE1lc3NhZ2UiKTsKIH0KIAogdm9p
ZCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFu
YWx5emVyJiBhbmFseXplcikKQEAgLTI4OCw3ICsyODgsNyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJu
IHZvaWQqIF9aVFZON1dlYkNvcmUxOVRlc3RBY3RpdmVET01PYmplY3RFW107IH0KICNlbmRpZgog
I2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RBY3RpdmVET01PYmplY3Q+
JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEFjdGl2ZURPTU9i
amVjdD4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtMzEy
LDkgKzMxMiw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3JlYXRlV3Jh
cHBlcjxUZXN0QWN0aXZlRE9NT2JqZWN0PihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwog
fQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RBY3RpdmVET01PYmplY3QmIGltcGwpCitKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0QWN0aXZlRE9NT2JqZWN0JiBpbXBsKQog
ewotICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgIHJldHVy
biB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRl
c3RBY3RpdmVET01PYmplY3QqIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6dG9XcmFwcGVkKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmgK
aW5kZXggMjYyY2U4OThjYWZjYWJlMDdkNjQxODE5NDNmODMyMTc2ZWFhOTA5Yi4uMWY1NjYxNDdk
ZDhkYzk3MzY4YjJjZTkzODY1NGU2NTZhMmZiMzRjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01P
YmplY3QuaApAQCAtMzksNyArMzksNyBAQCBjbGFzcyBKU1Rlc3RBY3RpdmVET01PYmplY3QgOiBw
dWJsaWMgSlNET01XcmFwcGVyPFRlc3RBY3RpdmVET01PYmplY3Q+IHsKICAgICBzdGF0aWMgSlND
OjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYp
OwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3RBY3RpdmVET01PYmplY3QqIHRvV3JhcHBlZChK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLSAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3BlcnR5U2Vj
dXJpdHlDaGVjayhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBkb1B1dFByb3Bl
cnR5U2VjdXJpdHlDaGVjayhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTc2LDEwICs3
NiwxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0QWN0aXZlRE9NT2JqZWN0KiB3cmFw
cGFibGVPYmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RBY3RpdmVE
T01PYmplY3QmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RBY3RpdmVET01PYmplY3Qq
IGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6
IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEFjdGl2ZURPTU9iamVjdD4mJik7
Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdEFjdGl2ZURP
TU9iamVjdD4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgVGVzdEFjdGl2ZURPTU9iamVjdCYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0
b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051
bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RBY3RpdmVET01PYmplY3Q+JiYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0
cjxUZXN0QWN0aXZlRE9NT2JqZWN0PiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlD
cmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFRlc3RBY3RpdmVET01PYmplY3Q+IHsKICAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU1Rlc3RBY3RpdmVET01PYmplY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNw
cAppbmRleCBhNjc3MmE0MGVjYTI5MjQ5ZmZiYTRhYzQxNjliNTk4MjI1MWNlNDg5Li5jN2FhYTBh
ZmI3OTc3OTNiNzBiYzJiYTQzYWMwZTU3NmVkNTljNmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9u
cy5jcHAKQEAgLTUzLDIwICs1MywyMCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDRQogCiAvLyBB
dHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VS
ZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdp
dGhDRVJlYWN0aW9uc05vdE5lZWRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1
dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3RO
ZWVkZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ckF0dHJpYnV0ZU5vdE5lZWRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ckF0dHJpYnV0ZU5vdE5lZWRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0
aW9uc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0
b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVh
Y3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9uc05vdE5lZWRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZChK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnNOb3ROZWVkZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBK
U1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgpAQCAtMTcwLDI2NCArMTcwLDI2NSBAQCB2b2lkIEpTVGVzdENFUmVhY3Rpb25z
OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVzdENFUmVh
Y3Rpb25zOjp+SlNUZXN0Q0VSZWFjdGlvbnMoKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0Q0VSZWFjdGlvbnMqIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OmNhc3QoRXhl
Y1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0Q0VSZWFjdGlvbnMqIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OmNh
c3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RDRVJlYWN0aW9ucyo+
KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNE
eW5hbWljQ2FzdDxKU1Rlc3RDRVJlYWN0aW9ucyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPD4gaW5s
aW5lIEpTVGVzdENFUmVhY3Rpb25zKiBJRExPcGVyYXRpb248SlNUZXN0Q0VSZWFjdGlvbnM+Ojpj
YXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RDRVJlYWN0aW9u
cyogSURMT3BlcmF0aW9uPEpTVGVzdENFUmVhY3Rpb25zPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJu
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q0VSZWFjdGlvbnMqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlz
VmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q0VSZWFjdGlvbnMqPihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RD
RVJlYWN0aW9uc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RDRVJlYWN0aW9uczo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RDRVJlYWN0aW9uczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdENF
UmVhY3Rpb25zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdENFUmVh
Y3Rpb25zQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RDRVJlYWN0
aW9uc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFj
dGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlv
bnNHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdENFUmVh
Y3Rpb25zJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3Rh
dGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnM+OjpnZXQ8anNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnNHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OmdldDxqc1Rlc3RDRVJlYWN0aW9uc0F0
dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0dldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFz
c2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9ucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VS
ZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRo
Q0VSZWFjdGlvbnNTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayhz
dGF0ZSk7CisgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0
aW9uU3RhY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUs
IHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEF0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9ucyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRo
Q0VSZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0
cmlidXRlV2l0aENFUmVhY3Rpb25zKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENFUmVhY3Rpb25zPjo6c2V0PHNldEpT
VGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OnNldDxzZXRKU1Rlc3RDRVJl
YWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc1NldHRlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRy
aWJ1dGVXaXRoQ0VSZWFjdGlvbnNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFj
dGlvbnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25z
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDRVJlYWN0
aW9ucyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRl
LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0YXR0cmlidXRld2l0aGNlcmVhY3Rpb25zQXR0cikpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGV3aXRoY2VyZWFjdGlvbnNBdHRyKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNSZWZs
ZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFj
dGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENFUmVhY3Rpb25zPjo6Z2V0PGpzVGVz
dENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0dldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0QXR0
cmlidXRlV2l0aENFUmVhY3Rpb25zIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RD
RVJlYWN0aW9ucz46OmdldDxqc1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VS
ZWFjdGlvbnNHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJyZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25z
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VS
ZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9u
U3RhY2soc3RhdGUpOworICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxs
KHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9u
c1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9ucyhKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RDRVJlYWN0aW9ucz46OnNldDxzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1
dGVXaXRoQ0VSZWFjdGlvbnNTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJyZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OnNldDxzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPj4o
c3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmlu
Z2lmaWVyQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZh
Y2U8VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdpZmllckF0dHJp
YnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OmdldDxqc1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OmdldDxqc1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic3RyaW5naWZpZXJBdHRy
aWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlv
bnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0
ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Q0VSZWFj
dGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIGF1dG8gaWQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oInN0cmluZ2lmaWVyQXR0cmlidXRlIiksIHN0cmxlbigic3RyaW5naWZpZXJBdHRyaWJ1dGUi
KSk7Ci0gICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5nZXQoJnN0YXRlLCBp
ZCk7CisgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5nZXQoJmxleGljYWxH
bG9iYWxPYmplY3QsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlVG9Gb3J3YXJkVG8uaXNPYmplY3QoKSkpIHsK
LSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGF1dG8gZm9yd2FyZElkID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJ2YWx1ZSIpLCBzdHJs
ZW4oInZhbHVlIikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhbHVlVG9Gb3J3YXJkVG8s
IGZhbHNlKTsKLSAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUodm0p
LT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1
ZSwgc2xvdCk7CisgICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZt
KS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmbGV4aWNhbEdsb2JhbE9iamVjdCwg
Zm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46
OnNldDxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlU2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENFUmVhY3Rpb25zPjo6c2V0PHNldEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9uc05vdE5lZWRlZEdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9u
cyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZEdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Q0VSZWFjdGlv
bnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwg
dGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQoKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlv
bnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZChKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46
OmdldDxqc1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZEdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJhdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQiKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdENFUmVhY3Rpb25zPjo6Z2V0PGpzVGVzdENFUmVhY3Rpb25zQXR0cmlidXRl
V2l0aENFUmVhY3Rpb25zTm90TmVlZGVkR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiYXR0cmlidXRlV2l0aENF
UmVhY3Rpb25zTm90TmVlZGVkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RD
RVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJl
YWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2Fs
bG93ZWRTY29wZSBjdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGU7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJl
dHVybiBpbXBsLnNldEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZChXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNU
ZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25z
Tm90TmVlZGVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdENFUmVhY3Rpb25zPjo6c2V0PHNldEpTVGVzdENFUmVhY3Rp
b25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyPigqc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OnNldDxzZXRKU1Rl
c3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0
aENFUmVhY3Rpb25zTm90TmVlZGVkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlv
bnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBp
bXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0YXR0cmlidXRld2l0aGNlcmVhY3Rpb25zbm90bmVlZGVkQXR0cikpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGV3aXRoY2VyZWFjdGlvbnNub3RuZWVkZWRBdHRyKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNS
ZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVk
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENF
UmVhY3Rpb25zPjo6Z2V0PGpzVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9uc05vdE5lZWRlZEdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KnN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVl
ZGVkIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9ucz46OmdldDxq
c1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJyZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVk
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0Q0VSZWFjdGlvbnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZs
ZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9ucyYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dl
ZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRl
cjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNh
bGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJu
IGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RhdHRyaWJ1dGV3aXRoY2VyZWFjdGlvbnNub3RuZWVkZWRBdHRyLCBXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0
SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVk
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1
dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXQ8
c2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25zTm90TmVl
ZGVkU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdEF0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0Q0VSZWFjdGlvbnM+OjpzZXQ8c2V0SlNUZXN0Q0VSZWFjdGlvbnNSZWZsZWN0QXR0cmli
dXRlV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0QXR0cmlidXRlV2l0aENFUmVhY3Rpb25z
Tm90TmVlZGVkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVO
b3ROZWVkZWRHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFj
ZTxUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZCgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnM+OjpnZXQ8anNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZEdldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdHJpbmdpZmll
ckF0dHJpYnV0ZU5vdE5lZWRlZCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VS
ZWFjdGlvbnM+OjpnZXQ8anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5l
ZWRlZEdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0
cmlidXRlTm90TmVlZGVkU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25z
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVO
b3ROZWVkZWRTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dENFUmVhY3Rpb25zJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICBh
dXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJzdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZCIpLCBzdHJsZW4oInN0cmlu
Z2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIikpOwotICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9
IHRoaXNPYmplY3QuZ2V0KCZzdGF0ZSwgaWQpOworICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9
IHRoaXNPYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaWYgKFVOTElLRUxZKCF2YWx1ZVRv
Rm9yd2FyZFRvLmlzT2JqZWN0KCkpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
dGhyb3dTY29wZSk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBhdXRvIGZv
cndhcmRJZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigidmFsdWVXaXRob3V0UmVhY3Rpb25zIiksIHN0cmxlbigidmFsdWVXaXRob3V0
UmVhY3Rpb25zIikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhbHVlVG9Gb3J3YXJkVG8s
IGZhbHNlKTsKLSAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFibGUodm0p
LT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElkLCB2YWx1
ZSwgc2xvdCk7CisgICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRhYmxlKHZt
KS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmbGV4aWNhbEdsb2JhbE9iamVjdCwg
Zm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZChKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RDRVJlYWN0aW9ucz46OnNldDxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0
cmlidXRlTm90TmVlZGVkU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
c3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdENFUmVhY3Rpb25zPjo6c2V0PHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJB
dHRyaWJ1dGVOb3ROZWVkZWRTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RDRVJlYWN0aW9ucz46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENFUmVhY3Rpb25zQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0Q0VSZWFjdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIEN1c3RvbUVsZW1lbnRSZWFj
dGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKCpzdGF0ZSk7CisgICAgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2soKmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoQ0VSZWFjdGlvbnMoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFjdGlvbnMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhDRVJlYWN0aW9ucyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0g
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RDRVJlYWN0aW9ucz46OmNhbGw8anNUZXN0Q0VS
ZWFjdGlvbnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDRVJlYWN0aW9uc0JvZHk+KCpzdGF0
ZSwgIm1ldGhvZFdpdGhDRVJlYWN0aW9ucyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0Q0VSZWFjdGlvbnM+OjpjYWxsPGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ0VSZWFjdGlvbnNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgIm1ldGhvZFdpdGhDRVJlYWN0aW9ucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhD
RVJlYWN0aW9uc05vdE5lZWRlZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0Q0VSZWFjdGlvbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDRVJl
YWN0aW9uc05vdE5lZWRlZEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpT
VGVzdENFUmVhY3Rpb25zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rp
b25EaXNhbGxvd2VkU2NvcGUgY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CkBAIC00MzUsMTAgKzQzNiw5
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1By
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RD
RVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zTm90TmVlZGVk
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Q0VSZWFjdGlvbnM+Ojpj
YWxsPGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0VSZWFjdGlv
bnNOb3ROZWVkZWRCb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQi
KTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdENFUmVhY3Rpb25zPjo6Y2FsbDxqc1Rl
c3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFUmVhY3Rpb25zTm90TmVl
ZGVkQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJtZXRob2RXaXRoQ0VS
ZWFjdGlvbnNOb3ROZWVkZWQiKTsKIH0KIAogdm9pZCBKU1Rlc3RDRVJlYWN0aW9uczo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpAQCAtNDc0LDcgKzQ3
NCw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTE1VGVzdENFUmVh
Y3Rpb25zRVtdOyB9CiAjZW5kaWYKICNlbmRpZgogCi1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxUZXN0Q0VSZWFjdGlvbnM+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdENFUmVhY3Rpb25zPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRF
R1JJVFkpCkBAIC00OTgsOSArNDk4LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJl
dHVybiBjcmVhdGVXcmFwcGVyPFRlc3RDRVJlYWN0aW9ucz4oZ2xvYmFsT2JqZWN0LCBXVEZNb3Zl
KGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q0VSZWFjdGlvbnMmIGltcGwpCitK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q0VSZWFjdGlvbnMmIGltcGwp
CiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0
dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAog
VGVzdENFUmVhY3Rpb25zKiBKU1Rlc3RDRVJlYWN0aW9uczo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5oCmluZGV4IGZiNGE2ODFl
ZTAxMzkwYmZiMjA2MmQ5ZDIyNDA0Mjc2NGE4ZmNkODUuLjk4OTNhMTI1YjhiMDAxOTFiMDMyOTc4
NTNiZjMzYTE3YTllMDg0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5oCkBAIC03MywxMCArNzMs
MTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdENFUmVhY3Rpb25zKiB3cmFwcGFibGVP
YmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RDRVJlYWN0aW9ucyYp
OwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENFUmVhY3Rpb25zKiBpbXBsKSB7IHJldHVy
biBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgp
OyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RDRVJlYWN0aW9ucz4mJik7Ci1pbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdENFUmVhY3Rpb25zPiYmIGltcGwpIHsgcmV0
dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVs
ZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0Q0VSZWFjdGlvbnMmKTsK
K2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q0VSZWFjdGlv
bnMqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRl
c3RDRVJlYWN0aW9ucz4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RDRVJlYWN0aW9ucz4mJiBpbXBsKSB7IHJldHVy
biBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKIHRlbXBsYXRl
PD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0Q0VSZWFjdGlvbnM+IHsK
ICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RDRVJlYWN0aW9uczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAppbmRleCA5MTJjNmVmNjk3NjlmMjMy
Y2Q3ZWZiMWMwYjgzODFhMmVkOWZmYzJmLi5lOTM3MjZlZWJmNjhmNGE2MmFhYjgzYWE5YTYzMWUz
ZTc3M2EyZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIu
Y3BwCkBAIC00OCwxMiArNDgsMTIgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblQKIAogLy8gQXR0
cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdpdGhv
dXRSZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdp
dGhvdXRSZWFjdGlvbnMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlvbnMoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwog
CiBjbGFzcyBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyUHJvdG90eXBlIDogcHVibGljIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNTIsMTE3ICsxNTIsMTE3IEBAIHZv
aWQgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2Vs
bCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp+SlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllcigpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyKiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllcj46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
KQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciogSURMQXR0
cmlidXRlPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+OjpjYXN0KEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAg
cmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcio+KHN0YXRl
LnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciogSURMT3BlcmF0aW9uPEpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXI+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKiBJRExPcGVyYXRpb248SlNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVybiBqc0R5bmFt
aWNDYXN0PEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIqPihzdGF0ZS52bSgpLCBzdGF0ZS50
aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllcio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUu
dGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0
byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3Rv
dHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlw
ZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFw
cm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUp
OworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllclZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRo
cm93U2NvcGUsIGltcGwudmFsdWUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERP
TVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC52YWx1ZSgpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OmdldDxqc1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyVmFsdWVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAidmFsdWUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXI+OjpnZXQ8anNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
clZhbHVlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sg
Y3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2soc3RhdGUpOworICAgIEN1c3RvbUVsZW1lbnRSZWFj
dGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAg
QXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJp
YnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewog
ICAgICAgICByZXR1cm4gaW1wbC5zZXRWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
fSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllclZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OnNldDxz
ZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ2YWx1ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj46OnNldDxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyVmFsdWVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgInZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXImIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllclZhbHVlV2l0aG91dFJlYWN0aW9uc0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBp
bXBsLnZhbHVlV2l0aG91dFJlYWN0aW9ucygpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnZhbHVl
V2l0aG91dFJlYWN0aW9ucygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlV2l0aG91dFJl
YWN0aW9ucyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6Z2V0PGpzVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlvbnNHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidmFsdWVXaXRob3V0UmVhY3Rpb25zIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6Z2V0
PGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlvbnNHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJ2YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlvbnNT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVh
Y3Rpb25zU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGUgY3VzdG9tRWxlbWVu
dFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0
YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJv
d1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRWYWx1ZVdpdGhv
dXRSZWFjdGlvbnMoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZVdpdGhv
dXRSZWFjdGlvbnMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXJWYWx1ZVdpdGhvdXRSZWFjdGlvbnMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q0VSZWFjdGlvbnNTdHJp
bmdpZmllcj46OnNldDxzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0
UmVhY3Rpb25zU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidmFsdWVX
aXRob3V0UmVhY3Rpb25zIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyPjo6c2V0PHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1
ZVdpdGhvdXRSZWFjdGlvbnNTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgInZhbHVlV2l0aG91dFJlYWN0aW9ucyIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3Rv
dHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclByb3RvdHlw
ZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC52YWx1ZSgpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGlt
cGwudmFsdWUoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRv
U3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+OjpjYWxsPGpzVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keT4oKnN0YXRl
LCAidG9TdHJpbmciKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXI+OjpjYWxsPGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJQcm90b3R5cGVG
dW5jdGlvblRvU3RyaW5nQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0
b1N0cmluZyIpOwogfQogCiB2b2lkIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OmFuYWx5
emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKQEAgLTI5OCw3ICsy
OTgsNyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUyNlRlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyRVtdOyB9CiAjZW5kaWYKICNlbmRpZgogCi1KU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4mJiBpbXBsKQorSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4mJiBp
bXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtMzIyLDkgKzMyMiw5
IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0K
IAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciYgaW1wbCkKK0pT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyJiBpbXBsKQogewotICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwp
OworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1w
bCk7CiB9CiAKIFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyKiBKU1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
RVJlYWN0aW9uc1N0cmluZ2lmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5oCmluZGV4IGY2MWJhYjQzMWE3
ZTQyYTllNmQ5YTM4N2I3ODFkNmI0YTQyNzQ2OTQuLmUwNjA1YzkwN2M5ZWRhNTI2ZDY2MmY3MDVl
N2I0NWZjYTM0OTg2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXIuaApAQCAtNzMsMTAgKzczLDEwIEBAIGlubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyKiB3cmFwcGFibGVPYmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJs
ZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyJik7Ci1pbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciogaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQot
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4mJik7Ci1pbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIqIGltcGwpIHsgcmV0dXJu
IGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDog
SlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWZQdHI8VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+JiYgaW1wbCkgeyBy
ZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXI+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCmluZGV4IDM0MWZhN2Q2YjIwZDhh
MGQwZTdlOTIxYTY1MWY4ZmE3MWIxOGQ3ZjEuLjBkMDIzNDNjZDhhYmY5YWI0YmYxOTJiYTdlZDA1
ZWExN2U5ZDA1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKQEAgLTYzLDE1ICs2MywxNSBA
QCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q2FsbFRyYWNlclByb3Rv
dHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RDYWxs
VHJhY2VyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNl
clRlc3RBdHRyaWJ1dGVJbnRlcmZhY2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0
cmlidXRlSW50ZXJmYWNlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJU
ZXN0QXR0cmlidXRlU3BlY2lmaWVkKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJp
YnV0ZVNwZWNpZmllZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyVGVz
dEF0dHJpYnV0ZVdpdGhWYXJpYW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJp
YnV0ZVdpdGhWYXJpYW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJU
ZXN0UmVhZG9ubHlBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFj
ZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3Io
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0
ZUludGVyZmFjZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZUlu
dGVyZmFjZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJUZXN0
QXR0cmlidXRlU3BlY2lmaWVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0
cmlidXRlU3BlY2lmaWVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDYWxsVHJh
Y2VyVGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0Q2FsbFRyYWNlclRlc3RSZWFkb25seUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBjbGFzcyBKU1Rl
c3RDYWxsVHJhY2VyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CkBAIC0xOTAsMTY0ICsxOTAsMTY1IEBAIHZvaWQgSlNUZXN0Q2FsbFRyYWNlcjo6ZGVz
dHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RDYWxsVHJhY2Vy
Ojp+SlNUZXN0Q2FsbFRyYWNlcigpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RDYWxs
VHJhY2VyKiBJRExBdHRyaWJ1dGU8SlNUZXN0Q2FsbFRyYWNlcj46OmNhc3QoRXhlY1N0YXRlJiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0
Q2FsbFRyYWNlciogSURMQXR0cmlidXRlPEpTVGVzdENhbGxUcmFjZXI+OjpjYXN0KEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q2FsbFRyYWNlcio+KHN0YXRlLnZtKCks
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U1Rlc3RDYWxsVHJhY2VyKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Q2Fs
bFRyYWNlciogSURMT3BlcmF0aW9uPEpTVGVzdENhbGxUcmFjZXI+OjpjYXN0KEV4ZWNTdGF0ZSYg
c3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RDYWxsVHJhY2VyKiBJRExPcGVyYXRpb248
SlNUZXN0Q2FsbFRyYWNlcj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpT
VGVzdENhbGxUcmFjZXIqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q2FsbFRyYWNlcio+KEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxs
VHJhY2VyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0
byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdENhbGxUcmFjZXI6OmdldENvbnN0
cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Q2FsbFRyYWNlcjo6Z2V0Q29uc3Ry
dWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxP
YmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdENhbGxUcmFjZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0g
ICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJv
d1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yCiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZhY2VH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Q2FsbFRyYWNlciYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDYWxsVHJh
Y2VyVGVzdEF0dHJpYnV0ZUludGVyZmFjZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0Q2FsbFRyYWNlciYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShpbXBs
LmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNl
ckludGVyZmFjZShpbXBsLCAidGVzdEF0dHJpYnV0ZUludGVyZmFjZSJfcyk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETEJvb2xlYW4+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnRlc3RB
dHRyaWJ1dGVJbnRlcmZhY2UoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEJvb2xl
YW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudGVzdEF0dHJpYnV0ZUlu
dGVyZmFjZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZUludGVyZmFjZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dENhbGxUcmFjZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENhbGxUcmFjZXI+OjpnZXQ8anNUZXN0Q2Fs
bFRyYWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZhY2VHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidGVzdEF0dHJpYnV0ZUludGVyZmFjZSIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q2FsbFRyYWNlcj46OmdldDxqc1Rlc3RD
YWxsVHJhY2VyVGVzdEF0dHJpYnV0ZUludGVyZmFjZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInRlc3RBdHRy
aWJ1dGVJbnRlcmZhY2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENhbGxU
cmFjZXJUZXN0QXR0cmlidXRlSW50ZXJmYWNlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dENhbGxUcmFjZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1
dGVJbnRlcmZhY2VTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdENhbGxUcmFjZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtF
TFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENh
bGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RBdHRyaWJ1dGVJbnRlcmZhY2UiX3MsIHsgbmF0
aXZlVmFsdWUgfSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3Bl
LCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRUZXN0QXR0cmlidXRlSW50
ZXJmYWNlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZUludGVyZmFjZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZh
Y2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0Q2FsbFRyYWNlcj46OnNldDxzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0
dHJpYnV0ZUludGVyZmFjZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
InRlc3RBdHRyaWJ1dGVJbnRlcmZhY2UiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dENhbGxUcmFjZXI+OjpzZXQ8c2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZh
Y2VTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
InRlc3RBdHRyaWJ1dGVJbnRlcmZhY2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlU3BlY2lmaWVkR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdENhbGxUcmFjZXImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVTcGVj
aWZpZWRHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdENh
bGxUcmFjZXImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgp
KSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJBdHRyaWJ1dGUoaW1wbCwgInRl
c3RBdHRyaWJ1dGVTcGVjaWZpZWQiX3MpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExC
b29sZWFuPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0QXR0cmlidXRlU3BlY2lmaWVkKCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnRlc3RBdHRyaWJ1dGVTcGVjaWZpZWQoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRy
aWJ1dGVTcGVjaWZpZWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJp
YnV0ZVNwZWNpZmllZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RDYWxsVHJhY2VyPjo6Z2V0PGpzVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRl
U3BlY2lmaWVkR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUs
IHRoaXNWYWx1ZSwgInRlc3RBdHRyaWJ1dGVTcGVjaWZpZWQiKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdENhbGxUcmFjZXI+OjpnZXQ8anNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1
dGVTcGVjaWZpZWRHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0ZXN0QXR0cmlidXRlU3BlY2lmaWVkIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVNw
ZWNpZmllZFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDYWxsVHJhY2VyJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlU3BlY2lmaWVkU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDYWxsVHJhY2VyJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9vbGVh
bj4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29s
ZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaWYgKFVOTElLRUxZKGltcGwuY2FsbFRyYWNpbmdB
Y3RpdmUoKSkpCiAgICAgICAgIENhbGxUcmFjZXI6OnRlc3RDYWxsVHJhY2VyQXR0cmlidXRlKGlt
cGwsICJ0ZXN0QXR0cmlidXRlU3BlY2lmaWVkIl9zLCB7IG5hdGl2ZVZhbHVlIH0pOwotICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1
dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAg
ICAgICAgcmV0dXJuIGltcGwuc2V0VGVzdEF0dHJpYnV0ZVNwZWNpZmllZChXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0
Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVTcGVjaWZpZWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlU3BlY2lmaWVkKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENhbGxU
cmFjZXI+OjpzZXQ8c2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVTcGVjaWZpZWRTZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0QXR0cmlidXRlU3BlY2lm
aWVkIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDYWxsVHJhY2VyPjo6c2V0PHNl
dEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlU3BlY2lmaWVkU2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0QXR0cmlidXRlU3BlY2lm
aWVkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyVGVzdEF0
dHJpYnV0ZVdpdGhWYXJpYW50R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENhbGxUcmFj
ZXImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudEdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Q2FsbFRyYWNlciYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxs
VHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAidGVzdEF0dHJpYnV0ZVdpdGhW
YXJpYW50Il9zKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5pb248SURMQm9vbGVh
biwgSURMRmxvYXQsIElETERPTVN0cmluZz4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0QXR0cmlidXRlV2l0aFZhcmlhbnQoKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExE
T01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0QXR0cmlidXRlV2l0aFZhcmlhbnQoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRy
aWJ1dGVXaXRoVmFyaWFudChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJUZXN0QXR0
cmlidXRlV2l0aFZhcmlhbnQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0Q2FsbFRyYWNlcj46OmdldDxqc1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJp
YnV0ZVdpdGhWYXJpYW50R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigq
c3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudCIpOworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0Q2FsbFRyYWNlcj46OmdldDxqc1Rlc3RDYWxsVHJhY2VyVGVz
dEF0dHJpYnV0ZVdpdGhWYXJpYW50R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNz
ZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidGVzdEF0dHJpYnV0ZVdpdGhW
YXJpYW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVz
dEF0dHJpYnV0ZVdpdGhWYXJpYW50U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdENhbGxU
cmFjZXImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRo
VmFyaWFudFNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
Q2FsbFRyYWNlciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PihzdGF0
ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuaW9uPElETEJv
b2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaWYg
KFVOTElLRUxZKGltcGwuY2FsbFRyYWNpbmdBY3RpdmUoKSkpCiAgICAgICAgIENhbGxUcmFjZXI6
OnRlc3RDYWxsVHJhY2VySW50ZXJmYWNlKGltcGwsICJ0ZXN0QXR0cmlidXRlV2l0aFZhcmlhbnQi
X3MsIHsgbmF0aXZlVmFsdWUgfSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0
aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRUZXN0QXR0
cmlidXRlV2l0aFZhcmlhbnQoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0cmlidXRlV2l0
aFZhcmlhbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdENhbGxUcmFjZXJUZXN0QXR0
cmlidXRlV2l0aFZhcmlhbnQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q2FsbFRyYWNlcj46OnNldDxzZXRKU1Rlc3RD
YWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50U2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAidGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RDYWxsVHJhY2VyPjo6c2V0PHNldEpTVGVzdENhbGxUcmFjZXJU
ZXN0QXR0cmlidXRlV2l0aFZhcmlhbnRTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgInRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudCIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RSZWFkb25seUF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RDYWxsVHJhY2VyJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENhbGxU
cmFjZXJUZXN0UmVhZG9ubHlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdENhbGxUcmFjZXImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMQm9vbGVhbj4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwudGVzdFJlYWRvbmx5QXR0
cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCb29sZWFuPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnRlc3RSZWFkb25seUF0dHJpYnV0ZSgpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2Vy
VGVzdFJlYWRvbmx5QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRl
c3RSZWFkb25seUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RDYWxsVHJhY2VyPjo6Z2V0PGpzVGVzdENhbGxUcmFjZXJUZXN0UmVh
ZG9ubHlBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAidGVzdFJlYWRvbmx5QXR0cmlidXRlIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RDYWxsVHJhY2VyPjo6Z2V0PGpzVGVzdENhbGxUcmFjZXJUZXN0UmVh
ZG9ubHlBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0ZXN0UmVhZG9ubHlBdHRyaWJ1dGUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQ
cm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25JbnRlcmZhY2VCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdENhbGxUcmFjZXI+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0
aW9uVGVzdE9wZXJhdGlvbkludGVyZmFjZUJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdENhbGxUcmFjZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGltcGwuY2FsbFRyYWNp
bmdBY3RpdmUoKSkpCkBAIC0zNTYsMTUgKzM1NywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlv
bgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9u
VGVzdE9wZXJhdGlvbkludGVyZmFjZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDYWxsVHJh
Y2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uSW50ZXJmYWNlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdENh
bGxUcmFjZXI+OjpjYWxsPGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVy
YXRpb25JbnRlcmZhY2VCb2R5Pigqc3RhdGUsICJ0ZXN0T3BlcmF0aW9uSW50ZXJmYWNlIik7Cisg
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Y2FsbDxqc1Rlc3RDYWxs
VHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uSW50ZXJmYWNlQm9keT4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0ZXN0T3BlcmF0aW9uSW50ZXJmYWNlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyUHJv
dG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uU3BlY2lmaWVkQm9keShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlv
blRlc3RPcGVyYXRpb25TcGVjaWZpZWRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJh
dGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5n
QWN0aXZlKCkpKQpAQCAtMzczLDI0ICszNzQsMjQgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRl
c3RPcGVyYXRpb25TcGVjaWZpZWQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q2FsbFRyYWNl
clByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvblNwZWNpZmllZChKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RDYWxs
VHJhY2VyPjo6Y2FsbDxqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0
aW9uU3BlY2lmaWVkQm9keT4oKnN0YXRlLCAidGVzdE9wZXJhdGlvblNwZWNpZmllZCIpOworICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Q2FsbFRyYWNlcj46OmNhbGw8anNUZXN0Q2FsbFRy
YWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvblNwZWNpZmllZEJvZHk+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdE9wZXJhdGlvblNwZWNpZmllZCIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3Rv
dHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhBcmd1bWVudHNCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdENhbGxUcmFjZXI+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0
aW9uVGVzdE9wZXJhdGlvbldpdGhBcmd1bWVudHNCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0
byBhID0gY29udmVydDxJRExCb29sZWFuPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OworICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBiID0gY29udmVydDxJ
RExGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8g
YiA9IGNvbnZlcnQ8SURMRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gYyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgYXV0byBjID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDIpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkp
KQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAidGVz
dE9wZXJhdGlvbldpdGhBcmd1bWVudHMiX3MsIHsgYSwgYiwgYyB9KTsKQEAgLTM5OCwyMCArMzk5
LDIwIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2Vy
UHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aEFyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0
T3BlcmF0aW9uV2l0aEFyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Y2FsbDxqc1Rl
c3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aEFyZ3VtZW50c0Jv
ZHk+KCpzdGF0ZSwgInRlc3RPcGVyYXRpb25XaXRoQXJndW1lbnRzIik7CisgICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Y2FsbDxqc1Rlc3RDYWxsVHJhY2VyUHJvdG90
eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aEFyZ3VtZW50c0JvZHk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdE9wZXJhdGlvbldpdGhBcmd1bWVudHMiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5
cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVBcmd1bWVudEJvZHkoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0Q2FsbFRyYWNlcj46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBl
RnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aE51bGxhYmxlQXJndW1lbnRCb2R5KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7Ci0gICAgYXV0byBub2RlTnVsbGFibGVBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETElu
dGVyZmFjZTxOb2RlPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJub2RlTnVsbGFibGVBcmciLCAiVGVzdENh
bGxUcmFjZXIiLCAidGVzdE9wZXJhdGlvbldpdGhOdWxsYWJsZUFyZ3VtZW50IiwgIk5vZGUiKTsg
fSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwor
ICAgIGF1dG8gbm9kZU51bGxhYmxlQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAwLCAibm9kZU51bGxhYmxlQXJnIiwgIlRlc3RDYWxsVHJhY2VyIiwg
InRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVBcmd1bWVudCIsICJOb2RlIik7IH0pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYg
KFVOTElLRUxZKGltcGwuY2FsbFRyYWNpbmdBY3RpdmUoKSkpCiAgICAgICAgIENhbGxUcmFjZXI6
OnRlc3RDYWxsVHJhY2VySW50ZXJmYWNlKGltcGwsICJ0ZXN0T3BlcmF0aW9uV2l0aE51bGxhYmxl
QXJndW1lbnQiX3MsIHsgbm9kZU51bGxhYmxlQXJnIH0pOwpAQCAtNDE5LDIwICs0MjAsMjAgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5
cGVGdW5jdGlvblRlc3RPcGVyYXRpb24KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENhbGxU
cmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVBcmd1bWVudChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0
T3BlcmF0aW9uV2l0aE51bGxhYmxlQXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Q2FsbFRyYWNlcj46OmNh
bGw8anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhOdWxs
YWJsZUFyZ3VtZW50Qm9keT4oKnN0YXRlLCAidGVzdE9wZXJhdGlvbldpdGhOdWxsYWJsZUFyZ3Vt
ZW50Iik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Y2FsbDxq
c1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aE51bGxhYmxl
QXJndW1lbnRCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRlc3RPcGVy
YXRpb25XaXRoTnVsbGFibGVBcmd1bWVudCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlv
bldpdGhWYXJpYW50QXJndW1lbnRCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdENhbGxUcmFjZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldp
dGhWYXJpYW50QXJndW1lbnRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RDYWxsVHJhY2VyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byB2YXJpYW50QXJn
ID0gY29udmVydDxJRExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHZhcmlhbnRBcmcgPSBj
b252ZXJ0PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBp
ZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNl
cjo6dGVzdENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RPcGVyYXRpb25XaXRoVmFyaWFu
dEFyZ3VtZW50Il9zLCB7IHZhcmlhbnRBcmcgfSk7CkBAIC00NDAsMjAgKzQ0MSwyMCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1
bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q2FsbFRyYWNl
clByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhWYXJpYW50QXJndW1lbnQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJh
dGlvbldpdGhWYXJpYW50QXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmpl
Y3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Q2FsbFRyYWNlcj46OmNhbGw8anNU
ZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhWYXJpYW50QXJn
dW1lbnRCb2R5Pigqc3RhdGUsICJ0ZXN0T3BlcmF0aW9uV2l0aFZhcmlhbnRBcmd1bWVudCIpOwor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Q2FsbFRyYWNlcj46OmNhbGw8anNUZXN0Q2Fs
bFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhWYXJpYW50QXJndW1lbnRC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRlc3RPcGVyYXRpb25XaXRo
VmFyaWFudEFyZ3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aE51bGxh
YmxlVmFyaWFudEFyZ3VtZW50Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRo
TnVsbGFibGVWYXJpYW50QXJndW1lbnRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJh
dGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byB2YXJp
YW50TnVsbGFibGVBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFVuaW9uPElETEJvb2xlYW4s
IElETEZsb2F0LCBJRExET01TdHJpbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKKyAgICBhdXRvIHZhcmlhbnROdWxsYWJsZUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
VW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoVU5MSUtF
TFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENh
bGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVWYXJpYW50
QXJndW1lbnQiX3MsIHsgdmFyaWFudE51bGxhYmxlQXJnIH0pOwpAQCAtNDYxLDE4ICs0NjIsMTgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90
b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENh
bGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVWYXJpYW50
QXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1
bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhOdWxsYWJsZVZhcmlhbnRBcmd1bWVudChKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RDYWxsVHJhY2VyPjo6Y2FsbDxqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0
T3BlcmF0aW9uV2l0aE51bGxhYmxlVmFyaWFudEFyZ3VtZW50Qm9keT4oKnN0YXRlLCAidGVzdE9w
ZXJhdGlvbldpdGhOdWxsYWJsZVZhcmlhbnRBcmd1bWVudCIpOworICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0Q2FsbFRyYWNlcj46OmNhbGw8anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1
bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhOdWxsYWJsZVZhcmlhbnRBcmd1bWVudEJvZHk+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdE9wZXJhdGlvbldpdGhOdWxsYWJsZVZh
cmlhbnRBcmd1bWVudCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhPcHRpb25h
bFZhcmlhbnRBcmd1bWVudEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNUZXN0Q2FsbFRyYWNlcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aE9w
dGlvbmFsVmFyaWFudEFyZ3VtZW50Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0Q2FsbFRyYWNlcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHZhcmlhbnRPcHRpb25hbEFyZyA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVuaW9u
PElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZT4oKSA6IE9w
dGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3Ry
aW5nPj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQs
IElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7Cisg
ICAgYXV0byB2YXJpYW50T3B0aW9uYWxBcmcgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxv
YXQsIElETERPTVN0cmluZz4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElE
TFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZT4o
Y29udmVydDxJRExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJh
Y2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAidGVzdE9wZXJhdGlvbldpdGhPcHRp
b25hbFZhcmlhbnRBcmd1bWVudCJfcywgeyB2YXJpYW50T3B0aW9uYWxBcmcgfSk7CkBAIC00ODAs
MTggKzQ4MSwxOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2Fs
bFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhPcHRp
b25hbFZhcmlhbnRBcmd1bWVudChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDYWxsVHJhY2Vy
UHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aE9wdGlvbmFsVmFyaWFudEFyZ3VtZW50
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdENhbGxUcmFjZXI+OjpjYWxsPGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVG
dW5jdGlvblRlc3RPcGVyYXRpb25XaXRoT3B0aW9uYWxWYXJpYW50QXJndW1lbnRCb2R5Pigqc3Rh
dGUsICJ0ZXN0T3BlcmF0aW9uV2l0aE9wdGlvbmFsVmFyaWFudEFyZ3VtZW50Iik7CisgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RDYWxsVHJhY2VyPjo6Y2FsbDxqc1Rlc3RDYWxsVHJhY2Vy
UHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uV2l0aE9wdGlvbmFsVmFyaWFudEFyZ3VtZW50
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0ZXN0T3BlcmF0aW9uV2l0
aE9wdGlvbmFsVmFyaWFudEFyZ3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9u
V2l0aERlZmF1bHRWYXJpYW50QXJndW1lbnRCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdENhbGxUcmFjZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJh
dGlvbldpdGhEZWZhdWx0VmFyaWFudEFyZ3VtZW50Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0Q2FsbFRyYWNlcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHZhcmlhbnREZWZhdWx0QXJn
ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyAiIiA6IGNvbnZlcnQ8SURMVW5p
b248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHZhcmlhbnREZWZhdWx0QXJnID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gIiIgOiBjb252ZXJ0PElETFVuaW9uPElE
TEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5j
YWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJJ
bnRlcmZhY2UoaW1wbCwgInRlc3RPcGVyYXRpb25XaXRoRGVmYXVsdFZhcmlhbnRBcmd1bWVudCJf
cywgeyB2YXJpYW50RGVmYXVsdEFyZyB9KTsKQEAgLTQ5OSwxMCArNTAwLDkgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlv
blRlc3RPcGVyYXRpb24KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENhbGxUcmFjZXJQcm90
b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb25XaXRoRGVmYXVsdFZhcmlhbnRBcmd1bWVudChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3Bl
cmF0aW9uV2l0aERlZmF1bHRWYXJpYW50QXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Q2FsbFRyYWNlcj46
OmNhbGw8anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbldpdGhE
ZWZhdWx0VmFyaWFudEFyZ3VtZW50Qm9keT4oKnN0YXRlLCAidGVzdE9wZXJhdGlvbldpdGhEZWZh
dWx0VmFyaWFudEFyZ3VtZW50Iik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RDYWxs
VHJhY2VyPjo6Y2FsbDxqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0
aW9uV2l0aERlZmF1bHRWYXJpYW50QXJndW1lbnRCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgInRlc3RPcGVyYXRpb25XaXRoRGVmYXVsdFZhcmlhbnRBcmd1bWVudCIpOwog
fQogCiB2b2lkIEpTVGVzdENhbGxUcmFjZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVh
cEFuYWx5emVyJiBhbmFseXplcikKQEAgLTUzOCw3ICs1MzgsNyBAQCBleHRlcm4gIkMiIHsgZXh0
ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUxNFRlc3RDYWxsVHJhY2VyRVtdOyB9CiAjZW5kaWYKICNl
bmRpZgogCi1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0Q2FsbFRyYWNlcj4mJiBpbXBs
KQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0Q2FsbFRyYWNlcj4mJiBpbXBs
KQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtNTYyLDkgKzU2Miw5IEBA
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0Q2Fs
bFRyYWNlcj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0Q2FsbFRyYWNlciYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFRlc3RDYWxsVHJhY2VyJiBpbXBsKQogewotICAgIHJldHVybiB3cmFwKHN0YXRlLCBn
bG9iYWxPYmplY3QsIGltcGwpOworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3RDYWxsVHJhY2VyKiBKU1Rlc3RDYWxsVHJh
Y2VyOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJh
Y2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2Fs
bFRyYWNlci5oCmluZGV4IGY1MzZiM2M0NjFlZWE2MTYyYmQyOGE1ZWI3OTJkZWQ0YTJkMDk2Mjku
LjkyYzZlZTg4MTg3OTJiZmI3ODgzOWRkZDc3MmJhMDM1OTM5YmNmMDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxU
cmFjZXIuaApAQCAtNzMsMTAgKzczLDEwIEBAIGlubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RD
YWxsVHJhY2VyKiB3cmFwcGFibGVPYmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsK
IH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3RDYWxsVHJhY2VyJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0Q2FsbFRy
YWNlciogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmlt
cGwpIDogSlNDOjpqc051bGwoKTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0Q2FsbFRyYWNlcj4mJik7
Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdENhbGxUcmFj
ZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRl
c3RDYWxsVHJhY2VyJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVGVzdENhbGxUcmFjZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgUmVmPFRlc3RDYWxsVHJhY2VyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdENhbGxUcmFjZXI+JiYg
aW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsg
fQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdENh
bGxUcmFjZXI+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RDYWxsVHJhY2VyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxiYWNrRnVuY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uY3BwCmluZGV4IGY0M2RlZmNhNWJjOTliNjRh
ZDJjYTJjOGM5YTgxZWU2Y2VlMDkyNzAuLjc5NzQ4MzRlOTA2ZDVmYmI0N2EzYzEyMWJjYzJhODgz
Y2ZiMDQwNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5jcHAKQEAgLTYxLDcg
KzYxLDcgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJbXBsZW1lbnRh
dGlvblR5cGU+IEpTVGVzdENhbGxiYWNrRnVuY3Rpb24KICAgICBhdXRvJiB2bSA9IGdsb2JhbE9i
amVjdC52bSgpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8mIHN0YXRl
ID0gKmdsb2JhbE9iamVjdC5nbG9iYWxFeGVjKCk7CisgICAgYXV0byYgbGV4aWNhbEdsb2JhbE9i
amVjdCA9IGdsb2JhbE9iamVjdDsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZCh0b0pT
PElETExvbmc+KGFyZ3VtZW50KSk7CkBAIC03MCwxMiArNzAsMTIgQEAgQ2FsbGJhY2tSZXN1bHQ8
dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJbXBsZW1lbnRhdGlvblR5cGU+IEpTVGVzdENhbGxiYWNr
RnVuY3Rpb24KICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247
CiAgICAgYXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBh
cmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigp
LCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7Ci0gICAg
ICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICAgICAg
cmVwb3J0RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXR1cm5lZEV4Y2VwdGlvbik7
CiAgICAgICAgIHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bjsKICAg
ICAgfQogCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgYXV0byByZXR1cm5WYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwganNSZXN1
bHQpOworICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwganNSZXN1bHQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgQ2FsbGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJvd24pOwogICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uUmV0aHJvdy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvblJldGhy
b3cuY3BwCmluZGV4IGNkZjkyZWVkNjZjZGNlNzZiYWFhMjI5MWZmYTNmMzdhNzk1OWYzN2YuLjE3
Y2JlMmU3ZjM5N2Q0YjM3YTEyYmQ0OTMwZDY1OTQ0ZGJiZGEwZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9u
UmV0aHJvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrRnVuY3Rpb25SZXRocm93LmNwcApAQCAtNjQsMjIgKzY0LDIyIEBAIENh
bGxiYWNrUmVzdWx0PHR5cGVuYW1lIElETERPTVN0cmluZzo6SW1wbGVtZW50YXRpb25UeXBlPiBK
U1Rlc3RDYWxsYmFja0Z1bmN0aW9uCiAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsK
IAogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxP
YmplY3QuZ2xvYmFsRXhlYygpOworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9i
YWxPYmplY3Q7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodG9KUzxJRExTZXF1ZW5j
ZTxJRExMb25nPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgYXJndW1lbnQpKTsKKyAgICBhcmdzLmFw
cGVuZCh0b0pTPElETFNlcXVlbmNlPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsIGFyZ3VtZW50KSk7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7
CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247CiAgICAg
YXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBK
U0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbiwgSWRlbnRpZmllcigpLCByZXR1
cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICB0aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICAgICAg
dGhyb3dFeGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHJldHVybmVk
RXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9u
VGhyb3duOwogICAgICB9CiAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvIHJldHVyblZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0
YXRlLCBqc1Jlc3VsdCk7CisgICAgYXV0byByZXR1cm5WYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBqc1Jlc3VsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bik7CiAg
ICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVGhpc09iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2Fs
bGJhY2tGdW5jdGlvbldpdGhUaGlzT2JqZWN0LmNwcAppbmRleCAxYzA2ODQ4YWJmYzA4NzM4ZTM4
NzZiYTkyODU0MGE2NDFiOTZhODRhLi41MzAyZGEyNTljMzcwZmM1OGRjZmYyZjdiODA5NGIyNTY5
MmY2YjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldpdGhUaGlzT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldp
dGhUaGlzT2JqZWN0LmNwcApAQCAtNjQsMTYgKzY0LDE2IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVu
YW1lIElETFZvaWQ6OkltcGxlbWVudGF0aW9uVHlwZT4gSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldp
dGhUCiAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKIAogICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QuZ2xvYmFsRXhlYygp
OwotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBsZXhpY2FsR2xvYmFs
T2JqZWN0ID0gZ2xvYmFsT2JqZWN0OworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gdG9KUzxJRExJ
bnRlcmZhY2U8VGVzdE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHRo
aXNPYmplY3QpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBl
bmQodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oc3RhdGUsIGdsb2Jh
bE9iamVjdCwgcGFyYW1ldGVyKSk7CisgICAgYXJncy5hcHBlbmQodG9KUzxJRExTZXF1ZW5jZTxJ
RExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LCBwYXJhbWV0ZXIpKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAg
IE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBtX2RhdGEt
Pmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNr
VHlwZTo6RnVuY3Rpb24sIElkZW50aWZpZXIoKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlm
IChyZXR1cm5lZEV4Y2VwdGlvbikgewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCBy
ZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1
bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CiAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRo
VHlwZWRlZnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnMuY3BwCmluZGV4IDQzNDM4ZjcyY2I3MDVh
MDU1M2QwMTFmMGIxZGY0MTJhOGUxOTNlYTkuLjdhN2MyMzM3MjJmZjkyNTk5MGI4NDBiYjQ0MDI0
OWJiZWRhYjBjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlv
bldpdGhUeXBlZGVmcy5jcHAKQEAgLTY0LDE3ICs2NCwxNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBl
bmFtZSBJRExWb2lkOjpJbXBsZW1lbnRhdGlvblR5cGU+IEpTVGVzdENhbGxiYWNrRnVuY3Rpb25X
aXRoVAogICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7Ci0gICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMo
KTsKKyAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMU2VxdWVuY2U8SURMTnVsbGFibGU8SURM
TG9uZz4+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzZXF1ZW5jZUFyZykpOworICAgIGFyZ3MuYXBw
ZW5kKHRvSlM8SURMU2VxdWVuY2U8SURMTnVsbGFibGU8SURMTG9uZz4+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHNlcXVlbmNlQXJnKSk7CiAgICAgYXJncy5hcHBlbmQodG9K
UzxJRExMb25nPihsb25nQXJnKSk7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7
CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247CiAgICAg
bV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpD
YWxsYmFja1R5cGU6OkZ1bmN0aW9uLCBJZGVudGlmaWVyKCksIHJldHVybmVkRXhjZXB0aW9uKTsK
ICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKLSAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZz
dGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24oJmxleGlj
YWxHbG9iYWxPYmplY3QsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxi
YWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3duOwogICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2tJbnRlcmZhY2UuY3BwCmluZGV4IGQxY2I5YTRhZmU3YWNiNGQ4NDFkM2MxMzhkMDZk
OWM0ODFiMGIzMmUuLjdiMTU4NmJjZDFmOTEwODNkN2YwOWMwOTc3YjI2NjE2MTA0NzdhNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
YWxsYmFja0ludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrSW50ZXJmYWNlLmNwcApAQCAtNTksMTQgKzU5LDE0IEBA
IFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6
OkVudW0gZW51bWVyYXRpb25WYWx1ZSkKICAgICByZXR1cm4gdmFsdWVzW3N0YXRpY19jYXN0PHNp
emVfdD4oZW51bWVyYXRpb25WYWx1ZSldOwogfQogCi10ZW1wbGF0ZTw+IEpTU3RyaW5nKiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIFRlc3RDYWxsYmFja0ludGVyZmFj
ZTo6RW51bSBlbnVtZXJhdGlvblZhbHVlKQordGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVu
dW1lcmF0aW9uVG9KUyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdENh
bGxiYWNrSW50ZXJmYWNlOjpFbnVtIGVudW1lcmF0aW9uVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZW51bWVy
YXRpb25WYWx1ZSkpOworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZW51bWVyYXRpb25WYWx1ZSkpOwog
fQogCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RDYWxsYmFja0ludGVyZmFjZTo6RW51bT4gcGFy
c2VFbnVtZXJhdGlvbjxUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkVudW0+KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RDYWxsYmFja0ludGVy
ZmFjZTo6RW51bT4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkVudW0+
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIGF1
dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJ2YWx1ZTEiKQogICAgICAgICByZXR1cm4gVGVzdENh
bGxiYWNrSW50ZXJmYWNlOjpFbnVtOjpWYWx1ZTE7CiAgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJ2
YWx1ZTIiKQpAQCAtNzksMTQgKzc5LDE0IEBAIHRlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkVudW0+KCkKICAgICBy
ZXR1cm4gIlwidmFsdWUxXCIsIFwidmFsdWUyXCIiOwogfQogCi10ZW1wbGF0ZTw+IFRlc3RDYWxs
YmFja0ludGVyZmFjZTo6RGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0Q2FsbGJhY2tJ
bnRlcmZhY2U6OkRpY3Rpb25hcnk+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0
ZW1wbGF0ZTw+IFRlc3RDYWxsYmFja0ludGVyZmFjZTo6RGljdGlvbmFyeSBjb252ZXJ0RGljdGlv
bmFyeTxUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkRpY3Rpb25hcnk+KEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYm9vbCBp
c051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgYXV0byog
b2JqZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7
CiAgICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgewotICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1R5
cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogICAgIFRlc3RDYWxsYmFja0ludGVyZmFjZTo6RGljdGlvbmFyeSByZXN1
bHQ7CkBAIC05NCwyNSArOTQsMjUgQEAgdGVtcGxhdGU8PiBUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6
OkRpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdENhbGxiYWNrSW50ZXIKICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIG9wdGlvbmFsTWVtYmVyVmFsdWUgPSBqc1VuZGVm
aW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBvcHRpb25hbE1lbWJlclZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAib3B0aW9uYWxNZW1iZXIi
KSk7CisgICAgICAgIG9wdGlvbmFsTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm9wdGlvbmFsTWVtYmVyIikp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQog
ICAgIGlmICghb3B0aW9uYWxNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJl
c3VsdC5vcHRpb25hbE1lbWJlciA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIG9wdGlvbmFsTWVt
YmVyVmFsdWUpOworICAgICAgICByZXN1bHQub3B0aW9uYWxNZW1iZXIgPSBjb252ZXJ0PElETExv
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIG9wdGlvbmFsTWVtYmVyVmFsdWUpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIEpTVmFsdWUg
cmVxdWlyZWRNZW1iZXJWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAg
IHJlcXVpcmVkTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAg
ICByZXF1aXJlZE1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAicmVxdWlyZWRNZW1iZXIiKSk7CisgICAgICAgIHJlcXVpcmVkTWVtYmVy
VmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInJlcXVpcmVkTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcmVxdWlyZWRNZW1iZXJWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5yZXF1aXJlZE1lbWJlciA9IGNvbnZl
cnQ8SURMVVNWU3RyaW5nPihzdGF0ZSwgcmVxdWlyZWRNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJl
c3VsdC5yZXF1aXJlZE1lbWJlciA9IGNvbnZlcnQ8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCByZXF1aXJlZE1lbWJlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocm93UmVxdWlyZWRN
ZW1iZXJUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJyZXF1aXJlZE1lbWJlciIsICJUZXN0
Q2FsbGJhY2tJbnRlcmZhY2VEaWN0aW9uYXJ5IiwgIlVTVlN0cmluZyIpOworICAgICAgICB0aHJv
d1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
ICJyZXF1aXJlZE1lbWJlciIsICJUZXN0Q2FsbGJhY2tJbnRlcmZhY2VEaWN0aW9uYXJ5IiwgIlVT
VlN0cmluZyIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMTgzLDcgKzE4Myw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1lIElETFZvaWQ6Oklt
cGxlbWVudGF0aW9uVHlwZT4gSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OmNhCiAgICAgYXV0byYg
dm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAg
ICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QuZ2xvYmFsRXhlYygpOworICAgIGF1dG8mIGxl
eGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgQVNT
RVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CkBAIC0xOTEsNyArMTkxLDcgQEAgQ2FsbGJhY2tS
ZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1wbGVtZW50YXRpb25UeXBlPiBKU1Rlc3RDYWxsYmFj
a0ludGVyZmFjZTo6Y2EKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNl
cHRpb247CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2Fs
bGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImNhbGxiYWNrV2l0aE5vUGFyYW0iKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChy
ZXR1cm5lZEV4Y2VwdGlvbikgewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1
cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9i
amVjdCwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1bHRU
eXBlOjpFeGNlcHRpb25UaHJvd247CiAgICAgIH0KIApAQCAtMjA5LDE2ICsyMDksMTYgQEAgQ2Fs
bGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1wbGVtZW50YXRpb25UeXBlPiBKU1Rlc3RD
YWxsYmFja0ludGVyZmFjZTo6Y2EKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC52bSgpOwog
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9i
amVjdC5nbG9iYWxFeGVjKCk7CisgICAgYXV0byYgbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2Jh
bE9iamVjdDsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTPElETEZsb2F0MzJB
cnJheT4oc3RhdGUsIGdsb2JhbE9iamVjdCwgYXJyYXlQYXJhbSkpOworICAgIGFyZ3MuYXBwZW5k
KHRvSlM8SURMRmxvYXQzMkFycmF5PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGFycmF5UGFyYW0pKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAg
IE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBtX2RhdGEt
Pmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNr
VHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoQXJy
YXlQYXJhbSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9u
KSB7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsK
KyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXR1cm5lZEV4
Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRo
cm93bjsKICAgICAgfQogCkBAIC0yMzYsMTcgKzIzNiwxNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBl
bmFtZSBJRExWb2lkOjpJbXBsZW1lbnRhdGlvblR5cGU+IEpTVGVzdENhbGxiYWNrSW50ZXJmYWNl
OjpjYQogICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7Ci0gICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMo
KTsKKyAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHNyelBhcmFtKSk7Ci0g
ICAgYXJncy5hcHBlbmQodG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBzdHJQYXJhbSkpOworICAg
IGFyZ3MuYXBwZW5kKHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgc3J6UGFyYW0pKTsK
KyAgICBhcmdzLmFwcGVuZCh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
c3RyUGFyYW0pKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIE5h
a2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBtX2RhdGEtPmlu
dm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlw
ZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tXaXRoU2VyaWFs
aXplZFNjcmlwdFZhbHVlUGFyYW0iKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1
cm5lZEV4Y2VwdGlvbikgewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVj
dCwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1bHRUeXBl
OjpFeGNlcHRpb25UaHJvd247CiAgICAgIH0KIApAQCAtMjY0LDE2ICsyNjQsMTYgQEAgQ2FsbGJh
Y2tSZXN1bHQ8dHlwZW5hbWUgSURMVm9pZDo6SW1wbGVtZW50YXRpb25UeXBlPiBKU1Rlc3RDYWxs
YmFja0ludGVyZmFjZTo6Y2EKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC52bSgpOwogCiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9iamVj
dC5nbG9iYWxFeGVjKCk7CisgICAgYXV0byYgbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9i
amVjdDsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTPElETEludGVyZmFjZTxE
T01TdHJpbmdMaXN0Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgbGlzdFBhcmFtKSk7CisgICAgYXJn
cy5hcHBlbmQodG9KUzxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+KGxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdCwgbGlzdFBhcmFtKSk7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092
ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNl
cHRpb247CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2Fs
bGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImNhbGxiYWNrV2l0aFN0cmluZ0xpc3QiKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlm
IChyZXR1cm5lZEV4Y2VwdGlvbikgewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCBy
ZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1
bHRUeXBlOjpFeGNlcHRpb25UaHJvd247CiAgICAgIH0KIApAQCAtMjkxLDcgKzI5MSw3IEBAIENh
bGxiYWNrUmVzdWx0PHR5cGVuYW1lIElETFZvaWQ6OkltcGxlbWVudGF0aW9uVHlwZT4gSlNUZXN0
Q2FsbGJhY2tJbnRlcmZhY2U6OmNhCiAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsK
IAogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxP
YmplY3QuZ2xvYmFsRXhlYygpOworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9i
YWxPYmplY3Q7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQodG9KUzxJRExCb29sZWFu
Pihib29sUGFyYW0pKTsKQEAgLTMwMCw3ICszMDAsNyBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFt
ZSBJRExWb2lkOjpJbXBsZW1lbnRhdGlvblR5cGU+IEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpj
YQogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBt
X2RhdGEtPmludm9rZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNh
bGxiYWNrVHlwZTo6T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tX
aXRoQm9vbGVhbiIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0
aW9uKSB7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJldHVybmVkRXhjZXB0aW9u
KTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXR1cm5l
ZEV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlv
blRocm93bjsKICAgICAgfQogCkBAIC0zMTgsMTcgKzMxOCwxNyBAQCBDYWxsYmFja1Jlc3VsdDx0
eXBlbmFtZSBJRExWb2lkOjpJbXBsZW1lbnRhdGlvblR5cGU+IEpTVGVzdENhbGxiYWNrSW50ZXJm
YWNlOjpjYQogICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAKICAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4
ZWMoKTsKKyAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMTG9uZz4obG9uZ1BhcmFtKSk7Ci0g
ICAgYXJncy5hcHBlbmQodG9KUzxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PihzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB0ZXN0Tm9kZVBhcmFtKSk7CisgICAgYXJncy5hcHBlbmQodG9KUzxJRExJbnRlcmZh
Y2U8VGVzdE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHRlc3ROb2Rl
UGFyYW0pKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAogICAgIE5ha2Vk
UHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBtX2RhdGEtPmludm9r
ZUNhbGxiYWNrKHRoaXNWYWx1ZSwgYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tSZXF1aXJlc1RoaXNU
b1Bhc3MiKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikg
ewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7Cisg
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgcmV0dXJuZWRFeGNl
cHRpb24pOwogICAgICAgICByZXR1cm4gQ2FsbGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJv
d247CiAgICAgIH0KIApAQCAtMzQ2LDcgKzM0Niw3IEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1l
IElETERPTVN0cmluZzo6SW1wbGVtZW50YXRpb25UeXBlPiBKU1Rlc3RDYWxsYmFja0ludGVyZmFj
CiAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKIAogICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QuZ2xvYmFsRXhlYygpOwor
ICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7CkBAIC0zNTQsMTIgKzM1NCwx
MiBAQCBDYWxsYmFja1Jlc3VsdDx0eXBlbmFtZSBJRExET01TdHJpbmc6OkltcGxlbWVudGF0aW9u
VHlwZT4gSlNUZXN0Q2FsbGJhY2tJbnRlcmZhYwogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9u
PiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBhdXRvIGpzUmVzdWx0ID0gbV9kYXRhLT5pbnZva2VD
YWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbGxiYWNrV2l0aEFSZXR1cm5WYWx1
ZSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7Ci0g
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICAg
ICAgcmVwb3J0RXhjZXB0aW9uKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXR1cm5lZEV4Y2VwdGlv
bik7CiAgICAgICAgIHJldHVybiBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bjsK
ICAgICAgfQogCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byByZXR1cm5WYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwganNS
ZXN1bHQpOworICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwganNSZXN1bHQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgQ2FsbGJhY2tSZXN1bHRUeXBlOjpFeGNlcHRpb25UaHJvd24pOwogICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKIH0KQEAgLTM3NSwyMiArMzc1LDIyIEBAIENhbGxiYWNrUmVzdWx0PHR5
cGVuYW1lIElETERPTVN0cmluZzo6SW1wbGVtZW50YXRpb25UeXBlPiBKU1Rlc3RDYWxsYmFja0lu
dGVyZmFjCiAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKIAogICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QuZ2xvYmFsRXhl
YygpOworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0Q2FsbGJh
Y2tJbnRlcmZhY2U6OkVudW0+PihzdGF0ZSwgZW51bVBhcmFtKSk7CisgICAgYXJncy5hcHBlbmQo
dG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkVudW0+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBlbnVtUGFyYW0pKTsKICAgICBBU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dl
ZCgpKTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsK
ICAgICBhdXRvIGpzUmVzdWx0ID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFy
Z3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6Ok9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImNhbGxiYWNrVGhhdFJldGhyb3dzRXhjZXB0aW9ucyIpLCByZXR1cm5lZEV4
Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHRocm93U2NvcGUsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICAgICAgdGhyb3dF
eGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHJldHVybmVkRXhjZXB0
aW9uKTsKICAgICAgICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3du
OwogICAgICB9CiAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvIHJldHVyblZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCBq
c1Jlc3VsdCk7CisgICAgYXV0byByZXR1cm5WYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBqc1Jlc3VsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBDYWxsYmFja1Jlc3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bik7CiAgICAgcmV0
dXJuIHJldHVyblZhbHVlOwogfQpAQCAtNDAzLDIxICs0MDMsMjEgQEAgQ2FsbGJhY2tSZXN1bHQ8
dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJbXBsZW1lbnRhdGlvblR5cGU+IEpTVGVzdENhbGxiYWNr
SW50ZXJmYWMKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC52bSgpOwogCiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdC5nbG9iYWxF
eGVjKCk7CisgICAgYXV0byYgbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTPElETERpY3Rpb25hcnk8VGVzdENhbGxi
YWNrSW50ZXJmYWNlOjpEaWN0aW9uYXJ5Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFy
eVBhcmFtKSk7CisgICAgYXJncy5hcHBlbmQodG9KUzxJRExEaWN0aW9uYXJ5PFRlc3RDYWxsYmFj
a0ludGVyZmFjZTo6RGljdGlvbmFyeT4+KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgZGljdGlvbmFyeVBhcmFtKSk7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJmbG93ZWQoKSk7
CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247CiAgICAg
YXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVlLCBhcmdzLCBK
U0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJjYWxsYmFja1RoYXRTa2lwc0ludm9rZUNoZWNrIiksIHJldHVybmVkRXhjZXB0aW9u
KTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKLSAgICAgICAgcmVwb3J0RXhjZXB0aW9u
KCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24oJmxl
eGljYWxHbG9iYWxPYmplY3QsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIENh
bGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3duOwogICAgICB9CiAKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHJldHVyblZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCBqc1Jlc3VsdCk7CisgICAgYXV0byByZXR1
cm5WYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBqc1Jl
c3VsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBDYWxsYmFja1Jlc3Vs
dFR5cGU6OkV4Y2VwdGlvblRocm93bik7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQpAQCAt
NDMzLDIxICs0MzMsMjEgQEAgQ2FsbGJhY2tSZXN1bHQ8dHlwZW5hbWUgSURMRE9NU3RyaW5nOjpJ
bXBsZW1lbnRhdGlvblR5cGU+IEpTVGVzdENhbGxiYWNrSW50ZXJmYWMKICAgICBhdXRvJiB2bSA9
IGdsb2JhbE9iamVjdC52bSgpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1
dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdC5nbG9iYWxFeGVjKCk7Ci0gICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSB0b0pTPElETEludGVyZmFjZTxUZXN0Tm9kZT4+KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QpOworICAgIGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmpl
Y3Q7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSB0b0pTPElETEludGVyZmFjZTxUZXN0Tm9kZT4+
KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh0b0pTPElETEludGVyZmFj
ZTxUZXN0T2JqPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdGVzdE9ialBhcmFtKSk7CisgICAgYXJn
cy5hcHBlbmQodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgdGVzdE9ialBhcmFtKSk7CiAgICAgQVNTRVJUKCFhcmdzLmhhc092ZXJm
bG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRp
b247CiAgICAgYXV0byBqc1Jlc3VsdCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2sodGhpc1ZhbHVl
LCBhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJjYWxsYmFja1dpdGhUaGlzT2JqZWN0IiksIHJldHVybmVkRXhjZXB0
aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKLSAgICAgICAgcmVwb3J0RXhjZXB0
aW9uKCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRFeGNlcHRpb24o
JmxleGljYWxHbG9iYWxPYmplY3QsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJu
IENhbGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3duOwogICAgICB9CiAKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHJldHVyblZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCBqc1Jlc3VsdCk7CisgICAgYXV0byBy
ZXR1cm5WYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBq
c1Jlc3VsdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBDYWxsYmFja1Jl
c3VsdFR5cGU6OkV4Y2VwdGlvblRocm93bik7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxiYWNrSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UuaAppbmRleCBjN2YzNGRhZjNhMjNhNTYwMzEx
YTY3ZjI5NThhNzgwZDViYTk3MTliLi41NjU3MjI4ODc3Njc5NzU3OTdkODViZDgxY2EwNjg4YmUx
Yzk2MTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UuaApAQCAtNjcsMTIgKzY3
LDEyIEBAIEpTQzo6SlNWYWx1ZSB0b0pTKFRlc3RDYWxsYmFja0ludGVyZmFjZSYpOwogaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKFRlc3RDYWxsYmFja0ludGVyZmFjZSogaW1wbCkgeyByZXR1cm4g
aW1wbCA/IHRvSlMoKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQogCiBTdHJpbmcgY29udmVydEVu
dW1lcmF0aW9uVG9TdHJpbmcoVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpFbnVtKTsKLXRlbXBsYXRl
PD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IFRlc3RDYWxsYmFja0ludGVyZmFjZTo6RW51bSk7Cit0ZW1wbGF0ZTw+IEpTQzo6SlNTdHJpbmcq
IGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFRlc3RDYWxsYmFj
a0ludGVyZmFjZTo6RW51bSk7CiAKLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdENhbGxiYWNrSW50
ZXJmYWNlOjpFbnVtPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RDYWxsYmFja0ludGVyZmFjZTo6RW51
bT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBPcHRpb25hbDxU
ZXN0Q2FsbGJhY2tJbnRlcmZhY2U6OkVudW0+IHBhcnNlRW51bWVyYXRpb248VGVzdENhbGxiYWNr
SW50ZXJmYWNlOjpFbnVtPihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKIHRl
bXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0Q2FsbGJh
Y2tJbnRlcmZhY2U6OkVudW0+KCk7CiAKLXRlbXBsYXRlPD4gVGVzdENhbGxiYWNrSW50ZXJmYWNl
OjpEaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RDYWxsYmFja0ludGVyZmFjZTo6RGlj
dGlvbmFyeT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBUZXN0
Q2FsbGJhY2tJbnRlcmZhY2U6OkRpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdENhbGxi
YWNrSW50ZXJmYWNlOjpEaWN0aW9uYXJ5PihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1Zh
bHVlKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAppbmRleCBmYmY4MjdmN2Y1M2Iy
NTkxZGNjNDAyNjQzODA3MzM2MWVjN2VkYTljLi5kZjRhYzc2MjRlYjI5NmM5MTA4MjY0ZmRmOGRj
Mzc1N2ZkZWIyMDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTQxLDggKzQxLDggQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKIAogY2xhc3MgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUg
OiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0MywyMyArMTQz
LDIzIEBAIHZvaWQgSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3ko
SlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3I6On5KU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
cHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93
Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IKQEAgLTE5OSw3ICsxOTksNyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dl
YkNvcmUzM1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckVbXTsgfQogI2VuZGlmCiAj
ZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxF
KEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtMjIzLDkgKzIyMyw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwKICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3I+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yJiBpbXBsKQorSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yJiBpbXBsKQogewotICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwp
OworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1w
bCk7CiB9CiAKIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogSlNUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3I6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3IuaAppbmRleCBjYmE4MjM5ODdlY2U0OGJhYzkxZmJlYjI0MTVlZTkwYjBkYTFmNTU3
Li4yNzAzNWU3Yjk4YjNlMjIwMDBiYzExM2UwMzdhNGFjNzMzZDk3ZWM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaApAQCAtNzMsMTAg
KzczLDEwIEBAIGlubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvciogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7
CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3ImKTsKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwo
KTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFJlZjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYp
OwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5
Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlND
Ojpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yJik7Citp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0
cjxUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3I+JiYgaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
bXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RE9NSklULmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCmluZGV4IDkxMjllZWQ0NjZiY2I0YjU5
ZDUwNjc0ZTczYjIzYWM3ZGRhZjk3ZjEuLmNjNTQ2YTlmZWEyMzYyN2FiNzY0OTczMGM4MDEwNzUx
ZjdkM2Y2MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RET01KSVQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCkBAIC01Niw1NSArNTYsNTUgQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIC8vIEZ1bmN0aW9ucwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04ganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVXaXRob3V0
VHlwZUNoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0RE9NSklUKiwgRE9NSklUOjpJRExKU0Fy
Z3VtZW50VHlwZTxJRExET01TdHJpbmc+KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZVdpdGhvdXRUeXBl
Q2hlY2soSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTVGVzdERPTUpJVCosIERPTUpJVDo6SURMSlNB
cmd1bWVudFR5cGU8SURMRE9NU3RyaW5nPik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkNhbGxGcmFtZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbVdpdGhvdXRUeXBlQ2hlY2soSlNDOjpF
eGVjU3RhdGUqLCBKU1Rlc3RET01KSVQqLCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVu
c2lnbmVkU2hvcnQ+LCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVkU2hvcnQ+
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBqc1Rlc3RET01KSVRQcm90b3R5
cGVGdW5jdGlvbkl0ZW1XaXRob3V0VHlwZUNoZWNrKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU1Rl
c3RET01KSVQqLCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVkU2hvcnQ+LCBE
T01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVkU2hvcnQ+KTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0
dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhh
c0F0dHJpYnV0ZVdpdGhvdXRUeXBlQ2hlY2soSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RET01KSVQq
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBqc1Rlc3RET01KSVRQcm90b3R5
cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZVdpdGhvdXRUeXBlQ2hlY2soSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTVGVzdERPTUpJVCopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6Q2FsbEZyYW1lKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04ganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZFdpdGhvdXRUeXBl
Q2hlY2soSlNDOjpFeGVjU3RhdGUqLCBKU1Rlc3RET01KSVQqLCBET01KSVQ6OklETEpTQXJndW1l
bnRUeXBlPElETFJlcXVpcmVzRXhpc3RpbmdBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+
Pik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04ganNUZXN0RE9NSklUUHJvdG90
eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZFdpdGhvdXRUeXBlQ2hlY2soSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTVGVzdERPTUpJVCosIERPTUpJVDo6SURMSlNBcmd1bWVudFR5cGU8SURMUmVxdWly
ZXNFeGlzdGluZ0F0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVs
ZW1lbnRzQnlOYW1lKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0
aW9uR2V0RWxlbWVudHNCeU5hbWVXaXRob3V0VHlwZUNoZWNrKEpTQzo6RXhlY1N0YXRlKiwgSlNU
ZXN0RE9NSklUKiwgRE9NSklUOjpJRExKU0FyZ3VtZW50VHlwZTxJRExBdG9tU3RyaW5nQWRhcHRv
cjxJRExET01TdHJpbmc+Pik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04ganNU
ZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZVdpdGhvdXRUeXBlQ2hl
Y2soSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTVGVzdERPTUpJVCosIERPTUpJVDo6SURMSlNBcmd1
bWVudFR5cGU8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4pOwogCiAvLyBBdHRy
aWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVEFueUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xl
YW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUT2N0ZXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJ
VFVuc2lnbmVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25n
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRVbnJlc3RyaWN0ZWRGbG9hdEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVERvdWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVz
dHJpY3RlZERvdWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0
cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdBdHRy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVROb2RlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklUT2N0ZXROdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFNo
b3J0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25l
ZFNob3J0TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25n
TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExv
bmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25n
TnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExv
bmdMb25nTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9h
dE51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmlj
dGVkRmxvYXROdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERv
dWJsZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0
cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01K
SVREb21TdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJ
VEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJ
VFVzdlN0cmluZ051bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklU
Tm9kZU51bGxhYmxlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVEJ5dGVBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVE9jdGV0QXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9y
dEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9y
dEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0F0dHIoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0cihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ0F0dHIoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXRBdHRyKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0QXR0cihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVBdHRyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHIoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURG9tU3RyaW5nQXR0cihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVE5vZGVBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVEJvb2xlYW5OdWxsYWJsZUF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRPY3RldE51bGxhYmxlQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRTaG9ydE51bGxhYmxlQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25nTnVsbGFibGVBdHRyKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdOdWxsYWJsZUF0dHIoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHIoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXROdWxs
YWJsZUF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlTnVs
bGFibGVBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJp
Y3RlZERvdWJsZU51bGxhYmxlQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVREb21TdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdOdWxsYWJsZUF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBzdGF0aWMgY29uc3Qg
SlNDOjpET01KSVQ6OlNpZ25hdHVyZSBET01KSVRTaWduYXR1cmVGb3JUZXN0RE9NSklUR2V0QXR0
cmlidXRlKGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlV2l0aG91dFR5
cGVDaGVjaywgSlNUZXN0RE9NSklUOjppbmZvKCksIEpTQzo6RE9NSklUOjpFZmZlY3Q6OmZvclJl
YWQoRE9NSklUOjpBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpET00pLCBET01KSVQ6OklETFJlc3Vs
dFR5cGVGaWx0ZXI8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj46OnZhbHVlLCBET01KSVQ6OklE
TEFyZ3VtZW50VHlwZUZpbHRlcjxJRExET01TdHJpbmc+Ojp2YWx1ZSk7CiAKQEAgLTU5Myw2ODAg
KzU5Myw2ODUgQEAgSlNWYWx1ZSBKU1Rlc3RET01KSVQ6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwg
Y29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0RE9NSklUQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpT
VGVzdERPTUpJVCogSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmNhc3QoRXhlY1N0YXRlJiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0
RE9NSklUKiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdERPTUpJVCo+KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RET01KSVQq
PihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RET01KSVQqIElETE9wZXJhdGlv
bjxKU1Rlc3RET01KSVQ+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlubGlu
ZSBKU1Rlc3RET01KSVQqIElETE9wZXJhdGlvbjxKU1Rlc3RET01KSVQ+OjpjYXN0KEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAg
ICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RET01KSVQqPihzdGF0ZS52bSgpLCBzdGF0ZS50
aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RE9NSklUKj4oSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RET01KSVRQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
cHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RE9NSklUOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdERPTUpJVDo6Z2V0Q29uc3RydWN0
b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmpl
Y3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdERPTUpJVENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorYm9vbCBzZXRKU1Rlc3RET01KSVRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdERPTUpJVFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJu
IHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUQW55QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01K
SVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUQW55QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETEFueT4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYW55QXR0cigpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmFueUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0RE9NSklUQW55QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEFueUF0dHIo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9N
SklUPjo6Z2V0PGpzVGVzdERPTUpJVEFueUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAi
YW55QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpz
VGVzdERPTUpJVEFueUF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
ICJhbnlBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCb29s
ZWFuQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUQm9vbGVhbkF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCb29sZWFu
PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5ib29sZWFuQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5ib29sZWFuQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJ
VEJvb2xlYW5BdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRCb29sZWFuQXR0ckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJib29sZWFuQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiYm9vbGVhbkF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETEJ5dGU+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmJ5dGVBdHRyKCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExCeXRlPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmJ5dGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUQnl0ZUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVEJ5dGVBdHRyR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUQnl0ZUF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJieXRlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExPY3RldD4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwub2N0ZXRBdHRyKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5vY3RldEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0RE9NSklUT2N0ZXRBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRPY3RldEF0dHJHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAib2N0ZXRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUT2N0ZXRBdHRyR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAib2N0ZXRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFNob3J0QXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETFNob3J0PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5zaG9ydEF0dHIo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFNob3J0PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNob3J0QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRTaG9ydEF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVFNob3J0QXR0ckdl
dHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJzaG9ydEF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRTaG9ydEF0dHJHZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzaG9ydEF0dHIiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0QXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklU
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuc2lnbmVkU2hvcnQ+KHN0YXRl
LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2lnbmVkU2hvcnRBdHRyKCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExVbnNpZ25lZFNob3J0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLnVuc2lnbmVkU2hvcnRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJ
VFVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkU2hv
cnRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNU
ZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9N
SklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVExvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwubG9uZ0F0dHIoKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwubG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0RE9NSklUTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRM
b25nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUTG9uZ0F0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCAibG9uZ0F0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJ
VD46OmdldDxqc1Rlc3RET01KSVRMb25nQXR0ckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgImxvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RET01KSVRVbnNpZ25lZExvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERP
TUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMVW5zaWduZWRMb25nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC51bnNp
Z25lZExvbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVbnNpZ25lZExv
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nQXR0
cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01K
SVRVbnNpZ25lZExvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRM
b25nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0ckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZExvbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5zaWduZWRMb25nQXR0ckdldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0F0dHIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdMb25nQXR0ckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdB
dHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01K
SVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZ0xvbmc+KHN0YXRlLCB0
aHJvd1Njb3BlLCBpbXBsLmxvbmdMb25nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubG9u
Z0xvbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdM
b25nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUTG9uZ0xvbmdBdHRyR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgImxvbmdMb25nQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVExvbmdMb25nQXR0ckdldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImxvbmdMb25nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdB
dHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01K
SVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4o
c3RhdGUsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9u
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0cihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01K
SVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0ckdl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdB
dHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9hdEF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0
QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9N
SklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEZsb2F0PihzdGF0ZSwgdGhy
b3dTY29wZSwgaW1wbC5mbG9hdEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TEZsb2F0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZsb2F0QXR0cigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRG
bG9hdEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9hdEF0dHIoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0
PGpzVGVzdERPTUpJVEZsb2F0QXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJmbG9hdEF0
dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RE
T01KSVRGbG9hdEF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJm
bG9hdEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVz
dHJpY3RlZEZsb2F0QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMVW5yZXN0cmljdGVkRmxvYXQ+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnVu
cmVzdHJpY3RlZEZsb2F0QXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5y
ZXN0cmljdGVkRmxvYXRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0QXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0QXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklU
VW5yZXN0cmljdGVkRmxvYXRBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVucmVzdHJp
Y3RlZEZsb2F0QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6
Z2V0PGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0QXR0ckdldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgInVucmVzdHJpY3RlZEZsb2F0QXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERvdWJsZT4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwu
ZG91YmxlQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRG91YmxlPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmRvdWJsZUF0dHIoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERvdWJsZUF0dHIoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERP
TUpJVERvdWJsZUF0dHJHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZG91YmxlQXR0ciIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVERv
dWJsZUF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJkb3VibGVB
dHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0
ZWREb3VibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC51bnJl
c3RyaWN0ZWREb3VibGVBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVbnJl
c3RyaWN0ZWREb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5y
ZXN0cmljdGVkRG91YmxlQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlQXR0cihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9N
SklUVW5yZXN0cmljdGVkRG91YmxlQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bnJl
c3RyaWN0ZWREb3VibGVBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01K
SVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlQXR0ckdldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInVucmVzdHJpY3RlZERvdWJsZUF0dHIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ0F0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERPTUpJ
VCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0
aHJvd1Njb3BlLCBpbXBsLmRvbVN0cmluZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5k
b21TdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVERvbVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRE
b21TdHJpbmdBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVREb21TdHJpbmdBdHRyR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgImRvbVN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVREb21TdHJpbmdBdHRyR2V0dGVyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZG9tU3RyaW5nQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdBdHRy
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01KSVQm
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQnl0ZVN0cmluZz4oc3RhdGUsIHRo
cm93U2NvcGUsIGltcGwuYnl0ZVN0cmluZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETEJ5dGVTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
Ynl0ZVN0cmluZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01K
SVRCeXRlU3RyaW5nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0dHJHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYnl0ZVN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0ckdl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImJ5dGVTdHJpbmdBdHRyIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJp
bmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RE
T01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVVNWU3RyaW5nPihzdGF0
ZSwgdGhyb3dTY29wZSwgaW1wbC51c3ZTdHJpbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwudXN2U3RyaW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklUVXN2U3RyaW5nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVXN2U3RyaW5nQXR0ckdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1c3ZTdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVXN2U3RyaW5nQXR0ckdldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInVzdlN0cmluZ0F0dHIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVROb2RlQXR0ckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklUJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxOb2RlPj4oc3RhdGUsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5vZGVBdHRyKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxP
YmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm5vZGVB
dHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVE5vZGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0dHIoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6
Z2V0PGpzVGVzdERPTUpJVE5vZGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm5vZGVB
dHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0
RE9NSklUTm9kZUF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJu
b2RlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQm9vbGVh
bk51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklUQm9vbGVhbk51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETE51bGxhYmxlPElETEJvb2xlYW4+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5ib29s
ZWFuTnVsbGFibGVBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJs
ZTxJRExCb29sZWFuPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ib29s
ZWFuTnVsbGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVEJvb2xlYW5OdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRCb29sZWFu
TnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImJvb2xlYW5OdWxsYWJsZUF0
dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RE
T01KSVRCb29sZWFuTnVsbGFibGVBdHRyR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiYm9vbGVhbk51bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0ckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETEJ5dGU+PihzdGF0ZSwgdGhyb3dTY29w
ZSwgaW1wbC5ieXRlTnVsbGFibGVBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExOdWxsYWJsZTxJRExCeXRlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5ieXRlTnVsbGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVEJ5dGVOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRCeXRlTnVsbGFibGVBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRCeXRlTnVsbGFi
bGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVOdWxsYWJsZUF0dHIiKTsKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRCeXRl
TnVsbGFibGVBdHRyR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiYnl0
ZU51bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
T2N0ZXROdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMTnVsbGFibGU8SURMT2N0ZXQ+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5vY3Rl
dE51bGxhYmxlQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8
SURMT2N0ZXQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm9jdGV0TnVs
bGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklU
T2N0ZXROdWxsYWJsZUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRy
R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIm9jdGV0TnVsbGFibGVBdHRyIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUT2N0ZXROdWxs
YWJsZUF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJvY3RldE51
bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUU2hv
cnROdWxsYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVFNob3J0TnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTnVsbGFibGU8SURMU2hvcnQ+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5zaG9ydE51
bGxhYmxlQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURM
U2hvcnQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNob3J0TnVsbGFi
bGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVFNob3J0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUU2hv
cnROdWxsYWJsZUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVFNob3J0TnVsbGFibGVBdHRyR2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInNob3J0TnVsbGFibGVBdHRyIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUU2hvcnROdWxsYWJs
ZUF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzaG9ydE51bGxh
YmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWdu
ZWRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQm
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETFVuc2lnbmVkU2hvcnQ+PihzdGF0ZSwgdGhy
b3dTY29wZSwgaW1wbC51bnNpZ25lZFNob3J0TnVsbGFibGVBdHRyKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExVbnNpZ25lZFNob3J0Pj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZFNob3J0TnVsbGFibGVBdHRyKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2ln
bmVkU2hvcnROdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25l
ZFNob3J0TnVsbGFibGVBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0TnVs
bGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkU2hvcnROdWxsYWJs
ZUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rl
c3RET01KSVRVbnNpZ25lZFNob3J0TnVsbGFibGVBdHRyR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCAidW5zaWduZWRTaG9ydE51bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0ckdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ051bGxhYmxlQXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklU
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETExvbmc+Pihz
dGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5sb25nTnVsbGFibGVBdHRyKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5sb25nTnVsbGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nTnVsbGFibGVBdHRyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RE
T01KSVRMb25nTnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdOdWxs
YWJsZUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxq
c1Rlc3RET01KSVRMb25nTnVsbGFibGVBdHRyR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCAibG9uZ051bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERPTUpJ
VCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExVbnNpZ25l
ZExvbmc+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZExvbmdOdWxsYWJsZUF0dHIo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETFVuc2lnbmVkTG9u
Zz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTnVs
bGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5z
aWduZWRMb25nTnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVk
TG9uZ051bGxhYmxlQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklU
Pjo6Z2V0PGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ051bGxhYmxlQXR0ckdldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ051bGxhYmxlQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJsZUF0
dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExv
bmdMb25nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVs
bGFibGU8SURMTG9uZ0xvbmc+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5sb25nTG9uZ051bGxh
YmxlQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMTG9u
Z0xvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdMb25nTnVs
bGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVExvbmdMb25nTnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklUTG9uZ0xvbmdOdWxsYWJsZUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVExvbmdMb25nTnVs
bGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImxvbmdMb25nTnVsbGFibGVBdHRy
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9N
SklUTG9uZ0xvbmdOdWxsYWJsZUF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsICJsb25nTG9uZ051bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTG9uZ051
bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElE
TFVuc2lnbmVkTG9uZ0xvbmc+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZExvbmdM
b25nTnVsbGFibGVBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJs
ZTxJRExVbnNpZ25lZExvbmdMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC51bnNpZ25lZExvbmdMb25nTnVsbGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdOdWxsYWJs
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nTnVsbGFi
bGVBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nTnVsbGFibGVBdHRy
R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdOdWxsYWJsZUF0dHIi
KTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01K
SVRVbnNpZ25lZExvbmdMb25nTnVsbGFibGVBdHRyR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAidW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVB
dHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01K
SVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMRmxvYXQ+
PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5mbG9hdE51bGxhYmxlQXR0cigpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMRmxvYXQ+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZsb2F0TnVsbGFibGVBdHRyKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHIoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0
PGpzVGVzdERPTUpJVEZsb2F0TnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
ImZsb2F0TnVsbGFibGVBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01K
SVQ+OjpnZXQ8anNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmbG9hdE51bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVz
dHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMTnVsbGFibGU8SURMVW5yZXN0cmljdGVkRmxvYXQ+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1w
bC51bnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMTnVsbGFibGU8SURMVW5yZXN0cmljdGVkRmxvYXQ+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVucmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVz
dHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUVW5y
ZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVFVucmVzdHJp
Y3RlZEZsb2F0TnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVucmVzdHJp
Y3RlZEZsb2F0TnVsbGFibGVBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RE
T01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHJHZXR0
ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ1bnJlc3RyaWN0ZWRGbG9hdE51
bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91
YmxlTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RET01KSVREb3VibGVOdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExOdWxsYWJsZTxJRExEb3VibGU+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5kb3Vi
bGVOdWxsYWJsZUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxl
PElETERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZG91Ymxl
TnVsbGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdERPTUpJVERvdWJsZU51bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVERvdWJsZU51bGxhYmxlQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklURG91YmxlTnVsbGFi
bGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImRvdWJsZU51bGxhYmxlQXR0ciIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVzdERPTUpJVERv
dWJsZU51bGxhYmxlQXR0ckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ImRvdWJsZU51bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVOdWxsYWJs
ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdERP
TUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExVbnJl
c3RyaWN0ZWREb3VibGU+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC51bnJlc3RyaWN0ZWREb3Vi
bGVOdWxsYWJsZUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxl
PElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwudW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZU51
bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJs
ZU51bGxhYmxlQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVs
bGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVucmVzdHJpY3RlZERvdWJsZU51
bGxhYmxlQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0
PGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0ckdldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInVucmVzdHJpY3RlZERvdWJsZU51bGxhYmxlQXR0
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG9tU3RyaW5nTnVs
bGFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RE
T01KSVREb21TdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5kb21T
dHJpbmdOdWxsYWJsZUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxh
YmxlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
ZG9tU3RyaW5nTnVsbGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxlQXR0cihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9N
SklURG9tU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImRvbVN0
cmluZ051bGxhYmxlQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklU
Pjo6Z2V0PGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxlQXR0ckdldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImRvbVN0cmluZ051bGxhYmxlQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0ckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0
cmluZ051bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0RE9NSklUJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxh
YmxlPElETEJ5dGVTdHJpbmc+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5ieXRlU3RyaW5nTnVs
bGFibGVBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExC
eXRlU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ieXRlU3Ry
aW5nTnVsbGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVEJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46OmdldDxqc1Rlc3RET01KSVRC
eXRlU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImJ5dGVTdHJp
bmdOdWxsYWJsZUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46
OmdldDxqc1Rlc3RET01KSVRCeXRlU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiYnl0ZVN0cmluZ051bGxhYmxlQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJp
bmdOdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdERPTUpJVCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJs
ZTxJRExVU1ZTdHJpbmc+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC51c3ZTdHJpbmdOdWxsYWJs
ZUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETFVTVlN0
cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudXN2U3RyaW5nTnVs
bGFibGVBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdERPTUpJVFVzdlN0cmluZ051bGxhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdERP
TUpJVFVzdlN0cmluZ051bGxhYmxlQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RET01KSVQ+OjpnZXQ8anNUZXN0RE9NSklUVXN2U3RyaW5n
TnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVzdlN0cmluZ051bGxhYmxl
QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RE9NSklUPjo6Z2V0PGpzVGVz
dERPTUpJVFVzdlN0cmluZ051bGxhYmxlQXR0ckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgInVzdlN0cmluZ051bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RET01KSVQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0ckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RE9NSklUJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxOb2RlPj4+
KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2Rl
TnVsbGFibGVBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJ
RExJbnRlcmZhY2U8Tm9kZT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2RlTnVsbGFibGVBdHRyKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVOdWxsYWJs
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVROb2RlTnVsbGFibGVBdHRyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERPTUpJVD46
OmdldDxqc1Rlc3RET01KSVROb2RlTnVsbGFibGVBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgIm5vZGVOdWxsYWJsZUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdERP
TUpJVD46OmdldDxqc1Rlc3RET01KSVROb2RlTnVsbGFibGVBdHRyR2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAibm9kZU51bGxhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25H
ZXRBdHRyaWJ1dGVCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTVGVzdERPTUpJVD46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJpYnV0ZUJvZHkoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdERPTUpJVD46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAg
IGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOworICAgIGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKnN0YXRl
LCBpbXBsLmdldEF0dHJpYnV0ZShXVEZNb3ZlKG5hbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgaW1wbC5nZXRBdHRyaWJ1dGUoV1RGTW92ZShuYW1lKSkpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdl
dEF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RET01KSVQ+OjpjYWxsPGpzVGVzdERPTUpJVFByb3RvdHlw
ZUZ1bmN0aW9uR2V0QXR0cmlidXRlQm9keT4oKnN0YXRlLCAiZ2V0QXR0cmlidXRlIik7CisgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RET01KSVQ+OjpjYWxsPGpzVGVzdERPTUpJVFByb3Rv
dHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJnZXRBdHRyaWJ1dGUiKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0QXR0cmlidXRlV2l0aG91dFR5
cGVDaGVjayhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywg
RE9NSklUOjpJRExKU0FyZ3VtZW50VHlwZTxJRExET01TdHJpbmc+IGVuY29kZWROYW1lKQorSlND
OjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0
aW9uR2V0QXR0cmlidXRlV2l0aG91dFR5cGVDaGVjayhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01KSVQqIGNhc3RlZFRoaXMsIERPTUpJVDo6SURMSlNB
cmd1bWVudFR5cGU8SURMRE9NU3RyaW5nPiBlbmNvZGVkTmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYW1lID0gRE9NSklUOjpEaXJlY3RDb252ZXJ0ZXI8SURMRE9NU3RyaW5n
Pjo6ZGlyZWN0Q29udmVydCgqc3RhdGUsIGVuY29kZWROYW1lKTsKKyAgICBhdXRvIG5hbWUgPSBE
T01KSVQ6OkRpcmVjdENvbnZlcnRlcjxJRExET01TdHJpbmc+OjpkaXJlY3RDb252ZXJ0KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBlbmNvZGVkTmFtZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBpbXBsLmdldEF0dHJpYnV0
ZShXVEZNb3ZlKG5hbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExO
dWxsYWJsZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5nZXRBdHRy
aWJ1dGUoV1RGTW92ZShuYW1lKSkpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbUJvZHkoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0RE9NSklUPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRl
bUJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdERPTUpJVD46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8geCA9IGNvbnZlcnQ8SURMVW5zaWduZWRTaG9ydD4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHggPSBjb252ZXJ0PElE
TFVuc2lnbmVkU2hvcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8geSA9IGNvbnZlcnQ8SURMVW5zaWduZWRTaG9ydD4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8geSA9IGNvbnZlcnQ8
SURMVW5zaWduZWRTaG9ydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0
cmluZz4oKnN0YXRlLCBpbXBsLml0ZW0oV1RGTW92ZSh4KSwgV1RGTW92ZSh5KSkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgaW1wbC5pdGVtKFdURk1vdmUoeCksIFdURk1vdmUoeSkpKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RET01KSVQ+OjpjYWxsPGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSXRlbUJv
ZHk+KCpzdGF0ZSwgIml0ZW0iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdERPTUpJ
VD46OmNhbGw8anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25JdGVtQm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJpdGVtIik7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW1XaXRob3V0
VHlwZUNoZWNrKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlz
LCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVkU2hvcnQ+IGVuY29kZWRYLCBE
T01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFVuc2lnbmVkU2hvcnQ+IGVuY29kZWRZKQorSlND
OjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0
aW9uSXRlbVdpdGhvdXRUeXBlQ2hlY2soSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBET01KSVQ6OklETEpTQXJndW1lbnRU
eXBlPElETFVuc2lnbmVkU2hvcnQ+IGVuY29kZWRYLCBET01KSVQ6OklETEpTQXJndW1lbnRUeXBl
PElETFVuc2lnbmVkU2hvcnQ+IGVuY29kZWRZKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpTQzo6
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIHggPSBET01KSVQ6OkRpcmVjdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0Pjo6ZGlyZWN0
Q29udmVydCgqc3RhdGUsIGVuY29kZWRYKTsKKyAgICBhdXRvIHggPSBET01KSVQ6OkRpcmVjdENv
bnZlcnRlcjxJRExVbnNpZ25lZFNob3J0Pjo6ZGlyZWN0Q29udmVydCgqbGV4aWNhbEdsb2JhbE9i
amVjdCwgZW5jb2RlZFgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byB5ID0gRE9NSklUOjpEaXJlY3RDb252ZXJ0ZXI8SURM
VW5zaWduZWRTaG9ydD46OmRpcmVjdENvbnZlcnQoKnN0YXRlLCBlbmNvZGVkWSk7CisgICAgYXV0
byB5ID0gRE9NSklUOjpEaXJlY3RDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD46OmRpcmVjdENv
bnZlcnQoKmxleGljYWxHbG9iYWxPYmplY3QsIGVuY29kZWRZKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5pdGVtKFdURk1vdmUoeCks
IFdURk1vdmUoeSkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaXRlbShXVEZNb3ZlKHgpLCBXVEZNb3Zl
KHkpKSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9N
SklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1dGVCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdERPTUpJVD46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0
ZUJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdERPTUpJVD46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC5oYXNBdHRyaWJ1
dGUoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFBy
b3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERP
TUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdERPTUpJVD46OmNh
bGw8anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1dGVCb2R5Pigqc3RhdGUs
ICJoYXNBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdERPTUpJVD46
OmNhbGw8anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25IYXNBdHRyaWJ1dGVCb2R5PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImhhc0F0dHJpYnV0ZSIpOwogfQogCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04ganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rp
b25IYXNBdHRyaWJ1dGVXaXRob3V0VHlwZUNoZWNrKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0RE9NSklUKiBjYXN0ZWRUaGlzKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlV2l0aG91dFR5cGVDaGVj
ayhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RET01KSVQq
IGNhc3RlZFRoaXMpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKLSAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExCb29sZWFuPihpbXBsLmhhc0F0dHJpYnV0ZSgpKSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlv
bkdldEVsZW1lbnRCeUlkQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RET01KSVQ+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZEJvZHkoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdERPTUpJVD46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwotICAgIGF1dG8gZWxlbWVudElkID0gY29udmVydDxJRExSZXF1aXJlc0V4aXN0aW5nQXRvbVN0
cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKKyAgICBhdXRvIGVsZW1lbnRJZCA9IGNvbnZlcnQ8SURMUmVxdWlyZXNFeGlzdGluZ0F0b21T
dHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExJbnRlcmZhY2U8RWxlbWVudD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLmdldEVsZW1lbnRCeUlkKFdURk1vdmUoZWxlbWVudElkKSkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPEVsZW1lbnQ+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRC
eUlkKFdURk1vdmUoZWxlbWVudElkKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWQo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0RE9NSklUPjo6Y2FsbDxqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdl
dEVsZW1lbnRCeUlkQm9keT4oKnN0YXRlLCAiZ2V0RWxlbWVudEJ5SWQiKTsKKyAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdERPTUpJVD46OmNhbGw8anNUZXN0RE9NSklUUHJvdG90eXBlRnVu
Y3Rpb25HZXRFbGVtZW50QnlJZEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAiZ2V0RWxlbWVudEJ5SWQiKTsKIH0KIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRXaXRob3V0VHlw
ZUNoZWNrKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RE9NSklUKiBjYXN0ZWRUaGlzLCBE
T01KSVQ6OklETEpTQXJndW1lbnRUeXBlPElETFJlcXVpcmVzRXhpc3RpbmdBdG9tU3RyaW5nQWRh
cHRvcjxJRExET01TdHJpbmc+PiBlbmNvZGVkRWxlbWVudElkKQorSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5
SWRXaXRob3V0VHlwZUNoZWNrKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywgRE9NSklUOjpJRExKU0FyZ3VtZW50VHlwZTxJ
RExSZXF1aXJlc0V4aXN0aW5nQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4gZW5jb2Rl
ZEVsZW1lbnRJZCkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKU0M6Ok5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBlbGVtZW50SWQgPSBE
T01KSVQ6OkRpcmVjdENvbnZlcnRlcjxJRExSZXF1aXJlc0V4aXN0aW5nQXRvbVN0cmluZ0FkYXB0
b3I8SURMRE9NU3RyaW5nPj46OmRpcmVjdENvbnZlcnQoKnN0YXRlLCBlbmNvZGVkRWxlbWVudElk
KTsKKyAgICBhdXRvIGVsZW1lbnRJZCA9IERPTUpJVDo6RGlyZWN0Q29udmVydGVyPElETFJlcXVp
cmVzRXhpc3RpbmdBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+Pjo6ZGlyZWN0Q29udmVy
dCgqbGV4aWNhbEdsb2JhbE9iamVjdCwgZW5jb2RlZEVsZW1lbnRJZCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPEVsZW1lbnQ+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5nZXRFbGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJ
ZCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxFbGVt
ZW50Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5nZXRFbGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJZCkpKSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdl
dEVsZW1lbnRzQnlOYW1lQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RET01KSVQ+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZUJvZHkoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdERPTUpJVD46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwotICAgIGF1dG8gZWxlbWVudE5hbWUgPSBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9y
PElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0
byBlbGVtZW50TmFtZSA9IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5n
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxOb2RlTGlzdD4+
KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRzQnlO
YW1lKFdURk1vdmUoZWxlbWVudE5hbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExJbnRlcmZhY2U8Tm9kZUxpc3Q+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRzQnlOYW1lKFdURk1vdmUoZWxl
bWVudE5hbWUpKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdERP
TUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3RET01KSVQ+OjpjYWxsPGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVu
dHNCeU5hbWVCb2R5Pigqc3RhdGUsICJnZXRFbGVtZW50c0J5TmFtZSIpOworICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0RE9NSklUPjo6Y2FsbDxqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5j
dGlvbkdldEVsZW1lbnRzQnlOYW1lQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICJnZXRFbGVtZW50c0J5TmFtZSIpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04ganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50c0J5TmFtZVdp
dGhvdXRUeXBlQ2hlY2soSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RET01KSVQqIGNhc3Rl
ZFRoaXMsIERPTUpJVDo6SURMSlNBcmd1bWVudFR5cGU8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURM
RE9NU3RyaW5nPj4gZW5jb2RlZEVsZW1lbnROYW1lKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWVX
aXRob3V0VHlwZUNoZWNrKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdERPTUpJVCogY2FzdGVkVGhpcywgRE9NSklUOjpJRExKU0FyZ3VtZW50VHlwZTxJRExB
dG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+PiBlbmNvZGVkRWxlbWVudE5hbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBK
U0M6Ok5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CisgICAgSlNDOjpOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gZWxlbWVudE5hbWUgPSBET01KSVQ6OkRpcmVjdENv
bnZlcnRlcjxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+Pjo6ZGlyZWN0Q29udmVy
dCgqc3RhdGUsIGVuY29kZWRFbGVtZW50TmFtZSk7CisgICAgYXV0byBlbGVtZW50TmFtZSA9IERP
TUpJVDo6RGlyZWN0Q29udmVydGVyPElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+
OjpkaXJlY3RDb252ZXJ0KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBlbmNvZGVkRWxlbWVudE5hbWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxOb2RlTGlzdD4+
KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRzQnlO
YW1lKFdURk1vdmUoZWxlbWVudE5hbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExJbnRlcmZhY2U8Tm9kZUxpc3Q+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRzQnlOYW1lKFdURk1vdmUoZWxl
bWVudE5hbWUpKSkpOwogfQogCiB2b2lkIEpTVGVzdERPTUpJVDo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlcml2ZWREaWN0aW9uYXJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3REZXJpdmVkRGlj
dGlvbmFyeS5jcHAKaW5kZXggMGJhM2RiMTg3N2EwMmNiMzczOTc3ZTc5Y2EwMjFmZmY1Njg5ODY5
YS4uOGU5NmMwYTQzYmEwMTU0MjNlZDE3OTNhZmExNjIzODA5ZTAxZmNkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlcml2ZWREaWN0
aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVyaXZlZERpY3Rpb25hcnkuY3BwCkBAIC0zNiwxNCArMzYsMTQgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXRlbXBsYXRlPD4gVGVzdERlcml2
ZWREaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3REZXJpdmVkRGljdGlvbmFyeT4oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gVGVzdERlcml2ZWREaWN0
aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3REZXJpdmVkRGljdGlvbmFyeT4oSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBib29sIGlzTnVsbE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAg
ICBhdXRvKiBvYmplY3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRP
YmplY3QoKTsKICAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3Qp
KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAg
IHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgVGVzdERlcml2ZWREaWN0aW9uYXJ5IHJlc3VsdDsK
QEAgLTUxLDMzICs1MSwzMyBAQCB0ZW1wbGF0ZTw+IFRlc3REZXJpdmVkRGljdGlvbmFyeSBjb252
ZXJ0RGljdGlvbmFyeTxUZXN0RGVyaXZlZERpY3Rpb25hcnk+KEV4ZWNTdAogICAgIGlmIChpc051
bGxPclVuZGVmaW5lZCkKICAgICAgICAgYm9vbE1lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgYm9vbE1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbE1lbWJlciIpKTsKKyAgICAgICAgYm9v
bE1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJib29sTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9vbE1lbWJlclZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LmJvb2xNZW1iZXIgPSBjb252ZXJ0PElE
TEJvb2xlYW4+KHN0YXRlLCBib29sTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQuYm9vbE1l
bWJlciA9IGNvbnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgYm9vbE1lbWJl
clZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBKU1ZhbHVlIGNhbGxiYWNrTWVtYmVyVmFsdWU7CiAgICAgaWYgKGlzTnVsbE9y
VW5kZWZpbmVkKQogICAgICAgICBjYWxsYmFja01lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgY2FsbGJhY2tNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbGxiYWNrTWVtYmVyIikpOworICAg
ICAgICBjYWxsYmFja01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja01lbWJlciIpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAo
IWNhbGxiYWNrTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuY2Fs
bGJhY2tNZW1iZXIgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+
PihzdGF0ZSwgY2FsbGJhY2tNZW1iZXJWYWx1ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXN1bHQuY2FsbGJhY2tN
ZW1iZXIgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsYmFja01lbWJlclZhbHVlLCAqanNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIHBhcnRpYWxCb29sZWFu
TWVtYmVyVmFsdWU7CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0aWFs
Qm9vbGVhbk1lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAg
cGFydGlhbEJvb2xlYW5NZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxCb29sZWFuTWVtYmVyIikpOworICAgICAgICBwYXJ0
aWFsQm9vbGVhbk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlciIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIXBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBy
ZXN1bHQucGFydGlhbEJvb2xlYW5NZW1iZXIgPSBjb252ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCBw
YXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcnRpYWxCb29sZWFu
TWVtYmVyID0gY29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBwYXJ0aWFs
Qm9vbGVhbk1lbWJlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICNpZiBFTkFCTEUoQ29uZGl0aW9uYWwxNSkKQEAgLTg1LDExICs4
NSwxMSBAQCB0ZW1wbGF0ZTw+IFRlc3REZXJpdmVkRGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFy
eTxUZXN0RGVyaXZlZERpY3Rpb25hcnk+KEV4ZWNTdAogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgcGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoQ29uZGl0aW9uYWxWYWx1ZSA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxCb29sZWFuTWVtYmVyV2l0
aENvbmRpdGlvbmFsVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhDb25kaXRpb25hbCIpKTsKKyAgICAg
ICAgcGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoQ29uZGl0aW9uYWxWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlh
bEJvb2xlYW5NZW1iZXJXaXRoQ29uZGl0aW9uYWwiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsQm9vbGVhbk1l
bWJlcldpdGhDb25kaXRpb25hbFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0
LnBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aENvbmRpdGlvbmFsID0gY29udmVydDxJRExCb29sZWFu
PihzdGF0ZSwgcGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoQ29uZGl0aW9uYWxWYWx1ZSk7CisgICAg
ICAgIHJlc3VsdC5wYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhDb25kaXRpb25hbCA9IGNvbnZlcnQ8
SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgcGFydGlhbEJvb2xlYW5NZW1iZXJXaXRo
Q29uZGl0aW9uYWxWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9CiAjZW5kaWYKQEAgLTk3LDk3ICs5Nyw5NyBAQCB0ZW1wbGF0ZTw+IFRl
c3REZXJpdmVkRGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0RGVyaXZlZERpY3Rpb25h
cnk+KEV4ZWNTdAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFydGlhbENh
bGxiYWNrTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBw
YXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxDYWxsYmFja01lbWJlciIpKTsKKyAgICAgICAgcGFy
dGlhbENhbGxiYWNrTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxDYWxsYmFja01lbWJlciIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIXBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAg
ICAgcmVzdWx0LnBhcnRpYWxDYWxsYmFja01lbWJlciA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5j
dGlvbjxKU1ZvaWRDYWxsYmFjaz4+KHN0YXRlLCBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSwg
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSkp
OworICAgICAgICByZXN1bHQucGFydGlhbENhbGxiYWNrTWVtYmVyID0gY29udmVydDxJRExDYWxs
YmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgcGFydGlh
bENhbGxiYWNrTWVtYmVyVmFsdWUsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CiAgICAgfQogICAgIEpTVmFsdWUgcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVl
OwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFydGlhbFJlcXVpcmVkTG9u
Z01lbWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFydGlh
bFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlciIpKTsKKyAgICAgICAg
cGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsUmVxdWlyZWRMb25n
TWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXIgPSBjb252
ZXJ0PElETExvbmc+KHN0YXRlLCBwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUpOworICAg
ICAgICByZXN1bHQucGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlciA9IGNvbnZlcnQ8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
ICJwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyIiwgIlRlc3REZXJpdmVkRGljdGlvbmFyeSIsICJs
b25nIik7CisgICAgICAgIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgInBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXIiLCAiVGVzdERl
cml2ZWREaWN0aW9uYXJ5IiwgImxvbmciKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAg
ICAgSlNWYWx1ZSBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWU7CiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsU3RyaW5nTWVt
YmVyIikpOworICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgm
bGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxT
dHJpbmdNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewotICAgICAgICByZXN1bHQucGFydGlhbFN0cmluZ01lbWJlciA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihzdGF0ZSwgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlKTsKKyAgICAgICAgcmVz
dWx0LnBhcnRpYWxTdHJpbmdNZW1iZXIgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIHBhcnRpYWxT
dHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlOwogICAgIGlmIChpc051bGxPclVu
ZGVmaW5lZCkKICAgICAgICAgcGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5n
VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsU3RyaW5n
TWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5
U2V0dGluZyIpKTsKKyAgICAgICAgcGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0
aW5nVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZyIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIXBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5h
YmxlZEJ5U2V0dGluZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgcGFydGlhbFN0cmlu
Z01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUpOworICAgICAgICByZXN1bHQucGFydGlh
bFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nID0gY29udmVydDxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0
dGluZ1ZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBKU1ZhbHVlIHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVt
ZW50ZWRBc1ZhbHVlOwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFydGlh
bFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsVW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxl
bWVudGVkQXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIpKTsKKyAg
ICAgICAgcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFsdWUgPSBv
YmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIpKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAo
IXBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1ZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXIgPSBjb252
ZXJ0PElETFVuc2lnbmVkTG9uZz4oc3RhdGUsIHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRo
SW1wbGVtZW50ZWRBc1ZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcnRpYWxVbnNpZ25lZExvbmdN
ZW1iZXIgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgcGFy
dGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFsdWUpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIEpTVmFsdWUg
c3RyaW5nTWVtYmVyVmFsdWU7CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBz
dHJpbmdNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0
cmluZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAic3RyaW5nTWVtYmVyIikpOworICAgICAgICBzdHJpbmdNZW1iZXJWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic3RyaW5nTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc3RyaW5nTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQo
KSkgewotICAgICAgICByZXN1bHQuc3RyaW5nTWVtYmVyID0gY29udmVydDxJRExET01TdHJpbmc+
KHN0YXRlLCBzdHJpbmdNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5zdHJpbmdNZW1iZXIg
PSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgc3RyaW5nTWVtYmVy
VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIEpTVmFsdWUgZGVyaXZlZEJvb2xNZW1iZXJWYWx1ZTsKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIGRlcml2ZWRCb29sTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogICAgIGVsc2UgewotICAgICAgICBkZXJpdmVkQm9vbE1lbWJlclZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZGVyaXZlZEJvb2xNZW1i
ZXIiKSk7CisgICAgICAgIGRlcml2ZWRCb29sTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRlcml2ZWRCb29s
TWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghZGVyaXZlZEJvb2xNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
Ci0gICAgICAgIHJlc3VsdC5kZXJpdmVkQm9vbE1lbWJlciA9IGNvbnZlcnQ8SURMQm9vbGVhbj4o
c3RhdGUsIGRlcml2ZWRCb29sTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQuZGVyaXZlZEJv
b2xNZW1iZXIgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIGRlcml2
ZWRCb29sTWVtYmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTQzo6SlNPYmplY3Qq
IGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFRlc3REZXJpdmVkRGljdGlvbmFyeSYgZGljdGlv
bmFyeSkKK0pTQzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBUZXN0RGVyaXZlZERpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCiB7Ci0gICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBhdXRvIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qu
b2JqZWN0UHJvdG90eXBlKCkpOwogCiAgICAgaWYgKCFJRExCb29sZWFuOjppc051bGxWYWx1ZShk
aWN0aW9uYXJ5LmJvb2xNZW1iZXIpKSB7CiAgICAgICAgIGF1dG8gYm9vbE1lbWJlclZhbHVlID0g
dG9KUzxJRExCb29sZWFuPihJRExCb29sZWFuOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGlj
dGlvbmFyeS5ib29sTWVtYmVyKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sTWVtYmVyIiksIGJvb2xNZW1iZXJWYWx1
ZSk7CiAgICAgfQogICAgIGlmICghSURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz46
OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuY2FsbGJhY2tNZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8g
Y2FsbGJhY2tNZW1iZXJWYWx1ZSA9IHRvSlM8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxs
YmFjaz4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2Fs
bGJhY2s+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5jYWxsYmFja01lbWJl
cikpOworICAgICAgICBhdXRvIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pTPElETENhbGxiYWNr
RnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+OjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUoZGljdGlvbmFyeS5jYWxsYmFja01lbWJlcikpOwogICAgICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tNZW1i
ZXIiKSwgY2FsbGJhY2tNZW1iZXJWYWx1ZSk7CiAgICAgfQogICAgIGlmICghSURMQm9vbGVhbjo6
aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsQm9vbGVhbk1lbWJlcikpIHsKQEAgLTIwMSwx
OCArMjAxLDE4IEBAIEpTQzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnCiAgICAgfQogI2VuZGlmCiAgICAg
aWYgKCFJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPjo6aXNOdWxsVmFsdWUoZGlj
dGlvbmFyeS5wYXJ0aWFsQ2FsbGJhY2tNZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8gcGFydGlhbENh
bGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pTPElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJh
Y2s+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxi
YWNrPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbENhbGxiYWNr
TWVtYmVyKSk7CisgICAgICAgIGF1dG8gcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pT
PElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QsIElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+OjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5wYXJ0aWFsQ2FsbGJhY2tNZW1iZXIpKTsK
ICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInBhcnRpYWxDYWxsYmFja01lbWJlciIpLCBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1
ZSk7CiAgICAgfQogICAgIGF1dG8gcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlID0gdG9K
UzxJRExMb25nPihkaWN0aW9uYXJ5LnBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXIpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0
aWFsUmVxdWlyZWRMb25nTWVtYmVyIiksIHBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXJWYWx1ZSk7
CiAgICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkucGFydGlhbFN0
cmluZ01lbWJlcikpIHsKLSAgICAgICAgYXV0byBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSB0
b0pTPElETERPTVN0cmluZz4oc3RhdGUsIElETERPTVN0cmluZzo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbFN0cmluZ01lbWJlcikpOworICAgICAgICBhdXRvIHBh
cnRpYWxTdHJpbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBJRExET01TdHJpbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5
LnBhcnRpYWxTdHJpbmdNZW1iZXIpKTsKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXIiKSwgcGFy
dGlhbFN0cmluZ01lbWJlclZhbHVlKTsKICAgICB9CiAgICAgaWYgKGRvd25jYXN0PERvY3VtZW50
Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmZ2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgewogICAgICAg
ICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsU3RyaW5n
TWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmcpKSB7Ci0gICAgICAgICAgICBhdXRvIHBhcnRpYWxT
dHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+
KHN0YXRlLCBJRExET01TdHJpbmc6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5
LnBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZykpOworICAgICAgICAgICAg
YXV0byBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSA9IHRvSlM8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBJRExET01TdHJpbmc6OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxl
ZEJ5U2V0dGluZykpOwogICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5
U2V0dGluZyIpLCBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjEsNyArMjIxLDcgQEAgSlNDOjpKU09iamVjdCogY29u
dmVydERpY3Rpb25hcnlUb0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGcKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBcyIp
LCBwYXJ0aWFsVW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSk7CiAgICAg
fQogICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnN0cmluZ01l
bWJlcikpIHsKLSAgICAgICAgYXV0byBzdHJpbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURMRE9NU3Ry
aW5nPihzdGF0ZSwgSURMRE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlv
bmFyeS5zdHJpbmdNZW1iZXIpKTsKKyAgICAgICAgYXV0byBzdHJpbmdNZW1iZXJWYWx1ZSA9IHRv
SlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBJRExET01TdHJpbmc6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnN0cmluZ01lbWJlcikpOwogICAgICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3Ry
aW5nTWVtYmVyIiksIHN0cmluZ01lbWJlclZhbHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExCb29s
ZWFuOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmRlcml2ZWRCb29sTWVtYmVyKSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERlcml2
ZWREaWN0aW9uYXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RGVyaXZlZERpY3Rpb25hcnkuaAppbmRleCAwNDIwMGU2MjZhODAwYzA4ZDMzY2RjNjY0
ZmRkZTY0MTc5ZGM1ZTdkLi5mNjcxZTg4YTY4NjA1ZmQ4NWViMzM5YzZiYTNiNjIwNjYzMzA4YmU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RGVyaXZlZERpY3Rpb25hcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RGVyaXZlZERpY3Rpb25hcnkuaApAQCAtMjUsOCArMjUsOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPD4gVGVzdERlcml2ZWREaWN0aW9uYXJ5
IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3REZXJpdmVkRGljdGlvbmFyeT4oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBUZXN0RGVyaXZlZERpY3Rpb25hcnkgY29udmVy
dERpY3Rpb25hcnk8VGVzdERlcml2ZWREaWN0aW9uYXJ5PihKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
SlNDOjpKU1ZhbHVlKTsKIAotSlNDOjpKU09iamVjdCogY29udmVydERpY3Rpb25hcnlUb0pTKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUZXN0RGVyaXZlZERpY3Rp
b25hcnkmKTsKK0pTQzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkpTR2xv
YmFsT2JqZWN0JiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUZXN0RGVyaXZlZERpY3Rpb25h
cnkmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNl
dHRpbmcuY3BwCmluZGV4IGFhZjc2Y2ZmYWFiNTQ0YmQ1ODJiMjM3MjIzYTgxNzBhM2ZjNTBhOTEu
LmEzMjU4ODBmYWY0NmEzMDdmYmZmZDVjMTk1NjE3NGYyNWNkODkwZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKQEAgLTU2LDEzICs1NiwxMyBAQCBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Byb3RvdHlwZUZ1bmN0
aW9uRW5hYmxlZAogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0
dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dEVuYWJsZWRCeVNldHRpbmdUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJs
ZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0
aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAjaWYgRU5B
QkxFKFRFU1RfRkVBVFVSRSkKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0
dGluZ0VuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEVuYWJsZWRCeVNl
dHRpbmdFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEVuYWJsZWRCeVNldHRpbmdFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29s
IHNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKICNlbmRpZgogCiBjbGFzcyBKU1Rlc3RFbmFibGVkQnlTZXR0aW5nUHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBKU1Rl
c3RFbmFibGVkQnlTZXR0aW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAg
ICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwogICAgICAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiZW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbiIpLCBzdHJsZW4oImVuYWJs
ZWRCeVNldHRpbmdPcGVyYXRpb24iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVT
Y29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxl
KTsKLSAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAjZW5k
aWYKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAg
ICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKICAgICAgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oImVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFi
bGVkQnlTZXR0aW5nQXR0cmlidXRlIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2Rl
U2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJs
ZSk7Ci0gICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2Vu
ZGlmCiAgICAgaWYgKGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgJiYgc3RydWN0dXJlKCkt
PmlzRGljdGlvbmFyeSgpKQpAQCAtMTkwLDEyMCArMTkwLDEyMCBAQCB2b2lkIEpTVGVzdEVuYWJs
ZWRCeVNldHRpbmc6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6fkpTVGVzdEVuYWJsZWRCeVNldHRpbmcoKTsKIH0KIAot
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyogSURMQXR0cmlidXRlPEpT
VGVzdEVuYWJsZWRCeVNldHRpbmc+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcq
IElETEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPjo6Y2FzdChKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAg
IHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJsZWRCeVNldHRpbmcqPihzdGF0ZS52bSgp
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpT
VGVzdEVuYWJsZWRCeVNldHRpbmcqIElETE9wZXJhdGlvbjxKU1Rlc3RFbmFibGVkQnlTZXR0aW5n
Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RW5hYmxl
ZEJ5U2V0dGluZyogSURMT3BlcmF0aW9uPEpTVGVzdEVuYWJsZWRCeVNldHRpbmc+OjpjYXN0KEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkK
IHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RFbmFibGVkQnlTZXR0aW5nKj4oc3Rh
dGUudm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpT
VGVzdEVuYWJsZWRCeVNldHRpbmcqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
Y2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxl
ZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0
dGluZ0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Byb3RvdHlw
ZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFw
cm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RFbmFibGVkQnlTZXR0aW5n
OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkp
OworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEVuYWJsZWRCeVNl
dHRpbmc6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlT
ZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEVuYWJsZWRC
eVNldHRpbmdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7
Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJs
ZWRCeVNldHRpbmdQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgogICAgIHJldHVybiBwcm90b3R5
cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEVuYWJsZWRCeVNldHRpbmdUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5h
YmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRp
bmcmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpT
VGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVu
YWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPjo6Z2V0PGpzVGVzdEVuYWJs
ZWRCeVNldHRpbmdUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPjo6Z2V0PGpzVGVzdEVuYWJs
ZWRCeVNldHRpbmdUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRp
bmciKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdU
ZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RW5hYmxl
ZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpLCBzdHJsZW4oIlRlc3RTdWJPYmpFbmFi
bGVkQnlTZXR0aW5nIikpLCB2YWx1ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5U2V0
dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGlu
Z0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEVuYWJsZWRCeVNldHRpbmc+OjpzZXQ8c2V0SlNUZXN0
RW5hYmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JTZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U3ViT2JqRW5hYmxlZEJ5
U2V0dGluZyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEJ5U2V0dGlu
Zz46OnNldDxzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRp
bmdDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKTsKIH0KIAogI2lmIEVOQUJM
RShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0
dGluZ0VuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0
dGluZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJsZWRCeVNldHRpbmdBdHRy
aWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQnlTZXR0aW5nQXR0cmlidXRl
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJs
ZWRCeVNldHRpbmdFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEJ5U2V0dGlu
Zz46OmdldDxqc1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZUdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJlbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RFbmFibGVkQnlTZXR0aW5nPjo6Z2V0PGpzVGVzdEVuYWJsZWRCeVNldHRpbmdFbmFibGVk
QnlTZXR0aW5nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ0F0dHJp
YnV0ZSIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdBdHRy
aWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJp
YnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RW5h
YmxlZEJ5U2V0dGluZyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1
dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0
dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAg
IHJldHVybiBpbXBsLnNldEVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdEVu
YWJsZWRCeVNldHRpbmdFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RFbmFibGVkQnlTZXR0aW5nPjo6c2V0PHNldEpTVGVzdEVuYWJsZWRCeVNldHRp
bmdFbmFibGVkQnlTZXR0aW5nQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEJ5U2V0dGluZz46OnNldDxzZXRKU1Rlc3RFbmFibGVkQnlT
ZXR0aW5nRW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIp
OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Byb3RvdHlwZUZ1bmN0
aW9uRW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0RW5hYmxlZEJ5U2V0dGluZz46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nUHJvdG90eXBlRnVu
Y3Rpb25FbmFibGVkQnlTZXR0aW5nT3BlcmF0aW9uQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0RW5hYmxlZEJ5U2V0dGluZz46OkNsYXNzUGFyYW1ldGVyIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwot
ICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgaW1wbC5lbmFibGVkQnlTZXR0aW5nT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFt
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nUHJvdG90eXBl
RnVuY3Rpb25FbmFibGVkQnlTZXR0aW5nT3BlcmF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEVuYWJsZWRCeVNldHRpbmdQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRCeVNldHRpbmdPcGVy
YXRpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0RW5hYmxlZEJ5U2V0dGluZz46OmNhbGw8anNUZXN0RW5hYmxlZEJ5
U2V0dGluZ1Byb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbkJvZHk+KCpz
dGF0ZSwgImVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb24iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0
aW9uPEpTVGVzdEVuYWJsZWRCeVNldHRpbmc+OjpjYWxsPGpzVGVzdEVuYWJsZWRCeVNldHRpbmdQ
cm90b3R5cGVGdW5jdGlvbkVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb25Cb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb24iKTsKIH0K
IAogI2VuZGlmCkBAIC0zNDEsNyArMzQxLDcgQEAgZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBf
WlRWTjdXZWJDb3JlMjBUZXN0RW5hYmxlZEJ5U2V0dGluZ0VbXTsgfQogI2VuZGlmCiAjZW5kaWYK
IAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRCeVNldHRpbmc+JiYgaW1w
bCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRCeVNldHRpbmc+
JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAgLTM2NSw5ICsz
NjUsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8
VGVzdEVuYWJsZWRCeVNldHRpbmc+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAK
LUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdEVuYWJsZWRCeVNldHRpbmcmIGltcGwpCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RW5hYmxlZEJ5U2V0dGluZyYgaW1wbCkKIHsK
LSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4g
d3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0
RW5hYmxlZEJ5U2V0dGluZyogSlNUZXN0RW5hYmxlZEJ5U2V0dGluZzo6dG9XcmFwcGVkKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcu
aAppbmRleCA0ZjdkMGRlM2ZlMmEyMzRkYzM2MmYzY2YyNDQ1NjcxNTFmY2QxMmM2Li45MGY4NjA3
YWQyZDIyYjdhYjU5ZWQzYzIyMjdiZDFkZWNlMTUzNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVk
QnlTZXR0aW5nLmgKQEAgLTc1LDEwICs3NSwxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShU
ZXN0RW5hYmxlZEJ5U2V0dGluZyogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFi
bGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0RW5hYmxlZEJ5U2V0dGluZyYpOwotaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVGVzdEVuYWJsZWRCeVNldHRpbmcqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0
YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBS
ZWY8VGVzdEVuYWJsZWRCeVNldHRpbmc+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUmVmUHRyPFRlc3RFbmFibGVkQnlTZXR0aW5nPiYmIGltcGwpIHsgcmV0dXJuIGlt
cGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5v
bk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0RW5hYmxlZEJ5U2V0dGluZyYpOwor
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RFbmFibGVkQnlT
ZXR0aW5nKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJl
ZjxUZXN0RW5hYmxlZEJ5U2V0dGluZz4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RFbmFibGVkQnlTZXR0aW5nPiYm
IGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7
IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RF
bmFibGVkQnlTZXR0aW5nPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0RW5hYmxl
ZEJ5U2V0dGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCmluZGV4IDU4
NGIxNjIwYjliYzI4ZTlhMzc4OGI5NGJmMmE5NmJiMjNjZWEwMjcuLjBiZmI1NjQyZDE1YzMxMDhk
MGM5MWJhYWRiYzRmZDM5NTYzMTI5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250
ZXh0LmNwcApAQCAtNDUsMTAgKzQ1LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIC8vIEF0
dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dENv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVu
YWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250
ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRl
eHRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RT
dWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0
RW5hYmxlZEZvckNvbnRleHRQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKQEAgLTE0Niw1NyArMTQ2LDU3IEBAIHZvaWQgSlNUZXN0RW5hYmxlZEZvckNv
bnRleHQ6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0
RW5hYmxlZEZvckNvbnRleHQ6On5KU1Rlc3RFbmFibGVkRm9yQ29udGV4dCgpOwogfQogCi10ZW1w
bGF0ZTw+IGlubGluZSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCogSURMQXR0cmlidXRlPEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCog
SURMQXR0cmlidXRlPEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Pjo6Y2FzdChKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAg
IHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4oc3RhdGUudm0o
KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0
PEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Kj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEVu
YWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RFbmFi
bGVkRm9yQ29udGV4dDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RFbmFibGVkRm9yQ29udGV4dDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9
IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAg
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAg
ICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25z
dHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNv
bnRleHRDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29u
dGV4dENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52
bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJP
YmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RW5h
YmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RFbmFibGVk
Rm9yQ29udGV4dD46OmdldDxqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVk
Rm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RTdWJP
YmpFbmFibGVkRm9yQ29udGV4dCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RW5h
YmxlZEZvckNvbnRleHQ+OjpnZXQ8anNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5h
YmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNv
bnRleHRDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJP
YmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RFbmFibGVkRm9yQ29udGV4dCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYg
dm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdWJPYmpF
bmFibGVkRm9yQ29udGV4dCIpLCBzdHJsZW4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIp
KSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9i
akVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdEVuYWJsZWRGb3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+OjpzZXQ8c2V0SlNUZXN0RW5hYmxlZEZv
ckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4
dCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RW5hYmxlZEZvckNvbnRleHQ+Ojpz
ZXQ8c2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRD
b25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiVGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Iik7CiB9CiAKIHZvaWQgSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQ6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVy
JiBhbmFseXplcikKQEAgLTIzMiw3ICsyMzIsNyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQq
IF9aVFZON1dlYkNvcmUyMVRlc3RFbmFibGVkRm9yQ29udGV4dEVbXTsgfQogI2VuZGlmCiAjZW5k
aWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiYm
IGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RFbmFibGVkRm9yQ29u
dGV4dD4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtMjU2
LDkgKzI1Niw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3JlYXRlV3Jh
cHBlcjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7
CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEVuYWJsZWRGb3JDb250ZXh0JiBpbXBsKQorSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEVuYWJsZWRGb3JDb250ZXh0JiBp
bXBsKQogewotICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAg
IHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9
CiAKIFRlc3RFbmFibGVkRm9yQ29udGV4dCogSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ6OnRvV3Jh
cHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQuaAppbmRleCBlNmE5MTMxOTcyZWVlZGI5N2IxZWZkMzdkMjI2MTdlYjk4Nzlh
OTNlLi5jMDVmYzdiZTRmZDRmNTE4YzQxNzM2ZDZlNmY3OTVmMmEzNTdkOWRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQuaApAQCAtNzUsMTAgKzc1LDEwIEBAIGlubGluZSB2b2lk
KiB3cmFwcGVyS2V5KFRlc3RFbmFibGVkRm9yQ29udGV4dCogd3JhcHBhYmxlT2JqZWN0KQogICAg
IHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0RW5hYmxlZEZvckNvbnRleHQmKTsKLWlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RFbmFibGVkRm9yQ29udGV4dCogaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwo
KTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFJlZjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYpOwotaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RFbmFibGVkRm9yQ29udGV4dD4m
JiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEVu
YWJsZWRGb3JDb250ZXh0Jik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVGVzdEVuYWJsZWRGb3JDb250ZXh0KiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7
IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYpOworaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxU
ZXN0RW5hYmxlZEZvckNvbnRleHQ+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNy
ZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25O
dWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEVuYWJsZWRGb3JDb250ZXh0PiB7CiAgICAgdXNpbmcgV3Jh
cHBlckNsYXNzID0gSlNUZXN0RW5hYmxlZEZvckNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAKaW5kZXggYWIwNDE1ZGYxOWNmZjc0NzQwZGUyMWYzZjdlZTUxZDU0NjY2
ZDc3Ni4uZGRjYjIxNTU4YzE1Y2Y0NzQyNzY3NTFjN2EwZDY2OGM5NzI4NzEzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtNDEsMTQgKzQxLDE0IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi10ZW1wbGF0ZTw+IFRlc3RFdmVu
dENvbnN0cnVjdG9yOjpJbml0IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RFdmVudENvbnN0cnVjdG9y
OjpJbml0PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiBUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjb252ZXJ0RGljdGlvbmFyeTxUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6SW5pdD4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBib29sIGlzTnVsbE9yVW5kZWZpbmVkID0gdmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKTsKICAgICBhdXRvKiBvYmplY3QgPSBpc051bGxPclVuZGVmaW5lZCA/
IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9y
VW5kZWZpbmVkICYmICFvYmplY3QpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
dGhyb3dTY29wZSk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgVGVzdEV2ZW50
Q29uc3RydWN0b3I6OkluaXQgcmVzdWx0OwpAQCAtNTYsMTEgKzU2LDExIEBAIHRlbXBsYXRlPD4g
VGVzdEV2ZW50Q29uc3RydWN0b3I6OkluaXQgY29udmVydERpY3Rpb25hcnk8VGVzdEV2ZW50Q29u
c3RydWN0b3I6OkluCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBidWJibGVz
VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBidWJibGVzVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJidWJibGVz
IikpOworICAgICAgICBidWJibGVzVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImJ1YmJsZXMiKSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFidWJi
bGVzVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuYnViYmxlcyA9IGNvbnZl
cnQ8SURMQm9vbGVhbj4oc3RhdGUsIGJ1YmJsZXNWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5idWJi
bGVzID0gY29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBidWJibGVzVmFs
dWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIHJlc3VsdC5idWJibGVzID0gZmFsc2U7CkBAIC02OCwxMSArNjgsMTEg
QEAgdGVtcGxhdGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjb252ZXJ0RGljdGlvbmFy
eTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW4KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAg
ICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIGNhbmNlbGFibGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImNhbmNlbGFibGUiKSk7CisgICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiY2FuY2VsYWJsZSIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIH0KICAgICBpZiAoIWNhbmNlbGFibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
Ci0gICAgICAgIHJlc3VsdC5jYW5jZWxhYmxlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwg
Y2FuY2VsYWJsZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmNhbmNlbGFibGUgPSBjb252ZXJ0PElE
TEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbmNlbGFibGVWYWx1ZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UKICAgICAg
ICAgcmVzdWx0LmNhbmNlbGFibGUgPSBmYWxzZTsKQEAgLTgwLDExICs4MCwxMSBAQCB0ZW1wbGF0
ZTw+IFRlc3RFdmVudENvbnN0cnVjdG9yOjpJbml0IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RFdmVu
dENvbnN0cnVjdG9yOjpJbgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY29t
cG9zZWRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbXBvc2Vk
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJj
b21wb3NlZCIpKTsKKyAgICAgICAgY29tcG9zZWRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY29tcG9zZWQiKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAg
aWYgKCFjb21wb3NlZFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LmNvbXBv
c2VkID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgY29tcG9zZWRWYWx1ZSk7CisgICAgICAg
IHJlc3VsdC5jb21wb3NlZCA9IGNvbnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgY29tcG9zZWRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0LmNvbXBvc2VkID0gZmFsc2U7CkBA
IC05MiwxMSArOTIsMTEgQEAgdGVtcGxhdGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBj
b252ZXJ0RGljdGlvbmFyeTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW4KICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIGF0dHIyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVs
c2UgewotICAgICAgICBhdHRyMlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiYXR0cjIiKSk7CisgICAgICAgIGF0dHIyVmFsdWUgPSBvYmplY3Qt
PmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImF0
dHIyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghYXR0cjJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3Vs
dC5hdHRyMiA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgYXR0cjJWYWx1ZSk7CisgICAg
ICAgIHJlc3VsdC5hdHRyMiA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhdHRyMlZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQuYXR0cjIgPSBlbXB0eVN0cmluZygp
OwpAQCAtMTA1LDExICsxMDUsMTEgQEAgdGVtcGxhdGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
SW5pdCBjb252ZXJ0RGljdGlvbmFyeTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW4KICAgICBpZiAo
aXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGF0dHIzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGVsc2UgewotICAgICAgICBhdHRyM1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYXR0cjMiKSk7CisgICAgICAgIGF0dHIzVmFsdWUgPSBv
YmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImF0dHIzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghYXR0cjNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IHJlc3VsdC5hdHRyMyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgYXR0cjNWYWx1ZSk7
CisgICAgICAgIHJlc3VsdC5hdHRyMyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhdHRyM1ZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQuYXR0cjMgPSBlbXB0eVN0
cmluZygpOwpAQCAtMTE5LDEyICsxMTksMTIgQEAgdGVtcGxhdGU8PiBUZXN0RXZlbnRDb25zdHJ1
Y3Rvcjo6SW5pdCBjb252ZXJ0RGljdGlvbmFyeTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW4KIAog
Ly8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0
b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogI2lmIEVOQUJMRShTUEVD
SUFMX0VWRU5UKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0
cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwogI2VuZGlmCiAKIGNsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKQEAgLTE1NCwyMSArMTU0LDIxIEBAIGNsYXNzIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0IHsKIAogdXNpbmcgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yID0gSlNET01D
b25zdHJ1Y3RvcjxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPjsKIAotdGVtcGxhdGU8PiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUp
Cit0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0RXZlbnRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKKyAgICBhdXRv
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcio+
KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgYXV0byB0eXBlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byB0eXBlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIGF1dG8gZXZlbnRJbml0RGljdCA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdD4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsK
KyAgICBhdXRvIGV2ZW50SW5pdERpY3QgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8VGVzdEV2ZW50
Q29uc3RydWN0b3I6OkluaXQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1
bWVudCgxKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RFdmVudENvbnN0cnVjdG9yOjpjcmVhdGUo
V1RGTW92ZSh0eXBlKSwgV1RGTW92ZShldmVudEluaXREaWN0KSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0RXZlbnRDb25zdHJ1
Y3Rvcj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVj
dCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50
ZXJmYWNlPFRlc3RFdmVudENvbnN0cnVjdG9yPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CiB9CiAKIHRlbXBsYXRl
PD4gSlNWYWx1ZSBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnByb3RvdHlwZUZv
clN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKQEAgLTIzOCw3NSArMjM4LDc1IEBAIEpTVmFsdWUgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAg
cmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
cj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsK
IH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogSURMQXR0cmli
dXRlPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqIElETEF0dHJpYnV0ZTxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPjo6Y2FzdChKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQog
ewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihzdGF0
ZS52bSgpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RXZl
bnRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RFdmVudENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKICAgICBy
ZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVj
dG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3ImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihz
dGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5hdHRyMSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0
dHIxKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0
b3JBdHRyMShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RFdmVudENvbnN0cnVjdG9yPjo6Z2V0PGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJhdHRyMSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cj46OmdldDxqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJhdHRy
MSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3ImIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYXR0cjIoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyMigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcj46OmdldDxqc1Rl
c3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpB
c3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYXR0cjIiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+OjpnZXQ8anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAiYXR0cjIiKTsKIH0KIAogI2lmIEVOQUJMRShTUEVDSUFMX0VW
RU5UKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyM0dl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyM0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmF0dHIzKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuYXR0cjMoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+OjpnZXQ8anNUZXN0RXZl
bnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHIzIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RFdmVudENvbnN0cnVjdG9yPjo6Z2V0PGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyM0dl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgImF0dHIzIik7CiB9CiAKICNlbmRpZgpAQCAtMzI5LDcgKzMyOSw3IEBA
IGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTIwVGVzdEV2ZW50Q29uc3Ry
dWN0b3JFW107IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PFRlc3RFdmVudENvbnN0cnVjdG9yPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPFRlc3RFdmVudENvbnN0cnVjdG9yPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklO
RElOR19JTlRFR1JJVFkpCkBAIC0zNTMsOSArMzUzLDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RFdmVudENvbnN0cnVjdG9yPihnbG9iYWxP
YmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RFdmVudENv
bnN0cnVjdG9yJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVz
dEV2ZW50Q29uc3RydWN0b3ImIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuaApp
bmRleCBjMmUzNDMxNDI3ZmI3NmZhOTIxMTVkOTJlNWRiYTM2OGM0YTBhZmM1Li41ZTBiZWRkMmQz
MTkwMzQwZWJjMjMyZmNjYzMwZjQ0Yjk4OTczZDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0
cnVjdG9yLmgKQEAgLTYwLDE2ICs2MCwxNiBAQCBjbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
IDogcHVibGljIEpTRXZlbnQgewogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwog
fTsKIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3RFdmVudENvbnN0cnVjdG9yJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
RXZlbnRDb25zdHJ1Y3RvciogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0RXZl
bnRDb25zdHJ1Y3Rvcj4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNO
ZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6
IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFdmVudENvbnN0cnVjdG9yJik7CitpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEV2ZW50Q29uc3RydWN0b3IqIGlt
cGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RFdmVu
dENvbnN0cnVjdG9yPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+JiYgaW1wbCkgeyBy
ZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEV2ZW50Q29uc3Ry
dWN0b3I+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
OwogICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0RXZlbnRDb25zdHJ1Y3Rvcio7
CiB9OwotdGVtcGxhdGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjb252ZXJ0RGljdGlv
bmFyeTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdD4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwordGVtcGxhdGU8PiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdCBjb252ZXJ0RGlj
dGlvbmFyeTxUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SW5pdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6SlNWYWx1ZSk7CiAKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dFRhcmdldC5jcHAKaW5kZXggZjE5OGMyNjFkOTczNjg0MjIxNzU0NGIwOTNkNTE5NzM3NGFhZjFh
OS4uMDgyY2Q4YzZkNmRlNzZhNDlhYmRhZGRiODA5OTA1M2MxZWIwZTFmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXZlbnRUYXJnZXQuY3BwCkBAIC01MCw4ICs1MCw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbShKU0M6OkpT
CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdl
dENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVz
dEV2ZW50VGFyZ2V0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CkBAIC0xNDEsMTcgKzE0MSwxNyBAQCBKU1ZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0Ojpn
ZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yPih2
bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQog
Ci1ib29sIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KG9iamVjdCk7CiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlmIChh
dXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGlmIChpbmRl
eC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBhdXRvIHZhbHVlID0gdG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwgKnRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleC52YWx1
ZSgpKSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNP
YmplY3QtPndyYXBwZWQoKS5pdGVtKGluZGV4LnZhbHVlKCkpKTsKICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogICAgIH0KICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMSW50ZXJm
YWNlPE5vZGU+OwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0
LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlPiB7CkBAIC0xNjAsMjYgKzE2MCwyNiBAQCBib29sIEpTVGVzdEV2
ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBzdGF0ZSwgUAogICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklETFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJs
ZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfTsKLSAgICBp
ZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJp
ZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVy
RnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+
Pigqc3RhdGUsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShuYW1lZFByb3Bl
cnR5LnZhbHVlKCkpKTsKKyAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJs
ZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAgICBh
dXRvIHZhbHVlID0gdG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1
ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgdmFsdWUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5z
aWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0RXZlbnRUYXJnZXQ6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdEV2ZW50VGFyZ2V0Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlf
SU5ERVgpKSB7CiAgICAgICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5n
dGgoKSkgewotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+
Pigqc3RhdGUsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+d3JhcHBl
ZCgpLml0ZW0oaW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETEludGVy
ZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgpKTsKICAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKKyAgICAgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgaW5kZXgsIHNsb3QpOwogICAgIH0KICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMSW50ZXJm
YWNlPE5vZGU+OwpAQCAtMTg5LDcwICsxODksNzAgQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHMK
ICAgICAgICAgICAgIHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGUgeyBHZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVzdWx0KSB9
OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH07Ci0gICAgaWYgKGF1dG8gbmFt
ZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6
Ok5vPigqc3RhdGUsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7
Ci0gICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETEludGVyZmFjZTxOb2RlPj4oKnN0YXRlLCAq
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgp
KSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3Bl
cnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOwogICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgs
IHNsb3QpOwogfQogCi12b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0RXZlbnRUYXJn
ZXQ6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihvYmplY3QpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsr
aSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwog
ICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBv
cnRlZFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0RXZlbnRU
YXJnZXQqIElETE9wZXJhdGlvbjxKU1Rlc3RFdmVudFRhcmdldD46OmNhc3QoRXhlY1N0YXRlJiBz
dGF0ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEV2ZW50VGFyZ2V0KiBJRExPcGVyYXRpb248
SlNUZXN0RXZlbnRUYXJnZXQ+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U1Rlc3RFdmVudFRhcmdldCo+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKKyAgICBy
ZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEV2ZW50VGFyZ2V0Ojpn
ZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEV2ZW50VGFyZ2V0Ojpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUt
Pmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Cisg
ICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IKICAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uSXRlbUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFt
ZSBJRExPcGVyYXRpb248SlNUZXN0RXZlbnRUYXJnZXQ+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW1Cb2R5KEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBj
YWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RFdmVudFRhcmdldD46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwotICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVy
dDxJRExVbnNpZ25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRl
cmZhY2U8Tm9kZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLml0
ZW0oV1RGTW92ZShpbmRleCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgaW1wbC5pdGVtKFdURk1vdmUoaW5kZXgpKSkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVt
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25J
dGVtKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdEV2ZW50VGFyZ2V0Pjo6Y2FsbDxqc1Rlc3RFdmVudFRhcmdldFByb3Rv
dHlwZUZ1bmN0aW9uSXRlbUJvZHk+KCpzdGF0ZSwgIml0ZW0iKTsKKyAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdEV2ZW50VGFyZ2V0Pjo6Y2FsbDxqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlw
ZUZ1bmN0aW9uSXRlbUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiaXRl
bSIpOwogfQogCiB2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkBAIC0yNzMsNyArMjczLDcgQEAgZXh0ZXJuICJD
IiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMTVUZXN0RXZlbnRUYXJnZXRFW107IH0KICNl
bmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RFdmVudFRhcmdl
dD4mJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0RXZlbnRUYXJn
ZXQ+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAgLTI5Nyw5
ICsyOTcsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBw
ZXI8VGVzdEV2ZW50VGFyZ2V0PihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1K
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3RFdmVudFRhcmdldCYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RFdmVudFRhcmdldCYgaW1wbCkKIHsKLSAgICByZXR1cm4g
d3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0RXZlbnRUYXJnZXQq
IEpTVGVzdEV2ZW50VGFyZ2V0Ojp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKaW5kZXggYjVjNDYzNjFiNGJkMjg0YmNmNmU3MTI5
ODJiYzE0MjM1MGQ4NTJkZi4uOTUxZTQ2ZGU2NGFiMDI1YWFmMWZmMDhkMmFkM2MzOWUwYTRiMzdj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKQEAgLTQxLDkgKzQxLDkgQEAgY2xhc3MgSlNUZXN0
RXZlbnRUYXJnZXQgOiBwdWJsaWMgSlNFdmVudFRhcmdldCB7CiAgICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwogICAgIHN0YXRpYyBUZXN0RXZlbnRUYXJnZXQqIHRvV3JhcHBlZChKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlND
OjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlv
bk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApA
QCAtNjYsMTAgKzY2LDEwIEBAIGNsYXNzIEpTVGVzdEV2ZW50VGFyZ2V0IDogcHVibGljIEpTRXZl
bnRUYXJnZXQgewogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogfTsKIAotSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RF
dmVudFRhcmdldCYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEV2ZW50VGFyZ2V0KiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBK
U0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RFdmVudFRhcmdldD4mJik7Ci1pbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdEV2ZW50VGFyZ2V0PiYm
IGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0RXZl
bnRUYXJnZXQmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0RXZlbnRUYXJnZXQqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUmVmPFRlc3RFdmVudFRhcmdldD4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RFdmVudFRhcmdldD4mJiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9
CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0RXZl
bnRUYXJnZXQ+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RFdmVudFRhcmdldDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5jcHAKaW5kZXggYTMzMDAwNjQ2NzU3NTdhNThiODNjYjA3N2M4NzRm
ZThiMzQzMjY3Yy4uOTY4MGQyODE1NWVkZGZmZDk2M2Q0OTNkOGU2MmFiM2JhZjk1YjFmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4
Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTQyLDkgKzQyLDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlv
bkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RFeGNlcHRp
b25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlv
bk5hbWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKIAogY2xhc3MgSlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlIDogcHVibGljIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNDEsNDYgKzE0MSw0NiBAQCB2b2lk
IEpTVGVzdEV4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2Jq
ZWN0LT5KU1Rlc3RFeGNlcHRpb246On5KU1Rlc3RFeGNlcHRpb24oKTsKIH0KIAotdGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0RXhjZXB0aW9uKiBJRExBdHRyaWJ1dGU8SlNUZXN0RXhjZXB0aW9uPjo6
Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3RFeGNlcHRpb24qIElETEF0dHJpYnV0ZTxKU1Rlc3RFeGNlcHRpb24+
OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0RXhjZXB0aW9u
Kj4oc3RhdGUudm0oKSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBq
c0R5bmFtaWNDYXN0PEpTVGVzdEV4Y2VwdGlvbio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0
aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
cHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGUqPih2bSwg
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBl
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0RXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEV4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3Qo
KSkpOwogfQogCi1ib29sIHNldEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorYm9vbCBzZXRKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAg
cmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1
Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RFeGNlcHRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RXhjZXB0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwubmFtZSgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm5hbWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdEV4Y2VwdGlvbk5hbWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0RXhjZXB0aW9uPjo6Z2V0PGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibmFt
ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0RXhjZXB0aW9uPjo6Z2V0PGpzVGVz
dEV4Y2VwdGlvbk5hbWVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJuYW1lIik7CiB9CiAKIHZvaWQgSlNUZXN0
RXhjZXB0aW9uOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCkBAIC0yMTYsNyArMjE2LDcgQEAgZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdX
ZWJDb3JlMTNUZXN0RXhjZXB0aW9uRVtdOyB9CiAjZW5kaWYKICNlbmRpZgogCi1KU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxUZXN0RXhjZXB0aW9uPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPFRlc3RFeGNlcHRpb24+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShC
SU5ESU5HX0lOVEVHUklUWSkKQEAgLTI0MCw5ICsyNDAsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdEV4Y2VwdGlvbj4oZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0RXhjZXB0aW9uJiBp
bXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEV4Y2VwdGlvbiYg
aW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAg
ICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwog
fQogCiBUZXN0RXhjZXB0aW9uKiBKU1Rlc3RFeGNlcHRpb246OnRvV3JhcHBlZChKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5oCmluZGV4IDc5NzU4YzFkMWM0
YWZhZTdjMTliNGVhYTdkMWY3NjFhYjBlNjU3Y2IuLjljMjZkYWFkMTE2YzRmYjQ4ZDUwYmY1NjFi
MmJjNDgwOTE2MDM2MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmgKQEAgLTc0LDEwICs3NCwxMCBAQCBp
bmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0RXhjZXB0aW9uKiB3cmFwcGFibGVPYmplY3QpCiAg
ICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RFeGNlcHRpb24mKTsKLWlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3RFeGNlcHRpb24qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBSZWY8VGVzdEV4Y2VwdGlvbj4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWZQdHI8VGVzdEV4Y2VwdGlvbj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05l
d2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDog
SlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEV4Y2VwdGlvbiYpOworaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RFeGNlcHRpb24qIGltcGwpIHsgcmV0dXJuIGlt
cGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlND
Ojpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RFeGNlcHRpb24+JiYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0
cjxUZXN0RXhjZXB0aW9uPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVk
KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgp
KSA6IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPFRlc3RFeGNlcHRpb24+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U1Rlc3RFeGNlcHRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAK
aW5kZXggZTdjYzYyZjI2N2EwYzYzNzExYjg4MGExNDMyOTE4Yzg4YmViMWU4Zi4uM2M1Y2ViYTM2
YWJhYzRjNjViZjY4YzJiNDlhOWU5MjAyNGU5MTAxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlLmNwcApAQCAtNDIsOSArNDIsOSBAQCB1c2luZyBuYW1lc3BhY2UgSlND
OwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZUFTZWNyZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQVNlY3JldEF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBjbGFzcyBKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
CiBwdWJsaWM6CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgICAgIGhhc0Rpc2FibGVk
UnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwogICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
YVNlY3JldEF0dHJpYnV0ZSIpLCBzdHJsZW4oImFTZWNyZXRBdHRyaWJ1dGUiKSk7CiAgICAgICAg
IFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5
TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKLSAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJv
cGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYgKGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMg
JiYgc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQogICAgICAgICBmbGF0dGVuRGljdGlvbmFy
eU9iamVjdCh2bSk7CkBAIC0xNTAsNDYgKzE1MCw0NiBAQCB2b2lkIEpTVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6fkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoKTsKIH0K
IAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogSURMQXR0cmli
dXRlPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUqIElETEF0dHJpYnV0ZTxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPjo6Y2Fz
dChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUqPihzdGF0ZS52bSgpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSo+KEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2Jh
bE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKICAgICByZXR1cm4gcHJvdG90eXBlLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQVNlY3JldEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVBU2Vj
cmV0QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYVNlY3JldEF0dHJpYnV0ZSgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmFTZWNyZXRBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUFT
ZWNyZXRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
QVNlY3JldEF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPjo6Z2V0PGpzVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVBU2VjcmV0QXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImFTZWNyZXRBdHRyaWJ1dGUiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+OjpnZXQ8anNUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZUFTZWNyZXRBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJhU2VjcmV0
QXR0cmlidXRlIik7CiB9CiAKIHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpAQCAtMjI2LDcgKzIy
Niw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTIzVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGVFW107IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPiYmIGltcGwpCitKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPiYmIGltcGwpCiB7CiAK
ICNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC0yNTAsOSArMjUwLDkgQEAgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUmIGltcGwpCiB7Ci0gICAg
cmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUqIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OnRvV3JhcHBlZChKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlLmgKaW5kZXggNjM4YmZmNDhjNmQ3YTVlNjg0ZDA4OTBhYmRhMWI2ZDJmOWY0YzdiMC4u
ODBiZDE4MjgzMmFiZmRkNDVlMjc4OWZjOGNiMGUzYWM1OTUwY2IzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCkBAIC03MywxMCArNzMsMTAgQEAgaW5saW5lIHZvaWQq
IHdyYXBwZXJLZXkoVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIHdyYXBwYWJsZU9iamVjdCkKICAg
ICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUmKTsK
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6Ompz
TnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPiYmKTsKLWlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogaW1wbCkgeyByZXR1cm4g
aW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBK
U0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGU+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZlB0cjxUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZT4mJiBpbXBsKSB7IHJldHVybiBp
bXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4g
c3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZT4gewogICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCmluZGV4IGQxY2VmZDNhNThkM2UxNGFjYTg0MDNj
MDdmMjVhNDg0MWJhNzUzZTAuLjc3MjliZmE0Y2YwZWE2OTQxMDc2YTVmMmNiNTFiY2ZjN2E5NDM1
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDIsMTUwICsxNDIsMTUwIEBA
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0
YW5jZUZ1bmN0aW9uVGVzdEZlYXR1cmVHCiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0UmVndWxhckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxh
ckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJs
aWNBbmRQcml2YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNB
bmRQcml2YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxh
ckF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGlj
QW5kUHJpdmF0ZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJs
aWNBbmRQcml2YXRlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29u
ZGl0aW9uYWxBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFBy
aXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRy
YWNlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNl
ckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmll
ckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdENhbGxUcmFjZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNpZiBFTkFCTEUoVEVTVF9D
T05ESVRJT05BTCkKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENh
bGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNl
Y3VyaXR5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5T
ZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENv
bnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEds
b2JhbE9iamVjdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xv
YmFsT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3Rv
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4
dENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0
b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEdsb2Jh
bE9iamVjdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RH
bG9iYWxPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogI2VuZGlmCi1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEl0ZXJhYmxlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5k
ZXhlZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVy
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Nv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25s
eU1hcExpa2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRP
bmx5TWFwTGlrZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJh
YmxlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJh
YmxlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3Io
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RBdWRpb0NvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
RGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJUaHJv
d2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRH
ZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGhDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVC
dWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5z
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlv
bkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogI2VuZGlmCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
TmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVk
VG9TdHJpbmdDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lm
aWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1
Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFz
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRU
b1N0cmluZ0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJp
YnV0ZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIHVzaW5nIEpTVGVzdEdsb2Jh
bE9iamVjdENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNU
ZXN0R2xvYmFsT2JqZWN0PjsKIApAQCAtNzU3LDE3NzMgKzc1NywxNzc0IEBAIHZvaWQgSlNUZXN0
R2xvYmFsT2JqZWN0OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3Qt
PkpTVGVzdEdsb2JhbE9iamVjdDo6fkpTVGVzdEdsb2JhbE9iamVjdCgpOwogfQogCi10ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3RHbG9iYWxPYmplY3QqIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkK
K3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEdsb2JhbE9iamVjdCogSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U1Rlc3RHbG9iYWxPYmplY3QqPihzdGF0ZS52bSgpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
IH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0R2xvYmFsT2JqZWN0KiBJRExPcGVyYXRpb248
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0R2xvYmFsT2JqZWN0KiBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBj
YWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0
Kj4oc3RhdGUudm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBqc0R5bmFtaWND
YXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdENv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3Rv
dHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0UHJvdG90eXBlKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEdsb2JhbE9iamVjdDo6Z2V0Q29uc3RydWN0
b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RHbG9iYWxPYmplY3Q6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RHbG9iYWxPYmplY3RQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkg
ewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3RvcgogICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnJlZ3VsYXJBdHRyaWJ1
dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5yZWd1bGFyQXR0cmlidXRlKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3Vs
YXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRl
R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1
ZSwgInJlZ3VsYXJBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEds
b2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCAicmVndWxhckF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0UmVndWxhckF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwot
ICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBB
dHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZd
IHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0UmVndWxhckF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZVNldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZ3VsYXJBdHRyaWJ1dGUiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxP
YmplY3RSZWd1bGFyQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJyZWd1bGFyQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5wdWJsaWNB
bmRQcml2YXRlQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01T
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucHVibGljQW5kUHJp
dmF0ZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmpl
Y3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFs
T2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZUdldHRlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgInB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1
dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
c3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNl
dFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0p
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1Ymxp
Y0FuZFByaXZhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVTZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJwdWJsaWNBbmRQcml2YXRlQXR0
cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpz
ZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNldHRlcj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHVibGljQW5k
UHJpdmF0ZUF0dHJpYnV0ZSIpOwogfQogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0
aW9uYWxBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3Rh
dGUsIHRocm93U2NvcGUsIGltcGwucHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRl
KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0
cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0
dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0
ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInB1YmxpY0Fu
ZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZh
dGVDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgInB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOwogfQogCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNh
bGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBs
LnNldFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9u
YWxBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2Jh
bE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZVNldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0
dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJp
YnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAicHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlIik7CiB9CiAKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9N
U3RyaW5nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xv
YmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsICJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZUdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImVu
YWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEVT
VF9GRUFUVVJFKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAg
ICAgIHJldHVybiBpbXBsLnNldEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJl
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogfQogCiAjZW5kaWYKIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc0NvbnN0
cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RDRVJlYWN0aW9u
czo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rl
c3RDRVJlYWN0aW9uczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvckdldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0Q0VSZWFjdGlvbnMiKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgIlRlc3RDRVJlYWN0aW9ucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q0VSZWFjdGlv
bnMiKSwgc3RybGVuKCJUZXN0Q0VSZWFjdGlvbnMiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RD
RVJlYWN0aW9uc0NvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiVGVzdENFUmVhY3Rpb25zIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RH
bG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29u
c3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgIlRlc3RDRVJlYWN0aW9ucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
cmV0dXJuIEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3JHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0
aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
CiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKSksIHZhbHVl
KTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2Jh
bE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllckNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxUcmFjZXJD
b25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxUcmFjZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RDYWxsVHJh
Y2VyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpT
VGVzdENhbGxUcmFjZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxUcmFjZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdENhbGxUcmFjZXIiKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2Fs
bFRyYWNlckNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAiVGVzdENhbGxUcmFjZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDYWxsVHJhY2VyIiksIHN0
cmxlbigiVGVzdENhbGxUcmFjZXIiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNv
bnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdENh
bGxUcmFjZXIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yU2V0dGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0Q2Fs
bFRyYWNlciIpOwogfQogCiAjaWYgRU5BQkxFKFRFU1RfQ09ORElUSU9OQUwpCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3Ry
dWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdENhbGxi
YWNrSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
cmV0dXJuIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxiYWNr
SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
IlRlc3RDYWxsYmFja0ludGVyZmFjZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFj
ZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVz
dENhbGxiYWNrSW50ZXJmYWNlIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfQ09O
RElUSU9OQUwpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENh
bGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxs
YmFja0ludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dT
Y29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2Ui
KSwgc3RybGVuKCJUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxiYWNrSW50ZXJm
YWNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdENhbGxiYWNrSW50ZXJmYWNlIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RDYWxsYmFja0ludGVy
ZmFjZSIpOwogfQogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6
Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsICJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0Q2xhc3NX
aXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNU
ZXN0RE9NSklUOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0
dXJuIEpTVGVzdERPTUpJVDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0
PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJUZXN0RE9NSklUIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RH
bG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9y
R2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdERPTUpJVCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENv
bnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RET01KSVQiKSwgc3RybGVuKCJUZXN0RE9NSklUIikpLCB2YWx1ZSk7CiB9CiAK
LWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RE
T01KSVRDb25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IlRlc3RET01KSVQiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3JTZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RET01K
SVQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RE
b21haW5TZWN1cml0eUNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJl
dHVybiBKU1Rlc3REb21haW5TZWN1cml0eTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBKU1Rlc3REb21haW5TZWN1cml0eTo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2Vj
dXJpdHlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RE
b21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJUZXN0RG9tYWluU2VjdXJpdHkiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEds
b2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25z
dHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3REb21h
aW5TZWN1cml0eSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhy
b3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgog
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RG9tYWluU2VjdXJpdHki
KSwgc3RybGVuKCJUZXN0RG9tYWluU2VjdXJpdHkiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiVGVzdERvbWFpblNlY3VyaXR5Iik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERv
bWFpblNlY3VyaXR5Q29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3REb21haW5TZWN1cml0eSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25z
dHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
cmV0dXJuIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlT
ZXR0aW5nQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RF
bmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVz
dEVuYWJsZWRCeVNldHRpbmciKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2Jh
bE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0
cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdEVuYWJs
ZWRCeVNldHRpbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0g
PSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFbmFibGVkQnlT
ZXR0aW5nIiksIHN0cmxlbigiVGVzdEVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsKIH0KIAot
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5
U2V0dGluZ0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdEVuYWJsZWRCeVNldHRpbmciKTsKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RW5hYmxlZEJ5U2V0
dGluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4
dENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgcmV0dXJuIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Ojpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RFbmFibGVkRm9yQ29udGV4dCIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdEVuYWJsZWRGb3JDb250ZXh0Iik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRD
b25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFbmFibGVkRm9yQ29udGV4dCIpLCBzdHJsZW4oIlRlc3RF
bmFibGVkRm9yQ29udGV4dCIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVu
YWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5h
YmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdEVuYWJsZWRGb3JDb250ZXh0Iik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICByZXR1cm4gSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9y
Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0
RXZlbnRDb25zdHJ1Y3RvciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZN
JiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV2ZW50
Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0RXZlbnRDb25zdHJ1Y3RvciIpKSwgdmFsdWUpOwog
fQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RFdmVudENv
bnN0cnVjdG9yIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBy
ZXR1cm4gSlNUZXN0RXZlbnRUYXJnZXQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0RXZlbnRUYXJnZXQ6OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJn
ZXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdEV2ZW50VGFy
Z2V0Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8
anNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0RXZlbnRUYXJnZXQiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdEV2ZW50VGFyZ2V0IiksIHN0cmxlbigiVGVzdEV2ZW50VGFyZ2V0IikpLCB2
YWx1ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RF
dmVudFRhcmdldENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvclNldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RFdmVudFRhcmdldCIpOworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RXZlbnRUYXJnZXQiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25zdHJ1
Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0
Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RFeGNl
cHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCAiVGVzdEV4Y2VwdGlvbiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25zdHJ1
Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RFeGNlcHRp
b24iKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RF
eGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV4Y2VwdGlvbkNv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdEV4Y2VwdGlv
biIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRp
b25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RXhjZXB0aW9uIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0RXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNv
bnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGU6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICByZXR1cm4gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0
R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpOworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVD
b25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVD
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUiKSwgc3RybGVuKCJU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJl
dHVybiBKU1Rlc3RHbG9iYWxPYmplY3Q6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0R2xvYmFsT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxP
YmplY3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdEds
b2JhbE9iamVjdENvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RHbG9i
YWxPYmplY3QiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JHZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0R2xvYmFsT2JqZWN0Iik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvYmFsT2Jq
ZWN0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdEdsb2JhbE9iamVjdCIpLCBzdHJsZW4oIlRlc3RHbG9iYWxP
YmplY3QiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xv
YmFsT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmpl
Y3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9y
U2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdEdsb2JhbE9iamVj
dCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvclNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdEdsb2JhbE9i
amVjdCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpT
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNl
dDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
LSAgICByZXR1cm4gSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1
Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Nj
b3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
IikpLCB2YWx1ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24iKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIlRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6
Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JH
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rv
ckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigi
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyIik7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0SW50ZXJm
YWNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpT
VGVzdEludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJUZXN0SW50ZXJmYWNlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVz
dEludGVyZmFjZSIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0o
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RJ
bnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdEludGVyZmFjZSIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdEludGVyZmFjZSIpOwogfQogCiAj
ZW5kaWYKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rvckdl
dHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUi
KTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3Rvckdl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3JTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKSwgc3RybGVuKCJUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVj
dG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9i
YWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29u
c3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdEl0ZXJhYmxlOjpn
ZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdEl0
ZXJhYmxlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNW
YWx1ZSwgIlRlc3RJdGVyYWJsZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9y
R2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdEl0ZXJhYmxlIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlcmFi
bGVDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29uc3RydWN0
b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RJdGVyYWJsZSIpLCBzdHJsZW4oIlRlc3RJdGVyYWJsZSIpKSwgdmFs
dWUpOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlcmFi
bGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJUZXN0SXRlcmFibGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRlcmFi
bGVDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiVGVzdEl0ZXJhYmxlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3I6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCAiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIiksIHN0cmxlbigiVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RNYXBMaWtlQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3RydWN0b3JH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4g
SlNUZXN0TWFwTGlrZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IHJldHVybiBKU1Rlc3RNYXBMaWtlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0cnVjdG9yR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RNYXBMaWtlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VD
b25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RN
YXBMaWtlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TWFwTGlrZUNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TWFwTGlrZSIpLCBzdHJsZW4oIlRlc3RNYXBMaWtlIikp
LCB2YWx1ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1h
cExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RNYXBMaWtlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExp
a2VDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiVGVzdE1hcExpa2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IHJldHVybiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yR2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFs
T2JqZWN0VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvckdldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0g
dGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciIpLCBzdHJsZW4oIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIikpLCB2YWx1
ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9i
YWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvckdl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52
bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ciIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0
b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rv
ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBy
ZXR1cm4gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENv
bnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xv
YmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3Ry
dWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIikpLCB2YWx1ZSk7CiB9CiAKLWJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJl
dHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9i
amVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKSks
IHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkQ29u
c3RydWN0b3I6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdE5hbWVkQ29uc3RydWN0b3IiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdE5hbWVkQ29uc3RydWN0b3IiKTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVj
dG9yQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZENvbnN0cnVjdG9yIiksIHN0cmxlbigiVGVz
dE5hbWVkQ29uc3RydWN0b3IiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiVGVzdE5hbWVkQ29uc3RydWN0b3IiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0TmFtZWRDb25zdHJ1Y3RvciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
QXVkaW9Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwotICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWQ6OmdldENvbnN0cnVj
dG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvck5hbWVkOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEF1ZGlvQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RBdWRpb0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmpl
Y3RBdWRpb0NvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIkF1ZGlvIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xv
YmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgIkF1ZGlvIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RBdWRpb0NvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RBdWRpb0NvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJBdWRpbyIpLCBzdHJsZW4oIkF1ZGlvIikpLCB2YWx1ZSk7CiB9CiAK
LWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3Rv
clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIkF1ZGlvIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xv
YmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiQXVkaW8iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1
Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2Jh
bE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlm
aWVyQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdE5hbWVkRGVsZXRl
ck5vSWRlbnRpZmllciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVj
dG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JT
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmpl
Y3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb25Db25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKLSAgICByZXR1cm4gSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENv
bnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0
b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+Ojpn
ZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29u
c3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb25Db25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0o
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uIikpLCB2YWx1
ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVj
dG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJl
dHVybiBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCks
IHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFs
dWUsICJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIiKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZt
ID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JT
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29u
c3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0
dXJuIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRDb25zdHJ1Y3Rvcihz
dGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldp
dGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yR2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yR2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdE5hbWVkRGVsZXRlcldp
dGhJbmRleGVkR2V0dGVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciIpLCBzdHJs
ZW4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciIpKSwgdmFsdWUpOwogfQogCi1i
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRl
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RH
bG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldp
dGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRlcj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGg6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4g
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGhDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNh
bGxXaXRoQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
ICJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvclNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvclNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgiKSwgc3RybGVuKCJUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aCIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdl
dHRlckNhbGxXaXRoQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
LSAgICByZXR1cm4gSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9y
KHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRHZXR0ZXJOb0lk
ZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsICJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxl
bigiVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CiAKLWJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBy
ZXR1cm4gSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
IlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0
dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgIlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dT
Y29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1
ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgIlRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBK
U1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0g
dGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZh
bHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0
dXJuIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24iKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2Jh
bE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Nj
b3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSks
IHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24i
KTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVj
dG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVy
biBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52
bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3Bl
LnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsK
IH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEds
b2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIiKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0
aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
CiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXIiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNl
dDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNv
bnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0
b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9i
amVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlckNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3JT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIiksIHN0
cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIiKSksIHZhbHVl
KTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
ckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVj
dG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25z
dHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJl
dHVybiBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnND
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0
b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlu
c0NvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMiKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0
aW5zQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnMiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGluc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9y
U2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEds
b2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRo
T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGlucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3JHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52
bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Nv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpz
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Nv
bnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyIpLCBzdHJsZW4o
IlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyIpKSwgdmFsdWUpOwogfQog
Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3JTZXR0ZXI+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9i
amVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKHN0YXRl
LnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8
anNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
IlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRp
bnMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRP
dmVycmlkZUJ1aWx0aW5zIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlk
ZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGlucyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGlucyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvclNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25z
dHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAg
IHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9i
amVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiksIHN0cmxlbigiVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiKTsKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yU2V0dGVyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rv
ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVy
biBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpnZXRDb25zdHJ1Y3Rv
cihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIiksIHN0cmxlbigi
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKSksIHZhbHVlKTsKIH0KIAot
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZUNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJy
aWRlQnVpbHRpbnNDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJl
dHVybiBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJy
aWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEds
b2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAiVGVzdE92ZXJyaWRlQnVpbHRpbnMiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJp
ZGVCdWlsdGluc0NvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAiVGVzdE92ZXJyaWRlQnVpbHRpbnMiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE92ZXJyaWRlQnVpbHRpbnMiKSks
IHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWls
dGluc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVj
dG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE92ZXJyaWRl
QnVpbHRpbnMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9y
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJU
ZXN0T3ZlcnJpZGVCdWlsdGlucyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UGx1
Z2luSW50ZXJmYWNlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpnZXRDb25zdHJ1
Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdFBsdWdpbkludGVy
ZmFjZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3Rvckdl
dHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJUZXN0UGx1Z2luSW50ZXJmYWNlIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCAiVGVzdFBsdWdpbkludGVyZmFjZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVj
dG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3JT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3RQbHVnaW5JbnRlcmZhY2UiKSwgc3RybGVuKCJUZXN0UGx1Z2luSW50ZXJm
YWNlIikpLCB2YWx1ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdp
bkludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25z
dHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RQbHVn
aW5JbnRlcmZhY2UiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0
b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IlRlc3RQbHVnaW5JbnRlcmZhY2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvckdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFJl
YWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdFJlYWRPbmx5TWFwTGlrZTo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RSZWFkT25seU1h
cExpa2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3JH
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFJlYWRPbmx5TWFwTGlrZSIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RSZWFkT25seU1hcExpa2UiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0UmVhZE9ubHlNYXBMaWtlIiksIHN0cmxlbigiVGVzdFJlYWRPbmx5TWFw
TGlrZSIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFk
T25seU1hcExpa2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2Jh
bE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29u
c3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0UmVh
ZE9ubHlNYXBMaWtlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmpl
Y3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVj
dG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJUZXN0UmVhZE9ubHlNYXBMaWtlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RSZXBvcnRFeHRyYU1l
bW9yeUNvc3Q6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gSlNUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBv
cnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFs
T2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgIlRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QiKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Iik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlD
b3N0Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9y
eUNvc3RDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0o
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpLCBz
dHJsZW4oIlRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3QiKSksIHZhbHVlKTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRy
YU1lbW9yeUNvc3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yU2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFJlcG9ydEV4dHJhTWVt
b3J5Q29zdCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1
Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6
YXRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JHZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb24iKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RT
ZXJpYWxpemF0aW9uIiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb24iKSksIHZhbHVlKTsKIH0K
IAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXph
dGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb24iKTsKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbiIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdElu
aGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0
dXJuIEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOjpnZXRDb25zdHJ1Y3Rv
cihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9u
SW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
IlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVy
aXRhbmNlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvclNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0
b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpLCBzdHJs
ZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpKSwgdmFsdWUpOwogfQog
Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2UiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VD
b25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1
cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCks
IHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0
b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Iik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0
R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JHZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQi
KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRo
cm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
ICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0IiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IikpLCB2YWx1ZSk7CiB9
CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1
Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENv
bnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29u
c3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4g
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0o
KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbENvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52
bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIikpLCB2YWx1ZSk7CiB9
CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9i
YWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxDb25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwiKTsKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9i
YWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIik7CiB9CiAK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQot
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
Vk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiksIHN0cmxlbigiVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlIik7CiB9CiAKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdp
ZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52
bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJp
bmdpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dFN0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRl
c3RTdHJpbmdpZmllciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yR2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdFN0cmluZ2lmaWVyIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29u
c3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllciIpLCBzdHJsZW4oIlRlc3RTdHJpbmdp
ZmllciIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJp
bmdpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U3RyaW5naWZpZXIiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN0cmluZ2lmaWVyIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
QW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb246OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
QW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RH
bG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnlt
b3VzT3BlcmF0aW9uQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsICJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24iKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91
c09wZXJhdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9
IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
ci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVy
QW5vbnltb3VzT3BlcmF0aW9uIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uIikpLCB2YWx1ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
bkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvclNldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09w
ZXJhdGlvbkNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24iKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmll
ck5hbWVkT3BlcmF0aW9uQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3Bl
cmF0aW9uQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RTdHJpbmdp
Zmllck5hbWVkT3BlcmF0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0
VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0m
IHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbiIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uIikpLCB2YWx1ZSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvclNldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25z
dHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0
cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAg
cmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVt
ZW50ZWRBc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46
OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRl
ZEFzQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uSW1wbGVtZW50ZWRBcyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJh
dGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzIiksIHN0cmxlbigiVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXND
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0
cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlv
bk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVk
VG9TdHJpbmc6OmdldENvbnN0cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1
cm4gSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpnZXRDb25zdHJ1Y3Rv
cihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKTsKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3JHZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25O
YW1lZFRvU3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3JTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdD
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmlu
ZyIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSksIHZh
bHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yU2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlv
bk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmlu
Z2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
cmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0
cmlidXRlQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEds
b2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0
cmlidXRlQ29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJl
YWRPbmx5QXR0cmlidXRlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJv
d1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUi
KSksIHZhbHVlKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0
cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
Ci0gICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9y
R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0
PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0
cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1
Y3RvclNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBWTSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZSIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSIpKSwgdmFsdWUp
OwogfQogCi1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3Rv
clNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0VHlwZWRlZnM6OmdldENvbnN0cnVjdG9yKHN0
YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0VHlwZWRlZnM6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5
cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0VGVz
dFR5cGVkZWZzQ29uc3RydWN0b3JHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFR5cGVk
ZWZzIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0VHlwZWRlZnMiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yU2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dFR5cGVkZWZzIiksIHN0cmxlbigiVGVzdFR5cGVkZWZzIikpLCB2YWx1ZSk7CiB9CiAKLWJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlw
ZWRlZnNDb25zdHJ1Y3RvclNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IlRlc3RUeXBlZGVmcyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yU2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0
VHlwZWRlZnMiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5z
dGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb25Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBh
dXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOworICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwucmVndWxhck9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVy
YXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvblJlZ3VsYXJPcGVyYXRpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbDxqc1Rl
c3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbkJvZHk+KCpzdGF0
ZSwgInJlZ3VsYXJPcGVyYXRpb24iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEds
b2JhbE9iamVjdD46OmNhbGw8anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3Vs
YXJPcGVyYXRpb25Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInJlZ3Vs
YXJPcGVyYXRpb24iKTsKIH0KIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlv
bkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24xQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpDbGFzc1BhcmFtZXRlciBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJs
ZWRBdFJ1bnRpbWVPcGVyYXRpb24xQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRv
IHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRp
bWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMjUzMiwxMiArMjUzMywxMyBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVu
YWJsZWRBdFJ1bgogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rp
b25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uMkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTVGVzdEdsb2JhbE9iamVjdD46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURM
TG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gdGVz
dFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRp
b24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtMjU0NywxNzIgKzI1NDksMTcyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0
UnVuCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1
bnRpbWVPcGVyYXRpb25PdmVybG9hZERpc3BhdGNoZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uT3ZlcmxvYWREaXNwYXRjaGVyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBzaXplX3QgYXJnc0NvdW50
ID0gc3RkOjptaW48c2l6ZV90PigxLCBzdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBzaXpl
X3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7Ci0gICAgICAgIEpTVmFsdWUgZGlzdGlu
Z3Vpc2hpbmdBcmcgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgICAgIEpTVmFs
dWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwog
I2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5p
c051bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkJvZHkoc3RhdGUsIGNhc3RlZFRoaXMs
IHRocm93U2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMkJvZHkobGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICNlbmRpZgogI2lmIEVO
QUJMRShURVNUX0ZFQVRVUkUpCi0gICAgICAgIHJldHVybiBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0
YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjFCb2R5KHN0YXRlLCBjYXN0ZWRU
aGlzLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUJvZHkobGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICNlbmRpZgogICAgIH0K
LSAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKSA6IHRocm93Vk1UeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRp
bWVPcGVyYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0
ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFu
Y2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJB
TShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6Y2FsbDxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVu
dGltZU9wZXJhdGlvbk92ZXJsb2FkRGlzcGF0Y2hlcj4oKnN0YXRlLCAiZW5hYmxlZEF0UnVudGlt
ZU9wZXJhdGlvbiIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6Y2FsbDxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGlt
ZU9wZXJhdGlvbk92ZXJsb2FkRGlzcGF0Y2hlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiB9CiAKICNlbmRpZgogCiAjaWYg
RU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvckZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJh
dGlvblN0YXRpY0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0Q29uc3RydWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0aWNC
b2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURM
TG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHRlc3RQYXJh
bSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgVGVzdEdsb2JhbE9iamVjdDo6ZW5hYmxlZEF0UnVudGlt
ZU9wZXJhdGlvblN0YXRpYyhXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb25TdGF0aWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBz
dGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0Q29u
c3RydWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0aWMoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbFN0YXRpYzxqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rv
ckZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvblN0YXRpY0JvZHk+KCpzdGF0ZSwgImVu
YWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0aWMiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdEdsb2JhbE9iamVjdD46OmNhbGxTdGF0aWM8anNUZXN0R2xvYmFsT2JqZWN0Q29uc3Ry
dWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0aWNCb2R5PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0
aWMiKTsKIH0KIAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZEJv
ZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkQm9keShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7Ci0gICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElE
TExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGltcGwuZW5hYmxlZEluU3BlY2lmaWNXb3JsZChXVEZNb3ZlKHRlc3RQYXJhbSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlv
bkVuYWJsZWRJblNwZWNpZmljV29ybGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFs
T2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGQoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVO
VVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6Y2FsbDxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5h
YmxlZEluU3BlY2lmaWNXb3JsZEJvZHk+KCpzdGF0ZSwgImVuYWJsZWRJblNwZWNpZmljV29ybGQi
KTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEdsb2JhbE9iamVjdD46OmNhbGw8anNU
ZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRCb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImVuYWJsZWRJblNwZWNpZmljV29y
bGQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVG
ZWF0dXJlRW5hYmxlZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dv
cmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTVGVzdEdsb2JhbE9iamVjdD46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1
dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCkpOworICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVu
YWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkKFdURk1vdmUodGVz
dFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVu
YWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dEdsb2JhbE9iamVjdD46OmNhbGw8anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVu
YWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkQm9keT4oKnN0YXRl
LCAiZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQiKTsKKyAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEdsb2JhbE9iamVjdD46OmNhbGw8anNUZXN0R2xv
YmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGlt
ZUZlYXR1cmVFbmFibGVkQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJl
bmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFu
Y2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxl
ZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0
R2xvYmFsT2JqZWN0Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRp
bWVGZWF0dXJlc0VuYWJsZWRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHRlc3RQYXJh
bSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAg
ICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5lbmFibGVkSW5TcGVj
aWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlc0VuYWJsZWQoV1RGTW92ZSh0ZXN0UGFyYW0pKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25F
bmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlc0VuYWJsZWQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNw
ZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjpjYWxsPGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5T
cGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlc0VuYWJsZWRCb2R5Pigqc3RhdGUsICJlbmFi
bGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlc0VuYWJsZWQiKTsKKyAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdEdsb2JhbE9iamVjdD46OmNhbGw8anNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1
cmVzRW5hYmxlZEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZW5hYmxl
ZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFibGVkIik7CiB9CiAKICNpZiBF
TkFCTEUoVEVTVF9GRUFUVVJFKQotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uQm9keShK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxP
YmplY3Q+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvblRlc3RQcml2YXRlRnVuY3Rpb25Cb2R5KEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpDbGFzc1BhcmFtZXRlciBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaW1wbC50ZXN0UHJp
dmF0ZUZ1bmN0aW9uKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJ
bnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlvbihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpjYWxsPGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25UZXN0UHJpdmF0ZUZ1bmN0aW9uQm9keSwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFz
c2VydD4oKnN0YXRlLCAidGVzdFByaXZhdGVGdW5jdGlvbiIpOworICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbDxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5j
ZUZ1bmN0aW9uVGVzdFByaXZhdGVGdW5jdGlvbkJvZHksIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdFByaXZhdGVG
dW5jdGlvbiIpOwogfQogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25DYWxjdWxhdGVTZWNyZXRSZXN1
bHRCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uUmV0dXJu
aW5nUHJvbWlzZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RJbnN0YW5jZUZ1bmN0aW9uQ2FsY3VsYXRlU2VjcmV0UmVzdWx0Qm9keShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0
eXBlbmFtZSBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlPEpTVGVzdEdsb2JhbE9iamVjdD46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlz
ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGltcGwuY2FsY3VsYXRlU2VjcmV0
UmVzdWx0KFdURk1vdmUocHJvbWlzZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xv
YmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkNhbGN1bGF0ZVNlY3JldFJlc3VsdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uQ2FsY3VsYXRlU2Vj
cmV0UmVzdWx0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1
cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpjYWxs
PGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25DYWxjdWxhdGVTZWNyZXRSZXN1bHRC
b2R5LCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09ubHk+KCpzdGF0ZSwgImNhbGN1bGF0
ZVNlY3JldFJlc3VsdCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNl
PEpTVGVzdEdsb2JhbE9iamVjdD46OmNhbGw8anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvbkNhbGN1bGF0ZVNlY3JldFJlc3VsdEJvZHksIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2lu
ZG93T25seT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJjYWxjdWxhdGVTZWNy
ZXRSZXN1bHQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25HZXRTZWNyZXRCb29sZWFuQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5z
dGFuY2VGdW5jdGlvbkdldFNlY3JldEJvb2xlYW5Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETEJvb2xlYW4+KGltcGwuZ2V0U2VjcmV0Qm9vbGVhbigpKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlv
bkdldFNlY3JldEJvb2xlYW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmFsT2JqZWN0
SW5zdGFuY2VGdW5jdGlvbkdldFNlY3JldEJvb2xlYW4oSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0
Pjo6Y2FsbDxqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uR2V0U2VjcmV0Qm9vbGVh
bkJvZHk+KCpzdGF0ZSwgImdldFNlY3JldEJvb2xlYW4iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0
aW9uPEpTVGVzdEdsb2JhbE9iamVjdD46OmNhbGw8anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VG
dW5jdGlvbkdldFNlY3JldEJvb2xlYW5Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgImdldFNlY3JldEJvb2xlYW4iKTsKIH0KIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUp
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5z
dGFuY2VGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbkJvZHkoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW5Cb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwudGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFu
KCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmpl
Y3RJbnN0YW5jZUZ1bmN0aW9uVGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0RmVhdHVyZUdl
dFNlY3JldEJvb2xlYW4oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Y2FsbDxqc1Rlc3RHbG9i
YWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uVGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuQm9keT4o
KnN0YXRlLCAidGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIik7CisgICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpjYWxsPGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW5Cb2R5PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpOwogfQog
CiAjZW5kaWYKQEAgLTI3NTAsNyArMjc1Miw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCog
X1pUVk43V2ViQ29yZTE2VGVzdEdsb2JhbE9iamVjdEVbXTsgfQogI2VuZGlmCiAjZW5kaWYKIAot
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEdsb2JhbE9iamVjdD4mJiBpbXBsKQorSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0R2xvYmFsT2JqZWN0PiYmIGltcGwpCiB7
CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC0yNzc0LDkgKzI3NzYsOSBAQCBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdEdsb2Jh
bE9iamVjdD4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0R2xvYmFsT2JqZWN0JiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVGVzdEdsb2JhbE9iamVjdCYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0R2xvYmFsT2JqZWN0KiBKU1Rlc3RH
bG9iYWxPYmplY3Q6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5oCmluZGV4IDgyNDdlMDJmNDViODkwZWE2MTU3NzNhMjllZDYw
OGY3MGQ1YjU0M2UuLmMxZTFlNjNhYWRhZjQyNmVjZDkzYjJjZTUyYjJiOTc3NDhkYTFhMWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RH
bG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmgKQEAgLTc3LDEwICs3NywxMCBAQCBpbmxpbmUgdm9pZCog
d3JhcHBlcktleShUZXN0R2xvYmFsT2JqZWN0KiB3cmFwcGFibGVPYmplY3QpCiAgICAgcmV0dXJu
IHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RHbG9iYWxPYmplY3QmKTsKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFRlc3RHbG9iYWxPYmplY3QqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0
YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBS
ZWY8VGVzdEdsb2JhbE9iamVjdD4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWZQdHI8VGVzdEdsb2JhbE9iamVjdD4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9K
U05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkp
IDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEdsb2JhbE9iamVjdCYpOworaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RHbG9iYWxPYmplY3QqIGltcGwpIHsg
cmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmlt
cGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RHbG9iYWxPYmpl
Y3Q+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZlB0cjxUZXN0R2xvYmFsT2JqZWN0PiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0
b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5y
ZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAogY2xhc3MgSlNUZXN0R2xvYmFs
T2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKaW5k
ZXggMTkzYTdiNTczMTU5MDBmNDBjNTE1MDc4ZTlkYTk3MWY2MWQ3MDI0ZC4uOTgyYzE2MTlkNWI5
MzExMWY4M2UzYTdhNmI0YmM4MjU0MmUxYmZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcApAQCAtNDIsOCArNDIsOCBAQCB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNs
YXNzIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEzOSw3NyArMTM5LDc3IEBAIHZvaWQg
SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2Vs
bCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp+SlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcigpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
KSB7CiAgICAgICAgIGlmIChpbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxl
bmd0aCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpz
dGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgudmFsdWUoKSkpOworICAgICAg
ICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgudmFsdWUoKSkpOwogICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCksIHZh
bHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29s
IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRF
WCkpIHsKICAgICAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgp
KSB7Ci0gICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwg
dGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFs
dWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5pdGVtKGluZGV4KSk7CiAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNP
YmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKKyAgICByZXR1
cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsg
KytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7
Ci0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9vbCBK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIGlmIChhdXRv
IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09i
amVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CisgICAg
cmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAotYm9vbCBKU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
Citib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAg
aWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIHRoaXNPYmplY3QtPndy
YXBwZWQoKS5zZXRJdGVtKGluZGV4LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxs
LCBzdGF0ZSwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIEpTT2JqZWN0
OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hv
dWxkVGhyb3cpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlE
ZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQorYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhy
b3cpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMTcsOCArMjE3LDggQEAgYm9vbCBKU1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBF
eGVjU3QKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewog
ICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOwor
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3Iu
dmFsdWUoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7
CiAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjYsMjYgKzIy
NiwyNiBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdAogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9w
ZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOwotICAgIHJldHVybiBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9w
ZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBu
ZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkg
ewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3RvcgpAQCAtMjg1LDcgKzI4NSw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pU
Vk43V2ViQ29yZTI5VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJFW107IH0KICNlbmRpZgog
I2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElO
R19JTlRFR1JJVFkpCkBAIC0zMDksOSArMzA5LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAog
ICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPihn
bG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXImIGltcGwpCiB7Ci0gICAg
cmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnRv
V3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgKaW5kZXggMjM3YWM5YzBiN2M4NTE2YjE1
ZmViMzMyNWZlYWY0OGVmNTUyNjU2OS4uMWEwMjNjN2YxNWJmYzM0ODI3ZjgwMjViODBkZmU0ZmY4
YzBiMTY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5oCkBAIC0zOSwxMiArMzksMTIgQEAgY2xhc3MgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllciA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdEluZGV4ZWRTZXR0ZXJOb0kKICAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJh
dGlvbk1vZGUoKSk7Ci0gICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0
eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlND
OjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlND
ZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVfSU5G
TzsKQEAgLTgxLDEwICs4MSwxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllciogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFi
bGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciYpOwotaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIGltcGwpIHsgcmV0
dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxs
KCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYpOwot
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVk
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVs
bCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9i
YWxPYmplY3QqLCBUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciYpOworaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6
IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiB7CiAgICAgdXNpbmcgV3Jh
cHBlckNsYXNzID0gSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKaW5kZXgg
OTFiNzBjOGJmM2RmYTFjMzZlZjI5OTMxNTYzYzE5NjI3NjMyZmJiZi4uZGE0ZTJkOTE1ZDRjZjNj
MzNlNWRhMTZjMTg0Mzk5NjgzZDM2M2VjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKQEAgLTQyLDggKzQyLDggQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgpAQCAtMTM5LDc3ICsxMzksNzcgQEAgdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjp+SlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKCk7CiB9CiAKLWJvb2wgSlNUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQorYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpIHsKICAgICAgICAgaWYgKGluZGV4LnZhbHVlKCkgPCB0aGlzT2JqZWN0LT53cmFwcGVk
KCkubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmlu
Zz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleC52YWx1ZSgpKSk7Cisg
ICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleC52YWx1ZSgpKSk7CiAgICAg
ICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigw
KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJv
cGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAK
LWJvb2wgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlmIChMSUtFTFkoaW5k
ZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewogICAgICAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0
LT53cmFwcGVkKCkubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElE
TERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkpOwor
ICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgpKTsKICAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApLCB2YWx1
ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1
cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5k
ZXgsIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBK
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9i
amVjdCwgaW5mbygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKLSAgICBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQ
cm9wZXJ0eVNsb3QpCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
cHV0UHJvcGVydHlTbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXgg
PSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB0cnVlKTsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0
ZSwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUo
KSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0
SXRlbShpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKKyAgICByZXR1cm4g
SlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
c3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQor
Ym9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQg
aW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAKICAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAg
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKLSAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNl
dEl0ZW0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CisgICAgICAgIHByb3BhZ2F0ZUV4
Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3Jh
cHBlZCgpLnNldEl0ZW0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxs
LCBzdGF0ZSwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIEpTT2JqZWN0
OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hv
dWxkVGhyb3cpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9w
ZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCitib29sIEpTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMTcsMzUgKzIxNywzNSBAQCBi
b29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplY3QqIG9iamVjdCwgRQogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2Ny
aXB0b3IudmFsdWUoKSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0cnVlKTsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhy
b3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShp
bmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9y
ID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25m
aWd1cmFibGUodHJ1ZSk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShv
YmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxk
VGhyb3cpOworICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwg
c2hvdWxkVGhyb3cpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCks
IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Q
cm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgpAQCAtMjg1LDcgKzI4NSw3IEBAIGV4dGVybiAiQyIg
eyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTM0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbkVbXTsKICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYgaW1wbCkKK0pTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4m
JiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtMzA5LDkgKzMw
OSw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPihnbG9iYWxPYmplY3QsIFdURk1vdmUo
aW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24mIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uJiBpbXBsKQogewotICAgIHJldHVybiB3cmFw
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24qIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dG9X
cmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKaW5kZXggMGU1MWM5ZDFh
OTZhYTEwMWQ0ZmVhMjhjODZlMGVjODE4MjdlYzdkNS4uZTM2ODNlZmRlNmRiZTNiNzM4MDY5OTEw
ZWQwZjZjYjVhYThhYjVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uaApAQCAtMzksMTIgKzM5LDEyIEBAIGNsYXNzIEpTVGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdElu
ZGV4ZWRTZXR0CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6
OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVy
YXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgc3RhdGljIGJvb2wgcHV0
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dEJ5SW5k
ZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBkZWZpbmVP
d25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlND
OjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMg
Ym9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBz
dGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0Nl
bGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTgxLDEwICs4MSwxMCBAQCBpbmxpbmUgdm9p
ZCogd3JhcHBlcktleShUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiB3cmFwcGFi
bGVPYmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24mKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0
YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBS
ZWY8VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7Ci1pbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiYpOworaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOworaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3
bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNl
Tm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+
IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCmluZGV4IDA5NWE3OWU5NjM2YTQwMDFhNjU4ZjFiN2U2NDE3MzQzNzg4YWM1NWMu
LjhlMWUxZDU1NGRhNjRiOTFmMWQyOTc3NGE5ZjU1ZjhkZjczNDY5NjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC00OCw4ICs0
OCw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jCiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1Ymxp
YzoKQEAgLTE0Niw3NyArMTQ2LDc3IEBAIHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6fkpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcigpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAg
IGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGlm
IChpbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgdGhpc09iamVj
dC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgudmFsdWUoKSkpOworICAgICAgICAgICAgYXV0byB2YWx1
ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+
d3JhcHBlZCgpLml0ZW0oaW5kZXgudmFsdWUoKSkpOwogICAgICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCksIHZhbHVlKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cisg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBz
bG90KQorYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKICAg
ICAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgdGhpc09iamVj
dC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pT
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQo
KS5pdGVtKGluZGV4KSk7CiAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPigwKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKKyAgICByZXR1cm4gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3Rh
dGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytp
KQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7Ci0g
ICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlO
YW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9vbCBKU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQorYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIGlmIChh
dXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIHRoaXNPYmplY3QtPndy
YXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0Ojpw
dXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xv
dCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAotYm9vbCBK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXRC
eUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCiAgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0g
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgdmFsdWUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAg
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LCBXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09i
amVjdDo6cHV0QnlJbmRleChjZWxsLCBzdGF0ZSwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7
CisgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCi1ib29sIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCitib29s
IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlE
ZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yMjQsOCAr
MjI0LDggQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWMKICAgICBpZiAoYXV0byBpbmRleCA9IHBh
cnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewogICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRv
ci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAg
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJv
cGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQo
KS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzMsNTYgKzIzMyw1NiBAQCBib29sIEpTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgRXhlYwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9
IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmln
dXJhYmxlKHRydWUpOwotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRo
cm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNo
b3VsZFRocm93KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyKiBJRExPcGVyYXRpb248SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiBJRExPcGVyYXRpb248SlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4oc3RhdGUudm0oKSwgc3RhdGUudGhpc1Zh
bHVlKCkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUu
dGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
cgogICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlckJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlckJvZHkoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVu
c2lnbmVkTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIGlu
ZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1
dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5pbmRleGVkU2V0dGVyKFdU
Rk1vdmUoaW5kZXgpLCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0
ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
UHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xv
YmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcj46OmNhbGw8anNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJv
dG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyQm9keT4oKnN0YXRlLCAiaW5kZXhlZFNldHRlciIp
OworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPjo6Y2FsbDxqc1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5j
dGlvbkluZGV4ZWRTZXR0ZXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
ImluZGV4ZWRTZXR0ZXIiKTsKIH0KIAogdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikK
QEAgLTMxOCw3ICszMTgsNyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNv
cmUzMVRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJFW107IH0KICNlbmRpZgogI2VuZGlm
CiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdf
SU5URUdSSVRZKQpAQCAtMzQyLDkgKzM0Miw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAg
ICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPihn
bG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXImIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyJiBpbXBsKQogewot
ICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgIHJldHVybiB3
cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgKaW5kZXggNGE2MmNk
ZmEzYTZmOTBiNGUyNTVmMDhkODdlNGYwMWVkNzA5OTkxNi4uMDVhOTJmOWRhN2FlOGU4ZTMzZmIz
MTRmMjE2NzEyNjllZGJiNjMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIuaApAQCAtMzksMTIgKzM5LDEyIEBAIGNsYXNzIEpTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdEluZGV4ZWRT
ZXR0ZXJXCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZN
JiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25N
b2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6
SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwg
Y29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBw
dXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsK
IAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTgxLDEwICs4MSwxMCBAQCBpbmxpbmUgdm9pZCogd3Jh
cHBlcktleShUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiB3cmFwcGFibGVPYmplY3Qp
CiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXImKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWZQdHI8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBpbXBsKSB7IHJl
dHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJl
bGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllciYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwg
PyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpq
c051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZlB0cjxUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwp
IHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAog
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXI+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5oZXJpdGVkRGljdGlvbmFyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5oZXJpdGVkRGlj
dGlvbmFyeS5jcHAKaW5kZXggZDEwN2M3ODcxMjlhNDJlM2M5MjVmOTJmMWE3NDA3Zjg0ZjJkYmNi
ZC4uZTJhMzkwZWI1NzY0MWQ4N2NlZThhOTBiYzhiNTg1MjQzZTllNmRjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluaGVyaXRlZERp
Y3Rpb25hcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmhlcml0ZWREaWN0aW9uYXJ5LmNwcApAQCAtMzYsMTQgKzM2LDE0IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi10ZW1wbGF0ZTw+IFRlc3RJ
bmhlcml0ZWREaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RJbmhlcml0ZWREaWN0aW9u
YXJ5PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiBUZXN0SW5o
ZXJpdGVkRGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0SW5oZXJpdGVkRGljdGlvbmFy
eT4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBib29sIGlzTnVsbE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKTsKICAgICBhdXRvKiBvYmplY3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIg
OiB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVk
ICYmICFvYmplY3QpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29w
ZSk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgVGVzdEluaGVyaXRlZERpY3Rp
b25hcnkgcmVzdWx0OwpAQCAtNTEsMzMgKzUxLDMzIEBAIHRlbXBsYXRlPD4gVGVzdEluaGVyaXRl
ZERpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdEluaGVyaXRlZERpY3Rpb25hcnk+KEV4
CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBib29sTWVtYmVyVmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBib29sTWVtYmVyVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sTWVtYmVyIikp
OworICAgICAgICBib29sTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImJvb2xNZW1iZXIiKSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFi
b29sTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuYm9vbE1lbWJl
ciA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIGJvb2xNZW1iZXJWYWx1ZSk7CisgICAgICAg
IHJlc3VsdC5ib29sTWVtYmVyID0gY29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBib29sTWVtYmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIEpTVmFsdWUgY2FsbGJhY2tNZW1iZXJWYWx1ZTsKICAg
ICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBjYWxsYmFja01lbWJlclZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tN
ZW1iZXIiKSk7CisgICAgICAgIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbGxiYWNrTWVt
YmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghY2FsbGJhY2tNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAg
ICAgIHJlc3VsdC5jYWxsYmFja01lbWJlciA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxK
U1ZvaWRDYWxsYmFjaz4+KHN0YXRlLCBjYWxsYmFja01lbWJlclZhbHVlLCAqanNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJl
c3VsdC5jYWxsYmFja01lbWJlciA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRD
YWxsYmFjaz4+KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxiYWNrTWVtYmVyVmFsdWUsICpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIEpTVmFsdWUg
cGFydGlhbEJvb2xlYW5NZW1iZXJWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAg
ICAgICAgIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVs
c2UgewotICAgICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXIiKSk7
CisgICAgICAgIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxCb29sZWFu
TWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghcGFydGlhbEJvb2xlYW5NZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7Ci0gICAgICAgIHJlc3VsdC5wYXJ0aWFsQm9vbGVhbk1lbWJlciA9IGNvbnZlcnQ8SURMQm9v
bGVhbj4oc3RhdGUsIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQu
cGFydGlhbEJvb2xlYW5NZW1iZXIgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHBhcnRpYWxCb29sZWFuTWVtYmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogI2lmIEVOQUJMRShDb25kaXRpb25hbDE1
KQpAQCAtODUsMTEgKzg1LDExIEBAIHRlbXBsYXRlPD4gVGVzdEluaGVyaXRlZERpY3Rpb25hcnkg
Y29udmVydERpY3Rpb25hcnk8VGVzdEluaGVyaXRlZERpY3Rpb25hcnk+KEV4CiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhDb25kaXRp
b25hbFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFydGlhbEJv
b2xlYW5NZW1iZXJXaXRoQ29uZGl0aW9uYWxWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aENvbmRpdGlv
bmFsIikpOworICAgICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhDb25kaXRpb25hbFZhbHVl
ID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhDb25kaXRpb25hbCIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBh
cnRpYWxCb29sZWFuTWVtYmVyV2l0aENvbmRpdGlvbmFsVmFsdWUuaXNVbmRlZmluZWQoKSkgewot
ICAgICAgICByZXN1bHQucGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoQ29uZGl0aW9uYWwgPSBjb252
ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhDb25kaXRpb25h
bFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aENvbmRpdGlv
bmFsID0gY29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBwYXJ0aWFsQm9v
bGVhbk1lbWJlcldpdGhDb25kaXRpb25hbFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICNlbmRpZgpAQCAtOTcsODYgKzk3LDg2IEBA
IHRlbXBsYXRlPD4gVGVzdEluaGVyaXRlZERpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVz
dEluaGVyaXRlZERpY3Rpb25hcnk+KEV4CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIHBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbENhbGxiYWNrTWVtYmVyIikp
OworICAgICAgICBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbENhbGxi
YWNrTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIGlmICghcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUuaXNVbmRlZmlu
ZWQoKSkgewotICAgICAgICByZXN1bHQucGFydGlhbENhbGxiYWNrTWVtYmVyID0gY29udmVydDxJ
RExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPj4oc3RhdGUsIHBhcnRpYWxDYWxsYmFj
a01lbWJlclZhbHVlLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJlc3VsdC5wYXJ0aWFsQ2FsbGJhY2tNZW1iZXIgPSBj
b252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSBwYXJ0aWFsUmVxdWlyZWRM
b25nTWVtYmVyVmFsdWU7CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0
aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICBwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVy
IikpOworICAgICAgICBwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRp
YWxSZXF1aXJlZExvbmdNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVy
VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQucGFydGlhbFJlcXVpcmVkTG9u
Z01lbWJlciA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHBhcnRpYWxSZXF1aXJlZExvbmdNZW1i
ZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5wYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyID0gY29u
dmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBwYXJ0aWFsUmVxdWlyZWRMb25nTWVt
YmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgInBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXIiLCAiVGVzdEluaGVyaXRl
ZERpY3Rpb25hcnkiLCAibG9uZyIpOworICAgICAgICB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsICJwYXJ0aWFsUmVxdWlyZWRMb25n
TWVtYmVyIiwgIlRlc3RJbmhlcml0ZWREaWN0aW9uYXJ5IiwgImxvbmciKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAgICAgSlNWYWx1ZSBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWU7CiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsU3RyaW5nTWVt
YmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJwYXJ0aWFsU3RyaW5nTWVtYmVyIikpOworICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFs
dWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsU3RyaW5nTWVt
YmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQucGFydGlhbFN0cmluZ01l
bWJlciA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgcGFydGlhbFN0cmluZ01lbWJlclZh
bHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcnRpYWxTdHJpbmdNZW1iZXIgPSBjb252ZXJ0PElETERP
TVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBKU1ZhbHVlIHBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlOwog
ICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFydGlhbFN0cmluZ01lbWJlcldp
dGhFbmFibGVkQnlTZXR0aW5nVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdN
ZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZyIpKTsKKyAgICAgICAgcGFydGlhbFN0cmluZ01lbWJl
cldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxTdHJpbmdNZW1iZXJXaXRo
RW5hYmxlZEJ5U2V0dGluZyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxl
ZEJ5U2V0dGluZ1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnBhcnRpYWxT
dHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihz
dGF0ZSwgcGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFsdWUpOworICAg
ICAgICByZXN1bHQucGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nID0gY29u
dmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHBhcnRpYWxTdHJpbmdNZW1i
ZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIHBhcnRpYWxVbnNpZ25lZExv
bmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1ZhbHVlOwogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsVW5zaWduZWRM
b25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1w
bGVtZW50ZWRBcyIpKTsKKyAgICAgICAgcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBs
ZW1lbnRlZEFzVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVt
ZW50ZWRBcyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50
ZWRBc1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnBhcnRpYWxVbnNpZ25l
ZExvbmdNZW1iZXIgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oc3RhdGUsIHBhcnRpYWxVbnNp
Z25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1ZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBh
cnRpYWxVbnNpZ25lZExvbmdNZW1iZXIgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFz
VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIEpTVmFsdWUgc3RyaW5nTWVtYmVyVmFsdWU7CiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICBzdHJpbmdNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHN0cmluZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nTWVtYmVyIikpOworICAgICAgICBzdHJp
bmdNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc3RyaW5nTWVtYmVy
VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuc3RyaW5nTWVtYmVyID0gY29u
dmVydDxJRExET01TdHJpbmc+KHN0YXRlLCBzdHJpbmdNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJl
c3VsdC5zdHJpbmdNZW1iZXIgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgc3RyaW5nTWVtYmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTQzo6SlNP
YmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFRlc3RJbmhlcml0ZWREaWN0aW9uYXJ5
JiBkaWN0aW9uYXJ5KQorSlNDOjpKU09iamVjdCogY29udmVydERpY3Rpb25hcnlUb0pTKEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFRlc3RJbmhlcml0ZWREaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQog
ewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogCi0gICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdCgmc3RhdGUsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgYXV0
byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKIAogICAgIGlmICghSURMQm9vbGVhbjo6aXNO
dWxsVmFsdWUoZGljdGlvbmFyeS5ib29sTWVtYmVyKSkgewogICAgICAgICBhdXRvIGJvb2xNZW1i
ZXJWYWx1ZSA9IHRvSlM8SURMQm9vbGVhbj4oSURMQm9vbGVhbjo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKGRpY3Rpb25hcnkuYm9vbE1lbWJlcikpOwogICAgICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbE1lbWJlciIpLCBib29s
TWVtYmVyVmFsdWUpOwogICAgIH0KICAgICBpZiAoIUlETENhbGxiYWNrRnVuY3Rpb248SlNWb2lk
Q2FsbGJhY2s+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmNhbGxiYWNrTWVtYmVyKSkgewotICAg
ICAgICBhdXRvIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pTPElETENhbGxiYWNrRnVuY3Rpb248
SlNWb2lkQ2FsbGJhY2s+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExDYWxsYmFja0Z1bmN0aW9u
PEpTVm9pZENhbGxiYWNrPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuY2Fs
bGJhY2tNZW1iZXIpKTsKKyAgICAgICAgYXV0byBjYWxsYmFja01lbWJlclZhbHVlID0gdG9KUzxJ
RExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPjo6ZXh0cmFj
dFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuY2FsbGJhY2tNZW1iZXIpKTsKICAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNh
bGxiYWNrTWVtYmVyIiksIGNhbGxiYWNrTWVtYmVyVmFsdWUpOwogICAgIH0KICAgICBpZiAoIUlE
TEJvb2xlYW46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkucGFydGlhbEJvb2xlYW5NZW1iZXIpKSB7
CkBAIC0xOTAsMTggKzE5MCwxOCBAQCBKU0M6OkpTT2JqZWN0KiBjb252ZXJ0RGljdGlvbmFyeVRv
SlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZwogICAgIH0KICNl
bmRpZgogICAgIGlmICghSURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz46OmlzTnVs
bFZhbHVlKGRpY3Rpb25hcnkucGFydGlhbENhbGxiYWNrTWVtYmVyKSkgewotICAgICAgICBhdXRv
IHBhcnRpYWxDYWxsYmFja01lbWJlclZhbHVlID0gdG9KUzxJRExDYWxsYmFja0Z1bmN0aW9uPEpT
Vm9pZENhbGxiYWNrPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgSURMQ2FsbGJhY2tGdW5jdGlvbjxK
U1ZvaWRDYWxsYmFjaz46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnBhcnRp
YWxDYWxsYmFja01lbWJlcikpOworICAgICAgICBhdXRvIHBhcnRpYWxDYWxsYmFja01lbWJlclZh
bHVlID0gdG9KUzxJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxi
YWNrPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbENhbGxiYWNr
TWVtYmVyKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsQ2FsbGJhY2tNZW1iZXIiKSwgcGFydGlhbENhbGxiYWNr
TWVtYmVyVmFsdWUpOwogICAgIH0KICAgICBhdXRvIHBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXJW
YWx1ZSA9IHRvSlM8SURMTG9uZz4oZGljdGlvbmFyeS5wYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVy
KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAicGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlciIpLCBwYXJ0aWFsUmVxdWlyZWRMb25nTWVt
YmVyVmFsdWUpOwogICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5
LnBhcnRpYWxTdHJpbmdNZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8gcGFydGlhbFN0cmluZ01lbWJl
clZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBJRExET01TdHJpbmc6OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnBhcnRpYWxTdHJpbmdNZW1iZXIpKTsKKyAgICAg
ICAgYXV0byBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgSURMRE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUo
ZGljdGlvbmFyeS5wYXJ0aWFsU3RyaW5nTWVtYmVyKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsU3RyaW5nTWVt
YmVyIiksIHBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZSk7CiAgICAgfQogICAgIGlmIChkb3duY2Fz
dDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmdsb2JhbE9iamVjdCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmdFbmFibGVkKCkp
IHsKICAgICAgICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkucGFy
dGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nKSkgewotICAgICAgICAgICAgYXV0
byBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1ZSA9IHRvSlM8SURM
RE9NU3RyaW5nPihzdGF0ZSwgSURMRE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUo
ZGljdGlvbmFyeS5wYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmcpKTsKKyAg
ICAgICAgICAgIGF1dG8gcGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nVmFs
dWUgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgSURMRE9NU3RyaW5n
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5wYXJ0aWFsU3RyaW5nTWVtYmVy
V2l0aEVuYWJsZWRCeVNldHRpbmcpKTsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0
aEVuYWJsZWRCeVNldHRpbmciKSwgcGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0
aW5nVmFsdWUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjEwLDcgKzIxMCw3IEBAIEpTQzo6SlNP
YmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnCiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsVW5zaWduZWRMb25nTWVtYmVyV2l0aEltcGxl
bWVudGVkQXMiKSwgcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFs
dWUpOwogICAgIH0KICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFsdWUoZGljdGlvbmFy
eS5zdHJpbmdNZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8gc3RyaW5nTWVtYmVyVmFsdWUgPSB0b0pT
PElETERPTVN0cmluZz4oc3RhdGUsIElETERPTVN0cmluZzo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKGRpY3Rpb25hcnkuc3RyaW5nTWVtYmVyKSk7CisgICAgICAgIGF1dG8gc3RyaW5nTWVtYmVy
VmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgSURMRE9NU3Ry
aW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zdHJpbmdNZW1iZXIpKTsK
ICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgInN0cmluZ01lbWJlciIpLCBzdHJpbmdNZW1iZXJWYWx1ZSk7CiAgICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5oZXJpdGVkRGljdGlvbmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluaGVyaXRlZERpY3Rpb25hcnkuaAppbmRleCAz
NDhlNmUwYmRkZWE3ZTYwNjkxM2UwODEwNjFlMThkZTBlYmEzNDAzLi5lOTcxMTRjNDhiMmY0OWRj
YTExZWQ1Nzg4MTNjM2Q0MzAwNGJlN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5oZXJpdGVkRGljdGlvbmFyeS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmhlcml0ZWREaWN0
aW9uYXJ5LmgKQEAgLTI1LDggKzI1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1w
bGF0ZTw+IFRlc3RJbmhlcml0ZWREaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RJbmhl
cml0ZWREaWN0aW9uYXJ5PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0
ZTw+IFRlc3RJbmhlcml0ZWREaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RJbmhlcml0
ZWREaWN0aW9uYXJ5PihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKIAotSlND
OjpKU09iamVjdCogY29udmVydERpY3Rpb25hcnlUb0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBjb25zdCBUZXN0SW5oZXJpdGVkRGljdGlvbmFyeSYpOworSlNDOjpKU09i
amVjdCogY29udmVydERpY3Rpb25hcnlUb0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0RPTUds
b2JhbE9iamVjdCYsIGNvbnN0IFRlc3RJbmhlcml0ZWREaWN0aW9uYXJ5Jik7CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggM2NlZDQ0ZWZmZjhhYmY2
YWUwZTA2MjgzNzA4NGM1NWVhMWJhYTdhZC4uMWJhZDRkMjI1N2Q5MGViN2ZjODJjNjYyYjBjZWI1
NWUxMzg3NTRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTk4LDU1ICs5OCw1NSBAQCBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JGdW5jdGlvblN1cHBsZW1lbnRhbAogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVh
ZE9ubHlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
ckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKICNlbmRpZgogI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0
dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3Rh
dGljQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIxKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25k
aXRpb24yMykKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c1N0cjMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzTm9kZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3Rh
dGljUmVhZE9ubHlBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25k
aXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsU3RyMyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsTm9kZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVJlZmxlY3RBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNl
dEpTVGVzdEludGVyZmFjZVJlZmxlY3RBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlUmVmbGVjdEF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VSZWZsZWN0QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNlbmRpZgogCiBjbGFzcyBKU1Rlc3RJbnRl
cmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKQEAgLTI0NSwy
NCArMjQ1LDI0IEBAIHN0YXRpY19hc3NlcnQoVGVzdFN1cHBsZW1lbnRhbDo6U1VQUExFTUVOVEFM
Q09OU1RBTlQxID09IDEsICJTVVBQTEVNRU5UQUxDT05TVEFOCiBzdGF0aWNfYXNzZXJ0KFRlc3RT
dXBwbGVtZW50YWw6OkNPTlNUX0lNUEwgPT0gMiwgIkNPTlNUX0lNUEwgaW4gVGVzdFN1cHBsZW1l
bnRhbCBkb2VzIG5vdCBtYXRjaCB2YWx1ZSBmcm9tIElETCIpOwogI2VuZGlmCiAKLXRlbXBsYXRl
PD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
cjo6Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3Rh
dGUpCit0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3IqPihzdGF0ZS0+anNDYWxsZWUoKSk7CisgICAgYXV0byogY2FzdGVkVGhp
cyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIGF1dG8q
IGNvbnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYg
KFVOTElLRUxZKCFjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIHRocm93Q29uc3RydWN0b3JTY3Jp
cHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJU
ZXN0SW50ZXJmYWNlIik7Ci0gICAgYXV0byBzdHIxID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICAgICAgcmV0dXJuIHRocm93
Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIlRlc3RJbnRlcmZhY2UiKTsKKyAgICBhdXRvIHN0
cjEgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBzdHIyID0gc3RhdGUtPmFyZ3VtZW50
KDEpLmlzVW5kZWZpbmVkKCkgPyAiZGVmYXVsdFN0cmluZyJfcyA6IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byBzdHIy
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gImRlZmF1bHRTdHJpbmci
X3MgOiBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0SW50ZXJmYWNl
OjpjcmVhdGUoKmNvbnRleHQsIFdURk1vdmUoc3RyMSksIFdURk1vdmUoc3RyMikpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdElu
dGVyZmFjZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXds
eUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RJbnRlcmZhY2U+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBXVEZNb3ZlKG9iamVj
dCkpKTsKIH0KIAogdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
Ojpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCkBAIC00NDMsMzMgKzQ0MywzMyBAQCB2b2lkIEpTVGVzdEludGVy
ZmFjZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RJ
bnRlcmZhY2U6On5KU1Rlc3RJbnRlcmZhY2UoKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0SW50ZXJmYWNlKiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Y2FzdChFeGVjU3Rh
dGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSBK
U1Rlc3RJbnRlcmZhY2UqIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpjYXN0KEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUp
CiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oc3RhdGUudm0o
KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0
PEpTVGVzdEludGVyZmFjZSo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdElu
dGVyZmFjZSogSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFjZT46OmNhc3QoRXhlY1N0YXRlJiBz
dGF0ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEludGVyZmFjZSogSURMT3BlcmF0aW9uPEpT
VGVzdEludGVyZmFjZT46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVz
dEludGVyZmFjZSo+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4g
anNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZVByb3RvdHlwZSo+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKHN0
YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
CiB9CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Citib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKQEAgLTQ3Nyw1
NjMgKzQ3Nyw1NjMgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEUKIH0KIAogI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1Jl
YWRPbmx5QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9u
Zz4oc3RhdGUsIHRocm93U2NvcGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNSZWFk
T25seUF0dHIoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZh
Y2U+OjpnZXRTdGF0aWM8anNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGlj
UmVhZE9ubHlBdHRyR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNTdGF0aWNS
ZWFkT25seUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46
OmdldFN0YXRpYzxqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFk
T25seUF0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJpbXBsZW1l
bnRzU3RhdGljUmVhZE9ubHlBdHRyIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93
U2NvcGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRyKCkpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBUZXN0SW50ZXJm
YWNlOjppbXBsZW1lbnRzU3RhdGljQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRz
U3RhdGljQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RJbnRlcmZhY2U+OjpnZXRTdGF0aWM8anNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJ
bXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJpbXBsZW1lbnRz
U3RhdGljQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6
Z2V0U3RhdGljPGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJH
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJpbXBsZW1lbnRzU3RhdGlj
QXR0ciIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxF
KENvbmRpdGlvbjIzKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2YWx1
ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBb
Jl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gVGVzdEludGVyZmFjZTo6c2V0SW1wbGVtZW50
c1N0YXRpY0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0
YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0U3RhdGlj
PHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJTZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzU3RhdGljQXR0ciIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0U3RhdGljPHNl
dEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJTZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImltcGxlbWVudHNT
dGF0aWNBdHRyIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
SW1wbGVtZW50c1N0cjFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1lbnRz
U3RyMSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmltcGxlbWVudHNTdHIxKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVu
dHNTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjEoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJm
YWNlPjo6Z2V0PGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNTdHIx
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpnZXQ8anNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpB
c3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJpbXBsZW1lbnRzU3RyMSIp
OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRp
dGlvbjIzKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuaW1wbGVtZW50c1N0cjIoKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46OmdldDxq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJpbXBsZW1lbnRzU3RyMiIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50c1N0cjIiKTsKIH0KIAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMlNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
LSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAg
QXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsm
XSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEltcGxlbWVudHNTdHIyKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c1N0cjIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0PHNldEpTVGVz
dEludGVyZmFjZUltcGxlbWVudHNTdHIyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAiaW1wbGVtZW50c1N0cjIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEludGVyZmFjZT46OnNldDxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMlNldHRlcj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1wbGVtZW50
c1N0cjIiKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyM0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC5pbXBsZW1lbnRzU3RyMyhzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiB0aGlz
T2JqZWN0LmltcGxlbWVudHNTdHIzKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46OmdldDxqc1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzU3RyM0dldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0
YXRlLCB0aGlzVmFsdWUsICJpbXBsZW1lbnRzU3RyMyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50c1N0cjMiKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM1NldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjNTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgdGhp
c09iamVjdC5zZXRJbXBsZW1lbnRzU3RyMyhzdGF0ZSwgdmFsdWUpOworICAgIHRoaXNPYmplY3Qu
c2V0SW1wbGVtZW50c1N0cjMobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RJbnRlcmZhY2U+OjpzZXQ8c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNTZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzU3RyMyIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6c2V0PHNldEpTVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIzU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJpbXBsZW1lbnRzU3RyMyIpOwogfQogCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SW50ZXJmYWNl
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxOb2RlPj4oc3Rh
dGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmltcGxlbWVu
dHNOb2RlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+
KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLmltcGxlbWVudHNOb2RlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudHNOb2RlIik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpnZXQ8anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05v
ZGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJpbXBsZW1lbnRzTm9kZSIpOwogfQogCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0ZSwgdmFsdWUsIFtdKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2RlIiwg
Ik5vZGUiKTsgfSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNl
PE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0
dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RJbnRlcmZh
Y2UiLCAiaW1wbGVtZW50c05vZGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUs
IHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEltcGxl
bWVudHNOb2RlKCpuYXRpdmVWYWx1ZSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFj
ZT46OnNldDxzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZVNldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImltcGxlbWVudHNOb2RlIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpzZXQ8c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c05vZGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgImltcGxlbWVudHNOb2RlIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1Jl
YWRPbmx5QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9u
Zz4oc3RhdGUsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1Jl
YWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3Vw
cGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46OmdldFN0YXRpYzxqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdldHRlcj4oKnN0
YXRlLCB0aGlzVmFsdWUsICJzdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46OmdldFN0YXRpYzxqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5
QXR0ciIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgdGhyb3dTY29wZSwgV2ViQ29y
ZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0cigpKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgV2ViQ29yZTo6
VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0cigpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1
cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0U3RhdGljPGpzVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdldHRlcj4oKnN0YXRlLCB0
aGlzVmFsdWUsICJzdXBwbGVtZW50YWxTdGF0aWNBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpnZXRTdGF0aWM8anNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAic3VwcGxlbWVudGFsU3RhdGljQXR0ciIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0clNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3Vw
cGxlbWVudGFsU3RhdGljQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNl
dHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6
OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVt
ZW50YWxTdGF0aWNBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46OnNldFN0YXRpYzxzZXRKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxTdGF0aWNBdHRyIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpzZXRTdGF0aWM8c2V0SlNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxT
dGF0aWNBdHRyIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyMUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Um
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRl
c3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wbCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wbCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBs
ZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIxKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dEludGVyZmFjZT46OmdldDxqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInN1cHBs
ZW1lbnRhbFN0cjEiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46
OmdldDxqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic3Vw
cGxlbWVudGFsU3RyMSIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0SW50ZXJm
YWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBXZWJDb3Jl
OjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGltcGwpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGltcGwpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsU3RyMihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RJbnRlcmZhY2U+OjpnZXQ8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJz
dXBwbGVtZW50YWxTdHIyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZh
Y2U+OjpnZXQ8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
InN1cHBsZW1lbnRhbFN0cjIiKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdElu
dGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIy
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZh
Y2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpj
YWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RyMihpbXBsLCBXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+Ojpz
ZXQ8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMlNldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjIiKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46OnNldDxzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVt
ZW50YWxTdHIyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJzdXBwbGVtZW50YWxTdHIyIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SW50ZXJmYWNlJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiB0aGlzT2JqZWN0
LnN1cHBsZW1lbnRhbFN0cjMoc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC5zdXBwbGVtZW50YWxTdHIzKGxleGljYWxH
bG9iYWxPYmplY3QpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVt
ZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJ
bnRlcmZhY2U+OjpnZXQ8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdXBwbGVt
ZW50YWxTdHIzIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+Ojpn
ZXQ8anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInN1cHBs
ZW1lbnRhbFN0cjMiKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxTdHIzU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEludGVyZmFj
ZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHRoaXNPYmplY3Quc2V0U3Vw
cGxlbWVudGFsU3RyMyhzdGF0ZSwgdmFsdWUpOworICAgIHRoaXNPYmplY3Quc2V0U3VwcGxlbWVu
dGFsU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJ
bnRlcmZhY2U+OjpzZXQ8c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM1NldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN1cHBsZW1lbnRhbFN0cjMiKTsKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEludGVyZmFjZT46OnNldDxzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIzU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxTdHIzIik7CiB9CiAKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
Tm9kZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SW50
ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxOb2Rl
Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBXZWJDb3Jl
OjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxOb2RlKGltcGwpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgV2ViQ29yZTo6VGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBsKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpz
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3VwcGxlbWVudGFsTm9kZSIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzdXBwbGVtZW50YWxOb2RlIik7CiB9
CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MTIpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9k
ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0
ZSwgdmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0SW50ZXJmYWNl
IiwgInN1cHBsZW1lbnRhbE5vZGUiLCAiTm9kZSIpOyB9KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxOb2RlIiwgIk5vZGUiKTsg
fSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0
cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0
ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsTm9k
ZShpbXBsLCAqbmF0aXZlVmFsdWUpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJm
YWNlPjo6c2V0PHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdXBwbGVtZW50YWxOb2RlIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpzZXQ8c2V0SlNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsTm9kZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAic3VwcGxlbWVudGFsTm9kZSIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVJlZmxlY3RBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVJlZmxlY3RBdHRyaWJ1dGVH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFj
ZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0
aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0YXR0cmlidXRlQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RhdHRyaWJ1dGVBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlUmVmbGVjdEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVJlZmxlY3RBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVyZmFjZVJl
ZmxlY3RBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAicmVmbGVjdEF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0SW50ZXJmYWNlPjo6Z2V0PGpzVGVzdEludGVyZmFjZVJlZmxlY3RBdHRyaWJ1
dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJyZWZsZWN0QXR0cmlidXRlIik7CiB9CiAKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlUmVmbGVjdEF0dHJpYnV0ZVNldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlUmVmbGVjdEF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsK
ICAgICAgICAgcmV0dXJuIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGVBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlUmVmbGVjdEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlUmVmbGVjdEF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2U+OjpzZXQ8c2V0SlNU
ZXN0SW50ZXJmYWNlUmVmbGVjdEF0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgInJlZmxlY3RBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdEludGVyZmFjZT46OnNldDxzZXRKU1Rlc3RJbnRlcmZhY2VSZWZsZWN0QXR0cmlidXRl
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJy
ZWZsZWN0QXR0cmlidXRlIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIy
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMUJvZHko
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0SW50ZXJm
YWNlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVBy
b3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDFCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaW1wbC5pbXBsZW1lbnRzTWV0aG9k
MSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rp
b25JbXBsZW1lbnRzTWV0aG9kMShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QxKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFjZT46
OmNhbGw8anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMUJv
ZHk+KCpzdGF0ZSwgImltcGxlbWVudHNNZXRob2QxIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxsPGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
SW1wbGVtZW50c01ldGhvZDFCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
ImltcGxlbWVudHNNZXRob2QxIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMkJv
ZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0SW50
ZXJmYWNlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDJCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvIHN0ckFy
ZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CisgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBv
YmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMSwgIm9i
akFyZyIsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRob2QyIiwgIlRlc3RPYmoiKTsg
fSk7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgMSwgIm9iakFyZyIsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNNZXRob2QyIiwgIlRl
c3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNl
PFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5pbXBsZW1lbnRzTWV0aG9kMigqY29udGV4dCwgV1RGTW92ZShzdHJBcmcpLCAqb2Jq
QXJnKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVz
dE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIGltcGwuaW1wbGVtZW50c01ldGhvZDIoKmNvbnRleHQsIFdURk1vdmUoc3Ry
QXJnKSwgKm9iakFyZykpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhv
ZDIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0SW50ZXJmYWNlPjo6Y2FsbDxqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVG
dW5jdGlvbkltcGxlbWVudHNNZXRob2QyQm9keT4oKnN0YXRlLCAiaW1wbGVtZW50c01ldGhvZDIi
KTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFjZT46OmNhbGw8anNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMkJvZHk+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiaW1wbGVtZW50c01ldGhvZDIiKTsKIH0KIAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVG
dW5jdGlvbkltcGxlbWVudHNNZXRob2QzQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0
aG9kM0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFj
ZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlz
LT5pbXBsZW1lbnRzTWV0aG9kMygqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhc3RlZFRoaXMtPmltcGxlbWVudHNNZXRob2QzKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QzKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdEludGVyZmFjZT46OmNhbGw8anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aG9kM0JvZHk+KCpzdGF0ZSwgImltcGxlbWVudHNNZXRob2QzIik7CisgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxsPGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDNCb2R5PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgImltcGxlbWVudHNNZXRob2QzIik7CiB9CiAKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlv
bkltcGxlbWVudHNNZXRob2Q0Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDRCb2R5KEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VGVzdEludGVyZmFjZTo6aW1wbGVtZW50c01ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kNChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uSW1wbGVt
ZW50c01ldGhvZDQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0SW50ZXJmYWNlPjo6Y2FsbFN0YXRpYzxqc1Rlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDRCb2R5Pigqc3RhdGUsICJp
bXBsZW1lbnRzTWV0aG9kNCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0SW50ZXJm
YWNlPjo6Y2FsbFN0YXRpYzxqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckZ1bmN0aW9uSW1wbGVt
ZW50c01ldGhvZDRCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImltcGxl
bWVudHNNZXRob2Q0Iik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXNCb2R5KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFjZT46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5j
dGlvblRha2VOb2Rlc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVz
dEludGVyZmFjZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIGltcGxSZXN1bHQgPSBpbXBsLnRha2VOb2RlcygpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8Tm9k
ZT4+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShpbXBsUmVz
dWx0Lm5vZGVzKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5j
ZTxJRExJbnRlcmZhY2U8Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKGltcGxSZXN1bHQubm9kZXMpKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25U
YWtlTm9kZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25UYWtlTm9kZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0SW50ZXJmYWNlPjo6Y2FsbDxqc1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGVGdW5jdGlvblRha2VOb2Rlc0JvZHk+KCpzdGF0ZSwgInRha2VOb2RlcyIpOwor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0SW50ZXJmYWNlPjo6Y2FsbDxqc1Rlc3RJbnRl
cmZhY2VQcm90b3R5cGVGdW5jdGlvblRha2VOb2Rlc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FsbEZyYW1lLCAidGFrZU5vZGVzIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxN
ZXRob2QxQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RJbnRlcmZhY2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxQm9keShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0SW50ZXJmYWNlPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFdlYkNvcmU6
OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDEoaW1wbCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1l
dGhvZDEoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rp
b25TdXBwbGVtZW50YWxNZXRob2QxKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0
KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFjZT46OmNhbGw8anNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QxQm9keT4oKnN0YXRl
LCAic3VwcGxlbWVudGFsTWV0aG9kMSIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0
SW50ZXJmYWNlPjo6Y2FsbDxqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1l
bnRhbE1ldGhvZDFCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInN1cHBs
ZW1lbnRhbE1ldGhvZDEiKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDJCb2R5
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdEludGVy
ZmFjZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDJCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvIHN0ckFy
ZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CisgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBv
YmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMSwgIm9i
akFyZyIsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE1ldGhvZDIiLCAiVGVzdE9iaiIp
OyB9KTsKKyAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgW10o
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNj
b3BlLCAxLCAib2JqQXJnIiwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTWV0aG9kMiIs
ICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVy
ZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDIoaW1w
bCwgKmNvbnRleHQsIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBXZWJDb3JlOjpU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKGltcGwsICpjb250ZXh0LCBXVEZN
b3ZlKHN0ckFyZyksICpvYmpBcmcpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxl
bWVudGFsTWV0aG9kMihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxsPGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMkJvZHk+KCpzdGF0ZSwgInN1cHBs
ZW1lbnRhbE1ldGhvZDIiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFj
ZT46OmNhbGw8anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRo
b2QyQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJzdXBwbGVtZW50YWxN
ZXRob2QyIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QzQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNUZXN0SW50ZXJmYWNlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbE1ldGhvZDMoKnN0YXRlKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5zdXBwbGVtZW50YWxNZXRob2Qz
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50
YWxNZXRob2QzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1
bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9i
amVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpjYWxsPGpz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kM0JvZHk+KCpz
dGF0ZSwgInN1cHBsZW1lbnRhbE1ldGhvZDMiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdEludGVyZmFjZT46OmNhbGw8anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBw
bGVtZW50YWxNZXRob2QzQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJz
dXBwbGVtZW50YWxNZXRob2QzIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhv
ZDRCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2Q0Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFdlYkNvcmU6OlRlc3RT
dXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2Q0KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25TdXBw
bGVtZW50YWxNZXRob2Q0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFjZT46OmNhbGxTdGF0aWM8anNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDRCb2R5Pigqc3Rh
dGUsICJzdXBwbGVtZW50YWxNZXRob2Q0Iik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RJbnRlcmZhY2U+OjpjYWxsU3RhdGljPGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rp
b25TdXBwbGVtZW50YWxNZXRob2Q0Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICJzdXBwbGVtZW50YWxNZXRob2Q0Iik7CiB9CiAKICNlbmRpZgpAQCAtMTA2Nyw3ICsxMDY3
LDcgQEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2VPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnQKICAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwg
JmpzVGVzdEludGVyZmFjZS0+d3JhcHBlZCgpLCBqc1Rlc3RJbnRlcmZhY2UpOwogfQogCi1KU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0SW50ZXJmYWNlPiYmIGltcGwpCitKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJbnRlcmZhY2U+JiYgaW1wbCkKIHsKICAgICAvLyBJ
ZiB5b3UgaGl0IHRoaXMgZmFpbHVyZSB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24gaGFzIHRoZSBJ
bXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlCiAgICAgLy8gYXR0cmlidXRlLiBZb3Ugc2hvdWxkIHJl
bW92ZSB0aGF0IGF0dHJpYnV0ZS4gSWYgdGhlIGNsYXNzIGhhcyBzdWJjbGFzc2VzCkBAIC0xMDc3
LDkgKzEwNzcsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdy
YXBwZXI8VGVzdEludGVyZmFjZT4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUZXN0SW50ZXJmYWNlJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdEludGVyZmFjZSYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3Jh
cChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0SW50ZXJmYWNlKiBKU1Rl
c3RJbnRlcmZhY2U6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEludGVyZmFjZS5oCmluZGV4IGY2NzhiYmUyYWIyOTkwOTZiMzRjMmQ4NDAzMWRiZTAwMWU2
MWUzNTIuLjM1Njg5NzE0OTQ0Y2FiOTk2ZjQ5NmUzMDlhMGRjNzI2Y2JmYTRkNzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW50ZXJmYWNlLmgKQEAgLTQxLDggKzQxLDggQEAgY2xhc3MgV0VCQ09SRV9FWFBPUlQgSlNUZXN0
SW50ZXJmYWNlIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0SW50ZXJmYWNlPiB7CiAgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBUZXN0SW50ZXJmYWNlKiB0b1dyYXBwZWQo
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0Nl
bGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlND
OjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlND
ZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6
SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC01NywyNCArNTcsMjQgQEAgY2xhc3Mg
V0VCQ09SRV9FWFBPUlQgSlNUZXN0SW50ZXJmYWNlIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0
SW50ZXJmYWNlPiB7CiAKICAgICAvLyBDdXN0b20gYXR0cmlidXRlcwogI2lmIEVOQUJMRShDb25k
aXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIEpTQzo6SlNWYWx1ZSBpbXBsZW1l
bnRzU3RyMyhKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSBpbXBsZW1l
bnRzU3RyMyhKU0M6OkpTR2xvYmFsT2JqZWN0JikgY29uc3Q7CiAjZW5kaWYKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLSAgICB2b2lkIHNldEltcGxlbWVu
dHNTdHIzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICB2b2lkIHNldEltcGxl
bWVudHNTdHIzKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgSlNDOjpK
U1ZhbHVlIHN1cHBsZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUmKSBjb25zdDsKKyAgICBKU0M6
OkpTVmFsdWUgc3VwcGxlbWVudGFsU3RyMyhKU0M6OkpTR2xvYmFsT2JqZWN0JikgY29uc3Q7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAg
ICB2b2lkIHNldFN1cHBsZW1lbnRhbFN0cjMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OworICAgIHZvaWQgc2V0U3VwcGxlbWVudGFsU3RyMyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlND
OjpKU1ZhbHVlKTsKICNlbmRpZgogCiAgICAgLy8gQ3VzdG9tIGZ1bmN0aW9ucwogI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIEpTQzo6SlNWYWx1ZSBp
bXBsZW1lbnRzTWV0aG9kMyhKU0M6OkV4ZWNTdGF0ZSYpOworICAgIEpTQzo6SlNWYWx1ZSBpbXBs
ZW1lbnRzTWV0aG9kMyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmKTsKICNl
bmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAg
IEpTQzo6SlNWYWx1ZSBzdXBwbGVtZW50YWxNZXRob2QzKEpTQzo6RXhlY1N0YXRlJik7CisgICAg
SlNDOjpKU1ZhbHVlIHN1cHBsZW1lbnRhbE1ldGhvZDMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpT
Qzo6Q2FsbEZyYW1lJik7CiAjZW5kaWYKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbnRlcmZhY2Uo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW50ZXJmYWNlPiYm
KTsKQEAgLTk5LDEwICs5OSwxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0SW50ZXJm
YWNlKiB3cmFwcGFibGVPYmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAot
V0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIFRlc3RJbnRlcmZhY2UmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3RJbnRlcmZhY2UqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEludGVyZmFj
ZT4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdElu
dGVyZmFjZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQor
V0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdEludGVyZmFjZSYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJbnRlcmZhY2UqIGltcGwpIHsgcmV0dXJuIGltcGwg
PyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpq
c051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RJbnRlcmZhY2U+JiYpOworaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxU
ZXN0SW50ZXJmYWNlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6
IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFRlc3RJbnRlcmZhY2U+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rl
c3RJbnRlcmZhY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlLmNwcAppbmRleCBkYmQ5MDc2MzUyY2ExNGFlODVmMGE2ZjQzN2FlNDRjM2VlY2QyOTgz
Li4yNzEzMDE4NmI2M2RlZTIxZjk0ODE1NmQ5ZWM3NmUyZGUzNDMxNmE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5jcHAKQEAgLTQyLDkgKzQy
LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFkb25s
eShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmVSZWFkb25seShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBjbGFzcyBKU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgpAQCAtMTQxLDQ2ICsxNDEsNDYgQEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2VMZWFk
aW5nVW5kZXJzY29yZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0
LT5KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6fkpTVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlKCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEludGVyZmFjZUxl
YWRpbmdVbmRlcnNjb3JlKiBJRExBdHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmU+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkK
K3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKiBJRExB
dHRyaWJ1dGU8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+OjpjYXN0KEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmUqPihzdGF0ZS52bSgpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJu
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUqPihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUHJv
dG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEludGVyZmFjZUxl
YWRpbmdVbmRlcnNjb3JlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5n
bG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAK
LWJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKICAgICByZXR1cm4gcHJvdG90eXBl
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVJlYWRvbmx5R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUxlYWRp
bmdVbmRlcnNjb3JlUmVhZG9ubHlHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwucmVh
ZG9ubHkoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5yZWFkb25seSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJz
Y29yZVJlYWRvbmx5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmVSZWFkb25seShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT46OmdldDxqc1Rlc3RJbnRlcmZh
Y2VMZWFkaW5nVW5kZXJzY29yZVJlYWRvbmx5R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRvbmx5Iik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT46OmdldDxqc1Rlc3RJ
bnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZVJlYWRvbmx5R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAicmVhZG9u
bHkiKTsKIH0KIAogdm9pZCBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpAQCAtMjA3LDcgKzIw
Nyw3IEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVPd25lcjo6ZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoCiAgICAgdW5jYWNoZVdyYXBwZXIod29ybGQs
ICZqc1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS0+d3JhcHBlZCgpLCBqc1Rlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT4mJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+JiYgaW1wbCkK
IHsKICAgICAvLyBJZiB5b3UgaGl0IHRoaXMgZmFpbHVyZSB0aGUgaW50ZXJmYWNlIGRlZmluaXRp
b24gaGFzIHRoZSBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlCiAgICAgLy8gYXR0cmlidXRlLiBZ
b3Ugc2hvdWxkIHJlbW92ZSB0aGF0IGF0dHJpYnV0ZS4gSWYgdGhlIGNsYXNzIGhhcyBzdWJjbGFz
c2VzCkBAIC0yMTcsOSArMjE3LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVy
biBjcmVhdGVXcmFwcGVyPFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT4oZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmUmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUmIGltcGwpCiB7Ci0gICAgcmV0dXJu
IHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNh
bEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogVGVzdEludGVyZmFjZUxl
YWRpbmdVbmRlcnNjb3JlKiBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTo6dG9XcmFw
cGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1Vu
ZGVyc2NvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5oCmluZGV4IDNkODNhZmRhNDIwMjM4NmM5YmY1
NTNhOTgyNGEyZTFiMGQ4NWY1ODIuLmEwZjBjZWZjMWFjNjI1MDBjZDc3NTAzNzIxYjdmM2M0MTFm
NDA1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29y
ZS5oCkBAIC03MywxMCArNzMsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlKiB3cmFwcGFibGVPYmplY3QpCiAgICAgcmV0dXJuIHdyYXBw
YWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSYpOwotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlKiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6Ompz
TnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT4m
Jik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdEludGVy
ZmFjZUxlYWRpbmdVbmRlcnNjb3JlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlD
cmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6
OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUmKTsKK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmUqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgUmVmPFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZT4mJik7CitpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RJbnRl
cmZhY2VMZWFkaW5nVW5kZXJzY29yZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5
Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5v
bk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU+IHsKICAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJdGVyYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SXRlcmFibGUuY3BwCmluZGV4IDk5MzJiYzU2ZTc1YTYwZGMzZTliODE5NmRlZWQ5NjQ2
MTY3ZGM5MzUuLjQ0NmMwZGZiZmM3ODJkNTNiYmViYzU3MGIzZTljNGU2NGI0YmE5ZWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVy
YWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEl0ZXJhYmxlLmNwcApAQCAtNTEsOCArNTEsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpK
UwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJdGVyYWJsZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RJdGVyYWJsZVBy
b3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTUz
LDI4ICsxNTMsMjggQEAgdm9pZCBKU1Rlc3RJdGVyYWJsZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCog
Y2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RJdGVyYWJsZTo6fkpTVGVzdEl0ZXJhYmxlKCk7
CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEl0ZXJhYmxlKiBJRExPcGVyYXRpb248SlNU
ZXN0SXRlcmFibGU+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBK
U1Rlc3RJdGVyYWJsZSogSURMT3BlcmF0aW9uPEpTVGVzdEl0ZXJhYmxlPjo6Y2FzdChKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0g
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0SXRlcmFibGUqPihzdGF0ZS52bSgpLCBzdGF0
ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0SXRlcmFibGUq
PihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJdGVy
YWJsZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJdGVy
YWJsZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJdGVyYWJs
ZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90
eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdEl0ZXJhYmxlQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
cHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJdGVyYWJsZVByb3RvdHlwZSo+KHZtLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUp
KSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yCkBAIC0xOTYsNDggKzE5Niw0NCBAQCBjb25zdCBKU0M6OkNsYXNzSW5mbyBUZXN0
SXRlcmFibGVJdGVyYXRvcjo6c19pbmZvID0geyAiVGVzdEl0ZXJhYmxlIEl0ZXJhdG9yIiwgJgog
dGVtcGxhdGU8PgogY29uc3QgSlNDOjpDbGFzc0luZm8gVGVzdEl0ZXJhYmxlSXRlcmF0b3JQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RJdGVyYWJsZSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoVGVzdEl0ZXJhYmxlSXRlcmF0
b3JQcm90b3R5cGUpIH07CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0SXRl
cmFibGVQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0SXRl
cmFibGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCitzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQ2FsbGVyKEpT
R2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgSlNUZXN0SXRlcmFibGUqIHRoaXNPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYpCiB7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckNy
ZWF0ZTxUZXN0SXRlcmFibGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6OlZh
bHVlKSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVy
YWJsZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBzdGF0ZSkKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0SXRlcmFibGU+OjpjYWxsPGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVuY3Rp
b25FbnRyaWVzQ2FsbGVyPigqc3RhdGUsICJlbnRyaWVzIik7CisgICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RJdGVyYWJsZT46OmNhbGw8anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlv
bkVudHJpZXNDYWxsZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZW50cmll
cyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEl0ZXJhYmxlUHJv
dG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEl0ZXJhYmxlKiB0aGlz
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQorc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0NhbGxlcihKU0dsb2JhbE9iamVjdCos
IENhbGxGcmFtZSosIEpTVGVzdEl0ZXJhYmxlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
KQogewogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaXRlcmF0b3JDcmVhdGU8VGVzdEl0ZXJh
YmxlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpLZXkpKTsKIH0KIAotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJhYmxlUHJvdG90eXBlRnVu
Y3Rpb25LZXlzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUqIHN0YXRlKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEl0ZXJh
YmxlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RJdGVyYWJsZT46
OmNhbGw8anNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvbktleXNDYWxsZXI+KCpzdGF0ZSwg
ImtleXMiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEl0ZXJhYmxlPjo6Y2FsbDxq
c1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0NhbGxlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsICJrZXlzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RJdGVyYWJsZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKK3N0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZh
bHVlc0NhbGxlcihKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIEpTVGVzdEl0ZXJhYmxlKiB0
aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQogewogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoaXRlcmF0b3JDcmVhdGU8VGVzdEl0ZXJhYmxlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVy
YXRpb25LaW5kOjpWYWx1ZSkpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0SXRlcmFibGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBzdGF0ZSkKK0pTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVz
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RJdGVyYWJsZT46OmNhbGw8anNUZXN0SXRlcmFibGVQcm90
b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcj4oKnN0YXRlLCAidmFsdWVzIik7CisgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RJdGVyYWJsZT46OmNhbGw8anNUZXN0SXRlcmFibGVQcm90b3R5
cGVGdW5jdGlvblZhbHVlc0NhbGxlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJ2YWx1ZXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJdGVy
YWJsZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaENhbGxlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RJdGVyYWJsZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9u
Rm9yRWFjaENhbGxlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVGVzdEl0ZXJhYmxlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckZv
ckVhY2g8VGVzdEl0ZXJhYmxlSXRlcmF0b3I+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2Nv
cGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGl0ZXJhdG9yRm9yRWFjaDxUZXN0SXRl
cmFibGVJdGVyYXRvcj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICp0aGlzT2Jq
ZWN0LCB0aHJvd1Njb3BlKSk7CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBzdGF0ZSkKK0pTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJdGVyYWJsZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFj
aChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0SXRlcmFibGU+OjpjYWxsPGpzVGVzdEl0ZXJhYmxlUHJv
dG90eXBlRnVuY3Rpb25Gb3JFYWNoQ2FsbGVyPigqc3RhdGUsICJmb3JFYWNoIik7CisgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RJdGVyYWJsZT46OmNhbGw8anNUZXN0SXRlcmFibGVQcm90
b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZy
YW1lLCAiZm9yRWFjaCIpOwogfQogCiB2b2lkIEpTVGVzdEl0ZXJhYmxlOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkBAIC0yNzMsNyArMjY5LDcgQEAg
ZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMTJUZXN0SXRlcmFibGVFW107
IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJdGVy
YWJsZT4mJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0SXRlcmFi
bGU+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAgLTI5Nyw5
ICsyOTMsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBw
ZXI8VGVzdEl0ZXJhYmxlPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3RJdGVyYWJsZSYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3RJdGVyYWJsZSYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0SXRlcmFibGUqIEpTVGVzdEl0ZXJh
YmxlOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJdGVyYWJs
ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJh
YmxlLmgKaW5kZXggMmNjMmY5OGJmMjQzODVkMjY1OWQ3ZTA1YzdkMzkyYjdkYzgyNTU2NS4uZjcy
N2JhMWIwNWIzODk1OThlZmRjOGVhYjFiODQ2ZjA4OTRhZmIyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEl0ZXJhYmxlLmgK
QEAgLTczLDEwICs3MywxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0SXRlcmFibGUq
IHdyYXBwYWJsZU9iamVjdCkKICAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1KU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEl0
ZXJhYmxlJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SXRlcmFibGUqIGltcGwpIHsg
cmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNO
dWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEl0ZXJhYmxlPiYmKTsKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0SXRlcmFibGU+JiYgaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxl
YXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RJdGVyYWJsZSYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJdGVyYWJsZSogaW1w
bCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEl0ZXJh
YmxlPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWZQdHI8VGVzdEl0ZXJhYmxlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pT
TmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxl
YXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RJdGVyYWJsZT4gewogICAgIHVzaW5nIFdyYXBw
ZXJDbGFzcyA9IEpTVGVzdEl0ZXJhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5jcHAKaW5kZXggYjM2NTdlZDhhZjliZDEzYjkyYmRmNGVkNDk1NDE3MTkyY2YyNjFk
My4uNDdlMjcwZTE3ZmU1NjUzMjRlMjg3MDEzZTU5Y2NjZGZmYTYxY2M3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBAIC00MywxMSArNDMsMTEgQEAgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJvdG90eXBlRnVuY3Rpb25UZXMKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3Rv
bShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0
b20oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAog
Y2xhc3MgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0OSw4NyArMTQ5LDg3IEBAIHZvaWQgSlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAg
dGhpc09iamVjdC0+SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6On5KU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvcigpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciogSURMQXR0cmlidXRlPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6Y2FzdChF
eGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0ZW1wbGF0ZTw+IGlu
bGluZSBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogSURMQXR0cmlidXRlPEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0
PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oc3RhdGUudm0oKSwgSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IqIElETE9wZXJhdGlvbjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OmNh
c3QoRXhlY1N0YXRlJiBzdGF0ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yKiBJRExPcGVyYXRpb248SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I+OjpjYXN0
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFt
ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
cio+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
cHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
CiB9CiAKLWJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJv
dG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IKICAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0
cmlidXRlQ3VzdG9tR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC50ZXN0QXR0cmlidXRlQ3VzdG9tKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHRo
aXNPYmplY3QudGVzdEF0dHJpYnV0ZUN1c3RvbShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3Vz
dG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmli
dXRlQ3VzdG9tKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6Z2V0PGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFz
c2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJ0ZXN0QXR0cmlidXRlQ3VzdG9tIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OmdldDxqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0
ZXN0QXR0cmlidXRlQ3VzdG9tIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QudGVzdEF0dHJp
YnV0ZVJXQ3VzdG9tKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QudGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKGxleGljYWxH
bG9iYWxPYmplY3QpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6Z2V0
PGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RB
dHRyaWJ1dGVSV0N1c3RvbSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3I+OjpnZXQ8anNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmli
dXRlUldDdXN0b21HZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0ZXN0QXR0cmlidXRlUldDdXN0b20iKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVz
dEF0dHJpYnV0ZVJXQ3VzdG9tU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgdGhpc09iamVjdC5zZXRUZXN0QXR0cmlidXRlUldDdXN0b20oc3Rh
dGUsIHZhbHVlKTsKKyAgICB0aGlzT2JqZWN0LnNldFRlc3RBdHRyaWJ1dGVSV0N1c3RvbShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJX
Q3VzdG9tKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yPjo6c2V0PHNldEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OnNldDxzZXRKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbVNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidGVzdEF0dHJpYnV0ZVJX
Q3VzdG9tIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9uQm9k
eShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9u
Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3I+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fz
dGVkVGhpcy0+dGVzdEN1c3RvbUZ1bmN0aW9uKCpzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEN1c3RvbUZ1bmN0aW9uKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0b21GdW5jdGlv
bihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlw
ZUZ1bmN0aW9uVGVzdEN1c3RvbUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yPjo6Y2FsbDxqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVz
dEN1c3RvbUZ1bmN0aW9uQm9keT4oKnN0YXRlLCAidGVzdEN1c3RvbUZ1bmN0aW9uIik7CisgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj46OmNhbGw8anNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0b21GdW5jdGlv
bkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdEN1c3RvbUZ1bmN0
aW9uIik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaAppbmRl
eCBkNmQ4MDBmOTNiNTQ2MTJiNGFmYjdmNDRkZTMwMDVkM2U0M2JhOTM5Li4wMGZhMjNiMjY5YzA1
YWE3ZjNhNzIwMjI1YmQ3NmYwNDc3MzM1OTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IuaApAQCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yIDogcHVibGljIEpTRE9NT2JqZWN0IHsKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAK
ICAgICAvLyBDdXN0b20gYXR0cmlidXRlcwotICAgIEpTQzo6SlNWYWx1ZSB0ZXN0QXR0cmlidXRl
Q3VzdG9tKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7Ci0gICAgSlNDOjpKU1ZhbHVlIHRlc3RBdHRy
aWJ1dGVSV0N1c3RvbShKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OwotICAgIHZvaWQgc2V0VGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBKU0M6
OkpTVmFsdWUgdGVzdEF0dHJpYnV0ZUN1c3RvbShKU0M6OkpTR2xvYmFsT2JqZWN0JikgY29uc3Q7
CisgICAgSlNDOjpKU1ZhbHVlIHRlc3RBdHRyaWJ1dGVSV0N1c3RvbShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JikgY29uc3Q7CisgICAgdm9pZCBzZXRUZXN0QXR0cmlidXRlUldDdXN0b20oSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CiAKICAgICAvLyBDdXN0b20gZnVuY3Rpb25zCi0g
ICAgSlNDOjpKU1ZhbHVlIHRlc3RDdXN0b21GdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOworICAg
IEpTQzo6SlNWYWx1ZSB0ZXN0Q3VzdG9tRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpT
Qzo6Q2FsbEZyYW1lJik7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggYWZmZjUxZDAwNTc5NWI0ZTI1
ODQ4MzczMmQ5MzBlZTY4OTRiNmFhMS4uN2M1MzU0MDYwYzRhMDg2MDMyMzk4OTQ1OGYzOTc2MmIw
NDcxMTA3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cApAQCAtNDgsOCArNDgsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTQogCiAvLyBBdHRyaWJ1
dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90
b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0Niw1
MSArMTQ2LDUxIEBAIHZvaWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVzdHJveShK
U0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyOjp+SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcigpOwogfQogCi10ZW1wbGF0ZTw+
IGlubGluZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBJRExPcGVyYXRpb248SlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSkKK3RlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIElETE9wZXJhdGlvbjxKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KHN0YXRlLnZtKCksIHN0YXRlLnRo
aXNWYWx1ZSgpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50
aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQ
cm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLWJvb2wg
c2V0SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBl
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXBy
b3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IKICAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2RCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFt
ZSBJRExPcGVyYXRpb248SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248
SlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlv
bkVycm9yKHN0YXRlLCBzY29wZSwgMCwgImxpc3RlbmVyIiwgIlRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyIiwgIm1ldGhvZCIpOyB9KTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBsaXN0ZW5lciA9IGNvbnZlcnQ8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXI+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAibGlzdGVuZXIiLCAiVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIiLCAibWV0aG9kIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2QobGlzdGVuZXIucmVs
ZWFzZU5vbk51bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25NZXRob2QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+OjpjYWxsPGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcm90b3R5cGVGdW5jdGlvbk1ldGhvZEJvZHk+KCpzdGF0ZSwgIm1ldGhvZCIpOworICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj46OmNhbGw8
anNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kQm9keT4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJtZXRob2QiKTsKIH0KIAogdm9pZCBK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkBAIC0yMjYsNyArMjI2LDcgQEAgZXh0ZXJuICJDIiB7IGV4
dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjZUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckVbXTsg
fQogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXI+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShC
SU5ESU5HX0lOVEVHUklUWSkKQEAgLTI1MCw5ICsyNTAsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+
KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXImIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciYgaW1wbCkKIHsKLSAgICByZXR1
cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciogSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6dG9XcmFwcGVkKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuaAppbmRleCAyZDg0NGFhMzQ5YTQwYzJjOGU1ODlmOTE3ZmY4ZDhmYjNh
Y2ZmMmM4Li5mZjE4ODBkODQ3NjZjY2QwZTVjMzBkN2Y5NzM0ZDQwMjllNmVmMWJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKQEAgLTczLDEwICs3MywxMCBA
QCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogd3Jh
cHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lciYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxP
YmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXI+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYmIGltcGwpIHsgcmV0dXJuIGlt
cGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5v
bk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ciYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJik7CitpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlD
cmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiB7CiAgICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5j
cHAKaW5kZXggNjdiZGI2ZjY1Mzg0NGFmOTU4OTgxNDU0MGE0MDJmYWU5ODIzNWNlNi4uNGQyODM0
Y2U5NjU2ZmIwNWM0YmI0Zjc4ZDQwNjkyZDE0YjIzNTVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKQEAgLTQz
LDggKzQzLDggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNz
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTQwLDE3ICsxNDAsMTcgQEAg
dm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmRlc3Ryb3koSlND
OjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyOjp+SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
KCk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsK
ICAgICAgICAgaWYgKGluZGV4LnZhbHVlKCkgPCB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3Ro
KCkpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRl
LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleC52YWx1ZSgpKSk7CisgICAgICAgICAg
ICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleC52YWx1ZSgpKSk7CiAgICAgICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSwgdmFsdWUp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KTsKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIH0KICAgICB1
c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3Rv
ciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8
dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CkBAIC0xNTksMjYg
KzE1OSwyNiBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplYwogICAgICAgICAgICAgcmV0dXJuIHR5
cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlz
aWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9
IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgp
KSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3Bl
cnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1lZFBy
b3BlcnR5LnZhbHVlKCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oMCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCi1ib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1
bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewog
ICAgICAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCkpIHsKLSAg
ICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRv
SlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBl
ZCgpLml0ZW0oaW5kZXgpKTsKICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOworICAgICAgICByZXR1cm4gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbmRleCwgc2xvdCk7CiAgICAgfQogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01T
dHJpbmc7CkBAIC0xODgsMzQgKzE4OCwzNCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdAogICAg
ICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFBy
b3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+
KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAg
ICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFt
ZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vz
c1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAg
ICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCksIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0
aCgpOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVj
dC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1l
cywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9vbCBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQorYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+
KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0g
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgdmFsdWUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAg
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjMsMjggKzIyMywyOCBAQCBi
b29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBzdGF0ZQogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICAgICAgSlNWYWx1ZSBwcm90
b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkpOwotICAg
ICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5n
ZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7Ci0gICAgICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAg
ICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJv
dG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICBp
ZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9w
ZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAg
ICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICAg
ICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRo
aXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwor
ICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiB9CiAKLWJvb2wgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCitib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
cjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgaWYgKExJS0VMWShp
bmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJ
dGVtKGluZGV4LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjUzLDE4ICsyNTMsMTggQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUKICAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnkgfTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3Rv
dHlwZURpcmVjdCh2bSk7Ci0gICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRl
LT52bSgpKTsKLSAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09i
amVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUp
OwogICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFt
ZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNl
bGwsIHN0YXRlLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBz
aG91bGRUaHJvdyk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
IHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0
b3IsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI3Miw4ICsy
NzIsOCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9y
LmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAg
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9w
ZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgp
LnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTI4MSwxMSArMjgxLDExIEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0
CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6
OlZNSW5xdWlyeSB9OwotICAgICAgICBpZiAoIUpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKKyAgICAgICAgaWYgKCFK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKICAgICAgICAgICAgIGlmICghcHJvcGVydHlEZXNj
cmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRl
LT52bSgpKTsKLSAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCkpOworICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVl
KCkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsK
ICAgICAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlO
YW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0yOTQsMjYgKzI5NCwyNiBAQCBib29sIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdAogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9
IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmln
dXJhYmxlKHRydWUpOwotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRo
cm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNo
b3VsZFRocm93KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKQEAgLTM1Myw3
ICszNTMsNyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUzN1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJFWwogI2VuZGlmCiAjZW5kaWYKIAotSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcj4mJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklO
RElOR19JTlRFR1JJVFkpCkBAIC0zNzcsOSArMzc3LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXI+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciYgaW1wbCkKK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXImIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVj
dCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsKTsKIH0KIAogVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciog
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp0b1dyYXBwZWQoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAppbmRleCAyNjE5MjQ3ODYzMmIwZWNh
MzkwODlkNjI1Mzc0NDlhN2FhNWFhOWQ1Li4wZjVjNmFhYjM4OWJiZjIxOTY2ZDE5ZDkzZTgyMTE3
MTVhOThlNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5oCkBAIC0zOSwxMiArMzksMTIgQEAgY2xhc3MgSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0
TmFtZWRBbmQKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90
b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgcHV0QnlJ
bmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgIHN0YXRpYyBib29sIGRlZmlu
ZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBK
U0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRp
YyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpT
Q2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtODEsMTAgKzgxLDEwIEBAIGlubGluZSB2
b2lkKiB3cmFwcGVyS2V5KFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHdy
YXBwYWJsZU9iamVjdCkKICAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1KU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQot
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsK
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3
bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBK
U0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
Jik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgp
OyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYg
aW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsg
fQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4gewogICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCmluZGV4IGNlMDVlODE0MzVmNjQwODA3OGZjNTVjZDQ2M2Y4YThjNzQ2ODc2ZGIu
LjVmYzU3ZTU4MjIzZTVjM2UyZWM4ODBjZWNkZjljZmYyYzIxNzlmYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmNwcApAQCAtNDMsOCArNDMsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiAvLyBB
dHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgewogcHVibGljOgpAQCAtMTQwLDE3ICsxNDAsMTcgQEAgdm9pZCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCog
Y2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6fkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
KCk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHBy
b3BlcnR5TmFtZSkpIHsKICAgICAgICAgaWYgKGluZGV4LnZhbHVlKCkgPCB0aGlzT2JqZWN0LT53
cmFwcGVkKCkubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERP
TVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleC52YWx1ZSgp
KSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleC52YWx1ZSgpKSk7
CiAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPigwKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwg
cHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogICAgIH0KICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1
dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFt
ZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
PiB7CkBAIC0xNTksMjYgKzE1OSwyNiBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqCiAgICAgICAg
ICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsg
R2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9OwotICAgIGlmIChhdXRvIG5hbWVkUHJvcGVy
dHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0
YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgewotICAgICAg
ICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFBy
b3BlcnR5LnZhbHVlKCkpKTsKKyAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlz
aWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAg
ICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBX
VEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOwogICAgICAgICBzbG90LnNldFZhbHVlKHRo
aXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSwgdmFsdWUpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
b2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jv
b2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0g
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKExJS0VMWShp
bmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7CiAgICAgICAgIGlmIChpbmRleCA8IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5sZW5ndGgoKSkgewotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8
SURMRE9NU3RyaW5nPigqc3RhdGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pdGVtKGluZGV4KSk7
CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkpOwogICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCksIHZh
bHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRl
eCwgc2xvdCk7CisgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKICAgICB9CiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAg
dXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKQEAgLTE4OCw4MyArMTg4LDgzIEBA
IGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPCiAgICAgICAgICAgICByZXR1cm4gdHlwZW5hbWUgR2V0
dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9OwotICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQ
cm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCAqdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgewotICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKKyAgICBp
ZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJp
ZGVCdWlsdGluczo6Tm8+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFs
dWUoKSkpOwogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPigwKSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGlu
ZGV4LCBzbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQg
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3Vu
dDsgKytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBp
KSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCku
c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Kj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsK
LSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0o
KSk7Ci0gICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKLSAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3Jh
cHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoIXBy
b3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhp
c09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9Owot
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVj
dChzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFz
T2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KSkpIHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOwotICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUg
PSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CisgICAgICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0
KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKSkgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Nj
b3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3Ry
aW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CisgICAgICAgICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHRoaXNP
YmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVy
dHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CisgICAgcmV0
dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQorYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBpZiAo
TElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KCpzdGF0ZSwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgs
IFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0
ZW0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5k
ZXgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
dGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKLSAgICBpZiAoIShwcm90b3R5cGUu
aXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUs
IHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgIGlmICghKHByb3RvdHlw
ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgdHJ1ZSk7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUs
IHRocm93U2NvcGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlO
YW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHBy
b3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBzdGF0ZSwg
aW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OwogfQogCi1ib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIHByb3Bl
cnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIHByb3BlcnR5RGVzY3JpcHRv
ciwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNzIs
NDggKzI3Miw0OCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogbwogICAgIGlmIChhdXRvIGluZGV4
ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGlmICghcHJvcGVydHlEZXNj
cmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7
Ci0gICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRl
LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Cisg
ICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5k
ZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuc2V0SXRlbShpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJv
bCgpKSB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgICAgICBpZiAoIUpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwg
c2xvdCkpIHsKKyAgICAgICAgaWYgKCFKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKICAgICAg
ICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3Iu
dmFsdWUoKSk7CisgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB0cnVlKTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigq
c3RhdGUsIHRocm93U2NvcGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJv
cGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsK
KyAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVU
b1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0
b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1By
b3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7Ci0gICAgcmV0dXJuIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIG5ld1By
b3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworICAgIHJldHVybiBKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1
Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0g
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAg
ICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93Vk1U
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IK
QEAgLTM1Myw3ICszNTMsNyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNv
cmU0MlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdAogI2VuZGlmCiAjZW5k
aWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBpbXBsKQog
ewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtMzc3LDkgKzM3Nyw5IEBAIEpT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShp
bXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uJiBpbXBsKQogewot
ICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgIHJldHVybiB3
cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAppbmRleCAyMzhmNGE1MDBlOGZmODI4YWI5
ZmEzOGJmNjhmMGU1YmQ3ZWE2ZDdhLi5hNDYyZWQ2NWRjODA2ZTVmMzM4NDM5MmMxMmRhOWM2N2Zj
OWU0OTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaApAQCAtMzksMTIgKzM5LDEyIEBAIGNsYXNzIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIDogcHVibGljIEpTRE9N
V3JhcHBlcjxUZXN0TmFtCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlw
ZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIHRvV3JhcHBlZChKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5
JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICBz
dGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgIHN0YXRp
YyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkp
OworICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtODEsMTAgKzgxLDEw
IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbiogd3JhcHBhYmxlT2JqCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsK
IH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiYpOwotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1w
bCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWZQdHI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
PiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxP
YmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24mKTsKK2lubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7
CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmUHRyPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAK
IHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCmluZGV4IGVmNjg1MjczZjdjMWFkYTU1MWZkZjU4ODlkODM1MjhiZGVkODc0MWQu
LmMyYTkyNGEyNTlkZTZmMWYxOGE3NjYxOWM0YzI0OTQxODdmOWU0OTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmNwcApAQCAtNTAsOCArNTAsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90bwogCiAvLyBBdHRy
aWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgpAQCAtMTQ5LDE3ICsxNDksMTcgQEAgdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0
LT5KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6fkpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKCk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYgKGF1dG8g
aW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgaWYgKGluZGV4LnZh
bHVlKCkgPCB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGF1
dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVk
KCkuaXRlbShpbmRleC52YWx1ZSgpKSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCku
aXRlbShpbmRleC52YWx1ZSgpKSk7CiAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmpl
Y3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIH0KICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0g
SURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2Jq
ZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CkBAIC0xNjgsMjYgKzE2OCwyNiBAQCBib29sIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iagogICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklETFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfTsKLSAg
ICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3Zl
cnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0
dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigq
c3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgaWYgKGF1dG8gbmFt
ZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6
Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0
dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKICAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCks
IHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlT
bG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAg
IGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewogICAgICAgICBpZiAoaW5k
ZXggPCB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGF1dG8g
dmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCku
aXRlbShpbmRleCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgp
KTsKICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KDApLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0
LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOworICAgICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xv
dCk7CiAgICAgfQogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpOwogICAgIHVzaW5nIEdldHRlcklETFR5cGUgPSBJRExET01TdHJpbmc7CkBAIC0xOTcs
MzQgKzE5NywzNCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZQogICAgICAgICAgICAgcmV0dXJu
IHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5
cGU6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNz
VmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1
ZSgpKSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFBy
b3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1
ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1l
ZFByb3BlcnR5LnZhbHVlKCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oMCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmpl
Y3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3Qp
OwogfQogCi12b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3Zv
aWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwg
Y291bnQ7ICsraSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaSkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBl
ZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBz
dGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCitib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
IAogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwot
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
dmFsdWUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIHRo
aXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCksIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzIsMjggKzIzMiwyOCBA
QCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YQogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1i
b2woKSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICAgICAgSlNWYWx1ZSBw
cm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkpOwot
ICAgICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUp
LT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7Ci0gICAgICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsK
LSAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0
UHJvdG90eXBlRGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAg
ICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQ
cm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsK
KyAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAg
ICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0dGVyKHByb3BlcnR5TmFtZVRvU3Ry
aW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQo
dGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7
CisgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAotYm9vbCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQorYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBpZiAo
TElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgdGhpc09iamVjdC0+d3JhcHBl
ZCgpLmluZGV4ZWRTZXR0ZXIoaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yNjIsMTggKzI2MiwxOCBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YQogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwog
ICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09i
amVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHZtKTsKLSAgICBpZiAoIShwcm90b3R5cGUuaXNPYmpl
Y3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgIGlmICghKHByb3RvdHlwZS5pc09i
amVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkp
OworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRl
cihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6
cHV0QnlJbmRleChjZWxsLCBzdGF0ZSwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAg
cmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGlu
ZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK2Jv
b2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
IHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CkBAIC0yODEsOCArMjgxLDggQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamUKICAgICBp
ZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewogICAgICAgICBpZiAo
IXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
c3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIHRo
aXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCksIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yOTAsMTEgKzI5MCwxMSBA
QCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCogb2JqZQogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1i
b2woKSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICAgICAgaWYgKCFKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKSB7CisgICAgICAgIGlmICghSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CiAgICAg
ICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9y
LnZhbHVlKCkpOworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVk
KCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMDMsNzcgKzMw
Myw3NyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZQogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9w
ZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOwotICAgIHJldHVybiBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9w
ZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBu
ZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIElETE9wZXJhdGlv
bjxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46OmNhc3QoRXhlY1N0
YXRlJiBzdGF0ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyKiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXI+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KHN0YXRlLnZtKCksIHN0YXRl
LnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJv
dG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJv
dG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2Jh
bE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJv
dG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IKICAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRT
ZXR0ZXJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBuYW1lID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gdmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5uYW1lZFNldHRlcihXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90
b3R5cGVGdW5jdGlvbk5hbWVkU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2Jq
ZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXJCb2R5Pigqc3RhdGUsICJuYW1lZFNl
dHRlciIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI+OjpjYWxsPGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAibmFtZWRTZXR0ZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNl
dHRlckJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0
byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMikpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOworICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAg
YXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpbXBsLmluZGV4ZWRTZXR0ZXIoV1RGTW92ZShpbmRleCksIFdURk1vdmUodmFsdWUpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25J
bmRleGVkU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3Rv
dHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlckJvZHk+KCpzdGF0ZSwgImluZGV4ZWRTZXR0ZXIiKTsK
KyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
clByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlckJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FsbEZyYW1lLCAiaW5kZXhlZFNldHRlciIpOwogfQogCiB2b2lkIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCkBAIC00MDksNyArNDA5LDcgQEAgZXh0ZXJuICJDIiB7IGV4
dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzlUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIKICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBpbXBsKQorSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAgLTQz
Myw5ICs0MzMsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdy
YXBwZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPihnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciYgaW1w
bCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICBy
ZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQog
CiBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgKaW5kZXggZjM5MmIzOWY2MDhiOGM0NWE0Y2ZhNWEx
MzJiODliN2Y2MTM4YTRhNS4uZTkwNDRmNWU1MWU3ZjUwM2NjYzk2ZjcwNzk3NjY3YWVkYWI5ZjA0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmgKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5h
bWVkQQogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlw
ZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVy
YXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgc3RhdGljIGJvb2wgcHV0
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dEJ5SW5k
ZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBkZWZpbmVP
d25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlND
OjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMg
Ym9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBz
dGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0Nl
bGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTgxLDEwICs4MSwxMCBAQCBpbmxpbmUgdm9p
ZCogd3JhcHBlcktleShUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIHdy
YXBwYWJsZU9iamVjdAogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXImKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogaW1wbCkgeyByZXR1cm4g
aW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsg
fQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+
JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8g
dG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxs
KCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiBpbXBsKSB7IHJldHVybiBp
bXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpT
Qzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDog
SlNDOjpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiB7CiAgICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMmM1MDY2ZGQz
MWQ1MzA2Yzc4YzA4Y2QyNmFhNWM2ZGRmMTMyNmI5Yy4uN2NkN2M0MThkNTBlNzZkMDZmNTY0YTYx
ZDBjY2M1M2FiYTljN2E0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApA
QCAtNDMsOCArNDMsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiAvLyBBdHRyaWJ1dGVzCiAK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKQEAgLTg5LDIzICs4OSwyMyBAQCB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sCiAK
IHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5hbWVkQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcikgfTsKIAotdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3RlbXBsYXRlPD4g
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKKyAgICBhdXRvKiBj
YXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9y
Kj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHN0cjEgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHN0cjEgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgYXV0byBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyAiZGVmYXVsdFN0cmluZyJfcyA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byBzdHIyID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gImRlZmF1bHRTdHJpbmciX3MgOiBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgYXV0byBzdHIzID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVk
KCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgyKSk7CisgICAgYXV0byBzdHIzID0gY2FsbEZyYW1lLT5hcmd1bWVudCgy
KS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMikpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0
byBvYmplY3QgPSBUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3RvcihX
VEZNb3ZlKHN0cjEpLCBXVEZNb3ZlKHN0cjIpLCBXVEZNb3ZlKHN0cjMpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3ROYW1lZENv
bnN0cnVjdG9yPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05l
d2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE5hbWVkQ29uc3RydWN0b3I+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBXVEZN
b3ZlKG9iamVjdCkpKTsKIH0KIAogdGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JOYW1lZENvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCkBAIC0xODAsMjMgKzE4MCwy
MyBAQCB2b2lkIEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNl
bGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6fkpTVGVzdE5hbWVk
Q29uc3RydWN0b3IoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlwZSo+KHZtLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUp
KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkQ29uc3RydWN0b3I6Omdl
dENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+
Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE5hbWVkQ29uc3RydWN0b3JD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkQ29uc3RydWN0
b3JQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgpAQCAtMjQxLDcgKzI0MSw3IEBAIGV4dGVybiAi
QyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTIwVGVzdE5hbWVkQ29uc3RydWN0b3JFW107
IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1l
ZENvbnN0cnVjdG9yPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3ROYW1lZENvbnN0cnVjdG9yPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRF
R1JJVFkpCkBAIC0yNjUsOSArMjY1LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJl
dHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROYW1lZENvbnN0cnVjdG9yPihnbG9iYWxPYmplY3QsIFdU
Rk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZENvbnN0cnVjdG9y
JiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkQ29u
c3RydWN0b3ImIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwg
aW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LCBpbXBsKTsKIH0KIAogVGVzdE5hbWVkQ29uc3RydWN0b3IqIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3I6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29u
c3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZENvbnN0cnVjdG9yLmgKaW5kZXggM2U3NjFjM2UzMmQzNWQzMTQ1ZjQzY2M1MmI3Y2My
ODJjYmJiZmNlYi4uODU5Y2QzYmRhOWJkMjI3YTA4OTc2YzdjMTE1YzNiOWI4NjIwYjliMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCkBAIC03NCwxMCArNzQsMTAgQEAgaW5saW5l
IHZvaWQqIHdyYXBwZXJLZXkoVGVzdE5hbWVkQ29uc3RydWN0b3IqIHdyYXBwYWJsZU9iamVjdCkK
ICAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkQ29uc3RydWN0b3ImKTsK
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsKSB7IHJl
dHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVs
bCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROYW1lZENvbnN0cnVjdG9yPiYmKTsKLWlubGluZSBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4m
JiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5h
bWVkQ29uc3RydWN0b3ImKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9
CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkQ29uc3RydWN0b3I+JiYpOworaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0
TmFtZWRDb25zdHJ1Y3Rvcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRl
ZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwo
KSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gewogICAgIHVzaW5nIFdyYXBwZXJD
bGFzcyA9IEpTVGVzdE5hbWVkQ29uc3RydWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCmluZGV4IDRmZDQ0NDNlMzQ0NjA1MDliNTRjNjk2YTcx
NTZhNWJjZDA0NjU0YTEuLmNlMjA1ZGI0MzA4MmE5N2FiZGZmMDgwNDM0Y2YyNWFlNTM2N2VmYWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCkBA
IC00Miw4ICs0Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIC8vIEF0dHJpYnV0ZXMKIAot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEz
OSw3ICsxMzksNyBAQCB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6ZGVzdHJv
eShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXI6On5KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIoKTsKIH0KIAotYm9v
bCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmll
cjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE1MCwxNyArMTUwLDE3IEBAIGJvb2wgSlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0CiAgICAgICAgICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHJlc3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9OwotICAg
IGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVy
cmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0
ZXJGdW5jdG9yKSkgewotICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpz
dGF0ZSwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKKyAgICBpZiAoYXV0byBuYW1l
ZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6
Tm8+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0
ZXJGdW5jdG9yKSkgeworICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOwogICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1
bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3ROYW1lZERlbGV0
ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwpAQCAtMTcxLDYz
ICsxNzEsNjMgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwKICAgICAgICAgICAgIHJldHVybiB0
eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBHZXR0ZXJJRExUeXBl
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVzdWx0KSB9OwogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH07Ci0gICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zp
c2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUsICp0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUg
PSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUo
KSkpOworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9w
ZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUg
PSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUobmFtZWRQ
cm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgdmFs
dWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKKyAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBw
cm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1l
cygpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQorYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgYXV0byYgdGhpc09iamVjdCA9ICpqc0Nh
c3Q8SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGlmIChpc1Zpc2libGVOYW1lZFByb3BlcnR5
PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkp
IHsKKyAgICBpZiAoaXNWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKICAgICAg
ICAgcmV0dXJuIGltcGwuZGVsZXRlTmFtZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWVUb1N0cmluZyhw
cm9wZXJ0eU5hbWUpKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eShjZWxsLCBzdGF0ZSwgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAK
LWJvb2wgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCkKK2Jvb2wg
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQg
aW5kZXgpCiB7CiAgICAgYXV0byYgdGhpc09iamVjdCA9ICpqc0Nhc3Q8SlNUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHZtLCBpbmRleCk7Ci0gICAgaWYgKGlzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3Zl
cnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lKSkgewor
ICAgIGlmIChpc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lKSkgewogICAgICAgICBy
ZXR1cm4gaW1wbC5kZWxldGVOYW1lZFByb3BlcnR5KHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3Bl
cnR5TmFtZSkpOwogICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleChjZWxsLCBzdGF0ZSwgaW5kZXgpOworICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4KTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUp
KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0TmFt
ZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlw
ZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAg
ICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IKQEAgLTI2Nyw3ICsyNjcsNyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQq
IF9aVFZON1dlYkNvcmUyOFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJFW107IH0KICNlbmRp
ZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXI+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcj4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJ
TkdfSU5URUdSSVRZKQpAQCAtMjkxLDkgKzI5MSw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwK
ICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyPihn
bG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXImIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyJiBpbXBsKQogewotICAgIHJl
dHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgIHJldHVybiB3cmFwKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXIqIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6dG9XcmFw
cGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmgKaW5kZXggNjY3MWFmMjJkNWY5NDY5NTE3YmZjNjUx
OTY4MTU0ZGVkODlmN2U2Yi4uMGVhNGJiMTFiODYwNTMwMTE2NTdmZDZlYTYzZjI0NmQ0ZDgyZTUw
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaApAQCAt
MzksMTEgKzM5LDExIEBAIGNsYXNzIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciA6IHB1
YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkRGVsZXRlck5vSWRlCiAgICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsK
ICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKiB0b1dy
YXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUo
KSk7Ci0gICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpF
bnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpT
Qzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkKTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC04MCwx
MCArODAsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdE5hbWVkRGVsZXRlck5vSWRl
bnRpZmllciogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9
CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9K
UyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgUmVmPFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI+JiYpOwotaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI+
JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9i
amVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXImKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKiBpbXBsKSB7IHJldHVy
biBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6
IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcj4mJiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAK
IHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFt
ZWREZWxldGVyTm9JZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKaW5kZXggNzZkNjg4NmRiMjRhZjMxNDFjYzk1YjY2
YTBjMWI4NTFjZDBiNDMwMC4uYzc0ZWQyNWU0ZjA3OWI2Zjk2OTZhYTNmMDA5Y2M4OWY2ZGM4YWUw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCkBAIC00Miw4ICs0Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIC8vIEF0
dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNz
IEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlIDogcHVibGljIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBK
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCog
Y2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlv
bjo6fkpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKCk7CiB9CiAKLWJvb2wgSlNU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNTAsMTcgKzE1MCwxNyBAQCBi
b29sIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqIG9iamVjdCwgRQogICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRl
cklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJv
cGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9N
U3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgaWYg
KGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRl
QnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVl
KCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpLCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdChvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBK
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b20odm0sIGluZGV4KTsKQEAgLTE3MSw3NyArMTcxLDc3IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxl
dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
IG9iCiAgICAgICAgICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3Vs
dCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9OwotICAgIGlmIChhdXRv
IG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0
aW5zOjpObz4oKnN0YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9y
KSkgewotICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RG
TW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKKyAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5
ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9y
KSkgeworICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOwogICAgICAgICBzbG90
LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3Qs
IHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwog
fQogCi12b2lkIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxl
dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhp
c09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7
Ci0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9vbCBK
U1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorYm9v
bCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBhdXRvJiB0aGlzT2JqZWN0ID0gKmpzQ2FzdDxKU1Rl
c3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBpZiAoaXNWaXNpYmxlTmFtZWRQcm9wZXJ0eTxP
dmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7
CisgICAgaWYgKGlzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAg
IGF1dG8gcmVzdWx0ID0gaW1wbC5kZWxldGVOYW1lZFByb3BlcnR5KHByb3BlcnR5TmFtZVRvU3Ry
aW5nKHByb3BlcnR5TmFtZSkpOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRl
LT52bSgpKTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2Nv
cGUsIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoY2Vs
bCwgc3RhdGUsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eShjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29s
IEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCkKK2Jvb2wg
SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpbmRleCkKIHsKICAgICBhdXRvJiB0aGlzT2JqZWN0ID0gKmpzQ2FzdDxKU1Rlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwotICAgIGlmIChpc1Zpc2libGVOYW1lZFBy
b3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSkpIHsKKyAgICBpZiAoaXNWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5z
OjpObz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsK
ICAgICAgICAgYXV0byByZXN1bHQgPSBpbXBsLmRlbGV0ZU5hbWVkUHJvcGVydHkocHJvcGVydHlO
YW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpIHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOwotICAgICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwg
dGhyb3dTY29wZSwgcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCkpOworICAgICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBw
cm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
cgpAQCAtMjgxLDcgKzI4MSw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2Vi
Q29yZTMzVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uRVtdOyB9CiAjZW5kaWYKICNl
bmRpZgogCi1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb24+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVz
dE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUo
QklORElOR19JTlRFR1JJVFkpCkBAIC0zMDUsOSArMzA1LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24mIGltcGwpCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRp
b24mIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7
CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBs
KTsKIH0KIAogVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKiBKU1Rlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5oCmluZGV4IGY5MGU1MzhiMmViZWVjMmE5M2I0OGY3MDkwM2Y1YzBjMzY2YWVkMjAu
Ljc5MWJlMTgyZWIxYjM2OTY5MjFkZTk3Njk1MjcyOWYwYjRmMGIzNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCkBAIC0zOSwxMSAr
MzksMTEgQEAgY2xhc3MgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24gOiBwdWJs
aWMgSlNET01XcmFwcGVyPFRlc3ROYW1lZERlbGV0ZXIKICAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0
YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7CiAgICAgc3RhdGljIFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogdG9XcmFw
cGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkp
OwotICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVy
dHlCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCk7CisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51
bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtODAsMTAg
KzgwLDEwIEBAIGlubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3ROYW1lZERlbGV0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7
CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24mKTsKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwo
KTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24+JiYp
OwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5
Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlND
Ojpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uJik7Citp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0
cjxUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24+JiYgaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
bXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkRGVsZXRlclRocm93aW5n
RXhjZXB0aW9uPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFtZWREZWxldGVy
VGhyb3dpbmdFeGNlcHRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldp
dGhJZGVudGlmaWVyLmNwcAppbmRleCA2YzM5YTQyZGQzOWZiYmY2MzI5Zjg2MTQwOWIxYTdkYjMz
ZThjYWVmLi42ODZlNmY5MWQzZGQ5YmJjYzU4YWM1N2Q5MTI3MGY4MjlhMzcwNDk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAKQEAgLTQ3
LDggKzQ3LDggQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3QKIAogLy8gQXR0cmlidXRlcwogCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1Ymxp
YzoKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjp+SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIoKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE1NiwxNyAr
MTU2LDE3IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjCiAgICAgICAgICAgICByZXR1cm4gdHlw
ZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6
ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9OwotICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNp
YmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCAqdGhpc09iamVj
dCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgewotICAgICAgICBhdXRvIHZhbHVlID0g
dG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkp
KTsKKyAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVy
dHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAgICBhdXRvIHZhbHVlID0g
dG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5hbWVkUHJv
cGVydHkudmFsdWUoKSkpOwogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVl
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAg
cmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Citib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpOwpAQCAtMTc3LDkzICsxNzcsOTMgQEAgYm9vbCBKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCog
b2JqZWMKICAgICAgICAgICAgIHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGUgeyBHZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVz
dWx0KSB9OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH07Ci0gICAgaWYgKGF1
dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVp
bHRpbnM6Ok5vPigqc3RhdGUsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0
b3IpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBX
VEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVy
dHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0
b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgc3RhdGUsIGluZGV4LCBzbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7
CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhv
YmplY3QsIGluZm8oKSk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0
LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQogICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogewogICAgIGF1dG8mIHRoaXNPYmplY3QgPSAqanNDYXN0PEpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGlmIChpc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6
Ok5vPigqc3RhdGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKKyAgICBpZiAoaXNWaXNp
YmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgaW1wbC5uYW1lZERlbGV0
ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIHN0
YXRlLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
Y2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotYm9vbCBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgpCitib29sIEpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgp
CiB7CiAgICAgYXV0byYgdGhpc09iamVjdCA9ICpqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIqPihjZWxsKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20odm0sIGluZGV4KTsKLSAgICBpZiAoaXNWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlk
ZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CisgICAg
aWYgKGlzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGltcGwu
bmFtZWREZWxldGVyKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCk7CiB9CiAK
LXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKiBJRExP
cGVyYXRpb248SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI+OjpjYXN0KEV4ZWNTdGF0
ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRp
ZmllciogSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyPjo6Y2Fz
dChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJh
bWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXIqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpz
RHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIqPihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSo+
KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90
b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNl
dEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
cHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
clByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkRGVsZXRl
ckJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5h
bWVkRGVsZXRlckJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBu
YW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CisgICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubmFtZWRE
ZWxldGVyKFdURk1vdmUobmFtZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkRGVsZXRlcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1
bmN0aW9uTmFtZWREZWxldGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
Pjo6Y2FsbDxqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9u
TmFtZWREZWxldGVyQm9keT4oKnN0YXRlLCAibmFtZWREZWxldGVyIik7CisgICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj46OmNhbGw8anNUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkRGVsZXRlckJv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibmFtZWREZWxldGVyIik7CiB9
CiAKIHZvaWQgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmFuYWx5emVIZWFwKEpT
Q2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKQEAgLTI5OSw3ICsyOTksNyBAQCBl
eHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUzMFRlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllckVbXTsgfQogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCitKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4m
JiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtMzIzLDkgKzMy
Myw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBs
KSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
JiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkRGVs
ZXRlcldpdGhJZGVudGlmaWVyJiBpbXBsKQogewotICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9i
YWxPYmplY3QsIGltcGwpOworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciog
SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIuaAppbmRleCA4Y2FkYjZhMzEzNjE2YTJlNWVmNTViMGEwY2MzNDA2NGU3ZDdj
Nzc5Li41NGUwMjU0NzhlMWRjMzk5MDcwNzMzZTQ5OWIwMTYzMTQ5MDEyNDllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaApAQCAtMzksMTEgKzM5
LDExIEBAIGNsYXNzIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyIDogcHVibGljIEpT
RE9NV3JhcHBlcjxUZXN0TmFtZWREZWxldGVyV2l0CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYp
OwogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIqIHRvV3JhcHBlZChK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQpOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0
aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0Nl
bGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTgwLDEwICs4MCwx
MCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIqIHdyYXBwYWJsZU9iamVjdCkKICAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1K
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBSZWY8VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyPiYmKTsKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciogaW1wbCkg
eyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAq
aW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkRGVs
ZXRlcldpdGhJZGVudGlmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNO
dWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4gewogICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKaW5kZXggZDM4MWRhMDE5
OTMxNjQxZDc1NzZjNDU1MjgzODY3MDMwNGRlNmZkYS4uNzU4YzkwZmExZTlhZjY2NjMxOTE2NmQx
NGMwN2FiMzA5NDBhMTRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCkBAIC00Myw4ICs0Myw4IEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CiAKIGNsYXNzIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNDAsMTcg
KzE0MCwxNyBAQCB2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpkZXN0
cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyOjp+SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIo
KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBp
ZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewogICAgICAgICBpZiAo
aW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKSkgewotICAgICAg
ICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5pdGVtKGluZGV4LnZhbHVlKCkpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUg
PSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndy
YXBwZWQoKS5pdGVtKGluZGV4LnZhbHVlKCkpKTsKICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUo
dGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0
ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogICAgIH0KICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwogICAg
IGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5
TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25U
eXBlPiB7CkBAIC0xNTksMjYgKzE1OSwyNiBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
bmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRQogICAg
ICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFBy
b3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+
KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAg
ICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFt
ZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vz
c1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAg
ICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBy
ZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9v
bCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRl
eCwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAo
TElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKICAgICAgICAgaWYgKGluZGV4IDwg
dGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHZhbHVl
ID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0o
aW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pdGVtKGluZGV4KSk7CiAg
ICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgICAg
IHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKICAgICB9CiAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CiAgICAgdXNpbmcgR2V0dGVySURMVHlw
ZSA9IElETERPTVN0cmluZzsKQEAgLTE4OCw2MiArMTg4LDYyIEBAIGJvb2wgSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqIG9iCiAgICAgICAgICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJl
c3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9OwotICAgIGlmIChh
dXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1
aWx0aW5zOjpObz4oKnN0YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5j
dG9yKSkgewotICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwg
V1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKKyAgICBpZiAoYXV0byBuYW1lZFByb3Bl
cnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5j
dG9yKSkgeworICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOwogICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmpl
Y3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3Qp
OwogfQogCi12b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRE
ZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSkKICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogICAgIGZvciAo
YXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3Bl
cnR5TmFtZXMoKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRl
cjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQorYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdl
dHRlcjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBhdXRvJiB0
aGlzT2JqZWN0ID0gKmpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcio+
KGNlbGwpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAo
YXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuICFp
bXBsLmlzU3VwcG9ydGVkUHJvcGVydHlJbmRleChpbmRleC52YWx1ZSgpKTsKLSAgICBpZiAoaXNW
aXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCB0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgaWYgKGlzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3Zl
cnJpZGVCdWlsdGluczo6Tm8+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKSB7CiAgICAgICAgIHJldHVybiBpbXBsLmRlbGV0ZU5hbWVkUHJvcGVydHkocHJv
cGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CiAgICAgfQotICAgIHJldHVybiBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgc3RhdGUsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0
dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRl
LCB1bnNpZ25lZCBpbmRleCkKK2Jvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0
ZXI6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBhdXRvJiB0aGlzT2Jq
ZWN0ID0gKmpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcio+KGNlbGwp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICByZXR1cm4gIWlt
cGwuaXNTdXBwb3J0ZWRQcm9wZXJ0eUluZGV4KGluZGV4KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29s
IHNldEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyQ29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SW5kZXhlZEdldHRlclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCkBAIC0yODMsNyArMjgzLDcg
QEAgZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzNUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXJFW107IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4mJiBpbXBs
KQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWREZWxldGVyV2l0aElu
ZGV4ZWRHZXR0ZXI+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkK
QEAgLTMwNyw5ICszMDcsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNy
ZWF0ZVdyYXBwZXI8VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyPihnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlciYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciYgaW1wbCkKIHsKLSAgICBy
ZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0TmFtZWRE
ZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIqIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgKaW5kZXggMzk4
OTkzMTNjYmE3M2I5MjYxNWEwZTRiODE4ZGM0MzY1ZjJjZWQ4MC4uYTk5NDViYWZjNjExNDNlNTc2
ZmZkNjBmZWM4ZWVlNjk2NGI5ZjAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgKQEAgLTM5LDExICszOSwxMSBAQCBjbGFzcyBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVz
dE5hbWVkRGVsZXRlcgogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUo
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgVGVz
dE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51
bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0Nl
bGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSk7CisgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlND
ZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC04MCwxMCArODAsMTAgQEAgaW5saW5lIHZv
aWQqIHdyYXBwZXJLZXkoVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKiB3cmFwcGFi
bGVPYmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlciYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4mJik7Ci1pbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9i
YWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXImKTsKK2lubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIq
IGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRl
ZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwo
KSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI+IHsKICAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAppbmRleCA2Mjg4NjAyOGQ5
NDhlMWZjZDk2NjE2NmYxMzk2NmRkMTU0NDQ2ZmJlLi42MWMxYjFmYzFlN2VkNGE4YWRiNTcwOTkz
ZTA1MWZiODI5MTIxZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgu
Y3BwCkBAIC00Miw4ICs0Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIC8vIEF0dHJpYnV0
ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3Io
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKIAogY2xhc3MgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aFByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQg
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAg
ICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjp+SlNUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aCgpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTUwLDE3ICsxNTAsMTcgQEAgYm9v
bCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKgogICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklE
TFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVy
dHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgaWYgKGF1
dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVp
bHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkp
KTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpLCB2YWx1ZSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dChvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUs
IHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkR2V0
dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqPihvYmplY3QpOwogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKQEAgLTE3MSw0MSArMTcxLDQx
IEBAIGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjCiAgICAgICAgICAgICByZXR1cm4gdHlwZW5hbWUg
R2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6ZXh0cmFj
dFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICB9OwotICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFt
ZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCAqdGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgewotICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKKyAg
ICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3Zl
cnJpZGVCdWlsdGluczo6Tm8+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgcHJv
cGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5hbWVkUHJvcGVydHku
dmFsdWUoKSkpOwogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGg6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0
ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0g
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
R2V0dGVyQ2FsbFdpdGgqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
b2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVj
dC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1l
cywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFt
ZWRHZXR0ZXJDYWxsV2l0aFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
cHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAotYm9vbCBzZXRKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBw
cm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
cHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3RvcgpAQCAtMjQ1LDcgKzI0NSw3IEBAIGV4dGVybiAiQyIgeyBleHRl
cm4gdm9pZCogX1pUVk43V2ViQ29yZTIzVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhFW107IH0KICNl
bmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RO
YW1lZEdldHRlckNhbGxXaXRoPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRF
R1JJVFkpCkBAIC0yNjksOSArMjY5LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJl
dHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPihnbG9iYWxPYmplY3Qs
IFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEdldHRlckNh
bGxXaXRoJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGgmIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqIEpTVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGg6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgKaW5kZXggMDZjYTg2YjVi
Y2E2MTdmOThhMTEwODBiOTFhZjI3NzY1MzY0NTg1NC4uOTZhOThjNWJiOTQ0ZDJiZWM4ZmNkM2I5
ZTgxNmQ5YWRkZTQzNzljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5o
CkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGggOiBwdWJs
aWMgSlNET01XcmFwcGVyPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPiB7CiAgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCogdG9XcmFw
cGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkp
OworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBK
U0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTc4
LDEwICs3OCwxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aCogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAK
LUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBU
ZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGgqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGg+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmUHRyPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPiYmIGltcGwpIHsgcmV0dXJuIGltcGwg
PyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51
bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCYpOwor
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFJlZjxUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aD4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZEdldHRlckNh
bGxXaXRoPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6
anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0g
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXIuY3BwCmluZGV4IDM4MzBlYTg2ZjA1NDg0ZGQ3ZjgxYTU3MDcyOWQ3NWQx
MWU5NThmMmMuLmQzMTcwMjYwNmI5NTc5Y2I1NDEwNTliMjBmY2UxNGI3NmE4NzZhN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcApAQCAtNDIsOCAr
NDIsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogCiBjbGFzcyBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSA6IHB1
YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTM5LDcgKzEzOSw3IEBA
IHZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwq
IGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6On5K
U1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcigpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkR2V0
dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQorYm9vbCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcio+
KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwpAQCAtMTUwLDE3ICsxNTAsMTcgQEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRp
Zmllcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGEKICAgICAg
ICAgICAgIHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGUg
eyBHZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVzdWx0KSB9OwogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH07Ci0gICAgaWYgKGF1dG8gbmFtZWRQcm9w
ZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigq
c3RhdGUsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7Ci0gICAg
ICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBXVEZNb3ZlKG5hbWVk
UHJvcGVydHkudmFsdWUoKSkpOworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NW
aXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKmxleGljYWxHbG9iYWxP
YmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAg
ICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUo
dGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlO
YW1lLCBzbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmpl
Y3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wg
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CkBAIC0xNzEsNDEgKzE3MSw0MSBAQCBib29sIEpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2Jq
ZWN0KiBvYmplY3QsCiAgICAgICAgICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHJlc3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9OwotICAg
IGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVy
cmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0
ZXJGdW5jdG9yKSkgewotICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpz
dGF0ZSwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKKyAgICBpZiAoYXV0byBuYW1l
ZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6
Tm8+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0
ZXJGdW5jdG9yKSkgeworICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOwogICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgs
IHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2Jq
ZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+
d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywg
bW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5n
bG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCkBAIC0yNDUs
NyArMjQ1LDcgQEAgZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjdUZXN0
TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJFW107IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcj4mJiBpbXBsKQor
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZp
ZXI+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAgLTI2OSw5
ICsyNjksOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBw
ZXI8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1w
bCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciYg
aW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllciYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QsIGltcGwpOwogfQogCiBUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIqIEpTVGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgKaW5k
ZXggMmJjYzliZWU0OWE0NzJiNTI1NTZiYTNmNTFlNTdiMDEzYTMwMTI1OC4uZmU5OGI2MTE5NjY2
ZjJkYzc0YmExZDAwM2JjZThmMjBmY2ExZjQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyLmgKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgSlNUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXIgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3ROYW1lZEdldHRlck5v
SWRlbnQKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5
cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3ROYW1lZEdl
dHRlck5vSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9
IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVy
YXRpb25Nb2RlKCkpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAog
ICAgIERFQ0xBUkVfSU5GTzsKQEAgLTc4LDEwICs3OCwxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBl
cktleShUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIqIHdyYXBwYWJsZU9iamVjdCkKICAgICBy
ZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyJik7
Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIqIGlt
cGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpT
Qzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
PiYmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNy
ZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6
anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciYpOworaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEdldHRlck5vSWRlbnRp
ZmllciogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8
VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5hbWVkR2V0dGVyTm9J
ZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpT
Qzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcj4gewogICAgIHVzaW5nIFdyYXBwZXJD
bGFzcyA9IEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGNjMWJjN2NiMDI2OWJhOGEx
NjVhMTM3YTg0NDZkYzA2YTUwN2E5ZjguLjAwYzNkMDBiOWFmYmExMmI0MTE2ODI1Y2Y2M2Y2YzQx
ZjQxYTQ0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAKQEAgLTQ3LDggKzQ3LDggQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGkKIAogLy8g
QXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3Qt
PkpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6On5KU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyKCk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNTYs
MTcgKzE1NiwxNyBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjUwogICAgICAgICAgICAgcmV0dXJu
IHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5
cGU6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNz
VmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1
ZSgpKSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFBy
b3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1
ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1l
ZFByb3BlcnR5LnZhbHVlKCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpLCB2
YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwor
ICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitib29sIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVy
V2l0aElkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20odm0sIGluZGV4KTsKQEAgLTE3Nyw2OCArMTc3LDY4IEBAIGJvb2wgSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCog
b2JqZWN0CiAgICAgICAgICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJl
c3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9OwotICAgIGlmIChh
dXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1
aWx0aW5zOjpObz4oKnN0YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5j
dG9yKSkgewotICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwg
V1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKKyAgICBpZiAoYXV0byBuYW1lZFByb3Bl
cnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5j
dG9yKSkgeworICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOwogICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmpl
Y3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3Qp
OwogfQogCi12b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2Jq
ZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+
d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywg
bW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciogSURMT3BlcmF0aW9uPEpTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXI+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiBJRExPcGVyYXRpb248
SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVybiBq
c0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIqPihzdGF0ZS52bSgp
LCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllcio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKHN0
YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5n
bG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TmFtZWRHZXR0
ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAg
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAg
ICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25z
dHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZUZ1bmN0aW9uR2V0dGVyTmFtZUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlRnVuY3Rpb25HZXR0ZXJOYW1lQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcj46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUs
IGltcGwuZ2V0dGVyTmFtZShXVEZNb3ZlKG5hbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmdldHRl
ck5hbWUoV1RGTW92ZShuYW1lKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25HZXR0ZXJO
YW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQ
cm90b3R5cGVGdW5jdGlvbkdldHRlck5hbWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxP
YmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllcj46OmNhbGw8anNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1
bmN0aW9uR2V0dGVyTmFtZUJvZHk+KCpzdGF0ZSwgImdldHRlck5hbWUiKTsKKyAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+OjpjYWxsPGpzVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbkdldHRlck5hbWVCb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImdldHRlck5hbWUiKTsKIH0KIAog
dm9pZCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkBAIC0yNzQsNyArMjc0LDcgQEAgZXh0ZXJu
ICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjlUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllckVbXTsgfQogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkK
IHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAgLTI5OCw5ICsyOTgsOSBAQCBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXI+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAK
LUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXImIGltcGwpCitK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllciYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGltcGwpOwogfQogCiBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciogSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaApp
bmRleCBlNjc5ZmYwMjg3YTQ3ZGMzYTVmMjUwNmIwYTdmOGNhMTcxOWI2NTRkLi40ZmEwMmQxNDgz
Y2Q0NTczNDQ3NmIyNzE2YTVjOGExMWEyYTJkMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmgKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVk
R2V0dGVyV2l0aEkKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBw
cm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3RO
YW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRp
b25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlND
OjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2Vs
bCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNzgsMTAgKzc4LDEwIEBAIGlubGluZSB2b2lk
KiB3cmFwcGVyS2V5KFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiB3cmFwcGFibGVPYmpl
Y3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllciogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVj
dCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRHZXR0
ZXJXaXRoSWRlbnRpZmllcj4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWZQdHI8VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1cm4g
aW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNl
Tm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsg
fQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiYmKTsK
K2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWZQdHI8VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
bXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXI+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5j
cHAKaW5kZXggMDg1MzA0MGJmOTJiOTQ2MDVjYjE3YjEyOTJmNjdiYTE0MjA4NTI2Ni4uMDRjYTQ4
MmQxOTI5ZWVjZDYzZTQxZTMzYzY3ZTMxYmI0YjIxYzBmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCkBAIC00Miw4ICs0Miw4IEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25G
aW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBKU1Rlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlz
T2JqZWN0LT5KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6fkpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyKCk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNTAsMTcg
KzE1MCwxNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YQogICAgICAgICAgICAgcmV0dXJuIHR5
cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlz
aWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9
IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgp
KSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3Bl
cnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1lZFBy
b3BlcnR5LnZhbHVlKCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oMCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGlu
ZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90
JiBzbG90KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwpAQCAtMTcxLDc2ICsxNzEsNzYgQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0LAogICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRl
cklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJv
cGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9N
U3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgaWYg
KGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRl
QnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVl
KCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oMCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVy
biBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRl
eCwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3Qp
OwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZv
ciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFBy
b3BlcnR5TmFtZXMoKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6
cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiti
b29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiB7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVj
dC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0YXRlLT52bSgpKTsKLSAgICAgICAgaWYgKCEocHJvdG90
eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0
YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgaWYgKCEocHJvdG90eXBlLmlz
T2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAgICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCkpOworICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPndy
YXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwg
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKKyAgICByZXR1cm4gSlNPYmpl
Y3Q6OnB1dCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBwdXRQcm9wZXJ0eVNsb3QpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWdu
ZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCitib29sIEpTVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVl
LCBib29sIHNob3VsZFRocm93KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3Bl
cnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OlZNSW5xdWlyeSB9OwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0
UHJvdG90eXBlRGlyZWN0KHZtKTsKLSAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBh
c09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwg
c2xvdCkpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
c3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYm
IGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
dHJ1ZSk7CiAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVy
dHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5k
ZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHJldHVybiBK
U09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFs
dWUsIHNob3VsZFRocm93KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9w
ZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCitib29sIEpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxk
VGhyb3cpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkg
ewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICAgICAgaWYgKCFKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KSB7CisgICAgICAgIGlmICghSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CiAgICAgICAgICAg
ICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVl
KCkpOworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0
TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQ5LDI2ICsyNDksMjYg
QEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXQKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQ
cm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9wZXJ0eURlc2NyaXB0b3I7CiAgICAgbmV3UHJvcGVydHlE
ZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKLSAgICByZXR1cm4gSlNPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgbmV3UHJvcGVydHlE
ZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Q
cm9wZXJ0eShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgbmV3UHJv
cGVydHlEZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKHN0YXRl
LT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
LSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgpAQCAtMzA4LDcgKzMw
OCw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTI3VGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyRVtdOyB9CiAjZW5kaWYKICNlbmRpZgogCi1KU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkKK0pTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPiYm
IGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC0zMzIsOSArMzMy
LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsK
IH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXImIGltcGwp
CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXImIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwg
aW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LCBpbXBsKTsKIH0KIAogVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKiBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oCmluZGV4IDg4
NTA0YTcwNDQwMjE5YWYxMTg5MTU0YmFmMjgyMjFkNzE0YzdhNWEuLjM5Yjg3NWYyMWQ3MDY0MDlm
NmJjNzk1YWVmNjVhMjk3NGVmODVjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllci5oCkBAIC0zOSwxMiArMzksMTIgQEAgY2xhc3MgSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRlck5vSWRl
bnQKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUo
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
dXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7Ci0gICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25N
b2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6
SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpT
VmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRl
eChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVm
aW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBE
RUNMQVJFX0lORk87CkBAIC04MSwxMCArODEsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXko
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKiB3cmFwcGFibGVPYmplY3QpCiAgICAgcmV0dXJu
IHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciYpOwotaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6Ompz
TnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4mJik7
Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVk
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVs
bCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9i
YWxPYmplY3QqLCBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXImKTsKK2lubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIq
IGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllcj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6Ompz
TnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3Mg
PSBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAppbmRleCA4MzVjZTg1NDM0MTk1ZDg4
MDUxNTI3NTc5YTA4ODdmOTliNDdjMjI4Li42MzNhNDAwMjZiMzljOGRlY2QwN2RmMzY1Zjc1MTU0
NGI2YTQ5M2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uY3BwCkBAIC00Miw4ICs0Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xh
c3MgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQg
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCog
Y2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Ojp+SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbigpOwogfQogCi1ib29sIEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTUwLDE3ICsxNTAsMTcgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqIG9iamVjdCwgRXgKICAgICAgICAgICAgIHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBHZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUocmVzdWx0KSB9OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH07
Ci0gICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5
PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGdldHRlckZ1bmN0b3IpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmlu
Zz4oKnN0YXRlLCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOworICAgIGlmIChhdXRv
IG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0
aW5zOjpObz4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7
CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KDApLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKQEAgLTE3MSwxMDQgKzE3MSwxMDQgQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTT2JqZWN0KiBvYmoKICAgICAgICAgICAgIHJldHVybiB0eXBlbmFtZSBHZXR0
ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBHZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFs
dWVGcm9tTnVsbGFibGUocmVzdWx0KSB9OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIH07Ci0gICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFBy
b3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUsICp0aGlzT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERP
TVN0cmluZz4oKnN0YXRlLCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOworICAgIGlm
IChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlk
ZUJ1aWx0aW5zOjpObz4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1
ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KDApLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1
cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5k
ZXgsIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwg
aW5mbygpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwotICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBwdXRQcm9wZXJ0eVNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmIHB1dFByb3BlcnR5U2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBpZiAoIXByb3BlcnR5
TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVj
dCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OwotICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChzdGF0
ZS0+dm0oKSk7Ci0gICAgICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0
KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkp
IHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUtPnZtKCkpOwotICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlz
T2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CisgICAgICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3Rv
dHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKSkgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1
ZSk7Ci0gICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHBy
b3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CisgICAgICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1l
KSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CisgICAgcmV0dXJuIEpT
T2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0
ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCitib29s
IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgs
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0s
IGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKICAgICBKU1ZhbHVlIHByb3RvdHlw
ZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7Ci0gICAgaWYgKCEocHJvdG90
eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0
YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoIShwcm90
b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qo
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0
YXRlLCB0aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3Bl
cnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7Cisg
ICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgc3Rh
dGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHJldHVybiBKU09iamVjdDo6cHV0
QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRo
cm93KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIHByb3BlcnR5RGVz
Y3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRo
cm93KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICAgICAgaWYgKCFKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKSB7CisgICAgICAgIGlmICghSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CiAgICAgICAg
ICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZh
bHVlKCkpOworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0
YXRlLCB0aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3Bl
cnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7Cisg
ICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9T
dHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9w
ZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOwotICAgIHJldHVybiBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9w
ZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBu
ZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSo+KHZtLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUp
KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3Qo
KSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgpAQCAtMzA4LDcgKzMwOCw3IEBAIGV4dGVy
biAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTMyVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25FW107IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpCitKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
PiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC0zMzIsOSAr
MzMyLDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVy
PFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPihnbG9iYWxPYmplY3QsIFdURk1vdmUo
aW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24mIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24qIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnRvV3JhcHBlZChK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKaW5kZXggMTYxNWVmZTcxZjE3NjNkNDY0MmY4
ZDExYzczMGFkM2FiODUyNTdkNC4uNmQyNTQ1YzQ2YmE5MjYyMWY3MDY2ZWQ5MGUxMGVhYWM0OGE2
MzI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5oCkBAIC0zOSwxMiArMzksMTIgQEAgY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyVGgKICAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpF
bnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUg
PSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0Nl
bGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpT
Qzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVP
d25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhy
b3cpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xB
UkVfSU5GTzsKQEAgLTgxLDEwICs4MSwxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVy
biB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiYp
OwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBs
KSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
UHRyPFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpIHsgcmV0dXJuIGlt
cGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5v
bk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9K
UyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxs
KCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmUHRyPFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpIHsg
cmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAogdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcAppbmRleCA2MzFlY2EzM2U5NTQzNzlmYWY1ZWE4MWYwZTUz
MDU0NjEyNzYyYTJiLi45NzU3YjBhOGU4OTlkZDdmOGE5MWU5N2ZiNzk4NThiZDVkM2E3MmU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBA
IC00Nyw4ICs0Nyw4IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3RpCiAKIC8vIEF0dHJpYnV0ZXMK
IAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgpAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyOjp+SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcigp
OwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTU2LDE3ICsxNTYsMTcg
QEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1MKICAgICAgICAgICAgIHJldHVybiB0eXBlbmFtZSBH
ZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBHZXR0ZXJJRExUeXBlOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUocmVzdWx0KSB9OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIH07Ci0gICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1l
ZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUsICp0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElE
TERPTVN0cmluZz4oKnN0YXRlLCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOworICAg
IGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVy
cmlkZUJ1aWx0aW5zOjpObz4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52
YWx1ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KDApLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBy
ZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9v
bCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKQEAgLTE3Nyw3NiArMTc3LDc2IEBAIGJv
b2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0CiAgICAgICAgICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVy
SURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVl
RnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9OwotICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9w
ZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKnN0YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlO
YW1lLCBnZXR0ZXJGdW5jdG9yKSkgewotICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01T
dHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKKyAgICBpZiAo
YXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVC
dWlsdGluczo6Tm8+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdCwgcHJvcGVydHlO
YW1lLCBnZXR0ZXJGdW5jdG9yKSkgeworICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUo
KSkpOwogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPigwKSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4
LCBzbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
b2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhvYmplY3QsIGluZm8oKSk7CiAg
ICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9y
dGVkUHJvcGVydHlOYW1lcygpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlT
bG90KQorYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNs
b3QpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewog
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUg
PSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qoc3RhdGUtPnZtKCkpOwotICAgICAgICBp
ZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9w
ZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7Ci0gICAgICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAg
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBl
RGlyZWN0KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICBpZiAoIShw
cm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNs
b3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICAgICAgdGhp
c09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0dGVyKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3Bl
cnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CisgICAgcmV0
dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiti
b29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgs
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGlu
ZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9
IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7Ci0gICAgaWYgKCEocHJvdG90eXBl
LmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoIShwcm90b3R5
cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3QobGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFt
ZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNP
YmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OworICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImIHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNj
cmlwdG9yLCBib29sIHNob3VsZFRocm93KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgaWYgKCFwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNP
YmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAg
ICAgICAgaWYgKCFKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CisgICAgICAgIGlmICghSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKSB7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNj
cmlwdG9yKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAg
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJv
cGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAg
ICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICB0aGlz
T2JqZWN0LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVy
dHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yNTUsNTYgKzI1NSw1NiBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdAogCiAgICAgUHJv
cGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRv
cjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOwotICAg
IHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVy
dHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4g
SlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIAot
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogSURMT3Bl
cmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+OjpjYXN0KEV4ZWNTdGF0ZSYg
c3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVy
KiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46OmNhc3QoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQog
ewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9
IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXJCb2R5KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXJCb2R5KEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBuYW1lID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gdmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5uYW1lZFNldHRlcihXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25O
YW1lZFNldHRlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Y2FsbDxq
c1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRl
ckJvZHk+KCpzdGF0ZSwgIm5hbWVkU2V0dGVyIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibmFtZWRTZXR0ZXIiKTsKIH0KIAogdm9pZCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBB
bmFseXplciYgYW5hbHl6ZXIpCkBAIC0zNDAsNyArMzQwLDcgQEAgZXh0ZXJuICJDIiB7IGV4dGVy
biB2b2lkKiBfWlRWTjdXZWJDb3JlMjlUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckVbXTsg
fQogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkKIHsKIAogI2lmIEVO
QUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAgLTM2NCw5ICszNjQsOSBAQCBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXImIGltcGwpCitKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciYgaW1w
bCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICBy
ZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQog
CiBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAppbmRleCA2OGRmZTMw
ZmFjMzU2MWU2YTk1M2IxMTkzZWRjNjNmZWIxMWM0ZmUxLi5iOWYyMDBjNmE0ZmIxNGE5M2IyZWI4
ODNjOTI1M2QwN2I2NTdlYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyLmgKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRTZXR0ZXJXaXRo
SQogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShK
U0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLSAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBK
U0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHV0UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2Vs
bCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOwotICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBK
U0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9u
TW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBib29sIHB1dChKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dEJ5SW5k
ZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91
bGRUaHJvdyk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAg
REVDTEFSRV9JTkZPOwpAQCAtODEsMTAgKzgxLDEwIEBAIGlubGluZSB2b2lkKiB3cmFwcGVyS2V5
KFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKiB3cmFwcGFibGVPYmplY3QpCiAgICAgcmV0
dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyJik7
Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciog
aW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDog
SlNDOjpqc051bGwoKTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcj4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNO
ZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6
IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyJik7Citp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiYmKTsKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXds
eUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VO
b25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHsKICAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3Bw
CmluZGV4IDMyMmM2MDEyZmRkMjljOGIwYzQxMzMwZGQyYzc0Nzk5ZmJjZjM2MDUuLmE2YTI5OTIx
MGYzYTMwM2Q5NDkxNWI0ZjE5MjE1MTA0NWRhZDczN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKQEAgLTUwLDggKzUwLDggQEAg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJQcm90b3R5cGVGdW4KIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJv
b2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CkBAIC0xNDksMTcgKzE0OSwxNyBAQCB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6fkpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIoKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmpl
Y3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
ICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewogICAgICAg
ICBpZiAoaW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKSkgewot
ICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIHRoaXNP
YmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCkpKTsKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCkpKTsKICAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgdmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAg
cmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIH0KICAgICB1c2luZyBHZXR0ZXJJRExU
eXBlID0gSURMRE9NU3RyaW5nOwogICAgIGF1dG8gZ2V0dGVyRnVuY3RvciA9IFtdIChhdXRvJiB0
aGlzT2JqZWN0LCBhdXRvIHByb3BlcnR5TmFtZSkgLT4gT3B0aW9uYWw8dHlwZW5hbWUgR2V0dGVy
SURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPiB7CkBAIC0xNjgsMjYgKzE2OCwyNiBAQCBib29s
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBFeAogICAgICAgICAgICAgcmV0dXJuIHR5cGVuYW1lIEdldHRlcklE
TFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJsZU5hbWVkUHJvcGVy
dHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgaWYgKGF1
dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVp
bHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkp
KTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oMCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGlmIChMSUtFTFkoaW5k
ZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgewogICAgICAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0
LT53cmFwcGVkKCkubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElE
TERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaW5kZXhlZFNldHRlcihp
bmRleCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5k
ZXgpKTsKICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgdmFsdWUpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsK
KyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogICAgIH0KICAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICB1c2luZyBHZXR0
ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwpAQCAtMTk3LDY3ICsxOTcsNjcgQEAgYm9vbCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTT2JqZWN0KiBvYmoKICAgICAgICAgICAgIHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGUgeyBHZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9tTnVs
bGFibGUocmVzdWx0KSB9OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH07Ci0g
ICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92
ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdl
dHRlckZ1bmN0b3IpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4o
KnN0YXRlLCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOworICAgIGlmIChhdXRvIG5h
bWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5z
OjpObz4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdl
dHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CiAg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDAp
LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3Qp
OworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKj4o
b2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5s
ZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb20odm0sIGkpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNP
YmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwot
ICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXI6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBp
ZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWly
eSB9OwotICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlw
ZURpcmVjdChzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgp
ICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlO
YW1lLCBzbG90KSkpIHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSBwcm90
b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CisgICAgICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFz
T2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAg
ICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRT
ZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0
eVNsb3QpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlcjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwogICAgIFByb3Bl
cnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OlZNSW5xdWlyeSB9OwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0
UHJvdG90eXBlRGlyZWN0KHZtKTsKLSAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBh
c09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwg
c2xvdCkpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
c3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYm
IGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
dHJ1ZSk7CiAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9wZXJ0
eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRl
eChjZWxsLCBzdGF0ZSwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgcmV0dXJuIEpT
T2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXI6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3Rh
dGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYg
cHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQorYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJv
b2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0yNjcsMTEgKzI2NywxMSBAQCBi
b29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZQogCiAgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSkgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKLSAgICAgICAgaWYgKCFKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKSB7CisgICAgICAgIGlmICghSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CiAgICAgICAg
ICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZh
bHVlKCkpOworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCku
bmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yODAsNzQgKzI4MCw3
NCBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZQogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5l
d1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0
eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOwotICAgIHJldHVybiBKU09iamVjdDo6
ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0
eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93
blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBuZXdQ
cm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciogSURMT3BlcmF0aW9uPEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1w
bGF0ZTw+IGlubGluZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKiBJRExPcGVy
YXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj46OmNhc3QoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAg
IHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIq
PihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nh
c3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcio+KEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29s
IHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZUZ1bmN0aW9u
TmFtZWRTZXR0ZXJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI+OjpDbGFzc1BhcmFtZXRlciBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3Rv
dHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJh
dGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7Ci0gICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwot
ICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5uYW1lZFNldHRlcihXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHZhbHVlKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJv
dG90eXBlRnVuY3Rpb25OYW1lZFNldHRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyPjo6Y2FsbDxqc1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHk+KCpz
dGF0ZSwgIm5hbWVkU2V0dGVyIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyPjo6Y2FsbDxqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAibmFtZWRTZXR0ZXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJQcm90
b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlckJvZHkoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25l
ZExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBpbmRleCA9
IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwuaW5kZXhlZFNldHRlcihXVEZNb3ZlKGluZGV4KSkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgaW1wbC5pbmRleGVkU2V0dGVyKFdURk1vdmUoaW5kZXgpKSkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZUZ1bmN0aW9uSW5k
ZXhlZFNldHRlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyPjo6Y2Fs
bDxqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25JbmRl
eGVkU2V0dGVyQm9keT4oKnN0YXRlLCAiaW5kZXhlZFNldHRlciIpOworICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj46OmNhbGw8anNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRl
ckJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiaW5kZXhlZFNldHRlciIp
OwogfQogCiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmFuYWx5emVI
ZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKQEAgLTM4Myw3ICszODMs
NyBAQCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUzMlRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyRVtdOyB9CiAjZW5kaWYKICNlbmRpZgogCi1KU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4mJiBpbXBs
KQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlcj4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpA
QCAtNDA3LDkgKzQwNyw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3Jl
YXRlV3JhcHBlcjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4oZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlciYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyJiBpbXBsKQogewotICAgIHJldHVy
biB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgIHJldHVybiB3cmFwKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOjp0
b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCmluZGV4IDdlNDJlNjA0NzE2
OTliZWI4OGNlYzk1YzViODBiNjdhMzAxZThlOTguLmZkMmM2YWExYTRmMDRiNmIwMDhmZjhlYjFl
OWMwNGM4Njk2ZDczMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXIuaApAQCAtMzksMTIgKzM5LDEyIEBAIGNsYXNzIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXIgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRl
cldpCiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwg
SlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBl
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
LSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpT
Q2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6
SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNv
bnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVy
YXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgcHV0
KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBK
U0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0
QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJv
b2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29s
IHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAK
ICAgICBERUNMQVJFX0lORk87CkBAIC04MSwxMCArODEsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBw
ZXJLZXkoVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqIHdyYXBwYWJsZU9iamVjdCkK
ICAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXImKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyPiYmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZlB0cjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4mJiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBs
LnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXImKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciogaW1wbCkgeyByZXR1cm4g
aW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBK
U0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXI+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4m
JiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgp
OyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4gewogICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAK
aW5kZXggMmU5NWZlNmY5NmMxZjU4NTAzZjEzZDdkZDdmN2VjYjM1NDhiY2EwMC4uMzA4OGU1Zjdj
YzI4NzQzNWI0YWU3OTE0OWFmNGY0YzRiNzc2OWIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcApA
QCAtNTAsOCArNTAsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclBybwogCiAvLyBBdHRyaWJ1dGVz
CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKQEAgLTE0OSwxNyArMTQ5LDE3IEBAIHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlz
T2JqZWN0LT5KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjp+SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcigpOwogfQogCi1ib29sIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcio+KG9i
amVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAg
ICAgIGlmIChpbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSB7
Ci0gICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgdGhp
c09iamVjdC0+d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5kZXgudmFsdWUoKSkpOworICAgICAg
ICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5kZXgudmFsdWUoKSkpOwog
ICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oMCksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3RhdGUsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
ICAgICB9CiAgICAgdXNpbmcgR2V0dGVySURMVHlwZSA9IElETERPTVN0cmluZzsKICAgICBhdXRv
IGdldHRlckZ1bmN0b3IgPSBbXSAoYXV0byYgdGhpc09iamVjdCwgYXV0byBwcm9wZXJ0eU5hbWUp
IC0+IE9wdGlvbmFsPHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT4g
ewpAQCAtMTY4LDI2ICsxNjgsMjYgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG8KICAgICAgICAg
ICAgIHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBH
ZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVzdWx0KSB9OwogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH07Ci0gICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0
eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3Rh
dGUsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7Ci0gICAgICAg
IGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBXVEZNb3ZlKG5hbWVkUHJv
cGVydHkudmFsdWUoKSkpOworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNp
YmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAg
IGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIFdU
Rk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApLCB2YWx1ZSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChv
YmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29s
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZKGluZGV4
IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKICAgICAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+
d3JhcHBlZCgpLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5k
ZXgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4
KSk7CiAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPigwKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgc3RhdGUsIGluZGV4LCBzbG90KTsKKyAgICAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNs
b3QpOwogICAgIH0KICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0s
IGluZGV4KTsKICAgICB1c2luZyBHZXR0ZXJJRExUeXBlID0gSURMRE9NU3RyaW5nOwpAQCAtMTk3
LDM0ICsxOTcsMzQgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2IKICAgICAgICAgICAgIHJldHVy
biB0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBHZXR0ZXJJRExU
eXBlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVzdWx0KSB9OwogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIH07Ci0gICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vz
c1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqc3RhdGUsICp0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7Ci0gICAgICAgIGF1dG8gdmFs
dWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBXVEZNb3ZlKG5hbWVkUHJvcGVydHkudmFs
dWUoKSkpOworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQ
cm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1dG8gdmFs
dWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUobmFt
ZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2Jq
ZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90
KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKj4ob2JqZWN0
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgo
KTsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20odm0sIGkpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwotICAgIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKIHsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXIqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKSkgewotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0
YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUp
OwogICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaW5kZXhlZFNldHRlcihpbmRleC52YWx1
ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMy
LDI4ICsyMzIsMjggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHMKIAogICAgIGlmICghcHJvcGVy
dHlOYW1lLmlzU3ltYm9sKCkpIHsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2Jq
ZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAg
ICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KHN0
YXRlLT52bSgpKTsKLSAgICAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KSkgewotICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShz
dGF0ZS0+dm0oKSk7Ci0gICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRo
aXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdChKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKKyAgICAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJv
dG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpKSB7CisgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0
cnVlKTsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBK
U09iamVjdDo6cHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQ
cm9wZXJ0eVNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiB9
CiAKLWJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQorYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogCiAgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0g
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwotICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgdmFsdWUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAg
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LCBXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjYyLDE4ICsyNjIsMTggQEAgYm9v
bCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1MKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7Ci0gICAgaWYg
KCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVy
dHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewotICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICBp
ZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9w
ZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAg
ICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICB0aGlzT2JqZWN0LT53
cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwg
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOworICAgIHJldHVybiBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAotYm9vbCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIHByb3BlcnR5RGVzY3JpcHRvciwg
Ym9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRo
cm93KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlcio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMjgxLDggKzI4MSw4IEBAIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6ZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqIG9iCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3Bl
cnR5TmFtZSkpIHsKICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3Jp
cHRvcigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHByb3BlcnR5RGVzY3JpcHRv
ci52YWx1ZSgpKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVy
dHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHRydWUpOwogICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaW5kZXhlZFNldHRl
cihpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjkwLDExICsyOTAsMTEgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2IKIAogICAg
IGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKICAgICAgICAgUHJvcGVydHlTbG90IHNs
b3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1
aXJ5IH07Ci0gICAgICAgIGlmICghSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkgeworICAgICAgICBpZiAoIUpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KSkgewogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3Iu
aXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwotICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CisgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CiAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAg
ICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0dGVyKHByb3BlcnR5TmFtZVRvU3Ry
aW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMzAzLDEwMSArMzAzLDEwMyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBv
YgogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3Bl
cnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxl
KHRydWUpOwotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsK
KyAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRo
cm93KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlciogSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXI+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlu
bGluZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyKiBJRExPcGVy
YXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj46OmNhc3Qo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1l
KQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXIqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAg
cmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhp
c1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlw
ZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3Qo
KSkpOwogfQogCi1ib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3Rv
dHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRT
ZXR0ZXJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXJCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBuYW1lID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBuYW1lID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gdmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5uYW1lZFNldHRlcihXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPjo6Y2FsbDxqc1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHk+KCpz
dGF0ZSwgIm5hbWVkU2V0dGVyIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPjo6Y2FsbDxqc1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibmFtZWRTZXR0ZXIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIxQm9k
eShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQ
cm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIxQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNp
Z25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgaW1wbC5pbmRleGVkU2V0dGVyKFdURk1vdmUoaW5kZXgpLCBXVEZNb3Zl
KHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIyQm9k
eShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQ
cm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIyQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNp
Z25lZExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpz
dGF0ZSwgaW1wbC5pbmRleGVkU2V0dGVyKFdURk1vdmUoaW5kZXgpKSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bXBsLmluZGV4ZWRTZXR0ZXIoV1RGTW92ZShpbmRleCkpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyT3ZlcmxvYWREaXNwYXRjaGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3Rv
dHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlck92ZXJsb2FkRGlzcGF0Y2hlcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFS
QU0odm0pOwotICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDIsIHN0YXRl
LT5hcmd1bWVudENvdW50KCkpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXpl
X3Q+KDIsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09
IDEpIHsKLSAgICAgICAgcmV0dXJuIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIyQm9keShzdGF0ZSwgY2FzdGVk
VGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBqc1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyMkJvZHko
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsK
ICAgICB9CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAyKSB7Ci0gICAgICAgIHJldHVybiBqc1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25JbmRl
eGVkU2V0dGVyMUJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICBy
ZXR1cm4ganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlw
ZUZ1bmN0aW9uSW5kZXhlZFNldHRlcjFCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAgICAgfQotICAgIHJldHVybiBhcmdzQ291bnQg
PCAxID8gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpIDogdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CisgICAgcmV0dXJuIGFyZ3NDb3VudCA8IDEgPyB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpIDogdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0
dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj46OmNhbGw8anNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRl
ck92ZXJsb2FkRGlzcGF0Y2hlcj4oKnN0YXRlLCAiaW5kZXhlZFNldHRlciIpOworICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cj46OmNhbGw8anNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3Rv
dHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlck92ZXJsb2FkRGlzcGF0Y2hlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICJpbmRleGVkU2V0dGVyIik7CiB9CiAKIHZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6YW5hbHl6ZUhlYXAoSlNDZWxs
KiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpAQCAtNDMzLDcgKzQzNSw3IEBAIGV4dGVy
biAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTQxVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0CiAjZW5kaWYKICNlbmRpZgogCi1KU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4mJiBpbXBs
KQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlcj4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5U
RUdSSVRZKQpAQCAtNDU3LDkgKzQ1OSw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBy
ZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlcj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciYgaW1wbCkKK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyJiBpbXBsKQogewotICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxP
YmplY3QsIGltcGwpOworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjp0b1dy
YXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCmlu
ZGV4IGRlNjk2ZWNkZjVhZmQxNjJhOWE4OGU3ZDRiODE3MjM3NjdmOWQ1MDYuLmQ4NTcwNTQzODhi
MjRkZGIxY2E0YjI4MDE4ZmQ2M2UyZDc0ZTY0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyQW5kU2V0dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaApAQCAtMzks
MTIgKzM5LDEyIEBAIGNsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3ROYW1lCiAgICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwogICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVy
YXRpb25Nb2RlKCkpOwotICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0
eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7Ci0gICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVy
dHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlND
OjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpT
Q2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJv
cGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5
TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lO
Rk87CkBAIC04MSwxMCArODEsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqIHdyYXBwYWJsZU9iamUKICAgICByZXR1
cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXImKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPiYmKTsKLWlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRl
ZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051
bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXImKTsK
K2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgp
OyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXI+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6Ompz
TnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcj4gewogICAgIHVzaW5n
IFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVC
dWlsdGlucy5jcHAKaW5kZXggNjc4OTQxNGY4MjBmZTM4ZWY2ZjExZTMwNjRhMmE0NjhkZjRkYjkx
ZS4uMzdiM2M3NWQzMjkxNjMzMmZlMDdmMjgwZGFiZDgzZDVkNGZkMzM0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcApA
QCAtNDIsOCArNDIsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiAvLyBBdHRyaWJ1dGVzCiAK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlu
c0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0
aW5zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJX
aXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmRlc3Ryb3koSlNDOjpKU0NlbGwq
IGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGluczo6fkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMoKTsKIH0KIAotYm9v
bCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE1MCwxNyAr
MTUwLDE3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsCiAgICAgICAgICAgICByZXR1cm4gdHlw
ZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6
ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9OwotICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNp
YmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpZZXM+KCpzdGF0ZSwgKnRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9
IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgp
KSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3Bl
cnR5PE92ZXJyaWRlQnVpbHRpbnM6Olllcz4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUg
PSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUobmFtZWRQ
cm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KDApLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsK
IH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVu
c2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGlu
ZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Cisg
ICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMq
PihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4
KTsKQEAgLTE3MSw1NSArMTcxLDU1IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJp
ZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCoKICAgICAgICAg
ICAgIHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBH
ZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVzdWx0KSB9OwogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH07Ci0gICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0
eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Olllcz4oKnN0
YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgewotICAgICAg
ICBhdXRvIHZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgV1RGTW92ZShuYW1lZFBy
b3BlcnR5LnZhbHVlKCkpKTsKKyAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlz
aWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6WWVzPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAg
ICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
V1RGTW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCksIHZhbHVlKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwg
aW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAoYXV0
byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5
TmFtZXMoKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5z
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkK
K2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6cHV0KEpTQ2VsbCog
Y2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlT
bG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoT3ZlcnJpZGVCdWlsdGlucyo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9s
KCkpIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0
ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsK
ICAgICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVU
b1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOworICAgIHJldHVy
biBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sKQorYm9vbCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlIHZhbHVlLCBib29sKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKj4oY2Vs
bCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVl
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5z
ZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQor
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBw
cm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKj4ob2Jq
ZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CkBAIC0yMjcsOCArMjI3LDggQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LAogICAgIGlmICghcHJv
cGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3Iu
aXNEYXRhRGVzY3JpcHRvcigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHByb3Bl
cnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCku
c2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzYsMjYgKzIzNiwyNiBA
QCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsCiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJv
cGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOwogICAgIG5ld1Byb3BlcnR5RGVz
Y3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVz
Y3JpcHRvciwgc2hvdWxkVGhyb3cpOworICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3Bl
cnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9
IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odm0s
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlw
ZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1i
b29sIHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGluc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCkBAIC0yOTUs
NyArMjk1LDcgQEAgZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzVUZXN0
TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0VbXTsKICNlbmRpZgogI2VuZGlmCiAKLUpT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0
aW5zPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElO
R19JTlRFR1JJVFkpCkBAIC0zMTksOSArMzE5LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAog
ICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0
aW5zPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zJiBpbXBsKQorSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRp
bnMmIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7
CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBs
KTsKIH0KIAogVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zLmgKaW5kZXggM2EwZGM0ZTM2ZDlhNmEyY2Y5N2FkZWIzYjYxODk1NGMy
YjI0YTQyNC4uNzZiMjVkMDRiMmYzMjhlNjllNTU5MzRiOTY4ZWI2NmRmMWQyMmRhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5o
CkBAIC0zOSwxMiArMzksMTIgQEAgY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVC
dWlsdGlucyA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGUKICAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9N
R2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7Ci0gICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKLSAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBK
U0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6
SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlND
OjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVf
SU5GTzsKQEAgLTgxLDEwICs4MSwxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFt
ZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVy
biB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlu
cyYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnMqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3Qs
ICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnM+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmUHRyPFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwp
IHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGlt
cGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICpp
bXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucz4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6
IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zPiB7CiAgICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXMuY3BwCmluZGV4IGU3NjY2ZWZmOWVkNjQ0ODNlMTVhMmJmNzliOTczMmE4Y2Fi
ZTIxZTIuLjIxMDczN2Y1OWI3YzE5YWYyYzJjNTJiNDFkZjUxYzNjZTI4NDU4YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzLmNwcApAQCAtNDgsOSArNDgsOSBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNJbnN0YQogCiAv
LyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1VuZm9yZ2VhYmxl
QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1VuZm9y
Z2VhYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CiAKIGNsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
CiBwdWJsaWM6CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllczo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlz
T2JqZWN0LT5KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6fkpTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKCk7CiB9CiAKLWJvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CkBAIC0xNzQs
MTcgKzE3NCwxNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iagogICAgICAgICAgICAgcmV0dXJu
IHR5cGVuYW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5
cGU6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNz
VmlzaWJsZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6Tm8+KCpzdGF0ZSwgKnRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1
ZSgpKSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFBy
b3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Ok5vPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKKyAgICAgICAgYXV0byB2YWx1
ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92ZShuYW1l
ZFByb3BlcnR5LnZhbHVlKCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oMCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3Rh
dGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1
bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllcyo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpOwpAQCAtMTk1LDY1ICsxOTUsNjUgQEAgYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamUKICAgICAgICAgICAgIHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGUgeyBHZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUocmVz
dWx0KSB9OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH07Ci0gICAgaWYgKGF1
dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVp
bHRpbnM6Ok5vPigqc3RhdGUsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0
b3IpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBX
VEZNb3ZlKG5hbWVkUHJvcGVydHkudmFsdWUoKSkpOworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVy
dHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpObz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0
b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApLCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOworICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVj
dCwgaW5mbygpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwotICAgIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQorYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllczo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQogewogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAKICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OlZNSW5xdWlyeSB9OwotICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3Qt
PmdldFByb3RvdHlwZURpcmVjdChzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGlmICghKHByb3RvdHlw
ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0
ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKLSAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAgIGlmICghKHByb3RvdHlwZS5pc09i
amVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0
OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllczo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3Rh
dGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQorYm9v
bCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6cHV0QnlJbmRleChK
U0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25l
ZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXMqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20odm0sIGluZGV4KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmpl
Y3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKICAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCh2bSk7Ci0g
ICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0
UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgewotICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsK
KyAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5n
ZXRQcm9wZXJ0eVNsb3QobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkp
IHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwogICAgICAgICB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5
TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwg
dmFsdWUsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2Vs
bCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAK
LWJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlw
dG9yLCBib29sIHNob3VsZFRocm93KQorYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllczo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3Vs
ZFRocm93KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTI2NiwxMSArMjY2LDExIEBAIHN0
YXRpYyBib29sIGlzVW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUoUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKIAogICAgICAgICBpZiAoIWlzVW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUocHJvcGVydHlO
YW1lKSkgewogICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Ci0gICAgICAgICAgICBp
ZiAoIUpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpIHsKKyAgICAgICAgICAgIGlmICghSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVz
Y3JpcHRvcigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7
Ci0gICAgICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCkpOworICAgICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5RGVzY3JpcHRvci52
YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHRydWUpOwogICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0
ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjgwLDY5ICsyODAsNjkgQEAg
c3RhdGljIGJvb2wgaXNVbmZvcmdlYWJsZVByb3BlcnR5TmFtZShQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9
IHByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmln
dXJhYmxlKHRydWUpOwotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRo
cm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNo
b3VsZFRocm93KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXMqIElETEF0dHJpYnV0ZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcz46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXMqIElETEF0dHJpYnV0ZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllcz46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyo+KHN0YXRlLnZtKCks
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyo+KEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXRl
bXBsYXRlPD4gaW5saW5lIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
KiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+
OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyogSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihzdGF0
ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
cHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJv
dG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
cHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNVbmZvcmdlYWJsZUF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1VuZm9y
Z2VhYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBs
LnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5mb3JnZWFi
bGVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNVbmZvcmdlYWJsZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzVW5mb3JnZWFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXM+OjpnZXQ8anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNVbmZvcmdl
YWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0
YXRlLCB0aGlzVmFsdWUsICJ1bmZvcmdlYWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+OjpnZXQ8
anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNVbmZvcmdlYWJsZUF0dHJp
YnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgInVuZm9yZ2VhYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlvbkJvZHkoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNJbnN0YW5jZUZ1
bmN0aW9uVW5mb3JnZWFibGVPcGVyYXRpb25Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
bXBsLnVuZm9yZ2VhYmxlT3BlcmF0aW9uKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdl
YWJsZU9wZXJhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0
YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlvbihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz46OmNhbGw8anNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNJbnN0YW5jZUZ1bmN0aW9uVW5m
b3JnZWFibGVPcGVyYXRpb25Cb2R5Pigqc3RhdGUsICJ1bmZvcmdlYWJsZU9wZXJhdGlvbiIpOwor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXM+OjpjYWxsPGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
SW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keT4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsICJ1bmZvcmdlYWJsZU9wZXJhdGlvbiIpOwogfQogCiB2b2lkIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkBAIC0zNzgsNyArMzc4LDcgQEAgZXh0
ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzlUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXMKICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz4mJiBpbXBs
KQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXM+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVH
UklUWSkKQEAgLTQwMiw5ICs0MDIsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
PihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyYgaW1wbCkKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllcyYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGltcGwpOwogfQogCiBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjp0b1dyYXBwZWQoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmgKaW5kZXggYjg3MWE2MWNlM2Qz
OTVjN2U2YTJmNDBiNzA2NDA4YjAxNGFjNmJlZC4uOWNkYWVhYTllZTU2ZmRiZTE4Mjg3ZmE3M2Nh
ZjBjMmYyZDExYzJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmgKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyA6IHB1YmxpYyBKU0RPTVdy
YXBwZXI8VGVzdE5hbWVkUwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5
cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMg
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKiB0b1dyYXBwZWQoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYs
IEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgc3Rh
dGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBi
b29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsK
KyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTgxLDEwICs4MSwxMCBA
QCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXMqIHdyYXBwYWJsZU9iamVjdAogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9
CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMmKTsKLWlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyogaW1w
bCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlND
Ojpqc051bGwoKTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXM+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
UHRyPFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz4mJiBpbXBsKSB7IHJl
dHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJl
bGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
ICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXds
eUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VO
b25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnMuY3BwCmluZGV4IGJmNDQwNjQ3MmYwMzA5ZjVjYzgxYmJkOTUzZDc4NzM2OGU5
ZjRjNmEuLmM3NDVjNTZkODZmYjU0N2IwMjJlNDkyODA0ZWI2YWIyNzEwYjBjNzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuY3BwCkBAIC00OCw5
ICs0OCw5IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zVW5mb3JnZWFibGVBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zVW5mb3JnZWFibGVBdHRyaWJ1dGUoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKIAogY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRP
dmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
CiBwdWJsaWM6CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmRlc3Ryb3koSlNDOjoKICAg
ICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnM6On5KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnMoKTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTE3NCwxNyArMTc0LDE3IEBA
IGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlk
ZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0CiAgICAgICAgICAgICByZXR1cm4gdHlwZW5hbWUgR2V0
dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlIHsgR2V0dGVySURMVHlwZTo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9OwotICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQ
cm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpZZXM+KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3Bl
cnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURM
RE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAg
aWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJy
aWRlQnVpbHRpbnM6Olllcz4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElE
TERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52
YWx1ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KDApLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBy
ZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KG9i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9v
bCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVp
bHRpbnM6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRp
bnMqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGlu
ZGV4KTsKQEAgLTE5NSw1NSArMTk1LDU1IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0CiAgICAg
ICAgICAgICByZXR1cm4gdHlwZW5hbWUgR2V0dGVySURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
IHsgR2V0dGVySURMVHlwZTo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHJlc3VsdCkgfTsKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9OwotICAgIGlmIChhdXRvIG5hbWVkUHJv
cGVydHkgPSBhY2Nlc3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpZZXM+
KCpzdGF0ZSwgKnRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0dGVyRnVuY3RvcikpIHsKLSAg
ICAgICAgYXV0byB2YWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIFdURk1vdmUobmFt
ZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vz
c1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Olllcz4oKmxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApLCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOworICAgIHJldHVybiBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
Kj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKG9iamVjdCwgaW5mbygp
KTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5z
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpOwotICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLWJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKK2Jvb2wgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwdXQoSlND
ZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9w
ZXJ0eVNsb3QpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihjZWxsKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAg
ICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CiAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQo
KS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1
cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
cHV0UHJvcGVydHlTbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3Qp
OwogfQogCi1ib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGluczo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3Rh
dGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sKQorYm9vbCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OnB1dEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wpCiB7Ci0gICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpOwotICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB0cnVlKTsKICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3Bl
cnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRo
cm93KQorYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnM6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91
bGRUaHJvdykKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyo+KG9iamVjdCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAt
MjU3LDggKzI1Nyw4IEBAIHN0YXRpYyBib29sIGlzVW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUoUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICAgICAgaWYgKCFpc1VuZm9yZ2VhYmxlUHJvcGVy
dHlOYW1lKHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlw
dG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52
bSgpKTsKLSAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCkpOworICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkp
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1l
VG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yNjcsNjkgKzI2Nyw2OSBAQCBzdGF0aWMgYm9vbCBpc1VuZm9y
Z2VhYmxlUHJvcGVydHlOYW1lKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAKICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9y
OwogICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7Ci0gICAg
cmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworICAgIHJldHVybiBK
U09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQogCi10
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMqIElETEF0dHJpYnV0ZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+OjpjYXN0KEV4ZWNTdGF0ZSYg
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyog
SURMQXR0cmlidXRlPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGlucz46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVp
bHRpbnMqPihzdGF0ZS52bSgpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNBbmRPdmVycmlkZUJ1aWx0aW5zKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCks
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
KiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlk
ZUJ1aWx0aW5zKiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zKj4oc3RhdGUudm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOworICAgIHJldHVy
biBqc0R5bmFtaWNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGlucyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBj
YWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBl
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXBy
b3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVp
bHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
cHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgog
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGluc1VuZm9yZ2VhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnNVbmZvcmdlYWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwudW5mb3JnZWFibGVBdHRyaWJ1
dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bmZvcmdlYWJsZUF0dHJpYnV0ZSgpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNVbmZvcmdlYWJsZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1VuZm9yZ2VhYmxlQXR0cmlidXRlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz46OmdldDxqc1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNVbmZvcmdl
YWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0
YXRlLCB0aGlzVmFsdWUsICJ1bmZvcmdlYWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zPjo6Z2V0PGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1VuZm9yZ2VhYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAidW5mb3JnZWFibGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGluc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlvbkJvZHkoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9w
ZXJhdGlvbkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
bXBsLnVuZm9yZ2VhYmxlT3BlcmF0aW9uKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNJbnN0
YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVPcGVyYXRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
SW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz46OmNhbGw8anNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
SW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keT4oKnN0YXRlLCAidW5mb3Jn
ZWFibGVPcGVyYXRpb24iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz46OmNhbGw8anNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
SW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keT4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsICJ1bmZvcmdlYWJsZU9wZXJhdGlvbiIpOwogfQogCiB2b2lkIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
czo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpAQCAt
MzY1LDcgKzM2NSw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTU4
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzCiAjZW5kaWYKICNlbmRpZgog
Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnM+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVH
UklUWSkKQEAgLTM4OSw5ICszODksOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGlucz4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucyYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGltcGwpOwogfQogCiBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRP
dmVycmlkZUJ1aWx0aW5zKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnM6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5o
CmluZGV4IGQzNGQ4ZmRlNTUyM2UwMDRmOWEwOWNiOGM1NWRmMzcxMTdkYmE5M2IuLmExNDc3NDI5
NzA4YzVjY2E2NDU2Mzk1ODhjYWVjYmNhZjIzZDQxMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmgKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRp
bnMgOiBwdWJsaWMgSlNETwogICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5
cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0aWMg
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
cyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRp
b25Nb2RlKCkpOwotICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRU
aHJvdyk7Ci0gICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpF
bnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2Vs
bCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87
CkBAIC04MSwxMCArODEsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGkKICAgICByZXR1cm4g
d3JhcHBhYmxlT2JqZWN0OwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyogaW1w
bCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlND
Ojpqc051bGwoKTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPiYmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3
bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBK
U0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNBbmRPdmVycmlkZUJ1aWx0aW5zJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucyogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGlucz4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXds
eUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VO
b25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz4gewogICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcAppbmRleCA4NjBjZjNkNzg5NDY2MWVmZWUzOWIzYTgyY2IzYmI5NzVhZjQ2NDdi
Li44NmY5MmEzNzBmODcwOWEzZmRkZTA1MTBmNDQ4MmJlNDAzMTVhNmI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CkBAIC02NCwxMCArNjQsMTAgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkpTR2xvYmEKIAogLy8gQXR0cmli
dXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
ZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5hbWUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0Tm9kZU5hbWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3ROb2RlUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC05NiwxNSArOTYsMTUg
QEAgY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmpl
Y3QgewogCiB1c2luZyBKU1Rlc3ROb2RlQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yPEpT
VGVzdE5vZGU+OwogCi10ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNU
ZXN0Tm9kZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3RlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8
SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmpzQ2FsbGVlKCkpOworICAgIGF1dG8qIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0Nh
bGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0
Tm9kZTo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVh
dGVkPElETEludGVyZmFjZTxUZXN0Tm9kZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CiB9CiAK
IHRlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKQEAgLTE1Myw0NSArMTUzLDQ1IEBAIHZvaWQgSlNUZXN0Tm9kZVByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0g
dHJ1ZTsKICAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNhbGN1bGF0ZVNlY3JldFJlc3Vs
dCIpLCBzdHJsZW4oImNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpKTsKICAgICAgICAgVk06OkRlbGV0
ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25v
cmVDb25maWd1cmFibGUpOwotICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywg
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUp
OwogICAgIH0KICAgICBpZiAoIWpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSkgewogICAg
ICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKICAgICAgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oImdldFNlY3JldEJvb2xlYW4iKSwgc3RybGVuKCJnZXRTZWNyZXRCb29s
ZWFuIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZN
OjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7Ci0gICAgICAgIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBw
cm9wZXJ0eU5hbWUpOworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xv
YmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCiAgICAgaWYgKCEoanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzU2VjdXJlQ29udGV4dCgpICYmIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmVFbmFibGVkKCkpKSB7
CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwogICAgICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigidGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIiksIHN0cmxl
bigidGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJv
cGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNv
bmZpZ3VyYWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSk7CiAg
ICAgfQogI2VuZGlmCiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLmRvbUl0ZXJhdG9yRW5hYmxlZCgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGlt
ZVByb3BlcnRpZXMgPSB0cnVlOwogICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW50cmll
cyIpLCBzdHJsZW4oImVudHJpZXMiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVT
Y29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxl
KTsKLSAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAg
aWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmRvbUl0ZXJhdG9y
RW5hYmxlZCgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVl
OwogICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigia2V5cyIpLCBzdHJsZW4oImtleXMiKSk7
CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0
ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKLSAgICAgICAgSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5
TmFtZSk7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmpl
Y3QoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLmRvbUl0ZXJhdG9yRW5hYmxlZCgpKSB7CiAgICAgICAgIGhh
c0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwogICAgICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigidmFsdWVzIiksIHN0cmxlbigidmFsdWVzIikpOwogICAgICAgICBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9y
ZUNvbmZpZ3VyYWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBn
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSk7
CiAgICAgfQogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5kb21JdGVyYXRvckVuYWJsZWQoKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9w
ZXJ0aWVzID0gdHJ1ZTsKICAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImZvckVhY2giKSwg
c3RybGVuKCJmb3JFYWNoIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUg
c2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7Ci0g
ICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogICAgIGlmICho
YXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzICYmIHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnko
KSkKICAgICAgICAgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOwpAQCAtMjI5LDEyOCArMjI5
LDEyOCBAQCBKU1ZhbHVlIEpTVGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3Qg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0
b3I8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROb2Rl
KiBJRExBdHRyaWJ1dGU8SlNUZXN0Tm9kZT46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Tm9kZSogSURMQXR0
cmlidXRlPEpTVGVzdE5vZGU+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nh
c3Q8SlNUZXN0Tm9kZSo+KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb2RlKj4oSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0Tm9kZSogSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYXN0KEV4
ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROb2RlKiBJRExPcGVyYXRp
b248SlNUZXN0Tm9kZT46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVz
dE5vZGUqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0Tm9kZSo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBj
YWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3ROb2RlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0Tm9k
ZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90
eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAg
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAg
ICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25z
dHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
Tm9kZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0Tm9kZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExE
T01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLm5hbWUoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5uYW1lKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5hbWUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Tm9kZT46OmdldDxq
c1Rlc3ROb2RlTmFtZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0
YXRlLCB0aGlzVmFsdWUsICJuYW1lIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RO
b2RlPjo6Z2V0PGpzVGVzdE5vZGVOYW1lR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAibmFtZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0Tm9kZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZVNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Tm9kZSYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3Rh
dGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93
U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldE5hbWUoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNl
dEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3ROb2RlPjo6c2V0PHNldEpTVGVzdE5vZGVOYW1lU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibmFtZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0Tm9kZT46OnNldDxzZXRKU1Rlc3ROb2RlTmFtZVNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibmFtZSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdv
cmtlclByb21pc2VCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3ROb2RlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2VCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0Tm9kZT46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGltcGwudGVzdFdvcmtlclByb21pc2UoV1RGTW92ZShwcm9taXNl
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0
V29ya2VyUHJvbWlzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0
YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVu
Y3Rpb25UZXN0V29ya2VyUHJvbWlzZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0Tm9kZT46
OmNhbGw8anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdFdvcmtlclByb21pc2VCb2R5LCBQ
cm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09yV29ya2VyPigqc3RhdGUsICJ0ZXN0V29ya2Vy
UHJvbWlzZSIpOworICAgIHJldHVybiBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlPEpTVGVz
dE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNl
Qm9keSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPcldvcmtlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICJ0ZXN0V29ya2VyUHJvbWlzZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uQ2Fs
Y3VsYXRlU2VjcmV0UmVzdWx0Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0Tm9kZT46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvbkNhbGN1bGF0ZVNlY3JldFJlc3VsdEJvZHkoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3ROb2RlPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaW1wbC5jYWxjdWxhdGVTZWNyZXRSZXN1bHQo
V1RGTW92ZShwcm9taXNlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90
eXBlRnVuY3Rpb25DYWxjdWxhdGVTZWNyZXRSZXN1bHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uQ2FsY3VsYXRlU2VjcmV0UmVzdWx0KEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uUmV0dXJu
aW5nUHJvbWlzZTxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25D
YWxjdWxhdGVTZWNyZXRSZXN1bHRCb2R5LCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09y
V29ya2VyPigqc3RhdGUsICJjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKKyAgICByZXR1cm4gSURM
T3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25DYWxjdWxhdGVTZWNyZXRSZXN1bHRCb2R5LCBQcm9taXNlRXhlY3V0aW9u
U2NvcGU6OldpbmRvd09yV29ya2VyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
ImNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uR2V0U2VjcmV0Qm9vbGVhbkJvZHko
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0Tm9kZT46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVu
Y3Rpb25HZXRTZWNyZXRCb29sZWFuQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0Tm9kZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVh
bj4oaW1wbC5nZXRTZWNyZXRCb29sZWFuKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25HZXRTZWNyZXRCb29sZWFuKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkdldFNlY3JldEJvb2xl
YW4oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uR2V0
U2VjcmV0Qm9vbGVhbkJvZHk+KCpzdGF0ZSwgImdldFNlY3JldEJvb2xlYW4iKTsKKyAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkdldFNlY3JldEJvb2xlYW5Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgImdldFNlY3JldEJvb2xlYW4iKTsKIH0KIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2Vj
cmV0Qm9vbGVhbkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5v
ZGU+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwudGVz
dEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3JldEJv
b2xlYW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVz
dEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2Jq
ZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbkJvZHk+KCpzdGF0
ZSwgInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpOworICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0Tm9kZT46OmNhbGw8anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVGVzdEZlYXR1
cmVHZXRTZWNyZXRCb29sZWFuQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJ0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKTsKIH0KIAogI2VuZGlmCkBAIC0zNzAsNzEg
KzM3MCw2NiBAQCBjb25zdCBKU0M6OkNsYXNzSW5mbyBUZXN0Tm9kZUl0ZXJhdG9yOjpzX2luZm8g
PSB7ICJUZXN0Tm9kZSBJdGVyYXRvciIsICZCYXNlOjpzXwogdGVtcGxhdGU8PgogY29uc3QgSlND
OjpDbGFzc0luZm8gVGVzdE5vZGVJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5v
ZGUgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKFRlc3ROb2RlSXRlcmF0b3JQcm90b3R5cGUpIH07CiAKLXN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllc0NhbGxlcihF
eGVjU3RhdGUqLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKQorc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRy
aWVzQ2FsbGVyKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgSlNUZXN0Tm9kZSogdGhpc09i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJikKIHsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGl0
ZXJhdG9yQ3JlYXRlPFRlc3ROb2RlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5k
OjpWYWx1ZSkpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBzdGF0ZSkKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQ2Fs
bGVyPigqc3RhdGUsICJlbnRyaWVzIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RO
b2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQ2FsbGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImVudHJpZXMiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpCitz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktl
eXNDYWxsZXIoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBKU1Rlc3ROb2RlKiB0aGlzT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmKQogewogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaXRl
cmF0b3JDcmVhdGU8VGVzdE5vZGVJdGVyYXRvcj4oKnRoaXNPYmplY3QsIEl0ZXJhdGlvbktpbmQ6
OktleSkpOwogfQogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9k
ZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lKiBzdGF0ZSkKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RO
b2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyPigqc3RhdGUs
ICJrZXlzIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rl
c3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzQ2FsbGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgImtleXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNDYWxsZXIoRXhlY1N0YXRlKiwgSlNUZXN0
Tm9kZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJikKK3N0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQ2FsbGVyKEpTR2xvYmFs
T2JqZWN0KiwgQ2FsbEZyYW1lKiwgSlNUZXN0Tm9kZSogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJikKIHsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGl0ZXJhdG9yQ3JlYXRlPFRlc3RO
b2RlSXRlcmF0b3I+KCp0aGlzT2JqZWN0LCBJdGVyYXRpb25LaW5kOjpWYWx1ZSkpOwogfQogCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uVmFsdWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUqIHN0YXRlKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvblZhbHVlcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQ2FsbGVyPigqc3RhdGUsICJ2YWx1ZXMi
KTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxsPGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvblZhbHVlc0NhbGxlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJ2YWx1ZXMiKTsKIH0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoQ2FsbGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFj
aENhbGxlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTVGVzdE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGl0ZXJhdG9yRm9yRWFjaDxUZXN0
Tm9kZUl0ZXJhdG9yPigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyYXRvckZvckVhY2g8VGVzdE5vZGVJdGVyYXRvcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7
CiB9CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90
eXBlRnVuY3Rpb25Gb3JFYWNoKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpDYWxsRnJhbWUqIHN0YXRlKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5v
ZGU+OjpjYWxsPGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXI+KCpzdGF0
ZSwgImZvckVhY2giKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5vZGU+OjpjYWxs
PGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2hDYWxsZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAiZm9yRWFjaCIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rl
c3ROb2RlOjpzZXJpYWxpemUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0Tm9kZSYgdGhpc09iamVj
dCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK0pTQzo6SlNPYmplY3QqIEpTVGVzdE5vZGU6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Tm9kZSYgdGhpc09iamVjdCwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoJnN0YXRlLCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpOworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5v
YmplY3RQcm90b3R5cGUoKSk7CiAKLSAgICBhdXRvIG5hbWVWYWx1ZSA9IGpzVGVzdE5vZGVOYW1l
R2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBhdXRvIG5hbWVWYWx1
ZSA9IGpzVGVzdE5vZGVOYW1lR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qs
IHRocm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSwg
bmFtZVZhbHVlKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblRvSlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSosIEpTVGVzdE5vZGUqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vZGU6OnNlcmlhbGl6
ZSgqc3RhdGUsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5vZGU6OnNlcmlhbGl6
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Tm9kZT46OmNhbGw8
anNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keT4oKnN0YXRlLCAidG9KU09OIik7
CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROb2RlPjo6Y2FsbDxqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgInRvSlNPTiIpOwogfQogCiB2b2lkIEpTVGVzdE5vZGU6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKQEAgLTQ1NSw3ICs0NTAsNyBAQCBleHRlcm4g
IkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmU4VGVzdE5vZGVFW107IH0KICNlbmRpZgog
I2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROb2RlPiYmIGltcGwpCitK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROb2RlPiYmIGltcGwpCiB7CiAKICNp
ZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC00NzksOSArNDc0LDkgQEAgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROb2RlPihnbG9iYWxP
YmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROb2RlJiBp
bXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5vZGUmIGltcGwp
CiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0
dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuaAppbmRleCAyNGYxNmZiMjE5ZTQ2YmQzM2JlYTY4OTk5ZGM1MDU5NzdmNDE4MmEyLi4y
OGMwZjljMDkyNzA4MWViMTcyMzdhNGFiMzQ4MWE3MzFlZTNmNzM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmgKQEAgLTQ4
LDcgKzQ4LDcgQEAgY2xhc3MgV0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQgSlNUZXN0Tm9kZSA6
IHB1YmxpYyBKU05vZGUgewogICAgIH0KIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgSlNUZXN0Tm9kZSYg
dGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rl
c3ROb2RlJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYp
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiAgICAgVGVzdE5vZGUmIHdyYXBwZWQoKSBjb25zdAogICAgIHsKQEAgLTYwLDEwICs2MCwx
MCBAQCBjbGFzcyBXRUJDT1JFX1RFU1RTVVBQT1JUX0VYUE9SVCBKU1Rlc3ROb2RlIDogcHVibGlj
IEpTTm9kZSB7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiB9OwogCi1XRUJD
T1JFX1RFU1RTVVBQT1JUX0VYUE9SVCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5vZGUmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3ROb2RlKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROb2RlPiYmKTsK
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0Tm9kZT4mJiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorV0VCQ09SRV9URVNU
U1VQUE9SVF9FWFBPUlQgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5vZGUmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUZXN0Tm9kZSogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9
CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5vZGU+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0Tm9kZT4mJiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAK
IHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0Tm9kZT4g
ewogICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5vZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGRi
NDE0N2FlMmI0MDhlMGI3YTQzMGNhNDAzYTQ3OTVkMDMzYzkxNjkuLjQwNmQzNzc4Yjk3MTA3ZWYx
NjFmNmVlNGUwMDZmOTFhMTZjMTY1OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0xMzQsMTQgKzEzNCwxNCBA
QCBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdE9iajo6RW51bVR5cGUgZW51
bWVyYXRpb25WYWx1ZSkKICAgICByZXR1cm4gdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51
bWVyYXRpb25WYWx1ZSldOwogfQogCi10ZW1wbGF0ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIFRlc3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9u
VmFsdWUpCit0ZW1wbGF0ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtZXJh
dGlvblZhbHVlKQogewotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGNvbnZl
cnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKKyAgICByZXR1cm4ganNT
dHJpbmdXaXRoQ2FjaGUoJmxleGljYWxHbG9iYWxPYmplY3QsIGNvbnZlcnRFbnVtZXJhdGlvblRv
U3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0
T2JqOjpFbnVtVHlwZT4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6
RW51bVR5cGU+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+KEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGF1dG8gc3Ry
aW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIGF1dG8gc3RyaW5nVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZygmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKHN0
cmluZ1ZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1UeXBlOjpF
bXB0eVN0cmluZzsKICAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImVudW1WYWx1ZTEiKQpAQCAtMTc0
LDE0ICsxNzQsMTQgQEAgU3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKFRlc3RPYmo6
Ok9wdGlvbmFsIGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKIH0KIAotdGVtcGxhdGU8PiBKU1N0cmluZyog
Y29udmVydEVudW1lcmF0aW9uVG9KUyhFeGVjU3RhdGUmIHN0YXRlLCBUZXN0T2JqOjpPcHRpb25h
bCBlbnVtZXJhdGlvblZhbHVlKQordGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVudW1lcmF0
aW9uVG9KUyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdE9iajo6T3B0
aW9uYWwgZW51bWVyYXRpb25WYWx1ZSkKIHsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUo
JnN0YXRlLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhlbnVtZXJhdGlvblZhbHVlKSk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb252ZXJ0
RW51bWVyYXRpb25Ub1N0cmluZyhlbnVtZXJhdGlvblZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPD4g
T3B0aW9uYWw8VGVzdE9iajo6T3B0aW9uYWw+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6T3B0
aW9uYWw+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IE9wdGlv
bmFsPFRlc3RPYmo6Ok9wdGlvbmFsPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6Ok9wdGlvbmFs
PihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBh
dXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGlmIChzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBUZXN0T2Jq
OjpPcHRpb25hbDo6RW1wdHlTdHJpbmc7CiAgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJPcHRpb25h
bFZhbHVlMSIpCkBAIC0yMTAsMTQgKzIxMCwxNCBAQCBTdHJpbmcgY29udmVydEVudW1lcmF0aW9u
VG9TdHJpbmcoQWx0ZXJuYXRlRW51bU5hbWUgZW51bWVyYXRpb25WYWx1ZSkKICAgICByZXR1cm4g
dmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldOwogfQogCi10ZW1w
bGF0ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEV4ZWNTdGF0ZSYgc3RhdGUs
IEFsdGVybmF0ZUVudW1OYW1lIGVudW1lcmF0aW9uVmFsdWUpCit0ZW1wbGF0ZTw+IEpTU3RyaW5n
KiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBBbHRlcm5hdGVFbnVtTmFtZSBlbnVtZXJhdGlvblZhbHVlKQogewotICAgIHJldHVybiBq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1l
cmF0aW9uVmFsdWUpKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJmxleGljYWxHbG9i
YWxPYmplY3QsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsK
IH0KIAotdGVtcGxhdGU8PiBPcHRpb25hbDxBbHRlcm5hdGVFbnVtTmFtZT4gcGFyc2VFbnVtZXJh
dGlvbjxBbHRlcm5hdGVFbnVtTmFtZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3RlbXBsYXRlPD4gT3B0aW9uYWw8QWx0ZXJuYXRlRW51bU5hbWU+IHBhcnNlRW51bWVyYXRpb248
QWx0ZXJuYXRlRW51bU5hbWU+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmlu
Zygmc3RhdGUpOworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJlbnVtVmFsdWUxIikK
ICAgICAgICAgcmV0dXJuIEFsdGVybmF0ZUVudW1OYW1lOjpFbnVtVmFsdWUxOwogICAgIGlmIChz
dHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMiIpCkBAIC0yNDIsMTQgKzI0MiwxNCBAQCBTdHJpbmcg
Y29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdE9iajo6RW51bUEgZW51bWVyYXRpb25WYWx1
ZSkKICAgICByZXR1cm4gdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1
ZSldOwogfQogCi10ZW1wbGF0ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEV4
ZWNTdGF0ZSYgc3RhdGUsIFRlc3RPYmo6OkVudW1BIGVudW1lcmF0aW9uVmFsdWUpCit0ZW1wbGF0
ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBUZXN0T2JqOjpFbnVtQSBlbnVtZXJhdGlvblZhbHVlKQogewotICAg
IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3Ry
aW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJmxl
eGljYWxHbG9iYWxPYmplY3QsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9u
VmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtQT4gcGFyc2VF
bnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtQT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bUE+IHBhcnNlRW51bWVyYXRpb248
VGVzdE9iajo6RW51bUE+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygm
c3RhdGUpOworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJBIikKICAgICAgICAgcmV0
dXJuIFRlc3RPYmo6OkVudW1BOjpBOwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0yNzQs
MTQgKzI3NCwxNCBAQCBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdE9iajo6
RW51bUIgZW51bWVyYXRpb25WYWx1ZSkKICAgICByZXR1cm4gdmFsdWVzW3N0YXRpY19jYXN0PHNp
emVfdD4oZW51bWVyYXRpb25WYWx1ZSldOwogfQogCi10ZW1wbGF0ZTw+IEpTU3RyaW5nKiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIFRlc3RPYmo6OkVudW1CIGVudW1l
cmF0aW9uVmFsdWUpCit0ZW1wbGF0ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pT
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBUZXN0T2JqOjpFbnVtQiBlbnVt
ZXJhdGlvblZhbHVlKQogewotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKKyAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoJmxleGljYWxHbG9iYWxPYmplY3QsIGNvbnZlcnRFbnVtZXJhdGlv
blRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBPcHRpb25hbDxU
ZXN0T2JqOjpFbnVtQj4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtQj4oRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51
bUI+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bUI+KEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGF1dG8gc3RyaW5nVmFsdWUg
PSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZygmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKHN0cmluZ1ZhbHVl
ID09ICJCIikKICAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1COjpCOwogICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CkBAIC0zMDYsMTQgKzMwNiwxNCBAQCBTdHJpbmcgY29udmVydEVudW1lcmF0
aW9uVG9TdHJpbmcoVGVzdE9iajo6RW51bUMgZW51bWVyYXRpb25WYWx1ZSkKICAgICByZXR1cm4g
dmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldOwogfQogCi10ZW1w
bGF0ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEV4ZWNTdGF0ZSYgc3RhdGUs
IFRlc3RPYmo6OkVudW1DIGVudW1lcmF0aW9uVmFsdWUpCit0ZW1wbGF0ZTw+IEpTU3RyaW5nKiBj
b252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBUZXN0T2JqOjpFbnVtQyBlbnVtZXJhdGlvblZhbHVlKQogewotICAgIHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9u
VmFsdWUpKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKIH0KIAot
dGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtQz4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0
T2JqOjpFbnVtQz4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4g
T3B0aW9uYWw8VGVzdE9iajo6RW51bUM+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bUM+
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIGF1
dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJDIikKICAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVu
dW1DOjpDOwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0zMzgsMTQgKzMzOCwxNCBAQCBT
dHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdE9iajo6S2luZCBlbnVtZXJhdGlv
blZhbHVlKQogICAgIHJldHVybiB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlv
blZhbHVlKV07CiB9CiAKLXRlbXBsYXRlPD4gSlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRv
SlMoRXhlY1N0YXRlJiBzdGF0ZSwgVGVzdE9iajo6S2luZCBlbnVtZXJhdGlvblZhbHVlKQordGVt
cGxhdGU8PiBKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdE9iajo6S2luZCBlbnVtZXJhdGlvblZhbHVlKQogewot
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIGNvbnZlcnRFbnVtZXJhdGlvblRv
U3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUo
JmxleGljYWxHbG9iYWxPYmplY3QsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0
aW9uVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpLaW5kPiBwYXJz
ZUVudW1lcmF0aW9uPFRlc3RPYmo6OktpbmQ+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OktpbmQ+IHBhcnNlRW51bWVyYXRpb248
VGVzdE9iajo6S2luZD4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCiB7Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZz
dGF0ZSk7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBpZiAoc3RyaW5nVmFsdWUgPT0gInF1aWNrIikKICAgICAgICAg
cmV0dXJuIFRlc3RPYmo6OktpbmQ6OlF1aWNrOwogICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiZGVh
ZCIpCkBAIC0zNzAsMTQgKzM3MCwxNCBAQCBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcoVGVzdE9iajo6U2l6ZSBlbnVtZXJhdGlvblZhbHVlKQogICAgIHJldHVybiB2YWx1ZXNbc3Rh
dGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV07CiB9CiAKLXRlbXBsYXRlPD4gSlNT
dHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoRXhlY1N0YXRlJiBzdGF0ZSwgVGVzdE9iajo6
U2l6ZSBlbnVtZXJhdGlvblZhbHVlKQordGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVudW1l
cmF0aW9uVG9KUyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdE9iajo6
U2l6ZSBlbnVtZXJhdGlvblZhbHVlKQogewotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKKyAg
ICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJmxleGljYWxHbG9iYWxPYmplY3QsIGNvbnZlcnRF
bnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBP
cHRpb25hbDxUZXN0T2JqOjpTaXplPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OlNpemU+KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RP
Ymo6OlNpemU+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6U2l6ZT4oSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgYXV0byBzdHJpbmdW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBpZiAoc3RyaW5n
VmFsdWUgPT0gInNtYWxsIikKICAgICAgICAgcmV0dXJuIFRlc3RPYmo6OlNpemU6OlNtYWxsOwog
ICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAibXVjaC1tdWNoLWxhcmdlciIpCkBAIC00MDIsMTQgKzQw
MiwxNCBAQCBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdE9iajo6Q29uZmlk
ZW5jZSBlbnVtZXJhdGlvblZhbHVlKQogICAgIHJldHVybiB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihlbnVtZXJhdGlvblZhbHVlKV07CiB9CiAKLXRlbXBsYXRlPD4gSlNTdHJpbmcqIGNvbnZl
cnRFbnVtZXJhdGlvblRvSlMoRXhlY1N0YXRlJiBzdGF0ZSwgVGVzdE9iajo6Q29uZmlkZW5jZSBl
bnVtZXJhdGlvblZhbHVlKQordGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9u
VG9KUyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdE9iajo6Q29uZmlk
ZW5jZSBlbnVtZXJhdGlvblZhbHVlKQogewotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKKyAg
ICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJmxleGljYWxHbG9iYWxPYmplY3QsIGNvbnZlcnRF
bnVtZXJhdGlvblRvU3RyaW5nKGVudW1lcmF0aW9uVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBP
cHRpb25hbDxUZXN0T2JqOjpDb25maWRlbmNlPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkNv
bmZpZGVuY2U+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IE9w
dGlvbmFsPFRlc3RPYmo6OkNvbmZpZGVuY2U+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6Q29u
ZmlkZW5jZT4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7
CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImhpZ2giKQogICAgICAgICByZXR1cm4g
VGVzdE9iajo6Q29uZmlkZW5jZTo6SGlnaDsKICAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImtpbmRh
LWxvdyIpCkBAIC00MjIsMTQgKzQyMiwxNCBAQCB0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVj
dGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6Q29uZmlkZW5jZT4oKQogICAgIHJldHVybiAi
XCJoaWdoXCIsIFwia2luZGEtbG93XCIiOwogfQogCi10ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rp
b25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252
ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGJvb2wgaXNOdWxs
T3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGF1dG8qIG9iamVj
dCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdldE9iamVjdCgpOwogICAg
IGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVjdCkpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KICAgICBUZXN0T2JqOjpEaWN0aW9uYXJ5IHJlc3VsdDsKQEAgLTQzNywzMyArNDM3
LDMzIEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxU
ZXN0T2JqOjpEaWN0aW9uYXJ5PihFeGVjU3RhdGUmCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVk
KQogICAgICAgICBhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZU1lbWJlclZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXJW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFu
bm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyIikpOworICAgICAgICBhbm5vdGF0ZWRUeXBlSW5T
ZXF1ZW5jZU1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZU1lbWJlciIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIWFubm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQo
KSkgewotICAgICAgICByZXN1bHQuYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXIgPSBjb252
ZXJ0PElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4+KHN0YXRlLCBhbm5vdGF0
ZWRUeXBlSW5TZXF1ZW5jZU1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmFubm90YXRlZFR5
cGVJblNlcXVlbmNlTWVtYmVyID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExDbGFtcEFkYXB0b3I8
SURMTG9uZz4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZU1l
bWJlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBKU1ZhbHVlIGFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWU7CiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBhbm5vdGF0ZWRUeXBlSW5Vbmlvbk1l
bWJlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYW5ub3RhdGVk
VHlwZUluVW5pb25NZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyIikpOworICAgICAgICBh
bm5vdGF0ZWRUeXBlSW5Vbmlvbk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbm5vdGF0ZWRUeXBlSW5Vbmlv
bk1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIWFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUuaXNVbmRl
ZmluZWQoKSkgewotICAgICAgICByZXN1bHQuYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXIgPSBj
b252ZXJ0PElETFVuaW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4o
c3RhdGUsIGFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQu
YW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXIgPSBjb252ZXJ0PElETFVuaW9uPElETERPTVN0cmlu
ZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgYW5ub3Rh
dGVkVHlwZUluVW5pb25NZW1iZXJWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSBhbnlUeXBlZGVmVmFsdWVWYWx1
ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGFueVR5cGVkZWZWYWx1ZVZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYW55VHlwZWRlZlZhbHVl
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJh
bnlUeXBlZGVmVmFsdWUiKSk7CisgICAgICAgIGFueVR5cGVkZWZWYWx1ZVZhbHVlID0gb2JqZWN0
LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJh
bnlUeXBlZGVmVmFsdWUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhbnlUeXBlZGVmVmFsdWVWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5hbnlUeXBlZGVmVmFsdWUgPSBjb252ZXJ0PElETEFueT4o
c3RhdGUsIGFueVR5cGVkZWZWYWx1ZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmFueVR5cGVkZWZW
YWx1ZSA9IGNvbnZlcnQ8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBhbnlUeXBlZGVmVmFs
dWVWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0LmFueVR5cGVkZWZWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CkBAIC00NzEsMTEgKzQ3MSwxMSBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkg
Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRlJgogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYW55VmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGFueVZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbnlWYWx1ZSIpKTsKKyAgICAgICAgYW55
VmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiYW55VmFsdWUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhbnlWYWx1ZVZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LmFueVZhbHVlID0gY29udmVydDxJRExBbnk+KHN0
YXRlLCBhbnlWYWx1ZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmFueVZhbHVlID0gY29udmVydDxJ
RExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIGFueVZhbHVlVmFsdWUpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJl
c3VsdC5hbnlWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CkBAIC00ODMsMTEgKzQ4MywxMSBAQCB0ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGlj
dGlvbmFyeT4oRXhlY1N0YXRlJgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAg
YW55VmFsdWVXaXRoTnVsbERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCIp
KTsKKyAgICAgICAgYW55VmFsdWVXaXRoTnVsbERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYW55VmFsdWVX
aXRoTnVsbERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LmFueVZhbHVlV2l0aE51bGxEZWZhdWx0ID0g
Y29udmVydDxJRExBbnk+KHN0YXRlLCBhbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdFZhbHVlKTsKKyAg
ICAgICAgcmVzdWx0LmFueVZhbHVlV2l0aE51bGxEZWZhdWx0ID0gY29udmVydDxJRExBbnk+KGxl
eGljYWxHbG9iYWxPYmplY3QsIGFueVZhbHVlV2l0aE51bGxEZWZhdWx0VmFsdWUpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHJlc3VsdC5hbnlWYWx1ZVdpdGhOdWxsRGVmYXVsdCA9IGpzTnVsbCgpOwpAQCAtNDk1LDEx
ICs0OTUsMTEgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9u
YXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KEV4ZWNTdGF0ZSYKICAgICBpZiAoaXNOdWxsT3JVbmRl
ZmluZWQpCiAgICAgICAgIGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgYm9vbGVhbldpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sZWFuV2l0aERlZmF1bHQi
KSk7CisgICAgICAgIGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGlj
YWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sZWFuV2l0aERl
ZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCFib29sZWFuV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
Ci0gICAgICAgIHJlc3VsdC5ib29sZWFuV2l0aERlZmF1bHQgPSBjb252ZXJ0PElETEJvb2xlYW4+
KHN0YXRlLCBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5ib29sZWFu
V2l0aERlZmF1bHQgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIGJv
b2xlYW5XaXRoRGVmYXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQuYm9vbGVhbldpdGhEZWZh
dWx0ID0gZmFsc2U7CkBAIC01MDcsNDQgKzUwNyw0NCBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRp
Y3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRl
JgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldpdGhvdXREZWZh
dWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBib29sZWFuV2l0
aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgYm9vbGVhbldpdGhv
dXREZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWJv
b2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0
LmJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIGJvb2xl
YW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmJvb2xlYW5XaXRob3V0RGVm
YXVsdCA9IGNvbnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgYm9vbGVhbldp
dGhvdXREZWZhdWx0VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAgICAgfQogICAgIEpTVmFsdWUgYnVmZmVyU291cmNlVmFsdWVWYWx1ZTsKICAg
ICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBidWZmZXJTb3VyY2VWYWx1ZVZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiYnVm
ZmVyU291cmNlVmFsdWUiKSk7CisgICAgICAgIGJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBvYmpl
Y3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImJ1ZmZlclNvdXJjZVZhbHVlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYnVmZmVyU291cmNlVmFsdWVWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5idWZmZXJTb3VyY2VWYWx1ZSA9IGNvbnZlcnQ8
SURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj4+KHN0YXRlLCBidWZm
ZXJTb3VyY2VWYWx1ZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmJ1ZmZlclNvdXJjZVZhbHVlID0g
Y29udmVydDxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgYnVmZmVyU291cmNlVmFsdWVWYWx1ZSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSBkaWN0
aW9uYXJ5TWVtYmVyVmFsdWU7CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBk
aWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAg
ICBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJkaWN0aW9uYXJ5TWVtYmVyIikpOworICAgICAgICBkaWN0aW9uYXJ5
TWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImRpY3Rpb25hcnlNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFkaWN0aW9uYXJ5
TWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuZGljdGlvbmFyeU1l
bWJlciA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3Vs
ZFRvbGVyYXRlTnVsbD4+KHN0YXRlLCBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUpOworICAgICAgICBy
ZXN1bHQuZGljdGlvbmFyeU1lbWJlciA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpE
aWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4+KGxleGljYWxHbG9iYWxPYmplY3QsIGRp
Y3Rpb25hcnlNZW1iZXJWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1
bHRWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGVudW1lcmF0aW9u
VmFsdWVXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQi
KSk7CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5n
ZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVt
ZXJhdGlvblZhbHVlV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFlbnVtZXJhdGlvblZhbHVlV2l0aERl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5lbnVtZXJhdGlvblZh
bHVlV2l0aERlZmF1bHQgPSBjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBl
Pj4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVz
dWx0LmVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8SURMRW51bWVyYXRpb248
VGVzdE9iajo6RW51bVR5cGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBlbnVtZXJhdGlvblZhbHVl
V2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0LmVudW1lcmF0aW9uVmFsdWVXaXRo
RGVmYXVsdCA9IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxOwpAQCAtNTUyLDExICs1NTIs
MTEgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRl
c3RPYmo6OkRpY3Rpb25hcnk+KEV4ZWNTdGF0ZSYKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aEVt
cHR5U3RyaW5nRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQiKSk7
CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUgPSBv
YmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0IikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghZW51
bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
Ci0gICAgICAgIHJlc3VsdC5lbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9
IGNvbnZlcnQ8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+PihzdGF0ZSwgZW51bWVy
YXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5l
bnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IGNvbnZlcnQ8SURMRW51bWVy
YXRpb248VGVzdE9iajo6RW51bVR5cGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBlbnVtZXJhdGlv
blZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQuZW51
bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQgPSBUZXN0T2JqOjpFbnVtVHlwZTo6
RW1wdHlTdHJpbmc7CkBAIC01NjQsMjIgKzU2NCwyMiBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRp
Y3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRl
JgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdp
dGhvdXREZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBl
bnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVs
dCIpKTsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0VmFsdWUgPSBvYmpl
Y3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWVudW1lcmF0aW9uVmFs
dWVXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LmVu
dW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8SURMRW51bWVyYXRpb248VGVz
dE9iajo6RW51bVR5cGU+PihzdGF0ZSwgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0VmFs
dWUpOworICAgICAgICByZXN1bHQuZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0ID0gY29u
dmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIGZvb0Fs
aWFzVmFsdWU7CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBmb29BbGlhc1Zh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZm9vQWxpYXNWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvb0FsaWFz
IikpOworICAgICAgICBmb29BbGlhc1ZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmb29BbGlhcyIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWZv
b0FsaWFzVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuZm9vID0gY29udmVy
dDxJRExBbnk+KHN0YXRlLCBmb29BbGlhc1ZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmZvbyA9IGNv
bnZlcnQ8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBmb29BbGlhc1ZhbHVlKTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZQogICAg
ICAgICByZXN1bHQuZm9vID0ganNVbmRlZmluZWQoKTsKQEAgLTU4NywxMSArNTg3LDExIEBAIHRl
bXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpE
aWN0aW9uYXJ5PihFeGVjU3RhdGUmCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAg
ICBmb29XaXRoRGVmYXVsdEFsaWFzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ugewot
ICAgICAgICBmb29XaXRoRGVmYXVsdEFsaWFzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmb29XaXRoRGVmYXVsdEFsaWFzIikpOworICAgICAg
ICBmb29XaXRoRGVmYXVsdEFsaWFzVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvb1dpdGhEZWZhdWx0QWxpYXMiKSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAg
ICAgaWYgKCFmb29XaXRoRGVmYXVsdEFsaWFzVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICByZXN1bHQuZm9vV2l0aERlZmF1bHQgPSBjb252ZXJ0PElETEFueT4oc3RhdGUsIGZvb1dpdGhE
ZWZhdWx0QWxpYXNWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5mb29XaXRoRGVmYXVsdCA9IGNvbnZl
cnQ8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBmb29XaXRoRGVmYXVsdEFsaWFzVmFsdWUp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfSBl
bHNlCiAgICAgICAgIHJlc3VsdC5mb29XaXRoRGVmYXVsdCA9IDA7CkBAIC01OTksMjIgKzU5OSwy
MiBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVz
dE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRlJgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkK
ICAgICAgICAgaW50ZWdlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgaW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiaW50ZWdlciIpKTsKKyAgICAgICAgaW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQo
JmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpbnRlZ2Vy
IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fQogICAgIGlmICghaW50ZWdlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0
LmludGVnZXIgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCBpbnRlZ2VyVmFsdWUpOworICAgICAg
ICByZXN1bHQuaW50ZWdlciA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
aW50ZWdlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlOwogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBpbnRlZ2VyV2l0aERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImludGVn
ZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBvYmpl
Y3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImludGVnZXJXaXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LmludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZl
cnQ8SURMTG9uZz4oc3RhdGUsIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVz
dWx0LmludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdC5pbnRlZ2Vy
V2l0aERlZmF1bHQgPSAwOwpAQCAtNjIyLDIyICs2MjIsMjIgQEAgdGVtcGxhdGU8PiBUZXN0T2Jq
OjpEaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KEV4ZWNT
dGF0ZSYKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGxhcmdlSW50ZWdlclZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbGFyZ2VJbnRlZ2VyVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsYXJn
ZUludGVnZXIiKSk7CisgICAgICAgIGxhcmdlSW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJmxl
eGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsYXJnZUludGVn
ZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAg
ICB9CiAgICAgaWYgKCFsYXJnZUludGVnZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IHJlc3VsdC5sYXJnZUludGVnZXIgPSBjb252ZXJ0PElETExvbmdMb25nPihzdGF0ZSwgbGFyZ2VJ
bnRlZ2VyVmFsdWUpOworICAgICAgICByZXN1bHQubGFyZ2VJbnRlZ2VyID0gY29udmVydDxJRExM
b25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgbGFyZ2VJbnRlZ2VyVmFsdWUpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIEpTVmFs
dWUgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmlu
ZWQpCiAgICAgICAgIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGVsc2UgewotICAgICAgICBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGFyZ2VJbnRlZ2Vy
V2l0aERlZmF1bHQiKSk7CisgICAgICAgIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBv
YmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgImxhcmdlSW50ZWdlcldpdGhEZWZhdWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghbGFyZ2VJbnRlZ2VyV2l0aERl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5sYXJnZUludGVnZXJX
aXRoRGVmYXVsdCA9IGNvbnZlcnQ8SURMTG9uZ0xvbmc+KHN0YXRlLCBsYXJnZUludGVnZXJXaXRo
RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmxhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0g
Y29udmVydDxJRExMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgbGFyZ2VJbnRlZ2VyV2l0
aERlZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0LmxhcmdlSW50ZWdlcldpdGhEZWZhdWx0
ID0gMDsKQEAgLTY0NSwxMSArNjQ1LDExIEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFy
eSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihFeGVjU3RhdGUmCiAgICAg
aWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBudWxsYWJsZUVudW1WYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG51bGxhYmxlRW51bVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVFbnVtIikp
OworICAgICAgICBudWxsYWJsZUVudW1WYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVFbnVtIikpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlm
ICghbnVsbGFibGVFbnVtVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQubnVs
bGFibGVFbnVtID0gY29udmVydDxJRExOdWxsYWJsZTxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpF
bnVtVHlwZT4+PihzdGF0ZSwgbnVsbGFibGVFbnVtVmFsdWUpOworICAgICAgICByZXN1bHQubnVs
bGFibGVFbnVtID0gY29udmVydDxJRExOdWxsYWJsZTxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpF
bnVtVHlwZT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBudWxsYWJsZUVudW1WYWx1ZSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UKICAg
ICAgICAgcmVzdWx0Lm51bGxhYmxlRW51bSA9IFdURjo6bnVsbG9wdDsKQEAgLTY1NywxMSArNjU3
LDExIEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxU
ZXN0T2JqOjpEaWN0aW9uYXJ5PihFeGVjU3RhdGUmCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVk
KQogICAgICAgICBudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQo
KTsKICAgICBlbHNlIHsKLSAgICAgICAgbnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxl
SW50ZWdlcldpdGhEZWZhdWx0IikpOworICAgICAgICBudWxsYWJsZUludGVnZXJXaXRoRGVmYXVs
dFZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJudWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIW51bGxh
YmxlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1
bHQubnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0PElETE51bGxhYmxlPElETExv
bmc+PihzdGF0ZSwgbnVsbGFibGVJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJl
c3VsdC5udWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
TG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIG51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFs
dWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIHJlc3VsdC5udWxsYWJsZUludGVnZXJXaXRoRGVmYXVsdCA9IFdURjo6
bnVsbG9wdDsKQEAgLTY2OSwxMSArNjY5LDExIEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlv
bmFyeSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihFeGVjU3RhdGUmCiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBudWxsYWJsZU5vZGVWYWx1ZSA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG51bGxhYmxlTm9kZVZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVOb2Rl
IikpOworICAgICAgICBudWxsYWJsZU5vZGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVOb2RlIikpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAg
IGlmICghbnVsbGFibGVOb2RlVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQu
bnVsbGFibGVOb2RlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8Tm9kZT4+Pihz
dGF0ZSwgbnVsbGFibGVOb2RlVmFsdWUpOworICAgICAgICByZXN1bHQubnVsbGFibGVOb2RlID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8Tm9kZT4+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBudWxsYWJsZU5vZGVWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0Lm51bGxhYmxlTm9kZSA9
IG51bGxwdHI7CkBAIC02ODEsMTEgKzY4MSwxMSBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rp
b25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRlJgog
ICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgbnVsbGFibGVTdHJpbmdXaXRoRGVm
YXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbnVsbGFibGVT
dHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAibnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgbnVs
bGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJudWxsYWJsZVN0cmluZ1dpdGhEZWZh
dWx0IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghbnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKLSAgICAgICAgcmVzdWx0Lm51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQgPSBjb252ZXJ0
PElETE51bGxhYmxlPElETERPTVN0cmluZz4+KHN0YXRlLCBudWxsYWJsZVN0cmluZ1dpdGhEZWZh
dWx0VmFsdWUpOworICAgICAgICByZXN1bHQubnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCA9IGNv
bnZlcnQ8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgbnVs
bGFibGVTdHJpbmdXaXRoRGVmYXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQubnVsbGFibGVT
dHJpbmdXaXRoRGVmYXVsdCA9IFN0cmluZygpOwpAQCAtNjkzLDExICs2OTMsMTEgQEAgdGVtcGxh
dGU8PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rp
b25hcnk+KEV4ZWNTdGF0ZSYKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIG51
bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxlVW5pb25NZW1iZXIiKSk7CisgICAgICAgIG51
bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVsbGFibGVVbmlvbk1lbWJlciIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIW51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJl
c3VsdC5udWxsYWJsZVVuaW9uTWVtYmVyID0gY29udmVydDxJRExOdWxsYWJsZTxJRExVbmlvbjxJ
RExMb25nLCBJRExJbnRlcmZhY2U8Tm9kZT4+Pj4oc3RhdGUsIG51bGxhYmxlVW5pb25NZW1iZXJW
YWx1ZSk7CisgICAgICAgIHJlc3VsdC5udWxsYWJsZVVuaW9uTWVtYmVyID0gY29udmVydDxJRExO
dWxsYWJsZTxJRExVbmlvbjxJRExMb25nLCBJRExJbnRlcmZhY2U8Tm9kZT4+Pj4obGV4aWNhbEds
b2JhbE9iamVjdCwgbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQu
bnVsbGFibGVVbmlvbk1lbWJlciA9IFdURjo6bnVsbG9wdDsKQEAgLTcwNSwzNiArNzA1LDM2IEBA
IHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2Jq
OjpEaWN0aW9uYXJ5PihFeGVjU3RhdGUmCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICByZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAg
IGVsc2UgewotICAgICAgICByZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXF1aXJlZEJ1ZmZlclNv
dXJjZVZhbHVlIikpOworICAgICAgICByZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUgPSBv
YmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInJlcXVpcmVkQnVmZmVyU291cmNlVmFsdWUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXF1aXJlZEJ1ZmZlclNv
dXJjZVZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQucmVxdWlyZWRC
dWZmZXJTb3VyY2VWYWx1ZSA9IGNvbnZlcnQ8SURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJ
RExBcnJheUJ1ZmZlcj4+KHN0YXRlLCByZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUpOwor
ICAgICAgICByZXN1bHQucmVxdWlyZWRCdWZmZXJTb3VyY2VWYWx1ZSA9IGNvbnZlcnQ8SURMVW5p
b248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHJlcXVpcmVkQnVmZmVyU291cmNlVmFsdWVWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UgewotICAgICAgICB0aHJvd1Jl
cXVpcmVkTWVtYmVyVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAicmVxdWlyZWRCdWZmZXJT
b3VyY2VWYWx1ZSIsICJUZXN0RGljdGlvbmFyeSIsICIoQXJyYXlCdWZmZXJWaWV3IG9yIEFycmF5
QnVmZmVyKSIpOworICAgICAgICB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsICJyZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlIiwgIlRl
c3REaWN0aW9uYXJ5IiwgIihBcnJheUJ1ZmZlclZpZXcgb3IgQXJyYXlCdWZmZXIpIik7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIEpTVmFsdWUgcmVzdHJpY3RlZERvdWJsZVZhbHVl
OwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVzdHJpY3RlZERvdWJsZVZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcmVzdHJpY3RlZERvdWJs
ZVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
cmVzdHJpY3RlZERvdWJsZSIpKTsKKyAgICAgICAgcmVzdHJpY3RlZERvdWJsZVZhbHVlID0gb2Jq
ZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJyZXN0cmljdGVkRG91YmxlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcmVzdHJpY3RlZERvdWJsZVZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0PElE
TERvdWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5y
ZXN0cmljdGVkRG91YmxlID0gY29udmVydDxJRExEb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHJlc3RyaWN0ZWREb3VibGVWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN0cmljdGVkRG91YmxlV2l0aERl
ZmF1bHRWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1
bHQiKSk7CisgICAgICAgIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0
LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJy
ZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXN0cmljdGVkRG91YmxlV2l0
aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5yZXN0cmljdGVk
RG91YmxlV2l0aERlZmF1bHQgPSBjb252ZXJ0PElETERvdWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWRE
b3VibGVXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdCA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXN0
cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0LnJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdCA9IDA7CkBAIC03NDIsMjIgKzc0MiwyMiBAQCB0ZW1wbGF0ZTw+
IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFy
eT4oRXhlY1N0YXRlJgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVzdHJp
Y3RlZEZsb2F0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICByZXN0
cmljdGVkRmxvYXRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInJlc3RyaWN0ZWRGbG9hdCIpKTsKKyAgICAgICAgcmVzdHJpY3RlZEZsb2F0VmFs
dWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInJlc3RyaWN0ZWRGbG9hdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnJlc3RyaWN0ZWRGbG9hdCA9IGNvbnZl
cnQ8SURMRmxvYXQ+KHN0YXRlLCByZXN0cmljdGVkRmxvYXRWYWx1ZSk7CisgICAgICAgIHJlc3Vs
dC5yZXN0cmljdGVkRmxvYXQgPSBjb252ZXJ0PElETEZsb2F0PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCByZXN0cmljdGVkRmxvYXRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN0cmljdGVkRmxvYXRXaXRoRGVm
YXVsdFZhbHVlOwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVzdHJpY3Rl
ZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIp
KTsKKyAgICAgICAgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVzdHJp
Y3RlZEZsb2F0V2l0aERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVs
dFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnJlc3RyaWN0ZWRGbG9hdFdp
dGhEZWZhdWx0ID0gY29udmVydDxJRExGbG9hdD4oc3RhdGUsIHJlc3RyaWN0ZWRGbG9hdFdpdGhE
ZWZhdWx0VmFsdWUpOworICAgICAgICByZXN1bHQucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQg
PSBjb252ZXJ0PElETEZsb2F0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQucmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHQgPSAwOwpAQCAtNzY1LDU1ICs3NjUsNTUgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0
aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KEV4ZWNTdGF0ZSYK
ICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHNlcXVlbmNlT2ZTdHJpbmdzVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBzZXF1ZW5jZU9mU3RyaW5n
c1ZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
c2VxdWVuY2VPZlN0cmluZ3MiKSk7CisgICAgICAgIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUgPSBv
YmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInNlcXVlbmNlT2ZTdHJpbmdzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5zZXF1ZW5jZU9mU3RyaW5ncyA9IGNvbnZl
cnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oc3RhdGUsIHNlcXVlbmNlT2ZTdHJpbmdzVmFs
dWUpOworICAgICAgICByZXN1bHQuc2VxdWVuY2VPZlN0cmluZ3MgPSBjb252ZXJ0PElETFNlcXVl
bmNlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHNlcXVlbmNlT2ZTdHJpbmdz
VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIEpTVmFsdWUgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlOwogICAgIGlmIChpc051
bGxPclVuZGVmaW5lZCkKICAgICAgICAgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlID0ganNVbmRl
ZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic21hbGxJbnRl
Z2VyQ2xhbXBlZCIpKTsKKyAgICAgICAgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlID0gb2JqZWN0
LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJz
bWFsbEludGVnZXJDbGFtcGVkIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnNtYWxsSW50ZWdlckNsYW1wZWQgPSBjb252
ZXJ0PElETENsYW1wQWRhcHRvcjxJRExCeXRlPj4oc3RhdGUsIHNtYWxsSW50ZWdlckNsYW1wZWRW
YWx1ZSk7CisgICAgICAgIHJlc3VsdC5zbWFsbEludGVnZXJDbGFtcGVkID0gY29udmVydDxJRExD
bGFtcEFkYXB0b3I8SURMQnl0ZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHNtYWxsSW50ZWdlckNs
YW1wZWRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgSlNWYWx1ZSBzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVlOwogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRW
YWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNtYWxsSW50ZWdlcldp
dGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzbWFsbEludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgc21hbGxJbnRlZ2Vy
V2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic21hbGxJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
cmVzdWx0LnNtYWxsSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDxJRExCeXRlPihzdGF0ZSwg
c21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5zbWFsbEludGVn
ZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgc21h
bGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSBzbWFsbFVuc2lnbmVkSW50ZWdl
ckVuZm9yY2VkUmFuZ2VWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAg
IHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZVZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFs
bFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UiKSk7CisgICAgICAgIHNtYWxsVW5zaWduZWRJ
bnRlZ2VyRW5mb3JjZWRSYW5nZVZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9y
Y2VkUmFuZ2UiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgaWYgKCFzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5zbWFsbFVuc2lnbmVkSW50ZWdlckVu
Zm9yY2VkUmFuZ2UgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMT2N0ZXQ+Pihz
dGF0ZSwgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUpOworICAgICAgICBy
ZXN1bHQuc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlID0gY29udmVydDxJRExFbmZv
cmNlUmFuZ2VBZGFwdG9yPElETE9jdGV0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgc21hbGxVbnNp
Z25lZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIEpTVmFsdWUgc21hbGxVbnNpZ25lZElu
dGVnZXJXaXRoRGVmYXVsdFZhbHVlOwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAg
ICAgc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic21hbGxV
bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgc21hbGxVbnNpZ25lZEludGVn
ZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0
IikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAg
fQogICAgIGlmICghc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQg
PSBjb252ZXJ0PElETE9jdGV0PihzdGF0ZSwgc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVs
dFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQg
PSBjb252ZXJ0PElETE9jdGV0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzbWFsbFVuc2lnbmVkSW50
ZWdlcldpdGhEZWZhdWx0VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdC5zbWFsbFVuc2lnbmVkSW50
ZWdlcldpdGhEZWZhdWx0ID0gMDsKQEAgLTgyMSwyMiArODIxLDIyIEBAIHRlbXBsYXRlPD4gVGVz
dE9iajo6RGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihF
eGVjU3RhdGUmCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJpbmdUcmVh
dE51bGxBc0VtcHR5U3RyaW5nVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICBzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nIikpOworICAgICAgICBzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUgPSBvYmpl
Y3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InN0cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmciKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFzdHJpbmdUcmVhdE51bGxB
c0VtcHR5U3RyaW5nVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuc3RyaW5n
VHJlYXROdWxsQXNFbXB0eVN0cmluZyA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0
b3I8SURMRE9NU3RyaW5nPj4oc3RhdGUsIHN0cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmdWYWx1
ZSk7CisgICAgICAgIHJlc3VsdC5zdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nID0gY29udmVy
dDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWUpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIEpTVmFsdWUgc3Ry
aW5nV2l0aERlZmF1bHRWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAg
IHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAg
ICAgICBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAic3RyaW5nV2l0aERlZmF1bHQiKSk7CisgICAgICAgIHN0cmlu
Z1dpdGhEZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dpdGhEZWZhdWx0IikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc3Ry
aW5nV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5zdHJp
bmdXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgc3RyaW5nV2l0aERl
ZmF1bHRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5zdHJpbmdXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdHJpbmdXaXRoRGVmYXVsdFZhbHVl
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0g
ZWxzZQogICAgICAgICByZXN1bHQuc3RyaW5nV2l0aERlZmF1bHQgPSAiZGVmYXVsdFN0cmluZyJf
czsKQEAgLTg0NCw0NCArODQ0LDQ0IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeSBj
b252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihFeGVjU3RhdGUmCiAgICAgaWYg
KGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0g
anNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0
cmluZ1dpdGhvdXREZWZhdWx0IikpOworICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVl
ID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmluZ1dpdGhvdXREZWZh
dWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuc3RyaW5nV2l0aG91dERl
ZmF1bHQgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhvdXREZWZhdWx0
VmFsdWUpOworICAgICAgICByZXN1bHQuc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1
ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9
CiAgICAgSlNWYWx1ZSB1bmlvbk1lbWJlclZhbHVlOwogICAgIGlmIChpc051bGxPclVuZGVmaW5l
ZCkKICAgICAgICAgdW5pb25NZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHVuaW9uTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ1bmlvbk1lbWJlciIpKTsKKyAgICAgICAgdW5pb25NZW1iZXJW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAidW5pb25NZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCF1bmlvbk1lbWJlclZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnVuaW9uTWVtYmVyID0gY29udmVydDxJRExVbmlv
bjxJRExMb25nLCBJRExJbnRlcmZhY2U8Tm9kZT4+PihzdGF0ZSwgdW5pb25NZW1iZXJWYWx1ZSk7
CisgICAgICAgIHJlc3VsdC51bmlvbk1lbWJlciA9IGNvbnZlcnQ8SURMVW5pb248SURMTG9uZywg
SURMSW50ZXJmYWNlPE5vZGU+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdW5pb25NZW1iZXJWYWx1
ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9
CiAgICAgSlNWYWx1ZSB1bnJlc3RyaWN0ZWREb3VibGVWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JV
bmRlZmluZWQpCiAgICAgICAgIHVucmVzdHJpY3RlZERvdWJsZVZhbHVlID0ganNVbmRlZmluZWQo
KTsKICAgICBlbHNlIHsKLSAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnJlc3RyaWN0ZWREb3Vi
bGUiKSk7CisgICAgICAgIHVucmVzdHJpY3RlZERvdWJsZVZhbHVlID0gb2JqZWN0LT5nZXQoJmxl
eGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnJlc3RyaWN0
ZWREb3VibGUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgaWYgKCF1bnJlc3RyaWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7Ci0gICAgICAgIHJlc3VsdC51bnJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0PElETFVucmVz
dHJpY3RlZERvdWJsZT4oc3RhdGUsIHVucmVzdHJpY3RlZERvdWJsZVZhbHVlKTsKKyAgICAgICAg
cmVzdWx0LnVucmVzdHJpY3RlZERvdWJsZSA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRG91Ymxl
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnJlc3RyaWN0ZWREb3VibGVWYWx1ZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1
ZSB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlOwogICAgIGlmIChpc051bGxPclVu
ZGVmaW5lZCkKICAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHVucmVzdHJpY3RlZERvdWJsZVdpdGhE
ZWZhdWx0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCIpKTsKKyAgICAgICAgdW5yZXN0cmlj
dGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5yZXN0cmljdGVkRG91YmxlV2l0aERl
ZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCF1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+KHN0YXRlLCB1bnJlc3RyaWN0ZWREb3Vi
bGVXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnVucmVzdHJpY3RlZERvdWJsZVdp
dGhEZWZhdWx0ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+KGxleGljYWxHbG9iYWxP
YmplY3QsIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJl
c3VsdC51bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IDA7CkBAIC04ODksMjIgKzg4OSwy
MiBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVz
dE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRlJgogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkK
ICAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKTsKKyAgICAg
ICAgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5yZXN0cmljdGVkRmxvYXQiKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAg
aWYgKCF1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVz
dWx0LnVucmVzdHJpY3RlZEZsb2F0ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oc3Rh
dGUsIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUpOworICAgICAgICByZXN1bHQudW5yZXN0cmljdGVk
RmxvYXQgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZEZsb2F0PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIHVucmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHRWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHVucmVz
dHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVucmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHQiKSk7CisgICAgICAgIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXVucmVzdHJpY3Rl
ZEZsb2F0V2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC51
bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9h
dD4oc3RhdGUsIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSk7CisgICAgICAgIHJl
c3VsdC51bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0ID0gY29udmVydDxJRExVbnJlc3RyaWN0
ZWRGbG9hdD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVs
dFZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0gZWxzZQogICAgICAgICByZXN1bHQudW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9
IDA7CkBAIC05MTIsMjIgKzkxMiwyMiBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkg
Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRlJgogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgdW5zaWduZWRJbnRlZ2VyVmFsdWUgPSBqc1Vu
ZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICB1bnNpZ25lZEludGVnZXJWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVuc2lnbmVkSW50
ZWdlciIpKTsKKyAgICAgICAgdW5zaWduZWRJbnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVuc2lnbmVkSW50
ZWdlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwog
ICAgIH0KICAgICBpZiAoIXVuc2lnbmVkSW50ZWdlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgcmVzdWx0LnVuc2lnbmVkSW50ZWdlciA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPihz
dGF0ZSwgdW5zaWduZWRJbnRlZ2VyVmFsdWUpOworICAgICAgICByZXN1bHQudW5zaWduZWRJbnRl
Z2VyID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2ln
bmVkSW50ZWdlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFs
dWU7CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICB1bnNpZ25lZEludGVnZXJX
aXRoRGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgdW5z
aWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpOworICAg
ICAgICB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGlj
YWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZEludGVn
ZXJXaXRoRGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogICAgIH0KICAgICBpZiAoIXVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUu
aXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQudW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1
bHQgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oc3RhdGUsIHVuc2lnbmVkSW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUpOworICAgICAgICByZXN1bHQudW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQg
PSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWRJ
bnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0LnVuc2lnbmVkSW50ZWdl
cldpdGhEZWZhdWx0ID0gMDsKQEAgLTkzNSw0MCArOTM1LDQwIEBAIHRlbXBsYXRlPD4gVGVzdE9i
ajo6RGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihFeGVj
U3RhdGUmCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICB1bnNpZ25lZExhcmdl
SW50ZWdlclZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgdW5zaWdu
ZWRMYXJnZUludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyIikpOworICAgICAgICB1bnNpZ25lZExh
cmdlSW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bnNpZ25lZExhcmdlSW50ZWdlciIpKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXVu
c2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQu
dW5zaWduZWRMYXJnZUludGVnZXIgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KHN0YXRl
LCB1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnVuc2lnbmVkTGFy
Z2VJbnRlZ2VyID0gY29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIHVuc2lnbmVkTGFyZ2VJ
bnRlZ2VyV2l0aERlZmF1bHRWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAg
ICAgIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVuc2ln
bmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CisgICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVs
dCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IH0KICAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC51bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0
ID0gY29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPihzdGF0ZSwgdW5zaWduZWRMYXJnZUludGVn
ZXJXaXRoRGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnVuc2lnbmVkTGFyZ2VJbnRlZ2Vy
V2l0aERlZmF1bHQgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UKICAgICAgICAg
cmVzdWx0LnVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSAwOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUpTQzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFRl
c3RPYmo6OkRpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCitKU0M6OkpTT2JqZWN0KiBjb252ZXJ0RGlj
dGlvbmFyeVRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVGVzdE9iajo6RGljdGlvbmFyeSYg
ZGljdGlvbmFyeSkKIHsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIAotICAgIGF1dG8gcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlLCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBl
KCkpOworICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7CiAKICAgICBpZiAoIUlE
TFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExMb25nPj46OmlzTnVsbFZhbHVlKGRpY3Rpb25h
cnkuYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8gYW5ub3Rh
dGVkVHlwZUluU2VxdWVuY2VNZW1iZXJWYWx1ZSA9IHRvSlM8SURMU2VxdWVuY2U8SURMQ2xhbXBB
ZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgSURMU2VxdWVuY2U8SURMQ2xh
bXBBZGFwdG9yPElETExvbmc+Pjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnku
YW5ub3RhdGVkVHlwZUluU2VxdWVuY2VNZW1iZXIpKTsKKyAgICAgICAgYXV0byBhbm5vdGF0ZWRU
eXBlSW5TZXF1ZW5jZU1lbWJlclZhbHVlID0gdG9KUzxJRExTZXF1ZW5jZTxJRExDbGFtcEFkYXB0
b3I8SURMTG9uZz4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIElETFNlcXVl
bmNlPElETENsYW1wQWRhcHRvcjxJRExMb25nPj46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShk
aWN0aW9uYXJ5LmFubm90YXRlZFR5cGVJblNlcXVlbmNlTWVtYmVyKSk7CiAgICAgICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhbm5vdGF0
ZWRUeXBlSW5TZXF1ZW5jZU1lbWJlciIpLCBhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZU1lbWJlclZh
bHVlKTsKICAgICB9CiAgICAgaWYgKCFJRExVbmlvbjxJRExET01TdHJpbmcsIElETENsYW1wQWRh
cHRvcjxJRExMb25nPj46OmlzTnVsbFZhbHVlKGRpY3Rpb25hcnkuYW5ub3RhdGVkVHlwZUluVW5p
b25NZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8gYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXJWYWx1
ZSA9IHRvSlM8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExVbmlvbjxJRExET01TdHJpbmcsIElETENsYW1wQWRh
cHRvcjxJRExMb25nPj46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmFubm90
YXRlZFR5cGVJblVuaW9uTWVtYmVyKSk7CisgICAgICAgIGF1dG8gYW5ub3RhdGVkVHlwZUluVW5p
b25NZW1iZXJWYWx1ZSA9IHRvSlM8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0
b3I8SURMTG9uZz4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIElETFVuaW9u
PElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pjo6ZXh0cmFjdFZhbHVlRnJv
bU51bGxhYmxlKGRpY3Rpb25hcnkuYW5ub3RhdGVkVHlwZUluVW5pb25NZW1iZXIpKTsKICAgICAg
ICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVyIiksIGFubm90YXRlZFR5cGVJblVuaW9uTWVtYmVy
VmFsdWUpOwogICAgIH0KICAgICBhdXRvIGFueVR5cGVkZWZWYWx1ZVZhbHVlID0gdG9KUzxJRExB
bnk+KGRpY3Rpb25hcnkuYW55VHlwZWRlZlZhbHVlKTsKQEAgLTk4NCwxOSArOTg0LDE5IEBAIEpT
Qzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnCiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29sZWFuV2l0aG91dERlZmF1bHQiKSwgYm9v
bGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOwogICAgIH0KICAgICBpZiAoIUlETFVuaW9uPElETEFy
cmF5QnVmZmVyVmlldywgSURMQXJyYXlCdWZmZXI+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmJ1
ZmZlclNvdXJjZVZhbHVlKSkgewotICAgICAgICBhdXRvIGJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUg
PSB0b0pTPElETFVuaW9uPElETEFycmF5QnVmZmVyVmlldywgSURMQXJyYXlCdWZmZXI+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVm
ZmVyPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuYnVmZmVyU291cmNlVmFs
dWUpKTsKKyAgICAgICAgYXV0byBidWZmZXJTb3VyY2VWYWx1ZVZhbHVlID0gdG9KUzxJRExVbmlv
bjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVm
ZmVyPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuYnVmZmVyU291cmNlVmFs
dWUpKTsKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImJ1ZmZlclNvdXJjZVZhbHVlIiksIGJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUp
OwogICAgIH0KICAgICBpZiAoIUlETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRT
aG91bGRUb2xlcmF0ZU51bGw+Ojppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmRpY3Rpb25hcnlNZW1i
ZXIpKSB7Ci0gICAgICAgIGF1dG8gZGljdGlvbmFyeU1lbWJlclZhbHVlID0gdG9KUzxJRExEaWN0
aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPj4oc3RhdGUs
IGdsb2JhbE9iamVjdCwgSURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3Vs
ZFRvbGVyYXRlTnVsbD46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmRpY3Rp
b25hcnlNZW1iZXIpKTsKKyAgICAgICAgYXV0byBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSB0b0pT
PElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIElETERpY3Rpb25hcnk8VGVzdE9i
ajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+OjpleHRyYWN0VmFsdWVGcm9tTnVs
bGFibGUoZGljdGlvbmFyeS5kaWN0aW9uYXJ5TWVtYmVyKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJkaWN0aW9uYXJ5TWVt
YmVyIiksIGRpY3Rpb25hcnlNZW1iZXJWYWx1ZSk7CiAgICAgfQotICAgIGF1dG8gZW51bWVyYXRp
b25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVu
dW1UeXBlPj4oc3RhdGUsIGRpY3Rpb25hcnkuZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0KTsK
KyAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExFbnVt
ZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIGRpY3Rpb25h
cnkuZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhE
ZWZhdWx0IiksIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlKTsKLSAgICBhdXRvIGVu
dW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUgPSB0b0pTPElETEVudW1l
cmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4oc3RhdGUsIGRpY3Rpb25hcnkuZW51bWVyYXRpb25W
YWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQpOworICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZVdp
dGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSA9IHRvSlM8SURMRW51bWVyYXRpb248VGVzdE9iajo6
RW51bVR5cGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5LmVudW1lcmF0aW9uVmFs
dWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0
cmluZ0RlZmF1bHQiKSwgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1
ZSk7CiAgICAgaWYgKCFJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT46OmlzTnVsbFZh
bHVlKGRpY3Rpb25hcnkuZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0KSkgewotICAgICAg
ICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlID0gdG9KUzxJRExFbnVt
ZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KHN0YXRlLCBJRExFbnVtZXJhdGlvbjxUZXN0T2Jq
OjpFbnVtVHlwZT46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmVudW1lcmF0
aW9uVmFsdWVXaXRob3V0RGVmYXVsdCkpOworICAgICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVX
aXRob3V0RGVmYXVsdFZhbHVlID0gdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlw
ZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBl
Pjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuZW51bWVyYXRpb25WYWx1ZVdp
dGhvdXREZWZhdWx0KSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQiKSwg
ZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0VmFsdWUpOwogICAgIH0KICAgICBhdXRvIGZv
b0FsaWFzVmFsdWUgPSB0b0pTPElETEFueT4oZGljdGlvbmFyeS5mb28pOwpAQCAtMTAxNSwxNyAr
MTAxNSwxNyBAQCBKU0M6OkpTT2JqZWN0KiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZwogICAgIH0KICAgICBhdXRvIGxhcmdl
SW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETExvbmdMb25nPihkaWN0aW9uYXJ5Lmxh
cmdlSW50ZWdlcldpdGhEZWZhdWx0KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSwgbGFy
Z2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSk7Ci0gICAgYXV0byBudWxsYWJsZUVudW1WYWx1ZSA9
IHRvSlM8SURMTnVsbGFibGU8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Pj4oc3Rh
dGUsIGRpY3Rpb25hcnkubnVsbGFibGVFbnVtKTsKKyAgICBhdXRvIG51bGxhYmxlRW51bVZhbHVl
ID0gdG9KUzxJRExOdWxsYWJsZTxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5Lm51bGxhYmxlRW51bSk7CiAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxl
RW51bSIpLCBudWxsYWJsZUVudW1WYWx1ZSk7CiAgICAgYXV0byBudWxsYWJsZUludGVnZXJXaXRo
RGVmYXVsdFZhbHVlID0gdG9KUzxJRExOdWxsYWJsZTxJRExMb25nPj4oZGljdGlvbmFyeS5udWxs
YWJsZUludGVnZXJXaXRoRGVmYXVsdCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0Iiks
IG51bGxhYmxlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOwotICAgIGF1dG8gbnVsbGFibGVOb2Rl
VmFsdWUgPSB0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxOb2RlPj4+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIGRpY3Rpb25hcnkubnVsbGFibGVOb2RlKTsKKyAgICBhdXRvIG51bGxhYmxlTm9k
ZVZhbHVlID0gdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8Tm9kZT4+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkubnVsbGFibGVOb2RlKTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibnVs
bGFibGVOb2RlIiksIG51bGxhYmxlTm9kZVZhbHVlKTsKLSAgICBhdXRvIG51bGxhYmxlU3RyaW5n
V2l0aERlZmF1bHRWYWx1ZSA9IHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oc3RhdGUs
IGRpY3Rpb25hcnkubnVsbGFibGVTdHJpbmdXaXRoRGVmYXVsdCk7CisgICAgYXV0byBudWxsYWJs
ZVN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+
KGxleGljYWxHbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkubnVsbGFibGVTdHJpbmdXaXRoRGVmYXVs
dCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm51bGxhYmxlU3RyaW5nV2l0aERlZmF1bHQiKSwgbnVsbGFibGVTdHJpbmdXaXRoRGVm
YXVsdFZhbHVlKTsKLSAgICBhdXRvIG51bGxhYmxlVW5pb25NZW1iZXJWYWx1ZSA9IHRvSlM8SURM
TnVsbGFibGU8SURMVW5pb248SURMTG9uZywgSURMSW50ZXJmYWNlPE5vZGU+Pj4+KHN0YXRlLCBn
bG9iYWxPYmplY3QsIGRpY3Rpb25hcnkubnVsbGFibGVVbmlvbk1lbWJlcik7CisgICAgYXV0byBu
dWxsYWJsZVVuaW9uTWVtYmVyVmFsdWUgPSB0b0pTPElETE51bGxhYmxlPElETFVuaW9uPElETExv
bmcsIElETEludGVyZmFjZTxOb2RlPj4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIGRpY3Rpb25hcnkubnVsbGFibGVVbmlvbk1lbWJlcik7CiAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm51bGxhYmxlVW5pb25NZW1i
ZXIiKSwgbnVsbGFibGVVbmlvbk1lbWJlclZhbHVlKTsKLSAgICBhdXRvIHJlcXVpcmVkQnVmZmVy
U291cmNlVmFsdWVWYWx1ZSA9IHRvSlM8SURMVW5pb248SURMQXJyYXlCdWZmZXJWaWV3LCBJRExB
cnJheUJ1ZmZlcj4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkucmVxdWlyZWRCdWZm
ZXJTb3VyY2VWYWx1ZSk7CisgICAgYXV0byByZXF1aXJlZEJ1ZmZlclNvdXJjZVZhbHVlVmFsdWUg
PSB0b0pTPElETFVuaW9uPElETEFycmF5QnVmZmVyVmlldywgSURMQXJyYXlCdWZmZXI+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkucmVxdWlyZWRCdWZmZXJT
b3VyY2VWYWx1ZSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInJlcXVpcmVkQnVmZmVyU291cmNlVmFsdWUiKSwgcmVxdWlyZWRCdWZm
ZXJTb3VyY2VWYWx1ZVZhbHVlKTsKICAgICBpZiAoIUlETERvdWJsZTo6aXNOdWxsVmFsdWUoZGlj
dGlvbmFyeS5yZXN0cmljdGVkRG91YmxlKSkgewogICAgICAgICBhdXRvIHJlc3RyaWN0ZWREb3Vi
bGVWYWx1ZSA9IHRvSlM8SURMRG91YmxlPihJRExEb3VibGU6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZShkaWN0aW9uYXJ5LnJlc3RyaWN0ZWREb3VibGUpKTsKQEAgLTEwNDAsNyArMTA0MCw3IEBA
IEpTQzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnCiAgICAgYXV0byByZXN0cmljdGVkRmxvYXRXaXRoRGVm
YXVsdFZhbHVlID0gdG9KUzxJRExGbG9hdD4oZGljdGlvbmFyeS5yZXN0cmljdGVkRmxvYXRXaXRo
RGVmYXVsdCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgInJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IiksIHJlc3RyaWN0ZWRGbG9h
dFdpdGhEZWZhdWx0VmFsdWUpOwogICAgIGlmICghSURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPjo6
aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5zZXF1ZW5jZU9mU3RyaW5ncykpIHsKLSAgICAgICAgYXV0
byBzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVlID0gdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+OjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5zZXF1ZW5jZU9mU3RyaW5ncykpOworICAgICAg
ICBhdXRvIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUgPSB0b0pTPElETFNlcXVlbmNlPElETERPTVN0
cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgSURMU2VxdWVuY2U8SURM
RE9NU3RyaW5nPjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuc2VxdWVuY2VP
ZlN0cmluZ3MpKTsKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgInNlcXVlbmNlT2ZTdHJpbmdzIiksIHNlcXVlbmNlT2ZTdHJpbmdz
VmFsdWUpOwogICAgIH0KICAgICBpZiAoIUlETENsYW1wQWRhcHRvcjxJRExCeXRlPjo6aXNOdWxs
VmFsdWUoZGljdGlvbmFyeS5zbWFsbEludGVnZXJDbGFtcGVkKSkgewpAQCAtMTA1OCwxNyArMTA1
OCwxNyBAQCBKU0M6OkpTT2JqZWN0KiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZwogICAgIGF1dG8gc21hbGxVbnNpZ25lZElu
dGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExPY3RldD4oZGljdGlvbmFyeS5zbWFsbFVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0KTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVm
YXVsdCIpLCBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUpOwogICAgIGlmICgh
SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURMRE9NU3RyaW5nPjo6aXNOdWxsVmFsdWUoZGlj
dGlvbmFyeS5zdHJpbmdUcmVhdE51bGxBc0VtcHR5U3RyaW5nKSkgewotICAgICAgICBhdXRvIHN0
cmluZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmdWYWx1ZSA9IHRvSlM8SURMVHJlYXROdWxsQXNFbXB0
eUFkYXB0b3I8SURMRE9NU3RyaW5nPj4oc3RhdGUsIElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9y
PElETERPTVN0cmluZz46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnN0cmlu
Z1RyZWF0TnVsbEFzRW1wdHlTdHJpbmcpKTsKKyAgICAgICAgYXV0byBzdHJpbmdUcmVhdE51bGxB
c0VtcHR5U3RyaW5nVmFsdWUgPSB0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERP
TVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9y
PElETERPTVN0cmluZz46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnN0cmlu
Z1RyZWF0TnVsbEFzRW1wdHlTdHJpbmcpKTsKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1RyZWF0TnVsbEFzRW1wdHlT
dHJpbmciKSwgc3RyaW5nVHJlYXROdWxsQXNFbXB0eVN0cmluZ1ZhbHVlKTsKICAgICB9Ci0gICAg
YXV0byBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBk
aWN0aW9uYXJ5LnN0cmluZ1dpdGhEZWZhdWx0KTsKKyAgICBhdXRvIHN0cmluZ1dpdGhEZWZhdWx0
VmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgZGljdGlvbmFy
eS5zdHJpbmdXaXRoRGVmYXVsdCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dpdGhEZWZhdWx0IiksIHN0cmluZ1dpdGhE
ZWZhdWx0VmFsdWUpOwogICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9u
YXJ5LnN0cmluZ1dpdGhvdXREZWZhdWx0KSkgewotICAgICAgICBhdXRvIHN0cmluZ1dpdGhvdXRE
ZWZhdWx0VmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIElETERPTVN0cmluZzo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkuc3RyaW5nV2l0aG91dERlZmF1bHQpKTsK
KyAgICAgICAgYXV0byBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0gdG9KUzxJRExET01TdHJp
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIElETERPTVN0cmluZzo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKGRpY3Rpb25hcnkuc3RyaW5nV2l0aG91dERlZmF1bHQpKTsKICAgICAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dp
dGhvdXREZWZhdWx0IiksIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUpOwogICAgIH0KICAgICBp
ZiAoIUlETFVuaW9uPElETExvbmcsIElETEludGVyZmFjZTxOb2RlPj46OmlzTnVsbFZhbHVlKGRp
Y3Rpb25hcnkudW5pb25NZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8gdW5pb25NZW1iZXJWYWx1ZSA9
IHRvSlM8SURMVW5pb248SURMTG9uZywgSURMSW50ZXJmYWNlPE5vZGU+Pj4oc3RhdGUsIGdsb2Jh
bE9iamVjdCwgSURMVW5pb248SURMTG9uZywgSURMSW50ZXJmYWNlPE5vZGU+Pjo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkudW5pb25NZW1iZXIpKTsKKyAgICAgICAgYXV0byB1
bmlvbk1lbWJlclZhbHVlID0gdG9KUzxJRExVbmlvbjxJRExMb25nLCBJRExJbnRlcmZhY2U8Tm9k
ZT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIElETFVuaW9uPElETExvbmcs
IElETEludGVyZmFjZTxOb2RlPj46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5
LnVuaW9uTWVtYmVyKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1bmlvbk1lbWJlciIpLCB1bmlvbk1lbWJlclZhbHVlKTsK
ICAgICB9CiAgICAgaWYgKCFJRExVbnJlc3RyaWN0ZWREb3VibGU6OmlzTnVsbFZhbHVlKGRpY3Rp
b25hcnkudW5yZXN0cmljdGVkRG91YmxlKSkgewpAQCAtMTA5OCwxNCArMTA5OCwxNCBAQCBKU0M6
OkpTT2JqZWN0KiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPD4g
VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGwgY29udmVydERpY3Rp
b25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGw+KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25h
cnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsIGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRp
Y3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsPihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGJvb2wgaXNOdWxs
T3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGF1dG8qIG9iamVj
dCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdldE9iamVjdCgpOwogICAg
IGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVjdCkpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KICAgICBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVs
bCByZXN1bHQ7CkBAIC0xMTEzLDY2ICsxMTEzLDY2IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6RGlj
dGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGwgY29udmVydERpY3Rpb25hcnk8VGVzdE9i
CiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBib29sZWFuV2l0aG91dERlZmF1
bHRWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGJvb2xlYW5XaXRo
b3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOworICAgICAgICBib29sZWFuV2l0aG91
dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghYm9v
bGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQu
Ym9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgYm9vbGVh
bldpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICByZXN1bHQuYm9vbGVhbldpdGhvdXREZWZh
dWx0ID0gY29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBib29sZWFuV2l0
aG91dERlZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSBub25OdWxsYWJsZU5vZGVWYWx1ZTsKICAgICBp
ZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIG5vbk51bGxhYmxlTm9kZVZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgbm9uTnVsbGFibGVOb2RlVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJub25OdWxsYWJs
ZU5vZGUiKSk7CisgICAgICAgIG5vbk51bGxhYmxlTm9kZVZhbHVlID0gb2JqZWN0LT5nZXQoJmxl
eGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJub25OdWxsYWJs
ZU5vZGUiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgaWYgKCFub25OdWxsYWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0g
ICAgICAgIHJlc3VsdC5ub25OdWxsYWJsZU5vZGUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2Rl
Pj4oc3RhdGUsIG5vbk51bGxhYmxlTm9kZVZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lm5vbk51bGxh
YmxlTm9kZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBub25OdWxsYWJsZU5vZGVWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UgewotICAgICAgICB0aHJvd1JlcXVpcmVkTWVtYmVy
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAibm9uTnVsbGFibGVOb2RlIiwgIlRlc3REaWN0
aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVsbCIsICJOb2RlIik7CisgICAgICAgIHRocm93
UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Im5vbk51bGxhYmxlTm9kZSIsICJUZXN0RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51
bGwiLCAiTm9kZSIpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICBKU1ZhbHVlIHJl
cXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlOwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkK
ICAgICAgICAgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGVsc2UgewotICAgICAgICByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVpcmVkRGljdGlv
bmFyeU1lbWJlciIpKTsKKyAgICAgICAgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBv
YmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXJlcXVpcmVkRGljdGlvbmFy
eU1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnJlcXVpcmVkRGlj
dGlvbmFyeU1lbWJlciA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5
Pj4oc3RhdGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0
LnJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0T2Jq
OjpEaWN0aW9uYXJ5Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgcmVxdWlyZWREaWN0aW9uYXJ5TWVt
YmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgInJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciIsICJUZXN0RGljdGlvbmFy
eVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGwiLCAiVGVzdERpY3Rpb25hcnkiKTsKKyAgICAgICAg
dGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCAicmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyIiwgIlRlc3REaWN0aW9uYXJ5VGhhdFNob3Vs
ZE5vdFRvbGVyYXRlTnVsbCIsICJUZXN0RGljdGlvbmFyeSIpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KICAgICBKU1ZhbHVlIHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZVZhbHVlOwogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVl
VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICByZXF1aXJlZEVudW1l
cmF0aW9uVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSIpKTsKKyAgICAgICAgcmVxdWlyZWRF
bnVtZXJhdGlvblZhbHVlVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIXJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgcmVzdWx0LnJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8SURMRW51bWVy
YXRpb248VGVzdE9iajo6RW51bVR5cGU+PihzdGF0ZSwgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVl
VmFsdWUpOworICAgICAgICByZXN1bHQucmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlID0gY29udmVy
dDxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZVZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocm93UmVxdWly
ZWRNZW1iZXJUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJyZXF1aXJlZEVudW1lcmF0aW9u
VmFsdWUiLCAiVGVzdERpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsIiwgIlRlc3RF
bnVtVHlwZSIpOworICAgICAgICB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsICJyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUiLCAiVGVz
dERpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsIiwgIlRlc3RFbnVtVHlwZSIpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1w
bGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsIGNvbnZlcnRE
aWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPihFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiBUZXN0T2JqOjpEaWN0aW9u
YXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbCBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0
aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBib29sIGlzTnVsbE9yVW5k
ZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBhdXRvKiBvYmplY3QgPSBp
c051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICBpZiAo
VU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3QpKSB7Ci0gICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAgICAgVGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGwgcmVzdWx0
OwpAQCAtMTE4MCwzNSArMTE4MCwzNSBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlU
aGF0U2hvdWxkVG9sZXJhdGVOdWxsIGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OgogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBib29sZWFuV2l0aG91dERlZmF1
bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0
VmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWJvb2xlYW5XaXRo
b3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LmJvb2xlYW5X
aXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIGJvb2xlYW5XaXRob3V0
RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNv
bnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgYm9vbGVhbldpdGhvdXREZWZh
dWx0VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIEpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVZhbHVlOwogICAgIGlmIChpc051
bGxPclVuZGVmaW5lZCkKICAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bWVyYXRpb25WYWx1
ZSIpKTsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGlj
YWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtZXJhdGlvblZh
bHVlIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgcmVzdWx0LmVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PElETEVudW1lcmF0aW9uPFRl
c3RPYmo6OkVudW1UeXBlPj4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSk7CisgICAgICAg
IHJlc3VsdC5lbnVtZXJhdGlvblZhbHVlID0gY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2Jq
OjpFbnVtVHlwZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8PiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFt
ZSBjb252ZXJ0RGljdGlvbmFyeTxBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRlPD4gQWx0ZXJuYXRlRGljdGlvbmFyeU5hbWUg
Y29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+KEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYm9v
bCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgYXV0
byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0
KCk7CiAgICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJv
d1R5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogICAgIEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lIHJlc3VsdDsKQEAg
LTEyMTYsMzUgKzEyMTYsMzUgQEAgdGVtcGxhdGU8PiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZSBj
b252ZXJ0RGljdGlvbmFyeTxBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4oRXgKICAgICBpZiAoaXNO
dWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJib29s
ZWFuV2l0aG91dERlZmF1bHQiKSk7CisgICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVl
ID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFib29sZWFuV2l0aG91dERl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5ib29sZWFuV2l0aG91
dERlZmF1bHQgPSBjb252ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1
bHRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5ib29sZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0
PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZh
bHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAg
IH0KICAgICBKU1ZhbHVlIGVudW1lcmF0aW9uVmFsdWVWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JV
bmRlZmluZWQpCiAgICAgICAgIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1lcmF0aW9uVmFsdWUiKSk7
CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZW51bWVyYXRpb25WYWx1ZSIp
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0K
ICAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IHJlc3VsdC5lbnVtZXJhdGlvblZhbHVlID0gY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2Jq
OjpFbnVtVHlwZT4+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlVmFsdWUpOworICAgICAgICByZXN1
bHQuZW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51
bVR5cGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBlbnVtZXJhdGlvblZhbHVlVmFsdWUpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPD4gVGVzdE9iajo6UGFyZW50RGljdGlvbmFyeSBj
b252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PihFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiBUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5
IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnk+KEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Ym9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAg
YXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2Jq
ZWN0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkg
ewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0
aHJvd1R5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogICAgIFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnkgcmVzdWx0
OwpAQCAtMTI1MiwzNSArMTI1MiwzNSBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OlBhcmVudERpY3Rp
b25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6UGFyZW50RGljdGlvbmFyeQogICAgIGlm
IChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0ganNVbmRl
ZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFyZW50TWVtYmVyMSIp
KTsKKyAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJlbnRNZW1iZXIxIikpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAg
IGlmICghcGFyZW50TWVtYmVyMVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0
LnBhcmVudE1lbWJlcjEgPSBjb252ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCBwYXJlbnRNZW1iZXIx
VmFsdWUpOworICAgICAgICByZXN1bHQucGFyZW50TWVtYmVyMSA9IGNvbnZlcnQ8SURMQm9vbGVh
bj4obGV4aWNhbEdsb2JhbE9iamVjdCwgcGFyZW50TWVtYmVyMVZhbHVlKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIHBh
cmVudE1lbWJlcjJWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBh
cmVudE1lbWJlcjJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBh
cmVudE1lbWJlcjJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInBhcmVudE1lbWJlcjIiKSk7CisgICAgICAgIHBhcmVudE1lbWJlcjJWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAicGFyZW50TWVtYmVyMiIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcmVudE1lbWJlcjJWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5wYXJlbnRNZW1iZXIyID0gY29udmVydDxJRExCb29s
ZWFuPihzdGF0ZSwgcGFyZW50TWVtYmVyMlZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcmVudE1l
bWJlcjIgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHBhcmVudE1l
bWJlcjJWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8PiBUZXN0T2JqOjpD
aGlsZERpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5
PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiBUZXN0T2JqOjpD
aGlsZERpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5
PihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpOwogICAgIGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6
IHZhbHVlLmdldE9iamVjdCgpOwogICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQg
JiYgIW9iamVjdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICBUZXN0T2JqOjpDaGlsZERpY3Rp
b25hcnkgcmVzdWx0OwpAQCAtMTI4OCw0NCArMTI4OCw0NCBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkNoaWxkRGljdGlvbmFyeSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDaGlsZERpY3Rpb25h
cnk+KAogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFyZW50TWVtYmVyMVZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFyZW50TWVtYmVyMVZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFy
ZW50TWVtYmVyMSIpKTsKKyAgICAgICAgcGFyZW50TWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQo
JmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJlbnRN
ZW1iZXIxIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CiAgICAgfQogICAgIGlmICghcGFyZW50TWVtYmVyMVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgcmVzdWx0LnBhcmVudE1lbWJlcjEgPSBjb252ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCBw
YXJlbnRNZW1iZXIxVmFsdWUpOworICAgICAgICByZXN1bHQucGFyZW50TWVtYmVyMSA9IGNvbnZl
cnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgcGFyZW50TWVtYmVyMVZhbHVlKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBKU1ZhbHVlIHBhcmVudE1lbWJlcjJWYWx1ZTsKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIHBhcmVudE1lbWJlcjJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHBhcmVudE1lbWJlcjJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcmVudE1lbWJlcjIiKSk7CisgICAgICAgIHBhcmVudE1l
bWJlcjJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAicGFyZW50TWVtYmVyMiIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcmVudE1lbWJlcjJW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5wYXJlbnRNZW1iZXIyID0gY29u
dmVydDxJRExCb29sZWFuPihzdGF0ZSwgcGFyZW50TWVtYmVyMlZhbHVlKTsKKyAgICAgICAgcmVz
dWx0LnBhcmVudE1lbWJlcjIgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHBhcmVudE1lbWJlcjJWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSBjaGlsZE1lbWJlcjFWYWx1ZTsKICAg
ICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGNoaWxkTWVtYmVyMVZhbHVlID0ganNV
bmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgY2hpbGRNZW1iZXIxVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjaGlsZE1lbWJlcjEi
KSk7CisgICAgICAgIGNoaWxkTWVtYmVyMVZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9i
YWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjaGlsZE1lbWJlcjEiKSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAg
aWYgKCFjaGlsZE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5j
aGlsZE1lbWJlcjEgPSBjb252ZXJ0PElETEJvb2xlYW4+KHN0YXRlLCBjaGlsZE1lbWJlcjFWYWx1
ZSk7CisgICAgICAgIHJlc3VsdC5jaGlsZE1lbWJlcjEgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIGNoaWxkTWVtYmVyMVZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBKU1ZhbHVlIGNoaWxkTWVt
YmVyMlZhbHVlOwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY2hpbGRNZW1i
ZXIyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBjaGlsZE1lbWJl
cjJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImNoaWxkTWVtYmVyMiIpKTsKKyAgICAgICAgY2hpbGRNZW1iZXIyVmFsdWUgPSBvYmplY3QtPmdl
dCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNoaWxk
TWVtYmVyMiIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OwogICAgIH0KICAgICBpZiAoIWNoaWxkTWVtYmVyMlZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgcmVzdWx0LmNoaWxkTWVtYmVyMiA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIGNo
aWxkTWVtYmVyMlZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmNoaWxkTWVtYmVyMiA9IGNvbnZlcnQ8
SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgY2hpbGRNZW1iZXIyVmFsdWUpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0xMzMzLDE0ICsxMzMzLDE0IEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6
Q2hpbGREaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGljdGlvbmFy
eT4oCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKIAotdGVtcGxhdGU8PiBUZXN0T2JqOjpDb25k
aXRpb25hbERpY3Rpb25hcnlBIGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlvbmFs
RGljdGlvbmFyeUE+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+
IFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUEgY29udmVydERpY3Rpb25hcnk8VGVzdE9i
ajo6Q29uZGl0aW9uYWxEaWN0aW9uYXJ5QT4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBib29sIGlzTnVsbE9yVW5kZWZp
bmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBhdXRvKiBvYmplY3QgPSBpc051
bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICBpZiAoVU5M
SUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3QpKSB7Ci0gICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAgICAgVGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9uYXJ5QSByZXN1bHQ7CkBAIC0xMzQ4LDEx
ICsxMzQ4LDExIEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9uYXJ5QSBj
b252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDb25kaXRpb25hCiAgICAgaWYgKGlzTnVsbE9yVW5k
ZWZpbmVkKQogICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQo
KTsKICAgICBlbHNlIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dpdGhvdXRE
ZWZhdWx0IikpOworICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5n
ZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJp
bmdXaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUuaXNV
bmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUpOworICAg
ICAgICByZXN1bHQuc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTEzNjIsMTQgKzEzNjIsMTQgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpDb25k
aXRpb25hbERpY3Rpb25hcnlBIGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlvbmEK
IAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKIAotdGVtcGxh
dGU8PiBUZXN0T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcnlCIGNvbnZlcnREaWN0aW9uYXJ5PFRl
c3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUI+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCit0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUIgY29udmVy
dERpY3Rpb25hcnk8VGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9uYXJ5Qj4oSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBi
b29sIGlzTnVsbE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBh
dXRvKiBvYmplY3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmpl
Y3QoKTsKICAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3QpKSB7
Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAgICAgVGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9uYXJ5QiBy
ZXN1bHQ7CkBAIC0xMzc3LDExICsxMzc3LDExIEBAIHRlbXBsYXRlPD4gVGVzdE9iajo6Q29uZGl0
aW9uYWxEaWN0aW9uYXJ5QiBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDb25kaXRpb25hCiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdFZh
bHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3RyaW5nV2l0aG91dERl
ZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInN0cmluZ1dpdGhvdXREZWZhdWx0IikpOworICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVs
dFZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXN0cmluZ1dpdGhv
dXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuc3RyaW5nV2l0
aG91dERlZmF1bHQgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhvdXRE
ZWZhdWx0VmFsdWUpOworICAgICAgICByZXN1bHQuc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252
ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgc3RyaW5nV2l0aG91dERlZmF1
bHRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsK
ICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEzOTEsMTQgKzEzOTEsMTQgQEAgdGVtcGxh
dGU8PiBUZXN0T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcnlCIGNvbnZlcnREaWN0aW9uYXJ5PFRl
c3RPYmo6OkNvbmRpdGlvbmEKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikKIAotdGVtcGxhdGU8PiBUZXN0T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcnlDIGNv
bnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUM+KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmRpdGlvbmFs
RGljdGlvbmFyeUMgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9u
YXJ5Qz4oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBib29sIGlzTnVsbE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKTsKICAgICBhdXRvKiBvYmplY3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxw
dHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKICAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZp
bmVkICYmICFvYmplY3QpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAgVGVzdE9iajo6Q29uZGl0
aW9uYWxEaWN0aW9uYXJ5QyByZXN1bHQ7CkBAIC0xNDA2LDExICsxNDA2LDExIEBAIHRlbXBsYXRl
PD4gVGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9uYXJ5QyBjb252ZXJ0RGljdGlvbmFyeTxUZXN0
T2JqOjpDb25kaXRpb25hCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBzdHJp
bmdXaXRob3V0RGVmYXVsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgInN0cmluZ1dpdGhvdXREZWZhdWx0IikpOworICAgICAgICBz
dHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAg
ICBpZiAoIXN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICByZXN1bHQuc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3Rh
dGUsIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICByZXN1bHQuc3RyaW5nV2l0
aG91dERlZmF1bHQgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
c3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1OTYsMjEy
ICsxNTk2LDIxMiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpKU0dsb2JhbAogCiAvLyBBdHRyaWJ1dGVzCiAK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5
TG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmlu
Z0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmooSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN0YXRpY1JlYWRvbmx5T2Jq
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqRW51bUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak9jdGV0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNl
dEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VT
aG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dE9iakxvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25l
ZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRl
c3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVz
dE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdS
ZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0xvbmdS
ZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialN0cmluZ1Zv
aWRDYWxsYmFja1JlY29yZEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGlj
dGlvbmFyeUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpBbm5vdGF0
ZWRUeXBlSW5VbmlvbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW5ub3Rh
dGVkVHlwZUluU2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5T
ZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50YXRp
b25FbnVtQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwot
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNZWRpYURldmljZXMoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialNlcnZpY2VXb3JrZXJzKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpYTUxPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQ3JlYXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVVNWU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRJbnRlZ3JhbEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFs
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVS
TEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbUludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
SW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1
c3RvbUJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFu
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9i
akNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9u
bHlMb25nQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0
cmluZ0F0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0
T2JqQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0
YXRpY1JlYWRPbmx5TG9uZ0F0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakNvbnN0
cnVjdG9yU3RhdGljU3RyaW5nQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iaihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDb25zdHJ1Y3RvclRlc3RTdGF0aWNSZWFkb25seU9iaihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqT2N0ZXRBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iak9jdGV0QXR0cihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RPYmpTaG9ydEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
bGFtcGVkU2hvcnRBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0
dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0cihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpV
bnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ0F0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHIoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialRlc3RPYmpBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialVuZm9yZ2VhYmxlQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakJ5
dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2Jq
VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpVc3Zz
dHJpbmdMb25nUmVjb3JkQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ09ialJlY29yZEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVj
b3JkQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ051bGxh
YmxlT2JqUmVjb3JkQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9i
alJlY29yZEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdW
b2lkQ2FsbGJhY2tSZWNvcmRBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialN0cmluZ1ZvaWRD
YWxsYmFja1JlY29yZEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpE
aWN0aW9uYXJ5QXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0cihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHIo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0cihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRlZFR5cGVJblVuaW9uQXR0cihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHIoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTWVkaWFEZXZpY2VzKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialNlcnZpY2VXb3JrZXJzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialhNTE9iakF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0cihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNyZWF0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RPYmpDcmVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRTdHJpbmdBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZT
dHJpbmdBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0
dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0
dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkVVNWVVJMQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFN0cmluZ0F0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bUludGVncmFsQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRl
Z3JhbEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21Cb29sZWFuQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21C
b29sZWFuQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbVVSTEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJM
QXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLUpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2Jq
RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9iakVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFRFU1RfRkVB
VFVSRSkKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlU3RhdGljKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU3RhdGljKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29s
IHNldEpTVGVzdE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyhK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CiAjZW5kaWYKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iak9u
Zm9vKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBz
ZXRKU1Rlc3RPYmpPbndlYmtpdGZvbyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoRXhlY1N0YXRlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNl
dHRlckNhbGxXaXRoQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRT
ZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRl
QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDdXN0
b21BdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0T2JqT25mb28oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpPbndlYmtpdGZvbyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvbyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhFeGVjU3RhdGVBdHRyaWJ1dGUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRo
QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0
dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZEV4ZWNTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogI2lmIEVOQUJMRShDb25kaXRp
b24xKQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxF
KENvbmRpdGlvbjIpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjEpCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3Rv
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24y
KQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAjZW5k
aWYKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAjaWYgRU5BQkxFKENPTkRJVElPTikK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMyhKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogI2VuZGlmCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2Jq
QW55QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9iamVjdEF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqTXV0YWJsZVBvaW50KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2Jq
U3RyYXdiZXJyeShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iaklkKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNl
YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURv
dWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25n
QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5B
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJs
ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRh
YmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQnl0
ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNl
cnZlZEVudW1UeXBlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVt
VHlwZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlWb2lkUHJv
bWlzZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFJlYWRPbmx5
UHJvbWlzZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2Fy
ZHNBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpT
VGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakFueUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50KEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpNdXRh
YmxlUG9pbnQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdE9ialN0cmF3YmVycnkoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpJZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpJZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFi
bGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJs
ZURvdWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZUxvbmdBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVCb29sZWFuQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE9i
ak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmli
dXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCeXRlU3Ry
aW5nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRl
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmli
dXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRl
V2l0aFJlc2VydmVkRW51bVR5cGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpUZXN0UmVhZE9ubHlWb2lkUHJvbWlzZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlQcm9taXNlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRK
U1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAjaWYgRU5BQkxF
KENPTkRJVElPTikKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKICNlbmRpZgogI2lmIEVOQUJMRShDT05ESVRJT04yKQotSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQW5kQ29uZGl0aW9u
YWxseVJlYWRXcml0ZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogI2lmIEVOQUJMRShDT05ESVRJT04pCi1ib29s
IHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQW5kQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3Jp
dGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwogI2VuZGlmCiAjZW5kaWYKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0
SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QXR0cmlidXRlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRU
b1dvcmtlckF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhw
b3NlZFRvV29ya2VyQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJpYnV0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0
cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6
SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xOTQxLDI2ICsxOTQxLDI2IEBAIHN0YXRp
Y19hc3NlcnQoVGVzdE9iajo6Q09OU1RfVkFMVUVfMTQgPT0gMHgxYWJjLCAiQ09OU1RfVkFMVUVf
MTQgaW4gVGVzdE9iaiBkb2VzCiBzdGF0aWNfYXNzZXJ0KFRlc3RPYmo6OkNPTlNUX0lNUEwgPT0g
MTUsICJDT05TVF9JTVBMIGluIFRlc3RPYmogZG9lcyBub3QgbWF0Y2ggdmFsdWUgZnJvbSBJREwi
KTsKIHN0YXRpY19hc3NlcnQoVGVzdE9iajo6cmVhZG9ubHkgPT0gMCwgInJlYWRvbmx5IGluIFRl
c3RPYmogZG9lcyBub3QgbWF0Y2ggdmFsdWUgZnJvbSBJREwiKTsKIAotdGVtcGxhdGU8PiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3RlbXBsYXRl
PD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
YXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmpDb25zdHJ1Y3Rvcio+KHN0YXRlLT5q
c0NhbGxlZSgpKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iakNvbnN0
cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKLSAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CiAgICAgYXV0byogY29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiKTsKICAgICBBU1NFUlQo
Y29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7Ci0gICAgYXV0byB0ZXN0Q2FsbGJhY2sgPSBjb252ZXJ0PElETENh
bGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMCwgInRlc3RDYWxsYmFjayIsICJU
ZXN0T2JqZWN0IiwgbnVsbHB0cik7IH0pOworICAgIGF1dG8gdGVzdENhbGxiYWNrID0gY29udmVy
dDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCAqY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJ0ZXN0Q2FsbGJhY2siLCAi
VGVzdE9iamVjdCIsIG51bGxwdHIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdGVzdENhbGxiYWNrRnVuY3Rpb24g
PSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJ0ZXN0
Q2FsbGJhY2tGdW5jdGlvbiIsICJUZXN0T2JqZWN0IiwgbnVsbHB0cik7IH0pOworICAgIGF1dG8g
dGVzdENhbGxiYWNrRnVuY3Rpb24gPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0
Q2FsbGJhY2tGdW5jdGlvbj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIDEsICJ0ZXN0Q2FsbGJhY2tGdW5jdGlvbiIsICJUZXN0T2JqZWN0IiwgbnVsbHB0cik7
IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T2JqOjpjcmVhdGUoZG9jdW1lbnQsIHRlc3RDYWxs
YmFjay5yZWxlYXNlTm9uTnVsbCgpLCB0ZXN0Q2FsbGJhY2tGdW5jdGlvbi5yZWxlYXNlTm9uTnVs
bCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50
ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RG
TW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVh
dGVkPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CiB9CiAKIHRlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpAQCAtMTk3OSwx
NCArMTk3OSwxNCBAQCB0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYgogICAgIGlmICghUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVuYWJsZWQoKSkgewog
ICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0
YXRpYyIpLCBzdHJsZW4oImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWMiKSk7CiAgICAg
ICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3Bl
cnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKLSAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdC5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCAmZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCiAgICAg
aWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJl
RW5hYmxlZCgpKSB7CiAgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkQXRSdW50
aW1lT3BlcmF0aW9uU3RhdGljIiksIHN0cmxlbigiZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvblN0
YXRpYyIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwotICAgICAgICBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0Lmdsb2JhbEV4ZWMoKSwgcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsICZnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0yMzQxLDg0ICsy
MzQxLDg0IEBAIHZvaWQgSlNUZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwogICAgICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbiIpLCBzdHJsZW4o
ImVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmln
dXJhYmxlKTsKLSAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9
CiAjZW5kaWYKICAgICBpZiAoISh3b3JsZEZvckRPTU9iamVjdCgqdGhpcykuc29tZVdvcmxkKCkg
JiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS50ZXN0RmVhdHVyZUVu
YWJsZWQoKSkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7
CiAgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJlbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hl
blJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpLCBzdHJsZW4oImVuYWJsZWRJblNwZWNpZmljV29ybGRX
aGVuUnVudGltZUZlYXR1cmVFbmFibGVkIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlN
b2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3Vy
YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQog
ICAgIGlmICghd29ybGRGb3JET01PYmplY3QoKnRoaXMpLnNvbWVXb3JsZCgpKSB7CiAgICAgICAg
IGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwogICAgICAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigid29ybGRTcGVjaWZpY01ldGhvZCIpLCBzdHJsZW4oIndvcmxkU3BlY2lmaWNN
ZXRob2QiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwg
Vk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKLSAgICAgICAgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCks
IHByb3BlcnR5TmFtZSk7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBn
bG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYgKCFqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNTZWN1cmVDb250ZXh0KCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVy
dGllcyA9IHRydWU7CiAgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjYWxjdWxhdGVTZWNy
ZXRSZXN1bHQiKSwgc3RybGVuKCJjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKSk7CiAgICAgICAgIFZN
OjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9k
ZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKLSAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVy
dHlOYW1lKTsKICAgICB9CiAgICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNTZWN1cmVDb250ZXh0KCkp
IHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7CiAgICAgICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJnZXRTZWNyZXRCb29sZWFuIiksIHN0cmxlbigiZ2V0U2Vj
cmV0Qm9vbGVhbiIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3Bl
KHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwotICAgICAg
ICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICNpZiBFTkFCTEUoVEVT
VF9GRUFUVVJFKQogICAgIGlmICghKGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1NlY3VyZUNvbnRleHQoKSAmJiBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxl
ZCgpKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKICAg
ICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIp
LCBzdHJsZW4oInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpKTsKICAgICAgICAgVk06OkRl
bGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJ
Z25vcmVDb25maWd1cmFibGUpOwotICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhp
cywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5h
bWUpOwogICAgIH0KICNlbmRpZgogICAgIGlmICghanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkg
ewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKICAgICAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlv
biIpLCBzdHJsZW4oImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlvbiIpKTsKICAg
ICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJv
cGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwotICAgICAgICBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgp
LCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAgICBpZiAoIWpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc1dvcmtlckds
b2JhbFNjb3BlKCkpIHsKICAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRy
dWU7CiAgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbGx5RXhwb3NlZFRv
V29ya2VyRnVuY3Rpb24iKSwgc3RybGVuKCJjb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVu
Y3Rpb24iKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwg
Vk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKLSAgICAgICAgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCks
IHByb3BlcnR5TmFtZSk7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBn
bG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAgICAgaWYgKCEoanNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzU2VjdXJlQ29udGV4dCgpfHwganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFsbG93c01lZGlhRGV2aWNlcygp
KSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKICAgICAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIm1lZGlhRGV2aWNlcyIpLCBzdHJsZW4oIm1lZGlhRGV2
aWNlcyIpKTsKICAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwotICAgICAgICBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwg
cHJvcGVydHlOYW1lKTsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGds
b2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUpOwogICAgIH0KICAgICBpZiAoIShqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNTZWN1cmVDb250ZXh0KCl8fCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aGFzU2VydmljZVdvcmtlclNjaGVt
ZSgpKSkgewogICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKICAg
ICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInNlcnZpY2VXb3JrZXJzIiksIHN0cmxlbigic2Vy
dmljZVdvcmtlcnMiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29w
ZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKLSAgICAg
ICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0
aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAjaWYgRU5BQkxFKFRF
U1RfRkVBVFVSRSkKICAgICBpZiAoIShSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLnRlc3RGZWF0dXJlRW5hYmxlZCgpICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmUxRW5hYmxlZCgpKSkgewogICAgICAgICBoYXNEaXNh
YmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKICAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKSwgc3RybGVuKCJlbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlIikpOwogICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUo
dm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7Ci0gICAgICAg
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhp
cywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYg
KCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIGhhc0Rpc2FibGVkUnVudGlt
ZVByb3BlcnRpZXMgPSB0cnVlOwogICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiY29uZGl0
aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSIpLCBzdHJsZW4oImNvbmRpdGlvbmFsbHlF
eHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKSk7CiAgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1v
ZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJh
YmxlKTsKLSAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIEpTT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lKTsKICAgICB9CiAg
ICAgaWYgKCFqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3JrZXJHbG9iYWxTY29wZSgpKSB7CiAgICAgICAgIGhh
c0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOwogICAgICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSIpLCBzdHJsZW4o
ImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUiKSk7CiAgICAgICAgIFZNOjpE
ZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6
SWdub3JlQ29uZmlndXJhYmxlKTsKLSAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHByb3BlcnR5TmFtZSk7CisgICAgICAg
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlO
YW1lKTsKICAgICB9CiAgICAgaWYgKGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgJiYgc3Ry
dWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQogICAgICAgICBmbGF0dGVuRGljdGlvbmFyeU9iamVj
dCh2bSk7CkBAIC0yNDI2LDcgKzI0MjYsNyBAQCB2b2lkIEpTVGVzdE9ialByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHB1dERpcmVjdCh2bSwgc3RhdGljX2Nhc3Q8SlNWTUNs
aWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkucHVibGljQW5kUHJpdmF0
ZU1ldGhvZFByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
KCksIDAsIFN0cmluZygpLCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZh
dGVNZXRob2QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b3R5cGUoKS0+Z2V0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQcml2YXRl
TmFtZSgpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSk7CiAgICAgYWRkVmFsdWVJdGVyYWJsZU1ldGhvZHMoKmdsb2JhbE9iamVjdCgpLCAq
dGhpcyk7Ci0gICAgSlNPYmplY3QmIHVuc2NvcGFibGVzID0gKmNvbnN0cnVjdEVtcHR5T2JqZWN0
KGdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iamVjdCgpLT5udWxsUHJvdG90
eXBlT2JqZWN0U3RydWN0dXJlKCkpOworICAgIEpTT2JqZWN0JiB1bnNjb3BhYmxlcyA9ICpjb25z
dHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QoKS0+dm0oKSwgZ2xvYmFsT2JqZWN0KCktPm51
bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgdW5zY29wYWJsZXMucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidm9pZE1ldGhvZCIpLCBqc0Jvb2xlYW4o
dHJ1ZSkpOwogICAgIHVuc2NvcGFibGVzLnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgInNob3J0QXR0ciIpLCBqc0Jvb2xlYW4odHJ1ZSkpOwogICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT51bnNjb3BhYmxlc1N5bWJvbCwg
JnVuc2NvcGFibGVzLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKQEAgLTI0NjksOTkgKzI0NjksOTkgQEAgdm9pZCBK
U1Rlc3RPYmo6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNU
ZXN0T2JqOjp+SlNUZXN0T2JqKCk7CiB9CiAKLWJvb2wgSlNUZXN0T2JqOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RPYmo6OmdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4ob2JqZWN0KTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgaWYg
KGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgaWYgKGlu
ZGV4LnZhbHVlKCkgPCB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpzdGF0ZSwg
dGhpc09iamVjdC0+d3JhcHBlZCgpLm51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZChpbmRleC52
YWx1ZSgpKSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExOdWxsYWJsZTxJRExE
T01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLm51
bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZChpbmRleC52YWx1ZSgpKSk7CiAgICAgICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRl
eCwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBpZiAoTElLRUxZKGluZGV4
IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKICAgICAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+
d3JhcHBlZCgpLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExO
dWxsYWJsZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5udWxs
YWJsZVN0cmluZ1NwZWNpYWxNZXRob2QoaW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUg
PSB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0LT53cmFwcGVkKCkubnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKGluZGV4KSk7
CiAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSksIHZhbHVlKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cisg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE9iajo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihvYmplY3QpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMob2JqZWN0LCBpbmZvKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsr
aSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwot
ICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUgY2FsbEpTVGVzdE9iajEoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
Y2FsbEpTVGVzdE9iajEoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHN0YXRlLT5qc0Nh
bGxlZSgpKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGNhbGxG
cmFtZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBwYXJhbSA9IGNvbnZlcnQ8SURM
TG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gcGFy
YW0gPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubGVnYWN5Q2FsbGVyTmFtZWQoV1RGTW92ZShw
YXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY2FsbEpTVGVzdE9iajIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUgY2FsbEpTVGVzdE9iajIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHN0
YXRlLT5qc0NhbGxlZSgpKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9i
aio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBwYXJhbSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgYXV0byBwYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMTG9uZz4oaW1wbC5sZWdhY3lDYWxsZXJPcGVyYXRpb25Gcm9tQmlu
ZGluZ3MoV1RGTW92ZShwYXJhbSkpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgY2FsbEpTVGVzdE9iajMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY2FsbEpTVGVzdE9iajMoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKKyAgICBhdXRv
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7
CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgaW1wbC5sZWdhY3lDYWxsZXJPcGVyYXRpb25Gcm9tQmluZGluZ3MoKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1Rlc3RPYmooSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEpTVGVzdE9iaihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIHN0YXRlLT5hcmd1
bWVudENvdW50KCkpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEs
IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDApIHsK
LSAgICAgICAgcmV0dXJuIGNhbGxKU1Rlc3RPYmozKGdsb2JhbE9iamVjdCwgc3RhdGUpOworICAg
ICAgICByZXR1cm4gY2FsbEpTVGVzdE9iajMobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
KTsKICAgICB9CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7Ci0gICAgICAgIEpTVmFsdWUgZGlz
dGluZ3Vpc2hpbmdBcmcgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgICAgIEpT
VmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IHJldHVybiBjYWxsSlNUZXN0T2JqMShnbG9iYWxPYmplY3QsIHN0YXRlKTsKLSAgICAgICAgcmV0
dXJuIGNhbGxKU1Rlc3RPYmoyKGdsb2JhbE9iamVjdCwgc3RhdGUpOworICAgICAgICAgICAgcmV0
dXJuIGNhbGxKU1Rlc3RPYmoxKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7CisgICAg
ICAgIHJldHVybiBjYWxsSlNUZXN0T2JqMihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUp
OwogICAgIH0KLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSk7CiB9CiAKIENhbGxUeXBlIEpTVGVzdE9iajo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2Fs
bERhdGEmIGNhbGxEYXRhKQpAQCAtMjU3MCwyOTQxICsyNTcwLDI5NDIgQEAgQ2FsbFR5cGUgSlNU
ZXN0T2JqOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCiAgICAgcmV0
dXJuIENhbGxUeXBlOjpIb3N0OwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RPYmoqIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE9iaiogSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihzdGF0ZS52bSgpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0T2JqKiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FzdChFeGVjU3RhdGUmIHN0
YXRlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0T2JqKiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBj
YWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oc3RhdGUu
dm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1Zh
bHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqUHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmo6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkp
KTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmpQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgogICAgIHJldHVybiBwcm90b3R5cGUtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJl
YWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25n
PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5yZWFkT25seUxvbmdBdHRyKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLnJlYWRPbmx5TG9uZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAicmVhZE9ubHlMb25nQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6Z2V0PGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJyZWFkT25s
eUxvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25s
eVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0
cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwucmVhZE9ubHlTdHJpbmdBdHRyKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwucmVhZE9ubHlTdHJpbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
UmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpOworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsICp0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJlYWRPbmx5VGVzdE9iakF0dHIo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwucmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVhZE9ubHlU
ZXN0T2JqQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRl
LCB0aGlzVmFsdWUsICJyZWFkT25seVRlc3RPYmpBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgInJlYWRPbmx5VGVzdE9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oc3RhdGUsIHRocm93U2NvcGUs
IFRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBUZXN0T2JqOjpzdGF0aWNSZWFkT25seUxv
bmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXRTdGF0aWM8anNU
ZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgInN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OmdldFN0YXRpYzxqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRP
bmx5TG9uZ0F0dHJHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzdGF0
aWNSZWFkT25seUxvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIFRlc3RPYmo6OnN0YXRpY1N0
cmluZ0F0dHIoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIFRlc3RPYmo6OnN0YXRpY1N0cmluZ0F0dHIoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJp
bmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdB
dHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dE9iaj46OmdldFN0YXRpYzxqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3RhdGljU3RyaW5nQXR0ciIpOworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0U3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9yU3Rh
dGljU3RyaW5nQXR0ckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInN0
YXRpY1N0cmluZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNv
bnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwot
ICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBB
dHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZd
IHsKICAgICAgICAgcmV0dXJuIFRlc3RPYmo6OnNldFN0YXRpY1N0cmluZ0F0dHIoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpT
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldFN0YXRpYzxzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJTZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdGF0aWNTdHJpbmdBdHRyIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXRTdGF0aWM8c2V0SlNUZXN0T2Jq
Q29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdGF0aWNTdHJpbmdBdHRyIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0
dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldFN0YXRpYzxqc1Rlc3RPYmpDb25z
dHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiVGVzdFN1Yk9iaiIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0U3RhdGljPGpzVGVzdE9i
akNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgIlRlc3RTdWJPYmoiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbnN0cnVjdG9yVGVzdFN0YXRpY1JlYWRvbmx5T2JqR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JUZXN0U3RhdGljUmVhZG9ubHlPYmpHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwogICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSksIHRocm93U2NvcGUsIFRlc3RPYmo6
OnRlc3RTdGF0aWNSZWFkb25seU9iaihkb2N1bWVudCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsICpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRocm93U2NvcGUsIFRl
c3RPYmo6OnRlc3RTdGF0aWNSZWFkb25seU9iaihkb2N1bWVudCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN0YXRpY1Jl
YWRvbmx5T2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3RhdGlj
UmVhZG9ubHlPYmooSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6Z2V0U3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN0YXRpY1Jl
YWRvbmx5T2JqR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RTdGF0aWNSZWFkb25seU9i
aiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0U3RhdGljPGpzVGVz
dE9iakNvbnN0cnVjdG9yVGVzdFN0YXRpY1JlYWRvbmx5T2JqR2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAidGVzdFN0YXRpY1JlYWRvbmx5T2JqIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KHN0YXRlLCB0aHJvd1Njb3Bl
LCBpbXBsLmVudW1BdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExFbnVtZXJh
dGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZW51bUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqRW51bUF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpB
c3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZW51bUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpFbnVtQXR0ckdldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ImVudW1BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0
clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqRW51bUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gb3B0aW9uYWxOYXRpdmVW
YWx1ZSA9IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCB2YWx1ZSk7
CisgICAgYXV0byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2Jq
OjpFbnVtVHlwZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxO
YXRpdmVWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gb3B0aW9uYWxOYXRpdmVWYWx1ZS52YWx1ZSgpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2Fs
bChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwu
c2V0RW51bUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
RW51bUF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbnVtQXR0
ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9i
akVudW1BdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJlbnVtQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Qnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakJ5
dGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQnl0ZT4oc3RhdGUsIHRocm93
U2NvcGUsIGltcGwuYnl0ZUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEJ5
dGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYnl0ZUF0dHIoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQnl0ZUF0
dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAiYnl0ZUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46Omdl
dDxqc1Rlc3RPYmpCeXRlQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImJ5dGVBdHRyIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0clNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHJTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEJ5dGU+KHN0YXRl
LCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQnl0ZT4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwg
WyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0Qnl0ZUF0dHIoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpT
VGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQnl0ZUF0dHJTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJieXRlQXR0ciIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakJ5dGVBdHRyU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJieXRlQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExPY3RldD4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwub2N0ZXRB
dHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExPY3RldD4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5vY3RldEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqT2N0ZXRBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAib2N0ZXRB
dHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
T2N0ZXRBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAib2N0ZXRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9jdGV0QXR0clNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMT2N0ZXQ+KHN0YXRlLCB2YWx1
ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMT2N0ZXQ+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7
CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldE9jdGV0QXR0cihXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0
T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iak9jdGV0QXR0clNldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm9jdGV0QXR0ciIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iak9jdGV0QXR0clNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib2N0ZXRBdHRyIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETFNob3J0PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5zaG9y
dEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFNob3J0PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNob3J0QXR0cigpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialNob3J0QXR0ckdldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJzaG9y
dEF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RP
YmpTaG9ydEF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJzaG9ydEF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialNob3J0QXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTaG9ydD4oc3RhdGUsIHZh
bHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTaG9ydD4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZd
IHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0U2hvcnRBdHRyKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rl
c3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialNob3J0QXR0
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqU2hvcnRBdHRyU2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2hvcnRBdHRyIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqU2hvcnRBdHRyU2V0dGVyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzaG9ydEF0dHIi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9y
dEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExDbGFtcEFkYXB0b3I8SURMU2hv
cnQ+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5jbGFtcGVkU2hvcnRBdHRyKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExDbGFtcEFkYXB0b3I8SURMU2hvcnQ+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmNsYW1wZWRTaG9ydEF0dHIoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVz
dE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY2xhbXBlZFNob3J0QXR0ciIpOworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0
ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJjbGFtcGVkU2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFkYXB0
b3I8SURMU2hvcnQ+PihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETENsYW1wQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAg
ICAgIHJldHVybiBpbXBsLnNldENsYW1wZWRTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9iakNsYW1w
ZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9y
dEF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJT
ZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjbGFtcGVkU2hvcnRBdHRy
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
Q2xhbXBlZFNob3J0QXR0clNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiY2xhbXBlZFNob3J0QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElETFNob3J0Pj4oc3Rh
dGUsIHRocm93U2NvcGUsIGltcGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRyKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElETFNob3J0Pj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmZvcmNlUmFuZ2VTaG9ydEF0dHIoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5mb3Jj
ZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hv
cnRBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdE9iaj46OmdldDxqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZW5mb3JjZVJh
bmdlU2hvcnRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8
anNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZW5mb3JjZVJh
bmdlU2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmZv
cmNlUmFuZ2VTaG9ydEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0clNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRW5mb3JjZVJhbmdlQWRhcHRv
cjxJRExTaG9ydD4+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMRW5mb3JjZVJhbmdlQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAg
ICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0
cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7
CiAgICAgICAgIHJldHVybiBpbXBsLnNldEVuZm9yY2VSYW5nZVNob3J0QXR0cihXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNU
ZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVz
dE9iakVuZm9yY2VSYW5nZVNob3J0QXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgImVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0clNldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5mb3Jj
ZVJhbmdlU2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpV
bnNpZ25lZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExV
bnNpZ25lZFNob3J0PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZFNob3J0QXR0cigp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5zaWduZWRTaG9ydD4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZFNob3J0QXR0cigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bnNpZ25lZFNob3J0QXR0ciIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialVuc2lnbmVkU2hvcnRB
dHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0
QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
VW5zaWduZWRTaG9ydD4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVbnNpZ25lZFNob3J0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0
dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1
cm4gaW1wbC5zZXRVbnNpZ25lZFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
fSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9y
dEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRy
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0clNldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVuc2lnbmVkU2hvcnRBdHRyIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVW5z
aWduZWRTaG9ydEF0dHJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgInVuc2lnbmVkU2hvcnRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25n
PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5s
b25nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpMb25nQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KnN0YXRlLCB0aGlzVmFsdWUsICJsb25nQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAibG9uZ0F0
dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpM
b25nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRl
LCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRMb25n
QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdE9iakxvbmdBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpMb25nQXR0
clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImxvbmdBdHRyIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqTG9uZ0F0
dHJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
ImxvbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9u
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxvbmdM
b25nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmdMb25nPihzdGF0ZSwg
dGhyb3dTY29wZSwgaW1wbC5sb25nTG9uZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxv
bmdMb25nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0
dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJsb25nTG9uZ0F0dHIiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpMb25nTG9uZ0F0dHJH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJsb25nTG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iakxvbmdMb25nQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nTG9uZz4oc3RhdGUsIHZh
bHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nTG9uZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwg
WyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0TG9uZ0xvbmdBdHRyKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9i
akxvbmdMb25nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqTG9uZ0xvbmdB
dHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibG9uZ0xvbmdBdHRy
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
TG9uZ0xvbmdBdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJsb25nTG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnVu
c2lnbmVkTG9uZ0xvbmdBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVbnNp
Z25lZExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2ln
bmVkTG9uZ0xvbmdBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdB
dHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNW
YWx1ZSwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25l
ZExvbmdMb25nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0
ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpj
YWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVy
biBpbXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExv
bmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25n
TG9uZ0F0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xv
bmdBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidW5zaWduZWRM
b25nTG9uZ0F0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxz
ZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0clNldHRlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnN0
cmluZ0F0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdBdHRyKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpTdHJpbmdB
dHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNW
YWx1ZSwgInN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OmdldDxqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2Fs
bChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwu
c2V0U3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNU
ZXN0T2JqU3RyaW5nQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
InN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxz
ZXRKU1Rlc3RPYmpTdHJpbmdBdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMVVNWU3RyaW5nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC51c3ZzdHJpbmdBdHRyKCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwudXN2c3RyaW5nQXR0cigpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqVXN2c3RyaW5n
QXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlz
VmFsdWUsICJ1c3ZzdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RP
Ymo+OjpnZXQ8anNUZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInVzdnN0cmlu
Z0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0
dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialVzdnN0cmluZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAg
ICAgIHJldHVybiBpbXBsLnNldFVzdnN0cmluZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9ialVzdnN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHIoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdBdHRyIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clNl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidXN2
c3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdE9i
akF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RP
YmpBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+
PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudGVz
dE9iakF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0
T2JqPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwudGVzdE9iakF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpUZXN0T2JqQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidGVzdE9iakF0
dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpU
ZXN0T2JqQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInRlc3RPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHJTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxU
ZXN0T2JqPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAi
VGVzdE9iamVjdCIsICJ0ZXN0T2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3RPYmpBdHRyIiwgIlRlc3RP
YmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0g
ICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
ewogICAgICAgICByZXR1cm4gaW1wbC5zZXRUZXN0T2JqQXR0cigqbmF0aXZlVmFsdWUpOwogICAg
IH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVGVzdE9iakF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0T2JqQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialRlc3RPYmpBdHRyU2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0T2JqQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxl
T2JqQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETEludGVy
ZmFjZTxUZXN0T2JqPj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dT
Y29wZSwgaW1wbC50ZXN0TnVsbGFibGVPYmpBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0TnVs
bGFibGVPYmpBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpU
ZXN0TnVsbGFibGVPYmpBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwg
InRlc3ROdWxsYWJsZU9iakF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OmdldDxqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidGVz
dE51bGxhYmxlT2JqQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
VGVzdE51bGxhYmxlT2JqQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0clNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJm
YWNlPFRlc3RPYmo+Pj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCAiVGVzdE9iamVjdCIsICJ0ZXN0TnVsbGFibGVPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNl
PFRlc3RPYmo+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2Jq
ZWN0IiwgInRlc3ROdWxsYWJsZU9iakF0dHIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNh
bGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBs
LnNldFRlc3ROdWxsYWJsZU9iakF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJTZXR0
ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZXN0TnVsbGFibGVPYmpBdHRy
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
VGVzdE51bGxhYmxlT2JqQXR0clNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAidGVzdE51bGxhYmxlT2JqQXR0ciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0YXRlLCAqdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5sZW5pZW50VGVzdE9iakF0dHIo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwubGVuaWVudFRlc3RPYmpBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTGVuaWVudFRlc3RP
YmpBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0dXJuRWFybHk+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCAibGVuaWVudFRlc3RPYmpBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmV0dXJuRWFybHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJsZW5pZW50VGVzdE9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRy
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRl
cmZhY2U8VGVzdE9iaj4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSwgIlRlc3RPYmplY3QiLCAibGVuaWVudFRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAibGVuaWVu
dFRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJv
d1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRMZW5pZW50VGVz
dE9iakF0dHIoKm5hdGl2ZVZhbHVlKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0
SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyU2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6UmV0dXJuRWFybHk+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJsZW5pZW50
VGVzdE9iakF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxz
ZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJTZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yOjpSZXR1cm5FYXJseT4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAibGVuaWVudFRlc3RPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwudW5mb3JnZWFibGVBdHRy
KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5mb3JnZWFibGVBdHRyKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
VW5mb3JnZWFibGVBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigq
c3RhdGUsIHRoaXNWYWx1ZSwgInVuZm9yZ2VhYmxlQXR0ciIpOworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNW
YWx1ZSwgInVuZm9yZ2VhYmxlQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVHJlYXROdWxsQXNFbXB0
eUFkYXB0b3I8SURMRE9NU3RyaW5nPj4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuc3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuc3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmcoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nQXR0clRyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmciKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OmdldDxqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgInN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1w
dHlBZGFwdG9yPElETERPTVN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURMRE9NU3RyaW5nPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dT
Y29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0U3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0
SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpT
VGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nU2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJzdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVHJlYXROdWxsQXNF
bXB0eUFkYXB0b3I8SURMVVNWU3RyaW5nPj4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwudXN2c3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETFVTVlN0cmluZz4+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0
ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAi
dXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZ0dldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpV
c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETFVTVlN0cmluZz4+
KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVHJlYXRO
dWxsQXNFbXB0eUFkYXB0b3I8SURMVVNWU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1
dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAg
ICAgICAgcmV0dXJuIGltcGwuc2V0VXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmcoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVXN2c3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialVz
dnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nU2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Qnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmdHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExUcmVhdE51bGxBc0Vt
cHR5QWRhcHRvcjxJRExCeXRlU3RyaW5nPj4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYnl0ZVN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExCeXRlU3RyaW5nPj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ieXRlU3RyaW5nQXR0clRyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmcoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dE9iaj46OmdldDxqc1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmdHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAiYnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiYnl0ZVN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpCeXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVT
dHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURM
Qnl0ZVN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURMQnl0ZVN0cmluZz4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7
CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpCeXRlU3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNl
dEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcj4o
KnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
c2V0PHNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ1Nl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYnl0
ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4o
c3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmlu
Z0xvbmdSZWNvcmRBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExSZWNvcmQ8
SURMRE9NU3RyaW5nLCBJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nTG9uZ1JlY29yZEF0dHIoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5n
TG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdMb25nUmVjb3Jk
QXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIsIENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nTG9uZ1Jl
Y29yZEF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rl
c3RPYmpTdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInN0cmluZ0xvbmdSZWNv
cmRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdMb25n
UmVjb3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExET01TdHJpbmcsIElETExv
bmc+PihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJl
Y29yZDxJRExET01TdHJpbmcsIElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNl
dHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAg
ICByZXR1cm4gaW1wbC5zZXRTdHJpbmdMb25nUmVjb3JkQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialN0cmlu
Z0xvbmdSZWNvcmRBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpTdHJpbmdM
b25nUmVjb3JkQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0
cmluZ0xvbmdSZWNvcmRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpzZXQ8c2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ0xvbmdSZWNvcmRBdHRy
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVj
b3JkQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2
c3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExSZWNv
cmQ8SURMVVNWU3RyaW5nLCBJRExMb25nPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpLCB0aHJvd1Njb3BlLCBpbXBsLnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExSZWNvcmQ8SURMVVNWU3RyaW5nLCBJRExMb25nPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwudXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0
T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpVc3ZzdHJp
bmdMb25nUmVjb3JkQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRy
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVj
b3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExVU1ZTdHJpbmcsIElETExv
bmc+PihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFJl
Y29yZDxJRExVU1ZTdHJpbmcsIElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNl
dHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAg
ICByZXR1cm4gaW1wbC5zZXRVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2Jq
VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9i
alVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RP
YmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgInVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJT
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInVz
dnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+KHN0YXRlLCAq
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC51c3ZzdHJpbmdMb25n
UmVjb3JkQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUmVjb3JkPElETEJ5
dGVTdHJpbmcsIElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC51c3ZzdHJpbmdMb25nUmVjb3JkQXR0cigpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJp
bmdMb25nUmVjb3JkQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0xvbmdS
ZWNvcmRBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ckdldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1c3Zz
dHJpbmdMb25nUmVjb3JkQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6Z2V0PGpzVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAi
dXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVj
b3JkPElETEJ5dGVTdHJpbmcsIElETExvbmc+PihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFJlY29yZDxJRExCeXRlU3RyaW5nLCBJRExMb25nPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29w
ZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0VXN2c3RyaW5nTG9uZ1Jl
Y29yZEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0cihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXI+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVjb3JkQXR0
ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9i
alVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ1c3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElE
TEludGVyZmFjZTxUZXN0T2JqPj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC5zdHJpbmdPYmpSZWNvcmRBdHRyKCkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExJbnRlcmZhY2U8VGVzdE9iaj4+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dT
Y29wZSwgaW1wbC5zdHJpbmdPYmpSZWNvcmRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpTdHJp
bmdPYmpSZWNvcmRBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigq
c3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ09ialJlY29yZEF0dHIiKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAic3RyaW5nT2JqUmVjb3JkQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0
YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nT2JqUmVjb3Jk
QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
UmVjb3JkPElETERPTVN0cmluZywgSURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oc3RhdGUsIHZhbHVl
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNvcmQ8SURMRE9NU3RyaW5n
LCBJRExJbnRlcmZhY2U8VGVzdE9iaj4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRl
cjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICBy
ZXR1cm4gaW1wbC5zZXRTdHJpbmdPYmpSZWNvcmRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdP
YmpSZWNvcmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpS
ZWNvcmRBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNv
cmRBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5nT2Jq
UmVjb3JkQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNl
dEpTVGVzdE9ialN0cmluZ09ialJlY29yZEF0dHJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmluZ09ialJlY29yZEF0dHIiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0
ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVs
bGFibGVPYmpSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUmVjb3Jk
PElETERPTVN0cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4+KHN0YXRl
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdOdWxs
YWJsZU9ialJlY29yZEF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFJlY29y
ZDxJRExET01TdHJpbmcsIElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5zdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OmdldDxqc1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJHZXR0ZXIsIENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5nTnVsbGFi
bGVPYmpSZWNvcmRBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyR2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAi
c3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxl
T2JqUmVjb3JkQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRl
c3RPYmo+Pj4+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+
Pj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRo
cm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldFN0cmluZ051
bGxhYmxlT2JqUmVjb3JkQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNv
cmRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdOdWxsYWJsZU9i
alJlY29yZEF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialN0cmluZ051bGxh
YmxlT2JqUmVjb3JkQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
InN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0clNl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3Ry
aW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMQ2Fs
bGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz4+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0cigp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURM
Q2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdWb2lkQ2Fs
bGJhY2tSZWNvcmRBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpT
dHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0
dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpT
dHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic3RyaW5nVm9pZENh
bGxiYWNrUmVjb3JkQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
U3RyaW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nVm9pZENhbGxiYWNrUmVjb3Jk
QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
UmVjb3JkPElETERPTVN0cmluZywgSURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz4+
PihzdGF0ZSwgdmFsdWUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExDYWxsYmFja0Z1
bmN0aW9uPEpTVm9pZENhbGxiYWNrPj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3Bl
LCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRTdHJpbmdWb2lkQ2FsbGJh
Y2tSZWNvcmRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJhY2tSZWNv
cmRBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJh
Y2tSZWNvcmRBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3Ry
aW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0dHJTZXR0
ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmlu
Z1ZvaWRDYWxsYmFja1JlY29yZEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakRpY3Rpb25hcnlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpEaWN0aW9uYXJ5QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5kaWN0aW9uYXJ5QXR0cigpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwuZGljdGlvbmFyeUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpEaWN0aW9uYXJ5QXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqRGljdGlvbmFyeUF0dHJHZXR0ZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZGljdGlv
bmFyeUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rl
c3RPYmpEaWN0aW9uYXJ5QXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImRpY3Rpb25hcnlBdHRyIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0clNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRGlj
dGlvbmFyeUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0
aW9uYXJ5Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0
ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0RGlj
dGlvbmFyeUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8
c2V0SlNUZXN0T2JqRGljdGlvbmFyeUF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJkaWN0aW9uYXJ5QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakRpY3Rpb25hcnlBdHRyU2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJkaWN0aW9uYXJ5QXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0
ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVE
aWN0aW9uYXJ5QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElE
TERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xv
YmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVEaWN0aW9uYXJ5QXR0cigpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMRGljdGlvbmFyeTxUZXN0
T2JqOjpEaWN0aW9uYXJ5Pj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlRGljdGlvbmFyeUF0dHIoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVE
aWN0aW9uYXJ5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFy
eUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6Z2V0PGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJHZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVE
aWN0aW9uYXJ5QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0
PGpzVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJudWxsYWJs
ZURpY3Rpb25hcnlBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpO
dWxsYWJsZURpY3Rpb25hcnlBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExE
aWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+Pj4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExEaWN0aW9uYXJ5PFRlc3RPYmo6
OkRpY3Rpb25hcnk+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2Fs
bChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwu
c2V0TnVsbGFibGVEaWN0aW9uYXJ5QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9u
YXJ5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9u
YXJ5QXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9u
YXJ5QXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm51bGxhYmxl
RGljdGlvbmFyeUF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNl
dDxzZXRKU1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyU2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZURpY3Rpb25hcnlBdHRy
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5V
bmlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFu
bm90YXRlZFR5cGVJblVuaW9uQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVu
aW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmFubm90YXRlZFR5cGVJblVu
aW9uQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5pb248SURMRE9NU3Ry
aW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5hbm5vdGF0ZWRUeXBlSW5V
bmlvbkF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
QW5ub3RhdGVkVHlwZUluVW5pb25BdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5V
bmlvbkF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAiYW5ub3RhdGVkVHlwZUluVW5pb25BdHRyIik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRy
R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCAiYW5ub3RhdGVkVHlwZUluVW5pb25BdHRyIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHJTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFu
bm90YXRlZFR5cGVJblVuaW9uQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURM
TG9uZz4+PihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFVuaW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZd
IHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0QW5ub3RhdGVkVHlwZUluVW5pb25B
dHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE9iakFubm90YXRlZFR5cGVJblVuaW9uQXR0cihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRyU2V0dGVyPigq
c3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYW5ub3RhdGVkVHlwZUluVW5pb25BdHRy
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
QW5ub3RhdGVkVHlwZUluVW5pb25BdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0
ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW5ub3RhdGVk
VHlwZUluU2VxdWVuY2VBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMU2VxdWVu
Y2U8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0cigpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMU2VxdWVuY2U8SURMQ2xhbXBBZGFwdG9yPElE
TExvbmc+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIGltcGwuYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRlZFR5cGVJ
blNlcXVlbmNlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFubm90YXRlZFR5cGVJblNl
cXVlbmNlQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwg
ImFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0ckdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgImFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0ciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpB
bm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExMb25nPj4+
KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVu
Y2U8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJp
YnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAg
ICAgcmV0dXJuIGltcGwuc2V0QW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rl
c3RPYmpBbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0cihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpz
ZXQ8c2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyIik7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQW5u
b3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHIiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0
aW9uRW51bUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExFbnVtZXJhdGlvbjxB
bHRlcm5hdGVFbnVtTmFtZT4+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmltcGxlbWVudGF0aW9u
RW51bUF0dHIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEVudW1lcmF0aW9uPEFs
dGVybmF0ZUVudW1OYW1lPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5p
bXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpJbXBsZW1l
bnRhdGlvbkVudW1BdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigq
c3RhdGUsIHRoaXNWYWx1ZSwgImltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1B
dHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAiaW1wbGVtZW50YXRpb25FbnVtQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0clNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1w
bGVtZW50YXRpb25FbnVtQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBvcHRpb25hbE5h
dGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxBbHRlcm5hdGVFbnVtTmFtZT4oc3RhdGUsIHZh
bHVlKTsKKyAgICBhdXRvIG9wdGlvbmFsTmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPEFs
dGVybmF0ZUVudW1OYW1lPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaWYgKFVOTElLRUxZKCFvcHRp
b25hbE5hdGl2ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBvcHRpb25hbE5hdGl2ZVZhbHVlLnZhbHVlKCk7Ci0gICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2Fs
bChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4g
aW1wbC5zZXRJbXBsZW1lbnRhdGlvbkVudW1BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRh
dGlvbkVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRh
dGlvbkVudW1BdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpJbXBsZW1lbnRh
dGlvbkVudW1BdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW1w
bGVtZW50YXRpb25FbnVtQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6c2V0PHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImltcGxlbWVudGF0aW9uRW51
bUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak1lZGlhRGV2aWNl
c0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTWVkaWFEZXZp
Y2VzR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPE1lZGlhRGV2aWNl
cz4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5t
ZWRpYURldmljZXMoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxN
ZWRpYURldmljZXM+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZWRpYURldmljZXMoKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTWVkaWFEZXZpY2VzKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqTWVkaWFEZXZpY2VzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpNZWRpYURldmljZXNH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAibWVkaWFEZXZpY2VzIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqTWVkaWFEZXZpY2VzR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAibWVkaWFEZXZpY2VzIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTZXJ2aWNlV29ya2Vyc0dldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU2VydmljZVdvcmtlcnNH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8U2VydmljZVdvcmtlcj4+
KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXJ2
aWNlV29ya2VycygpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFNl
cnZpY2VXb3JrZXI+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXJ2aWNlV29ya2VycygpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTZXJ2aWNlV29ya2VycyhFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialNlcnZpY2VXb3JrZXJzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpTZXJ2aWNl
V29ya2Vyc0dldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0
aGlzVmFsdWUsICJzZXJ2aWNlV29ya2VycyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialNlcnZpY2VXb3JrZXJzR2V0dGVyLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic2Vy
dmljZVdvcmtlcnMiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialhNTE9i
akF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialhNTE9i
akF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC54bWxP
YmpBdHRyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9i
aj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLnhtbE9iakF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alhNTE9iakF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiWE1MT2JqQXR0ciIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialhNTE9iakF0
dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJYTUxPYmpBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KHN0
YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3Qi
LCAiWE1MT2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUs
IFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIlhNTE9iakF0dHIiLCAiVGVzdE9iaiIpOyB9KTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJl
dHVybiBpbXBsLnNldFhNTE9iakF0dHIoKm5hdGl2ZVZhbHVlKTsKICAgICB9KTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRK
U1Rlc3RPYmpYTUxPYmpBdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAiWE1MT2JqQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0
PHNldEpTVGVzdE9ialhNTE9iakF0dHJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIlhNTE9iakF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNyZWF0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ3JlYXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQm9vbGVh
bj4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuaXNDcmVhdGUoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuaXNDcmVhdGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpDcmVhdGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAiY3JlYXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpnZXQ8anNUZXN0T2JqQ3JlYXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiY3JlYXRlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGVTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNyZWF0ZVNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4o
c3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFu
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJv
d1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRDcmVhdGUoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IHNldEpTVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ3Jl
YXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDcmVhdGVTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjcmVhdGUiKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDcmVhdGVTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNyZWF0ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93
U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkc3RyaW5nYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0
ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFs
dWUsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
InJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3Rh
dGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93
U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdh
dHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6c2V0PHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0clNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETFVTVlN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVz
dnN0cmluZ2F0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVTVlN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0
ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkVVNWU3RyaW5nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJyZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgInJlZmxlY3RlZFVTVlN0cmluZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0
dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVT
VlN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
c3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmlu
Z0F0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmlu
Z0F0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRV
U1ZTdHJpbmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0clNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkVVNWU3RyaW5nQXR0ciIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihzdGF0
ZSwgdGhyb3dTY29wZSwgaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5nZXRJbnRl
Z3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0
dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJ
bnRlZ3JhbEF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWZs
ZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OmdldDxqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJyZWZs
ZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZEludGVncmFsQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwg
dmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsm
XSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJTZXR0ZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3Rl
ZEludGVncmFsQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMVW5zaWduZWRMb25nPihzdGF0ZSwgdGhyb3dTY29wZSwgc3Rk
OjptYXgoMCwgaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMVW5zaWduZWRMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBz
dGQ6Om1heCgwLCBpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKSkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0
dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxl
Y3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0g
eworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRVbnNpZ25lZEludGVncmFsQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRy
LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFs
QXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyYWxBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpzZXQ8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJTZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyYWxBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExCb29sZWFuPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5oYXNBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0
dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEJvb2xlYW4+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0cikpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0
dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEJvb2xl
YW5BdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0
T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpB
c3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRCb29sZWFu
QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9v
bGVhbkF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
LSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAg
QXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsm
XSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
Qm9vbGVhbkF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialJlZmxlY3RlZEJv
b2xlYW5BdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVj
dGVkQm9vbGVhbkF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNl
dDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0clNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJv
d1Njb3BlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZHVybGF0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZWZs
ZWN0ZWRVUkxBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3Rh
dGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkVVJMQXR0clNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0clNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwg
dmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29w
ZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRy
LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNU
ZXN0T2JqUmVmbGVjdGVkVVJMQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRW
YWx1ZSwgInJlZmxlY3RlZFVSTEF0dHIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyU2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRVUkxBdHRyIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRV
U1ZVUkxBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVVNWU3RyaW5nPihzdGF0
ZSwgdGhyb3dTY29wZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWR1c3Z1cmxhdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExV
U1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0VVJMQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRV
U1ZVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZWZsZWN0ZWRVU1ZVUkxBdHRy
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVm
bGVjdGVkVVNWVVJMQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFVTVlVSTEF0dHIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBB
dHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAg
ICAgICAgIHJldHVybiBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3Z1cmxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFVTVlVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVTVlVSTEF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialJlZmxl
Y3RlZFVTVlVSTEF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJy
ZWZsZWN0ZWRVU1ZVUkxBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpzZXQ8c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0clNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkVVNWVVJMQXR0ciIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0
ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
U3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3Rh
dGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpS
ZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKKyAgICByZXR1cm4g
SURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRy
R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0clNldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3Ry
aW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGlt
cGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0
dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRTdHJp
bmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNU
ZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0clNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21JbnRlZ3JhbEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihzdGF0
ZSwgdGhyb3dTY29wZSwgaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdy
YWxBdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxlY3RlZEN1
c3RvbUludGVncmFsQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUludGVncmFs
QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tSW50ZWdyYWxBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2
YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZd
IHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0ciwgV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIi
KTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQm9v
bGVhbj4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cikpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1
c3RvbUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
Qm9vbGVhbkF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwg
InJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJTZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1
dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0
dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAg
IHJldHVybiBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0
b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
Qm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1
c3RvbUJvb2xlYW5BdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0clNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJT
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInJl
ZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5nZXRV
UkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNz
ZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21VUkxBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0clNl
dHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsK
ICAgICAgICAgcmV0dXJuIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJyZWZsZWN0ZWRDdXN0b21VUkxBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0clNl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicmVm
bGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogfQogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihz
dGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpnZXQ8anNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJlbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUo
VEVTVF9GRUFUVVJFKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUs
IHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2Nv
cGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8
c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZSIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JFbmFibGVkQXRSdW50aW1lQXR0cmli
dXRlU3RhdGljR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlU3RhdGljR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBUZXN0T2JqOjplbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlU3RhdGljKCkpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBUZXN0T2JqOjplbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
U3RhdGljKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRp
YyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RP
Ymo+OjpnZXRTdGF0aWM8anNUZXN0T2JqQ29uc3RydWN0b3JFbmFibGVkQXRSdW50aW1lQXR0cmli
dXRlU3RhdGljR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImVuYWJsZWRBdFJ1bnRpbWVBdHRy
aWJ1dGVTdGF0aWMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldFN0
YXRpYzxqc1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWNH
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlU3RhdGljIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVS
RSkKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJsZWRBdFJ1
bnRpbWVBdHRyaWJ1dGVTdGF0aWNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpDb25zdHJ1Y3RvckVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWNTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHZhbHVl
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsm
XSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBUZXN0T2JqOjpzZXRFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlU3RhdGljKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGVTdGF0aWMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakNvbnN0
cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyhKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpz
ZXRTdGF0aWM8c2V0SlNUZXN0T2JqQ29uc3RydWN0b3JFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
U3RhdGljU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZW5hYmxlZEF0
UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6c2V0U3RhdGljPHNldEpTVGVzdE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZVN0YXRpY1NldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpOwogfQogCiAjZW5k
aWYKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEZsb2F0MzJBcnJheT4oc3RhdGUsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnR5cGVkQXJyYXlBdHRyKCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExGbG9hdDMyQXJyYXk+KGxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnR5
cGVkQXJyYXlBdHRyKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVHlwZWRB
cnJheUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInR5cGVkQXJyYXlBdHRy
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqVHlw
ZWRBcnJheUF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ0eXBlZEFycmF5QXR0ciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHJTZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExG
bG9hdDMyQXJyYXk+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgIlRlc3RPYmplY3QiLCAidHlwZWRBcnJheUF0dHIiLCAiRmxvYXQzMkFycmF5Iik7IH0pOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEZsb2F0MzJBcnJheT4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRy
IiwgIkZsb2F0MzJBcnJheSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUs
IFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldFR5cGVkQXJyYXlBdHRyKG5h
dGl2ZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNU
ZXN0T2JqVHlwZWRBcnJheUF0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJ0eXBlZEFycmF5QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6c2V0PHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0eXBlZEFycmF5QXR0ciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LmN1c3RvbUF0dHIoc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4g
dGhpc09iamVjdC5jdXN0b21BdHRyKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3Vz
dG9tQXR0cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJjdXN0b21BdHRyIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ3VzdG9tQXR0ckdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgImN1c3RvbUF0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakN1c3RvbUF0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgdGhpc09iamVjdC5zZXRDdXN0b21BdHRyKHN0YXRlLCB2YWx1ZSk7
CisgICAgdGhpc09iamVjdC5zZXRDdXN0b21BdHRyKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OnNldDxzZXRKU1Rlc3RPYmpDdXN0b21BdHRyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiY3VzdG9tQXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakN1c3RvbUF0dHJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImN1c3RvbUF0dHIiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9uZm9vR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICByZXR1
cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVz
KCkuZm9vRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmplY3QpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvbyhK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqT25mb29HZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAib25mb28iKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpPbmZvb0dldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIm9uZm9vIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvb1NldHRlcihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT25mb29TZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgc2V0RXZlbnRIYW5kbGVyQXR0cmli
dXRlKHN0YXRlLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygp
LmZvb0V2ZW50LCB2YWx1ZSk7CisgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVz
KCkuZm9vRXZlbnQsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rl
c3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqT25mb28oSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iak9uZm9vU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAib25mb28iKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dE9iaj46OnNldDxzZXRKU1Rlc3RPYmpPbmZvb1NldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib25mb28iKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICByZXR1
cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVz
KCkuZm9vRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmplY3QpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqT253ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpP
bndlYmtpdGZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqT253ZWJraXRmb29HZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAib253ZWJraXRmb28iKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpPbndlYmtp
dGZvb0dldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgIm9ud2Via2l0Zm9vIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb1NldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb29TZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKHN0YXRl
LCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50
LCB2YWx1ZSk7CisgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmlidXRlKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZl
bnQsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpPbndl
YmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqT253ZWJraXRmb28oSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iak9ud2Via2l0Zm9vU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib253ZWJraXRmb28iKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpPbndlYmtpdGZvb1NldHRlcj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib253ZWJraXRm
b28iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhFeGVjU3RhdGVB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhFeGVjU3RhdGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25n
PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC53aXRoRXhlY1N0YXRlQXR0cmlidXRlKHN0YXRlKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwud2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZSgqanNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhFeGVjU3RhdGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVz
dE9ialdpdGhFeGVjU3RhdGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAid2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZSIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhFeGVj
U3RhdGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJ3aXRoRXhlY1N0YXRlQXR0cmlidXRlIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0cmli
dXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7Ci0gICAgICAgIHJldHVy
biBpbXBsLnNldFdpdGhFeGVjU3RhdGVBdHRyaWJ1dGUoc3RhdGUsIFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGltcGwuc2V0V2l0aEV4ZWNTdGF0ZUF0dHJp
YnV0ZSgqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLCBX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgc2V0SlNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpz
ZXQ8c2V0SlNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIndpdGhFeGVjU3RhdGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpXaXRoRXhlY1N0YXRl
QXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJ3aXRoRXhlY1N0YXRlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5k
U2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExM
b25nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC53aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0
aEF0dHJpYnV0ZShzdGF0ZSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLndpdGhDYWxsV2l0aEFuZFNldHRl
ckNhbGxXaXRoQXR0cmlidXRlKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OmdldDxqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJ3
aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAid2l0aENhbGxXaXRoQW5kU2V0dGVyQ2Fs
bFdpdGhBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRT
ZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0
dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0gewotICAgICAgICByZXR1cm4gaW1wbC5z
ZXRXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShzdGF0ZSwgYWN0aXZlRE9N
V2luZG93KHN0YXRlKSwgZmlyc3RET01XaW5kb3coc3RhdGUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldFdpdGhDYWxsV2l0aEFuZFNldHRl
ckNhbGxXaXRoQXR0cmlidXRlKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCksIGFjdGl2ZURPTVdpbmRvdygqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
JmxleGljYWxHbG9iYWxPYmplY3QpKSwgZmlyc3RET01XaW5kb3coKmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2Fs
bFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0
cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aENhbGxX
aXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0
aEF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2Rl
ZFZhbHVlLCAid2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0
T2JqPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
LndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCpjb250ZXh0KSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRleHQpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0
YXRlLCB0aGlzVmFsdWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgdmFsdWUsIFtd
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0
dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGUiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNl
dHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAg
ICByZXR1cm4gaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSgqY29u
dGV4dCwgKm5hdGl2ZVZhbHVlKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJp
YnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
RXhlY1N0YXRlQXR0cmlidXRlKHN0YXRlLCAqY29udGV4dCkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCksICpjYWxsRnJhbWUsICpjb250ZXh0KSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8
anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUiKTsKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZEV4ZWNTdGF0ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVj
U3RhdGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKLSAg
ICAgICAgcmV0dXJuIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3Rh
dGVBdHRyaWJ1dGUoc3RhdGUsICpjb250ZXh0LCAqbmF0aXZlVmFsdWUpOworICAgIEF0dHJpYnV0
ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAg
ICAgICByZXR1cm4gaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0
ZUF0dHJpYnV0ZSgqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLCAqY2FsbEZyYW1lLCAqY29udGV4dCwgKm5hdGl2ZVZhbHVlKTsKICAgICB9KTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
RXhlY1N0YXRlQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVl
LCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUiKTsKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAid2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNw
YWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
IGlmIChVTkxJS0VMWSghY29udGV4dCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRF
eGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKHN0YXRlLCAqY29udGV4dCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgqanNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLCAqY2FsbEZyYW1lLCAq
Y29udGV4dCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgIndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNl
c0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlU2V0dGVy
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVy
ZmFjZTxUZXN0T2JqPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0
ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0g
ewotICAgICAgICByZXR1cm4gaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4
ZWNTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoc3RhdGUsICpjb250ZXh0LCAqbmF0aXZlVmFsdWUp
OworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoKmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgKmNhbGxGcmFtZSwgKmNvbnRleHQsICpuYXRp
dmVWYWx1ZSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
c2V0PHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0
aFNwYWNlc0F0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0
ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0
ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRl
Iik7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxBdHRyMSgpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbEF0dHIxKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIxR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUs
IHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjEiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxR2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAiY29uZGl0aW9uYWxBdHRyMSIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRp
b24xKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjFTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGlt
cGwuc2V0Q29uZGl0aW9uYWxBdHRyMShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMVNldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjEiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIxU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJjb25kaXRpb25hbEF0dHIxIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExM
b25nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbEF0dHIyKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmNvbmRpdGlvbmFsQXR0cjIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAiY29uZGl0aW9uYWxBdHRyMiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJjb25k
aXRpb25hbEF0dHIyIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYm
IEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1
dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAg
ICAgICAgcmV0dXJuIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
MlNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0
cjIiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHIyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHIyIik7CiB9CiAKICNlbmRpZgogCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUzxJRExMb25nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbEF0
dHIzKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmNvbmRpdGlvbmFsQXR0cjMoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxBdHRyMyIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHIzIik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2
YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZd
IHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMyhXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyM1NldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
ImNvbmRpdGlvbmFsQXR0cjMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHIzIik7CiB9CiAK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0T2JqZWN0
QTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rl
c3RPYmplY3RBOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNENvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsQXR0
cjQiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI0Iik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjEpCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNENvbnN0cnVjdG9yU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBW
TSYgdm0gPSB0aHJvd1Njb3BlLnZtKCk7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImNvbmRpdGlv
bmFsQXR0cjQiKSwgc3RybGVuKCJjb25kaXRpb25hbEF0dHI0IikpLCB2YWx1ZSk7CiB9CiAKLWJv
b2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvclNldHRl
cj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjQiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI0Q29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsQXR0cjQiKTsKIH0KIAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi1zdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4g
SlNUZXN0T2JqZWN0Qjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUudm0oKSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IHJldHVybiBKU1Rlc3RPYmplY3RCOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgImNv
bmRpdGlvbmFsQXR0cjUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46Omdl
dDxqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI1Iik7CiB9CiAKICNlbmRpZgog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvclNldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVk0mIHZtID0gdGhyb3dTY29wZS52bSgp
OwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI1IiksIHN0cmxlbigiY29u
ZGl0aW9uYWxBdHRyNSIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJjb25kaXRpb25hbEF0dHI1Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9y
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJj
b25kaXRpb25hbEF0dHI1Iik7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVGVzdE9iamVjdEM6OmdldENvbnN0
cnVjdG9yKHN0YXRlLnZtKCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0T2JqZWN0Qzo6
Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI2Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1
Y3RvckdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEF0dHI2Iik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNkNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAi
Y29uZGl0aW9uYWxBdHRyNiIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3Rv
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiY29uZGl0aW9uYWxBdHRyNiIpLCBzdHJsZW4oImNvbmRpdGlvbmFsQXR0cjYiKSksIHZhbHVl
KTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0
cnVjdG9yU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9u
YWxBdHRyNiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpT
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBdHRyNiIpOwogfQog
CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0
ZTFHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0
dHJpYnV0ZTFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUg
PSB0aGlzT2JqZWN0Lm1fY2FjaGVkQXR0cmlidXRlMS5nZXQoKSkKICAgICAgICAgcmV0dXJuIGNh
Y2hlZFZhbHVlOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQW55PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5jYWNo
ZWRBdHRyaWJ1dGUxKCkpOwotICAgIHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUxLnNldChz
dGF0ZS52bSgpLCAmdGhpc09iamVjdCwgcmVzdWx0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmNhY2hlZEF0
dHJpYnV0ZTEoKSk7CisgICAgdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCAmdGhpc09iamVjdCwgcmVzdWx0KTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1
dGUxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNU
ZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFz
c2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJjYWNoZWRBdHRyaWJ1dGUxIik7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgImNhY2hlZEF0dHJpYnV0ZTEiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1fY2FjaGVkQXR0cmli
dXRlMi5nZXQoKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQW55
PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5jYWNoZWRBdHRyaWJ1dGUyKCkpOwotICAgIHRoaXNP
YmplY3QubV9jYWNoZWRBdHRyaWJ1dGUyLnNldChzdGF0ZS52bSgpLCAmdGhpc09iamVjdCwgcmVz
dWx0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmNhY2hlZEF0dHJpYnV0ZTIoKSk7CisgICAgdGhpc09iamVj
dC5tX2NhY2hlZEF0dHJpYnV0ZTIuc2V0KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCAmdGhpc09iamVjdCwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ2FjaGVkQXR0cmlidXRlMihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJj
YWNoZWRBdHRyaWJ1dGUyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImNhY2hlZEF0dHJp
YnV0ZTIiKTsKIH0KIAogI2lmIEVOQUJMRShDT05ESVRJT04pCi1zdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlM0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlM0dldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUz
LmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExBbnk+KHN0
YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmNhY2hlZEF0dHJpYnV0ZTMoKSk7Ci0gICAgdGhpc09iamVj
dC5tX2NhY2hlZEF0dHJpYnV0ZTMuc2V0KHN0YXRlLnZtKCksICZ0aGlzT2JqZWN0LCByZXN1bHQp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuY2FjaGVkQXR0cmlidXRlMygpKTsKKyAgICB0aGlzT2JqZWN0Lm1f
Y2FjaGVkQXR0cmlidXRlMy5zZXQoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksICZ0
aGlzT2JqZWN0LCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
YWNoZWRBdHRyaWJ1dGUzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUzR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImNhY2hl
ZEF0dHJpYnV0ZTMiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxq
c1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUzR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiY2FjaGVkQXR0cmlidXRl
MyIpOwogfQogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW55
QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQW55PihzdGF0ZSwgdGhy
b3dTY29wZSwgaW1wbC5hbnlBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hbnlBdHRyaWJ1
dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
QW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46Omdl
dDxqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpB
c3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYW55QXR0cmlidXRlIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiYW55QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpBbnlBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQW55PihzdGF0ZSwgdmFsdWUpOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1
dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAg
ICAgICAgcmV0dXJuIGltcGwuc2V0QW55QXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQW55QXR0cmlidXRlU2V0dGVyPigqc3RhdGUs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYW55QXR0cmlidXRlIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQW55QXR0cmlidXRlU2V0dGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhbnlBdHRy
aWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9iamVjdEF0dHJp
YnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2JqZWN0
QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMT2JqZWN0PihzdGF0ZSwg
dGhyb3dTY29wZSwgaW1wbC5vYmplY3RBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETE9iamVjdD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5v
YmplY3RBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqT2JqZWN0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2Jq
ZWN0QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVHZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAib2JqZWN0QXR0
cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0
T2JqT2JqZWN0QXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAib2JqZWN0QXR0cmlidXRlIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVTZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9i
amVjdEF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMT2JqZWN0PihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETE9iamVjdD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGlt
cGwuc2V0T2JqZWN0QXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iak9iamVjdEF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAib2JqZWN0QXR0cmlidXRlIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqT2JqZWN0QXR0cmlidXRlU2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJvYmpl
Y3RBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnRl
bnREb2N1bWVudEdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
Q29udGVudERvY3VtZW50R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNl
PERvY3VtZW50Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCBpbXBsLmNvbnRl
bnREb2N1bWVudCgpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxE
b2N1bWVudD4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
LCB0aHJvd1Njb3BlLCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKCp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCBpbXBsLmNvbnRlbnREb2N1bWVudCgpKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50KEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RP
YmpDb250ZW50RG9jdW1lbnRHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+
KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY29udGVudERvY3VtZW50Iik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiY29udGVudERvY3VtZW50Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETElu
dGVyZmFjZTxTVkdQb2ludD4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC5tdXRhYmxlUG9pbnQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETEludGVyZmFjZTxTVkdQb2ludD4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm11dGFibGVQb2ludCgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iak11
dGFibGVQb2ludEdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRl
LCB0aGlzVmFsdWUsICJtdXRhYmxlUG9pbnQiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdE9iaj46OmdldDxqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJtdXRh
YmxlUG9pbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak11dGFibGVQ
b2ludFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqTXV0YWJsZVBvaW50U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8U1ZHUG9pbnQ+PihzdGF0ZSwgdmFsdWUsIFtdKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJp
YnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIm11dGFibGVQb2ludCIs
ICJTVkdQb2ludCIpOyB9KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRl
cmZhY2U8U1ZHUG9pbnQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRl
c3RPYmplY3QiLCAibXV0YWJsZVBvaW50IiwgIlNWR1BvaW50Iik7IH0pOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2Fs
bChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwu
c2V0TXV0YWJsZVBvaW50KCpuYXRpdmVWYWx1ZSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9v
bCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVz
dE9iak11dGFibGVQb2ludFNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
Im11dGFibGVQb2ludCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0
PHNldEpTVGVzdE9iak11dGFibGVQb2ludFNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAibXV0YWJsZVBvaW50Iik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYmx1ZWJlcnJ5KCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmJsdWViZXJyeSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3Ry
YXdiZXJyeShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyYXdiZXJyeUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJzdHJhd2JlcnJ5Iik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqU3RyYXdiZXJyeUdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgInN0cmF3YmVycnkiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialN0cmF3YmVycnlTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmF3YmVycnlTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAg
IEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsK
ICAgICAgICAgcmV0dXJuIGltcGwuc2V0Qmx1ZWJlcnJ5KFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2Jl
cnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5U2V0dGVyPigqc3RhdGUsIHRoaXNW
YWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyYXdiZXJyeSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialN0cmF3YmVycnlTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInN0cmF3YmVycnkiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbkdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmRlc2Ny
aXB0aW9uKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmRlc2NyaXB0aW9uKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakRlc2NyaXB0aW9u
R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1
ZSwgImRlc2NyaXB0aW9uIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpn
ZXQ8anNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpB
c3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJkZXNjcmlwdGlvbiIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuaWQoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuaWQoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJZChKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqSWRHZXR0
ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAi
aWQiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpJ
ZEdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgImlkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpJZFNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqSWRTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2Fs
bChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwu
c2V0SWQoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpJZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqSWRTZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpZCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iaklkU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqSGFzaEdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4o
c3RhdGUsIHRocm93U2NvcGUsIGltcGwuaGFzaCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmhh
c2goKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
SGFzaChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakhhc2hH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAiaGFzaCIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVz
dE9iakhhc2hHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJoYXNoIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5yZXBsYWNl
YWJsZUF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZXBs
YWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdE9iaj46OmdldDxqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJyZXBsYWNlYWJs
ZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpz
VGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAicmVwbGFjZWFibGVB
dHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlcGxhY2Vh
YmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRo
cm93U2NvcGUudm0oKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0eS4KICAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigicmVwbGFjZWFibGVBdHRyaWJ1dGUi
KSwgc3RybGVuKCJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpKSwgdmFsdWUpOwogfQogCi1ib29sIHNl
dEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNU
ZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlU2V0dGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJyZXBsYWNl
YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlM8SURMTnVsbGFibGU8SURMVW5yZXN0cmljdGVkRG91YmxlPj4oc3RhdGUsIHRocm93U2Nv
cGUsIGltcGwubnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3Vi
bGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVE
b3VibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46Omdl
dDxqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIm51bGxh
YmxlRG91YmxlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETE51bGxhYmxlPElETExvbmc+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5udWxs
YWJsZUxvbmdBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxh
YmxlPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxh
YmxlTG9uZ0F0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0
dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0
aGlzVmFsdWUsICJudWxsYWJsZUxvbmdBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsICJudWxsYWJsZUxvbmdBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMQm9vbGVhbj4+KHN0YXRl
LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSgpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVCb29sZWFuQXR0cmlidXRlKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9v
bGVhbkF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0
dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyLCBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgIm51bGxh
YmxlQm9vbGVhbkF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6Z2V0PGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
Im51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oc3RhdGUsIHRocm93
U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVTdHJpbmdB
dHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIm51bGxhYmxlU3Ry
aW5nQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExMb25nPj4oc3RhdGUsIHRocm93U2NvcGUs
IGltcGwubnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETE51bGxhYmxlPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRh
YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFi
bGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRl
R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1
ZSwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1
dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRy
aWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExMb25nPj4oc3Rh
dGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJ
RExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0
ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0TnVs
bGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0p
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJs
ZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVT
dHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51
bGxhYmxlPElETERPTVN0cmluZz4+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlU3Ry
aW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51
bGxhYmxlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwubnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdl
dHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUs
ICJudWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgIm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETERP
TVN0cmluZz4+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0
ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0
ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAg
cmV0dXJuIGltcGwuc2V0TnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNU
ZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZVNl
dHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm51bGxhYmxlU3RyaW5nU2V0
dGFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNl
dDxzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJudWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMVVNWU3RyaW5n
Pj4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMVVNWU3Ry
aW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRl
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OmdldDxqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgIm51
bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0
cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAibnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJp
bmdTZXR0YWJsZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0
ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVs
bGFibGU8SURMVVNWU3RyaW5nPj4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0g
ICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
ewogICAgICAgICByZXR1cm4gaW1wbC5zZXROdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmli
dXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxl
QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAibnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIm51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQnl0ZVN0cmluZ1NldHRh
YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETE51bGxhYmxlPElETEJ5dGVTdHJpbmc+PihzdGF0ZSwgdGhyb3dTY29wZSwg
aW1wbC5udWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMQnl0ZVN0cmluZz4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
TnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAibnVsbGFibGVCeXRlU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OmdldDxqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgIm51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEJ5
dGVTdHJpbmc+PihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETE51bGxhYmxlPElETEJ5dGVTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmli
dXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNl
dHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAg
ICByZXR1cm4gaW1wbC5zZXROdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
c2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdE9iak51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmli
dXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
Im51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0
dGFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIm51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmli
dXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQXR0cmlidXRlR2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImF0
dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVz
dE9iakF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhS
ZXNlcnZlZEVudW1UeXBlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRW51bWVyYXRp
b248VGVzdE9iajo6T3B0aW9uYWw+PihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVX
aXRoUmVzZXJ2ZWRFbnVtVHlwZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRW51
bWVyYXRpb248VGVzdE9iajo6T3B0aW9uYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZl
ZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVk
RW51bVR5cGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwg
ImF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5
cGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBhdXRvIG9wdGlvbmFsTmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6Ok9w
dGlvbmFsPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gb3B0aW9uYWxOYXRpdmVWYWx1ZSA9IHBh
cnNlRW51bWVyYXRpb248VGVzdE9iajo6T3B0aW9uYWw+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBp
ZiAoVU5MSUtFTFkoIW9wdGlvbmFsTmF0aXZlVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IG9wdGlvbmFsTmF0aXZlVmFsdWUudmFsdWUoKTsKLSAg
ICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0
cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7
CiAgICAgICAgIHJldHVybiBpbXBsLnNldEF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBl
U2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aFJl
c2VydmVkRW51bVR5cGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNl
dDxzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZVNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aFJl
c2VydmVkRW51bVR5cGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRl
c3RSZWFkT25seVZvaWRQcm9taXNlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlWb2lkUHJvbWlzZUF0dHJpYnV0ZUdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFByb21pc2U8SURMVm9pZD4+KHN0YXRlLCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0UmVhZE9ubHlWb2lk
UHJvbWlzZUF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMUHJvbWlz
ZTxJRExWb2lkPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIGltcGwudGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGUoKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFJl
YWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0
UmVhZE9ubHlWb2lkUHJvbWlzZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqVGVzdFJlYWRPbmx5
Vm9pZFByb21pc2VBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWpl
Y3RQcm9taXNlPigqc3RhdGUsIHRoaXNWYWx1ZSwgInRlc3RSZWFkT25seVZvaWRQcm9taXNlQXR0
cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0
T2JqVGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAidGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RSZWFkT25seVByb21pc2VB
dHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExQcm9taXNlPElETEludGVy
ZmFjZTxUZXN0Tm9kZT4+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwudGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMUHJvbWlzZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwudGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlQcm9taXNlQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpnZXQ8anNUZXN0T2JqVGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidGVz
dFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGVHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCAidGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4o
c3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnB1dEZv
cndhcmRzQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZh
Y2U8VGVzdE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46Omdl
dDxqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIp
OworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9ialB1dEZv
cndhcmRzQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRl
U2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0o
KTsKICAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpLCBzdHJsZW4oInB1dEZv
cndhcmRzQXR0cmlidXRlIikpOwotICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmpl
Y3QuZ2V0KCZzdGF0ZSwgaWQpOworICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmpl
Y3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgaWYgKFVOTElLRUxZKCF2YWx1ZVRvRm9yd2FyZFRv
LmlzT2JqZWN0KCkpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29w
ZSk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBhdXRvIGZvcndhcmRJZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigibmFtZSIpLCBzdHJsZW4oIm5hbWUiKSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodmFs
dWVUb0ZvcndhcmRUbywgZmFsc2UpOwotICAgIGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLT5t
ZXRob2RUYWJsZSh2bSktPnB1dChhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKSwgJnN0YXRlLCBm
b3J3YXJkSWQsIHZhbHVlLCBzbG90KTsKKyAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+
bWV0aG9kVGFibGUodm0pLT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBmb3J3YXJkSWQsIHZhbHVlLCBzbG90KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpT
VGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZVNldHRl
cj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAicHV0Rm9y
d2FyZHNBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialB1
dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
T2JqJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oc3Rh
dGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnB1dEZvcndh
cmRzTnVsbGFibGVBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51
bGxhYmxlPElETEludGVyZmFjZTxUZXN0Tm9kZT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wdXRGb3J3YXJkc051bGxh
YmxlQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpQdXRG
b3J3YXJkc051bGxhYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUi
KTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpQdXRG
b3J3YXJkc051bGxhYmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6
QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAicHV0Rm9yd2FyZHNOdWxs
YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0
Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0
ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIFZNJiB2bSA9IHRocm93U2NvcGUudm0oKTsKICAgICBhdXRvIGlkID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJwdXRG
b3J3YXJkc051bGxhYmxlQXR0cmlidXRlIiksIHN0cmxlbigicHV0Rm9yd2FyZHNOdWxsYWJsZUF0
dHJpYnV0ZSIpKTsKLSAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgm
c3RhdGUsIGlkKTsKKyAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgm
bGV4aWNhbEdsb2JhbE9iamVjdCwgaWQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwogICAgIGlmIChVTkxJS0VMWSghdmFsdWVUb0ZvcndhcmRUby5pc09iamVj
dCgpKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgYXV0byBmb3J3YXJkSWQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIm5hbWUi
KSwgc3RybGVuKCJuYW1lIikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHZhbHVlVG9Gb3J3
YXJkVG8sIGZhbHNlKTsKLSAgICBhc09iamVjdCh2YWx1ZVRvRm9yd2FyZFRvKS0+bWV0aG9kVGFi
bGUodm0pLT5wdXQoYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyksICZzdGF0ZSwgZm9yd2FyZElk
LCB2YWx1ZSwgc2xvdCk7CisgICAgYXNPYmplY3QodmFsdWVUb0ZvcndhcmRUbyktPm1ldGhvZFRh
YmxlKHZtKS0+cHV0KGFzT2JqZWN0KHZhbHVlVG9Gb3J3YXJkVG8pLCAmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZm9yd2FyZElkLCB2YWx1ZSwgc2xvdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0
T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+Ojpz
ZXQ8c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZVNldHRlcj4oKnN0YXRl
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUi
KTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RPYmpQ
dXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZp
ZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVU1ZTdHJpbmc+KHN0
YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuc3RyaW5naWZpZXJBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
U3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJp
YnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgInN0cmluZ2lmaWVyQXR0cmlidXRlIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZVNldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
aWZpZXJBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETFVTVlN0cmluZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJl
dHVybiBpbXBsLnNldFN0cmluZ2lmaWVyQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdp
ZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqU3RyaW5naWZp
ZXJBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9ialN0cmluZ2lmaWVy
QXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5n
aWZpZXJBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNl
dDxzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3Jp
dGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlKCkpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmNv
bmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1
dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0
T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVHZXR0ZXIs
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiY29u
ZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJjb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIik7CiB9CiAK
ICNpZiBFTkFCTEUoQ09ORElUSU9OKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETEludGVyZmFjZTxOb2RlPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJjb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRl
IiwgIk5vZGUiKTsgfSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJm
YWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmpl
Y3QiLCAiY29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIsICJOb2RlIik7IH0pOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNl
dHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6
OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0
dXJuIGltcGwuc2V0Q29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSgqbmF0aXZlVmFsdWUp
OwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0
PHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmli
dXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxseVJlYWRXcml0ZUF0
dHJpYnV0ZSIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05ESVRJT04yKQotc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQW5kQ29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihzdGF0ZSwgKnRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxBbmRDb25kaXRp
b25hbGx5UmVhZFdyaXRlQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmNvbmRpdGlvbmFsQW5kQ29uZGl0aW9uYWxseVJl
YWRXcml0ZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlS
ZWFkV3JpdGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsQW5kQ29uZGl0aW9u
YWxseVJlYWRXcml0ZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFz
c2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46Omdl
dDxqc1Rlc3RPYmpDb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJjb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRy
aWJ1dGUiKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09ORElUSU9OMikKICNpZiBFTkFC
TEUoQ09ORElUSU9OKQotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QW5kQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRl
LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBbmRDb25k
aXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KHN0YXRlLCB2YWx1ZSwgW10o
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0aW9uYWxB
bmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUiKTsgfSk7CisgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0aW9uYWxBbmRDb25k
aXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxs
KHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5z
ZXRDb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUoKm5hdGl2ZVZh
bHVlKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCitib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQW5kQ29uZGl0aW9uYWxseVJlYWRXcml0
ZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
bmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0
cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVy
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRp
b25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKIH0KIAogI2VuZGlmCiAK
ICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4
cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmom
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETExvbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLmNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4
cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9z
ZWRUb1dpbmRvd0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKnN0YXRlLCB0aGlzVmFsdWUsICJjb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QXR0cmli
dXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpnZXQ8anNUZXN0T2Jq
Q29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGVT
ZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCB2YWx1ZSk7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAg
ICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
WyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0Q29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRv
d0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4
cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+OjpzZXQ8c2V0SlNUZXN0T2Jq
Q29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1
dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OnNldDxzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbGx5RXhwb3Nl
ZFRvV2luZG93QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2Vy
QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RPYmomIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oc3RhdGUsIHRo
cm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSgpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46OmdldDxqc1Rlc3RPYmpD
b25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImNvbmRpdGlvbmFsbHlFeHBv
c2VkVG9Xb3JrZXJBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9i
aj46OmdldDxqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSIpOwog
fQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRU
b1dvcmtlckF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0
ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9u
Zz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJv
d1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRDb25kaXRpb25h
bGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5
RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE9iaj46
OnNldDxzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlU2V0
dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiY29uZGl0aW9uYWxseUV4cG9z
ZWRUb1dvcmtlckF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2Jq
Pjo6c2V0PHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGVT
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5jb25kaXRp
b25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGUoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9u
YWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6
Z2V0PGpzVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1
dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJpYnV0ZSIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6Z2V0PGpzVGVzdE9iakNvbmRpdGlv
bmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJj
b25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93
QW5kV29ya2VyQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29y
a2VyQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
c3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNl
dENvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpT
VGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5k
b3dBbmRXb3JrZXJBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0T2JqPjo6c2V0PHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93
QW5kV29ya2VyQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RPYmo+
OjpzZXQ8c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0
dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZh
bHVlLCAiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJpYnV0ZSIpOwog
fQogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRp
b24xQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMUJvZHkoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5lbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1MTMsMTIgKzU1MTQsMTMgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5h
YmxlZEF0UnVudGltZU9wZXIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uMkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTUyOCw5NDcgKzU1
MzAsOTQ4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFU
VVJFKQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uT3ZlcmxvYWREaXNwYXRjaGVyKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25PdmVybG9hZERpc3BhdGNoZXIoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIHNpemVfdCBhcmdzQ291bnQgPSBz
dGQ6Om1pbjxzaXplX3Q+KDEsIHN0YXRlLT5hcmd1bWVudENvdW50KCkpOworICAgIHNpemVfdCBh
cmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
KTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKLSAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlz
aGluZ0FyZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICAgICAgSlNWYWx1ZSBk
aXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAjaWYg
RU5BQkxFKFRFU1RfRkVBVFVSRSkKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uMkJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUp
OworICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0
UnVudGltZU9wZXJhdGlvbjJCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2Fz
dGVkVGhpcywgdGhyb3dTY29wZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQot
ICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1l
T3BlcmF0aW9uMUJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICBy
ZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9u
MUJvZHkobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Nj
b3BlKTsKICNlbmRpZgogICAgIH0KLSAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBh
cmdzQ291bnQgPCAxID8gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKSA6
IHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25F
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+
OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlv
bk92ZXJsb2FkRGlzcGF0Y2hlcj4oKnN0YXRlLCAiZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbiIp
OworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25PdmVybG9hZERpc3BhdGNoZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZW5hYmxlZEF0UnVudGltZU9wZXJh
dGlvbiIpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkVu
YWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0aWNCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uU3RhdGljQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byB0ZXN0UGFyYW0gPSBj
b252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0
byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIFRlc3RPYmo6OmVuYWJsZWRBdFJ1bnRp
bWVPcGVyYXRpb25TdGF0aWMoV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9u
U3RhdGljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25F
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xv
YmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGxTdGF0
aWM8anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25T
dGF0aWNCb2R5Pigqc3RhdGUsICJlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljIik7Cisg
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsU3RhdGljPGpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJlbmFibGVkQXRSdW50aW1lT3BlcmF0aW9u
U3RhdGljIik7CiB9CiAKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1
bnRpbWVGZWF0dXJlRW5hYmxlZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50
aW1lRmVhdHVyZUVuYWJsZWRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZl
cnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHRl
c3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5lbmFibGVkSW5TcGVjaWZpY1dvcmxk
V2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZChXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkSW5TcGVjaWZpY1dv
cmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1
cmVFbmFibGVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25FbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZEJvZHk+KCpz
dGF0ZSwgImVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkIik7
CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJs
ZWRCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImVuYWJsZWRJblNwZWNp
ZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVFbmFibGVkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lm
aWNNZXRob2RCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRob2RCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRv
IHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKKyAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC53b3Js
ZFNwZWNpZmljTWV0aG9kKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRob2QoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNwZWNpZmljTWV0aG9k
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Xb3JsZFNw
ZWNpZmljTWV0aG9kQm9keT4oKnN0YXRlLCAid29ybGRTcGVjaWZpY01ldGhvZCIpOworICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldvcmxkU3BlY2lmaWNNZXRob2RCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgIndvcmxkU3BlY2lmaWNNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2FsY3VsYXRlU2VjcmV0UmVz
dWx0Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvblJldHVy
bmluZ1Byb21pc2U8SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DYWxjdWxhdGVTZWNyZXRSZXN1bHRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJh
dGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaW1wbC5jYWxjdWxhdGVTZWNyZXRSZXN1bHQoV1RGTW92ZShwcm9taXNlKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNhbGN1bGF0
ZVNlY3JldFJlc3VsdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0
YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNhbGN1bGF0ZVNlY3JldFJlc3VsdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9i
amVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNhbGN1bGF0ZVNlY3JldFJlc3VsdEJv
ZHksIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T3JXb3JrZXI+KCpzdGF0ZSwgImNhbGN1
bGF0ZVNlY3JldFJlc3VsdCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9t
aXNlPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DYWxjdWxhdGVT
ZWNyZXRSZXN1bHRCb2R5LCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09yV29ya2VyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImNhbGN1bGF0ZVNlY3JldFJlc3VsdCIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25HZXRTZWNyZXRCb29sZWFuQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTZWNyZXRCb29sZWFuQm9keShK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSog
Y2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExCb29sZWFuPihpbXBsLmdldFNlY3JldEJvb2xlYW4oKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uR2V0U2VjcmV0Qm9vbGVhbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkdldFNlY3JldEJvb2xlYW4oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNlY3JldEJvb2xlYW5Cb2R5Pigqc3RhdGUsICJnZXRT
ZWNyZXRCb29sZWFuIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxs
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U2VjcmV0Qm9vbGVhbkJvZHk+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZ2V0U2VjcmV0Qm9vbGVhbiIpOwogfQogCiAjaWYg
RU5BQkxFKFRFU1RfRkVBVFVSRSkKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbkJvZHko
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExCb29sZWFuPihpbXBsLnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbigpKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0
RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9v
bGVhbkJvZHk+KCpzdGF0ZSwgInRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpOworICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FsbEZyYW1lLCAidGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIik7CiB9CiAKICNlbmRp
ZgogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Wb2lkTWV0aG9kQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kQm9keShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGltcGwudm9pZE1ldGhvZCgpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZChK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhv
ZEJvZHk+KCpzdGF0ZSwgInZvaWRNZXRob2QiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kQm9keT4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ2b2lkTWV0aG9kIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blZvaWRNZXRob2RXaXRoQXJnc0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzQm9keShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
Ci0gICAgYXV0byBsb25nQXJnID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOworICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0
byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSkpOworICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJ2b2lkTWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9i
aiIpOyB9KTsKKyAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgyKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAyLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAidm9pZE1ldGhvZFdpdGhBcmdzIiwg
IlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnZvaWRNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGxvbmdB
cmcpLCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRo
QXJnc0JvZHk+KCpzdGF0ZSwgInZvaWRNZXRob2RXaXRoQXJncyIpOworICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRN
ZXRob2RXaXRoQXJnc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidm9p
ZE1ldGhvZFdpdGhBcmdzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RC
b2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJ5dGU+KGltcGwuYnl0ZU1ldGhvZCgpKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25CeXRlTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3Rh
dGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQnl0ZU1ldGhvZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQnl0ZU1ldGhvZEJvZHk+KCpzdGF0ZSwgImJ5dGVNZXRob2QiKTsKKyAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25C
eXRlTWV0aG9kQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJieXRlTWV0
aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhB
cmdzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBieXRlQXJnID0gY29udmVydDxJRExCeXRlPigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gYnl0ZUFyZyA9IGNvbnZlcnQ8
SURMQnl0ZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9i
aj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBbXShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJieXRlTWV0aG9kV2l0
aEFyZ3MiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50
ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgyKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAyLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAiYnl0ZU1l
dGhvZFdpdGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMQnl0ZT4oaW1wbC5ieXRlTWV0aG9kV2l0aEFyZ3MoV1RGTW92ZShieXRlQXJnKSwg
V1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhBcmdzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhB
cmdzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRl
TWV0aG9kV2l0aEFyZ3NCb2R5Pigqc3RhdGUsICJieXRlTWV0aG9kV2l0aEFyZ3MiKTsKKyAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3NCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgImJ5dGVNZXRob2RXaXRoQXJncyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZEJvZHkoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T2N0ZXRNZXRob2RCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0
TWV0aG9kKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kQm9keT4oKnN0YXRlLCAib2N0ZXRNZXRo
b2QiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FsbEZyYW1lLCAib2N0ZXRNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJnc0Jv
ZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJnc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDMpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gb2N0ZXRBcmcg
PSBjb252ZXJ0PElETE9jdGV0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAg
IGF1dG8gb2N0ZXRBcmcgPSBjb252ZXJ0PElETE9jdGV0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHN0ckFyZyA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Cisg
ICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBvYmpBcmcgPSBj
b252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMiksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMiwgIm9iakFyZyIsICJU
ZXN0T2JqZWN0IiwgIm9jdGV0TWV0aG9kV2l0aEFyZ3MiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBh
dXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgW10oSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0
aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAyLCAib2Jq
QXJnIiwgIlRlc3RPYmplY3QiLCAib2N0ZXRNZXRob2RXaXRoQXJncyIsICJUZXN0T2JqIik7IH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0
aG9kV2l0aEFyZ3MoV1RGTW92ZShvY3RldEFyZyksIFdURk1vdmUoc3RyQXJnKSwgKm9iakFyZykp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNh
bGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzQm9keT4oKnN0
YXRlLCAib2N0ZXRNZXRob2RXaXRoQXJncyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFy
Z3NCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm9jdGV0TWV0aG9kV2l0
aEFyZ3MiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZEJvZHkoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMTG9uZz4oaW1wbC5sb25nTWV0aG9kKCkpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRo
b2QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0
aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25n
TWV0aG9kQm9keT4oKnN0YXRlLCAibG9uZ01ldGhvZCIpOworICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImxvbmdNZXRob2QiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3NCb2R5KEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBj
YWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKLSAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAzKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBsb25nQXJnID0gY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAg
ICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBz
Y29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgImxvbmdNZXRob2RXaXRoQXJncyIsICJU
ZXN0T2JqIik7IH0pOworICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVz
dE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDIpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIDIsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJsb25nTWV0aG9kV2l0aEFy
Z3MiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExM
b25nPihpbXBsLmxvbmdNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGxvbmdBcmcpLCBXVEZNb3ZlKHN0
ckFyZyksICpvYmpBcmcpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRo
QXJnc0JvZHk+KCpzdGF0ZSwgImxvbmdNZXRob2RXaXRoQXJncyIpOworICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdN
ZXRob2RXaXRoQXJnc0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibG9u
Z01ldGhvZFdpdGhBcmdzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZEJvZHkoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kQm9k
eShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFt
ZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm9iak1ldGhvZCgpKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5vYmpNZXRob2QoKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2JqTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
c3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2JqTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PYmpNZXRob2RCb2R5Pigqc3RhdGUsICJvYmpNZXRob2QiKTsKKyAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
YmpNZXRob2RCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm9iak1ldGhv
ZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJnc0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3NC
b2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKLSAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAzKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBsb25nQXJnID0gY29udmVydDxJRExM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIFtdKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm9iak1ldGhvZFdpdGhBcmdz
IiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFj
ZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMiksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMiwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm9iak1ldGhvZFdp
dGhBcmdzIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC5vYmpNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGxvbmdBcmcpLCBXVEZNb3ZlKHN0ckFy
ZyksICpvYmpBcmcpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVy
ZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5vYmpNZXRob2RXaXRoQXJncyhXVEZNb3ZlKGxvbmdBcmcpLCBXVEZNb3Zl
KHN0ckFyZyksICpvYmpBcmcpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRo
QXJnc0JvZHk+KCpzdGF0ZSwgIm9iak1ldGhvZFdpdGhBcmdzIik7CisgICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0
aG9kV2l0aEFyZ3NCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm9iak1l
dGhvZFdpdGhBcmdzIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVNZXRob2RCb2R5KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFi
bGVNZXRob2RCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KGltcGwudW5mb3JnZWFi
bGVNZXRob2QoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
akluc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU1ldGhvZChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVNZXRob2QoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVNZXRob2RCb2R5Pigq
c3RhdGUsICJ1bmZvcmdlYWJsZU1ldGhvZCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVNZXRob2RC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInVuZm9yZ2VhYmxlTWV0aG9k
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQm9keShK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0JvZHkoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAg
IGF1dG8gYXJnID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJp
bmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gYXJnID0gY29u
dmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1l
dGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUoYXJnKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhB
cmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0aEFyZ1Ry
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQXJnVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAibWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlckJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNS
ZXNvbHZlclBhcmFtZXRlckJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpT
VGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gcmVzb2x2ZXIgPSBjb252ZXJ0
PElETFhQYXRoTlNSZXNvbHZlcjxYUGF0aE5TUmVzb2x2ZXI+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAicmVz
b2x2ZXIiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVy
IiwgIlhQYXRoTlNSZXNvbHZlciIpOyB9KTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byByZXNvbHZlciA9IGNvbnZlcnQ8SURMWFBh
dGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJyZXNvbHZlciIsICJUZXN0
T2JqZWN0IiwgIm1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIiLCAiWFBhdGhOU1Jl
c29sdmVyIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVy
KCpyZXNvbHZlcik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFy
YW1ldGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1ldGVyQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0
aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlciIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhYUGF0aE5T
UmVzb2x2ZXJQYXJhbWV0ZXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
Im1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVT
dHJpbmdNZXRob2RCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kQm9keShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIGltcGwubnVsbGFibGVT
dHJpbmdNZXRob2QoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExOdWxs
YWJsZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5udWxsYWJsZVN0
cmluZ01ldGhvZCgpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ01ldGhvZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmlu
Z01ldGhvZEJvZHk+KCpzdGF0ZSwgIm51bGxhYmxlU3RyaW5nTWV0aG9kIik7CisgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TnVsbGFibGVTdHJpbmdNZXRob2RCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgIm51bGxhYmxlU3RyaW5nTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTdGF0
aWNNZXRob2RCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1N0YXRpY01ldGhvZEJvZHkoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBU
ZXN0T2JqOjpudWxsYWJsZVN0cmluZ1N0YXRpY01ldGhvZCgpKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBUZXN0T2JqOjpudWxsYWJsZVN0cmluZ1N0YXRpY01ldGhvZCgpKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk51
bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1N0YXRpY01ldGhvZChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpjYWxsU3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25OdWxsYWJsZVN0cmlu
Z1N0YXRpY01ldGhvZEJvZHk+KCpzdGF0ZSwgIm51bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kIik7
CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsU3RhdGljPGpzVGVzdE9i
akNvbnN0cnVjdG9yRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1N0YXRpY01ldGhvZEJvZHk+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2Qi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kQm9keShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0
cmluZ1NwZWNpYWxNZXRob2RCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGluZGV4ID0gY29udmVydDxJ
RExVbnNpZ25lZExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0
byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBpbXBsLm51bGxhYmxl
U3RyaW5nU3BlY2lhbE1ldGhvZChXVEZNb3ZlKGluZGV4KSkpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGltcGwubnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKFdURk1vdmUoaW5kZXgpKSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmlu
Z1NwZWNpYWxNZXRob2RCb2R5Pigqc3RhdGUsICJudWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2Qi
KTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2RCb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmdCb2R5KEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBj
YWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKLSAgICBhdXRvIGVudW1BcmcgPSBjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RPYmo6
OkVudW1UeXBlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
TXVzdEJlRW51bUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIs
ICJtZXRob2RXaXRoRW51bUFyZyIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
RW51bVR5cGU+KCkpOyB9KTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CisgICAgYXV0byBlbnVtQXJnID0gY29udmVydDxJRExFbnVtZXJhdGlvbjxU
ZXN0T2JqOjpFbnVtVHlwZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3Qi
LCAibWV0aG9kV2l0aEVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6
OkVudW1UeXBlPigpKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhFbnVtQXJnKFdURk1vdmUoZW51
bUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoRW51bUFyZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2Jq
ZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZ0JvZHk+KCpzdGF0ZSwgIm1ldGhvZFdp
dGhFbnVtQXJnIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmdCb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhFbnVtQXJnIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZ0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVt
QXJnQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBlbnVtQXJnID0gY29udmVydDxJRExFbnVtZXJhdGlv
bjxUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImVudW1B
cmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmciLCBleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RTdGFuZGFsb25lRW51bWVyYXRpb24+KCkpOyB9KTsKKyAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0
byBlbnVtQXJnID0gY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZUVudW1lcmF0
aW9uPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRo
U3RhbmRhbG9uZUVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RTdGFuZGFs
b25lRW51bWVyYXRpb24+KCkpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVt
QXJnKFdURk1vdmUoZW51bUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1BcmcoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU3RhbmRhbG9uZUVudW1B
cmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhTdGFuZGFsb25lRW51bUFyZ0JvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhTdGFuZGFsb25l
RW51bUFyZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZ0JvZHk+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aFN0YW5kYWxvbmVFbnVt
QXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdCb2R5KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEVudW1BcmdCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgYXV0byBlbnVtQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5
cGU+Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxU
ZXN0T2JqOjpFbnVtVHlwZT4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETEVudW1lcmF0aW9uPFRl
c3RPYmo6OkVudW1UeXBlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtd
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0Fy
Z3VtZW50TXVzdEJlRW51bUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9i
amVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7IH0pKTsKKyAgICBhdXRvIGVudW1BcmcgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURM
RW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFs
PENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+OjpSZXR1cm5UeXBl
Pihjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsg
dGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnIiwg
ZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7IH0pKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyhXVEZNb3ZlKGVudW1BcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsRW51bUFyZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRl
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxP
YmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdCb2R5Pigqc3RhdGUs
ICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsRW51bUFyZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9k
V2l0aE9wdGlvbmFsRW51bUFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJn
QW5kRGVmYXVsdFZhbHVlQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVs
dFZhbHVlQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gZW51bUFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gVGVz
dE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTEgOiBjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RP
Ymo6OkVudW1UeXBlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50TXVzdEJlRW51bUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVj
dCIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlIiwgZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7IH0pOworICAgIGF1dG8gZW51
bUFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFRlc3RPYmo6OkVu
dW1UeXBlOjpFbnVtVmFsdWUxIDogY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVt
VHlwZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0
aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZSIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
RW51bUFyZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKGVudW1BcmcpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFy
Z0FuZERlZmF1bHRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bEVudW1BcmdBbmREZWZhdWx0VmFsdWVCb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxF
bnVtQXJnQW5kRGVmYXVsdFZhbHVlIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51
bUFyZ0FuZERlZmF1bHRWYWx1ZUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZSIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQm9keShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzQW5kVGhyb3dzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRv
IHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAib2JqQXJnIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIsICJUZXN0T2JqIik7IH0p
OworICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IDEsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5k
VGhyb3dzIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKFdU
Rk1vdmUoc3RyQXJnKSwgKm9iakFyZykpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRv
SlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFRoYXRSZXF1aXJlc0Fs
bEFyZ3NBbmRUaHJvd3MoV1RGTW92ZShzdHJBcmcpLCAqb2JqQXJnKSkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3NCb2R5Pigqc3RhdGUsICJtZXRob2RUaGF0UmVxdWlyZXNBbGxB
cmdzQW5kVGhyb3dzIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxs
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRo
cm93c0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kVGhhdFJl
cXVpcmVzQWxsQXJnc0FuZFRocm93cyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJn
Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzdHIg
PSBjb252ZXJ0PElETFVTVlN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
KyAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMVVNWU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhV
U1ZTdHJpbmdBcmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmcoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhV
U1ZTdHJpbmdBcmdCb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoVVNWU3RyaW5nQXJnIik7CisgICAg
cmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FsbEZyYW1lLCAibWV0aG9kV2l0aFVTVlN0cmluZ0FyZyIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
TnVsbGFibGVVU1ZTdHJpbmdBcmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0Fy
Z0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwotICAgIGF1dG8gc3RyID0gY29udmVydDxJRExOdWxsYWJsZTxJRExVU1ZT
dHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gc3RyID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExVU1ZTdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOdWxs
YWJsZVVTVlN0cmluZ0FyZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmcoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVs
bGFibGVVU1ZTdHJpbmdBcmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwot
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZ0JvZHk+KCpzdGF0ZSwgIm1l
dGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxs
YWJsZVVTVlN0cmluZ0FyZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAi
bWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZT
dHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQm9keShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3Ry
aW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gc3Ry
ID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gc3RyID0gY29udmVydDxJRExU
cmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhV
U1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZT
dHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nQm9k
eT4oKnN0YXRlLCAibWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmciKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0
aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEJ5dGVTdHJpbmdBcmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnQm9keShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2Fs
bEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7Ci0gICAgYXV0byBzdHIgPSBjb252ZXJ0PElETEJ5dGVTdHJpbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETEJ5dGVTdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJp
bmdBcmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQnl0ZVN0cmluZ0FyZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7
Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdCb2R5Pigqc3RhdGUsICJtZXRob2RX
aXRoQnl0ZVN0cmluZ0FyZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnQm9k
eT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJtZXRob2RXaXRoQnl0ZVN0cmlu
Z0FyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnQm9keShKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzdHIg
PSBjb252ZXJ0PElETE51bGxhYmxlPElETEJ5dGVTdHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOworICAgIGF1dG8gc3RyID0gY29udmVydDxJRExOdWxsYWJsZTxJRExCeXRl
U3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnKFdURk1vdmUo
c3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOdWxsYWJsZUJ5dGVTdHJpbmdBcmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeXRlU3RyaW5nQXJnKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVs
bGFibGVCeXRlU3RyaW5nQXJnQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0
cmluZ0FyZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVTdHJpbmdBcmdCb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhOdWxsYWJsZUJ5
dGVTdHJpbmdBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmdBcmdUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmdCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMVHJl
YXROdWxsQXNFbXB0eUFkYXB0b3I8SURMQnl0ZVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CisgICAgYXV0byBzdHIgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlB
ZGFwdG9yPElETEJ5dGVTdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQnl0ZVN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0JvZHk+KCpzdGF0ZSwg
Im1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOworICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0Jv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aEJ5dGVTdHJp
bmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1
ZUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0
T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzZXJpYWxpemVk
QXJnID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHNlcmlhbGl6
ZWRBcmcgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBpbXBsLnNlcmlhbGl6ZWRWYWx1ZShXVEZNb3ZlKHNlcmlhbGl6ZWRBcmcpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXpl
ZFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2Vy
aWFsaXplZFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TZXJpYWxpemVkVmFsdWVCb2R5Pigqc3RhdGUsICJzZXJpYWxpemVkVmFsdWUiKTsKKyAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TZXJpYWxpemVkVmFsdWVCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgInNlcmlhbGl6ZWRWYWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVjb3JkQm9keShK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoUmVjb3JkQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byByZWNvcmRQYXJhbWV0ZXIg
PSBjb252ZXJ0PElETFJlY29yZDxJRExET01TdHJpbmcsIElETExvbmc+Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gcmVjb3JkUGFyYW1ldGVyID0gY29udmVydDxJ
RExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoUmVjb3Jk
KFdURk1vdmUocmVjb3JkUGFyYW1ldGVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVjb3JkKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9i
aj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoUmVjb3JkQm9keT4o
KnN0YXRlLCAibWV0aG9kV2l0aFJlY29yZCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhSZWNvcmRC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhSZWNvcmQi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
bkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBw
cm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNl
cHRpb24oKSk7CisgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0
aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoRXhjZXB0aW9uQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0aEV4Y2VwdGlvbiIpOworICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgIm1ldGhvZFdpdGhFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2Vw
dGlvblJldHVybmluZ0xvbmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25n
Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExMb25nPigqc3RhdGUsIHRocm93U2NvcGUsIGlt
cGwubWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmcoKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZygpKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0
aW9uUmV0dXJuaW5nTG9uZ0JvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5p
bmdMb25nIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ0xvbmdCb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhFeGNlcHRpb25S
ZXR1cm5pbmdMb25nIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmpl
Y3RCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVz
dE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3RCb2R5KEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJh
bWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvblJldHVy
bmluZ09iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVy
ZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2Jq
ZWN0KCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3QoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9u
UmV0dXJuaW5nT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0Qm9keT4oKnN0YXRlLCAi
bWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdCIpOworICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3RCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgIm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdPYmplY3QiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q3VzdG9tTWV0aG9kQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kKCpzdGF0ZSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZEJvZHk+KCpzdGF0
ZSwgImN1c3RvbU1ldGhvZCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZEJvZHk+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiY3VzdG9tTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3Rv
bU1ldGhvZFdpdGhBcmdzQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJnc0JvZHkoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2RXaXRoQXJncygq
c3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1l
dGhvZFdpdGhBcmdzKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0
b21NZXRob2RXaXRoQXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJnc0JvZHk+KCpzdGF0ZSwgImN1
c3RvbU1ldGhvZFdpdGhBcmdzIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+
OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3NCb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImN1c3RvbU1ldGhvZFdpdGhBcmdz
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2RCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2RCb2R5KEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKLSAgICBhdXRvIGFyZ3VtZW50ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBhcmd1bWVudCA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqc3Rh
dGUsIGltcGwucHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
aW1wbC5wcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1lbnQpKSkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhv
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblByaXZhdGVN
ZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblBy
aXZhdGVNZXRob2RCb2R5LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUs
ICJwcml2YXRlTWV0aG9kIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+Ojpj
YWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZEJvZHksIENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAicHJpdmF0ZU1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aG9kQm9keShK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25QdWJsaWNBbmRQcml2YXRlTWV0aG9kQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBhcmd1bWVudCA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwor
ICAgIGF1dG8gYXJndW1lbnQgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZh
dGVNZXRob2QoV1RGTW92ZShhcmd1bWVudCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwucHVibGljQW5k
UHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVN
ZXRob2QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJs
aWNBbmRQcml2YXRlTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aG9kQm9keT4oKnN0YXRlLCAicHVibGljQW5k
UHJpdmF0ZU1ldGhvZCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2Fs
bDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVNZXRob2RCb2R5Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInB1YmxpY0FuZFByaXZhdGVNZXRob2Qi
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lckJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lckJvZHko
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKLSAgICBhdXRvIGxpc3RlbmVyID0gY29udmVydDxJRExFdmVudExpc3RlbmVyPEpTRXZlbnRM
aXN0ZW5lcj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCAqY2FzdGVkVGhp
cyk7CisgICAgYXV0byBsaXN0ZW5lciA9IGNvbnZlcnQ8SURMRXZlbnRMaXN0ZW5lcjxKU0V2ZW50
TGlzdGVuZXI+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgxKSwgKmNhc3RlZFRoaXMpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byB1c2VDYXB0dXJlID0gY29udmVydDxJRExC
b29sZWFuPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgyKSk7CisgICAgYXV0byB1c2VDYXB0dXJl
ID0gY29udmVydDxJRExCb29sZWFuPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5h
cmd1bWVudCgyKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBpbXBsLmFkZEV2ZW50TGlzdGVuZXIoV1RGTW92ZSh0eXBlKSwgV1RG
TW92ZShsaXN0ZW5lciksIFdURk1vdmUodXNlQ2FwdHVyZSkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0
ZW5lckJvZHk+KCpzdGF0ZSwgImFkZEV2ZW50TGlzdGVuZXIiKTsKKyAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVu
dExpc3RlbmVyQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJhZGRFdmVu
dExpc3RlbmVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXJCb2R5KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2
ZW50TGlzdGVuZXJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHR5cGUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBsaXN0ZW5lciA9IGNvbnZlcnQ8SURMRXZlbnRM
aXN0ZW5lcjxKU0V2ZW50TGlzdGVuZXI+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgKmNhc3RlZFRoaXMpOworICAgIGF1dG8gbGlzdGVuZXIgPSBjb252ZXJ0PElETEV2ZW50
TGlzdGVuZXI8SlNFdmVudExpc3RlbmVyPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlzKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gdXNlQ2FwdHVy
ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMikpOworICAg
IGF1dG8gdXNlQ2FwdHVyZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMikpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5yZW1vdmVFdmVudExpc3RlbmVy
KFdURk1vdmUodHlwZSksIFdURk1vdmUobGlzdGVuZXIpLCBXVEZNb3ZlKHVzZUNhcHR1cmUpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZl
bnRMaXN0ZW5lcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRl
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blJlbW92ZUV2ZW50TGlzdGVuZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXJCb2R5Pigqc3RhdGUsICJyZW1vdmVFdmVu
dExpc3RlbmVyIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lckJvZHk+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoRXhlY1N0YXRlVm9pZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNTdGF0ZVZvaWRCb2R5KEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJh
bWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaW1wbC53aXRoRXhlY1N0
YXRlVm9pZCgqc3RhdGUpOworICAgIGltcGwud2l0aEV4ZWNTdGF0ZVZvaWQoKmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNTdGF0ZVZvaWQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlVm9pZChK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNT
dGF0ZVZvaWRCb2R5Pigqc3RhdGUsICJ3aXRoRXhlY1N0YXRlVm9pZCIpOworICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhFeGVjU3RhdGVWb2lkQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ3
aXRoRXhlY1N0YXRlVm9pZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
RXhlY1N0YXRlT2JqQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0
T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9i
aj4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhFeGVjU3Rh
dGVPYmooKnN0YXRlKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRl
cmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIGltcGwud2l0aEV4ZWNTdGF0ZU9iaigqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNTdGF0ZU9iaihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNT
dGF0ZU9iakJvZHk+KCpzdGF0ZSwgIndpdGhFeGVjU3RhdGVPYmoiKTsKKyAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
RXhlY1N0YXRlT2JqQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ3aXRo
RXhlY1N0YXRlT2JqIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVWb2lkRXhjZXB0aW9uQm9keShK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoRXhlY1N0YXRlVm9pZEV4Y2VwdGlvbkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJv
d1Njb3BlLCBpbXBsLndpdGhFeGVjU3RhdGVWb2lkRXhjZXB0aW9uKCpzdGF0ZSkpOworICAgIHBy
b3BhZ2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC53
aXRoRXhlY1N0YXRlVm9pZEV4Y2VwdGlvbigqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aEV4ZWNTdGF0ZVZvaWRFeGNlcHRpb24oSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlVm9pZEV4Y2VwdGlvbihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNT
dGF0ZVZvaWRFeGNlcHRpb25Cb2R5Pigqc3RhdGUsICJ3aXRoRXhlY1N0YXRlVm9pZEV4Y2VwdGlv
biIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVWb2lkRXhjZXB0aW9uQm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ3aXRoRXhlY1N0YXRlVm9pZEV4Y2VwdGlvbiIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqRXhjZXB0aW9uQm9keShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2Jq
RXhjZXB0aW9uQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLndp
dGhFeGVjU3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aEV4ZWNTdGF0
ZU9iakV4Y2VwdGlvbigqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqRXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNT
dGF0ZU9iakV4Y2VwdGlvbkJvZHk+KCpzdGF0ZSwgIndpdGhFeGVjU3RhdGVPYmpFeGNlcHRpb24i
KTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqRXhjZXB0aW9uQm9keT4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICJ3aXRoRXhlY1N0YXRlT2JqRXhjZXB0aW9uIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKmNvbnRleHQpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEJvZHk+KCpzdGF0ZSwgIndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Iik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
RXhlY1N0YXRlQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUJv
ZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFy
YW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGltcGwud2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGUoKnN0YXRlLCAqY29udGV4dCk7CisgICAg
aW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZSgqanNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCksICpjYWxsRnJhbWUsICpjb250ZXh0
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNT
dGF0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVCb2R5Pigqc3RhdGUsICJ3aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZSIpOworICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YWxsRnJhbWUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZSIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbkJv
ZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVPYmpFeGNlcHRpb25C
b2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbigqc3RhdGUsICpjb250ZXh0KSkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVPYmpFeGNlcHRpb24o
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLCAqY2FsbEZy
YW1lLCAqY29udGV4dCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0
YXRlT2JqRXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
c3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVPYmpFeGNlcHRpb24o
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlT2JqRXhjZXB0aW9uQm9keT4oKnN0YXRlLCAi
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVPYmpFeGNlcHRpb24iKTsKKyAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlv
bkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAid2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVPYmpFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQm9keShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXNCb2R5KEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMSW50ZXJmYWNlPFRlc3RPYmo+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXMo
KnN0YXRlLCAqY29udGV4dCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
SW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRl
V2l0aFNwYWNlcygqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCksICpjYWxsRnJhbWUsICpjb250ZXh0KSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRo
U3BhY2VzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXNCb2R5Pigqc3Rh
dGUsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXMiKTsK
KyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFj
ZXNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlcyIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1l
bnRBcmd1bWVudEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV2l0aERvY3VtZW50QXJndW1lbnRCb2R5KEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgp
KTsKQEAgLTY0NzcsMTQwNCArNjQ4MCwxNDMxIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVu
dEFyZ3VtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aERvY3VtZW50QXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50Qm9keT4oKnN0YXRlLCAid2l0aERvY3Vt
ZW50QXJndW1lbnQiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudEJvZHk+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAid2l0aERvY3VtZW50QXJndW1lbnQiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aENhbGxlckRvY3VtZW50QXJndW1lbnRCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVu
dEFyZ3VtZW50Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGF1dG8qIGluY3VtYmVudERvY3VtZW50ID0gaW5jdW1iZW50RE9NV2luZG93KCpzdGF0
ZSkuZG9jdW1lbnQoKTsKKyAgICBhdXRvKiBpbmN1bWJlbnREb2N1bWVudCA9IGluY3VtYmVudERP
TVdpbmRvdygqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCks
ICpjYWxsRnJhbWUpLmRvY3VtZW50KCk7CiAgICAgaWYgKCFpbmN1bWJlbnREb2N1bWVudCkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLndp
dGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50KCppbmN1bWJlbnREb2N1bWVudCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVudEFy
Z3VtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0
aENhbGxlckRvY3VtZW50QXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmpl
Y3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50Qm9keT4oKnN0YXRlLCAi
d2l0aENhbGxlckRvY3VtZW50QXJndW1lbnQiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1l
bnRBcmd1bWVudEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAid2l0aENh
bGxlckRvY3VtZW50QXJndW1lbnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50
Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93QXJndW1lbnRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaW1wbC53aXRoQ2FsbGVyV2luZG93QXJndW1l
bnQoaW5jdW1iZW50RE9NV2luZG93KCpzdGF0ZSkpOworICAgIGltcGwud2l0aENhbGxlcldpbmRv
d0FyZ3VtZW50KGluY3VtYmVudERPTVdpbmRvdygqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bGV4aWNhbEdsb2JhbE9iamVjdCksICpjYWxsRnJhbWUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3VtZW50KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRv
d0FyZ3VtZW50KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoQ2FsbGVyV2luZG93QXJndW1lbnRCb2R5Pigqc3RhdGUsICJ3aXRoQ2FsbGVyV2luZG93
QXJndW1lbnQiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyV2luZG93QXJndW1lbnRCb2R5PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudCIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bEFyZ0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8
Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElE
TExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKSk7CisgICAgYXV0byBvcHQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+
KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURM
TG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJnKFdURk1vdmUob3B0KSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEFyZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEFyZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7
Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0
aE9wdGlvbmFsQXJnIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxs
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJtZXRob2RXaXRoT3B0aW9uYWxBcmciKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWVCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IDY2NiA6IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gb3B0ID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKG9wdCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxB
cmdBbmREZWZhdWx0VmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVO
VVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0
T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFy
Z0FuZERlZmF1bHRWYWx1ZUJvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERl
ZmF1bHRWYWx1ZSIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRW
YWx1ZUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aE9w
dGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25h
bEFyZ0FuZE9wdGlvbmFsQXJnQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRp
b25hbEFyZ0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gbm9uT3B0ID0gY29udmVydDxJRExMb25nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gbm9uT3B0ID0gY29udmVy
dDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8
Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CisgICAgYXV0byBvcHQgPSBjYWxsRnJhbWUt
PmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46
OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+
KGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0
aW9uYWxBcmcoV1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRPcHRpb25hbEFyZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0
YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9i
aj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRPcHRpb25hbEFyZ0JvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZE9wdGlvbmFsQXJnIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxs
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0
aW9uYWxBcmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kVHdvT3B0aW9uYWxBcmdzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBub25PcHQgPSBjb252
ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBu
b25PcHQgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gb3B0MSA9IHN0YXRlLT5hcmd1bWVudCgx
KS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBl
PigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElE
TExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CisgICAgYXV0byBv
cHQxID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29u
dmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExv
bmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9wdDIgPSBzdGF0ZS0+
YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6
UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4o
Y29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSkpOwor
ICAgIGF1dG8gb3B0MiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IE9w
dGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZl
cnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgyKSkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoV1RGTW92ZShub25PcHQpLCBX
VEZNb3ZlKG9wdDEpLCBXVEZNb3ZlKG9wdDIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9u
YWxBcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46
OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRUd29PcHRpb25hbEFyZ3NCb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRUd29PcHRpb25hbEFyZ3MiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46
OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRUd29PcHRpb25hbEFyZ3NCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
Im1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0Jv
ZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFy
YW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
IHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBjb252
ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwor
ICAgIGF1dG8gc3RyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3Ry
aW5nKCkgOiBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxT
dHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdCb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmciKTsKKyAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmlu
Z0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBj
b252ZXJ0PElETFVTVlN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OworICAgIGF1dG8gc3RyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8g
U3RyaW5nKCkgOiBjb252ZXJ0PElETFVTVlN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxVU1ZTdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNW
U3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdCb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoT3B0aW9u
YWxVU1ZTdHJpbmciKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdCb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhPcHRpb25hbFVT
VlN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nQm9keShKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBudWxsQXRvbSgpIDogY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJ
RExET01TdHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAg
YXV0byBzdHIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRv
bSgpIDogY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRv
bVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEF0b21TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxP
YmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJpbmdCb2R5Pigqc3Rh
dGUsICJtZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nIik7CisgICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsQXRvbVN0cmluZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAibWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWVCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
Z0FuZERlZmF1bHRWYWx1ZUJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpT
VGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
ID8gImZvbyJfcyA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBzdHIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyAiZm9vIl9zIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0
aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUoc3RyKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0aE9w
dGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWUiKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0FuZERlZmF1bHRWYWx1ZUJvZHkoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0FuZERlZmF1bHRWYWx1ZUJvZHkoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHN0ciA9IHN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gQXRvbVN0cmluZygiZm9vIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpIDogY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExE
T01TdHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0
byBzdHIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBBdG9tU3RyaW5n
KCJmb28iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgOiBjb252ZXJ0PElETEF0
b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
QXRvbVN0cmluZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3Ry
aW5nQW5kRGVmYXVsdFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0FuZERlZmF1bHRWYWx1ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXRvbVN0cmluZ0FuZERlZmF1bHRWYWx1ZUJvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhP
cHRpb25hbEF0b21TdHJpbmdBbmREZWZhdWx0VmFsdWUiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0
aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBdG9tU3RyaW5nQW5kRGVmYXVsdFZhbHVlQm9keT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsICJtZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nQW5kRGVmYXVsdFZh
bHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbEJvZHkoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBzdHIgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbChXVEZNb3ZlKHN0cikpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdJc051bGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
Z0lzTnVsbEJvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbCIpOwor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbEJvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBzdHIgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChXVEZNb3Zl
KHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZp
bmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZEJvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhP
cHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
U3RyaW5nSXNVbmRlZmluZWRCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
Im1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEF0b21TdHJpbmdJc051bGxCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21T
dHJpbmdJc051bGxCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IG51
bGxBdG9tKCkgOiBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHN0ciA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IG51bGxBdG9tKCkgOiBjb252ZXJ0PElE
TEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsQXRvbVN0cmluZ0lzTnVsbChXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNO
dWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzTnVsbChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzTnVsbEJv
ZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJpbmdJc051bGwiKTsKKyAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNOdWxsQm9keT4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICJtZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNOdWxs
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmdCb2R5KEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmdCb2R5KEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBjb252ZXJ0PElETERPTVN0
cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gc3Ry
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lz
RW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxP
YmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmdC
b2R5Pigqc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nIik7Cisg
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZ0JvZHk+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNF
bXB0eVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5
U3RyaW5nQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nQm9k
eShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFt
ZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
c3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDog
Y29udmVydDxJRExVU1ZTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBhdXRvIHN0ciA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/
IGVtcHR5U3RyaW5nKCkgOiBjb252ZXJ0PElETFVTVlN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
T3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVT
VlN0cmluZ0lzRW1wdHlTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0aE9wdGlv
bmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bFVTVlN0cmluZ0lzRW1wdHlTdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgIm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmciKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzRW1wdHlTdHJpbmdCb2R5KEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFy
YW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbEF0b21TdHJpbmdJc0VtcHR5U3RyaW5nQm9keShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eUF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmlu
Z0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOworICAgIGF1dG8gc3RyID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
ID8gZW1wdHlBdG9tKCkgOiBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmlu
Zz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzRW1wdHlTdHJpbmcoV1RG
TW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzRW1wdHlTdHJpbmcoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9t
U3RyaW5nSXNFbXB0eVN0cmluZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7
Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzRW1wdHlTdHJpbmdCb2R5
Pigqc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNFbXB0eVN0cmluZyIpOwor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJpbmdJc0VtcHR5U3RyaW5nQm9keT4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJtZXRob2RXaXRoT3B0aW9uYWxBdG9t
U3RyaW5nSXNFbXB0eVN0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJ
c05hTkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU5Cb2R5KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBudW1iZXIgPSBjb252
ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwor
ICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0
aE9wdGlvbmFsRG91YmxlSXNOYU4oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNO
YU4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxEb3VibGVJc05hTihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU5Cb2R5Pigqc3RhdGUs
ICJtZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTiIpOworICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbERvdWJsZUlzTmFOQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJtZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxGbG9hdElzTmFOQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOQm9keShK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSog
Y2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbnVt
YmVyID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOworICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEZs
b2F0SXNOYU4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOQm9keT4oKnN0
YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05hTiIpOworICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEZsb2F0SXNOYU5Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgIm1ldGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4iKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsTG9uZ0xvbmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nQm9keShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2Fs
bEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbnVtYmVy
ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8
SURMTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETExvbmdM
b25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpKTsKKyAgICBhdXRvIG51bWJlciA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nTG9uZz46OlJl
dHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+OjpSZXR1cm5UeXBl
Pihjb252ZXJ0PElETExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxMb25nTG9u
ZyhXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0
aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxMb25nTG9uZ0JvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25n
Iik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdCb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nIik7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvQm9keShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxMb25nTG9uZ0lzWmVyb0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMTG9uZ0xvbmc+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURM
TG9uZ0xvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oV1RGTW92ZShudW1iZXIp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVybyhKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsTG9uZ0xvbmdJc1plcm9Cb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxMb25nTG9u
Z0lzWmVybyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvQm9k
eT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJtZXRob2RXaXRoT3B0aW9uYWxM
b25nTG9uZ0lzWmVybyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdM
b25nQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nQm9keShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbnVtYmVyID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9u
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKKyAgICBhdXRvIG51bWJl
ciA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZl
cnRlcjxJRExVbnNpZ25lZExvbmdMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZl
cnRlcjxJRExVbnNpZ25lZExvbmdMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExVbnNpZ25l
ZExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nKFdU
Rk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25l
ZExvbmdMb25nKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nQm9keT4oKnN0YXRlLCAibWV0aG9k
V2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbFVuc2lnbmVkTG9uZ0xvbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmciKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVyb0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsVW5zaWduZWRMb25nTG9uZ0lzWmVyb0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nTG9uZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1dG8gbnVtYmVyID0g
Y29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT5hcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9u
Z0xvbmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lz
WmVybyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8oSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJB
TShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2Fs
bDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9u
Z0xvbmdJc1plcm9Cb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdM
b25nSXNaZXJvIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9u
Z0lzWmVyb0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0
aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxTZXF1ZW5jZUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VCb2R5KEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcnJheSA9
IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNl
PElETERPTVN0cmluZz4+OjpSZXR1cm5UeXBleyB9IDogY29udmVydDxJRExTZXF1ZW5jZTxJRExE
T01TdHJpbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0
byBhcnJheSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRl
cjxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURM
U2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5j
ZShXVEZNb3ZlKGFycmF5KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFNlcXVlbmNlQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2Ui
KTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUJvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5Qm9keShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHlCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhcnJheSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1Vu
ZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+OjpSZXR1cm5U
eXBleyB9IDogY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhcnJheSA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExET01TdHJp
bmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkoV1RGTW92ZShhcnJheSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbFNlcXVlbmNlSXNFbXB0eUJvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFNlcXVl
bmNlSXNFbXB0eSIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0
eUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aE9wdGlv
bmFsU2VxdWVuY2VJc0VtcHR5Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5C
b2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9i
aj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBiID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMQm9vbGVhbj46OlJldHVyblR5
cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMQm9vbGVhbj46OlJldHVyblR5cGU+KGNvbnZl
cnQ8SURMQm9vbGVhbj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKKyAg
ICBhdXRvIGIgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25h
bDxDb252ZXJ0ZXI8SURMQm9vbGVhbj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0
ZXI8SURMQm9vbGVhbj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMQm9vbGVhbj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbihXVEZNb3ZlKGIpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEJvb2xlYW4oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Cb2R5Pigqc3RhdGUsICJtZXRob2RXaXRo
T3B0aW9uYWxCb29sZWFuIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+Ojpj
YWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbkJv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aE9wdGlvbmFs
Qm9vbGVhbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZUJvZHko
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2VCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBiID0gY29udmVydDxJRExCb29s
ZWFuPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7CisgICAgYXV0byBiID0gY29udmVydDxJ
RExCb29sZWFuPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKFdURk1vdmUoYikpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxCb29sZWFuSXNGYWxzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxC
b29sZWFuSXNGYWxzZUJvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0Zh
bHNlIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2VCb2R5Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhPcHRpb25hbEJvb2xl
YW5Jc0ZhbHNlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFueUJvZHkoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQW55Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMQW55Pigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSk7CisgICAgYXV0byBhID0gY29udmVydDxJRExBbnk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
QW55KFdURk1vdmUoYSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbnkoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFueUJv
ZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbEFueSIpOworICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEFueUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0
aG9kV2l0aE9wdGlvbmFsQW55Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iamVjdEJv
ZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETE9iamVjdD46OlJldHVyblR5cGU+
KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMT2JqZWN0Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJ
RExPYmplY3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CisgICAgYXV0
byBhID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29u
dmVydGVyPElETE9iamVjdD46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURM
T2JqZWN0Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExPYmplY3Q+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhPcHRpb25hbE9iamVjdChXVEZNb3ZlKGEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2JqZWN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsT2Jq
ZWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxPYmplY3RCb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoT3B0aW9uYWxPYmpl
Y3QiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxPYmplY3RCb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhPcHRpb25hbE9iamVjdCIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbE51bGxhYmxlV3JhcHBlckJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG9iaiA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50
ZXJmYWNlPFRlc3RPYmo+Pj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFtdKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgIm9iaiIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhP
cHRpb25hbE51bGxhYmxlV3JhcHBlciIsICJUZXN0T2JqIik7IH0pOworICAgIGF1dG8gb2JqID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqIiwgIlRlc3RP
YmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVyIiwgIlRlc3RPYmoiKTsg
fSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcihXVEZNb3ZlKG9i
aikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXIoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbE51bGxhYmxlV3JhcHBlckJvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbE51
bGxhYmxlV3JhcHBlciIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2Fs
bDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3Jh
cHBlckJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aE9w
dGlvbmFsTnVsbGFibGVXcmFwcGVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxh
YmxlV3JhcHBlcklzTnVsbEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVy
SXNOdWxsQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+
Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVX
cmFwcGVySXNOdWxsIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBvYmogPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJt
ZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwiLCAiVGVzdE9iaiIpOyB9KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsKFdURk1vdmUo
b2JqKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3Jh
cHBlcklzTnVsbChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsQm9keT4oKnN0YXRlLCAi
bWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsIik7CisgICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsQm9keT4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051
bGwiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyQm9keShKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byByZXNvbHZlciA9IGNvbnZlcnQ8SURM
TnVsbGFibGU8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAicmVz
b2x2ZXIiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIi
LCAiWFBhdGhOU1Jlc29sdmVyIik7IH0pOworICAgIGF1dG8gcmVzb2x2ZXIgPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETFhQYXRoTlNSZXNvbHZlcjxYUGF0aE5TUmVzb2x2ZXI+Pj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInJlc29sdmVy
IiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQ
YXRoTlNSZXNvbHZlciIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jl
c29sdmVyKFdURk1vdmUocmVzb2x2ZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsWFBhdGhOU1Jlc29sdmVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXJCb2R5Pigqc3RhdGUs
ICJtZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIiKTsKKyAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgIm1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxSZWNvcmRCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZEJv
ZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFy
YW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
IHJlY29yZCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gV1RGOjpudWxsb3B0
IDogY29udmVydDxJRExOdWxsYWJsZTxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHJlY29yZCA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFdURjo6bnVsbG9wdCA6IGNv
bnZlcnQ8SURMTnVsbGFibGU8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9uZz4+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBp
bXBsLm1ldGhvZFdpdGhPcHRpb25hbFJlY29yZChXVEZNb3ZlKHJlY29yZCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxS
ZWNvcmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxSZWNvcmQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29yZEJvZHk+KCpzdGF0ZSwgIm1ldGhv
ZFdpdGhPcHRpb25hbFJlY29yZCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlY29y
ZEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibWV0aG9kV2l0aE9wdGlv
bmFsUmVjb3JkIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFByb21pc2VCb2R5KEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFByb21pc2VCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBwcm9taXNlID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBudWxscHRyIDogY29udmVydDxJRExQcm9taXNlPElETFZvaWQ+Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBwcm9taXNlID0gY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbHB0ciA6IGNvbnZlcnQ8SURM
UHJvbWlzZTxJRExWb2lkPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxQcm9taXNlKFdURk1v
dmUocHJvbWlzZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxQcm9taXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsUHJvbWlzZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
UHJvbWlzZUJvZHk+KCpzdGF0ZSwgIm1ldGhvZFdpdGhPcHRpb25hbFByb21pc2UiKTsKKyAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxQcm9taXNlQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYWxsRnJhbWUsICJtZXRob2RXaXRoT3B0aW9uYWxQcm9taXNlIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhDYWxsYmFja0FyZ0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnQm9keShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
Ci0gICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0
Q2FsbGJhY2tJbnRlcmZhY2U+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Io
c3RhdGUsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoQ2Fs
bGJhY2tBcmciKTsgfSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJm
YWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0
aENhbGxiYWNrQXJnIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQ2FsbGJhY2tBcmcoY2FsbGJh
Y2sucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNr
QXJnQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0aENhbGxiYWNrQXJnIik7CisgICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrQXJnQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJtZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNr
QXJnQW5kQ2FsbGJhY2tBcmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8SURMTG9u
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIG5vbkNhbGxiYWNr
ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFj
a0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVz
dEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0
IiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7IH0pOworICAgIGF1
dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNr
SW50ZXJmYWNlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmciKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENh
bGxiYWNrQXJnKFdURk1vdmUobm9uQ2FsbGJhY2spLCBjYWxsYmFjay5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdCb2R5Pigqc3RhdGUsICJtZXRob2RX
aXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyIpOworICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YWxsRnJhbWUsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyIpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0JvZHkoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmdCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
Q2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pj4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0
QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3Qi
LCAibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciKTsgfSk7CisgICAgYXV0byBjYWxs
YmFjayA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2Fs
bGJhY2tJbnRlcmZhY2U+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0Fy
Z3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwg
ImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmciKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25h
bEFyZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdCb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoQ2Fs
bGJhY2tBbmRPcHRpb25hbEFyZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9w
dGlvbmFsQXJnQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJtZXRob2RX
aXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tG
dW5jdGlvbkFyZ0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdCb2R5KEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0Z1bmN0aW9uPEpTVGVz
dENhbGxiYWNrRnVuY3Rpb24+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Io
c3RhdGUsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoQ2Fs
bGJhY2tGdW5jdGlvbkFyZyIpOyB9KTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhDYWxs
YmFja0Z1bmN0aW9uQXJnKGNhbGxiYWNrLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5j
dGlvbkFyZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0JvZHk+KCpz
dGF0ZSwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnIik7CisgICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aENhbGxiYWNrRnVuY3Rpb25BcmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgIm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmdCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmdCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRv
IG5vbkNhbGxiYWNrID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
IDwgMikpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCkpOworICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8g
Y2FsbGJhY2sgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5j
dGlvbj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCAqY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihzdGF0ZSwgc2NvcGUs
IDEsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0Fu
ZENhbGxiYWNrRnVuY3Rpb25BcmciKTsgfSk7CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8
SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFy
ZyhXVEZNb3ZlKG5vbkNhbGxiYWNrKSwgY2FsbGJhY2sucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0Z1bmN0aW9uQXJnKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnQm9keT4o
KnN0YXRlLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIp
OworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25B
cmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENh
bGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZ0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrRnVu
Y3Rpb25BbmRPcHRpb25hbEFyZ0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJRExOdWxsYWJsZTxJRExD
YWxsYmFja0Z1bmN0aW9uPEpTVGVzdENhbGxiYWNrRnVuY3Rpb24+Pj4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVG
dW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAi
bWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOyB9KTsKKyAgICBhdXRv
IGNhbGxiYWNrID0gY29udmVydDxJRExOdWxsYWJsZTxJRExDYWxsYmFja0Z1bmN0aW9uPEpTVGVz
dENhbGxiYWNrRnVuY3Rpb24+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
MCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25B
bmRPcHRpb25hbEFyZyIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25B
bmRPcHRpb25hbEFyZyhXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0
aW9uYWxBcmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46
OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlv
bkFuZE9wdGlvbmFsQXJnQm9keT4oKnN0YXRlLCAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25B
bmRPcHRpb25hbEFyZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2Fs
bDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5k
T3B0aW9uYWxBcmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhv
ZFdpdGhDYWxsYmFja0Z1bmN0aW9uQW5kT3B0aW9uYWxBcmciKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNN
ZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhDYWxs
YmFja0FuZE9wdGlvbmFsQXJnQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51
bGxhYmxlPElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihz
dGF0ZSwgc2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgInN0YXRpY01ldGhvZFdp
dGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7IH0pOworICAgIGF1dG8gY2FsbGJhY2sgPSBjb252
ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJm
YWNlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCAqanND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCksIFtdKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgInN0YXRpY01ldGhvZFdpdGhDYWxs
YmFja0FuZE9wdGlvbmFsQXJnIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmcoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblN0YXRpY01ldGhvZFdpdGhDYWxsYmFj
a0FuZE9wdGlvbmFsQXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
c3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpjYWxsU3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRo
b2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0JvZHk+KCpzdGF0ZSwgInN0YXRpY01ldGhvZFdp
dGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpjYWxsU3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRo
b2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FsbEZyYW1lLCAic3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRo
Q2FsbGJhY2tBcmdCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGNhbGxiYWNrID0g
Y29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCAqanNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIFtdKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgInN0YXRp
Y01ldGhvZFdpdGhDYWxsYmFja0FyZyIpOyB9KTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURM
Q2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgKmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAi
Y2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsg
fSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBUZXN0T2JqOjpzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmcoY2FsbGJhY2sucmVs
ZWFzZU5vbk51bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
ckZ1bmN0aW9uU3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBcmco
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Y2FsbFN0YXRpYzxqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
U3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnQm9keT4oKnN0YXRlLCAic3RhdGljTWV0aG9kV2l0
aENhbGxiYWNrQXJnIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxs
U3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2FsbGJh
Y2tBcmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInN0YXRpY01ldGhv
ZFdpdGhDYWxsYmFja0FyZyIpOwogfQogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25k
aXRpb25hbE1ldGhvZDFCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMUJvZHkoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGltcGwuY29uZGl0aW9uYWxNZXRob2QxKCkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgaW1wbC5jb25kaXRpb25hbE1ldGhvZDEoKSkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9u
YWxNZXRob2QxKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q29uZGl0aW9uYWxNZXRob2QxKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDFCb2R5Pigqc3RhdGUsICJjb25kaXRpb25hbE1l
dGhvZDEiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDFCb2R5PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgImNvbmRpdGlvbmFsTWV0aG9kMSIpOwogfQogCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRp
dGlvbmFsTWV0aG9kMkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyQm9keShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGltcGwuY29uZGl0aW9uYWxNZXRo
b2QyKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bmRpdGlvbmFsTWV0aG9kMihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kMihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9i
amVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyQm9keT4oKnN0YXRlLCAiY29uZGl0
aW9uYWxNZXRob2QyIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxs
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QyQm9keT4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJjb25kaXRpb25hbE1ldGhvZDIiKTsKIH0KIAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db25kaXRpb25hbE1ldGhvZDNCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0JvZHkoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpbXBsLmNvbmRpdGlv
bmFsTWV0aG9kMygpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbE1ldGhvZDMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0JvZHk+KCpzdGF0ZSwg
ImNvbmRpdGlvbmFsTWV0aG9kMyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0JvZHk+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiY29uZGl0aW9uYWxNZXRob2QzIik7
CiB9CiAKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUJvZHkoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDFCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2Jq
Pj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0
aG9kIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxh
YmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVj
dCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHN0ckFyZyA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KSk7CisgICAgYXV0byBzdHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVy
bG9hZGVkTWV0aG9kKFdURk1vdmUob2JqQXJnKSwgV1RGTW92ZShzdHJBcmcpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxh
YmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVz
dE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBv
YmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoi
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQo
KSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFs
PENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSkpOworICAgIGF1dG8gbG9uZ0FyZyA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExM
b25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJu
VHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgxKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUo
b2JqQXJnKSwgV1RGTW92ZShsb25nQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNCb2R5KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2QzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShzdHJBcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kNEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBsb25nQXJnID0gY29udmVydDxJRExM
b25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBsb25n
QXJnID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShs
b25nQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDVCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1Qm9keShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2Fs
bEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gY2FsbGJh
Y2sgPSBjb252ZXJ0PElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNl
Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKHN0YXRlLCBzY29wZSwgMCwg
ImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIpOyB9KTsKKyAgICBh
dXRvIGNhbGxiYWNrID0gY29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFj
a0ludGVyZmFjZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFtdKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IDAsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiKTsgfSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoY2FsbGJhY2sucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDZCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFt
ZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbGlzdEFyZyA9IGNvbnZlcnQ8SURM
TnVsbGFibGU8SURMSW50ZXJmYWNlPERPTVN0cmluZ0xpc3Q+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgImxp
c3RBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIkRPTVN0cmluZ0xpc3Qi
KTsgfSk7CisgICAgYXV0byBsaXN0QXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8RE9NU3RyaW5nTGlzdD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAibGlzdEFyZyIsICJUZXN0T2JqZWN0IiwgIm92
ZXJsb2FkZWRNZXRob2QiLCAiRE9NU3RyaW5nTGlzdCIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRl
ZE1ldGhvZChXVEZNb3ZlKGxpc3RBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kN0JvZHkoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZDdCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgYXV0byBhcnJheUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMU2VxdWVuY2U8SURM
RE9NU3RyaW5nPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIGFycmF5QXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJp
bmc+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJyYXlBcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kOEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDhCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETElu
dGVyZmFjZTxUZXN0T2JqPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtd
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0Fy
Z3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0Iiwg
Im92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKKyAgICBhdXRvIG9iakFyZyA9IGNv
bnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmpl
Y3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9h
ZGVkTWV0aG9kKCpvYmpBcmcpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
OUJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIHdpbmRvdyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFdpbmRvd1Byb3h5Pj4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgMCwgIndpbmRvdyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiV2luZG93
UHJveHkiKTsgfSk7CisgICAgYXV0byB3aW5kb3cgPSBjb252ZXJ0PElETEludGVyZmFjZTxXaW5k
b3dQcm94eT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsIDAsICJ3aW5kb3ciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0
aG9kIiwgIldpbmRvd1Byb3h5Iik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKCp3aW5k
b3cpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QxMEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwQm9keShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJyYXlBcmcg
PSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFycmF5QXJnID0gY29udmVydDxJRExTZXF1ZW5j
ZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFy
ZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QxMUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExQm9keShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYXJyYXlBcmcg
PSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFycmF5QXJnID0gY29udmVydDxJRExTZXF1
ZW5jZTxJRExVbnNpZ25lZExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShh
cnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyQm9keShK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSog
Y2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gc3Ry
QXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
Lm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShzdHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTNCb2R5KEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QxM0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBhdXRvIGJsb2JBcmdzID0gY29udmVydFZhcmlhZGljQXJndW1lbnRz
PElETEludGVyZmFjZTxCbG9iPj4oKnN0YXRlLCAwKTsKKyAgICBhdXRvIGJsb2JBcmdzID0gY29u
dmVydFZhcmlhZGljQXJndW1lbnRzPElETEludGVyZmFjZTxCbG9iPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUo
YmxvYkFyZ3MpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kT3ZlcmxvYWREaXNwYXRjaGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RPdmVybG9hZERpc3BhdGNoZXIoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Cisg
ICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURf
UEFSQU0odm0pOwotICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDIsIHN0
YXRlLT5hcmd1bWVudENvdW50KCkpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxz
aXplX3Q+KDIsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50
ID09IDApIHsKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDEzQm9keShzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAg
IHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxM0JvZHko
bGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsK
ICAgICB9CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7Ci0gICAgICAgIEpTVmFsdWUgZGlzdGlu
Z3Vpc2hpbmdBcmcgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgICAgIEpTVmFs
dWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwog
ICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qy
Qm9keShzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4g
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMkJvZHkobGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICAgICAgICAg
aWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hp
bmdBcmcpLT5pbmhlcml0czxKU1Rlc3RPYmo+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyQm9keShzdGF0ZSwgY2FzdGVk
VGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMkJvZHkobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5n
QXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT5pbmhlcml0czxK
U1Rlc3RDYWxsYmFja0ludGVyZmFjZT4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDVCb2R5KHN0YXRlLCBjYXN0ZWRUaGlz
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2Q1Qm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcu
aXNPYmplY3QoKSAmJiBhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzPEpTRE9N
U3RyaW5nTGlzdD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDZCb2R5KHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q2Qm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMs
IHRocm93U2NvcGUpOwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAm
JiBhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzPEpTVGVzdE9iaj4odm0pKQot
ICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDhCb2R5KHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIHJl
dHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q4Qm9keShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAg
ICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiBhc09iamVjdChkaXN0aW5n
dWlzaGluZ0FyZyktPmluaGVyaXRzPEpTV2luZG93UHJveHk+KHZtKSkKLSAgICAgICAgICAgIHJl
dHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Qm9keShzdGF0
ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOUJvZHkobGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICAgICAgICAgaWYgKGRpc3Rp
bmd1aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT5p
bmhlcml0czxKU0Jsb2I+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxM0JvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93
U2NvcGUpOwotICAgICAgICBpZiAoaGFzSXRlcmF0b3JNZXRob2QoKnN0YXRlLCBkaXN0aW5ndWlz
aGluZ0FyZykpCi0gICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kN0JvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAg
ICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDEzQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93
U2NvcGUpOworICAgICAgICBpZiAoaGFzSXRlcmF0b3JNZXRob2QobGV4aWNhbEdsb2JhbE9iamVj
dCwgZGlzdGluZ3Vpc2hpbmdBcmcpKQorICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDdCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAgICAgICAgIGlmIChkaXN0aW5ndWlz
aGluZ0FyZy5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDVCb2R5KHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Nj
b3BlKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2Q1Qm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRo
aXMsIHRocm93U2NvcGUpOwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNOdW1iZXIo
KSkKLSAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q0Qm9keShzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJl
dHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQm9keShzdGF0
ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNEJvZHkobGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDNCb2R5KGxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAgICAgfQogICAg
IGlmIChhcmdzQ291bnQgPT0gMikgewotICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJn
ID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOworICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1
aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKICAgICAgICAgaWYg
KGRpc3Rpbmd1aXNoaW5nQXJnLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4ganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMkJvZHkoc3RhdGUsIGNhc3Rl
ZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGlu
Z0FyZy5pc09iamVjdCgpICYmIGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+aW5oZXJpdHM8
SlNCbG9iPih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZGVkTWV0aG9kMTNCb2R5KHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsK
KyAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxM0JvZHkobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0
aHJvd1Njb3BlKTsKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlzTnVtYmVyKCkpCi0g
ICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMkJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4g
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUJvZHkoc3RhdGUsIGNh
c3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxQm9keShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAgIH0KLSAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0g
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZE92ZXJsb2FkRGlzcGF0Y2hlcj4oKnN0YXRlLCAib3Zl
cmxvYWRlZE1ldGhvZCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2Fs
bDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RPdmVybG9hZERpc3Bh
dGNoZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAib3ZlcmxvYWRlZE1ldGhv
ZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMUJvZHko
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjFCb2R5KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBzdHJBcmcgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwor
ICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gb2JqQXJnID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgxKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAib2JqQXJn
IiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIs
ICJUZXN0T2JqIik7IH0pOworICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5h
cmd1bWVudCgxKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAxLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRl
ZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5v
dmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKFdURk1vdmUoc3RyQXJnKSwgV1RG
TW92ZShvYmpBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMkJvZHkoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjJCb2R5KEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5
cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0
PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmpB
cmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVy
IiwgIlRlc3RPYmoiKTsgfSk7CisgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxl
PElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIs
ICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsgfSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
LSAgICBhdXRvIGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9w
dGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZl
cnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgxKSkpOworICAgIGF1dG8gbG9uZ0FyZyA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6
UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4o
Y29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFy
YW1ldGVyKFdURk1vdmUob2JqQXJnKSwgV1RGTW92ZShsb25nQXJnKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdp
dGhPcHRpb25hbFBhcmFtZXRlck92ZXJsb2FkRGlzcGF0Y2hlcihKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aE9wdGlvbmFsUGFyYW1ldGVyT3ZlcmxvYWREaXNwYXRjaGVyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjpt
aW48c2l6ZV90PigyLCBzdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBzaXplX3QgYXJnc0Nv
dW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAg
ICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7Ci0gICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdB
cmcgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgICAgIEpTVmFsdWUgZGlzdGlu
Z3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgICAgICBp
ZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9u
YWxQYXJhbWV0ZXIyQm9keShzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAg
ICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0
aE9wdGlvbmFsUGFyYW1ldGVyMkJvZHkobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBj
YXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlz
T2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT5pbmhlcml0czxKU1Rlc3RP
Ymo+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIyQm9keShzdGF0ZSwgY2FzdGVkVGhp
cywgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIxQm9keShzdGF0ZSwgY2FzdGVk
VGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMkJvZHkobGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKKyAgICAg
ICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhP
cHRpb25hbFBhcmFtZXRlcjFCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2Fz
dGVkVGhpcywgdGhyb3dTY29wZSk7CiAgICAgfQogICAgIGlmIChhcmdzQ291bnQgPT0gMikgewot
ICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMkJvZHkoc3RhdGUsIGNh
c3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjJCb2R5KGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAg
ICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc09iamVjdCgpICYmIGFzT2JqZWN0KGRpc3Rp
bmd1aXNoaW5nQXJnKS0+aW5oZXJpdHM8SlNUZXN0T2JqPih2bSkpCi0gICAgICAgICAgICByZXR1
cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFs
UGFyYW1ldGVyMkJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwotICAgICAgICBy
ZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlv
bmFsUGFyYW1ldGVyMUJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAg
ICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdp
dGhPcHRpb25hbFBhcmFtZXRlcjJCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
Y2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIxQm9keShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAg
IH0KLSAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKSA6IHRocm93Vk1UeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0
aE9wdGlvbmFsUGFyYW1ldGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdp
dGhPcHRpb25hbFBhcmFtZXRlck92ZXJsb2FkRGlzcGF0Y2hlcj4oKnN0YXRlLCAib3ZlcmxvYWRl
ZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXJPdmVybG9hZERpc3BhdGNoZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRl
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQm9k
eShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQm9keShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZy
YW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gb2JqZWN0T3JO
b2RlID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFj
ZTxUZXN0Tm9kZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAg
YXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2Jq
PiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGhE
aXN0aW5ndWlzaGluZ1VuaW9uKFdURk1vdmUob2JqZWN0T3JOb2RlKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdp
dGhEaXN0aW5ndWlzaGluZ1VuaW9uMkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFt
ZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5n
dWlzaGluZ1VuaW9uMkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVz
dE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24oV1RGTW92ZSh2
YWx1ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbk92ZXJsb2FkRGlzcGF0
Y2hlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb25PdmVybG9hZERp
c3BhdGNoZXIoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odm0pOwotICAg
IHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIHN0YXRlLT5hcmd1bWVudENv
dW50KCkpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKLSAgICAg
ICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKKyAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc09iamVjdCgp
ICYmIGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+aW5oZXJpdHM8SlNUZXN0T2JqPih2bSkp
Ci0gICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQm9keShzdGF0ZSwgY2FzdGVkVGhpcywgdGhy
b3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24xQm9keShsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAgICAgICBpZiAo
ZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiBhc09iamVjdChkaXN0aW5ndWlzaGluZ0Fy
ZyktPmluaGVyaXRzPEpTVGVzdE5vZGU+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlv
bjFCb2R5KHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIHJldHVy
biBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vp
c2hpbmdVbmlvbjFCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhp
cywgdGhyb3dTY29wZSk7CiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc051bWJlcigp
KQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uMkJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRo
cm93U2NvcGUpOwotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24yQm9keShzdGF0ZSwgY2FzdGVkVGhp
cywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24yQm9keShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAg
ICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERp
c3Rpbmd1aXNoaW5nVW5pb24yQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNh
c3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAgIH0KLSAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAg
IHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKSA6IHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERpc3Rpbmd1aXNoaW5nVW5pb24oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0
aERpc3Rpbmd1aXNoaW5nVW5pb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbk92ZXJs
b2FkRGlzcGF0Y2hlcj4oKnN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGlu
Z1VuaW9uIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1Vu
aW9uT3ZlcmxvYWREaXNwYXRjaGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
Im92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczFCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMUJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8
SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gb2JqZWN0T3JO
b2RlID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFj
ZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5n
VW5pb25zKFdURk1vdmUob2JqZWN0T3JOb2RlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vp
c2hpbmdVbmlvbnMyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJh
dGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1Vu
aW9uczJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RJbnRlcmZh
Y2U+LCBJRExET01TdHJpbmcsIElETExvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CisgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNl
PFRlc3RJbnRlcmZhY2U+LCBJRExET01TdHJpbmcsIElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2Fk
ZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zKFdURk1vdmUodmFsdWUpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uc092ZXJsb2FkRGlzcGF0Y2hlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uc092ZXJsb2FkRGlzcGF0Y2hlcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSog
Y2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgc2l6ZV90IGFy
Z3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgc3RhdGUtPmFyZ3VtZW50Q291bnQoKSk7Cisg
ICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkpOwogICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewotICAgICAgICBKU1ZhbHVl
IGRpc3Rpbmd1aXNoaW5nQXJnID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgICAg
ICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT5pbmhlcml0czxKU1Rlc3RPYmo+KHZtKSkKLSAgICAgICAg
ICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
MkRpc3Rpbmd1aXNoaW5nVW5pb25zMUJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUp
OworICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMxQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAgICAgICBpZiAoZGlzdGlu
Z3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiBhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmlu
aGVyaXRzPEpTVGVzdE5vZGU+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zMUJv
ZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hp
bmdVbmlvbnMxQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMs
IHRocm93U2NvcGUpOwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAm
JiBhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzPEpTVGVzdEludGVyZmFjZT4o
dm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMyQm9keShzdGF0ZSwgY2FzdGVkVGhp
cywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9uczJCb2R5KGxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAgICAg
ICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc051bWJlcigpKQotICAgICAgICAgICAgcmV0dXJu
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vp
c2hpbmdVbmlvbnMyQm9keShzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7Ci0gICAgICAg
IHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRp
c3Rpbmd1aXNoaW5nVW5pb25zMkJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwor
ICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMyQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4ganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1Vu
aW9uczJCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcywgdGhy
b3dTY29wZSk7CiAgICAgfQotICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
IDogdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIGFyZ3ND
b3VudCA8IDEgPyB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpIDogdGhy
b3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vp
c2hpbmdVbmlvbnMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zT3ZlcmxvYWREaXNw
YXRjaGVyPigqc3RhdGUsICJvdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9u
cyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25z
T3ZlcmxvYWREaXNwYXRjaGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm92
ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjFCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbjFCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0
PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIG9iamVjdE9y
Tm9kZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZh
Y2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBvYmplY3QgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0
T2JqPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgMSwgIm9iamVjdCIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRN
ZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIsICJUZXN0T2JqIik7IH0pOworICAgIGF1
dG8gb2JqZWN0ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJvYmpl
Y3QiLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5n
VW5pb24iLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25E
aXN0aW5ndWlzaGluZ1VuaW9uKFdURk1vdmUob2JqZWN0T3JOb2RlKSwgKm9iamVjdCk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8SURM
VW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gb2JqZWN0T3JOb2Rl
ID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxU
ZXN0Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKLSAgICBhdXRvIG5vZGUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0Tm9kZT4+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsIDEsICJub2RlIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZFdp
dGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uIiwgIlRlc3ROb2RlIik7IH0pOworICAgIGF1dG8gbm9k
ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgIm5vZGUiLCAiVGVz
dE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24iLCAi
VGVzdE5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vp
c2hpbmdVbmlvbihXVEZNb3ZlKG9iamVjdE9yTm9kZSksICpub2RlKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0
aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb25PdmVybG9hZERpc3BhdGNoZXIoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uT3ZlcmxvYWREaXNwYXRjaGVyKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJh
bWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBzaXplX3QgYXJnc0NvdW50
ID0gc3RkOjptaW48c2l6ZV90PigyLCBzdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBzaXpl
X3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAyKSB7Ci0gICAgICAgIEpTVmFsdWUgZGlzdGlu
Z3Vpc2hpbmdBcmcgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgICAgIEpTVmFs
dWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwog
ICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiBhc09iamVjdChkaXN0
aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzPEpTVGVzdE9iaj4odm0pKQotICAgICAgICAgICAgcmV0
dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0
aW5ndWlzaGluZ1VuaW9uMUJvZHkoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAg
ICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uMUJvZHkobGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNo
aW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT5pbmhlcml0
czxKU1Rlc3ROb2RlPih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24yQm9keShz
dGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5n
VW5pb24yQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRo
cm93U2NvcGUpOwogICAgIH0KLSAgICByZXR1cm4gYXJnc0NvdW50IDwgMiA/IHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBhcmdz
Q291bnQgPCAyID8gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKSA6IHRo
cm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24oSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rp
bmd1aXNoaW5nVW5pb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAg
IHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbk92ZXJsb2Fk
RGlzcGF0Y2hlcj4oKnN0YXRlLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGlu
Z1VuaW9uIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGlu
Z1VuaW9uT3ZlcmxvYWREaXNwYXRjaGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgIm92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVV
bmlvbjFCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFVuaW9uPElETElu
dGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0
PElETE51bGxhYmxlPElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNl
PFRlc3ROb2RlPj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24oV1RGTW92ZShv
YmplY3RPck5vZGUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMkJvZHkoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRo
TnVsbGFibGVVbmlvbjJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETExvbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGltcGwub3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbihXVEZNb3ZlKGluZGV4KSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRX
aXRoTnVsbGFibGVVbmlvbk92ZXJsb2FkRGlzcGF0Y2hlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJs
ZVVuaW9uT3ZlcmxvYWREaXNwYXRjaGVyKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VE
X1BBUkFNKHZtKTsKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBz
dGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48
c2l6ZV90PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3Vu
dCA9PSAxKSB7Ci0gICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CisgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hp
bmdBcmcuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24xQm9keShzdGF0ZSwgY2Fz
dGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMUJvZHkobGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICAgICAgICAgaWYgKGRp
c3Rpbmd1aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcp
LT5pbmhlcml0czxKU1Rlc3RPYmo+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24xQm9keShzdGF0ZSwgY2Fz
dGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMUJvZHkobGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICAgICAgICAgaWYgKGRp
c3Rpbmd1aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcp
LT5pbmhlcml0czxKU1Rlc3ROb2RlPih2bSkpCi0gICAgICAgICAgICByZXR1cm4ganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMUJvZHkoc3RhdGUsIGNh
c3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjFCb2R5KGxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAgICAgICAgIGlmIChk
aXN0aW5ndWlzaGluZ0FyZy5pc051bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjJCb2R5KHN0YXRlLCBj
YXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbjJCb2R5KHN0YXRlLCBjYXN0ZWRUaGlz
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24yQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4ganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uMkJvZHkobGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICAgICB9
Ci0gICAgcmV0dXJuIGFyZ3NDb3VudCA8IDEgPyB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSkgOiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gYXJnc0NvdW50IDwgMSA/IHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSkgOiB0aHJvd1ZNVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVV
bmlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkV2l0aE51bGxhYmxlVW5pb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb25PdmVybG9hZERpc3BhdGNoZXI+
KCpzdGF0ZSwgIm92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24iKTsKKyAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZFdpdGhOdWxsYWJsZVVuaW9uT3ZlcmxvYWREaXNwYXRjaGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgIm92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24iKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRXaXRoT3B0aW9uYWxVbmlvbjFCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24x
Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1
dG8gb2JqZWN0T3JOb2RlID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyB0cnVl
IDogY29udmVydDxJRExVbmlvbjxJRExET01TdHJpbmcsIElETEJvb2xlYW4+Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBvYmplY3RPck5vZGUgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyB0cnVlIDogY29udmVydDxJRExVbmlv
bjxJRExET01TdHJpbmcsIElETEJvb2xlYW4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkV2l0aE9wdGlvbmFs
VW5pb24oV1RGTW92ZShvYmplY3RPck5vZGUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMkJvZHko
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMTG9uZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gaW5kZXggPSBj
b252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbihXVEZNb3Zl
KGluZGV4KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbk92ZXJsb2FkRGlzcGF0Y2hlcihKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZFdpdGhPcHRpb25hbFVuaW9uT3ZlcmxvYWREaXNwYXRjaGVyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjpt
aW48c2l6ZV90PigxLCBzdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBzaXplX3QgYXJnc0Nv
dW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAg
ICAgaWYgKGFyZ3NDb3VudCA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQm9keShzdGF0ZSwgY2FzdGVkVGhp
cywgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAgIH0KICAgICBpZiAoYXJnc0NvdW50
ID09IDEpIHsKLSAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKKyAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGlu
Z0FyZy5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjFCb2R5KHN0YXRlLCBjYXN0ZWRUaGlz
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAgICAgICBpZiAoZGlzdGluZ3Vp
c2hpbmdBcmcuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMUJvZHkoc3RhdGUsIGNhc3RlZFRo
aXMsIHRocm93U2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjFCb2R5KGxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAgICAgICAgIGlmIChkaXN0aW5n
dWlzaGluZ0FyZy5pc051bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjJCb2R5KHN0YXRlLCBjYXN0ZWRU
aGlzLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbjFCb2R5KHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJv
d1Njb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24yQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMUJvZHkobGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKICAgICB9Ci0gICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRXaXRoT3B0aW9uYWxVbmlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24oSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb25P
dmVybG9hZERpc3BhdGNoZXI+KCpzdGF0ZSwgIm92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24iKTsK
KyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uT3ZlcmxvYWREaXNwYXRjaGVyPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm92ZXJsb2FkV2l0aE9wdGlvbmFsVW5p
b24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFt
ZXRlcjFCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpT
VGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0
ZXIxQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGF1dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVO
b25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOworICAgIGF1dG8gb2Jq
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAi
b2JqIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGlu
Z1BhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBub2RlID0gY29udmVydDxJRExJ
bnRlcmZhY2U8VGVzdE5vZGU+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwg
W10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAibm9kZSIsICJUZXN0T2JqZWN0Iiwg
Im92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5v
ZGUiKTsgfSk7CisgICAgYXV0byBub2RlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE5vZGU+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAxLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9u
RGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJs
b2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIoV1RGTW92ZShvYmopLCAq
bm9kZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAot
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjJCb2R5KEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQm9keShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2Fs
bEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbm9kZSA9
IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IDAsICJub2RlIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5n
dWlzaGluZ1BhcmFtZXRlciIsICJUZXN0Tm9kZSIpOyB9KTsKKyAgICBhdXRvIG5vZGUgPSBjb252
ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAibm9kZSIs
ICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJh
bWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExMb25n
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byBpbmRleCA9
IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1
aXNoaW5nUGFyYW1ldGVyKFdURk1vdmUobm9kZSksIFdURk1vdmUoaW5kZXgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhO
dWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyT3ZlcmxvYWREaXNwYXRjaGVyKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXJPdmVybG9hZERpc3Bh
dGNoZXIoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIHNp
emVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDIsIHN0YXRlLT5hcmd1bWVudENvdW50
KCkpOworICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDIsIGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDIpIHsKLSAgICAgICAg
SlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKTsK
KyAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSk7CiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc09iamVjdCgpICYm
IGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+aW5oZXJpdHM8SlNUZXN0Tm9kZT4odm0pKQot
ICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRo
TnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjFCb2R5KHN0YXRlLCBjYXN0ZWRUaGlz
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIxQm9keShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwog
ICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHJl
dHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlz
dGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQm9keShzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7
Ci0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51
bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIyQm9keShzdGF0ZSwgY2FzdGVkVGhpcywg
dGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyMkJvZHkobGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKKyAg
ICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFi
bGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlcjJCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAgICAgfQotICAgIHJldHVybiBhcmdz
Q291bnQgPCAyID8gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpIDogdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgcmV0dXJuIGFyZ3NDb3VudCA8IDIgPyB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpIDogdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQ
YXJhbWV0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJs
ZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyT3ZlcmxvYWREaXNwYXRjaGVyPigqc3RhdGUsICJv
dmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIik7CisgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlck92ZXJsb2Fk
RGlzcGF0Y2hlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJvdmVybG9hZFdp
dGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NN
ZXRob2RCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25DbGFzc01ldGhvZEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBUZXN0T2JqOjpjbGFzc01ldGhvZCgpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0
aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFz
c01ldGhvZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsU3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25DbGFzc01ldGhvZEJvZHk+KCpzdGF0ZSwgImNsYXNzTWV0aG9kIik7CisgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsU3RhdGljPGpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25DbGFzc01ldGhvZEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZy
YW1lLCAiY2xhc3NNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbEJv
ZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5j
dGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8gYXJnID0gc3RhdGUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJl
dHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KGNv
bnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKKyAg
ICBhdXRvIGFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlv
bmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRl
cjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETExvbmc+KFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
KFdURk1vdmUoYXJnKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9w
dGlvbmFsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGxTdGF0aWM8anNUZXN0T2JqQ29uc3RydWN0b3JG
dW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsQm9keT4oKnN0YXRlLCAiY2xhc3NNZXRob2RX
aXRoT3B0aW9uYWwiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGxT
dGF0aWM8anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJjbGFzc01ldGhvZFdpdGhP
cHRpb25hbCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kMkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kMkJvZHko
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Y2xhc3NNZXRob2QyKCpzdGF0
ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqOjpjbGFzc01ldGhvZDIo
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QyKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhv
ZDIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbFN0YXRpYzxqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0
aW9uQ2xhc3NNZXRob2QyQm9keT4oKnN0YXRlLCAiY2xhc3NNZXRob2QyIik7CisgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsU3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25DbGFzc01ldGhvZDJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgImNsYXNzTWV0aG9kMiIpOwogfQogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxMUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMUJvZHkoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvIGFy
ZyA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OworICAgIGF1dG8gYXJnID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVk
TWV0aG9kMShXVEZNb3ZlKGFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC03ODgzLDExICs3OTEzLDEyIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEx
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
MTJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byB0eXBlID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBh
dXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1l
dGhvZDEoV1RGTW92ZSh0eXBlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTc4OTcsNjQ1ICs3OTI4LDY0OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qx
MgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDFPdmVy
bG9hZERpc3BhdGNoZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxT3ZlcmxvYWREaXNwYXRjaGVyKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIHNpemVfdCBhcmdzQ291bnQg
PSBzdGQ6Om1pbjxzaXplX3Q+KDEsIHN0YXRlLT5hcmd1bWVudENvdW50KCkpOworICAgIHNpemVf
dCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKLSAgICAgICAgSlNWYWx1ZSBkaXN0aW5n
dWlzaGluZ0FyZyA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICAgICAgSlNWYWx1
ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAj
aWYgRU5BQkxFKENvbmRpdGlvbjEpCiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc051
bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kMTFCb2R5KHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgICAgIHJl
dHVybiBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExQm9keShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHRocm93U2NvcGUpOwogI2VuZGlmCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpCi0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyQm9keShzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAg
IHJldHVybiBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyQm9k
eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIHRocm93U2NvcGUpOwogI2VuZGlmCiAg
ICAgfQotICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpIDogdGhyb3dWTVR5
cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIGFyZ3NDb3VudCA8IDEgPyB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpIDogdGhyb3dWTVR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDEoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QxKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGxTdGF0aWM8anNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxT3ZlcmxvYWREaXNwYXRjaGVyPigqc3RhdGUs
ICJvdmVybG9hZGVkTWV0aG9kMSIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbFN0YXRpYzxqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDFPdmVybG9hZERpc3BhdGNoZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAi
b3ZlcmxvYWRlZE1ldGhvZDEiKTsKIH0KIAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENs
YW1wQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gb2Jq
QXJnc1Nob3J0ID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWduZWRTaG9ydD4+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBj
b252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZFNob3J0Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBvYmpBcmdz
TG9uZyA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZz4+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIG9iakFyZ3NMb25nID0gY29u
dmVydDxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jbGFzc01ldGhv
ZFdpdGhDbGFtcChXVEZNb3ZlKG9iakFyZ3NTaG9ydCksIFdURk1vdmUob2JqQXJnc0xvbmcpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRo
b2RXaXRoQ2xhbXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0
ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DbGFzc01ldGhvZFdpdGhDbGFtcChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBCb2R5Pigqc3RhdGUsICJjbGFzc01l
dGhvZFdpdGhDbGFtcCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2Fs
bDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJjbGFzc01ldGhvZFdpdGhDbGFtcCIpOwog
fQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcE9uT3B0aW9uYWxCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9k
V2l0aENsYW1wT25PcHRpb25hbEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExDbGFtcEFkYXB0
b3I8SURMTG9uZz4+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIG9iakFy
Z3NMb25nID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuY2xhc3NNZXRob2RXaXRo
Q2xhbXBPbk9wdGlvbmFsKFdURk1vdmUob2JqQXJnc0xvbmcpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXBPbk9wdGlv
bmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NN
ZXRob2RXaXRoQ2xhbXBPbk9wdGlvbmFsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2Jq
ZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcE9uT3B0aW9uYWxCb2R5Pigqc3Rh
dGUsICJjbGFzc01ldGhvZFdpdGhDbGFtcE9uT3B0aW9uYWwiKTsKKyAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhDbGFtcE9uT3B0aW9uYWxCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgImNsYXNzTWV0aG9kV2l0aENsYW1wT25PcHRpb25hbCIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhFbmZvcmNlUmFuZ2VCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZUJv
ZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFy
YW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwotICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDxJRExFbmZvcmNlUmFu
Z2VBZGFwdG9yPElETFVuc2lnbmVkU2hvcnQ+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOworICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDxJRExFbmZvcmNlUmFuZ2VBZGFw
dG9yPElETFVuc2lnbmVkU2hvcnQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExF
bmZvcmNlUmFuZ2VBZGFwdG9yPElETFVuc2lnbmVkTG9uZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKTsKKyAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExFbmZv
cmNlUmFuZ2VBZGFwdG9yPElETFVuc2lnbmVkTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuY2xhc3NNZXRob2RXaXRo
RW5mb3JjZVJhbmdlKFdURk1vdmUob2JqQXJnc1Nob3J0KSwgV1RGTW92ZShvYmpBcmdzTG9uZykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhFbmZvcmNlUmFuZ2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2UoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5n
ZUJvZHk+KCpzdGF0ZSwgImNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZSIpOworICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FsbEZyYW1lLCAiY2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNz
TWV0aG9kV2l0aEVuZm9yY2VSYW5nZU9uT3B0aW9uYWxCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aEVu
Zm9yY2VSYW5nZU9uT3B0aW9uYWxCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8SURMRW5mb3JjZVJh
bmdlQWRhcHRvcjxJRExMb25nPj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1
dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMTG9uZz4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwu
Y2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlT25PcHRpb25hbChXVEZNb3ZlKG9iakFyZ3NMb25n
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNz
TWV0aG9kV2l0aEVuZm9yY2VSYW5nZU9uT3B0aW9uYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2VPbk9wdGlv
bmFsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFz
c01ldGhvZFdpdGhFbmZvcmNlUmFuZ2VPbk9wdGlvbmFsQm9keT4oKnN0YXRlLCAiY2xhc3NNZXRo
b2RXaXRoRW5mb3JjZVJhbmdlT25PcHRpb25hbCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0
aEVuZm9yY2VSYW5nZU9uT3B0aW9uYWxCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSwgImNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZU9uT3B0aW9uYWwiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRM
b25nU2VxdWVuY2VCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHVuc2lnbmVkTG9uZ1NlcXVlbmNlID0g
Y29udmVydDxJRExTZXF1ZW5jZTxJRExVbnNpZ25lZExvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOworICAgIGF1dG8gdW5zaWduZWRMb25nU2VxdWVuY2UgPSBjb252ZXJ0PElE
TFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFVuc2lnbmVkTG9u
Z1NlcXVlbmNlKFdURk1vdmUodW5zaWduZWRMb25nU2VxdWVuY2UpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1Nl
cXVlbmNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2VCb2R5Pigq
c3RhdGUsICJtZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2UiKTsKKyAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2VCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgIm1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJp
bmdBcnJheUZ1bmN0aW9uQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uQm9keShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1l
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0g
ICAgYXV0byB2YWx1ZXMgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byB2YWx1ZXMgPSBjb252ZXJ0PElE
TFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKFdURk1vdmUodmFsdWVz
KSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMU2VxdWVuY2U8SURMRE9N
U3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNh
bGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uQm9keT4oKnN0
YXRlLCAic3RyaW5nQXJyYXlGdW5jdGlvbiIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rp
b25Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInN0cmluZ0FycmF5RnVu
Y3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW9uQm9keShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdM
aXN0RnVuY3Rpb25Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMSW50
ZXJmYWNlPERPTVN0cmluZ0xpc3Q+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAidmFsdWVzIiwgIlRlc3RPYmpl
Y3QiLCAiZG9tU3RyaW5nTGlzdEZ1bmN0aW9uIiwgIkRPTVN0cmluZ0xpc3QiKTsgfSk7CisgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8g
dmFsdWVzID0gY29udmVydDxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJ2
YWx1ZXMiLCAiVGVzdE9iamVjdCIsICJkb21TdHJpbmdMaXN0RnVuY3Rpb24iLCAiRE9NU3RyaW5n
TGlzdCIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8
RE9NU3RyaW5nTGlzdD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLmRvbVN0cmluZ0xpc3RGdW5jdGlvbigqdmFsdWVzKSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwuZG9tU3RyaW5nTGlzdEZ1bmN0aW9uKCp2YWx1ZXMpKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Eb21TdHJpbmdMaXN0
RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25E
b21TdHJpbmdMaXN0RnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbkJvZHk+KCpzdGF0ZSwgImRvbVN0cmlu
Z0xpc3RGdW5jdGlvbiIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2Fs
bDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkRvbVN0cmluZ0xpc3RGdW5jdGlvbkJvZHk+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZG9tU3RyaW5nTGlzdEZ1bmN0aW9uIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9wZXJhdGlvbldpdGhPcHRpb25hbFVuaW9uUGFyYW1ldGVyQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVy
YXRpb25XaXRoT3B0aW9uYWxVbmlvblBhcmFtZXRlckJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG9wdGlvbmFsVW5pb24gPSBzdGF0ZS0+
YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJ
RExET01TdHJpbmcsIElETFNlcXVlbmNlPElETFVucmVzdHJpY3RlZERvdWJsZT4+Pjo6UmV0dXJu
VHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJRExET01TdHJpbmcsIElETFNl
cXVlbmNlPElETFVucmVzdHJpY3RlZERvdWJsZT4+Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExV
bmlvbjxJRExET01TdHJpbmcsIElETFNlcXVlbmNlPElETFVucmVzdHJpY3RlZERvdWJsZT4+Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOworICAgIGF1dG8gb3B0aW9uYWxV
bmlvbiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENv
bnZlcnRlcjxJRExVbmlvbjxJRExET01TdHJpbmcsIElETFNlcXVlbmNlPElETFVucmVzdHJpY3Rl
ZERvdWJsZT4+Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJ
RExET01TdHJpbmcsIElETFNlcXVlbmNlPElETFVucmVzdHJpY3RlZERvdWJsZT4+Pjo6UmV0dXJu
VHlwZT4oY29udmVydDxJRExVbmlvbjxJRExET01TdHJpbmcsIElETFNlcXVlbmNlPElETFVucmVz
dHJpY3RlZERvdWJsZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vcGVyYXRpb25XaXRoT3B0aW9uYWxVbmlvblBhcmFt
ZXRlcihXVEZNb3ZlKG9wdGlvbmFsVW5pb24pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aE9wdGlvbmFsVW5pb25QYXJhbWV0ZXIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcGVyYXRpb25X
aXRoT3B0aW9uYWxVbmlvblBhcmFtZXRlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9i
amVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aE9wdGlvbmFsVW5pb25QYXJhbWV0ZXJCb2R5
Pigqc3RhdGUsICJvcGVyYXRpb25XaXRoT3B0aW9uYWxVbmlvblBhcmFtZXRlciIpOworICAgIHJl
dHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk9wZXJhdGlvbldpdGhPcHRpb25hbFVuaW9uUGFyYW1ldGVyQm9keT4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICJvcGVyYXRpb25XaXRoT3B0aW9uYWxVbmlvblBhcmFtZXRl
ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2VCb2R5KEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZUJvZHkoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1
dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBhcnJheUFyZyA9IGNvbnZlcnQ8
SURMU2VxdWVuY2U8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBudWxsYWJsZUFycmF5QXJnID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExVbnNpZ25lZExvbmc+Pj4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gbnVsbGFibGVBcnJheUFy
ZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMU2VxdWVuY2U8SURMVW5zaWduZWRMb25nPj4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGltcGwubWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlKFdURk1vdmUoYXJyYXlB
cmcpLCBXVEZNb3ZlKG51bGxhYmxlQXJyYXlBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVl
bmNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVlbmNlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xv
YmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVu
Y2VCb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UiKTsK
KyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2VCb2R5PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFi
bGVTZXF1ZW5jZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZEJvZHkoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5
SWRCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGVsZW1lbnRJZCA9IGNvbnZlcnQ8SURMUmVxdWlyZXNF
eGlzdGluZ0F0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBlbGVtZW50SWQgPSBjb252ZXJ0PElETFJlcXVpcmVz
RXhpc3RpbmdBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPEVsZW1lbnQ+Pj4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5SWQoV1RGTW92
ZShlbGVtZW50SWQpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8RWxlbWVudD4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRCeUlkKFdURk1vdmUoZWxlbWVu
dElkKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkQm9keT4oKnN0YXRlLCAiZ2V0
RWxlbWVudEJ5SWQiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZEJvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZ2V0RWxlbWVudEJ5SWQiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZH
RG9jdW1lbnRCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExJbnRlcmZhY2U8U1ZHRG9jdW1lbnQ+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZSgq
c3RhdGUsIGltcGwuZ2V0U1ZHRG9jdW1lbnQoKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR0RvY3VtZW50Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgQmluZGluZ1NlY3VyaXR5
OjpjaGVja1NlY3VyaXR5Rm9yTm9kZSgqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
Z2V0U1ZHRG9jdW1lbnQoKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnQoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVO
VVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0
T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50Qm9keT4o
KnN0YXRlLCAiZ2V0U1ZHRG9jdW1lbnQiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudEJvZHk+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZ2V0U1ZHRG9jdW1lbnQiKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29udmVydDFCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQxQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byB2YWx1
ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgInZhbHVl
IiwgIlRlc3RPYmplY3QiLCAiY29udmVydDEiLCAiVGVzdE5vZGUiKTsgfSk7CisgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gdmFsdWUg
PSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJ2YWx1ZSIsICJUZXN0
T2JqZWN0IiwgImNvbnZlcnQxIiwgIlRlc3ROb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jb252ZXJ0MSgq
dmFsdWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
b252ZXJ0MShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bnZlcnQxKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
b252ZXJ0MUJvZHk+KCpzdGF0ZSwgImNvbnZlcnQxIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDFCb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImNvbnZlcnQxIik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbnZlcnQyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gdmFsdWUgPSBj
b252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0Tm9kZT4+Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAw
LCAidmFsdWUiLCAiVGVzdE9iamVjdCIsICJjb252ZXJ0MiIsICJUZXN0Tm9kZSIpOyB9KTsKKyAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0
byB2YWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDAsICJ2YWx1ZSIsICJUZXN0T2JqZWN0IiwgImNvbnZlcnQyIiwgIlRlc3ROb2RlIik7IH0p
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5jb252ZXJ0MihXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDIoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJB
TShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2Fs
bDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQyQm9keT4oKnN0YXRlLCAiY29udmVy
dDIiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAiY29udmVydDIiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDNCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVy
IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzQm9k
eShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFt
ZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7Ci0gICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgaW1wbC5jb252ZXJ0MyhXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDMoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzQm9keT4oKnN0YXRlLCAi
Y29udmVydDMiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0M0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FsbEZyYW1lLCAiY29udmVydDMiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRCb2R5KEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFy
YW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZl
cnQ0Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
RE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHZh
bHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmNvbnZlcnQ0
KFdURk1vdmUodmFsdWUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ29udmVydDQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db252ZXJ0NChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0g
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ29udmVydDRCb2R5Pigqc3RhdGUsICJjb252ZXJ0NCIpOworICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bnZlcnQ0Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJjb252ZXJ0NCIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRGdW5jdGlvbkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rp
b25Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpzdGF0
ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm11dGFibGVQb2ludEZ1bmN0aW9u
KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR1Bv
aW50Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5tdXRhYmxlUG9pbnRGdW5jdGlvbigpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRGdW5jdGlvbihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk11dGFibGVQb2lu
dEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NdXRhYmxlUG9pbnRGdW5jdGlvbkJvZHk+KCpzdGF0ZSwgIm11dGFibGVQb2ludEZ1bmN0aW9u
Iik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTXV0YWJsZVBvaW50RnVuY3Rpb25Cb2R5PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgIm11dGFibGVQb2ludEZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9yYW5n
ZUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0
T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3JhbmdlQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGltcGwuYmFuYW5hKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk9yYW5nZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9yYW5nZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3JhbmdlQm9keT4oKnN0YXRlLCAib3JhbmdlIik7CisgICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3JhbmdlQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJvcmFuZ2UiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2RCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9k
Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgYXV0byBoZWFkID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBoZWFkID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIGF1dG8gdGFpbCA9IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50czxJRExET01T
dHJpbmc+KCpzdGF0ZSwgMSk7CisgICAgYXV0byB0YWlsID0gY29udmVydFZhcmlhZGljQXJndW1l
bnRzPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIDEpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgaW1wbC52YXJpYWRpY1N0cmluZ01ldGhvZChXVEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNTdHJpbmdNZXRob2QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBz
dGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9i
amVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2RCb2R5Pigqc3RhdGUsICJ2YXJp
YWRpY1N0cmluZ01ldGhvZCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6
Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9kQm9keT4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ2YXJpYWRpY1N0cmluZ01ldGhvZCIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRo
b2RCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGhlYWQgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERv
dWJsZT4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIGhlYWQgPSBj
b252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byB0YWlsID0gY29udmVydFZhcmlh
ZGljQXJndW1lbnRzPElETFVucmVzdHJpY3RlZERvdWJsZT4oKnN0YXRlLCAxKTsKKyAgICBhdXRv
IHRhaWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMVW5yZXN0cmljdGVkRG91YmxlPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnZhcmlhZGljRG91
YmxlTWV0aG9kKFdURk1vdmUoaGVhZCksIFdURk1vdmUodGFpbCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljRG91Ymxl
TWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
YXJpYWRpY0RvdWJsZU1ldGhvZEJvZHk+KCpzdGF0ZSwgInZhcmlhZGljRG91YmxlTWV0aG9kIik7
CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2RCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgInZhcmlhZGljRG91YmxlTWV0aG9kIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGlj
Tm9kZU1ldGhvZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNOb2RlTWV0aG9kQm9keShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0
byBoZWFkID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJoZWFk
IiwgIlRlc3RPYmplY3QiLCAidmFyaWFkaWNOb2RlTWV0aG9kIiwgIk5vZGUiKTsgfSk7CisgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8g
aGVhZCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiaGVhZCIsICJUZXN0
T2JqZWN0IiwgInZhcmlhZGljTm9kZU1ldGhvZCIsICJOb2RlIik7IH0pOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byB0YWls
ID0gY29udmVydFZhcmlhZGljQXJndW1lbnRzPElETEludGVyZmFjZTxOb2RlPj4oKnN0YXRlLCAx
KTsKKyAgICBhdXRvIHRhaWwgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMSW50ZXJmYWNl
PE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgMSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnZh
cmlhZGljTm9kZU1ldGhvZCgqaGVhZCwgV1RGTW92ZSh0YWlsKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhv
ZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNOb2RlTWV0aG9kQm9keT4oKnN0YXRlLCAidmFyaWFkaWNOb2RlTWV0aG9kIik7CisgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVmFyaWFkaWNOb2RlTWV0aG9kQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICJ2YXJpYWRpY05vZGVNZXRob2QiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZEJv
ZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gaGVhZCA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAg
IGF1dG8gaGVhZCA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHRhaWwgPSBjb252ZXJ0
VmFyaWFkaWNBcmd1bWVudHM8SURMVW5pb248SURMSW50ZXJmYWNlPE5vZGU+LCBJRExET01TdHJp
bmc+Pigqc3RhdGUsIDEpOworICAgIGF1dG8gdGFpbCA9IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50
czxJRExVbmlvbjxJRExJbnRlcmZhY2U8Tm9kZT4sIElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwudmFyaWFkaWNVbmlvbk1ldGhvZChX
VEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNVbmlvbk1ldGhvZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25NZXRob2QoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25N
ZXRob2RCb2R5Pigqc3RhdGUsICJ2YXJpYWRpY1VuaW9uTWV0aG9kIik7CisgICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFy
aWFkaWNVbmlvbk1ldGhvZEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAi
dmFyaWFkaWNVbmlvbk1ldGhvZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlCb2R5KEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueUJvZHkoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwotICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBhID0gY29udmVydDxJRExVbnJlc3RyaWN0
ZWRGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgYXV0byBiID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byBiID0gY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
LmFueShXVEZNb3ZlKGEpLCBXVEZNb3ZlKGIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQW55KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25BbnlCb2R5Pigqc3RhdGUsICJhbnkiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0
aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlCb2R5Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImFueSIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJh
dGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbihXVEZNb3ZlKHByb21p
c2UpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxP
YmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlPEpTVGVzdE9i
aj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQm9k
eSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPcldvcmtlcj4oKnN0YXRlLCAidGVzdFBy
b21pc2VGdW5jdGlvbiIpOworICAgIHJldHVybiBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNl
PEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1
bmN0aW9uQm9keSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPcldvcmtlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudEJvZHkoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlPEpTVGVzdE9i
aj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJv
bWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlv
bldpdGhGbG9hdEFyZ3VtZW50Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb25S
ZXR1cm5pbmdQcm9taXNlPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBhID0gY29udmVydDxJRExGbG9hdD4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETEZs
b2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudChXVEZNb3Zl
KGEpLCBXVEZNb3ZlKHByb21pc2UpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5j
dGlvbldpdGhGbG9hdEFyZ3VtZW50KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0
KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+Ojpj
YWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9h
dEFyZ3VtZW50Qm9keSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPcldvcmtlcj4oKnN0
YXRlLCAidGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50Iik7CisgICAgcmV0dXJu
IElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudEJvZHks
IFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T3JXb3JrZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAidGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50Iik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uQm9keShKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0
T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBw
cm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0
aW9uV2l0aEV4Y2VwdGlvbkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uUmV0
dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBSZWY8
RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnRlc3RQcm9t
aXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKFdURk1vdmUocHJvbWlzZSkpKTsKKyAgICBwcm9wYWdh
dGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudGVzdFBy
b21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oV1RGTW92ZShwcm9taXNlKSkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aEV4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0
YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlz
ZTxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VG
dW5jdGlvbldpdGhFeGNlcHRpb25Cb2R5LCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09y
V29ya2VyPigqc3RhdGUsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbiIpOworICAg
IHJldHVybiBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlPEpTVGVzdE9iaj46OmNhbGw8anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbkJv
ZHksIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T3JXb3JrZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24iKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50Qm9keShK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvblJldHVybmluZ1Byb21p
c2U8SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJv
bWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KCkgOiBP
cHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKKyAgICBhdXRvIGEgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURM
TG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVy
blR5cGU+KGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhP
cHRpb25hbEludEFyZ3VtZW50KFdURk1vdmUoYSksIFdURk1vdmUocHJvbWlzZSkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0
aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1l
bnQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExP
cGVyYXRpb25SZXR1cm5pbmdQcm9taXNlPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRCb2R5
LCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09yV29ya2VyPigqc3RhdGUsICJ0ZXN0UHJv
bWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQiKTsKKyAgICByZXR1cm4gSURMT3Bl
cmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50Qm9keSwg
UHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPcldvcmtlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1l
bnQiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNU
ZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92
ZXJsb2FkZWRGdW5jdGlvbjFCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvblJl
dHVybmluZ1Byb21pc2U8SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgYXV0byBhID0gY29udmVydDxJRExGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMRmxvYXQ+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwudGVz
dFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oV1RGTW92ZShhKSwgV1RGTW92ZShwcm9taXNlKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5
cGVuYW1lIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0T2JqPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJC
b2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNU
ZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byByZXF1ZXN0
ID0gY29udmVydDxJRExJbnRlcmZhY2U8RmV0Y2hSZXF1ZXN0Pj4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMCwgInJl
cXVlc3QiLCAiVGVzdE9iamVjdCIsICJ0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIsICJG
ZXRjaFJlcXVlc3QiKTsgfSk7CisgICAgYXV0byByZXF1ZXN0ID0gY29udmVydDxJRExJbnRlcmZh
Y2U8RmV0Y2hSZXF1ZXN0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInJlcXVlc3QiLCAiVGVzdE9iamVjdCIsICJ0ZXN0
UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIsICJGZXRjaFJlcXVlc3QiKTsgfSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBs
LnRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKCpyZXF1ZXN0LCBXVEZNb3ZlKHByb21pc2Up
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbk92ZXJsb2FkRGlzcGF0Y2hlcihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0
T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBw
cm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJs
b2FkZWRGdW5jdGlvbk92ZXJsb2FkRGlzcGF0Y2hlcihKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExP
cGVyYXRpb25SZXR1cm5pbmdQcm9taXNlPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3Rl
ZFRoaXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9Q
QVJBTSh2bSk7Ci0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNp
emVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdzQ291bnQg
PT0gMSkgewotICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOworICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5n
QXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT5pbmhlcml0czxK
U0ZldGNoUmVxdWVzdD4odm0pKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24yQm9keShzdGF0ZSwgY2FzdGVk
VGhpcywgV1RGTW92ZShwcm9taXNlKSwgdGhyb3dTY29wZSk7CisgICAgICAgICAgICByZXR1cm4g
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjJC
b2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcywgV1RGTW92ZShw
cm9taXNlKSwgdGhyb3dTY29wZSk7CiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc051
bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24xQm9keShzdGF0ZSwgY2FzdGVkVGhpcywgV1RGTW92
ZShwcm9taXNlKSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uMUJvZHkoc3RhdGUsIGNhc3Rl
ZFRoaXMsIFdURk1vdmUocHJvbWlzZSksIHRocm93U2NvcGUpOworICAgICAgICAgICAgcmV0dXJu
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24x
Qm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIFdURk1vdmUo
cHJvbWlzZSksIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFCb2R5KGxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcywgV1RGTW92ZShwcm9taXNlKSwgdGhyb3dTY29w
ZSk7CiAgICAgfQotICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpIDogdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIGFyZ3NDb3VudCA8
IDEgPyB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpIDogdGhyb3dWTVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
T3ZlcmxvYWRlZEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9t
aXNlPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlz
ZU92ZXJsb2FkZWRGdW5jdGlvbk92ZXJsb2FkRGlzcGF0Y2hlciwgUHJvbWlzZUV4ZWN1dGlvblNj
b3BlOjpXaW5kb3dPcldvcmtlcj4oKnN0YXRlLCAidGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rp
b24iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+
OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVu
Y3Rpb25PdmVybG9hZERpc3BhdGNoZXIsIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T3JX
b3JrZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdFByb21pc2VPdmVy
bG9hZGVkRnVuY3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uQm9k
eShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0
aW9uQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVGVzdE9iajo6dGVz
dFN0YXRpY1Byb21pc2VGdW5jdGlvbihXVEZNb3ZlKHByb21pc2UpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1bmN0
aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0
U3RhdGljUHJvbWlzZUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0
KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+Ojpj
YWxsU3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUZ1
bmN0aW9uQm9keSwgUHJvbWlzZUV4ZWN1dGlvblNjb3BlOjpXaW5kb3dPcldvcmtlcj4oKnN0YXRl
LCAidGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbiIpOworICAgIHJldHVybiBJRExPcGVyYXRpb25S
ZXR1cm5pbmdQcm9taXNlPEpTVGVzdE9iaj46OmNhbGxTdGF0aWM8anNUZXN0T2JqQ29uc3RydWN0
b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25Cb2R5LCBQcm9taXNlRXhlY3V0aW9u
U2NvcGU6OldpbmRvd09yV29ya2VyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
InRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlz
ZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0
aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Cb2R5KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJv
d1Njb3BlLCBUZXN0T2JqOjp0ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbihX
VEZNb3ZlKHByb21pc2UpKSk7CisgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBUZXN0T2JqOjp0ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0
aEV4Y2VwdGlvbihXVEZNb3ZlKHByb21pc2UpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNl
cHRpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRl
c3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlz
ZTxKU1Rlc3RPYmo+OjpjYWxsU3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0
U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbkJvZHksIFByb21pc2VFeGVjdXRpb25T
Y29wZTo6V2luZG93T3JXb3JrZXI+KCpzdGF0ZSwgInRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25X
aXRoRXhjZXB0aW9uIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8
SlNUZXN0T2JqPjo6Y2FsbFN0YXRpYzxqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uVGVzdFN0
YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb25Cb2R5LCBQcm9taXNlRXhlY3V0aW9uU2Nv
cGU6OldpbmRvd09yV29ya2VyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRl
c3RTdGF0aWNQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0
b21Qcm9taXNlRnVuY3Rpb25Cb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb25Cb2R5KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHR5cGVuYW1lIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0T2JqPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbigqc3RhdGUs
IFdURk1vdmUocHJvbWlzZSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRo
aXMtPnRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb24oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsIFdURk1vdmUocHJvbWlzZSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb24o
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9t
UHJvbWlzZUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAg
ICByZXR1cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+OjpjYWxsPGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VGdW5jdGlvbkJvZHksIFBy
b21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T3JXb3JrZXI+KCpzdGF0ZSwgInRlc3RDdXN0b21Q
cm9taXNlRnVuY3Rpb24iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlz
ZTxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVBy
b21pc2VGdW5jdGlvbkJvZHksIFByb21pc2VFeGVjdXRpb25TY29wZTo6V2luZG93T3JXb3JrZXI+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdEN1c3RvbVByb21pc2VGdW5j
dGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNDdXN0b21Qcm9taXNlRnVuY3Rpb25Cb2R5KEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNDdXN0b21Qcm9taXNlRnVu
Y3Rpb25Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6dGVzdFN0YXRpY0N1c3RvbVByb21pc2VGdW5jdGlvbigq
c3RhdGUsIFdURk1vdmUocHJvbWlzZSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE9iajo6dGVzdFN0YXRpY0N1c3RvbVByb21pc2VGdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgV1RGTW92ZShwcm9taXNlKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljQ3Vz
dG9tUHJvbWlzZUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25UZXN0U3RhdGljQ3VzdG9tUHJvbWlzZUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5n
UHJvbWlzZTxKU1Rlc3RPYmo+OjpjYWxsU3RhdGljPGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rp
b25UZXN0U3RhdGljQ3VzdG9tUHJvbWlzZUZ1bmN0aW9uQm9keSwgUHJvbWlzZUV4ZWN1dGlvblNj
b3BlOjpXaW5kb3dPcldvcmtlcj4oKnN0YXRlLCAidGVzdFN0YXRpY0N1c3RvbVByb21pc2VGdW5j
dGlvbiIpOworICAgIHJldHVybiBJRExPcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlPEpTVGVzdE9i
aj46OmNhbGxTdGF0aWM8anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNDdXN0
b21Qcm9taXNlRnVuY3Rpb25Cb2R5LCBQcm9taXNlRXhlY3V0aW9uU2NvcGU6OldpbmRvd09yV29y
a2VyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRlc3RTdGF0aWNDdXN0b21Q
cm9taXNlRnVuY3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVJldHVybnNPd25Qcm9taXNlRnVu
Y3Rpb25Cb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uUmV0
dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUmV0dXJuc093blByb21pc2VG
dW5jdGlvbkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJv
bWlzZTxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FzdGVkVGhpcy0+dGVzdEN1c3RvbVJldHVybnNPd25Qcm9taXNlRnVuY3Rpb24oKnN0YXRl
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tUmV0
dXJuc093blByb21pc2VGdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdEN1c3RvbVJldHVybnNPd25Qcm9taXNlRnVuY3Rpb24oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUmV0dXJuc093blByb21p
c2VGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0
dXJuIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNUZXN0T2JqPjo6Y2FsbFJldHVybmlu
Z093blByb21pc2U8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUmV0dXJuc093
blByb21pc2VGdW5jdGlvbkJvZHk+KCpzdGF0ZSwgInRlc3RDdXN0b21SZXR1cm5zT3duUHJvbWlz
ZUZ1bmN0aW9uIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvblJldHVybmluZ1Byb21pc2U8SlNU
ZXN0T2JqPjo6Y2FsbFJldHVybmluZ093blByb21pc2U8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0Q3VzdG9tUmV0dXJuc093blByb21pc2VGdW5jdGlvbkJvZHk+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdEN1c3RvbVJldHVybnNPd25Qcm9taXNlRnVuY3Rpb24i
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFJldHVybnNPd25Qcm9taXNlQW5kUHJvbWlzZVByb3h5RnVuY3Rpb25C
b2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uUmV0dXJuaW5n
UHJvbWlzZTxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuc093blByb21pc2VBbmRQcm9taXNlUHJv
eHlGdW5jdGlvbkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uUmV0dXJuaW5n
UHJvbWlzZTxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFBy
b21pc2U8SURMVm9pZD4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LnRlc3RSZXR1cm5zT3duUHJvbWlzZUFuZFByb21pc2VQcm94eUZ1bmN0aW9uKCkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMUHJvbWlzZTxJRExWb2lkPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC50ZXN0UmV0dXJu
c093blByb21pc2VBbmRQcm9taXNlUHJveHlGdW5jdGlvbigpKSk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuc093
blByb21pc2VBbmRQcm9taXNlUHJveHlGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5zT3duUHJvbWlzZUFuZFByb21pc2VQcm94
eUZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1
cm4gSURMT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+OjpjYWxsUmV0dXJuaW5n
T3duUHJvbWlzZTxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5zT3duUHJvbWlz
ZUFuZFByb21pc2VQcm94eUZ1bmN0aW9uQm9keT4oKnN0YXRlLCAidGVzdFJldHVybnNPd25Qcm9t
aXNlQW5kUHJvbWlzZVByb3h5RnVuY3Rpb24iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uUmV0
dXJuaW5nUHJvbWlzZTxKU1Rlc3RPYmo+OjpjYWxsUmV0dXJuaW5nT3duUHJvbWlzZTxqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5zT3duUHJvbWlzZUFuZFByb21pc2VQcm94eUZ1
bmN0aW9uQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0ZXN0UmV0dXJu
c093blByb21pc2VBbmRQcm9taXNlUHJveHlGdW5jdGlvbiIpOwogfQogCiAjaWYgRU5BQkxFKENP
TkRJVElPTjEpCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVy
bG9hZDFCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gc3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGltcGwuY29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC04NTQ0LDEyICs4NTc4LDEzIEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bmRpdGlvbmFsT3ZlcmxvYWQxCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05ESVRJT04yKQotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q29uZGl0aW9uYWxPdmVybG9hZDJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQyQm9keShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2Fs
bEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYSA9IGNv
bnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5jb25kaXRpb25hbE92ZXJsb2FkKFdU
Rk1vdmUoYSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC04NTU5LDUyICs4NTk0LDU0IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQyCiAKICNpZiBFTkFC
TEUoQ09ORElUSU9OMSkgfHwgRU5BQkxFKENPTkRJVElPTjIpCiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3Zl
cmxvYWRPdmVybG9hZERpc3BhdGNoZXIoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZE92ZXJsb2FkRGlz
cGF0Y2hlcihKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAg
c2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewotICAgICAg
ICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OworICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKICNpZiBFTkFCTEUoQ09ORElUSU9OMikKICAgICAgICAgaWYgKGRpc3Rp
bmd1aXNoaW5nQXJnLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMkJvZHkoc3RhdGUsIGNhc3RlZFRoaXMs
IHRocm93U2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxPdmVybG9hZDJCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ09ORElUSU9O
MSkKLSAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxP
dmVybG9hZDFCb2R5KHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0
dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDFCb2R5KGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSk7CiAj
ZW5kaWYKICAgICB9Ci0gICAgcmV0dXJuIGFyZ3NDb3VudCA8IDEgPyB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSkgOiB0
aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gYXJnc0NvdW50
IDwgMSA/IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSkgOiB0aHJvd1ZN
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9u
YWxPdmVybG9hZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRl
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsT3ZlcmxvYWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWRPdmVybG9hZERpc3BhdGNoZXI+KCpzdGF0
ZSwgImNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2Fk
T3ZlcmxvYWREaXNwYXRjaGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImNv
bmRpdGlvbmFsT3ZlcmxvYWQiKTsKIH0KIAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFs
T3ZlcmxvYWQxQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMUJvZHkoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3Rl
ZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHN0ciA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgYXV0byBzdHIgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5zaW5nbGVDb25kaXRp
b25hbE92ZXJsb2FkKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAogI2lmIEVOQUJMRShDT05ESVRJT04pCi1zdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25k
aXRpb25hbE92ZXJsb2FkMkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDJCb2R5KEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBj
YWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBhID0g
Y29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgYXV0byBhID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFsT3Zl
cmxvYWQoV1RGTW92ZShhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTg2MTIsMjQyICs4NjQ5LDI0MSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZQog
CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZE92ZXJsb2FkRGlzcGF0Y2hl
cihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkT3ZlcmxvYWREaXNwYXRjaGVyKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJh
bWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICBzaXplX3QgYXJnc0NvdW50
ID0gc3RkOjptaW48c2l6ZV90PigxLCBzdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBzaXpl
X3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7Ci0gICAgICAgIEpTVmFsdWUgZGlzdGlu
Z3Vpc2hpbmdBcmcgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgICAgIEpTVmFs
dWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwog
I2lmIEVOQUJMRShDT05ESVRJT04pCiAgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5pc051
bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2lu
Z2xlQ29uZGl0aW9uYWxPdmVybG9hZDJCb2R5KHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNv
bmRpdGlvbmFsT3ZlcmxvYWQyQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNh
c3RlZFRoaXMsIHRocm93U2NvcGUpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQxQm9keShzdGF0ZSwgY2Fz
dGVkVGhpcywgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQxQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpOwogICAgIH0KLSAgICByZXR1cm4g
YXJnc0NvdW50IDwgMSA/IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKSA6IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUpOworICAgIHJldHVybiBhcmdzQ291bnQgPCAxID8gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKSA6IHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxP
dmVybG9hZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZE92ZXJsb2FkRGlzcGF0Y2hlcj4oKnN0YXRlLCAic2lu
Z2xlQ29uZGl0aW9uYWxPdmVybG9hZCIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0
T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3Zl
cmxvYWRPdmVybG9hZERpc3BhdGNoZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAic2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZCIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290
Qm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBpbml0ID0gY29u
dmVydDxJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gaW5pdCA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxU
ZXN0T2JqOjpEaWN0aW9uYXJ5Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5hdHRhY2hTaGFkb3dSb290KFdURk1vdmUoaW5p
dCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRh
Y2hTaGFkb3dSb290KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3Rh
dGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQXR0YWNoU2hhZG93Um9vdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7
Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdEJvZHk+KCpzdGF0ZSwgImF0dGFjaFNoYWRvd1Jv
b3QiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Qm9keT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsICJhdHRhY2hTaGFkb3dSb290Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wZXJhdGlvbldp
dGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wZXJhdGlvbldpdGhFeHRlcm5h
bERpY3Rpb25hcnlQYXJhbWV0ZXJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGRpY3QgPSBjb252ZXJ0
PElETERpY3Rpb25hcnk8RGljdGlvbmFyeUltcGxOYW1lPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKKyAgICBhdXRvIGRpY3QgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8RGljdGlv
bmFyeUltcGxOYW1lPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFy
YW1ldGVyKFdURk1vdmUoZGljdCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0
aEV4dGVybmFsRGljdGlvbmFyeVBhcmFtZXRlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmFsRGljdGlvbmFyeVBhcmFt
ZXRlckJvZHk+KCpzdGF0ZSwgIm9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0
ZXIiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PcGVyYXRpb25XaXRoRXh0ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVy
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJvcGVyYXRpb25XaXRoRXh0
ZXJuYWxEaWN0aW9uYXJ5UGFyYW1ldGVyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRl
ckJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0
T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1ldGVyQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBkYXRh
ID0gY29udmVydDxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIGRhdGEgPSBjb252ZXJ0
PElETFVuaW9uPElETEFycmF5QnVmZmVyVmlldywgSURMQXJyYXlCdWZmZXI+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmJ1
ZmZlclNvdXJjZVBhcmFtZXRlcihXVEZNb3ZlKGRhdGEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1ldGVyKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnVmZmVyU291cmNlUGFyYW1l
dGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CdWZm
ZXJTb3VyY2VQYXJhbWV0ZXJCb2R5Pigqc3RhdGUsICJidWZmZXJTb3VyY2VQYXJhbWV0ZXIiKTsK
KyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25CdWZmZXJTb3VyY2VQYXJhbWV0ZXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgImJ1ZmZlclNvdXJjZVBhcmFtZXRlciIpOwogfQogCi1zdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25MZWdhY3lD
YWxsZXJOYW1lZEJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTGVnYWN5Q2FsbGVyTmFtZWRCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRv
IHBhcmFtID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OworICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwubGVnYWN5Q2FsbGVy
TmFtZWQoV1RGTW92ZShwYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25MZWdhY3lDYWxsZXJOYW1lZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkxlZ2FjeUNhbGxlck5hbWVkKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46
OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25MZWdhY3lDYWxsZXJOYW1lZEJvZHk+KCpz
dGF0ZSwgImxlZ2FjeUNhbGxlck5hbWVkIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTGVnYWN5Q2FsbGVyTmFtZWRC
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImxlZ2FjeUNhbGxlck5hbWVk
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbkJvZHkoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFJldHVy
blZhbHVlT3B0aW1pemF0aW9uQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byByZXR1cm5WYWx1ZSA9IHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGEgPSBjb252ZXJ0PElETEludGVy
ZmFjZTxOb2RlPj4oKnN0YXRlLCByZXR1cm5WYWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCAwLCAiYSIsICJUZXN0T2JqZWN0IiwgInRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlv
biIsICJOb2RlIik7IH0pOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKKyAgICBhdXRvIHJldHVyblZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHJldHVyblZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1l
bnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJhIiwgIlRlc3RPYmpl
Y3QiLCAidGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uIiwgIk5vZGUiKTsgfSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRv
IGIgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMSwgImIiLCAiVGVz
dE9iamVjdCIsICJ0ZXN0UmV0dXJuVmFsdWVPcHRpbWl6YXRpb24iLCAiTm9kZSIpOyB9KTsKKyAg
ICBhdXRvIGIgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtdKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgImIiLCAiVGVz
dE9iamVjdCIsICJ0ZXN0UmV0dXJuVmFsdWVPcHRpbWl6YXRpb24iLCAiTm9kZSIpOyB9KTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAg
IGltcGwudGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uKCphLCAqYik7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXR1cm5WYWx1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuVmFsdWVPcHRpbWl6YXRp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0
dXJuVmFsdWVPcHRpbWl6YXRpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbkJvZHk+KCpzdGF0ZSwgInRl
c3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbiIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9w
dGltaXphdGlvbkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidGVzdFJl
dHVyblZhbHVlT3B0aW1pemF0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXph
dGlvbldpdGhFeGNlcHRpb25Cb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhF
eGNlcHRpb25Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKLSAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHJldHVyblZhbHVlID0gc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+
Pigqc3RhdGUsIHJldHVyblZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAs
ICJhIiwgIlRlc3RPYmplY3QiLCAidGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uV2l0aEV4Y2Vw
dGlvbiIsICJOb2RlIik7IH0pOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHJldHVyblZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKKyAgICBhdXRvIGEgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHJldHVyblZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJhIiwgIlRlc3RP
YmplY3QiLCAidGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uV2l0aEV4Y2VwdGlvbiIsICJOb2Rl
Iik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgYXV0byBiID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsIDEsICJiIiwgIlRlc3RPYmplY3QiLCAidGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uV2l0
aEV4Y2VwdGlvbiIsICJOb2RlIik7IH0pOworICAgIGF1dG8gYiA9IGNvbnZlcnQ8SURMSW50ZXJm
YWNlPE5vZGU+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgxKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAxLCAiYiIsICJUZXN0T2JqZWN0IiwgInRlc3RSZXR1cm5WYWx1ZU9w
dGltaXphdGlvbldpdGhFeGNlcHRpb24iLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbigqc3RhdGUsIHRocm93U2NvcGUsIGltcGwudGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9u
V2l0aEV4Y2VwdGlvbigqYSwgKmIpKTsKKyAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9u
V2l0aEV4Y2VwdGlvbigqYSwgKmIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJldHVy
blZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhFeGNlcHRpb24oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuVmFs
dWVPcHRpbWl6YXRpb25XaXRoRXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuVmFsdWVPcHRpbWl6YXRpb25XaXRoRXhjZXB0
aW9uQm9keT4oKnN0YXRlLCAidGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uV2l0aEV4Y2VwdGlv
biIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhFeGNlcHRpb25C
b2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRlc3RSZXR1cm5WYWx1ZU9w
dGltaXphdGlvbldpdGhFeGNlcHRpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRU
b1dpbmRvd0Z1bmN0aW9uQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93RnVuY3Rp
b25Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93RnVuY3Rpb24oKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRU
b1dpbmRvd0Z1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
c3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0Z1bmN0aW9uKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9i
aj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93RnVuY3Rpb25Cb2R5Pigqc3RhdGUsICJjb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93
RnVuY3Rpb24iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93RnVuY3Rp
b25Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImNvbmRpdGlvbmFsbHlF
eHBvc2VkVG9XaW5kb3dGdW5jdGlvbiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRv
V29ya2VyRnVuY3Rpb25Cb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlv
bkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
bXBsLmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlvbigpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRv
V29ya2VyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBz
dGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2Jq
Pjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9X
b3JrZXJGdW5jdGlvbkJvZHk+KCpzdGF0ZSwgImNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJG
dW5jdGlvbiIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJGdW5jdGlv
bkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiY29uZGl0aW9uYWxseUV4
cG9zZWRUb1dvcmtlckZ1bmN0aW9uIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9X
aW5kb3dBbmRXb3JrZXJGdW5jdGlvbkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFt
ZSBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRv
d0FuZFdvcmtlckZ1bmN0aW9uQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGltcGwuY29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtl
ckZ1bmN0aW9uKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJGdW5jdGlvbihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBv
c2VkVG9XaW5kb3dBbmRXb3JrZXJGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtl
ckZ1bmN0aW9uQm9keT4oKnN0YXRlLCAiY29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdv
cmtlckZ1bmN0aW9uIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxs
PGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0Fu
ZFdvcmtlckZ1bmN0aW9uQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJj
b25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyRnVuY3Rpb24iKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VG9TdHJpbmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdE9iaj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0T2JqPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExVU1ZT
dHJpbmc+KCpzdGF0ZSwgaW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZSgpKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFVTVlN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGltcGwuc3RyaW5naWZpZXJBdHRyaWJ1dGUoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RP
Ymo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5Pigqc3RhdGUs
ICJ0b1N0cmluZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsICJ0b1N0cmluZyIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RP
Ymo6OnNlcmlhbGl6ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitK
U0M6OkpTT2JqZWN0KiBKU1Rlc3RPYmo6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKLSAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3Rh
dGUsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSk7CisgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFBy
b3RvdHlwZSgpKTsKIAotICAgIGF1dG8gY3JlYXRlVmFsdWUgPSBqc1Rlc3RPYmpDcmVhdGVHZXR0
ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIGF1dG8gY3JlYXRlVmFsdWUg
PSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwg
dGhyb3dTY29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlIiks
IGNyZWF0ZVZhbHVlKTsKIAotICAgIGF1dG8gcmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUgPSBqc1Rl
c3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2Nv
cGUpOworICAgIGF1dG8gcmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpSZWFkT25s
eVN0cmluZ0F0dHJHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhyb3dT
Y29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicmVhZE9ubHlTdHJpbmdB
dHRyIiksIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlKTsKIAotICAgIGF1dG8gZW51bUF0dHJWYWx1
ZSA9IGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKKyAgICBhdXRvIGVudW1BdHRyVmFsdWUgPSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJlbnVtQXR0ciIpLCBlbnVtQXR0clZhbHVlKTsKIAotICAgIGF1
dG8gbG9uZ0F0dHJWYWx1ZSA9IGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKHN0YXRlLCB0aGlzT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBhdXRvIGxvbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpMb25n
QXR0ckdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsK
ICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb25nQXR0ciIpLCBsb25nQXR0clZh
bHVlKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRv
SlNPTkJvZHkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSos
IEpTVGVzdE9iaiogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqOjpzZXJpYWxpemUoKnN0YXRlLCAq
dGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmo6OnNlcmlhbGl6ZSgqbGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsK
LSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT05Cb2R5Pigqc3RhdGUsICJ0b0pTT04iKTsKKyAgICByZXR1cm4gSURM
T3BlcmF0aW9uPEpTVGVzdE9iaj46OmNhbGw8anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pT
T05Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvSlNPTiIpOwogfQog
CiB2b2lkIEpTVGVzdE9iajo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpAQCAtODg5NSw3ICs4OTMxLDcgQEAgZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lk
KiBfWlRWTjdXZWJDb3JlN1Rlc3RPYmpFW107IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPFRlc3RPYmo+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWY8VGVzdE9iaj4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5U
RUdSSVRZKQpAQCAtODkxOSw5ICs4OTU1LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAg
IHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RPYmo+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBs
KSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE9iaiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPYmomIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAo
c3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogVGVzdE9iaiogSlNUZXN0T2JqOjp0
b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCA5N2Fl
MzFkYzFlMDVjMjZiMGM1YTRhM2JmYTg0OGQwYWIyMDg0N2E2Li5iYmJmYTA0OWViMjBjMGNmZWYw
Nzk2M2Q0NmVjYTc1NmM4YzFhYjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC00Miw5ICs0Miw5IEBAIGNsYXNzIEpT
VGVzdE9iaiA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE9iaj4gewogICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QmKTsKICAgICBzdGF0aWMgVGVzdE9iaiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNP
YmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNP
YmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVu
dW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwogICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdl
dENhbGxEYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOwogCiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBKU1Rlc3RP
YmogOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RPYmo+IHsKICAgICB9CiAKICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRo
cm93U2NvcGUmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpUaHJvd1Njb3BlJik7CiAgICAgbXV0YWJsZSBKU0M6OldyaXRlQmFycmllcjxKU0M6OlVu
a25vd24+IG1fY2FjaGVkQXR0cmlidXRlMTsKICAgICBtdXRhYmxlIEpTQzo6V3JpdGVCYXJyaWVy
PEpTQzo6VW5rbm93bj4gbV9jYWNoZWRBdHRyaWJ1dGUyOwogI2lmIEVOQUJMRShDT05ESVRJT04p
CkBAIC02OCwxNiArNjgsMTYgQEAgY2xhc3MgSlNUZXN0T2JqIDogcHVibGljIEpTRE9NV3JhcHBl
cjxUZXN0T2JqPiB7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpI
ZWFwQW5hbHl6ZXImKTsKIAogICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVzCi0gICAgSlNDOjpKU1Zh
bHVlIGN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUmKSBjb25zdDsKLSAgICB2b2lkIHNldEN1c3Rv
bUF0dHIoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworICAgIEpTQzo6SlNWYWx1ZSBj
dXN0b21BdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QmKSBjb25zdDsKKyAgICB2b2lkIHNldEN1c3Rv
bUF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CiAKICAgICAvLyBDdXN0
b20gZnVuY3Rpb25zCi0gICAgSlNDOjpKU1ZhbHVlIGN1c3RvbU1ldGhvZChKU0M6OkV4ZWNTdGF0
ZSYpOwotICAgIEpTQzo6SlNWYWx1ZSBjdXN0b21NZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0
ZSYpOwotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY2xhc3NNZXRob2QyKEpTQzo6RXhlY1N0YXRl
Jik7Ci0gICAgSlNDOjpKU1ZhbHVlIHRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVj
U3RhdGUmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IHRlc3RTdGF0aWNDdXN0b21Qcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUmLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmKTsKLSAgICBKU0M6OkpTVmFsdWUgdGVzdEN1c3RvbVJldHVybnNPd25Q
cm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUmKTsKKyAgICBKU0M6OkpTVmFsdWUgY3VzdG9t
TWV0aG9kKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYpOworICAgIEpTQzo6
SlNWYWx1ZSBjdXN0b21NZXRob2RXaXRoQXJncyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpD
YWxsRnJhbWUmKTsKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNsYXNzTWV0aG9kMihKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmKTsKKyAgICBKU0M6OkpTVmFsdWUgdGVzdEN1
c3RvbVByb21pc2VGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUm
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIHRlc3RT
dGF0aWNDdXN0b21Qcm9taXNlRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2Fs
bEZyYW1lJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CisgICAgSlNDOjpKU1ZhbHVlIHRlc3RD
dXN0b21SZXR1cm5zT3duUHJvbWlzZUZ1bmN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6
OkNhbGxGcmFtZSYpOwogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3RhdGljUHJvcGVy
dHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lczsK
IHByb3RlY3RlZDoKQEAgLTEwMywzOSArMTAzLDM5IEBAIGlubGluZSB2b2lkKiB3cmFwcGVyS2V5
KFRlc3RPYmoqIHdyYXBwYWJsZU9iamVjdCkKICAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0Owog
fQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgVGVzdE9iaiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE9iaiogaW1wbCkgeyBy
ZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051
bGwoKTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0T2JqPiYmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0T2JqPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0
b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwo
KSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE9iaiogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRv
SlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVs
bCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE9iaj4mJik7CitpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RPYmo+JiYg
aW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsg
fQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE9i
aj4gewogICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE9iajsKICAgICB1c2luZyBUb1dy
YXBwZWRSZXR1cm5UeXBlID0gVGVzdE9iaio7CiB9OwogU3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlv
blRvU3RyaW5nKFRlc3RPYmo6OkVudW1UeXBlKTsKLXRlbXBsYXRlPD4gSlNDOjpKU1N0cmluZyog
Y29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFRlc3RPYmo6OkVudW1UeXBl
KTsKK3RlbXBsYXRlPD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgVGVzdE9iajo6RW51bVR5cGUpOwogCi10ZW1wbGF0ZTw+IE9wdGlv
bmFsPFRlc3RPYmo6OkVudW1UeXBlPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBl
PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRl
c3RPYmo6OkVudW1UeXBlPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPihKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRlPD4gY29uc3QgY2hhciog
ZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKTsKIAogU3RyaW5n
IGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKFRlc3RPYmo6Ok9wdGlvbmFsKTsKLXRlbXBsYXRl
PD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IFRlc3RPYmo6Ok9wdGlvbmFsKTsKK3RlbXBsYXRlPD4gSlNDOjpKU1N0cmluZyogY29udmVydEVu
dW1lcmF0aW9uVG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgVGVzdE9iajo6T3B0aW9uYWwpOwog
Ci10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6Ok9wdGlvbmFsPiBwYXJzZUVudW1lcmF0aW9u
PFRlc3RPYmo6Ok9wdGlvbmFsPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1w
bGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6Ok9wdGlvbmFsPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RP
Ymo6Ok9wdGlvbmFsPihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBs
YXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpPcHRp
b25hbD4oKTsKIAogU3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKEFsdGVybmF0ZUVu
dW1OYW1lKTsKLXRlbXBsYXRlPD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIEFsdGVybmF0ZUVudW1OYW1lKTsKK3RlbXBsYXRlPD4gSlNDOjpK
U1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgQWx0
ZXJuYXRlRW51bU5hbWUpOwogCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPEFsdGVybmF0ZUVudW1OYW1l
PiBwYXJzZUVudW1lcmF0aW9uPEFsdGVybmF0ZUVudW1OYW1lPihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IE9wdGlvbmFsPEFsdGVybmF0ZUVudW1OYW1lPiBwYXJz
ZUVudW1lcmF0aW9uPEFsdGVybmF0ZUVudW1OYW1lPihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlND
OjpKU1ZhbHVlKTsKIHRlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlczxBbHRlcm5hdGVFbnVtTmFtZT4oKTsKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogCiBT
dHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdE9iajo6RW51bUEpOwotdGVtcGxh
dGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRl
JiwgVGVzdE9iajo6RW51bUEpOwordGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51
bWVyYXRpb25Ub0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBUZXN0T2JqOjpFbnVtQSk7CiAKLXRl
bXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bUE+IHBhcnNlRW51bWVyYXRpb248VGVzdE9i
ajo6RW51bUE+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gT3B0
aW9uYWw8VGVzdE9iajo6RW51bUE+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bUE+KEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8PiBjb25zdCBjaGFy
KiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1BPigpOwogCiAjZW5kaWYK
QEAgLTE0Myw5ICsxNDMsOSBAQCB0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVy
YXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUE+KCk7CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYm
IEVOQUJMRShDb25kaXRpb24yKQogCiBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmco
VGVzdE9iajo6RW51bUIpOwotdGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVGVzdE9iajo6RW51bUIpOwordGVtcGxhdGU8PiBK
U0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6SlNHbG9iYWxPYmplY3Qm
LCBUZXN0T2JqOjpFbnVtQik7CiAKLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bUI+
IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bUI+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bUI+IHBhcnNlRW51bWVy
YXRpb248VGVzdE9iajo6RW51bUI+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUp
OwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RP
Ymo6OkVudW1CPigpOwogCiAjZW5kaWYKQEAgLTE1Myw2MCArMTUzLDYwIEBAIHRlbXBsYXRlPD4g
Y29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtQj4oKTsK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKIFN0cmluZyBj
b252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhUZXN0T2JqOjpFbnVtQyk7Ci10ZW1wbGF0ZTw+IEpT
Qzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUZXN0
T2JqOjpFbnVtQyk7Cit0ZW1wbGF0ZTw+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlv
blRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFRlc3RPYmo6OkVudW1DKTsKIAotdGVtcGxhdGU8
PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtQz4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVt
Qz4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBPcHRpb25hbDxU
ZXN0T2JqOjpFbnVtQz4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtQz4oSlNDOjpKU0ds
b2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVj
dGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUM+KCk7CiAKICNlbmRpZgogCiBTdHJp
bmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoVGVzdE9iajo6S2luZCk7Ci10ZW1wbGF0ZTw+
IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBU
ZXN0T2JqOjpLaW5kKTsKK3RlbXBsYXRlPD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0
aW9uVG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgVGVzdE9iajo6S2luZCk7CiAKLXRlbXBsYXRl
PD4gT3B0aW9uYWw8VGVzdE9iajo6S2luZD4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpLaW5k
PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRl
c3RPYmo6OktpbmQ+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6S2luZD4oSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6S2luZD4oKTsKIAogU3RyaW5nIGNvbnZlcnRFbnVt
ZXJhdGlvblRvU3RyaW5nKFRlc3RPYmo6OlNpemUpOwotdGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5n
KiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVGVzdE9iajo6U2l6ZSk7
Cit0ZW1wbGF0ZTw+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIFRlc3RPYmo6OlNpemUpOwogCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRl
c3RPYmo6OlNpemU+IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6U2l6ZT4oSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpTaXplPiBw
YXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OlNpemU+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6
OkpTVmFsdWUpOwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFs
dWVzPFRlc3RPYmo6OlNpemU+KCk7CiAKIFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmlu
ZyhUZXN0T2JqOjpDb25maWRlbmNlKTsKLXRlbXBsYXRlPD4gSlNDOjpKU1N0cmluZyogY29udmVy
dEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFRlc3RPYmo6OkNvbmZpZGVuY2UpOwor
dGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBUZXN0T2JqOjpDb25maWRlbmNlKTsKIAotdGVtcGxhdGU8PiBPcHRpb25h
bDxUZXN0T2JqOjpDb25maWRlbmNlPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkNvbmZpZGVu
Y2U+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gT3B0aW9uYWw8
VGVzdE9iajo6Q29uZmlkZW5jZT4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpDb25maWRlbmNl
PihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRlPD4gY29uc3Qg
Y2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpDb25maWRlbmNlPigpOwog
Ci10ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9i
ajo6RGljdGlvbmFyeT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8
PiBUZXN0T2JqOjpEaWN0aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25h
cnk+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwogCi1KU0M6OkpTT2JqZWN0
KiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCYsIGNvbnN0IFRlc3RPYmo6OkRpY3Rpb25hcnkmKTsKK0pTQzo6SlNPYmplY3QqIGNvbnZlcnRE
aWN0aW9uYXJ5VG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNET01HbG9iYWxPYmplY3QmLCBj
b25zdCBUZXN0T2JqOjpEaWN0aW9uYXJ5Jik7CiAKLXRlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlv
bmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGwgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6
RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGw+KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gVGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RU
b2xlcmF0ZU51bGwgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91
bGROb3RUb2xlcmF0ZU51bGw+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwog
Ci10ZW1wbGF0ZTw+IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsIGNv
bnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxs
PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IFRlc3RPYmo6OkRp
Y3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsIGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6
OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPihKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
SlNDOjpKU1ZhbHVlKTsKIAotdGVtcGxhdGU8PiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZSBjb252
ZXJ0RGljdGlvbmFyeTxBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZSBjb252ZXJ0
RGljdGlvbmFyeTxBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4oSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6SlNWYWx1ZSk7CiAKLXRlbXBsYXRlPD4gVGVzdE9iajo6UGFyZW50RGljdGlvbmFyeSBj
b252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnkg
Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6UGFyZW50RGljdGlvbmFyeT4oSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CiAKLXRlbXBsYXRlPD4gVGVzdE9iajo6Q2hpbGREaWN0
aW9uYXJ5IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeT4oSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBUZXN0T2JqOjpDaGlsZERpY3Rp
b25hcnkgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5PihKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQog
Ci10ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUEgY29udmVydERpY3Rp
b25hcnk8VGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9uYXJ5QT4oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBUZXN0T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcnlB
IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlvbmFsRGljdGlvbmFyeUE+KEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShD
b25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKIAotdGVtcGxhdGU8PiBUZXN0T2JqOjpD
b25kaXRpb25hbERpY3Rpb25hcnlCIGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNvbmRpdGlv
bmFsRGljdGlvbmFyeUI+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRl
PD4gVGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9uYXJ5QiBjb252ZXJ0RGljdGlvbmFyeTxUZXN0
T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcnlCPihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpK
U1ZhbHVlKTsKIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCiAKLXRlbXBsYXRlPD4gVGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9uYXJ5QyBj
b252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpDb25kaXRpb25hbERpY3Rpb25hcnlDPihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmRpdGlvbmFs
RGljdGlvbmFyeUMgY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6Q29uZGl0aW9uYWxEaWN0aW9u
YXJ5Qz4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CiAKICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKaW5kZXggYzViM2E5
M2MwYjJmYzViYjJlZTE2NzE2NTRmZGIyM2UwMTk4YmYxNi4uMGNhZGMyZDYyN2YwNGEwODJkMWQ0
M2Q5ZjYwZTZlMDNmNjI4MGFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcApAQCAtNDYsOCArNDYsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiAv
LyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
QEAgLTc2LDkzICs3Niw5MyBAQCBjbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiAKIHVzaW5nIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz47CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0Nh
bGxlZSgpKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgQVNT
RVJUKGNhc3RlZFRoaXMpOwotICAgIGF1dG8gYXJyYXlCdWZmZXIgPSBjb252ZXJ0PElETEFycmF5
QnVmZmVyPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiYXJyYXlCdWZmZXIiLCAiVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlCdWZmZXIiKTsgfSk7CisgICAgYXV0byBhcnJheUJ1
ZmZlciA9IGNvbnZlcnQ8SURMQXJyYXlCdWZmZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJhcnJheUJ1ZmZlciIsICJU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsIG51bGxwdHIsICJBcnJheUJ1ZmZlciIpOyB9KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
ICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZSgqYXJy
YXlCdWZmZXIpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZDxJ
RExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigqc3RhdGUsICpjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9
IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihzdGF0ZS0+
anNDYWxsZWUoKSk7CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAg
IEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAgICBhdXRvIGFycmF5QnVmZmVyVmlldyA9IGNvbnZlcnQ8
SURMQXJyYXlCdWZmZXJWaWV3Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
W10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiYXJyYXlCdWZmZXJWaWV3IiwgIlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyVmlldyIpOyB9
KTsKKyAgICBhdXRvIGFycmF5QnVmZmVyVmlldyA9IGNvbnZlcnQ8SURMQXJyYXlCdWZmZXJWaWV3
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAwLCAiYXJyYXlCdWZmZXJWaWV3IiwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
IiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyVmlldyIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShhcnJheUJ1ZmZlclZpZXcucmVsZWFzZU5v
bk51bGwoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElE
TEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpzdGF0ZSwgKmNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0g
anNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KHN0YXRlLT5q
c0NhbGxlZSgpKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAg
QVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGF1dG8gYmxvYiA9IGNvbnZlcnQ8SURMSW50ZXJmYWNl
PEJsb2I+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiYmxvYiIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cyIsIG51bGxwdHIsICJCbG9iIik7IH0pOworICAgIGF1dG8gYmxvYiA9IGNvbnZlcnQ8SURMSW50
ZXJmYWNlPEJsb2I+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiYmxvYiIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cyIsIG51bGxwdHIsICJCbG9iIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yczo6Y3JlYXRlKCpibG9iKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Pj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZh
Y2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKIH0KIAotc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzNChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzNChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yKj4oc3RhdGUtPmpzQ2FsbGVlKCkpOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBq
c0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgYXV0byBzdHJpbmcg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOworICAgIGF1dG8gc3RyaW5nID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2Jq
ZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKHN0cmluZykp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZh
Y2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdU
Rk1vdmUob2JqZWN0KSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0
cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1KEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihzdGF0ZS0+anNDYWxsZWUo
KSk7CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQ29uc3RydWN0b3IqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEFTU0VSVChj
YXN0ZWRUaGlzKTsKLSAgICBhdXRvIGxvbmdBcmdzID0gY29udmVydFZhcmlhZGljQXJndW1lbnRz
PElETExvbmc+KCpzdGF0ZSwgMCk7CisgICAgYXV0byBsb25nQXJncyA9IGNvbnZlcnRWYXJpYWRp
Y0FyZ3VtZW50czxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgMCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoV1RG
TW92ZShsb25nQXJncykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3Jl
YXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigqc3RhdGUsICpj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwogfQogCi10ZW1wbGF0ZTw+IEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBz
dGF0ZSkKK3RlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6
Om1pbjxzaXplX3Q+KDEsIHN0YXRlLT5hcmd1bWVudENvdW50KCkpOworICAgIHNpemVfdCBhcmdz
Q291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsK
ICAgICBpZiAoYXJnc0NvdW50ID09IDApIHsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1KGdsb2JhbE9iamVjdCwgc3RhdGUpOworICAgICAgICBy
ZXR1cm4gY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczUobGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lKTsKICAgICB9CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7Ci0g
ICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7CisgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmpl
Y3QoKSAmJiBhc09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzPEpTQXJyYXlCdWZm
ZXI+KHZtKSkKLSAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzMShnbG9iYWxPYmplY3QsIHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBjb25z
dHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMShsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUpOwogICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiBh
c09iamVjdChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzPEpTQXJyYXlCdWZmZXJWaWV3Pih2
bSkpCi0gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczIoZ2xvYmFsT2JqZWN0LCBzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lKTsKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT5pbmhlcml0czxKU0Jsb2I+KHZtKSkKLSAgICAgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMyhnbG9iYWxPYmpl
Y3QsIHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzMyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOwogICAgICAgICBp
ZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBjb25z
dHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNShnbG9iYWxPYmplY3QsIHN0YXRlKTsK
LSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0KGds
b2JhbE9iamVjdCwgc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7Cisg
ICAgICAgIHJldHVybiBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpOwogICAgIH0KLSAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiB9CiAKIHRlbXBsYXRlPD4gSlNWYWx1
ZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKQEAgLTIzMiwyMyArMjMyLDIzIEBAIHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzOjp+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycygpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
cHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAg
ICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
CkBAIC0yODgsNyArMjg4LDcgQEAgZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJD
b3JlMjZUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0VbXTsgfQogI2VuZGlmCiAjZW5kaWYKIAot
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+JiYg
aW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAg
LTMxMiw5ICszMTIsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0
ZVdyYXBwZXI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KGdsb2JhbE9iamVjdCwgV1RGTW92
ZShpbXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaAppbmRl
eCA2OTRlMGUyZjYyNWUxMTY4MWJhYzY1MTVjNWI1NDQxNjI0MGJlZGJlLi42YTUwOTQzNzcyNTJl
YzI5MTI3YTAxODU0ZTM1NmRiNjNmYTU5NzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLmgKQEAgLTczLDEwICs3MywxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBl
cktleShUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJl
dHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyYpOwot
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGltcGwp
IHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6
anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+JiYp
OwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVk
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVs
bCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9i
YWxPYmplY3QqLCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyYpOworaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycz4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
PiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxs
KCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAppbmRleCBiZjU0OTNhMTA5
YjgwMDFlMGY4MmU3ZTM3OTI5N2NlZWM1YTllMjJjLi43YzI2MWNmMmUwMTIxYjk4NGQyOWExNWRl
OWM0OGYzN2M0NjlkZjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCkBAIC00NSw4ICs0NSw4IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgpAQCAtNzUsNTAgKzc1LDUwIEBAIGNsYXNzIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpK
U05vbkZpbmFsCiAKIHVzaW5nIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2VDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZT47CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3Ry
dWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTEoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZTEoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRv
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2VDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKKyAgICBhdXRvKiBjYXN0ZWRU
aGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25z
dHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMp
OwotICAgIGF1dG8gc2VxdWVuY2VPZlN0cmluZ3MgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlw
ZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGF1dG8gc2VxdWVuY2VPZlN0cmluZ3MgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8
SURMRE9NU3RyaW5nPj46OlJldHVyblR5cGV7IH0gOiBjb252ZXJ0PElETFNlcXVlbmNlPElETERP
TVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJpbmdzKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3N0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZTIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKKyAgICBh
dXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2VDb25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJU
KGNhc3RlZFRoaXMpOwotICAgIGF1dG8gc3RyaW5nID0gY29udmVydDxJRExET01TdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHN0cmluZyA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlOjpjcmVhdGUoV1RGTW92ZShzdHJpbmcpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2U+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKIH0KIAotdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogc3RhdGUpCit0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBzaXpl
X3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBzdGF0ZS0+YXJndW1lbnRDb3VudCgp
KTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAwKSB7Ci0gICAgICAgIHJl
dHVybiBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlMShn
bG9iYWxPYmplY3QsIHN0YXRlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UxKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSk7CiAgICAgfQogICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewotICAgICAgICBKU1ZhbHVl
IGRpc3Rpbmd1aXNoaW5nQXJnID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgICAg
ICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKICAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlzVW5kZWZpbmVkKCkpCi0gICAg
ICAgICAgICByZXR1cm4gY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZTEoZ2xvYmFsT2JqZWN0LCBzdGF0ZSk7Ci0gICAgICAgIGlmIChoYXNJdGVyYXRvck1l
dGhvZCgqc3RhdGUsIGRpc3Rpbmd1aXNoaW5nQXJnKSkKLSAgICAgICAgICAgIHJldHVybiBjb25z
dHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlMShnbG9iYWxPYmpl
Y3QsIHN0YXRlKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2UyKGdsb2JhbE9iamVjdCwgc3RhdGUpOworICAgICAgICAgICAg
cmV0dXJuIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2Ux
KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7CisgICAgICAgIGlmIChoYXNJdGVyYXRv
ck1ldGhvZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBkaXN0aW5ndWlzaGluZ0FyZykpCisgICAgICAg
ICAgICByZXR1cm4gY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZTEobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJuIGNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UyKGxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7CiAgICAgfQotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKIH0KIAogdGVtcGxhdGU8PiBKU1ZhbHVlIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcjo6cHJvdG90
eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQpAQCAtMTg4LDIzICsxODgsMjMgQEAgdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRo
aXNPYmplY3QtPkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6On5KU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKCk7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUt
Pmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBl
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKQEAgLTI0NCw3ICsyNDQsNyBAQCBleHRlcm4gIkMi
IHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUzOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlRQogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+JiYgaW1wbCkKK0pTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2U+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAg
LTI2OCw5ICsyNjgsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0
ZVdyYXBwZXI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+KGdsb2JhbE9i
amVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSYgaW1w
bCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICBy
ZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQog
CiBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSogSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaAppbmRleCA4MjFlNTNlODdhNjM4MjU2YjE0MjkxZTIxNmIx
OWU2ODI0YmEzZmZmLi5kN2VhOTAzZWUyNTRiYzBiY2U0YzA0NzNlZDljMDE5MmIxNjIyNGJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlLmgKQEAgLTczLDEwICs3MywxMCBAQCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSogd3JhcHBhYmxlT2JqZWN0KQog
ICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZSYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRl
LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U+JiYpOwotaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0
YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgp
OyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxP
YmplY3QqLCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSYpOworaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZT4mJik7
CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPiYmIGltcGwpIHsg
cmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAogdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5z
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
cmlkZUJ1aWx0aW5zLmNwcAppbmRleCAyNDE2MTgwMTAxNGI1ZDQ3MTY2NjllYWJjNjM2YWFiOWVm
YjQzN2NmLi4wNTVmNzM1NWYwZDBiMmQyMDE2OTdhNzA2NTU4YTdiNjI4NTk2MTNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJp
ZGVCdWlsdGlucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCkBAIC01MCw4ICs1MCw4IEBAIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBl
RnVuY3Rpb25OYW1lZEl0CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdE92ZXJyaWRl
QnVpbHRpbnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0T3ZlcnJpZGVCdWlsdGlu
c0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTQ4LDcg
KzE0OCw3IEBAIHZvaWQgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6ZGVzdHJveShKU0M6OkpTQ2Vs
bCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjp+SlNUZXN0
T3ZlcnJpZGVCdWlsdGlucygpOwogfQogCi1ib29sIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6Omdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdE92
ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0T3ZlcnJpZGVCdWlsdGlucyo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwpAQCAtMTU5LDE3ICsxNTksMTcgQEAgYm9vbCBK
U1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBzdGEKICAgICAgICAgICAgIHJldHVybiB0eXBlbmFtZSBHZXR0ZXJJRExU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGUgeyBHZXR0ZXJJRExUeXBlOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUocmVzdWx0KSB9OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH07
Ci0gICAgaWYgKGF1dG8gbmFtZWRQcm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5
PE92ZXJyaWRlQnVpbHRpbnM6Olllcz4oKnN0YXRlLCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
LCBnZXR0ZXJGdW5jdG9yKSkgewotICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExJbnRlcmZh
Y2U8Tm9kZT4+KCpzdGF0ZSwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG5h
bWVkUHJvcGVydHkudmFsdWUoKSkpOworICAgIGlmIChhdXRvIG5hbWVkUHJvcGVydHkgPSBhY2Nl
c3NWaXNpYmxlTmFtZWRQcm9wZXJ0eTxPdmVycmlkZUJ1aWx0aW5zOjpZZXM+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBnZXR0ZXJGdW5jdG9yKSkgewor
ICAgICAgICBhdXRvIHZhbHVlID0gdG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUobmFtZWRQcm9w
ZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgdmFsdWUp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBy
ZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNUZXN0T3ZlcnJpZGVCdWls
dGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRl
eCwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7CkBAIC0xODAsNjggKzE4
MCw2OCBAQCBib29sIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YQogICAgICAgICAgICAgcmV0dXJuIHR5cGVu
YW1lIEdldHRlcklETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZSB7IEdldHRlcklETFR5cGU6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShyZXN1bHQpIH07CiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgfTsKLSAgICBpZiAoYXV0byBuYW1lZFByb3BlcnR5ID0gYWNjZXNzVmlzaWJs
ZU5hbWVkUHJvcGVydHk8T3ZlcnJpZGVCdWlsdGluczo6WWVzPigqc3RhdGUsICp0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIGdldHRlckZ1bmN0b3IpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSB0
b0pTPElETEludGVyZmFjZTxOb2RlPj4oKnN0YXRlLCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCksIFdURk1vdmUobmFtZWRQcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgaWYgKGF1dG8gbmFtZWRQ
cm9wZXJ0eSA9IGFjY2Vzc1Zpc2libGVOYW1lZFByb3BlcnR5PE92ZXJyaWRlQnVpbHRpbnM6Olll
cz4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldHRl
ckZ1bmN0b3IpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSB0b0pTPElETEludGVyZmFjZTxOb2Rl
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgV1RG
TW92ZShuYW1lZFByb3BlcnR5LnZhbHVlKCkpKTsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlz
T2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4g
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBzdGF0ZSwgaW5kZXgs
IHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChv
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKG9iamVjdCwgaW5mbygpKTsKICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFt
ZSkpOwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgc3RhdGUsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLXRl
bXBsYXRlPD4gaW5saW5lIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqIElETE9wZXJhdGlvbjxKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0T3ZlcnJpZGVCdWlsdGlucyogSURMT3BlcmF0aW9uPEpTVGVzdE92ZXJyaWRl
QnVpbHRpbnM+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RPdmVy
cmlkZUJ1aWx0aW5zKj4oc3RhdGUudm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOworICAgIHJldHVy
biBqc0R5bmFtaWNDYXN0PEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMqPihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUganNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T3ZlcnJp
ZGVCdWlsdGluc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBl
LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29s
IHNldEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgog
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29u
c3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVG
dW5jdGlvbk5hbWVkSXRlbUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNUZXN0T3ZlcnJpZGVCdWlsdGlucz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rpb25OYW1lZEl0
ZW1Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBuYW1lID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBuYW1l
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExJbnRlcmZhY2U8Tm9kZT4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLm5hbWVkSXRlbShXVEZNb3ZlKG5hbWUpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubmFtZWRJdGVtKFdURk1vdmUobmFtZSkpKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T3ZlcnJpZGVCdWlsdGluc1By
b3RvdHlwZUZ1bmN0aW9uTmFtZWRJdGVtKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJy
aWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BB
UkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zPjo6Y2FsbDxqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVuY3Rpb25O
YW1lZEl0ZW1Cb2R5Pigqc3RhdGUsICJuYW1lZEl0ZW0iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0
aW9uPEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM+OjpjYWxsPGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQ
cm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAibmFtZWRJdGVtIik7CiB9CiAKIHZvaWQgSlNUZXN0T3ZlcnJpZGVCdWlsdGluczo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpAQCAtMjc3
LDcgKzI3Nyw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTIwVGVz
dE92ZXJyaWRlQnVpbHRpbnNFW107IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUmVmPFRlc3RPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpCitKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPFRlc3RPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpCiB7CiAKICNp
ZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC0zMDEsOSArMzAxLDkgQEAgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RPdmVycmlkZUJ1aWx0
aW5zPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3RPdmVycmlkZUJ1aWx0aW5zJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVGVzdE92ZXJyaWRlQnVpbHRpbnMmIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAo
c3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogVGVzdE92ZXJyaWRlQnVpbHRpbnMq
IEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmgKaW5kZXggYWIyN2UxYWVh
NjllMWEyOGFlOTU1MTI3YWFiODZkMGFhODJjMTMzNy4uNDQ3ZjNmZjc0YzllZWE2ZThhZTJjZTIz
ZGEzOThmM2JjYjM1NDUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oCkBAIC0z
OSw5ICszOSw5IEBAIGNsYXNzIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnMgOiBwdWJsaWMgSlNET01X
cmFwcGVyPFRlc3RPdmVycmlkZUJ1aWx0aW5zPiB7CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYp
OwogICAgIHN0YXRpYyBUZXN0T3ZlcnJpZGVCdWlsdGlucyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6
OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9u
TW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTc4LDEwICs3OCwxMCBAQCBp
bmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0T3ZlcnJpZGVCdWlsdGlucyogd3JhcHBhYmxlT2Jq
ZWN0KQogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T3ZlcnJpZGVCdWlsdGlu
cyYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE92ZXJyaWRlQnVpbHRpbnMqIGltcGwp
IHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6
anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE92ZXJyaWRlQnVpbHRpbnM+JiYpOwotaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RPdmVycmlkZUJ1aWx0
aW5zPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9i
YWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBU
ZXN0T3ZlcnJpZGVCdWlsdGlucyYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFRlc3RPdmVycmlkZUJ1aWx0aW5zKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9K
UyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxs
KCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0T3ZlcnJpZGVCdWlsdGlucz4mJik7Citpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRy
PFRlc3RPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlD
cmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFRlc3RPdmVycmlkZUJ1aWx0aW5zPiB7CiAgICAgdXNpbmcgV3Jh
cHBlckNsYXNzID0gSlNUZXN0T3ZlcnJpZGVCdWlsdGluczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbklu
dGVyZmFjZS5jcHAKaW5kZXggMTRjMTA5MWE5MjRmOTlkNjU2Zjk3ZGI3OTdkZjQ4NjM5YTZhMmM5
OC4uZTU3NmJkZmJiMzdiZmZmNzdjYTM3ZjI0MThkMzcxOTUxNjEzMTUzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbkludGVy
ZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFBsdWdpbkludGVyZmFjZS5jcHAKQEAgLTQxLDggKzQxLDggQEAgdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFBsdWdp
bkludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RQbHVnaW5JbnRlcmZhY2VDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RQbHVnaW5JbnRlcmZhY2VDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CiAKIGNsYXNzIEpTVGVzdFBsdWdpbkludGVyZmFjZVByb3RvdHlwZSA6IHB1YmxpYyBK
U0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTM4LDUxICsxMzgsNTEgQEAgdm9p
ZCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAg
dGhpc09iamVjdC0+SlNUZXN0UGx1Z2luSW50ZXJmYWNlOjp+SlNUZXN0UGx1Z2luSW50ZXJmYWNl
KCk7CiB9CiAKLWJvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6Omdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0UGx1Z2luSW50ZXJm
YWNlKj4ob2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7Ci0gICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgaWYgKHBsdWdpbkVs
ZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlO
YW1lLCBzbG90KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChvYmpl
Y3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wg
SlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitib29sIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0UGx1Z2luSW50ZXJmYWNlKj4o
b2JqZWN0KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCk7
Ci0gICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0
b21HZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90
KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLWJvb2wgSlNUZXN0UGx1
Z2luSW50ZXJmYWNlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFBy
b3BlcnR5U2xvdCkKK2Jvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXQoSlNDZWxsKiBjZWxs
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3Qp
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RQbHVnaW5JbnRlcmZhY2Uq
PihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAKICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgIGlmIChwbHVnaW5FbGVtZW50
Q3VzdG9tUHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9w
ZXJ0eVNsb3QsIHB1dFJlc3VsdCkpCisgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21QdXQodGhp
c09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJv
cGVydHlTbG90LCBwdXRSZXN1bHQpKQogICAgICAgICByZXR1cm4gcHV0UmVzdWx0OwogCi0gICAg
cmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHB1dFByb3BlcnR5U2xvdCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlT
bG90KTsKIH0KIAotYm9vbCBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdykKK2Jvb2wgSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2ln
bmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RQbHVnaW5JbnRlcmZh
Y2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIGlu
ZGV4KTsKICAgICBQdXRQcm9wZXJ0eVNsb3QgcHV0UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHNo
b3VsZFRocm93KTsKICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwotICAgIGlmIChwbHVnaW5F
bGVtZW50Q3VzdG9tUHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBw
dXRQcm9wZXJ0eVNsb3QsIHB1dFJlc3VsdCkpCisgICAgaWYgKHBsdWdpbkVsZW1lbnRDdXN0b21Q
dXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
cHV0UHJvcGVydHlTbG90LCBwdXRSZXN1bHQpKQogICAgICAgICByZXR1cm4gcHV0UmVzdWx0Owog
Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFs
dWUsIHNob3VsZFRocm93KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAKIENh
bGxUeXBlIEpTVGVzdFBsdWdpbkludGVyZmFjZTo6Z2V0Q2FsbERhdGEoSlNDZWxsKiBjZWxsLCBD
YWxsRGF0YSYgY2FsbERhdGEpCkBAIC0xOTMsMjMgKzE5MywyMyBAQCBDYWxsVHlwZSBKU1Rlc3RQ
bHVnaW5JbnRlcmZhY2U6OmdldENhbGxEYXRhKEpTQ2VsbCogY2VsbCwgQ2FsbERhdGEmIGNhbGxE
YXRhKQogICAgIHJldHVybiBwbHVnaW5FbGVtZW50Q3VzdG9tR2V0Q2FsbERhdGEodGhpc09iamVj
dCwgY2FsbERhdGEpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RQbHVnaW5JbnRlcmZhY2VD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0UGx1Z2luSW50ZXJmYWNlUHJvdG90eXBlKj4odm0sIEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFBsdWdpbkludGVyZmFjZTo6Z2V0Q29uc3RydWN0
b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0
byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RQbHVnaW5JbnRlcmZhY2VQcm90b3R5
cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
cHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3RvcgpAQCAtMjQ5LDcgKzI0OSw3IEBAIGV4dGVybiAiQyIgeyBleHRl
cm4gdm9pZCogX1pUVk43V2ViQ29yZTE5VGVzdFBsdWdpbkludGVyZmFjZUVbXTsgfQogI2VuZGlm
CiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFBsdWdpbkludGVyZmFj
ZT4mJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0UGx1Z2luSW50
ZXJmYWNlPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC0y
NzMsOSArMjczLDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVX
cmFwcGVyPFRlc3RQbHVnaW5JbnRlcmZhY2U+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7
CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFBsdWdpbkludGVyZmFjZSYgaW1wbCkKK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RQbHVnaW5JbnRlcmZhY2UmIGltcGwp
CiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0
dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAog
VGVzdFBsdWdpbkludGVyZmFjZSogSlNUZXN0UGx1Z2luSW50ZXJmYWNlOjp0b1dyYXBwZWQoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQbHVnaW5JbnRlcmZhY2Uu
aAppbmRleCBjNzFlYjE2Nzg4YTg1NDI4MjliZTkzZjBjMGFmMmE1NThiYTcxNmYxLi5iOGRlM2U1
NjE2NDkwOTUyYzU5ZDNhZWU0NzYzMjU2ZDIxNTBmNzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFBsdWdpbklu
dGVyZmFjZS5oCkBAIC00MCwxMCArNDAsMTAgQEAgY2xhc3MgSlNUZXN0UGx1Z2luSW50ZXJmYWNl
IDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0UGx1Z2luSW50ZXJmYWNlPiB7CiAgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBUZXN0UGx1Z2luSW50ZXJmYWNlKiB0b1dyYXBw
ZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpT
Q2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6
SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQo
SlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRC
eUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgSlND
OjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKIAog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTgyLDEwICs4MiwxMCBA
QCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0UGx1Z2luSW50ZXJmYWNlKiB3cmFwcGFibGVP
YmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RQbHVnaW5JbnRlcmZh
Y2UmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RQbHVnaW5JbnRlcmZhY2UqIGltcGwp
IHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6
anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFBsdWdpbkludGVyZmFjZT4mJik7Ci1pbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdFBsdWdpbkludGVyZmFj
ZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVz
dFBsdWdpbkludGVyZmFjZSYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFRlc3RQbHVnaW5JbnRlcmZhY2UqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsg
fQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RQbHVnaW5JbnRlcmZhY2U+JiYpOworaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0
UGx1Z2luSW50ZXJmYWNlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVk
KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgp
KSA6IEpTQzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPFRlc3RQbHVnaW5JbnRlcmZhY2U+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQuY3BwCmluZGV4IDg4ZTMxYWMyZDA5YzBjYWNkNDg2MDdiM2ZjY2MxNzFjNTFl
NTY4YTIuLmNkZDY3YjQyMmUxNjE2MzZkNGU1Nzc2YWYyY2UwZTRjZjRlOTM2ZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCkBAIC00NSwxNCArNDUsMTQg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLXRlbXBsYXRl
PD4gVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6SW5pdCBjb252ZXJ0RGljdGlvbmFyeTxUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpJbml0PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQordGVtcGxhdGU8PiBUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpJbml0IGNvbnZlcnRE
aWN0aW9uYXJ5PFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluaXQ+KEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYm9v
bCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgYXV0
byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0
KCk7CiAgICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJv
d1R5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogICAgIFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluaXQgcmVz
dWx0OwpAQCAtNjAsMTEgKzYwLDExIEBAIHRlbXBsYXRlPD4gVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudDo6SW5pdCBjb252ZXJ0RGljdGlvbmFyeTxUZXN0UHJvbWlzZVJlamVjdGlvCiAgICAgaWYg
KGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBidWJibGVzVmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGVsc2UgewotICAgICAgICBidWJibGVzVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJidWJibGVzIikpOworICAgICAgICBidWJibGVz
VmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImJ1YmJsZXMiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFidWJibGVzVmFsdWUuaXNVbmRlZmluZWQo
KSkgewotICAgICAgICByZXN1bHQuYnViYmxlcyA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUs
IGJ1YmJsZXNWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5idWJibGVzID0gY29udmVydDxJRExCb29s
ZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBidWJibGVzVmFsdWUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3Vs
dC5idWJibGVzID0gZmFsc2U7CkBAIC03MiwxMSArNzIsMTEgQEAgdGVtcGxhdGU8PiBUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50OjpJbml0IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RQcm9taXNlUmVq
ZWN0aW8KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIGNhbmNlbGFibGVWYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNhbmNlbGFi
bGUiKSk7CisgICAgICAgIGNhbmNlbGFibGVWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FuY2VsYWJsZSIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIWNhbmNlbGFibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5jYW5j
ZWxhYmxlID0gY29udmVydDxJRExCb29sZWFuPihzdGF0ZSwgY2FuY2VsYWJsZVZhbHVlKTsKKyAg
ICAgICAgcmVzdWx0LmNhbmNlbGFibGUgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9i
YWxPYmplY3QsIGNhbmNlbGFibGVWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0LmNhbmNlbGFibGUg
PSBmYWxzZTsKQEAgLTg0LDExICs4NCwxMSBAQCB0ZW1wbGF0ZTw+IFRlc3RQcm9taXNlUmVqZWN0
aW9uRXZlbnQ6OkluaXQgY29udmVydERpY3Rpb25hcnk8VGVzdFByb21pc2VSZWplY3RpbwogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgY29tcG9zZWRWYWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbXBvc2VkVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJjb21wb3NlZCIpKTsKKyAgICAgICAg
Y29tcG9zZWRWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiY29tcG9zZWQiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFjb21wb3NlZFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LmNvbXBvc2VkID0gY29udmVydDxJRExCb29s
ZWFuPihzdGF0ZSwgY29tcG9zZWRWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5jb21wb3NlZCA9IGNv
bnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgY29tcG9zZWRWYWx1ZSk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9IGVsc2UK
ICAgICAgICAgcmVzdWx0LmNvbXBvc2VkID0gZmFsc2U7CkBAIC05NiwyNSArOTYsMjUgQEAgdGVt
cGxhdGU8PiBUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpJbml0IGNvbnZlcnREaWN0aW9uYXJ5
PFRlc3RQcm9taXNlUmVqZWN0aW8KICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAg
IHByb21pc2VWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHByb21p
c2VWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InByb21pc2UiKSk7CisgICAgICAgIHByb21pc2VWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicHJvbWlzZSIpKTsKICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBp
ZiAoIXByb21pc2VWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5wcm9taXNl
ID0gY29udmVydDxJRExQcm9taXNlPElETEFueT4+KHN0YXRlLCBwcm9taXNlVmFsdWUpOworICAg
ICAgICByZXN1bHQucHJvbWlzZSA9IGNvbnZlcnQ8SURMUHJvbWlzZTxJRExBbnk+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9taXNlVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhyb3dSZXF1aXJlZE1l
bWJlclR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgInByb21pc2UiLCAiVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudEluaXQiLCAiUHJvbWlzZSIpOworICAgICAgICB0aHJvd1JlcXVpcmVkTWVt
YmVyVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsICJwcm9taXNlIiwg
IlRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRJbml0IiwgIlByb21pc2UiKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CiAgICAgSlNWYWx1ZSByZWFzb25WYWx1ZTsKICAgICBpZiAoaXNOdWxs
T3JVbmRlZmluZWQpCiAgICAgICAgIHJlYXNvblZhbHVlID0ganNVbmRlZmluZWQoKTsKICAgICBl
bHNlIHsKLSAgICAgICAgcmVhc29uVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJyZWFzb24iKSk7CisgICAgICAgIHJlYXNvblZhbHVlID0gb2Jq
ZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJyZWFzb24iKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgaWYgKCFyZWFzb25WYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IHJlc3VsdC5yZWFzb24gPSBjb252ZXJ0PElETEFueT4oc3RhdGUsIHJlYXNvblZhbHVlKTsKKyAg
ICAgICAgcmVzdWx0LnJlYXNvbiA9IGNvbnZlcnQ8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCByZWFzb25WYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0LnJlYXNvbiA9IGpzVW5kZWZpbmVkKCk7
CkBAIC0xMjMsMTAgKzEyMywxMCBAQCB0ZW1wbGF0ZTw+IFRlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQ6OkluaXQgY29udmVydERpY3Rpb25hcnk8VGVzdFByb21pc2VSZWplY3RpbwogCiAvLyBBdHRy
aWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFBy
b21pc2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFJl
YXNvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RQcm9taXNlUmVqZWN0aW9u
RXZlbnRQcm9taXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudFJlYXNvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBjbGFzcyBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnRQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAg
LTE1NSwyMiArMTU1LDIxIEBAIGNsYXNzIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb3Rv
dHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogCiB1c2luZyBKU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50PjsKIAotdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3RlbXBsYXRl
PD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKKyAgICBhdXRv
KiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVj
dG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHR5cGUgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBldmVudEluaXREaWN0ID0gY29udmVydDxJRExEaWN0aW9u
YXJ5PFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluaXQ+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7CisgICAgYXV0byBldmVudEluaXREaWN0ID0gY29udmVydDxJRExE
aWN0aW9uYXJ5PFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluaXQ+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9iamVj
dCA9IFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OmNyZWF0ZSgqc3RhdGUsIFdURk1vdmUodHlw
ZSksIFdURk1vdmUoZXZlbnRJbml0RGljdCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Pj4o
KnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwor
ICAgIGF1dG8gb2JqZWN0ID0gVGVzdFByb21pc2VSZWplY3Rpb25FdmVudDo6Y3JlYXRlKCpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZSh0eXBlKSwgV1RGTW92ZShldmVudEluaXRE
aWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkPElETElu
dGVyZmFjZTxUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CiB9CiAKIHRl
bXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rvcjo6
cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQpAQCAtMjM1LDYwICsyMzQsNjAgQEAgSlNWYWx1ZSBKU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxP
YmplY3QKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0UHJvbWlzZVJlamVjdGlv
bkV2ZW50Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudCogSURMQXR0cmlidXRlPEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudD46OmNh
c3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50KiBJRExBdHRyaWJ1dGU8SlNUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50Pjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBqc0R5bmFt
aWNDYXN0PEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCo+KHN0YXRlLnZtKCksIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFByb21p
c2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3Rv
dHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0K
IAotYm9vbCBzZXRKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byog
cHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRQcm90
b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3RvcgogICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudFByb21pc2VHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb21pc2VHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFByb21pc2VSZWplY3Rpb25F
dmVudCYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExQcm9taXNlPElETEFueT4+
KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wcm9t
aXNlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExQcm9taXNlPElETEFueT4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLnByb21pc2UoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UHJvbWlzZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb21pc2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Pjo6Z2V0
PGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb21pc2VHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPigqc3RhdGUsIHRoaXNWYWx1ZSwgInByb21pc2UiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudD46Omdl
dDxqc1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRQcm9taXNlR2V0dGVyLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgInByb21pc2UiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudFJlYXNvbkdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UmVhc29uR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RQcm9taXNlUmVqZWN0
aW9uRXZlbnQmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQW55PihzdGF0ZSwg
dGhyb3dTY29wZSwgaW1wbC5yZWFzb24oKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElE
TEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5yZWFzb24oKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50UmVhc29uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50UmVhc29uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudD46OmdldDxqc1Rlc3RQcm9taXNlUmVqZWN0aW9u
RXZlbnRSZWFzb25HZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCAicmVhc29uIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQ+OjpnZXQ8anNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50UmVh
c29uR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAicmVhc29uIik7CiB9CiAKIHZvaWQgSlNUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCkBAIC0zMDksNyArMzA4LDcgQEAgZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRW
TjdXZWJDb3JlMjVUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50RVtdOyB9CiAjZW5kaWYKICNlbmRp
ZgogCi1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
PiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQ+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkK
QEAgLTMzMyw5ICszMzIsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNy
ZWF0ZVdyYXBwZXI8VGVzdFByb21pc2VSZWplY3Rpb25FdmVudD4oZ2xvYmFsT2JqZWN0LCBXVEZN
b3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50JiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFByb21p
c2VSZWplY3Rpb25FdmVudCYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsIGltcGwpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9u
RXZlbnQuaAppbmRleCA3NGM3MDJmZmEyNzVjYWNhNmRjNzk3ODY0MTY0NDZlOTNiYjA5ZTIxLi42
ZTJmN2M3ZjAwZDhjNmRkMmQ4YmRlNzJjOTYwMTNlMzBhN2E3MWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJlamVjdGlv
bkV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5oCkBAIC02MCwxNiArNjAsMTYgQEAgY2xhc3MgSlNU
ZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50IDogcHVibGljIEpTRXZlbnQgewogICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogfTsKIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQmKTsK
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQqIGltcGwp
IHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6
anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFByb21pc2VSZWplY3Rpb25FdmVudD4mJik7
Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudD4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwo
KTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCYpOworaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQqIGltcGwp
IHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwg
KmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RQcm9taXNl
UmVqZWN0aW9uRXZlbnQ+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50PiYmIGlt
cGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0K
IAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ7CiAgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQqOwogfTsKLXRlbXBsYXRlPD4gVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudDo6SW5pdCBjb252ZXJ0RGljdGlvbmFyeTxUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
OjpJbml0PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IFRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQ6OkluaXQgY29udmVydERpY3Rpb25hcnk8VGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudDo6SW5pdD4oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7
CiAKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3Bw
CmluZGV4IDJhMDMxZDA5NDM0N2JkOGYwNjg2NGUyODYxMDdkNDMxYjI5NDJjOTYuLmMzNGY4MGVk
NTgyYjRmNTVkODUwMGMwNTM4N2RjMWMwMjA4NTQwMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXph
dGlvbi5jcHAKQEAgLTU4LDMyICs1OCwzMiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTQwogCiAv
LyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0
dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRo
VW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
Rm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwot
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJ
bmRpcmVjdGx5QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3pl
bkFycmF5QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96ZW5B
cnJheUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
RWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJp
YWxpemFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJk
VW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhM
b25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdB
dHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
U2l4dGhUeXBlZGVmQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25T
aXh0aFR5cGVkZWZBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRy
aWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWln
aHRoSW5kaXJlY3RseUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpT
VGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1
dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRy
aWJ1dGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVHdl
bGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFz
cyBKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9i
amVjdCB7CiBwdWJsaWM6CkBAIC0xOTIsNDg2ICsxOTIsNDg1IEBAIHZvaWQgSlNUZXN0U2VyaWFs
aXphdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rl
c3RTZXJpYWxpemF0aW9uOjp+SlNUZXN0U2VyaWFsaXphdGlvbigpOwogfQogCi10ZW1wbGF0ZTw+
IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uKiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXph
dGlvbj46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQor
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbiogSURMQXR0cmlidXRlPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8
SlNUZXN0U2VyaWFsaXphdGlvbio+KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uKj4oSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbiogSURMT3BlcmF0
aW9uPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uKiBJRExPcGVyYXRpb248SlNUZXN0U2VyaWFs
aXphdGlvbj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlh
bGl6YXRpb24qPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpz
RHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbio+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
YXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uUHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb246
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlv
bjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90
eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25D
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkNv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvblBy
b3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
bkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlh
bGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9u
JiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIHRo
cm93U2NvcGUsIGltcGwuZmlyc3RTdHJpbmdBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5maXJzdFN0cmluZ0F0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFs
aXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVHZXR0
ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAi
Zmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNl
cmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRl
R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc1ZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
c3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRo
cm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEZpcnN0U3Ry
aW5nQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmlu
Z0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgImZpcnN0U3RyaW5nQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaXJz
dFN0cmluZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiZmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
blNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuc2Vjb25kTG9uZ0F0dHJpYnV0ZSgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRlKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25n
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdB
dHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0
dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0
aGlzVmFsdWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25n
QXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAic2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1
dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZVNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+
KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dT
Y29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0U2Vjb25kTG9uZ0F0
dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmli
dXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlv
blNlY29uZExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0
cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJzZWNvbmRMb25nQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25U
aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0RXhjZXB0aW9uPj4oc3RhdGUsICp0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRoaXJkVW5zZXJpYWxpemFibGVBdHRy
aWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0RXhj
ZXB0aW9uPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIGltcGwudGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0
U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidGhpcmRVbnNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFs
aXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJp
YnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgInRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFs
aXphYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRp
b24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFi
bGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+KHN0YXRlLCB2YWx1ZSwg
W10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInRo
aXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdEV4Y2VwdGlvbiIpOyB9KTsKKyAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAi
dGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7IH0pOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNl
dHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6
OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0
dXJuIGltcGwuc2V0VGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgqbmF0aXZlVmFsdWUpOwog
ICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25UaGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25UaGlyZFVuc2VyaWFs
aXphYmxlQXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAi
dGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhpcmRVbnNl
cmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZSwgZW5jb2RlZFZhbHVlLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3Rl
ZERvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0
aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlh
bGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMVW5yZXN0cmljdGVk
RG91YmxlPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVB
dHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVucmVzdHJpY3RlZERv
dWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3Ry
aWN0ZWREb3VibGVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0
ZWREb3VibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uRm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImZvdXJ0aFVucmVzdHJpY3RlZERvdWJs
ZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlv
bj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmli
dXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5y
ZXN0cmljdGVkRG91YmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNl
cmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oc3RhdGUs
IHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUs
IHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEZvdXJ0
aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
fSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Gb3VydGhV
bnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFs
aXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZm91cnRoVW5yZXN0cmljdGVk
RG91YmxlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVz
dFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXph
dGlvbiYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihzdGF0ZSwgdGhy
b3dTY29wZSwgaW1wbC5maWZ0aExvbmdBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlm
dGhMb25nQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8
anNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJmaWZ0aExvbmdBdHRyaWJ1
dGUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8
anNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImZp
ZnRoTG9uZ0F0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0
aExvbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJl
dHVybiBpbXBsLnNldEZpZnRoTG9uZ0F0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
bkZpZnRoTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0
PHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFs
aXphdGlvbkZpZnRoTG9uZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmlmdGhMb25nQXR0cmlidXRlIik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExEb3VibGU+KHN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlw
ZWRlZkF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRG91YmxlPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0
ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvblNpeHRoVHlwZWRlZkF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNl
cmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAic2l4dGhUeXBlZGVmQXR0cmlidXRl
Iik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpz
VGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJz
aXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0
aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihzdGF0ZSwgdmFsdWUpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwot
ICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBB
dHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZd
IHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0U2l4dGhUeXBlZGVmQXR0cmlidXRlKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvblNpeHRoVHlwZWRl
ZkF0dHJpYnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNpeHRo
VHlwZWRlZkF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFs
aXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRl
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJz
aXh0aFR5cGVkZWZBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbD4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5zZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bD4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLnNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
U2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxp
emF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFi
bGVBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNl
cmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKIH0KIAotc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXph
dGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsPj4oc3RhdGUsIHZhbHVlLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCAiVGVzdFNlcmlhbGl6YXRpb24iLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIik7IH0pOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6
YXRpb24iLCAic2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiwgIlRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dT
Y29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0U2V2ZW50aERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCpuYXRpdmVWYWx1ZSk7CiAgICAgfSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVk
VmFsdWUsICJzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFs
aXphdGlvblNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAic2V2ZW50aERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJ
bmRpcmVjdGx5QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U+PihzdGF0
ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMSW50ZXJm
YWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxP
YmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0
aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0
ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0
cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRo
aXNWYWx1ZSwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiKTsKKyAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0
aEluZGlyZWN0bHlBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJlaWdodGhJbmRpcmVjdGx5QXR0
cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9u
RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RT
ZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJ
bmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZT4+KHN0YXRlLCB2YWx1ZSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAi
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIik7IH0pOworICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0
SW5oZXJpdGFuY2U+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0
aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RT
ZXJpYWxpemF0aW9uIiwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhy
b3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0RWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSgqbmF0aXZlVmFsdWUpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVz
dFNlcmlhbGl6YXRpb25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uRWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5p
bnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25OaW50aE9w
dGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwot
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlM8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsPj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5uaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25O
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46Omdl
dDxqc1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRo
aXNWYWx1ZSwgIm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RT
ZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRl
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uTmludGhP
cHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxh
YmxlPElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD4+PihzdGF0ZSwg
dmFsdWUsIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlv
biIsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6
YXRpb24iLCAibmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiwgIlRl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwg
dGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0TmludGhP
cHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uTmludGhPcHRpb25hbERpcmVjdGx5
U2VyaWFsaXphYmxlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0
SlNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJp
YnV0ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIm5pbnRoT3B0aW9u
YWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uTmludGhP
cHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlT
ZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJv
emVuQXJyYXlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwudGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96ZW5BcnJheUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5
QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdFNlcmlhbGl6YXRpb24+OjpnZXQ8anNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVu
QXJyYXlBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpz
dGF0ZSwgdGhpc1ZhbHVlLCAidGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpOworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0
aW9uVGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgInRlbnRoRnJvemVu
QXJyYXlBdHRyaWJ1dGUiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
blRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExGcm96ZW5BcnJheTxJRExCb29sZWFuPj4o
c3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExGcm96ZW5B
cnJheTxJRExCb29sZWFuPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGlt
cGwuc2V0VGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
blRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlh
bGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRy
aWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ0ZW50aEZyb3pl
bkFycmF5QXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxp
emF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmli
dXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUs
ICJ0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25F
bGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5lbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKCkp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5lbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKCkpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2Vx
dWVuY2VBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbj46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVu
dGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dD4oKnN0YXRlLCB0aGlzVmFsdWUsICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlh
bGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiZWxldmVu
dGhTZXF1ZW5jZUF0dHJpYnV0ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmlu
Zz4+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2Vx
dWVuY2U8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRl
cjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNh
bGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJu
IGltcGwuc2V0RWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpT
VGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNl
cmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXphdGlvbkVsZXZlbnRoU2VxdWVuY2VB
dHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJlbGV2ZW50
aFNlcXVlbmNlQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJp
YWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25FbGV2ZW50aFNlcXVlbmNlQXR0
cmlidXRlU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpLCB0aHJvd1Njb3BlLCBpbXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSgp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnR3ZWxmdGhJbnRlcmZhY2VT
ZXF1ZW5jZUF0dHJpYnV0ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1
ZW5jZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRo
SW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0
cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6
Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKTsKIH0K
IAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJm
YWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFs
aXphdGlvbiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVHdlbGZ0aEludGVy
ZmFjZVNlcXVlbmNlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KHN0YXRlLCB2YWx1ZSk7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNh
bGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBs
LnNldFR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJp
YnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRp
b25Ud2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ0d2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKTsK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb24+OjpzZXQ8c2V0SlNU
ZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcj4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAidHdlbGZ0aElu
dGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlIik7CiB9CiAKLUpTQzo6SlNPYmplY3QqIEpTVGVzdFNl
cmlhbGl6YXRpb246OnNlcmlhbGl6ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0
aW9uJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorSlNDOjpKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbjo6c2Vy
aWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxp
emF0aW9uJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUsIGdsb2JhbE9iamVjdC5v
YmplY3RQcm90b3R5cGUoKSk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKIAotICAg
IGF1dG8gZmlyc3RTdHJpbmdBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25GaXJz
dFN0cmluZ0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7Cisg
ICAgYXV0byBmaXJzdFN0cmluZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZp
cnN0U3RyaW5nQXR0cmlidXRlR2V0dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qs
IHRocm93U2NvcGUpOwogICAgIHRocm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZpcnN0U3Ry
aW5nQXR0cmlidXRlIiksIGZpcnN0U3RyaW5nQXR0cmlidXRlVmFsdWUpOwogCi0gICAgYXV0byBz
ZWNvbmRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0
dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgYXV0byBz
ZWNvbmRMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0
dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZWNvbmRMb25nQXR0cmlidXRl
IiksIHNlY29uZExvbmdBdHRyaWJ1dGVWYWx1ZSk7CiAKLSAgICBhdXRvIGZvdXJ0aFVucmVzdHJp
Y3RlZERvdWJsZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVz
dHJpY3RlZERvdWJsZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7CisgICAgYXV0byBmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVWYWx1ZSA9IGpz
VGVzdFNlcmlhbGl6YXRpb25Gb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGVHZXR0ZXIo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhyb3dT
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRl
IiksIGZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVZhbHVlKTsKIAotICAgIGF1dG8g
ZmlmdGhMb25nQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0
cmlidXRlR2V0dGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBhdXRvIGZp
ZnRoTG9uZ0F0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkZpZnRoTG9uZ0F0dHJp
YnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsK
ICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaWZ0aExvbmdBdHRyaWJ1dGUiKSwg
ZmlmdGhMb25nQXR0cmlidXRlVmFsdWUpOwogCi0gICAgYXV0byBzaXh0aFR5cGVkZWZBdHRyaWJ1
dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIo
c3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIGF1dG8gc2l4dGhUeXBlZGVmQXR0
cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlR2V0
dGVyKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwogICAgIHRo
cm93U2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInNpeHRoVHlwZWRlZkF0dHJpYnV0ZSIpLCBzaXh0
aFR5cGVkZWZBdHRyaWJ1dGVWYWx1ZSk7CiAKLSAgICBhdXRvIHNldmVudGhEaXJlY3RseVNlcmlh
bGl6YWJsZUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblNldmVudGhEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7CisgICAgYXV0byBzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9
IGpzVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVH
ZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAg
dGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGF1dG8qIHNldmVudGhEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSA9IEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShzdGF0ZSwgKmpzQ2FzdDxKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsKj4oc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFs
dWUpLCBnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIGF1dG8qIHNldmVudGhEaXJlY3Rs
eVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSA9IEpTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWw6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihzZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFi
bGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJzZXZlbnRoRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKSwgc2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0
cmlidXRlU2VyaWFsaXplZFZhbHVlKTsKIAotICAgIGF1dG8gZWlnaHRoSW5kaXJlY3RseUF0dHJp
YnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVH
ZXR0ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIGF1dG8gZWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0
bHlBdHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhyb3dT
Y29wZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwotICAgIGF1dG8qIGVp
Z2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXJpYWxpemVkVmFsdWUgPSBKU1Rlc3RTZXJpYWxpemF0
aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6c2VyaWFsaXplKHN0YXRlLCAqanNDYXN0PEpTVGVzdFNl
cmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKj4oZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0
ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBhdXRvKiBlaWdodGhJbmRp
cmVjdGx5QXR0cmlidXRlU2VyaWFsaXplZFZhbHVlID0gSlNUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2U6OnNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpT
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlKj4oZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZVZhbHVlKSwgZ2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGUiKSwgZWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7CiAK
LSAgICBhdXRvIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZVZhbHVl
ID0ganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgYXV0byBu
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNl
cmlhbGl6YXRpb25OaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXR0
ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgdGhy
b3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIGlmICghbmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlVmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byog
bmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlU2VyaWFsaXplZFZhbHVl
ID0gSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKHN0YXRlLCAqanND
YXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihuaW50aE9wdGlvbmFsRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgICAgIGF1dG8qIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0
ZVNlcmlhbGl6ZWRWYWx1ZSA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNlcmlh
bGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwqPihuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVWYWx1
ZSksIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlIiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0
dHJpYnV0ZVNlcmlhbGl6ZWRWYWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmludGhPcHRpb25hbERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlIiksIG5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6
YWJsZUF0dHJpYnV0ZVZhbHVlKTsKIAotICAgIGF1dG8gdGVudGhGcm96ZW5BcnJheUF0dHJpYnV0
ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGVHZXR0
ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIGF1dG8gdGVudGhGcm96ZW5B
cnJheUF0dHJpYnV0ZVZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvblRlbnRoRnJvemVuQXJyYXlB
dHRyaWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVudGhGcm96ZW5BcnJheUF0
dHJpYnV0ZSIpLCB0ZW50aEZyb3plbkFycmF5QXR0cmlidXRlVmFsdWUpOwogCi0gICAgYXV0byBl
bGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVu
dGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgYXV0byBlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlVmFsdWUgPSBqc1Rlc3RTZXJpYWxp
emF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJlbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIiksIGVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1
dGVWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlvblRvSlNPTkJvZHko
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbiogdGhpc09iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uKiB0
aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoKnN0YXRlLCAqdGhp
c09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoKmxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RTZXJpYWxpemF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBV
TlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dFNlcmlhbGl6YXRpb24+OjpjYWxsPGpzVGVzdFNlcmlhbGl6YXRpb25Qcm90b3R5cGVGdW5jdGlv
blRvSlNPTkJvZHk+KCpzdGF0ZSwgInRvSlNPTiIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0U2VyaWFsaXphdGlvbj46OmNhbGw8anNUZXN0U2VyaWFsaXphdGlvblByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pT
T04iKTsKIH0KIAogdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uOjphbmFseXplSGVhcChKU0NlbGwq
IGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkBAIC03MDcsNyArNzA2LDcgQEAgZXh0ZXJu
ICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMTdUZXN0U2VyaWFsaXphdGlvbkVbXTsg
fQogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlh
bGl6YXRpb24+JiYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNl
cmlhbGl6YXRpb24+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkK
QEAgLTczMSw5ICs3MzAsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNy
ZWF0ZVdyYXBwZXI8VGVzdFNlcmlhbGl6YXRpb24+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBs
KSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFNlcmlhbGl6YXRpb24mIGltcGwpCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbiYgaW1wbCkK
IHsKLSAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1
cm4gd3JhcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBU
ZXN0U2VyaWFsaXphdGlvbiogSlNUZXN0U2VyaWFsaXphdGlvbjo6dG9XcmFwcGVkKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uaAppbmRleCAz
NzNjODhhZTM5MjY1OWZiYmUxN2E1ZGViODI5YjM1ZjQwN2UzMjYzLi4yNzllMjI2MjQwMjY3OTJh
ZjJiNTAxNzdjNGYyNTkwNTA5MjllNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmgKQEAg
LTQ5LDcgKzQ5LDcgQEAgY2xhc3MgSlNUZXN0U2VyaWFsaXphdGlvbiA6IHB1YmxpYyBKU0RPTVdy
YXBwZXI8VGVzdFNlcmlhbGl6YXRpb24+IHsKICAgICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSYsIEpT
VGVzdFNlcmlhbGl6YXRpb24mIHRoaXNPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpU
aHJvd1Njb3BlJik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgSlNUZXN0U2VyaWFsaXphdGlvbiYgdGhpc09iamVjdCwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdFNl
cmlhbGl6YXRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0
U2VyaWFsaXphdGlvbj4mJik7CkBAIC03NCwxMCArNzQsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBw
ZXJLZXkoVGVzdFNlcmlhbGl6YXRpb24qIHdyYXBwYWJsZU9iamVjdCkKICAgICByZXR1cm4gd3Jh
cHBhYmxlT2JqZWN0OwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdFNlcmlhbGl6YXRpb24mKTsKLWlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFRlc3RTZXJpYWxpemF0aW9uKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFRlc3RTZXJpYWxpemF0aW9uPiYmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZlB0cjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9K
U05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkp
IDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFNlcmlhbGl6YXRpb24mKTsKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXphdGlvbiogaW1wbCkg
eyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAq
aW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFNlcmlhbGl6
YXRpb24+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZlB0cjxUZXN0U2VyaWFsaXphdGlvbj4mJiBpbXBsKSB7IHJldHVybiBpbXBs
ID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlt
cGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXphdGlvbj4gewogICAg
IHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdFNlcmlhbGl6YXRpb247CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bkluZGlyZWN0SW5oZXJpdGFuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmNwcAppbmRl
eCBjODIwNGQ3ZDFmZjg2Mjk4MGVkN2Q2NDJlYTVhYzg0ODhhYzU1MzUyLi5mNWQzNzc2ZTZiMmE1
NGZhNzlhMzIwODJjMDM3NGVlYTg5OTI5ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZS5jcHAKQEAgLTM5LDggKzM5LDgg
QEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0U2VyaWFs
aXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTEyOSwyMyArMTI5LDIzIEBAIEpTVmFsdWUgSlNUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwg
Y29uc3QgSlNHCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUq
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJv
dG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluZGly
ZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJl
Y3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAKaW5kZXggYzJkZTg4
ZTgzNTYzMzBiOGQ2ZDg3OTM3MDEwMjY5NzkwMzZlMTdiNS4uYzYxMmU5NTdlMmM5NmI2ZTY4YTMz
ZmExMGIwYTYyNDU4NTJiY2VkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXQuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0oKIAog
Ly8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29u
c3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGUoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwog
CiBjbGFzcyBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTQxLDkyICsxNDEsOTEgQEAgSlNWYWx1
ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25z
dCBKU0dsb2JhbE9iamVjdCoKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXQqIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdD46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQor
dGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqIElETEF0dHJpYnV0
ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdD46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICByZXR1cm4g
anNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCo+KHN0YXRlLnZtKCksIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpT
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0KiBJRExPcGVyYXRpb248SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQ+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdCogSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0Pjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQqPihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpT
Qzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9i
YWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihzdGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5pbmhlcml0
TG9uZ0F0dHJpYnV0ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pbmhlcml0TG9uZ0F0dHJpYnV0ZSgp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dD46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0
dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwg
ImluaGVyaXRMb25nQXR0cmlidXRlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdD46OmdldDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVy
aXRMb25nQXR0cmlidXRlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5o
ZXJpdExvbmdBdHRyaWJ1dGVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRJ
bmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihzdGF0ZSwgdmFsdWUpOworICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAg
ICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0
cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7
CiAgICAgICAgIHJldHVybiBpbXBsLnNldEluaGVyaXRMb25nQXR0cmlidXRlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRl
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0
cmlidXRlPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Pjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJpbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+OjpzZXQ8c2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUiKTsK
IH0KIAotSlNDOjpKU09iamVjdCogSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNlcmlhbGl6
ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCYgdGhpc09iamVj
dCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK0pTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxpemUo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvKiByZXN1bHQgPSBKU1Rlc3RTZXJpYWxpemF0aW9uOjpzZXJpYWxpemUoc3RhdGUsIHRoaXNP
YmplY3QsIGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvKiByZXN1bHQgPSBKU1Rlc3RTZXJp
YWxpemF0aW9uOjpzZXJpYWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgZ2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKIAotICAgIGF1dG8gaW5oZXJpdExvbmdBdHRyaWJ1dGVW
YWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRyaWJ1dGVHZXR0
ZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIGF1dG8gaW5oZXJpdExvbmdB
dHRyaWJ1dGVWYWx1ZSA9IGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0SW5oZXJpdExvbmdBdHRy
aWJ1dGVHZXR0ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7
CiAgICAgdGhyb3dTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5oZXJpdExvbmdBdHRyaWJ1dGUi
KSwgaW5oZXJpdExvbmdBdHRyaWJ1dGVWYWx1ZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
UHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0KiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
UHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCogdGhpc09iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNlcmlhbGl6ZSgqc3RhdGUsICp0aGlz
T2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJpYWxp
emUoKmxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0LCAqdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rp
b25Ub0pTT04oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ+OjpjYWxsPGpzVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0UHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5Pigqc3RhdGUsICJ0
b0pTT04iKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0Pjo6Y2FsbDxqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdFByb3RvdHlwZUZ1bmN0aW9uVG9K
U09OQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b0pTT04iKTsKIH0K
IAogdm9pZCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBj
ZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQuaAppbmRleCAyY2MyYTk5YWRjMWJhYzUxNjJlNzUwOGJhNzhmNzdmY2MzN2IyMmZl
Li4zNDdlMDA4ZTUyM2VlM2FhMWMwYTg1NTY2MjhkYmNkMDQ1ZWI1ZTg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuaApAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBKU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdCA6IHB1YmxpYyBKU1Rlc3RTZXJpYWxpemF0aW9uIHsKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBj
b25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNl
cmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiB0aGlz
T2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0JiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
VGhyb3dTY29wZSYpOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6
SGVhcEFuYWx5emVyJik7CiAgICAgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0JiB3cmFwcGVkKCkg
Y29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRG
aW5hbC5jcHAKaW5kZXggODcyYjgzMWRhOTJkMGNlZTJhZjUxMWE5OGUwOTZhNDJjZmQxZTg1ZC4u
ZTc5MzE4ZGIwZDExMmEzMTVmZmFiMzFiZjllNzc5MTA3Yjk3NWEyZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcApAQCAtNDcsMTIgKzQ3LDEy
IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3RpCiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1i
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25n
QXR0cmlidXRlRm9vKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmlu
YWxMb25nQXR0cmlidXRlRm9vKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVC
YXIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9u
Z0F0dHJpYnV0ZUJhcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
QEAgLTE0NCwxMjQgKzE0NCwxMjMgQEAgSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2IKICAgICByZXR1
cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0
cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCkpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsKiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OmNhc3Qo
RXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogSURMQXR0cmlidXRlPEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgcmV0dXJuIGpz
RHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KHN0YXRlLnZtKCks
IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCogSURMT3BlcmF0aW9uPEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit0ZW1w
bGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsKiBJRExPcGVyYXRp
b248SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OmNhc3QoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVy
biBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqPihzdGF0ZS52
bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0
U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6
Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBl
LT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAg
ICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
CiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5j
b25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0
dHJpYnV0ZUZvb0dldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRy
aWJ1dGVGb29HZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlM8SURMTG9uZz4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9v
KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUZvbygpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyhKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRy
aWJ1dGVGb29HZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwg
dGhpc1ZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlRm9vIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29HZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJm
aW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRl
Rm9vU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRl
cjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICBy
ZXR1cm4gaW1wbC5zZXRGaW5hbExvbmdBdHRyaWJ1dGVGb28oV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb28oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiti
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVG
b28oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbD46OnNldDxzZXRKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vU2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlRm9vIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6
c2V0PHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVG
b29TZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwg
ImZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhckdldHRlcihF
eGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMTG9uZz4oc3RhdGUs
IHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlQmFyKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUJhcigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1F
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0
cmlidXRlQmFyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bEZpbmFsTG9uZ0F0dHJpYnV0ZUJhcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiZmluYWxM
b25nQXR0cmlidXRlQmFyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsPjo6Z2V0PGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJmaW5hbExvbmdBdHRyaWJ1dGVC
YXIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMTG9uZz4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRl
LCB0aHJvd1Njb3BlLCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRGaW5h
bExvbmdBdHRyaWJ1dGVCYXIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVCYXIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXIoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbD46OnNldDxzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyU2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiZmluYWxMb25nQXR0cmlidXRlQmFyIik7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImZpbmFsTG9uZ0F0dHJpYnV0
ZUJhciIpOwogfQogCi1KU0M6OkpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsOjpzZXJpYWxpemUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbCYgdGhpc09iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK0pTQzo6SlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWw6OnNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBh
dXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byogcmVzdWx0ID0gSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQ6OnNlcmlhbGl6ZShzdGF0ZSwgdGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlKTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8qIHJlc3VsdCA9IEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXJp
YWxpemUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTsKIAotICAgIGF1dG8gZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUgPSBqc1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlQmFyR2V0dGVyKHN0YXRl
LCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBhdXRvIGZpbmFsTG9uZ0F0dHJpYnV0ZUJh
clZhbHVlID0ganNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0
ZUJhckdldHRlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsK
ICAgICB0aHJvd1Njb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJmaW5hbExvbmdBdHRyaWJ1dGVCYXIi
KSwgZmluYWxMb25nQXR0cmlidXRlQmFyVmFsdWUpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwqIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OQm9keShKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwgSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbCogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bDo6c2VyaWFsaXplKCpzdGF0ZSwgKnRoaXNPYmplY3QsICp0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2VyaWFsaXplKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdCwgKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlKSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPjo6Y2FsbDxqc1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsUHJvdG90eXBlRnVuY3Rpb25Ub0pTT05Cb2R5Pigqc3RhdGUsICJ0b0pTT04i
KTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWw+OjpjYWxsPGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxQcm90b3R5cGVGdW5jdGlv
blRvSlNPTkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9KU09OIik7
CiB9CiAKIHZvaWQgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6YW5hbHl6ZUhlYXAo
SlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmgKaW5kZXggMGM3NTYxNzEyZjUxYWRiZGRkM2Q5
MDFlYTViNWNlMmRiNGE1YzFjMS4uNmNjOGY0NzQ2OTY4OTc2NjhkZDk3MWE3NDlkZGQxZTliNGI2
N2RkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5o
CkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwg
OiBwdWJsaWMgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQgewogICAgIH0KIAogICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6RXhl
Y1N0YXRlJiwgSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCYgdGhpc09iamVjdCwgSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogc2VyaWFsaXplKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEZpbmFsJiB0aGlzT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dT
Y29wZSYpOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFu
YWx5emVyJik7CiAgICAgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwmIHdyYXBwZWQoKSBj
b25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKaW5kZXggOTcwMDVmOGRkNTc2Njg5OTRjYmY4ZDEwNzAzYzU1YWFm
ZDZkYjk1Ny4uZjQxMjEyMjgyNzZkYTY1YTQxMmIxMmQ1MmMyMjcyMmQxMjI2ODUwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5j
cHAKQEAgLTU3LDE1ICs1NywxNSBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRgogCiAvLyBBdHRy
aWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LWJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUG9ydHMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29s
IHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUG9ydHMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBjbGFzcyBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE2OCwxODIgKzE2OCwxODIgQEAgdm9pZCBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNl
bGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Ojp+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7CiB9CiAKLXRlbXBsYXRl
PD4gaW5saW5lIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogSURMQXR0cmli
dXRlPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmNhc3QoRXhlY1N0YXRl
JiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBJRExBdHRyaWJ1dGU8SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBq
c0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KHN0YXRl
LnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogfQogCi10
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIElE
TE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpjYXN0KEV4
ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUo
KSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50
aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1
Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
cHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5
cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVZhbHVlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4+KHN0YXRlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC52YWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnZhbHVlKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6Z2V0PGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInZhbHVlIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+
OjpnZXQ8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsICJ2YWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oc3RhdGUsIHZh
bHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0
VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJp
YnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAg
ICAgcmV0dXJuIGltcGwuc2V0VmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2U+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
VmFsdWVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ2YWx1ZSIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlPjo6c2V0PHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlU2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJ2YWx1
ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwucmVhZG9ubHlWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KGxleGljYWxH
bG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
LnJlYWRvbmx5VmFsdWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5
VmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAicmVhZG9ubHlWYWx1ZSIpOworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Pjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsICJyZWFkb25seVZhbHVlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRl
cihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Um
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKEpTVmFsdWUg
Y2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1fY2FjaGVkVmFsdWUuZ2V0KCkpCiAgICAgICAgIHJl
dHVybiBjYWNoZWRWYWx1ZTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+PihzdGF0ZSwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwuY2FjaGVkVmFsdWUoKSk7Ci0gICAgdGhpc09iamVjdC5tX2NhY2hlZFZh
bHVlLnNldChzdGF0ZS52bSgpLCAmdGhpc09iamVjdCwgcmVzdWx0KTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLmNhY2hlZFZhbHVlKCkpOworICAgIHRoaXNPYmplY3QubV9jYWNoZWRWYWx1
ZS5zZXQoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksICZ0aGlzT2JqZWN0LCByZXN1
bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlPjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNhY2hlZFZhbHVlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3Rh
dGUsIHRoaXNWYWx1ZSwgImNhY2hlZFZhbHVlIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpnZXQ8anNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJjYWNoZWRW
YWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oc3RhdGUs
IHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXJpYWxpemVkU2Ny
aXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1
dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAg
ICAgICAgcmV0dXJuIGltcGwuc2V0Q2FjaGVkVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpzZXQ8c2V0SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCBlbmNvZGVkVmFsdWUsICJjYWNoZWRWYWx1ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6c2V0PHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlU2V0dGVyPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJjYWNoZWRWYWx1ZSIpOwogfQogCi1z
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UG9ydHNHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
U2VxdWVuY2U8SURMSW50ZXJmYWNlPE1lc3NhZ2VQb3J0Pj4+KHN0YXRlLCAqdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wb3J0cygpKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPE1lc3NhZ2VQb3J0Pj4+KGxleGlj
YWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLnBvcnRzKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlPjo6Z2V0PGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBv
cnRzR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNW
YWx1ZSwgInBvcnRzIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpnZXQ8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUG9ydHNHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJwb3J0cyIpOwogfQogCi1zdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9u
bHlWYWx1ZUdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVk
UmVhZG9ubHlWYWx1ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRSZWFk
b25seVZhbHVlLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oc3RhdGUsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmNhY2hlZFJlYWRvbmx5
VmFsdWUoKSk7Ci0gICAgdGhpc09iamVjdC5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuc2V0KHN0YXRl
LnZtKCksICZ0aGlzT2JqZWN0LCByZXN1bHQpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpKTsKKyAgICB0aGlzT2JqZWN0Lm1fY2FjaGVkUmVhZG9ubHlW
YWx1ZS5zZXQoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksICZ0aGlzT2JqZWN0LCBy
ZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25s
eVZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmdldDxqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImNhY2hlZFJlYWRvbmx5
VmFsdWUiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZT46OmdldDxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VD
YWNoZWRSZWFkb25seVZhbHVlR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiY2FjaGVkUmVhZG9ubHlWYWx1ZSIp
OwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvbkJvZHkoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rp
b25Cb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHZhbHVl
ID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVl
Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHZhbHVlID0gY29u
dmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
aW1wbC5mdW5jdGlvbihXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9u
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxP
YmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlPjo6Y2FsbDxqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uQm9keT4oKnN0YXRlLCAiZnVuY3Rpb24iKTsKKyAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46
OmNhbGw8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rp
b25GdW5jdGlvbkJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZnVuY3Rp
b24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25SZXR1cm5p
bmdCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVG
dW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZnVu
Y3Rpb25SZXR1cm5pbmcoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExT
ZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5mdW5jdGlvblJldHVy
bmluZygpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvblJldHVybmlu
ZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQcm90b3R5cGVGdW5jdGlvbkZ1bmN0aW9uUmV0dXJuaW5nKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT46OmNhbGw8anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25GdW5jdGlvblJldHVybmluZ0JvZHk+KCpzdGF0ZSwg
ImZ1bmN0aW9uUmV0dXJuaW5nIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+OjpjYWxsPGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uRnVuY3Rpb25SZXR1cm5pbmdCb2R5PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImZ1bmN0aW9uUmV0dXJuaW5nIik7CiB9CiAK
IHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0zODgsNyArMzg4LDcgQEAg
ZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzRUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlRVtdOwogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4mJiBpbXBsKQor
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBA
IC00MTIsOSArNDEyLDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVh
dGVXcmFwcGVyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+KGdsb2JhbE9iamVj
dCwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIGltcGwpCiB7Ci0gICAg
cmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAppbmRl
eCA3ZmQxODQyOWJlZDQyMTk5YmJkZjFmYmVjNjdlYTc5YThmNjAzMmNlLi4yNDNmNjNhMmFhMTky
ZGNhMjVkZjRlOTQzYTk3NGVhNzcyZTQwZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCkBAIC03OSwxMCArNzksMTAgQEAgaW5s
aW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSog
d3JhcHBhYmxlT2JqZWN0KQogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsKSB7IHJldHVybiBpbXBsID8g
dG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUmVmPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+JiYpOwotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQo
c3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxs
KCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmKTsKK2lubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFJlZjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiYmKTsKK2lubGluZSBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8g
dG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwu
cmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRGljdGlvbmFyeS5j
cHAKaW5kZXggYzc5OWIzNjVmYjEwMDZjMjBkOTY3YTJlYjlmNWVjMmUyNzc5YzVjZi4uYmM2NTIw
ZDllYjAwYzE4MWE2ZDI3N2UzOWM2MjU5MjNlNjQxZjA5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RhbmRhbG9uZURpY3Rpb25hcnkuY3BwCkBAIC00MywxNCArNDMsMTQgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogCi10ZW1wbGF0ZTw+IERpY3Rpb25h
cnlJbXBsTmFtZSBjb252ZXJ0RGljdGlvbmFyeTxEaWN0aW9uYXJ5SW1wbE5hbWU+KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBj
b252ZXJ0RGljdGlvbmFyeTxEaWN0aW9uYXJ5SW1wbE5hbWU+KEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYm9vbCBpc051
bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgYXV0byogb2Jq
ZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7CiAg
ICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgewotICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1R5cGVF
cnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogICAgIERpY3Rpb25hcnlJbXBsTmFtZSByZXN1bHQ7CkBAIC01OCwzMyArNTgs
MzMgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVydERpY3Rpb25hcnk8RGlj
dGlvbmFyeUltcGxOYW1lPihFeGVjU3RhdGUmIHMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIGJvb2xNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGJvb2xNZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgImJvb2xNZW1iZXIiKSk7CisgICAgICAgIGJvb2xNZW1iZXJWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiYm9vbE1lbWJlciIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIWJvb2xNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7Ci0gICAgICAgIHJlc3VsdC5ib29sTWVtYmVyID0gY29udmVydDxJRExCb29sZWFuPihzdGF0
ZSwgYm9vbE1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0LmJvb2xNZW1iZXIgPSBjb252ZXJ0
PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIGJvb2xNZW1iZXJWYWx1ZSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgSlNW
YWx1ZSBjYWxsYmFja01lbWJlclZhbHVlOwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAg
ICAgICAgY2FsbGJhY2tNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJjYWxsYmFja01lbWJlciIpKTsKKyAgICAgICAgY2FsbGJhY2tN
ZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFjYWxsYmFja01lbWJl
clZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LmNhbGxiYWNrTWVtYmVyID0g
Y29udmVydDxJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPj4oc3RhdGUsIGNhbGxi
YWNrTWVtYmVyVmFsdWUsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmVzdWx0LmNhbGxiYWNrTWVtYmVyID0gY29udmVy
dDxJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbGJhY2tNZW1iZXJWYWx1ZSwgKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKICAgICB9CiAgICAgSlNWYWx1ZSBlbnVtTWVtYmVyVmFsdWU7CiAgICAgaWYgKGlz
TnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBlbnVtTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgp
OwogICAgIGVsc2UgewotICAgICAgICBlbnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtTWVtYmVyIikpOworICAgICAgICBl
bnVtTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgImVudW1NZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFlbnVtTWVtYmVyVmFs
dWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXN1bHQuZW51bU1lbWJlciA9IGNvbnZlcnQ8
SURMRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25l
RGljdGlvbmFyeUZpbGU+PihzdGF0ZSwgZW51bU1lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0
LmVudW1NZW1iZXIgPSBjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlv
bmFyeTo6RW51bUluU3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgZW51bU1lbWJlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogICAgIH0KICNpZiBFTkFCTEUoQ29uZGl0aW9uYWwxMykgfHwgRU5BQkxFKENv
bmRpdGlvbmFsMTQpCkBAIC05MiwxMSArOTIsMTEgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1w
bE5hbWUgY29udmVydERpY3Rpb25hcnk8RGljdGlvbmFyeUltcGxOYW1lPihFeGVjU3RhdGUmIHMK
ICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQpCiAgICAgICAgIHBhcnRpYWxCb29sZWFuTWVtYmVy
VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsQm9vbGVh
bk1lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAicGFydGlhbEJvb2xlYW5NZW1iZXIiKSk7CisgICAgICAgIHBhcnRpYWxCb29sZWFuTWVt
YmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxCb29sZWFuTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcGFydGlhbEJv
b2xlYW5NZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5wYXJ0aWFs
Qm9vbGVhbk1lbWJlciA9IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIHBhcnRpYWxCb29sZWFu
TWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQucGFydGlhbEJvb2xlYW5NZW1iZXIgPSBjb252
ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHBhcnRpYWxCb29sZWFuTWVtYmVy
VmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAg
ICAgfQogI2VuZGlmCkBAIC0xMDUsMTEgKzEwNSwxMSBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJ
bXBsTmFtZSBjb252ZXJ0RGljdGlvbmFyeTxEaWN0aW9uYXJ5SW1wbE5hbWU+KEV4ZWNTdGF0ZSYg
cwogICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFydGlhbEJvb2xlYW5NZW1i
ZXJXaXRoSWdub3JlZENvbmRpdGlvbmFsVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2Ug
ewotICAgICAgICBwYXJ0aWFsQm9vbGVhbk1lbWJlcldpdGhJZ25vcmVkQ29uZGl0aW9uYWxWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRp
YWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbCIpKTsKKyAgICAgICAgcGFydGlh
bEJvb2xlYW5NZW1iZXJXaXRoSWdub3JlZENvbmRpdGlvbmFsVmFsdWUgPSBvYmplY3QtPmdldCgm
bGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxC
b29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbCIpKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxCb29s
ZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgcmVzdWx0LnBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9yZWRDb25kaXRpb25hbCA9
IGNvbnZlcnQ8SURMQm9vbGVhbj4oc3RhdGUsIHBhcnRpYWxCb29sZWFuTWVtYmVyV2l0aElnbm9y
ZWRDb25kaXRpb25hbFZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcnRpYWxCb29sZWFuTWVtYmVy
V2l0aElnbm9yZWRDb25kaXRpb25hbCA9IGNvbnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgcGFydGlhbEJvb2xlYW5NZW1iZXJXaXRoSWdub3JlZENvbmRpdGlvbmFsVmFsdWUp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQog
I2VuZGlmCkBAIC0xMTgsMTEgKzExOCwxMSBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFt
ZSBjb252ZXJ0RGljdGlvbmFyeTxEaWN0aW9uYXJ5SW1wbE5hbWU+KEV4ZWNTdGF0ZSYgcwogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFydGlhbENhbGxiYWNrTWVtYmVyVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsQ2FsbGJhY2tN
ZW1iZXJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInBhcnRpYWxDYWxsYmFja01lbWJlciIpKTsKKyAgICAgICAgcGFydGlhbENhbGxiYWNrTWVt
YmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxDYWxsYmFja01lbWJlciIpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICAgICBpZiAoIXBhcnRpYWxD
YWxsYmFja01lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnBhcnRp
YWxDYWxsYmFja01lbWJlciA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxs
YmFjaz4+KHN0YXRlLCBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSwgKmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXN1
bHQucGFydGlhbENhbGxiYWNrTWVtYmVyID0gY29udmVydDxJRExDYWxsYmFja0Z1bmN0aW9uPEpT
Vm9pZENhbGxiYWNrPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgcGFydGlhbENhbGxiYWNrTWVtYmVy
VmFsdWUsICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQog
I2VuZGlmCkBAIC0xMzEsMTEgKzEzMSwxMSBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFt
ZSBjb252ZXJ0RGljdGlvbmFyeTxEaWN0aW9uYXJ5SW1wbE5hbWU+KEV4ZWNTdGF0ZSYgcwogICAg
IGlmIChpc051bGxPclVuZGVmaW5lZCkKICAgICAgICAgcGFydGlhbEVudW1NZW1iZXJWYWx1ZSA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBhcnRpYWxFbnVtTWVtYmVyVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0
aWFsRW51bU1lbWJlciIpKTsKKyAgICAgICAgcGFydGlhbEVudW1NZW1iZXJWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
cGFydGlhbEVudW1NZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsRW51bU1lbWJlclZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0LnBhcnRpYWxFbnVtTWVtYmVyID0gY29udmVydDxJ
RExFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVE
aWN0aW9uYXJ5RmlsZT4+KHN0YXRlLCBwYXJ0aWFsRW51bU1lbWJlclZhbHVlKTsKKyAgICAgICAg
cmVzdWx0LnBhcnRpYWxFbnVtTWVtYmVyID0gY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0U3Rh
bmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHBhcnRpYWxFbnVtTWVtYmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogI2VuZGlmCkBAIC0xNDQsMTQg
KzE0NCwxNCBAQCB0ZW1wbGF0ZTw+IERpY3Rpb25hcnlJbXBsTmFtZSBjb252ZXJ0RGljdGlvbmFy
eTxEaWN0aW9uYXJ5SW1wbE5hbWU+KEV4ZWNTdGF0ZSYgcwogICAgIGlmIChpc051bGxPclVuZGVm
aW5lZCkKICAgICAgICAgcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlID0ganNVbmRlZmlu
ZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlh
bFJlcXVpcmVkTG9uZ01lbWJlciIpKTsKKyAgICAgICAgcGFydGlhbFJlcXVpcmVkTG9uZ01lbWJl
clZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJwYXJ0aWFsUmVxdWlyZWRMb25nTWVtYmVyIikpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcGFydGlh
bFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdWx0
LnBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXIgPSBjb252ZXJ0PElETExvbmc+KHN0YXRlLCBwYXJ0
aWFsUmVxdWlyZWRMb25nTWVtYmVyVmFsdWUpOworICAgICAgICByZXN1bHQucGFydGlhbFJlcXVp
cmVkTG9uZ01lbWJlciA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgcGFy
dGlhbFJlcXVpcmVkTG9uZ01lbWJlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocm93UmVxdWlyZWRN
ZW1iZXJUeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsICJwYXJ0aWFsUmVxdWlyZWRMb25nTWVt
YmVyIiwgIlRlc3RTdGFuZGFsb25lRGljdGlvbmFyeSIsICJsb25nIik7CisgICAgICAgIHRocm93
UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
InBhcnRpYWxSZXF1aXJlZExvbmdNZW1iZXIiLCAiVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5Iiwg
ImxvbmciKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAjZW5kaWYKQEAgLTE2MCwxMSAr
MTYwLDExIEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWN0aW9uYXJ5
PERpY3Rpb25hcnlJbXBsTmFtZT4oRXhlY1N0YXRlJiBzCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZp
bmVkKQogICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwog
ICAgIGVsc2UgewotICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsU3RyaW5nTWVtYmVy
IikpOworICAgICAgICBwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUgPSBvYmplY3QtPmdldCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxTdHJp
bmdNZW1iZXIiKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICB9CiAgICAgaWYgKCFwYXJ0aWFsU3RyaW5nTWVtYmVyVmFsdWUuaXNVbmRlZmluZWQo
KSkgewotICAgICAgICByZXN1bHQucGFydGlhbFN0cmluZ01lbWJlciA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPihzdGF0ZSwgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlKTsKKyAgICAgICAgcmVzdWx0
LnBhcnRpYWxTdHJpbmdNZW1iZXIgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgcGFydGlhbFN0cmluZ01lbWJlclZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KICNlbmRpZgpAQCAtMTczLDExICsxNzMs
MTEgQEAgdGVtcGxhdGU8PiBEaWN0aW9uYXJ5SW1wbE5hbWUgY29udmVydERpY3Rpb25hcnk8RGlj
dGlvbmFyeUltcGxOYW1lPihFeGVjU3RhdGUmIHMKICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQp
CiAgICAgICAgIHBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlID0g
anNVbmRlZmluZWQoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcGFydGlhbFN0cmluZ01lbWJlcldp
dGhFbmFibGVkQnlTZXR0aW5nVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmci
KSk7CisgICAgICAgIHBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVl
ID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmciKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAgICAgaWYg
KCFwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgIHJlc3VsdC5wYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNl
dHRpbmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oc3RhdGUsIHBhcnRpYWxTdHJpbmdNZW1iZXJX
aXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnBhcnRpYWxTdHJpbmdN
ZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwYXJ0aWFsU3RyaW5nTWVtYmVyV2l0aEVuYWJsZWRCeVNldHRpbmdWYWx1
ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9
CiAjZW5kaWYKQEAgLTE4NiwxMSArMTg2LDExIEBAIHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxO
YW1lIGNvbnZlcnREaWN0aW9uYXJ5PERpY3Rpb25hcnlJbXBsTmFtZT4oRXhlY1N0YXRlJiBzCiAg
ICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAgICAgICBwYXJ0aWFsVW5zaWduZWRMb25nTWVt
YmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIHBhcnRpYWxVbnNpZ25lZExvbmdNZW1iZXJXaXRoSW1wbGVtZW50ZWRBc1ZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFVu
c2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzIikpOworICAgICAgICBwYXJ0aWFsVW5z
aWduZWRMb25nTWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSA9IG9iamVjdC0+Z2V0KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAicGFydGlhbFVuc2ln
bmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghcGFydGlhbFVuc2lnbmVk
TG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICByZXN1bHQucGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlciA9IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nPihzdGF0ZSwgcGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlcldpdGhJbXBsZW1lbnRlZEFzVmFs
dWUpOworICAgICAgICByZXN1bHQucGFydGlhbFVuc2lnbmVkTG9uZ01lbWJlciA9IGNvbnZlcnQ8
SURMVW5zaWduZWRMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBwYXJ0aWFsVW5zaWduZWRMb25n
TWVtYmVyV2l0aEltcGxlbWVudGVkQXNWYWx1ZSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgeyB9KTsKICAgICB9CiAjZW5kaWYKQEAgLTE5OCwzMiArMTk4LDMyIEBA
IHRlbXBsYXRlPD4gRGljdGlvbmFyeUltcGxOYW1lIGNvbnZlcnREaWN0aW9uYXJ5PERpY3Rpb25h
cnlJbXBsTmFtZT4oRXhlY1N0YXRlJiBzCiAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKQogICAg
ICAgICBzdHJpbmdNZW1iZXJWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIHN0cmluZ01lbWJlclZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAic3RyaW5nTWVtYmVyIikpOworICAgICAgICBzdHJpbmdNZW1iZXJWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAic3RyaW5nTWVtYmVyIikpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CiAgICAgfQogICAgIGlmICghc3RyaW5nTWVtYmVyVmFsdWUuaXNVbmRl
ZmluZWQoKSkgewotICAgICAgICByZXN1bHQuc3RyaW5nTWVtYmVyID0gY29udmVydDxJRExET01T
dHJpbmc+KHN0YXRlLCBzdHJpbmdNZW1iZXJWYWx1ZSk7CisgICAgICAgIHJlc3VsdC5zdHJpbmdN
ZW1iZXIgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgc3RyaW5n
TWVtYmVyVmFsdWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTQzo6SlNPYmplY3QqIGNvbnZl
cnREaWN0aW9uYXJ5VG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IERpY3Rpb25hcnlJbXBsTmFtZSYgZGljdGlvbmFyeSkKK0pT
Qzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBEaWN0aW9uYXJ5SW1wbE5hbWUmIGRpY3Rpb25hcnkpCiB7Ci0gICAgYXV0byYgdm0gPSBzdGF0
ZS52bSgpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAKLSAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90
eXBlKCkpOwogCiAgICAgaWYgKCFJRExCb29sZWFuOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LmJv
b2xNZW1iZXIpKSB7CiAgICAgICAgIGF1dG8gYm9vbE1lbWJlclZhbHVlID0gdG9KUzxJRExCb29s
ZWFuPihJRExCb29sZWFuOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5ib29s
TWVtYmVyKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJib29sTWVtYmVyIiksIGJvb2xNZW1iZXJWYWx1ZSk7CiAgICAgfQog
ICAgIGlmICghSURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz46OmlzTnVsbFZhbHVl
KGRpY3Rpb25hcnkuY2FsbGJhY2tNZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8gY2FsbGJhY2tNZW1i
ZXJWYWx1ZSA9IHRvSlM8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1ZvaWRDYWxsYmFjaz4+KHN0YXRl
LCBnbG9iYWxPYmplY3QsIElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+OjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5jYWxsYmFja01lbWJlcikpOworICAgICAg
ICBhdXRvIGNhbGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pTPElETENhbGxiYWNrRnVuY3Rpb248SlNW
b2lkQ2FsbGJhY2s+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIElETENhbGxi
YWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGlj
dGlvbmFyeS5jYWxsYmFja01lbWJlcikpOwogICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY2FsbGJhY2tNZW1iZXIiKSwgY2FsbGJh
Y2tNZW1iZXJWYWx1ZSk7CiAgICAgfQogICAgIGlmICghSURMRW51bWVyYXRpb248VGVzdFN0YW5k
YWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+Ojppc051bGxW
YWx1ZShkaWN0aW9uYXJ5LmVudW1NZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8gZW51bU1lbWJlclZh
bHVlID0gdG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1J
blN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT4+KHN0YXRlLCBJRExFbnVtZXJhdGlvbjxUZXN0U3Rh
bmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT46OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LmVudW1NZW1iZXIpKTsKKyAgICAgICAgYXV0
byBlbnVtTWVtYmVyVmFsdWUgPSB0b0pTPElETEVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25lRGlj
dGlvbmFyeTo6RW51bUluU3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgSURMRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFu
ZGFsb25lRGljdGlvbmFyeUZpbGU+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFy
eS5lbnVtTWVtYmVyKSk7CiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJlbnVtTWVtYmVyIiksIGVudW1NZW1iZXJWYWx1ZSk7CiAg
ICAgfQogI2lmIEVOQUJMRShDb25kaXRpb25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkK
QEAgLTI0MCwxMyArMjQwLDEzIEBAIEpTQzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnCiAjZW5kaWYKICNp
ZiBFTkFCTEUoQ29uZGl0aW9uYWwxMykgfHwgRU5BQkxFKENvbmRpdGlvbmFsMTQpCiAgICAgaWYg
KCFJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPjo6aXNOdWxsVmFsdWUoZGljdGlv
bmFyeS5wYXJ0aWFsQ2FsbGJhY2tNZW1iZXIpKSB7Ci0gICAgICAgIGF1dG8gcGFydGlhbENhbGxi
YWNrTWVtYmVyVmFsdWUgPSB0b0pTPElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNr
Pjo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbENhbGxiYWNrTWVt
YmVyKSk7CisgICAgICAgIGF1dG8gcGFydGlhbENhbGxiYWNrTWVtYmVyVmFsdWUgPSB0b0pTPElE
TENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+OjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5wYXJ0aWFsQ2FsbGJhY2tNZW1iZXIpKTsKICAg
ICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgInBhcnRpYWxDYWxsYmFja01lbWJlciIpLCBwYXJ0aWFsQ2FsbGJhY2tNZW1iZXJWYWx1ZSk7
CiAgICAgfQogI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbmFsMTMpIHx8IEVOQUJMRShDb25k
aXRpb25hbDE0KQogICAgIGlmICghSURMRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9u
YXJ5OjpFbnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+Ojppc051bGxWYWx1ZShkaWN0aW9u
YXJ5LnBhcnRpYWxFbnVtTWVtYmVyKSkgewotICAgICAgICBhdXRvIHBhcnRpYWxFbnVtTWVtYmVy
VmFsdWUgPSB0b0pTPElETEVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51
bUluU3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPj4oc3RhdGUsIElETEVudW1lcmF0aW9uPFRlc3RT
dGFuZGFsb25lRGljdGlvbmFyeTo6RW51bUluU3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPjo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbEVudW1NZW1iZXIpKTsKKyAg
ICAgICAgYXV0byBwYXJ0aWFsRW51bU1lbWJlclZhbHVlID0gdG9KUzxJRExFbnVtZXJhdGlvbjxU
ZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZT4+
KGxleGljYWxHbG9iYWxPYmplY3QsIElETEVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlv
bmFyeTo6RW51bUluU3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPjo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbEVudW1NZW1iZXIpKTsKICAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhcnRpYWxFbnVt
TWVtYmVyIiksIHBhcnRpYWxFbnVtTWVtYmVyVmFsdWUpOwogICAgIH0KICNlbmRpZgpAQCAtMjU2
LDE0ICsyNTYsMTQgQEAgSlNDOjpKU09iamVjdCogY29udmVydERpY3Rpb25hcnlUb0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGcKICNlbmRpZgogI2lmIEVOQUJM
RShDb25kaXRpb25hbDEzKSB8fCBFTkFCTEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoIUlETERP
TVN0cmluZzo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5wYXJ0aWFsU3RyaW5nTWVtYmVyKSkgewot
ICAgICAgICBhdXRvIHBhcnRpYWxTdHJpbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURMRE9NU3RyaW5n
PihzdGF0ZSwgSURMRE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFy
eS5wYXJ0aWFsU3RyaW5nTWVtYmVyKSk7CisgICAgICAgIGF1dG8gcGFydGlhbFN0cmluZ01lbWJl
clZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIElETERPTVN0
cmluZzo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbFN0cmluZ01l
bWJlcikpOwogICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAicGFydGlhbFN0cmluZ01lbWJlciIpLCBwYXJ0aWFsU3RyaW5nTWVtYmVy
VmFsdWUpOwogICAgIH0KICNlbmRpZgogI2lmIEVOQUJMRShDb25kaXRpb25hbDEzKSB8fCBFTkFC
TEUoQ29uZGl0aW9uYWwxNCkKICAgICBpZiAoZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZnbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
LT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmICghSURMRE9N
U3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnBhcnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5h
YmxlZEJ5U2V0dGluZykpIHsKLSAgICAgICAgICAgIGF1dG8gcGFydGlhbFN0cmluZ01lbWJlcldp
dGhFbmFibGVkQnlTZXR0aW5nVmFsdWUgPSB0b0pTPElETERPTVN0cmluZz4oc3RhdGUsIElETERP
TVN0cmluZzo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKGRpY3Rpb25hcnkucGFydGlhbFN0cmlu
Z01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nKSk7CisgICAgICAgICAgICBhdXRvIHBhcnRpYWxT
dHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlID0gdG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIElETERPTVN0cmluZzo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKGRpY3Rpb25hcnkucGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nKSk7
CiAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAicGFydGlhbFN0cmluZ01lbWJlcldpdGhFbmFibGVkQnlTZXR0aW5nIiksIHBh
cnRpYWxTdHJpbmdNZW1iZXJXaXRoRW5hYmxlZEJ5U2V0dGluZ1ZhbHVlKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTI3NSw3ICsyNzUsNyBAQCBKU0M6OkpTT2JqZWN0KiBjb252ZXJ0RGljdGlvbmFy
eVRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZwogICAgIH0K
ICNlbmRpZgogICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShkaWN0aW9uYXJ5LnN0
cmluZ01lbWJlcikpIHsKLSAgICAgICAgYXV0byBzdHJpbmdNZW1iZXJWYWx1ZSA9IHRvSlM8SURM
RE9NU3RyaW5nPihzdGF0ZSwgSURMRE9NU3RyaW5nOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUo
ZGljdGlvbmFyeS5zdHJpbmdNZW1iZXIpKTsKKyAgICAgICAgYXV0byBzdHJpbmdNZW1iZXJWYWx1
ZSA9IHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBJRExET01TdHJpbmc6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShkaWN0aW9uYXJ5LnN0cmluZ01lbWJlcikpOwogICAg
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAic3RyaW5nTWVtYmVyIiksIHN0cmluZ01lbWJlclZhbHVlKTsKICAgICB9CiAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTI5NSwxNCArMjk1LDE0IEBAIFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25U
b1N0cmluZyhUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0CiAg
ICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsK
IH0KIAotdGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhFeGVjU3Rh
dGUmIHN0YXRlLCBUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0
aW9uYXJ5RmlsZSBlbnVtZXJhdGlvblZhbHVlKQordGVtcGxhdGU8PiBKU1N0cmluZyogY29udmVy
dEVudW1lcmF0aW9uVG9KUyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVz
dFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGUgZW51
bWVyYXRpb25WYWx1ZSkKIHsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBj
b252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhlbnVtZXJhdGlvblZhbHVlKSk7CisgICAgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb252ZXJ0RW51bWVyYXRp
b25Ub1N0cmluZyhlbnVtZXJhdGlvblZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPD4gT3B0aW9uYWw8
VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+
IHBhcnNlRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFs
b25lRGljdGlvbmFyeUZpbGU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit0ZW1w
bGF0ZTw+IE9wdGlvbmFsPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51bUluU3RhbmRhbG9u
ZURpY3Rpb25hcnlGaWxlPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25lRGljdGlvbmFy
eTo6RW51bUluU3RhbmRhbG9uZURpY3Rpb25hcnlGaWxlPihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBhdXRvIHN0cmluZ1ZhbHVlID0g
dmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGlmIChzdHJpbmdWYWx1ZSA9
PSAiZW51bVZhbHVlMSIpCiAgICAgICAgIHJldHVybiBUZXN0U3RhbmRhbG9uZURpY3Rpb25hcnk6
OkVudW1JblN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZTo6RW51bVZhbHVlMTsKICAgICBpZiAoc3Ry
aW5nVmFsdWUgPT0gImVudW1WYWx1ZTIiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rp
b25hcnkuaAppbmRleCAxZGYyOWYzNDk0MWI5MzM0NzM0YTNhZWNiMmMxMjQ3NjIwNzNmMGMwLi5k
YzFiNGUzYmU4ZDdiNzAxOTU2MDMwNmViNjJlNDI2MDQ4ZDlhZjE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9uZURpY3Rp
b25hcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RhbmRhbG9uZURpY3Rpb25hcnkuaApAQCAtMjgsMTQgKzI4LDE0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8PiBXRUJDT1JFX0VYUE9SVCBEaWN0aW9uYXJ5SW1wbE5h
bWUgY29udmVydERpY3Rpb25hcnk8RGljdGlvbmFyeUltcGxOYW1lPihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IFdFQkNPUkVfRVhQT1JUIERpY3Rpb25hcnlJbXBs
TmFtZSBjb252ZXJ0RGljdGlvbmFyeTxEaWN0aW9uYXJ5SW1wbE5hbWU+KEpTQzo6SlNHbG9iYWxP
YmplY3QmLCBKU0M6OkpTVmFsdWUpOwogCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkpTT2JqZWN0KiBj
b252ZXJ0RGljdGlvbmFyeVRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IGNvbnN0IERpY3Rpb25hcnlJbXBsTmFtZSYpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpKU09iamVj
dCogY29udmVydERpY3Rpb25hcnlUb0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIGNvbnN0IERpY3Rpb25hcnlJbXBsTmFtZSYpOwogCiBTdHJpbmcgY29udmVydEVu
dW1lcmF0aW9uVG9TdHJpbmcoVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFs
b25lRGljdGlvbmFyeUZpbGUpOwotdGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51
bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpF
bnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGUpOwordGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5n
KiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBUZXN0U3RhbmRh
bG9uZURpY3Rpb25hcnk6OkVudW1JblN0YW5kYWxvbmVEaWN0aW9uYXJ5RmlsZSk7CiAKLXRlbXBs
YXRlPD4gT3B0aW9uYWw8VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25l
RGljdGlvbmFyeUZpbGU+IHBhcnNlRW51bWVyYXRpb248VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5
OjpFbnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdFN0YW5kYWxvbmVEaWN0aW9uYXJ5OjpF
bnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+IHBhcnNlRW51bWVyYXRpb248VGVzdFN0YW5k
YWxvbmVEaWN0aW9uYXJ5OjpFbnVtSW5TdGFuZGFsb25lRGljdGlvbmFyeUZpbGU+KEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBl
Y3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RTdGFuZGFsb25lRGljdGlvbmFyeTo6RW51bUluU3Rh
bmRhbG9uZURpY3Rpb25hcnlGaWxlPigpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3Rh
bmRhbG9uZUVudW1lcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRW51bWVyYXRpb24uY3BwCmluZGV4IDQ4YzI5ZmFlMWY0
MjdlNjcxMDIwODZhNTBlZjY3ZmQ1OWNhMzA3MTkuLjkxNjNhYzJhMjg1MzI1OGVjZTVjNWEwZWI0
YjFkMzhkOWZmYWEwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRW51bWVyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRW51bWVyYXRp
b24uY3BwCkBAIC00NCwxNCArNDQsMTQgQEAgU3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3Ry
aW5nKFRlc3RTdGFuZGFsb25lRW51bWVyYXRpb24gZW51bWVyYXRpb25WYWx1ZSkKICAgICByZXR1
cm4gdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldOwogfQogCi10
ZW1wbGF0ZTw+IEpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEV4ZWNTdGF0ZSYgc3Rh
dGUsIFRlc3RTdGFuZGFsb25lRW51bWVyYXRpb24gZW51bWVyYXRpb25WYWx1ZSkKK3RlbXBsYXRl
PD4gSlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIFRlc3RTdGFuZGFsb25lRW51bWVyYXRpb24gZW51bWVyYXRpb25WYWx1
ZSkKIHsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCBjb252ZXJ0RW51bWVy
YXRpb25Ub1N0cmluZyhlbnVtZXJhdGlvblZhbHVlKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0
aENhY2hlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhl
bnVtZXJhdGlvblZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdFN0YW5kYWxv
bmVFbnVtZXJhdGlvbj4gcGFyc2VFbnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9u
PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiBPcHRpb25hbDxU
ZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uPiBwYXJzZUVudW1lcmF0aW9uPFRlc3RTdGFuZGFsb25l
RW51bWVyYXRpb24+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3Rh
dGUpOworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJlbnVtVmFsdWUxIikKICAgICAg
ICAgcmV0dXJuIFRlc3RTdGFuZGFsb25lRW51bWVyYXRpb246OkVudW1WYWx1ZTE7CiAgICAgaWYg
KHN0cmluZ1ZhbHVlID09ICJlbnVtVmFsdWUyIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25lRW51bWVyYXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdGFuZGFsb25l
RW51bWVyYXRpb24uaAppbmRleCBmNDE2NzhiYmE3ZWE5YzI2OTI5M2U2NmUzYzM5MGE0NTkwNGU4
NmJiLi5lMDNkNTFiOTNkNjM4YTdkZDhjZjlhNDU5OTk3OTUyM2E5ZDRkZTI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RhbmRhbG9u
ZUVudW1lcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0YW5kYWxvbmVFbnVtZXJhdGlvbi5oCkBAIC0yOCw5ICsyOCw5IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhUZXN0
U3RhbmRhbG9uZUVudW1lcmF0aW9uKTsKLXRlbXBsYXRlPD4gSlNDOjpKU1N0cmluZyogY29udmVy
dEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFRlc3RTdGFuZGFsb25lRW51bWVyYXRp
b24pOwordGVtcGxhdGU8PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uKTsKIAotdGVtcGxh
dGU8PiBPcHRpb25hbDxUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uPiBwYXJzZUVudW1lcmF0aW9u
PFRlc3RTdGFuZGFsb25lRW51bWVyYXRpb24+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdFN0YW5kYWxvbmVFbnVtZXJhdGlvbj4gcGFyc2VF
bnVtZXJhdGlvbjxUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uPihKU0M6OkpTR2xvYmFsT2JqZWN0
JiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJh
dGlvblZhbHVlczxUZXN0U3RhbmRhbG9uZUVudW1lcmF0aW9uPigpOwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAppbmRleCAwNDkzMjQyNDc1YzIzN2Vj
NjVmNzkwZDdiYTMyMGY2NjhjNzExYzk5Li43YWVjNmRjOGM4OTQ0MzdkNjdjYzZjNGVlMGE4ODQ1
NWY0MGFkYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKQEAgLTQ2LDggKzQ2LDggQEAg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFN0cmluZ2lmaWVyUHJvdG90
eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0MKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFN0cmlu
Z2lmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZp
ZXJDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0NCw0NiArMTQ0LDQ2IEBAIHZvaWQg
SlNUZXN0U3RyaW5naWZpZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09i
amVjdC0+SlNUZXN0U3RyaW5naWZpZXI6On5KU1Rlc3RTdHJpbmdpZmllcigpOwogfQogCi10ZW1w
bGF0ZTw+IGlubGluZSBKU1Rlc3RTdHJpbmdpZmllciogSURMT3BlcmF0aW9uPEpTVGVzdFN0cmlu
Z2lmaWVyPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0
U3RyaW5naWZpZXIqIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllcj46OmNhc3QoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewot
ICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0cmluZ2lmaWVyKj4oc3RhdGUudm0oKSwg
c3RhdGUudGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0cmlu
Z2lmaWVyKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlz
VmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0U3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90
b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0U3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRK
U1Rlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0U3RyaW5naWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgogICAgIHJldHVybiBwcm90
b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0JvZHko
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5n
aWZpZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZp
ZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExP
cGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpbXBsLnRvU3RyaW5nKCkpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
aW1wbC50b1N0cmluZygpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFN0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RTdHJpbmdpZmllcj46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRv
U3RyaW5nQm9keT4oKnN0YXRlLCAidG9TdHJpbmciKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdFN0cmluZ2lmaWVyPjo6Y2FsbDxqc1Rlc3RTdHJpbmdpZmllclByb3RvdHlwZUZ1bmN0
aW9uVG9TdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvU3Ry
aW5nIik7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXI6OmFuYWx5emVIZWFwKEpTQ2VsbCog
Y2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKQEAgLTIxOSw3ICsyMTksNyBAQCBleHRlcm4g
IkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUxNVRlc3RTdHJpbmdpZmllckVbXTsgfQog
I2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFN0cmluZ2lm
aWVyPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTdHJpbmdp
Zmllcj4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtMjQz
LDkgKzI0Myw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3JlYXRlV3Jh
cHBlcjxUZXN0U3RyaW5naWZpZXI+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAK
LUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdFN0cmluZ2lmaWVyJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFN0cmluZ2lmaWVyJiBpbXBsKQogewotICAgIHJldHVy
biB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgIHJldHVybiB3cmFwKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3RTdHJpbmdpZmll
ciogSlNUZXN0U3RyaW5naWZpZXI6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuaAppbmRleCAxZTQ0YmYwNDQyMDQxNDVmYmUxYjg2
MmNiNTgzMGEzYjU3NDI1NTM2Li5jMDE0Yjk3ZDI4YWE4NjljYWYzODU4NTdhNDEwOTY5ZjU2ZWZh
YjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuaApAQCAtNzMsMTAgKzczLDEwIEBAIGlubGluZSB2
b2lkKiB3cmFwcGVyS2V5KFRlc3RTdHJpbmdpZmllciogd3JhcHBhYmxlT2JqZWN0KQogICAgIHJl
dHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0U3RyaW5naWZpZXImKTsKLWlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFRlc3RTdHJpbmdpZmllciogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMo
c3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQotSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFJlZjxUZXN0U3RyaW5naWZpZXI+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmUHRyPFRlc3RTdHJpbmdpZmllcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9K
U05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkp
IDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFN0cmluZ2lmaWVyJik7CitpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFN0cmluZ2lmaWVyKiBpbXBsKSB7IHJl
dHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBs
KSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0U3RyaW5naWZpZXI+
JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZlB0cjxUZXN0U3RyaW5naWZpZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNO
ZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVh
c2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdFN0cmluZ2lmaWVyPiB7CiAgICAgdXNpbmcgV3Jh
cHBlckNsYXNzID0gSlNUZXN0U3RyaW5naWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVy
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcAppbmRleCBiODgyNDY5NjhjZTY5NjM1
YjU1MWY1NWIwNDVhMzU5ZDg3YmEzY2YzLi5iYTk4OTIwYmRlZTk3NGQ3ODEyYTJhOTEzMGFlNWRl
MmI1NjE0ZWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbi5jcHAKQEAgLTQ2LDggKzQ2LDggQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uUHJvdG90eXBl
RnUKIAogLy8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKIAogY2xhc3MgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Qcm90b3R5cGUg
OiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0NCw0NiArMTQ0
LDQ2IEBAIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OmRlc3Ryb3ko
SlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0U3RyaW5naWZpZXJBbm9u
eW1vdXNPcGVyYXRpb246On5KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbigpOwog
fQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
biogSURMT3BlcmF0aW9uPEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uPjo6Y2Fz
dChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb24qIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllckFub255bW91
c09wZXJhdGlvbj46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uKj4oc3RhdGUudm0oKSwgc3RhdGUudGhpc1ZhbHVl
KCkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50
aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyQW5vbnlt
b3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmll
ckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OmdldENvbnN0cnVjdG9y
KHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3Rv
dHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Qcm90b3R5cGUq
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJv
dG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
KyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3RvcgogICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
KTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0JvZHkoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb24+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Qcm90b3R5cGVGdW5jdGlvblRvU3RyaW5n
Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb24+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERP
TVN0cmluZz4oKnN0YXRlLCBpbXBsLnRvU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0
cmluZygpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5n
aWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Qcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uUHJvdG90eXBl
RnVuY3Rpb25Ub1N0cmluZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0g
ICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlv
bj46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Qcm90b3R5cGVGdW5j
dGlvblRvU3RyaW5nQm9keT4oKnN0YXRlLCAidG9TdHJpbmciKTsKKyAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uPjo6Y2FsbDxqc1Rlc3RT
dHJpbmdpZmllckFub255bW91c09wZXJhdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKIHZv
aWQgSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OmFuYWx5emVIZWFwKEpTQ2Vs
bCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKQEAgLTIxOSw3ICsyMTksNyBAQCBleHRl
cm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUzM1Rlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbkVbXTsgfQogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uPiYmIGltcGwpCitKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJh
dGlvbj4mJiBpbXBsKQogewogCiAjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQpAQCAtMjQz
LDkgKzI0Myw5IEBAIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICByZXR1cm4gY3JlYXRlV3Jh
cHBlcjxUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24+KGdsb2JhbE9iamVjdCwgV1RG
TW92ZShpbXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFN0cmluZ2lmaWVyQW5vbnlt
b3VzT3BlcmF0aW9uJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uJiBpbXBsKQogewotICAgIHJldHVybiB3
cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgIHJldHVybiB3cmFwKGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7CiB9CiAKIFRlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbiogSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OnRv
V3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaAppbmRleCBhODM4MTllODNm
ZDQyY2U3OTAwNDgyOWJmNGFjZGVkMzgxNTJkZmVmLi41OWY1MWU0YjJiMzVjZTA4MDk4NDI1YWJm
Yzg4NDdmOGM2NWEzNDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJB
bm9ueW1vdXNPcGVyYXRpb24uaApAQCAtNzMsMTAgKzczLDEwIEBAIGlubGluZSB2b2lkKiB3cmFw
cGVyS2V5KFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiogd3JhcHBhYmxlT2JqZWN0
KQogICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0U3RyaW5naWZpZXJBbm9ueW1v
dXNPcGVyYXRpb24mKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbiogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQotSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0U3Ry
aW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmUHRyPFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbj4mJiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFN0cmlu
Z2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uKiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICpp
bXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0U3RyaW5naWZp
ZXJBbm9ueW1vdXNPcGVyYXRpb24+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNP
cGVyYXRpb24+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNh
bEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlND
Ojpqc051bGwoKTsgfQogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uPiB7CiAgICAgdXNpbmcgV3Jh
cHBlckNsYXNzID0gSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAKaW5kZXggM2FhN2Mz
NmM5ODlhN2Y4MjA2ZTIwYmYyMjkwODc4NjQyNjExZTg4OC4uMjQ2NTFhMTcyZGI5YzIxYzU3NzU4
NjkzMjBjZDVmMmYwMGNiZDYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmll
ck5hbWVkT3BlcmF0aW9uLmNwcApAQCAtNDcsOCArNDcsOCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1
bmN0aQogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RTdHJpbmdpZmll
ck5hbWVkT3BlcmF0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIGNsYXNzIEpT
VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0Niw2MCArMTQ2LDYwIEBAIHZvaWQgSlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAg
ICB0aGlzT2JqZWN0LT5KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjp+SlNUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvbigpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RT
dHJpbmdpZmllck5hbWVkT3BlcmF0aW9uKiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvbj46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSkKK3RlbXBsYXRlPD4gaW5saW5l
IEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24qIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJp
bmdpZmllck5hbWVkT3BlcmF0aW9uPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nh
c3Q8SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbio+KHN0YXRlLnZtKCksIHN0YXRlLnRo
aXNWYWx1ZSgpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RTdHJpbmdpZmllck5h
bWVkT3BlcmF0aW9uKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFt
ZS50aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVy
TmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjpnZXRDb25zdHJ1Y3Rv
cihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVj
dCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3Bl
cmF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTdHJpbmdp
Zmllck5hbWVkT3BlcmF0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKICAgICByZXR1cm4g
cHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uUHJvdG90eXBlRnVu
Y3Rpb25JZGVudGlmaWVyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5
cGVGdW5jdGlvbklkZW50aWZpZXJCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5pZGVudGlmaWVyKCkpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaW1wbC5pZGVudGlmaWVyKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uUHJvdG90eXBlRnVuY3Rpb25J
ZGVudGlmaWVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUp
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVy
YXRpb25Qcm90b3R5cGVGdW5jdGlvbklkZW50aWZpZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShn
bG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvbj46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3Rv
dHlwZUZ1bmN0aW9uSWRlbnRpZmllckJvZHk+KCpzdGF0ZSwgImlkZW50aWZpZXIiKTsKKyAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24+OjpjYWxs
PGpzVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5cGVGdW5jdGlvbklkZW50aWZp
ZXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImlkZW50aWZpZXIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVy
TmFtZWRPcGVyYXRpb25Qcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck5hbWVkT3Bl
cmF0aW9uPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lm
aWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1l
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbj46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGlt
cGwuaWRlbnRpZmllcigpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaWRlbnRpZmllcigpKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJh
dGlvblByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbj46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5Pigqc3RhdGUsICJ0b1N0
cmluZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJOYW1lZE9w
ZXJhdGlvbj46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1
bmN0aW9uVG9TdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInRv
U3RyaW5nIik7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6YW5h
bHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQpAQCAtMjM1LDcg
KzIzNSw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTI5VGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25FW107IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPiYmIGltcGwp
CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTdHJpbmdpZmllck5hbWVkT3Bl
cmF0aW9uPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC0y
NTksOSArMjU5LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVX
cmFwcGVyPFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPihnbG9iYWxPYmplY3QsIFdURk1v
dmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RTdHJpbmdpZmllck5hbWVkT3Bl
cmF0aW9uJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24mIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUs
IGdsb2JhbE9iamVjdCwgaW1wbCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKIH0KIAogVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24qIEpTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OnRvV3JhcHBlZChKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5h
bWVkT3BlcmF0aW9uLmgKaW5kZXggYWExOWFjNjI1Y2I2YzczZWQ0OWNiMDUzMzU1YTY2NmVlZmVh
NjZiMi4uYTdjNjM1OTNkZWIwMDZmODg3ZDhjMTEzMzBlYTEyZTU5NTA0NGE5NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyTmFtZWRPcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5oCkBAIC03MywxMCArNzMs
MTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24qIHdyYXBwYWJsZU9iamVjdCkKICAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1K
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24mKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
UmVmPFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uPiYmKTsKLWlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbj4m
JiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24mKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiogaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkg
OiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb24+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbj4mJiBp
bXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9
CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvbj4gewogICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCmluZGV4IDI0MjYwZjVjOTcx
YThhYjc5OWZlZDlhZmFkZjMyMTM3OWM2MDZjNjIuLjk1YjAyNGQ2Yzk1OTA3NGVlNmUyNzVlZDcy
OGRjYmE1M2Y0MTY2NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwCkBAIC00Nyw4ICs0Nyw4IEBAIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXNQcm90b3R5CiAKIC8vIEF0dHJpYnV0ZXMKIAotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wg
c2V0SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRl
ZEFzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFs
T2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0Niw2MCArMTQ2LDYwIEBAIHZvaWQgSlNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQog
ICAgIHRoaXNPYmplY3QtPkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6
fkpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcygpOwogfQogCi10ZW1wbGF0
ZTw+IGlubGluZSBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMqIElETE9w
ZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM+OjpjYXN0KEV4
ZWNTdGF0ZSYgc3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTdHJpbmdpZmllck9wZXJh
dGlvbkltcGxlbWVudGVkQXMqIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlv
bkltcGxlbWVudGVkQXM+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMqPihzdGF0ZS52bSgpLCBzdGF0ZS50
aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCks
IGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUg
anNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9
IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9i
YWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwog
fQogCi1ib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlv
bkltcGxlbWVudGVkQXNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0g
ICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJv
d1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yCiAgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzUHJvdG90eXBlRnVuY3Rpb25JZGVudGlmaWVyQm9keShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlv
bkltcGxlbWVudGVkQXM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eXBlRnVuY3Rpb25JZGVudGlm
aWVyQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5hbHRlcm5hdGVJZGVudGlmaWVyKCkpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaW1wbC5hbHRlcm5hdGVJZGVudGlmaWVyKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNQ
cm90b3R5cGVGdW5jdGlvbklkZW50aWZpZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eXBlRnVuY3Rpb25JZGVudGlmaWVy
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3Bl
cmF0aW9uPEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcz46OmNhbGw8anNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eXBlRnVuY3Rpb25JZGVu
dGlmaWVyQm9keT4oKnN0YXRlLCAiaWRlbnRpZmllciIpOworICAgIHJldHVybiBJRExPcGVyYXRp
b248SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzPjo6Y2FsbDxqc1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5cGVGdW5jdGlvbklkZW50aWZp
ZXJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImlkZW50aWZpZXIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uSW1wbGVtZW50ZWRBc1Byb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uSW1wbGVtZW50ZWRBcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5cGVGdW5jdGlv
blRvU3RyaW5nQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhp
cywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC5hbHRlcm5hdGVJZGVudGlmaWVyKCkp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgaW1wbC5hbHRlcm5hdGVJZGVudGlmaWVyKCkpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXNQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc1Byb3RvdHlwZUZ1bmN0aW9uVG9TdHJp
bmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExP
cGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzPjo6Y2FsbDxq
c1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5cGVGdW5jdGlvblRv
U3RyaW5nQm9keT4oKnN0YXRlLCAidG9TdHJpbmciKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcz46OmNhbGw8anNUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0Jv
ZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidG9TdHJpbmciKTsKIH0KIAog
dm9pZCBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM6OmFuYWx5emVIZWFw
KEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKQEAgLTIzNSw3ICsyMzUsNyBA
QCBleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUzN1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXNFWwogI2VuZGlmCiAjZW5kaWYKIAotSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWY8VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcz4mJiBp
bXBsKQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25JbXBsZW1lbnRlZEFzPiYmIGltcGwpCiB7CiAKICNpZiBFTkFCTEUoQklORElOR19JTlRF
R1JJVFkpCkBAIC0yNTksOSArMjU5LDkgQEAgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJl
dHVybiBjcmVhdGVXcmFwcGVyPFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM+
KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVk
QXMmIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7
CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBs
KTsKIH0KIAogVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyogSlNUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXMuaAppbmRleCBhMDBhYjk3MDg1NmFhNWIxOTQ2YWNhZTgy
ZjQ1Y2FhODFhYjRkYzU3Li4xOTQ0NjE5ODY2MGEyNjRjZmFhYjE4NmVmZDg4MDkyZTNjMTdiOGRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1w
bGVtZW50ZWRBcy5oCkBAIC03MywxMCArNzMsMTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXko
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyogd3JhcHBhYmxlT2JqZWN0KQog
ICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRl
c3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM+JiYpOwotaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxl
bWVudGVkQXM+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0K
K0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMmKTsKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFJlZjxUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzPiYmKTsKK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcz4mJiBpbXBsKSB7IHJldHVybiBp
bXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4g
c3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRU
b1N0cmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAppbmRleCA3NmNjZTYzY2E3
OTJiYmQ4ZmVmZTQzZTYzMjU0NGI2YzQ0MTRhN2RiLi5mNzcyNWViODdlMzdhYmY4NmQ0OWVhZjky
N2Q2MzhhNjllYjc4OGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcApAQCAtNDYsOCArNDYsOCBAQCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nUHJvdG90eQogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29s
IHNldEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZ0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNDQsNDYgKzE0NCw0NiBAQCB2b2lkIEpTVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkK
ICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6
On5KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcoKTsKIH0KIAotdGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nKiBJRExP
cGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nPjo6Y2FzdChF
eGVjU3RhdGUmIHN0YXRlKQordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U3RyaW5naWZpZXJPcGVy
YXRpb25OYW1lZFRvU3RyaW5nKiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25OYW1lZFRvU3RyaW5nPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nKj4oc3RhdGUudm0oKSwgc3RhdGUu
dGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVl
IGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nUHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZzo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsK
IH0KIAotYm9vbCBzZXRKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdQcm90b3R5cGUqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewot
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3RvcgogICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZ1Byb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5n
Qm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25OYW1lZFRvU3RyaW5nPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgaW1wbC50b1N0cmluZygpKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwu
dG9TdHJpbmcoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ1Byb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmco
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3Ry
aW5nUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllck9wZXJh
dGlvbk5hbWVkVG9TdHJpbmc+OjpjYWxsPGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRU
b1N0cmluZ1Byb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5Pigqc3RhdGUsICJ0b1N0cmluZyIp
OworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nPjo6Y2FsbDxqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdQ
cm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICJ0b1N0cmluZyIpOwogfQogCiB2b2lkIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFu
YWx5emVyKQpAQCAtMjE5LDcgKzIxOSw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pU
Vk43V2ViQ29yZTM3VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0VbCiAjZW5k
aWYKICNlbmRpZgogCi1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25OYW1lZFRvU3RyaW5nPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+JiYgaW1wbCkKIHsK
IAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAgLTI0Myw5ICsyNDMsOSBAQCBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZz4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsK
IH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3Ry
aW5nJiBpbXBsKQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyYgaW1wbCkKIHsKLSAgICByZXR1cm4gd3JhcChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25OYW1lZFRvU3RyaW5nKiBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6
OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uTmFtZWRUb1N0cmluZy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZy5oCmluZGV4
IDcwYzk5ZTAzNTI3NDFjM2U1NWMzYmQzOGQwMmYyZDJiNzE5NmRhMmYuLjFkYjZiYjNjZWFiNDYy
MmMyNjI3YjE3OTQ3Y2EyZDc5OGE0YTU5NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmgKQEAgLTczLDEwICs3MywxMCBA
QCBpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRv
U3RyaW5nKiB3cmFwcGFibGVPYmplY3QpCiAgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0K
IAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcmKTsKLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcqIGltcGwpIHsg
cmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNO
dWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZz4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVz
dFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZz4mJiBpbXBsKSB7IHJldHVybiBpbXBs
ID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25O
dWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFt
ZWRUb1N0cmluZyYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcqIGltcGwpIHsgcmV0dXJuIGlt
cGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlND
Ojpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RTdHJpbmdpZmllck9wZXJhdGlv
bk5hbWVkVG9TdHJpbmc+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRv
U3RyaW5nPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6
anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc+IHsKICAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSBKU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAK
aW5kZXggMTM3NWNjOWM4NGZlMjIxMGFjODA1ZjE1M2I0MWFjMGFiMTQyMDhkMi4uNjdjZDczODc5
YzBhY2ExYzAwNTYzMGY4NDIxMzE2ZGNhZjQxNzY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcApAQCAtNDcsOSArNDcsOSBAQCBK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZVByb3RvdHlwZUZ1bgogCiAvLyBBdHRyaWJ1dGVzCiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUlkZW50
aWZpZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RT
dHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlSWRlbnRpZmllcihKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBjbGFzcyBKU1Rl
c3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CkBAIC0xNDcsNjUgKzE0Nyw2NSBAQCB2b2lkIEpTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwp
CiAgICAgdGhpc09iamVjdC0+SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6fkpT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUoKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSogSURMQXR0cmlidXRlPEpTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGUqIElETEF0dHJpYnV0ZTxKU1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUqPihzdGF0ZS52bSgpLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZSo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpT
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUqIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQordGVtcGxh
dGU8PiBpbmxpbmUgSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZSogSURMT3BlcmF0
aW9uPEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU+OjpjYXN0KEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICBy
ZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlKj4o
c3RhdGUudm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0
PEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUqPihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZVByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0
cmlidXRlOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN0cmlu
Z2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBh
dXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1dGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgogICAgIHJldHVybiBwcm90b3R5cGUt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVJZGVudGlmaWVyR2V0dGVyKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUmIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZUlkZW50aWZpZXJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUmIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgdGhyb3dTY29w
ZSwgaW1wbC5pZGVudGlmaWVyKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01T
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaWRlbnRpZmllcigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdp
ZmllclJlYWRPbmx5QXR0cmlidXRlSWRlbnRpZmllcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVJZGVudGlmaWVyKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGU+OjpnZXQ8anNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUlkZW50aWZpZXJH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAiaWRlbnRpZmllciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZT46OmdldDxqc1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlSWRlbnRpZmllckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImlkZW50aWZpZXIiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGVQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGVQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGlt
cGwuaWRlbnRpZmllcigpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERP
TVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaWRlbnRpZmllcigpKSk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0
dHJpYnV0ZVByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZVByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmco
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT46OmNhbGw8anNUZXN0U3Ry
aW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZVByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5Pigq
c3RhdGUsICJ0b1N0cmluZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZT46OmNhbGw8anNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0
dHJpYnV0ZVByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSwgInRvU3RyaW5nIik7CiB9CiAKIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJS
ZWFkT25seUF0dHJpYnV0ZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQpAQCAtMjQxLDcgKzI0MSw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9pZCog
X1pUVk43V2ViQ29yZTMyVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVFW107IH0KICNl
bmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTdHJpbmdpZmll
clJlYWRPbmx5QXR0cmlidXRlPiYmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlPiYmIGltcGwpCiB7CiAKICNpZiBF
TkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC0yNjUsOSArMjY1LDkgQEAgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlJiBpbXBsKQorSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGUmIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1w
bCk7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKIH0KIAogVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUqIEpTVGVzdFN0cmlu
Z2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0
cmlidXRlLmgKaW5kZXggYmQ2ZTE3NjUxMmViZGQyYjZiYzYwNzI5NDAwNmNmMTczMzI0NDVhMy4u
NjZmOWY2ZjFmM2NmMDIwYjMzZDhkY2Q2MjhmMTA0NmY3ZDdlM2ViMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5oCkBAIC03MywxMCArNzMs
MTAgQEAgaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGUqIHdyYXBwYWJsZU9iamVjdCkKICAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQog
Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlKiBpbXBsKSB7IHJldHVybiBpbXBs
ID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1K
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgUmVmPFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlPiYmKTsKLWlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U3RyaW5naWZpZXJSZWFk
T25seUF0dHJpYnV0ZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwo
KTsgfQorSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUmKTsKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0
dHJpYnV0ZSogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBS
ZWY8VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU+JiYpOworaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5
Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5v
bk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZT4gewog
ICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1
dGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlLmNwcAppbmRleCBhZTBjMWUyOTNjMmFkZDEyN2Q3Y2MzZjI0MDA5YzhlMzdkYzAzNDJhLi5k
NjcxNWRiMWUzYThhMDg5ZjMxOWU4NWE1NTQwZWFiMjU0NTUxYzU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAKQEAgLTQ3LDEw
ICs0NywxMCBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVQcm90b3R5cGVGdQogCiAvLyBBdHRyaWJ1dGVzCiAKLUpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZUlkZW50aWZpZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1ib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlSWRlbnRpZmllcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUlkZW50aWZpZXIo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVJZGVudGlm
aWVyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKIAogY2xhc3MgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTE0
OCw4MyArMTQ4LDgzIEBAIHZvaWQgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6
OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6On5KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZSgpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZSogSURMQXR0cmlidXRlPEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit0
ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSogSURM
QXR0cmlidXRlPEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlPjo6Y2FzdChKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
KQogewotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlKj4oc3RhdGUudm0oKSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IHJldHVybiBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRl
Kj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3Jp
dGVBdHRyaWJ1dGUqIElETE9wZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZT46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSkKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlKiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZp
ZXJSZWFkV3JpdGVBdHRyaWJ1dGU+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSo+KHN0YXRlLnZtKCksIHN0YXRl
LnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZSo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBj
YWxsRnJhbWUudGhpc1ZhbHVlKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjpnZXRD
b25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7CiB9CiAKLWJvb2wgc2V0SlNUZXN0U3Ry
aW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jv
b2wgc2V0SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRl
UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSk7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKICAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmll
clJlYWRXcml0ZUF0dHJpYnV0ZUlkZW50aWZpZXJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUmIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGVJZGVudGlmaWVyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSYgdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCB0aHJvd1Njb3BlLCBp
bXBsLmlkZW50aWZpZXIoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETERPTVN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pZGVudGlmaWVyKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlSWRlbnRpZmllcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlSWRlbnRpZmllcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZT46OmdldDxqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUlkZW50aWZpZXJH
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVl
LCAiaWRlbnRpZmllciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0U3RyaW5naWZp
ZXJSZWFkV3JpdGVBdHRyaWJ1dGU+OjpnZXQ8anNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGVJZGVudGlmaWVyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiaWRlbnRpZmllciIpOwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVJZGVu
dGlmaWVyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlSWRlbnRpZmllclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KHN0YXRlLCB2
YWx1ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3Bl
LCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRJZGVudGlmaWVyKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBz
ZXRKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUlkZW50aWZpZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCitib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlSWRlbnRp
ZmllcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT46OnNldDxzZXRK
U1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUlkZW50aWZpZXJTZXR0ZXI+KCpzdGF0
ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpZGVudGlmaWVyIik7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT46OnNldDxzZXRK
U1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUlkZW50aWZpZXJTZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImlkZW50aWZpZXIiKTsK
IH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0JvZHkoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGU+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9k
eShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFt
ZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGU+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0
cmluZz4oKnN0YXRlLCBpbXBsLmlkZW50aWZpZXIoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50
aWZpZXIoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZVByb3RvdHlw
ZUZ1bmN0aW9uVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwot
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGU+OjpjYWxsPGpzVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlUHJvdG90eXBlRnVu
Y3Rpb25Ub1N0cmluZ0JvZHk+KCpzdGF0ZSwgInRvU3RyaW5nIik7CisgICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT46OmNhbGw8anNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9k
eT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0b1N0cmluZyIpOwogfQogCiB2
b2lkIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjphbmFseXplSGVhcChKU0Nl
bGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCkBAIC0yNjAsNyArMjYwLDcgQEAgZXh0
ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzNUZXN0U3RyaW5naWZpZXJSZWFk
V3JpdGVBdHRyaWJ1dGVFW107IH0KICNlbmRpZgogI2VuZGlmCiAKLUpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT4mJiBpbXBsKQorSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGU+JiYgaW1wbCkKIHsKIAogI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKQEAgLTI4
NCw5ICsyODQsOSBAQCBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIGNyZWF0ZVdy
YXBwZXI8VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlPihnbG9iYWxPYmplY3QsIFdU
Rk1vdmUoaW1wbCkpOwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZSYgaW1wbCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSYgaW1wbCkKIHsKLSAgICByZXR1cm4g
d3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKKyAgICByZXR1cm4gd3JhcChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOwogfQogCiBUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGUqIEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjp0
b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJl
YWRXcml0ZUF0dHJpYnV0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgKaW5kZXggMDUyODMxNDQy
NzhkZTBkYjdlMzE5MDAwY2UyOTA3ZjFkMDAxNTI4OS4uYTdmOTY5YzIwODJkZTY2N2EwYmM4MjI5
ODMyNTM0MTRkNmU1MjY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlLmgKQEAgLTczLDEwICs3MywxMCBAQCBpbmxpbmUgdm9pZCogd3Jh
cHBlcktleShUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUqIHdyYXBwYWJsZU9iamVj
dCkKICAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwogfQogCi1KU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGUqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlPiYmKTsKLWlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU+JiYg
aW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZSogaW1wbCkg
eyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAq
aW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRl
QXR0cmlidXRlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpT
Qzo6anNOdWxsKCk7IH0KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZT4gewogICAgIHVzaW5nIFdy
YXBwZXJDbGFzcyA9IEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RU
eXBlZGVmcy5jcHAKaW5kZXggZjY1ZTU5Mzg4ZmU3NDFlY2FhNjgyZTk3NzFiOWNkMTRhOGNiODMw
Ny4uNzViMGMzZTQyNmY5YjFmOGMxN2IyODM1ZjQyY2Y3NzI0MjJmODNhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlw
ZWRlZnMuY3BwCkBAIC03OSwyMSArNzksMjEgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXAKIAog
Ly8gQXR0cmlidXRlcwogCi1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNTZXJpYWxpemVkU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlw
ZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmooSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJpYnV0
ZVdpdGhDbGFtcChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0
ZVdpdGhDbGFtcEluVHlwZWRlZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRo
Q2xhbXBJblR5cGVkZWYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNCdWZm
ZXJTb3VyY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjZUF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNEb21UaW1lU3RhbXBBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotYm9v
bCBzZXRKU1Rlc3RUeXBlZGVmc0RvbVRpbWVTdGFtcEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNV
bnNpZ25lZExvbmdMb25nQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVk
TG9uZ0xvbmdBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNT
ZXJpYWxpemVkU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNTZXJpYWxp
emVkU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0
dHJpYnV0ZVdpdGhDbGFtcChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFR5cGVk
ZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNCdWZmZXJTb3VyY2VBdHRyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFR5
cGVkZWZzQnVmZmVyU291cmNlQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzRG9tVGltZVN0YW1wQXR0cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0Rv
bVRpbWVTdGFtcEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCiBjbGFzcyBKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgpAQCAtMTQzLDIzICsxNDMs
MjMgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3JUYWJsZVZhbHVlc1tdID0KICAgICB7ICJUZXN0U3ViT2JqIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RUeXBl
ZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaiksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKIH07CiAKLXRlbXBsYXRlPD4gRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1
Y3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK3RlbXBs
YXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3IqPihzdGF0ZS0+anNDYWxsZWUoKSk7CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKICAgICBB
U1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAzKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGhlbGxvID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAzKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7Cisg
ICAgYXV0byBoZWxsbyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHRlc3RDYWxsYmFj
a0Z1bmN0aW9uID0gY29udmVydDxJRExDYWxsYmFja0Z1bmN0aW9uPEpTVGVzdENhbGxiYWNrRnVu
Y3Rpb24+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3Bl
LCAxLCAidGVzdENhbGxiYWNrRnVuY3Rpb24iLCAiVGVzdFR5cGVkZWZzIiwgbnVsbHB0cik7IH0p
OworICAgIGF1dG8gdGVzdENhbGxiYWNrRnVuY3Rpb24gPSBjb252ZXJ0PElETENhbGxiYWNrRnVu
Y3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIDEsICJ0ZXN0Q2FsbGJhY2tGdW5jdGlvbiIsICJUZXN0VHlwZWRl
ZnMiLCBudWxscHRyKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHRlc3RDYWxsYmFja0ludGVyZmFjZSA9IGNvbnZl
cnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3BlLCAyLCAidGVzdENhbGxi
YWNrSW50ZXJmYWNlIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOyB9KTsKKyAgICBhdXRvIHRl
c3RDYWxsYmFja0ludGVyZmFjZSA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0
Q2FsbGJhY2tJbnRlcmZhY2U+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgyKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAyLCAidGVzdENhbGxiYWNrSW50ZXJmYWNlIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxw
dHIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdFR5cGVkZWZzOjpjcmVhdGUoV1RGTW92ZSho
ZWxsbyksIHRlc3RDYWxsYmFja0Z1bmN0aW9uLnJlbGVhc2VOb25OdWxsKCksIHRlc3RDYWxsYmFj
a0ludGVyZmFjZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RUeXBlZGVmcz4+KCpzdGF0ZSwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RUeXBlZGVm
cz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdU
Rk1vdmUob2JqZWN0KSkpOwogfQogCiB0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0VHlwZWRlZnND
b25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQpAQCAtMjUxLDUyMSArMjUxLDUyMSBAQCB2b2lk
IEpTVGVzdFR5cGVkZWZzOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmpl
Y3QtPkpTVGVzdFR5cGVkZWZzOjp+SlNUZXN0VHlwZWRlZnMoKTsKIH0KIAotdGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0VHlwZWRlZnMqIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmNhc3Qo
RXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQordGVtcGxhdGU8PiBp
bmxpbmUgSlNUZXN0VHlwZWRlZnMqIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmNhc3Qo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSkKIHsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KHN0YXRl
LnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICByZXR1cm4ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEpTVGVz
dFR5cGVkZWZzKiBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+OjpjYXN0KEV4ZWNTdGF0ZSYg
c3RhdGUpCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RUeXBlZGVmcyogSURMT3BlcmF0aW9uPEpT
VGVzdFR5cGVkZWZzPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0
VHlwZWRlZnMqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGpz
RHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBl
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQotICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1Rlc3RUeXBlZGVmczo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Rlc3RUeXBlZGVmczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwogfQogCi1i
b29sIHNldEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNl
dEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHByb3RvdHlw
ZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUmIHN0YXRlLCBKU1Rl
c3RUeXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihzdGF0ZSwgdGhy
b3dTY29wZSwgaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQor
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46
OmdldDxqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuc2lnbmVkTG9uZ0xv
bmdBdHRyIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmdldDxq
c1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidW5zaWdu
ZWRMb25nTG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVk
ZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlw
ZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0VHlwZWRl
ZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExVbnNpZ25lZExvbmdMb25nPihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUsIHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRl
U2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAg
ICAgIHJldHVybiBpbXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RUeXBl
ZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6c2V0PHNl
dEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJTZXR0ZXI+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOworICAgIHJldHVybiBJ
RExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25l
ZExvbmdMb25nQXR0clNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKIH0KIAotc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNjcmlw
dFZhbHVlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RU
eXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExTZXJpYWxpemVkU2Ny
aXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4oc3RhdGUsICp0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNj
cmlwdFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRl
PEpTVGVzdFR5cGVkZWZzPjo6Z2V0PGpzVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVl
R2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1
ZSwgInNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0VHlwZWRlZnM+OjpnZXQ8anNUZXN0VHlwZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0
ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsICJzZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlU2V0dGVyKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVk
ZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+PihzdGF0ZSwgdmFsdWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7Ci0gICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKHN0YXRlLCB0aHJvd1Njb3Bl
LCBbJl0geworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0gewogICAgICAgICByZXR1cm4gaW1wbC5zZXRTZXJpYWxpemVkU2NyaXB0
VmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIH0pOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIHNldEpTVGVzdFR5cGVkZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RUeXBlZGVmcz46OnNldDxzZXRKU1Rlc3RUeXBlZGVmc1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZVNldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+Ojpz
ZXQ8c2V0SlNUZXN0VHlwZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgInNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1
Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVz
dFN1Yk9iakdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1
Y3RvcihzdGF0ZS52bSgpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0
cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3JUZXN0U3ViT2JqKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdFR5cGVkZWZzPjo6Z2V0U3RhdGljPGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JU
ZXN0U3ViT2JqR2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgIlRlc3RTdWJPYmoiKTsKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6Z2V0U3RhdGljPGpzVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCAiVGVzdFN1Yk9iaiIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0
VHlwZWRlZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25n
Pj4oc3RhdGUsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aENsYW1wKCkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUzxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWduZWRMb25nTG9uZz4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aENsYW1w
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzQXR0cmlidXRlV2l0aENsYW1wKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRy
aWJ1dGVXaXRoQ2xhbXAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpnZXQ8anNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xh
bXBHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1Zh
bHVlLCAiYXR0cmlidXRlV2l0aENsYW1wIik7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rl
c3RUeXBlZGVmcz46OmdldDxqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcEdldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhDbGFtcCIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBTZXR0ZXIoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1
dGVXaXRoQ2xhbXBTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+PihzdGF0ZSwgdmFs
dWUpOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExV
bnNpZ25lZExvbmdMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6
Y2FsbChzdGF0ZSwgdGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGlt
cGwuc2V0QXR0cmlidXRlV2l0aENsYW1wKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICB9KTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdp
dGhDbGFtcChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK2Jvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVX
aXRoQ2xhbXAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNBdHRy
aWJ1dGVXaXRoQ2xhbXBTZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJh
dHRyaWJ1dGVXaXRoQ2xhbXAiKTsKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFR5cGVk
ZWZzPjo6c2V0PHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJhdHRyaWJ1dGVXaXRo
Q2xhbXAiKTsKIH0KIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cmli
dXRlV2l0aENsYW1wSW5UeXBlZGVmR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVk
ZWZzJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+KHN0YXRl
LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZigpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZigp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c0F0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKLSAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6Z2V0PGpzVGVzdFR5cGVkZWZz
QXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0Pigqc3RhdGUsIHRoaXNWYWx1ZSwgImF0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRl
ZiIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpnZXQ8anNUZXN0
VHlwZWRlZnNBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWZHZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJhdHRy
aWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWYiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmU2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0
cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExMb25nPj4oc3RhdGUsIHZh
bHVlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURM
TG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLSAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwoc3RhdGUs
IHRocm93U2NvcGUsIFsmXSB7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CiAgICAgICAgIHJldHVybiBpbXBsLnNldEF0dHJp
YnV0ZVdpdGhDbGFtcEluVHlwZWRlZihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVXaXRo
Q2xhbXBJblR5cGVkZWYoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCitib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0
cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6c2V0PHNldEpT
VGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmU2V0dGVyPigqc3RhdGUsIHRo
aXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmIik7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OnNldDxzZXRKU1Rlc3RUeXBl
ZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZlNldHRlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVm
Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJj
ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlw
ZWRlZnNCdWZmZXJTb3VyY2VBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJ
RExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4oc3RhdGUsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmJ1ZmZlclNvdXJjZUF0dHIo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTPElETFVuaW9uPElETEFycmF5QnVmZmVyVmll
dywgSURMQXJyYXlCdWZmZXI+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5idWZmZXJTb3VyY2VBdHRyKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQnVmZmVyU291
cmNlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQnVmZmVyU291cmNlQXR0cihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBl
ZGVmcz46OmdldDxqc1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjZUF0dHJHZXR0ZXIsIENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAiYnVmZmVyU291cmNl
QXR0ciIpOworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpnZXQ8anNU
ZXN0VHlwZWRlZnNCdWZmZXJTb3VyY2VBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiYnVmZmVyU291cmNl
QXR0ciIpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNCdWZmZXJT
b3VyY2VBdHRyU2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdFR5cGVkZWZzJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQnVmZmVyU291cmNlQXR0clNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbmlvbjxJRExBcnJheUJ1
ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4oc3RhdGUsIHZhbHVlKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVm
ZmVyPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwg
dGhyb3dTY29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0QnVmZmVy
U291cmNlQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNCdWZmZXJTb3VyY2VBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjZUF0dHIoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNU
ZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNCdWZmZXJTb3VyY2VBdHRyU2V0dGVy
Pigqc3RhdGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiYnVmZmVyU291cmNlQXR0ciIpOwor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlw
ZWRlZnNCdWZmZXJTb3VyY2VBdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCBlbmNvZGVkVmFsdWUsICJidWZmZXJTb3VyY2VBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0RvbVRpbWVTdGFtcEF0dHJHZXR0ZXIoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNEb21UaW1lU3RhbXBBdHRy
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVm
cyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihz
dGF0ZSwgdGhyb3dTY29wZSwgaW1wbC5kb21UaW1lU3RhbXBBdHRyKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLmRvbVRpbWVTdGFtcEF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNEb21UaW1lU3RhbXBBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5j
b2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNEb21UaW1lU3RhbXBBdHRyKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdFR5cGVkZWZzPjo6Z2V0PGpz
VGVzdFR5cGVkZWZzRG9tVGltZVN0YW1wQXR0ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydD4oKnN0YXRlLCB0aGlzVmFsdWUsICJkb21UaW1lU3RhbXBBdHRyIik7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RUeXBlZGVmcz46OmdldDxqc1Rlc3RUeXBlZGVmc0Rv
bVRpbWVTdGFtcEF0dHJHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJkb21UaW1lU3RhbXBBdHRyIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0RvbVRpbWVTdGFtcEF0dHJTZXR0
ZXIoRXhlY1N0YXRlJiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNEb21UaW1lU3RhbXBBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RUeXBlZGVmcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KHN0YXRlLCB2YWx1
ZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwotICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChzdGF0ZSwgdGhyb3dT
Y29wZSwgWyZdIHsKKyAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgWyZdIHsKICAgICAgICAgcmV0dXJuIGltcGwuc2V0RG9tVGltZVN0YW1w
QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgc2V0SlNUZXN0VHlwZWRlZnNEb21UaW1lU3RhbXBBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0RvbVRpbWVTdGFtcEF0dHIoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlw
ZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNEb21UaW1lU3RhbXBBdHRyU2V0dGVyPigqc3Rh
dGUsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiZG9tVGltZVN0YW1wQXR0ciIpOworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0VHlwZWRlZnM+OjpzZXQ8c2V0SlNUZXN0VHlwZWRlZnNE
b21UaW1lU3RhbXBBdHRyU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJkb21UaW1lU3RhbXBBdHRyIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY0JvZHko
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRl
ZnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbkZ1bmNCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RUeXBlZGVmcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIHggPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExMb25nPj46OlJldHVyblR5cGV7IH0gOiBj
b252ZXJ0PElETFNlcXVlbmNlPElETExvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CisgICAgYXV0byB4ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETExvbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNv
bnZlcnQ8SURMU2VxdWVuY2U8SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuZnVuYyhXVEZNb3ZlKHgpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0
aW9uPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbDxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9u
RnVuY0JvZHk+KCpzdGF0ZSwgImZ1bmMiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVz
dFR5cGVkZWZzPjo6Y2FsbDxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY0JvZHk+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZnVuYyIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
blNldFNoYWRvd0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRp
b248SlNUZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNoYWRvd0JvZHkoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVk
VGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0g
ICAgYXV0byB3aWR0aCA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAzKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byB3aWR0aCA9IGNvbnZlcnQ8SURMVW5yZXN0
cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIGF1dG8gaGVpZ2h0ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9h
dD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGF1dG8gaGVpZ2h0
ID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBibHVyID0gY29udmVydDxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMikp
OworICAgIGF1dG8gYmx1ciA9IGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8g
Y29sb3IgPSBzdGF0ZS0+YXJndW1lbnQoMykuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29u
dmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsK
KyAgICBhdXRvIGNvbG9yID0gY2FsbEZyYW1lLT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpID8g
U3RyaW5nKCkgOiBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMykpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBhbHBoYSA9IHN0YXRlLT5h
cmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDQpKSk7CisgICAgYXV0byBhbHBoYSA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoNCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVucmVzdHJpY3Rl
ZEZsb2F0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCg0KSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgaW1wbC5zZXRTaGFkb3coV1RGTW92ZSh3aWR0aCksIFdURk1vdmUoaGVpZ2h0
KSwgV1RGTW92ZShibHVyKSwgV1RGTW92ZShjb2xvciksIFdURk1vdmUoYWxwaGEpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3co
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNldFNo
YWRvdyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElE
TE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvblNldFNoYWRvd0JvZHk+KCpzdGF0ZSwgInNldFNoYWRvdyIpOworICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+OjpjYWxsPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25TZXRTaGFkb3dCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
InNldFNoYWRvdyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0JvZHkoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+
OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUp
CitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0
byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMU2VyaWFsaXplZFNjcmlwdFZh
bHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOworICAgIGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGltcGwubWV0aG9kV2l0aFNlcXVl
bmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWVu
Y2VBcmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0JvZHk+KCpzdGF0
ZSwgIm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0VHlwZWRlZnM+OjpjYWxsPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoU2VxdWVuY2VBcmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1l
dGhvZFdpdGhTZXF1ZW5jZUFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmdC
b2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFR5
cGVkZWZzPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlQXJnQm9keShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAg
ICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExE
T01TdHJpbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRvIHNl
cXVlbmNlQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgaW1wbC5udWxsYWJsZVNlcXVlbmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJs
ZVNlcXVlbmNlQXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3Rh
dGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlQXJnKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbDxq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZ0JvZHk+KCpz
dGF0ZSwgIm51bGxhYmxlU2VxdWVuY2VBcmciKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdFR5cGVkZWZzPjo6Y2FsbDxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFi
bGVTZXF1ZW5jZUFyZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAibnVs
bGFibGVTZXF1ZW5jZUFyZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNlcXVlbmNlT2ZOdWxsYWJsZXNBcmdC
b2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFR5
cGVkZWZzPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnQm9keShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
LSAgICBhdXRvIHNlcXVlbmNlQXJnID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExOdWxsYWJsZTxJ
RExET01TdHJpbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKKyAgICBhdXRv
IHNlcXVlbmNlQXJnID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExOdWxsYWJsZTxJRExET01TdHJp
bmc+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgaW1wbC5zZXF1ZW5jZU9mTnVsbGFibGVzQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25T
ZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25TZXF1ZW5jZU9mTnVsbGFibGVzQXJnKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURf
UEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVk
ZWZzPjo6Y2FsbDxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxh
Ymxlc0FyZ0JvZHk+KCpzdGF0ZSwgInNlcXVlbmNlT2ZOdWxsYWJsZXNBcmciKTsKKyAgICByZXR1
cm4gSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbDxqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAic2VxdWVuY2VPZk51bGxhYmxlc0FyZyIpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0JvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRlciBj
YXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxl
U2VxdWVuY2VPZk51bGxhYmxlc0FyZ0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0
aW9uPEpTVGVzdFR5cGVkZWZzPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBzZXF1ZW5j
ZUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMU2VxdWVuY2U8SURMTnVsbGFibGU8SURMRE9N
U3RyaW5nPj4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAgIGF1dG8gc2Vx
dWVuY2VBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETFNlcXVlbmNlPElETE51bGxhYmxlPElE
TERPTVN0cmluZz4+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5udWxsYWJsZVNlcXVlbmNlT2ZOdWxsYWJsZXNBcmcoV1RG
TW92ZShzZXF1ZW5jZUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5j
ZU9mTnVsbGFibGVzQXJnKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKLSAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbDxqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnQm9keT4oKnN0
YXRlLCAibnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnIik7CisgICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0FyZ0JvZHk+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAibnVsbGFibGVTZXF1ZW5jZU9mTnVsbGFibGVzQXJnIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnQm9keShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVs
bGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHNlcXVl
bmNlQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExVbmlvbjxJRExET01T
dHJpbmcsIElETFNlcXVlbmNlPElETERPTVN0cmluZz4+Pj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CisgICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8
SURMU2VxdWVuY2U8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExTZXF1ZW5jZTxJRExET01TdHJp
bmc+Pj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1
ZSgpKTsKICAgICBpbXBsLm51bGxhYmxlU2VxdWVuY2VPZlVuaW9uc0FyZyhXVEZNb3ZlKHNlcXVl
bmNlQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlT2ZVbmlvbnNBcmco
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0VHlwZWRlZnM+OjpjYWxsPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25OdWxsYWJsZVNlcXVlbmNlT2ZVbmlvbnNBcmdCb2R5Pigqc3RhdGUsICJudWxsYWJsZVNlcXVl
bmNlT2ZVbmlvbnNBcmciKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZz
Pjo6Y2FsbDxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZU9m
VW5pb25zQXJnQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJudWxsYWJs
ZVNlcXVlbmNlT2ZVbmlvbnNBcmciKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25VbmlvbkFyZ0JvZHkoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvblVuaW9uQXJnQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNU
ZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHVuaW9uQXJnID0gY29u
dmVydDxJRExVbmlvbjxJRExET01TdHJpbmcsIElETExvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOworICAgIGF1dG8gdW5pb25BcmcgPSBjb252ZXJ0PElETFVuaW9uPElETERP
TVN0cmluZywgSURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwudW5pb25BcmcoV1RGTW92ZSh1bmlvbkFyZykpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblVuaW9u
QXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25V
bmlvbkFyZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJu
IElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvblVuaW9uQXJnQm9keT4oKnN0YXRlLCAidW5pb25BcmciKTsKKyAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbDxqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uVW5pb25BcmdCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwg
InVuaW9uQXJnIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEJvZHkoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bkZ1bmNXaXRoQ2xhbXBCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rl
c3RUeXBlZGVmcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gYXJnMSA9IGNvbnZlcnQ8
SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOworICAgIGF1dG8gYXJnMSA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElE
TFVuc2lnbmVkTG9uZ0xvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIGFyZzIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWdu
ZWRMb25nTG9uZz4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETENsYW1w
QWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMQ2xh
bXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgxKSkpOworICAgIGF1dG8gYXJnMiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExDbGFtcEFkYXB0b3I8SURMVW5zaWdu
ZWRMb25nTG9uZz4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETENsYW1w
QWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMQ2xh
bXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5mdW5jV2l0aENsYW1wKFdU
Rk1vdmUoYXJnMSksIFdURk1vdmUoYXJnMikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBzdGF0ZSkKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXAoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0VHlwZWRlZnM+OjpjYWxsPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0
aENsYW1wQm9keT4oKnN0YXRlLCAiZnVuY1dpdGhDbGFtcCIpOworICAgIHJldHVybiBJRExPcGVy
YXRpb248SlNUZXN0VHlwZWRlZnM+OjpjYWxsPGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25GdW5jV2l0aENsYW1wQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJm
dW5jV2l0aENsYW1wIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEluVHlwZWRlZkJvZHko
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRl
ZnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBJblR5cGVkZWZCb2R5KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVu
YW1lIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRo
aXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAg
IGF1dG8gYXJnID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byBhcmcgPSBjb252ZXJ0PElETENsYW1wQWRh
cHRvcjxJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5mdW5jV2l0aENsYW1wSW5UeXBlZGVmKFdURk1vdmUoYXJn
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9u
RnVuY1dpdGhDbGFtcEluVHlwZWRlZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEluVHlwZWRlZihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBl
ZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBJ
blR5cGVkZWZCb2R5Pigqc3RhdGUsICJmdW5jV2l0aENsYW1wSW5UeXBlZGVmIik7CisgICAgcmV0
dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBJblR5cGVkZWZCb2R5PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgImZ1bmNXaXRoQ2xhbXBJblR5cGVkZWYiKTsKIH0KIAotc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25Qb2ludEZ1bmN0aW9uQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9w
ZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uUG9pbnRGdW5jdGlvbkJvZHkoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Q2xhc3NQYXJhbWV0
ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHUG9pbnQ+Pigqc3RhdGUsICpjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wb2ludEZ1bmN0aW9uKCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wb2ludEZ1bmN0
aW9uKCkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uUG9pbnRGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uUG9pbnRGdW5jdGlvbihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBl
ZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblBvaW50RnVuY3Rpb25C
b2R5Pigqc3RhdGUsICJwb2ludEZ1bmN0aW9uIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblBvaW50
RnVuY3Rpb25Cb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInBvaW50RnVu
Y3Rpb24iKTsKIH0KIAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OkNs
YXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURM
T3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byB2
YWx1ZXMgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byB2YWx1ZXMgPSBjb252ZXJ0PElETFNlcXVlbmNl
PElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5j
ZTxJRExET01TdHJpbmc+Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5n
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSkpKTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxK
U1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmlu
Z1NlcXVlbmNlRnVuY3Rpb25Cb2R5Pigqc3RhdGUsICJzdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uIik7
CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rpb25Cb2R5PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInN0cmluZ1NlcXVlbmNlRnVuY3Rpb24iKTsKIH0K
IAotc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90
eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRl
ciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmlu
Z1NlcXVlbmNlRnVuY3Rpb24yQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248
SlNUZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHZhbHVlcyA9IGNv
bnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKKyAgICBhdXRvIHZhbHVlcyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3Ry
aW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNlcXVlbmNlPElETERPTVN0
cmluZz4+KCpzdGF0ZSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yKFdURk1vdmUodmFsdWVzKSkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihXVEZNb3ZlKHZhbHVlcykpKSk7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
blN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVk
ZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RU
eXBlZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVl
bmNlRnVuY3Rpb24yQm9keT4oKnN0YXRlLCAic3RyaW5nU2VxdWVuY2VGdW5jdGlvbjIiKTsKKyAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbDxqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbjJCb2R5PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgInN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yIik7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGVCb2R5KEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZUJvZHkoSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Q2xhc3NQYXJhbWV0ZXIgY2Fz
dGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
Ci0gICAgYXV0byBzZXF1ZW5jZUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNl
PFRlc3RFdmVudFRhcmdldD4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
CisgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOworICAg
IGF1dG8gc2VxdWVuY2VBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETEludGVyZmFjZTxUZXN0
RXZlbnRUYXJnZXQ+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+
KGltcGwuY2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoV1RGTW92ZShzZXF1ZW5j
ZUFyZykpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogc3RhdGUpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0
aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2Jh
bE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OmNhbGw8
anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWly
ZXNJbmNsdWRlQm9keT4oKnN0YXRlLCAiY2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1
ZGUiKTsKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdFR5cGVkZWZzPjo6Y2FsbDxqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0lu
Y2x1ZGVCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImNhbGxXaXRoU2Vx
dWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2Vw
dGlvbkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNU
ZXN0VHlwZWRlZnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlw
ZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25Cb2R5KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OkNsYXNzUGFyYW1ldGVyIGNh
c3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsKLSAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBwcm9wYWdhdGVFeGNl
cHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb24oKSk7Cisg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLm1ldGhvZFdpdGhFeGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIHN0YXRlKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
bihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhFeGNlcHRpb25Cb2R5Pigqc3RhdGUsICJtZXRob2RXaXRoRXhjZXB0aW9u
Iik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RUeXBlZGVmcz46OmNhbGw8anNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25Cb2R5PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgIm1ldGhvZFdpdGhFeGNlcHRpb24iKTsKIH0KIAog
dm9pZCBKU1Rlc3RUeXBlZGVmczo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6
ZXImIGFuYWx5emVyKQpAQCAtODAxLDcgKzgwMSw3IEBAIGV4dGVybiAiQyIgeyBleHRlcm4gdm9p
ZCogX1pUVk43V2ViQ29yZTEyVGVzdFR5cGVkZWZzRVtdOyB9CiAjZW5kaWYKICNlbmRpZgogCi1K
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0VHlwZWRlZnM+JiYgaW1wbCkKK0pTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFR5cGVkZWZzPiYmIGltcGwpCiB7CiAKICNpZiBF
TkFCTEUoQklORElOR19JTlRFR1JJVFkpCkBAIC04MjUsOSArODI1LDkgQEAgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LAogICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RUeXBlZGVmcz4oZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0VHlwZWRl
ZnMmIGltcGwpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0VHlwZWRl
ZnMmIGltcGwpCiB7Ci0gICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7
CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBs
KTsKIH0KIAogVGVzdFR5cGVkZWZzKiBKU1Rlc3RUeXBlZGVmczo6dG9XcmFwcGVkKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCmluZGV4IDIwOTMxMTJmNTA1
NmIyMjBkMzJiZTUzNDE5ZjUwMWEyOWNjYmVjYjguLmFlZjJjOWZlNWViOTkyY2I5MThkYWUwNTk0
ZTEyOTAwNTM5YjY4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5oCkBAIC03NSwxMCArNzUsMTAgQEAgaW5s
aW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdFR5cGVkZWZzKiB3cmFwcGFibGVPYmplY3QpCiAgICAg
cmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RUeXBlZGVmcyYpOwotaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVGVzdFR5cGVkZWZzKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFRlc3RUeXBlZGVmcz4mJik7Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWZQdHI8VGVzdFR5cGVkZWZzPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVh
dGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6Ompz
TnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0VHlwZWRlZnMmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUZXN0VHlwZWRlZnMqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pT
KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwo
KTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RUeXBlZGVmcz4mJik7CitpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RUeXBl
ZGVmcz4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6Ompz
TnVsbCgpOyB9CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxUZXN0VHlwZWRlZnM+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RUeXBlZGVm
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RWb2lkQ2FsbGJhY2tGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Vm9pZENhbGxiYWNrRnVuY3Rpb24uY3BwCmluZGV4IGMyNmVk
M2Y1Y2VmNjIwZGMwZjA5YzI4NzE3NWM2MzVlZDFjNzNkNjQuLmVkNjRlZDA0YjRhNDA0NDYyMzkx
NTMzNjlhNTcwYjZhMTZjZTEyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RWb2lkQ2FsbGJhY2tGdW5jdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFZvaWRDYWxsYmFja0Z1
bmN0aW9uLmNwcApAQCAtNzEsMjEgKzcxLDIxIEBAIENhbGxiYWNrUmVzdWx0PHR5cGVuYW1lIElE
TFZvaWQ6OkltcGxlbWVudGF0aW9uVHlwZT4gSlNUZXN0Vm9pZENhbGxiYWNrRnVuY3Rpb246CiAg
ICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKIAogICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKLSAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QuZ2xvYmFsRXhlYygpOworICAg
IGF1dG8mIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAgICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
Ci0gICAgYXJncy5hcHBlbmQodG9KUzxJRExGbG9hdDMyQXJyYXk+KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIGFycmF5UGFyYW0pKTsKLSAgICBhcmdzLmFwcGVuZCh0b0pTPElETFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzcnpQ
YXJhbSkpOwotICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgc3RyQXJn
KSk7CisgICAgYXJncy5hcHBlbmQodG9KUzxJRExGbG9hdDMyQXJyYXk+KGxleGljYWxHbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdCwgYXJyYXlQYXJhbSkpOworICAgIGFyZ3MuYXBwZW5kKHRvSlM8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KGxleGljYWxH
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgc3J6UGFyYW0pKTsKKyAgICBhcmdzLmFwcGVuZCh0
b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgc3RyQXJnKSk7CiAgICAgYXJn
cy5hcHBlbmQodG9KUzxJRExCb29sZWFuPihib29sUGFyYW0pKTsKICAgICBhcmdzLmFwcGVuZCh0
b0pTPElETExvbmc+KGxvbmdQYXJhbSkpOwotICAgIGFyZ3MuYXBwZW5kKHRvSlM8SURMSW50ZXJm
YWNlPFRlc3ROb2RlPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdGVzdE5vZGVQYXJhbSkpOworICAg
IGFyZ3MuYXBwZW5kKHRvSlM8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCB0ZXN0Tm9kZVBhcmFtKSk7CiAgICAgQVNTRVJUKCFhcmdzLmhh
c092ZXJmbG93ZWQoKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4gcmV0dXJuZWRF
eGNlcHRpb247CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayh0aGlzVmFsdWUsIGFyZ3MsIEpT
Q2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6OkZ1bmN0aW9uLCBJZGVudGlmaWVyKCksIHJldHVy
bmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKLSAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKCZzdGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICByZXBvcnRF
eGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHJldHVybmVkRXhjZXB0aW9uKTsKICAgICAg
ICAgcmV0dXJuIENhbGxiYWNrUmVzdWx0VHlwZTo6RXhjZXB0aW9uVGhyb3duOwogICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApp
bmRleCA3ZWJjMGE4ZTZiYzQ3YTc2NGE0YzExYzQyMmI3NzAwNjlhZmFhZDBmLi43NTMwYzJjMTQ2
OWVjNDc3NzJhZTA1YmNiNzU4MjAzMTMxN2FkMDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC0xOTYsMTAgKzE5NiwxMCBAQCBl
bnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93IiB9OwogICAgIFtJbXBsZW1l
bnRlZEFzPW9uZm9vXSBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ud2Via2l0Zm9vOwogCiAgICAg
Ly8gJ0NhbGxXaXRoJyBleHRlbmRlZCBhdHRyaWJ1dGUKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRl
XSB2b2lkIHdpdGhFeGVjU3RhdGVWb2lkKCk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZV0gVGVz
dE9iaiB3aXRoRXhlY1N0YXRlT2JqKCk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhy
b3dFeGNlcHRpb25dIHZvaWQgd2l0aEV4ZWNTdGF0ZVZvaWRFeGNlcHRpb24oKTsKLSAgICBbQ2Fs
bFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gVGVzdE9iaiB3aXRoRXhlY1N0YXRl
T2JqRXhjZXB0aW9uKCk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdF0gdm9pZCB3aXRoRXhl
Y1N0YXRlVm9pZCgpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3RdIFRlc3RPYmogd2l0aEV4
ZWNTdGF0ZU9iaigpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0
aW9uXSB2b2lkIHdpdGhFeGVjU3RhdGVWb2lkRXhjZXB0aW9uKCk7CisgICAgW0NhbGxXaXRoPUds
b2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb25dIFRlc3RPYmogd2l0aEV4ZWNTdGF0ZU9iakV4
Y2VwdGlvbigpOwogICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSB2b2lkIHdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmRXhlY1N0YXRlXSB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhl
Y1N0YXRlKCk7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmRXhlY1N0YXRl
LCBNYXlUaHJvd0V4Y2VwdGlvbl0gVGVzdE9iaiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbigpOwpAQCAtMjA4LDggKzIwOCw4IEBAIGVudW0gVGVzdENv
bmZpZGVuY2UgeyAiaGlnaCIsICJraW5kYS1sb3ciIH07CiAgICAgW0NhbGxXaXRoPUluY3VtYmVu
dERvY3VtZW50XSB2b2lkIHdpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50KCk7CiAgICAgW0NhbGxX
aXRoPUluY3VtYmVudFdpbmRvd10gdm9pZCB3aXRoQ2FsbGVyV2luZG93QXJndW1lbnQoKTsKIAot
ICAgIFtDYWxsV2l0aD1FeGVjU3RhdGVdIGF0dHJpYnV0ZSBsb25nIHdpdGhFeGVjU3RhdGVBdHRy
aWJ1dGU7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgU2V0dGVyQ2FsbFdpdGg9QWN0aXZlV2lu
ZG93JkZpcnN0V2luZG93XSBhdHRyaWJ1dGUgbG9uZyB3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSBhdHRyaWJ1dGUgbG9u
ZyB3aXRoRXhlY1N0YXRlQXR0cmlidXRlOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIFNl
dHRlckNhbGxXaXRoPUFjdGl2ZVdpbmRvdyZGaXJzdFdpbmRvd10gYXR0cmlidXRlIGxvbmcgd2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGU7CiAgICAgW0NhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRdIGF0dHJpYnV0ZSBUZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlOwogICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0JkV4
ZWNTdGF0ZV0gYXR0cmlidXRlIFRlc3RPYmogd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRF
eGVjU3RhdGVBdHRyaWJ1dGU7CiAgICAgW0NhbGxXaXRoPSAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCAgJiAgRXhlY1N0YXRlICBdIGF0dHJpYnV0ZSBUZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50LmlkbAppbmRleCBkNmQ4NTJmY2NhNDAyMTZiZDBhYjM0OTc5MzRmNWU1OGZj
ZmI2N2U5Li5kYzk4MzFkYzJmMWIwOWNiOGMxNGJmNjgxM2I1ZTZiN2IxMWIzNDNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuaWRsCkBAIC0yNSw3ICsyNSw3IEBACiAKIFsKICAg
ICBDb25zdHJ1Y3RvcihET01TdHJpbmcgdHlwZSwgVGVzdFByb21pc2VSZWplY3Rpb25FdmVudElu
aXQgZXZlbnRJbml0RGljdCksCi0gICAgQ29uc3RydWN0b3JDYWxsV2l0aD1FeGVjU3RhdGUsCisg
ICAgQ29uc3RydWN0b3JDYWxsV2l0aD1HbG9iYWxPYmplY3QsCiAgICAgRXhwb3NlZD0oV2luZG93
LFdvcmtlciksCiBdIGludGVyZmFjZSBUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50IDogRXZlbnQg
ewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBQcm9taXNlPGFueT4gcHJvbWlzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCmluZGV4IDY3NWUzM2E2MmQ4ZWVlY2FjNWNhYmU4ZGUy
OWEwZjIzZGM3NDFkZDMuLmZlZWJkZWY3YmM0NWU5OGM5MzA4ZmRmYmRlMTEwYjk5ZmRkZGNhMmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcApAQCAtMTEwLDEwICsxMTAsMTAg
QEAgdm9pZCBPYmplY3RNYXA6OlJvb3RPYmplY3RJbnZhbGlkYXRpb25DYWxsYmFjazo6b3BlcmF0
b3IoKShSb290T2JqZWN0KiByb290T2JqZWMKICAgICBvYmplY3RNYXAoKS5yZW1vdmUocm9vdE9i
amVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBSb290T2Jq
ZWN0KiByb290T2JqZWN0LCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYUxpc3QpCitzdGF0aWMgdm9p
ZCBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBSb290T2JqZWN0
KiByb290T2JqZWN0LCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYUxpc3QpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCi0gICAgICAgIGFMaXN0LmFwcGVuZChj
b252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmYXJnc1tpXSwgcm9vdE9iamVjdCkpOworICAg
ICAgICBhTGlzdC5hcHBlbmQoY29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9i
amVjdCwgJmFyZ3NbaV0sIHJvb3RPYmplY3QpKTsKIH0KIAogc3RhdGljIE5QT2JqZWN0KiBqc0Fs
bG9jYXRlKE5QUCwgTlBDbGFzcyopCkBAIC0xODQsNyArMTg0LDcgQEAgYm9vbCBfTlBOX0ludm9r
ZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbywgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJf
dCBhcmdDb3UKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwogICAgICAgICAKICAgICAgICAgLy8g
Q2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2Jq
LT5pbXA7CkBAIC0xOTQsMTIgKzE5NCwxMiBAQCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAs
IE5QT2JqZWN0KiBvLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnTGlzdDsKLSAgICAgICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdz
LCBhcmdDb3VudCwgcm9vdE9iamVjdCwgYXJnTGlzdCk7CisgICAgICAgIGdldExpc3RGcm9tVmFy
aWFudEFyZ3MobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3Qs
IGFyZ0xpc3QpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2Vk
KCkpOwotICAgICAgICBKU1ZhbHVlIHJlc3VsdFYgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwgZnVuY3Rpb24sIGFyZ0xpc3QpOworICAgICAgICBKU1ZhbHVl
IHJlc3VsdFYgPSBKU0M6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgZnVuY3Rpb24sIGFyZ0xpc3QpOwogCiAgICAgICAgIC8vIENvbnZlcnQg
YW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgotICAgICAgICBjb252
ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOworICAgICAgICBjb252
ZXJ0VmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXN1bHRWLCByZXN1bHQp
OwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsg
ICAgICAgIAogICAgIH0KQEAgLTIzOCw4ICsyMzgsOCBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBu
cHAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50
KgogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+
aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5n
KCkpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9i
YWxPYmplY3Q7CisgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcC0+Z2V0KGxleGlj
YWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxP
YmplY3QsIGktPnN0cmluZygpKSk7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbiwgY2FsbERhdGEp
OwogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCkBAIC0yNDcsMTIgKzI0
NywxMiBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZp
ZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KgogCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1
bmN0aW9uIG9iamVjdC4KICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKLSAg
ICAgICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdzLCBhcmdDb3VudCwgcm9vdE9i
amVjdCwgYXJnTGlzdCk7CisgICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3MobGV4aWNhbEds
b2JhbE9iamVjdCwgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICBKU1Zh
bHVlIHJlc3VsdFYgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgb2JqLT5pbXAsIGFyZ0xpc3QpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdFYgPSBKU0M6OmNh
bGwobGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2Jq
LT5pbXAsIGFyZ0xpc3QpOwogCiAgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVz
dWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgotICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFu
dChleGVjLCByZXN1bHRWLCByZXN1bHQpOworICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFu
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXN1bHRWLCByZXN1bHQpOwogICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNzgsMTIg
KzI3OCwxMiBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQLCBOUE9iamVjdCogbywgTlBTdHJpbmcq
IHMsIE5QVmFyaWFudCogdmFyaWFudCkKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwog
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICAgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwogICAgICAg
ICBTdHJpbmcgc2NyaXB0U3RyaW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKICAgICAg
ICAgCi0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIEpT
Qzo6bWFrZVNvdXJjZShzY3JpcHRTdHJpbmcsIHsgfSksIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICAg
ICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUobGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjptYWtlU291cmNlKHNjcmlwdFN0cmluZywgeyB9KSwgSlNDOjpKU1ZhbHVlKCkpOwog
Ci0gICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVyblZhbHVlLCB2YXJp
YW50KTsKKyAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVj
dCwgcmV0dXJuVmFsdWUsIHZhcmlhbnQpOwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zMDYsMTYgKzMwNiwxNiBAQCBib29s
IF9OUE5fR2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSwgTlBWYXJpYW50KiB2YQogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAgICAgICAgIElk
ZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1l
KTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0OwogICAgICAgICBpZiAoaS0+aXNT
dHJpbmcoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRp
ZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IG9iai0+aW1wLT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21O
UElkZW50aWZpZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+c3RyaW5nKCkpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpLT5udW1iZXIo
KSk7CisgICAgICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0KGxleGljYWxHbG9iYWxPYmpl
Y3QsIGktPm51bWJlcigpKTsKIAotICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVj
LCByZXN1bHQsIHZhcmlhbnQpOworICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCByZXN1bHQsIHZhcmlhbnQpOwogICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zNDQsMTQgKzM0NCwx
NCBAQCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYQogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAg
ICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJv
cGVydHlOYW1lKTsKIAogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkgewogICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qob2JqLT5pbXApOwotICAgICAgICAgICAgb2JqLT5pbXAtPm1l
dGhvZFRhYmxlKHZtKS0+cHV0KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRp
ZmllcihleGVjLCBpLT5zdHJpbmcoKSksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZh
cmlhbnQsIHJvb3RPYmplY3QpLCBzbG90KTsKKyAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RU
YWJsZSh2bSktPnB1dChvYmotPmltcCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZy
b21OUElkZW50aWZpZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+c3RyaW5nKCkpLCBjb252ZXJ0
TlBWYXJpYW50VG9WYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YXJpYW50LCByb290T2JqZWN0
KSwgc2xvdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRh
YmxlKHZtKS0+cHV0QnlJbmRleChvYmotPmltcCwgZXhlYywgaS0+bnVtYmVyKCksIGNvbnZlcnRO
UFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQsIHJvb3RPYmplY3QpLCBmYWxzZSk7CisgICAg
ICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KG9iai0+aW1wLCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5udW1iZXIoKSwgY29udmVydE5QVmFyaWFudFRvVmFsdWUo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFyaWFudCwgcm9vdE9iamVjdCksIGZhbHNlKTsKICAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMzc2LDI1ICszNzYsMjUgQEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmpl
Y3QqIG8sIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwog
Ci0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVj
dDsKIAogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJl
cCo+KHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRl
bnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpKSB7CisgICAgICAgICAgICBpZiAoIW9iai0+aW1w
LT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbU5QSWRlbnRp
ZmllcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5zdHJpbmcoKSkpKSB7CiAgICAgICAgICAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW9iai0+
aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpLT5udW1iZXIoKSkpIHsKKyAgICAgICAgICAgIGlmICgh
b2JqLT5pbXAtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGktPm51bWJlcigpKSkg
ewogICAgICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGktPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUodm0pLT5k
ZWxldGVQcm9wZXJ0eShvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIo
ZXhlYywgaS0+c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSh2
bSktPmRlbGV0ZVByb3BlcnR5KG9iai0+aW1wLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5zdHJpbmcoKSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUodm0pLT5kZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgob2JqLT5pbXAsIGV4ZWMsIGktPm51bWJlcigpKTsKKyAgICAgICAg
ICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChvYmot
PmltcCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+bnVtYmVyKCkpOwogCiAgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDE2LDE1ICs0MTYs
MTUgQEAgYm9vbCBfTlBOX0hhc1Byb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUpCiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgICAgICBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKICAgICAgICAgSWRlbnRp
ZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBv
YmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhl
YywgaS0+c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gb2JqLT5pbXAtPmhh
c1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVy
KGxleGljYWxHbG9iYWxPYmplY3QsIGktPnN0cmluZygpKSk7CiAgICAgICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQog
Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGktPm51
bWJlcigpKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJvcGVydHkobGV4
aWNhbEdsb2JhbE9iamVjdCwgaS0+bnVtYmVyKCkpOwogICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTQ1Myw4ICs0NTMsOCBA
QCBib29sIF9OUE5fSGFzTWV0aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmllciBtZXRo
b2ROYW1lKQogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNWYWx1ZSBmdW5jID0gb2Jq
LT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJp
bmcoKSkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGds
b2JhbE9iamVjdDsKKyAgICAgICAgSlNWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKICAgICB9CkBAIC00ODYsMTAgKzQ4Niwx
MCBAQCBib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmllcioq
IGlkZW50aWZpZXIsIHVpbnQzMl90KiBjb3VudAogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAg
ICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKIAotICAgICAgICBvYmot
PmltcC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKG9iai0+aW1wLCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIG9iai0+aW1wLT5tZXRo
b2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKICAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgY2FsbCBOUE5fTWVtQWxsb2MgYnV0IHRo
YXQncyBpbiBXZWJLaXQKICAgICAgICAgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVycyA9IHN0YXRp
Y19jYXN0PE5QSWRlbnRpZmllcio+KG1hbGxvYyhzaXplb2YoTlBJZGVudGlmaWVyKSAqIHNpemUp
KTsKQEAgLTUyNyw3ICs1MjcsNyBAQCBib29sIF9OUE5fQ29uc3RydWN0KE5QUCwgTlBPYmplY3Qq
IG8sIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsCiAgICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9
IGdsb2JhbE9iamVjdDsKICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIGNvbnN0cnVjdG9y
IG9iamVjdC4KICAgICAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IG9iai0+aW1wOwpAQCAtNTM3
LDEyICs1MzcsMTIgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBjb25z
dCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LAogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsK
LSAgICAgICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdzLCBhcmdDb3VudCwgcm9v
dE9iamVjdCwgYXJnTGlzdCk7CisgICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3MobGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpOwotICAgICAgICBK
U1ZhbHVlIHJlc3VsdFYgPSBKU0M6OmNvbnN0cnVjdChleGVjLCBjb25zdHJ1Y3RvciwgY29uc3Ry
dWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0
ViA9IEpTQzo6Y29uc3RydWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yLCBjb25z
dHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdMaXN0KTsKICAgICAgICAgCiAgICAgICAgIC8v
IENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0LgotICAgICAgICBjb252ZXJ0VmFsdWVUb05Q
VmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOworICAgICAgICBjb252ZXJ0VmFsdWVUb05Q
VmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXN1bHRWLCByZXN1bHQpOwogICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCmluZGV4IDgzMTBhZTYxOGQxNzg0ZmY0YmJh
OGEzZTgzMDA1MDFiZjc4YjU3YjMuLjEwNjgwNGRhODg4NzgwZDI0ZjgxZDA1ZWYyN2VhNDliODM0
ZjlkOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCkBAIC02NSwxNiAr
NjUsMTYgQEAgdm9pZCBDSW5zdGFuY2U6OnNldEdsb2JhbEV4Y2VwdGlvbihTdHJpbmcgZXhjZXB0
aW9uKQogICAgIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpID0gZXhjZXB0aW9uOwogfQogCi12b2lk
IENJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKEV4ZWNTdGF0ZSogZXhl
YykKK3ZvaWQgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCiB7CiAgICAgaWYgKGdsb2JhbEV4Y2VwdGlv
blN0cmluZygpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKTsKKyAg
ICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7CiAgICAg
fQogCiAgICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBTdHJpbmcoKTsKQEAgLTkyLDEwICs5
MiwxMCBAQCBDSW5zdGFuY2U6On5DSW5zdGFuY2UoKQogICAgIF9OUE5fUmVsZWFzZU9iamVjdChf
b2JqZWN0KTsKIH0KIAotUnVudGltZU9iamVjdCogQ0luc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYykKK1J1bnRpbWVPYmplY3QqIENJbnN0YW5jZTo6bmV3UnVudGltZU9i
amVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICAvLyBGSVhN
RTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRo
ZSB3cm9uZyBnbG9iYWwgb2JqZWN0LgotICAgIHJldHVybiBDUnVudGltZU9iamVjdDo6Y3JlYXRl
KGV4ZWMtPnZtKCksIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8Q1J1bnRpbWVP
YmplY3Q+KGV4ZWMpLCB0aGlzKTsKKyAgICByZXR1cm4gQ1J1bnRpbWVPYmplY3Q6OmNyZWF0ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0
dXJlPENSdW50aW1lT2JqZWN0PihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpcyk7CiB9CiAKIENs
YXNzICpDSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKQEAgLTExNCwxMiArMTE0LDEyIEBAIGNs
YXNzIENSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgewogcHVibGljOgogICAg
IHR5cGVkZWYgUnVudGltZU1ldGhvZCBCYXNlOwogCi0gICAgc3RhdGljIENSdW50aW1lTWV0aG9k
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIEJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZCkKKyAgICBzdGF0aWMg
Q1J1bnRpbWVNZXRob2QqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBCaW5k
aW5nczo6TWV0aG9kKiBtZXRob2QpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVz
ZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKICAgICAgICAg
Ly8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCi0g
ICAgICAgIFN0cnVjdHVyZSogZG9tU3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERP
TVN0cnVjdHVyZTxDUnVudGltZU1ldGhvZD4oZXhlYyk7CisgICAgICAgIFN0cnVjdHVyZSogZG9t
U3RydWN0dXJlID0gV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxDUnVudGltZU1l
dGhvZD4obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIENSdW50aW1lTWV0aG9kKiBydW50
aW1lTWV0aG9kID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8Q1J1bnRpbWVNZXRob2Q+KHZt
LmhlYXApKSBDUnVudGltZU1ldGhvZChnbG9iYWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgbWV0aG9k
KTsKICAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwogICAg
ICAgICByZXR1cm4gcnVudGltZU1ldGhvZDsKQEAgLTE0OCwxOSArMTQ4LDE5IEBAIGNsYXNzIENS
dW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgewogCiBjb25zdCBDbGFzc0luZm8g
Q1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIkNSdW50aW1lTWV0aG9kIiwgJlJ1bnRpbWVNZXRo
b2Q6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShDUnVudGlt
ZU1ldGhvZCkgfTsKIAotSlNWYWx1ZSBDSW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIENJbnN0YW5jZTo6Z2V0TWV0
aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQogewogICAgIE1ldGhvZCogbWV0aG9kID0gZ2V0Q2xhc3MoKS0+bWV0aG9kTmFt
ZWQocHJvcGVydHlOYW1lLCB0aGlzKTsKLSAgICByZXR1cm4gQ1J1bnRpbWVNZXRob2Q6OmNyZWF0
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCksIG1ldGhvZCk7CisgICAgcmV0dXJuIENSdW50aW1lTWV0aG9kOjpjcmVhdGUobGV4aWNh
bEdsb2JhbE9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLnB1YmxpY05h
bWUoKSwgbWV0aG9kKTsKIH0KIAotSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCitKU1ZhbHVlIENJbnN0
YW5jZTo6aW52b2tlTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCkKIHsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
aWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHM8Q1J1bnRpbWVNZXRob2Q+KHZt
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQXR0ZW1wdCB0
byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9uIHBsdWctaW4gb2JqZWN0LiJfcyk7CisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIkF0
dGVtcHQgdG8gaW52b2tlIG5vbi1wbHVnLWluIG1ldGhvZCBvbiBwbHVnLWluIG9iamVjdC4iX3Mp
OwogCiAgICAgQ01ldGhvZCogbWV0aG9kID0gc3RhdGljX2Nhc3Q8Q01ldGhvZCo+KHJ1bnRpbWVN
ZXRob2QtPm1ldGhvZCgpKTsKICAgICBBU1NFUlQobWV0aG9kKTsKQEAgLTE2OSwxMiArMTY5LDEy
IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBSdW50
aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQogICAgIGlmICghX29iamVjdC0+X2NsYXNzLT5oYXNN
ZXRob2QoX29iamVjdCwgaWRlbnQpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAot
ICAgIHVuc2lnbmVkIGNvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIHVuc2lnbmVk
IGNvdW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7CiAgICAgVmVjdG9yPE5QVmFyaWFu
dCwgOD4gY0FyZ3MoY291bnQpOwogCiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoaSksICZjQXJnc1tpXSk7CisgICAgICAgIGNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoaSksICZjQXJnc1tpXSk7CiAKICAgICAvLyBJbnZva2UgdGhlICdDJyBtZXRob2QuCiAg
ICAgYm9vbCByZXR2YWwgPSB0cnVlOwpAQCAtMTgyLDU3ICsxODIsNTcgQEAgSlNWYWx1ZSBDSW5z
dGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRp
bWVNZXRob2QpCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAKICAgICB7
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKKyAgICAg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAg
ICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0Fy
Z3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwotICAgICAgICBtb3ZlR2xvYmFsRXhj
ZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CisgICAgICAgIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4
ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9CiAKICAgICBpZiAoIXJldHZhbCkK
LSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsICJF
cnJvciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iX3MpKTsKKyAgICAgICAgdGhyb3dFeGNl
cHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsICJFcnJvciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iX3MpKTsKIAogICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICBfTlBOX1JlbGVhc2VWYXJpYW50
VmFsdWUoJmNBcmdzW2ldKTsKIAotICAgIEpTVmFsdWUgcmVzdWx0VmFsdWUgPSBjb252ZXJ0TlBW
YXJpYW50VG9WYWx1ZShleGVjLCAmcmVzdWx0VmFyaWFudCwgbV9yb290T2JqZWN0LmdldCgpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlID0gY29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNh
bEdsb2JhbE9iamVjdCwgJnJlc3VsdFZhcmlhbnQsIG1fcm9vdE9iamVjdC5nZXQoKSk7CiAgICAg
X05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZyZXN1bHRWYXJpYW50KTsKICAgICByZXR1cm4gcmVz
dWx0VmFsdWU7CiB9CiAKIAotSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2Qo
RXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2Qo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBpZiAoIV9vYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdCkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICB1bnNpZ25lZCBjb3VudCA9IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
OwogICAgIFZlY3RvcjxOUFZhcmlhbnQsIDg+IGNBcmdzKGNvdW50KTsKIAogICAgIHVuc2lnbmVk
IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIGNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLCAmY0FyZ3NbaV0p
OworICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLCAmY0FyZ3NbaV0pOwogCiAgICAgLy8gSW52
b2tlIHRoZSAnQycgbWV0aG9kLgogICAgIGJvb2wgcmV0dmFsID0gdHJ1ZTsKICAgICBOUFZhcmlh
bnQgcmVzdWx0VmFyaWFudDsKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsK
ICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsK
KyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkp
OwogICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQoX29iamVj
dCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwotICAgICAgICBtb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CisgICAgICAgIG1vdmVHbG9iYWxFeGNlcHRp
b25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9CiAKICAgICBpZiAoIXJl
dHZhbCkKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4
ZWMsICJFcnJvciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iX3MpKTsKKyAgICAgICAgdGhy
b3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsICJFcnJvciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iX3MpKTsK
IAogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICBfTlBOX1JlbGVhc2VW
YXJpYW50VmFsdWUoJmNBcmdzW2ldKTsKIAotICAgIEpTVmFsdWUgcmVzdWx0VmFsdWUgPSBjb252
ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmcmVzdWx0VmFyaWFudCwgbV9yb290T2JqZWN0Lmdl
dCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlID0gY29udmVydE5QVmFyaWFudFRvVmFsdWUo
bGV4aWNhbEdsb2JhbE9iamVjdCwgJnJlc3VsdFZhcmlhbnQsIG1fcm9vdE9iamVjdC5nZXQoKSk7
CiAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZyZXN1bHRWYXJpYW50KTsKICAgICByZXR1
cm4gcmVzdWx0VmFsdWU7CiB9CkBAIC0yNDIsOSArMjQyLDkgQEAgYm9vbCBDSW5zdGFuY2U6OnN1
cHBvcnRzQ29uc3RydWN0KCkgY29uc3QKICAgICByZXR1cm4gX29iamVjdC0+X2NsYXNzLT5jb25z
dHJ1Y3Q7CiB9CiAKLUpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZUNv
bnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKCFfb2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVj
dCkKQEAgLTI1NSw1MCArMjU1LDUwIEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1
Y3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogCiAgICAgdW5zaWduZWQg
aTsKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgY29udmVydFZhbHVl
VG9OUFZhcmlhbnQoZXhlYywgYXJncy5hdChpKSwgJmNBcmdzW2ldKTsKKyAgICAgICAgY29udmVy
dFZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJncy5hdChpKSwgJmNBcmdz
W2ldKTsKIAogICAgIC8vIEludm9rZSB0aGUgJ0MnIG1ldGhvZC4KICAgICBib29sIHJldHZhbCA9
IHRydWU7CiAgICAgTlBWYXJpYW50IHJlc3VsdFZhcmlhbnQ7CiAgICAgVk9JRF9UT19OUFZBUklB
TlQocmVzdWx0VmFyaWFudCk7CiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZXhlYyk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlv
blN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0dmFsID0gX29iamVjdC0+X2NsYXNzLT5j
b25zdHJ1Y3QoX29iamVjdCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwot
ICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CisgICAgICAgIG1v
dmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9
CiAKICAgICBpZiAoIXJldHZhbCkKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUs
IGNyZWF0ZUVycm9yKGV4ZWMsICJFcnJvciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iX3Mp
KTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNy
ZWF0ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsICJFcnJvciBjYWxsaW5nIG1ldGhvZCBvbiBO
UE9iamVjdC4iX3MpKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAg
ICBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoJmNBcmdzW2ldKTsKIAotICAgIEpTVmFsdWUgcmVz
dWx0VmFsdWUgPSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmcmVzdWx0VmFyaWFudCwg
bV9yb290T2JqZWN0LmdldCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlID0gY29udmVydE5Q
VmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgJnJlc3VsdFZhcmlhbnQsIG1fcm9v
dE9iamVjdC5nZXQoKSk7CiAgICAgX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlKCZyZXN1bHRWYXJp
YW50KTsKICAgICByZXR1cm4gcmVzdWx0VmFsdWU7CiB9CiAKLUpTVmFsdWUgQ0luc3RhbmNlOjpk
ZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQp
IGNvbnN0CitKU1ZhbHVlIENJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CiB7
CiAgICAgaWYgKGhpbnQgPT0gUHJlZmVyU3RyaW5nKQotICAgICAgICByZXR1cm4gc3RyaW5nVmFs
dWUoZXhlYyk7CisgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBpZiAoaGludCA9PSBQcmVmZXJOdW1iZXIpCi0gICAgICAgIHJldHVybiBudW1iZXJW
YWx1ZShleGVjKTsKLSAgICByZXR1cm4gdmFsdWVPZihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51
bWJlclZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiB2YWx1ZU9mKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogfQogCi1KU1ZhbHVlIENJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBDSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIEpTVmFsdWUgdmFs
dWU7Ci0gICAgaWYgKHRvSlNQcmltaXRpdmUoZXhlYywgInRvU3RyaW5nIiwgdmFsdWUpKQorICAg
IGlmICh0b0pTUHJpbWl0aXZlKGxleGljYWxHbG9iYWxPYmplY3QsICJ0b1N0cmluZyIsIHZhbHVl
KSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAgLy8gRmFsbGJhY2sgdG8gZGVmYXVsdCBp
bXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMtPnZtKCks
ICJOUE9iamVjdCJfcyk7CisgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpLCAiTlBPYmplY3QiX3MpOwogfQogCi1KU1ZhbHVlIENJbnN0YW5jZTo6
bnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3QKK0pTVmFsdWUgQ0luc3RhbmNlOjpudW1iZXJW
YWx1ZShKU0dsb2JhbE9iamVjdCopIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBz
b21ldGhpbmcgc2Vuc2libGUuCiAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwpAQCAtMzEwLDE5ICsz
MTAsMTkgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CiAgICAgcmV0
dXJuIGpzQm9vbGVhbihnZXRPYmplY3QoKSk7CiB9CiAKLUpTVmFsdWUgQ0luc3RhbmNlOjp2YWx1
ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgQ0luc3RhbmNlOjp2YWx1ZU9mKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIEpTVmFsdWUg
dmFsdWU7Ci0gICAgaWYgKHRvSlNQcmltaXRpdmUoZXhlYywgInZhbHVlT2YiLCB2YWx1ZSkpCisg
ICAgaWYgKHRvSlNQcmltaXRpdmUobGV4aWNhbEdsb2JhbE9iamVjdCwgInZhbHVlT2YiLCB2YWx1
ZSkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKIAogICAgIC8vIEZhbGxiYWNrIHRvIGRlZmF1bHQg
aW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOworICAgIHJldHVy
biBzdHJpbmdWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIAotYm9vbCBDSW5zdGFuY2U6
OnRvSlNQcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBuYW1lLCBKU1ZhbHVl
JiByZXN1bHRWYWx1ZSkgY29uc3QKK2Jvb2wgQ0luc3RhbmNlOjp0b0pTUHJpbWl0aXZlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBKU1ZhbHVl
JiByZXN1bHRWYWx1ZSkgY29uc3QKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gX05QTl9HZXRT
dHJpbmdJZGVudGlmaWVyKG5hbWUpOwpAQCAtMzM1LDIxICszMzUsMjEgQEAgYm9vbCBDSW5zdGFu
Y2U6OnRvSlNQcmltaXRpdmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBuYW1lLCBKU1Zh
bHVlJiByZXN1bHQKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKIAogICAg
IHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOworICAg
ICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MobGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSk7CiAg
ICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+aW52b2tlKF9vYmplY3QsIGlkZW50LCAw
LCAwLCAmcmVzdWx0VmFyaWFudCk7Ci0gICAgICAgIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNT
dGF0ZShleGVjKTsKKyAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIH0KIAogICAgIGlmICghcmV0dmFsKQotICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgIkVycm9yIGNhbGxpbmcg
bWV0aG9kIG9uIE5QT2JqZWN0LiJfcykpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgIkVy
cm9yIGNhbGxpbmcgbWV0aG9kIG9uIE5QT2JqZWN0LiJfcykpOwogCi0gICAgcmVzdWx0VmFsdWUg
PSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmcmVzdWx0VmFyaWFudCwgbV9yb290T2Jq
ZWN0LmdldCgpKTsKKyAgICByZXN1bHRWYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGxl
eGljYWxHbG9iYWxPYmplY3QsICZyZXN1bHRWYXJpYW50LCBtX3Jvb3RPYmplY3QuZ2V0KCkpOwog
ICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVzdWx0VmFyaWFudCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIG5hbWVBcnJheSkKK3ZvaWQgQ0luc3RhbmNlOjpnZXRQ
cm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWVBcnJheSYgbmFtZUFycmF5KQogewogICAgIGlmICghTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJ
T05fSEFTX0VOVU0oX29iamVjdC0+X2NsYXNzKSB8fCAhX29iamVjdC0+X2NsYXNzLT5lbnVtZXJh
dGUpCiAgICAgICAgIHJldHVybjsKQEAgLTM1OCwyMCArMzU4LDIwIEBAIHZvaWQgQ0luc3RhbmNl
OjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIG5h
bWVBcnJheSkKICAgICBOUElkZW50aWZpZXIqIGlkZW50aWZpZXJzOwogCiAgICAgewotICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CisgICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgYm9v
bCBvayA9IF9vYmplY3QtPl9jbGFzcy0+ZW51bWVyYXRlKF9vYmplY3QsICZpZGVudGlmaWVycywg
JmNvdW50KTsKLSAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwor
ICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAg
IElkZW50aWZpZXJSZXAqIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4o
aWRlbnRpZmllcnNbaV0pOwogCiAgICAgICAgIGlmIChpZGVudGlmaWVyLT5pc1N0cmluZygpKQot
ICAgICAgICAgICAgbmFtZUFycmF5LmFkZChpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVj
LCBpZGVudGlmaWVyLT5zdHJpbmcoKSkpOworICAgICAgICAgICAgbmFtZUFycmF5LmFkZChpZGVu
dGlmaWVyRnJvbU5QSWRlbnRpZmllcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyLT5z
dHJpbmcoKSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuYW1lQXJyYXkuYWRkKElkZW50
aWZpZXI6OmZyb20odm0sIGlkZW50aWZpZXItPm51bWJlcigpKSk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5oIGIvU291cmNlL1dlYkNvcmUv
YnJpZGdlL2MvY19pbnN0YW5jZS5oCmluZGV4IGVlODY2MjgwZWUzMDJhNmQ1NzIyZWRhOWNhMWM3
NDI1ZjExNDI1NzMuLmQyZGQ3Zjk4Yzg1MzkzNzI5NjI5YmQ3MjgyYWQ0MDQ3MDQxNmMzMDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmgKQEAgLTQ4LDI3ICs0OCwyNyBAQCBjbGFz
cyBDSW5zdGFuY2UgOiBwdWJsaWMgSW5zdGFuY2UgewogICAgIH0KIAogICAgIHN0YXRpYyB2b2lk
IHNldEdsb2JhbEV4Y2VwdGlvbihTdHJpbmcpOwotICAgIHN0YXRpYyB2b2lkIG1vdmVHbG9iYWxF
eGNlcHRpb25Ub0V4ZWNTdGF0ZShFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgdm9pZCBtb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIHZpcnR1YWwg
fkNJbnN0YW5jZSgpOwogCiAgICAgQ2xhc3MgKmdldENsYXNzKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBKU1ZhbHVlIHZhbHVlT2YoRXhlY1N0YXRlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgSlNW
YWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgSlNWYWx1ZSB2YWx1ZU9mKEpTR2xvYmFsT2JqZWN0KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoSlNHbG9iYWxPYmplY3QqLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEpTVmFsdWUgZ2V0TWV0
aG9kKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgb3ZlcnJpZGU7Ci0gICAgSlNWYWx1ZSBpbnZv
a2VNZXRob2QoRXhlY1N0YXRlKiwgUnVudGltZU1ldGhvZCopIG92ZXJyaWRlOworICAgIEpTVmFs
dWUgZ2V0TWV0aG9kKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKSBvdmVycmlkZTsKKyAg
ICBKU1ZhbHVlIGludm9rZU1ldGhvZChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFJ1bnRp
bWVNZXRob2QqKSBvdmVycmlkZTsKICAgICBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhv
ZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEpTVmFsdWUgaW52b2tlRGVmYXVsdE1ldGhvZChFeGVj
U3RhdGUqKSBvdmVycmlkZTsKKyAgICBKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoSlNHbG9i
YWxPYmplY3QqLCBDYWxsRnJhbWUqKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc3VwcG9ydHNDb25z
dHJ1Y3QoKSBjb25zdCBvdmVycmlkZTsKLSAgICBKU1ZhbHVlIGludm9rZUNvbnN0cnVjdChFeGVj
U3RhdGUqLCBjb25zdCBBcmdMaXN0Jikgb3ZlcnJpZGU7CisgICAgSlNWYWx1ZSBpbnZva2VDb25z
dHJ1Y3QoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBjb25zdCBBcmdMaXN0Jikgb3ZlcnJp
ZGU7CiAKLSAgICB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYpIG92ZXJyaWRlOwogCi0gICAgSlNWYWx1ZSBzdHJpbmdW
YWx1ZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU1ZhbHVlIG51bWJlclZhbHVlKEV4ZWNTdGF0
ZSopIGNvbnN0OworICAgIEpTVmFsdWUgc3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqKSBjb25z
dDsKKyAgICBKU1ZhbHVlIG51bWJlclZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAg
SlNWYWx1ZSBib29sZWFuVmFsdWUoKSBjb25zdDsKIAogICAgIE5QT2JqZWN0ICpnZXRPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBfb2JqZWN0OyB9CkBAIC03Niw4ICs3Niw4IEBAIGNsYXNzIENJbnN0
YW5jZSA6IHB1YmxpYyBJbnN0YW5jZSB7CiBwcml2YXRlOgogICAgIENJbnN0YW5jZShOUE9iamVj
dCosIFJlZlB0cjxSb290T2JqZWN0PiYmKTsKIAotICAgIFJ1bnRpbWVPYmplY3QqIG5ld1J1bnRp
bWVPYmplY3QoRXhlY1N0YXRlKikgb3ZlcnJpZGU7Ci0gICAgYm9vbCB0b0pTUHJpbWl0aXZlKEV4
ZWNTdGF0ZSosIGNvbnN0IGNoYXIqLCBKU1ZhbHVlJikgY29uc3Q7CisgICAgUnVudGltZU9iamVj
dCogbmV3UnVudGltZU9iamVjdChKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlOworICAgIGJvb2wg
dG9KU1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqLCBKU1ZhbHVlJikgY29u
c3Q7CiAKIAogICAgIG11dGFibGUgQ0NsYXNzICpfY2xhc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2Mv
Y19ydW50aW1lLmNwcAppbmRleCA0MWI1NmFjMGQxOTZkNzMzODdhMDVjMGEwMWNhMDU1N2I3M2Ey
MTFiLi5kNzUyZmUyMjE1ZDQxNzU2ZjJlNWM0NjE4OTRlYjVlNmRlOWQxNDA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBK
U0MgewogbmFtZXNwYWNlIEJpbmRpbmdzIHsKIAotSlNWYWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUlu
c3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGluc3QpIGNvbnN0CitKU1Zh
bHVlIENGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIGNvbnN0IEluc3RhbmNlKiBpbnN0KSBjb25zdAogewogICAgIGNvbnN0IENJbnN0
YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFuY2UqPihpbnN0KTsKICAg
ICBOUE9iamVjdCogb2JqID0gaW5zdGFuY2UtPmdldE9iamVjdCgpOwpAQCAtNDgsMTIgKzQ4LDEy
IEBAIEpTVmFsdWUgQ0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEluc3RhbmNlKiBpbnN0KSBjb25zdAogCiAgICAgICAgIGJvb2wgcmVzdWx0OwogICAgICAg
ICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7
CisgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MobGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgICAgICAgICByZXN1bHQgPSBvYmotPl9jbGFzcy0+Z2V0UHJvcGVy
dHkob2JqLCBfZmllbGRJZGVudGlmaWVyLCAmcHJvcGVydHkpOwotICAgICAgICAgICAgQ0luc3Rh
bmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CisgICAgICAgICAgICBD
SW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZwcm9wZXJ0eSwgaW5z
dGFuY2UtPnJvb3RPYmplY3QoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICZwcm9wZXJ0eSwgaW5zdGFu
Y2UtPnJvb3RPYmplY3QoKSk7CiAgICAgICAgICAgICBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUo
JnByb3BlcnR5KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTYx
LDE5ICs2MSwxOSBAQCBKU1ZhbHVlIENGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdCkgY29uc3QKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotYm9vbCBDRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKK2Jvb2wgQ0Zp
ZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGNvbnN0IEluc3RhbmNlICppbnN0LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKIHsKICAgICBj
b25zdCBDSW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ0luc3RhbmNlKj4o
aW5zdCk7CiAgICAgTlBPYmplY3QqIG9iaiA9IGluc3RhbmNlLT5nZXRPYmplY3QoKTsKICAgICBp
ZiAob2JqLT5fY2xhc3MtPnNldFByb3BlcnR5KSB7CiAgICAgICAgIE5QVmFyaWFudCB2YXJpYW50
OwotICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCBhVmFsdWUsICZ2YXJpYW50
KTsKKyAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwg
YVZhbHVlLCAmdmFyaWFudCk7CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICAg
ICAgewotICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OworICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5fY2xhc3MtPnNldFByb3Bl
cnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmllciwgJnZhcmlhbnQpOwotICAgICAgICAgICAgQ0luc3Rh
bmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CisgICAgICAgICAgICBD
SW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmdmFy
aWFudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuaCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5oCmluZGV4IDdlODk3OWIyYjEyNWIy
ZmZhM2FkMzAyYjZmMjA1OGFhZjkyYTJjNmUuLjc3OTA4NGRkZWEyM2E2YmRlMWVhMjFiOWZiZmFk
YzNjZTlmODUwM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGlt
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5oCkBAIC0zOCw4ICsz
OCw4IEBAIGNsYXNzIENGaWVsZCA6IHB1YmxpYyBGaWVsZCB7CiBwdWJsaWM6CiAgICAgQ0ZpZWxk
KE5QSWRlbnRpZmllciBpZGVudCkgOiBfZmllbGRJZGVudGlmaWVyKGlkZW50KSB7IH0KIAotICAg
IEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBj
b25zdCBJbnN0YW5jZSosIEpTVmFsdWUpIGNvbnN0IG92ZXJyaWRlOworICAgIEpTVmFsdWUgdmFs
dWVGcm9tSW5zdGFuY2UoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgc2V0VmFsdWVUb0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIE5QSWRlbnRpZmll
ciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gX2ZpZWxkSWRlbnRpZmllcjsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAppbmRleCAwNjIzNzNjMGViNmExZWUxMWUwN2E3
Nzc0M2Y1OTAzNWNiODY2M2UxLi5mMmYyOTI2NTM0MWIzODg2ZWU0ZWY4NTI0MmI4YWMzNGIwOWE0
MTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAKQEAgLTY3LDcgKzY3LDcg
QEAgc3RhdGljIFN0cmluZyBjb252ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aW4xRmFsbGJhY2soY29u
c3QgTlBVVEY4KiBVVEY4Q2hhcnMsIGludAogfQogCiAvLyBWYXJpYW50IHZhbHVlIG11c3QgYmUg
cmVsZWFzZWQgd2l0aCBOUFJlbGVhc2VWYXJpYW50VmFsdWUoKQotdm9pZCBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCogcmVz
dWx0KQordm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChKU0dsb2JhbE9iamVjdCogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgTlBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2
b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgTlBWYXJpYW50KiByZXN1bHQpCiAgICAgfQogfQogCi1KU1ZhbHVlIGNvbnZlcnROUFZhcmlh
bnRUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50LCBSb290
T2JqZWN0KiByb290T2JqZWN0KQorSlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShKU0ds
b2JhbE9iamVjdCogZXhlYywgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50LCBSb290T2JqZWN0KiBy
b290T2JqZWN0KQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIApAQCAtMTQ0
LDcgKzE0NCw3IEBAIFN0cmluZyBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KGNvbnN0IE5QU3RyaW5n
KiBzdHJpbmcpCiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2so
c3RyaW5nLT5VVEY4Q2hhcmFjdGVycywgc3RyaW5nLT5VVEY4TGVuZ3RoKTsKIH0KIAotSWRlbnRp
ZmllciBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5Q
VVRGOCogbmFtZSkKK0lkZW50aWZpZXIgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoSlNHbG9i
YWxPYmplY3QqIGV4ZWMsIGNvbnN0IE5QVVRGOCogbmFtZSkKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBjb252ZXJ0VVRG
OFRvVVRGMTZXaXRoTGF0aW4xRmFsbGJhY2sobmFtZSwgLTEpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2Mv
Y191dGlsaXR5LmgKaW5kZXggOWVkNzI1YjZmMjliMzM5YWViMDQyZjYxMTc5N2QwNzRiNTg2MjRh
OC4uN2IxMmZlYmMyMGFkNGI1YTBiNzA0M2EwYTA2YTA2NDk1ZjVkZTBhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YnJpZGdlL2MvY191dGlsaXR5LmgKQEAgLTM3LDcgKzM3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIElkZW50aWZpZXI7Ci11c2luZyBFeGVjU3RhdGUgPSBD
YWxsRnJhbWU7CiAKIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAKQEAgLTQ2LDkgKzQ1LDkgQEAgY2xh
c3MgUm9vdE9iamVjdDsKIHR5cGVkZWYgdWludDE2X3QgTlBVVEYxNjsKIAogV1RGOjpTdHJpbmcg
Y29udmVydE5QU3RyaW5nVG9VVEYxNihjb25zdCBOUFN0cmluZyAqc3RyaW5nKTsKLXZvaWQgY29u
dmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgTlBWYXJpYW50KiByZXN1
bHQpOwotSlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqLCBjb25zdCBO
UFZhcmlhbnQqLCBSb290T2JqZWN0Kik7Ci1JZGVudGlmaWVyIGlkZW50aWZpZXJGcm9tTlBJZGVu
dGlmaWVyKEV4ZWNTdGF0ZSosIGNvbnN0IE5QVVRGOCogbmFtZSk7Cit2b2lkIGNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgTlBWYXJpYW50KiByZXN1bHQp
OworSlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShKU0dsb2JhbE9iamVjdCosIGNvbnN0
IE5QVmFyaWFudCosIFJvb3RPYmplY3QqKTsKK0lkZW50aWZpZXIgaWRlbnRpZmllckZyb21OUElk
ZW50aWZpZXIoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBOUFVURjgqIG5hbWUpOwogCiB9IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCmluZGV4IDA1YjU2N2E4ZGNjN2Ji
YzE0OWQwYjczMDQ2MDAwOTgxNjJjYmRkZWIuLjBkODVlZmI0MGIzYWRkOGIzMWUwNjhlZmI2ZmZj
ODVmYjY1ZGMyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdl
SlNDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAKQEAg
LTY4LDI2ICs2OCwyNiBAQCB2b2lkIEluc3RhbmNlOjplbmQoKQogICAgIHZpcnR1YWxFbmQoKTsK
IH0KIAotSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYykKK0pTT2JqZWN0KiBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICBBU1NFUlQobV9yb290T2JqZWN0KTsK
ICAgICBBU1NFUlQobV9yb290T2JqZWN0LT5pc1ZhbGlkKCkpOwogICAgIGlmIChSdW50aW1lT2Jq
ZWN0KiBleGlzdGluZ09iamVjdCA9IG1fcnVudGltZU9iamVjdC5nZXQoKSkKICAgICAgICAgcmV0
dXJuIGV4aXN0aW5nT2JqZWN0OwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAg
UnVudGltZU9iamVjdCogbmV3T2JqZWN0ID0gbmV3UnVudGltZU9iamVjdChleGVjKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBSdW50aW1lT2JqZWN0
KiBuZXdPYmplY3QgPSBuZXdSdW50aW1lT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IG1fcnVudGltZU9iamVjdCA9IEpTQzo6V2VhazxSdW50aW1lT2JqZWN0PihuZXdPYmplY3QpOwot
ICAgIG1fcm9vdE9iamVjdC0+YWRkUnVudGltZU9iamVjdChleGVjLT52bSgpLCBuZXdPYmplY3Qp
OworICAgIG1fcm9vdE9iamVjdC0+YWRkUnVudGltZU9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpLCBuZXdPYmplY3QpOwogICAgIHJldHVybiBuZXdPYmplY3Q7CiB9CiAKLVJ1bnRpbWVP
YmplY3QqIEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK1J1bnRp
bWVPYmplY3QqIEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0KQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGxleGljYWxHbG9iYWxPYmplY3QpOwogCiAgICAgLy8gRklYTUU6IGRl
cHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3Jv
bmcgZ2xvYmFsIG9iamVjdC4KLSAgICByZXR1cm4gUnVudGltZU9iamVjdDo6Y3JlYXRlKGV4ZWMt
PnZtKCksIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UnVudGltZU9iamVjdD4o
ZXhlYyksIHRoaXMpOworICAgIHJldHVybiBSdW50aW1lT2JqZWN0OjpjcmVhdGUobGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKSwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxSdW50
aW1lT2JqZWN0PihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpcyk7CiB9CiAKIHZvaWQgSW5zdGFu
Y2U6OndpbGxJbnZhbGlkYXRlUnVudGltZU9iamVjdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9C
cmlkZ2VKU0MuaAppbmRleCAwNGNkZGNkMjRjYWE4MjljMzJlNTZlYzI3M2FmYmQzNTFmMjU0ZTI2
Li42ZGZkM2FiYTAzZmFkZmU5MjQ3MmUxNTJhYzJiN2ExNDVlY2QyYzU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qc2MvQnJpZGdlSlNDLmgKQEAgLTUxLDggKzUxLDggQEAgY2xhc3MgUnVudGltZU9i
amVjdDsKIGNsYXNzIEZpZWxkIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29u
c3QgSW5zdGFuY2UqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNldFZhbHVlVG9JbnN0
YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBJbnN0YW5jZSopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWVUb0luc3Rh
bmNlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdCA9IDA7
CiAKICAgICB2aXJ0dWFsIH5GaWVsZCgpID0gZGVmYXVsdDsKIH07CkBAIC02Myw3ICs2Myw3IEBA
IGNsYXNzIENsYXNzIHsKICAgICBDbGFzcygpID0gZGVmYXVsdDsKICAgICB2aXJ0dWFsIE1ldGhv
ZCogbWV0aG9kTmFtZWQoUHJvcGVydHlOYW1lLCBJbnN0YW5jZSopIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIEZpZWxkKiBmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSwgSW5zdGFuY2UqKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBKU1ZhbHVlIGZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSosIEluc3Rh
bmNlKiwgUHJvcGVydHlOYW1lKSB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9CisgICAgdmlydHVh
bCBKU1ZhbHVlIGZhbGxiYWNrT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgSW5zdGFuY2UqLCBQcm9w
ZXJ0eU5hbWUpIHsgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IH0KIAogICAgIHZpcnR1YWwgfkNsYXNz
KCkgPSBkZWZhdWx0OwogfTsKQEAgLTc5LDM4ICs3OSwzOCBAQCBjbGFzcyBJbnN0YW5jZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEluc3RhbmNlPiB7CiAgICAgdm9pZCBlbmQoKTsKIAogICAgIHZpcnR1
YWwgQ2xhc3MqIGdldENsYXNzKCkgY29uc3QgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIEpTT2Jq
ZWN0KiBjcmVhdGVSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSopOworICAgIFdFQkNPUkVfRVhQT1JU
IEpTT2JqZWN0KiBjcmVhdGVSdW50aW1lT2JqZWN0KEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgdm9p
ZCB3aWxsSW52YWxpZGF0ZVJ1bnRpbWVPYmplY3QoKTsKIAogICAgIC8vIFJldHVybnMgZmFsc2Ug
aWYgdGhlIHZhbHVlIHdhcyBub3Qgc2V0IHN1Y2Nlc3NmdWxseS4KLSAgICB2aXJ0dWFsIGJvb2wg
c2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWVPZlVuZGVmaW5l
ZEZpZWxkKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlKSB7IHJldHVybiBm
YWxzZTsgfQogCi0gICAgdmlydHVhbCBKU1ZhbHVlIGdldE1ldGhvZChFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpID0gMDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0
ZSosIFJ1bnRpbWVNZXRob2QqIG1ldGhvZCkgPSAwOworICAgIHZpcnR1YWwgSlNWYWx1ZSBnZXRN
ZXRob2QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIEpT
VmFsdWUgaW52b2tlTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwgUnVudGltZU1l
dGhvZCogbWV0aG9kKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZh
dWx0TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIEpTVmFsdWUg
aW52b2tlRGVmYXVsdE1ldGhvZChFeGVjU3RhdGUqKSB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9
CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoSlNHbG9iYWxPYmplY3Qq
LCBDYWxsRnJhbWUqKSB7IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNDb25zdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgSlNWYWx1ZSBpbnZva2VDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpIHsg
cmV0dXJuIEpTVmFsdWUoKTsgfQorICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VDb25zdHJ1Y3Qo
SlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBjb25zdCBBcmdMaXN0JikgeyByZXR1cm4gSlNW
YWx1ZSgpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5h
bWVzKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmKSB7IH0KIAotICAgIHZpcnR1
YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoSlNHbG9iYWxP
YmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFs
IEpTVmFsdWUgdmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IEpTVmFsdWUgdmFsdWVPZihKU0dsb2JhbE9iamVjdCogZXhlYykgY29uc3QgPSAwOwogCiAgICAg
Um9vdE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+SW5zdGFuY2UoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHB1dChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90JikgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIHB1dChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKSB7IHJldHVybiBmYWxzZTsgfQogCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHZpcnR1YWxCZWdpbigpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCB2aXJ0dWFsRW5kKCkgeyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSdW50
aW1lT2JqZWN0KiBuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSopOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgUnVudGltZU9iamVjdCogbmV3UnVudGltZU9iamVjdChKU0dsb2JhbE9iamVj
dCopOwogCiAgICAgUmVmUHRyPFJvb3RPYmplY3Q+IG1fcm9vdE9iamVjdDsKIApAQCAtMTI0LDgg
KzEyNCw4IEBAIGNsYXNzIEFycmF5IHsKICAgICBleHBsaWNpdCBBcnJheShSZWZQdHI8Um9vdE9i
amVjdD4mJik7CiAgICAgdmlydHVhbCB+QXJyYXkoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzZXRW
YWx1ZUF0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlQXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWVBdChKU0dsb2JhbE9iamVjdCosIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBKU1ZhbHVlIHZh
bHVlQXQoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1t
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCmluZGV4IDA1
MDhlZWFkNTMxNjExOGMzNGYzMjFmOWQyZmZkZjRkOGVmZjE5YmIuLjAwYjhlNDU0YzVjNjZmZDQ4
NzFjN2UyYWRmZmRiNDAwMGEwOTM0ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2Jq
Yy9XZWJTY3JpcHRPYmplY3QubW0KQEAgLTU5LDcgKzU5LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIHVzaW5nIEpTQzo6Q2FsbERhdGE7CiB1c2luZyBKU0M6OkNhbGxUeXBlOwotdXNp
bmcgSlNDOjpFeGVjU3RhdGU7CiB1c2luZyBKU0M6OklkZW50aWZpZXI7CiB1c2luZyBKU0M6OkpT
TG9ja0hvbGRlcjsKIHVzaW5nIEpTQzo6SlNPYmplY3Q7CkBAIC0xMjAsMjIgKzExOSwyMiBAQCBp
ZCBjcmVhdGVKU1dyYXBwZXIoSlNDOjpKU09iamVjdCogb2JqZWN0LCBSZWZQdHI8SlNDOjpCaW5k
aW5nczo6Um9vdE9iamVjdD4mJiBvcgogICAgIHJldHVybiBbW1tXZWJTY3JpcHRPYmplY3QgYWxs
b2NdIF9pbml0V2l0aEpTT2JqZWN0Om9iamVjdCBvcmlnaW5Sb290T2JqZWN0OldURk1vdmUob3Jp
Z2luKSByb290T2JqZWN0OldURk1vdmUocm9vdCldIGF1dG9yZWxlYXNlXTsKIH0KIAotc3RhdGlj
IHZvaWQgYWRkRXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRp
b24qIGV4Y2VwdGlvbikKK3N0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0
aW9uKQogewotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0RPTVdpbmRvdyog
d2luZG93ID0gYXNKU0RPTVdpbmRvdyh2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpKTsKKyAg
ICBKU0M6OlZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNET01XaW5k
b3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3codm0udm1FbnRyeUdsb2JhbE9iamVjdChsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CiAgICAgaWYgKCF3aW5kb3cgfHwgIWV4Y2VwdGlvbikKICAgICAgICAg
cmV0dXJuOwotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworICAgIHJlcG9y
dEV4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogfQogCi1zdGF0aWMg
dm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIHZvaWQg
YWRkRXhjZXB0aW9uVG9Db25zb2xlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QpCiB7Ci0gICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQzo6Vk0mIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4
Y2VwdGlvbigpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgYWRkRXhjZXB0aW9u
VG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGxl
eGljYWxHbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiB9CiAKIHZvaWQgaW5pdGlhbGl6ZURPTVdy
YXBwZXJIb29rcyhDcmVhdGVXcmFwcGVyRnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24sIERpc2Nvbm5l
Y3RXaW5kb3dXcmFwcGVyRnVuY3Rpb24gZGlzY29ubmVjdEZ1bmN0aW9uKQpAQCAtMjc2LDE4ICsy
NzUsMTggQEAgLSAoQk9PTClfaXNTYWZlU2NyaXB0CiAKICAgICAvLyBJdCdzIG5vdCBhY3R1YWxs
eSBjb3JyZWN0IHRvIGNhbGwgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lIGluIHRoaXMgd2F5IGJl
Y2F1c2UKICAgICAvLyBKU0RPTVdpbmRvd0Jhc2UqIGlzbid0IHRoZSByaWdodCBvYmplY3QgdG8g
cmVwcmVzZW50IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nCi0gICAgLy8gSmF2YVNjcmlwdC4gSW5z
dGVhZCwgd2Ugc2hvdWxkIHVzZSBFeGVjU3RhdGUsIGxpa2Ugd2UgZG8gZWxzZXdoZXJlLgorICAg
IC8vIEphdmFTY3JpcHQuIEluc3RlYWQsIHdlIHNob3VsZCB1c2UgSlNHbG9iYWxPYmplY3QsIGxp
a2Ugd2UgZG8gZWxzZXdoZXJlLgogICAgIGF1dG8qIHRhcmdldCA9IEpTQzo6anNEeW5hbWljQ2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPihyb290LT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgcm9vdC0+Z2xv
YmFsT2JqZWN0KCkpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhf
cHJpdmF0ZS0+b3JpZ2luUm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwg
dGFyZ2V0LT53cmFwcGVkKCkpOworICAgIHJldHVybiBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coX3ByaXZhdGUtPm9yaWdpblJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLCB0YXJnZXQtPndyYXBwZWQoKSk7CiB9CiAKIC0gKEpTR2xvYmFsQ29udGV4dFJlZilf
Z2xvYmFsQ29udGV4dFJlZgogewogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHRvR2xvYmFsUmVmKFtzZWxmIF9yb290T2JqZWN0
XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7CisgICAgcmV0dXJuIHRvR2xvYmFsUmVm
KFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCiAtIChvbmV3YXkgdm9p
ZClyZWxlYXNlCkBAIC0zMjQsMTMgKzMyMywxMyBAQCArIChCT09MKXRocm93RXhjZXB0aW9uOihO
U1N0cmluZyAqKWV4Y2VwdGlvbk1lc3NhZ2UKICAgICByZXR1cm4gWUVTOwogfQogCi1zdGF0aWMg
dm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlICpleGVjLCBOU0FycmF5ICphcnJheSwg
Um9vdE9iamVjdCogcm9vdE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFMaXN0KQorc3Rh
dGljIHZvaWQgZ2V0TGlzdEZyb21OU0FycmF5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIE5TQXJyYXkgKmFycmF5LCBSb290T2JqZWN0KiByb290T2JqZWN0LCBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciYgYUxpc3QpCiB7CiAgICAgaW50IGksIG51bU9iamVjdHMgPSBhcnJh
eSA/IFthcnJheSBjb3VudF0gOiAwOwogICAgIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1PYmpl
Y3RzOyBpKyspIHsKICAgICAgICAgaWQgYW5PYmplY3QgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDpp
XTsKLSAgICAgICAgYUxpc3QuYXBwZW5kKGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZh
bk9iamVjdCwgT2JqY09iamVjdFR5cGUsIHJvb3RPYmplY3QpKTsKKyAgICAgICAgYUxpc3QuYXBw
ZW5kKGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICZhbk9iamVj
dCwgT2JqY09iamVjdFR5cGUsIHJvb3RPYmplY3QpKTsKICAgICB9CiB9CiAKQEAgLTM0NCwxMCAr
MzQzLDEwIEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRob2Q6KE5TU3RyaW5nICopbmFtZSB3aXRo
QXJndW1lbnRzOihOU0FycmF5ICopYXJncwogICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGdsb2JhbE9iamVjdDsKICAgICBVTlVTRURfUEFSQU0oc2NvcGUpOwogCi0gICAgSlNDOjpK
U1ZhbHVlIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCBTdHJpbmcobmFtZSkpKTsKKyAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBb
c2VsZiBfaW1wXS0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIFN0cmluZyhuYW1lKSkpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQpAQCAtMzU1LDE2ICszNTQsMTYgQEAgLSAo
aWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYW1lIHdpdGhBcmd1bWVudHM6KE5T
QXJyYXkgKilhcmdzCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAgIEFT
U0VSVCghYXJnTGlzdC5oYXNPdmVyZmxvd2VkKCkpOwotICAgIGdldExpc3RGcm9tTlNBcnJheShl
eGVjLCBhcmdzLCBbc2VsZiBfcm9vdE9iamVjdF0sIGFyZ0xpc3QpOworICAgIGdldExpc3RGcm9t
TlNBcnJheShsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmdzLCBbc2VsZiBfcm9vdE9iamVjdF0sIGFy
Z0xpc3QpOwogCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiBleGNlcHRpb247Ci0gICAgSlND
OjpKU1ZhbHVlIHJlc3VsdCA9IEpTRXhlY1N0YXRlOjpwcm9maWxlZENhbGwoZXhlYywgSlNDOjpQ
cm9maWxpbmdSZWFzb246Ok90aGVyLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBbc2Vs
ZiBfaW1wXSwgYXJnTGlzdCwgZXhjZXB0aW9uKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0g
SlNFeGVjU3RhdGU6OnByb2ZpbGVkQ2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlByb2Zp
bGluZ1JlYXNvbjo6T3RoZXIsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIFtzZWxmIF9p
bXBdLCBhcmdMaXN0LCBleGNlcHRpb24pOwogCiAgICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAg
ICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgYWRkRXhj
ZXB0aW9uVG9Db25zb2xlKGxleGljYWxHbG9iYWxPYmplY3QsIGV4Y2VwdGlvbik7CiAgICAgICAg
IHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC0zODMsMTAgKzM4MiwxMCBAQCAt
IChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQKICAgICBhdXRvJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAgICAgVU5VU0VEX1BBUkFNKHNjb3Bl
KTsKICAgICAKLSAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0V4ZWNTdGF0ZTo6cHJv
ZmlsZWRFdmFsdWF0ZShleGVjLCBKU0M6OlByb2ZpbGluZ1JlYXNvbjo6T3RoZXIsIG1ha2VTb3Vy
Y2UoU3RyaW5nKHNjcmlwdCksIHsgfSksIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBKU0M6OkpTVmFs
dWUgcmV0dXJuVmFsdWUgPSBKU0V4ZWNTdGF0ZTo6cHJvZmlsZWRFdmFsdWF0ZShsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlByb2ZpbGluZ1JlYXNvbjo6T3RoZXIsIG1ha2VTb3VyY2UoU3RyaW5n
KHNjcmlwdCksIHsgfSksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgIGlkIHJlc3VsdE9iaiA9IFtX
ZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJldHVyblZhbHVlIG9yaWdp
blJvb3RPYmplY3Q6W3NlbGYgX29yaWdpblJvb3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jv
b3RPYmplY3RdXTsKICAgICAKQEAgLTQwMiwxNCArNDAxLDE0IEBAIC0gKHZvaWQpc2V0VmFsdWU6
KGlkKXZhbHVlIGZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjpq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIFtzZWxmIF9pbXBdKTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChvYmplY3QpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQob2Jq
ZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmcoa2V5KSksIGNvbnZl
cnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2JqY09iamVjdFR5cGUsIFtzZWxmIF9y
b290T2JqZWN0XSksIHNsb3QpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQob2Jq
ZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJp
bmcoa2V5KSksIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICZ2
YWx1ZSwgT2JqY09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIHNsb3QpOwogCiAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICBhZGRFeGNlcHRpb25U
b0NvbnNvbGUoZXhlYyk7CisgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiB9CkBA
IC00MzAsMTIgKzQyOSwxMiBAQCAtIChpZCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3Vs
dCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3Ry
aW5nKGtleSkpKTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5n
ZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5n
KGtleSkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKLSAgICAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKKyAgICAgICAg
ICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAg
ICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICB9CkBAIC00NTgsMTIgKzQ1NywxMiBAQCAtICh2b2lkKXJlbW92ZVdl
YlNjcmlwdEtleTooTlNTdHJpbmcgKilrZXkKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QgPSBnbG9iYWxPYmplY3Q7CiAKLSAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUodm0pLT5k
ZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgU3RyaW5nKGtleSkpKTsKKyAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUodm0pLT5kZWxl
dGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgU3RyaW5nKGtleSkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKLSAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOworICAg
ICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogfQpAQCAtNDc3LDEyICs0NzYsMTIgQEAg
LSAoQk9PTCloYXNXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgYXV0byYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwogCi0gICAgQk9PTCByZXN1bHQgPSBbc2Vs
ZiBfaW1wXS0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3Ry
aW5nKGtleSkpKTsKKyAgICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmcoa2V5
KSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICBh
ZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CisgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29s
ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICB9CiAKQEAgLTQ5NiwxMCArNDk1LDEwIEBAIC0gKE5TU3RyaW5nICopc3RyaW5nUmVwcmVz
ZW50YXRpb24KICAgICAgICAgcmV0dXJuIEAiVW5kZWZpbmVkIjsKICAgICB9CiAKLSAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKLSAg
ICByZXR1cm4gWyhfX2JyaWRnZSBpZCljb252ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCBbc2Vs
ZiBfaW1wXSwgT2JqY09iamVjdFR5cGUpLm9iamVjdFZhbHVlIGRlc2NyaXB0aW9uXTsKKyAgICBy
ZXR1cm4gWyhfX2JyaWRnZSBpZCljb252ZXJ0VmFsdWVUb09iamNWYWx1ZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCBbc2VsZiBfaW1wXSwgT2JqY09iamVjdFR5cGUpLm9iamVjdFZhbHVlIGRlc2NyaXB0
aW9uXTsKIH0KIAogLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25lZClpbmRleApA
QCAtNTExLDEyICs1MTAsMTIgQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25l
ZClpbmRleAogICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsK
IAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIGluZGV4
KTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpbmRleCk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7Ci0gICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKKyAgICAgICAgYWRkRXhj
ZXB0aW9uVG9Db25zb2xlKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICByZXN1bHQgPSBq
c1VuZGVmaW5lZCgpOwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KQEAg
LTUzNSwxMiArNTM0LDEyIEBAIC0gKHZvaWQpc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNp
Z25lZClpbmRleCB2YWx1ZTooaWQpdmFsdWUKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QgPSBnbG9iYWxPYmplY3Q7CiAKLSAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUodm0pLT5w
dXRCeUluZGV4KFtzZWxmIF9pbXBdLCBleGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFs
dWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFs
c2UpOworICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgoW3NlbGYg
X2ltcF0sIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1
ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9v
dE9iamVjdF0pLCBmYWxzZSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7Ci0gICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKKyAgICAgICAgYWRkRXhj
ZXB0aW9uVG9Db25zb2xlKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIH0KIH0KQEAgLTU1Niw5ICs1NTUsOSBAQCAtIChKU09iamVjdFJl
ZilKU09iamVjdAogewogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJl
dHVybiAwOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKIAotICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIHJldHVybiB0b1JlZihbc2VsZiBfaW1wXSk7CiB9CiAKQEAgLTU4
NSw3ICs1ODQsNyBAQCArIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNWYWx1
ZSl2YWx1ZSBvcmlnaW5Sb290T2JqZWN0OihSb290T2JqZWN0KgogICAgIH0KIAogICAgIGlmICh2
YWx1ZS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gYXNTdHJpbmcodmFsdWUpLT52YWx1ZShy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKKyAgICAgICAgcmV0dXJu
IGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogCiAg
ICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aERvdWJsZTp2YWx1ZS5hc051bWJlcigpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9vYmpjL29iamNfY2xhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfY2xhc3MuaAppbmRleCBkYmE2N2NhZTE1OTAxNjA2MzM1MGUyM2RlMTZmYTg3YWE5MjQ0NGI2
Li5lZjQ4NjM0NTVhZjA3YTNhMTI0ZmE3NjYzZTIwYzMxNTkxOTczYzYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY19jbGFzcy5oCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIE9iamND
bGFzcyA6IHB1YmxpYyBDbGFzcwogICAgIHZpcnR1YWwgTWV0aG9kKiBtZXRob2ROYW1lZChQcm9w
ZXJ0eU5hbWUsIEluc3RhbmNlKikgY29uc3Q7CiAgICAgdmlydHVhbCBGaWVsZCAqZmllbGROYW1l
ZChQcm9wZXJ0eU5hbWUsIEluc3RhbmNlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEpTVmFsdWUg
ZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiwgSW5zdGFuY2UqLCBQcm9wZXJ0eU5hbWUpOworICAg
IHZpcnR1YWwgSlNWYWx1ZSBmYWxsYmFja09iamVjdChKU0dsb2JhbE9iamVjdCosIEluc3RhbmNl
KiwgUHJvcGVydHlOYW1lKTsKICAgICAKICAgICBDbGFzc1N0cnVjdFB0ciBpc2EoKSB7IHJldHVy
biBfaXNhOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX2NsYXNzLm1tIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19jbGFzcy5tbQpp
bmRleCBhM2Q4ZDMyZjI4ZGQ4MDU4YTRhYjQ0MjczOTUzNDQwNzRmMjZjNzVkLi40Y2QxOGJkOTcw
MjdiNjA3YzVkOWUxMmE0MzU0ZTZmYTU2YmZiYTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfY2xhc3MubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIldlYlNjcmlwdE9i
amVjdC5oIgogI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJvdG9jb2wuaCIKICNpbXBvcnQgIm9i
amNfaW5zdGFuY2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdElu
bGluZXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgQmluZGluZ3MgewpAQCAtMjM1
LDcgKzIzNiw3IEBAIEZpZWxkKiBPYmpjQ2xhc3M6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSW5zdGFuY2UqIGluc3RhbmNlKSBjb25zCiAgICAgcmV0dXJuIGZpZWxkOwog
fQogCi1KU1ZhbHVlIE9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBJ
bnN0YW5jZSogaW5zdGFuY2UsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitKU1ZhbHVlIE9i
amNDbGFzczo6ZmFsbGJhY2tPYmplY3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAg
ICBPYmpjSW5zdGFuY2UqIG9iamNJbnN0YW5jZSA9IHN0YXRpY19jYXN0PE9iamNJbnN0YW5jZSo+
KGluc3RhbmNlKTsKICAgICBpZCB0YXJnZXRPYmplY3QgPSBvYmpjSW5zdGFuY2UtPmdldE9iamVj
dCgpOwpAQCAtMjQ2LDcgKzI0Nyw3IEBAIEpTVmFsdWUgT2JqY0NsYXNzOjpmYWxsYmFja09iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvcGVydHlOCiAgICAgaWYg
KCFwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIHJldHVybiBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG9iamNJbnN0YW5jZSwgcHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKSk7CisgICAgcmV0dXJuIE9iamNGYWxsYmFja09iamVjdEltcDo6Y3JlYXRlKGxleGlj
YWxHbG9iYWxPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIG9iamNJbnN0YW5jZSwgcHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfaW5zdGFuY2UuaAppbmRleCAxYjc4OTZiZTE5MDUwZTczYjUzZmQ5NTc1MmYyNTVmODNh
OWMzMDQxLi5jM2NiODYxZjVhMDQ0YTY4OTgyY2RlYTgwZDY1ZTQ4ODdmODY1Y2Y2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5oCkBAIC00MSwyMiArNDEsMjIg
QEAgY2xhc3MgT2JqY0luc3RhbmNlIDogcHVibGljIEluc3RhbmNlIHsKIAogICAgIHZpcnR1YWwg
Q2xhc3MqIGdldENsYXNzKCkgY29uc3Q7CiAgICAgICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSB2
YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFs
dWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmlydHVh
bCBKU1ZhbHVlIHZhbHVlT2YoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpT
VmFsdWUgZGVmYXVsdFZhbHVlKEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEpTVmFsdWUgZ2V0TWV0aG9kKEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSk7Ci0gICAgSlNWYWx1ZSBpbnZva2VPYmpjTWV0aG9kKEV4ZWNTdGF0ZSosIE9i
amNNZXRob2QqIG1ldGhvZCk7Ci0gICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVj
U3RhdGUqLCBSdW50aW1lTWV0aG9kKiBtZXRob2QpOworICAgIHZpcnR1YWwgSlNWYWx1ZSBnZXRN
ZXRob2QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgaW52b2tl
T2JqY01ldGhvZChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIE9iamNNZXRob2QqIG1ldGhv
ZCk7CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChKU0dsb2JhbE9iamVjdCosIENh
bGxGcmFtZSosIFJ1bnRpbWVNZXRob2QqIG1ldGhvZCk7CiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZv
a2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSopOworICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VE
ZWZhdWx0TWV0aG9kKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CiAKLSAgICBKU1ZhbHVl
IGdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKKyAgICBKU1ZhbHVlIGdldFZhbHVlT2ZVbmRlZmluZWRG
aWVsZChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSk7CiAKICAgICBPYmplY3RTdHJ1Y3RQdHIgZ2V0T2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gX2luc3RhbmNlLmdldCgpOyB9CiAgICAgCi0gICAgSlNWYWx1ZSBzdHJpbmdWYWx1ZShF
eGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU1ZhbHVlIG51bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNv
bnN0OworICAgIEpTVmFsdWUgc3RyaW5nVmFsdWUoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKyAg
ICBKU1ZhbHVlIG51bWJlclZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgSlNWYWx1
ZSBib29sZWFuVmFsdWUoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtNjUsMTEgKzY1LDExIEBA
IGNsYXNzIE9iamNJbnN0YW5jZSA6IHB1YmxpYyBJbnN0YW5jZSB7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIE9iamNGaWVsZDsKLSAgICBzdGF0aWMgdm9pZCBtb3ZlR2xvYmFsRXhjZXB0
aW9uVG9FeGVjU3RhdGUoRXhlY1N0YXRlKik7CisgICAgc3RhdGljIHZvaWQgbW92ZUdsb2JhbEV4
Y2VwdGlvblRvRXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICBPYmpjSW5zdGFuY2Uo
T2JqZWN0U3RydWN0UHRyLCBSZWZQdHI8Um9vdE9iamVjdD4mJik7CiAKLSAgICB2aXJ0dWFsIFJ1
bnRpbWVPYmplY3QqIG5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKik7CisgICAgdmlydHVhbCBS
dW50aW1lT2JqZWN0KiBuZXdSdW50aW1lT2JqZWN0KEpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICBS
ZXRhaW5QdHI8T2JqZWN0U3RydWN0UHRyPiBfaW5zdGFuY2U7CiAgICAgbXV0YWJsZSBPYmpjQ2xh
c3MqIF9jbGFzcyB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL29iamNfaW5zdGFuY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X2luc3RhbmNlLm1tCmluZGV4IDA1MWRhY2FmZmM2NmFkZjcyNDJjYzQ2MDFjZDMyYTVjMTE3ZmZk
ZWUuLmNmNzFkOTc1NmUxZDYzMzQ3Y2I2ZGY5YTViNDIxNGUzNTNjNzEyMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQpAQCAtMzMsNiArMzMsNyBAQAog
I2ltcG9ydCAicnVudGltZV9tZXRob2QuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Vycm9y
Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL09iamVjdFByb3Rv
dHlwZS5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTYzLDEwICs2NCwxMCBAQCBz
dGF0aWMgSGFzaE1hcDxDRlR5cGVSZWYsIE9iamNJbnN0YW5jZSo+JiB3cmFwcGVyQ2FjaGUoKQog
ICAgIHJldHVybiBtYXA7CiB9CiAKLVJ1bnRpbWVPYmplY3QqIE9iamNJbnN0YW5jZTo6bmV3UnVu
dGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitSdW50aW1lT2JqZWN0KiBPYmpjSW5zdGFuY2U6
Om5ld1J1bnRpbWVPYmplY3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCiB7
CiAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90
eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdC4KLSAgICByZXR1cm4gT2JqQ1J1bnRp
bWVPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3Ry
dWN0dXJlPE9iakNSdW50aW1lT2JqZWN0PihleGVjKSwgdGhpcyk7CisgICAgcmV0dXJuIE9iakNS
dW50aW1lT2JqZWN0OjpjcmVhdGUobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgV2ViQ29yZTo6
ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxPYmpDUnVudGltZU9iamVjdD4obGV4aWNhbEdsb2Jh
bE9iamVjdCksIHRoaXMpOwogfQogCiB2b2lkIE9iamNJbnN0YW5jZTo6c2V0R2xvYmFsRXhjZXB0
aW9uKE5TU3RyaW5nKiBleGNlcHRpb24sIEpTR2xvYmFsT2JqZWN0KiBleGNlcHRpb25FbnZpcm9u
bWVudCkKQEAgLTc4LDkgKzc5LDkgQEAgdm9pZCBPYmpjSW5zdGFuY2U6OnNldEdsb2JhbEV4Y2Vw
dGlvbihOU1N0cmluZyogZXhjZXB0aW9uLCBKU0dsb2JhbE9iamVjdCogZXhjZXAKICAgICBzX2V4
Y2VwdGlvbkVudmlyb25tZW50ID0gZXhjZXB0aW9uRW52aXJvbm1lbnQ7CiB9CiAKLXZvaWQgT2Jq
Y0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVj
KQordm9pZCBPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKCFzX2V4Y2VwdGlvbikg
ewpAQCAtODgsOSArODksOSBAQCB2b2lkIE9iamNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlv
blRvRXhlY1N0YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmICghc19leGNlcHRpb25FbnZpcm9ubWVudCB8fCBzX2V4Y2VwdGlvbkVudmlyb25tZW50
ID09IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYykpIHsKKyAgICBpZiAoIXNfZXhjZXB0aW9u
RW52aXJvbm1lbnQgfHwgc19leGNlcHRpb25FbnZpcm9ubWVudCA9PSB2bS52bUVudHJ5R2xvYmFs
T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QpKSB7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBzY29wZSwgc19leGNlcHRpb24pOworICAg
ICAgICB0aHJvd0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBzX2V4Y2VwdGlvbik7
CiAgICAgfQogCiAgICAgW3NfZXhjZXB0aW9uIHJlbGVhc2VdOwpAQCAtMTY0LDEyICsxNjUsMTIg
QEAgYm9vbCBPYmpjSW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0
CiAKIGNsYXNzIE9iakNSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgewogcHVi
bGljOgotICAgIHN0YXRpYyBPYmpDUnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBCaW5k
aW5nczo6TWV0aG9kKiBtZXRob2QpCisgICAgc3RhdGljIE9iakNSdW50aW1lTWV0aG9kKiBjcmVh
dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZCogbWV0aG9k
KQogICAgIHsKICAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICAv
LyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2Zm
IG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBp
biB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgotICAgICAgICBTdHJ1Y3R1cmUqIGRv
bVN0cnVjdHVyZSA9IFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8T2JqQ1J1bnRp
bWVNZXRob2Q+KGV4ZWMpOworICAgICAgICBTdHJ1Y3R1cmUqIGRvbVN0cnVjdHVyZSA9IFdlYkNv
cmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8T2JqQ1J1bnRpbWVNZXRob2Q+KGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgICAgICBPYmpDUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE9iakNSdW50aW1lTWV0aG9kPih2bS5oZWFwKSkg
T2JqQ1J1bnRpbWVNZXRob2QoZ2xvYmFsT2JqZWN0LCBkb21TdHJ1Y3R1cmUsIG1ldGhvZCk7CiAg
ICAgICAgIHJ1bnRpbWVNZXRob2QtPmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKICAgICAgICAg
cmV0dXJuIHJ1bnRpbWVNZXRob2Q7CkBAIC0xOTksMzEgKzIwMCwzMSBAQCBwcml2YXRlOgogCiBj
b25zdCBDbGFzc0luZm8gT2JqQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIk9iakNSdW50aW1l
TWV0aG9kIiwgJlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShPYmpDUnVudGltZU1ldGhvZCkgfTsKIAotSlNDOjpKU1ZhbHVlIE9iamNJ
bnN0YW5jZTo6Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKK0pTQzo6SlNWYWx1ZSBPYmpjSW5zdGFuY2U6OmdldE1ldGhvZChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAg
ICBNZXRob2QqIG1ldGhvZCA9IGdldENsYXNzKCktPm1ldGhvZE5hbWVkKHByb3BlcnR5TmFtZSwg
dGhpcyk7Ci0gICAgcmV0dXJuIE9iakNSdW50aW1lTWV0aG9kOjpjcmVhdGUoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBtZXRob2Qp
OworICAgIHJldHVybiBPYmpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG1ldGhv
ZCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3Rh
dGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCitKU0M6OkpTVmFsdWUgT2Jq
Y0luc3RhbmNlOjppbnZva2VNZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQog
ewotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgaWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHM8T2Jq
Q1J1bnRpbWVNZXRob2Q+KHZtKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9uIHBsdWctaW4g
b2JqZWN0LiJfcyk7CisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1wbHVnLWluIG1ldGhvZCBvbiBw
bHVnLWluIG9iamVjdC4iX3MpOwogCiAgICAgT2JqY01ldGhvZCAqbWV0aG9kID0gc3RhdGljX2Nh
c3Q8T2JqY01ldGhvZCo+KHJ1bnRpbWVNZXRob2QtPm1ldGhvZCgpKTsKICAgICBBU1NFUlQobWV0
aG9kKTsKIAotICAgIHJldHVybiBpbnZva2VPYmpjTWV0aG9kKGV4ZWMsIG1ldGhvZCk7CisgICAg
cmV0dXJuIGludm9rZU9iamNNZXRob2QobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBt
ZXRob2QpOwogfQogCi1KU0M6OkpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9k
KEV4ZWNTdGF0ZSogZXhlYywgT2JqY01ldGhvZCogbWV0aG9kKQorSlNDOjpKU1ZhbHVlIE9iamNJ
bnN0YW5jZTo6aW52b2tlT2JqY01ldGhvZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIE9iamNNZXRob2QqIG1ldGhvZCkKIHsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgSlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0
cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsgLy8gQ2FuJ3QgcHV0
IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3Rs
eS4KIAogICAgIHNldEdsb2JhbEV4Y2VwdGlvbihuaWwpOwogICAgIApAQCAtMjQ1LDkgKzI0Niw5
IEBAIEB0cnkgewogICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomanNOYW1lIGF0SW5k
ZXg6Ml07CiAKICAgICAgICAgTlNNdXRhYmxlQXJyYXkqIG9iamNBcmdzID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5XTsKLSAgICAgICAgaW50IGNvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwor
ICAgICAgICBpbnQgY291bnQgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBPYmpjVmFsdWUg
dmFsdWUgPSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1
bWVudChpKSwgT2JqY09iamVjdFR5cGUpOworICAgICAgICAgICAgT2JqY1ZhbHVlIHZhbHVlID0g
Y29udmVydFZhbHVlVG9PYmpjVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudChpKSwgT2JqY09iamVjdFR5cGUpOwogICAgICAgICAgICAgW29iamNB
cmdzIGFkZE9iamVjdDooX19icmlkZ2UgaWQpdmFsdWUub2JqZWN0VmFsdWVdOwogICAgICAgICB9
CiAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmpjQXJncyBhdEluZGV4OjNdOwpA
QCAtMjYyLDcgKzI2Myw3IEBAIEB0cnkgewogICAgICAgICAgICAgLy8gdHlwZXMuCiAgICAgICAg
ICAgICBBU1NFUlQob2JqY1ZhbHVlVHlwZSAhPSBPYmpjSW52YWxpZFR5cGUgJiYgb2JqY1ZhbHVl
VHlwZSAhPSBPYmpjVm9pZFR5cGUpOwogCi0gICAgICAgICAgICBPYmpjVmFsdWUgdmFsdWUgPSBj
b252ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudChpIC0gMiksIG9iamNW
YWx1ZVR5cGUpOworICAgICAgICAgICAgT2JqY1ZhbHVlIHZhbHVlID0gY29udmVydFZhbHVlVG9P
YmpjVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudChpIC0gMiks
IG9iamNWYWx1ZVR5cGUpOwogCiAgICAgICAgICAgICBzd2l0Y2ggKG9iamNWYWx1ZVR5cGUpIHsK
ICAgICAgICAgICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOgpAQCAtMzI2LDIyICszMjcsMjIg
QEAgQHRyeSB7CiAKICAgICBpZiAoKnR5cGUgIT0gJ3YnKSB7CiAgICAgICAgIFtpbnZvY2F0aW9u
IGdldFJldHVyblZhbHVlOmJ1ZmZlcl07Ci0gICAgICAgIHJlc3VsdCA9IGNvbnZlcnRPYmpjVmFs
dWVUb1ZhbHVlKGV4ZWMsIGJ1ZmZlciwgb2JqY1ZhbHVlVHlwZSwgbV9yb290T2JqZWN0LmdldCgp
KTsKKyAgICAgICAgcmVzdWx0ID0gY29udmVydE9iamNWYWx1ZVRvVmFsdWUobGV4aWNhbEdsb2Jh
bE9iamVjdCwgYnVmZmVyLCBvYmpjVmFsdWVUeXBlLCBtX3Jvb3RPYmplY3QuZ2V0KCkpOwogICAg
IH0KIH0gQGNhdGNoKE5TRXhjZXB0aW9uKiBsb2NhbEV4Y2VwdGlvbikgewogfQotICAgIG1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKKyAgICBtb3ZlR2xvYmFsRXhjZXB0aW9u
VG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKICAgICAvLyBXb3JrIGFyb3VuZCBw
cm9ibGVtIGluIHNvbWUgdmVyc2lvbnMgb2YgR0NDIHdoZXJlIHJlc3VsdCBnZXRzIG1hcmtlZCB2
b2xhdGlsZSBhbmQKICAgICAvLyBpdCBjYW4ndCBoYW5kbGUgY29weWluZyBmcm9tIGEgdm9sYXRp
bGUgdG8gbm9uLXZvbGF0aWxlLgogICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWUmPihyZXN1
bHQpOwogfQogCi1KU0M6OkpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9k
KEV4ZWNTdGF0ZSogZXhlYykKK0pTQzo6SlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1
bHRNZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAotICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRo
aXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4K
KyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MobGV4aWNhbEdsb2JhbE9iamVj
dCk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVu
d2luZHMgaW5jb3JyZWN0bHkuCiAgICAgc2V0R2xvYmFsRXhjZXB0aW9uKG5pbCk7CiAgICAgCiBA
dHJ5IHsKQEAgLTM1OSw5ICszNjAsOSBAQCBAdHJ5IHsKICAgICB9CiAKICAgICBOU011dGFibGVB
cnJheSogb2JqY0FyZ3MgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIHVuc2lnbmVkIGNv
dW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIHVuc2lnbmVkIGNvdW50ID0gY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKLSAgICAgICAgT2JqY1ZhbHVlIHZhbHVlID0gY29udmVydFZhbHVlVG9PYmpjVmFs
dWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSksIE9iamNPYmplY3RUeXBlKTsKKyAg
ICAgICAgT2JqY1ZhbHVlIHZhbHVlID0gY29udmVydFZhbHVlVG9PYmpjVmFsdWUobGV4aWNhbEds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSwgT2JqY09iamVjdFR5
cGUpOwogICAgICAgICBbb2JqY0FyZ3MgYWRkT2JqZWN0OihfX2JyaWRnZSBpZCl2YWx1ZS5vYmpl
Y3RWYWx1ZV07CiAgICAgfQogICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZvYmpjQXJncyBh
dEluZGV4OjJdOwpAQCAtMzc4LDE3ICszNzksMTcgQEAgQHRyeSB7CiAgICAgLy8gT0sgd2l0aCAz
MiBoZXJlLgogICAgIGNoYXIgYnVmZmVyWzMyXTsKICAgICBbaW52b2NhdGlvbiBnZXRSZXR1cm5W
YWx1ZTpidWZmZXJdOwotICAgIHJlc3VsdCA9IGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMs
IGJ1ZmZlciwgb2JqY1ZhbHVlVHlwZSwgbV9yb290T2JqZWN0LmdldCgpKTsKKyAgICByZXN1bHQg
PSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBidWZmZXIsIG9i
amNWYWx1ZVR5cGUsIG1fcm9vdE9iamVjdC5nZXQoKSk7CiB9IEBjYXRjaChOU0V4Y2VwdGlvbiog
bG9jYWxFeGNlcHRpb24pIHsKIH0KLSAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUo
ZXhlYyk7CisgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxP
YmplY3QpOwogCiAgICAgLy8gV29yayBhcm91bmQgcHJvYmxlbSBpbiBzb21lIHZlcnNpb25zIG9m
IEdDQyB3aGVyZSByZXN1bHQgZ2V0cyBtYXJrZWQgdm9sYXRpbGUgYW5kCiAgICAgLy8gaXQgY2Fu
J3QgaGFuZGxlIGNvcHlpbmcgZnJvbSBhIHZvbGF0aWxlIHRvIG5vbi12b2xhdGlsZS4KICAgICBy
ZXR1cm4gY29uc3RfY2FzdDxKU1ZhbHVlJj4ocmVzdWx0KTsKIH0KIAotYm9vbCBPYmpjSW5zdGFu
Y2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgYVZhbHVlKQorYm9vbCBPYmpjSW5zdGFuY2U6OnNldFZh
bHVlT2ZVbmRlZmluZWRGaWVsZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSBhVmFsdWUpCiB7CiAgICAgU3RyaW5n
IG5hbWUocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiAgICAgaWYgKG5hbWUuaXNOdWxsKCkp
CkBAIC0zOTgsNyArMzk5LDcgQEAgYm9vbCBPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmlu
ZWRGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXIKICAgICBpZiAoIVt0
YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRWYWx1ZTpmb3JVbmRl
ZmluZWRLZXk6KV0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MobGV4aWNhbEdsb2JhbE9iamVjdCk7IC8vIENhbid0IHB1
dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0
bHkuCiAKICAgICAvLyBUaGlzIGNoZWNrIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2Ug
TlNPYmplY3QgaW1wbGVtZW50cwogICAgIC8vIHNldFZhbHVlOmZvclVuZGVmaW5lZEtleTosIGFu
ZCB1bmZvcnR1bmF0ZWx5IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCkBAIC00MDYsNyArNDA3
LDcgQEAgYm9vbCBPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXIKICAgICBpZiAoW3RhcmdldE9iamVjdCByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFZhbHVlOmZvclVuZGVmaW5lZEtleTopXSl7CiAg
ICAgICAgIHNldEdsb2JhbEV4Y2VwdGlvbihuaWwpOwogICAgIAotICAgICAgICBPYmpjVmFsdWUg
b2JqY1ZhbHVlID0gY29udmVydFZhbHVlVG9PYmpjVmFsdWUoZXhlYywgYVZhbHVlLCBPYmpjT2Jq
ZWN0VHlwZSk7CisgICAgICAgIE9iamNWYWx1ZSBvYmpjVmFsdWUgPSBjb252ZXJ0VmFsdWVUb09i
amNWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBhVmFsdWUsIE9iamNPYmplY3RUeXBlKTsKIAog
ICAgICAgICBAdHJ5IHsKICAgICAgICAgICAgIFt0YXJnZXRPYmplY3Qgc2V0VmFsdWU6KF9fYnJp
ZGdlIGlkKW9iamNWYWx1ZS5vYmplY3RWYWx1ZSBmb3JVbmRlZmluZWRLZXk6W05TU3RyaW5nIHN0
cmluZ1dpdGhDU3RyaW5nOm5hbWUuYXNjaWkoKS5kYXRhKCkgZW5jb2Rpbmc6TlNBU0NJSVN0cmlu
Z0VuY29kaW5nXV07CkBAIC00MTQsMTMgKzQxNSwxMyBAQCBib29sIE9iamNJbnN0YW5jZTo6c2V0
VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cgogICAgICAgICAgICAgLy8gRG8gbm90aGluZy4gIENsYXNzIGRpZCBub3Qgb3ZlcnJpZGUgdmFs
dWVGb3JVbmRlZmluZWRLZXk6LgogICAgICAgICB9CiAKLSAgICAgICAgbW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOworICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVj
U3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiB0cnVl
OwogfQogCi1KU0M6OkpTVmFsdWUgT2JqY0luc3RhbmNlOjpnZXRWYWx1ZU9mVW5kZWZpbmVkRmll
bGQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAorSlND
OjpKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBj
b25zdAogewogICAgIFN0cmluZyBuYW1lKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwogICAg
IGlmIChuYW1lLmlzTnVsbCgpKQpAQCAtNDMwLDcgKzQzMSw3IEBAIEpTQzo6SlNWYWx1ZSBPYmpj
SW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZChFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtCiAgICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAKLSAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlz
IGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGxleGljYWxHbG9iYWxPYmplY3Qp
OyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndp
bmRzIGluY29ycmVjdGx5LgogCiAgICAgLy8gVGhpcyBjaGVjayBpcyBub3QgcmVhbGx5IG5lY2Vz
c2FyeSBiZWNhdXNlIE5TT2JqZWN0IGltcGxlbWVudHMKICAgICAvLyB2YWx1ZUZvclVuZGVmaW5l
ZEtleTosIGFuZCB1bmZvcnR1bmF0ZWx5IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCkBAIC00
NDAsMTIgKzQ0MSwxMiBAQCBKU0M6OkpTVmFsdWUgT2JqY0luc3RhbmNlOjpnZXRWYWx1ZU9mVW5k
ZWZpbmVkRmllbGQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbQogICAgIAogICAgICAgICBA
dHJ5IHsKICAgICAgICAgICAgIGlkIG9iamNWYWx1ZSA9IFt0YXJnZXRPYmplY3QgdmFsdWVGb3JV
bmRlZmluZWRLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5nOm5hbWUuYXNjaWkoKS5kYXRh
KCkgZW5jb2Rpbmc6TlNBU0NJSVN0cmluZ0VuY29kaW5nXV07Ci0gICAgICAgICAgICByZXN1bHQg
PSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmb2JqY1ZhbHVlLCBPYmpjT2JqZWN0VHlw
ZSwgbV9yb290T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnZlcnRPYmpj
VmFsdWVUb1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICZvYmpjVmFsdWUsIE9iamNPYmplY3RU
eXBlLCBtX3Jvb3RPYmplY3QuZ2V0KCkpOwogICAgICAgICB9IEBjYXRjaChOU0V4Y2VwdGlvbiog
bG9jYWxFeGNlcHRpb24pIHsKICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuICBDbGFzcyBkaWQg
bm90IG92ZXJyaWRlIHZhbHVlRm9yVW5kZWZpbmVkS2V5Oi4KICAgICAgICAgfQogCi0gICAgICAg
IG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKKyAgICAgICAgbW92ZUdsb2Jh
bEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIH0KIAogICAg
IC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVz
dWx0IGdldHMgbWFya2VkIHZvbGF0aWxlIGFuZApAQCAtNDUzLDE3ICs0NTQsMTcgQEAgSlNDOjpK
U1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW0KICAgICByZXR1cm4gY29uc3RfY2FzdDxKU1ZhbHVlJj4ocmVzdWx0
KTsKIH0KIAotSlNDOjpKU1ZhbHVlIE9iamNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAorSlNDOjpKU1ZhbHVl
IE9iamNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CiB7CiAgICAgaWYgKGhp
bnQgPT0gUHJlZmVyU3RyaW5nKQotICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUoZXhlYyk7Cisg
ICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBpZiAo
aGludCA9PSBQcmVmZXJOdW1iZXIpCi0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZShleGVjKTsK
KyAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGlm
IChbX2luc3RhbmNlLmdldCgpIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCi0gICAg
ICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVl
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGlmIChbX2luc3RhbmNlLmdldCgpIGlzS2luZE9m
Q2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZShleGVj
KTsKLSAgICByZXR1cm4gdmFsdWVPZihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bWJlclZhbHVl
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiB2YWx1ZU9mKGxleGljYWxHbG9iYWxP
YmplY3QpOwogfQogCiBzdGF0aWMgV1RGOjpUaHJlYWRTcGVjaWZpYzx1aW50MzJfdD4qIHNfZGVz
Y3JpcHRpb25EZXB0aDsKQEAgLTQ4Nyw3ICs0ODgsNyBAQCAtIChOU1N0cmluZyAqKV93ZWJfZGVz
Y3JpcHRpb24KIAogQGVuZAogCi1KU0M6OkpTVmFsdWUgT2JqY0luc3RhbmNlOjpzdHJpbmdWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU0M6OkpTVmFsdWUgT2JqY0luc3RhbmNlOjpzdHJp
bmdWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZURlc2NyaXB0aW9uRGVwdGhPbmNlRmxh
ZzsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplRGVzY3JpcHRpb25EZXB0aE9uY2VGbGFn
LCBbXSB7CkBAIC01MDAsMTIgKzUwMSwxMiBAQCBKU0M6OkpTVmFsdWUgT2JqY0luc3RhbmNlOjpz
dHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgfSk7CiAKICAgICAoKipzX2Rl
c2NyaXB0aW9uRGVwdGgpKys7Ci0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGNvbnZlcnROU1N0
cmluZ1RvU3RyaW5nKGV4ZWMsIFtnZXRPYmplY3QoKSBkZXNjcmlwdGlvbl0pOworICAgIEpTQzo6
SlNWYWx1ZSByZXN1bHQgPSBjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBbZ2V0T2JqZWN0KCkgZGVzY3JpcHRpb25dKTsKICAgICAoKipzX2Rlc2NyaXB0aW9uRGVw
dGgpLS07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNDOjpKU1ZhbHVlIE9iamNJbnN0YW5j
ZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKikgY29uc3QKK0pTQzo6SlNWYWx1ZSBPYmpjSW5zdGFu
Y2U6Om51bWJlclZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3QKIHsKICAgICByZXR1cm4ganNO
dW1iZXIoMCk7CiB9CkBAIC01MTUsNyArNTE2LDcgQEAgSlNDOjpKU1ZhbHVlIE9iamNJbnN0YW5j
ZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKIH0K
IAotSlNDOjpKU1ZhbHVlIE9iamNJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0IAorSlNDOjpKU1ZhbHVlIE9iamNJbnN0YW5jZTo6dmFsdWVPZihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QgCiB7Ci0gICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4
ZWMpOworICAgIHJldHVybiBzdHJpbmdWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5oIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgKaW5kZXggODY5ZDQzM2EyY2Jj
MjIzMTlmNTRhY2FhZjRmMDY0ZGIwMzM2YTJhNy4uYjQ3ZDZmZWU4NDJjODhhNzRhNDllMTBkYjdm
MDQ2ZWI2NWQ1ZDdkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19ydW50aW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1l
LmgKQEAgLTQ1LDggKzQ1LDggQEAgY2xhc3MgT2JqY0ZpZWxkIDogcHVibGljIEZpZWxkIHsKICAg
ICBPYmpjRmllbGQoSXZhclN0cnVjdFB0cik7CiAgICAgT2JqY0ZpZWxkKENGU3RyaW5nUmVmIG5h
bWUpOwogICAgIAotICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3Rh
dGUqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzZXRWYWx1ZVRv
SW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBJbnN0YW5jZSopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXRWYWx1ZVRvSW5zdGFuY2Uo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIEl2YXJTdHJ1Y3RQdHIgX2l2YXI7CkBAIC03OCwxNCArNzgsMTIgQEAgY2xhc3Mg
T2JqY0FycmF5IDogcHVibGljIEFycmF5IHsKIHB1YmxpYzoKICAgICBPYmpjQXJyYXkoT2JqZWN0
U3RydWN0UHRyLCBSZWZQdHI8Um9vdE9iamVjdD4mJik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2V0
VmFsdWVBdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbnQgaW5kZXgsIEpTVmFsdWUgYVZhbHVlKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVBdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBp
bnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXRWYWx1ZUF0KEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3Q7CisgICAgdmly
dHVhbCBKU1ZhbHVlIHZhbHVlQXQoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBpbnQgaW5kZXgp
IGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNvbnN0OwogICAg
IAogICAgIE9iamVjdFN0cnVjdFB0ciBnZXRPYmpjQXJyYXkoKSBjb25zdCB7IHJldHVybiBfYXJy
YXkuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyBKU1ZhbHVlIGNvbnZlcnRPYmpjQXJyYXlUb0FycmF5
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0U3RydWN0UHRyIGFuT2JqZWN0KTsKLQogcHJpdmF0ZToK
ICAgICBSZXRhaW5QdHI8T2JqZWN0U3RydWN0UHRyPiBfYXJyYXk7CiB9OwpAQCAtOTUsNyArOTMs
NyBAQCBjbGFzcyBPYmpjRmFsbGJhY2tPYmplY3RJbXAgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVP
YmplY3QgewogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsK
IAotICAgIHN0YXRpYyBPYmpjRmFsbGJhY2tPYmplY3RJbXAqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE9iamNJbnN0YW5jZSogaW5zdGFuY2Us
IGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQorICAgIHN0YXRpYyBPYmpjRmFsbGJhY2tPYmpl
Y3RJbXAqIGNyZWF0ZShKU0dsb2JhbE9iamVjdCogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgT2JqY0luc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBv
ZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKQEAgLTEyNSwxMyArMTIzLDEzIEBAIGNsYXNz
IE9iamNGYWxsYmFja09iamVjdEltcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBw
cml2YXRlOgogICAgIE9iamNGYWxsYmFja09iamVjdEltcChKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIE9iamNJbnN0YW5jZSosIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Ci0gICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIENh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Ci0gICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBz
dGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEpTVmFs
dWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlKTsKIAotICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0
OyAvLyBGSVhNRTogQ3VycmVudGx5IHRoaXMgaXMgYnJva2VuIGJlY2F1c2Ugbm9uZSBvZiB0aGUg
c3VwZXJjbGFzc2VzIGFyZSBtYXJrZWQgdmlydHVhbC4gV2UgbmVlZCB0byBzb2x2ZSB0aGlzIGlu
IHRoZSBsb25nZXIgdGVybS4KKyAgICBib29sIHRvQm9vbGVhbihKU0dsb2JhbE9iamVjdCopIGNv
bnN0OyAvLyBGSVhNRTogQ3VycmVudGx5IHRoaXMgaXMgYnJva2VuIGJlY2F1c2Ugbm9uZSBvZiB0
aGUgc3VwZXJjbGFzc2VzIGFyZSBtYXJrZWQgdmlydHVhbC4gV2UgbmVlZCB0byBzb2x2ZSB0aGlz
IGluIHRoZSBsb25nZXIgdGVybS4KIAogICAgIFJlZlB0cjxPYmpjSW5zdGFuY2U+IF9pbnN0YW5j
ZTsKICAgICBTdHJpbmcgbV9pdGVtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19y
dW50aW1lLm1tCmluZGV4IDc3YTI0MWNlNjhmMTJkYmNkOThjZWFlMjYxMTc0ODVlNzhlMjUxZDUu
LjFkNGI3ZDIzMTdmMmFkNWQ5MDQxZTVjMjFmNGNiODI1YzMyN2MwNDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KQEAgLTkyLDI3ICs5MiwyNyBAQCBPYmpj
RmllbGQ6Ok9iamNGaWVsZChDRlN0cmluZ1JlZiBuYW1lKQogewogfQogCi1KU1ZhbHVlIE9iamNG
aWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSog
aW5zdGFuY2UpIGNvbnN0CitKU1ZhbHVlIE9iamNGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEluc3RhbmNlKiBpbnN0YW5j
ZSkgY29uc3QKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIAogICAg
IGlkIHRhcmdldE9iamVjdCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0
YW5jZSkpLT5nZXRPYmplY3QoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1
c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MobGV4aWNhbEdsb2JhbE9iamVjdCk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0
aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICBAdHJ5
IHsKICAgICAgICAgaWYgKGlkIG9iamNWYWx1ZSA9IFt0YXJnZXRPYmplY3QgdmFsdWVGb3JLZXk6
KF9fYnJpZGdlIE5TU3RyaW5nICopX25hbWUuZ2V0KCldKQotICAgICAgICAgICAgcmVzdWx0ID0g
Y29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJm9iamNWYWx1ZSwgT2JqY09iamVjdFR5cGUs
IGluc3RhbmNlLT5yb290T2JqZWN0KCkpOworICAgICAgICAgICAgcmVzdWx0ID0gY29udmVydE9i
amNWYWx1ZVRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgJm9iamNWYWx1ZSwgT2JqY09iamVj
dFR5cGUsIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwogICAgICAgICB7Ci0gICAgICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICAgICAgICAgIE9iamNJbnN0YW5jZTo6bW92ZUds
b2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBPYmpjSW5zdGFuY2U6Om1v
dmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAg
ICAgfQogICAgIH0gQGNhdGNoKE5TRXhjZXB0aW9uKiBsb2NhbEV4Y2VwdGlvbikgewotICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBzY29w
ZSwgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgdGhyb3dFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwogICAgIH0KIAogICAgIC8vIFdv
cmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdl
dHMgbWFya2VkIHZvbGF0aWxlIGFuZApAQCAtMTIwLDM1ICsxMjAsMzUgQEAgSlNWYWx1ZSBPYmpj
RmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2Uq
IGluc3RhbmNlKQogICAgIHJldHVybiBjb25zdF9jYXN0PEpTVmFsdWUmPihyZXN1bHQpOwogfQog
Ci1zdGF0aWMgaWQgY29udmVydFZhbHVlVG9PYmpjT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKK3N0YXRpYyBpZCBjb252ZXJ0VmFsdWVUb09iamNPYmplY3QoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IGZpbmRS
b290T2JqZWN0KHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYykpOworICAgIFZNJiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmpl
Y3QgPSBmaW5kUm9vdE9iamVjdCh2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGxleGljYWxHbG9iYWxP
YmplY3QpKTsKICAgICBpZiAoIXJvb3RPYmplY3QpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
cmV0dXJuIFt3ZWJTY3JpcHRPYmplY3RDbGFzcygpIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTp2
YWx1ZSBvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3QuZ2V0KCkgcm9vdE9iamVjdDpyb290T2Jq
ZWN0LmdldCgpXTsKIH0KIAotYm9vbCBPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0YW5jZSwgSlNWYWx1ZSBhVmFsdWUpIGNv
bnN0Citib29sIE9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0YW5jZSogaW5zdGFuY2UsIEpTVmFsdWUgYVZh
bHVlKSBjb25zdAogewotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gKHN0YXRpY19jYXN0
PGNvbnN0IE9iamNJbnN0YW5jZSo+KGluc3RhbmNlKSktPmdldE9iamVjdCgpOwotICAgIGlkIHZh
bHVlID0gY29udmVydFZhbHVlVG9PYmpjT2JqZWN0KGV4ZWMsIGFWYWx1ZSk7CisgICAgaWQgdmFs
dWUgPSBjb252ZXJ0VmFsdWVUb09iamNPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgYVZhbHVl
KTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2Fu
J3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNv
cnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MobGV4aWNhbEds
b2JhbE9iamVjdCk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNh
dXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICBAdHJ5IHsKICAgICAgICAgW3Rhcmdl
dE9iamVjdCBzZXRWYWx1ZTp2YWx1ZSBmb3JLZXk6KF9fYnJpZGdlIE5TU3RyaW5nICopX25hbWUu
Z2V0KCldOwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
LSAgICAgICAgICAgIE9iamNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRl
KGV4ZWMpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgICAgICAgICBPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNT
dGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9IEBjYXRjaChOU0V4Y2VwdGlvbiogbG9jYWxFeGNlcHRpb24pIHsKLSAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgc2NvcGUs
IFtsb2NhbEV4Y2VwdGlvbiByZWFzb25dKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sobGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAgIHRocm93RXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIFtsb2NhbEV4Y2VwdGlvbiByZWFzb25dKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIH0KQEAgLTE2MSw0NyArMTYxLDQ3IEBAIE9iamNBcnJheTo6T2JqY0FycmF5KE9i
amVjdFN0cnVjdFB0ciBhLCBSZWZQdHI8Um9vdE9iamVjdD4mJiByb290T2JqZWN0KQogewogfQog
Ci1ib29sIE9iamNBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
dCBpbmRleCwgSlNWYWx1ZSBhVmFsdWUpIGNvbnN0Citib29sIE9iamNBcnJheTo6c2V0VmFsdWVB
dChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW50IGluZGV4
LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKIHsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNDOjpWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICghW19hcnJheS5nZXQo
KSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc2VydE9iamVjdDphdEluZGV4OildKSB7
Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQXJyYXkgaXMgbm90IG11dGFi
bGUuIl9zKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsICJBcnJheSBpcyBub3QgbXV0YWJsZS4iX3MpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgaWYgKGluZGV4ID4gW19hcnJheS5nZXQoKSBjb3VudF0pIHsKLSAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkluZGV4
IGV4Y2VlZHMgYXJyYXkgc2l6ZS4iKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJJbmRleCBleGNlZWRzIGFycmF5IHNpemUuIikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAogICAgIC8vIEFsd2F5cyB0cnkgdG8gY29udmVydCB0aGUgdmFsdWUgdG8gYW4g
T2JqQyBvYmplY3QsIHNvIGl0IGNhbiBiZSBwbGFjZWQgaW4gdGhlCiAgICAgLy8gYXJyYXkuCi0g
ICAgT2JqY1ZhbHVlIG9WYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlIChleGVjLCBhVmFs
dWUsIE9iamNPYmplY3RUeXBlKTsKKyAgICBPYmpjVmFsdWUgb1ZhbHVlID0gY29udmVydFZhbHVl
VG9PYmpjVmFsdWUgKGxleGljYWxHbG9iYWxPYmplY3QsIGFWYWx1ZSwgT2JqY09iamVjdFR5cGUp
OwogCiAgICAgQHRyeSB7CiAgICAgICAgIFtfYXJyYXkuZ2V0KCkgaW5zZXJ0T2JqZWN0OihfX2Jy
aWRnZSBpZClvVmFsdWUub2JqZWN0VmFsdWUgYXRJbmRleDppbmRleF07CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0gQGNhdGNoKE5TRXhjZXB0aW9uKiBsb2NhbEV4Y2VwdGlvbikgewotICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgIk9iamVj
dGl2ZS1DIGV4Y2VwdGlvbi4iKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiT2JqZWN0
aXZlLUMgZXhjZXB0aW9uLiIpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAot
SlNWYWx1ZSBPYmpjQXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQg
aW5kZXgpIGNvbnN0CitKU1ZhbHVlIE9iamNBcnJheTo6dmFsdWVBdChKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdAogewotICAgIEpT
Qzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgaWYgKGluZGV4ID4gW19hcnJheS5nZXQoKSBjb3VudF0pCi0gICAgICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW5kZXgg
ZXhjZWVkcyBhcnJheSBzaXplLiIpKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsICJJbmRleCBleGNlZWRzIGFycmF5IHNpemUuIikpOwogICAgIEB0cnkgewogICAgICAg
ICBpZCBvYmogPSBbX2FycmF5LmdldCgpIG9iamVjdEF0SW5kZXg6aW5kZXhdOwogICAgICAgICBp
ZiAob2JqKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlIChleGVj
LCAmb2JqLCBPYmpjT2JqZWN0VHlwZSwgbV9yb290T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAg
IHJldHVybiBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZSAobGV4aWNhbEdsb2JhbE9iamVjdCwgJm9i
aiwgT2JqY09iamVjdFR5cGUsIG1fcm9vdE9iamVjdC5nZXQoKSk7CiAgICAgfSBAY2F0Y2goTlNF
eGNlcHRpb24qIGxvY2FsRXhjZXB0aW9uKSB7Ci0gICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgIk9iamVjdGl2ZS1DIGV4Y2VwdGlvbi4i
KSk7CisgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgIk9iamVjdGl2ZS1DIGV4Y2Vw
dGlvbi4iKSk7CiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpAQCAtMjMyLDI2
ICsyMzIsMjYgQEAgdm9pZCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKIH0KIAotYm9vbCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQorYm9vbCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgLy8ga2VlcCB0aGUgcHJvdG90eXBlIGZyb20gZ2V0dGluZyBjYWxsZWQgaW5zdGVhZCBv
ZiBqdXN0IHJldHVybmluZyBmYWxzZQogICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpwdXQoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKQorYm9v
bCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OnB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90JikKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmpDRmFs
bGJhY2tPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsT2JqQ0ZhbGxi
YWNrT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBKU0M6OlZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzPE9iakNS
dW50aW1lT2JqZWN0Pih2bSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGNhbGxG
cmFtZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7
CiAKQEAgLTI1OSw3ICsyNTksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsT2JqQ0ZhbGxiYWNrT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYQogICAgIE9iamNJ
bnN0YW5jZSogb2JqY0luc3RhbmNlID0gcnVudGltZU9iamVjdC0+Z2V0SW50ZXJuYWxPYmpDSW5z
dGFuY2UoKTsKIAogICAgIGlmICghb2JqY0luc3RhbmNlKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKFJ1bnRpbWVPYmplY3Q6OnRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGNhbGxGcmFt
ZSwgc2NvcGUpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShSdW50aW1lT2JqZWN0
Ojp0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSkpOwog
ICAgIAogICAgIG9iamNJbnN0YW5jZS0+YmVnaW4oKTsKIApAQCAtMjcwLDcgKzI3MCw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxPYmpDRmFsbGJhY2tPYmplY3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxPYmpjTWV0aG9k
PiBmYWxsYmFja01ldGhvZChtYWtlVW5pcXVlPE9iamNNZXRob2Q+KG9iamNDbGFzcy0+aXNhKCks
IEBzZWxlY3RvcihpbnZva2VVbmRlZmluZWRNZXRob2RGcm9tV2ViU2NyaXB0OndpdGhBcmd1bWVu
dHM6KSkpOwogICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWVJZGVudGlmaWVyID0gc3RhdGljX2Nh
c3Q8T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKS0+cHJvcGVy
dHlOYW1lKCk7CiAgICAgICAgIGZhbGxiYWNrTWV0aG9kLT5zZXRKYXZhU2NyaXB0TmFtZShuYW1l
SWRlbnRpZmllci5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKLSAgICAgICAgcmVzdWx0ID0gb2Jq
Y0luc3RhbmNlLT5pbnZva2VPYmpjTWV0aG9kKGNhbGxGcmFtZSwgZmFsbGJhY2tNZXRob2QuZ2V0
KCkpOworICAgICAgICByZXN1bHQgPSBvYmpjSW5zdGFuY2UtPmludm9rZU9iamNNZXRob2QobGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmYWxsYmFja01ldGhvZC5nZXQoKSk7CiAgICAg
fQogICAgICAgICAgICAgCiAgICAgb2JqY0luc3RhbmNlLT5lbmQoKTsKQEAgLTI4OCwxOSArMjg4
LDE5IEBAIENhbGxUeXBlIE9iamNGYWxsYmFja09iamVjdEltcDo6Z2V0Q2FsbERhdGEoSlNDZWxs
KiBjZWxsLCBDYWxsRGF0YSYgY2FsbERhdGEpCiAgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0Owog
fQogCi1ib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKQorYm9vbCBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKQogewog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotSlNWYWx1ZSBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmRl
ZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUpCitKU1ZhbHVlIE9iamNGYWxsYmFja09iamVjdEltcDo6ZGVmYXVs
dFZhbHVlKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBjb25z
dCBPYmpjRmFsbGJhY2tPYmplY3RJbXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgT2JqY0Zh
bGxiYWNrT2JqZWN0SW1wKj4ob2JqZWN0KTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+X2luc3Rh
bmNlLT5nZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgdGhpc09iamVjdC0+bV9pdGVtKSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPl9pbnN0
YW5jZS0+Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKGxleGljYWxHbG9iYWxPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHRoaXNPYmplY3QtPm1faXRlbSkpOwogfQogCi1ib29sIE9i
amNGYWxsYmFja09iamVjdEltcDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdAorYm9vbCBP
YmpjRmFsbGJhY2tPYmplY3RJbXA6OnRvQm9vbGVhbihKU0dsb2JhbE9iamVjdCopIGNvbnN0CiB7
CiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gX2luc3RhbmNlLT5nZXRPYmplY3QoKTsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5oIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5LmgKaW5kZXggMzZhY2I2MTcwMDky
NmVjZjAyNDQ2MzcyYzUzNDIyOGY2MTc3YzM1ZS4uYWUwMzdjMjJlMGEzNDBkYmYyNTRiNmI1MDk5
NzZmMTIxYTMzZDk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y191dGlsaXR5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5
LmgKQEAgLTY5LDEyICs2OSwxMiBAQCB0eXBlZGVmIGVudW0gewogCiBjbGFzcyBSb290T2JqZWN0
OwogCi1PYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgT2JqY1ZhbHVlVHlwZSk7Ci1KU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgTlNTdHJpbmcgKm5zc3RyaW5nKTsKLUpTVmFsdWUgY29udmVydE9iamNWYWx1
ZVRvVmFsdWUoRXhlY1N0YXRlKiwgdm9pZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlLCBSb290T2Jq
ZWN0Kik7CitPYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlLCBPYmpjVmFsdWVUeXBlKTsKK0pTVmFsdWUgY29udmVydE5TU3RyaW5nVG9TdHJp
bmcoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIE5TU3RyaW5nICpuc3N0cmlu
Zyk7CitKU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEpTR2xvYmFsT2JqZWN0Kiwgdm9p
ZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlLCBSb290T2JqZWN0Kik7CiBPYmpjVmFsdWVUeXBlIG9i
amNWYWx1ZVR5cGVGb3JUeXBlKGNvbnN0IGNoYXIgKnR5cGUpOwogCi1FeGNlcHRpb24gKnRocm93
RXJyb3IoRXhlY1N0YXRlKiwgVGhyb3dTY29wZSYsIE5TU3RyaW5nICptZXNzYWdlKTsKK0V4Y2Vw
dGlvbiAqdGhyb3dFcnJvcihKU0dsb2JhbE9iamVjdCosIFRocm93U2NvcGUmLCBOU1N0cmluZyAq
bWVzc2FnZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCiB9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbSBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQppbmRleCBlNTcwNjg5
MDIyMWEyNGYyZGViYzU4MDQ5MDdmNzhmZWExMDA3MjM4Li43MTQyZjJhZmViMmIwMzgyZWUxMTVl
MDk3OTUxMTkyOGM0ZDNiNTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2Jq
Yy9vYmpjX3V0aWxpdHkubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191
dGlsaXR5Lm1tCkBAIC0zMCw3ICszMCw3IEBACiAjaW1wb3J0ICJvYmpjX2luc3RhbmNlLmgiCiAj
aW1wb3J0ICJydW50aW1lX2FycmF5LmgiCiAjaW1wb3J0ICJydW50aW1lX29iamVjdC5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNMb2NrLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogCkBAIC03NiwyMiArNzYsMjIg
QEAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKICAgICBbXSwgb3RoZXIgICAgICAgZXhjZXB0aW9uCiAK
ICovCi1PYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlLCBPYmpjVmFsdWVUeXBlIHR5cGUpCitPYmpjVmFsdWUgY29udmVydFZhbHVl
VG9PYmpjVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUg
dmFsdWUsIE9iamNWYWx1ZVR5cGUgdHlwZSkKIHsKICAgICBPYmpjVmFsdWUgcmVzdWx0OwogICAg
IGRvdWJsZSBkID0gMDsKIAogICAgIGlmICh2YWx1ZS5pc051bWJlcigpIHx8IHZhbHVlLmlzU3Ry
aW5nKCkgfHwgdmFsdWUuaXNCb29sZWFuKCkpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7Ci0gICAgICAgIGQgPSB2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAgIGQgPSB2YWx1ZS50b051
bWJlcihsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsK
ICAgICAgICAgY2FzZSBPYmpjT2JqZWN0VHlwZTogewotICAgICAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAgICAgICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0ICpvcmlnaW5HbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xv
YmFsT2JqZWN0KGV4ZWMpOworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QgKm9yaWdpbkdsb2Jh
bE9iamVjdCA9IHZtLnZtRW50cnlHbG9iYWxPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgICAgICAgICBSb290T2JqZWN0KiBvcmlnaW5Sb290T2JqZWN0ID0gZmluZFJvb3RPYmplY3Qo
b3JpZ2luR2xvYmFsT2JqZWN0KTsKIAogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IDA7CkBAIC0xNTAsOSArMTUwLDkgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRv
T2JqY1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgT2JqY1ZhbHVlVHlwZQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAqbnNzdHJpbmcpCitKU1ZhbHVlIGNvbnZlcnROU1N0
cmluZ1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBOU1N0cmlu
ZyAqbnNzdHJpbmcpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBs
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAg
ICBKU1ZhbHVlIGFWYWx1ZSA9IGpzU3RyaW5nKHZtLCBTdHJpbmcobnNzdHJpbmcpKTsKICAgICBy
ZXR1cm4gYVZhbHVlOwpAQCAtMTc2LDE1ICsxNzYsMTUgQEAgSlNWYWx1ZSBjb252ZXJ0TlNTdHJp
bmdUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIE5TU3RyaW5nICpuc3N0cmluZykKICAgICBpZCAg
ICAgICAgICAgICAgb2JqZWN0IHdyYXBwZXIKICAgICBvdGhlciAgICAgICAgICAgc2hvdWxkIG5v
dCBoYXBwZW4KICovCi1KU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgdm9pZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUsIFJvb3RPYmplY3QqIHJvb3RP
YmplY3QpCitKU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2b2lkKiBidWZmZXIsIE9iamNWYWx1ZVR5cGUgdHlwZSwgUm9v
dE9iamVjdCogcm9vdE9iamVjdCkKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAKICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBPYmpjT2JqZWN0VHlwZTogewogICAgICAgICAgICAg
aWQgb2JqID0gKihjb25zdCBpZCopYnVmZmVyOwogICAgICAgICAgICAgaWYgKFtvYmogaXNLaW5k
T2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udmVy
dE5TU3RyaW5nVG9TdHJpbmcoZXhlYywgKE5TU3RyaW5nICopb2JqKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY29udmVydE5TU3RyaW5nVG9TdHJpbmcobGV4aWNhbEdsb2JhbE9iamVjdCwgKE5T
U3RyaW5nICopb2JqKTsKICAgICAgICAgICAgIGlmIChbb2JqIGlzS2luZE9mQ2xhc3M6d2ViVW5k
ZWZpbmVkQ2xhc3MoKV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICAgICAgICBpZiAoKF9fYnJpZGdlIENGQm9vbGVhblJlZilvYmogPT0ga0NGQm9vbGVhblRy
dWUpCkBAIC0xOTQsNyArMTk0LDcgQEAgSlNWYWx1ZSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGJ1ZmZlciwgT2JqY1ZhbHVlVHlwZSB0eXAKICAgICAgICAg
ICAgIGlmIChbb2JqIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKFtvYmogZG91YmxlVmFsdWVdKTsKICAgICAgICAgICAgIGlm
IChbb2JqIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gUnVudGltZUFycmF5OjpjcmVhdGUoZXhlYywgbmV3IE9iamNBcnJheShvYmosIHJvb3RP
YmplY3QpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUnVudGltZUFycmF5OjpjcmVhdGUobGV4
aWNhbEdsb2JhbE9iamVjdCwgbmV3IE9iamNBcnJheShvYmosIHJvb3RPYmplY3QpKTsKICAgICAg
ICAgICAgIGlmIChbb2JqIGlzS2luZE9mQ2xhc3M6d2ViU2NyaXB0T2JqZWN0Q2xhc3MoKV0pIHsK
ICAgICAgICAgICAgICAgICBKU09iamVjdCogaW1wID0gW29iaiBfaW1wXTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gaW1wID8gaW1wIDoganNVbmRlZmluZWQoKTsKQEAgLTIwMyw3ICsyMDMsNyBA
QCBKU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCog
YnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cAogICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwo
KTsKICAgICAgICAgICAgIGlmIChvYmogPT0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBPYmpjSW5zdGFuY2U6OmNyZWF0ZShvYmos
IHJvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOworICAgICAgICAgICAgcmV0
dXJuIE9iamNJbnN0YW5jZTo6Y3JlYXRlKG9iaiwgcm9vdE9iamVjdCktPmNyZWF0ZVJ1bnRpbWVP
YmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPYmpj
Q2hhclR5cGU6CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoKihjaGFyKilidWZmZXIpOwpA
QCAtMzE0LDEwICszMTQsMTAgQEAgT2JqY1ZhbHVlVHlwZSBvYmpjVmFsdWVUeXBlRm9yVHlwZShj
b25zdCBjaGFyICp0eXBlKQogICAgIHJldHVybiBvYmpjVmFsdWVUeXBlOwogfQogCi1FeGNlcHRp
b24gKnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgTlNTdHJp
bmcgKm1lc3NhZ2UpCitFeGNlcHRpb24gKnRocm93RXJyb3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHNjb3BlLCBOU1N0cmluZyAqbWVzc2FnZSkKIHsK
ICAgICBBU1NFUlQobWVzc2FnZSk7Ci0gICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBKU0M6OmNyZWF0ZUVycm9yKGV4ZWMsIFN0cmluZyhtZXNzYWdlKSkpOworICAgIHJldHVy
biB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgSlNDOjpjcmVhdGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBTdHJpbmcobWVzc2FnZSkpKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwIGIvU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCmluZGV4IDkwZTU3NDQzMTZjZjlmZmVk
NmExMTI3MTRhMDk5ZGI4ZjU2MDBiOTcuLjA3MTc5ZDAxNjlhYmM5ZGNhYWQ0N2E4MzE3MGY1Yzhl
MWZiMmJmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9BcnJheVByb3RvdHlwZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Vycm9y
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC0zNyw4ICszOCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gUnVudGltZUFycmF5OjpzX2luZm8gPSB7ICJSdW50aW1lQXJyYXkiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJ1bnRpbWVB
cnJheSkgfTsKIAotUnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQXJyYXkoZXhlYy0+dm0oKSwgc3RydWN0dXJl
LCAwKQorUnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogSlNBcnJheShsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUsIDApCiAgICAgLCBtX2FycmF5KDApCiB7CiB9
CkBAIC02MCwyMCArNjEsMjAgQEAgdm9pZCBSdW50aW1lQXJyYXk6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQogICAgIHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KGNlbGwpLT5SdW50aW1lQXJyYXk6
On5SdW50aW1lQXJyYXkoKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgUnVudGltZUFycmF5OjpsZW5n
dGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIFJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9
IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNEeW5hbWlj
Q2FzdDxSdW50aW1lQXJyYXkqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmICghdGhpc09iamVjdCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2Jq
ZWN0LT5nZXRMZW5ndGgoKSkpOwogfQogCi12b2lkIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgUnVudGltZUFy
cmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBW
TSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIFJ1bnRpbWVBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHRoaXNPYmplY3QtPmdldExlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKQEAgLTgyLDEyICs4MywxMiBAQCB2b2lkIFJ1bnRpbWVBcnJheTo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcgogICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKIAotICAgIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIFJ1bnRp
bWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9v
bCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Vk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBSdW50aW1lQXJyYXkqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKICAgICBpZiAocHJvcGVy
dHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgewogICAgICAgICBzbG90LnNldENh
Y2hlYWJsZUN1c3RvbSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyKTsKQEAgLTk3LDYyICs5OCw2MiBAQCBib29sIFJ1
bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydAogICAgIE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5k
ZXgocHJvcGVydHlOYW1lKTsKICAgICBpZiAoaW5kZXggJiYgaW5kZXgudmFsdWUoKSA8IHRoaXNP
YmplY3QtPmdldExlbmd0aCgpKSB7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0sCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQo
ZXhlYywgaW5kZXgudmFsdWUoKSkpOworICAgICAgICAgICAgdGhpc09iamVjdC0+Z2V0Q29uY3Jl
dGVBcnJheSgpLT52YWx1ZUF0KGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCkpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CisgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBSdW50aW1l
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlICpleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBSdW50
aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1
bnRpbWVBcnJheSo+KG9iamVjdCk7CiAgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+Z2V0TGVu
Z3RoKCkpIHsKICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwKLSAgICAgICAg
ICAgIHRoaXNPYmplY3QtPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpbmRleCkp
OworICAgICAgICAgICAgdGhpc09iamVjdC0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGxl
eGljYWxHbG9iYWxPYmplY3QsIGluZGV4KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRl
eCwgc2xvdCk7CiB9CiAKLWJvb2wgUnVudGltZUFycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgUnVudGltZUFycmF5OjpwdXQoSlNDZWxsKiBjZWxs
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBSdW50
aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZUFycmF5Kj4oY2VsbCk7CiAgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKLSAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJhbmdl
IGVycm9yIikpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgY3JlYXRlUmFuZ2VFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmFuZ2UgZXJyb3Ii
KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgaWYgKE9wdGlvbmFs
PHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKLSAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPmdldENvbmNyZXRlQXJyYXkoKS0+c2V0VmFsdWVBdChleGVjLCBpbmRl
eC52YWx1ZSgpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5nZXRDb25jcmV0
ZUFycmF5KCktPnNldFZhbHVlQXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgudmFsdWUoKSwg
dmFsdWUpOwogCi0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU09iamVjdDo6cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpOwogfQogCi1ib29sIFJ1bnRpbWVB
cnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wpCitib29sIFJ1bnRpbWVBcnJheTo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgUnVudGltZUFycmF5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KGNlbGwpOwogICAgIGlmIChpbmRleCA+PSB0
aGlzT2JqZWN0LT5nZXRMZW5ndGgoKSkgewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgZXJyb3IiKSk7CisgICAgICAgIHRo
cm93RXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsICJSYW5nZSBlcnJvciIpKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0Q29uY3JldGVBcnJh
eSgpLT5zZXRWYWx1ZUF0KGV4ZWMsIGluZGV4LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPmdldENvbmNyZXRlQXJyYXkoKS0+c2V0VmFsdWVBdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bmRleCwgdmFsdWUpOwogfQogCi1ib29sIFJ1bnRpbWVBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKQorYm9vbCBSdW50aW1lQXJyYXk6OmRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSdW50aW1lQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCkKK2Jvb2wgUnVudGltZUFycmF5Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCkK
IHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9hcnJheS5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
aAppbmRleCAxMGQ3ZWRjMjBmZDc3OWRhMDNiZDQ3NTRkNDY1MWY0ZmI2ZTExMmIwLi5hYWU1YWE0
MmY0M2VhMzZmNDhjOWY2ZDYxNWRjMWQ2ZWEwM2E1NjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX2FycmF5LmgKQEAgLTM3LDE1ICszNywxNSBAQCBjbGFzcyBSdW50aW1lQXJyYXkgOiBw
dWJsaWMgSlNBcnJheSB7CiAgICAgdHlwZWRlZiBKU0FycmF5IEJhc2U7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXM7CiAKLSAgICBzdGF0aWMgUnVudGltZUFycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBC
aW5kaW5nczo6QXJyYXkqIGFycmF5KQorICAgIHN0YXRpYyBSdW50aW1lQXJyYXkqIGNyZWF0ZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQmluZGluZ3M6OkFycmF5KiBhcnJh
eSkKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIFZNJiB2bSA9
IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVk
R2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2Jh
bCBvYmplY3QKICAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwg
b2JqZWN0IGZvciAiYXJyYXkiLgotICAgICAgICBTdHJ1Y3R1cmUqIGRvbVN0cnVjdHVyZSA9IFdl
YkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UnVudGltZUFycmF5PihleGVjKTsKLSAg
ICAgICAgUnVudGltZUFycmF5KiBydW50aW1lQXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxSdW50aW1lQXJyYXk+KHZtLmhlYXApKSBSdW50aW1lQXJyYXkoZXhlYywgZG9tU3RydWN0
dXJlKTsKKyAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNh
dGVkR2V0RE9NU3RydWN0dXJlPFJ1bnRpbWVBcnJheT4obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIFJ1bnRpbWVBcnJheSogcnVudGltZUFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8UnVudGltZUFycmF5Pih2bS5oZWFwKSkgUnVudGltZUFycmF5KGxleGljYWxHbG9iYWxP
YmplY3QsIGRvbVN0cnVjdHVyZSk7CiAgICAgICAgIHJ1bnRpbWVBcnJheS0+ZmluaXNoQ3JlYXRp
b24odm0sIGFycmF5KTsKLSAgICAgICAgZXhlYy0+dm0oKS5oZWFwLmFkZEZpbmFsaXplcihydW50
aW1lQXJyYXksIGRlc3Ryb3kpOworICAgICAgICBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLmhl
YXAuYWRkRmluYWxpemVyKHJ1bnRpbWVBcnJheSwgZGVzdHJveSk7CiAgICAgICAgIHJldHVybiBy
dW50aW1lQXJyYXk7CiAgICAgfQogCkBAIC01NCwxNCArNTQsMTQgQEAgY2xhc3MgUnVudGltZUFy
cmF5IDogcHVibGljIEpTQXJyYXkgewogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwogCi0gICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IGJvb2wgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgcHV0QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgCi0gICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lKTsKICAgICAKICAgICB1bnNpZ25lZCBnZXRMZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2FycmF5LT5nZXRMZW5ndGgoKTsgfQogICAgIApAQCAtODMsOCArODMsOCBAQCBjbGFzcyBS
dW50aW1lQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEJpbmRpbmdzOjpBcnJheSopOwogCiBwcml2YXRlOgotICAgIFJ1bnRpbWVBcnJheShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgIFJ1bnRp
bWVBcnJheShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBsZW5ndGhHZXR0ZXIoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJv
cGVydHlOYW1lKTsKIAogICAgIEJpbmRpbmdzQXJyYXkqIG1fYXJyYXk7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAKaW5kZXggODdmMTZiMGU4MGI2NzAwNWUxN2Nj
Y2UxNWQ2OTNjYWZkZDYwY2Q0ZS4uZjE5OWUwZjdlOWM1YjNmMTRjZjZhMmM0OGVhOTdkODAyYzkx
NmUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9FcnJvci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90
eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQgUnVu
dGltZU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBTdHJpbmcmIGlkZW50KQog
ICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIFJ1
bnRpbWVNZXRob2Q6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUgUnVudGltZU1ldGhvZDo6
bGVuZ3RoR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTY4LDcgKzY5LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgUnVudGltZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgdGhpc1YKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRo
aXNPYmplY3QtPm1fbWV0aG9kLT5udW1QYXJhbWV0ZXJzKCkpKTsKIH0KIAotYm9vbCBSdW50aW1l
TWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3QpCitib29s
IFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
ICZzbG90KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUnVudGltZU1ldGhvZCog
dGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lTWV0aG9kKj4ob2JqZWN0KTsKQEAgLTEwMiwxOCAr
MTAzLDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxSdW50aW1l
TWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplCiAgICAgICAgIFJ1bnRpbWVPYmplY3Qq
IHJ1bnRpbWVPYmplY3QgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0Kj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7CiAgICAgICAgIGluc3RhbmNlID0gcnVudGltZU9iamVjdC0+Z2V0SW50ZXJuYWxJ
bnN0YW5jZSgpOwogICAgICAgICBpZiAoIWluc3RhbmNlKSAKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoUnVudGltZU9iamVjdDo6dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoY2Fs
bEZyYW1lLCBzY29wZSkpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShSdW50
aW1lT2JqZWN0Ojp0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2FsbGluZyBhIHJ1bnRpbWUgb2JqZWN0IG9mIGEg
cGx1Z2luIGVsZW1lbnQ/CiAgICAgICAgIGlmICh0aGlzVmFsdWUuaW5oZXJpdHM8SlNIVE1MRWxl
bWVudD4odm0pKQogICAgICAgICAgICAgaW5zdGFuY2UgPSBwbHVnaW5JbnN0YW5jZShqc0Nhc3Q8
SlNIVE1MRWxlbWVudCo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpLT53cmFwcGVkKCkpOwogICAgICAg
ICBpZiAoIWluc3RhbmNlKQotICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoY2Fs
bEZyYW1lLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKICAgICB9CiAgICAgQVNTRVJUKGluc3RhbmNlKTsKIAogICAgIGlu
c3RhbmNlLT5iZWdpbigpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZU1l
dGhvZChjYWxsRnJhbWUsIG1ldGhvZCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbnN0YW5jZS0+
aW52b2tlTWV0aG9kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBtZXRob2QpOwogICAgIGluc3Rh
bmNlLT5lbmQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCmluZGV4IGEyNDRiYWE4NGFlZTU5MTg3OTc4
M2VjODU2OGE1OTZhMWRjMDg5ZjEuLjY3NDJkZmJiODlhNDI5ZjExMTFkMTYxNDJmMWY1NDQxMTI3
YmQ2OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5oCkBAIC00NCw3ICs0
NCw3IEBAIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFJ1bnRpbWVNZXRob2QgOiBwdWJsaWMgSW50ZXJu
YWxGdW5jdGlvbiB7CiAgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwogICAgIH0K
ICAgICAKLSAgICBzdGF0aWMgUnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEJpbmRpbmdzOjpNZXRob2QqIG1ldGhvZCkKKyAgICBzdGF0aWMgUnVudGltZU1l
dGhvZCogY3JlYXRlKEpTR2xvYmFsT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQmluZGluZ3M6Ok1l
dGhvZCogbWV0aG9kKQogICAgIHsKICAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgICAgICBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UnVudGltZU1ldGhvZD4odm0uaGVhcCkpIFJ1bnRpbWVNZXRob2QoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIG1ldGhvZCk7CkBAIC03MCwxMCArNzAsMTAgQEAgY2xhc3MgV0VC
Q09SRV9FWFBPUlQgUnVudGltZU1ldGhvZCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKICAg
ICBSdW50aW1lTWV0aG9kKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQmluZGluZ3M6Ok1l
dGhvZCopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBjb25zdCBTdHJpbmcmKTsKIAot
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBsZW5ndGhH
ZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIGxlbmd0aEdldHRlcihKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoVk0mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfb2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAK
aW5kZXggN2QwZWEzNTZmMjNkMzdiYzZhNTU1M2Y5OGNjMmZiYjA0ZjIzODcwZS4uOGEwYWI0MzQ4
ODU0N2IxMWY3YmQ0MjkwY2Q1N2UzODk0YWZlZjczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9vYmplY3QuY3BwCkBAIC02Miw3NyArNjIsNzcgQEAgdm9pZCBSdW50aW1lT2JqZWN0
OjppbnZhbGlkYXRlKCkKICAgICBtX2luc3RhbmNlID0gbnVsbHB0cjsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgUnVudGltZU9iamVjdDo6ZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitF
bmNvZGVkSlNWYWx1ZSBSdW50aW1lT2JqZWN0OjpmYWxsYmFja09iamVjdEdldHRlcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBSdW50aW1lT2JqZWN0KiB0aGlzT2JqID0g
anNDYXN0PFJ1bnRpbWVPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
UmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IHRoaXNPYmotPm1faW5zdGFuY2U7CiAKICAgICBp
ZiAoIWluc3RhbmNlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxp
ZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpKTsK
ICAgICAKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKIAogICAgIENsYXNzICphQ2xhc3MgPSBpbnN0
YW5jZS0+Z2V0Q2xhc3MoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGFDbGFzcy0+ZmFsbGJhY2tP
YmplY3QoZXhlYywgaW5zdGFuY2UuZ2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBhQ2xhc3MtPmZhbGxiYWNrT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGluc3Rh
bmNlLmdldCgpLCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAgICAg
ICAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBSdW50aW1lT2JqZWN0OjpmaWVsZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK0VuY29kZWRK
U1ZhbHVlIFJ1bnRpbWVPYmplY3Q6OmZpZWxkR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7ICAgIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0g
bGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBSdW50aW1lT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PFJ1bnRp
bWVPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgUmVmUHRyPEluc3Rh
bmNlPiBpbnN0YW5jZSA9IHRoaXNPYmotPm1faW5zdGFuY2U7CiAKICAgICBpZiAoIWluc3RhbmNl
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9y
KGV4ZWMsIHNjb3BlKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZh
bGlkQWNjZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpKTsKICAgICAKICAgICBp
bnN0YW5jZS0+YmVnaW4oKTsKIAogICAgIENsYXNzICphQ2xhc3MgPSBpbnN0YW5jZS0+Z2V0Q2xh
c3MoKTsKICAgICBGaWVsZCogYUZpZWxkID0gYUNsYXNzLT5maWVsZE5hbWVkKHByb3BlcnR5TmFt
ZSwgaW5zdGFuY2UuZ2V0KCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYUZpZWxkLT52YWx1ZUZy
b21JbnN0YW5jZShleGVjLCBpbnN0YW5jZS5nZXQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBh
RmllbGQtPnZhbHVlRnJvbUluc3RhbmNlKGxleGljYWxHbG9iYWxPYmplY3QsIGluc3RhbmNlLmdl
dCgpKTsKICAgICAKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIFJ1bnRpbWVP
YmplY3Q6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIFJ1bnRpbWVP
YmplY3Q6Om1ldGhvZEdldHRlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBSdW50aW1lT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PFJ1bnRpbWVPYmplY3QqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IHRo
aXNPYmotPm1faW5zdGFuY2U7CiAKICAgICBpZiAoIWluc3RhbmNlKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpKTsKICAgICAKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsK
IAotICAgIEpTVmFsdWUgbWV0aG9kID0gaW5zdGFuY2UtPmdldE1ldGhvZChleGVjLCBwcm9wZXJ0
eU5hbWUpOworICAgIEpTVmFsdWUgbWV0aG9kID0gaW5zdGFuY2UtPmdldE1ldGhvZChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgaW5zdGFuY2UtPmVuZCgpOwogICAg
ICAgICAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtZXRob2QpOwogfQogCi1ib29s
IFJ1bnRpbWVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUgKmV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKK2Jvb2wgUnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFJ1bnRpbWVPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UnVudGltZU9iamVjdCo+KG9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2Jq
ZWN0LT5tX2luc3RhbmNlKSB7Ci0gICAgICAgIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMs
IHNjb3BlKTsKKyAgICAgICAgdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtMTYx
LDcgKzE2MSw3IEBAIGJvb2wgUnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSAqZXhlYywgUHJvcGVyCiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBUcnkgYSBmYWxsYmFjayBvYmplY3QuCi0gICAgICAgIGlmICghYUNsYXNzLT5mYWxsYmFj
a09iamVjdChleGVjLCBpbnN0YW5jZS5nZXQoKSwgcHJvcGVydHlOYW1lKS5pc1VuZGVmaW5lZCgp
KSB7CisgICAgICAgIGlmICghYUNsYXNzLT5mYWxsYmFja09iamVjdChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbnN0YW5jZS5nZXQoKSwgcHJvcGVydHlOYW1lKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAg
ICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSwgdGhpc09iamVjdC0+ZmFsbGJhY2tPYmplY3RHZXR0ZXIpOwogICAgICAgICAg
ICAgaW5zdGFuY2UtPmVuZCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzAsMTcg
KzE3MCwxNyBAQCBib29sIFJ1bnRpbWVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUgKmV4ZWMsIFByb3BlcgogICAgICAgICAKICAgICBpbnN0YW5j
ZS0+ZW5kKCk7CiAgICAgCi0gICAgcmV0dXJuIGluc3RhbmNlLT5nZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gaW5zdGFu
Y2UtPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIFJ1bnRpbWVPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBSdW50aW1lT2JqZWN0OjpwdXQo
SlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBSdW50aW1lT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFJ1bnRpbWVPYmplY3Qq
PihjZWxsKTsKICAgICBpZiAoIXRoaXNPYmplY3QtPm1faW5zdGFuY2UpIHsKLSAgICAgICAgdGhy
b3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd0ludmFsaWRB
Y2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgCkBAIC0xOTEsMzMgKzE5MSwzMyBAQCBib29sIFJ1bnRpbWVPYmpl
Y3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZQogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgRmllbGQgKmFGaWVsZCA9IGlu
c3RhbmNlLT5nZXRDbGFzcygpLT5maWVsZE5hbWVkKHByb3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0
KCkpOwogICAgIGlmIChhRmllbGQpCi0gICAgICAgIHJlc3VsdCA9IGFGaWVsZC0+c2V0VmFsdWVU
b0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLmdldCgpLCB2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoIWlu
c3RhbmNlLT5zZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSkpCi0gICAgICAgIHJlc3VsdCA9IGluc3RhbmNlLT5wdXQodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJlc3VsdCA9IGFGaWVsZC0+c2V0VmFs
dWVUb0luc3RhbmNlKGxleGljYWxHbG9iYWxPYmplY3QsIGluc3RhbmNlLmdldCgpLCB2YWx1ZSk7
CisgICAgZWxzZSBpZiAoIWluc3RhbmNlLT5zZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQobGV4aWNh
bEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSkpCisgICAgICAgIHJlc3VsdCA9IGlu
c3RhbmNlLT5wdXQodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7CiAKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotYm9vbCBSdW50aW1lT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpCitib29sIFJ1bnRpbWVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKQogewogICAgIC8vIENhbiBu
ZXZlciByZW1vdmUgYSBwcm9wZXJ0eSBvZiBhIFJ1bnRpbWVPYmplY3QuCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1KU1ZhbHVlIFJ1bnRpbWVPYmplY3Q6OmRlZmF1bHRWYWx1ZShjb25zdCBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgaGlu
dCkKK0pTVmFsdWUgUnVudGltZU9iamVjdDo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlIGhpbnQpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0g
PSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGNvbnN0IFJ1bnRpbWVPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8Y29uc3QgUnVudGltZU9iamVjdCo+KG9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0
LT5tX2luc3RhbmNlKQotICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhl
Yywgc2NvcGUpOworICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgIAogICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFu
Y2UgPSB0aGlzT2JqZWN0LT5tX2luc3RhbmNlOwogCiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBpbnN0YW5jZS0+ZGVmYXVsdFZhbHVlKGV4ZWMsIGhpbnQpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gaW5zdGFuY2UtPmRlZmF1bHRWYWx1ZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCBoaW50KTsKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsUnVudGltZU9iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQogICAgIEFTU0VS
VF9VTlVTRUQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCktPmluaGVyaXRzPFJ1
bnRpbWVPYmplY3Q+KGdsb2JhbE9iamVjdC0+dm0oKSkpOwogICAgIFJlZlB0cjxJbnN0YW5jZT4g
aW5zdGFuY2Uoc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdCo+KGNhbGxGcmFtZS0+anNDYWxsZWUo
KSktPmdldEludGVybmFsSW5zdGFuY2UoKSk7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBpbnN0YW5jZS0+aW52b2tlRGVmYXVsdE1ldGhvZChjYWxsRnJhbWUp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZURlZmF1bHRNZXRob2QoZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUpOwogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0yNTMsNyArMjUzLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFJ1bnRpbWVDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmEKICAgICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKHN0YXRpY19jYXN0
PFJ1bnRpbWVPYmplY3QqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpLT5nZXRJbnRlcm5hbEluc3Rh
bmNlKCkpOwogICAgIGluc3RhbmNlLT5iZWdpbigpOwogICAgIEFyZ0xpc3QgYXJncyhjYWxsRnJh
bWUpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZUNvbnN0cnVjdChjYWxs
RnJhbWUsIGFyZ3MpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW5zdGFuY2UtPmludm9rZUNvbnN0
cnVjdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgYXJncyk7CiAgICAgaW5zdGFuY2UtPmVuZCgp
OwogICAgIAogICAgIEFTU0VSVChyZXN1bHQpOwpAQCAtMjc0LDI3ICsyNzQsMjcgQEAgQ29uc3Ry
dWN0VHlwZSBSdW50aW1lT2JqZWN0OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCogY2VsbCwgQ29u
c3RydWN0RGF0YSYgY29uc3QKICAgICByZXR1cm4gQ29uc3RydWN0VHlwZTo6SG9zdDsKIH0KIAot
dm9pZCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSkKK3ZvaWQgUnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSkKIHsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgUnVudGlt
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4ob2JqZWN0KTsKICAg
ICBpZiAoIXRoaXNPYmplY3QtPm1faW5zdGFuY2UpIHsKLSAgICAgICAgdGhyb3dJbnZhbGlkQWNj
ZXNzRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlID0gdGhpc09iamVjdC0+bV9pbnN0YW5jZTsKICAg
ICAKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKLSAgICBpbnN0YW5jZS0+Z2V0UHJvcGVydHlOYW1l
cyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBpbnN0YW5jZS0+Z2V0UHJvcGVydHlOYW1lcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKICAgICBpbnN0YW5jZS0+ZW5kKCk7
CiB9CiAKLUV4Y2VwdGlvbiogUnVudGltZU9iamVjdDo6dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSkKK0V4Y2VwdGlvbiogUnVudGltZU9i
amVjdDo6dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFRocm93U2NvcGUmIHNjb3BlKQogewotICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIlRyeWluZyB0byBhY2Nl
c3Mgb2JqZWN0IGZyb20gZGVzdHJveWVkIHBsdWctaW4uIikpOworICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRyeWluZyB0byBhY2Nlc3Mgb2JqZWN0IGZyb20gZGVzdHJv
eWVkIHBsdWctaW4uIikpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9vYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVj
dC5oCmluZGV4IDhiZDE3ZWZiY2M4YjQ3NTE0NGM5ODQ2M2NiZDdmOTM2ZmM3MDk2OGEuLjU1MmNl
MzA0NWQzOGMwYjU4OTYyZTZmMmRiMjBjNTdjM2U2YWNjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX29iamVjdC5oCkBAIC00NiwyMCArNDYsMjAgQEAgY2xhc3MgV0VCQ09SRV9FWFBP
UlQgUnVudGltZU9iamVjdCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBK
U1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMg
SlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShK
U0NlbGwqLCBDYWxsRGF0YSYpOwogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIAogICAgIEluc3RhbmNlKiBnZXRJbnRl
cm5hbEluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQogCi0gICAg
c3RhdGljIEV4Y2VwdGlvbiogdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiwgVGhy
b3dTY29wZSYpOworICAgIHN0YXRpYyBFeGNlcHRpb24qIHRocm93SW52YWxpZEFjY2Vzc0Vycm9y
KEpTR2xvYmFsT2JqZWN0KiwgVGhyb3dTY29wZSYpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkBA
IC03OCw5ICs3OCw5IEBAIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFJ1bnRpbWVPYmplY3QgOiBwdWJs
aWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
IAogcHJpdmF0ZToKLSAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZmFsbGJhY2tPYmplY3RHZXR0
ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIGZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBtZXRob2RHZXR0ZXIoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIGZhbGxiYWNrT2JqZWN0R2V0dGVyKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGZpZWxkR2V0
dGVyKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CisgICAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIG1ldGhvZEdldHRlcihKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgUmVmUHRyPEluc3RhbmNlPiBtX2luc3Rh
bmNlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS90ZXN0YmluZGluZ3Mu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3RiaW5kaW5ncy5jcHAKaW5kZXggMTViZjQ4
Y2E2YWJkZWNhMGI0MTcyZWIwZGY4MDAyOGU4NzNiYWUyOC4uMGJmNzRlMTI4NTQ0YzlkNmYyM2Fj
YzJhY2VmMTM5ZGQ1NzBlNWU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rl
c3RiaW5kaW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3RiaW5kaW5ncy5j
cHAKQEAgLTM3NiwxMSArMzc2LDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
ICAgICAgICAgT2JqZWN0IGdsb2JhbChuZXcgR2xvYmFsSW1wKCkpOwogICAgICAgICBJbnRlcnBy
ZXRlciBpbnRlcnA7CiAgICAgICAgIGludGVycC5zZXRHbG9iYWxPYmplY3QoZ2xvYmFsKTsKLSAg
ICAgICAgRXhlY1N0YXRlICpleGVjID0gaW50ZXJwLmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBpbnRlcnAuZ2xvYmFsT2JqZWN0KCk7
CiAgICAgICAgIAogICAgICAgICBNeU9iamVjdCAqbXlPYmplY3QgPSAoTXlPYmplY3QgKilOUE5f
Q3JlYXRlT2JqZWN0IChteUZ1bmN0aW9uUHRycyk7CiAgICAgICAgIAotICAgICAgICBnbG9iYWwu
cHV0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgIm15SW50ZXJmYWNlIiksIElu
c3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KEluc3RhbmNlOjpDTGFuZ3VhZ2UsICh2b2lkICop
bXlPYmplY3QpKTsKKyAgICAgICAgZ2xvYmFsLnB1dChsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGxleGljYWxHbG9iYWxPYmplY3QsICJteUludGVyZmFjZSIpLCBJ
bnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChJbnN0YW5jZTo6Q0xhbmd1YWdlLCAodm9pZCAq
KW15T2JqZWN0KSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7
IGkrKykgewogICAgICAgICAgICAgY29uc3QgY2hhciAqY29kZSA9IHJlYWRKYXZhU2NyaXB0RnJv
bUZpbGUoYXJndltpXSk7CkBAIC0zOTEsMTQgKzM5MSwxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGNvbXAu
Y29tcGxUeXBlKCkgPT0gVGhyb3cpIHsKICAgICAgICAgICAgICAgICAgICAgVmFsdWUgZXhWYWwg
PSBjb21wLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gZXhW
YWwudG9XVEZTdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdl
ID0gZXhWYWwudG9XVEZTdHJpbmcobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gY3N0cmluZyA9IG1zZy5hc2NpaSgpOwogICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBtc2cgPSBjc3RyaW5nLmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgaW50
IGxpbmVubyA9IC0xOwogICAgICAgICAgICAgICAgICAgICBpZiAoZXhWYWwudHlwZSgpID09IE9i
amVjdFR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGxpbmVWYWwgPSBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KGV4VmFsKS5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAibGluZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGxpbmVWYWwgPSBP
YmplY3Q6OmR5bmFtaWNDYXN0KGV4VmFsKS5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAibGluZSIpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsaW5lVmFsLnR5cGUoKSA9PSBOdW1iZXJUeXBlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVubyA9IGludChsaW5lVmFsLnRvTnVtYmVyKGV4ZWMp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8gPSBpbnQobGluZVZhbC50b051
bWJlcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxpbmVubyAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCJFeGNlcHRpb24sIGxpbmUgJWQ6ICVzXG4iLGxpbmVubyxtc2cpOwpA
QCAtNDA3LDcgKzQwNyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJuVmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2hhciAqbXNnID0gY29tcC52YWx1ZSgpLnRvU3RyaW5nKGludGVycC5n
bG9iYWxFeGVjKCkpLmFzY2lpKCk7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1zZyA9IGNv
bXAudmFsdWUoKS50b1N0cmluZyhpbnRlcnAuZ2xvYmFsT2JqZWN0KCkpLmFzY2lpKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJSZXR1cm4gdmFsdWU6ICVzXG4iLG1zZyk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3Rlc3RiaW5kaW5ncy5tbSBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS90ZXN0
YmluZGluZ3MubW0KaW5kZXggMzUzMmIwYTY4OWFiY2Q2ZDJkN2UxMzViMTdiMGFjNjg1NTRlMzZj
Zi4uZmViMjFiNzJkMDJlNDA3MDhhNGE4NGQ1MWJlYzM3MTRmMzk1ZDk2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYnJpZGdlL3Rlc3RiaW5kaW5ncy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvdGVzdGJpbmRpbmdzLm1tCkBAIC0yNDQsMTEgKzI0NCwxMSBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgIE9iamVjdCBnbG9iYWwobmV3IEdsb2JhbElt
cCgpKTsKICAgICAgICAgSW50ZXJwcmV0ZXIgaW50ZXJwOwogICAgICAgICBpbnRlcnAuc2V0R2xv
YmFsT2JqZWN0KGdsb2JhbCk7Ci0gICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IGludGVycC5nbG9i
YWxFeGVjKCk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0g
aW50ZXJwLmdsb2JhbE9iamVjdCgpOwogICAgICAgICAKICAgICAgICAgTXlGaXJzdEludGVyZmFj
ZSAqbXlJbnRlcmZhY2UgPSBbW015Rmlyc3RJbnRlcmZhY2UgYWxsb2NdIGluaXRdOwogICAgICAg
ICAKLSAgICAgICAgZ2xvYmFsLnB1dChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMs
ICJteUludGVyZmFjZSIpLCBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChJbnN0YW5jZTo6
T2JqZWN0aXZlQ0xhbmd1YWdlLCAodm9pZCAqKW15SW50ZXJmYWNlKSk7CisgICAgICAgIGdsb2Jh
bC5wdXQobGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAibXlJbnRlcmZhY2UiKSwgSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmpl
Y3QoSW5zdGFuY2U6Ok9iamVjdGl2ZUNMYW5ndWFnZSwgKHZvaWQgKilteUludGVyZmFjZSkpOwog
ICAgICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmNvZGUgPSByZWFkSmF2YVNjcmlwdEZyb21GaWxlKGFyZ3ZbaV0p
OwpAQCAtMjU5LDEyICsyNTksMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09
IFRocm93KSB7CiAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGV4VmFsID0gY29tcC52YWx1ZSgp
OwotICAgICAgICAgICAgICAgICAgICBjaGFyICptc2cgPSBleFZhbC50b1N0cmluZyhleGVjKS5h
c2NpaSgpOworICAgICAgICAgICAgICAgICAgICBjaGFyICptc2cgPSBleFZhbC50b1N0cmluZyhs
ZXhpY2FsR2xvYmFsT2JqZWN0KS5hc2NpaSgpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbGlu
ZW5vID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIGlmIChleFZhbC50eXBlKCkgPT0gT2JqZWN0
VHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgbGluZVZhbCA9IE9iamVjdDo6
ZHluYW1pY0Nhc3QoZXhWYWwpLmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMs
ICJsaW5lIikpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgbGluZVZhbCA9IE9iamVj
dDo6ZHluYW1pY0Nhc3QoZXhWYWwpLmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGxleGljYWxHbG9iYWxPYmplY3QsICJsaW5lIikpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGxpbmVWYWwudHlwZSgpID09IE51bWJlclR5cGUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZW5vID0gaW50KGxpbmVWYWwudG9OdW1iZXIoZXhlYykpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubyA9IGludChsaW5lVmFsLnRvTnVtYmVy
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBpZiAobGluZW5vICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsIkV4Y2VwdGlvbiwgbGluZSAlZDogJXNcbiIsbGluZW5vLG1zZyk7CkBAIC0y
NzMsNyArMjczLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgICAg
ICAgICAgICAgICByZXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoY29tcC5jb21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICBjaGFyICptc2cgPSBjb21wLnZhbHVlKCkudG9TdHJpbmcoaW50ZXJwLmdsb2Jh
bEV4ZWMoKSkuYXNjaWkoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqbXNnID0gY29tcC52
YWx1ZSgpLnRvU3RyaW5nKGludGVycC5nbG9iYWxPYmplY3QoKSkuYXNjaWkoKTsKICAgICAgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIlJldHVybiB2YWx1ZTogJXNcbiIsbXNnKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCmluZGV4
IDczY2VlZjI1YTFlMTNlMWVkNzY0ODJlZWU2MDA2NmE4NmM4NzM0MDIuLjk0YjI1YWUyNjc3ZjI0
OTE4YTNjOGRkYjhlNjgwZWExMDI3MTc0ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCkBAIC01
NiwxMCArNTYsMTAgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5QVNDSUlXaXRoTm9VcHBlcmNh
c2UoY29uc3QgU3RyaW5nJiBkb21haW4pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAgICAgCi1zdGF0
aWMgRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIHN0ZDo6ZXJyb3JfY29kZT4gZ2V0U3RyaW5nTGlz
dChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBhcnJheU9iamVjdCkKK3N0YXRpYyBF
eHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgc3RkOjplcnJvcl9jb2RlPiBnZXRTdHJpbmdMaXN0KEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBKU09iamVjdCogYXJyYXlP
YmplY3QpCiB7CiAgICAgc3RhdGljIGNvbnN0IENvbnRlbnRFeHRlbnNpb25FcnJvciBlcnJvciA9
IENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDb25kaXRpb25MaXN0OwotICAgIFZN
JiB2bSA9IGV4ZWMudm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKCFh
cnJheU9iamVjdCB8fCAhaXNKU0FycmF5KGFycmF5T2JqZWN0KSkKQEAgLTY5LDExICs2OSwxMSBA
QCBzdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIHN0ZDo6ZXJyb3JfY29kZT4gZ2V0U3Ry
aW5nTGlzdChFeGVjU3RhdGUmIGV4ZWMsCiAgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5nczsKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSBh
cnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkpOworICAgICAgICBjb25zdCBKU1ZhbHVlIHZhbHVlID0g
YXJyYXktPmdldEluZGV4KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpKTsKICAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZS5pc1N0cmluZygpKQogICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yKTsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFN0cmluZyYg
c3RyaW5nID0gYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmZXhlYyk7CisgICAgICAgIGNvbnN0IFN0
cmluZyYgc3RyaW5nID0gYXNTdHJpbmcodmFsdWUpLT52YWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yKTsKICAgICAgICAgc3RyaW5ncy5hcHBlbmQoc3RyaW5nKTsKQEAg
LTgxLDkgKzgxLDkgQEAgc3RhdGljIEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBzdGQ6OmVycm9y
X2NvZGU+IGdldFN0cmluZ0xpc3QoRXhlY1N0YXRlJiBleGVjLAogICAgIHJldHVybiBzdHJpbmdz
OwogfQogCi1zdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIHN0ZDo6ZXJyb3JfY29kZT4g
Z2V0RG9tYWluTGlzdChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBhcnJheU9iamVj
dCkKK3N0YXRpYyBFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgc3RkOjplcnJvcl9jb2RlPiBnZXRE
b21haW5MaXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBKU09i
amVjdCogYXJyYXlPYmplY3QpCiB7Ci0gICAgYXV0byBzdHJpbmdzID0gZ2V0U3RyaW5nTGlzdChl
eGVjLCBhcnJheU9iamVjdCk7CisgICAgYXV0byBzdHJpbmdzID0gZ2V0U3RyaW5nTGlzdChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBhcnJheU9iamVjdCk7CiAgICAgaWYgKCFzdHJpbmdzLmhhc192YWx1
ZSgpKQogICAgICAgICByZXR1cm4gc3RyaW5nczsKICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IHN0
cmluZ3MudmFsdWUoKSkgewpAQCAtOTQsMTUgKzk0LDE1IEBAIHN0YXRpYyBFeHBlY3RlZDxWZWN0
b3I8U3RyaW5nPiwgc3RkOjplcnJvcl9jb2RlPiBnZXREb21haW5MaXN0KEV4ZWNTdGF0ZSYgZXhl
YywKICAgICByZXR1cm4gc3RyaW5nczsKIH0KIAotc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXRU
eXBlRmxhZ3MoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVlJiB0eXBlVmFsdWUsIFJlc291
cmNlRmxhZ3MmIGZsYWdzLCB1aW50MTZfdCAoKnN0cmluZ1RvVHlwZSkoY29uc3QgU3RyaW5nJikp
CitzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldFR5cGVGbGFncyhKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSYgdHlwZVZhbHVlLCBSZXNvdXJjZUZsYWdz
JiBmbGFncywgdWludDE2X3QgKCpzdHJpbmdUb1R5cGUpKGNvbnN0IFN0cmluZyYpKQogewotICAg
IFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYg
KCF0eXBlVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNvbnN0
IEpTT2JqZWN0KiBvYmplY3QgPSB0eXBlVmFsdWUudG9PYmplY3QoJmV4ZWMpOworICAgIGNvbnN0
IEpTT2JqZWN0KiBvYmplY3QgPSB0eXBlVmFsdWUudG9PYmplY3QoJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgaWYgKCFpc0pTQXJyYXko
b2JqZWN0KSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFs
aWRUcmlnZ2VyRmxhZ3NBcnJheTsKQEAgLTExMSwxMSArMTExLDExIEBAIHN0YXRpYyBzdGQ6OmVy
cm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdHlw
ZVZhbHVlLCBSCiAgICAgCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjb25z
dCBKU1ZhbHVlIHZhbHVlID0gYXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKKyAgICAgICAgY29u
c3QgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5LT5nZXRJbmRleCgmbGV4aWNhbEdsb2JhbE9iamVjdCwg
aSk7CiAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUpCiAgICAgICAgICAg
ICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE9iamVjdEluVHJpZ2dl
ckZsYWdzQXJyYXk7CiAgICAgICAgIAotICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZleGVjKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSB2YWx1ZS50b1dURlN0cmluZygm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIHVpbnQxNl90IHR5cGUgPSBzdHJpbmdUb1R5
cGUobmFtZSk7CiAgICAgICAgIGlmICghdHlwZSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkU3RyaW5nSW5UcmlnZ2VyRmxhZ3NBcnJheTsKQEAg
LTEyNiw1MyArMTI2LDUzIEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4
ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdHlwZVZhbHVlLCBSCiAgICAgcmV0dXJuIHsg
fTsKIH0KICAgICAKLXN0YXRpYyBFeHBlY3RlZDxUcmlnZ2VyLCBzdGQ6OmVycm9yX2NvZGU+IGxv
YWRUcmlnZ2VyKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QmIHJ1bGVPYmplY3QpCitz
dGF0aWMgRXhwZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlPiBsb2FkVHJpZ2dlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSlNPYmplY3QmIHJ1bGVPYmpl
Y3QpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBjb25zdCBKU1ZhbHVlIHRyaWdnZXJPYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRyaWdnZXIiKSk7CisgICAgY29uc3QgSlNW
YWx1ZSB0cmlnZ2VyT2JqZWN0ID0gcnVsZU9iamVjdC5nZXQoJmxleGljYWxHbG9iYWxPYmplY3Qs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0cmlnZ2VyIikpOwogICAgIGlmICghdHJpZ2dl
ck9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhdHJpZ2dlck9iamVjdC5pc09iamVjdCgp
KQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09OSW52YWxpZFRyaWdnZXIpOwogICAgIAotICAgIGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVyT2Jq
ZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJ1cmwtZmlsdGVyIikpOworICAgIGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJp
Z2dlck9iamVjdC5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ1cmwtZmlsdGVyIikpOwogICAgIGlmICghdXJsRmlsdGVyT2JqZWN0IHx8IHNjb3Bl
LmV4Y2VwdGlvbigpIHx8ICF1cmxGaWx0ZXJPYmplY3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRVUkxG
aWx0ZXJJblRyaWdnZXIpOwogCi0gICAgU3RyaW5nIHVybEZpbHRlciA9IGFzU3RyaW5nKHVybEZp
bHRlck9iamVjdCktPnZhbHVlKCZleGVjKTsKKyAgICBTdHJpbmcgdXJsRmlsdGVyID0gYXNTdHJp
bmcodXJsRmlsdGVyT2JqZWN0KS0+dmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGlm
ICh1cmxGaWx0ZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFVSTEZpbHRlckluVHJpZ2dlcik7CiAKICAg
ICBUcmlnZ2VyIHRyaWdnZXI7CiAgICAgdHJpZ2dlci51cmxGaWx0ZXIgPSB1cmxGaWx0ZXI7CiAK
LSAgICBjb25zdCBKU1ZhbHVlIHVybEZpbHRlckNhc2VWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidXJsLWZpbHRlci1pcy1jYXNlLXNl
bnNpdGl2ZSIpKTsKKyAgICBjb25zdCBKU1ZhbHVlIHVybEZpbHRlckNhc2VWYWx1ZSA9IHRyaWdn
ZXJPYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAidXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2ZSIpKTsKICAgICBpZiAodXJsRmlsdGVy
Q2FzZVZhbHVlICYmICFzY29wZS5leGNlcHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNlVmFsdWUuaXNC
b29sZWFuKCkpCi0gICAgICAgIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlID0gdXJs
RmlsdGVyQ2FzZVZhbHVlLnRvQm9vbGVhbigmZXhlYyk7CisgICAgICAgIHRyaWdnZXIudXJsRmls
dGVySXNDYXNlU2Vuc2l0aXZlID0gdXJsRmlsdGVyQ2FzZVZhbHVlLnRvQm9vbGVhbigmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIHRvcFVSTEZpbHRlckNhc2VWYWx1
ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
dG9wLXVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRpdmUiKSk7CisgICAgY29uc3QgSlNWYWx1ZSB0
b3BVUkxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRvcC11cmwtZmlsdGVyLWlzLWNhc2Ut
c2Vuc2l0aXZlIikpOwogICAgIGlmICh0b3BVUkxGaWx0ZXJDYXNlVmFsdWUgJiYgIXNjb3BlLmV4
Y2VwdGlvbigpICYmIHRvcFVSTEZpbHRlckNhc2VWYWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAg
dHJpZ2dlci50b3BVUkxDb25kaXRpb25Jc0Nhc2VTZW5zaXRpdmUgPSB0b3BVUkxGaWx0ZXJDYXNl
VmFsdWUudG9Cb29sZWFuKCZleGVjKTsKKyAgICAgICAgdHJpZ2dlci50b3BVUkxDb25kaXRpb25J
c0Nhc2VTZW5zaXRpdmUgPSB0b3BVUkxGaWx0ZXJDYXNlVmFsdWUudG9Cb29sZWFuKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKIAotICAgIGNvbnN0IEpTVmFsdWUgcmVzb3VyY2VUeXBlVmFsdWUgPSB0
cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInJlc291
cmNlLXR5cGUiKSk7CisgICAgY29uc3QgSlNWYWx1ZSByZXNvdXJjZVR5cGVWYWx1ZSA9IHRyaWdn
ZXJPYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAicmVzb3VyY2UtdHlwZSIpKTsKICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIHJl
c291cmNlVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgYXV0byB0eXBlRmxhZ3NFcnJv
ciA9IGdldFR5cGVGbGFncyhleGVjLCByZXNvdXJjZVR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywg
cmVhZFJlc291cmNlVHlwZSk7CisgICAgICAgIGF1dG8gdHlwZUZsYWdzRXJyb3IgPSBnZXRUeXBl
RmxhZ3MobGV4aWNhbEdsb2JhbE9iamVjdCwgcmVzb3VyY2VUeXBlVmFsdWUsIHRyaWdnZXIuZmxh
Z3MsIHJlYWRSZXNvdXJjZVR5cGUpOwogICAgICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCiAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQodHlwZUZsYWdzRXJyb3IpOwogICAgIH0gZWxz
ZSBpZiAoIXJlc291cmNlVHlwZVZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZs
YWdzQXJyYXkpOwogCi0gICAgY29uc3QgSlNWYWx1ZSBsb2FkVHlwZVZhbHVlID0gdHJpZ2dlck9i
amVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb2FkLXR5cGUiKSk7
CisgICAgY29uc3QgSlNWYWx1ZSBsb2FkVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmxl
eGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJsb2FkLXR5cGUi
KSk7CiAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiBsb2FkVHlwZVZhbHVlLmlzT2JqZWN0
KCkpIHsKLSAgICAgICAgYXV0byB0eXBlRmxhZ3NFcnJvciA9IGdldFR5cGVGbGFncyhleGVjLCBs
b2FkVHlwZVZhbHVlLCB0cmlnZ2VyLmZsYWdzLCByZWFkTG9hZFR5cGUpOworICAgICAgICBhdXRv
IHR5cGVGbGFnc0Vycm9yID0gZ2V0VHlwZUZsYWdzKGxleGljYWxHbG9iYWxPYmplY3QsIGxvYWRU
eXBlVmFsdWUsIHRyaWdnZXIuZmxhZ3MsIHJlYWRMb2FkVHlwZSk7CiAgICAgICAgIGlmICh0eXBl
RmxhZ3NFcnJvcikKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCh0eXBlRmxhZ3NF
cnJvcik7CiAgICAgfSBlbHNlIGlmICghbG9hZFR5cGVWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZFRyaWdnZXJGbGFnc0FycmF5KTsKIAotICAgIGNvbnN0IEpTVmFsdWUgaWZEb21haW5WYWx1
ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
aWYtZG9tYWluIikpOworICAgIGNvbnN0IEpTVmFsdWUgaWZEb21haW5WYWx1ZSA9IHRyaWdnZXJP
YmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAiaWYtZG9tYWluIikpOwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgaWZEb21haW5W
YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIGF1dG8gaWZEb21haW4gPSBnZXREb21haW5MaXN0
KGV4ZWMsIGFzT2JqZWN0KGlmRG9tYWluVmFsdWUpKTsKKyAgICAgICAgYXV0byBpZkRvbWFpbiA9
IGdldERvbWFpbkxpc3QobGV4aWNhbEdsb2JhbE9iamVjdCwgYXNPYmplY3QoaWZEb21haW5WYWx1
ZSkpOwogICAgICAgICBpZiAoIWlmRG9tYWluLmhhc192YWx1ZSgpKQogICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGlmRG9tYWluLmVycm9yKCkpOwogICAgICAgICB0cmlnZ2VyLmNv
bmRpdGlvbnMgPSBXVEZNb3ZlKGlmRG9tYWluLnZhbHVlKCkpOwpAQCAtMTgzLDExICsxODMsMTEg
QEAgc3RhdGljIEV4cGVjdGVkPFRyaWdnZXIsIHN0ZDo6ZXJyb3JfY29kZT4gbG9hZFRyaWdnZXIo
RXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU08KICAgICB9IGVsc2UgaWYgKCFpZkRvbWFpblZhbHVl
LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ29uZGl0aW9uTGlzdCk7CiAKLSAgICBjb25zdCBKU1Zh
bHVlIHVubGVzc0RvbWFpblZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJ1bmxlc3MtZG9tYWluIikpOworICAgIGNvbnN0IEpTVmFsdWUg
dW5sZXNzRG9tYWluVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInVubGVzcy1kb21haW4iKSk7CiAgICAgaWYg
KCFzY29wZS5leGNlcHRpb24oKSAmJiB1bmxlc3NEb21haW5WYWx1ZS5pc09iamVjdCgpKSB7CiAg
ICAgICAgIGlmICh0cmlnZ2VyLmNvbmRpdGlvblR5cGUgIT0gVHJpZ2dlcjo6Q29uZGl0aW9uVHlw
ZTo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05NdWx0aXBsZUNvbmRpdGlvbnMpOwotICAgICAgICBhdXRvIHVubGVzc0Rv
bWFpbiA9IGdldERvbWFpbkxpc3QoZXhlYywgYXNPYmplY3QodW5sZXNzRG9tYWluVmFsdWUpKTsK
KyAgICAgICAgYXV0byB1bmxlc3NEb21haW4gPSBnZXREb21haW5MaXN0KGxleGljYWxHbG9iYWxP
YmplY3QsIGFzT2JqZWN0KHVubGVzc0RvbWFpblZhbHVlKSk7CiAgICAgICAgIGlmICghdW5sZXNz
RG9tYWluLmhhc192YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHVu
bGVzc0RvbWFpbi5lcnJvcigpKTsKICAgICAgICAgdHJpZ2dlci5jb25kaXRpb25zID0gV1RGTW92
ZSh1bmxlc3NEb21haW4udmFsdWUoKSk7CkBAIC0xOTcsMTEgKzE5NywxMSBAQCBzdGF0aWMgRXhw
ZWN0ZWQ8VHJpZ2dlciwgc3RkOjplcnJvcl9jb2RlPiBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4
ZWMsIGNvbnN0IEpTTwogICAgIH0gZWxzZSBpZiAoIXVubGVzc0RvbWFpblZhbHVlLmlzVW5kZWZp
bmVkKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05JbnZhbGlkQ29uZGl0aW9uTGlzdCk7CiAKLSAgICBjb25zdCBKU1ZhbHVlIGlmVG9w
VVJMVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImlmLXRvcC11cmwiKSk7CisgICAgY29uc3QgSlNWYWx1ZSBpZlRvcFVSTFZhbHVlID0g
dHJpZ2dlck9iamVjdC5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJpZi10b3AtdXJsIikpOwogICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYg
aWZUb3BVUkxWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIGlmICh0cmlnZ2VyLmNvbmRpdGlv
blR5cGUgIT0gVHJpZ2dlcjo6Q29uZGl0aW9uVHlwZTo6Tm9uZSkKICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05NdWx0aXBsZUNvbmRp
dGlvbnMpOwotICAgICAgICBhdXRvIGlmVG9wVVJMID0gZ2V0U3RyaW5nTGlzdChleGVjLCBhc09i
amVjdChpZlRvcFVSTFZhbHVlKSk7CisgICAgICAgIGF1dG8gaWZUb3BVUkwgPSBnZXRTdHJpbmdM
aXN0KGxleGljYWxHbG9iYWxPYmplY3QsIGFzT2JqZWN0KGlmVG9wVVJMVmFsdWUpKTsKICAgICAg
ICAgaWYgKCFpZlRvcFVSTC5oYXNfdmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChpZlRvcFVSTC5lcnJvcigpKTsKICAgICAgICAgdHJpZ2dlci5jb25kaXRpb25zID0g
V1RGTW92ZShpZlRvcFVSTC52YWx1ZSgpKTsKQEAgLTIxMSwxMSArMjExLDExIEBAIHN0YXRpYyBF
eHBlY3RlZDxUcmlnZ2VyLCBzdGQ6OmVycm9yX2NvZGU+IGxvYWRUcmlnZ2VyKEV4ZWNTdGF0ZSYg
ZXhlYywgY29uc3QgSlNPCiAgICAgfSBlbHNlIGlmICghaWZUb3BVUkxWYWx1ZS5pc1VuZGVmaW5l
ZCgpKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OSW52YWxpZENvbmRpdGlvbkxpc3QpOwogCi0gICAgY29uc3QgSlNWYWx1ZSB1bmxlc3NU
b3BVUkxWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAidW5sZXNzLXRvcC11cmwiKSk7CisgICAgY29uc3QgSlNWYWx1ZSB1bmxlc3NUb3BV
UkxWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAidW5sZXNzLXRvcC11cmwiKSk7CiAgICAgaWYgKCFzY29wZS5l
eGNlcHRpb24oKSAmJiB1bmxlc3NUb3BVUkxWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIGlm
ICh0cmlnZ2VyLmNvbmRpdGlvblR5cGUgIT0gVHJpZ2dlcjo6Q29uZGl0aW9uVHlwZTo6Tm9uZSkK
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05NdWx0aXBsZUNvbmRpdGlvbnMpOwotICAgICAgICBhdXRvIHVubGVzc1RvcFVSTCA9IGdl
dFN0cmluZ0xpc3QoZXhlYywgYXNPYmplY3QodW5sZXNzVG9wVVJMVmFsdWUpKTsKKyAgICAgICAg
YXV0byB1bmxlc3NUb3BVUkwgPSBnZXRTdHJpbmdMaXN0KGxleGljYWxHbG9iYWxPYmplY3QsIGFz
T2JqZWN0KHVubGVzc1RvcFVSTFZhbHVlKSk7CiAgICAgICAgIGlmICghdW5sZXNzVG9wVVJMLmhh
c192YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHVubGVzc1RvcFVS
TC5lcnJvcigpKTsKICAgICAgICAgdHJpZ2dlci5jb25kaXRpb25zID0gV1RGTW92ZSh1bmxlc3NU
b3BVUkwudmFsdWUoKSk7CkBAIC0yNDAsMjAgKzI0MCwyMCBAQCBib29sIGlzVmFsaWRDU1NTZWxl
Y3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogICAgIHJldHVybiBzZWxlY3Rvckxpc3QuaXNW
YWxpZCgpOwogfQogCi1zdGF0aWMgRXhwZWN0ZWQ8T3B0aW9uYWw8QWN0aW9uPiwgc3RkOjplcnJv
cl9jb2RlPiBsb2FkQWN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QmIHJ1bGVP
YmplY3QpCitzdGF0aWMgRXhwZWN0ZWQ8T3B0aW9uYWw8QWN0aW9uPiwgc3RkOjplcnJvcl9jb2Rl
PiBsb2FkQWN0aW9uKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBK
U09iamVjdCYgcnVsZU9iamVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgVk0m
IHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGNvbnN0IEpTVmFsdWUgYWN0aW9uT2JqZWN0ID0gcnVs
ZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJhY3Rpb24iKSk7
CisgICAgY29uc3QgSlNWYWx1ZSBhY3Rpb25PYmplY3QgPSBydWxlT2JqZWN0LmdldCgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImFjdGlvbiIpKTsKICAg
ICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWFjdGlvbk9iamVjdC5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZEFjdGlvbik7CiAKLSAgICBjb25zdCBKU1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rpb25PYmpl
Y3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSIpKTsKKyAgICBj
b25zdCBKU1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rpb25PYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidHlwZSIpKTsKICAgICBpZiAoc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgIXR5cGVPYmplY3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb25U
eXBlKTsKIAotICAgIFN0cmluZyBhY3Rpb25UeXBlID0gYXNTdHJpbmcodHlwZU9iamVjdCktPnZh
bHVlKCZleGVjKTsKKyAgICBTdHJpbmcgYWN0aW9uVHlwZSA9IGFzU3RyaW5nKHR5cGVPYmplY3Qp
LT52YWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAi
YmxvY2siKQogICAgICAgICByZXR1cm4geyBBY3Rpb24oQWN0aW9uVHlwZTo6QmxvY2tMb2FkKSB9
OwpAQCAtMjYyLDExICsyNjIsMTEgQEAgc3RhdGljIEV4cGVjdGVkPE9wdGlvbmFsPEFjdGlvbj4s
IHN0ZDo6ZXJyb3JfY29kZT4gbG9hZEFjdGlvbihFeGVjU3RhdGUmIGV4ZWMsIGMKICAgICBpZiAo
YWN0aW9uVHlwZSA9PSAiYmxvY2stY29va2llcyIpCiAgICAgICAgIHJldHVybiB7IEFjdGlvbihB
Y3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMpIH07CiAgICAgaWYgKGFjdGlvblR5cGUgPT0gImNzcy1k
aXNwbGF5LW5vbmUiKSB7Ci0gICAgICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3Qu
Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2VsZWN0b3IiKSk7CisgICAg
ICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAic2VsZWN0b3IiKSk7CiAgICAgICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKICAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
Q1NTRGlzcGxheU5vbmVBY3Rpb25UeXBlKTsKIAotICAgICAgICBTdHJpbmcgc2VsZWN0b3JTdHJp
bmcgPSBhc1N0cmluZyhzZWxlY3RvciktPnZhbHVlKCZleGVjKTsKKyAgICAgICAgU3RyaW5nIHNl
bGVjdG9yU3RyaW5nID0gYXNTdHJpbmcoc2VsZWN0b3IpLT52YWx1ZSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgICAgIGlmICghaXNWYWxpZENTU1NlbGVjdG9yKHNlbGVjdG9yU3RyaW5nKSkg
ewogICAgICAgICAgICAgLy8gU2tpcCBydWxlcyB3aXRoIGludmFsaWQgc2VsZWN0b3JzIHRvIGJl
IGJhY2t3YXJkcy1jb21wYXRpYmxlLgogICAgICAgICAgICAgcmV0dXJuIHsgV1RGOjpudWxsb3B0
IH07CkBAIC0yNzYsMjEgKzI3NiwyMSBAQCBzdGF0aWMgRXhwZWN0ZWQ8T3B0aW9uYWw8QWN0aW9u
Piwgc3RkOjplcnJvcl9jb2RlPiBsb2FkQWN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgYwogICAgIGlm
IChhY3Rpb25UeXBlID09ICJtYWtlLWh0dHBzIikKICAgICAgICAgcmV0dXJuIHsgQWN0aW9uKEFj
dGlvblR5cGU6Ok1ha2VIVFRQUykgfTsKICAgICBpZiAoYWN0aW9uVHlwZSA9PSAibm90aWZ5Iikg
ewotICAgICAgICBKU1ZhbHVlIG5vdGlmaWNhdGlvbiA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJub3RpZmljYXRpb24iKSk7CisgICAgICAgIEpT
VmFsdWUgbm90aWZpY2F0aW9uID0gYWN0aW9uT2JqZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5vdGlmaWNhdGlvbiIpKTsKICAgICAgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFub3RpZmljYXRpb24uaXNTdHJpbmcoKSkKICAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05J
bnZhbGlkTm90aWZpY2F0aW9uKTsKLSAgICAgICAgcmV0dXJuIHsgQWN0aW9uKEFjdGlvblR5cGU6
Ok5vdGlmeSwgYXNTdHJpbmcobm90aWZpY2F0aW9uKS0+dmFsdWUoJmV4ZWMpKSB9OworICAgICAg
ICByZXR1cm4geyBBY3Rpb24oQWN0aW9uVHlwZTo6Tm90aWZ5LCBhc1N0cmluZyhub3RpZmljYXRp
b24pLT52YWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCkpIH07CiAgICAgfQogICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uVHlw
ZSk7CiB9CiAKLXN0YXRpYyBFeHBlY3RlZDxPcHRpb25hbDxDb250ZW50RXh0ZW5zaW9uUnVsZT4s
IHN0ZDo6ZXJyb3JfY29kZT4gbG9hZFJ1bGUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU09iamVj
dCYgcnVsZU9iamVjdCkKK3N0YXRpYyBFeHBlY3RlZDxPcHRpb25hbDxDb250ZW50RXh0ZW5zaW9u
UnVsZT4sIHN0ZDo6ZXJyb3JfY29kZT4gbG9hZFJ1bGUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIGNvbnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0KQogewotICAgIGF1dG8gdHJp
Z2dlciA9IGxvYWRUcmlnZ2VyKGV4ZWMsIHJ1bGVPYmplY3QpOworICAgIGF1dG8gdHJpZ2dlciA9
IGxvYWRUcmlnZ2VyKGxleGljYWxHbG9iYWxPYmplY3QsIHJ1bGVPYmplY3QpOwogICAgIGlmICgh
dHJpZ2dlci5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKHRyaWdn
ZXIuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGFjdGlvbiA9IGxvYWRBY3Rpb24oZXhlYywgcnVsZU9i
amVjdCk7CisgICAgYXV0byBhY3Rpb24gPSBsb2FkQWN0aW9uKGxleGljYWxHbG9iYWxPYmplY3Qs
IHJ1bGVPYmplY3QpOwogICAgIGlmICghYWN0aW9uLmhhc192YWx1ZSgpKQogICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoYWN0aW9uLmVycm9yKCkpOwogCkBAIC0zMDAsMTMgKzMwMCwxMyBA
QCBzdGF0aWMgRXhwZWN0ZWQ8T3B0aW9uYWw8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVy
cm9yX2NvZGU+IGxvYWRSdWxlKEV4ZWNTdAogICAgIHJldHVybiB7IFdURjo6bnVsbG9wdCB9Owog
fQogCi1zdGF0aWMgRXhwZWN0ZWQ8VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiwgc3RkOjpl
cnJvcl9jb2RlPiBsb2FkRW5jb2RlZFJ1bGVzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgU3RyaW5n
JiBydWxlSlNPTikKK3N0YXRpYyBFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+
LCBzdGQ6OmVycm9yX2NvZGU+IGxvYWRFbmNvZGVkUnVsZXMoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgcnVsZUpTT04pCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBGSVhNRTogSlNP
TlBhcnNlIHNob3VsZCByZXF1aXJlIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIGFuIEV4ZWNTdGF0ZS4K
LSAgICBjb25zdCBKU1ZhbHVlIGRlY29kZWRSdWxlcyA9IEpTT05QYXJzZSgmZXhlYywgcnVsZUpT
T04pOworICAgIGNvbnN0IEpTVmFsdWUgZGVjb2RlZFJ1bGVzID0gSlNPTlBhcnNlKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBydWxlSlNPTik7CiAKICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
IWRlY29kZWRSdWxlcykKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRl
bnNpb25FcnJvcjo6SlNPTkludmFsaWQpOwpAQCAtMzE0LDcgKzMxNCw3IEBAIHN0YXRpYyBFeHBl
Y3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9yX2NvZGU+IGxvYWRF
bmNvZGVkUnVsZXMoCiAgICAgaWYgKCFkZWNvZGVkUnVsZXMuaXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlRvcExldmVs
U3RydWN0dXJlTm90QW5PYmplY3QpOwogCi0gICAgY29uc3QgSlNPYmplY3QqIHRvcExldmVsT2Jq
ZWN0ID0gZGVjb2RlZFJ1bGVzLnRvT2JqZWN0KCZleGVjKTsKKyAgICBjb25zdCBKU09iamVjdCog
dG9wTGV2ZWxPYmplY3QgPSBkZWNvZGVkUnVsZXMudG9PYmplY3QoJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGlmICghdG9wTGV2ZWxPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BM
ZXZlbFN0cnVjdHVyZU5vdEFuT2JqZWN0KTsKICAgICAKQEAgLTMzMCwxNSArMzMwLDE1IEBAIHN0
YXRpYyBFeHBlY3RlZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9yX2Nv
ZGU+IGxvYWRFbmNvZGVkUnVsZXMoCiAgICAgaWYgKGxlbmd0aCA+IG1heFJ1bGVDb3VudCkKICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlRv
b01hbnlSdWxlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSB0b3BMZXZlbEFycmF5LT5nZXRJbmRleCgm
ZXhlYywgaSk7CisgICAgICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSB0b3BMZXZlbEFycmF5LT5n
ZXRJbmRleCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgaSk7CiAgICAgICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSB8fCAhdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE9iamVjdEluVG9wTGV2ZWxBcnJheSk7CiAK
LSAgICAgICAgY29uc3QgSlNPYmplY3QqIHJ1bGVPYmplY3QgPSB2YWx1ZS50b09iamVjdCgmZXhl
Yyk7CisgICAgICAgIGNvbnN0IEpTT2JqZWN0KiBydWxlT2JqZWN0ID0gdmFsdWUudG9PYmplY3Qo
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoIXJ1bGVPYmplY3QgfHwgc2NvcGUu
ZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFJ1bGUpOwogCi0gICAgICAgIGF1dG8gcnVsZSA9IGxv
YWRSdWxlKGV4ZWMsICpydWxlT2JqZWN0KTsKKyAgICAgICAgYXV0byBydWxlID0gbG9hZFJ1bGUo
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnJ1bGVPYmplY3QpOwogICAgICAgICBpZiAoIXJ1bGUuaGFz
X3ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocnVsZS5lcnJvcigp
KTsKICAgICAgICAgaWYgKHJ1bGUudmFsdWUoKSkKQEAgLTM1OCw4ICszNTgsOCBAQCBFeHBlY3Rl
ZDxWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+LCBzdGQ6OmVycm9yX2NvZGU+IHBhcnNlUnVs
ZUxpc3QoY29uc3QgU3RyaQogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0uZ2V0KCkpOwogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKCp2
bSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdm0sIGpzTnVsbCgpKSk7CiAKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBhdXRv
IHJ1bGVMaXN0ID0gbG9hZEVuY29kZWRSdWxlcygqZXhlYywgcnVsZUpTT04pOworICAgIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OworICAgIGF1dG8g
cnVsZUxpc3QgPSBsb2FkRW5jb2RlZFJ1bGVzKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBydWxlSlNP
Tik7CiAKICAgICB2bSA9IG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9TdWJ0bGVDcnlwdG8uY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0
by5jcHAKaW5kZXggN2RmYjNjZDM1Y2ExMzViYWUxMjE0ZGZmZWJmMWNlODk4YjU2YmZkNS4uZTBl
Y2NkZjllYzI5YzlkMTBmNTIwZmRiNmZlMWZjNjZmZDBhMjJhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL1N1YnRsZUNyeXB0by5jcHAKQEAgLTc4LDkgKzc4LDkgQEAgZW51bSBjbGFzcyBPcGVyYXRp
b25zIHsKICAgICBHZXRLZXlMZW5ndGgKIH07CiAKLXN0YXRpYyBFeGNlcHRpb25PcjxzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4+IG5vcm1hbGl6ZUNyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnMoRXhlY1N0YXRlJiwgV2ViQ29yZTo6U3VidGxlQ3J5cHRvOjpBbGdvcml0
aG1JZGVudGlmaWVyLCBPcGVyYXRpb25zKTsKK3N0YXRpYyBFeGNlcHRpb25PcjxzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4+IG5vcm1hbGl6ZUNyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMoSlNHbG9iYWxPYmplY3QmLCBXZWJDb3JlOjpTdWJ0bGVDcnlwdG86OkFsZ29y
aXRobUlkZW50aWZpZXIsIE9wZXJhdGlvbnMpOwogCi1zdGF0aWMgRXhjZXB0aW9uT3I8Q3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcj4gdG9IYXNoSWRlbnRpZmllcihFeGVjU3RhdGUmIHN0YXRlLCBT
dWJ0bGVDcnlwdG86OkFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcikKK3N0
YXRpYyBFeGNlcHRpb25PcjxDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyPiB0b0hhc2hJZGVudGlm
aWVyKEpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgU3VidGxlQ3J5cHRvOjpBbGdvcml0aG1JZGVudGlm
aWVyIGFsZ29yaXRobUlkZW50aWZpZXIpCiB7CiAgICAgYXV0byBkaWdlc3RQYXJhbXMgPSBub3Jt
YWxpemVDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzKHN0YXRlLCBhbGdvcml0aG1JZGVudGlmaWVy
LCBPcGVyYXRpb25zOjpEaWdlc3QpOwogICAgIGlmIChkaWdlc3RQYXJhbXMuaGFzRXhjZXB0aW9u
KCkpCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyPiB0b0hhc2hJZGVudGlmaWVyKEV4ZWNTdGF0ZSYgc3RhdGUsCiAgICAgcmV0dXJu
IGRpZ2VzdFBhcmFtcy5yZXR1cm5WYWx1ZSgpLT5pZGVudGlmaWVyOwogfQogCi1zdGF0aWMgRXhj
ZXB0aW9uT3I8c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+PiBub3Jt
YWxpemVDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzKEV4ZWNTdGF0ZSYgc3RhdGUsIFN1YnRsZUNy
eXB0bzo6QWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG1JZGVudGlmaWVyLCBPcGVyYXRpb25z
IG9wZXJhdGlvbikKK3N0YXRpYyBFeGNlcHRpb25PcjxzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4+IG5vcm1hbGl6ZUNyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMoSlNH
bG9iYWxPYmplY3QmIHN0YXRlLCBTdWJ0bGVDcnlwdG86OkFsZ29yaXRobUlkZW50aWZpZXIgYWxn
b3JpdGhtSWRlbnRpZmllciwgT3BlcmF0aW9ucyBvcGVyYXRpb24pCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBA
IC01MzgsNyArNTM4LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiBjcm9zc1RocmVhZENvcHlJbXBvcnRQYXJhbXMoY28KIAogLy8gTUFSSzogLSBF
eHBvc2VkIGZ1bmN0aW9ucy4KIAotdm9pZCBTdWJ0bGVDcnlwdG86OmVuY3J5cHQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBBbGdvcml0aG1JZGVudGlmaWVyJiYgYWxnb3JpdGhtSWRlbnRpZmllciwg
Q3J5cHRvS2V5JiBrZXksIEJ1ZmZlclNvdXJjZSYmIGRhdGFCdWZmZXJTb3VyY2UsIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3ZvaWQgU3VidGxlQ3J5cHRvOjplbmNyeXB0KEpTQzo6
SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBBbGdvcml0aG1JZGVudGlmaWVyJiYgYWxnb3JpdGhtSWRl
bnRpZmllciwgQ3J5cHRvS2V5JiBrZXksIEJ1ZmZlclNvdXJjZSYmIGRhdGFCdWZmZXJTb3VyY2Us
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICBhdXRvIHBhcmFtc09yRXhj
ZXB0aW9uID0gbm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyhzdGF0ZSwgV1RGTW92
ZShhbGdvcml0aG1JZGVudGlmaWVyKSwgT3BlcmF0aW9uczo6RW5jcnlwdCk7CiAgICAgaWYgKHBh
cmFtc09yRXhjZXB0aW9uLmhhc0V4Y2VwdGlvbigpKSB7CkBAIC01NzYsNyArNTc2LDcgQEAgdm9p
ZCBTdWJ0bGVDcnlwdG86OmVuY3J5cHQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBBbGdvcml0aG1J
ZGVudGlmaWVyJiYgYWxnb3JpdGgKICAgICBhbGdvcml0aG0tPmVuY3J5cHQoKnBhcmFtcywga2V5
LCBXVEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayksICpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fd29ya1F1ZXVlKTsKIH0KIAotdm9p
ZCBTdWJ0bGVDcnlwdG86OmRlY3J5cHQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBBbGdvcml0aG1J
ZGVudGlmaWVyJiYgYWxnb3JpdGhtSWRlbnRpZmllciwgQ3J5cHRvS2V5JiBrZXksIEJ1ZmZlclNv
dXJjZSYmIGRhdGFCdWZmZXJTb3VyY2UsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkK
K3ZvaWQgU3VidGxlQ3J5cHRvOjpkZWNyeXB0KEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBB
bGdvcml0aG1JZGVudGlmaWVyJiYgYWxnb3JpdGhtSWRlbnRpZmllciwgQ3J5cHRvS2V5JiBrZXks
IEJ1ZmZlclNvdXJjZSYmIGRhdGFCdWZmZXJTb3VyY2UsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYg
cHJvbWlzZSkKIHsKICAgICBhdXRvIHBhcmFtc09yRXhjZXB0aW9uID0gbm9ybWFsaXplQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycyhzdGF0ZSwgV1RGTW92ZShhbGdvcml0aG1JZGVudGlmaWVyKSwg
T3BlcmF0aW9uczo6RGVjcnlwdCk7CiAgICAgaWYgKHBhcmFtc09yRXhjZXB0aW9uLmhhc0V4Y2Vw
dGlvbigpKSB7CkBAIC02MTQsNyArNjE0LDcgQEAgdm9pZCBTdWJ0bGVDcnlwdG86OmRlY3J5cHQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBBbGdvcml0aG1JZGVudGlmaWVyJiYgYWxnb3JpdGgKICAg
ICBhbGdvcml0aG0tPmRlY3J5cHQoKnBhcmFtcywga2V5LCBXVEZNb3ZlKGRhdGEpLCBXVEZNb3Zl
KGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksIG1fd29ya1F1ZXVlKTsKIH0KIAotdm9pZCBTdWJ0bGVDcnlwdG86OnNpZ24oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBBbGdvcml0aG1JZGVudGlmaWVyJiYgYWxnb3JpdGhtSWRlbnRp
ZmllciwgQ3J5cHRvS2V5JiBrZXksIEJ1ZmZlclNvdXJjZSYmIGRhdGFCdWZmZXJTb3VyY2UsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3ZvaWQgU3VidGxlQ3J5cHRvOjpzaWduKEpT
Qzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBBbGdvcml0aG1JZGVudGlmaWVyJiYgYWxnb3JpdGht
SWRlbnRpZmllciwgQ3J5cHRvS2V5JiBrZXksIEJ1ZmZlclNvdXJjZSYmIGRhdGFCdWZmZXJTb3Vy
Y2UsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICBhdXRvIHBhcmFtc09y
RXhjZXB0aW9uID0gbm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyhzdGF0ZSwgV1RG
TW92ZShhbGdvcml0aG1JZGVudGlmaWVyKSwgT3BlcmF0aW9uczo6U2lnbik7CiAgICAgaWYgKHBh
cmFtc09yRXhjZXB0aW9uLmhhc0V4Y2VwdGlvbigpKSB7CkBAIC02NTIsNyArNjUyLDcgQEAgdm9p
ZCBTdWJ0bGVDcnlwdG86OnNpZ24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBBbGdvcml0aG1JZGVu
dGlmaWVyJiYgYWxnb3JpdGhtSWQKICAgICBhbGdvcml0aG0tPnNpZ24oKnBhcmFtcywga2V5LCBX
VEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFj
ayksICpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fd29ya1F1ZXVlKTsKIH0KIAotdm9pZCBT
dWJ0bGVDcnlwdG86OnZlcmlmeShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEFsZ29yaXRobUlkZW50
aWZpZXImJiBhbGdvcml0aG1JZGVudGlmaWVyLCBDcnlwdG9LZXkmIGtleSwgQnVmZmVyU291cmNl
JiYgc2lnbmF0dXJlQnVmZmVyU291cmNlLCBCdWZmZXJTb3VyY2UmJiBkYXRhQnVmZmVyU291cmNl
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit2b2lkIFN1YnRsZUNyeXB0bzo6dmVy
aWZ5KEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBBbGdvcml0aG1JZGVudGlmaWVyJiYgYWxn
b3JpdGhtSWRlbnRpZmllciwgQ3J5cHRvS2V5JiBrZXksIEJ1ZmZlclNvdXJjZSYmIHNpZ25hdHVy
ZUJ1ZmZlclNvdXJjZSwgQnVmZmVyU291cmNlJiYgZGF0YUJ1ZmZlclNvdXJjZSwgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiBwcm9taXNlKQogewogICAgIGF1dG8gcGFyYW1zT3JFeGNlcHRpb24gPSBu
b3JtYWxpemVDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzKHN0YXRlLCBXVEZNb3ZlKGFsZ29yaXRo
bUlkZW50aWZpZXIpLCBPcGVyYXRpb25zOjpWZXJpZnkpOwogICAgIGlmIChwYXJhbXNPckV4Y2Vw
dGlvbi5oYXNFeGNlcHRpb24oKSkgewpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgU3VidGxlQ3J5
cHRvOjp2ZXJpZnkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBBbGdvcml0aG1JZGVudGlmaWVyJiYg
YWxnb3JpdGhtCiAgICAgYWxnb3JpdGhtLT52ZXJpZnkoKnBhcmFtcywga2V5LCBXVEZNb3ZlKHNp
Z25hdHVyZSksIFdURk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2Vw
dGlvbkNhbGxiYWNrKSwgKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV93b3JrUXVldWUpOwog
fQogCi12b2lkIFN1YnRsZUNyeXB0bzo6ZGlnZXN0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgQWxn
b3JpdGhtSWRlbnRpZmllciYmIGFsZ29yaXRobUlkZW50aWZpZXIsIEJ1ZmZlclNvdXJjZSYmIGRh
dGFCdWZmZXJTb3VyY2UsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3ZvaWQgU3Vi
dGxlQ3J5cHRvOjpkaWdlc3QoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEFsZ29yaXRobUlk
ZW50aWZpZXImJiBhbGdvcml0aG1JZGVudGlmaWVyLCBCdWZmZXJTb3VyY2UmJiBkYXRhQnVmZmVy
U291cmNlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7CiAgICAgYXV0byBwYXJh
bXNPckV4Y2VwdGlvbiA9IG5vcm1hbGl6ZUNyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMoc3RhdGUs
IFdURk1vdmUoYWxnb3JpdGhtSWRlbnRpZmllciksIE9wZXJhdGlvbnM6OkRpZ2VzdCk7CiAgICAg
aWYgKHBhcmFtc09yRXhjZXB0aW9uLmhhc0V4Y2VwdGlvbigpKSB7CkBAIC03MTksNyArNzE5LDcg
QEAgdm9pZCBTdWJ0bGVDcnlwdG86OmRpZ2VzdChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEFsZ29y
aXRobUlkZW50aWZpZXImJiBhbGdvcml0aG0KICAgICBhbGdvcml0aG0tPmRpZ2VzdChXVEZNb3Zl
KGRhdGEpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fd29ya1F1ZXVlKTsKIH0KIAotdm9pZCBTdWJ0bGVD
cnlwdG86OmdlbmVyYXRlS2V5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgQWxnb3JpdGhtSWRlbnRp
ZmllciYmIGFsZ29yaXRobUlkZW50aWZpZXIsIGJvb2wgZXh0cmFjdGFibGUsIFZlY3RvcjxDcnlw
dG9LZXlVc2FnZT4mJiBrZXlVc2FnZXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkK
K3ZvaWQgU3VidGxlQ3J5cHRvOjpnZW5lcmF0ZUtleShKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0
ZSwgQWxnb3JpdGhtSWRlbnRpZmllciYmIGFsZ29yaXRobUlkZW50aWZpZXIsIGJvb2wgZXh0cmFj
dGFibGUsIFZlY3RvcjxDcnlwdG9LZXlVc2FnZT4mJiBrZXlVc2FnZXMsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICBhdXRvIHBhcmFtc09yRXhjZXB0aW9uID0gbm9ybWFs
aXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyhzdGF0ZSwgV1RGTW92ZShhbGdvcml0aG1JZGVu
dGlmaWVyKSwgT3BlcmF0aW9uczo6R2VuZXJhdGVLZXkpOwogICAgIGlmIChwYXJhbXNPckV4Y2Vw
dGlvbi5oYXNFeGNlcHRpb24oKSkgewpAQCAtNzY2LDcgKzc2Niw3IEBAIHZvaWQgU3VidGxlQ3J5
cHRvOjpnZW5lcmF0ZUtleShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEFsZ29yaXRobUlkZW50aWZp
ZXImJiBhbGdvCiAgICAgYWxnb3JpdGhtLT5nZW5lcmF0ZUtleSgqcGFyYW1zLCBleHRyYWN0YWJs
ZSwga2V5VXNhZ2VzQml0bWFwLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjayksICpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogfQogCi12b2lkIFN1YnRsZUNy
eXB0bzo6ZGVyaXZlS2V5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgQWxnb3JpdGhtSWRlbnRpZmll
ciYmIGFsZ29yaXRobUlkZW50aWZpZXIsIENyeXB0b0tleSYgYmFzZUtleSwgQWxnb3JpdGhtSWRl
bnRpZmllciYmIGRlcml2ZWRLZXlUeXBlLCBib29sIGV4dHJhY3RhYmxlLCBWZWN0b3I8Q3J5cHRv
S2V5VXNhZ2U+JiYga2V5VXNhZ2VzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit2
b2lkIFN1YnRsZUNyeXB0bzo6ZGVyaXZlS2V5KEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBB
bGdvcml0aG1JZGVudGlmaWVyJiYgYWxnb3JpdGhtSWRlbnRpZmllciwgQ3J5cHRvS2V5JiBiYXNl
S2V5LCBBbGdvcml0aG1JZGVudGlmaWVyJiYgZGVyaXZlZEtleVR5cGUsIGJvb2wgZXh0cmFjdGFi
bGUsIFZlY3RvcjxDcnlwdG9LZXlVc2FnZT4mJiBrZXlVc2FnZXMsIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcHJvbWlzZSkKIHsKICAgICBhdXRvIHBhcmFtc09yRXhjZXB0aW9uID0gbm9ybWFsaXpl
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyhzdGF0ZSwgV1RGTW92ZShhbGdvcml0aG1JZGVudGlm
aWVyKSwgT3BlcmF0aW9uczo6RGVyaXZlQml0cyk7CiAgICAgaWYgKHBhcmFtc09yRXhjZXB0aW9u
Lmhhc0V4Y2VwdGlvbigpKSB7CkBAIC04NDMsNyArODQzLDcgQEAgdm9pZCBTdWJ0bGVDcnlwdG86
OmRlcml2ZUtleShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEFsZ29yaXRobUlkZW50aWZpZXImJiBh
bGdvcmkKICAgICBhbGdvcml0aG0tPmRlcml2ZUJpdHMoKnBhcmFtcywgYmFzZUtleSwgbGVuZ3Ro
LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIG1fd29ya1F1ZXVlKTsKIH0KIAotdm9pZCBTdWJ0bGVDcnlwdG86
OmRlcml2ZUJpdHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBBbGdvcml0aG1JZGVudGlmaWVyJiYg
YWxnb3JpdGhtSWRlbnRpZmllciwgQ3J5cHRvS2V5JiBiYXNlS2V5LCB1bnNpZ25lZCBsZW5ndGgs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3ZvaWQgU3VidGxlQ3J5cHRvOjpkZXJp
dmVCaXRzKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBBbGdvcml0aG1JZGVudGlmaWVyJiYg
YWxnb3JpdGhtSWRlbnRpZmllciwgQ3J5cHRvS2V5JiBiYXNlS2V5LCB1bnNpZ25lZCBsZW5ndGgs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICBhdXRvIHBhcmFtc09yRXhj
ZXB0aW9uID0gbm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyhzdGF0ZSwgV1RGTW92
ZShhbGdvcml0aG1JZGVudGlmaWVyKSwgT3BlcmF0aW9uczo6RGVyaXZlQml0cyk7CiAgICAgaWYg
KHBhcmFtc09yRXhjZXB0aW9uLmhhc0V4Y2VwdGlvbigpKSB7CkBAIC04NzksNyArODc5LDcgQEAg
dm9pZCBTdWJ0bGVDcnlwdG86OmRlcml2ZUJpdHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBBbGdv
cml0aG1JZGVudGlmaWVyJiYgYWxnb3IKICAgICBhbGdvcml0aG0tPmRlcml2ZUJpdHMoKnBhcmFt
cywgYmFzZUtleSwgbGVuZ3RoLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjayksICpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fd29ya1F1ZXVlKTsKIH0KIAot
dm9pZCBTdWJ0bGVDcnlwdG86OmltcG9ydEtleShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEtleUZv
cm1hdCBmb3JtYXQsIEtleURhdGFWYXJpYW50JiYga2V5RGF0YVZhcmlhbnQsIEFsZ29yaXRobUlk
ZW50aWZpZXImJiBhbGdvcml0aG1JZGVudGlmaWVyLCBib29sIGV4dHJhY3RhYmxlLCBWZWN0b3I8
Q3J5cHRvS2V5VXNhZ2U+JiYga2V5VXNhZ2VzLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21p
c2UpCit2b2lkIFN1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0
YXRlLCBLZXlGb3JtYXQgZm9ybWF0LCBLZXlEYXRhVmFyaWFudCYmIGtleURhdGFWYXJpYW50LCBB
bGdvcml0aG1JZGVudGlmaWVyJiYgYWxnb3JpdGhtSWRlbnRpZmllciwgYm9vbCBleHRyYWN0YWJs
ZSwgVmVjdG9yPENyeXB0b0tleVVzYWdlPiYmIGtleVVzYWdlcywgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJiBwcm9taXNlKQogewogICAgIGF1dG8gcGFyYW1zT3JFeGNlcHRpb24gPSBub3JtYWxpemVD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzKHN0YXRlLCBXVEZNb3ZlKGFsZ29yaXRobUlkZW50aWZp
ZXIpLCBPcGVyYXRpb25zOjpJbXBvcnRLZXkpOwogICAgIGlmIChwYXJhbXNPckV4Y2VwdGlvbi5o
YXNFeGNlcHRpb24oKSkgewpAQCAtOTY3LDcgKzk2Nyw3IEBAIHZvaWQgU3VidGxlQ3J5cHRvOjpl
eHBvcnRLZXkoS2V5Rm9ybWF0IGZvcm1hdCwgQ3J5cHRvS2V5JiBrZXksIFJlZjxEZWZlcnJlZFBy
b21pCiAgICAgYWxnb3JpdGhtLT5leHBvcnRLZXkoZm9ybWF0LCBrZXksIFdURk1vdmUoY2FsbGJh
Y2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgU3VidGxlQ3J5cHRv
Ojp3cmFwS2V5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgS2V5Rm9ybWF0IGZvcm1hdCwgQ3J5cHRv
S2V5JiBrZXksIENyeXB0b0tleSYgd3JhcHBpbmdLZXksIEFsZ29yaXRobUlkZW50aWZpZXImJiB3
cmFwQWxnb3JpdGhtSWRlbnRpZmllciwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQor
dm9pZCBTdWJ0bGVDcnlwdG86OndyYXBLZXkoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEtl
eUZvcm1hdCBmb3JtYXQsIENyeXB0b0tleSYga2V5LCBDcnlwdG9LZXkmIHdyYXBwaW5nS2V5LCBB
bGdvcml0aG1JZGVudGlmaWVyJiYgd3JhcEFsZ29yaXRobUlkZW50aWZpZXIsIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYgcHJvbWlzZSkKIHsKICAgICBib29sIGlzRW5jcnlwdGlvbiA9IGZhbHNlOwog
CkBAIC0xMDI1LDggKzEwMjUsOCBAQCB2b2lkIFN1YnRsZUNyeXB0bzo6d3JhcEtleShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEtleUZvcm1hdCBmb3JtYXQsIENyeXB0b0tleSYgawogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5
Rm9ybWF0OjpKd2s6IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnRpbmcg
dG8gSlMganVzdCB0byBKU09OLVN0cmluZ2lmeSBzZWVtcyBpbmVmZmljaWVudC4gV2Ugc2hvdWxk
IGZpbmQgYSB3YXkgdG8gZ28gZGlyZWN0bHkgZnJvbSB0aGUgc3RydWN0IHRvIEpTT04uCi0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gandrID0gdG9KUzxJRExEaWN0aW9uYXJ5PEpzb25XZWJLZXk+
PigqKHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpLCAqKHByb21pc2UtPmds
b2JhbE9iamVjdCgpKSwgV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIFN0cmluZyBqd2tTdHJpbmcgPSBKU09OU3RyaW5naWZ5KHByb21pc2Ut
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGp3aywgMCk7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gandrID0gdG9KUzxJRExEaWN0aW9uYXJ5PEpzb25XZWJLZXk+PigqKHByb21pc2Ut
Pmdsb2JhbE9iamVjdCgpKSwgKihwcm9taXNlLT5nbG9iYWxPYmplY3QoKSksIFdURk1vdmUoV1RG
OjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgandr
U3RyaW5nID0gSlNPTlN0cmluZ2lmeShwcm9taXNlLT5nbG9iYWxPYmplY3QoKSwgandrLCAwKTsK
ICAgICAgICAgICAgICAgICAgICAgQ1N0cmluZyBqd2tVdGY4U3RyaW5nID0gandrU3RyaW5nLnV0
ZjgoU3RyaWN0Q29udmVyc2lvbik7CiAgICAgICAgICAgICAgICAgICAgIGJ5dGVzLmFwcGVuZChq
d2tVdGY4U3RyaW5nLmRhdGEoKSwgandrVXRmOFN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMTA2Miw3ICsxMDYyLDcgQEAgdm9pZCBTdWJ0bGVDcnlwdG86OndyYXBLZXko
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBLZXlGb3JtYXQgZm9ybWF0LCBDcnlwdG9LZXkmIGsKICAg
ICBleHBvcnRBbGdvcml0aG0tPmV4cG9ydEtleShmb3JtYXQsIGtleSwgV1RGTW92ZShjYWxsYmFj
ayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spKTsKIH0KIAotdm9pZCBTdWJ0bGVDcnlwdG86
OnVud3JhcEtleShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEtleUZvcm1hdCBmb3JtYXQsIEJ1ZmZl
clNvdXJjZSYmIHdyYXBwZWRLZXlCdWZmZXJTb3VyY2UsIENyeXB0b0tleSYgdW53cmFwcGluZ0tl
eSwgQWxnb3JpdGhtSWRlbnRpZmllciYmIHVud3JhcEFsZ29yaXRobUlkZW50aWZpZXIsIEFsZ29y
aXRobUlkZW50aWZpZXImJiB1bndyYXBwZWRLZXlBbGdvcml0aG1JZGVudGlmaWVyLCBib29sIGV4
dHJhY3RhYmxlLCBWZWN0b3I8Q3J5cHRvS2V5VXNhZ2U+JiYga2V5VXNhZ2VzLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmIHByb21pc2UpCit2b2lkIFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KEpTQzo6
SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBLZXlGb3JtYXQgZm9ybWF0LCBCdWZmZXJTb3VyY2UmJiB3
cmFwcGVkS2V5QnVmZmVyU291cmNlLCBDcnlwdG9LZXkmIHVud3JhcHBpbmdLZXksIEFsZ29yaXRo
bUlkZW50aWZpZXImJiB1bndyYXBBbGdvcml0aG1JZGVudGlmaWVyLCBBbGdvcml0aG1JZGVudGlm
aWVyJiYgdW53cmFwcGVkS2V5QWxnb3JpdGhtSWRlbnRpZmllciwgYm9vbCBleHRyYWN0YWJsZSwg
VmVjdG9yPENyeXB0b0tleVVzYWdlPiYmIGtleVVzYWdlcywgUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwcm9taXNlKQogewogICAgIGF1dG8gd3JhcHBlZEtleSA9IGNvcHlUb1ZlY3RvcihXVEZNb3Zl
KHdyYXBwZWRLZXlCdWZmZXJTb3VyY2UpKTsKIApAQCAtMTEyNyw3ICsxMTI3LDcgQEAgdm9pZCBT
dWJ0bGVDcnlwdG86OnVud3JhcEtleShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEtleUZvcm1hdCBm
b3JtYXQsIEJ1ZmZlclNvdXIKICAgICAgICAgICAgICAgICAgICAga2V5RGF0YSA9IGJ5dGVzOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFN1YnRsZUNy
eXB0bzo6S2V5Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhdGUg
PSAqKHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvJiBzdGF0ZSA9ICoocHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCkpOwogICAgICAg
ICAgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgICAgICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L1N1YnRsZUNyeXB0by5oCmluZGV4IDM1YjE3YWVmNTk2OWRhODNmMWFmNzNkYjk0MzMxNmM5NTUx
Y2VmZTAuLjY3MmYwNWUzNDMzOWViMDljMzU1YmU1YzUzNTU2NThmYjFjNmY4MTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmgKQEAgLTQwLDcgKzQwLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIENh
bGxGcmFtZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNjMsMTggKzYyLDE4IEBAIGNsYXNzIFN1YnRsZUNyeXB0byA6IHB1YmxpYyBD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciwgcHVibGljIFJlZkNvdW50ZWQ8U3VidGxlCiAgICAg
dXNpbmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09i
amVjdD4sIFN0cmluZz47CiAgICAgdXNpbmcgS2V5RGF0YVZhcmlhbnQgPSBWYXJpYW50PFJlZlB0
cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgSnNvbldl
YktleT47CiAKLSAgICB2b2lkIGVuY3J5cHQoSlNDOjpFeGVjU3RhdGUmLCBBbGdvcml0aG1JZGVu
dGlmaWVyJiYsIENyeXB0b0tleSYsIEJ1ZmZlclNvdXJjZSYmIGRhdGEsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYpOwotICAgIHZvaWQgZGVjcnlwdChKU0M6OkV4ZWNTdGF0ZSYsIEFsZ29yaXRobUlk
ZW50aWZpZXImJiwgQ3J5cHRvS2V5JiwgQnVmZmVyU291cmNlJiYgZGF0YSwgUmVmPERlZmVycmVk
UHJvbWlzZT4mJik7Ci0gICAgdm9pZCBzaWduKEpTQzo6RXhlY1N0YXRlJiwgQWxnb3JpdGhtSWRl
bnRpZmllciYmLCBDcnlwdG9LZXkmLCBCdWZmZXJTb3VyY2UmJiBkYXRhLCBSZWY8RGVmZXJyZWRQ
cm9taXNlPiYmKTsKLSAgICB2b2lkIHZlcmlmeShKU0M6OkV4ZWNTdGF0ZSYsIEFsZ29yaXRobUlk
ZW50aWZpZXImJiwgQ3J5cHRvS2V5JiwgQnVmZmVyU291cmNlJiYgc2lnbmF0dXJlLCBCdWZmZXJT
b3VyY2UmJiBkYXRhLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKLSAgICB2b2lkIGRpZ2VzdChK
U0M6OkV4ZWNTdGF0ZSYsIEFsZ29yaXRobUlkZW50aWZpZXImJiwgQnVmZmVyU291cmNlJiYgZGF0
YSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7Ci0gICAgdm9pZCBnZW5lcmF0ZUtleShKU0M6OkV4
ZWNTdGF0ZSYsIEFsZ29yaXRobUlkZW50aWZpZXImJiwgYm9vbCBleHRyYWN0YWJsZSwgVmVjdG9y
PENyeXB0b0tleVVzYWdlPiYmIGtleVVzYWdlcywgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7Ci0g
ICAgdm9pZCBkZXJpdmVLZXkoSlNDOjpFeGVjU3RhdGUmLCBBbGdvcml0aG1JZGVudGlmaWVyJiYs
IENyeXB0b0tleSYgYmFzZUtleSwgQWxnb3JpdGhtSWRlbnRpZmllciYmIGRlcml2ZWRLZXlUeXBl
LCBib29sIGV4dHJhY3RhYmxlLCBWZWN0b3I8Q3J5cHRvS2V5VXNhZ2U+JiYsIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYpOwotICAgIHZvaWQgZGVyaXZlQml0cyhKU0M6OkV4ZWNTdGF0ZSYsIEFsZ29y
aXRobUlkZW50aWZpZXImJiwgQ3J5cHRvS2V5JiBiYXNlS2V5LCB1bnNpZ25lZCBsZW5ndGgsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYpOwotICAgIHZvaWQgaW1wb3J0S2V5KEpTQzo6RXhlY1N0YXRl
JiwgS2V5Rm9ybWF0LCBLZXlEYXRhVmFyaWFudCYmLCBBbGdvcml0aG1JZGVudGlmaWVyJiYsIGJv
b2wgZXh0cmFjdGFibGUsIFZlY3RvcjxDcnlwdG9LZXlVc2FnZT4mJiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7CisgICAgdm9pZCBlbmNyeXB0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBBbGdvcml0
aG1JZGVudGlmaWVyJiYsIENyeXB0b0tleSYsIEJ1ZmZlclNvdXJjZSYmIGRhdGEsIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYpOworICAgIHZvaWQgZGVjcnlwdChKU0M6OkpTR2xvYmFsT2JqZWN0Jiwg
QWxnb3JpdGhtSWRlbnRpZmllciYmLCBDcnlwdG9LZXkmLCBCdWZmZXJTb3VyY2UmJiBkYXRhLCBS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKKyAgICB2b2lkIHNpZ24oSlNDOjpKU0dsb2JhbE9iamVj
dCYsIEFsZ29yaXRobUlkZW50aWZpZXImJiwgQ3J5cHRvS2V5JiwgQnVmZmVyU291cmNlJiYgZGF0
YSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CisgICAgdm9pZCB2ZXJpZnkoSlNDOjpKU0dsb2Jh
bE9iamVjdCYsIEFsZ29yaXRobUlkZW50aWZpZXImJiwgQ3J5cHRvS2V5JiwgQnVmZmVyU291cmNl
JiYgc2lnbmF0dXJlLCBCdWZmZXJTb3VyY2UmJiBkYXRhLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYm
KTsKKyAgICB2b2lkIGRpZ2VzdChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgQWxnb3JpdGhtSWRlbnRp
ZmllciYmLCBCdWZmZXJTb3VyY2UmJiBkYXRhLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKKyAg
ICB2b2lkIGdlbmVyYXRlS2V5KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBBbGdvcml0aG1JZGVudGlm
aWVyJiYsIGJvb2wgZXh0cmFjdGFibGUsIFZlY3RvcjxDcnlwdG9LZXlVc2FnZT4mJiBrZXlVc2Fn
ZXMsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOworICAgIHZvaWQgZGVyaXZlS2V5KEpTQzo6SlNH
bG9iYWxPYmplY3QmLCBBbGdvcml0aG1JZGVudGlmaWVyJiYsIENyeXB0b0tleSYgYmFzZUtleSwg
QWxnb3JpdGhtSWRlbnRpZmllciYmIGRlcml2ZWRLZXlUeXBlLCBib29sIGV4dHJhY3RhYmxlLCBW
ZWN0b3I8Q3J5cHRvS2V5VXNhZ2U+JiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOworICAgIHZv
aWQgZGVyaXZlQml0cyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgQWxnb3JpdGhtSWRlbnRpZmllciYm
LCBDcnlwdG9LZXkmIGJhc2VLZXksIHVuc2lnbmVkIGxlbmd0aCwgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJik7CisgICAgdm9pZCBpbXBvcnRLZXkoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEtleUZvcm1h
dCwgS2V5RGF0YVZhcmlhbnQmJiwgQWxnb3JpdGhtSWRlbnRpZmllciYmLCBib29sIGV4dHJhY3Rh
YmxlLCBWZWN0b3I8Q3J5cHRvS2V5VXNhZ2U+JiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwog
ICAgIHZvaWQgZXhwb3J0S2V5KEtleUZvcm1hdCwgQ3J5cHRvS2V5JiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7Ci0gICAgdm9pZCB3cmFwS2V5KEpTQzo6RXhlY1N0YXRlJiwgS2V5Rm9ybWF0LCBD
cnlwdG9LZXkmLCBDcnlwdG9LZXkmIHdyYXBwaW5nS2V5LCBBbGdvcml0aG1JZGVudGlmaWVyJiYg
d3JhcEFsZ29yaXRobSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7Ci0gICAgdm9pZCB1bndyYXBL
ZXkoSlNDOjpFeGVjU3RhdGUmLCBLZXlGb3JtYXQsIEJ1ZmZlclNvdXJjZSYmIHdyYXBwZWRLZXks
IENyeXB0b0tleSYgdW53cmFwcGluZ0tleSwgQWxnb3JpdGhtSWRlbnRpZmllciYmIHVud3JhcEFs
Z29yaXRobSwgQWxnb3JpdGhtSWRlbnRpZmllciYmIHVud3JhcHBlZEtleUFsZ29yaXRobSwgYm9v
bCBleHRyYWN0YWJsZSwgVmVjdG9yPENyeXB0b0tleVVzYWdlPiYmLCBSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmKTsKKyAgICB2b2lkIHdyYXBLZXkoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEtleUZvcm1h
dCwgQ3J5cHRvS2V5JiwgQ3J5cHRvS2V5JiB3cmFwcGluZ0tleSwgQWxnb3JpdGhtSWRlbnRpZmll
ciYmIHdyYXBBbGdvcml0aG0sIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOworICAgIHZvaWQgdW53
cmFwS2V5KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBLZXlGb3JtYXQsIEJ1ZmZlclNvdXJjZSYmIHdy
YXBwZWRLZXksIENyeXB0b0tleSYgdW53cmFwcGluZ0tleSwgQWxnb3JpdGhtSWRlbnRpZmllciYm
IHVud3JhcEFsZ29yaXRobSwgQWxnb3JpdGhtSWRlbnRpZmllciYmIHVud3JhcHBlZEtleUFsZ29y
aXRobSwgYm9vbCBleHRyYWN0YWJsZSwgVmVjdG9yPENyeXB0b0tleVVzYWdlPiYmLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTdWJ0bGVDcnlwdG8o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL1N1YnRsZUNyeXB0by5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRv
LmlkbAppbmRleCBlZjFiMDFiYjI5NWNlOWE3OTBmOGU3Zjk0ODNmY2NkYzVhMzliMjgyLi45YTVj
ZDVhOGYyOGYwZjZkZWNlNTkxNzRkZTc1NmRhMDEzMjdkYTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vU3VidGxlQ3J5cHRvLmlkbApAQCAtMzIsMTYgKzMyLDE2IEBAIHR5cGVkZWYgKG9iamVjdCBv
ciBET01TdHJpbmcpIEFsZ29yaXRobUlkZW50aWZpZXI7CiAgICAgRXhwb3NlZD0oV2luZG93LFdv
cmtlciksCiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwKIF0gaW50ZXJmYWNlIFN1YnRsZUNyeXB0byB7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZV0g
UHJvbWlzZTxhbnk+IGVuY3J5cHQoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIENyeXB0
b0tleSBrZXksIEJ1ZmZlclNvdXJjZSBkYXRhKTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlXSBQ
cm9taXNlPGFueT4gZGVjcnlwdChBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgQ3J5cHRv
S2V5IGtleSwgQnVmZmVyU291cmNlIGRhdGEpOwotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGVdIFBy
b21pc2U8YW55PiBzaWduKEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBDcnlwdG9LZXkg
a2V5LCBCdWZmZXJTb3VyY2UgZGF0YSk7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZV0gUHJvbWlz
ZTxhbnk+IHZlcmlmeShBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgQ3J5cHRvS2V5IGtl
eSwgQnVmZmVyU291cmNlIHNpZ25hdHVyZSwgQnVmZmVyU291cmNlIGRhdGEpOwotICAgIFtDYWxs
V2l0aD1FeGVjU3RhdGVdIFByb21pc2U8YW55PiBkaWdlc3QoQWxnb3JpdGhtSWRlbnRpZmllciBh
bGdvcml0aG0sIEJ1ZmZlclNvdXJjZSBkYXRhKTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlXSBQ
cm9taXNlPGFueT4gZ2VuZXJhdGVLZXkoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIGJv
b2xlYW4gZXh0cmFjdGFibGUsIHNlcXVlbmNlPENyeXB0b0tleVVzYWdlPiBrZXlVc2FnZXMpOwot
ICAgIFtDYWxsV2l0aD1FeGVjU3RhdGVdIFByb21pc2U8YW55PiBkZXJpdmVLZXkoQWxnb3JpdGht
SWRlbnRpZmllciBhbGdvcml0aG0sIENyeXB0b0tleSBiYXNlS2V5LCBBbGdvcml0aG1JZGVudGlm
aWVyIGRlcml2ZWRLZXlUeXBlLCBib29sZWFuIGV4dHJhY3RhYmxlLCBzZXF1ZW5jZTxDcnlwdG9L
ZXlVc2FnZT4ga2V5VXNhZ2VzKTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlXSBQcm9taXNlPEFy
cmF5QnVmZmVyPiBkZXJpdmVCaXRzKEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBDcnlw
dG9LZXkgYmFzZUtleSwgdW5zaWduZWQgbG9uZyBsZW5ndGgpOwotICAgIFtDYWxsV2l0aD1FeGVj
U3RhdGVdIFByb21pc2U8Q3J5cHRvS2V5PiBpbXBvcnRLZXkoS2V5Rm9ybWF0IGZvcm1hdCwgKEJ1
ZmZlclNvdXJjZSBvciBKc29uV2ViS2V5KSBrZXlEYXRhLCBBbGdvcml0aG1JZGVudGlmaWVyIGFs
Z29yaXRobSwgYm9vbGVhbiBleHRyYWN0YWJsZSwgc2VxdWVuY2U8Q3J5cHRvS2V5VXNhZ2U+IGtl
eVVzYWdlcyk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdF0gUHJvbWlzZTxhbnk+IGVuY3J5
cHQoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIENyeXB0b0tleSBrZXksIEJ1ZmZlclNv
dXJjZSBkYXRhKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSBQcm9taXNlPGFueT4gZGVj
cnlwdChBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgQ3J5cHRvS2V5IGtleSwgQnVmZmVy
U291cmNlIGRhdGEpOworICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3RdIFByb21pc2U8YW55PiBz
aWduKEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBDcnlwdG9LZXkga2V5LCBCdWZmZXJT
b3VyY2UgZGF0YSk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdF0gUHJvbWlzZTxhbnk+IHZl
cmlmeShBbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgQ3J5cHRvS2V5IGtleSwgQnVmZmVy
U291cmNlIHNpZ25hdHVyZSwgQnVmZmVyU291cmNlIGRhdGEpOworICAgIFtDYWxsV2l0aD1HbG9i
YWxPYmplY3RdIFByb21pc2U8YW55PiBkaWdlc3QoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0
aG0sIEJ1ZmZlclNvdXJjZSBkYXRhKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSBQcm9t
aXNlPGFueT4gZ2VuZXJhdGVLZXkoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIGJvb2xl
YW4gZXh0cmFjdGFibGUsIHNlcXVlbmNlPENyeXB0b0tleVVzYWdlPiBrZXlVc2FnZXMpOworICAg
IFtDYWxsV2l0aD1HbG9iYWxPYmplY3RdIFByb21pc2U8YW55PiBkZXJpdmVLZXkoQWxnb3JpdGht
SWRlbnRpZmllciBhbGdvcml0aG0sIENyeXB0b0tleSBiYXNlS2V5LCBBbGdvcml0aG1JZGVudGlm
aWVyIGRlcml2ZWRLZXlUeXBlLCBib29sZWFuIGV4dHJhY3RhYmxlLCBzZXF1ZW5jZTxDcnlwdG9L
ZXlVc2FnZT4ga2V5VXNhZ2VzKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSBQcm9taXNl
PEFycmF5QnVmZmVyPiBkZXJpdmVCaXRzKEFsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBD
cnlwdG9LZXkgYmFzZUtleSwgdW5zaWduZWQgbG9uZyBsZW5ndGgpOworICAgIFtDYWxsV2l0aD1H
bG9iYWxPYmplY3RdIFByb21pc2U8Q3J5cHRvS2V5PiBpbXBvcnRLZXkoS2V5Rm9ybWF0IGZvcm1h
dCwgKEJ1ZmZlclNvdXJjZSBvciBKc29uV2ViS2V5KSBrZXlEYXRhLCBBbGdvcml0aG1JZGVudGlm
aWVyIGFsZ29yaXRobSwgYm9vbGVhbiBleHRyYWN0YWJsZSwgc2VxdWVuY2U8Q3J5cHRvS2V5VXNh
Z2U+IGtleVVzYWdlcyk7CiAgICAgUHJvbWlzZTxhbnk+IGV4cG9ydEtleShLZXlGb3JtYXQgZm9y
bWF0LCBDcnlwdG9LZXkga2V5KTsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlXSBQcm9taXNlPGFu
eT4gd3JhcEtleShLZXlGb3JtYXQgZm9ybWF0LCBDcnlwdG9LZXkga2V5LCBDcnlwdG9LZXkgd3Jh
cHBpbmdLZXksIEFsZ29yaXRobUlkZW50aWZpZXIgd3JhcEFsZ29yaXRobSk7Ci0gICAgW0NhbGxX
aXRoPUV4ZWNTdGF0ZV0gUHJvbWlzZTxDcnlwdG9LZXk+IHVud3JhcEtleShLZXlGb3JtYXQgZm9y
bWF0LCBCdWZmZXJTb3VyY2Ugd3JhcHBlZEtleSwgQ3J5cHRvS2V5IHVud3JhcHBpbmdLZXksIEFs
Z29yaXRobUlkZW50aWZpZXIgdW53cmFwQWxnb3JpdGhtLCBBbGdvcml0aG1JZGVudGlmaWVyIHVu
d3JhcHBlZEtleUFsZ29yaXRobSwgYm9vbGVhbiBleHRyYWN0YWJsZSwgc2VxdWVuY2U8Q3J5cHRv
S2V5VXNhZ2U+IGtleVVzYWdlcyk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdF0gUHJvbWlz
ZTxhbnk+IHdyYXBLZXkoS2V5Rm9ybWF0IGZvcm1hdCwgQ3J5cHRvS2V5IGtleSwgQ3J5cHRvS2V5
IHdyYXBwaW5nS2V5LCBBbGdvcml0aG1JZGVudGlmaWVyIHdyYXBBbGdvcml0aG0pOworICAgIFtD
YWxsV2l0aD1HbG9iYWxPYmplY3RdIFByb21pc2U8Q3J5cHRvS2V5PiB1bndyYXBLZXkoS2V5Rm9y
bWF0IGZvcm1hdCwgQnVmZmVyU291cmNlIHdyYXBwZWRLZXksIENyeXB0b0tleSB1bndyYXBwaW5n
S2V5LCBBbGdvcml0aG1JZGVudGlmaWVyIHVud3JhcEFsZ29yaXRobSwgQWxnb3JpdGhtSWRlbnRp
ZmllciB1bndyYXBwZWRLZXlBbGdvcml0aG0sIGJvb2xlYW4gZXh0cmFjdGFibGUsIHNlcXVlbmNl
PENyeXB0b0tleVVzYWdlPiBrZXlVc2FnZXMpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgK
aW5kZXggZjUyMmRmNGJiMTI2NzIxMGU4NmY4NTFiNmViNjYzNjE2ZThhNDBjZi4uMDNkZTEyMDEw
NjJiMDU1NWNmYjE5Nzg0ZDUzOWVhMmRiMDgzZmMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
LmgKQEAgLTM5LDcgKzM5LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWxsRnJhbWU7
Ci11c2luZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaAppbmRleCA4NTc5OThhZmY2ZjIzNzAwYTZh
NjJmNWExZmEwMjc2Mzg5OWQzZWVhLi42YjhiOTg2ZjM3OTZjNzQ4OWQwYWYyYzk1NzUzY2JiNjkw
ZGMyNjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCkBAIC0zOSw3ICszOSw3
IEBAIGNsYXNzIERvY3VtZW50OwogZW51bSBjbGFzcyBSZWFzb25Gb3JTdXNwZW5zaW9uIHsKICAg
ICBKYXZhU2NyaXB0RGVidWdnZXJQYXVzZWQsCiAgICAgV2lsbERlZmVyTG9hZGluZywKLSAgICBQ
YWdlQ2FjaGUsCisgICAgQmFja0ZvcndhcmRDYWNoZSwKICAgICBQYWdlV2lsbEJlU3VzcGVuZGVk
LAogfTsKIApAQCAtNjQsNyArNjQsNyBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBBY3RpdmVET01P
YmplY3QgOiBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogCiAgICAgLy8gVGhl
c2UgdGhyZWUgZnVuY3Rpb25zIG11c3Qgbm90IGhhdmUgYSBzaWRlIGVmZmVjdCBvZiBjcmVhdGlu
ZyBvciBkZXN0cm95aW5nCiAgICAgLy8gYW55IEFjdGl2ZURPTU9iamVjdC4gVGhhdCBtZWFucyB0
aGV5IG11c3Qgbm90IHJlc3VsdCBpbiBjYWxscyB0byBhcmJpdHJhcnkgSmF2YVNjcmlwdC4KLSAg
ICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0ID0g
MDsgLy8gUmV0dXJuaW5nIGZhbHNlIGluIGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24o
KSB3aWxsIHByZXZlbnQgdGhlIHBhZ2UgZnJvbSBlbnRlcmluZyB0aGUgUGFnZUNhY2hlLgorICAg
IHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QgPSAw
OyAvLyBSZXR1cm5pbmcgZmFsc2UgaW4gY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigp
IHdpbGwgcHJldmVudCB0aGUgcGFnZSBmcm9tIGVudGVyaW5nIHRoZSBCYWNrRm9yd2FyZENhY2hl
LgogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pOwogICAgIHZp
cnR1YWwgdm9pZCByZXN1bWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0N1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21F
bGVtZW50UmVhY3Rpb25RdWV1ZS5jcHAKaW5kZXggODgxMTdmMTllNGIyNmJhMjViZmYyNWE4NTU5
MTczMmJiN2EzZTdmYi4uNjA0MGQ1YzkyOGY2MjM5MzdhMjgwMzQzMjcxOGIyZDZmYzA5OTE2NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUu
Y3BwCkBAIC0yNjIsNyArMjYyLDcgQEAgaW5saW5lIHZvaWQgQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWU6OkVsZW1lbnRRdWV1ZTo6aW52b2tlQWxsKCkKICAgICBtX2VsZW1lbnRzLmNsZWFyKCk7
CiB9CiAKLWlubGluZSB2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVl
dWU6OnByb2Nlc3NRdWV1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCitpbmxpbmUgdm9pZCBDdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6RWxlbWVudFF1ZXVlOjpwcm9jZXNzUXVldWUoSlNDOjpK
U0dsb2JhbE9iamVjdCogc3RhdGUpCiB7CiAgICAgaWYgKCFzdGF0ZSkgewogICAgICAgICBpbnZv
a2VBbGwoKTsKQEAgLTMxMCw3ICszMTAsNyBAQCB1bnNpZ25lZCBDdXN0b21FbGVtZW50UmVhY3Rp
b25EaXNhbGxvd2VkU2NvcGU6OnNfY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZAogCiBD
dXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayogQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s6OnNf
Y3VycmVudFByb2Nlc3NpbmdTdGFjayA9IG51bGxwdHI7CiAKLXZvaWQgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uU3RhY2s6OnByb2Nlc3NRdWV1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCit2b2lkIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpwcm9jZXNzUXVldWUoSlNDOjpKU0dsb2JhbE9iamVj
dCogc3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fcXVldWUpOwogICAgIG1fcXVldWUtPnByb2Nlc3NR
dWV1ZShzdGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rp
b25RdWV1ZS5oCmluZGV4IDFmNzgyNDJjNTk2MmQ4NTFiMWMwYTkyOGFkNjMxY2Q4YmU0MjhhZGMu
LjcyMTYwYzUzYmFkN2VkMDFkOTg4MjQyNzk0YWEyZjE0ZWRkOGRhYjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCkBAIC0zMiw4ICszMiw4
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIENh
bGxGcmFtZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIAogfQogCkBAIC02OSw3ICs2
OSw3IEBAIGNsYXNzIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlIHsKICAgICBjbGFzcyBFbGVt
ZW50UXVldWUgewogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBhZGQoRWxlbWVudCYpOwotICAg
ICAgICB2b2lkIHByb2Nlc3NRdWV1ZShKU0M6OkV4ZWNTdGF0ZSopOworICAgICAgICB2b2lkIHBy
b2Nlc3NRdWV1ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB2b2lkIGludm9rZUFsbCgpOwpAQCAtMTM3LDE0ICsxMzcsMTQgQEAgY2xhc3MgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlIHsKIAogY2xhc3MgQ3VzdG9tRWxlbWVudFJlYWN0
aW9uU3RhY2sgOiBwdWJsaWMgQ3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOjpB
bGxvd2VkU2NvcGUgewogcHVibGljOgotICAgIEFMV0FZU19JTkxJTkUgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uU3RhY2soSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQorICAgIEFMV0FZU19JTkxJTkUgQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uU3RhY2soSlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUpCiAgICAg
ICAgIDogbV9wcmV2aW91c1Byb2Nlc3NpbmdTdGFjayhzX2N1cnJlbnRQcm9jZXNzaW5nU3RhY2sp
CiAgICAgICAgICwgbV9zdGF0ZShzdGF0ZSkKICAgICB7CiAgICAgICAgIHNfY3VycmVudFByb2Nl
c3NpbmdTdGFjayA9IHRoaXM7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBDdXN0b21FbGVt
ZW50UmVhY3Rpb25TdGFjayhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCisgICAgQUxXQVlTX0lOTElO
RSBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayhKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSkK
ICAgICAgICAgOiBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjaygmc3RhdGUpCiAgICAgeyB9CiAK
QEAgLTE1NiwxMSArMTU2LDExIEBAIGNsYXNzIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIDog
cHVibGljIEN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZTo6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvY2Vzc1F1ZXVlKEpTQzo6RXhlY1N0
YXRlKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9jZXNzUXVldWUoSlNDOjpKU0dsb2Jh
bE9iamVjdCopOwogCiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1
ZSogbV9xdWV1ZSB7IG51bGxwdHIgfTsgLy8gVXNlIHJhdyBwb2ludGVyIHRvIGF2b2lkIGdlbmVy
YXRpbmcgZGVsZXRlIGluIHRoZSBkZXN0cnVjdG9yLgogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlv
blN0YWNrKiBtX3ByZXZpb3VzUHJvY2Vzc2luZ1N0YWNrOwotICAgIEpTQzo6RXhlY1N0YXRlKiBt
X3N0YXRlOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIG1fc3RhdGU7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sqIHNfY3VycmVudFByb2Nl
c3NpbmdTdGFjazsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNTg2MzI0YmMxNDNiMDMw
NGNiYmFhOGJiMjQ2ZTYwMzM3Y2MzYjkzNi4uNzljMDQwNjhjN2RjZTUyMWUxYjE1MDhhMDY3NzM5
M2E3OGI4ZTg4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02MjMsNyArNjIzLDcgQEAg
RG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgcmVtb3ZlRnJvbUNvbnRleHRzTWFwKCk7CiAKICAg
ICBBU1NFUlQoIXJlbmRlclZpZXcoKSk7Ci0gICAgQVNTRVJUKG1fcGFnZUNhY2hlU3RhdGUgIT0g
SW5QYWdlQ2FjaGUpOworICAgIEFTU0VSVChtX2JhY2tGb3J3YXJkQ2FjaGVTdGF0ZSAhPSBJbkJh
Y2tGb3J3YXJkQ2FjaGUpOwogICAgIEFTU0VSVChtX3Jhbmdlcy5pc0VtcHR5KCkpOwogICAgIEFT
U0VSVCghbV9wYXJlbnRUcmVlU2NvcGUpOwogICAgIEFTU0VSVCghbV9kaXNhYmxlZEZpZWxkc2V0
RWxlbWVudHNDb3VudCk7CkBAIC0xODI4LDcgKzE4MjgsNyBAQCB2b2lkIERvY3VtZW50OjpzY2hl
ZHVsZVN0eWxlUmVjYWxjKCkKIHsKICAgICBBU1NFUlQoIW1fcmVuZGVyVmlldyB8fCAhaW5IaXRU
ZXN0aW5nKCkpOwogCi0gICAgaWYgKG1fc3R5bGVSZWNhbGNUaW1lci5pc0FjdGl2ZSgpIHx8IHBh
Z2VDYWNoZVN0YXRlKCkgIT0gTm90SW5QYWdlQ2FjaGUpCisgICAgaWYgKG1fc3R5bGVSZWNhbGNU
aW1lci5pc0FjdGl2ZSgpIHx8IGJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IE5vdEluQmFja0Zv
cndhcmRDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGNoaWxkTmVlZHNTdHls
ZVJlY2FsYygpIHx8IG1fbmVlZHNGdWxsU3R5bGVSZWJ1aWxkKTsKQEAgLTIwMDksNyArMjAwOSw3
IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXh0LCB1bnNpZ25l
ZCBvZmZzZXRPZlJlcGxhY2VkVGV4dCwgdW5zCiAKIGJvb2wgRG9jdW1lbnQ6Om5lZWRzU3R5bGVS
ZWNhbGMoKSBjb25zdAogewotICAgIGlmIChwYWdlQ2FjaGVTdGF0ZSgpICE9IE5vdEluUGFnZUNh
Y2hlKQorICAgIGlmIChiYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBOb3RJbkJhY2tGb3J3YXJk
Q2FjaGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX25lZWRzRnVsbFN0eWxl
UmVidWlsZCkKQEAgLTIyOTUsNyArMjI5NSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmludmFsaWRhdGVN
YXRjaGVkUHJvcGVydGllc0NhY2hlQW5kRm9yY2VTdHlsZVJlY2FsYygpCiB7CiAgICAgaWYgKGF1
dG8qIHJlc29sdmVyID0gc3R5bGVTY29wZSgpLnJlc29sdmVySWZFeGlzdHMoKSkKICAgICAgICAg
cmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkUHJvcGVydGllc0NhY2hlKCk7Ci0gICAgaWYgKHBh
Z2VDYWNoZVN0YXRlKCkgIT0gTm90SW5QYWdlQ2FjaGUgfHwgIXJlbmRlclZpZXcoKSkKKyAgICBp
ZiAoYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gTm90SW5CYWNrRm9yd2FyZENhY2hlIHx8ICFy
ZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKICAgICBzY2hlZHVsZUZ1bGxTdHlsZVJlYnVp
bGQoKTsKIH0KQEAgLTIzMTQsNyArMjMxNCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNldElzUmVzb2x2
aW5nVHJlZVN0eWxlKGJvb2wgdmFsdWUpCiB2b2lkIERvY3VtZW50OjpjcmVhdGVSZW5kZXJUcmVl
KCkKIHsKICAgICBBU1NFUlQoIXJlbmRlclZpZXcoKSk7Ci0gICAgQVNTRVJUKG1fcGFnZUNhY2hl
U3RhdGUgIT0gSW5QYWdlQ2FjaGUpOworICAgIEFTU0VSVChtX2JhY2tGb3J3YXJkQ2FjaGVTdGF0
ZSAhPSBJbkJhY2tGb3J3YXJkQ2FjaGUpOwogICAgIEFTU0VSVCghbV9heE9iamVjdENhY2hlIHx8
IHRoaXMgIT0gJnRvcERvY3VtZW50KCkpOwogCiAgICAgaWYgKG1faXNOb25SZW5kZXJlZFBsYWNl
aG9sZGVyKQpAQCAtMjM1NCw3ICsyMzU0LDcgQEAgdm9pZCBEb2N1bWVudDo6ZGlkQmVjb21lQ3Vy
cmVudERvY3VtZW50SW5GcmFtZSgpCiAKICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgc2NoZWR1bGVk
IHRhc2sgc3RhdGUgb2YgdGhlIGRvY3VtZW50IG1hdGNoZXMgdGhlIERPTSBzdXNwZW5zaW9uIHN0
YXRlIG9mIHRoZSBmcmFtZS4gSXQgY2FuCiAgICAgLy8gYmUgb3V0IG9mIHN5bmMgaWYgdGhlIERP
TSBzdXNwZW5zaW9uIHN0YXRlIGNoYW5nZWQgd2hpbGUgdGhlIGRvY3VtZW50IHdhcyBub3QgaW4g
dGhlIGZyYW1lIChwb3NzaWJseSBpbiB0aGUKLSAgICAvLyBwYWdlIGNhY2hlLCBvciBzaW1wbHkg
bmV3bHkgY3JlYXRlZCkuCisgICAgLy8gYmFjay9mb3J3YXJkIGNhY2hlLCBvciBzaW1wbHkgbmV3
bHkgY3JlYXRlZCkuCiAgICAgaWYgKG1fZnJhbWUtPmFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zU3VzcGVuZGVkKCkpIHsKICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7CiAg
ICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmUgPSBleGlzdGluZ1RpbWVsaW5lKCkpCkBAIC0y
Mzk3LDcgKzIzOTcsNyBAQCB2b2lkIERvY3VtZW50OjphdHRhY2hUb0NhY2hlZEZyYW1lKENhY2hl
ZEZyYW1lQmFzZSYgY2FjaGVkRnJhbWUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FjaGVkRnJh
bWUuZG9jdW1lbnQoKSA9PSB0aGlzKTsKICAgICBBU1NFUlQoY2FjaGVkRnJhbWUudmlldygpKTsK
LSAgICBBU1NFUlQobV9wYWdlQ2FjaGVTdGF0ZSA9PSBEb2N1bWVudDo6SW5QYWdlQ2FjaGUpOwor
ICAgIEFTU0VSVChtX2JhY2tGb3J3YXJkQ2FjaGVTdGF0ZSA9PSBEb2N1bWVudDo6SW5CYWNrRm9y
d2FyZENhY2hlKTsKICAgICBvYnNlcnZlRnJhbWUoJmNhY2hlZEZyYW1lLnZpZXcoKS0+ZnJhbWUo
KSk7CiB9CiAKQEAgLTI0MDYsNyArMjQwNiw3IEBAIHZvaWQgRG9jdW1lbnQ6OmRldGFjaEZyb21D
YWNoZWRGcmFtZShDYWNoZWRGcmFtZUJhc2UmIGNhY2hlZEZyYW1lKQogICAgIEFTU0VSVF9VTlVT
RUQoY2FjaGVkRnJhbWUsIGNhY2hlZEZyYW1lLnZpZXcoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FjaGVkRnJhbWUuZG9jdW1lbnQoKSA9PSB0aGlzKTsKICAgICBBU1NFUlQobV9mcmFtZSA9PSAm
Y2FjaGVkRnJhbWUudmlldygpLT5mcmFtZSgpKTsKLSAgICBBU1NFUlQobV9wYWdlQ2FjaGVTdGF0
ZSA9PSBEb2N1bWVudDo6SW5QYWdlQ2FjaGUpOworICAgIEFTU0VSVChtX2JhY2tGb3J3YXJkQ2Fj
aGVTdGF0ZSA9PSBEb2N1bWVudDo6SW5CYWNrRm9yd2FyZENhY2hlKTsKICAgICBkZXRhY2hGcm9t
RnJhbWUoKTsKIH0KIApAQCAtMjU2OSwxMCArMjU2OSwxMCBAQCB2b2lkIERvY3VtZW50OjpwcmVw
YXJlRm9yRGVzdHJ1Y3Rpb24oKQogCiAgICAgbV9oYXNQcmVwYXJlZEZvckRlc3RydWN0aW9uID0g
dHJ1ZTsKIAotICAgIC8vIE5vdGUgdGhhdCBtX3BhZ2VDYWNoZVN0YXRlIGNhbiBiZSBEb2N1bWVu
dDo6QWJvdXRUb0VudGVyUGFnZUNhY2hlIGlmIG91ciBmcmFtZQorICAgIC8vIE5vdGUgdGhhdCBt
X2JhY2tGb3J3YXJkQ2FjaGVTdGF0ZSBjYW4gYmUgRG9jdW1lbnQ6OkFib3V0VG9FbnRlckJhY2tG
b3J3YXJkQ2FjaGUgaWYgb3VyIGZyYW1lCiAgICAgLy8gd2FzIHJlbW92ZWQgaW4gYW4gb25wYWdl
aGlkZSBldmVudCBoYW5kbGVyIGZpcmVkIHdoZW4gdGhlIHRvcC1sZXZlbCBmcmFtZSBpcwotICAg
IC8vIGFib3V0IHRvIGVudGVyIHRoZSBwYWdlIGNhY2hlLgotICAgIFJFTEVBU0VfQVNTRVJUKG1f
cGFnZUNhY2hlU3RhdGUgIT0gRG9jdW1lbnQ6OkluUGFnZUNhY2hlKTsKKyAgICAvLyBhYm91dCB0
byBlbnRlciB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgorICAgIFJFTEVBU0VfQVNTRVJUKG1fYmFj
a0ZvcndhcmRDYWNoZVN0YXRlICE9IERvY3VtZW50OjpJbkJhY2tGb3J3YXJkQ2FjaGUpOwogfQog
CiB2b2lkIERvY3VtZW50OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCkBAIC0yNjI0LDcgKzI2
MjQsNyBAQCBib29sIERvY3VtZW50OjpzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJp
dHlQb2xpY3koKSBjb25zdAogewogICAgIC8vIEJ5cGFzcyB0aGlzIHBvbGljeSB3aGVuIHRoZSB3
b3JsZCBpcyBrbm93biwgYW5kIGl0IG5vdCB0aGUgbm9ybWFsIHdvcmxkLgogICAgIGF1dG8mIGNh
bGxGcmFtZSA9ICpjb21tb25WTSgpLnRvcENhbGxGcmFtZTsKLSAgICByZXR1cm4gJmNhbGxGcmFt
ZSAhPSBKU0M6OkNhbGxGcmFtZTo6bm9DYWxsZXIoKSAmJiAhY3VycmVudFdvcmxkKGNhbGxGcmFt
ZSkuaXNOb3JtYWwoKTsKKyAgICByZXR1cm4gJmNhbGxGcmFtZSAhPSBKU0M6OkNhbGxGcmFtZTo6
bm9DYWxsZXIoKSAmJiAhY3VycmVudFdvcmxkKCpjYWxsRnJhbWUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKS5pc05vcm1hbCgpOwogfQogCiB2b2lkIERvY3VtZW50OjpwbGF0Zm9ybVN1c3BlbmRPclN0
b3BBY3RpdmVET01PYmplY3RzKCkKQEAgLTQwNTMsNyArNDA1Myw3IEBAIHN0YXRpYyBib29sIGlz
Tm9kZUluU3VidHJlZShOb2RlJiBub2RlLCBOb2RlJiBjb250YWluZXIsIERvY3VtZW50OjpOb2Rl
UmVtb3ZhbCBuCiAKIHZvaWQgRG9jdW1lbnQ6OmFkanVzdEZvY3VzZWROb2RlT25Ob2RlUmVtb3Zh
bChOb2RlJiBub2RlLCBOb2RlUmVtb3ZhbCBub2RlUmVtb3ZhbCkKIHsKLSAgICBpZiAoIW1fZm9j
dXNlZEVsZW1lbnQgfHwgcGFnZUNhY2hlU3RhdGUoKSAhPSBOb3RJblBhZ2VDYWNoZSkgLy8gSWYg
dGhlIGRvY3VtZW50IGlzIGluIHRoZSBwYWdlIGNhY2hlLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8g
Y2xlYXIgb3V0IHRoZSBmb2N1c2VkIG5vZGUuCisgICAgaWYgKCFtX2ZvY3VzZWRFbGVtZW50IHx8
IGJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IE5vdEluQmFja0ZvcndhcmRDYWNoZSkgLy8gSWYg
dGhlIGRvY3VtZW50IGlzIGluIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIHRoZW4gd2UgZG9uJ3Qg
bmVlZCB0byBjbGVhciBvdXQgdGhlIGZvY3VzZWQgbm9kZS4KICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRWxlbWVudCogZm9jdXNlZEVsZW1lbnQgPSBub2RlLnRyZWVTY29wZSgpLmZvY3VzZWRFbGVt
ZW50SW5TY29wZSgpOwpAQCAtNDEyMSw3ICs0MTIxLDcgQEAgYm9vbCBEb2N1bWVudDo6c2V0Rm9j
dXNlZEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBG
b2MKICAgICBpZiAobV9mb2N1c2VkRWxlbWVudCA9PSBuZXdGb2N1c2VkRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAocGFnZUNhY2hlU3RhdGUoKSAhPSBOb3RJblBhZ2VD
YWNoZSkKKyAgICBpZiAoYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gTm90SW5CYWNrRm9yd2Fy
ZENhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIGZvY3VzQ2hhbmdlQmxv
Y2tlZCA9IGZhbHNlOwpAQCAtNDU2MSw3ICs0NTYxLDcgQEAgdm9pZCBEb2N1bWVudDo6dGFrZURP
TVdpbmRvd0Zyb20oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIEFTU0VSVCghbV9kb21XaW5kb3cp
OwogICAgIEFTU0VSVChkb2N1bWVudC5tX2RvbVdpbmRvdyk7CiAgICAgLy8gQSB2YWxpZCBET01X
aW5kb3cgaXMgbmVlZGVkIGJ5IENhY2hlZEZyYW1lIGZvciBpdHMgZG9jdW1lbnRzLgotICAgIEFT
U0VSVChwYWdlQ2FjaGVTdGF0ZSgpID09IE5vdEluUGFnZUNhY2hlKTsKKyAgICBBU1NFUlQoYmFj
a0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gTm90SW5CYWNrRm9yd2FyZENhY2hlKTsKIAogICAgIG1f
ZG9tV2luZG93ID0gV1RGTW92ZShkb2N1bWVudC5tX2RvbVdpbmRvdyk7CiAgICAgbV9kb21XaW5k
b3ctPmRpZFNlY3VyZVRyYW5zaXRpb25UbygqdGhpcyk7CkBAIC01MDgzLDIxICs1MDgzLDIxIEBA
IFVSTCBEb2N1bWVudDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CiAgICAg
cmV0dXJuIGNvbXBsZXRlVVJMKHVybCwgbV9iYXNlVVJMKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
c2V0UGFnZUNhY2hlU3RhdGUoUGFnZUNhY2hlU3RhdGUgc3RhdGUpCit2b2lkIERvY3VtZW50Ojpz
ZXRCYWNrRm9yd2FyZENhY2hlU3RhdGUoQmFja0ZvcndhcmRDYWNoZVN0YXRlIHN0YXRlKQogewot
ICAgIGlmIChtX3BhZ2VDYWNoZVN0YXRlID09IHN0YXRlKQorICAgIGlmIChtX2JhY2tGb3J3YXJk
Q2FjaGVTdGF0ZSA9PSBzdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlQ2FjaGVT
dGF0ZSA9IHN0YXRlOworICAgIG1fYmFja0ZvcndhcmRDYWNoZVN0YXRlID0gc3RhdGU7CiAKICAg
ICBGcmFtZVZpZXcqIHYgPSB2aWV3KCk7CiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsK
IAogICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIEluUGFnZUNhY2hlOgorICAgIGNhc2Ug
SW5CYWNrRm9yd2FyZENhY2hlOgogICAgICAgICBpZiAodikgewogICAgICAgICAgICAgLy8gRklY
TUU6IFRoZXJlIGlzIHNvbWUgc2Nyb2xsaW5nIHJlbGF0ZWQgd29yayB0aGF0IG5lZWRzIHRvIGhh
cHBlbiB3aGVuZXZlciBhIHBhZ2UgZ29lcyBpbnRvIHRoZQotICAgICAgICAgICAgLy8gcGFnZSBj
YWNoZSBhbmQgc2ltaWxhciB3b3JrIHRoYXQgbmVlZHMgdG8gb2NjdXIgd2hlbiBpdCBjb21lcyBv
dXQuIFRoaXMgaXMgd2hlcmUgd2UgZG8gdGhlIHdvcmsKKyAgICAgICAgICAgIC8vIGJhY2svZm9y
d2FyZCBjYWNoZSBhbmQgc2ltaWxhciB3b3JrIHRoYXQgbmVlZHMgdG8gb2NjdXIgd2hlbiBpdCBj
b21lcyBvdXQuIFRoaXMgaXMgd2hlcmUgd2UgZG8gdGhlIHdvcmsKICAgICAgICAgICAgIC8vIHRo
YXQgbmVlZHMgdG8gaGFwcGVuIHdoZW4gd2UgZW50ZXIsIGFuZCB0aGUgd29yayB0aGF0IG5lZWRz
IHRvIGhhcHBlbiB3aGVuIHdlIGV4aXQgaXMgaW4KICAgICAgICAgICAgIC8vIEhpc3RvcnlDb250
cm9sbGVyOjpyZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKS4gSXQgY2FuJ3QgYmUg
aGVyZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMKICAgICAgICAgICAgIC8vIGNhbGxlZCB0b28g
ZWFybHkgb24gaW4gdGhlIHByb2Nlc3Mgb2YgYSBwYWdlIGV4aXRpbmcgdGhlIGNhY2hlIGZvciB0
aGF0IHdvcmsgdG8gYmUgcG9zc2libGUgaW4gdGhpcwpAQCAtNTEyMSwxMSArNTEyMSwxMSBAQCB2
b2lkIERvY3VtZW50OjpzZXRQYWdlQ2FjaGVTdGF0ZShQYWdlQ2FjaGVTdGF0ZSBzdGF0ZSkKIAog
ICAgICAgICBjbGVhclNoYXJlZE9iamVjdFBvb2woKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBOb3RJblBhZ2VDYWNoZToKKyAgICBjYXNlIE5vdEluQmFja0ZvcndhcmRDYWNoZToKICAgICAg
ICAgaWYgKGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpKQogICAgICAgICAgICAgc2NoZWR1bGVTdHls
ZVJlY2FsYygpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFib3V0VG9FbnRlclBhZ2VDYWNo
ZToKKyAgICBjYXNlIEFib3V0VG9FbnRlckJhY2tGb3J3YXJkQ2FjaGU6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIH0KQEAgLTUxNDgsNyArNTE0OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmQo
UmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gQ2xl
YXIgdGhlIHVwZGF0ZSBmbGFnIHRvIGJlIGFibGUgdG8gY2hlY2sgaWYgdGhlIHZpZXdwb3J0IGFy
Z3VtZW50cyB1cGRhdGUKLSAgICAvLyBpcyBkaXNwYXRjaGVkLCBhZnRlciB0aGUgZG9jdW1lbnQg
aXMgcmVzdG9yZWQgZnJvbSB0aGUgcGFnZSBjYWNoZS4KKyAgICAvLyBpcyBkaXNwYXRjaGVkLCBh
ZnRlciB0aGUgZG9jdW1lbnQgaXMgcmVzdG9yZWQgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hl
LgogICAgIG1fZGlkRGlzcGF0Y2hWaWV3cG9ydFByb3BlcnRpZXNDaGFuZ2VkID0gZmFsc2U7CiAj
ZW5kaWYKIApAQCAtNTE2OSw3ICs1MTY5LDcgQEAgdm9pZCBEb2N1bWVudDo6c3VzcGVuZChSZWFz
b25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNl
cnZpY2VXb3JrZXJFbmFibGVkKCkgJiYgcmVhc29uID09IFJlYXNvbkZvclN1c3BlbnNpb246OlBh
Z2VDYWNoZSkKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXJ2aWNlV29ya2VyRW5hYmxlZCgpICYmIHJlYXNvbiA9PSBSZWFzb25Gb3JTdXNwZW5zaW9u
OjpCYWNrRm9yd2FyZENhY2hlKQogICAgICAgICBzZXRTZXJ2aWNlV29ya2VyQ29ubmVjdGlvbihu
dWxscHRyKTsKICNlbmRpZgogCkBAIC01MjE0LDcgKzUyMTQsNyBAQCB2b2lkIERvY3VtZW50Ojpy
ZXN1bWUoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAgICAgbV9pc1N1c3BlbmRlZCA9IGZh
bHNlOwogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNlcnZpY2VXb3JrZXJFbmFibGVkKCkgJiYgcmVh
c29uID09IFJlYXNvbkZvclN1c3BlbnNpb246OlBhZ2VDYWNoZSkKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXJ2aWNlV29ya2VyRW5hYmxlZCgpICYm
IHJlYXNvbiA9PSBSZWFzb25Gb3JTdXNwZW5zaW9uOjpCYWNrRm9yd2FyZENhY2hlKQogICAgICAg
ICBzZXRTZXJ2aWNlV29ya2VyQ29ubmVjdGlvbihTZXJ2aWNlV29ya2VyUHJvdmlkZXI6OnNpbmds
ZXRvbigpLmV4aXN0aW5nU2VydmljZVdvcmtlckNvbm5lY3Rpb24oKSk7CiAjZW5kaWYKIH0KQEAg
LTU1MzQsNyArNTUzNCw3IEBAIERvY3VtZW50JiBEb2N1bWVudDo6dG9wRG9jdW1lbnQoKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBUaGlzIHNwZWNpYWwtY2FzaW5nIGF2b2lkcyBpbmNvcnJlY3Rs
eSBkZXRlcm1pbmVkIHRvcCBkb2N1bWVudHMgZHVyaW5nIHRoZSBwcm9jZXNzCiAgICAgLy8gb2Yg
QVhPYmplY3RDYWNoZSB0ZWFyZG93biBvciBub3RpZmljYXRpb24gcG9zdGluZyBmb3IgY2FjaGVk
IG9yIGJlaW5nLWRlc3Ryb3llZCBkb2N1bWVudHMuCi0gICAgaWYgKHBhZ2VDYWNoZVN0YXRlKCkg
PT0gTm90SW5QYWdlQ2FjaGUgJiYgIW1fcmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKSB7CisgICAg
aWYgKGJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IE5vdEluQmFja0ZvcndhcmRDYWNoZSAmJiAh
bV9yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQpIHsKICAgICAgICAgaWYgKCFtX2ZyYW1lKQogICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPigqdGhpcyk7CiAgICAgICAgIC8v
IFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBub24tbnVsbC4KQEAgLTYwOTQsNyArNjA5NCw3IEBAIHZv
aWQgRG9jdW1lbnQ6OmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNz
YWdlTGV2ZWwgbGV2ZWwsIGNvbnN0CiAgICAgICAgIG1fY29uc29sZU1lc3NhZ2VMaXN0ZW5lci0+
c2NoZWR1bGVDYWxsYmFjaygqdGhpcywgbWVzc2FnZSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFk
ZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51
bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxs
U3RhY2s+JiYgY2FsbFN0YWNrLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIpCit2b2lkIERvY3VtZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVt
bk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFjaywg
SlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIpCiB7CiAgICAgaWYgKCFpc0NvbnRleHRUaHJlYWQoKSkgewogICAgICAgICBwb3N0VGFzayhB
ZGRDb25zb2xlTWVzc2FnZVRhc2soc291cmNlLCBsZXZlbCwgbWVzc2FnZSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAppbmRleCA3NTMxNWZlNTFjMDRiNzMzMDBiOGQ0NTM2MmZkNTY2MDA3MzA1MmE3Li44
YjAxNTA0ODU1MDVlZmZiNGU2ODI4NmJiYzYyZDliMTI0ODllMjBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaApAQCAtODMsNyArODMsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWxsRnJhbWU7
CiBjbGFzcyBJbnB1dEN1cnNvcjsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIH0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA3MywxMCArMTA3MiwxMCBAQCBjbGFzcyBEb2N1bWVu
dAogCiAgICAgdm9pZCBmaW5pc2hlZFBhcnNpbmcoKTsKIAotICAgIGVudW0gUGFnZUNhY2hlU3Rh
dGUgeyBOb3RJblBhZ2VDYWNoZSwgQWJvdXRUb0VudGVyUGFnZUNhY2hlLCBJblBhZ2VDYWNoZSB9
OworICAgIGVudW0gQmFja0ZvcndhcmRDYWNoZVN0YXRlIHsgTm90SW5CYWNrRm9yd2FyZENhY2hl
LCBBYm91dFRvRW50ZXJCYWNrRm9yd2FyZENhY2hlLCBJbkJhY2tGb3J3YXJkQ2FjaGUgfTsKIAot
ICAgIFBhZ2VDYWNoZVN0YXRlIHBhZ2VDYWNoZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdl
Q2FjaGVTdGF0ZTsgfQotICAgIHZvaWQgc2V0UGFnZUNhY2hlU3RhdGUoUGFnZUNhY2hlU3RhdGUp
OworICAgIEJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSBiYWNrRm9yd2FyZENhY2hlU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tGb3J3YXJkQ2FjaGVTdGF0ZTsgfQorICAgIHZvaWQgc2V0QmFja0Zv
cndhcmRDYWNoZVN0YXRlKEJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSk7CiAKICAgICB2b2lkIHJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmKTsKICAgICB2b2lkIHVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCYpOwpAQCAtMTMz
Nyw3ICsxMzM2LDcgQEAgY2xhc3MgRG9jdW1lbnQKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYWRk
TWVzc2FnZSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLgogICAgIC8vIENhbGxlcnMgc2hvdWxkIHRy
eSB0byBjcmVhdGUgdGhlIENvbnNvbGVNZXNzYWdlIHRoZW1zZWx2ZXMuCi0gICAgdm9pZCBhZGRN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQg
Y29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYsIEpTQzo6
RXhlY1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAw
KSBmaW5hbDsKKyAgICB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNj
cmlwdENhbGxTdGFjaz4mJiwgSlNDOjpKU0dsb2JhbE9iamVjdCogPSBudWxscHRyLCB1bnNpZ25l
ZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0gMCkgZmluYWw7CiAKICAgICBTZWN1cml0eU9yaWdp
biYgc2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiAqU2VjdXJpdHlDb250ZXh0OjpzZWN1
cml0eU9yaWdpbigpOyB9CiAgICAgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdpbigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHRvcERvY3VtZW50KCkuc2VjdXJpdHlPcmlnaW4oKTsgfQpAQCAtMTk1MCw3
ICsxOTQ5LDcgQEAgY2xhc3MgRG9jdW1lbnQKICAgICBJbmhlcml0ZWRCb29sIG1fZGVzaWduTW9k
ZSB7IGluaGVyaXQgfTsKICAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbV9tZWRp
YVN0YXRlIHsgTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5nIH07CiAgICAgYm9vbCBtX3VzZXJI
YXNJbnRlcmFjdGVkV2l0aE1lZGlhRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgUGFnZUNhY2hlU3Rh
dGUgbV9wYWdlQ2FjaGVTdGF0ZSB7IE5vdEluUGFnZUNhY2hlIH07CisgICAgQmFja0ZvcndhcmRD
YWNoZVN0YXRlIG1fYmFja0ZvcndhcmRDYWNoZVN0YXRlIHsgTm90SW5CYWNrRm9yd2FyZENhY2hl
IH07CiAgICAgT3B0aW9uYWw8UmVmZXJyZXJQb2xpY3k+IG1fcmVmZXJyZXJQb2xpY3k7CiAgICAg
UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGUgeyBDb21wbGV0ZSB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKaW5kZXggOTY1YzQwZWIxNWRjZWMzZjk2NmRhNjFhNDJjM2IwODUxMmYzODczYi4uMDU1Yzgw
MjNjOWNlZDZhNzkyODc1OTBiNWYyZjNlOWQ4YWUwZDI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cApAQCAtMjM0NiwxNCArMjM0NiwxNCBAQCBFeGNlcHRpb25PcjxTaGFkb3dSb290Jj4gRWxlbWVu
dDo6YXR0YWNoU2hhZG93KGNvbnN0IFNoYWRvd1Jvb3RJbml0JiBpbml0KQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLVNoYWRvd1Jvb3QqIEVsZW1lbnQ6OnNoYWRvd1Jvb3RGb3JCaW5kaW5ncyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CitTaGFkb3dSb290KiBFbGVtZW50OjpzaGFkb3dS
b290Rm9yQmluZGluZ3MoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkg
Y29uc3QKIHsKICAgICBhdXRvKiBzaGFkb3cgPSBzaGFkb3dSb290KCk7CiAgICAgaWYgKCFzaGFk
b3cpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChzaGFkb3ctPm1vZGUoKSA9PSBT
aGFkb3dSb290TW9kZTo6T3BlbikKICAgICAgICAgcmV0dXJuIHNoYWRvdzsKLSAgICBpZiAoSlND
Ojpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT53b3JsZCgpLnNoYWRvd1Jvb3RJc0Fsd2F5c09wZW4oKSkKKyAgICBpZiAoSlNDOjpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPndvcmxkKCkuc2hhZG93
Um9vdElzQWx3YXlzT3BlbigpKQogICAgICAgICByZXR1cm4gc2hhZG93OwogICAgIHJldHVybiBu
dWxscHRyOwogfQpAQCAtNDI4MCw3ICs0MjgwLDcgQEAgRWxlbWVudCogRWxlbWVudDo6ZmluZEFu
Y2hvckVsZW1lbnRGb3JMaW5rKFN0cmluZyYgb3V0QW5jaG9yTmFtZSkKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPFdlYkFuaW1hdGlvbj4+IEVsZW1lbnQ6OmFuaW1h
dGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYmIGtl
eWZyYW1lcywgT3B0aW9uYWw8VmFyaWFudDxkb3VibGUsIEtleWZyYW1lQW5pbWF0aW9uT3B0aW9u
cz4+JiYgb3B0aW9ucykKK0V4Y2VwdGlvbk9yPFJlZjxXZWJBbmltYXRpb24+PiBFbGVtZW50Ojph
bmltYXRlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6U3Ry
b25nPEpTQzo6SlNPYmplY3Q+JiYga2V5ZnJhbWVzLCBPcHRpb25hbDxWYXJpYW50PGRvdWJsZSwg
S2V5ZnJhbWVBbmltYXRpb25PcHRpb25zPj4mJiBvcHRpb25zKQogewogICAgIFN0cmluZyBpZCA9
ICIiOwogICAgIE9wdGlvbmFsPFZhcmlhbnQ8ZG91YmxlLCBLZXlmcmFtZUVmZmVjdE9wdGlvbnM+
PiBrZXlmcmFtZUVmZmVjdE9wdGlvbnM7CkBAIC00Mjk3LDcgKzQyOTcsNyBAQCBFeGNlcHRpb25P
cjxSZWY8V2ViQW5pbWF0aW9uPj4gRWxlbWVudDo6YW5pbWF0ZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6U3RybwogICAgICAgICBrZXlmcmFtZUVmZmVjdE9wdGlvbnMgPSBrZXlmcmFtZUVm
ZmVjdE9wdGlvbnNWYXJpYW50OwogICAgIH0KIAotICAgIGF1dG8ga2V5ZnJhbWVFZmZlY3RSZXN1
bHQgPSBLZXlmcmFtZUVmZmVjdDo6Y3JlYXRlKHN0YXRlLCB0aGlzLCBXVEZNb3ZlKGtleWZyYW1l
cyksIFdURk1vdmUoa2V5ZnJhbWVFZmZlY3RPcHRpb25zKSk7CisgICAgYXV0byBrZXlmcmFtZUVm
ZmVjdFJlc3VsdCA9IEtleWZyYW1lRWZmZWN0OjpjcmVhdGUobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhpcywgV1RGTW92ZShrZXlmcmFtZXMpLCBXVEZNb3ZlKGtleWZyYW1lRWZmZWN0T3B0aW9ucykp
OwogICAgIGlmIChrZXlmcmFtZUVmZmVjdFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIGtleWZyYW1lRWZmZWN0UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKaW5kZXggNDA4Y2UzNDk4Y2Y1ODBhNzlkODI3OGVhYThkZGVhZWZlYWI2MDdlMS4u
NWVlMDQ2ZWY1OTcyNDFhNzQ5YjA1MTRiMDdhMzUwMmU2ODVjMmMwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCkBAIC0yODYsNyArMjg2LDcgQEAgY2xhc3MgRWxlbWVudCA6IHB1YmxpYyBDb250YWluZXJO
b2RlIHsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCogc2hhZG93Um9vdCgpIGNvbnN0
OwotICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3RGb3JCaW5kaW5ncyhKU0M6OkV4ZWNTdGF0ZSYp
IGNvbnN0OworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3RGb3JCaW5kaW5ncyhKU0M6OkpTR2xv
YmFsT2JqZWN0JikgY29uc3Q7CiAKICAgICBzdHJ1Y3QgU2hhZG93Um9vdEluaXQgewogICAgICAg
ICBTaGFkb3dSb290TW9kZSBtb2RlOwpAQCAtNjAwLDcgKzYwMCw3IEBAIGNsYXNzIEVsZW1lbnQg
OiBwdWJsaWMgQ29udGFpbmVyTm9kZSB7CiAKICAgICBFbGVtZW50KiBmaW5kQW5jaG9yRWxlbWVu
dEZvckxpbmsoU3RyaW5nJiBvdXRBbmNob3JOYW1lKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZjxX
ZWJBbmltYXRpb24+PiBhbmltYXRlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpTdHJvbmc8SlNDOjpK
U09iamVjdD4mJiwgT3B0aW9uYWw8VmFyaWFudDxkb3VibGUsIEtleWZyYW1lQW5pbWF0aW9uT3B0
aW9ucz4+JiYpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxXZWJBbmltYXRpb24+PiBhbmltYXRlKEpT
Qzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYmLCBPcHRpb25h
bDxWYXJpYW50PGRvdWJsZSwgS2V5ZnJhbWVBbmltYXRpb25PcHRpb25zPj4mJik7CiAgICAgVmVj
dG9yPFJlZlB0cjxXZWJBbmltYXRpb24+PiBnZXRBbmltYXRpb25zKCk7CiAKICAgICBFbGVtZW50
SWRlbnRpZmllciBjcmVhdGVFbGVtZW50SWRlbnRpZmllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRs
CmluZGV4IGZhZTQwYjlhODFjMzMxMmE3ZjZjYmQ1ZGY0NmRlMDA0MjhjNTMxMDQuLjQ4YjE0ZWI2
MzgzZDgwYWIyODUwZWQ0MDkxNGNkZTg0ZjE5ZmIyZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwK
QEAgLTU2LDcgKzU2LDcgQEAKICAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSBB
dHRyIHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ciBhdHRyKTsKIAogICAgIFtFbmFibGVkQXRSdW50
aW1lPVNoYWRvd0RPTSwgTWF5VGhyb3dFeGNlcHRpb25dIFNoYWRvd1Jvb3QgYXR0YWNoU2hhZG93
KFNoYWRvd1Jvb3RJbml0IGluaXQpOwotICAgIFtFbmFibGVkQXRSdW50aW1lPVNoYWRvd0RPTSwg
SW1wbGVtZW50ZWRBcz1zaGFkb3dSb290Rm9yQmluZGluZ3MsIENhbGxXaXRoPUV4ZWNTdGF0ZV0g
cmVhZG9ubHkgYXR0cmlidXRlIFNoYWRvd1Jvb3Q/IHNoYWRvd1Jvb3Q7CisgICAgW0VuYWJsZWRB
dFJ1bnRpbWU9U2hhZG93RE9NLCBJbXBsZW1lbnRlZEFzPXNoYWRvd1Jvb3RGb3JCaW5kaW5ncywg
Q2FsbFdpdGg9R2xvYmFsT2JqZWN0XSByZWFkb25seSBhdHRyaWJ1dGUgU2hhZG93Um9vdD8gc2hh
ZG93Um9vdDsKIAogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRWxlbWVudD8gY2xvc2VzdChET01T
dHJpbmcgc2VsZWN0b3JzKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gbWF0Y2hl
cyhET01TdHJpbmcgc2VsZWN0b3JzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
cnJvckV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmNwcAppbmRleCA4
ODE4MDQxNGUxZjMzMjBmNGZhMjJkMzUzODBiY2U4OTlhZWZhYjZjLi5hMTRhNDIxZjFhNWFlN2Uz
NWMxNTEzNTU0MjEyZTc0YjBkYzU4YTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RXJyb3JFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuY3BwCkBA
IC03MCwyNSArNzAsMjUgQEAgRXZlbnRJbnRlcmZhY2UgRXJyb3JFdmVudDo6ZXZlbnRJbnRlcmZh
Y2UoKSBjb25zdAogICAgIHJldHVybiBFcnJvckV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAotSlNW
YWx1ZSBFcnJvckV2ZW50OjplcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0dsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQorSlNWYWx1ZSBFcnJvckV2ZW50OjplcnJvcihKU0dsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQogeyAgICAKICAgICBKU1ZhbHVlIGVycm9yID0gbV9lcnJvcjsKICAgICBp
ZiAoIWVycm9yKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBpZiAoIWlzV29ybGRD
b21wYXRpYmxlKHN0YXRlLCBlcnJvcikpIHsKKyAgICBpZiAoIWlzV29ybGRDb21wYXRpYmxlKGds
b2JhbE9iamVjdCwgZXJyb3IpKSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIEVy
cm9yRXZlbnRzIGRvIG5vdCBsZWFrIHRoZWlyIGVycm9yIHByb3BlcnR5IGFjcm9zcyBpc29sYXRl
ZCBET00gd29ybGRzLgogICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBjaGVjayB0aGF0IHRo
ZSB3b3JsZHMgaGF2ZSBkaWZmZXJlbnQgcHJpdmlsZWdlcyBidXQgdGhhdCdzIG5vdCBwb3NzaWJs
ZSB5ZXQuCi0gICAgICAgIGF1dG8gc2VyaWFsaXplZEVycm9yID0gdHJ5U2VyaWFsaXplRXJyb3Io
c3RhdGUpOworICAgICAgICBhdXRvIHNlcmlhbGl6ZWRFcnJvciA9IHRyeVNlcmlhbGl6ZUVycm9y
KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGlmICghc2VyaWFsaXplZEVycm9yKQogICAgICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAgICByZXR1cm4gc2VyaWFsaXplZEVycm9yLT5kZXNl
cmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBzZXJpYWxpemVk
RXJyb3ItPmRlc2VyaWFsaXplKGdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1SZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBF
cnJvckV2ZW50Ojp0cnlTZXJpYWxpemVFcnJvcihFeGVjU3RhdGUmIGV4ZWMpCitSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBFcnJvckV2ZW50Ojp0cnlTZXJpYWxpemVFcnJvcihKU0dsb2Jh
bE9iamVjdCYgZXhlYykKIHsKICAgICBpZiAoIW1fc2VyaWFsaXplZEVycm9yICYmICFtX3RyaWVk
VG9TZXJpYWxpemUpIHsKICAgICAgICAgbV9zZXJpYWxpemVkRXJyb3IgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShleGVjLCBtX2Vycm9yLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpO
b25UaHJvd2luZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuaAppbmRleCAwMjRmZDQwYjIzMTgyMWYy
MTZkYTFiZWVhMjcwYTY5NThhYWMyZjIwLi5kZjEzMWUzMWY2YmMyYjVkNzUzNWEzZmQ1OTM4NGRk
ODgyYjJmODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKQEAgLTY2LDE0ICs2NiwxNCBAQCBj
bGFzcyBFcnJvckV2ZW50IGZpbmFsIDogcHVibGljIEV2ZW50IHsKICAgICBjb25zdCBTdHJpbmcm
IGZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQogICAgIHVuc2lnbmVkIGxp
bmVubygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQogICAgIHVuc2lnbmVkIGNvbG5v
KCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5OdW1iZXI7IH0KLSAgICBKU0M6OkpTVmFsdWUgZXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0Jik7CisgICAgSlNDOjpKU1Zh
bHVlIGVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmKTsKIAogICAgIGNvbnN0IEpTVmFsdWVJbldy
YXBwZWRPYmplY3QmIG9yaWdpbmFsRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CiAg
ICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzZXJpYWxpemVkRXJyb3IoKSBjb25zdCB7IHJldHVy
biBtX3NlcmlhbGl6ZWRFcnJvci5nZXQoKTsgfQogCiAgICAgRXZlbnRJbnRlcmZhY2UgZXZlbnRJ
bnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHRyeVNlcmlhbGl6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJik7CisgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdHJ5U2VyaWFsaXplRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVj
dCYpOwogCiBwcml2YXRlOgogICAgIEVycm9yRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBj
b25zdCBTdHJpbmcmIGZpbGVOYW1lLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1
bW5OdW1iZXIsIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gZXJyb3IpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vy
cm9yRXZlbnQuaWRsCmluZGV4IDA5MmZiNmRjOGQ3ZDI4YmM2MjBiNDU4M2ZmOWNlN2M3MmU0N2U0
NWYuLjkwMTMxYzVkNzljNmViNTg3YjkzNjhhNDgwY2FjZDZmYzVlMWUyOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXJyb3JFdmVudC5pZGwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgVVNWU3RyaW5nIGZpbGVuYW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxpbmVubzsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjb2xubzsK
LSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlJkdsb2JhbE9iamVjdF0gcmVhZG9ubHkgYXR0cmlidXRl
IGFueSBlcnJvcjsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSByZWFkb25seSBhdHRyaWJ1
dGUgYW55IGVycm9yOwogfTsKIAogZGljdGlvbmFyeSBFcnJvckV2ZW50SW5pdCA6IEV2ZW50SW5p
dCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcAppbmRleCA4NWM3OGE4
NzIzNjVkODkwMzg2OTY1ZmUwMDIyMTI5ZTFmMmU0ZmZlLi4xZTQyODcxYmMyYjIzY2Y5OGFlMGQy
MjdjZjVhNzA1ZTc0NjZiODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNj
cmVlbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdl
ci5jcHAKQEAgLTM2Myw3ICszNjMsNyBAQCBzdGF0aWMgdm9pZCB1bndyYXBGdWxsc2NyZWVuUmVu
ZGVyZXIoUmVuZGVyRnVsbFNjcmVlbiogZnVsbHNjcmVlblJlbmRlcmVyLCBFbGVtZQogCiB2b2lk
IEZ1bGxzY3JlZW5NYW5hZ2VyOjp3aWxsRW50ZXJGdWxsc2NyZWVuKEVsZW1lbnQmIGVsZW1lbnQp
CiB7Ci0gICAgaWYgKCFkb2N1bWVudCgpLmhhc0xpdmluZ1JlbmRlclRyZWUoKSB8fCBkb2N1bWVu
dCgpLnBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKQorICAgIGlm
ICghZG9jdW1lbnQoKS5oYXNMaXZpbmdSZW5kZXJUcmVlKCkgfHwgZG9jdW1lbnQoKS5iYWNrRm9y
d2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgY2FsbGVkIGFmdGVy
IHRoZSBkb2N1bWVudCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBhZ2UuCkBAIC00MTcsNyAr
NDE3LDcgQEAgdm9pZCBGdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKICAg
ICBpZiAoIW1fZnVsbHNjcmVlbkVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgh
aGFzTGl2aW5nUmVuZGVyVHJlZSgpIHx8IHBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5v
dEluUGFnZUNhY2hlKQorICAgIGlmICghaGFzTGl2aW5nUmVuZGVyVHJlZSgpIHx8IGJhY2tGb3J3
YXJkQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fZnVsbHNjcmVlbkVsZW1lbnQtPmRpZEJlY29tZUZ1bGxzY3Jl
ZW5FbGVtZW50KCk7CkBAIC00MjksNyArNDI5LDcgQEAgdm9pZCBGdWxsc2NyZWVuTWFuYWdlcjo6
d2lsbEV4aXRGdWxsc2NyZWVuKCkKICAgICBpZiAoIWZ1bGxzY3JlZW5FbGVtZW50KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIWhhc0xpdmluZ1JlbmRlclRyZWUoKSB8fCBwYWdlQ2FjaGVT
dGF0ZSgpICE9IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSkKKyAgICBpZiAoIWhhc0xpdmluZ1Jl
bmRlclRyZWUoKSB8fCBiYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90SW5C
YWNrRm9yd2FyZENhY2hlKQogICAgICAgICByZXR1cm47CiAKICAgICBmdWxsc2NyZWVuRWxlbWVu
dC0+d2lsbFN0b3BCZWluZ0Z1bGxzY3JlZW5FbGVtZW50KCk7CkBAIC00NDEsNyArNDQxLDcgQEAg
dm9pZCBGdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQogICAgIGlmICghZnVs
bHNjcmVlbkVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghaGFzTGl2aW5nUmVu
ZGVyVHJlZSgpIHx8IHBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hl
KQorICAgIGlmICghaGFzTGl2aW5nUmVuZGVyVHJlZSgpIHx8IGJhY2tGb3J3YXJkQ2FjaGVTdGF0
ZSgpICE9IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpCiAgICAgICAgIHJldHVybjsK
ICAgICBmdWxsc2NyZWVuRWxlbWVudC0+c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudE9uQW5j
ZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXMoZmFsc2UpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9G
dWxsc2NyZWVuTWFuYWdlci5oCmluZGV4IGUyNzM0MThmYjVlOGI2ZTRhMjA0MWFkZWVlMzkyYTdj
MGM3ODJhMjEuLmJmZDIxN2ZkMTE5NWEwYzlmMTMxMDdlYmRmN2YzYjlhMDA3M2RkMTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5oCkBAIC01NCw3ICs1NCw3IEBAIGNsYXNz
IEZ1bGxzY3JlZW5NYW5hZ2VyIGZpbmFsIHsKICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJl
dHVybiBtX2RvY3VtZW50LmZyYW1lKCk7IH0KICAgICBFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOyB9CiAgICAgYm9v
bCBoYXNMaXZpbmdSZW5kZXJUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5oYXNMaXZp
bmdSZW5kZXJUcmVlKCk7IH0KLSAgICBEb2N1bWVudDo6UGFnZUNhY2hlU3RhdGUgcGFnZUNhY2hl
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50LnBhZ2VDYWNoZVN0YXRlKCk7IH0KKyAg
ICBEb2N1bWVudDo6QmFja0ZvcndhcmRDYWNoZVN0YXRlIGJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCk7IH0KICAg
ICB2b2lkIHNjaGVkdWxlRnVsbFN0eWxlUmVidWlsZCgpIHsgbV9kb2N1bWVudC5zY2hlZHVsZUZ1
bGxTdHlsZVJlYnVpbGQoKTsgfQogCiAgICAgLy8gVzNDIEZ1bGxzY3JlZW4gQVBJCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCAxZDUwNDAyZDc3YzUxYTAyMGY0MzUwZjhmOWZhZjZi
NDkyMDQxZDZkLi45MDM3MGI4M2I4YzE0ZTM1MDliZGVlOTExZWIzNjM2YTAyMDRlMTE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIE1lc3Nh
Z2VQb3J0OjplbnRhbmdsZSgpCiAgICAgTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6OmZyb21D
b250ZXh0KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLmVudGFuZ2xlTG9jYWxQb3J0SW5UaGlz
UHJvY2Vzc1RvUmVtb3RlKG1faWRlbnRpZmllciwgbV9yZW1vdGVJZGVudGlmaWVyKTsKIH0KIAot
RXhjZXB0aW9uT3I8dm9pZD4gTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIG1lc3NhZ2VWYWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+PiYmIHRyYW5zZmVyKQorRXhjZXB0aW9uT3I8dm9pZD4gTWVzc2FnZVBvcnQ6
OnBvc3RNZXNzYWdlKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBKU0M6OkpTVmFsdWUgbWVz
c2FnZVZhbHVlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+JiYgdHJhbnNmZXIp
CiB7CiAgICAgTE9HKE1lc3NhZ2VQb3J0cywgIkF0dGVtcHRpbmcgdG8gcG9zdCBtZXNzYWdlIHRv
IHBvcnQgJXMgKHRvIGJlIHJlY2VpdmVkIGJ5IHBvcnQgJXMpIiwgbV9pZGVudGlmaWVyLmxvZ1N0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fcmVtb3RlSWRlbnRpZmllci5sb2dTdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAppbmRleCAwYjVmM2Q4N2MwMTU4
NDU1NjJiYzkyOWM3Y2Y4ZjhlYjc0ZGY0OTc3Li5jNzk0MTk3ZDhhZTIwZGVhNjFlN2IxY2I1YzU5
OWFhYjBkYzgxNDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaApAQCAtMzksNyArMzksNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxGcmFtZTsKIGNsYXNzIEpTT2JqZWN0OwogY2xh
c3MgSlNWYWx1ZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNTMsNyArNTIsNyBAQCBjbGFzcyBNZXNzYWdlUG9ydCBmaW5hbCA6IHB1
YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYQogICAg
IHN0YXRpYyBSZWY8TWVzc2FnZVBvcnQ+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
Y29uc3QgTWVzc2FnZVBvcnRJZGVudGlmaWVyJiBsb2NhbCwgY29uc3QgTWVzc2FnZVBvcnRJZGVu
dGlmaWVyJiByZW1vdGUpOwogICAgIHZpcnR1YWwgfk1lc3NhZ2VQb3J0KCk7CiAKLSAgICBFeGNl
cHRpb25Pcjx2b2lkPiBwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBt
ZXNzYWdlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+JiYpOworICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHBvc3RNZXNzYWdlKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFs
dWUgbWVzc2FnZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmKTsKIAogICAg
IHZvaWQgc3RhcnQoKTsKICAgICB2b2lkIGNsb3NlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVzc2FnZVBvcnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
LmlkbAppbmRleCAyYzJlNTVhZDBlYzFmNDQ5ZmEzZGFiOTg4NjRlNDJmNGI4ZjkxNTUwLi4zNzgw
ZGI1YTA2YmM5Nzc1OGM4YmQ2ODEwODM3NjA0MTMzYWZiYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNz
YWdlUG9ydC5pZGwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPUlt
cGwsCiAgICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCiBdIGludGVyZmFjZSBNZXNzYWdlUG9ydCA6
IEV2ZW50VGFyZ2V0IHsKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlv
bl0gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgc2VxdWVuY2U8b2JqZWN0
PiB0cmFuc2ZlciA9IFtdKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4
Y2VwdGlvbl0gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgc2VxdWVuY2U8
b2JqZWN0PiB0cmFuc2ZlciA9IFtdKTsKICAgICB2b2lkIHN0YXJ0KCk7CiAgICAgdm9pZCBjbG9z
ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggMDEzMmU2ODEyNmVkNDMyOTZj
ODMzMTAwZGE1ZTk1Mzc4OWQ1NzY3My4uOTQwOWU4ODczMmM2ZTkwY2ZhYmQxNWNmOGM4NzY3Mzhh
ZmVkNWMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAtMzUsNiArMzUsNyBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhbGxGcmFtZS5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0NSw3
ICsxNDYsNyBAQCB2b2lkIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50KGNvbnN0IEF0b21TdHJp
bmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbgogCiAvLyBGSVhNRTogV2UgbmVlZCB0
aGlzIHF1aXJrIGJlY2F1c2UgaUFkIFByb2R1Y2VyIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3
aXRoIGEgcmVsYXRlZFRhcmdldCB0aGF0IGlzIG5vdCBhbiBFdmVudFRhcmdldCAocmRhcjovL3By
b2JsZW0vMzA2NDAxMDEpLgogLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIHF1aXJrIHdoZW4gcG9z
c2libGUuCi12b2lkIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50UXVpcmsoRXhlY1N0YXRlJiBz
dGF0ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29u
c3QgQXRvbVN0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUmVm
UHRyPFdpbmRvd1Byb3h5PiYmIHZpZXcsIGludCBkZXRhaWwsIGludCBzY3JlZW5YLCBpbnQgc2Ny
ZWVuWSwgaW50IGNsaWVudFgsIGludCBjbGllbnRZLCBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5
LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksIHNob3J0IGJ1dHRvbiwgSlNWYWx1ZSByZWxh
dGVkVGFyZ2V0VmFsdWUpCit2b2lkIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50UXVpcmsoSlNH
bG9iYWxPYmplY3QmIHN0YXRlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBjb25zdCBBdG9tU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBj
YW5jZWxhYmxlLCBSZWZQdHI8V2luZG93UHJveHk+JiYgdmlldywgaW50IGRldGFpbCwgaW50IHNj
cmVlblgsIGludCBzY3JlZW5ZLCBpbnQgY2xpZW50WCwgaW50IGNsaWVudFksIGJvb2wgY3RybEtl
eSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgc2hvcnQgYnV0dG9u
LCBKU1ZhbHVlIHJlbGF0ZWRUYXJnZXRWYWx1ZSkKIHsKICAgICBFdmVudFRhcmdldCogcmVsYXRl
ZFRhcmdldCA9IG51bGxwdHI7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTYyLDcgKzE2Myw3IEBA
IHZvaWQgTW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnRRdWlyayhFeGVjU3RhdGUmIHN0YXRlLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBzCiAjZW5kaWYKICAgICAgICAgLy8gVGhpcyBpcyB3aGF0
IHRoZSBiaW5kaW5ncyBnZW5lcmF0b3Igd291bGQgaGF2ZSBwcm9kdWNlZC4KICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLSAgICAgICAg
cmVsYXRlZFRhcmdldCA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPEV2ZW50VGFy
Z2V0Pj4+KHN0YXRlLCByZWxhdGVkVGFyZ2V0VmFsdWUsIFtdKEV4ZWNTdGF0ZSYgc3RhdGUsIFRo
cm93U2NvcGUmIHNjb3BlKSB7CisgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBjb252ZXJ0PElETE51
bGxhYmxlPElETEludGVyZmFjZTxFdmVudFRhcmdldD4+PihzdGF0ZSwgcmVsYXRlZFRhcmdldFZh
bHVlLCBbXShKU0dsb2JhbE9iamVjdCYgc3RhdGUsIFRocm93U2NvcGUmIHNjb3BlKSB7CiAgICAg
ICAgICAgICB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMTQsICJyZWxhdGVk
VGFyZ2V0IiwgIk1vdXNlRXZlbnQiLCAiaW5pdE1vdXNlRXZlbnQiLCAiRXZlbnRUYXJnZXQiKTsK
ICAgICAgICAgfSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdm9p
ZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCmluZGV4IDBiY2I4MWJiM2IyOTkwMWMzNTU1ZTll
ZDY2OWE4NjBhZmQ4MWQ3MGUuLmFjMWY2ZGEzN2Y2ZThjMWYzYWI2YjI0N2ExNGY0YTZhMTVjN2Fi
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaApAQCAtMzQsNyArMzQsNiBAQAogbmFtZXNwYWNl
IEpTQyB7CiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBKU1ZhbHVlOwotdXNpbmcgRXhlY1N0YXRl
ID0gQ2FsbEZyYW1lOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCw3ICs2OSw3IEBA
IGNsYXNzIE1vdXNlRXZlbnQgOiBwdWJsaWMgTW91c2VSZWxhdGVkRXZlbnQgewogICAgICAgICBp
bnQgZGV0YWlsLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xp
ZW50WSwgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRh
S2V5LAogICAgICAgICBzaG9ydCBidXR0b24sIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0KTsK
IAotICAgIHZvaWQgaW5pdE1vdXNlRXZlbnRRdWlyayhKU0M6OkV4ZWNTdGF0ZSYsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBBdG9tU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBSZWZQdHI8V2luZG93UHJveHk+JiYsCisgICAgdm9pZCBpbml0TW91
c2VFdmVudFF1aXJrKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJs
ZSwgUmVmUHRyPFdpbmRvd1Byb3h5PiYmLAogICAgICAgICBpbnQgZGV0YWlsLCBpbnQgc2NyZWVu
WCwgaW50IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwgYm9vbCBjdHJsS2V5LCBi
b29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LAogICAgICAgICBzaG9ydCBi
dXR0b24sIEpTQzo6SlNWYWx1ZSByZWxhdGVkVGFyZ2V0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZl
bnQuaWRsCmluZGV4IDdlNjNkMjE3MjY2OTE3ZGYxYjg4NTlhNzg0NTJjYmI5ZDc5ZDhiZDAuLjZj
ZjllYzZjMWMxYWQ2ZDY1NjhjNDc4NjZmMDJlMTkzMzkzYjdhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91
c2VFdmVudC5pZGwKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgIC8vIEZJWE1FOiBVc2luZyAidW5k
ZWZpbmVkIiBhcyBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSBpcyB3cm9uZy4KICAgICAvLyBGSVhN
RTogcmVsYXRlZFRhcmdldCBzaG91bGQgYmUgb2YgdHlwZSBFdmVudFRhcmdldD8gYnV0IHdlIG5l
ZWQgdG8gdXNlIGFueSB0byBzdXBwb3J0IGEgcXVpcmsgZm9yIGlBZCBQcm9kdWNlciAocmRhcjov
L3Byb2JsZW0vMzA2NDAxMDEpLgotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGUmU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1pbml0TW91c2VFdmVudFF1aXJrXSB2b2lkIGluaXRN
b3VzZUV2ZW50KG9wdGlvbmFsIERPTVN0cmluZyB0eXBlID0gInVuZGVmaW5lZCIsCisgICAgW0Nh
bGxXaXRoPUdsb2JhbE9iamVjdCZTY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRlZEFz
PWluaXRNb3VzZUV2ZW50UXVpcmtdIHZvaWQgaW5pdE1vdXNlRXZlbnQob3B0aW9uYWwgRE9NU3Ry
aW5nIHR5cGUgPSAidW5kZWZpbmVkIiwKICAgICAgICAgb3B0aW9uYWwgYm9vbGVhbiBjYW5CdWJi
bGUgPSBmYWxzZSwgb3B0aW9uYWwgYm9vbGVhbiBjYW5jZWxhYmxlID0gZmFsc2UsCiAgICAgICAg
IG9wdGlvbmFsIFdpbmRvd1Byb3h5PyB2aWV3ID0gbnVsbCwgb3B0aW9uYWwgbG9uZyBkZXRhaWwg
PSAwLAogICAgICAgICBvcHRpb25hbCBsb25nIHNjcmVlblggPSAwLCBvcHRpb25hbCBsb25nIHNj
cmVlblkgPSAwLCBvcHRpb25hbCBsb25nIGNsaWVudFggPSAwLCBvcHRpb25hbCBsb25nIGNsaWVu
dFkgPSAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCmluZGV4IDg2ZWU4ZTVlN2Fh
N2I2YmNmNjIyOTU1MjAzYWM3NDA4ZTcwZTQwZmQuLmE5OTg3OWE1YjUxY2ViNjBlNGYwYTUzYzVk
ODkyY2FmMDAwOGNjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAKQEAgLTY2
LDcgKzY2LDcgQEAgUmVmPFBvcFN0YXRlRXZlbnQ+IFBvcFN0YXRlRXZlbnQ6OmNyZWF0ZUZvckJp
bmRpbmdzKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQb3BTdGF0ZUV2ZW50KTsKIH0KIAot
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gUG9wU3RhdGVFdmVudDo6dHJ5U2VyaWFsaXpl
U3RhdGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWN1dGlvblN0YXRlKQorUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gUG9wU3RhdGVFdmVudDo6dHJ5U2VyaWFsaXplU3RhdGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgZXhlY3V0aW9uU3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUpOwogICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmgKaW5kZXggYWQ2OWIyM2JmM2IzMWQ0ODBiZjQ0MjQw
YTQ2NTM1Yjc0YzE0ODk5OS4uNjEyODdhMTI2ZmJlYjM3ZWZlYmQ1MjFiNTEyYmM4ZThkZjQxMTIw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNz
IFBvcFN0YXRlRXZlbnQgZmluYWwgOiBwdWJsaWMgRXZlbnQgewogICAgIGNvbnN0IEpTVmFsdWVJ
bldyYXBwZWRPYmplY3QmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXJpYWxpemVkU3RhdGUuZ2V0KCk7IH0KIAotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHRyeVNlcmlhbGl6ZVN0YXRlKEpTQzo6RXhlY1N0YXRlJik7CisgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdHJ5U2VyaWFsaXplU3RhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCYp
OwogICAgIAogICAgIEhpc3RvcnkqIGhpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2hpc3Rvcnku
Z2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JlamVjdGVkUHJvbWlz
ZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlamVjdGVkUHJvbWlzZVRyYWNrZXIu
Y3BwCmluZGV4IGFiNzczMDZmMjdmMzM2YzdlNGU4OWZmODgyMWU1OTcxM2NlNzk4MDUuLjBiNWRk
N2FmOGYwMDE5MmQwYTA2NmExOTZlZWZlMTJmMzBjMjY2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SZWplY3RlZFByb21pc2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmVqZWN0ZWRQcm9taXNlVHJhY2tlci5jcHAKQEAgLTg1LDMyICs4NSwzMiBAQCBSZWpl
Y3RlZFByb21pc2VUcmFja2VyOjpSZWplY3RlZFByb21pc2VUcmFja2VyKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsCiAKIFJlamVjdGVkUHJvbWlzZVRyYWNrZXI6On5SZWplY3RlZFBy
b21pc2VUcmFja2VyKCkgPSBkZWZhdWx0OwogCi1zdGF0aWMgUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbVJlYXNvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHJlYXNvbikKK3N0YXRpYyBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRD
YWxsU3RhY2tGcm9tUmVhc29uKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHJlYXNvbikKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIFZNJiB2bSA9
IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKIAogICAgIC8vIEFsd2F5cyBjYXB0dXJlIGEgc3Rh
Y2sgZnJvbSB0aGUgZXhjZXB0aW9uIGlmIHRoaXMgcmVqZWN0aW9uIHdhcyBhbiBleGNlcHRpb24u
CiAgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKSkgewogICAgICAg
ICBpZiAoZXhjZXB0aW9uLT52YWx1ZSgpID09IHJlYXNvbikKLSAgICAgICAgICAgIHJldHVybiBj
cmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogICAgIH0KIAogICAgIC8vIE90aGVyd2lzZSwg
b25seSBjYXB0dXJlIGEgc3RhY2sgaWYgYSBkZWJ1Z2dlciBpcyBvcGVuLgotICAgIGlmIChzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCi0gICAgICAgIHJldHVybiBjcmVh
dGVTY3JpcHRDYWxsU3RhY2soJnN0YXRlKTsKKyAgICBpZiAobGV4aWNhbEdsb2JhbE9iamVjdC5k
ZWJ1Z2dlcigpKQorICAgICAgICByZXR1cm4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIFJlamVjdGVk
UHJvbWlzZVRyYWNrZXI6OnByb21pc2VSZWplY3RlZChFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2UmIHByb21pc2UpCit2b2lkIFJlamVj
dGVkUHJvbWlzZVRyYWNrZXI6OnByb21pc2VSZWplY3RlZChKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBKU1Byb21pc2UmIHByb21pc2UpCiB7CiAgICAgLy8gaHR0cHM6Ly9odG1sLnNw
ZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJl
amVjdGlvbnRyYWNrZXItaW1wbGVtZW50YXRpb24KIAotICAgIEpTVmFsdWUgcmVhc29uID0gcHJv
bWlzZS5yZXN1bHQoc3RhdGUudm0oKSk7Ci0gICAgbV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVk
UHJvbWlzZXMuYXBwZW5kKFVuaGFuZGxlZFByb21pc2UgeyBnbG9iYWxPYmplY3QsIHByb21pc2Us
IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21SZWFzb24oc3RhdGUsIHJlYXNvbikgfSk7CisgICAg
SlNWYWx1ZSByZWFzb24gPSBwcm9taXNlLnJlc3VsdChnbG9iYWxPYmplY3Qudm0oKSk7CisgICAg
bV9hYm91dFRvQmVOb3RpZmllZFJlamVjdGVkUHJvbWlzZXMuYXBwZW5kKFVuaGFuZGxlZFByb21p
c2UgeyBnbG9iYWxPYmplY3QsIHByb21pc2UsIGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21SZWFz
b24oZ2xvYmFsT2JqZWN0LCByZWFzb24pIH0pOwogfQogCi12b2lkIFJlamVjdGVkUHJvbWlzZVRy
YWNrZXI6OnByb21pc2VIYW5kbGVkKEV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEpTUHJvbWlzZSYgcHJvbWlzZSkKK3ZvaWQgUmVqZWN0ZWRQcm9taXNlVHJhY2tl
cjo6cHJvbWlzZUhhbmRsZWQoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNQcm9t
aXNlJiBwcm9taXNlKQogewogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVs
dGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtaG9zdHByb21pc2VyZWplY3Rpb250cmFja2VyLWlt
cGxlbWVudGF0aW9uCiAKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIFJlamVjdGVkUHJvbWlzZVRy
YWNrZXI6OnJlcG9ydFVuaGFuZGxlZFJlamVjdGlvbnMoVmVjdG9yPFVuaGFuZGxlZFByb21pc2U+
JgogICAgICAgICBhdXRvJiBkb21Qcm9taXNlID0gdW5oYW5kbGVkUHJvbWlzZS5wcm9taXNlKCk7
CiAgICAgICAgIGlmIChkb21Qcm9taXNlLmlzU3VzcGVuZGVkKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgYXV0byYgc3RhdGUgPSAqZG9tUHJvbWlzZS5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gKmRvbVBy
b21pc2UuZ2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIGF1dG8mIHByb21pc2UgPSAqZG9tUHJvbWlz
ZS5wcm9taXNlKCk7CiAKICAgICAgICAgaWYgKHByb21pc2UuaXNIYW5kbGVkKHZtKSkKQEAgLTE3
MSw3ICsxNzEsNyBAQCB2b2lkIFJlamVjdGVkUHJvbWlzZVRyYWNrZXI6OnJlcG9ydFVuaGFuZGxl
ZFJlamVjdGlvbnMoVmVjdG9yPFVuaGFuZGxlZFByb21pc2U+JgogICAgICAgICB0YXJnZXQtPmRp
c3BhdGNoRXZlbnQoZXZlbnQpOwogCiAgICAgICAgIGlmICghZXZlbnQtPmRlZmF1bHRQcmV2ZW50
ZWQoKSkKLSAgICAgICAgICAgIG1fY29udGV4dC5yZXBvcnRVbmhhbmRsZWRQcm9taXNlUmVqZWN0
aW9uKHN0YXRlLCBwcm9taXNlLCB1bmhhbmRsZWRQcm9taXNlLmNhbGxTdGFjaygpKTsKKyAgICAg
ICAgICAgIG1fY29udGV4dC5yZXBvcnRVbmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uKGxleGljYWxH
bG9iYWxPYmplY3QsIHByb21pc2UsIHVuaGFuZGxlZFByb21pc2UuY2FsbFN0YWNrKCkpOwogCiAg
ICAgICAgIGlmICghcHJvbWlzZS5pc0hhbmRsZWQodm0pKQogICAgICAgICAgICAgbV9vdXRzdGFu
ZGluZ1JlamVjdGVkUHJvbWlzZXMuc2V0KCZwcm9taXNlLCAmcHJvbWlzZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVqZWN0ZWRQcm9taXNlVHJhY2tlci5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL1JlamVjdGVkUHJvbWlzZVRyYWNrZXIuaAppbmRleCA4N2ZkNTU2YmZjNTg1Yjk3
ODIwMjE0Y2M5NDRhZGFiMGMxZGIwNGU0Li4yZDlkYTgwYWE3YWQxOTQxZWM2YjFjNjZjMDQ3YWRk
NDAwNzMxN2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVqZWN0ZWRQcm9taXNl
VHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZWplY3RlZFByb21pc2VUcmFja2Vy
LmgKQEAgLTUwLDggKzUwLDggQEAgY2xhc3MgUmVqZWN0ZWRQcm9taXNlVHJhY2tlciB7CiAgICAg
ZXhwbGljaXQgUmVqZWN0ZWRQcm9taXNlVHJhY2tlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
SlNDOjpWTSYpOwogICAgIH5SZWplY3RlZFByb21pc2VUcmFja2VyKCk7CiAKLSAgICB2b2lkIHBy
b21pc2VSZWplY3RlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpK
U1Byb21pc2UmKTsKLSAgICB2b2lkIHByb21pc2VIYW5kbGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OkpTUHJvbWlzZSYpOworICAgIHZvaWQgcHJvbWlzZVJlamVj
dGVkKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1Byb21pc2UmKTsKKyAgICB2b2lkIHByb21p
c2VIYW5kbGVkKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1Byb21pc2UmKTsKIAogICAgIHZv
aWQgcHJvY2Vzc1F1ZXVlU29vbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAKaW5kZXggMDAxMDM4Nzk4NzhhMGZlN2M3ZmVjZmVjNTcxYTM0MWVl
NWQyNTQ5MC4uNjlmZmZlYTg3NGZlNWMxNGUzZWI0ZjdiYjFiZDgzNmZkZTA1NGYzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtMjc4LDcg
KzI3OCw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHMoUmVhc29uRm9yU3VzcGVuc2lvbiB3aHkpCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
CiAgICAgaWYgKG1fYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCkgewotICAgICAgICAvLyBB
IHBhZ2UgbWF5IHN1YnNlcXVlbnRseSBzdXNwZW5kIERPTSBvYmplY3RzLCBzYXkgYXMgcGFydCBv
ZiBlbnRlcmluZyB0aGUgcGFnZSBjYWNoZSwgYWZ0ZXIgdGhlIGVtYmVkZGluZworICAgICAgICAv
LyBBIHBhZ2UgbWF5IHN1YnNlcXVlbnRseSBzdXNwZW5kIERPTSBvYmplY3RzLCBzYXkgYXMgcGFy
dCBvZiBlbnRlcmluZyB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBhZnRlciB0aGUgZW1iZWRkaW5n
CiAgICAgICAgIC8vIGNsaWVudCByZXF1ZXN0ZWQgdGhlIHBhZ2UgYmUgc3VzcGVuZGVkLiBXZSBp
Z25vcmUgc3VjaCByZXF1ZXN0cyBzbyBsb25nIGFzIHRoZSBlbWJlZGRpbmcgY2xpZW50IHJlcXVl
c3RlZAogICAgICAgICAvLyB0aGUgc3VzcGVuc2lvbiBmaXJzdC4gU2VlIDxyZGFyOi8vcHJvYmxl
bS8xMzc1NDg5Nj4gZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICAgQVNTRVJUKG1fcmVhc29uRm9y
U3VzcGVuZGluZ0FjdGl2ZURPTU9iamVjdHMgPT0gUmVhc29uRm9yU3VzcGVuc2lvbjo6UGFnZVdp
bGxCZVN1c3BlbmRlZCk7CkBAIC0zMDgsOCArMzA4LDggQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKFJlYXNvbkZvclN1c3BlbnNpb24gd2h5KQog
ICAgICAgICByZXR1cm4gU2hvdWxkQ29udGludWU6OlllczsKICAgICB9KTsKIAotICAgIC8vIElu
IGNhc2UgdGhlcmUgd2VyZSBwZW5kaW5nIG1lc3NhZ2VzIGF0IHRoZSB0aW1lIHRoZSBzY3JpcHQg
ZXhlY3V0aW9uIGNvbnRleHQgZW50ZXJlZCBQYWdlQ2FjaGUsCi0gICAgLy8gbWFrZSBzdXJlIHRo
b3NlIGdldCBkaXNwYXRjaGVkIHNob3J0bHkgYWZ0ZXIgcmVzdG9yaW5nIGZyb20gUGFnZUNhY2hl
LgorICAgIC8vIEluIGNhc2UgdGhlcmUgd2VyZSBwZW5kaW5nIG1lc3NhZ2VzIGF0IHRoZSB0aW1l
IHRoZSBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQgZW50ZXJlZCB0aGUgQmFja0ZvcndhcmRDYWNo
ZSwKKyAgICAvLyBtYWtlIHN1cmUgdGhvc2UgZ2V0IGRpc3BhdGNoZWQgc2hvcnRseSBhZnRlciBy
ZXN0b3JpbmcgZnJvbSB0aGUgQmFja0ZvcndhcmRDYWNoZS4KICAgICBwcm9jZXNzTWVzc2FnZVdp
dGhNZXNzYWdlUG9ydHNTb29uKCk7CiB9CiAKQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OnJlcG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgaW50IGxpbgogICAgICAgICBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoZXhjZXB0aW9uLT5t
X2Vycm9yTWVzc2FnZSwgZXhjZXB0aW9uLT5tX3NvdXJjZVVSTCwgZXhjZXB0aW9uLT5tX2xpbmVO
dW1iZXIsIGV4Y2VwdGlvbi0+bV9jb2x1bW5OdW1iZXIsIFdURk1vdmUoZXhjZXB0aW9uLT5tX2Nh
bGxTdGFjaykpOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlcG9ydFVuaGFu
ZGxlZFByb21pc2VSZWplY3Rpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTUHJvbWlz
ZSYgcHJvbWlzZSwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmIGNhbGxTdGFj
aykKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVwb3J0VW5oYW5kbGVkUHJvbWlzZVJl
amVjdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSlNDOjpKU1Byb21pc2UmIHByb21p
c2UsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3RhY2spCiB7CiAg
ICAgUGFnZSogcGFnZSA9IG51bGxwdHI7CiAgICAgaWYgKGlzPERvY3VtZW50Pih0aGlzKSkKQEAg
LTQyMCw3ICs0MjAsNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlcG9ydFVuaGFu
ZGxlZFByb21pc2VSZWplY3Rpb24oSlNDOjpFeGVjU3RhdGUmIHN0YQogICAgIGFkZENvbnNvbGVN
ZXNzYWdlKFdURk1vdmUobWVzc2FnZSkpOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQordm9pZCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVz
c2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIEpTQzo6
SlNHbG9iYWxPYmplY3QqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKQog
ewogICAgIGFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgc291cmNlVVJMLCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIsIDAsIHN0YXRlLCByZXF1ZXN0SWRlbnRpZmllcik7CiB9CkBA
IC01MzUsMTIgKzUzNSwxMiBAQCBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6Omhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1KU0M6OkV4ZWNTdGF0
ZSogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZXhlY1N0YXRlKCkKK0pTQzo6SlNHbG9iYWxPYmpl
Y3QqIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWNTdGF0ZSgpCiB7CiAgICAgaWYgKGlzPERv
Y3VtZW50PigqdGhpcykpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCp0aGlzKTsKICAgICAgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgp
OwotICAgICAgICByZXR1cm4gZnJhbWUgPyBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpIDogbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGZyYW1lID8gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9y
bWFsV29ybGQoKSkgOiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChpczxXb3JrZXJHbG9iYWxT
Y29wZT4oKnRoaXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgKaW5kZXggZWE0YjU3ZWEyMzY2MWQ3NWRjOGIyMTYxZGJjZWU5NmFiMTgwMzY4Yi4uNWNkYjMz
ZjkwZTdjMWZjMzY0ZWMwZWE2NTE2MWRmYjNmNWM4YWU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC00NSw3ICs0NSw2IEBAIGNsYXNzIEV4Y2Vw
dGlvbjsKIGNsYXNzIEpTUHJvbWlzZTsKIGNsYXNzIFZNOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNs
YXNzIFN0cm9uZzsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CkBAIC0xMDcsMTMgKzEwNiwxMyBAQCBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0IDogcHVibGljIFNlY3VyaXR5Q29udGV4dCB7CiAKICAgICBib29sIGNhbkluY2x1ZGVF
cnJvckRldGFpbHMoQ2FjaGVkU2NyaXB0KiwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAg
IHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGlu
ZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIEpTQzo6
RXhjZXB0aW9uKiwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBDYWNoZWRT
Y3JpcHQqID0gbnVsbHB0cik7Ci0gICAgdm9pZCByZXBvcnRVbmhhbmRsZWRQcm9taXNlUmVqZWN0
aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Byb21pc2UmLCBSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRDYWxsU3RhY2s+JiYpOworICAgIHZvaWQgcmVwb3J0VW5oYW5kbGVkUHJvbWlzZVJlamVj
dGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1Byb21pc2UmLCBSZWZQdHI8SW5zcGVj
dG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZENvbnNvbGVN
ZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlPiYmKSA9IDA7
CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIGFkZENvbnNvbGVNZXNzYWdlIGZ1bmN0aW9ucyBhcmUg
ZGVwcmVjYXRlZC4KICAgICAvLyBDYWxsZXJzIHNob3VsZCB0cnkgdG8gY3JlYXRlIHRoZSBDb25z
b2xlTWVzc2FnZSB0aGVtc2VsdmVzLgotICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIs
IEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZp
ZXIgPSAwKTsKKyAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwg
dW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiA9IG51bGxwdHIsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50
aWZpZXIgPSAwKSA9IDA7CiAKICAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4o
KSBjb25zdCA9IDA7CkBAIC0yMzgsNyArMjM3LDcgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCA6IHB1YmxpYyBTZWN1cml0eUNvbnRleHQgewogICAgICAgICByZXR1cm4gZW5zdXJlUmVq
ZWN0ZWRQcm9taXNlVHJhY2tlclNsb3coKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBK
U0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgSlNDOjpKU0ds
b2JhbE9iamVjdCogZXhlY1N0YXRlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZG9t
YWluRm9yQ2FjaGVQYXJ0aXRpb24oKSBjb25zdDsKICAgICB2b2lkIHNldERvbWFpbkZvckNhY2hl
UGFydGl0aW9uKFN0cmluZyYmIGRvbWFpbikgeyBtX2RvbWFpbkZvckNhY2hlUGFydGl0aW9uID0g
V1RGTW92ZShkb21haW4pOyB9CkBAIC0yODksNyArMjg4LDcgQEAgY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA6IHB1YmxpYyBTZWN1cml0eUNvbnRleHQgewogcHJpdmF0ZToKICAgICAvLyBU
aGUgZm9sbG93aW5nIGFkZE1lc3NhZ2UgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4KICAgICAvLyBD
YWxsZXJzIHNob3VsZCB0cnkgdG8gY3JlYXRlIHRoZSBDb25zb2xlTWVzc2FnZSB0aGVtc2VsdmVz
LgotICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpT
Y3JpcHRDYWxsU3RhY2s+JiYsIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIsIHVuc2lnbmVkIGxv
bmcgcmVxdWVzdElkZW50aWZpZXIgPSAwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkZE1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1
bW5OdW1iZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4mJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCogPSBudWxscHRyLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyID0g
MCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJl
ciwgaW50IGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYm
KSA9IDA7CiAgICAgYm9vbCBkaXNwYXRjaEVycm9yRXZlbnQoY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL21ha2VfZXZlbnRfZmFjdG9yeS5wbCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9tYWtlX2V2ZW50X2ZhY3RvcnkucGwKaW5kZXggOTZjMmQwZjc3ZDBiOGRjYjA0YzU3OTk5
OGI3MzQxMmVhYjEzMDRlMS4uMTM3YzIxMjU1ZjU3YmFjYzU0YjdmYzg3Y2QzYTZiMjA4ZDFlOTIy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfZXZlbnRfZmFjdG9yeS5wbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9ldmVudF9mYWN0b3J5LnBsCkBAIC05NywxMSAr
OTcsMTEgQEAgKCkKICAgICBwcmludCBGICJcbiI7CiAgICAgIyBGSVhNRTogV2h5IGRvZXMgRXZl
bnQgbmVlZCB0b05ld2x5Q3JlYXRlZCBidXQgRXZlbnRUYXJnZXQgbmVlZCB0b0pTPwogICAgIGlm
ICgkZmFjdG9yeUZ1bmN0aW9uIGVxICJ0b05ld2x5Q3JlYXRlZCIpIHsKLSAgICAgICAgcHJpbnQg
RiAiSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8JHtuYW1lc3BhY2V9PiYmIGltcGwpXG4iOwor
ICAgICAgICBwcmludCBGICJKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPCR7bmFtZXNw
YWNlfT4mJiBpbXBsKVxuIjsKICAgICAgICAgcHJpbnQgRiAie1xuIjsKICAgICAgICAgcHJpbnQg
RiAiICAgIHN3aXRjaCAoaW1wbC0+JHtpbnRlcmZhY2VNZXRob2ROYW1lfSgpKSB7XG4iOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHByaW50IEYgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgJHtuYW1lc3BhY2V9
JiBpbXBsKVxuIjsKKyAgICAgICAgcHJpbnQgRiAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0ds
b2JhbE9iamVjdCogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICR7bmFt
ZXNwYWNlfSYgaW1wbClcbiI7CiAgICAgICAgIHByaW50IEYgIntcbiI7CiAgICAgICAgIHByaW50
IEYgIiAgICBzd2l0Y2ggKGltcGwuJHtpbnRlcmZhY2VNZXRob2ROYW1lfSgpKSB7XG4iOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRIZWxwZXJzLmggYi9T
b3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSGVscGVycy5oCmluZGV4IGZlZmExOGMyYmEzZjBl
ODg2MjM3Zjk3MjdhZWNlNGFlMTZhY2YwZWMuLjk1ZjMwMzFhNTFkOTFjMmUzMDNiMTAzODRlMjYy
ZmNhM2NmMTA2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRIZWxw
ZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9taml0L0RPTUpJVEhlbHBlcnMuaApAQCAtNTMs
MTMgKzUzLDE0IEBAIGlubGluZSBDQ2FsbEhlbHBlcnM6Okp1bXAgYnJhbmNoSWZOb3RXZWFrSXNM
aXZlKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgd2Vha0ltCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZWROb2RlPgotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIHRvV3Jh
cHBlclNsb3coSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgdm9pZCogcmVzdWx0KQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IHRvV3JhcHBlclNsb3coSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB2b2lkKiBy
ZXN1bHQpCiB7Ci0gICAgQVNTRVJUKGV4ZWMpOwogICAgIEFTU0VSVChyZXN1bHQpOwogICAgIEFT
U0VSVChnbG9iYWxPYmplY3QpOwotICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cihnbG9iYWxPYmplY3QtPnZtKCksIGV4ZWMpOwotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVu
Y29kZSh0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2Jq
ZWN0KSwgKnN0YXRpY19jYXN0PFdyYXBwZWROb2RlKj4ocmVzdWx0KSkpOworICAgIEpTQzo6Vk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUo
dG9KUyhnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSwgKnN0YXRpY19jYXN0PFdyYXBwZWROb2RlKj4ocmVzdWx0KSkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVkVHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bWppdC9ET01KSVRJRExDb252ZXJ0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSURM
Q29udmVydC5oCmluZGV4IGM5ZmNmNTAyMTU2YTlmOTg3NThjNDUwNjhlYjg2ZmU1MWM4MWVkZjUu
LjJiNGUxNDA5MDg3ZmFmNzA3MDc4YTA3YzZjOGM1MjE5MDhkMjYxMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRJRExDb252ZXJ0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9taml0L0RPTUpJVElETENvbnZlcnQuaApAQCAtMzQsMjUgKzM0LDI1IEBAIHN0cnVjdCBE
aXJlY3RDb252ZXJ0ZXI7CiAKIHRlbXBsYXRlPD4KIHN0cnVjdCBEaXJlY3RDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBkaXJlY3RDb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1N0cmluZyogc3RyaW5nKQorICAgIHN0YXRpYyBTdHJpbmcgZGly
ZWN0Q29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkpTU3RyaW5nKiBzdHJpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gc3RyaW5nLT52YWx1ZSgm
c3RhdGUpOworICAgICAgICByZXR1cm4gc3RyaW5nLT52YWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8Pgogc3RydWN0IERpcmVjdENvbnZlcnRlcjxJRExB
dG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+PiB7Ci0gICAgc3RhdGljIFN0cmluZyBkaXJl
Y3RDb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1N0cmluZyogc3RyaW5nKQor
ICAgIHN0YXRpYyBTdHJpbmcgZGlyZWN0Q29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTU3RyaW5nKiBzdHJpbmcpCiAgICAgewotICAgICAgICBy
ZXR1cm4gc3RyaW5nLT50b0F0b21TdHJpbmcoJnN0YXRlKTsKKyAgICAgICAgcmV0dXJuIHN0cmlu
Zy0+dG9BdG9tU3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9CiB9OwogCiB0ZW1w
bGF0ZTw+CiBzdHJ1Y3QgRGlyZWN0Q29udmVydGVyPElETFJlcXVpcmVzRXhpc3RpbmdBdG9tU3Ry
aW5nQWRhcHRvcjxJRExET01TdHJpbmc+PiB7Ci0gICAgc3RhdGljIFN0cmluZyBkaXJlY3RDb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1N0cmluZyogc3RyaW5nKQorICAgIHN0
YXRpYyBTdHJpbmcgZGlyZWN0Q29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkpTU3RyaW5nKiBzdHJpbmcpCiAgICAgewotICAgICAgICByZXR1cm4g
c3RyaW5nLT50b0V4aXN0aW5nQXRvbVN0cmluZygmc3RhdGUpOworICAgICAgICByZXR1cm4gc3Ry
aW5nLT50b0V4aXN0aW5nQXRvbVN0cmluZygmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgfQog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRDYWNoZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTM3MzUzZjgzY2NlYmRjNDQyMzg5YWEyYTQzY2MxYmEzY2RjNzBhNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRDYWNoZS5jcHAKQEAg
LTAsMCArMSw1NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhY2tGb3J3
YXJkQ2FjaGUuaCIKKworI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisjaW5jbHVk
ZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgorI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRldmljZU1vdGlvbkNvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oIgorI2luY2x1ZGUgIkRpYWdub3N0aWNMb2dnaW5nS2V5cy5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIaXN0b3J5Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
Iklnbm9yZU9wZW5zRHVyaW5nVW5sb2FkQ291bnRJbmNyZW1lbnRlci5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNj
b3BlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdWJmcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgPHBhbC9Mb2dnaW5nLmg+CisjaW5jbHVkZSA8d3RmL01lbW9yeVByZXNzdXJl
SGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9TZXRGb3JTY29wZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyNkZWZpbmUgUENMT0coLi4uKSBMT0coQmFja0ZvcndhcmRDYWNoZSwgIiUqcyVzIiwgaW5kZW50
TGV2ZWwqNCwgIiIsIG1ha2VTdHJpbmcoX19WQV9BUkdTX18pLnV0ZjgoKS5kYXRhKCkpCisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBsb2dCYWNrRm9yd2FyZENhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNz
YWdlKERpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBjbGllbnQsIGNvbnN0IFN0cmluZyYgcmVhc29u
KQoreworICAgIGNsaWVudC5sb2dEaWFnbm9zdGljTWVzc2FnZShEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OmJhY2tGb3J3YXJkQ2FjaGVGYWlsdXJlS2V5KCksIHJlYXNvbiwgU2hvdWxkU2FtcGxlOjpO
byk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dCYWNrRm9yd2FyZENhY2hlRmFpbHVyZURp
YWdub3N0aWNNZXNzYWdlKFBhZ2UqIHBhZ2UsIGNvbnN0IFN0cmluZyYgcmVhc29uKQoreworICAg
IGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbG9nQmFja0ZvcndhcmRDYWNoZUZh
aWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpLCBy
ZWFzb24pOworfQorCitzdGF0aWMgYm9vbCBjYW5DYWNoZUZyYW1lKEZyYW1lJiBmcmFtZSwgRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQmIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCB1bnNpZ25lZCBp
bmRlbnRMZXZlbCkKK3sKKyAgICBQQ0xPRygiKy0tLSIpOworICAgIEZyYW1lTG9hZGVyJiBmcmFt
ZUxvYWRlciA9IGZyYW1lLmxvYWRlcigpOworCisgICAgLy8gUHJldmVudCBwYWdlIGNhY2hpbmcg
aWYgYSBzdWJmcmFtZSBpcyBzdGlsbCBpbiBwcm92aXNpb25hbCBsb2FkIHN0YWdlLgorICAgIC8v
IFdlIG9ubHkgZG8gdGhpcyBjaGVjayBmb3Igc3ViZnJhbWVzIGJlY2F1c2UgdGhlIG1haW4gZnJh
bWUgaXMgcmV1c2VkIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLgorICAgIGlmICghZnJh
bWUuaXNNYWluRnJhbWUoKSAmJiBmcmFtZUxvYWRlci5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92
aXNpb25hbCkgeworICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGlzIGluIHByb3Zpc2lvbmFsIGxv
YWQgc3RhZ2UiKTsKKyAgICAgICAgbG9nQmFja0ZvcndhcmRDYWNoZUZhaWx1cmVEaWFnbm9zdGlj
TWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpw
cm92aXNpb25hbExvYWRLZXkoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSAmJiBmcmFtZUxvYWRlci5zdGF0ZU1hY2hpbmUoKS5p
c0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpKSB7CisgICAgICAgIFBDTE9HKCIgICAt
TWFpbkZyYW1lIGlzIGRpc3BsYXlpbmcgaW5pdGlhbCBlbXB0eSBkb2N1bWVudCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKSB7Cisg
ICAgICAgIFBDTE9HKCIgICAtRnJhbWUgaGFzIG5vIGRvY3VtZW50Iik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWZyYW1lLmRvY3VtZW50KCktPmZyYW1lKCkpIHsK
KyAgICAgICAgUENMT0coIiAgIC1Eb2N1bWVudCBpcyBkZXRhY2hlZCBmcm9tIGZyYW1lIik7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWVMb2FkZXIuZG9j
dW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIWRvY3VtZW50TG9hZGVyKSB7CisgICAgICAgIFBDTE9H
KCIgICAtVGhlcmUgaXMgbm8gRG9jdW1lbnRMb2FkZXIgb2JqZWN0Iik7CisgICAgICAgIGxvZ0Jh
Y2tGb3J3YXJkQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9Eb2N1bWVudExvYWRlcktleSgpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFVSTCBjdXJyZW50VVJMID0gZG9jdW1l
bnRMb2FkZXItPnVybCgpOworICAgIFVSTCBuZXdVUkwgPSBmcmFtZUxvYWRlci5wcm92aXNpb25h
bERvY3VtZW50TG9hZGVyKCkgPyBmcmFtZUxvYWRlci5wcm92aXNpb25hbERvY3VtZW50TG9hZGVy
KCktPnVybCgpIDogVVJMKCk7CisgICAgaWYgKCFuZXdVUkwuaXNFbXB0eSgpKQorICAgICAgICBQ
Q0xPRygiIERldGVybWluaW5nIGlmIGZyYW1lIGNhbiBiZSBjYWNoZWQgbmF2aWdhdGluZyBmcm9t
ICgiLCBjdXJyZW50VVJMLnN0cmluZygpLCAiKSB0byAoIiwgbmV3VVJMLnN0cmluZygpLCAiKToi
KTsKKyAgICBlbHNlCisgICAgICAgIFBDTE9HKCIgRGV0ZXJtaW5pbmcgaWYgc3ViZnJhbWUgd2l0
aCBVUkwgKCIsIGN1cnJlbnRVUkwuc3RyaW5nKCksICIpIGNhbiBiZSBjYWNoZWQ6Iik7CisKKyAg
ICBib29sIGlzQ2FjaGVhYmxlID0gdHJ1ZTsKKyAgICAvLyBEbyBub3QgY2FjaGUgZXJyb3IgcGFn
ZXMgKHRoZXNlIGNhbiBiZSByZWNvZ25pemVkIGFzIHBhZ2VzIHdpdGggc3Vic3RpdHV0ZSBkYXRh
IG9yIHVucmVhY2hhYmxlIFVSTHMpLgorICAgIGlmIChkb2N1bWVudExvYWRlci0+c3Vic3RpdHV0
ZURhdGEoKS5pc1ZhbGlkKCkgJiYgIWRvY3VtZW50TG9hZGVyLT5zdWJzdGl0dXRlRGF0YSgpLmZh
aWxpbmdVUkwoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgUENMT0coIiAgIC1GcmFtZSBpcyBhbiBl
cnJvciBwYWdlIik7CisgICAgICAgIGxvZ0JhY2tGb3J3YXJkQ2FjaGVGYWlsdXJlRGlhZ25vc3Rp
Y01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6
aXNFcnJvclBhZ2VLZXkoKSk7CisgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgfQor
ICAgIGlmIChmcmFtZUxvYWRlci5zdWJmcmFtZUxvYWRlcigpLmNvbnRhaW5zUGx1Z2lucygpICYm
ICFmcmFtZS5wYWdlKCktPnNldHRpbmdzKCkuYmFja0ZvcndhcmRDYWNoZVN1cHBvcnRzUGx1Z2lu
cygpKSB7CisgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgY29udGFpbnMgcGx1Z2lucyIpOworICAg
ICAgICBsb2dCYWNrRm9yd2FyZENhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKGRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Omhhc1BsdWdpbnNLZXkoKSk7
CisgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmcmFtZS5pc01h
aW5GcmFtZSgpICYmICFmcmFtZUxvYWRlci5oaXN0b3J5KCkuY3VycmVudEl0ZW0oKSkgeworICAg
ICAgICBQQ0xPRygiICAgLU1haW4gZnJhbWUgaGFzIG5vIGN1cnJlbnQgaGlzdG9yeSBpdGVtIik7
CisgICAgICAgIGxvZ0JhY2tGb3J3YXJkQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9DdXJyZW50SGlz
dG9yeUl0ZW1LZXkoKSk7CisgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgfQorICAg
IGlmIChmcmFtZUxvYWRlci5xdWlja1JlZGlyZWN0Q29taW5nKCkpIHsKKyAgICAgICAgUENMT0co
IiAgIC1RdWljayByZWRpcmVjdCBpcyBjb21pbmciKTsKKyAgICAgICAgbG9nQmFja0ZvcndhcmRD
YWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpxdWlya1JlZGlyZWN0Q29taW5nS2V5KCkpOworICAgICAgICBp
c0NhY2hlYWJsZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZG9jdW1lbnRMb2FkZXItPmlzTG9h
ZGluZygpKSB7CisgICAgICAgIFBDTE9HKCIgICAtRG9jdW1lbnRMb2FkZXIgaXMgc3RpbGwgbG9h
ZGluZyIpOworICAgICAgICBsb2dCYWNrRm9yd2FyZENhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNz
YWdlKGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzTG9h
ZGluZ0tleSgpKTsKKyAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYg
KGRvY3VtZW50TG9hZGVyLT5pc1N0b3BwaW5nKCkpIHsKKyAgICAgICAgUENMT0coIiAgIC1Eb2N1
bWVudExvYWRlciBpcyBpbiB0aGUgbWlkZGxlIG9mIHN0b3BwaW5nIik7CisgICAgICAgIGxvZ0Jh
Y2tGb3J3YXJkQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6ZG9jdW1lbnRMb2FkZXJTdG9wcGluZ0tleSgp
KTsKKyAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBWZWN0b3I8QWN0
aXZlRE9NT2JqZWN0Kj4gdW5zdXNwZW5kYWJsZU9iamVjdHM7CisgICAgaWYgKGZyYW1lLmRvY3Vt
ZW50KCkgJiYgIWZyYW1lLmRvY3VtZW50KCktPmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzRm9y
RG9jdW1lbnRTdXNwZW5zaW9uKCZ1bnN1c3BlbmRhYmxlT2JqZWN0cykpIHsKKyAgICAgICAgUENM
T0coIiAgIC1UaGUgZG9jdW1lbnQgY2Fubm90IHN1c3BlbmQgaXRzIGFjdGl2ZSBET00gT2JqZWN0
cyIpOworICAgICAgICBmb3IgKGF1dG8qIGFjdGl2ZURPTU9iamVjdCA6IHVuc3VzcGVuZGFibGVP
YmplY3RzKSB7CisgICAgICAgICAgICBQQ0xPRygiICAgIC0gVW5zdXNwZW5kYWJsZTogIiwgYWN0
aXZlRE9NT2JqZWN0LT5hY3RpdmVET01PYmplY3ROYW1lKCkpOworICAgICAgICAgICAgZGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQubG9nRGlhZ25vc3RpY01lc3NhZ2UoRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjp1bnN1c3BlbmRhYmxlRE9NT2JqZWN0S2V5KCksIGFjdGl2ZURPTU9iamVjdC0+YWN0aXZl
RE9NT2JqZWN0TmFtZSgpLCBTaG91bGRTYW1wbGU6Ok5vKTsKKyAgICAgICAgICAgIFVOVVNFRF9Q
QVJBTShhY3RpdmVET01PYmplY3QpOworICAgICAgICB9CisgICAgICAgIGxvZ0JhY2tGb3J3YXJk
Q2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERp
YWdub3N0aWNMb2dnaW5nS2V5czo6Y2Fubm90U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNLZXkoKSk7
CisgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBpbnZlc3RpZ2F0aW5nIGNhY2hpbmcgZnJhbWVzIHRoYXQgaGF2ZSBhbiBhc3NvY2lh
dGVkCisgICAgLy8gYXBwbGljYXRpb24gY2FjaGUuIDxyZGFyOi8vcHJvYmxlbS81OTE3ODk5PiB0
cmFja3MgdGhhdCB3b3JrLgorICAgIGlmICghZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCkuY2FuQ2FjaGVJbkJhY2tGb3J3YXJkQ2FjaGUoKSkgeworICAgICAgICBQQ0xPRygi
ICAgLVRoZSBEb2N1bWVudExvYWRlciB1c2VzIGFuIGFwcGxpY2F0aW9uIGNhY2hlIik7CisgICAg
ICAgIGxvZ0JhY2tGb3J3YXJkQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6YXBwbGljYXRpb25DYWNoZUtl
eSgpKTsKKyAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmcmFt
ZUxvYWRlci5jbGllbnQoKS5jYW5DYWNoZVBhZ2UoKSkgeworICAgICAgICBQQ0xPRygiICAgLVRo
ZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1lIGNhbm5vdCBiZSBjYWNoZWQiKTsKKyAgICAgICAgbG9n
QmFja0ZvcndhcmRDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpkZW5pZWRCeUNsaWVudEtleSgpKTsKKyAg
ICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKEZyYW1lKiBjaGls
ZCA9IGZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVl
KCkubmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIWNhbkNhY2hlRnJhbWUoKmNoaWxkLCBk
aWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgaW5kZW50TGV2ZWwgKyAxKSkKKyAgICAgICAgICAgIGlz
Q2FjaGVhYmxlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIFBDTE9HKGlzQ2FjaGVhYmxlID8g
IiBGcmFtZSBDQU4gYmUgY2FjaGVkIiA6ICIgRnJhbWUgQ0FOTk9UIGJlIGNhY2hlZCIpOworICAg
IFBDTE9HKCIrLS0tIik7CisgICAgCisgICAgcmV0dXJuIGlzQ2FjaGVhYmxlOworfQorCitzdGF0
aWMgYm9vbCBjYW5DYWNoZVBhZ2UoUGFnZSYgcGFnZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCgh
cGFnZS5pc1Jlc3RvcmluZ0NhY2hlZFBhZ2UoKSk7CisKKyAgICB1bnNpZ25lZCBpbmRlbnRMZXZl
bCA9IDA7CisgICAgUENMT0coIi0tLS0tLS0tXG4gRGV0ZXJtaW5pbmcgaWYgcGFnZSBjYW4gYmUg
Y2FjaGVkOiIpOworCisgICAgRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQmIGRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50ID0gcGFnZS5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpOworICAgIGJvb2wgaXND
YWNoZWFibGUgPSBjYW5DYWNoZUZyYW1lKHBhZ2UubWFpbkZyYW1lKCksIGRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LCBpbmRlbnRMZXZlbCArIDEpOworCisgICAgaWYgKCFwYWdlLnNldHRpbmdzKCku
dXNlc0JhY2tGb3J3YXJkQ2FjaGUoKSB8fCBwYWdlLmlzUmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRC
eVdlYkluc3BlY3RvcigpKSB7CisgICAgICAgIFBDTE9HKCIgICAtUGFnZSBzZXR0aW5ncyBzYXlz
IGIvZiBjYWNoZSBkaXNhYmxlZCIpOworICAgICAgICBsb2dCYWNrRm9yd2FyZENhY2hlRmFpbHVy
ZURpYWdub3N0aWNNZXNzYWdlKGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OmlzRGlzYWJsZWRLZXkoKSk7CisgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7
CisgICAgfQorI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pICYmICFQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIGlmIChEZXZpY2VNb3Rpb25Db250cm9sbGVyOjppc0FjdGl2ZUF0KCZwYWdl
KSkgeworICAgICAgICBQQ0xPRygiICAgLVBhZ2UgaXMgdXNpbmcgRGV2aWNlTW90aW9uIik7Cisg
ICAgICAgIGxvZ0JhY2tGb3J3YXJkQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6ZGV2aWNlTW90aW9uS2V5
KCkpOworICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoRGV2aWNl
T3JpZW50YXRpb25Db250cm9sbGVyOjppc0FjdGl2ZUF0KCZwYWdlKSkgeworICAgICAgICBQQ0xP
RygiICAgLVBhZ2UgaXMgdXNpbmcgRGV2aWNlT3JpZW50YXRpb24iKTsKKyAgICAgICAgbG9nQmFj
a0ZvcndhcmRDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpkZXZpY2VPcmllbnRhdGlvbktleSgpKTsKKyAg
ICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKworICAgIEZyYW1lTG9h
ZFR5cGUgbG9hZFR5cGUgPSBwYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmxvYWRUeXBlKCk7Cisg
ICAgc3dpdGNoIChsb2FkVHlwZSkgeworICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6UmVsb2FkOgor
ICAgICAgICAvLyBObyBwb2ludCB3cml0aW5nIHRvIHRoZSBjYWNoZSBvbiBhIHJlbG9hZCwgc2lu
Y2Ugd2Ugd2lsbCBqdXN0IHdyaXRlIG92ZXIgaXQgYWdhaW4gd2hlbiB3ZSBsZWF2ZSB0aGF0IHBh
Z2UuCisgICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxvYWQiKTsKKyAgICAgICAg
bG9nQmFja0ZvcndhcmRDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9n
Z2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZWxvYWRLZXkoKSk7CisgICAgICAg
IGlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnJhbWVMb2Fk
VHlwZTo6U2FtZTogLy8gdXNlciBsb2FkcyBzYW1lIFVSTCBhZ2FpbiAoYnV0IG5vdCByZWxvYWQg
YnV0dG9uKQorICAgICAgICAvLyBObyBwb2ludCB3cml0aW5nIHRvIHRoZSBjYWNoZSBvbiBhIHNh
bWUgbG9hZCwgc2luY2Ugd2Ugd2lsbCBqdXN0IHdyaXRlIG92ZXIgaXQgYWdhaW4gd2hlbiB3ZSBs
ZWF2ZSB0aGF0IHBhZ2UuCisgICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBTYW1lIik7
CisgICAgICAgIGxvZ0JhY2tGb3J3YXJkQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6c2FtZUxvYWRLZXko
KSk7CisgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRnJhbWVMb2FkVHlwZTo6UmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0OgorICAg
ICAgICAvLyBEb24ndCB3cml0ZSB0byB0aGUgY2FjaGUgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHJl
ZGlyZWN0LCBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gc3RvcmUgdGhlIGZpbmFsIHBhZ2Ugd2UgZW5k
IHVwIG9uLgorICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczogUmVkaXJlY3RXaXRoTG9j
a2VkQmFja0ZvcndhcmRMaXN0Iik7CisgICAgICAgIGxvZ0JhY2tGb3J3YXJkQ2FjaGVGYWlsdXJl
RGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dn
aW5nS2V5czo6cmVkaXJlY3RLZXkoKSk7CisgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6UmVwbGFjZToKKyAgICAgICAg
Ly8gTm8gcG9pbnQgd3JpdGluZyB0byB0aGUgY2FjaGUgb24gYSByZXBsYWNlLCBzaW5jZSB3ZSB3
aWxsIGp1c3Qgd3JpdGUgb3ZlciBpdCBhZ2FpbiB3aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KKyAg
ICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFJlcGxhY2UiKTsKKyAgICAgICAgbG9nQmFj
a0ZvcndhcmRDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXBsYWNlS2V5KCkpOworICAgICAgICBpc0Nh
Y2hlYWJsZSA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6
OlJlbG9hZEZyb21PcmlnaW46IHsKKyAgICAgICAgLy8gTm8gcG9pbnQgd3JpdGluZyB0byB0aGUg
Y2FjaGUgb24gYSByZWxvYWQsIHNpbmNlIHdlIHdpbGwganVzdCB3cml0ZSBvdmVyIGl0IGFnYWlu
IHdoZW4gd2UgbGVhdmUgdGhhdCBwYWdlLgorICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlwZSBp
czogUmVsb2FkRnJvbU9yaWdpbiIpOworICAgICAgICBsb2dCYWNrRm9yd2FyZENhY2hlRmFpbHVy
ZURpYWdub3N0aWNNZXNzYWdlKGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OnJlbG9hZEZyb21PcmlnaW5LZXkoKSk7CisgICAgICAgIGlzQ2FjaGVhYmxlID0g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJl
bG9hZEV4cGlyZWRPbmx5OiB7CisgICAgICAgIC8vIE5vIHBvaW50IHdyaXRpbmcgdG8gdGhlIGNh
Y2hlIG9uIGEgcmVsb2FkLCBzaW5jZSB3ZSB3aWxsIGp1c3Qgd3JpdGUgb3ZlciBpdCBhZ2FpbiB3
aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KKyAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6
IFJlbG9hZFJldmFsaWRhdGluZ0V4cGlyZWQiKTsKKyAgICAgICAgbG9nQmFja0ZvcndhcmRDYWNo
ZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpyZWxvYWRSZXZhbGlkYXRpbmdFeHBpcmVkS2V5KCkpOworICAgICAg
ICBpc0NhY2hlYWJsZSA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBG
cmFtZUxvYWRUeXBlOjpTdGFuZGFyZDoKKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkJhY2s6Cisg
ICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkOgorICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6
SW5kZXhlZEJhY2tGb3J3YXJkOiAvLyBhIG11bHRpLWl0ZW0gaG9wIGluIHRoZSBiYWNrZm9yd2Fy
ZCBsaXN0CisgICAgICAgIC8vIENhY2hlYWJsZS4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIGlmIChpc0NhY2hlYWJsZSkKKyAgICAgICAgUENMT0coIiBQYWdlIENBTiBiZSBjYWNo
ZWRcbi0tLS0tLS0tIik7CisgICAgZWxzZQorICAgICAgICBQQ0xPRygiIFBhZ2UgQ0FOTk9UIGJl
IGNhY2hlZFxuLS0tLS0tLS0iKTsKKworICAgIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmxvZ0Rp
YWdub3N0aWNNZXNzYWdlV2l0aFJlc3VsdChEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmJhY2tGb3J3
YXJkQ2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpjYW5DYWNoZUtleSgpLCBpc0Nh
Y2hlYWJsZSA/IERpYWdub3N0aWNMb2dnaW5nUmVzdWx0UGFzcyA6IERpYWdub3N0aWNMb2dnaW5n
UmVzdWx0RmFpbCwgU2hvdWxkU2FtcGxlOjpObyk7CisgICAgcmV0dXJuIGlzQ2FjaGVhYmxlOwor
fQorCitCYWNrRm9yd2FyZENhY2hlJiBCYWNrRm9yd2FyZENhY2hlOjpzaW5nbGV0b24oKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxCYWNrRm9yd2FyZENhY2hlPiBnbG9iYWxCYWNrRm9y
d2FyZENhY2hlOworICAgIHJldHVybiBnbG9iYWxCYWNrRm9yd2FyZENhY2hlOworfQorCitCYWNr
Rm9yd2FyZENhY2hlOjpCYWNrRm9yd2FyZENhY2hlKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAg
ICAgUEFMOjpyZWdpc3Rlck5vdGlmeUNhbGxiYWNrKCJjb20uYXBwbGUuV2ViS2l0LnNob3dCYWNr
Rm9yd2FyZENhY2hlIiwgW10geworICAgICAgICAgICAgQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xl
dG9uKCkuZHVtcCgpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBCYWNrRm9yd2Fy
ZENhY2hlOjpkdW1wKCkgY29uc3QKK3sKKyAgICBXVEZMb2dBbHdheXMoIkJhY2svRm9yd2FyZCBD
YWNoZToiKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIENhY2hl
ZFBhZ2UmIGNhY2hlZFBhZ2UgPSAqaXRlbS0+bV9jYWNoZWRQYWdlOworICAgICAgICBXVEZMb2dB
bHdheXMoIiAgUGFnZSAlcCwgZG9jdW1lbnQgJXAgJXMiLCAmY2FjaGVkUGFnZS5wYWdlKCksIGNh
Y2hlZFBhZ2UuZG9jdW1lbnQoKSwgY2FjaGVkUGFnZS5kb2N1bWVudCgpID8gY2FjaGVkUGFnZS5k
b2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpIDogIiIpOworICAgIH0KK30K
KworYm9vbCBCYWNrRm9yd2FyZENhY2hlOjpjYW5DYWNoZShQYWdlJiBwYWdlKSBjb25zdAorewor
ICAgIGlmICghbV9tYXhTaXplKSB7CisgICAgICAgIGxvZ0JhY2tGb3J3YXJkQ2FjaGVGYWlsdXJl
RGlhZ25vc3RpY01lc3NhZ2UoJnBhZ2UsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNEaXNhYmxl
ZEtleSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpKSB7Cisg
ICAgICAgIGxvZ0JhY2tGb3J3YXJkQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoJnBhZ2Us
IERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW5kZXJNZW1vcnlQcmVzc3VyZUtleSgpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gY2FuQ2FjaGVQYWdlKHBh
Z2UpOworfQorCit2b2lkIEJhY2tGb3J3YXJkQ2FjaGU6OnBydW5lVG9TaXplTm93KHVuc2lnbmVk
IHNpemUsIFBydW5pbmdSZWFzb24gcHJ1bmluZ1JlYXNvbikKK3sKKyAgICBTZXRGb3JTY29wZTx1
bnNpZ25lZD4gY2hhbmdlKG1fbWF4U2l6ZSwgc2l6ZSk7CisgICAgcHJ1bmUocHJ1bmluZ1JlYXNv
bik7Cit9CisKK3ZvaWQgQmFja0ZvcndhcmRDYWNoZTo6c2V0TWF4U2l6ZSh1bnNpZ25lZCBtYXhT
aXplKQoreworICAgIG1fbWF4U2l6ZSA9IG1heFNpemU7CisgICAgcHJ1bmUoUHJ1bmluZ1JlYXNv
bjo6Tm9uZSk7Cit9CisKK3Vuc2lnbmVkIEJhY2tGb3J3YXJkQ2FjaGU6OmZyYW1lQ291bnQoKSBj
b25zdAoreworICAgIHVuc2lnbmVkIGZyYW1lQ291bnQgPSBtX2l0ZW1zLnNpemUoKTsKKyAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIEFTU0VSVChpdGVtLT5tX2NhY2hl
ZFBhZ2UpOworICAgICAgICBmcmFtZUNvdW50ICs9IGl0ZW0tPm1fY2FjaGVkUGFnZS0+Y2FjaGVk
TWFpbkZyYW1lKCktPmRlc2NlbmRhbnRGcmFtZUNvdW50KCk7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBmcmFtZUNvdW50OworfQorCit2b2lkIEJhY2tGb3J3YXJkQ2FjaGU6Om1hcmtQYWdlc0Zv
ckRldmljZU9yUGFnZVNjYWxlQ2hhbmdlZChQYWdlJiBwYWdlKQoreworICAgIGZvciAoYXV0byYg
aXRlbSA6IG1faXRlbXMpIHsKKyAgICAgICAgQ2FjaGVkUGFnZSYgY2FjaGVkUGFnZSA9ICppdGVt
LT5tX2NhY2hlZFBhZ2U7CisgICAgICAgIGlmICgmcGFnZS5tYWluRnJhbWUoKSA9PSAmY2FjaGVk
UGFnZS5jYWNoZWRNYWluRnJhbWUoKS0+dmlldygpLT5mcmFtZSgpKQorICAgICAgICAgICAgY2Fj
aGVkUGFnZS5tYXJrRm9yRGV2aWNlT3JQYWdlU2NhbGVDaGFuZ2VkKCk7CisgICAgfQorfQorCit2
b2lkIEJhY2tGb3J3YXJkQ2FjaGU6Om1hcmtQYWdlc0ZvckNvbnRlbnRzU2l6ZUNoYW5nZWQoUGFn
ZSYgcGFnZSkKK3sKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIENh
Y2hlZFBhZ2UmIGNhY2hlZFBhZ2UgPSAqaXRlbS0+bV9jYWNoZWRQYWdlOworICAgICAgICBpZiAo
JnBhZ2UubWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCktPnZpZXco
KS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGNhY2hlZFBhZ2UubWFya0ZvckNvbnRlbnRzU2l6ZUNo
YW5nZWQoKTsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCit2b2lkIEJhY2tG
b3J3YXJkQ2FjaGU6Om1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQorewor
ICAgIGZvciAoYXV0byYgaXRlbSA6IG1faXRlbXMpIHsKKyAgICAgICAgQVNTRVJUKGl0ZW0tPm1f
Y2FjaGVkUGFnZSk7CisgICAgICAgIGl0ZW0tPm1fY2FjaGVkUGFnZS0+bWFya0ZvckNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIFN0cmluZyBw
cnVuaW5nUmVhc29uVG9EaWFnbm9zdGljTG9nZ2luZ0tleShQcnVuaW5nUmVhc29uIHBydW5pbmdS
ZWFzb24pCit7CisgICAgc3dpdGNoIChwcnVuaW5nUmVhc29uKSB7CisgICAgY2FzZSBQcnVuaW5n
UmVhc29uOjpNZW1vcnlQcmVzc3VyZToKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5n
S2V5czo6cHJ1bmVkRHVlVG9NZW1vcnlQcmVzc3VyZUtleSgpOworICAgIGNhc2UgUHJ1bmluZ1Jl
YXNvbjo6UHJvY2Vzc1N1c3BlbmRlZDoKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5n
S2V5czo6cHJ1bmVkRHVlVG9Qcm9jZXNzU3VzcGVuZGVkKCk7CisgICAgY2FzZSBQcnVuaW5nUmVh
c29uOjpSZWFjaGVkTWF4U2l6ZToKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nS2V5
czo6cHJ1bmVkRHVlVG9NYXhTaXplUmVhY2hlZCgpOworICAgIGNhc2UgUHJ1bmluZ1JlYXNvbjo6
Tm9uZToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCitzdGF0aWMgdm9pZCBzZXRCYWNrRm9yd2Fy
ZENhY2hlU3RhdGUoUGFnZSYgcGFnZSwgRG9jdW1lbnQ6OkJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSBC
YWNrRm9yd2FyZENhY2hlU3RhdGUpCit7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkg
eworICAgICAgICBpZiAoYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAg
ICAgICAgIGRvY3VtZW50LT5zZXRCYWNrRm9yd2FyZENhY2hlU3RhdGUoQmFja0ZvcndhcmRDYWNo
ZVN0YXRlKTsKKyAgICB9Cit9CisKKy8vIFdoZW4gZW50ZXJpbmcgYmFjay9mb3J3YXJkIGNhY2hl
LCB0ZWFyIGRvd24gdGhlIHJlbmRlciB0cmVlIGJlZm9yZSBzZXR0aW5nIHRoZSBpbi1jYWNoZSBm
bGFnLgorLy8gVGhpcyBtYWludGFpbnMgdGhlIGludmFyaWFudCB0aGF0IHJlbmRlciB0cmVlcyBh
cmUgbmV2ZXIgcHJlc2VudCBpbiB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgorLy8gTm90ZSB0aGF0
IGRlc3RydWN0aW9uIGhhcHBlbnMgYm90dG9tLXVwIHNvIHRoYXQgdGhlIG1haW4gZnJhbWUncyB0
cmVlIGRpZXMgbGFzdC4KK3N0YXRpYyB2b2lkIGRlc3Ryb3lSZW5kZXJUcmVlKEZyYW1lJiBtYWlu
RnJhbWUpCit7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUudHJlZSgpLnRyYXZl
cnNlUHJldmlvdXMoQ2FuV3JhcDo6WWVzKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZVByZXZpb3VzKENhbldyYXA6Ok5vKSkgeworICAgICAgICBpZiAoIWZyYW1lLT5kb2N1
bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
KmZyYW1lLT5kb2N1bWVudCgpOworICAgICAgICBpZiAoZG9jdW1lbnQuaGFzTGl2aW5nUmVuZGVy
VHJlZSgpKQorICAgICAgICAgICAgZG9jdW1lbnQuZGVzdHJveVJlbmRlclRyZWUoKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIGZpcmVQYWdlSGlkZUV2ZW50UmVjdXJzaXZlbHkoRnJhbWUmIGZy
YW1lKQoreworICAgIGF1dG8qIGRvY3VtZW50ID0gZnJhbWUuZG9jdW1lbnQoKTsKKyAgICBpZiAo
IWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBzdG9wTG9hZGluZygpIHdpbGwg
ZmlyZSB0aGUgcGFnZWhpZGUgZXZlbnQgaW4gZWFjaCBzdWJmcmFtZSBhbmQgdGhlIEhUTUwgc3Bl
Y2lmaWNhdGlvbiBzdGF0ZXMKKyAgICAvLyB0aGF0IHRoZSBwYXJlbnQgZG9jdW1lbnQncyBpZ25v
cmUtb3BlbnMtZHVyaW5nLXVubG9hZCBjb3VudGVyIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB3aGls
ZSB0aGUKKyAgICAvLyBwYWdlaGlkZSBldmVudCBpcyBiZWluZyBmaXJlZCBpbiBpdHMgc3ViZnJh
bWVzOgorICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dz
ZXJzLmh0bWwjdW5sb2FkLWEtZG9jdW1lbnQKKyAgICBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENv
dW50SW5jcmVtZW50ZXIgaWdub3JlT3BlbnNEdXJpbmdVbmxvYWRDb3VudEluY3JlbWVudGVyKGRv
Y3VtZW50KTsKKworICAgIGZyYW1lLmxvYWRlcigpLnN0b3BMb2FkaW5nKFVubG9hZEV2ZW50UG9s
aWN5VW5sb2FkQW5kUGFnZUhpZGUpOworCisgICAgZm9yIChSZWZQdHI8RnJhbWU+IGNoaWxkID0g
ZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5u
ZXh0U2libGluZygpKQorICAgICAgICBmaXJlUGFnZUhpZGVFdmVudFJlY3Vyc2l2ZWx5KCpjaGls
ZCk7Cit9CisKK2Jvb2wgQmFja0ZvcndhcmRDYWNoZTo6YWRkSWZDYWNoZWFibGUoSGlzdG9yeUl0
ZW0mIGl0ZW0sIFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKGl0ZW0uaXNJbkJhY2tGb3J3YXJkQ2Fj
aGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFwYWdlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zdG9wRm9yQmFj
a0ZvcndhcmRDYWNoZSgpOworCisgICAgaWYgKCFjYW5DYWNoZSgqcGFnZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXBhZ2UtPmlzVXRpbGl0eVBh
Z2UoKSwgIlV0aWxpdHkgcGFnZXMgc3VjaCBhcyBTVkdJbWFnZSBwYWdlcyBzaG91bGQgbmV2ZXIg
Z28gaW50byBCYWNrRm9yd2FyZENhY2hlIik7CisKKyAgICBzZXRCYWNrRm9yd2FyZENhY2hlU3Rh
dGUoKnBhZ2UsIERvY3VtZW50OjpBYm91dFRvRW50ZXJCYWNrRm9yd2FyZENhY2hlKTsKKworICAg
IC8vIEZvY3VzIHRoZSBtYWluIGZyYW1lLCBkZWZvY3VzaW5nIGEgZm9jdXNlZCBzdWJmcmFtZSAo
aWYgd2UgaGF2ZSBvbmUpLiBXZSBkbyB0aGlzIGhlcmUsCisgICAgLy8gYmVmb3JlIHRoZSBwYWdl
IGVudGVycyB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCB3aGlsZSB3ZSBzdGlsbCBjYW4gZGlzcGF0
Y2ggRE9NIGJsdXIvZm9jdXMgZXZlbnRzLgorICAgIGlmIChwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5mb2N1c2VkRnJhbWUoKSkKKyAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9j
dXNlZEZyYW1lKCZwYWdlLT5tYWluRnJhbWUoKSk7CisKKyAgICAvLyBGaXJlIHRoZSBwYWdlaGlk
ZSBldmVudCBpbiBhbGwgZnJhbWVzLgorICAgIGZpcmVQYWdlSGlkZUV2ZW50UmVjdXJzaXZlbHko
cGFnZS0+bWFpbkZyYW1lKCkpOworCisgICAgZGVzdHJveVJlbmRlclRyZWUocGFnZS0+bWFpbkZy
YW1lKCkpOworCisgICAgLy8gU3RvcCBhbGwgbG9hZHMgYWdhaW4gYmVmb3JlIGNoZWNraW5nIGlm
IHdlIGNhbiBzdGlsbCBjYWNoZSB0aGUgcGFnZSBhZnRlciBmaXJpbmcgdGhlIHBhZ2VoaWRlCisg
ICAgLy8gZXZlbnQsIHNpbmNlIHRoZSBwYWdlIG1heSBoYXZlIHN0YXJ0ZWQgcGluZyBsb2FkcyBp
biBpdHMgcGFnZWhpZGUgZXZlbnQgaGFuZGxlci4KKyAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2Fk
ZXIoKS5zdG9wRm9yQmFja0ZvcndhcmRDYWNoZSgpOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUg
cGFnZSBpcyBzdGlsbCBwYWdlLWNhY2hlYWJsZSBhZnRlciBmaXJpbmcgdGhlIHBhZ2VoaWRlIGV2
ZW50LiBUaGUgSlMgZXZlbnQgaGFuZGxlcnMKKyAgICAvLyBjb3VsZCBoYXZlIGFsdGVyZWQgdGhl
IHBhZ2UgaW4gYSB3YXkgdGhhdCBjb3VsZCBwcmV2ZW50IGNhY2hpbmcuCisgICAgaWYgKCFjYW5D
YWNoZSgqcGFnZSkpIHsKKyAgICAgICAgc2V0QmFja0ZvcndhcmRDYWNoZVN0YXRlKCpwYWdlLCBE
b2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHNldEJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgqcGFnZSwgRG9jdW1lbnQ6Oklu
QmFja0ZvcndhcmRDYWNoZSk7CisKKyAgICB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24n
dCBmaXJlIGFueSBKUyBldmVudHMgaW4gdGhpcyBzY29wZS4KKyAgICAgICAgU2NyaXB0RGlzYWxs
b3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOworCisgICAgICAg
IGl0ZW0uc2V0Q2FjaGVkUGFnZShtYWtlVW5pcXVlPENhY2hlZFBhZ2U+KCpwYWdlKSk7CisgICAg
ICAgIGl0ZW0ubV9wcnVuaW5nUmVhc29uID0gUHJ1bmluZ1JlYXNvbjo6Tm9uZTsKKyAgICAgICAg
bV9pdGVtcy5hZGQoJml0ZW0pOworICAgIH0KKyAgICBwcnVuZShQcnVuaW5nUmVhc29uOjpSZWFj
aGVkTWF4U2l6ZSk7CisKKyAgICBSRUxFQVNFX0xPRyhCYWNrRm9yd2FyZENhY2hlLCAiQmFja0Zv
cndhcmRDYWNoZTo6YWRkSWZDYWNoZWFibGUgaXRlbTogJXMsIHNpemU6ICV1IC8gJXUiLCBpdGVt
LmlkZW50aWZpZXIoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBwYWdlQ291bnQoKSwgbWF4U2l6
ZSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFn
ZT4gQmFja0ZvcndhcmRDYWNoZTo6dGFrZShIaXN0b3J5SXRlbSYgaXRlbSwgUGFnZSogcGFnZSkK
K3sKKyAgICBpZiAoIWl0ZW0ubV9jYWNoZWRQYWdlKSB7CisgICAgICAgIGlmIChpdGVtLm1fcHJ1
bmluZ1JlYXNvbiAhPSBQcnVuaW5nUmVhc29uOjpOb25lKQorICAgICAgICAgICAgbG9nQmFja0Zv
cndhcmRDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBwcnVuaW5nUmVhc29uVG9E
aWFnbm9zdGljTG9nZ2luZ0tleShpdGVtLm1fcHJ1bmluZ1JlYXNvbikpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX2l0ZW1zLnJlbW92ZSgmaXRlbSk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBpdGVtLnRha2VDYWNoZWRQYWdl
KCk7CisKKyAgICBSRUxFQVNFX0xPRyhCYWNrRm9yd2FyZENhY2hlLCAiQmFja0ZvcndhcmRDYWNo
ZTo6dGFrZSBpdGVtOiAlcywgc2l6ZTogJXUgLyAldSIsIGl0ZW0uaWRlbnRpZmllcigpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIHBhZ2VDb3VudCgpLCBtYXhTaXplKCkpOworCisgICAgaWYgKGNh
Y2hlZFBhZ2UtPmhhc0V4cGlyZWQoKSB8fCAocGFnZSAmJiBwYWdlLT5pc1Jlc291cmNlQ2FjaGlu
Z0Rpc2FibGVkQnlXZWJJbnNwZWN0b3IoKSkpIHsKKyAgICAgICAgTE9HKEJhY2tGb3J3YXJkQ2Fj
aGUsICJOb3QgcmVzdG9yaW5nIHBhZ2UgZm9yICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJl
Y2F1c2UgY2FjaGUgZW50cnkgaGFzIGV4cGlyZWQiLCBpdGVtLnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgbG9nQmFja0ZvcndhcmRDYWNoZUZhaWx1cmVEaWFnbm9zdGlj
TWVzc2FnZShwYWdlLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmV4cGlyZWRLZXkoKSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBjYWNoZWRQYWdlOworfQor
Cit2b2lkIEJhY2tGb3J3YXJkQ2FjaGU6OnJlbW92ZUFsbEl0ZW1zRm9yUGFnZShQYWdlJiBwYWdl
KQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2lz
SW5SZW1vdmVBbGxJdGVtc0ZvclBhZ2UsICJXZSBzaG91bGQgbm90IHJlZW50ZXIgdGhpcyBtZXRo
b2QiKTsKKyAgICBTZXRGb3JTY29wZTxib29sPiBpblJlbW92ZUFsbEl0ZW1zRm9yUGFnZVNjb3Bl
IHsgbV9pc0luUmVtb3ZlQWxsSXRlbXNGb3JQYWdlLCB0cnVlIH07CisjZW5kaWYKKworICAgIGZv
ciAoYXV0byBpdCA9IG1faXRlbXMuYmVnaW4oKTsgaXQgIT0gbV9pdGVtcy5lbmQoKTspIHsKKyAg
ICAgICAgLy8gSW5jcmVtZW50IGl0ZXJhdG9yIGZpcnN0IHNvIGl0IHN0YXlzIHZhbGlkIGFmdGVy
IHRoZSByZW1vdmFsLgorICAgICAgICBhdXRvIGN1cnJlbnQgPSBpdDsKKyAgICAgICAgKytpdDsK
KyAgICAgICAgaWYgKCYoKmN1cnJlbnQpLT5tX2NhY2hlZFBhZ2UtPnBhZ2UoKSA9PSAmcGFnZSkg
eworICAgICAgICAgICAgUkVMRUFTRV9MT0coQmFja0ZvcndhcmRDYWNoZSwgIkJhY2tGb3J3YXJk
Q2FjaGU6OnJlbW92ZUFsbEl0ZW1zRm9yUGFnZSByZW1vdmluZyBpdGVtOiAlcywgc2l6ZTogJXUg
LyAldSIsICgqY3VycmVudCktPmlkZW50aWZpZXIoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBw
YWdlQ291bnQoKSAtIDEsIG1heFNpemUoKSk7CisgICAgICAgICAgICAoKmN1cnJlbnQpLT5zZXRD
YWNoZWRQYWdlKG51bGxwdHIpOworICAgICAgICAgICAgbV9pdGVtcy5yZW1vdmUoY3VycmVudCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NhY2hlZFBhZ2UqIEJhY2tGb3J3YXJkQ2FjaGU6Omdl
dChIaXN0b3J5SXRlbSYgaXRlbSwgUGFnZSogcGFnZSkKK3sKKyAgICBDYWNoZWRQYWdlKiBjYWNo
ZWRQYWdlID0gaXRlbS5tX2NhY2hlZFBhZ2UuZ2V0KCk7CisgICAgaWYgKCFjYWNoZWRQYWdlKSB7
CisgICAgICAgIGlmIChpdGVtLm1fcHJ1bmluZ1JlYXNvbiAhPSBQcnVuaW5nUmVhc29uOjpOb25l
KQorICAgICAgICAgICAgbG9nQmFja0ZvcndhcmRDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2Fn
ZShwYWdlLCBwcnVuaW5nUmVhc29uVG9EaWFnbm9zdGljTG9nZ2luZ0tleShpdGVtLm1fcHJ1bmlu
Z1JlYXNvbikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoY2Fj
aGVkUGFnZS0+aGFzRXhwaXJlZCgpIHx8IChwYWdlICYmIHBhZ2UtPmlzUmVzb3VyY2VDYWNoaW5n
RGlzYWJsZWRCeVdlYkluc3BlY3RvcigpKSkgeworICAgICAgICBMT0coQmFja0ZvcndhcmRDYWNo
ZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVj
YXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIGl0ZW0udXJsKCkuc3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICBsb2dCYWNrRm9yd2FyZENhY2hlRmFpbHVyZURpYWdub3N0aWNN
ZXNzYWdlKHBhZ2UsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6ZXhwaXJlZEtleSgpKTsKKyAgICAg
ICAgcmVtb3ZlKGl0ZW0pOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0
dXJuIGNhY2hlZFBhZ2U7Cit9CisKK3ZvaWQgQmFja0ZvcndhcmRDYWNoZTo6cmVtb3ZlKEhpc3Rv
cnlJdGVtJiBpdGVtKQoreworICAgIC8vIFNhZmVseSBpZ25vcmUgYXR0ZW1wdHMgdG8gcmVtb3Zl
IGl0ZW1zIG5vdCBpbiB0aGUgY2FjaGUuCisgICAgaWYgKCFpdGVtLm1fY2FjaGVkUGFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9pdGVtcy5yZW1vdmUoJml0ZW0pOworICAgIGl0ZW0uc2V0
Q2FjaGVkUGFnZShudWxscHRyKTsKKworICAgIFJFTEVBU0VfTE9HKEJhY2tGb3J3YXJkQ2FjaGUs
ICJCYWNrRm9yd2FyZENhY2hlOjpyZW1vdmUgaXRlbTogJXMsIHNpemU6ICV1IC8gJXUiLCBpdGVt
LmlkZW50aWZpZXIoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBwYWdlQ291bnQoKSwgbWF4U2l6
ZSgpKTsKKworfQorCit2b2lkIEJhY2tGb3J3YXJkQ2FjaGU6OnBydW5lKFBydW5pbmdSZWFzb24g
cHJ1bmluZ1JlYXNvbikKK3sKKyAgICB3aGlsZSAocGFnZUNvdW50KCkgPiBtYXhTaXplKCkpIHsK
KyAgICAgICAgYXV0byBvbGRlc3RJdGVtID0gbV9pdGVtcy50YWtlRmlyc3QoKTsKKyAgICAgICAg
b2xkZXN0SXRlbS0+c2V0Q2FjaGVkUGFnZShudWxscHRyKTsKKyAgICAgICAgb2xkZXN0SXRlbS0+
bV9wcnVuaW5nUmVhc29uID0gcHJ1bmluZ1JlYXNvbjsKKyAgICAgICAgUkVMRUFTRV9MT0coQmFj
a0ZvcndhcmRDYWNoZSwgIkJhY2tGb3J3YXJkQ2FjaGU6OnBydW5lIHJlbW92aW5nIGl0ZW06ICVz
LCBzaXplOiAldSAvICV1Iiwgb2xkZXN0SXRlbS0+aWRlbnRpZmllcigpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIHBhZ2VDb3VudCgpLCBtYXhTaXplKCkpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9y
d2FyZENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ2FjaGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hZTRlNjBmYTQ2ZWVmNmY2MjRhMTQwZjBlMmNlMWNlNDNiMDNjZTE3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENhY2hlLmgK
QEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDYWNoZWRQYWdlOworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworCitlbnVtIGNsYXNzIFBy
dW5pbmdSZWFzb24geyBOb25lLCBQcm9jZXNzU3VzcGVuZGVkLCBNZW1vcnlQcmVzc3VyZSwgUmVh
Y2hlZE1heFNpemUgfTsKKworY2xhc3MgQmFja0ZvcndhcmRDYWNoZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQmFja0ZvcndhcmRDYWNoZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgLy8gRnVuY3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwgYmFjay9m
b3J3YXJkIGNhY2hlLgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBCYWNrRm9yd2FyZENhY2hl
JiBzaW5nbGV0b24oKTsKKworICAgIGJvb2wgY2FuQ2FjaGUoUGFnZSYpIGNvbnN0OworCisgICAg
Ly8gVXNlZCB3aGVuIG1lbW9yeSBpcyBsb3cgdG8gcHJ1bmUgc29tZSBjYWNoZWQgcGFnZXMuCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZVRvU2l6ZU5vdyh1bnNpZ25lZCBtYXhTaXplLCBQ
cnVuaW5nUmVhc29uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1heFNpemUodW5zaWdu
ZWQpOyAvLyBudW1iZXIgb2YgcGFnZXMgdG8gY2FjaGUuCisgICAgdW5zaWduZWQgbWF4U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWF4U2l6ZTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBh
ZGRJZkNhY2hlYWJsZShIaXN0b3J5SXRlbSYsIFBhZ2UqKTsgLy8gUHJ1bmVzIGlmIG1heFNpemUo
KSBpcyBleGNlZWRlZC4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZShIaXN0b3J5SXRl
bSYpOworICAgIENhY2hlZFBhZ2UqIGdldChIaXN0b3J5SXRlbSYsIFBhZ2UqKTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gdGFrZShIaXN0b3J5SXRlbSYsIFBhZ2UqKTsKKworICAg
IHZvaWQgcmVtb3ZlQWxsSXRlbXNGb3JQYWdlKFBhZ2UmKTsKKworICAgIHVuc2lnbmVkIHBhZ2VD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXMuc2l6ZSgpOyB9CisgICAgV0VCQ09SRV9FWFBP
UlQgdW5zaWduZWQgZnJhbWVDb3VudCgpIGNvbnN0OworCisgICAgdm9pZCBtYXJrUGFnZXNGb3JE
ZXZpY2VPclBhZ2VTY2FsZUNoYW5nZWQoUGFnZSYpOworICAgIHZvaWQgbWFya1BhZ2VzRm9yQ29u
dGVudHNTaXplQ2hhbmdlZChQYWdlJik7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHZv
aWQgbWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOworI2VuZGlmCisKK3By
aXZhdGU6CisgICAgQmFja0ZvcndhcmRDYWNoZSgpOworICAgIH5CYWNrRm9yd2FyZENhY2hlKCkg
PSBkZWxldGU7IC8vIE1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAt
LSBXZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgorCisgICAgc3RhdGljIGJvb2wg
Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSYpOworCisgICAgdm9pZCBwcnVu
ZShQcnVuaW5nUmVhc29uKTsKKyAgICB2b2lkIGR1bXAoKSBjb25zdDsKKworICAgIExpc3RIYXNo
U2V0PFJlZlB0cjxIaXN0b3J5SXRlbT4+IG1faXRlbXM7CisgICAgdW5zaWduZWQgbV9tYXhTaXpl
IHswfTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1faXNJblJlbW92ZUFsbEl0
ZW1zRm9yUGFnZSB7IGZhbHNlIH07CisjZW5kaWYKKworICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5l
dmVyRGVzdHJveWVkPEJhY2tGb3J3YXJkQ2FjaGU+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAppbmRleCA4ZjFlNGRhMDM2
YTQyYjRiNWVmNzBhZjVlYmQxM2IwMzg2ZThmMjdmLi44N2FiMTczMTNkMzYyZDNhZWQ5MDM1ODEz
NmI4YzczMjk3NDYyOTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hl
ZEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcApA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZEZy
YW1lLmgiCiAKKyNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAjaW5jbHVkZSAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgpAQCAtNDEsNyArNDIsNiBAQAogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9uRGlzYWJsZXIuaCIKICNpbmNsdWRlICJQYWdl
LmgiCi0jaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAj
aW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgpAQCAtMTA2LDEzICsxMDYsMTMgQEAgdm9pZCBDYWNoZWRGcmFtZUJhc2U6OnJlc3Rv
cmUoKQogICAgICAgICBpZiAobV9kb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygpKQogICAgICAgICAg
ICAgbV9kb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnVucGF1c2VBbmltYXRpb25zKCk7
CiAKLSAgICAgICAgbV9kb2N1bWVudC0+cmVzdW1lKFJlYXNvbkZvclN1c3BlbnNpb246OlBhZ2VD
YWNoZSk7CisgICAgICAgIG1fZG9jdW1lbnQtPnJlc3VtZShSZWFzb25Gb3JTdXNwZW5zaW9uOjpC
YWNrRm9yd2FyZENhY2hlKTsKIAogICAgICAgICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gdXBkYXRl
IGFueSBwbGF0Zm9ybSBzY3JpcHQgb2JqZWN0cyBhZnRlciByZXN0b3JpbmcgdGhlCiAgICAgICAg
IC8vIGNhY2hlZCBwYWdlLgogICAgICAgICBmcmFtZS0+c2NyaXB0KCkudXBkYXRlUGxhdGZvcm1T
Y3JpcHRPYmplY3RzKCk7CiAKLSAgICAgICAgZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpZFJl
c3RvcmVGcm9tUGFnZUNhY2hlKCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5k
aWRSZXN0b3JlRnJvbUJhY2tGb3J3YXJkQ2FjaGUoKTsKIAogICAgICAgICBwcnVuZURldGFjaGVk
Q2hpbGRGcmFtZXMoKTsKIApAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgQ2FjaGVkRnJhbWVCYXNl
OjpyZXN0b3JlKCkKICAgICB9CiAjZW5kaWYKIAotICAgIGZyYW1lLT52aWV3KCktPmRpZFJlc3Rv
cmVGcm9tUGFnZUNhY2hlKCk7CisgICAgZnJhbWUtPnZpZXcoKS0+ZGlkUmVzdG9yZUZyb21CYWNr
Rm9yd2FyZENhY2hlKCk7CiB9CiAKIENhY2hlZEZyYW1lOjpDYWNoZWRGcmFtZShGcmFtZSYgZnJh
bWUpCkBAIC0xNTAsNyArMTUwLDcgQEAgQ2FjaGVkRnJhbWU6OkNhY2hlZEZyYW1lKEZyYW1lJiBm
cmFtZSkKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnRMb2Fk
ZXIpOwogICAgIEFTU0VSVChtX3ZpZXcpOwotICAgIEFTU0VSVChtX2RvY3VtZW50LT5wYWdlQ2Fj
aGVTdGF0ZSgpID09IERvY3VtZW50OjpJblBhZ2VDYWNoZSk7CisgICAgQVNTRVJUKG1fZG9jdW1l
bnQtPmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpJbkJhY2tGb3J3YXJkQ2Fj
aGUpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQobV9kb2N1bWVudC0+ZG9tV2luZG93KCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG1fZG9jdW1lbnQtPmZyYW1lKCkpOwpAQCAtMTY5LDE0ICsxNjksMTQg
QEAgQ2FjaGVkRnJhbWU6OkNhY2hlZEZyYW1lKEZyYW1lJiBmcmFtZSkKICAgICBSRUxFQVNFX0FT
U0VSVChtX2RvY3VtZW50LT5kb21XaW5kb3coKS0+ZnJhbWUoKSk7CiAKICAgICAvLyBBY3RpdmUg
RE9NIG9iamVjdHMgbXVzdCBiZSBzdXNwZW5kZWQgYmVmb3JlIHdlIGNhY2hlIHRoZSBmcmFtZSBz
Y3JpcHQgZGF0YS4KLSAgICBtX2RvY3VtZW50LT5zdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb246
OlBhZ2VDYWNoZSk7CisgICAgbV9kb2N1bWVudC0+c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9u
OjpCYWNrRm9yd2FyZENhY2hlKTsKIAogICAgIG1fY2FjaGVkRnJhbWVTY3JpcHREYXRhID0gbWFr
ZVVuaXF1ZTxTY3JpcHRDYWNoZWRGcmFtZURhdGE+KGZyYW1lKTsKIAotICAgIG1fZG9jdW1lbnQt
PmRvbVdpbmRvdygpLT5zdXNwZW5kRm9yUGFnZUNhY2hlKCk7CisgICAgbV9kb2N1bWVudC0+ZG9t
V2luZG93KCktPnN1c3BlbmRGb3JCYWNrRm9yd2FyZENhY2hlKCk7CiAKICAgICAvLyBDbGVhciBG
cmFtZVZpZXcgdG8gcmVzZXQgZmxhZ3Mgc3VjaCBhcyAnZmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0Q2FsbGJhY2tQZW5kaW5nJyBzbyB0aGF0IHRoZQotICAgIC8vICdEaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXQnIGNhbGxiYWNrIGdldHMgY2FsbGVkIGFnYWluc3Qgd2hlbiByZXN0b3Jp
bmcgZnJvbSBQYWdlQ2FjaGUuCisgICAgLy8gJ0RpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dCcgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYWdhaW5zdCB3aGVuIHJlc3RvcmluZyBmcm9tIHRoZSBC
YWNrRm9yd2FyZENhY2hlLgogICAgIG1fdmlldy0+cmVzZXRMYXlvdXRNaWxlc3RvbmVzKCk7CiAK
ICAgICAvLyBUaGUgbWFpbiBmcmFtZSBpcyByZXVzZWQgZm9yIHRoZSBuYXZpZ2F0aW9uIGFuZCB0
aGUgb3BlbmVyIGxpbmsgdG8gaXRzIHNob3VsZCB0aHVzIHBlcnNpc3QuCkBAIC0xODUsMTMgKzE4
NSwxMyBAQCBDYWNoZWRGcmFtZTo6Q2FjaGVkRnJhbWUoRnJhbWUmIGZyYW1lKQogCiAgICAgZnJh
bWUubG9hZGVyKCkuY2xpZW50KCkuc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUodGhpcyk7
CiAKLSAgICAvLyBkb2N1bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlKCkgY2FuIHNldCB1cCBh
IGxheW91dCB0aW1lciBvbiB0aGUgRnJhbWVWaWV3LCBzbyBjbGVhciB0aW1lcnMgYWZ0ZXIgdGhh
dC4KKyAgICAvLyBkb2N1bWVudFdpbGxTdXNwZW5kRm9yQmFja0ZvcndhcmRDYWNoZSgpIGNhbiBz
ZXQgdXAgYSBsYXlvdXQgdGltZXIgb24gdGhlIEZyYW1lVmlldywgc28gY2xlYXIgdGltZXJzIGFm
dGVyIHRoYXQuCiAgICAgZnJhbWUuY2xlYXJUaW1lcnMoKTsKIAogICAgIC8vIERlY29uc3RydWN0
IHRoZSBGcmFtZVRyZWUsIHRvIHJlc3RvcmUgaXQgbGF0ZXIuCiAgICAgLy8gV2UgZG8gdGhpcyBm
b3IgdHdvIHJlYXNvbnM6CiAgICAgLy8gMSAtIFdlIHJldXNlIHRoZSBtYWluIGZyYW1lLCBzbyB3
aGVuIGl0IG5hdmlnYXRlcyB0byBhIG5ldyBwYWdlIGxvYWQgaXQgbmVlZHMgdG8gc3RhcnQgd2l0
aCBhIGJsYW5rIEZyYW1lVHJlZS4KLSAgICAvLyAyIC0gSXQncyBtdWNoIGVhc2llciB0byBkZXN0
cm95IGEgQ2FjaGVkRnJhbWUgd2hpbGUgaXQgcmVzaWRlcyBpbiB0aGUgUGFnZUNhY2hlIGlmIGl0
IGlzIGRpc2Nvbm5lY3RlZCBmcm9tIGl0cyBwYXJlbnQuCisgICAgLy8gMiAtIEl0J3MgbXVjaCBl
YXNpZXIgdG8gZGVzdHJveSBhIENhY2hlZEZyYW1lIHdoaWxlIGl0IHJlc2lkZXMgaW4gdGhlIEJh
Y2tGb3J3YXJkQ2FjaGUgaWYgaXQgaXMgZGlzY29ubmVjdGVkIGZyb20gaXRzIHBhcmVudC4KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZEZyYW1lcy5zaXplKCk7ICsraSkKICAg
ICAgICAgZnJhbWUudHJlZSgpLnJlbW92ZUNoaWxkKG1fY2hpbGRGcmFtZXNbaV0tPnZpZXcoKS0+
ZnJhbWUoKSk7CiAKQEAgLTIzNSwxMSArMjM1LDExIEBAIHZvaWQgQ2FjaGVkRnJhbWU6OmNsZWFy
KCkKICAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIGNsZWFy
KCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBGcmFtZXMgcmVwcmVzZW50aW5nIGRvY3VtZW50
cyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIHBhZ2UgY2FjaGUuCisgICAgLy8gY2xlYXIoKSBz
aG91bGQgb25seSBiZSBjYWxsZWQgZm9yIEZyYW1lcyByZXByZXNlbnRpbmcgZG9jdW1lbnRzIHRo
YXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgogICAgIC8vIFRoaXMg
bWVhbnMgdGhlIENhY2hlZEZyYW1lIGhhcyBiZWVuOgogICAgIC8vIDEgLSBTdWNjZXNzZnVsbHkg
cmVzdG9yZSgpJ2QgYnkgZ29pbmcgYmFjay9mb3J3YXJkLgotICAgIC8vIDIgLSBkZXN0cm95KCkn
ZWQgYmVjYXVzZSB0aGUgUGFnZUNhY2hlIGlzIHBydW5pbmcgb3IgdGhlIFdlYlZpZXcgd2FzIGNs
b3NlZC4KLSAgICBBU1NFUlQobV9kb2N1bWVudC0+cGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVu
dDo6Tm90SW5QYWdlQ2FjaGUpOworICAgIC8vIDIgLSBkZXN0cm95KCknZWQgYmVjYXVzZSB0aGUg
QmFja0ZvcndhcmRDYWNoZSBpcyBwcnVuaW5nIG9yIHRoZSBXZWJWaWV3IHdhcyBjbG9zZWQuCisg
ICAgQVNTRVJUKG1fZG9jdW1lbnQtPmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50
OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwogICAgIEFTU0VSVChtX3ZpZXcpOwogICAgIEFTU0VS
VCghbV9kb2N1bWVudC0+ZnJhbWUoKSB8fCBtX2RvY3VtZW50LT5mcmFtZSgpID09ICZtX3ZpZXct
PmZyYW1lKCkpOwogCkBAIC0yNTksOCArMjU5LDggQEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJv
eSgpCiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgLy8g
T25seSBDYWNoZWRGcmFtZXMgdGhhdCBhcmUgc3RpbGwgaW4gdGhlIFBhZ2VDYWNoZSBzaG91bGQg
YmUgZGVzdHJveWVkIGluIHRoaXMgbWFubmVyCi0gICAgQVNTRVJUKG1fZG9jdW1lbnQtPnBhZ2VD
YWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6OkluUGFnZUNhY2hlKTsKKyAgICAvLyBPbmx5IENhY2hl
ZEZyYW1lcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUgQmFja0ZvcndhcmRDYWNoZSBzaG91bGQgYmUg
ZGVzdHJveWVkIGluIHRoaXMgbWFubmVyCisgICAgQVNTRVJUKG1fZG9jdW1lbnQtPmJhY2tGb3J3
YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpJbkJhY2tGb3J3YXJkQ2FjaGUpOwogICAgIEFT
U0VSVChtX3ZpZXcpOwogICAgIEFTU0VSVCghbV9kb2N1bWVudC0+ZnJhbWUoKSk7CiAKQEAgLTI4
MSwxMSArMjgxLDExIEBAIHZvaWQgQ2FjaGVkRnJhbWU6OmRlc3Ryb3koKQogCiAgICAgbV92aWV3
LT5mcmFtZSgpLmFuaW1hdGlvbigpLmRldGFjaEZyb21Eb2N1bWVudChtX2RvY3VtZW50LmdldCgp
KTsKIAotICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0byBjYWxsIHJlbW92ZUFsbEV2ZW50
TGlzdGVuZXJzIGhlcmU/IFdoZW4gdGhlIGRvY3VtZW50IGlzIGluIHBhZ2UgY2FjaGUsIHRoaXMg
bWV0aG9kIHdvbid0IHdvcmsKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gY2FsbCBy
ZW1vdmVBbGxFdmVudExpc3RlbmVycyBoZXJlPyBXaGVuIHRoZSBkb2N1bWVudCBpcyBpbiBiYWNr
L2ZvcndhcmQgY2FjaGUsIHRoaXMgbWV0aG9kIHdvbid0IHdvcmsKICAgICAvLyBmdWxseSBhbnl3
YXksIGJlY2F1c2UgdGhlIGRvY3VtZW50IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIGl0cyBET01X
aW5kb3cgb2JqZWN0IChkdWUgdG8gYmVpbmcgZnJhbWVsZXNzKS4KICAgICBtX2RvY3VtZW50LT5y
ZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogCi0gICAgbV9kb2N1bWVudC0+c2V0UGFnZUNhY2hl
U3RhdGUoRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKKyAgICBtX2RvY3VtZW50LT5zZXRCYWNr
Rm9yd2FyZENhY2hlU3RhdGUoRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7CiAgICAg
bV9kb2N1bWVudC0+cHJlcGFyZUZvckRlc3RydWN0aW9uKCk7CiAKICAgICBjbGVhcigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5o
IGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oCmluZGV4
IGY5NzNiYTY0Y2Q0NjUxOGRkZmNiZGQ2OTQ5YzM3N2M4ZDFmOWYzNTMuLmVhOGMyNjE4NzQ4ZDFj
MDM4YWM1NzRlOWIxZDMzMDVmZjVmYjdjZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hp
c3RvcnkvQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0NhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmgKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBnaXZlIGVh
Y2ggcGxhdGZvcm0gYSB2ZXNzZWwgdG8gc3RvcmUgcGxhdGZvcm0gZGF0YSB3aGVuIGEgcGFnZQot
Ly8gZ29lcyBpbnRvIHRoZSBCYWNrL0ZvcndhcmQgcGFnZSBjYWNoZSwgYW5kIHBlcmZvcm0gc29t
ZSBhY3Rpb24gd2l0aCB0aGF0IGRhdGEgd2hlbiB0aGUgcGFnZSBjb21lcyBvdXQuICAKKy8vIGdv
ZXMgaW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBhbmQgcGVyZm9ybSBzb21lIGFjdGlvbiB3
aXRoIHRoYXQgZGF0YSB3aGVuIHRoZSBwYWdlIGNvbWVzIG91dC4KIC8vIEVhY2ggcGxhdGZvcm0g
c2hvdWxkIHN1YmNsYXNzIHRoaXMgY2xhc3MgYXMgbmVjY2Vzc2FyeQogCiBjbGFzcyBDYWNoZWRG
cmFtZVBsYXRmb3JtRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hp
c3RvcnlJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCmlu
ZGV4IGE3OTIzNGRiMmFkYmRlYWZiNjYwZDM3ZTI3NDUyMjFmNGJlZGU3ZTQuLmQ1Mzc3YWIwZjdj
YzFmM2U0NzE5NzVjMjA4MDBiZWUxMTg1MjEyZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlz
dG9yeUl0ZW0uY3BwCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJIaXN0b3J5SXRlbS5oIgogCisjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgog
I2luY2x1ZGUgIkNhY2hlZFBhZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IktleWVkQ29kaW5nLmgiCi0jaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC0xNzQsOSArMTc0LDkgQEAgYm9vbCBIaXN0b3J5SXRlbTo6
aGFzQ2FjaGVkUGFnZUV4cGlyZWQoKSBjb25zdAogCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRDYWNo
ZWRQYWdlKHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiYmIGNhY2hlZFBhZ2UpCiB7Ci0gICAg
Ym9vbCB3YXNJblBhZ2VDYWNoZSA9IGlzSW5QYWdlQ2FjaGUoKTsKKyAgICBib29sIHdhc0luQmFj
a0ZvcndhcmRDYWNoZSA9IGlzSW5CYWNrRm9yd2FyZENhY2hlKCk7CiAgICAgbV9jYWNoZWRQYWdl
ID0gV1RGTW92ZShjYWNoZWRQYWdlKTsKLSAgICBpZiAod2FzSW5QYWdlQ2FjaGUgIT0gaXNJblBh
Z2VDYWNoZSgpKQorICAgIGlmICh3YXNJbkJhY2tGb3J3YXJkQ2FjaGUgIT0gaXNJbkJhY2tGb3J3
YXJkQ2FjaGUoKSkKICAgICAgICAgbm90aWZ5Q2hhbmdlZCgpOwogfQogCkBAIC0yMjIsNyArMjIy
LDcgQEAgdm9pZCBIaXN0b3J5SXRlbTo6c2V0VVJMU3RyaW5nKGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKQogCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRVUkwoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAg
UGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKnRoaXMpOworICAgIEJhY2tGb3J3YXJkQ2Fj
aGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqdGhpcyk7CiAgICAgc2V0VVJMU3RyaW5nKHVybC5zdHJp
bmcoKSk7CiAgICAgY2xlYXJEb2N1bWVudFN0YXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hp
c3RvcnlJdGVtLmgKaW5kZXggZjg1NTA4ZjEyM2RhZTJjZGY5YmZiZDUwM2ZlZWUzZTkxNjQ3OTQ5
Yi4uNTJjYWI4MzQ0MDM0OTQ3Mzc0YWIwYWQwNDJlMjc0ZDhkMjI3ODVkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvSGlzdG9yeUl0ZW0uaApAQCAtNTksNyArNTksNyBAQCBlbnVtIGNsYXNzIFBydW5p
bmdSZWFzb247CiBXRUJDT1JFX0VYUE9SVCBleHRlcm4gdm9pZCAoKm5vdGlmeUhpc3RvcnlJdGVt
Q2hhbmdlZCkoSGlzdG9yeUl0ZW0mKTsKIAogY2xhc3MgSGlzdG9yeUl0ZW0gOiBwdWJsaWMgUmVm
Q291bnRlZDxIaXN0b3J5SXRlbT4gewotICAgIGZyaWVuZCBjbGFzcyBQYWdlQ2FjaGU7CisgICAg
ZnJpZW5kIGNsYXNzIEJhY2tGb3J3YXJkQ2FjaGU7CiAKIHB1YmxpYzogCiAgICAgc3RhdGljIFJl
ZjxIaXN0b3J5SXRlbT4gY3JlYXRlKCkKQEAgLTk1LDcgKzk1LDcgQEAgY2xhc3MgSGlzdG9yeUl0
ZW0gOiBwdWJsaWMgUmVmQ291bnRlZDxIaXN0b3J5SXRlbT4gewogICAgIFdFQkNPUkVfRVhQT1JU
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29u
c3QgU3RyaW5nJiB0aXRsZSgpIGNvbnN0OwogICAgIAotICAgIGJvb2wgaXNJblBhZ2VDYWNoZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUGFnZS5nZXQoKTsgfQorICAgIGJvb2wgaXNJbkJhY2tG
b3J3YXJkQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFBhZ2UuZ2V0KCk7IH0KICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGhhc0NhY2hlZFBhZ2VFeHBpcmVkKCkgY29uc3Q7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEFsdGVybmF0ZVRpdGxlKGNvbnN0IFN0cmluZyYpOwpAQCAt
MjY2LDcgKzI2Niw3IEBAIGNsYXNzIEhpc3RvcnlJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8SGlz
dG9yeUl0ZW0+IHsKICAgICBSZWZQdHI8Rm9ybURhdGE+IG1fZm9ybURhdGE7CiAgICAgU3RyaW5n
IG1fZm9ybUNvbnRlbnRUeXBlOwogCi0gICAgLy8gUGFnZUNhY2hlIGNvbnRyb2xzIHRoZXNlIGZp
ZWxkcy4KKyAgICAvLyBCYWNrRm9yd2FyZENhY2hlIGNvbnRyb2xzIHRoZXNlIGZpZWxkcy4KICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gbV9jYWNoZWRQYWdlOwogICAgIFBydW5pbmdS
ZWFzb24gbV9wcnVuaW5nUmVhc29uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L1BhZ2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMWYzODIxMGZmY2EzMTUzMThlNzE3ZDYw
NTQwNTVhNmM1MGJmMjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNTU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBhZ2VD
YWNoZS5oIgotCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKLSNpbmNsdWRlICJC
YWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCi0jaW5jbHVk
ZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRGV2aWNlTW90aW9uQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmgiCi0jaW5jbHVkZSAiRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1
ZGUgIkZvY3VzQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgotI2luY2x1ZGUgIkhpc3RvcnlDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiSWdu
b3JlT3BlbnNEdXJpbmdVbmxvYWRDb3VudEluY3JlbWVudGVyLmgiCi0jaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUu
aCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCi0j
aW5jbHVkZSA8cGFsL0xvZ2dpbmcuaD4KLSNpbmNsdWRlIDx3dGYvTWVtb3J5UHJlc3N1cmVIYW5k
bGVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Nl
dEZvclNjb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2Rl
ZmluZSBQQ0xPRyguLi4pIExPRyhCYWNrRm9yd2FyZENhY2hlLCAiJSpzJXMiLCBpbmRlbnRMZXZl
bCo0LCAiIiwgbWFrZVN0cmluZyhfX1ZBX0FSR1NfXykudXRmOCgpLmRhdGEoKSkKLQotc3RhdGlj
IGlubGluZSB2b2lkIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCYgY2xpZW50LCBjb25zdCBTdHJpbmcmIHJlYXNvbikKLXsKLSAgICBj
bGllbnQubG9nRGlhZ25vc3RpY01lc3NhZ2UoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpwYWdlQ2Fj
aGVGYWlsdXJlS2V5KCksIHJlYXNvbiwgU2hvdWxkU2FtcGxlOjpObyk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoUGFnZSogcGFn
ZSwgY29uc3QgU3RyaW5nJiByZWFzb24pCi17Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZS0+ZGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQoKSwgcmVhc29uKTsKLX0KLQotc3RhdGljIGJvb2wgY2FuQ2Fj
aGVGcmFtZShGcmFtZSYgZnJhbWUsIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBkaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudCwgdW5zaWduZWQgaW5kZW50TGV2ZWwpCi17Ci0gICAgUENMT0coIistLS0i
KTsKLSAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBmcmFtZS5sb2FkZXIoKTsKLQotICAg
IC8vIFByZXZlbnQgcGFnZSBjYWNoaW5nIGlmIGEgc3ViZnJhbWUgaXMgc3RpbGwgaW4gcHJvdmlz
aW9uYWwgbG9hZCBzdGFnZS4KLSAgICAvLyBXZSBvbmx5IGRvIHRoaXMgY2hlY2sgZm9yIHN1YmZy
YW1lcyBiZWNhdXNlIHRoZSBtYWluIGZyYW1lIGlzIHJldXNlZCB3aGVuIG5hdmlnYXRpbmcgdG8g
YSBuZXcgcGFnZS4KLSAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkgJiYgZnJhbWVMb2FkZXIu
c3RhdGUoKSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwpIHsKLSAgICAgICAgUENMT0coIiAgIC1G
cmFtZSBpcyBpbiBwcm92aXNpb25hbCBsb2FkIHN0YWdlIik7Ci0gICAgICAgIGxvZ1BhZ2VDYWNo
ZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpwcm92aXNpb25hbExvYWRLZXkoKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSAmJiBmcmFtZUxvYWRl
ci5zdGF0ZU1hY2hpbmUoKS5pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpKSB7Ci0g
ICAgICAgIFBDTE9HKCIgICAtTWFpbkZyYW1lIGlzIGRpc3BsYXlpbmcgaW5pdGlhbCBlbXB0eSBk
b2N1bWVudCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFmcmFt
ZS5kb2N1bWVudCgpKSB7Ci0gICAgICAgIFBDTE9HKCIgICAtRnJhbWUgaGFzIG5vIGRvY3VtZW50
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWZyYW1lLmRvY3Vt
ZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgUENMT0coIiAgIC1Eb2N1bWVudCBpcyBkZXRhY2hl
ZCBmcm9tIGZyYW1lIik7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVy
ID0gZnJhbWVMb2FkZXIuZG9jdW1lbnRMb2FkZXIoKTsKLSAgICBpZiAoIWRvY3VtZW50TG9hZGVy
KSB7Ci0gICAgICAgIFBDTE9HKCIgICAtVGhlcmUgaXMgbm8gRG9jdW1lbnRMb2FkZXIgb2JqZWN0
Iik7Ci0gICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpub0RvY3VtZW50TG9hZGVy
S2V5KCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVVJMIGN1cnJlbnRV
UkwgPSBkb2N1bWVudExvYWRlci0+dXJsKCk7Ci0gICAgVVJMIG5ld1VSTCA9IGZyYW1lTG9hZGVy
LnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSA/IGZyYW1lTG9hZGVyLnByb3Zpc2lvbmFsRG9j
dW1lbnRMb2FkZXIoKS0+dXJsKCkgOiBVUkwoKTsKLSAgICBpZiAoIW5ld1VSTC5pc0VtcHR5KCkp
Ci0gICAgICAgIFBDTE9HKCIgRGV0ZXJtaW5pbmcgaWYgZnJhbWUgY2FuIGJlIGNhY2hlZCBuYXZp
Z2F0aW5nIGZyb20gKCIsIGN1cnJlbnRVUkwuc3RyaW5nKCksICIpIHRvICgiLCBuZXdVUkwuc3Ry
aW5nKCksICIpOiIpOwotICAgIGVsc2UKLSAgICAgICAgUENMT0coIiBEZXRlcm1pbmluZyBpZiBz
dWJmcmFtZSB3aXRoIFVSTCAoIiwgY3VycmVudFVSTC5zdHJpbmcoKSwgIikgY2FuIGJlIGNhY2hl
ZDoiKTsKLSAgICAgCi0gICAgYm9vbCBpc0NhY2hlYWJsZSA9IHRydWU7Ci0gICAgLy8gRG8gbm90
IGNhY2hlIGVycm9yIHBhZ2VzICh0aGVzZSBjYW4gYmUgcmVjb2duaXplZCBhcyBwYWdlcyB3aXRo
IHN1YnN0aXR1dGUgZGF0YSBvciB1bnJlYWNoYWJsZSBVUkxzKS4KLSAgICBpZiAoZG9jdW1lbnRM
b2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpICYmICFkb2N1bWVudExvYWRlci0+c3Vi
c3RpdHV0ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBDTE9HKCIg
ICAtRnJhbWUgaXMgYW4gZXJyb3IgcGFnZSIpOwotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJl
RGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dn
aW5nS2V5czo6aXNFcnJvclBhZ2VLZXkoKSk7Ci0gICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7
Ci0gICAgfQotICAgIGlmIChmcmFtZUxvYWRlci5zdWJmcmFtZUxvYWRlcigpLmNvbnRhaW5zUGx1
Z2lucygpICYmICFmcmFtZS5wYWdlKCktPnNldHRpbmdzKCkucGFnZUNhY2hlU3VwcG9ydHNQbHVn
aW5zKCkpIHsKLSAgICAgICAgUENMT0coIiAgIC1GcmFtZSBjb250YWlucyBwbHVnaW5zIik7Ci0g
ICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9n
Z2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpoYXNQbHVnaW5zS2V5KCkpOwotICAg
ICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoZnJhbWUuaXNNYWluRnJh
bWUoKSAmJiAhZnJhbWVMb2FkZXIuaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCkpIHsKLSAgICAgICAg
UENMT0coIiAgIC1NYWluIGZyYW1lIGhhcyBubyBjdXJyZW50IGhpc3RvcnkgaXRlbSIpOwotICAg
ICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9DdXJyZW50SGlzdG9yeUl0ZW1LZXko
KSk7Ci0gICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChmcmFtZUxv
YWRlci5xdWlja1JlZGlyZWN0Q29taW5nKCkpIHsKLSAgICAgICAgUENMT0coIiAgIC1RdWljayBy
ZWRpcmVjdCBpcyBjb21pbmciKTsKLSAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0
aWNNZXNzYWdlKGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnF1aXJrUmVkaXJlY3RDb21pbmdLZXkoKSk7Ci0gICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7
Ci0gICAgfQotICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2FkaW5nKCkpIHsKLSAgICAgICAg
UENMT0coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBzdGlsbCBsb2FkaW5nIik7Ci0gICAgICAgIGxv
Z1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc0xvYWRpbmdLZXkoKSk7Ci0gICAgICAgIGlzQ2Fj
aGVhYmxlID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNTdG9wcGlu
ZygpKSB7Ci0gICAgICAgIFBDTE9HKCIgICAtRG9jdW1lbnRMb2FkZXIgaXMgaW4gdGhlIG1pZGRs
ZSBvZiBzdG9wcGluZyIpOwotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01l
c3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6ZG9j
dW1lbnRMb2FkZXJTdG9wcGluZ0tleSgpKTsKLSAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8QWN0aXZlRE9NT2JqZWN0Kj4gdW5zdXNwZW5kYWJsZU9iamVj
dHM7Ci0gICAgaWYgKGZyYW1lLmRvY3VtZW50KCkgJiYgIWZyYW1lLmRvY3VtZW50KCktPmNhblN1
c3BlbmRBY3RpdmVET01PYmplY3RzRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCZ1bnN1c3BlbmRhYmxl
T2JqZWN0cykpIHsKLSAgICAgICAgUENMT0coIiAgIC1UaGUgZG9jdW1lbnQgY2Fubm90IHN1c3Bl
bmQgaXRzIGFjdGl2ZSBET00gT2JqZWN0cyIpOwotICAgICAgICBmb3IgKGF1dG8qIGFjdGl2ZURP
TU9iamVjdCA6IHVuc3VzcGVuZGFibGVPYmplY3RzKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAg
IC0gVW5zdXNwZW5kYWJsZTogIiwgYWN0aXZlRE9NT2JqZWN0LT5hY3RpdmVET01PYmplY3ROYW1l
KCkpOwotICAgICAgICAgICAgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubG9nRGlhZ25vc3RpY01l
c3NhZ2UoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnN1c3BlbmRhYmxlRE9NT2JqZWN0S2V5KCks
IGFjdGl2ZURPTU9iamVjdC0+YWN0aXZlRE9NT2JqZWN0TmFtZSgpLCBTaG91bGRTYW1wbGU6Ok5v
KTsKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShhY3RpdmVET01PYmplY3QpOwotICAgICAgICB9
Ci0gICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpjYW5ub3RTdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0tleSgpKTsKLSAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGludmVzdGlnYXRpbmcgY2FjaGluZyBmcmFtZXMgdGhh
dCBoYXZlIGFuIGFzc29jaWF0ZWQKLSAgICAvLyBhcHBsaWNhdGlvbiBjYWNoZS4gPHJkYXI6Ly9w
cm9ibGVtLzU5MTc4OTk+IHRyYWNrcyB0aGF0IHdvcmsuCi0gICAgaWYgKCFkb2N1bWVudExvYWRl
ci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5jYW5DYWNoZUluUGFnZUNhY2hlKCkpIHsKLSAgICAg
ICAgUENMT0coIiAgIC1UaGUgRG9jdW1lbnRMb2FkZXIgdXNlcyBhbiBhcHBsaWNhdGlvbiBjYWNo
ZSIpOwotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6YXBwbGljYXRpb25DYWNo
ZUtleSgpKTsKLSAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFm
cmFtZUxvYWRlci5jbGllbnQoKS5jYW5DYWNoZVBhZ2UoKSkgewotICAgICAgICBQQ0xPRygiICAg
LVRoZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1lIGNhbm5vdCBiZSBjYWNoZWQiKTsKLSAgICAgICAg
bG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKGRpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmRlbmllZEJ5Q2xpZW50S2V5KCkpOwotICAgICAg
ICBpc0NhY2hlYWJsZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoRnJhbWUqIGNoaWxkID0g
ZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5u
ZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2FuQ2FjaGVGcmFtZSgqY2hpbGQsIGRpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LCBpbmRlbnRMZXZlbCArIDEpKQotICAgICAgICAgICAgaXNDYWNo
ZWFibGUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgUENMT0coaXNDYWNoZWFibGUgPyAiIEZy
YW1lIENBTiBiZSBjYWNoZWQiIDogIiBGcmFtZSBDQU5OT1QgYmUgY2FjaGVkIik7Ci0gICAgUENM
T0coIistLS0iKTsKLSAgICAKLSAgICByZXR1cm4gaXNDYWNoZWFibGU7Ci19Ci0KLXN0YXRpYyBi
b29sIGNhbkNhY2hlUGFnZShQYWdlJiBwYWdlKQotewotICAgIFJFTEVBU0VfQVNTRVJUKCFwYWdl
LmlzUmVzdG9yaW5nQ2FjaGVkUGFnZSgpKTsKLQotICAgIHVuc2lnbmVkIGluZGVudExldmVsID0g
MDsKLSAgICBQQ0xPRygiLS0tLS0tLS1cbiBEZXRlcm1pbmluZyBpZiBwYWdlIGNhbiBiZSBjYWNo
ZWQ6Iik7Ci0KLSAgICBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCYgZGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQgPSBwYWdlLmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCk7Ci0gICAgYm9vbCBpc0NhY2hl
YWJsZSA9IGNhbkNhY2hlRnJhbWUocGFnZS5tYWluRnJhbWUoKSwgZGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQsIGluZGVudExldmVsICsgMSk7Ci0KLSAgICBpZiAoIXBhZ2Uuc2V0dGluZ3MoKS51c2Vz
UGFnZUNhY2hlKCkgfHwgcGFnZS5pc1Jlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0
b3IoKSkgewotICAgICAgICBQQ0xPRygiICAgLVBhZ2Ugc2V0dGluZ3Mgc2F5cyBiL2YgY2FjaGUg
ZGlzYWJsZWQiKTsKLSAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdl
KGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzRGlzYWJs
ZWRLZXkoKSk7Ci0gICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7Ci0gICAgfQotI2lmIEVOQUJM
RShERVZJQ0VfT1JJRU5UQVRJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChE
ZXZpY2VNb3Rpb25Db250cm9sbGVyOjppc0FjdGl2ZUF0KCZwYWdlKSkgewotICAgICAgICBQQ0xP
RygiICAgLVBhZ2UgaXMgdXNpbmcgRGV2aWNlTW90aW9uIik7Ci0gICAgICAgIGxvZ1BhZ2VDYWNo
ZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpkZXZpY2VNb3Rpb25LZXkoKSk7Ci0gICAgICAgIGlzQ2FjaGVhYmxl
ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI6Omlz
QWN0aXZlQXQoJnBhZ2UpKSB7Ci0gICAgICAgIFBDTE9HKCIgICAtUGFnZSBpcyB1c2luZyBEZXZp
Y2VPcmllbnRhdGlvbiIpOwotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01l
c3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6ZGV2
aWNlT3JpZW50YXRpb25LZXkoKSk7Ci0gICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gcGFnZS5tYWluRnJhbWUo
KS5sb2FkZXIoKS5sb2FkVHlwZSgpOwotICAgIHN3aXRjaCAobG9hZFR5cGUpIHsKLSAgICBjYXNl
IEZyYW1lTG9hZFR5cGU6OlJlbG9hZDoKLSAgICAgICAgLy8gTm8gcG9pbnQgd3JpdGluZyB0byB0
aGUgY2FjaGUgb24gYSByZWxvYWQsIHNpbmNlIHdlIHdpbGwganVzdCB3cml0ZSBvdmVyIGl0IGFn
YWluIHdoZW4gd2UgbGVhdmUgdGhhdCBwYWdlLgotICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlw
ZSBpczogUmVsb2FkIik7Ci0gICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVz
c2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZWxv
YWRLZXkoKSk7Ci0gICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6U2FtZTogLy8gdXNlciBsb2FkcyBzYW1lIFVSTCBhZ2Fp
biAoYnV0IG5vdCByZWxvYWQgYnV0dG9uKQotICAgICAgICAvLyBObyBwb2ludCB3cml0aW5nIHRv
IHRoZSBjYWNoZSBvbiBhIHNhbWUgbG9hZCwgc2luY2Ugd2Ugd2lsbCBqdXN0IHdyaXRlIG92ZXIg
aXQgYWdhaW4gd2hlbiB3ZSBsZWF2ZSB0aGF0IHBhZ2UuCi0gICAgICAgIFBDTE9HKCIgICAtTG9h
ZCB0eXBlIGlzOiBTYW1lIik7Ci0gICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGlj
TWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpz
YW1lTG9hZEtleSgpKTsKLSAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2Fy
ZExpc3Q6Ci0gICAgICAgIC8vIERvbid0IHdyaXRlIHRvIHRoZSBjYWNoZSBpZiBpbiB0aGUgbWlk
ZGxlIG9mIGEgcmVkaXJlY3QsIHNpbmNlIHdlIHdpbGwgd2FudCB0byBzdG9yZSB0aGUgZmluYWwg
cGFnZSB3ZSBlbmQgdXAgb24uCi0gICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWRp
cmVjdFdpdGhMb2NrZWRCYWNrRm9yd2FyZExpc3QiKTsKLSAgICAgICAgbG9nUGFnZUNhY2hlRmFp
bHVyZURpYWdub3N0aWNNZXNzYWdlKGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGlj
TG9nZ2luZ0tleXM6OnJlZGlyZWN0S2V5KCkpOwotICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlcGxhY2U6Ci0gICAg
ICAgIC8vIE5vIHBvaW50IHdyaXRpbmcgdG8gdGhlIGNhY2hlIG9uIGEgcmVwbGFjZSwgc2luY2Ug
d2Ugd2lsbCBqdXN0IHdyaXRlIG92ZXIgaXQgYWdhaW4gd2hlbiB3ZSBsZWF2ZSB0aGF0IHBhZ2Uu
Ci0gICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZXBsYWNlIik7Ci0gICAgICAgIGxv
Z1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXBsYWNlS2V5KCkpOwotICAgICAgICBpc0NhY2hl
YWJsZSA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJl
bG9hZEZyb21PcmlnaW46IHsKLSAgICAgICAgLy8gTm8gcG9pbnQgd3JpdGluZyB0byB0aGUgY2Fj
aGUgb24gYSByZWxvYWQsIHNpbmNlIHdlIHdpbGwganVzdCB3cml0ZSBvdmVyIGl0IGFnYWluIHdo
ZW4gd2UgbGVhdmUgdGhhdCBwYWdlLgotICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczog
UmVsb2FkRnJvbU9yaWdpbiIpOwotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3Rp
Y01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6
cmVsb2FkRnJvbU9yaWdpbktleSgpKTsKLSAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6UmVsb2FkRXhwaXJl
ZE9ubHk6IHsKLSAgICAgICAgLy8gTm8gcG9pbnQgd3JpdGluZyB0byB0aGUgY2FjaGUgb24gYSBy
ZWxvYWQsIHNpbmNlIHdlIHdpbGwganVzdCB3cml0ZSBvdmVyIGl0IGFnYWluIHdoZW4gd2UgbGVh
dmUgdGhhdCBwYWdlLgotICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczogUmVsb2FkUmV2
YWxpZGF0aW5nRXhwaXJlZCIpOwotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3Rp
Y01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6
cmVsb2FkUmV2YWxpZGF0aW5nRXhwaXJlZEtleSgpKTsKLSAgICAgICAgaXNDYWNoZWFibGUgPSBm
YWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6U3Rh
bmRhcmQ6Ci0gICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpCYWNrOgotICAgIGNhc2UgRnJhbWVMb2Fk
VHlwZTo6Rm9yd2FyZDoKLSAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2Fy
ZDogLy8gYSBtdWx0aS1pdGVtIGhvcCBpbiB0aGUgYmFja2ZvcndhcmQgbGlzdAotICAgICAgICAv
LyBDYWNoZWFibGUuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNDYWNo
ZWFibGUpCi0gICAgICAgIFBDTE9HKCIgUGFnZSBDQU4gYmUgY2FjaGVkXG4tLS0tLS0tLSIpOwot
ICAgIGVsc2UKLSAgICAgICAgUENMT0coIiBQYWdlIENBTk5PVCBiZSBjYWNoZWRcbi0tLS0tLS0t
Iik7Ci0KLSAgICBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5sb2dEaWFnbm9zdGljTWVzc2FnZVdp
dGhSZXN1bHQoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpwYWdlQ2FjaGVLZXkoKSwgRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpjYW5DYWNoZUtleSgpLCBpc0NhY2hlYWJsZSA/IERpYWdub3N0aWNMb2dn
aW5nUmVzdWx0UGFzcyA6IERpYWdub3N0aWNMb2dnaW5nUmVzdWx0RmFpbCwgU2hvdWxkU2FtcGxl
OjpObyk7Ci0gICAgcmV0dXJuIGlzQ2FjaGVhYmxlOwotfQotCi1QYWdlQ2FjaGUmIFBhZ2VDYWNo
ZTo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGFnZUNhY2hlPiBn
bG9iYWxQYWdlQ2FjaGU7Ci0gICAgcmV0dXJuIGdsb2JhbFBhZ2VDYWNoZTsKLX0KLQotUGFnZUNh
Y2hlOjpQYWdlQ2FjaGUoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsK
LSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10gewotICAgICAgICBQQUw6OnJlZ2lzdGVy
Tm90aWZ5Q2FsbGJhY2soImNvbS5hcHBsZS5XZWJLaXQuc2hvd1BhZ2VDYWNoZSIsIFtdIHsKLSAg
ICAgICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuZHVtcCgpOwotICAgICAgICB9KTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBQYWdlQ2FjaGU6OmR1bXAoKSBjb25zdAotewotICAgIFdURkxvZ0Fs
d2F5cygiXG5QYWdlIENhY2hlOiIpOwotICAgIGZvciAoYXV0byYgaXRlbSA6IG1faXRlbXMpIHsK
LSAgICAgICAgQ2FjaGVkUGFnZSYgY2FjaGVkUGFnZSA9ICppdGVtLT5tX2NhY2hlZFBhZ2U7Ci0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiICBQYWdlICVwLCBkb2N1bWVudCAlcCAlcyIsICZjYWNoZWRQ
YWdlLnBhZ2UoKSwgY2FjaGVkUGFnZS5kb2N1bWVudCgpLCBjYWNoZWRQYWdlLmRvY3VtZW50KCkg
PyBjYWNoZWRQYWdlLmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkgOiAi
Iik7Ci0gICAgfQotfQotCi1ib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGUoUGFnZSYgcGFnZSkgY29u
c3QKLXsKLSAgICBpZiAoIW1fbWF4U2l6ZSkgewotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJl
RGlhZ25vc3RpY01lc3NhZ2UoJnBhZ2UsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNEaXNhYmxl
ZEtleSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpKSB7Ci0g
ICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZSgmcGFnZSwgRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjp1bmRlck1lbW9yeVByZXNzdXJlS2V5KCkpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjYW5DYWNoZVBhZ2UocGFnZSk7Ci19
Ci0KLXZvaWQgUGFnZUNhY2hlOjpwcnVuZVRvU2l6ZU5vdyh1bnNpZ25lZCBzaXplLCBQcnVuaW5n
UmVhc29uIHBydW5pbmdSZWFzb24pCi17Ci0gICAgU2V0Rm9yU2NvcGU8dW5zaWduZWQ+IGNoYW5n
ZShtX21heFNpemUsIHNpemUpOwotICAgIHBydW5lKHBydW5pbmdSZWFzb24pOwotfQotCi12b2lk
IFBhZ2VDYWNoZTo6c2V0TWF4U2l6ZSh1bnNpZ25lZCBtYXhTaXplKQotewotICAgIG1fbWF4U2l6
ZSA9IG1heFNpemU7Ci0gICAgcHJ1bmUoUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7Ci19Ci0KLXVuc2ln
bmVkIFBhZ2VDYWNoZTo6ZnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgZnJhbWVD
b3VudCA9IG1faXRlbXMuc2l6ZSgpOwotICAgIGZvciAoYXV0byYgaXRlbSA6IG1faXRlbXMpIHsK
LSAgICAgICAgQVNTRVJUKGl0ZW0tPm1fY2FjaGVkUGFnZSk7Ci0gICAgICAgIGZyYW1lQ291bnQg
Kz0gaXRlbS0+bV9jYWNoZWRQYWdlLT5jYWNoZWRNYWluRnJhbWUoKS0+ZGVzY2VuZGFudEZyYW1l
Q291bnQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZyYW1lQ291bnQ7Ci19Ci0KLXZvaWQg
UGFnZUNhY2hlOjptYXJrUGFnZXNGb3JEZXZpY2VPclBhZ2VTY2FsZUNoYW5nZWQoUGFnZSYgcGFn
ZSkKLXsKLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7Ci0gICAgICAgIENhY2hlZFBh
Z2UmIGNhY2hlZFBhZ2UgPSAqaXRlbS0+bV9jYWNoZWRQYWdlOwotICAgICAgICBpZiAoJnBhZ2Uu
bWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJh
bWUoKSkKLSAgICAgICAgICAgIGNhY2hlZFBhZ2UubWFya0ZvckRldmljZU9yUGFnZVNjYWxlQ2hh
bmdlZCgpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckNvbnRlbnRz
U2l6ZUNoYW5nZWQoUGFnZSYgcGFnZSkKLXsKLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1z
KSB7Ci0gICAgICAgIENhY2hlZFBhZ2UmIGNhY2hlZFBhZ2UgPSAqaXRlbS0+bV9jYWNoZWRQYWdl
OwotICAgICAgICBpZiAoJnBhZ2UubWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFp
bkZyYW1lKCktPnZpZXcoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGNhY2hlZFBhZ2UubWFya0Zv
ckNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCi12b2lkIFBhZ2VDYWNoZTo6bWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdl
ZCgpCi17Ci0gICAgZm9yIChhdXRvJiBpdGVtIDogbV9pdGVtcykgewotICAgICAgICBBU1NFUlQo
aXRlbS0+bV9jYWNoZWRQYWdlKTsKLSAgICAgICAgaXRlbS0+bV9jYWNoZWRQYWdlLT5tYXJrRm9y
Q2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwotICAgIH0KLX0KLSNlbmRpZgotCi1zdGF0aWMg
U3RyaW5nIHBydW5pbmdSZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5KFBydW5pbmdSZWFzb24g
cHJ1bmluZ1JlYXNvbikKLXsKLSAgICBzd2l0Y2ggKHBydW5pbmdSZWFzb24pIHsKLSAgICBjYXNl
IFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlOgotICAgICAgICByZXR1cm4gRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpwcnVuZWREdWVUb01lbW9yeVByZXNzdXJlS2V5KCk7Ci0gICAgY2FzZSBQ
cnVuaW5nUmVhc29uOjpQcm9jZXNzU3VzcGVuZGVkOgotICAgICAgICByZXR1cm4gRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpwcnVuZWREdWVUb1Byb2Nlc3NTdXNwZW5kZWQoKTsKLSAgICBjYXNlIFBy
dW5pbmdSZWFzb246OlJlYWNoZWRNYXhTaXplOgotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpwcnVuZWREdWVUb01heFNpemVSZWFjaGVkKCk7Ci0gICAgY2FzZSBQcnVuaW5n
UmVhc29uOjpOb25lOgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFBh
Z2VDYWNoZVN0YXRlKFBhZ2UmIHBhZ2UsIERvY3VtZW50OjpQYWdlQ2FjaGVTdGF0ZSBwYWdlQ2Fj
aGVTdGF0ZSkKLXsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1l
bnQtPnNldFBhZ2VDYWNoZVN0YXRlKHBhZ2VDYWNoZVN0YXRlKTsKLSAgICB9Ci19Ci0KLS8vIFdo
ZW4gZW50ZXJpbmcgcGFnZSBjYWNoZSwgdGVhciBkb3duIHRoZSByZW5kZXIgdHJlZSBiZWZvcmUg
c2V0dGluZyB0aGUgaW4tY2FjaGUgZmxhZy4KLS8vIFRoaXMgbWFpbnRhaW5zIHRoZSBpbnZhcmlh
bnQgdGhhdCByZW5kZXIgdHJlZXMgYXJlIG5ldmVyIHByZXNlbnQgaW4gdGhlIHBhZ2UgY2FjaGUu
Ci0vLyBOb3RlIHRoYXQgZGVzdHJ1Y3Rpb24gaGFwcGVucyBib3R0b20tdXAgc28gdGhhdCB0aGUg
bWFpbiBmcmFtZSdzIHRyZWUgZGllcyBsYXN0Lgotc3RhdGljIHZvaWQgZGVzdHJveVJlbmRlclRy
ZWUoRnJhbWUmIG1haW5GcmFtZSkKLXsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFt
ZS50cmVlKCkudHJhdmVyc2VQcmV2aW91cyhDYW5XcmFwOjpZZXMpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlUHJldmlvdXMoQ2FuV3JhcDo6Tm8pKSB7Ci0gICAgICAgIGlm
ICghZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSAqZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmIChkb2N1bWVudC5o
YXNMaXZpbmdSZW5kZXJUcmVlKCkpCi0gICAgICAgICAgICBkb2N1bWVudC5kZXN0cm95UmVuZGVy
VHJlZSgpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZmlyZVBhZ2VIaWRlRXZlbnRSZWN1cnNp
dmVseShGcmFtZSYgZnJhbWUpCi17Ci0gICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS5kb2N1bWVu
dCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIHN0b3BM
b2FkaW5nKCkgd2lsbCBmaXJlIHRoZSBwYWdlaGlkZSBldmVudCBpbiBlYWNoIHN1YmZyYW1lIGFu
ZCB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uIHN0YXRlcwotICAgIC8vIHRoYXQgdGhlIHBhcmVudCBk
b2N1bWVudCdzIGlnbm9yZS1vcGVucy1kdXJpbmctdW5sb2FkIGNvdW50ZXIgc2hvdWxkIGJlIGlu
Y3JlbWVudGVkIHdoaWxlIHRoZQotICAgIC8vIHBhZ2VoaWRlIGV2ZW50IGlzIGJlaW5nIGZpcmVk
IGluIGl0cyBzdWJmcmFtZXM6Ci0gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9t
dWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCN1bmxvYWQtYS1kb2N1bWVudAotICAgIElnbm9yZU9wZW5z
RHVyaW5nVW5sb2FkQ291bnRJbmNyZW1lbnRlciBpZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50
SW5jcmVtZW50ZXIoZG9jdW1lbnQpOwotCi0gICAgZnJhbWUubG9hZGVyKCkuc3RvcExvYWRpbmco
VW5sb2FkRXZlbnRQb2xpY3lVbmxvYWRBbmRQYWdlSGlkZSk7Ci0KLSAgICBmb3IgKFJlZlB0cjxG
cmFtZT4gY2hpbGQgPSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGZpcmVQYWdlSGlkZUV2ZW50UmVj
dXJzaXZlbHkoKmNoaWxkKTsKLX0KLQotYm9vbCBQYWdlQ2FjaGU6OmFkZElmQ2FjaGVhYmxlKEhp
c3RvcnlJdGVtJiBpdGVtLCBQYWdlKiBwYWdlKQotewotICAgIGlmIChpdGVtLmlzSW5QYWdlQ2Fj
aGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFwYWdlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zdG9wRm9yUGFn
ZUNhY2hlKCk7Ci0KLSAgICBpZiAoIWNhbkNhY2hlKCpwYWdlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghcGFnZS0+aXNVdGlsaXR5UGFnZSgpLCAi
VXRpbGl0eSBwYWdlcyBzdWNoIGFzIFNWR0ltYWdlIHBhZ2VzIHNob3VsZCBuZXZlciBnbyBpbnRv
IFBhZ2VDYWNoZSIpOwotCi0gICAgc2V0UGFnZUNhY2hlU3RhdGUoKnBhZ2UsIERvY3VtZW50OjpB
Ym91dFRvRW50ZXJQYWdlQ2FjaGUpOwotCi0gICAgLy8gRm9jdXMgdGhlIG1haW4gZnJhbWUsIGRl
Zm9jdXNpbmcgYSBmb2N1c2VkIHN1YmZyYW1lIChpZiB3ZSBoYXZlIG9uZSkuIFdlIGRvIHRoaXMg
aGVyZSwKLSAgICAvLyBiZWZvcmUgdGhlIHBhZ2UgZW50ZXJzIHRoZSBwYWdlIGNhY2hlLCB3aGls
ZSB3ZSBzdGlsbCBjYW4gZGlzcGF0Y2ggRE9NIGJsdXIvZm9jdXMgZXZlbnRzLgotICAgIGlmIChw
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkRnJhbWUoKSkKLSAgICAgICAgcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCkuc2V0Rm9jdXNlZEZyYW1lKCZwYWdlLT5tYWluRnJhbWUoKSk7Ci0KLSAg
ICAvLyBGaXJlIHRoZSBwYWdlaGlkZSBldmVudCBpbiBhbGwgZnJhbWVzLgotICAgIGZpcmVQYWdl
SGlkZUV2ZW50UmVjdXJzaXZlbHkocGFnZS0+bWFpbkZyYW1lKCkpOwotCi0gICAgZGVzdHJveVJl
bmRlclRyZWUocGFnZS0+bWFpbkZyYW1lKCkpOwotCi0gICAgLy8gU3RvcCBhbGwgbG9hZHMgYWdh
aW4gYmVmb3JlIGNoZWNraW5nIGlmIHdlIGNhbiBzdGlsbCBjYWNoZSB0aGUgcGFnZSBhZnRlciBm
aXJpbmcgdGhlIHBhZ2VoaWRlCi0gICAgLy8gZXZlbnQsIHNpbmNlIHRoZSBwYWdlIG1heSBoYXZl
IHN0YXJ0ZWQgcGluZyBsb2FkcyBpbiBpdHMgcGFnZWhpZGUgZXZlbnQgaGFuZGxlci4KLSAgICBw
YWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5zdG9wRm9yUGFnZUNhY2hlKCk7Ci0KLSAgICAvLyBD
aGVjayB0aGF0IHRoZSBwYWdlIGlzIHN0aWxsIHBhZ2UtY2FjaGVhYmxlIGFmdGVyIGZpcmluZyB0
aGUgcGFnZWhpZGUgZXZlbnQuIFRoZSBKUyBldmVudCBoYW5kbGVycwotICAgIC8vIGNvdWxkIGhh
dmUgYWx0ZXJlZCB0aGUgcGFnZSBpbiBhIHdheSB0aGF0IGNvdWxkIHByZXZlbnQgY2FjaGluZy4K
LSAgICBpZiAoIWNhbkNhY2hlKCpwYWdlKSkgewotICAgICAgICBzZXRQYWdlQ2FjaGVTdGF0ZSgq
cGFnZSwgRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHNldFBhZ2VDYWNoZVN0YXRlKCpwYWdlLCBEb2N1bWVudDo6SW5QYWdlQ2Fj
aGUpOwotCi0gICAgewotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgZmlyZSBhbnkgSlMg
ZXZlbnRzIGluIHRoaXMgc2NvcGUuCi0gICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5N
YWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKLQotICAgICAgICBpdGVtLnNldENhY2hl
ZFBhZ2UobWFrZVVuaXF1ZTxDYWNoZWRQYWdlPigqcGFnZSkpOwotICAgICAgICBpdGVtLm1fcHJ1
bmluZ1JlYXNvbiA9IFBydW5pbmdSZWFzb246Ok5vbmU7Ci0gICAgICAgIG1faXRlbXMuYWRkKCZp
dGVtKTsKLSAgICB9Ci0gICAgcHJ1bmUoUHJ1bmluZ1JlYXNvbjo6UmVhY2hlZE1heFNpemUpOwot
Ci0gICAgUkVMRUFTRV9MT0coQmFja0ZvcndhcmRDYWNoZSwgIlBhZ2VDYWNoZTo6YWRkSWZDYWNo
ZWFibGUgaXRlbTogJXMsIHNpemU6ICV1IC8gJXUiLCBpdGVtLmlkZW50aWZpZXIoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBwYWdlQ291bnQoKSwgbWF4U2l6ZSgpKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gUGFnZUNhY2hlOjp0YWtlKEhp
c3RvcnlJdGVtJiBpdGVtLCBQYWdlKiBwYWdlKQotewotICAgIGlmICghaXRlbS5tX2NhY2hlZFBh
Z2UpIHsKLSAgICAgICAgaWYgKGl0ZW0ubV9wcnVuaW5nUmVhc29uICE9IFBydW5pbmdSZWFzb246
Ok5vbmUpCi0gICAgICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2Uo
cGFnZSwgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoaXRlbS5tX3BydW5pbmdS
ZWFzb24pKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9pdGVtcy5y
ZW1vdmUoJml0ZW0pOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdl
ID0gaXRlbS50YWtlQ2FjaGVkUGFnZSgpOwotCi0gICAgUkVMRUFTRV9MT0coQmFja0ZvcndhcmRD
YWNoZSwgIlBhZ2VDYWNoZTo6dGFrZSBpdGVtOiAlcywgc2l6ZTogJXUgLyAldSIsIGl0ZW0uaWRl
bnRpZmllcigpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHBhZ2VDb3VudCgpLCBtYXhTaXplKCkp
OwotCi0gICAgaWYgKGNhY2hlZFBhZ2UtPmhhc0V4cGlyZWQoKSB8fCAocGFnZSAmJiBwYWdlLT5p
c1Jlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0b3IoKSkpIHsKLSAgICAgICAgTE9H
KEJhY2tGb3J3YXJkQ2FjaGUsICJOb3QgcmVzdG9yaW5nIHBhZ2UgZm9yICVzIGZyb20gYmFjay9m
b3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUgZW50cnkgaGFzIGV4cGlyZWQiLCBpdGVtLnVybCgp
LnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURp
YWdub3N0aWNNZXNzYWdlKHBhZ2UsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6ZXhwaXJlZEtleSgp
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNhY2hlZFBh
Z2U7Ci19Ci0KLXZvaWQgUGFnZUNhY2hlOjpyZW1vdmVBbGxJdGVtc0ZvclBhZ2UoUGFnZSYgcGFn
ZSkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9p
c0luUmVtb3ZlQWxsSXRlbXNGb3JQYWdlLCAiV2Ugc2hvdWxkIG5vdCByZWVudGVyIHRoaXMgbWV0
aG9kIik7Ci0gICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaW5SZW1vdmVBbGxJdGVtc0ZvclBhZ2VTY29w
ZSB7IG1faXNJblJlbW92ZUFsbEl0ZW1zRm9yUGFnZSwgdHJ1ZSB9OwotI2VuZGlmCi0KLSAgICBm
b3IgKGF1dG8gaXQgPSBtX2l0ZW1zLmJlZ2luKCk7IGl0ICE9IG1faXRlbXMuZW5kKCk7KSB7Ci0g
ICAgICAgIC8vIEluY3JlbWVudCBpdGVyYXRvciBmaXJzdCBzbyBpdCBzdGF5cyB2YWxpZCBhZnRl
ciB0aGUgcmVtb3ZhbC4KLSAgICAgICAgYXV0byBjdXJyZW50ID0gaXQ7Ci0gICAgICAgICsraXQ7
Ci0gICAgICAgIGlmICgmKCpjdXJyZW50KS0+bV9jYWNoZWRQYWdlLT5wYWdlKCkgPT0gJnBhZ2Up
IHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKEJhY2tGb3J3YXJkQ2FjaGUsICJQYWdlQ2FjaGU6
OnJlbW92ZUFsbEl0ZW1zRm9yUGFnZSByZW1vdmluZyBpdGVtOiAlcywgc2l6ZTogJXUgLyAldSIs
ICgqY3VycmVudCktPmlkZW50aWZpZXIoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBwYWdlQ291
bnQoKSAtIDEsIG1heFNpemUoKSk7Ci0gICAgICAgICAgICAoKmN1cnJlbnQpLT5zZXRDYWNoZWRQ
YWdlKG51bGxwdHIpOwotICAgICAgICAgICAgbV9pdGVtcy5yZW1vdmUoY3VycmVudCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLUNhY2hlZFBhZ2UqIFBhZ2VDYWNoZTo6Z2V0KEhpc3RvcnlJdGVt
JiBpdGVtLCBQYWdlKiBwYWdlKQotewotICAgIENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBpdGVt
Lm1fY2FjaGVkUGFnZS5nZXQoKTsKLSAgICBpZiAoIWNhY2hlZFBhZ2UpIHsKLSAgICAgICAgaWYg
KGl0ZW0ubV9wcnVuaW5nUmVhc29uICE9IFBydW5pbmdSZWFzb246Ok5vbmUpCi0gICAgICAgICAg
ICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgcHJ1bmluZ1JlYXNv
blRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoaXRlbS5tX3BydW5pbmdSZWFzb24pKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKGNhY2hlZFBhZ2UtPmhhc0V4cGlyZWQo
KSB8fCAocGFnZSAmJiBwYWdlLT5pc1Jlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0
b3IoKSkpIHsKLSAgICAgICAgTE9HKEJhY2tGb3J3YXJkQ2FjaGUsICJOb3QgcmVzdG9yaW5nIHBh
Z2UgZm9yICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUgZW50cnkgaGFz
IGV4cGlyZWQiLCBpdGVtLnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAg
bG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKHBhZ2UsIERpYWdub3N0aWNMb2dn
aW5nS2V5czo6ZXhwaXJlZEtleSgpKTsKLSAgICAgICAgcmVtb3ZlKGl0ZW0pOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlZFBhZ2U7Ci19Ci0KLXZvaWQg
UGFnZUNhY2hlOjpyZW1vdmUoSGlzdG9yeUl0ZW0mIGl0ZW0pCi17Ci0gICAgLy8gU2FmZWx5IGln
bm9yZSBhdHRlbXB0cyB0byByZW1vdmUgaXRlbXMgbm90IGluIHRoZSBjYWNoZS4KLSAgICBpZiAo
IWl0ZW0ubV9jYWNoZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2l0ZW1zLnJlbW92
ZSgmaXRlbSk7Ci0gICAgaXRlbS5zZXRDYWNoZWRQYWdlKG51bGxwdHIpOwotCi0gICAgUkVMRUFT
RV9MT0coQmFja0ZvcndhcmRDYWNoZSwgIlBhZ2VDYWNoZTo6cmVtb3ZlIGl0ZW06ICVzLCBzaXpl
OiAldSAvICV1IiwgaXRlbS5pZGVudGlmaWVyKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcGFn
ZUNvdW50KCksIG1heFNpemUoKSk7Ci0KLX0KLQotdm9pZCBQYWdlQ2FjaGU6OnBydW5lKFBydW5p
bmdSZWFzb24gcHJ1bmluZ1JlYXNvbikKLXsKLSAgICB3aGlsZSAocGFnZUNvdW50KCkgPiBtYXhT
aXplKCkpIHsKLSAgICAgICAgYXV0byBvbGRlc3RJdGVtID0gbV9pdGVtcy50YWtlRmlyc3QoKTsK
LSAgICAgICAgb2xkZXN0SXRlbS0+c2V0Q2FjaGVkUGFnZShudWxscHRyKTsKLSAgICAgICAgb2xk
ZXN0SXRlbS0+bV9wcnVuaW5nUmVhc29uID0gcHJ1bmluZ1JlYXNvbjsKLSAgICAgICAgUkVMRUFT
RV9MT0coQmFja0ZvcndhcmRDYWNoZSwgIlBhZ2VDYWNoZTo6cHJ1bmUgcmVtb3ZpbmcgaXRlbTog
JXMsIHNpemU6ICV1IC8gJXUiLCBvbGRlc3RJdGVtLT5pZGVudGlmaWVyKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgcGFnZUNvdW50KCksIG1heFNpemUoKSk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VD
YWNoZS5oIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTIxMWNjNDU5ZmVlZmVkZmJmYTk0NDkyNzcyZTg5ZDAzMjAxMTU4
NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCi0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRQYWdlOwot
Y2xhc3MgRnJhbWU7Ci1jbGFzcyBQYWdlOwotCi1lbnVtIGNsYXNzIFBydW5pbmdSZWFzb24geyBO
b25lLCBQcm9jZXNzU3VzcGVuZGVkLCBNZW1vcnlQcmVzc3VyZSwgUmVhY2hlZE1heFNpemUgfTsK
LQotY2xhc3MgUGFnZUNhY2hlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlQ2FjaGUp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICAvLyBGdW5jdGlvbiB0byBv
YnRhaW4gdGhlIGdsb2JhbCBwYWdlIGNhY2hlLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQ
YWdlQ2FjaGUmIHNpbmdsZXRvbigpOwotCi0gICAgYm9vbCBjYW5DYWNoZShQYWdlJikgY29uc3Q7
Ci0KLSAgICAvLyBVc2VkIHdoZW4gbWVtb3J5IGlzIGxvdyB0byBwcnVuZSBzb21lIGNhY2hlZCBw
YWdlcy4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lVG9TaXplTm93KHVuc2lnbmVkIG1h
eFNpemUsIFBydW5pbmdSZWFzb24pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWF4U2l6
ZSh1bnNpZ25lZCk7IC8vIG51bWJlciBvZiBwYWdlcyB0byBjYWNoZS4KLSAgICB1bnNpZ25lZCBt
YXhTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhTaXplOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGFkZElmQ2FjaGVhYmxlKEhpc3RvcnlJdGVtJiwgUGFnZSopOyAvLyBQcnVuZXMgaWYg
bWF4U2l6ZSgpIGlzIGV4Y2VlZGVkLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlKEhp
c3RvcnlJdGVtJik7Ci0gICAgQ2FjaGVkUGFnZSogZ2V0KEhpc3RvcnlJdGVtJiwgUGFnZSopOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiB0YWtlKEhpc3RvcnlJdGVtJiwgUGFnZSop
OwotCi0gICAgdm9pZCByZW1vdmVBbGxJdGVtc0ZvclBhZ2UoUGFnZSYpOwotCi0gICAgdW5zaWdu
ZWQgcGFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtcy5zaXplKCk7IH0KLSAgICBXRUJD
T1JFX0VYUE9SVCB1bnNpZ25lZCBmcmFtZUNvdW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIG1hcmtQ
YWdlc0ZvckRldmljZU9yUGFnZVNjYWxlQ2hhbmdlZChQYWdlJik7Ci0gICAgdm9pZCBtYXJrUGFn
ZXNGb3JDb250ZW50c1NpemVDaGFuZ2VkKFBhZ2UmKTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
Ci0gICAgdm9pZCBtYXJrUGFnZXNGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0jZW5k
aWYKLQotcHJpdmF0ZToKLSAgICBQYWdlQ2FjaGUoKTsKLSAgICB+UGFnZUNhY2hlKCkgPSBkZWxl
dGU7IC8vIE1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJD
b3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgotCi0gICAgc3RhdGljIGJvb2wgY2FuQ2Fj
aGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSYpOwotCi0gICAgdm9pZCBwcnVuZShQcnVu
aW5nUmVhc29uKTsKLSAgICB2b2lkIGR1bXAoKSBjb25zdDsKLQotICAgIExpc3RIYXNoU2V0PFJl
ZlB0cjxIaXN0b3J5SXRlbT4+IG1faXRlbXM7Ci0gICAgdW5zaWduZWQgbV9tYXhTaXplIHswfTsK
LQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBib29sIG1faXNJblJlbW92ZUFsbEl0ZW1zRm9y
UGFnZSB7IGZhbHNlIH07Ci0jZW5kaWYKLQotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVz
dHJveWVkPFBhZ2VDYWNoZT47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDk5NmJhNzY3ZWM2OWVjMmU5
YzQxODMzMDkxNmFkNDI4OGE3M2YwODUuLjNmM2Y5NGJlMTM5YmY5Y2ExZWEwYzNmZWY4ZjAyNjQ1
ZGIwNmExZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBA
IC0yMTYsNyArMjE2LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0TWF4UGl4ZWxNZW1v
cnlGb3JUZXN0aW5nKHNpemVfdCBzaXplKQogICAgIG1heEFjdGl2ZVBpeGVsTWVtb3J5Rm9yVGVz
dGluZyA9IHNpemU7CiB9CiAKLUV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+
PiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgY29udGV4dElkLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4m
JiBhcmd1bWVudHMpCitFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gSFRN
TENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgY29udGV4dElkLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4m
JiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICBpZiAobV9jb250
ZXh0LT5pc1BsYWNlaG9sZGVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgKaW5kZXggMTNhNzFhNWE1N2Q4ODI2OWQ2ZmQwMGE0OWZkZTU0ZTZhNTA3ZjFhNC4uNGUyNWNj
MjI5M2QzY2MyZjRiNDZmMGMzNDMwY2M2OGE1YTgyNzkwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaApAQCAtODQsNyArODQsNyBAQCBjbGFzcyBIVE1MQ2FudmFzRWxl
bWVudCBmaW5hbCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIENhbnZhc0Jhc2UgewogICAg
ICAgICByZXNldCgpOwogICAgIH0KIAotICAgIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmlu
Z0NvbnRleHQ+PiBnZXRDb250ZXh0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgU3RyaW5nJiBjb250
ZXh0SWQsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50cyk7Cisg
ICAgRXhjZXB0aW9uT3I8T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4+IGdldENvbnRleHQoSlND
OjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IFN0cmluZyYgY29udGV4dElkLCBWZWN0b3I8SlNDOjpT
dHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpOwogCiAgICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogZ2V0Q29udGV4dChjb25zdCBTdHJpbmcmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmlkbAppbmRleCA2ZmNhY2Q0MTdmMjZiNDYzOGEzMjA3MTZlYTIw
NDdlYzczZTk0OGZjLi42OWYwYTcxZTQzZTM2YTE4NGI0ODgyZGQ3Y2VlZjdkZjE5YmI4MWJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbApAQCAtNDUsNyArNDUs
NyBAQCB0eXBlZGVmICgKICAgICBbQ0VSZWFjdGlvbnM9Tm90TmVlZGVkLCBDYWxsVHJhY2luZ0Nh
bGxiYWNrPXJlY29yZENhbnZhc0FjdGlvbl0gYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgd2lkdGg7
CiAgICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZCwgQ2FsbFRyYWNpbmdDYWxsYmFjaz1yZWNvcmRD
YW52YXNBY3Rpb25dIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGhlaWdodDsKIAotICAgIFtDYWxs
V2l0aD1FeGVjU3RhdGUsIE1heVRocm93RXhjZXB0aW9uXSBSZW5kZXJpbmdDb250ZXh0PyBnZXRD
b250ZXh0KERPTVN0cmluZyBjb250ZXh0SWQsIGFueS4uLiBhcmd1bWVudHMpOworICAgIFtDYWxs
V2l0aD1HbG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBSZW5kZXJpbmdDb250ZXh0PyBn
ZXRDb250ZXh0KERPTVN0cmluZyBjb250ZXh0SWQsIGFueS4uLiBhcmd1bWVudHMpOwogCiAgICAg
W01heVRocm93RXhjZXB0aW9uXSBET01TdHJpbmcgdG9EYXRhVVJMKG9wdGlvbmFsIERPTVN0cmlu
ZyB0eXBlLCBvcHRpb25hbCBhbnkgcXVhbGl0eSk7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHRvQmxvYihCbG9iQ2FsbGJhY2sg
Y2FsbGJhY2ssIG9wdGlvbmFsIERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBhbnkgcXVhbGl0eSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuaWRsIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmlkbAppbmRleCA0ZGM3OGUzY2Iz
ODgwMzBjMzIzODlhZGE1ODk2MjdiMjUwMjQwMGRmLi43NzY2YTYxODhmODIwMTE0MTQ4ZmU4ZDIx
ZjkwYTMzM2NhMjJjM2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5p
ZGwKQEAgLTM3LDUgKzM3LDUgQEAgaW50ZXJmYWNlIEhUTUxGcmFtZUVsZW1lbnQgOiBIVE1MRWxl
bWVudCB7CiAgICAgW0NFUmVhY3Rpb25zPU5vdE5lZWRlZF0gcmVhZG9ubHkgYXR0cmlidXRlIGxv
bmcgaGVpZ2h0OwogCiAgICAgLy8gRklYTUU6IE5vIG90aGVyIGJyb3dzZXIgaGFzIHRoaXMgYXR0
cmlidXRlLgotICAgIFtTZXR0ZXJDYWxsV2l0aD1FeGVjU3RhdGVdIGF0dHJpYnV0ZSBET01TdHJp
bmc/IGxvY2F0aW9uOworICAgIFtTZXR0ZXJDYWxsV2l0aD1HbG9iYWxPYmplY3RdIGF0dHJpYnV0
ZSBET01TdHJpbmc/IGxvY2F0aW9uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJh
bWVFbGVtZW50QmFzZS5jcHAKaW5kZXggYmU0Y2JmNTk3Zjg2MDk0ZDgyZThmMmQwZmJiNTQzOTlj
NDQxNzE2YS4uNTAwZjcxNTYyYjdkNjNjZTc1N2M3MzNhNzI1MWQ1ZjEzYzlmNDVkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRMb2NhdGlvbihjb25zdCBTdHJp
bmcmIHN0cikKICAgICAgICAgb3BlblVSTChMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2Fy
ZExpc3Q6Ok5vKTsKIH0KIAotdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb24o
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG5ld0xvY2F0aW9uKQordm9pZCBI
VE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb24oSlNDOjpKU0dsb2JhbE9iamVjdCYgc3Rh
dGUsIGNvbnN0IFN0cmluZyYgbmV3TG9jYXRpb24pCiB7CiAgICAgaWYgKFdURjo6cHJvdG9jb2xJ
c0phdmFTY3JpcHQoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKG5ld0xvY2F0aW9u
KSkpIHsKICAgICAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9O
b2RlKHN0YXRlLCBjb250ZW50RG9jdW1lbnQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
cmFtZUVsZW1lbnRCYXNlLmgKaW5kZXggNDE0NmVlN2U2MjMzMTQ4YjUwYmEwNGU2NzQwNTRhNjQx
ZmRlNzYzMi4uZjEyNThiYjUyMDU5NTc0ZGFjZDc2OTY1NTRmMzgyMzJmMzg0NDdkNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaApAQCAtMjgsNyArMjgsNiBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxGcmFtZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9
IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcsNyBAQCBj
bGFzcyBIVE1MRnJhbWVFbGVtZW50QmFzZSA6IHB1YmxpYyBIVE1MRnJhbWVPd25lckVsZW1lbnQg
ewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFVSTCBsb2NhdGlvbigpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgdm9p
ZCBzZXRMb2NhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQg
c2V0TG9jYXRpb24oSlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAg
U2Nyb2xsYmFyTW9kZSBzY3JvbGxpbmdNb2RlKCkgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGNmZWEyNzFmMmY2MDJkODZjMzIwOTZi
NWYxMGM4YjQzZGRlNWMzMzkuLjA4NTA5NDMwNGNiZjk0ZjhlN2EwNGU2ZTVmZDRkOWE3MGE1MzFm
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNDM3MCwx
MSArNDM3MCwxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0dy
b3VwKGNvbnN0IFRyYWNrR3JvdXAmIGdyb3VwKQogICAgIG1fcHJvY2Vzc2luZ1ByZWZlcmVuY2VD
aGFuZ2UgPSBmYWxzZTsKIH0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SFRNTE1lZGlhRWxlbWVudCYgbWVkaWEpCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJK
U1ZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhKQogewogICAg
IEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8gbWVkaWFKU1dyYXBwZXIgPSB0b0pTKCZleGVj
LCAmZ2xvYmFsT2JqZWN0LCBtZWRpYSk7CisgICAgYXV0byBtZWRpYUpTV3JhcHBlciA9IHRvSlMo
JmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIG1lZGlhKTsKIAogICAgIC8vIFJl
dHJpZXZlIHRoZSBjb250cm9sbGVyIHRocm91Z2ggdGhlIEpTIG9iamVjdCBncmFwaAogICAgIEpT
Qzo6SlNPYmplY3QqIG1lZGlhSlNXcmFwcGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpT
Qzo6SlNPYmplY3QqPih2bSwgbWVkaWFKU1dyYXBwZXIpOwpAQCAtNDM4Miw3ICs0MzgyLDcgQEAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhl
YywgSlNET01HbG9iYWxPYmplY3QmIGcKICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CiAK
ICAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiY29udHJvbHNIb3N0Iik7Ci0gICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xzSG9z
dEpTV3JhcHBlciA9IG1lZGlhSlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xzSG9z
dCk7CisgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xzSG9zdEpTV3JhcHBlciA9IG1lZGlhSlNXcmFw
cGVyT2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIGNvbnRyb2xzSG9zdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpqc051bGwoKSk7CiAKICAgICBKU0M6OkpT
T2JqZWN0KiBjb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8
SlNDOjpKU09iamVjdCo+KHZtLCBjb250cm9sc0hvc3RKU1dyYXBwZXIpOwpAQCAtNDM5MCw3ICs0
MzkwLDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGcKICAgICAgICAgcmV0dXJuIEpTQzo6anNO
dWxsKCk7CiAKICAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbGxlcklEID0gSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiY29udHJvbGxlciIpOwotICAgIEpTQzo6SlNWYWx1ZSBjb250
cm9sbGVySlNXcmFwcGVyID0gY29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMs
IGNvbnRyb2xsZXJJRCk7CisgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJKU1dyYXBwZXIgPSBj
b250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QtPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgY29u
dHJvbGxlcklEKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OmpzTnVsbCgp
KTsKIAogICAgIHJldHVybiBjb250cm9sbGVySlNXcmFwcGVyOwpAQCAtNDQxNywxMSArNDQxNywx
MSBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnNldHVwQW5kQ2FsbEpTKGNvbnN0IEpTU2V0dXBG
dW5jdGlvbiYgdGFzaykKICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgYXV0byogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OworICAgIGF1dG8qIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKLSAgICByZXR1cm4gdGFzaygqZ2xv
YmFsT2JqZWN0LCAqZXhlYywgc2NyaXB0Q29udHJvbGxlciwgd29ybGQpOworICAgIHJldHVybiB0
YXNrKCpnbG9iYWxPYmplY3QsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY3JpcHRDb250cm9sbGVy
LCB3b3JsZCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRh
aW5lcigpCkBAIC00NDM4LDEwICs0NDM4LDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBk
YXRlQ2FwdGlvbkNvbnRhaW5lcigpCiAgICAgaWYgKCFtX21lZGlhQ29udHJvbHNIb3N0KQogICAg
ICAgICBtX21lZGlhQ29udHJvbHNIb3N0ID0gTWVkaWFDb250cm9sc0hvc3Q6OmNyZWF0ZSh0aGlz
KTsKIAotICAgIHNldHVwQW5kQ2FsbEpTKFt0aGlzXShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgU2NyaXB0Q29udHJvbGxlciYsIERPTVdyYXBw
ZXJXb3JsZCYpIHsKKyAgICBzZXR1cEFuZENhbGxKUyhbdGhpc10oSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
U2NyaXB0Q29udHJvbGxlciYsIERPTVdyYXBwZXJXb3JsZCYpIHsKICAgICAgICAgYXV0byYgdm0g
PSBnbG9iYWxPYmplY3Qudm0oKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwotICAgICAgICBhdXRvIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJKU1Zh
bHVlKGV4ZWMsIGdsb2JhbE9iamVjdCwgKnRoaXMpOworICAgICAgICBhdXRvIGNvbnRyb2xsZXJW
YWx1ZSA9IGNvbnRyb2xsZXJKU1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgKnRoaXMpOwogICAgICAgICBhdXRvKiBjb250cm9sbGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFt
aWNDYXN0PEpTQzo6SlNPYmplY3QqPih2bSwgY29udHJvbGxlclZhbHVlKTsKICAgICAgICAgaWYg
KCFjb250cm9sbGVyT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDQ1Miw3
ICs0NDUyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udGFpbmVy
KCkKICAgICAgICAgLy8gICAgIE5vbmUKICAgICAgICAgLy8gUmV0dXJuIHZhbHVlOgogICAgICAg
ICAvLyAgICAgTm9uZQotICAgICAgICBhdXRvIG1ldGhvZFZhbHVlID0gY29udHJvbGxlck9iamVj
dC0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ1cGRhdGVDYXB0
aW9uQ29udGFpbmVyIikpOworICAgICAgICBhdXRvIG1ldGhvZFZhbHVlID0gY29udHJvbGxlck9i
amVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJ1cGRhdGVDYXB0aW9uQ29udGFpbmVyIikpOwogICAgICAgICBhdXRvKiBtZXRob2RP
YmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU09iamVjdCo+KHZtLCBtZXRob2RWYWx1
ZSk7CiAgICAgICAgIGlmICghbWV0aG9kT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNDQ2NCw3ICs0NDY0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0
aW9uQ29udGFpbmVyKCkKIAogICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIG5vQXJn
dW1lbnRzOwogICAgICAgICBBU1NFUlQoIW5vQXJndW1lbnRzLmhhc092ZXJmbG93ZWQoKSk7Ci0g
ICAgICAgIEpTQzo6Y2FsbCgmZXhlYywgbWV0aG9kT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEs
IGNvbnRyb2xsZXJPYmplY3QsIG5vQXJndW1lbnRzKTsKKyAgICAgICAgSlNDOjpjYWxsKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBtZXRob2RPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgY29udHJv
bGxlck9iamVjdCwgbm9Bcmd1bWVudHMpOwogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogCiAgICAgICAgIG1faGF2ZVNldFVwQ2FwdGlvbkNvbnRhaW5lciA9IHRydWU7CkBAIC01NzU5
LDcgKzU3NTksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN1c3BlbmQoUmVhc29uRm9yU3Vz
cGVuc2lvbiByZWFzb24pCiAgICAgbV9yZXN1bWVUYXNrUXVldWUuY2FuY2VsVGFzaygpOwogCiAg
ICAgc3dpdGNoIChyZWFzb24pIHsKLSAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246OlBhZ2VD
YWNoZToKKyAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246OkJhY2tGb3J3YXJkQ2FjaGU6CiAg
ICAgICAgIHN0b3BXaXRob3V0RGVzdHJveWluZ01lZGlhUGxheWVyKCk7CiAgICAgICAgIHNldEJ1
ZmZlcmluZ1BvbGljeShCdWZmZXJpbmdQb2xpY3k6Ok1ha2VSZXNvdXJjZXNQdXJnZWFibGUpOwog
ICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1l
bnRTZXNzaW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb1Jlc3VtZU1lZGlhKTsKQEAgLTU3ODcsNyAr
NTc4Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lKCkKICAgICBtX21lZGlhU2Vz
c2lvbi0+dXBkYXRlQnVmZmVyaW5nUG9saWN5KCk7CiAKICAgICBpZiAobV9lcnJvciAmJiBtX2Vy
cm9yLT5jb2RlKCkgPT0gTWVkaWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQgJiYgIW1fcmVzdW1l
VGFza1F1ZXVlLmhhc1BlbmRpbmdUYXNrKCkpIHsKLSAgICAgICAgLy8gUmVzdGFydCB0aGUgbG9h
ZCBpZiBpdCB3YXMgYWJvcnRlZCBpbiB0aGUgbWlkZGxlIGJ5IG1vdmluZyB0aGUgZG9jdW1lbnQg
dG8gdGhlIHBhZ2UgY2FjaGUuCisgICAgICAgIC8vIFJlc3RhcnQgdGhlIGxvYWQgaWYgaXQgd2Fz
IGFib3J0ZWQgaW4gdGhlIG1pZGRsZSBieSBtb3ZpbmcgdGhlIGRvY3VtZW50IHRvIHRoZSBiYWNr
L2ZvcndhcmQgY2FjaGUuCiAgICAgICAgIC8vIG1fZXJyb3IgaXMgb25seSBsZWZ0IGF0IE1FRElB
X0VSUl9BQk9SVEVEIHdoZW4gdGhlIGRvY3VtZW50IGJlY29tZXMgaW5hY3RpdmUgKGl0IGlzIHNl
dCB0bwogICAgICAgICAvLyAgTUVESUFfRVJSX0FCT1JURUQgd2hpbGUgdGhlIGFib3J0RXZlbnQg
aXMgYmVpbmcgc2VudCwgYnV0IGNsZWFyZWQgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcykuCiAgICAg
ICAgIC8vIFRoaXMgYmVoYXZpb3IgaXMgbm90IHNwZWNpZmllZCBidXQgaXQgc2VlbXMgbGlrZSBh
IHNlbnNpYmxlIHRoaW5nIHRvIGRvLgpAQCAtNzI2OCwxMSArNzI2OCwxMSBAQCBib29sIEhUTUxN
ZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhQ29udHJvbHNJbmplY3RlZFNjcmlwdCgpCiAgICAgaWYg
KCFtZWRpYUNvbnRyb2xzU2NyaXB0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gc2V0dXBBbmRDYWxsSlMoW21lZGlhQ29udHJvbHNTY3JpcHRdKEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6RXhlY1N0YXRlJiBleGVjLCBTY3JpcHRDb250
cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKSB7CisgICAg
cmV0dXJuIHNldHVwQW5kQ2FsbEpTKFttZWRpYUNvbnRyb2xzU2NyaXB0XShKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyLCBET01XcmFwcGVyV29ybGQm
IHdvcmxkKSB7CiAgICAgICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgICAgICBhdXRvIGZ1
bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QuZ2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJjcmVhdGVDb250cm9scyIpKTsKKyAgICAgICAgYXV0byBmdW5jdGlvblZh
bHVlID0gZ2xvYmFsT2JqZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlQ29udHJvbHMiKSk7CiAgICAgICAgIGlmIChmdW5j
dGlvblZhbHVlLmlzRnVuY3Rpb24odm0pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAg
LTczMTMsMTggKzczMTMsMTggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVVc2VzTFRS
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkpTUHJvcGVydHkoKQogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnNldENvbnRyb2xsZXJKU1Byb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFt
ZSwgSlNDOjpKU1ZhbHVlIHByb3BlcnR5VmFsdWUpCiB7Ci0gICAgc2V0dXBBbmRDYWxsSlMoW3Ro
aXMsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZV0oSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFNjcmlwdENvbnRyb2xsZXImLCBET01XcmFw
cGVyV29ybGQmKSB7CisgICAgc2V0dXBBbmRDYWxsSlMoW3RoaXMsIHByb3BlcnR5TmFtZSwgcHJv
cGVydHlWYWx1ZV0oSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgU2NyaXB0Q29udHJvbGxlciYsIERPTVdyYXBw
ZXJXb3JsZCYpIHsKICAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKLSAgICAg
ICAgYXV0byBjb250cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZShleGVjLCBnbG9iYWxP
YmplY3QsICp0aGlzKTsKKyAgICAgICAgYXV0byBjb250cm9sbGVyVmFsdWUgPSBjb250cm9sbGVy
SlNWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICp0aGlzKTsKICAgICAg
ICAgaWYgKGNvbnRyb2xsZXJWYWx1ZS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBKU0M6OlB1dFByb3BlcnR5U2xvdCBwcm9wZXJ0eVNsb3QoY29udHJvbGxl
clZhbHVlKTsKLSAgICAgICAgYXV0byogY29udHJvbGxlck9iamVjdCA9IGNvbnRyb2xsZXJWYWx1
ZS50b09iamVjdCgmZXhlYyk7CisgICAgICAgIGF1dG8qIGNvbnRyb2xsZXJPYmplY3QgPSBjb250
cm9sbGVyVmFsdWUudG9PYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAo
IWNvbnRyb2xsZXJPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
Y29udHJvbGxlck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQoY29udHJvbGxlck9iamVjdCwg
JmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSwgcHJv
cGVydHlWYWx1ZSwgcHJvcGVydHlTbG90KTsKKyAgICAgICAgY29udHJvbGxlck9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5wdXQoY29udHJvbGxlck9iamVjdCwgJmxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSwgcHJvcGVydHlW
YWx1ZSwgcHJvcGVydHlTbG90KTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKQEAg
LTczMzcsNyArNzMzNyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogICAgIGlmICghZW5zdXJlTWVkaWFDb250cm9s
c0luamVjdGVkU2NyaXB0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldHVwQW5kQ2FsbEpT
KFt0aGlzLCAmcm9vdF0oSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpFeGVj
U3RhdGUmIGV4ZWMsIFNjcmlwdENvbnRyb2xsZXImLCBET01XcmFwcGVyV29ybGQmKSB7CisgICAg
c2V0dXBBbmRDYWxsSlMoW3RoaXMsICZyb290XShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBTY3JpcHRDb250
cm9sbGVyJiwgRE9NV3JhcHBlcldvcmxkJikgewogICAgICAgICBhdXRvJiB2bSA9IGdsb2JhbE9i
amVjdC52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CiAKQEAgLTczNTAsNDEgKzczNTAsNDEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRV
c2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiAgICAgICAgIC8vIFJldHVybiB2
YWx1ZToKICAgICAgICAgLy8gICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBjcmVhdGVkIG1lZGlhIGNv
bnRyb2xsZXIgaW5zdGFuY2UuCiAKLSAgICAgICAgYXV0byBmdW5jdGlvblZhbHVlID0gZ2xvYmFs
T2JqZWN0LmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRl
Q29udHJvbHMiKSk7CisgICAgICAgIGF1dG8gZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC5n
ZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
ImNyZWF0ZUNvbnRyb2xzIikpOwogICAgICAgICBpZiAoZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghbV9t
ZWRpYUNvbnRyb2xzSG9zdCkKICAgICAgICAgICAgIG1fbWVkaWFDb250cm9sc0hvc3QgPSBNZWRp
YUNvbnRyb2xzSG9zdDo6Y3JlYXRlKHRoaXMpOwogCi0gICAgICAgIGF1dG8gbWVkaWFKU1dyYXBw
ZXIgPSB0b0pTKCZleGVjLCAmZ2xvYmFsT2JqZWN0LCAqdGhpcyk7Ci0gICAgICAgIGF1dG8gbWVk
aWFDb250cm9sc0hvc3RKU1dyYXBwZXIgPSB0b0pTKCZleGVjLCAmZ2xvYmFsT2JqZWN0LCAqbV9t
ZWRpYUNvbnRyb2xzSG9zdCk7CisgICAgICAgIGF1dG8gbWVkaWFKU1dyYXBwZXIgPSB0b0pTKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CisgICAgICAgIGF1dG8g
bWVkaWFDb250cm9sc0hvc3RKU1dyYXBwZXIgPSB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAm
Z2xvYmFsT2JqZWN0LCAqbV9tZWRpYUNvbnRyb2xzSG9zdCk7CiAKICAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwotICAgICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKCZl
eGVjLCAmZ2xvYmFsT2JqZWN0LCByb290KSk7CisgICAgICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMo
JmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHJvb3QpKTsKICAgICAgICAgYXJn
TGlzdC5hcHBlbmQobWVkaWFKU1dyYXBwZXIpOwogICAgICAgICBhcmdMaXN0LmFwcGVuZChtZWRp
YUNvbnRyb2xzSG9zdEpTV3JhcHBlcik7CiAgICAgICAgIEFTU0VSVCghYXJnTGlzdC5oYXNPdmVy
Zmxvd2VkKCkpOwogCi0gICAgICAgIGF1dG8qIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09i
amVjdCgmZXhlYyk7CisgICAgICAgIGF1dG8qIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09i
amVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CiAgICAgICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIGF1dG8gY2Fs
bFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOwogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBhdXRvIGNvbnRyb2xsZXJWYWx1
ZSA9IEpTQzo6Y2FsbCgmZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJmdsb2Jh
bE9iamVjdCwgYXJnTGlzdCk7CisgICAgICAgIGF1dG8gY29udHJvbGxlclZhbHVlID0gSlNDOjpj
YWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAm
Z2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgYXV0byogY29udHJvbGxlck9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6
OkpTT2JqZWN0Kj4odm0sIGNvbnRyb2xsZXJWYWx1ZSk7CiAgICAgICAgIGlmICghY29udHJvbGxl
ck9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBDb25uZWN0
IHRoZSBNZWRpYSwgTWVkaWFDb250cm9sbGVySG9zdCwgYW5kIENvbnRyb2xsZXIgc28gdGhlIEdD
IGtub3dzIGFib3V0IHRoZWlyIHJlbGF0aW9uc2hpcAotICAgICAgICBhdXRvKiBtZWRpYUpTV3Jh
cHBlck9iamVjdCA9IG1lZGlhSlNXcmFwcGVyLnRvT2JqZWN0KCZleGVjKTsKKyAgICAgICAgYXV0
byogbWVkaWFKU1dyYXBwZXJPYmplY3QgPSBtZWRpYUpTV3JhcHBlci50b09iamVjdCgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAg
ICAgIGF1dG8gY29udHJvbHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
Y29udHJvbHNIb3N0Iik7CiAKLSAgICAgICAgQVNTRVJUKCFtZWRpYUpTV3JhcHBlck9iamVjdC0+
aGFzUHJvcGVydHkoJmV4ZWMsIGNvbnRyb2xzSG9zdCkpOworICAgICAgICBBU1NFUlQoIW1lZGlh
SlNXcmFwcGVyT2JqZWN0LT5oYXNQcm9wZXJ0eSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgY29udHJv
bHNIb3N0KSk7CiAKICAgICAgICAgbWVkaWFKU1dyYXBwZXJPYmplY3QtPnB1dERpcmVjdCh2bSwg
Y29udHJvbHNIb3N0LCBtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlciwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogCkBAIC03Mzk0LDcgKzczOTQsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCYgcm9vdCkKIAogICAgICAgICBhdXRvIGNvbnRyb2xsZXIgPSBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sICJjb250cm9sbGVyIik7CiAKLSAgICAgICAgQVNTRVJUKCFjb250cm9s
bGVyT2JqZWN0LT5oYXNQcm9wZXJ0eSgmZXhlYywgY29udHJvbGxlcikpOworICAgICAgICBBU1NF
UlQoIWNvbnRyb2xsZXJPYmplY3QtPmhhc1Byb3BlcnR5KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
b250cm9sbGVyKSk7CiAKICAgICAgICAgbWVkaWFDb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3Qt
PnB1dERpcmVjdCh2bSwgY29udHJvbGxlciwgY29udHJvbGxlclZhbHVlLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0g
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiAKQEAgLTc0MzksMjAgKzc0Mzks
MjAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVz
ZW50YXRpb25Nb2RlQ2hhbmdlKCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBzZXR1cEFuZENhbGxKUyhbdGhpc10oSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFNjcmlwdENvbnRyb2xsZXImLCBET01XcmFw
cGVyV29ybGQmKSB7CisgICAgc2V0dXBBbmRDYWxsSlMoW3RoaXNdKEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IFNjcmlwdENvbnRyb2xsZXImLCBET01XcmFwcGVyV29ybGQmKSB7CiAgICAgICAgIGF1dG8mIHZt
ID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgICAgICBhdXRvIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJK
U1ZhbHVlKGV4ZWMsIGdsb2JhbE9iamVjdCwgKnRoaXMpOwotICAgICAgICBhdXRvKiBjb250cm9s
bGVyT2JqZWN0ID0gY29udHJvbGxlclZhbHVlLnRvT2JqZWN0KCZleGVjKTsKKyAgICAgICAgYXV0
byBjb250cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QsICp0aGlzKTsKKyAgICAgICAgYXV0byogY29udHJvbGxlck9iamVjdCA9
IGNvbnRyb2xsZXJWYWx1ZS50b09iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCi0gICAgICAgIGF1dG8gZnVu
Y3Rpb25WYWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiaGFuZGxlUHJlc2VudGF0aW9uTW9kZUNoYW5nZSIpKTsKKyAgICAg
ICAgYXV0byBmdW5jdGlvblZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJoYW5kbGVQcmVzZW50
YXRpb25Nb2RlQ2hhbmdlIikpOwogICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpIHx8IGZ1bmN0aW9uVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9P
YmplY3QoJmV4ZWMpOworICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9P
YmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOwogICAgICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBhdXRvIGNh
bGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24s
IGNhbGxEYXRhKTsKQEAgLTc0NjEsNyArNzQ2MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
dXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpCiAKICAgICAg
ICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAgICAgICBBU1NFUlQoIWFy
Z0xpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKLSAgICAgICAgSlNDOjpjYWxsKCZleGVjLCBmdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb250cm9sbGVyT2JqZWN0LCBhcmdMaXN0KTsKKyAgICAg
ICAgSlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBjb250cm9sbGVyT2JqZWN0LCBhcmdMaXN0KTsKIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9KTsKQEAgLTc0ODIsMjAgKzc0ODIsMjAgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1l
bnQ6OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKCkKICAgICBlbnN1cmVNZWRpYUNvbnRy
b2xzU2hhZG93Um9vdCgpOwogCiAgICAgU3RyaW5nIHN0YXR1czsKLSAgICBzZXR1cEFuZENhbGxK
UyhbdGhpcywgJnN0YXR1c10oSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIFNjcmlwdENvbnRyb2xsZXImLCBET01XcmFwcGVyV29ybGQmKSB7Cisg
ICAgc2V0dXBBbmRDYWxsSlMoW3RoaXMsICZzdGF0dXNdKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIFNjcmlw
dENvbnRyb2xsZXImLCBET01XcmFwcGVyV29ybGQmKSB7CiAgICAgICAgIGF1dG8mIHZtID0gZ2xv
YmFsT2JqZWN0LnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgICAgICBhdXRvIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJKU1ZhbHVl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgKnRoaXMpOwotICAgICAgICBhdXRvKiBjb250cm9sbGVyT2Jq
ZWN0ID0gY29udHJvbGxlclZhbHVlLnRvT2JqZWN0KCZleGVjKTsKKyAgICAgICAgYXV0byBjb250
cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QsICp0aGlzKTsKKyAgICAgICAgYXV0byogY29udHJvbGxlck9iamVjdCA9IGNvbnRy
b2xsZXJWYWx1ZS50b09iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogCi0gICAgICAgIGF1dG8gZnVuY3Rpb25W
YWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldCgmZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCAiZ2V0Q3VycmVudENvbnRyb2xzU3RhdHVzIikpOworICAgICAgICBhdXRvIGZ1
bmN0aW9uVmFsdWUgPSBjb250cm9sbGVyT2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImdldEN1cnJlbnRDb250cm9sc1N0YXR1
cyIpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlv
blZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgYXV0byogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KCZleGVjKTsK
KyAgICAgICAgYXV0byogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAg
ICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgYXV0byBjYWxsVHlwZSA9IGZ1bmN0
aW9uLT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkBA
IC03NTA0LDExICs3NTA0LDExIEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpnZXRDdXJyZW50
TWVkaWFDb250cm9sc1N0YXR1cygpCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxU
eXBlOjpOb25lKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGF1dG8gb3V0
cHV0VmFsdWUgPSBKU0M6OmNhbGwoJmV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IGNvbnRyb2xsZXJPYmplY3QsIGFyZ0xpc3QpOworICAgICAgICBhdXRvIG91dHB1dFZhbHVlID0g
SlNDOjpjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBjb250cm9sbGVyT2JqZWN0LCBhcmdMaXN0KTsKIAogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKLSAgICAgICAgc3RhdHVzID0gb3V0cHV0VmFsdWUuZ2V0
U3RyaW5nKCZleGVjKTsKKyAgICAgICAgc3RhdHVzID0gb3V0cHV0VmFsdWUuZ2V0U3RyaW5nKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggMzJhMjQwYTA5Yzk2NDUxNDc4
YWRjMjA3ZDNkOTAwMDE4ZWU2NTU2Ny4uNDRhN2NjYjliMjgwNjhjZmQzOWIzNzdhZGM1Y2NmMzk5
NGIzYjAzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTkxMiw3
ICs5MTIsNyBAQCBjbGFzcyBIVE1MTWVkaWFFbGVtZW50CiAgICAgdm9pZCB1cGRhdGVDYXB0aW9u
Q29udGFpbmVyKCk7CiAgICAgdm9pZCBlbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwog
Ci0gICAgdXNpbmcgSlNTZXR1cEZ1bmN0aW9uID0gV1RGOjpGdW5jdGlvbjxib29sKEpTRE9NR2xv
YmFsT2JqZWN0JiwgSlNDOjpFeGVjU3RhdGUmLCBTY3JpcHRDb250cm9sbGVyJiwgRE9NV3JhcHBl
cldvcmxkJik+OworICAgIHVzaW5nIEpTU2V0dXBGdW5jdGlvbiA9IFdURjo6RnVuY3Rpb248Ym9v
bChKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBTY3JpcHRDb250cm9s
bGVyJiwgRE9NV3JhcHBlcldvcmxkJik+OwogICAgIGJvb2wgc2V0dXBBbmRDYWxsSlMoY29uc3Qg
SlNTZXR1cEZ1bmN0aW9uJik7CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5k
ZXggYzU2YzNjNDg4NThiNjM5YWVkMzE5YzcyN2Y2Zjg2MmM1ZjY0M2U1OC4uMWVkMzcxNjQ5NDI4
MzNiMjM0ODhhZWUyMDRkZDhhZmViMjRkMzlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAi
VHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJ
bmRpY2F0b3IuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTg0LDEz
ICsxODUsMTMgQEAgYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp3b3VsZExvYWRBc1BsdWdJ
bihjb25zdCBTdHJpbmcmIHJlbGF0aXZlVVJMLCBjb25zdAogCiBSZW5kZXJQdHI8UmVuZGVyRWxl
bWVudD4gSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRl
clN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYgaW5zZXJ0aW9uUG9zaXRp
b24pCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVu
dDo6Tm90SW5QYWdlQ2FjaGUpOworICAgIEFTU0VSVChkb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2Fj
aGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwogCiAgICAgaWYg
KGRpc3BsYXlTdGF0ZSgpID49IFByZXBhcmluZ1BsdWdpblJlcGxhY2VtZW50KQogICAgICAgICBy
ZXR1cm4gSFRNTFBsdWdJbkVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihXVEZNb3ZlKHN0
eWxlKSwgaW5zZXJ0aW9uUG9zaXRpb24pOwogCiAgICAgLy8gT25jZSBhIHBsdWctaW4gZWxlbWVu
dCBjcmVhdGVzIGl0cyByZW5kZXJlciwgaXQgbmVlZHMgdG8gYmUgdG9sZCB3aGVuIHRoZSBkb2N1
bWVudCBnb2VzCi0gICAgLy8gaW5hY3RpdmUgb3IgcmVhY3RpdmF0ZXMgc28gaXQgY2FuIGNsZWFy
IHRoZSByZW5kZXJlciBiZWZvcmUgZ29pbmcgaW50byB0aGUgcGFnZSBjYWNoZS4KKyAgICAvLyBp
bmFjdGl2ZSBvciByZWFjdGl2YXRlcyBzbyBpdCBjYW4gY2xlYXIgdGhlIHJlbmRlcmVyIGJlZm9y
ZSBnb2luZyBpbnRvIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAgICAgaWYgKCFtX25lZWRzRG9j
dW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKSB7CiAgICAgICAgIG1fbmVlZHNEb2N1bWVudEFjdGl2
YXRpb25DYWxsYmFja3MgPSB0cnVlOwogICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKQEAgLTM5MiwxMiArMzkzLDEyIEBAIHZv
aWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFk
b3dSb290JiByb290KQogICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwotICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdC5nbG9iYWxFeGVjKCk7
CisgICAgYXV0byYgbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKIAogICAgIEpT
Qzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKLSAgICBhcmdMaXN0LmFwcGVuZCh0b0pT
PElETEludGVyZmFjZTxTaGFkb3dSb290Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgcm9vdCkpOwot
ICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgdGl0bGVUZXh0KCpw
YWdlLCBtaW1lVHlwZSkpKTsKLSAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPElETERPTVN0cmluZz4o
c3RhdGUsIHN1YnRpdGxlVGV4dCgqcGFnZSwgbWltZVR5cGUpKSk7CisgICAgYXJnTGlzdC5hcHBl
bmQodG9KUzxJRExJbnRlcmZhY2U8U2hhZG93Um9vdD4+KGxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgcm9vdCkpOworICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aXRsZVRleHQoKnBhZ2UsIG1pbWVUeXBlKSkpOworICAg
IGFyZ0xpc3QuYXBwZW5kKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
dWJ0aXRsZVRleHQoKnBhZ2UsIG1pbWVUeXBlKSkpOwogICAgIAogICAgIC8vIFRoaXMgcGFyYW1l
dGVyIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHNuYXBzaG90IG92ZXJsYXkgc2hvdWxk
IGFsd2F5cyBiZSB2aXNpYmxlIG92ZXIgdGhlIHBsdWdpbiBzbmFwc2hvdC4KICAgICAvLyBJZiBu
byBzbmFwc2hvdCB3YXMgZm91bmQgdGhlbiB3ZSB3YW50IHRoZSBvdmVybGF5IHRvIGJlIHZpc2li
bGUuCkBAIC00MDUsNyArNDA2LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRB
ZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiAgICAgQVNTRVJUKCFhcmdM
aXN0Lmhhc092ZXJmbG93ZWQoKSk7CiAKICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGUgSlMgZmls
ZSBwcm92aWRlcyBhIGNyZWF0ZU92ZXJsYXkoc2hhZG93Um9vdCwgdGl0bGUsIHN1YnRpdGxlKSBm
dW5jdGlvbi4KLSAgICBhdXRvKiBvdmVybGF5ID0gZ2xvYmFsT2JqZWN0LmdldCgmc3RhdGUsIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImNyZWF0ZU92ZXJsYXkiKSkudG9PYmplY3Qo
JnN0YXRlKTsKKyAgICBhdXRvKiBvdmVybGF5ID0gZ2xvYmFsT2JqZWN0LmdldCgmbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3JlYXRlT3Zlcmxh
eSIpKS50b09iamVjdCgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgQVNTRVJUKCFvdmVybGF5
ID09ICEhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghb3ZlcmxheSkgewogICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwpAQCAtNDE2LDcgKzQxNyw3IEBAIHZvaWQgSFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290
KQogICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjYWxsKCZzdGF0ZSwgb3ZlcmxheSwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmZ2xv
YmFsT2JqZWN0LCBhcmdMaXN0KTsKKyAgICBjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBvdmVy
bGF5LCBjYWxsVHlwZSwgY2FsbERhdGEsICZnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwogICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNl
RWxlbWVudC5jcHAKaW5kZXggODhlYzVhNzZhNjBlY2JmNjBlY2QyMjU4MTFjYmYzMzJmZTEyM2Jj
YS4uZGQ1ZDg1YzU0YjkxZmZiY2ZiMjA0ZWNmZDZiNzRiNGI0MjNmM2FiYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBib29s
IEhUTUxTb3VyY2VFbGVtZW50OjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29u
c3QKIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbiBy
ZWFzb24pCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIGFsc28gc3RvcCB0aGUgdGlt
ZXIgZm9yIFBhZ2VXaWxsQmVTdXNwZW5kZWQ/Ci0gICAgaWYgKHJlYXNvbiA9PSBSZWFzb25Gb3JT
dXNwZW5zaW9uOjpQYWdlQ2FjaGUpIHsKKyAgICBpZiAocmVhc29uID09IFJlYXNvbkZvclN1c3Bl
bnNpb246OkJhY2tGb3J3YXJkQ2FjaGUpIHsKICAgICAgICAgbV9zaG91bGRSZXNjaGVkdWxlRXJy
b3JFdmVudE9uUmVzdW1lID0gbV9lcnJvckV2ZW50VGltZXIuaXNBY3RpdmUoKTsKICAgICAgICAg
bV9lcnJvckV2ZW50VGltZXIuc3RvcCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01l
ZGlhRWxlbWVudFNlc3Npb24uY3BwCmluZGV4IDI4NDA2ZmMyZmVlODFhMWFlYTZmNGY0NzVmNWE1
YThkOTZmYTEzYTYuLjJhNGM4ZjUzZDk5NWFiOWVkYTQ1Y2Q1MGIzNjZmOTY3NDg2NTRmMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUVsZW1lbnRTZXNzaW9uLmNwcApAQCAtMzEyLDcg
KzMxMiw3IEBAIFN1Y2Nlc3NPcjxNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29uPiBNZWRpYUVsZW1l
bnRTZXNzaW9uOjpwbGF5YmFja1Blcm1pdHRlZCgpIGNvCiBib29sIE1lZGlhRWxlbWVudFNlc3Np
b246OmF1dG9wbGF5UGVybWl0dGVkKCkgY29uc3QKIHsKICAgICBjb25zdCBEb2N1bWVudCYgZG9j
dW1lbnQgPSBtX2VsZW1lbnQuZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQucGFnZUNhY2hl
U3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpCisgICAgaWYgKGRvY3VtZW50LmJh
Y2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRE9NT2JqZWN0
c0FyZVN1c3BlbmRlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggNmU5MzljYjVhZWVlYWM0OGEyM2E4Y2ZlOGJlMjU5
YzY1Mjk4ZDYzNC4uNjQ1ODQ5MWI0ZjJjNzQ0Nzk2ZTZiOTEwZmEyYjhjNmFhNTZkZDU4YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtODUsNyArODUsNyBAQCB2
b2lkIE9mZnNjcmVlbkNhbnZhczo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQogfQog
CiAjaWYgRU5BQkxFKFdFQkdMKQotRXhjZXB0aW9uT3I8T2Zmc2NyZWVuUmVuZGVyaW5nQ29udGV4
dD4gT2Zmc2NyZWVuQ2FudmFzOjpnZXRDb250ZXh0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgUmVu
ZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+PiYmIGFyZ3VtZW50cykKK0V4Y2VwdGlvbk9yPE9mZnNjcmVlblJlbmRlcmluZ0NvbnRl
eHQ+IE9mZnNjcmVlbkNhbnZhczo6Z2V0Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0
ZSwgUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUsIFZlY3RvcjxKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+PiYmIGFyZ3VtZW50cykKIHsKICAgICBpZiAobV9jb250ZXh0ICYmIGNvbnRl
eHRUeXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpXZWJnbCkKICAgICAgICAgcmV0dXJuIHsg
UmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdD
b250ZXh0PigqbV9jb250ZXh0KSB9IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMu
aAppbmRleCBhZjc1ZmNjZTRlMmExYzVkY2EzZjY0YzE1NTViNjIxMGRlYjhlZWFjLi42NGI5OTZi
N2NmOTBhNTc0MWVlZjBhZTViZDQyN2MxYmIzZTFhOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zm
c2NyZWVuQ2FudmFzLmgKQEAgLTcyLDcgKzcyLDcgQEAgY2xhc3MgT2Zmc2NyZWVuQ2FudmFzIGZp
bmFsIDogcHVibGljIFJlZkNvdW50ZWQ8T2Zmc2NyZWVuQ2FudmFzPiwgcHVibGljIENhbnZhc0IK
ICAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOwogCiAjaWYgRU5BQkxFKFdF
QkdMKQotICAgIEV4Y2VwdGlvbk9yPE9mZnNjcmVlblJlbmRlcmluZ0NvbnRleHQ+IGdldENvbnRl
eHQoSlNDOjpFeGVjU3RhdGUmLCBSZW5kZXJpbmdDb250ZXh0VHlwZSwgVmVjdG9yPEpTQzo6U3Ry
b25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKTsKKyAgICBFeGNlcHRpb25PcjxPZmZzY3Jl
ZW5SZW5kZXJpbmdDb250ZXh0PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBSZW5k
ZXJpbmdDb250ZXh0VHlwZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJn
dW1lbnRzKTsKICNlbmRpZgogICAgIFJlZlB0cjxJbWFnZUJpdG1hcD4gdHJhbnNmZXJUb0ltYWdl
Qml0bWFwKCk7CiAgICAgLy8gdm9pZCBjb252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9ucyBv
cHRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFz
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmlkbAppbmRleCBlYjkx
OTE3YTU2NTNiNGNmNTRlYmM1NGRlYWQyYzFmMDFmNTY4NTAxLi44NGFlYzYxYTIzNDBjYzEyMzNi
ODE3NTNiODIxNjEyYTFiZDUwMThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52
YXMuaWRsCkBAIC00Nyw3ICs0Nyw3IEBAIGVudW0gT2Zmc2NyZWVuUmVuZGVyaW5nQ29udGV4dFR5
cGUKICAgICBhdHRyaWJ1dGUgW0VuZm9yY2VSYW5nZV0gdW5zaWduZWQgbG9uZyB3aWR0aDsKICAg
ICBhdHRyaWJ1dGUgW0VuZm9yY2VSYW5nZV0gdW5zaWduZWQgbG9uZyBoZWlnaHQ7CiAKLSAgICBb
Q2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbiwgQ29uZGl0aW9uYWw9V0VCR0xd
IFdlYkdMUmVuZGVyaW5nQ29udGV4dD8gZ2V0Q29udGV4dChPZmZzY3JlZW5SZW5kZXJpbmdDb250
ZXh0VHlwZSBjb250ZXh0VHlwZSwgYW55Li4uIGFyZ3VtZW50cyk7CisgICAgW0NhbGxXaXRoPUds
b2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb24sIENvbmRpdGlvbmFsPVdFQkdMXSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ/IGdldENvbnRleHQoT2Zmc2NyZWVuUmVuZGVyaW5nQ29udGV4dFR5cGUg
Y29udGV4dFR5cGUsIGFueS4uLiBhcmd1bWVudHMpOwogICAgIEltYWdlQml0bWFwIHRyYW5zZmVy
VG9JbWFnZUJpdG1hcCgpOwogICAgIC8vIFByb21pc2U8QmxvYj4gY29udmVydFRvQmxvYihvcHRp
b25hbCBJbWFnZUVuY29kZU9wdGlvbnMgb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQW55LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEFueS5oCmluZGV4IDVlZjdlYzQxMDBlNjdiN2Q2YWFlZWNkYWFjNmVkOTE1MjEzM2U3
OGMuLmNmNTNlMWUzZTlkNGYwNTI4ZWMzMmM2MDc2MDM1NWMxNjcxZDc0NmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQW55LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xBbnkuaApAQCAtMzUsNyArMzUsNiBAQAogbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBKU1ZhbHVlOwotdXNpbmcgRXhlY1N0YXRlID0g
Q2FsbEZyYW1lOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9EYXRhQ3VlLmNwcAppbmRleCAwYzkwNWVlOTkzYzhlMjVmNjY0MDI0NDA2ODBjMjk3OGI0NzVl
YzljLi4yZWQ3NDhjMDBkOTEzMTQzOGM4ZWRmNjI2MjEyYjAwOWE4NThlMmZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIERhdGFD
dWU6OmRvZXNFeHRlbmRDdWUoY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0CiAgICAgcmV0
dXJuIFRleHRUcmFja0N1ZTo6ZG9lc0V4dGVuZEN1ZShjdWUpOwogfQogCi1KU0M6OkpTVmFsdWUg
RGF0YUN1ZTo6dmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKSBjb25zdAorSlNDOjpKU1ZhbHVl
IERhdGFDdWU6OnZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlKSBjb25zdAogewogICAg
IGlmIChtX3BsYXRmb3JtVmFsdWUpCiAgICAgICAgIHJldHVybiBtX3BsYXRmb3JtVmFsdWUtPmRl
c2VyaWFsaXplKCZzdGF0ZSk7CkBAIC0xNjIsNyArMTYyLDcgQEAgSlNDOjpKU1ZhbHVlIERhdGFD
dWU6OnZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkgY29uc3QKICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKIH0KIAotdm9pZCBEYXRhQ3VlOjpzZXRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgRGF0YUN1ZTo6c2V0VmFsdWUoSlNDOjpKU0ds
b2JhbE9iamVjdCYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICAvLyBGSVhNRTog
dGhpcyBzaG91bGQgdXNlIGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgogICAgIG1fdmFsdWUuc2V0
KHN0YXRlLnZtKCksIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svRGF0YUN1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmgKaW5kZXgg
MDA1ZTljZTRkZjQ3NGM2MTIwOGZmMjY5NDY3MjE4OWY4NDNkNzE2YS4uNzY0YjgwZGZiN2UxZWQ4
ZTczNzhkODU5NTdhNWIxZDE3MzkxZmQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9EYXRhQ3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3Vl
LmgKQEAgLTc5LDggKzc5LDggQEAgY2xhc3MgRGF0YUN1ZSBmaW5hbCA6IHB1YmxpYyBUZXh0VHJh
Y2tDdWUgewogCiAgICAgY29uc3QgU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24qIHBs
YXRmb3JtVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtVmFsdWUuZ2V0KCk7IH0KIAot
ICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZShKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OwotICAgIHZvaWQg
c2V0VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworICAgIEpTQzo6SlNWYWx1
ZSB2YWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0JikgY29uc3Q7CisgICAgdm9pZCBzZXRWYWx1ZShK
U0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKIAogICAgIFN0cmluZyB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYg
dHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0RhdGFDdWUuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmlk
bAppbmRleCBhYjNiYzAyOTMwZDljZTEwZTE0NzRlNDgyZWI0N2U3YWU3MGVmM2FjLi4zYTk1ODNm
ZGRiNjU2NGRkMjk1YzI3Y2YwYjc2NDljMjJlODhlZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0RhdGFDdWUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svRGF0YUN1ZS5pZGwKQEAgLTMzLDYgKzMzLDYgQEAKICAgICBhdHRyaWJ1dGUgQXJyYXlCdWZm
ZXIgZGF0YTsKIAogICAgIC8vIFByb3Bvc2VkIGV4dGVuc2lvbnMuCi0gICAgW0NhbGxXaXRoPUV4
ZWNTdGF0ZV0gYXR0cmlidXRlIGFueSB2YWx1ZTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0
XSBhdHRyaWJ1dGUgYW55IHZhbHVlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
dHlwZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExp
bmVBUElIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhv
c3QuY3BwCmluZGV4IDg3NWFiZmY0NTI0YmNmM2MzNWEzZGFiZDZhMzg0MWJhYWFlOTM4MDkuLmQz
YmMxNGYwNTYzN2E1NWNiNDI3MzAyY2VkMzRiMmQ5NmRiMmJiMGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBAIC03Myw3ICs3Myw3IEBA
IHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKICAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMgPSBudWxscHRyOwogfQogCi12b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVj
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZVRvSW5zcGVjdCwgSlND
OjpKU1ZhbHVlIGhpbnRzVmFsdWUpCit2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFs
dWVUb0luc3BlY3QsIEpTQzo6SlNWYWx1ZSBoaW50c1ZhbHVlKQogewogICAgIGlmICghbV9pbnN0
cnVtZW50aW5nQWdlbnRzKQogICAgICAgICByZXR1cm47CkBAIC04MywxNCArODMsMTQgQEAgdm9p
ZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWVUb0luc3AKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gaGludHNPYmplY3Q7Ci0gICAgaWYgKCFJbnNwZWN0b3I6OnRvSW5zcGVjdG9yVmFs
dWUoc3RhdGUsIGhpbnRzVmFsdWUpLT5hc09iamVjdChoaW50c09iamVjdCkpCisgICAgaWYgKCFJ
bnNwZWN0b3I6OnRvSW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIGhpbnRzVmFs
dWUpLT5hc09iamVjdChoaW50c09iamVjdCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
cmVtb3RlT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChJbnNwZWN0b3I6OnRvSW5zcGVjdG9yVmFsdWUo
c3RhdGUsIHZhbHVlVG9JbnNwZWN0KSk7CisgICAgYXV0byByZW1vdGVPYmplY3QgPSBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRp
bWVDYXN0KEluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWVUb0luc3BlY3QpKTsKICAgICBpbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChXVEZNb3ZlKHJl
bW90ZU9iamVjdCksIFdURk1vdmUoaGludHNPYmplY3QpKTsKIH0KIAotQ29tbWFuZExpbmVBUElI
b3N0OjpFdmVudExpc3RlbmVyc1JlY29yZCBDb21tYW5kTGluZUFQSUhvc3Q6OmdldEV2ZW50TGlz
dGVuZXJzKEV4ZWNTdGF0ZSYgc3RhdGUsIEV2ZW50VGFyZ2V0JiB0YXJnZXQpCitDb21tYW5kTGlu
ZUFQSUhvc3Q6OkV2ZW50TGlzdGVuZXJzUmVjb3JkIENvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZl
bnRMaXN0ZW5lcnMoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEV2ZW50VGFy
Z2V0JiB0YXJnZXQpCiB7CiAgICAgYXV0byogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHRhcmdl
dC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KQpAQCAtOTgsNyArOTgsNyBAQCBDb21tYW5kTGluZUFQSUhvc3Q6OkV2ZW50TGlzdGVuZXJz
UmVjb3JkIENvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRMaXN0ZW5lcnMoRQogCiAgICAgRXZl
bnRMaXN0ZW5lcnNSZWNvcmQgcmVzdWx0OwogCi0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAKICAgICBmb3IgKGF1dG8mIGV2
ZW50VHlwZSA6IHRhcmdldC5ldmVudFR5cGVzKCkpIHsKICAgICAgICAgVmVjdG9yPENvbW1hbmRM
aW5lQVBJSG9zdDo6TGlzdGVuZXJFbnRyeT4gZW50cmllczsKQEAgLTExMCw3ICsxMTAsNyBAQCBD
b21tYW5kTGluZUFQSUhvc3Q6OkV2ZW50TGlzdGVuZXJzUmVjb3JkIENvbW1hbmRMaW5lQVBJSG9z
dDo6Z2V0RXZlbnRMaXN0ZW5lcnMoRQogICAgICAgICAgICAgYXV0byYganNMaXN0ZW5lciA9IGRv
d25jYXN0PEpTRXZlbnRMaXN0ZW5lcj4oZXZlbnRMaXN0ZW5lci0+Y2FsbGJhY2soKSk7CiAKICAg
ICAgICAgICAgIC8vIEhpZGUgbGlzdGVuZXJzIGZyb20gb3RoZXIgY29udGV4dHMuCi0gICAgICAg
ICAgICBpZiAoJmpzTGlzdGVuZXIuaXNvbGF0ZWRXb3JsZCgpICE9ICZjdXJyZW50V29ybGQoc3Rh
dGUpKQorICAgICAgICAgICAgaWYgKCZqc0xpc3RlbmVyLmlzb2xhdGVkV29ybGQoKSAhPSAmY3Vy
cmVudFdvcmxkKGxleGljYWxHbG9iYWxPYmplY3QpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IGpzTGlzdGVuZXIuanNGdW5jdGlvbigq
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBDb21tYW5k
TGluZUFQSUhvc3Q6OmNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBQYXN0ZWJvYXJk
OjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVQbGFpblRleHQodGV4dCwgUGFzdGVib2Fy
ZDo6Q2Fubm90U21hcnRSZXBsYWNlKTsKIH0KIAotSlNDOjpKU1ZhbHVlIENvbW1hbmRMaW5lQVBJ
SG9zdDo6SW5zcGVjdGFibGVPYmplY3Q6OmdldChKU0M6OkV4ZWNTdGF0ZSYpCitKU0M6OkpTVmFs
dWUgQ29tbWFuZExpbmVBUElIb3N0OjpJbnNwZWN0YWJsZU9iamVjdDo6Z2V0KEpTQzo6SlNHbG9i
YWxPYmplY3QmKQogewogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNTUsMTMgKzE1NSwxMyBAQCB2
b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6YWRkSW5zcGVjdGVkT2JqZWN0KHN0ZDo6dW5pcXVlX3B0
cjxDb21tYW5kTGluZUFQSUhvc3Q6OgogICAgIG1faW5zcGVjdGVkT2JqZWN0ID0gV1RGTW92ZShv
YmplY3QpOwogfQogCi1KU0M6OkpTVmFsdWUgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRP
YmplY3QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQorSlNDOjpKU1ZhbHVlIENvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdGVkT2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QpCiB7CiAgICAgaWYgKCFtX2luc3BlY3RlZE9iamVjdCkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKCZzdGF0ZSk7Ci0gICAg
YXV0byBzY3JpcHRWYWx1ZSA9IG1faW5zcGVjdGVkT2JqZWN0LT5nZXQoc3RhdGUpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gc2Ny
aXB0VmFsdWUgPSBtX2luc3BlY3RlZE9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIHJldHVybiBzY3JpcHRWYWx1ZSA/IHNjcmlwdFZhbHVlIDoganNVbmRlZmluZWQoKTsKIH0K
IApAQCAtMTc5LDcgKzE3OSw3IEBAIFN0cmluZyBDb21tYW5kTGluZUFQSUhvc3Q6OnN0b3JhZ2VJ
ZChTdG9yYWdlJiBzdG9yYWdlKQogICAgIHJldHVybiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnN0b3JhZ2VJZChzdG9yYWdlKTsKIH0KIAotSlNWYWx1ZSBDb21tYW5kTGluZUFQSUhvc3Q6Ondy
YXBwZXIoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
SlNWYWx1ZSBDb21tYW5kTGluZUFQSUhvc3Q6OndyYXBwZXIoSlNHbG9iYWxPYmplY3QqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fd3JhcHBlcnMuZ2V0V3JhcHBlcihnbG9iYWxPYmplY3QpOwogICAgIGlmICh2YWx1ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuaAppbmRleCAxNWYy
Mzg1MWU2YWQwODg3ZTBmZmU5ZjE2ZjE1NTA4MjdlOGZiZDljLi4zNTczMmIxOTg5MzdmNTA3NTI3
ZjZhZjY4YTlkMzQ3OGE5MDI2NDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29tbWFuZExpbmVBUElIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
bW1hbmRMaW5lQVBJSG9zdC5oCkBAIC02NiwxMiArNjYsMTIgQEAgY2xhc3MgQ29tbWFuZExpbmVB
UElIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q29tbWFuZExpbmVBUElIb3N0PiB7CiAgICAgY2xh
c3MgSW5zcGVjdGFibGVPYmplY3QgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGdldChKU0M6OkV4ZWNT
dGF0ZSYpOworICAgICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBnZXQoSlNDOjpKU0dsb2JhbE9i
amVjdCYpOwogICAgICAgICB2aXJ0dWFsIH5JbnNwZWN0YWJsZU9iamVjdCgpID0gZGVmYXVsdDsK
ICAgICB9OwogICAgIHZvaWQgYWRkSW5zcGVjdGVkT2JqZWN0KHN0ZDo6dW5pcXVlX3B0cjxJbnNw
ZWN0YWJsZU9iamVjdD4pOwotICAgIEpTQzo6SlNWYWx1ZSBpbnNwZWN0ZWRPYmplY3QoSlNDOjpF
eGVjU3RhdGUmKTsKLSAgICB2b2lkIGluc3BlY3QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUgb2JqZWN0VG9JbnNwZWN0LCBKU0M6OkpTVmFsdWUgaGludHMpOworICAgIEpTQzo6SlNWYWx1
ZSBpbnNwZWN0ZWRPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCYpOworICAgIHZvaWQgaW5zcGVj
dChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlIG9iamVjdFRvSW5zcGVjdCwgSlND
OjpKU1ZhbHVlIGhpbnRzKTsKIAogICAgIHN0cnVjdCBMaXN0ZW5lckVudHJ5IHsKICAgICAgICAg
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gbGlzdGVuZXI7CkBAIC04MSwxMiArODEsMTIgQEAg
Y2xhc3MgQ29tbWFuZExpbmVBUElIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q29tbWFuZExpbmVB
UElIb3N0PiB7CiAgICAgfTsKIAogICAgIHVzaW5nIEV2ZW50TGlzdGVuZXJzUmVjb3JkID0gVmVj
dG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgVmVjdG9yPExpc3RlbmVyRW50cnk+Pj47Ci0g
ICAgRXZlbnRMaXN0ZW5lcnNSZWNvcmQgZ2V0RXZlbnRMaXN0ZW5lcnMoSlNDOjpFeGVjU3RhdGUm
LCBFdmVudFRhcmdldCYpOworICAgIEV2ZW50TGlzdGVuZXJzUmVjb3JkIGdldEV2ZW50TGlzdGVu
ZXJzKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBFdmVudFRhcmdldCYpOwogCiAgICAgU3RyaW5nIGRh
dGFiYXNlSWQoRGF0YWJhc2UmKTsKICAgICBTdHJpbmcgc3RvcmFnZUlkKFN0b3JhZ2UmKTsKIAot
ICAgIEpTQzo6SlNWYWx1ZSB3cmFwcGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqKTsKKyAgICBKU0M6OkpTVmFsdWUgd3JhcHBlcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKICAgICB2b2lkIGNsZWFyQWxsV3JhcHBlcnMoKTsKIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhv
c3QuaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5pZGwK
aW5kZXggODMzMTdiYjhkNzgzMzZiYmYyYjQ3MjQ2ZjRiZjYzMDFmNmQ0NDE1MC4uZTQzMTk2OTNh
ZTRkMzFmZGI5M2I5NTg4MzBiNjhjODkwMTcwZTNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5pZGwKQEAgLTM3LDEwICszNywxMCBAQAogICAg
IHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKICAgICB2b2lkIGNvcHlUZXh0KERPTVN0cmlu
ZyB0ZXh0KTsKIAotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGVdIHZvaWQgaW5zcGVjdChhbnkgb2Jq
ZWN0VG9JbnNwZWN0LCBhbnkgaGludHMpOwotICAgIFtDYWxsV2l0aD1FeGVjU3RhdGVdIGFueSBp
bnNwZWN0ZWRPYmplY3QoKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSB2b2lkIGluc3Bl
Y3QoYW55IG9iamVjdFRvSW5zcGVjdCwgYW55IGhpbnRzKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFs
T2JqZWN0XSBhbnkgaW5zcGVjdGVkT2JqZWN0KCk7CiAKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRl
XSByZWNvcmQ8RE9NU3RyaW5nLCBzZXF1ZW5jZTxMaXN0ZW5lckVudHJ5Pj4gZ2V0RXZlbnRMaXN0
ZW5lcnMoRXZlbnRUYXJnZXQgdGFyZ2V0KTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSBy
ZWNvcmQ8RE9NU3RyaW5nLCBzZXF1ZW5jZTxMaXN0ZW5lckVudHJ5Pj4gZ2V0RXZlbnRMaXN0ZW5l
cnMoRXZlbnRUYXJnZXQgdGFyZ2V0KTsKIAogICAgIERPTVN0cmluZyBkYXRhYmFzZUlkKERhdGFi
YXNlIGRhdGFiYXNlKTsKICAgICBET01TdHJpbmcgc3RvcmFnZUlkKFN0b3JhZ2Ugc3RvcmFnZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJTW9kdWxlLmNw
cAppbmRleCBjOGJjNjYzNmQyMWJjNjk3N2U4MTQ2NzAwMTdhMWQ2MWNhOGI3OWE4Li5kNzdjNzNk
OGFlNDk1MDE2NzUyODIyNjRkMGQzNmQ2NWNjZTc0MmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZS5jcHAKQEAgLTUzLDE0ICs1MywxNCBA
QCBTdHJpbmcgQ29tbWFuZExpbmVBUElNb2R1bGU6OnNvdXJjZSgpIGNvbnN0CiAgICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKENvbW1hbmRMaW5lQVBJTW9kdWxlU291
cmNlX2pzLCBzaXplb2YoQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2VfanMpKTsKIH0KIAotSlNW
YWx1ZSBDb21tYW5kTGluZUFQSU1vZHVsZTo6aG9zdChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGlu
amVjdGVkU2NyaXB0TWFuYWdlciwgRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBDb21t
YW5kTGluZUFQSU1vZHVsZTo6aG9zdChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlciwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiB7
CiAgICAgLy8gQ29tbWFuZExpbmVBUElNb2R1bGUgc2hvdWxkIG9ubHkgZXZlciBiZSB1c2VkIGJ5
IGEgV2ViSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLgogICAgIFdlYkluamVjdGVkU2NyaXB0TWFuYWdl
ciogcGFnZUluamVjdGVkU2NyaXB0TWFuYWdlciA9IHN0YXRpY19jYXN0PFdlYkluamVjdGVkU2Ny
aXB0TWFuYWdlcio+KGluamVjdGVkU2NyaXB0TWFuYWdlcik7CiAgICAgQVNTRVJUKHBhZ2VJbmpl
Y3RlZFNjcmlwdE1hbmFnZXItPmNvbW1hbmRMaW5lQVBJSG9zdCgpKTsKIAotICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIHJldHVybiBwYWdlSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLT5jb21tYW5kTGluZUFQSUhvc3QoKS0+d3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3Qp
OworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gcGFnZUluamVjdGVk
U2NyaXB0TWFuYWdlci0+Y29tbWFuZExpbmVBUElIb3N0KCktPndyYXBwZXIobGV4aWNhbEdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJTW9kdWxlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGUuaAppbmRleCBl
MjFmYzQ1NDc1OGRhN2VhNmRiZjRiN2ZlOTFiOTZiOGRiM2JhODJmLi4yNzcxNmZjYTY3YTliYThj
MmRlYmRlZGFjZjdmYzZiNDJkMmRmNzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29tbWFuZExpbmVBUElNb2R1bGUuaApAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBDb21tYW5k
TGluZUFQSU1vZHVsZSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TW9k
dWxlIHsKICAgICBDb21tYW5kTGluZUFQSU1vZHVsZSgpOwogCiAgICAgU3RyaW5nIHNvdXJjZSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIEpTQzo6SlNWYWx1ZSBob3N0KEluc3BlY3Rvcjo6SW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiwgSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICBK
U0M6OkpTVmFsdWUgaG9zdChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciosIEpTQzo6
SlNHbG9iYWxPYmplY3QqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0YXRpYyB2b2lkIGluamVj
dElmTmVlZGVkKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgY29uc3QgSW5zcGVj
dG9yOjpJbmplY3RlZFNjcmlwdCYpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5jcHAKaW5kZXggN2Y0ZTg3MDRkY2JjZjUyZTg1N2I2YmNjZWMzMjljNmVi
ZjUwMzI0Yi4uOWRmZTY0MDI4MDUyNzc4OTJlYzBiYmM3NjhiZGVjN2U5M2M1YTUwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKQEAgLTIwOSw3ICsy
MDksNyBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJbnNwZWN0b3JDYW52YXM6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogICAgICk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBJbnNwZWN0
b3JDYW52YXM6OnJlc29sdmVDb250ZXh0KEpTQzo6RXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlND
OjpKU1ZhbHVlIEluc3BlY3RvckNhbnZhczo6cmVzb2x2ZUNvbnRleHQoSlNDOjpKU0dsb2JhbE9i
amVjdCogZXhlYykgY29uc3QKIHsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKaW5kZXggZGFkOTUy
ZGE2ZjlhOGE4N2I1ZDIyOTE5MzljOTFmODI1M2NlOTZkNy4uODhlNmJjN2M5MTcwODkyMDI1NDlk
NWYwYzU2ZTc4YTJhM2FlODJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXMuaApAQCAtNzYsNyArNzYsNyBAQCBjbGFzcyBJbnNwZWN0b3JDYW52YXMgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JDYW52YXM+IHsKIAogICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAotICAgIEpTQzo6
SlNWYWx1ZSByZXNvbHZlQ29udGV4dChKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0OworICAgIEpTQzo6
SlNWYWx1ZSByZXNvbHZlQ29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAg
ICBIYXNoU2V0PEVsZW1lbnQqPiBjbGllbnROb2RlcygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMmM2N2I3MjQ0
ODMxZjYwNWYwOGRmNDEyNWYyMWNlZWM3MWM5MGNhOS4uNGMwNGZiYjEwYmZhZGEzODQ2MmQ4YjQy
MmM4ZDM1YjQxMjAzYmI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNDU3LDE1ICs0NTcsMTUgQEAgYm9vbCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9w
YWdlLnNldHRpbmdzKCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpOwogfQogCi1ib29sIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmNhbkFjY2Vzc0luc3BlY3RlZFNjcmlwdFN0YXRlKEpTQzo6RXhlY1N0
YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2FuQWNj
ZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCkgY29uc3QKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKLSAgICBKU0RPTVdp
bmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhzY3JpcHRTdGF0ZS0+dm0oKSwg
c2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNET01XaW5kb3cqIGlu
c3BlY3RlZFdpbmRvdyA9IHRvSlNET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwg
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKCFpbnNwZWN0ZWRXaW5kb3cpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9ET01XaW5kb3coc2NyaXB0U3RhdGUsIGluc3BlY3RlZFdpbmRvdy0+d3JhcHBlZCgp
LCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpOworICAgIHJldHVybiBCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgaW5zcGVj
dGVkV2luZG93LT53cmFwcGVkKCksIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcik7CiB9CiAKIElu
c3BlY3RvckZ1bmN0aW9uQ2FsbEhhbmRsZXIgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZnVuY3Rpb25D
YWxsSGFuZGxlcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaAppbmRleCA1MTg2ZDU3MDE3M2RkOTExZWU0NTFlYmJiZmIyMmIxM2FlZWY1
NzU5Li5lNjM4OGFjMDVjOWYxMTA4ZWNkNmM5Mjc0M2U3MDRhNTNiYjM1ZmQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTExMyw3ICsx
MTMsNyBAQCBjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rv
cjo6SW5zcGVjdG9yRW52aXJvbm1lbnQgewogCiAgICAgLy8gSW5zcGVjdG9yRW52aXJvbm1lbnQK
ICAgICBib29sIGRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGNhbkFjY2Vzc0luc3BlY3RlZFNjcmlwdFN0YXRlKEpTQzo6RXhlY1N0YXRlKikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBjYW5BY2Nlc3NJbnNwZWN0ZWRTY3JpcHRTdGF0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JG
dW5jdGlvbkNhbGxIYW5kbGVyIGZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSBjb25zdCBvdmVycmlkZTsK
ICAgICBJbnNwZWN0b3I6Okluc3BlY3RvckV2YWx1YXRlSGFuZGxlciBldmFsdWF0ZUhhbmRsZXIo
KSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGZyb250ZW5kSW5pdGlhbGl6ZWQoKSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5jcHAKaW5kZXggNWE5M2YzYjRhYTY3NTJjNWJkN2VkNzY2ZTNjOGNkYjBlNmU5YTMxZi4uOTJj
MzA3MWEzNDE4NTY1ODg4OWU5NDRmMjhkOTJlOGUzMDk2M2EwYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTE1MiwxNSAr
MTUyLDE1IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpkaXNjb25uZWN0Q2xpZW50KCkK
IAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29y
bGQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9ICpleGVjU3Rh
dGVGcm9tUGFnZSh3b3JsZCwgbV9mcm9udGVuZFBhZ2UpOwotICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gKmV4ZWNTdGF0ZUZyb21QYWdl
KHdvcmxkLCBtX2Zyb250ZW5kUGFnZSk7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0g
KkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKTsKLSAgICBnbG9iYWxPYmplY3QucHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiKSwgdG9KUzxJRExJbnRlcmZhY2U8
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgKnRoaXMpKTsKKyAg
ICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgZ2xvYmFsT2JqZWN0LnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0IiksIHRv
SlM8SURMSW50ZXJmYWNlPEluc3BlY3RvckZyb250ZW5kSG9zdD4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgKnRoaXMpKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCBzY29wZS5leGNlcHRpb24o
KSk7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUu
ZXhjZXB0aW9uKCkpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKCkK
QEAgLTQwOCw5ICs0MDgsOSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRl
eHRNZW51KEV2ZW50JiBldmVudCwgVmVjdG9yPENvbnRleHRNZW51SXRlbQogI2lmIEVOQUJMRShD
T05URVhUX01FTlVTKQogICAgIEFTU0VSVChtX2Zyb250ZW5kUGFnZSk7CiAKLSAgICBhdXRvJiBz
dGF0ZSA9ICpleGVjU3RhdGVGcm9tUGFnZShkZWJ1Z2dlcldvcmxkKCksIG1fZnJvbnRlbmRQYWdl
KTsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB2YWx1ZSA9IHN0YXRlLmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAiSW5zcGVjdG9yRnJvbnRlbmRBUEkiKSk7CisgICAgYXV0byYgbGV4aWNhbEdsb2Jh
bE9iamVjdCA9ICpleGVjU3RhdGVGcm9tUGFnZShkZWJ1Z2dlcldvcmxkKCksIG1fZnJvbnRlbmRQ
YWdlKTsKKyAgICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKKyAgICBhdXRv
IHZhbHVlID0gbGV4aWNhbEdsb2JhbE9iamVjdC5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIkluc3BlY3RvckZyb250ZW5kQVBJIikpOwog
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzT2JqZWN0KCkpOwogICAgIGF1
dG8qIGZyb250ZW5kQVBJT2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwpAQCAtNDE4LDcgKzQxOCw3
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUoRXZlbnQmIGV2
ZW50LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtCiAgICAgQ29udGV4dE1lbnUgbWVudTsKICAgICBw
b3B1bGF0ZUNvbnRleHRNZW51KFdURk1vdmUoaXRlbXMpLCBtZW51KTsKIAotICAgIGF1dG8gbWVu
dVByb3ZpZGVyID0gRnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSh0aGlzLCB7ICZzdGF0ZSwg
ZnJvbnRlbmRBUElPYmplY3QgfSwgbWVudS5pdGVtcygpKTsKKyAgICBhdXRvIG1lbnVQcm92aWRl
ciA9IEZyb250ZW5kTWVudVByb3ZpZGVyOjpjcmVhdGUodGhpcywgeyAmbGV4aWNhbEdsb2JhbE9i
amVjdCwgZnJvbnRlbmRBUElPYmplY3QgfSwgbWVudS5pdGVtcygpKTsKICAgICBtX21lbnVQcm92
aWRlciA9IG1lbnVQcm92aWRlci5wdHIoKTsKICAgICBtX2Zyb250ZW5kUGFnZS0+Y29udGV4dE1l
bnVDb250cm9sbGVyKCkuc2hvd0NvbnRleHRNZW51KGV2ZW50LCBtZW51UHJvdmlkZXIpOwogI2Vs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5jcHAKaW5kZXggNDMzZjJlNzQwODFlYzlmZmNhOTdmYWU3MTBhMmM2OGVlNDc1YzZj
YS4uM2U3NDFjZGFkNWQ5YTUwYjBiYjhjZWU0MjQwNWNhNmI2YzhhYTg0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAK
QEAgLTM1OSw3ICszNTksNyBAQCBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aXNFdmVu
dExpc3RlbmVyRGlzYWJsZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUG9zdE1lc3NhZ2VJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnN0IFRpbWVy
QmFzZSYgdGltZXIsIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRQb3N0TWVzc2FnZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1
bWVudGluZ0FnZW50cywgY29uc3QgVGltZXJCYXNlJiB0aW1lciwgSlNDOjpKU0dsb2JhbE9iamVj
dCYgc3RhdGUpCiB7CiAgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBpbnN0cnVtZW50
aW5nQWdlbnRzLndlYkRlYnVnZ2VyQWdlbnQoKSkKICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+
ZGlkUG9zdE1lc3NhZ2UodGltZXIsIHN0YXRlKTsKQEAgLTgzOSwxMyArODM5LDEzIEBAIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0CiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6Y29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50SW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiBsYWJlbCkKIHsKICAgICBpZiAoYXV0byogY29uc29sZUFnZW50ID0gaW5z
dHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50
LT5jb3VudChzdGF0ZSwgbGFiZWwpOwogfQogCi12b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6Y29uc29sZUNvdW50UmVzZXRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRp
bmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK3Zv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRSZXNldEltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgSlNDOjpKU0dsb2JhbE9iamVjdCog
c3RhdGUsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7CiAgICAgaWYgKGF1dG8qIGNvbnNvbGVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+Y291bnRSZXNldChzdGF0ZSwgbGFiZWwpOwpAQCAtODU3LDcgKzg1Nyw3IEBAIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp0YWtlSGVhcFNuYXBzaG90SW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0cnVtCiAgICAgICAgIGNvbnNvbGVBZ2VudC0+dGFrZUhlYXBTbmFw
c2hvdCh0aXRsZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydENv
bnNvbGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMs
IEZyYW1lJiBmcmFtZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwp
Cit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBGcmFtZSYgZnJhbWUsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7CiAgICAgaWYg
KCFpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckVudmlyb25tZW50KCkuZGV2ZWxvcGVyRXh0
cmFzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYgaW5zdHIKICAgICAgICAgY29uc29sZUFnZW50LT5zdGFydFRpbWluZyhleGVj
LCBsYWJlbCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydENvbnNv
bGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsKQordm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3Qg
U3RyaW5nJiBsYWJlbCkKIHsKICAgICBpZiAoIWluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9y
RW52aXJvbm1lbnQoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTg3Nyw3ICs4NzcsNyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRD
b25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cgogICAgICAgICBjb25z
b2xlQWdlbnQtPnN0YXJ0VGltaW5nKGV4ZWMsIGxhYmVsKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmxvZ0NvbnNvbGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
IGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcm
IGxhYmVsLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQordm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvZ0NvbnNvbGVUaW1pbmdJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4m
JiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKCFpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckVu
dmlyb25tZW50KCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC04ODYsNyArODg2LDcgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvZ0NvbnNv
bGVUaW1pbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW0KICAgICAgICAgY29uc29s
ZUFnZW50LT5sb2dUaW1pbmcoZXhlYywgbGFiZWwsIFdURk1vdmUoYXJndW1lbnRzKSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCkKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYg
aW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUmIGZyYW1lLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBl
eGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewogICAgIGlmICghaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtODk3LDcgKzg5Nyw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1CiAg
ICAgICAgIHRpbWVsaW5lQWdlbnQtPnRpbWVFbmQoZnJhbWUsIGxhYmVsKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU3RyaW5nJiBsYWJlbCkKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29u
c29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywg
SlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCkKIHsKICAgICBp
ZiAoIWluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yRW52aXJvbm1lbnQoKS5kZXZlbG9wZXJF
eHRyYXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTkxNSwxOSArOTE1LDE5IEBAIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlVGltZVN0YW1wSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiBpbnN0cnVtCiAgICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnN0YXJ0UHJvZmlsaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkK
K3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydFByb2ZpbGluZ0ltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgSlNDOjpKU0dsb2JhbE9iamVjdCog
ZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMuaW5zcGVjdG9yVGltZWxp
bmVBZ2VudCgpKQogICAgICAgICB0aW1lbGluZUFnZW50LT5zdGFydEZyb21Db25zb2xlKGV4ZWMs
IHRpdGxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxp
bmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnN0b3BQcm9maWxpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1l
bnRpbmdBZ2VudHMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmluZyYgdGl0
bGUpCiB7CiAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKICAgICAgICAgdGlt
ZWxpbmVBZ2VudC0+c3RvcEZyb21Db25zb2xlKGV4ZWMsIHRpdGxlKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhc0ltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYgY29udGV4dCwgSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNPYmplY3QqIG9wdGlv
bnMpCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZVN0YXJ0UmVjb3JkaW5n
Q2FudmFzSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0cnVtZW50aW5nQWdlbnRzLCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBleGVjLCBK
U0M6OkpTT2JqZWN0KiBvcHRpb25zKQogewogICAgIGlmIChJbnNwZWN0b3JDYW52YXNBZ2VudCog
Y2FudmFzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLmluc3BlY3RvckNhbnZhc0FnZW50KCkp
CiAgICAgICAgIGNhbnZhc0FnZW50LT5jb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoY29udGV4
dCwgZXhlYywgb3B0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggMTY5NGUxNTA5MWRjM2NjMGVmMjIwMjI2MTE0
OTM5NGI0ODkwY2VjZS4uNDY2ODc2ZDA1ZDVlYTk1NjRhZWQ2ODIyZjBlN2M3MmUyNjlmOTBmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaApAQCAtMTUxLDcgKzE1MSw3IEBAIGNsYXNzIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
biB7CiAgICAgc3RhdGljIHZvaWQgZGlkSW5zdGFsbFRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBpbnQgdGltZXJJZCwgU2Vjb25kcyB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QpOwogICAg
IHN0YXRpYyB2b2lkIGRpZFJlbW92ZVRpbWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBpbnQg
dGltZXJJZCk7CiAKLSAgICBzdGF0aWMgdm9pZCBkaWRQb3N0TWVzc2FnZShGcmFtZSYsIFRpbWVy
QmFzZSYsIEpTQzo6RXhlY1N0YXRlJik7CisgICAgc3RhdGljIHZvaWQgZGlkUG9zdE1lc3NhZ2Uo
RnJhbWUmLCBUaW1lckJhc2UmLCBKU0M6OkpTR2xvYmFsT2JqZWN0Jik7CiAgICAgc3RhdGljIHZv
aWQgZGlkRmFpbFBvc3RNZXNzYWdlKEZyYW1lJiwgVGltZXJCYXNlJik7CiAgICAgc3RhdGljIHZv
aWQgd2lsbERpc3BhdGNoUG9zdE1lc3NhZ2UoRnJhbWUmLCBUaW1lckJhc2UmKTsKICAgICBzdGF0
aWMgdm9pZCBkaWREaXNwYXRjaFBvc3RNZXNzYWdlKEZyYW1lJiwgVGltZXJCYXNlJik7CkBAIC0y
MzQsMjIgKzIzNCwyMiBAQCBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gewogICAgIHN0
YXRpYyB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoUGFnZSYsIHN0ZDo6dW5pcXVlX3B0cjxJbnNw
ZWN0b3I6OkNvbnNvbGVNZXNzYWdlPik7CiAgICAgc3RhdGljIHZvaWQgYWRkTWVzc2FnZVRvQ29u
c29sZShXb3JrZXJHbG9iYWxTY29wZSYsIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNvbnNv
bGVNZXNzYWdlPik7CiAKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnQoUGFnZSYsIEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7Ci0gICAgc3RhdGljIHZvaWQgY29uc29s
ZUNvdW50KFdvcmtlckdsb2JhbFNjb3BlJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcm
IGxhYmVsKTsKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xlQ291bnRSZXNldChQYWdlJiwgSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKLSAgICBzdGF0aWMgdm9pZCBjb25zb2xl
Q291bnRSZXNldChXb3JrZXJHbG9iYWxTY29wZSYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJiBsYWJlbCk7CisgICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50KFBhZ2UmLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgc3RhdGljIHZvaWQgY29u
c29sZUNvdW50KFdvcmtlckdsb2JhbFNjb3BlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0
IFN0cmluZyYgbGFiZWwpOworICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudFJlc2V0KFBhZ2Um
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgc3RhdGlj
IHZvaWQgY29uc29sZUNvdW50UmVzZXQoV29ya2VyR2xvYmFsU2NvcGUmLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAKICAgICBzdGF0aWMgdm9pZCB0YWtlSGVh
cFNuYXBzaG90KEZyYW1lJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGljIHZvaWQg
c3RhcnRDb25zb2xlVGltaW5nKEZyYW1lJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcm
IGxhYmVsKTsKLSAgICBzdGF0aWMgdm9pZCBzdGFydENvbnNvbGVUaW1pbmcoV29ya2VyR2xvYmFs
U2NvcGUmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgbGFiZWwpOwotICAgIHN0YXRp
YyB2b2lkIGxvZ0NvbnNvbGVUaW1pbmcoRnJhbWUmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYgbGFiZWwsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7Ci0gICAgc3Rh
dGljIHZvaWQgbG9nQ29uc29sZVRpbWluZyhXb3JrZXJHbG9iYWxTY29wZSYsIEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRz
PiYmKTsKLSAgICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYsIEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7Ci0gICAgc3RhdGljIHZvaWQgc3RvcENvbnNv
bGVUaW1pbmcoV29ya2VyR2xvYmFsU2NvcGUmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgbGFiZWwpOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0Q29uc29sZVRpbWluZyhGcmFtZSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKKyAgICBzdGF0aWMgdm9p
ZCBzdGFydENvbnNvbGVUaW1pbmcoV29ya2VyR2xvYmFsU2NvcGUmLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgc3RhdGljIHZvaWQgbG9nQ29uc29sZVRp
bWluZyhGcmFtZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBS
ZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpOworICAgIHN0YXRpYyB2b2lkIGxvZ0Nv
bnNvbGVUaW1pbmcoV29ya2VyR2xvYmFsU2NvcGUmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgU3RyaW5nJiBsYWJlbCwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAg
ICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZyhGcmFtZSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKKyAgICBzdGF0aWMgdm9pZCBzdG9wQ29uc29sZVRp
bWluZyhXb3JrZXJHbG9iYWxTY29wZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJp
bmcmIGxhYmVsKTsKICAgICBzdGF0aWMgdm9pZCBjb25zb2xlVGltZVN0YW1wKEZyYW1lJiwgUmVm
PEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKLSAgICBzdGF0aWMgdm9pZCBzdGFydFBy
b2ZpbGluZyhQYWdlJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAg
ICBzdGF0aWMgdm9pZCBzdG9wUHJvZmlsaW5nKFBhZ2UmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFN0cmluZyYgdGl0bGUpOwotICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVTdGFydFJlY29yZGluZ0Nh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2Jq
ZWN0KiBvcHRpb25zKTsKKyAgICBzdGF0aWMgdm9pZCBzdGFydFByb2ZpbGluZyhQYWdlJiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0YXRpYyB2b2lk
IHN0b3BQcm9maWxpbmcoUGFnZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcm
IHRpdGxlKTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0
KiBvcHRpb25zKTsKIAogICAgIHN0YXRpYyB2b2lkIGRpZFJlcXVlc3RBbmltYXRpb25GcmFtZShE
b2N1bWVudCYsIGludCBjYWxsYmFja0lkKTsKICAgICBzdGF0aWMgdm9pZCBkaWRDYW5jZWxBbmlt
YXRpb25GcmFtZShEb2N1bWVudCYsIGludCBjYWxsYmFja0lkKTsKQEAgLTM2MSw3ICszNjEsNyBA
QCBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gewogICAgIHN0YXRpYyB2b2lkIGRpZElu
c3RhbGxUaW1lckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGludCB0aW1lcklkLCBTZWNvbmRz
IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwogICAg
IHN0YXRpYyB2b2lkIGRpZFJlbW92ZVRpbWVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgaW50
IHRpbWVySWQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKIAotICAgIHN0YXRpYyB2b2lkIGRp
ZFBvc3RNZXNzYWdlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgY29uc3QgVGltZXJCYXNlJiwg
SlNDOjpFeGVjU3RhdGUmKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRQb3N0TWVzc2FnZUltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYsIGNvbnN0IFRpbWVyQmFzZSYsIEpTQzo6SlNHbG9iYWxPYmplY3Qm
KTsKICAgICBzdGF0aWMgdm9pZCBkaWRGYWlsUG9zdE1lc3NhZ2VJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmLCBjb25zdCBUaW1lckJhc2UmKTsKICAgICBzdGF0aWMgdm9pZCB3aWxsRGlzcGF0Y2hQ
b3N0TWVzc2FnZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGNvbnN0IFRpbWVyQmFzZSYpOwog
ICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoUG9zdE1lc3NhZ2VJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmLCBjb25zdCBUaW1lckJhc2UmKTsKQEAgLTQyOSwxOCArNDI5LDE4IEBAIGNsYXNzIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbiB7CiAKICAgICBzdGF0aWMgdm9pZCBhZGRNZXNzYWdlVG9D
b25zb2xlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
cjo6Q29uc29sZU1lc3NhZ2U+KTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbnNvbGVDb3VudEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJl
bCk7Ci0gICAgc3RhdGljIHZvaWQgY29uc29sZUNvdW50UmVzZXRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgIHN0YXRp
YyB2b2lkIGNvbnNvbGVDb3VudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKKyAgICBzdGF0aWMgdm9pZCBjb25zb2xl
Q291bnRSZXNldEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKICAgICBzdGF0aWMgdm9pZCB0YWtlSGVhcFNuYXBzaG90
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3Rh
dGljIHZvaWQgc3RhcnRDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJh
bWUmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgbGFiZWwpOwotICAgIHN0YXRpYyB2
b2lkIHN0YXJ0Q29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7Ci0gICAgc3RhdGljIHZvaWQgbG9nQ29uc29s
ZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
U3RyaW5nJiBsYWJlbCwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKLSAgICBz
dGF0aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZy
YW1lJiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKLSAgICBzdGF0aWMg
dm9pZCBzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgc3RhdGljIHZvaWQgc3RhcnRDb25z
b2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgc3RhdGljIHZvaWQgc3RhcnRDb25z
b2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgIHN0YXRpYyB2b2lkIGxvZ0NvbnNvbGVUaW1pbmdJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBsYWJlbCwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKTsKKyAgICBzdGF0
aWMgdm9pZCBzdG9wQ29uc29sZVRpbWluZ0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1l
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgIHN0YXRp
YyB2b2lkIHN0b3BDb25zb2xlVGltaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpOwogICAgIHN0YXRpYyB2b2lkIGNv
bnNvbGVUaW1lU3RhbXBJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBGcmFtZSYsIFJlZjxJbnNw
ZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJik7Ci0gICAgc3RhdGljIHZvaWQgc3RhcnRQcm9maWxp
bmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpOwotICAgIHN0YXRpYyB2b2lkIHN0b3BQcm9maWxpbmdJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMmLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOwotICAgIHN0
YXRpYyB2b2lkIGNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhc0ltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyYsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNP
YmplY3QqIG9wdGlvbnMpOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0UHJvZmlsaW5nSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0
bGUpOworICAgIHN0YXRpYyB2b2lkIHN0b3BQcm9maWxpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2Vu
dHMmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgc3Rh
dGljIHZvaWQgY29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzJiwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6
OkpTT2JqZWN0KiBvcHRpb25zKTsKIAogICAgIHN0YXRpYyB2b2lkIGRpZFJlcXVlc3RBbmltYXRp
b25GcmFtZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGludCBjYWxsYmFja0lkLCBEb2N1bWVu
dCYpOwogICAgIHN0YXRpYyB2b2lkIGRpZENhbmNlbEFuaW1hdGlvbkZyYW1lSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzJiwgaW50IGNhbGxiYWNrSWQsIERvY3VtZW50Jik7CkBAIC03ODcsNyArNzg3
LDcgQEAgaW5saW5lIGJvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc0V2ZW50TGlzdGVu
ZXJEaXNhYmxlZChFdmVudFRhcmdldCYgdGFyZ2UKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUG9zdE1lc3NhZ2UoRnJhbWUm
IGZyYW1lLCBUaW1lckJhc2UmIHRpbWVyLCBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCitpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFBvc3RNZXNzYWdlKEZyYW1lJiBmcmFt
ZSwgVGltZXJCYXNlJiB0aW1lciwgSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUpCiB7CiAgICAg
RkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgaWYgKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJh
bWUoZnJhbWUpKQpAQCAtMTQ2OCwyMiArMTQ2OCwyMiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmFkZE1lc3NhZ2VUb0NvbnNvbGUoV29ya2VyR2xvYmFsU2NvcGUmIHdv
cgogICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGVJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JXb3Jr
ZXJHbG9iYWxTY29wZSh3b3JrZXJHbG9iYWxTY29wZSksIFdURk1vdmUobWVzc2FnZSkpOwogfQog
Ci1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChQYWdl
JiBwYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgbGFiZWwpCitpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudChQYWdlJiBwYWdl
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBsYWJlbCkKIHsKICAg
ICBjb25zb2xlQ291bnRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpLCBzdGF0
ZSwgbGFiZWwpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNv
bnNvbGVDb3VudChXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK2lubGluZSB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50KFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJH
bG9iYWxTY29wZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUsIGNvbnN0IFN0cmluZyYgbGFi
ZWwpCiB7CiAgICAgY29uc29sZUNvdW50SW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yV29ya2Vy
R2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUpLCBzdGF0ZSwgbGFiZWwpOwogfQogCi1pbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudFJlc2V0KFBhZ2Um
IHBhZ2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK2lubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29uc29sZUNvdW50UmVzZXQoUGFnZSYg
cGFnZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7
CiAgICAgY29uc29sZUNvdW50UmVzZXRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBh
Z2UpLCBzdGF0ZSwgbGFiZWwpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmNvbnNvbGVDb3VudFJlc2V0KFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxT
Y29wZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIGxhYmVsKQoraW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlQ291bnRSZXNldChXb3JrZXJH
bG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIHN0YXRl
LCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewogICAgIGNvbnNvbGVDb3VudFJlc2V0SW1wbChpbnN0
cnVtZW50aW5nQWdlbnRzRm9yV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUpLCBz
dGF0ZSwgbGFiZWwpOwogfQpAQCAtMTQ5NSwzNSArMTQ5NSwzNSBAQCBpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnRha2VIZWFwU25hcHNob3QoRnJhbWUmIGZyYW1lLCBjb25z
dCBTdHJpbgogICAgICAgICB0YWtlSGVhcFNuYXBzaG90SW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50
cywgdGl0bGUpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0
YXJ0Q29uc29sZVRpbWluZyhGcmFtZSYgZnJhbWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIGxhYmVsKQoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
dGFydENvbnNvbGVUaW1pbmcoRnJhbWUmIGZyYW1lLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVj
LCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewogICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKICAgICAgICAgc3RhcnRD
b25zb2xlVGltaW5nSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUsIGV4ZWMsIGxhYmVs
KTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydENvbnNv
bGVUaW1pbmcoV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlLCBKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCkKK2lubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nKFdvcmtlckdsb2JhbFNjb3BlJiB3b3Jr
ZXJHbG9iYWxTY29wZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgU3RyaW5nJiBs
YWJlbCkKIHsKICAgICBzdGFydENvbnNvbGVUaW1pbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNG
b3JXb3JrZXJHbG9iYWxTY29wZSh3b3JrZXJHbG9iYWxTY29wZSksIGV4ZWMsIGxhYmVsKTsKIH0K
IAotaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2dDb25zb2xlVGltaW5n
KEZyYW1lJiBmcmFtZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWws
IFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCitpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvZ0NvbnNvbGVUaW1pbmcoRnJhbWUmIGZyYW1l
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8SW5z
cGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQogewogICAgIGlmIChhdXRvKiBp
bnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkK
ICAgICAgICAgbG9nQ29uc29sZVRpbWluZ0ltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGV4ZWMs
IGxhYmVsLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmxvZ0NvbnNvbGVUaW1pbmcoV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtl
ckdsb2JhbFNjb3BlLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCwg
UmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKK2lubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9nQ29uc29sZVRpbWluZyhXb3JrZXJHbG9iYWxT
Y29wZSYgd29ya2VyR2xvYmFsU2NvcGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgbGFiZWwsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVu
dHMpCiB7CiAgICAgbG9nQ29uc29sZVRpbWluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0Zvcldv
cmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSwgZXhlYywgbGFiZWwsIFdURk1vdmUo
YXJndW1lbnRzKSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c3RvcENvbnNvbGVUaW1pbmcoRnJhbWUmIGZyYW1lLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU3RyaW5nJiBsYWJlbCkKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c3RvcENvbnNvbGVUaW1pbmcoRnJhbWUmIGZyYW1lLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVj
LCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewogICAgIGlmIChhdXRvKiBpbnN0cnVtZW50aW5nQWdl
bnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKICAgICAgICAgc3RvcENv
bnNvbGVUaW1pbmdJbXBsKCppbnN0cnVtZW50aW5nQWdlbnRzLCBmcmFtZSwgZXhlYywgbGFiZWwp
OwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xl
VGltaW5nKFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSwgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nKFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJH
bG9iYWxTY29wZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJl
bCkKIHsKICAgICBzdG9wQ29uc29sZVRpbWluZ0ltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0Zvcldv
cmtlckdsb2JhbFNjb3BlKHdvcmtlckdsb2JhbFNjb3BlKSwgZXhlYywgbGFiZWwpOwogfQpAQCAt
MTUzNSwxOSArMTUzNSwxOSBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmNvbnNvbGVUaW1lU3RhbXAoRnJhbWUmIGZyYW1lLCBSZWY8SW5zcGVjdAogICAgICAgICBjb25z
b2xlVGltZVN0YW1wSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUsIFdURk1vdmUoYXJn
dW1lbnRzKSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3Rh
cnRQcm9maWxpbmcoUGFnZSYgcGFnZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyAmdGl0bGUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0UHJv
ZmlsaW5nKFBhZ2UmIHBhZ2UsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyAmdGl0bGUpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAg
ICAgc3RhcnRQcm9maWxpbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpLCBl
eGVjLCB0aXRsZSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c3RvcFByb2ZpbGluZyhQYWdlJiBwYWdlLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3Ry
aW5nICZ0aXRsZSkKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcFBy
b2ZpbGluZyhQYWdlJiBwYWdlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBTdHJp
bmcgJnRpdGxlKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwog
ICAgIHN0b3BQcm9maWxpbmdJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpLCBl
eGVjLCB0aXRsZSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRl
eHQsIEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTT2JqZWN0KiBvcHRpb25zKQoraW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgSlNDOjpKU0dsb2JhbE9iamVjdCYg
ZXhlYywgSlNDOjpKU09iamVjdCogb3B0aW9ucykKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19G
Uk9OVEVORFModm9pZCgpKTsKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JDb250ZXh0KGNvbnRleHQuY2FudmFz
QmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IDZiN2IwY2ExY2M3MDBh
Y2RlNGVkNTNmZTBjYWZkOTgwOTg1MmIyYzcuLjliODNhOTU0NmI4NWExY2UzN2NlZjllMzEyN2Ez
YWFhN2IzNDc3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0xMjMsMTIgKzEyMywxMiBAQCB2b2lkIFBhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cnVuRXZlbnRMb29wV2hpbGVQYXVzZWRJbnRlcm5hbCgpCiAgICAgbV9wYWdl
LmRlY3JlbWVudE5lc3RlZFJ1bkxvb3BDb3VudCgpOwogfQogCi1ib29sIFBhZ2VTY3JpcHREZWJ1
Z1NlcnZlcjo6aXNDb250ZW50U2NyaXB0KEV4ZWNTdGF0ZSogc3RhdGUpIGNvbnN0Citib29sIFBh
Z2VTY3JpcHREZWJ1Z1NlcnZlcjo6aXNDb250ZW50U2NyaXB0KEpTR2xvYmFsT2JqZWN0KiBzdGF0
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gJmN1cnJlbnRXb3JsZCgqc3RhdGUpICE9ICZtYWluVGhy
ZWFkTm9ybWFsV29ybGQoKTsKIH0KIAotdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlcG9y
dEV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uKSBj
b25zdAordm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlcG9ydEV4Y2VwdGlvbihKU0dsb2Jh
bE9iamVjdCogc3RhdGUsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pIGNvbnN0CiB7CiAgICAg
V2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKHN0YXRlLCBleGNlcHRpb24pOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oCmluZGV4IGY4OTUz
MDE3YjM5YjljNzJjMDdiYTYyMmU2MWU4YWY0ZmVlMmUyNDAuLjI3NzdmYzU1NTRmNDdiMGMzNDVl
NGFiNzJiMDYxMGExNzI0MDNkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZVNjcmlwdERlYnVnU2VydmVyLmgKQEAgLTUwLDggKzUwLDggQEAgY2xhc3MgUGFnZVNjcmlw
dERlYnVnU2VydmVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6U2NyaXB0RGVidWdTZXJ2ZXIg
ewogICAgIHZvaWQgZGlkUGF1c2UoSlNDOjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlOwogICAg
IHZvaWQgZGlkQ29udGludWUoSlNDOjpKU0dsb2JhbE9iamVjdCopIG92ZXJyaWRlOwogICAgIHZv
aWQgcnVuRXZlbnRMb29wV2hpbGVQYXVzZWQoKSBvdmVycmlkZTsKLSAgICBib29sIGlzQ29udGVu
dFNjcmlwdChKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcmVwb3J0
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkpTR2xvYmFsT2JqZWN0KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6RXhjZXB0aW9uKikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHJ1bkV2ZW50TG9v
cFdoaWxlUGF1c2VkSW50ZXJuYWwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1dlYkluamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvV2ViSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAppbmRleCAyOWU0MjdlYTE5MDM3N2I1OGMzMmVm
YmQyOTI1OTNmN2JiMmZhOWNlLi5mYWRmM2JmODg3YjZkZjg5Y2Q0ODUwZjVlNzdkYThjYzE5Mjg0
ZGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV2ViSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcApAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKLUpTVmFsdWUgV2ViSW5qZWN0ZWRTY3JpcHRIb3N0OjpzdWJ0eXBl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK0pTVmFsdWUgV2ViSW5qZWN0ZWRTY3Jp
cHRIb3N0OjpzdWJ0eXBlKEpTR2xvYmFsT2JqZWN0KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgaWYgKHZhbHVlLmluaGVyaXRzPEpTTm9kZT4o
dm0pKQpAQCAtNjAsNyArNjAsNyBAQCBKU1ZhbHVlIFdlYkluamVjdGVkU2NyaXB0SG9zdDo6c3Vi
dHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB9CiAKICNpZiBFTkFCTEUoUEFZ
TUVOVF9SRVFVRVNUKQotc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTVmFsdWUgdmFs
dWUpCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIG9i
amVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpLCBq
c1N0cmluZyh2bSwgbmFtZSkpOwpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgSlNPYmplY3QqIGNv
bnN0cnVjdEludGVybmFsUHJvcGVydHkoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0
cmluZwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBKU09iamVjdCogb2JqZWN0Rm9y
UGF5bWVudE9wdGlvbnMoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFBheW1lbnRPcHRp
b25zJiBwYXltZW50T3B0aW9ucykKK3N0YXRpYyBKU09iamVjdCogb2JqZWN0Rm9yUGF5bWVudE9w
dGlvbnMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgUGF5bWVudE9wdGlvbnMm
IHBheW1lbnRPcHRpb25zKQogewogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGV4ZWMpOwogICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCAicmVxdWVzdFBheWVyTmFtZSIpLCBqc0Jvb2xlYW4ocGF5bWVudE9wdGlvbnMucmVx
dWVzdFBheWVyTmFtZSkpOwpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgSlNPYmplY3QqIG9iamVj
dEZvclBheW1lbnRPcHRpb25zKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQYXltZW50
TwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBKU09iamVjdCogb2JqZWN0Rm9yUGF5
bWVudEN1cnJlbmN5QW1vdW50KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQYXltZW50
Q3VycmVuY3lBbW91bnQmIHBheW1lbnRDdXJyZW5jeUFtb3VudCkKK3N0YXRpYyBKU09iamVjdCog
b2JqZWN0Rm9yUGF5bWVudEN1cnJlbmN5QW1vdW50KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGV4
ZWMsIGNvbnN0IFBheW1lbnRDdXJyZW5jeUFtb3VudCYgcGF5bWVudEN1cnJlbmN5QW1vdW50KQog
ewogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIG9i
amVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VycmVuY3ki
KSwganNTdHJpbmcodm0sIHBheW1lbnRDdXJyZW5jeUFtb3VudC5jdXJyZW5jeSkpOwpAQCAtODcs
NyArODcsNyBAQCBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEZvclBheW1lbnRDdXJyZW5jeUFtb3Vu
dChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUAogICAgIHJldHVybiBvYmplY3Q7CiB9
CiAKLXN0YXRpYyBKU09iamVjdCogb2JqZWN0Rm9yUGF5bWVudEl0ZW0oVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFBheW1lbnRJdGVtJiBwYXltZW50SXRlbSkKK3N0YXRpYyBKU09iamVj
dCogb2JqZWN0Rm9yUGF5bWVudEl0ZW0oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZXhlYywgY29u
c3QgUGF5bWVudEl0ZW0mIHBheW1lbnRJdGVtKQogewogICAgIGF1dG8qIG9iamVjdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCAibGFiZWwiKSwganNTdHJpbmcodm0sIHBheW1lbnRJdGVtLmxh
YmVsKSk7CkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyBKU09iamVjdCogb2JqZWN0Rm9yUGF5bWVu
dEl0ZW0oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFBheW1lbnRJdGVtCiAgICAgcmV0
dXJuIG9iamVjdDsKIH0KIAotc3RhdGljIEpTT2JqZWN0KiBvYmplY3RGb3JQYXltZW50U2hpcHBp
bmdPcHRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFBheW1lbnRTaGlwcGluZ09w
dGlvbiYgcGF5bWVudFNoaXBwaW5nT3B0aW9uKQorc3RhdGljIEpTT2JqZWN0KiBvYmplY3RGb3JQ
YXltZW50U2hpcHBpbmdPcHRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3Qg
UGF5bWVudFNoaXBwaW5nT3B0aW9uJiBwYXltZW50U2hpcHBpbmdPcHRpb24pCiB7CiAgICAgYXV0
byogb2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAgICAgb2JqZWN0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJpZCIpLCBqc1N0cmluZyh2bSwg
cGF5bWVudFNoaXBwaW5nT3B0aW9uLmlkKSk7CkBAIC0xMDYsNyArMTA2LDcgQEAgc3RhdGljIEpT
T2JqZWN0KiBvYmplY3RGb3JQYXltZW50U2hpcHBpbmdPcHRpb24oVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFAKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1zdGF0aWMgSlNPYmplY3Qq
IG9iamVjdEZvclBheW1lbnREZXRhaWxzTW9kaWZpZXIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFBheW1lbnREZXRhaWxzTW9kaWZpZXImIG1vZGlmaWVyKQorc3RhdGljIEpTT2JqZWN0
KiBvYmplY3RGb3JQYXltZW50RGV0YWlsc01vZGlmaWVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGV4ZWMsIGNvbnN0IFBheW1lbnREZXRhaWxzTW9kaWZpZXImIG1vZGlmaWVyKQogewogICAgIGF1
dG8qIGFkZGl0aW9uYWxEaXNwbGF5SXRlbXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtb2RpZmllci5hZGRpdGlvbmFs
RGlzcGxheUl0ZW1zLnNpemUoKTsgKytpKQpAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyBKU09i
amVjdCogb2JqZWN0Rm9yUGF5bWVudERldGFpbHNNb2RpZmllcihWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1zdGF0aWMgSlNPYmplY3QqIG9i
amVjdEZvclBheW1lbnREZXRhaWxzKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQYXlt
ZW50RGV0YWlsc0luaXQmIHBheW1lbnREZXRhaWxzKQorc3RhdGljIEpTT2JqZWN0KiBvYmplY3RG
b3JQYXltZW50RGV0YWlscyhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBQYXlt
ZW50RGV0YWlsc0luaXQmIHBheW1lbnREZXRhaWxzKQogewogICAgIGF1dG8qIGRpc3BsYXlJdGVt
cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBheW1lbnREZXRhaWxzLmRpc3BsYXlJdGVtcy5zaXplKCk7ICsraSkKQEAg
LTE1OSw3ICsxNTksNyBAQCBzdGF0aWMgSlNTdHJpbmcqIGpzU3RyaW5nRm9yUGF5bWVudFJlcXVl
c3RTdGF0ZShWTSYgdm0sIFBheW1lbnRSZXF1ZXN0OjpTdGF0ZSBzdAogfQogI2VuZGlmCiAKLUpT
VmFsdWUgV2ViSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoVk0mIHZt
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK0pTVmFsdWUgV2ViSW5qZWN0
ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShQQVlNRU5UX1JFUVVF
U1QpCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkluamVjdGVkU2NyaXB0SG9zdC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkluamVjdGVkU2NyaXB0SG9zdC5oCmluZGV4IGQ5NDQx
MDE3YWZkODYyZjQ1Y2Q2ZmJlZGU3NGIyODBjMDZkYzE3MDQuLjBiMmFmNzg1ZTUxNGNjZTY4NmQ3
NTY4OWVkYjc2OGRkN2I2MjZiZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9XZWJJbmplY3RlZFNjcmlwdEhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
V2ViSW5qZWN0ZWRTY3JpcHRIb3N0LmgKQEAgLTMzLDggKzMzLDggQEAgY2xhc3MgV2ViSW5qZWN0
ZWRTY3JpcHRIb3N0IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRIb3N0
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkluamVjdGVkU2NyaXB0SG9zdD4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbmplY3RlZFNjcmlwdEhvc3QpOyB9CiAKLSAg
ICBKU0M6OkpTVmFsdWUgc3VidHlwZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSkgb3Zl
cnJpZGU7Ci0gICAgSlNDOjpKU1ZhbHVlIGdldEludGVybmFsUHJvcGVydGllcyhKU0M6OlZNJiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpIG92ZXJyaWRlOworICAgIEpTQzo6SlNWYWx1
ZSBzdWJ0eXBlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpIG92ZXJyaWRlOwor
ICAgIEpTQzo6SlNWYWx1ZSBnZXRJbnRlcm5hbFByb3BlcnRpZXMoSlNDOjpWTSYsIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpIG92ZXJyaWRlOwogICAgIGJvb2wgaXNIVE1MQWxs
Q29sbGVjdGlvbihKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKSBvdmVycmlkZTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9XZWJJbmplY3RlZFNjcmlwdE1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dlYkluamVjdGVkU2NyaXB0TWFuYWdlci5j
cHAKaW5kZXggYmY5MGY1ZThkMDU3ZGIyNjhlMzk4Y2Q0NjcyMjI5ZDU0MzlmYjQ0Zi4uZGFhNjJm
MjA1ZTgwOWE2ODMyOGRlNzIyZDMyNDE1ZjMzYzIwNDBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1dlYkluamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1dlYkluamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKQEAgLTc2LDEw
ICs3NiwxMCBAQCB2b2lkIFdlYkluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVk
U2NyaXB0c0ZvcihET01XaW5kb3cqIHdpbmRvdykKIAogICAgIFZlY3Rvcjxsb25nPiBpZHNUb1Jl
bW92ZTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogbV9pZFRvSW5qZWN0ZWRTY3JpcHQpIHsK
LSAgICAgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gaXQudmFsdWUuc2NyaXB0U3Rh
dGUoKTsKLSAgICAgICAgaWYgKHdpbmRvdyAhPSBkb21XaW5kb3dGcm9tRXhlY1N0YXRlKHNjcmlw
dFN0YXRlKSkKKyAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGl0LnZhbHVlLmdsb2JhbE9iamVjdCgpOworICAgICAgICBpZiAod2luZG93ICE9IGRvbVdp
bmRvd0Zyb21FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgbV9zY3JpcHRTdGF0ZVRvSWQucmVtb3ZlKHNjcmlwdFN0YXRlKTsKKyAg
ICAgICAgbV9zY3JpcHRTdGF0ZVRvSWQucmVtb3ZlKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
ICAgICBpZHNUb1JlbW92ZS5hcHBlbmQoaXQua2V5KTsKICAgICB9CiAKQEAgLTg3LDE1ICs4Nywx
NSBAQCB2b2lkIFdlYkluamVjdGVkU2NyaXB0TWFuYWdlcjo6ZGlzY2FyZEluamVjdGVkU2NyaXB0
c0ZvcihET01XaW5kb3cqIHdpbmRvdykKICAgICAgICAgbV9pZFRvSW5qZWN0ZWRTY3JpcHQucmVt
b3ZlKGlkKTsKIAogICAgIC8vIE5vdyByZW1vdmUgc2NyaXB0IHN0YXRlcyB0aGF0IGhhdmUgaWQg
YnV0IG5vIGluamVjdGVkIHNjcmlwdC4KLSAgICBWZWN0b3I8SlNDOjpFeGVjU3RhdGUqPiBzY3Jp
cHRTdGF0ZXNUb1JlbW92ZTsKKyAgICBWZWN0b3I8SlNDOjpKU0dsb2JhbE9iamVjdCo+IHNjcmlw
dFN0YXRlc1RvUmVtb3ZlOwogICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX3NjcmlwdFN0YXRl
VG9JZCkgewotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBpdC5rZXk7Ci0g
ICAgICAgIGlmICh3aW5kb3cgPT0gZG9tV2luZG93RnJvbUV4ZWNTdGF0ZShzY3JpcHRTdGF0ZSkp
Ci0gICAgICAgICAgICBzY3JpcHRTdGF0ZXNUb1JlbW92ZS5hcHBlbmQoc2NyaXB0U3RhdGUpOwor
ICAgICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gaXQua2V5
OworICAgICAgICBpZiAod2luZG93ID09IGRvbVdpbmRvd0Zyb21FeGVjU3RhdGUobGV4aWNhbEds
b2JhbE9iamVjdCkpCisgICAgICAgICAgICBzY3JpcHRTdGF0ZXNUb1JlbW92ZS5hcHBlbmQobGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBzY3JpcHRTdGF0ZSA6
IHNjcmlwdFN0YXRlc1RvUmVtb3ZlKQotICAgICAgICBtX3NjcmlwdFN0YXRlVG9JZC5yZW1vdmUo
c2NyaXB0U3RhdGUpOworICAgIGZvciAoYXV0byYgbGV4aWNhbEdsb2JhbE9iamVjdCA6IHNjcmlw
dFN0YXRlc1RvUmVtb3ZlKQorICAgICAgICBtX3NjcmlwdFN0YXRlVG9JZC5yZW1vdmUobGV4aWNh
bEdsb2JhbE9iamVjdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4
IDQwOGZjMjI4MjBkMzE3MmY1YTlhNDhhZTBhZWIxYjgyMmU5Y2E1YTguLmNjN2Q2NmU1OWE4MzQw
Njk3OWY5NDUxODliMTM4NzBhNGM2MTA4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNjAsNyArNjAsNyBAQCBj
bGFzcyBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yRW52aXJvbm1lbnQgewogCiAgICAgLy8gSW5zcGVjdG9yRW52aXJvbm1lbnQKICAg
ICBib29sIGRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgYm9vbCBjYW5BY2Nlc3NJbnNwZWN0ZWRTY3JpcHRTdGF0ZShKU0M6OkV4ZWNT
dGF0ZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGNhbkFjY2Vz
c0luc3BlY3RlZFNjcmlwdFN0YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JGdW5jdGlvbkNhbGxI
YW5kbGVyIGZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSBjb25zdCBvdmVycmlkZTsKICAgICBJbnNwZWN0
b3I6Okluc3BlY3RvckV2YWx1YXRlSGFuZGxlciBldmFsdWF0ZUhhbmRsZXIoKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2b2lkIGZyb250ZW5kSW5pdGlhbGl6ZWQoKSBvdmVycmlkZSB7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CmluZGV4IDdmMzY4NzRlYmNhZjk4ZjE5OTEwMzk2YWMxNmEyMGU5MjM2YWI4ZjAuLjRhNjkxOTY5
N2NiYzJmZThkOTM5MTJjNTE3ZGVlZjVhMjQ4ODlkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtNzgsNyArNzgs
NyBAQCB2b2lkIFdvcmtlclNjcmlwdERlYnVnU2VydmVyOjpydW5FdmVudExvb3BXaGlsZVBhdXNl
ZCgpCiAgICAgfSB3aGlsZSAocmVzdWx0ICE9IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQgJiYgIW1f
ZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cyk7CiB9CiAKLXZvaWQgV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXI6OnJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNl
cHRpb24qIGV4Y2VwdGlvbikgY29uc3QKK3ZvaWQgV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
cG9ydEV4Y2VwdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBKU0M6OkV4Y2VwdGlvbiog
ZXhjZXB0aW9uKSBjb25zdAogewogICAgIFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihleGVjLCBl
eGNlcHRpb24pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtl
clNjcmlwdERlYnVnU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyU2Ny
aXB0RGVidWdTZXJ2ZXIuaAppbmRleCA0NTA4MjcxMDgwOGMxYWQ2MDc4NzU4NTQ3YzliYjUwYzUx
MGRlOTYwLi5lYTcxZjFkZTg4ZDI2MDNlNTY2YjBkMDk0MmIzMmVhZmE2NGJiYTkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuaApA
QCAtNTMsOCArNTMsOCBAQCBjbGFzcyBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlciBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3I6OlNjcmlwdERlYnVnU2VydmVyIHsKICAgICB2b2lkIGRpZFBhdXNlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGRpZENvbnRpbnVlKEpT
Qzo6SlNHbG9iYWxPYmplY3QqKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIHJ1bkV2ZW50TG9vcFdo
aWxlUGF1c2VkKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0NvbnRlbnRTY3JpcHQoSlNDOjpFeGVj
U3RhdGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgcmVwb3J0
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzQ29udGVudFNjcmlwdChKU0M6OkpTR2xvYmFsT2JqZWN0KikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFeGNlcHRpb24qKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5j
cHAKaW5kZXggZjkxYTM3MzY5YjU3NzY2MDExYTdmNmM2NGI1OGQ0YzI5MGI3YzUwZS4uMTE1MjNh
ZjBmZmEyMDY5NjgyZjI3ZWE4Mjg2MjI2Y2RkMTE3ZWNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKQEAg
LTUyOCw3ICs1MjgsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRGaW5pc2hSZWNv
cmRpbmdDYW52YXNGcmFtZShDYW52YXNSZW5kZXJpbmdDb250ZXh0JgogICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5yZWNvcmRpbmdGaW5pc2hlZChpbnNwZWN0b3JDYW52YXMtPmlkZW50aWZpZXIo
KSwgaW5zcGVjdG9yQ2FudmFzLT5yZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCkpOwogfQogCi12
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6
SlNPYmplY3QqIG9wdGlvbnMpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3Rh
cnRSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgSlNDOjpK
U0dsb2JhbE9iamVjdCYgZXhlYywgSlNDOjpKU09iamVjdCogb3B0aW9ucykKIHsKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY29udGV4dCk7CiAgICAgQVNT
RVJUKGluc3BlY3RvckNhbnZhcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgKaW5kZXggYTMwYzdmYzQ3OTJjYWRkYWE0
YTYwMzliNWRjMGQwY2I4ZjlmMTcxMi4uN2MwMTRhODZjNTRlNDEzMjU0NGQ5NDBlNDA1NDQyNjhi
NzdiNGNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuaApAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBJbnNwZWN0b3JD
YW52YXNBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNw
ZWN0b3I6OgogICAgIHZvaWQgZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQmKTsKICAgICB2b2lkIHJlY29yZENhbnZhc0FjdGlvbihDYW52YXNSZW5kZXJpbmdDb250
ZXh0JiwgY29uc3QgU3RyaW5nJiwgc3RkOjppbml0aWFsaXplcl9saXN0PFJlY29yZENhbnZhc0Fj
dGlvblZhcmlhbnQ+JiYgPSB7IH0pOwogICAgIHZvaWQgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFz
RnJhbWUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIGJvb2wgZm9yY2VEaXNwYXRjaCA9IGZhbHNl
KTsKLSAgICB2b2lkIGNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0JiwgSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0KiBvcHRpb25zKTsKKyAgICB2
b2lkIGNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Jiwg
SlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QqIG9wdGlvbnMpOwogI2lmIEVOQUJM
RShXRUJHTCkKICAgICB2b2lkIGRpZEVuYWJsZUV4dGVuc2lvbihXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlJiwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWRDcmVhdGVXZWJHTFByb2dyYW0o
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIFdlYkdMUHJvZ3JhbSYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRl
eCBlZWE1YmNhZjAwNjc5ZTIzZTBlMmYzZjY4YTIwOTQ2MTBlNDBiMTE1Li4xNTMxNjE3NDVlYTQz
NmZmNGY4ZWIzMmExNDRhZmM5MTg4NDEwMGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMjE3LDcgKzIxNyw3
IEBAIGNsYXNzIEluc3BlY3RhYmxlTm9kZSBmaW5hbCA6IHB1YmxpYyBDb21tYW5kTGluZUFQSUhv
c3Q6Okluc3BlY3RhYmxlT2JqZWN0IHsKICAgICB7CiAgICAgfQogCi0gICAgSlNDOjpKU1ZhbHVl
IGdldChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpIGZpbmFsCisgICAgSlNDOjpKU1ZhbHVlIGdldChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSkgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBJ
bnNwZWN0b3JET01BZ2VudDo6bm9kZUFzU2NyaXB0VmFsdWUoc3RhdGUsIG1fbm9kZS5nZXQoKSk7
CiAgICAgfQpAQCAtMTExMiw3ICsxMTEyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9j
dXNOb2RlKCkKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVjU3RhdGUoZnJhbWUpOworICAgIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIHNjcmlwdFN0YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKGZyYW1l
KTsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICBpZiAoaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xNjg3LDcgKzE2ODcsNyBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdgogICAgICAgICAgICAgZG9jdW1lbnQgPSAmZG93bmNh
c3Q8Tm9kZT4oZXZlbnRUYXJnZXQpLmRvY3VtZW50KCk7CiAKICAgICAgICAgSlNDOjpKU09iamVj
dCogaGFuZGxlck9iamVjdCA9IG51bGxwdHI7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gbnVsbHB0cjsKKyAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYyA9IG51bGxwdHI7
CiAKICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRMaXN0ZW5lci5pc29sYXRl
ZFdvcmxkKCkudm0oKSk7CiAKQEAgLTI2MDgsNyArMjYwOCw3IEBAIE5vZGUqIEluc3BlY3RvckRP
TUFnZW50OjpzY3JpcHRWYWx1ZUFzTm9kZShKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJu
IEpTTm9kZTo6dG9XcmFwcGVkKHZhbHVlLmdldE9iamVjdCgpLT52bSgpLCB2YWx1ZS5nZXRPYmpl
Y3QoKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUFzU2NyaXB0
VmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBOb2RlKiBub2RlKQorSlNDOjpKU1ZhbHVlIElu
c3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBz
dGF0ZSwgTm9kZSogbm9kZSkKIHsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKCZzdGF0ZSk7
CiAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90
eXBlKCZzdGF0ZSksIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUs
IG5vZGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NQWdlbnQuaAppbmRleCBmMzQ5OTRlNjdhMmFiODFiYTU4YzgyMTZlODIwMjQzYTcyY2Nl
OGYyLi5jNzAyZjM4Nzg5ODY3ZGEyNTMxOWMzYmMxMDlhMmY3NTUwMzhmMTEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCkBA
IC00OCw3ICs0OCw2IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIG5hbWVzcGFjZSBK
U0MgewogY2xhc3MgQ2FsbEZyYW1lOwogY2xhc3MgSlNWYWx1ZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9
IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTksNyArOTgsNyBAQCBj
bGFzcyBJbnNwZWN0b3JET01BZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2Us
IHB1YmxpYyBJbnNwZWN0b3I6OkRPTQogICAgIHN0YXRpYyBOb2RlKiBpbm5lclBhcmVudE5vZGUo
Tm9kZSopOwogCiAgICAgc3RhdGljIE5vZGUqIHNjcmlwdFZhbHVlQXNOb2RlKEpTQzo6SlNWYWx1
ZSk7Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBub2RlQXNTY3JpcHRWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYsIE5vZGUqKTsKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5vZGVBc1NjcmlwdFZhbHVl
KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBOb2RlKik7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJh
c2UKICAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250
ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvcklu
ZGV4ZWREQkFnZW50LmNwcAppbmRleCBiZGFlNTVkMDU5MzlhNWY4ZDY2ZWI0ODk3ZGExMzkyYWNj
YTUwZWE5Li5jOGViNzFiOTRhYzgxZDU0OGNlMTI3YTYxYjBjMjEwYzU2NzIyMTgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvcklu
ZGV4ZWREQkFnZW50LmNwcApAQCAtNDA0LDEwICs0MDQsMTAgQEAgY2xhc3MgT3BlbkN1cnNvckNh
bGxiYWNrIGZpbmFsIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byogc3RhdGUgPSBjb250ZXh0LmV4ZWNTdGF0ZSgp
OwotICAgICAgICBhdXRvIGtleSA9ICB0b0pTKCpzdGF0ZSwgKnN0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGN1cnNvci0+a2V5KCkpOwotICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSB0b0pT
KCpzdGF0ZSwgKnN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGN1cnNvci0+cHJpbWFyeUtl
eSgpKTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUo
KnN0YXRlLCBjdXJzb3ItPnZhbHVlKCkpOworICAgICAgICBhdXRvKiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0ID0gY29udGV4dC5leGVjU3RhdGUoKTsKKyAgICAgICAgYXV0byBrZXkgPSAgdG9KUygqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+a2V5KCkpOwor
ICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSB0b0pTKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqbGV4
aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5wcmltYXJ5S2V5KCkpOworICAgICAgICBhdXRvIHZh
bHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y3Vyc29yLT52YWx1ZSgpKTsKICAgICAgICAgYXV0byBkYXRhRW50cnkgPSBEYXRhRW50cnk6OmNy
ZWF0ZSgpCiAgICAgICAgICAgICAuc2V0S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChr
ZXksIFN0cmluZygpLCB0cnVlKSkKICAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0
ZWRTY3JpcHQud3JhcE9iamVjdChwcmltYXJ5S2V5LCBTdHJpbmcoKSwgdHJ1ZSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5jcHAKaW5kZXggMDI4M2E4MmMyYjM5ZGFiNGU1NjhmNmZhODZkMmMwYmQxZjE5YTc5Mi4u
OWRiMzZkYTBhMDcxMDU4ZDQ5NTQwNDNlZTMzNmI4N2I1NzY1N2FiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50
LmNwcApAQCAtOTYzLDcgKzk2Myw3IEBAIFdlYlNvY2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50
Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUgd2ViU29ja2V0QXNTY3JpcHRW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFdlYlNvY2tldCogd2ViU29ja2V0KQorc3RhdGlj
IEpTQzo6SlNWYWx1ZSB3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IHN0YXRlLCBXZWJTb2NrZXQqIHdlYlNvY2tldCkKIHsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKCZzdGF0ZSk7CiAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBkZXByZWNhdGVkR2xvYmFsT2Jq
ZWN0Rm9yUHJvdG90eXBlKCZzdGF0ZSksIHdlYlNvY2tldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApp
bmRleCBiOTIxOTQ0NWI4MmUzM2VlNmRiYTgyYjQ4YTA4ZGMyNzVkYmE4ZjQ5Li5lNTNiNGNlY2Y0
NjIwMTNkZGFlYWMzODIxNTBiN2M3OTMwMmIyN2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKQEAg
LTI2OSw3ICsyNjksNyBAQCBkb3VibGUgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dGltZXN0YW1w
KCkKICAgICByZXR1cm4gbV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS0+ZWxhcHNl
ZFRpbWUoKS5zZWNvbmRzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3Rh
cnRGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiB0aXRsZSkK
K3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBleGVjLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewogICAgIC8vIEFsbG93IGR1
cGxpY2F0ZSB1bm5hbWVkIHByb2ZpbGVzLiBEaXNhbGxvdyBkdXBsaWNhdGUgbmFtZWQgcHJvZmls
ZXMuCiAgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpIHsKQEAgLTI5Myw3ICsyOTMsNyBAQCB2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0RnJvbUNvbnNvbGUoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFN0cmluZwogICAgIG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkcy5h
cHBlbmQoY3JlYXRlUmVjb3JkRW50cnkoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVDb25z
b2xlUHJvZmlsZURhdGEodGl0bGUpLCBUaW1lbGluZVJlY29yZFR5cGU6OkNvbnNvbGVQcm9maWxl
LCB0cnVlLCBmcmFtZUZyb21FeGVjU3RhdGUoZXhlYykpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjpzdG9wRnJvbUNvbnNvbGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmIHRpdGxlKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wRnJvbUNvbnNvbGUo
SlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgLy8gU3Rv
cCBwcm9maWxlcyBpbiByZXZlcnNlIG9yZGVyLiBJZiB0aGUgdGl0bGUgaXMgZW1wdHksIHRoZW4g
c3RvcCB0aGUgbGFzdCBwcm9maWxlLgogICAgIC8vIE90aGVyd2lzZSwgbWF0Y2ggdGhlIHRpdGxl
IG9mIHRoZSBwcm9maWxlIHRvIHN0b3AuCkBAIC02NTYsOSArNjU2LDkgQEAgdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpkaWRGaXJlT2JzZXJ2ZXJDYWxsYmFjaygpCiAKIC8vIFNjcmlwdERl
YnVnTGlzdGVuZXIKIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpicmVha3BvaW50QWN0
aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJbnNwZWN0b3I6OlNjcmlwdEJy
ZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwgdW5zaWduZWQgLypiYXRjaElkKi8sIHVuc2lnbmVkIHNh
bXBsZUlkLCBKU0M6OkpTVmFsdWUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmJyZWFr
cG9pbnRBY3Rpb25Qcm9iZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjb25zdCBJbnNwZWN0b3I6OlNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwgdW5zaWdu
ZWQgLypiYXRjaElkKi8sIHVuc2lnbmVkIHNhbXBsZUlkLCBKU0M6OkpTVmFsdWUpCiB7Ci0gICAg
YXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVEYXRh
KGFjdGlvbiwgc2FtcGxlSWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OlByb2JlU2FtcGxlLCBmYWxz
ZSwgZnJhbWVGcm9tRXhlY1N0YXRlKCZzdGF0ZSkpOworICAgIGFwcGVuZFJlY29yZChUaW1lbGlu
ZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVByb2JlU2FtcGxlRGF0YShhY3Rpb24sIHNhbXBsZUlkKSwg
VGltZWxpbmVSZWNvcmRUeXBlOjpQcm9iZVNhbXBsZSwgZmFsc2UsIGZyYW1lRnJvbUV4ZWNTdGF0
ZShsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiB9CiAKIHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29s
OjpUaW1lbGluZTo6RXZlbnRUeXBlIHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRp
bWVsaW5lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5oCmluZGV4IDEzOTg5NDg2NmNkYzVkMWFjZDJiZDg4YzVmYWY4YjYwMmU1
YzAzMjIuLjcxNThkZTVjNTY0NGI3ZjM5YmFkZTQ5NzkyZTQ3OGRlZDVhNjlhOWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5oCkBAIC0xMDUsMTEgKzEwNSwxMSBAQCBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSAsIHB1YmxpYyBJbnNwZWN0bwog
ICAgIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBpbnQsIGludCwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCB3aWxsUnVu
TWljcm90YXNrKCkgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCBkaWRSdW5NaWNyb3Rhc2soKSBvdmVy
cmlkZSB7IH0KLSAgICB2b2lkIGRpZFBhdXNlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgZGlkUGF1c2UoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKSBvdmVycmlkZSB7IH0KICAg
ICB2b2lkIGRpZENvbnRpbnVlKCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBicmVha3BvaW50QWN0
aW9uTG9nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyB9CisgICAg
dm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJp
bmcmKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Tb3VuZChpbnQpIG92
ZXJyaWRlIHsgfQotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgSW5zcGVjdG9yOjpTY3JpcHRCcmVha3BvaW50QWN0aW9uJiwgdW5zaWduZWQgYmF0
Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIEpTQzo6SlNWYWx1ZSByZXN1bHQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBJbnNwZWN0b3I6OlNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mLCB1bnNpZ25lZCBiYXRjaElkLCB1
bnNpZ25lZCBzYW1wbGVJZCwgSlNDOjpKU1ZhbHVlIHJlc3VsdCkgb3ZlcnJpZGU7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZEluc3RhbGxUaW1lcihpbnQg
dGltZXJJZCwgU2Vjb25kcyB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QsIEZyYW1lKik7CkBAIC0x
NDUsOCArMTQ1LDggQEAgY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3JBZ2VudEJhc2UgLCBwdWJsaWMgSW5zcGVjdG8KICAgICB2b2lkIG1haW5GcmFt
ZU5hdmlnYXRlZCgpOwogCiAgICAgLy8gQ29uc29sZQotICAgIHZvaWQgc3RhcnRGcm9tQ29uc29s
ZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpOwotICAgIHZvaWQgc3RvcEZy
b21Db25zb2xlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdm9p
ZCBzdGFydEZyb21Db25zb2xlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIHRp
dGxlKTsKKyAgICB2b2lkIHN0b3BGcm9tQ29uc29sZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgU3RyaW5nJiB0aXRsZSk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFByb2dyYW1tYXRp
Y0NhcHR1cmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
V2ViQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2Vi
Q29uc29sZUFnZW50LmNwcAppbmRleCBmMTViZDExNzBkMDBiYzUzYjdhNmJiZmZhMjk3ZDMyMTk2
ZTU2YjZlLi5lOWQzNTFiMGM1MzUxMDkyYTE1NDE4Nzk4MmJhODVkMDMyNjBkMDU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJDb25zb2xlQWdlbnQuY3Bw
CkBAIC01NiwxMCArNTYsMTAgQEAgdm9pZCBXZWJDb25zb2xlQWdlbnQ6OmZyYW1lV2luZG93RGlz
Y2FyZGVkKERPTVdpbmRvdyogd2luZG93KQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKGF1
dG8mIG1lc3NhZ2UgOiBtX2NvbnNvbGVNZXNzYWdlcykgewotICAgICAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IG1lc3NhZ2UtPnNjcmlwdFN0YXRlKCk7Ci0gICAgICAgIGlmICghZXhlYykKKyAg
ICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1lc3NhZ2Ut
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGRvbVdpbmRvd0Zyb21FeGVjU3RhdGUoZXhl
YykgIT0gd2luZG93KQorICAgICAgICBpZiAoZG9tV2luZG93RnJvbUV4ZWNTdGF0ZShsZXhpY2Fs
R2xvYmFsT2JqZWN0KSAhPSB3aW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
bWVzc2FnZS0+Y2xlYXIoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAwMzVmYzdkZTMzMjNhZWQ1NWY4
NWMyMjdiNDI3NDE5YWVmNjI0ODVlLi40OWQwOWVmOGY3NjQ4MjM2ZmE5NDlhN2EwYzZmOTY0NzA0
OTQxOTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRl
YnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2Vi
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBXZWJEZWJ1Z2dlckFnZW50
OjpkaWRBZGRFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJp
bmcKICAgICBpZiAobV9yZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcnMuY29udGFpbnMocmVnaXN0ZXJl
ZExpc3RlbmVyLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNDOjpFeGVjU3RhdGUq
IHNjcmlwdFN0YXRlID0gdGFyZ2V0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXhlY1N0YXRl
KCk7CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogc2NyaXB0U3RhdGUgPSB0YXJnZXQuc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5leGVjU3RhdGUoKTsKICAgICBpZiAoIXNjcmlwdFN0YXRlKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFdlYkRlYnVnZ2VyQWdl
bnQ6OndpbGxIYW5kbGVFdmVudChjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgbGlzdGVu
ZXIpCiAgICAgd2lsbERpc3BhdGNoQXN5bmNDYWxsKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OkFz
eW5jQ2FsbFR5cGU6OkV2ZW50TGlzdGVuZXIsIGl0LT52YWx1ZSk7CiB9CiAKLXZvaWQgV2ViRGVi
dWdnZXJBZ2VudDo6ZGlkUG9zdE1lc3NhZ2UoY29uc3QgVGltZXJCYXNlJiB0aW1lciwgSlNDOjpF
eGVjU3RhdGUmIHN0YXRlKQordm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaWRQb3N0TWVzc2FnZShj
b25zdCBUaW1lckJhc2UmIHRpbWVyLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSkKIHsKICAg
ICBpZiAoIWJyZWFrcG9pbnRzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKaW5kZXggZGY5
ZGFiYzc0MWIwZjM0ODc0ODY0NGYyMzdjNDJjODUyZTg5ZDJjMS4uYWJjODMyMGEyN2U5NjRmM2Qw
NjNmM2ZhYjU3ZTg5N2JiMzY2MDc5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgV2Vi
RGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQg
ewogICAgIHZvaWQgZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYsIGNvbnN0IEF0b21T
dHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVyZSk7CiAgICAgdm9p
ZCB3aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcm
IGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVyZSk7CiAgICAgdm9pZCB3aWxs
SGFuZGxlRXZlbnQoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKLSAgICB2b2lkIGRp
ZFBvc3RNZXNzYWdlKGNvbnN0IFRpbWVyQmFzZSYsIEpTQzo6RXhlY1N0YXRlJik7CisgICAgdm9p
ZCBkaWRQb3N0TWVzc2FnZShjb25zdCBUaW1lckJhc2UmLCBKU0M6OkpTR2xvYmFsT2JqZWN0Jik7
CiAgICAgdm9pZCBkaWRGYWlsUG9zdE1lc3NhZ2UoY29uc3QgVGltZXJCYXNlJik7CiAgICAgdm9p
ZCB3aWxsRGlzcGF0Y2hQb3N0TWVzc2FnZShjb25zdCBUaW1lckJhc2UmKTsKICAgICB2b2lkIGRp
ZERpc3BhdGNoUG9zdE1lc3NhZ2UoY29uc3QgVGltZXJCYXNlJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcAppbmRl
eCA2MDY1ZWVlODVhNjBjY2RhYzdkNjQ3YWI1ZDdkZGE3YTM1ZTcwZmJlLi5kZGQ1M2JhNWRmYmNh
NTUzN2JiYjZiN2JlMDY1MDU3ZDcyZmJhYmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKQEAgLTYxLDcgKzYx
LDcgQEAgSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZh
bChjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHQKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElk
KQogICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRG
b3JJZCgqZXhlY3V0aW9uQ29udGV4dElkKTsKIAotICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRT
dGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZSgmbV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpKTsK
KyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0
ZSgmbV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpKTsKICAgICByZXR1cm4gaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogfQogCkBAIC03Nywy
NSArNzcsMjUgQEAgSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0
Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGMKICAgICByZXR1cm4gaW5qZWN0ZWRT
Y3JpcHQ7CiB9CiAKLXZvaWQgUGFnZUF1ZGl0QWdlbnQ6OnBvcHVsYXRlQXVkaXRPYmplY3QoSlND
OjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0
T2JqZWN0KQordm9pZCBQYWdlQXVkaXRBZ2VudDo6cG9wdWxhdGVBdWRpdE9iamVjdChKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiYgYXVkaXRPYmplY3QpCiB7Ci0gICAgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cG9wdWxhdGVB
dWRpdE9iamVjdChleGVjU3RhdGUsIGF1ZGl0T2JqZWN0KTsKKyAgICBJbnNwZWN0b3JBdWRpdEFn
ZW50Ojpwb3B1bGF0ZUF1ZGl0T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIGF1ZGl0T2JqZWN0
KTsKIAotICAgIEFTU0VSVChleGVjU3RhdGUpOwotICAgIGlmICghZXhlY1N0YXRlKQorICAgIEFT
U0VSVChsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3Qp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiBnbG9iYWxPYmplY3QgPSBKU0M6Ompz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KSkgeworICAgIGlmIChhdXRvKiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpKSB7CiAgICAgICAgIEpTQzo6Vk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
IAotICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIGpzSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5
T2JqZWN0ID0gdG9KU05ld2x5Q3JlYXRlZChleGVjU3RhdGUsIGdsb2JhbE9iamVjdCwgSW5zcGVj
dG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjcmVhdGUoKnRoaXMpKSkKKyAgICAgICAgaWYg
KEpTQzo6SlNWYWx1ZSBqc0luc3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9iamVjdCA9IHRvSlNO
ZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBJbnNwZWN0b3JB
dWRpdEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNyZWF0ZSgqdGhpcykpKQogICAgICAgICAgICAgYXVk
aXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
QWNjZXNzaWJpbGl0eSIpLCBqc0luc3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9iamVjdCk7CiAK
LSAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBqc0luc3BlY3RvckF1ZGl0RE9NT2JqZWN0ID0gdG9K
U05ld2x5Q3JlYXRlZChleGVjU3RhdGUsIGdsb2JhbE9iamVjdCwgSW5zcGVjdG9yQXVkaXRET01P
YmplY3Q6OmNyZWF0ZSgqdGhpcykpKQorICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIGpzSW5zcGVj
dG9yQXVkaXRET01PYmplY3QgPSB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgSW5zcGVjdG9yQXVkaXRET01PYmplY3Q6OmNyZWF0ZSgqdGhpcykpKQog
ICAgICAgICAgICAgYXVkaXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAiRE9NIiksIGpzSW5zcGVjdG9yQXVkaXRET01PYmplY3QpOwogCi0gICAg
ICAgIGlmIChKU0M6OkpTVmFsdWUganNJbnNwZWN0b3JBdWRpdFJlc291cmNlc09iamVjdCA9IHRv
SlNOZXdseUNyZWF0ZWQoZXhlY1N0YXRlLCBnbG9iYWxPYmplY3QsIEluc3BlY3RvckF1ZGl0UmVz
b3VyY2VzT2JqZWN0OjpjcmVhdGUoKnRoaXMpKSkKKyAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBq
c0luc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0ID0gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIEluc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0
OjpjcmVhdGUoKnRoaXMpKSkKICAgICAgICAgICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlJlc291cmNlcyIpLCBqc0luc3BlY3Rv
ckF1ZGl0UmVzb3VyY2VzT2JqZWN0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oCmluZGV4IDc1MWUyYTc3
YmE3MjkxZjFhMjYyMDM0YTZhMDQ5ZGQxN2UyYTAxY2IuLmRkZWM0NjUxN2UxYTA1Y2JmNWJmOGZm
ZDdkMWFjODg4YTA4OTRmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIFBh
Z2VBdWRpdEFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXVkaXRBZ2Vu
dCB7CiAgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwo
Y29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpOwogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBvcHVsYXRl
QXVkaXRPYmplY3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYg
YXVkaXRPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVjdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0T2JqZWN0
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKICAgICB2b2lk
IHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDQ4MWEx
NzFkYzdmODg2Mzg2ZTY0NWNkMDZmOTJjNzA2NzA3N2Y5NjIuLmEwMGU0NjYyZTYyNzBiODMzNWEx
OWVjMWI5MjNjNTgxYzAxNmFmODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcApAQCAtMTM2LDE1ICsx
MzYsMTUgQEAgdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6dW5tdXRlQ29uc29sZSgpCiAgICAgUGFn
ZUNvbnNvbGVDbGllbnQ6OnVubXV0ZSgpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50Ojpi
cmVha3BvaW50QWN0aW9uTG9nKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCiB7Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLmNvbnNvbGUoKS5hZGRNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkxvZywgbWVzc2FnZSwgY3JlYXRlU2NyaXB0Q2FsbFN0
YWNrKCZzdGF0ZSkpOworICAgIG1faW5zcGVjdGVkUGFnZS5jb25zb2xlKCkuYWRkTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpMb2csIG1lc3NhZ2UsIGNyZWF0ZVNjcmlw
dENhbGxTdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiB9CiAKIEluamVjdGVkU2NyaXB0IFBh
Z2VEZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoIWV4ZWN1
dGlvbkNvbnRleHRJZCkgewotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBt
YWluV29ybGRFeGVjU3RhdGUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CisgICAgICAg
IEpTQzo6SlNHbG9iYWxPYmplY3QqIHNjcmlwdFN0YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKCZt
X2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwogICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogICAgIH0KIApAQCAt
MTg1LDcgKzE4NSw3IEBAIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpZFJlcXVlc3RBbmltYXRp
b25GcmFtZShpbnQgY2FsbGJhY2tJZCwgRG9jdW1lbnQmIGRvY3VtCiAgICAgaWYgKCFicmVha3Bv
aW50c0FjdGl2ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSogc2Ny
aXB0U3RhdGUgPSBkb2N1bWVudC5leGVjU3RhdGUoKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBzY3JpcHRTdGF0ZSA9IGRvY3VtZW50LmV4ZWNTdGF0ZSgpOwogICAgIGlmICghc2NyaXB0U3Rh
dGUpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaAppbmRleCAxMTU5OGRmMWE1NGIw
YzlhZjQzMmEwZDIwY2E0MGNkYzI2YTdmYzIxLi43ZGJiMDk0NWNlZmFhOWNiNjA0OTYxOGY0NjNm
NTgwOTdjZmJlYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaApAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBQ
YWdlRGVidWdnZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJEZWJ1Z2dlckFnZW50IHsKICAgICB2
b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbGxG
cmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3Jv
dXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQ
YXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVl
LCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNv
bnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93
biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgb3ZlcnJpZGU7CiAKICAgICAvLyBT
Y3JpcHREZWJ1Z0xpc3RlbmVyCi0gICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBicmVha3BvaW50QWN0
aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKIAog
ICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkQ2xlYXJNYWluRnJh
bWVXaW5kb3dPYmplY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcAppbmRleCA0YWI0YzkxYTk1OTIxMjI4
ZWU1MDc3YWY5NzVlZjRkZGUwM2RlNDE4Li42NTY2ZWEwZjdmMWQzZWM2M2NkMjA1MzY3YzJjNzY5
OTYyZWQ0OWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgUGFn
ZVJ1bnRpbWVBZ2VudDo6ZGlkQ3JlYXRlTWFpbldvcmxkQ29udGV4dChGcmFtZSYgZnJhbWUpCiBJ
bmplY3RlZFNjcmlwdCBQYWdlUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsK
ICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHRJZCkgewotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSog
c2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVjU3RhdGUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJh
bWUoKSk7CisgICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIHNjcmlwdFN0YXRlID0gbWFpbldv
cmxkRXhlY1N0YXRlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwogICAgICAgICBJbmpl
Y3RlZFNjcmlwdCByZXN1bHQgPSBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlw
dEZvcihzY3JpcHRTdGF0ZSk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzTm9WYWx1ZSgpKQogICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IG1haW4gd29ybGQgZXhlY3V0
aW9uIGNvbnRleHQgbm90IGZvdW5kIl9zOwpAQCAtMTI4LDE0ICsxMjgsMTQgQEAgdm9pZCBQYWdl
UnVudGltZUFnZW50OjpyZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKQogICAgIGlmICgh
cGFnZUFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6
RXhlY1N0YXRlKiwgU2VjdXJpdHlPcmlnaW4qPj4gaXNvbGF0ZWRDb250ZXh0czsKKyAgICBWZWN0
b3I8c3RkOjpwYWlyPEpTQzo6SlNHbG9iYWxPYmplY3QqLCBTZWN1cml0eU9yaWdpbio+PiBpc29s
YXRlZENvbnRleHRzOwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkg
ewogICAgICAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91
dFRvRXhlY3V0ZVNjcmlwdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBTdHJp
bmcgZnJhbWVJZCA9IHBhZ2VBZ2VudC0+ZnJhbWVJZChmcmFtZSk7CiAKLSAgICAgICAgSlNDOjpF
eGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKGZyYW1lKTsKKyAgICAg
ICAgSlNDOjpKU0dsb2JhbE9iamVjdCogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVjU3RhdGUo
ZnJhbWUpOwogICAgICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChmcmFtZUlkLCBzY3JpcHRTdGF0
ZSwgbnVsbHB0ciwgdHJ1ZSk7CiAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS5jb2xsZWN0SXNvbGF0
ZWRDb250ZXh0cyhpc29sYXRlZENvbnRleHRzKTsKICAgICAgICAgaWYgKGlzb2xhdGVkQ29udGV4
dHMuaXNFbXB0eSgpKQpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6
cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKCkKICAgICB9CiB9CiAKLXZvaWQgUGFnZVJ1
bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBK
U0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
biwgYm9vbCBpc1BhZ2VDb250ZXh0KQordm9pZCBQYWdlUnVudGltZUFnZW50Ojpub3RpZnlDb250
ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIEpTQzo6SlNHbG9iYWxPYmplY3QqIHNj
cmlwdFN0YXRlLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNQYWdlQ29u
dGV4dCkKIHsKICAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4gfHwgaXNQYWdlQ29udGV4dCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVu
dGltZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1
bnRpbWVBZ2VudC5oCmluZGV4IDMyMmE0Y2JlNzI1NDQwNTQ1NDEwMDIwYmU0ZjVmOGYwMjA0MzNj
ZjYuLmFiNDRhMmIyMDRkMmQ1MjdkZTM5MWM2MGNiNjk1ZDVhZDU5YjcwZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdl
bnQuaApAQCAtMzcsNyArMzcsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxGcmFt
ZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNjcsNyArNjYsNyBAQCBjbGFzcyBQYWdlUnVudGltZUFnZW50IGZpbmFsIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50IHsKICAgICB2b2lkIG11dGVDb25zb2xl
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKTsKLSAgICB2b2lkIG5vdGlmeUNvbnRl
eHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0
eU9yaWdpbiosIGJvb2wgaXNQYWdlQ29udGV4dCk7CisgICAgdm9pZCBub3RpZnlDb250ZXh0Q3Jl
YXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBTZWN1cml0
eU9yaWdpbiosIGJvb2wgaXNQYWdlQ29udGV4dCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yOjpSdW50aW1lRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpSdW50aW1lQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwCmluZGV4IDk3YTBkYjllYjllZjZjMjNm
NTkyZGJiNjIzZTQ5NzY5OGZjZWQyN2IuLmMxMmI1YWE0MTMyZjg5YWM1ODJkZWI5ZjcyZjE4NTFh
OWVlZjk1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwCkBAIC01NSw3ICs1NSw3IEBAIEluamVj
dGVkU2NyaXB0IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogICAg
IH0KIAotICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IGV4ZWNTdGF0ZUZyb21Xb3Jr
ZXJHbG9iYWxTY29wZShtX3dvcmtlckdsb2JhbFNjb3BlKTsKKyAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBzY3JpcHRTdGF0ZSA9IGV4ZWNTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29wZShtX3dvcmtl
ckdsb2JhbFNjb3BlKTsKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0
ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3Bw
CmluZGV4IDA3YmZjNjI0NjhiZDhhZThiMGRhOTg1MTJhMjg1ZmFiOTQ4ZGZlNjcuLmNiYzYyMDUy
MjE5NGYyOWE5NDE4N2E4YTI3YWMxMmI0MTlkMzU5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdl
bnQuY3BwCkBAIC00OCw5ICs0OCw5IEBAIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OldvcmtlckRlYnVn
Z2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBXb3JrZXJEZWJ1Z2dlckFn
ZW50Ojp+V29ya2VyRGVidWdnZXJBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBXb3JrZXJEZWJ1
Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKK3ZvaWQgV29ya2VyRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlv
bkxvZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewotICAgIG1fd29ya2VyR2xvYmFsU2NvcGUuYWRkQ29uc29sZU1lc3NhZ2UobWFr
ZVVuaXF1ZTxDb25zb2xlTWVzc2FnZT4oTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VUeXBlOjpM
b2csIE1lc3NhZ2VMZXZlbDo6TG9nLCBtZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxsU3RhY2soJnN0
YXRlKSkpOworICAgIG1fd29ya2VyR2xvYmFsU2NvcGUuYWRkQ29uc29sZU1lc3NhZ2UobWFrZVVu
aXF1ZTxDb25zb2xlTWVzc2FnZT4oTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VUeXBlOjpMb2cs
IE1lc3NhZ2VMZXZlbDo6TG9nLCBtZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxsU3RhY2sobGV4aWNh
bEdsb2JhbE9iamVjdCkpKTsKIH0KIAogSW5qZWN0ZWRTY3JpcHQgV29ya2VyRGVidWdnZXJBZ2Vu
dDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
aW50KiBleGVjdXRpb25Db250ZXh0SWQpCkBAIC02MCw3ICs2MCw3IEBAIEluamVjdGVkU2NyaXB0
IFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogICAgIH0KIAotICAg
IEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IGV4ZWNTdGF0ZUZyb21Xb3JrZXJHbG9iYWxT
Y29wZShtX3dvcmtlckdsb2JhbFNjb3BlKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBzY3Jp
cHRTdGF0ZSA9IGV4ZWNTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29wZShtX3dvcmtlckdsb2JhbFNj
b3BlKTsKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRG
b3Ioc2NyaXB0U3RhdGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKaW5kZXggODkwYWM0
MjIwOTJkNTM3YjJiNWZkZThiODMxOGM5ZTE0Y2Q5NTE4NS4uMzE5MTY3NjYzYzdkNjc4YzQwYTJk
ZmZlNDE0NjVkNTViM2VlMzVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaApAQCAtMzksNyAr
MzksNyBAQCBjbGFzcyBXb3JrZXJEZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIFdlYkRlYnVn
Z2VyQWdlbnQgewogICAgIH5Xb3JrZXJEZWJ1Z2dlckFnZW50KCkgb3ZlcnJpZGU7CiAKICAgICAv
LyBTY3JpcHREZWJ1Z0xpc3RlbmVyCi0gICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6
RXhlY1N0YXRlJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBicmVha3BvaW50
QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG11dGUgY29uc29sZSBmb3Igd29y
a2Vycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2Vy
L1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCmluZGV4IGYxODI3Mzg5MTA1ZDU0ODliYTI2
Nzc0ZjUwYzNhM2NjNTU5MDZlZmQuLmQ5MjMwODFjNTFlM2JkMjc1MjFhYTI0MWM3Y2FjOGZiNDBk
M2UyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2Vy
L1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcApAQCAtNTgsNyArNTgsNyBAQCBJbmpl
Y3RlZFNjcmlwdCBXb3JrZXJSdW50aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbgogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKICAg
ICB9CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBleGVjU3RhdGVGcm9tV29y
a2VyR2xvYmFsU2NvcGUobV93b3JrZXJHbG9iYWxTY29wZSk7CisgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCogc2NyaXB0U3RhdGUgPSBleGVjU3RhdGVGcm9tV29ya2VyR2xvYmFsU2NvcGUobV93b3Jr
ZXJHbG9iYWxTY29wZSk7CiAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVj
dGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9kaXNwbGF5dHJlZS9EaXNwbGF5UnVuLmgKaW5kZXggYzc0NmM4N2Y3YTRhMTZiYjg3MzA3ZDQw
YmIwODE3NjcxNmMzMDJmMS4uNThhNDZhZjAxNmZmZWZjODEyODcwMjNlOTllNmRkYTY1YTRhNDI2
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlS
dW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJ1bi5o
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJEaXNwbGF5UmVjdC5oIgogI2luY2x1ZGUg
IkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheSB7CkBAIC0zOCwyMiArMzksMjMgQEAgc3RydWN0IFJ1
biB7CiAgICAgc3RydWN0IFRleHRDb250ZXh0IHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZB
U1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgVGV4dENvbnRleHQodW5zaWduZWQg
cG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIFRleHRDb250ZXh0KHVuc2lnbmVk
IHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIFN0cmluZyBjb250ZW50KTsKIAogICAgICAgICB1
bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KICAgICAgICAgdW5zaWdu
ZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gc3RhcnQoKSArIGxlbmd0aCgpOyB9CiAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgICAgIFN0cmlu
ZyBjb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50OyB9CiAKLSAgICAgICAgdm9pZCBl
eHBhbmQodW5zaWduZWQgbGVuZ3RoKSB7IG1fbGVuZ3RoICs9IGxlbmd0aDsgfQorICAgICAgICB2
b2lkIGV4cGFuZChjb25zdCBUZXh0Q29udGV4dCYgb3RoZXIpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdW5zaWduZWQgbV9zdGFydDsKICAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeS4gV2Ugc2hvdWxkIGhhdmUgc29tZSBtYXBw
aW5nIHNldHVwIHRvIGlkZW50aWZ5IGFzc29jaWF0ZWQgdGV4dCBjb250ZW50IGluc3RlYWQuCisg
ICAgICAgIFN0cmluZyBtX2NvbnRlbnQ7CiAgICAgfTsKIAotICAgIFJ1bihSZWN0IGxvZ2ljYWxS
ZWN0KTsKLSAgICBSdW4oUmVjdCBsb2dpY2FsUmVjdCwgVGV4dENvbnRleHQpOwotICAgIFJ1bihj
b25zdCBSdW4mKTsKKyAgICBSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBSZWN0IGxvZ2ljYWxSZWN0
LCBPcHRpb25hbDxUZXh0Q29udGV4dD4gPSBXVEY6Om51bGxvcHQpOwogCiAgICAgY29uc3QgUmVj
dCYgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0OyB9CiAKQEAgLTc5
LDMyICs4MSwzMyBAQCBzdHJ1Y3QgUnVuIHsKICAgICBPcHRpb25hbDxUZXh0Q29udGV4dD4mIHRl
eHRDb250ZXh0KCkgeyByZXR1cm4gbV90ZXh0Q29udGV4dDsgfQogICAgIE9wdGlvbmFsPFRleHRD
b250ZXh0PiB0ZXh0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRleHQ7IH0KIAor
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0K
KwogcHJpdmF0ZToKKyAgICAvLyBGSVhNRTogRmluZCBvdXQgdGhlIERpc3BsYXk6OlJ1biA8LT4g
cGFpbnQgc3R5bGUgc2V0dXAuCisgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CiAgICAg
UmVjdCBtX2xvZ2ljYWxSZWN0OwogICAgIE9wdGlvbmFsPFRleHRDb250ZXh0PiBtX3RleHRDb250
ZXh0OwogfTsKIAotaW5saW5lIFJ1bjo6UnVuKFJlY3QgbG9naWNhbFJlY3QpCi0gICAgOiBtX2xv
Z2ljYWxSZWN0KGxvZ2ljYWxSZWN0KQotewotfQotCi1pbmxpbmUgUnVuOjpSdW4oUmVjdCBsb2dp
Y2FsUmVjdCwgVGV4dENvbnRleHQgdGV4dENvbnRleHQpCi0gICAgOiBtX2xvZ2ljYWxSZWN0KGxv
Z2ljYWxSZWN0KQoraW5saW5lIFJ1bjo6UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVj
dCBsb2dpY2FsUmVjdCwgT3B0aW9uYWw8VGV4dENvbnRleHQ+IHRleHRDb250ZXh0KQorICAgIDog
bV9zdHlsZShzdHlsZSkKKyAgICAsIG1fbG9naWNhbFJlY3QobG9naWNhbFJlY3QpCiAgICAgLCBt
X3RleHRDb250ZXh0KHRleHRDb250ZXh0KQogewogfQogCi1pbmxpbmUgUnVuOjpUZXh0Q29udGV4
dDo6VGV4dENvbnRleHQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBS
dW46OlRleHRDb250ZXh0OjpUZXh0Q29udGV4dCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoLCBTdHJpbmcgY29udGVudCkKICAgICA6IG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX2xlbmd0
aChsZW5ndGgpCisgICAgLCBtX2NvbnRlbnQoY29udGVudCkKIHsKIH0KIAotaW5saW5lIFJ1bjo6
UnVuKGNvbnN0IFJ1biYgb3RoZXIpCitpbmxpbmUgdm9pZCBSdW46OlRleHRDb250ZXh0OjpleHBh
bmQoY29uc3QgVGV4dENvbnRleHQmIG90aGVyKQogewotICAgIG1fbG9naWNhbFJlY3QgPSBvdGhl
ci5tX2xvZ2ljYWxSZWN0OwotICAgIG1fdGV4dENvbnRleHQgPSBvdGhlci5tX3RleHRDb250ZXh0
OworICAgIG1fY29udGVudC5hcHBlbmQob3RoZXIuY29udGVudCgpKTsKKyAgICBtX2xlbmd0aCAr
PSBvdGhlci5sZW5ndGgoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcAppbmRleCBiODE5ZmY3Mzg2NjM3NTAy
Y2MzYWUxNzY5ZTJlMGQwZmIzNDQxMWFmLi5jMWY3MTUwMTUwMjNmNDJmYTA5NGQ0YTdiYWIyNTlj
YWE3Y2E3OTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lLmNwcApAQCAtMjk5LDcgKzI5OSw3IEBAIHZvaWQgTGluZTo6YXBw
ZW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhbFdpZHRo
KQogCiB2b2lkIExpbmU6OmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0sIGNvbnN0IERpc3BsYXk6OlJlY3QmIGxvZ2ljYWxSZWN0KQogewotICAgIG1f
cnVuTGlzdC5hcHBlbmQobWFrZVVuaXF1ZTxSdW4+KGlubGluZUl0ZW0sIERpc3BsYXk6OlJ1biB7
IGxvZ2ljYWxSZWN0IH0pKTsKKyAgICBtX3J1bkxpc3QuYXBwZW5kKG1ha2VVbmlxdWU8UnVuPihp
bmxpbmVJdGVtLCBEaXNwbGF5OjpSdW4geyBpbmxpbmVJdGVtLnN0eWxlKCksIGxvZ2ljYWxSZWN0
IH0pKTsKICAgICBtX2xpbmVCb3guZXhwYW5kSG9yaXpvbnRhbGx5KGxvZ2ljYWxSZWN0LndpZHRo
KCkpOwogfQogCkBAIC0zNTksNyArMzU5LDEwIEBAIHZvaWQgTGluZTo6YXBwZW5kVGV4dENvbnRl
bnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhCiAg
ICAgICAgIGxvZ2ljYWxSZWN0LnNldEhlaWdodChpbmxpbmVJdGVtQ29udGVudEhlaWdodChpbmxp
bmVJdGVtKSk7CiAgICAgfQogCi0gICAgYXV0byBsaW5lSXRlbSA9IG1ha2VVbmlxdWU8UnVuPihp
bmxpbmVJdGVtLCBEaXNwbGF5OjpSdW4geyBsb2dpY2FsUmVjdCwgRGlzcGxheTo6UnVuOjpUZXh0
Q29udGV4dCB7IGlubGluZUl0ZW0uc3RhcnQoKSwgaW5saW5lSXRlbS5pc0NvbGxhcHNlZCgpID8g
MSA6IGlubGluZUl0ZW0ubGVuZ3RoKCkgfSB9KTsKKyAgICBhdXRvIGNvbnRlbnRTdGFydCA9IGlu
bGluZUl0ZW0uc3RhcnQoKTsKKyAgICBhdXRvIGNvbnRlbnRMZW5ndGggPSBpbmxpbmVJdGVtLmlz
Q29sbGFwc2VkKCkgPyAxIDogaW5saW5lSXRlbS5sZW5ndGgoKTsKKyAgICBhdXRvIHRleHRDb250
ZW50ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKS50ZXh0Q29udGVudCgpLnN1YnN0cmluZyhjb250
ZW50U3RhcnQsIGNvbnRlbnRMZW5ndGgpOworICAgIGF1dG8gbGluZUl0ZW0gPSBtYWtlVW5pcXVl
PFJ1bj4oaW5saW5lSXRlbSwgRGlzcGxheTo6UnVuIHsgaW5saW5lSXRlbS5zdHlsZSgpLCBsb2dp
Y2FsUmVjdCwgRGlzcGxheTo6UnVuOjpUZXh0Q29udGV4dCB7IGNvbnRlbnRTdGFydCwgY29udGVu
dExlbmd0aCwgdGV4dENvbnRlbnQgfSB9KTsKICAgICBhdXRvIGlzVmlzdWFsbHlFbXB0eSA9IHdp
bGxDb2xsYXBzZUNvbXBsZXRlbHkoKTsKICAgICBpZiAoaXNWaXN1YWxseUVtcHR5KQogICAgICAg
ICBsaW5lSXRlbS0+c2V0VmlzdWFsbHlJc0VtcHR5KCk7CkBAIC0zODYsNyArMzg5LDcgQEAgdm9p
ZCBMaW5lOjphcHBlbmROb25SZXBsYWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiBpbmxp
bmVJdGVtLCBMYXlvdXRVbml0IGwKICAgICAgICAgbG9naWNhbFJlY3Quc2V0SGVpZ2h0KHJ1bkhl
aWdodCk7CiAgICAgfQogCi0gICAgbV9ydW5MaXN0LmFwcGVuZChtYWtlVW5pcXVlPFJ1bj4oaW5s
aW5lSXRlbSwgRGlzcGxheTo6UnVuIHsgbG9naWNhbFJlY3QgfSkpOworICAgIG1fcnVuTGlzdC5h
cHBlbmQobWFrZVVuaXF1ZTxSdW4+KGlubGluZUl0ZW0sIERpc3BsYXk6OlJ1biB7IGlubGluZUl0
ZW0uc3R5bGUoKSwgbG9naWNhbFJlY3QgfSkpOwogICAgIG1fbGluZUJveC5leHBhbmRIb3Jpem9u
dGFsbHkobG9naWNhbFdpZHRoICsgaG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGhvcml6b250YWxN
YXJnaW4uZW5kKTsKICAgICBtX3RyaW1tYWJsZUNvbnRlbnQuY2xlYXIoKTsKIH0KQEAgLTQwNiw3
ICs0MDksNyBAQCB2b2lkIExpbmU6OmFwcGVuZEhhcmRMaW5lQnJlYWsoY29uc3QgSW5saW5lSXRl
bSYgaW5saW5lSXRlbSkKICAgICAgICAgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KGlubGlu
ZUl0ZW0pOwogICAgICAgICBsb2dpY2FsUmVjdC5zZXRIZWlnaHQobG9naWNhbEhlaWdodCgpKTsK
ICAgICB9Ci0gICAgbV9ydW5MaXN0LmFwcGVuZChtYWtlVW5pcXVlPFJ1bj4oaW5saW5lSXRlbSwg
RGlzcGxheTo6UnVuIHsgbG9naWNhbFJlY3QgfSkpOworICAgIG1fcnVuTGlzdC5hcHBlbmQobWFr
ZVVuaXF1ZTxSdW4+KGlubGluZUl0ZW0sIERpc3BsYXk6OlJ1biB7IGlubGluZUl0ZW0uc3R5bGUo
KSwgbG9naWNhbFJlY3QgfSkpOwogfQogCiB2b2lkIExpbmU6OmFkanVzdEJhc2VsaW5lQW5kTGlu
ZUhlaWdodChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5oCmluZGV4IDAzYjg4YTMz
ODI0ZDc4MWM5ZjVhNDlkOWU2ZDFiNDgxMmU1ZDQ1MGYuLjA5MDUzMmMzOTYxMjY1OWRhNGFjYWY2
ZmRlYzg0YTgwMzQ4Y2I2YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmgKQEAgLTE1NCw3ICsxNTQsNyBAQCBpbmxpbmUgdm9p
ZCBMaW5lOjpSdW46OmV4cGFuZChjb25zdCBSdW4mIG90aGVyKQogCiAgICAgYXV0byYgb3RoZXJE
aXNwbGF5UnVuID0gb3RoZXIuZGlzcGxheVJ1bigpOwogICAgIG1fZGlzcGxheVJ1bi5leHBhbmRI
b3Jpem9udGFsbHkob3RoZXJEaXNwbGF5UnVuLmxvZ2ljYWxXaWR0aCgpKTsKLSAgICBtX2Rpc3Bs
YXlSdW4udGV4dENvbnRleHQoKS0+ZXhwYW5kKG90aGVyRGlzcGxheVJ1bi50ZXh0Q29udGV4dCgp
LT5sZW5ndGgoKSk7CisgICAgbV9kaXNwbGF5UnVuLnRleHRDb250ZXh0KCktPmV4cGFuZCgqb3Ro
ZXJEaXNwbGF5UnVuLnRleHRDb250ZXh0KCkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCBmYmEyNjZhZWU2YzFiODBkN2U1ZmFjMGU3MzIzNDYx
MTg5ODA2YWU1Li41ZmUzMDdkYzU0N2NkYTUxMDMwMzBiNjMxZTJkMTAwYzViYTcxMDhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAgLTE2NTQsMTcgKzE2NTQs
MTcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6YWRkU3VicmVzb3VyY2VMb2FkZXIoUmVzb3VyY2VM
b2FkZXIqIGxvYWRlcikKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBpZiAoZG9jdW1lbnQo
KSkgewotICAgICAgICBzd2l0Y2ggKGRvY3VtZW50KCktPnBhZ2VDYWNoZVN0YXRlKCkpIHsKLSAg
ICAgICAgY2FzZSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGU6CisgICAgICAgIHN3aXRjaCAoZG9j
dW1lbnQoKS0+YmFja0ZvcndhcmRDYWNoZVN0YXRlKCkpIHsKKyAgICAgICAgY2FzZSBEb2N1bWVu
dDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlOgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRG9jdW1lbnQ6OkFib3V0VG9FbnRlclBhZ2VDYWNoZTogewotICAgICAgICAgICAgLy8gQSBw
YWdlIGFib3V0IHRvIGVudGVyIFBhZ2VDYWNoZSBzaG91bGQgb25seSBiZSBhYmxlIHRvIHN0YXJ0
IHBpbmcgbG9hZHMuCisgICAgICAgIGNhc2UgRG9jdW1lbnQ6OkFib3V0VG9FbnRlckJhY2tGb3J3
YXJkQ2FjaGU6IHsKKyAgICAgICAgICAgIC8vIEEgcGFnZSBhYm91dCB0byBlbnRlciB0aGUgQmFj
a0ZvcndhcmRDYWNoZSBzaG91bGQgb25seSBiZSBhYmxlIHRvIHN0YXJ0IHBpbmcgbG9hZHMuCiAg
ICAgICAgICAgICBhdXRvKiBjYWNoZWRSZXNvdXJjZSA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24o
KS5yZXNvdXJjZUZvclJlcXVlc3QobG9hZGVyLT5yZXF1ZXN0KCksIGxvYWRlci0+ZnJhbWVMb2Fk
ZXIoKS0+ZnJhbWUoKS5wYWdlKCktPnNlc3Npb25JRCgpKTsKICAgICAgICAgICAgIEFTU0VSVChj
YWNoZWRSZXNvdXJjZSAmJiBDYWNoZWRSZXNvdXJjZTo6c2hvdWxkVXNlUGluZ0xvYWQoY2FjaGVk
UmVzb3VyY2UtPnR5cGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgY2FzZSBEb2N1bWVudDo6SW5QYWdlQ2FjaGU6Ci0gICAgICAgICAgICAvLyBBIHBhZ2UgaW4g
dGhlIFBhZ2VDYWNoZSBzaG91bGQgbm90IGJlIGFibGUgdG8gc3RhcnQgbG9hZHMuCisgICAgICAg
IGNhc2UgRG9jdW1lbnQ6OkluQmFja0ZvcndhcmRDYWNoZToKKyAgICAgICAgICAgIC8vIEEgcGFn
ZSBpbiB0aGUgQmFja0ZvcndhcmRDYWNoZSBzaG91bGQgbm90IGJlIGFibGUgdG8gc3RhcnQgbG9h
ZHMuCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCmluZGV4IGRm
ZmVkNDA4YzFkZWE4MDdiMWRhMmI1NDU5OTQ0YTRiNmRlNWMxN2MuLjlmMzhmOWViNDIzMGNmNWU4
MzcwZWU4NjA0MzM0NWViMmIxODJkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5oCkBAIC01MzksNyArNTM5LDcgQEAgY2xhc3MgRG9jdW1lbnRMb2FkZXIKIAogICAgIC8v
IFdlIHJldGFpbiBhbGwgdGhlIHJlY2VpdmVkIHJlc3BvbnNlcyBzbyB3ZSBjYW4gcGxheSBiYWNr
IHRoZQogICAgIC8vIFdlYlJlc291cmNlTG9hZERlbGVnYXRlIG1lc3NhZ2VzIGlmIHRoZSBpdGVt
IGlzIGxvYWRlZCBmcm9tIHRoZQotICAgIC8vIHBhZ2UgY2FjaGUuCisgICAgLy8gYmFjay9mb3J3
YXJkIGNhY2hlLgogICAgIFZlY3RvcjxSZXNvdXJjZVJlc3BvbnNlPiBtX3Jlc3BvbnNlczsKICAg
ICBib29sIG1fc3RvcFJlY29yZGluZ1Jlc3BvbnNlcyB7IGZhbHNlIH07CiAgICAgCkBAIC01Nzks
NyArNTc5LDYgQEAgY2xhc3MgRG9jdW1lbnRMb2FkZXIKIAogICAgIFZlY3RvcjxDdXN0b21IZWFk
ZXJGaWVsZHM+IG1fY3VzdG9tSGVhZGVyRmllbGRzOwogICAgIAotICAgIGJvb2wgbV9zdWJyZXNv
dXJjZUxvYWRlcnNBcmVQYWdlQ2FjaGVBY2NlcHRhYmxlIHsgZmFsc2UgfTsKICAgICBTaG91bGRP
cGVuRXh0ZXJuYWxVUkxzUG9saWN5IG1fc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSB7IFNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93IH07CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QXBwbGljYXRpb25DYWNoZUhvc3Q+IG1fYXBwbGljYXRpb25DYWNoZUhvc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlGcmFtZUxvYWRlckNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5RnJhbWVMb2FkZXJDbGllbnQuaAppbmRl
eCBlNTk2ZmEwM2UxMWNiZmNjYzE1NjZkZWZkYmY3NzVkODJiNWQzOThlLi4wOWNjZDVhMjI3Nzdm
Y2JlYjFhNzhlMWNlOTg4YzY2NDI2NTM0ZmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlGcmFtZUxvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgV0VCQ09S
RV9FWFBPUlQgRW1wdHlGcmFtZUxvYWRlckNsaWVudCA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVu
dCB7CiAKICAgICB2b2lkIG1ha2VSZXByZXNlbnRhdGlvbihEb2N1bWVudExvYWRlciopIGZpbmFs
IHsgfQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBmb3JjZUxheW91dE9uUmVz
dG9yZUZyb21QYWdlQ2FjaGUoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgZm9y
Y2VMYXlvdXRPblJlc3RvcmVGcm9tQmFja0ZvcndhcmRDYWNoZSgpIGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CiAjZW5kaWYKICAgICB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpIGZpbmFsIHsg
fQogCkBAIC0xNjQsNyArMTY0LDcgQEAgY2xhc3MgV0VCQ09SRV9FWFBPUlQgRW1wdHlGcmFtZUxv
YWRlckNsaWVudCA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CiAjZW5kaWYKICAgICB2b2lk
IHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKSBmaW5hbCB7IH0KIAotICAgIHZvaWQg
ZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRpZFJlc3RvcmVG
cm9tQmFja0ZvcndhcmRDYWNoZSgpIGZpbmFsIHsgfQogCiAgICAgdm9pZCBkaXNwYXRjaERpZEJl
Y29tZUZyYW1lc2V0KGJvb2wpIGZpbmFsIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAppbmRleCBjOTczZTE3NTJiMGU3YTlhMGUxOWEyODY3ZTM0YzE3MWYxNzRkYmZmLi5i
MjAzNzVhNTBkOWE0NWFkNTkxODkzOWFhNDRlYmZlZGUxZjg3NWY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgIkFYT2Jq
ZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgorI2luY2x1ZGUg
IkJhY2tGb3J3YXJkQ2FjaGUuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJCZWZvcmVVbmxvYWRFdmVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFBhZ2UuaCIK
QEAgLTkyLDcgKzkzLDYgQEAKICNpbmNsdWRlICJOYXZpZ2F0aW9uU2NoZWR1bGVyLmgiCiAjaW5j
bHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlQ2FjaGUuaCIK
ICNpbmNsdWRlICJQYWdlVHJhbnNpdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2VM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCkBAIC01NDgsOCArNTQ4
LDggQEAgYm9vbCBGcmFtZUxvYWRlcjo6Y2xvc2VVUkwoKQogICAgICAgICAvLyBJZiB0aGlzIGlz
IHRoZSBTVkdEb2N1bWVudCBvZiBhbiBTVkdJbWFnZSwgbm8gbmVlZCB0byBkaXNwYXRjaCBldmVu
dHMgb3IgcmVjYWxjU3R5bGUuCiAgICAgICAgIHVubG9hZEV2ZW50UG9saWN5ID0gVW5sb2FkRXZl
bnRQb2xpY3lOb25lOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFNob3VsZCBvbmx5IHNlbmQg
dGhlIHBhZ2VoaWRlIGV2ZW50IGhlcmUgaWYgdGhlIGN1cnJlbnQgZG9jdW1lbnQgZXhpc3RzIGFu
ZCBoYXMgbm90IGJlZW4gcGxhY2VkIGluIHRoZSBwYWdlIGNhY2hlLgotICAgICAgICB1bmxvYWRF
dmVudFBvbGljeSA9IGN1cnJlbnREb2N1bWVudCAmJiBjdXJyZW50RG9jdW1lbnQtPnBhZ2VDYWNo
ZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlID8gVW5sb2FkRXZlbnRQb2xpY3lV
bmxvYWRBbmRQYWdlSGlkZSA6IFVubG9hZEV2ZW50UG9saWN5VW5sb2FkT25seTsKKyAgICAgICAg
Ly8gU2hvdWxkIG9ubHkgc2VuZCB0aGUgcGFnZWhpZGUgZXZlbnQgaGVyZSBpZiB0aGUgY3VycmVu
dCBkb2N1bWVudCBleGlzdHMgYW5kIGhhcyBub3QgYmVlbiBwbGFjZWQgaW4gdGhlIGJhY2svZm9y
d2FyZCBjYWNoZS4KKyAgICAgICAgdW5sb2FkRXZlbnRQb2xpY3kgPSBjdXJyZW50RG9jdW1lbnQg
JiYgY3VycmVudERvY3VtZW50LT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6
Tm90SW5CYWNrRm9yd2FyZENhY2hlID8gVW5sb2FkRXZlbnRQb2xpY3lVbmxvYWRBbmRQYWdlSGlk
ZSA6IFVubG9hZEV2ZW50UG9saWN5VW5sb2FkT25seTsKICAgICB9CiAKICAgICBzdG9wTG9hZGlu
Zyh1bmxvYWRFdmVudFBvbGljeSk7CkBAIC02MzQsNyArNjM0LDcgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBib29sIGNsZWFyV2luZG93UHJvcGVydGll
cywgYm9vbAogICAgIGJvb2wgbmVlZGVkQ2xlYXIgPSBtX25lZWRzQ2xlYXI7CiAgICAgbV9uZWVk
c0NsZWFyID0gZmFsc2U7CiAKLSAgICBpZiAobmVlZGVkQ2xlYXIgJiYgbV9mcmFtZS5kb2N1bWVu
dCgpLT5wYWdlQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpJblBhZ2VDYWNoZSkgeworICAgIGlm
IChuZWVkZWRDbGVhciAmJiBtX2ZyYW1lLmRvY3VtZW50KCktPmJhY2tGb3J3YXJkQ2FjaGVTdGF0
ZSgpICE9IERvY3VtZW50OjpJbkJhY2tGb3J3YXJkQ2FjaGUpIHsKICAgICAgICAgbV9mcmFtZS5k
b2N1bWVudCgpLT5jYW5jZWxQYXJzaW5nKCk7CiAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+
c3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKICAgICAgICAgYm9vbCBoYWRMaXZpbmdSZW5kZXJUcmVl
ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5oYXNMaXZpbmdSZW5kZXJUcmVlKCk7CkBAIC02NTMsNyAr
NjUzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoRG9jdW1lbnQqIG5ld0RvY3VtZW50LCBi
b29sIGNsZWFyV2luZG93UHJvcGVydGllcywgYm9vbAogICAgIGlmIChjbGVhcldpbmRvd1Byb3Bl
cnRpZXMpIHsKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVdpbmRvd0Rp
c2NhcmRlZChtX2ZyYW1lLCBtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpKTsKICAgICAg
ICAgbV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cmVzZXRVbmxlc3NTdXNwZW5kZWRG
b3JEb2N1bWVudFN1c3BlbnNpb24oKTsKLSAgICAgICAgbV9mcmFtZS53aW5kb3dQcm94eSgpLmNs
ZWFySlNXaW5kb3dQcm94aWVzTm90TWF0Y2hpbmdET01XaW5kb3cobmV3RG9jdW1lbnQtPmRvbVdp
bmRvdygpLCBtX2ZyYW1lLmRvY3VtZW50KCktPnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6
OkFib3V0VG9FbnRlclBhZ2VDYWNoZSk7CisgICAgICAgIG1fZnJhbWUud2luZG93UHJveHkoKS5j
bGVhckpTV2luZG93UHJveGllc05vdE1hdGNoaW5nRE9NV2luZG93KG5ld0RvY3VtZW50LT5kb21X
aW5kb3coKSwgbV9mcmFtZS5kb2N1bWVudCgpLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBE
b2N1bWVudDo6QWJvdXRUb0VudGVyQmFja0ZvcndhcmRDYWNoZSk7CiAKICAgICAgICAgaWYgKHNo
b3VsZENsZWFyV2luZG93TmFtZShtX2ZyYW1lLCAqbmV3RG9jdW1lbnQpKQogICAgICAgICAgICAg
bV9mcmFtZS50cmVlKCkuc2V0TmFtZShudWxsQXRvbSgpKTsKQEAgLTE4MTQsNyArMTgxNCw3IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OnJlbG9hZChPcHRpb25TZXQ8UmVsb2FkT3B0aW9uPiBvcHRpb25z
KQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wQWxsTG9hZGVycyhDbGVhclByb3Zpc2lvbmFsSXRl
bVBvbGljeSBjbGVhclByb3Zpc2lvbmFsSXRlbVBvbGljeSwgU3RvcExvYWRpbmdQb2xpY3kgc3Rv
cExvYWRpbmdQb2xpY3kpCiB7Ci0gICAgaWYgKG1fZnJhbWUuZG9jdW1lbnQoKSAmJiBtX2ZyYW1l
LmRvY3VtZW50KCktPnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6OkluUGFnZUNhY2hlKQor
ICAgIGlmIChtX2ZyYW1lLmRvY3VtZW50KCkgJiYgbV9mcmFtZS5kb2N1bWVudCgpLT5iYWNrRm9y
d2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6SW5CYWNrRm9yd2FyZENhY2hlKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoc3RvcExvYWRpbmdQb2xpY3kgPT0gU3RvcExvYWRpbmdQb2xp
Y3k6OlByZXZlbnREdXJpbmdVbmxvYWRFdmVudHMgJiYgIWlzU3RvcExvYWRpbmdBbGxvd2VkKCkp
CkBAIC0xODUyLDcgKzE4NTIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wQWxsTG9hZGVycyhD
bGVhclByb3Zpc2lvbmFsSXRlbVBvbGljeSBjbGVhclByb3Zpc2lvbmFsSXRlbQogICAgIG1faW5T
dG9wQWxsTG9hZGVycyA9IGZhbHNlOyAgICAKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6c3RvcEZv
clBhZ2VDYWNoZSgpCit2b2lkIEZyYW1lTG9hZGVyOjpzdG9wRm9yQmFja0ZvcndhcmRDYWNoZSgp
CiB7CiAgICAgLy8gU3RvcCBwcm92aXNpb25hbCBsb2FkcyBpbiBzdWJmcmFtZXMgKFRoZSBvbmUg
aW4gdGhlIG1haW4gZnJhbWUgaXMgYWJvdXQgdG8gYmUgY29tbWl0dGVkKS4KICAgICBpZiAoIW1f
ZnJhbWUuaXNNYWluRnJhbWUoKSkgewpAQCAtMTg2Niw3ICsxODY2LDcgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6c3RvcEZvclBhZ2VDYWNoZSgpCiAgICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPnN0b3BM
b2FkaW5nKCk7CiAKICAgICBmb3IgKFJlZlB0cjxGcmFtZT4gY2hpbGQgPSBtX2ZyYW1lLnRyZWUo
KS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmco
KSkKLSAgICAgICAgY2hpbGQtPmxvYWRlcigpLnN0b3BGb3JQYWdlQ2FjaGUoKTsKKyAgICAgICAg
Y2hpbGQtPmxvYWRlcigpLnN0b3BGb3JCYWNrRm9yd2FyZENhY2hlKCk7CiAKICAgICAvLyBXZSBj
YW5jZWwgcGVuZGluZyBuYXZpZ2F0aW9ucyAmIHBvbGljeSBjaGVja3MgKmFmdGVyKiBjYW5jZWxs
aW5nIGxvYWRzIGJlY2F1c2UgY2FuY2VsbGluZyBsb2FkcyBtaWdodCBlbmQgdXAKICAgICAvLyBy
dW5uaW5nIHNjcmlwdCwgd2hpY2ggY291bGQgc2NoZWR1bGUgbmV3IG5hdmlnYXRpb25zLgpAQCAt
MjAxNiw3ICsyMDE2LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2Fk
KCkKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlOwogICAgIGlm
IChtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSAmJiBoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCkp
Ci0gICAgICAgIGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnRha2UoKmhpc3Rv
cnkoKS5wcm92aXNpb25hbEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOworICAgICAgICBjYWNoZWRQ
YWdlID0gQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xldG9uKCkudGFrZSgqaGlzdG9yeSgpLnByb3Zp
c2lvbmFsSXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7CiAKICAgICBMT0coQmFja0ZvcndhcmRDYWNo
ZSwgIldlYkNvcmVMb2FkaW5nICVzOiBBYm91dCB0byBjb21taXQgcHJvdmlzaW9uYWwgbG9hZCBm
cm9tIHByZXZpb3VzIFVSTCAnJXMnIHRvIG5ldyBVUkwgJyVzJyB3aXRoIGNhY2hlZCBwYWdlICVw
IiwgbV9mcmFtZS50cmVlKCkudW5pcXVlTmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksCiAg
ICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKSA/IG1fZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCkuc3Ry
aW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkudXRmOCgpLmRhdGEoKSA6ICIiLApAQCAtMjAy
Nyw3ICsyMDI3LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkK
ICAgICBpZiAoIW1fZnJhbWUudHJlZSgpLnBhcmVudCgpICYmIGhpc3RvcnkoKS5jdXJyZW50SXRl
bSgpICYmIGhpc3RvcnkoKS5jdXJyZW50SXRlbSgpICE9IGhpc3RvcnkoKS5wcm92aXNpb25hbEl0
ZW0oKSkgewogICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjYWNoZSB0aGUg
cGFnZSB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gaW50byB0aGUgYmFjay9mb3J3YXJkIGNh
Y2hlLgogICAgICAgICAvLyBXZSBhcmUgZG9pbmcgdGhpcyBoZXJlIGJlY2F1c2Ugd2Uga25vdyBm
b3Igc3VyZSB0aGF0IGEgbmV3IHBhZ2UgaXMgYWJvdXQgdG8gYmUgbG9hZGVkLgotICAgICAgICBQ
YWdlQ2FjaGU6OnNpbmdsZXRvbigpLmFkZElmQ2FjaGVhYmxlKCpoaXN0b3J5KCkuY3VycmVudEl0
ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOworICAgICAgICBCYWNrRm9yd2FyZENhY2hlOjpzaW5nbGV0
b24oKS5hZGRJZkNhY2hlYWJsZSgqaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCksIG1fZnJhbWUucGFn
ZSgpKTsKICAgICAgICAgCiAgICAgICAgIFdlYkNvcmU6OmpldHRpc29uRXhwZW5zaXZlT2JqZWN0
c09uVG9wTGV2ZWxOYXZpZ2F0aW9uKCk7CiAgICAgfQpAQCAtMjEwNCwxMSArMjEwNCwxMSBAQCB2
b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQogICAgICAgICAvLyBOb3Rl
LCBkaWRSZWNlaXZlRG9jVHlwZSBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQgZm9yIGNhY2hlZCBw
YWdlcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS81OTA2NzU4PiBmb3IgbW9yZSBkZXRhaWxzLgogICAg
ICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+
Y2hyb21lKCkuZGlkUmVjZWl2ZURvY1R5cGUobV9mcmFtZSk7Ci0gICAgICAgIG1fZnJhbWUuZG9j
dW1lbnQoKS0+cmVzdW1lKFJlYXNvbkZvclN1c3BlbnNpb246OlBhZ2VDYWNoZSk7CisgICAgICAg
IG1fZnJhbWUuZG9jdW1lbnQoKS0+cmVzdW1lKFJlYXNvbkZvclN1c3BlbnNpb246OkJhY2tGb3J3
YXJkQ2FjaGUpOwogCiAgICAgICAgIC8vIEZvcmNlIGEgbGF5b3V0IHRvIHVwZGF0ZSB2aWV3IHNp
emUgYW5kIHRoZXJlYnkgdXBkYXRlIHNjcm9sbGJhcnMuCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICAgICAgaWYgKCFtX2NsaWVudC5mb3JjZUxheW91dE9uUmVzdG9yZUZyb21QYWdlQ2Fj
aGUoKSkKKyAgICAgICAgaWYgKCFtX2NsaWVudC5mb3JjZUxheW91dE9uUmVzdG9yZUZyb21CYWNr
Rm9yd2FyZENhY2hlKCkpCiAgICAgICAgICAgICBtX2ZyYW1lLnZpZXcoKS0+Zm9yY2VMYXlvdXQo
KTsKICNlbHNlCiAgICAgICAgIG1fZnJhbWUudmlldygpLT5mb3JjZUxheW91dCgpOwpAQCAtMjMz
MCw3ICsyMzMwLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6b3BlbihDYWNoZWRGcmFtZUJhc2UmIGNh
Y2hlZEZyYW1lKQogICAgIGNsZWFyKGRvY3VtZW50LnB0cigpLCB0cnVlLCB0cnVlLCBjYWNoZWRG
cmFtZS5pc01haW5GcmFtZSgpKTsKIAogICAgIGRvY3VtZW50LT5hdHRhY2hUb0NhY2hlZEZyYW1l
KGNhY2hlZEZyYW1lKTsKLSAgICBkb2N1bWVudC0+c2V0UGFnZUNhY2hlU3RhdGUoRG9jdW1lbnQ6
Ok5vdEluUGFnZUNhY2hlKTsKKyAgICBkb2N1bWVudC0+c2V0QmFja0ZvcndhcmRDYWNoZVN0YXRl
KERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwogCiAgICAgbV9uZWVkc0NsZWFyID0g
dHJ1ZTsKICAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKQEAgLTIzNjAsNyArMjM2MCw3IEBAIHZv
aWQgRnJhbWVMb2FkZXI6Om9wZW4oQ2FjaGVkRnJhbWVCYXNlJiBjYWNoZWRGcmFtZSkKICAgICAK
ICAgICBtX2ZyYW1lLnNldERvY3VtZW50KGRvY3VtZW50LmNvcHlSZWYoKSk7CiAKLSAgICBkb2N1
bWVudC0+ZG9tV2luZG93KCktPnJlc3VtZUZyb21QYWdlQ2FjaGUoKTsKKyAgICBkb2N1bWVudC0+
ZG9tV2luZG93KCktPnJlc3VtZUZyb21CYWNrRm9yd2FyZENhY2hlKCk7CiAKICAgICB1cGRhdGVG
aXJzdFBhcnR5Rm9yQ29va2llcygpOwogCkBAIC0yODI4LDcgKzI4MjgsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpmcmFtZURldGFjaGVkKCkKICAgICAgICAgY2hlY2tDb21wbGV0ZW5lc3NOb3coKTsK
ICAgICB9CiAKLSAgICBpZiAobV9mcmFtZS5kb2N1bWVudCgpLT5wYWdlQ2FjaGVTdGF0ZSgpICE9
IERvY3VtZW50OjpJblBhZ2VDYWNoZSkgeworICAgIGlmIChtX2ZyYW1lLmRvY3VtZW50KCktPmJh
Y2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpJbkJhY2tGb3J3YXJkQ2FjaGUpIHsK
ICAgICAgICAgc3RvcEFsbExvYWRlcnNBbmRDaGVja0NvbXBsZXRlbmVzcygpOwogICAgICAgICBt
X2ZyYW1lLmRvY3VtZW50KCktPnN0b3BBY3RpdmVET01PYmplY3RzKCk7CiAgICAgfQpAQCAtMjg0
NCw4ICsyODQ0LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGV0YWNoRnJvbVBhcmVudCgpCiAgICAg
Y2xvc2VVUkwoKTsKICAgICBoaXN0b3J5KCkuc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRl
VG9JdGVtKGhpc3RvcnkoKS5jdXJyZW50SXRlbSgpKTsKICAgICBkZXRhY2hDaGlsZHJlbigpOwot
ICAgIGlmIChtX2ZyYW1lLmRvY3VtZW50KCktPnBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6
OkluUGFnZUNhY2hlKSB7Ci0gICAgICAgIC8vIHN0b3BBbGxMb2FkZXJzKCkgbmVlZHMgdG8gYmUg
Y2FsbGVkIGFmdGVyIGRldGFjaENoaWxkcmVuKCkgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCBpbiB0
aGUgcGFnZSBjYWNoZSwKKyAgICBpZiAobV9mcmFtZS5kb2N1bWVudCgpLT5iYWNrRm9yd2FyZENh
Y2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6SW5CYWNrRm9yd2FyZENhY2hlKSB7CisgICAgICAgIC8v
IHN0b3BBbGxMb2FkZXJzKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIGRldGFjaENoaWxkcmVu
KCkgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCBpbiB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLAogICAg
ICAgICAvLyBiZWNhdXNlIGRldGFjaGVkQ2hpbGRyZW4oKSB3aWxsIHRyaWdnZXIgdGhlIHVubG9h
ZCBldmVudCBoYW5kbGVycyBvZiBhbnkgY2hpbGQgZnJhbWVzLCBhbmQgdGhvc2UgZXZlbnQKICAg
ICAgICAgLy8gaGFuZGxlcnMgbWlnaHQgc3RhcnQgYSBuZXcgc3VicmVzb3VyY2UgbG9hZCBpbiB0
aGlzIGZyYW1lLgogICAgICAgICBzdG9wQWxsTG9hZGVycyhTaG91bGRDbGVhclByb3Zpc2lvbmFs
SXRlbSwgU3RvcExvYWRpbmdQb2xpY3k6OkFsd2F5c1N0b3BMb2FkaW5nKTsKQEAgLTMxODAsNyAr
MzE4MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlY2VpdmVkTWFpblJlc291cmNlRXJyb3IoY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAgICAgIGlmIChtX3N1Ym1pdHRlZEZvcm1VUkwg
PT0gbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5vcmlnaW5hbFJlcXVlc3RDb3B5KCkudXJs
KCkpCiAgICAgICAgICAgICBtX3N1Ym1pdHRlZEZvcm1VUkwgPSBVUkwoKTsKICAgICAgICAgICAg
IAotICAgICAgICAvLyBXZSBtaWdodCBoYXZlIG1hZGUgYSBwYWdlIGNhY2hlIGl0ZW0sIGJ1dCBu
b3cgd2UncmUgYmFpbGluZyBvdXQgZHVlIHRvIGFuIGVycm9yIGJlZm9yZSB3ZSBldmVyCisgICAg
ICAgIC8vIFdlIG1pZ2h0IGhhdmUgbWFkZSBhIGJhY2svZm9yd2FyZCBjYWNoZSBpdGVtLCBidXQg
bm93IHdlJ3JlIGJhaWxpbmcgb3V0IGR1ZSB0byBhbiBlcnJvciBiZWZvcmUgd2UgZXZlcgogICAg
ICAgICAvLyB0cmFuc2l0aW9uZWQgdG8gdGhlIG5ldyBwYWdlIChiZWZvcmUgV2ViRnJhbWVTdGF0
ZSA9PSBjb21taXQpLiAgVGhlIGdvYWwgaGVyZSBpcyB0byByZXN0b3JlIGFueSBzdGF0ZQogICAg
ICAgICAvLyBzbyB0aGF0IHRoZSBleGlzdGluZyB2aWV3ICh0aGF0IHdlbmV2ZXIgZ290IGZhciBl
bm91Z2ggdG8gcmVwbGFjZSkgY2FuIGNvbnRpbnVlIGJlaW5nIHVzZWQuCiAgICAgICAgIGhpc3Rv
cnkoKS5pbnZhbGlkYXRlQ3VycmVudEl0ZW1DYWNoZWRQYWdlKCk7CkBAIC0zMjMxLDcgKzMyMzEs
NyBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRQZXJmb3JtRnJhZ21lbnROYXZpZ2F0aW9uKGJv
b2wgaXNGb3JtU3VibWlzc2lvbiwgY29uc3QgUwogICAgIHJldHVybiAoIWlzRm9ybVN1Ym1pc3Np
b24gfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaHR0cE1ldGhvZCwgImdldCIpKQog
ICAgICAgICAmJiAhaXNSZWxvYWQobG9hZFR5cGUpCiAgICAgICAgICYmIGxvYWRUeXBlICE9IEZy
YW1lTG9hZFR5cGU6OlNhbWUKLSAgICAgICAgJiYgbV9mcmFtZS5kb2N1bWVudCgpLT5wYWdlQ2Fj
aGVTdGF0ZSgpICE9IERvY3VtZW50OjpJblBhZ2VDYWNoZQorICAgICAgICAmJiBtX2ZyYW1lLmRv
Y3VtZW50KCktPmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpJbkJhY2tGb3J3
YXJkQ2FjaGUKICAgICAgICAgJiYgIXNob3VsZFJlbG9hZChtX2ZyYW1lLmRvY3VtZW50KCktPnVy
bCgpLCB1cmwpCiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8ganVzdCBzY3JvbGwgaWYgYSBs
aW5rIGZyb20gd2l0aGluIGEKICAgICAgICAgLy8gZnJhbWVzZXQgaXMgdHJ5aW5nIHRvIHJlbG9h
ZCB0aGUgZnJhbWVzZXQgaW50byBfdG9wLgpAQCAtMzMxNSwxMyArMzMxNSwxMyBAQCB2b2lkIEZy
YW1lTG9hZGVyOjpkaXNwYXRjaFVubG9hZEV2ZW50cyhVbmxvYWRFdmVudFBvbGljeSB1bmxvYWRF
dmVudFBvbGljeSkKICAgICAgICAgaWYgKG1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRj
aGVkID09IFBhZ2VEaXNtaXNzYWxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICBpZiAodW5sb2Fk
RXZlbnRQb2xpY3kgPT0gVW5sb2FkRXZlbnRQb2xpY3lVbmxvYWRBbmRQYWdlSGlkZSkgewogICAg
ICAgICAgICAgICAgIG1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gUGFnZURp
c21pc3NhbFR5cGU6OlBhZ2VIaWRlOwotICAgICAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQo
KS0+ZG9tV2luZG93KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5wYWdlaGlkZUV2ZW50LCBtX2ZyYW1lLmRvY3VtZW50KCktPnBhZ2VDYWNo
ZVN0YXRlKCkgPT0gRG9jdW1lbnQ6OkFib3V0VG9FbnRlclBhZ2VDYWNoZSksIG1fZnJhbWUuZG9j
dW1lbnQoKSk7CisgICAgICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3co
KS0+ZGlzcGF0Y2hFdmVudChQYWdlVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnBhZ2VoaWRlRXZlbnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+YmFja0ZvcndhcmRDYWNoZVN0YXRl
KCkgPT0gRG9jdW1lbnQ6OkFib3V0VG9FbnRlckJhY2tGb3J3YXJkQ2FjaGUpLCBtX2ZyYW1lLmRv
Y3VtZW50KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhNRTogdXBkYXRl
IFBhZ2UgVmlzaWJpbGl0eSBzdGF0ZSBoZXJlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjc3MAogCi0gICAgICAgICAgICBpZiAobV9m
cmFtZS5kb2N1bWVudCgpLT5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VD
YWNoZSkgeworICAgICAgICAgICAgaWYgKG1fZnJhbWUuZG9jdW1lbnQoKS0+YmFja0ZvcndhcmRD
YWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSkgewogICAgICAg
ICAgICAgICAgIFJlZjxFdmVudD4gdW5sb2FkRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkudW5sb2FkRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxl
OjpObykpOwogICAgICAgICAgICAgICAgIC8vIFRoZSBEb2N1bWVudExvYWRlciAoYW5kIHRodXMg
aXRzIExvYWRUaW1pbmcpIG1pZ2h0IGdldCBkZXN0cm95ZWQKICAgICAgICAgICAgICAgICAvLyB3
aGlsZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQsIHNvIHByb3RlY3QgaXQgdG8gcHJldmVudCB3cml0
aW5nIHRoZSBlbmQKQEAgLTMzNDUsNyArMzM0NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpc3Bh
dGNoVW5sb2FkRXZlbnRzKFVubG9hZEV2ZW50UG9saWN5IHVubG9hZEV2ZW50UG9saWN5KQogICAg
IGlmICghbV9mcmFtZS5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9m
cmFtZS5kb2N1bWVudCgpLT5wYWdlQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpOb3RJblBhZ2VD
YWNoZSkKKyAgICBpZiAobV9mcmFtZS5kb2N1bWVudCgpLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUo
KSAhPSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBEb24ndCByZW1vdmUgZXZlbnQgbGlzdGVuZXJzIGZyb20gYSB0cmFuc2l0aW9uYWwg
ZW1wdHkgZG9jdW1lbnQgKHNlZSBidWcgMjg3MTYgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgpAQCAt
MzUwNSwxMyArMzUwNSwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5h
dmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZQogCiAgICAgaWYgKGlz
QmFja0ZvcndhcmRMb2FkVHlwZSh0eXBlKSkgewogICAgICAgICBhdXRvJiBkaWFnbm9zdGljTG9n
Z2luZ0NsaWVudCA9IG1fZnJhbWUucGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpOwot
ICAgICAgICBpZiAoaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpICYmIGhpc3RvcnkoKS5wcm92
aXNpb25hbEl0ZW0oKS0+aXNJblBhZ2VDYWNoZSgpKSB7Ci0gICAgICAgICAgICBkaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhSZXN1bHQoRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpwYWdlQ2FjaGVLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZXRyaWV2
YWxLZXkoKSwgRGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRQYXNzLCBTaG91bGRTYW1wbGU6Olllcyk7
CisgICAgICAgIGlmIChoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCkgJiYgaGlzdG9yeSgpLnBy
b3Zpc2lvbmFsSXRlbSgpLT5pc0luQmFja0ZvcndhcmRDYWNoZSgpKSB7CisgICAgICAgICAgICBk
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhSZXN1bHQoRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpiYWNrRm9yd2FyZENhY2hlS2V5KCksIERpYWdub3N0aWNMb2dn
aW5nS2V5czo6cmV0cmlldmFsS2V5KCksIERpYWdub3N0aWNMb2dnaW5nUmVzdWx0UGFzcywgU2hv
dWxkU2FtcGxlOjpZZXMpOwogICAgICAgICAgICAgbG9hZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNo
ZWRQYWdlKCk7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJjb250aW51ZUxv
YWRBZnRlck5hdmlnYXRpb25Qb2xpY3k6IGNhbid0IGNvbnRpbnVlIGxvYWRpbmcgZnJhbWUgYmVj
YXVzZSBpdCB3aWxsIGJlIGxvYWRlZCBmcm9tIGNhY2hlIChmcmFtZSA9ICVwLCBtYWluID0gJWQp
IiwgJm1fZnJhbWUsIG1fZnJhbWUuaXNNYWluRnJhbWUoKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubG9nRGlhZ25vc3Rp
Y01lc3NhZ2VXaXRoUmVzdWx0KERpYWdub3N0aWNMb2dnaW5nS2V5czo6cGFnZUNhY2hlS2V5KCks
IERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmV0cmlldmFsS2V5KCksIERpYWdub3N0aWNMb2dnaW5n
UmVzdWx0RmFpbCwgU2hvdWxkU2FtcGxlOjpZZXMpOworICAgICAgICBkaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhSZXN1bHQoRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpiYWNrRm9yd2FyZENhY2hlS2V5KCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmV0cmll
dmFsS2V5KCksIERpYWdub3N0aWNMb2dnaW5nUmVzdWx0RmFpbCwgU2hvdWxkU2FtcGxlOjpZZXMp
OwogICAgIH0KIAogICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gY29tcGxldGlvbkhhbmRs
ZXIgPSBbdGhpcywgcHJvdGVjdGVkRnJhbWUgPSBtYWtlUmVmKG1fZnJhbWUpXSAoKSBtdXRhYmxl
IHsKQEAgLTM2ODAsNyArMzY4MCw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVw
dExvYWRGb3JYRnJhbWVPcHRpb25zKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uCiB2b2lkIEZy
YW1lTG9hZGVyOjpsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKQogewogICAgIERv
Y3VtZW50TG9hZGVyKiBwcm92aXNpb25hbExvYWRlciA9IHByb3Zpc2lvbmFsRG9jdW1lbnRMb2Fk
ZXIoKTsKLSAgICBMT0coQmFja0ZvcndhcmRDYWNoZSwgIldlYkNvcmVQYWdlQ2FjaGU6IExvYWRp
bmcgcHJvdmlzaW9uYWwgRG9jdW1lbnRMb2FkZXIgJXAgd2l0aCBVUkwgJyVzJyBmcm9tIENhY2hl
ZFBhZ2UiLCBwcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCksIHByb3Zpc2lvbmFsRG9jdW1lbnRM
b2FkZXIoKS0+dXJsKCkuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgTE9HKEJhY2tGb3J3YXJkQ2FjaGUsICJGcmFtZUxvYWRlcjo6bG9hZFByb3Zp
c2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlIExvYWRpbmcgcHJvdmlzaW9uYWwgRG9jdW1lbnRMb2Fk
ZXIgJXAgd2l0aCBVUkwgJyVzJyBmcm9tIENhY2hlZFBhZ2UiLCBwcm92aXNpb25hbERvY3VtZW50
TG9hZGVyKCksIHByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nQ2VudGVy
RWxsaXBzaXplZFRvTGVuZ3RoKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBwcmVwYXJlRm9yTG9h
ZFN0YXJ0KCk7CiAKQEAgLTM3NjgsNyArMzc2OCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRE
aWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9t
CiAKICAgICBTZXRGb3JTY29wZTxMb2FkQ29udGludWluZ1N0YXRlPiBjb250aW51aW5nTG9hZEd1
YXJkKG1fY3VycmVudExvYWRDb250aW51aW5nU3RhdGUsIHNob3VsZFRyZWF0QXNDb250aW51aW5n
TG9hZCA9PSBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6OlllcyA/IExvYWRDb250aW51aW5n
U3RhdGU6OkNvbnRpbnVpbmdXaXRoSGlzdG9yeUl0ZW0gOiBMb2FkQ29udGludWluZ1N0YXRlOjpO
b3RDb250aW51aW5nKTsKIAotICAgIGlmIChDYWNoZWRQYWdlKiBjYWNoZWRQYWdlID0gUGFnZUNh
Y2hlOjpzaW5nbGV0b24oKS5nZXQoaXRlbSwgbV9mcmFtZS5wYWdlKCkpKSB7CisgICAgaWYgKENh
Y2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBCYWNrRm9yd2FyZENhY2hlOjpzaW5nbGV0b24oKS5nZXQo
aXRlbSwgbV9mcmFtZS5wYWdlKCkpKSB7CiAgICAgICAgIGF1dG8gZG9jdW1lbnRMb2FkZXIgPSBj
YWNoZWRQYWdlLT5kb2N1bWVudExvYWRlcigpOwogICAgICAgICBtX2NsaWVudC51cGRhdGVDYWNo
ZWREb2N1bWVudExvYWRlcigqZG9jdW1lbnRMb2FkZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5oCmluZGV4IGEzNzE2ZDllZmJiYTk4ZDQ2NGE5ZjlhMzQxOGI0OTY2MmNlOTMzY2Uu
LjViM2FjMTA0NWEzMGM4YjZiNzMyNjEyNTE3NDNkZjE4NjA5Y2IxMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgY2xhc3MgRnJhbWVMb2FkZXIg
ZmluYWwgewogICAgIHZvaWQgc3RvcEFsbExvYWRlcnNBbmRDaGVja0NvbXBsZXRlbmVzcygpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RvcEFsbExvYWRlcnMoQ2xlYXJQcm92aXNpb25hbEl0
ZW1Qb2xpY3kgPSBTaG91bGRDbGVhclByb3Zpc2lvbmFsSXRlbSwgU3RvcExvYWRpbmdQb2xpY3kg
PSBTdG9wTG9hZGluZ1BvbGljeTo6UHJldmVudER1cmluZ1VubG9hZEV2ZW50cyk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzdG9wRm9yVXNlckNhbmNlbChib29sIGRlZmVyQ2hlY2tMb2FkQ29t
cGxldGUgPSBmYWxzZSk7Ci0gICAgdm9pZCBzdG9wRm9yUGFnZUNhY2hlKCk7CisgICAgdm9pZCBz
dG9wRm9yQmFja0ZvcndhcmRDYWNoZSgpOwogICAgIHZvaWQgc3RvcCgpOwogICAgIHZvaWQgc3Rv
cExvYWRpbmcoVW5sb2FkRXZlbnRQb2xpY3kpOwogICAgIGJvb2wgY2xvc2VVUkwoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKaW5kZXggOGM3ZjE3NWYwOGM5ZDE0
YmQzZmYxNTJjMjYzMTYxYjAwZWZiYjFhNy4uOThkZjk0NWY1Mjg3ZDYxNzc0YjMyZDNmZWQ5NGM0
ZWVhOTcwZmVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgK
QEAgLTEyOSw3ICsxMjksNyBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBGcmFtZUxvYWRlckNsaWVu
dCB7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY2xpZW50IGZvcmNlZCB0aGUgbGF5b3V0LgotICAgIHZpcnR1YWwgYm9vbCBmb3JjZUxheW91
dE9uUmVzdG9yZUZyb21QYWdlQ2FjaGUoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGZvcmNlTGF5
b3V0T25SZXN0b3JlRnJvbUJhY2tGb3J3YXJkQ2FjaGUoKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0
dWFsIHZvaWQgZm9yY2VMYXlvdXRGb3JOb25IVE1MKCkgPSAwOwogCkBAIC0yNzgsNyArMjc4LDcg
QEAgY2xhc3MgV0VCQ09SRV9FWFBPUlQgRnJhbWVMb2FkZXJDbGllbnQgewogI2VuZGlmCiAgICAg
dmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKSA9IDA7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlc3RvcmVGcm9tQmFja0ZvcndhcmRDYWNoZSgpID0gMDsKIAogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEJlY29tZUZyYW1lc2V0KGJvb2wpID0gMDsgLy8gQ2FuIGNoYW5n
ZSBkdWUgdG8gbmF2aWdhdGlvbiBvciBET00gbW9kaWZpY2F0aW9uLgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAppbmRleCAwNmE3MTRmYWJiM2JhMGE3ZjEy
NWUwMmUzZjA2ODA2Y2YzY2EzMThkLi42NGYxOTEzMWZiZDNiMDQ4ZGI1MmZmOTI4ODA1ZGRiMzc4
NTljYzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIaXN0b3J5
Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUg
IkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hlZFBhZ2UuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgpAQCAtNDQsNyArNDUsNiBAQAogI2luY2x1ZGUgIkhpc3RvcnlJdGVt
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQ
YWdlQ2FjaGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2guaCIK
QEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6c2F2ZVNjcm9sbFBvc2l0
aW9uQW5kVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQogICAgIGlmICghaXRlbSB8
fCAhZnJhbWVWaWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZS5kb2N1bWVu
dCgpLT5wYWdlQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSkKKyAgICBp
ZiAobV9mcmFtZS5kb2N1bWVudCgpLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVu
dDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKQogICAgICAgICBpdGVtLT5zZXRTY3JvbGxQb3NpdGlv
bihmcmFtZVZpZXctPmNhY2hlZFNjcm9sbFBvc2l0aW9uKCkpOwogICAgIGVsc2UKICAgICAgICAg
aXRlbS0+c2V0U2Nyb2xsUG9zaXRpb24oZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKQEAg
LTEzNyw5ICsxMzcsOSBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3JlU2Nyb2xsUG9z
aXRpb25BbmRWaWV3U3RhdGUoKQogICAgIGF1dG8gdmlldyA9IG1ha2VSZWZQdHIobV9mcmFtZS52
aWV3KCkpOwogCiAgICAgLy8gRklYTUU6IFRoZXJlIGlzIHNvbWUgc2Nyb2xsaW5nIHJlbGF0ZWQg
d29yayB0aGF0IG5lZWRzIHRvIGhhcHBlbiB3aGVuZXZlciBhIHBhZ2UgZ29lcyBpbnRvIHRoZQot
ICAgIC8vIHBhZ2UgY2FjaGUgYW5kIHNpbWlsYXIgd29yayB0aGF0IG5lZWRzIHRvIG9jY3VyIHdo
ZW4gaXQgY29tZXMgb3V0LiBUaGlzIGlzIHdoZXJlIHdlIGRvIHRoZSB3b3JrCisgICAgLy8gYmFj
ay9mb3J3YXJkIGNhY2hlIGFuZCBzaW1pbGFyIHdvcmsgdGhhdCBuZWVkcyB0byBvY2N1ciB3aGVu
IGl0IGNvbWVzIG91dC4gVGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgd29yawogICAgIC8vIHRoYXQg
bmVlZHMgdG8gaGFwcGVuIHdoZW4gd2UgZXhpdCwgYW5kIHRoZSB3b3JrIHRoYXQgbmVlZHMgdG8g
aGFwcGVuIHdoZW4gd2UgZW50ZXIgaXMgaW4KLSAgICAvLyBEb2N1bWVudDo6c2V0SXNJblBhZ2VD
YWNoZShib29sKS4gSXQgd291bGQgYmUgbmljZSBpZiB0aGVyZSB3YXMgbW9yZSBzeW1tZXRyeSBp
biB0aGVzZSBzcG90cy4KKyAgICAvLyBEb2N1bWVudDo6c2V0SXNJbkJhY2tGb3J3YXJkQ2FjaGUo
Ym9vbCkuIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlcmUgd2FzIG1vcmUgc3ltbWV0cnkgaW4gdGhl
c2Ugc3BvdHMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk4Njk4CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFn
ZSgpOwpAQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OmludmFsaWRh
dGVDdXJyZW50SXRlbUNhY2hlZFBhZ2UoKQogICAgIGlmICghY3VycmVudEl0ZW0oKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgLy8gV2hlbiB3ZSBhcmUgcHJlLWNvbW1pdCwgdGhlIGN1cnJlbnRJ
dGVtIGlzIHdoZXJlIGFueSBwYWdlIGNhY2hlIGRhdGEgcmVzaWRlcy4KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkudGFr
ZSgqY3VycmVudEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOworICAgIC8vIFdoZW4gd2UgYXJlIHBy
ZS1jb21taXQsIHRoZSBjdXJyZW50SXRlbSBpcyB3aGVyZSBhbnkgYmFjay9mb3J3YXJkIGNhY2hl
IGRhdGEgcmVzaWRlcy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFn
ZSA9IEJhY2tGb3J3YXJkQ2FjaGU6OnNpbmdsZXRvbigpLnRha2UoKmN1cnJlbnRJdGVtKCksIG1f
ZnJhbWUucGFnZSgpKTsKICAgICBpZiAoIWNhY2hlZFBhZ2UpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OmludmFsaWRhdGVDdXJy
ZW50SXRlbUNhY2hlZFBhZ2UoKQogICAgIAogICAgIEFTU0VSVChjYWNoZWRQYWdlLT5kb2N1bWVu
dCgpID09IG1fZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAgaWYgKGNhY2hlZFBhZ2UtPmRvY3VtZW50
KCkgPT0gbV9mcmFtZS5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGNhY2hlZFBhZ2UtPmRvY3VtZW50
KCktPnNldFBhZ2VDYWNoZVN0YXRlKERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSk7CisgICAgICAg
IGNhY2hlZFBhZ2UtPmRvY3VtZW50KCktPnNldEJhY2tGb3J3YXJkQ2FjaGVTdGF0ZShEb2N1bWVu
dDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKICAgICAgICAgY2FjaGVkUGFnZS0+Y2xlYXIoKTsK
ICAgICB9CiB9CkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBk
YXRlRm9yUmVsb2FkKCkKICAgICBMT0coSGlzdG9yeSwgIkhpc3RvcnlDb250cm9sbGVyICVwIHVw
ZGF0ZUZvclJlbG9hZDogVXBkYXRpbmcgSGlzdG9yeSBmb3IgcmVsb2FkIGluIGZyYW1lICVwICht
YWluIGZyYW1lICVkKSAlcyIsIHRoaXMsICZtX2ZyYW1lLCBtX2ZyYW1lLmlzTWFpbkZyYW1lKCks
IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSA/IG1fZnJhbWUubG9hZGVyKCkuZG9j
dW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSA6ICIiKTsKIAogICAg
IGlmIChtX2N1cnJlbnRJdGVtKSB7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVt
b3ZlKCptX2N1cnJlbnRJdGVtKTsKKyAgICAgICAgQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xldG9u
KCkucmVtb3ZlKCptX2N1cnJlbnRJdGVtKTsKICAgICAKICAgICAgICAgaWYgKG1fZnJhbWUubG9h
ZGVyKCkubG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlOjpSZWxvYWQgfHwgbV9mcmFtZS5sb2Fk
ZXIoKS5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGU6OlJlbG9hZEZyb21PcmlnaW4pCiAgICAg
ICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SXRl
bS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAppbmRleCBlMzEzMWNjZGRiYzA0YmVmMmNlNmQxNjY3MTQ2
MWY0Y2VjODVkOGRlLi44OTljYmE0Zjk3NWUyY2YwYmNlZDI1OTdiNzQyZTZhZWUyNDViZmUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5jcHAKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjptYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JgogICAgIH0KIH0KIAotYm9vbCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Y2FuQ2FjaGVJblBhZ2VD
YWNoZSgpCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpjYW5DYWNoZUluQmFja0ZvcndhcmRD
YWNoZSgpCiB7CiAgICAgcmV0dXJuICFhcHBsaWNhdGlvbkNhY2hlKCkgJiYgIWNhbmRpZGF0ZUFw
cGxpY2F0aW9uQ2FjaGVHcm91cCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaAppbmRleCBlMDk0ZDA4NGVlOTRhYmQ4
NWQ2NmQzYTRmNGU1ODgxNTM3MThhMTQwLi41YjJhYTFjNjFjOGNkNmE3OWU3MWFmMzc2ZDdkZGVk
NDI5MzdmODhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuaApAQCAtMTA1LDcgKzEwNSw3IEBAIGNsYXNzIEFwcGxpY2F0
aW9uQ2FjaGVIb3N0IHsKICAgICBib29sIG1heWJlTG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VS
ZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBSZWZQdHI8U2hhcmVk
QnVmZmVyPiYpOwogICAgIHZvaWQgbWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4mKTsKIAotICAgIGJvb2wgY2FuQ2FjaGVJblBhZ2VDYWNoZSgpOwor
ICAgIGJvb2wgY2FuQ2FjaGVJbkJhY2tGb3J3YXJkQ2FjaGUoKTsKIAogICAgIFN0YXR1cyBzdGF0
dXMoKSBjb25zdDsKICAgICBib29sIHVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKaW5kZXggNGIxNmY1OTc2MWQ4Yzc1YTZmMGJhMDIx
ZGJjMjAzMzQwODdlZWUwOS4uNjk2YWQ4YjQ5YTBkZjY0MzQ1YmQxZGI3Njc4MjVmNmQwOGRhNDc4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3Bw
CkBAIC0xOTUsMjMgKzE5NSwyMyBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpsb2FkKENhY2hlZFJl
c291cmNlTG9hZGVyJiBjYWNoZWRSZXNvdXJjZUxvYWRlcikKICAgICB9CiAgICAgRnJhbWUmIGZy
YW1lID0gKmNhY2hlZFJlc291cmNlTG9hZGVyLmZyYW1lKCk7CiAKLSAgICAvLyBQcmV2ZW50IG5l
dyBsb2FkcyBpZiB3ZSBhcmUgaW4gdGhlIFBhZ2VDYWNoZSBvciBiZWluZyBhZGRlZCB0byB0aGUg
UGFnZUNhY2hlLgorICAgIC8vIFByZXZlbnQgbmV3IGxvYWRzIGlmIHdlIGFyZSBpbiB0aGUgQmFj
a0ZvcndhcmRDYWNoZSBvciBiZWluZyBhZGRlZCB0byB0aGUgQmFja0ZvcndhcmRDYWNoZS4KICAg
ICAvLyBXZSBxdWVyeSB0aGUgdG9wIGRvY3VtZW50IGJlY2F1c2UgbmV3IGZyYW1lcyBtYXkgYmUg
Y3JlYXRlZCBpbiBwYWdlaGlkZSBldmVudCBoYW5kbGVycwotICAgIC8vIGFuZCB0aGVpciBwYWdl
Q2FjaGVTdGF0ZSB3aWxsIG5vdCByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgYWJvdXQg
dG8gZW50ZXIgcGFnZQorICAgIC8vIGFuZCB0aGVpciBiYWNrRm9yd2FyZENhY2hlU3RhdGUgd2ls
bCBub3QgcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIGFib3V0IHRvIGVudGVyIHBhZ2UK
ICAgICAvLyBjYWNoZS4KICAgICBpZiAoYXV0byogdG9wRG9jdW1lbnQgPSBmcmFtZS5tYWluRnJh
bWUoKS5kb2N1bWVudCgpKSB7Ci0gICAgICAgIHN3aXRjaCAodG9wRG9jdW1lbnQtPnBhZ2VDYWNo
ZVN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGU6CisgICAg
ICAgIHN3aXRjaCAodG9wRG9jdW1lbnQtPmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpKSB7CisgICAg
ICAgIGNhc2UgRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZToKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIERvY3VtZW50OjpBYm91dFRvRW50ZXJQYWdlQ2FjaGU6CisgICAg
ICAgIGNhc2UgRG9jdW1lbnQ6OkFib3V0VG9FbnRlckJhY2tGb3J3YXJkQ2FjaGU6CiAgICAgICAg
ICAgICAvLyBCZWFjb25zIGFyZSBhbGxvd2VkIHRvIGdvIHRocm91Z2ggaW4gJ3BhZ2VoaWRlJyBl
dmVudCBoYW5kbGVycy4KICAgICAgICAgICAgIGlmIChzaG91bGRVc2VQaW5nTG9hZCh0eXBlKCkp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxM
T1dFRCgibG9hZDogQWJvdXQgdG8gZW50ZXIgcGFnZSBjYWNoZSAoZnJhbWUgPSAlcCkiLCAmZnJh
bWUpOworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgibG9hZDogQWJvdXQgdG8g
ZW50ZXIgYmFjay9mb3J3YXJkIGNhY2hlIChmcmFtZSA9ICVwKSIsICZmcmFtZSk7CiAgICAgICAg
ICAgICBmYWlsQmVmb3JlU3RhcnRpbmcoKTsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y2FzZSBEb2N1bWVudDo6SW5QYWdlQ2FjaGU6Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9B
TExPV0VEKCJsb2FkOiBBbHJlYWR5IGluIHBhZ2UgY2FjaGUgKGZyYW1lID0gJXApIiwgJmZyYW1l
KTsKKyAgICAgICAgY2FzZSBEb2N1bWVudDo6SW5CYWNrRm9yd2FyZENhY2hlOgorICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgibG9hZDogQWxyZWFkeSBpbiBiYWNrL2ZvcndhcmQg
Y2FjaGUgKGZyYW1lID0gJXApIiwgJmZyYW1lKTsKICAgICAgICAgICAgIGZhaWxCZWZvcmVTdGFy
dGluZygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKaW5kZXggNGM1NzFlYmYzODU5M2QzZmI4OGRlMTBiYTcwOTdhNzc3YjBhYmQ0MC4u
YzcwZjMzNzVjZjI4NzliNTA3OGU4NzA0YmM0N2QyYzRjNDMzNTRmMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcApAQCAtNTU4LDI1ICs1NTgsMjUgQEAgdm9pZCBET01XaW5kb3c6OnJlc2V0
VW5sZXNzU3VzcGVuZGVkRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkKICAgICB3aWxsRGVzdHJveURv
Y3VtZW50SW5GcmFtZSgpOwogfQogCi12b2lkIERPTVdpbmRvdzo6c3VzcGVuZEZvclBhZ2VDYWNo
ZSgpCit2b2lkIERPTVdpbmRvdzo6c3VzcGVuZEZvckJhY2tGb3J3YXJkQ2FjaGUoKQogewogICAg
IFNldEZvclNjb3BlPGJvb2w+IGlzU3VzcGVuZGluZ09ic2VydmVycyhtX2lzU3VzcGVuZGluZ09i
c2VydmVycywgdHJ1ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZnJhbWUoKSk7CiAKICAgICBmb3Ig
KGF1dG8qIG9ic2VydmVyIDogY29weVRvVmVjdG9yKG1fb2JzZXJ2ZXJzKSkgewogICAgICAgICBp
ZiAobV9vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpKQotICAgICAgICAgICAgb2JzZXJ2ZXIt
PnN1c3BlbmRGb3JQYWdlQ2FjaGUoKTsKKyAgICAgICAgICAgIG9ic2VydmVyLT5zdXNwZW5kRm9y
QmFja0ZvcndhcmRDYWNoZSgpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVChmcmFtZSgpKTsK
IAogICAgIG1fc3VzcGVuZGVkRm9yRG9jdW1lbnRTdXNwZW5zaW9uID0gdHJ1ZTsKIH0KIAotdm9p
ZCBET01XaW5kb3c6OnJlc3VtZUZyb21QYWdlQ2FjaGUoKQordm9pZCBET01XaW5kb3c6OnJlc3Vt
ZUZyb21CYWNrRm9yd2FyZENhY2hlKCkKIHsKICAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogY29w
eVRvVmVjdG9yKG1fb2JzZXJ2ZXJzKSkgewogICAgICAgICBpZiAobV9vYnNlcnZlcnMuY29udGFp
bnMob2JzZXJ2ZXIpKQotICAgICAgICAgICAgb2JzZXJ2ZXItPnJlc3VtZUZyb21QYWdlQ2FjaGUo
KTsKKyAgICAgICAgICAgIG9ic2VydmVyLT5yZXN1bWVGcm9tQmFja0ZvcndhcmRDYWNoZSgpOwog
ICAgIH0KIAogICAgIG1fc3VzcGVuZGVkRm9yRG9jdW1lbnRTdXNwZW5zaW9uID0gZmFsc2U7CkBA
IC04NzIsNyArODcyLDcgQEAgRXhjZXB0aW9uT3I8U3RvcmFnZSo+IERPTVdpbmRvdzo6bG9jYWxT
dG9yYWdlKCkKICAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2UuZ2V0KCk7CiB9CiAKLUV4Y2VwdGlv
bk9yPHZvaWQ+IERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBE
T01XaW5kb3cmIGluY3VtYmVudFdpbmRvdywgSlNDOjpKU1ZhbHVlIG1lc3NhZ2VWYWx1ZSwgY29u
c3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
Pj4mJiB0cmFuc2ZlcikKK0V4Y2VwdGlvbk9yPHZvaWQ+IERPTVdpbmRvdzo6cG9zdE1lc3NhZ2Uo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRE9NV2luZG93JiBpbmN1
bWJlbnRXaW5kb3csIEpTQzo6SlNWYWx1ZSBtZXNzYWdlVmFsdWUsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0T3JpZ2luLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+JiYgdHJhbnNmZXIp
CiB7CiAgICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTg5NSw3ICs4OTUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01XaW5kb3c6
OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBpbmN1bQogICAg
IH0KIAogICAgIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBwb3J0czsKLSAgICBhdXRvIG1l
c3NhZ2VEYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIG1lc3NhZ2VW
YWx1ZSwgV1RGTW92ZSh0cmFuc2ZlciksIHBvcnRzLCBTZXJpYWxpemF0aW9uQ29udGV4dDo6V2lu
ZG93UG9zdE1lc3NhZ2UpOworICAgIGF1dG8gbWVzc2FnZURhdGEgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBtZXNzYWdlVmFsdWUsIFdURk1vdmUo
dHJhbnNmZXIpLCBwb3J0cywgU2VyaWFsaXphdGlvbkNvbnRleHQ6OldpbmRvd1Bvc3RNZXNzYWdl
KTsKICAgICBpZiAobWVzc2FnZURhdGEuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBt
ZXNzYWdlRGF0YS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKQEAgLTkyMSw3ICs5MjEsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBET01XaW5kb3c6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgRE9NV2luZG93JiBpbmN1bQogICAgIGF1dG8qIHRpbWVyID0gbmV3IFBvc3RNZXNzYWdlVGlt
ZXIoKnRoaXMsIFdURk1vdmUobWVzc2FnZSksIHNvdXJjZU9yaWdpbiwgV1RGTW92ZShpbmN1bWJl
bnRXaW5kb3dQcm94eSksIFdURk1vdmUodGFyZ2V0KSwgV1RGTW92ZShzdGFja1RyYWNlKSk7CiAg
ICAgdGltZXItPnN0YXJ0T25lU2hvdCgwX3MpOwogCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRQb3N0TWVzc2FnZSgqZnJhbWUoKSwgKnRpbWVyLCBzdGF0ZSk7CisgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQb3N0TWVzc2FnZSgqZnJhbWUoKSwgKnRpbWVyLCBsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNzA1LDcgKzE3MDUs
NyBAQCB2b2lkIERPTVdpbmRvdzo6cmVzaXplVG8oZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkg
Y29uc3QKICAgICBwYWdlLT5jaHJvbWUoKS5zZXRXaW5kb3dSZWN0KGFkanVzdFdpbmRvd1JlY3Qo
KnBhZ2UsIHVwZGF0ZSkpOwogfQogCi1FeGNlcHRpb25PcjxpbnQ+IERPTVdpbmRvdzo6c2V0VGlt
ZW91dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rp
b24+IGFjdGlvbiwgaW50IHRpbWVvdXQsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
PiYmIGFyZ3VtZW50cykKK0V4Y2VwdGlvbk9yPGludD4gRE9NV2luZG93OjpzZXRUaW1lb3V0KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9u
PiBhY3Rpb24sIGludCB0aW1lb3V0LCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4m
JiBhcmd1bWVudHMpCiB7CiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICBpZiAoIWNvbnRleHQpCkBAIC0xNzMwLDcgKzE3MzAsNyBAQCB2b2lkIERPTVdp
bmRvdzo6Y2xlYXJUaW1lb3V0KGludCB0aW1lb3V0SWQpCiAgICAgRE9NVGltZXI6OnJlbW92ZUJ5
SWQoKmNvbnRleHQsIHRpbWVvdXRJZCk7CiB9CiAKLUV4Y2VwdGlvbk9yPGludD4gRE9NV2luZG93
OjpzZXRJbnRlcnZhbChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHN0ZDo6dW5pcXVlX3B0cjxTY2hl
ZHVsZWRBY3Rpb24+IGFjdGlvbiwgaW50IHRpbWVvdXQsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+PiYmIGFyZ3VtZW50cykKK0V4Y2VwdGlvbk9yPGludD4gRE9NV2luZG93OjpzZXRJ
bnRlcnZhbChKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgc3RkOjp1bmlxdWVfcHRyPFNjaGVk
dWxlZEFjdGlvbj4gYWN0aW9uLCBpbnQgdGltZW91dCwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6
VW5rbm93bj4+JiYgYXJndW1lbnRzKQogewogICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtMjA1Nyw3ICsyMDU3LDcgQEAg
dm9pZCBET01XaW5kb3c6OmRlY3JlbWVudFNjcm9sbEV2ZW50TGlzdGVuZXJzQ291bnQoKQogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CiAgICAgaWYgKCEtLW1fc2Ny
b2xsRXZlbnRMaXN0ZW5lckNvdW50ICYmIGRvY3VtZW50ID09ICZkb2N1bWVudC0+dG9wRG9jdW1l
bnQoKSkgewogICAgICAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgICAgICBp
ZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSAmJiBkb2N1bWVudC0+cGFnZUNhY2hlU3RhdGUoKSA9
PSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpCisgICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+
cGFnZSgpICYmIGRvY3VtZW50LT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6
Tm90SW5CYWNrRm9yd2FyZENhY2hlKQogICAgICAgICAgICAgZnJhbWUtPnBhZ2UoKS0+Y2hyb21l
KCkuY2xpZW50KCkuc2V0TmVlZHNTY3JvbGxOb3RpZmljYXRpb25zKCpmcmFtZSwgZmFsc2UpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IDBkYTRmYjAzYjAyNjFjMDhjODc2
M2I4YzhlMzVkNWE3ZDA3NjM4NGUuLjU4NzI5MmRkMGZhYWVkZmYwNjcwOTJmM2FlOWY5ZmNlNDk4
ODg5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtNDYsNyArNDYsNiBAQCBjbGFzcyBD
YWxsRnJhbWU7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTVmFsdWU7CiB0ZW1wbGF0ZTx0eXBl
bmFtZT4gY2xhc3MgU3Ryb25nOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogfQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjMsOCArMTIyLDggQEAgY2xhc3MgRE9NV2luZG93IGZp
bmFsCiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5PYnNlcnZlcigpIHsgfQogCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kRm9yUGFnZUNhY2hlKCkgeyB9Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCByZXN1bWVGcm9tUGFnZUNhY2hlKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
dXNwZW5kRm9yQmFja0ZvcndhcmRDYWNoZSgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVz
dW1lRnJvbUJhY2tGb3J3YXJkQ2FjaGUoKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxE
ZXN0cm95R2xvYmFsT2JqZWN0SW5DYWNoZWRGcmFtZSgpIHsgfQogICAgICAgICB2aXJ0dWFsIHZv
aWQgd2lsbERlc3Ryb3lHbG9iYWxPYmplY3RJbkZyYW1lKCkgeyB9CiAgICAgICAgIHZpcnR1YWwg
dm9pZCB3aWxsRGV0YWNoR2xvYmFsT2JqZWN0RnJvbUZyYW1lKCkgeyB9CkBAIC0xMzQsOCArMTMz
LDggQEAgY2xhc3MgRE9NV2luZG93IGZpbmFsCiAgICAgdm9pZCB1bnJlZ2lzdGVyT2JzZXJ2ZXIo
T2JzZXJ2ZXImKTsKIAogICAgIHZvaWQgcmVzZXRVbmxlc3NTdXNwZW5kZWRGb3JEb2N1bWVudFN1
c3BlbnNpb24oKTsKLSAgICB2b2lkIHN1c3BlbmRGb3JQYWdlQ2FjaGUoKTsKLSAgICB2b2lkIHJl
c3VtZUZyb21QYWdlQ2FjaGUoKTsKKyAgICB2b2lkIHN1c3BlbmRGb3JCYWNrRm9yd2FyZENhY2hl
KCk7CisgICAgdm9pZCByZXN1bWVGcm9tQmFja0ZvcndhcmRDYWNoZSgpOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgRnJhbWUqIGZyYW1lKCkgY29uc3QgZmluYWw7CiAKQEAgLTI1MSw3ICsyNTAsNyBA
QCBjbGFzcyBET01XaW5kb3cgZmluYWwKIAogICAgIFN0cmluZyBjcm9zc0RvbWFpbkFjY2Vzc0Vy
cm9yTWVzc2FnZShjb25zdCBET01XaW5kb3cmIGFjdGl2ZVdpbmRvdywgSW5jbHVkZVRhcmdldE9y
aWdpbik7CiAKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0
ZSYsIERPTVdpbmRvdyYgaW5jdW1iZW50V2luZG93LCBKU0M6OkpTVmFsdWUgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
Pj4mJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gcG9zdE1lc3NhZ2UoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIERPTVdpbmRvdyYgaW5jdW1iZW50V2luZG93LCBKU0M6OkpTVmFsdWUgbWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0Pj4mJik7CiAgICAgdm9pZCBwb3N0TWVzc2FnZVRpbWVyRmlyZWQoUG9zdE1lc3NhZ2VUaW1l
ciYpOwogCiAgICAgdm9pZCBsYW5ndWFnZXNDaGFuZ2VkKCk7CkBAIC0yNzAsOSArMjY5LDkgQEAg
Y2xhc3MgRE9NV2luZG93IGZpbmFsCiAgICAgVmlzdWFsVmlld3BvcnQmIHZpc3VhbFZpZXdwb3J0
KCk7CiAKICAgICAvLyBUaW1lcnMKLSAgICBFeGNlcHRpb25PcjxpbnQ+IHNldFRpbWVvdXQoSlND
OjpFeGVjU3RhdGUmLCBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiwgaW50IHRpbWVv
dXQsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50cyk7CisgICAg
RXhjZXB0aW9uT3I8aW50PiBzZXRUaW1lb3V0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBzdGQ6OnVu
aXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiwgaW50IHRpbWVvdXQsIFZlY3RvcjxKU0M6OlN0cm9u
ZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50cyk7CiAgICAgdm9pZCBjbGVhclRpbWVvdXQoaW50
IHRpbWVvdXRJZCk7Ci0gICAgRXhjZXB0aW9uT3I8aW50PiBzZXRJbnRlcnZhbChKU0M6OkV4ZWNT
dGF0ZSYsIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+LCBpbnQgdGltZW91dCwgVmVj
dG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKTsKKyAgICBFeGNlcHRp
b25PcjxpbnQ+IHNldEludGVydmFsKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBzdGQ6OnVuaXF1ZV9w
dHI8U2NoZWR1bGVkQWN0aW9uPiwgaW50IHRpbWVvdXQsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+PiYmIGFyZ3VtZW50cyk7CiAgICAgdm9pZCBjbGVhckludGVydmFsKGludCB0aW1l
b3V0SWQpOwogCiAgICAgaW50IHJlcXVlc3RBbmltYXRpb25GcmFtZShSZWY8UmVxdWVzdEFuaW1h
dGlvbkZyYW1lQ2FsbGJhY2s+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDFh
NTM1NGY4NTYyZmI5ZjZlNTEwNmUzZGNhMzU5YjEzMzJiNGRiNTcuLjViY2U5NGZkZWVhNmJkMmY0
NjNiNmRlODM4OTkyOTZlNDM4ZjBmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAg
LTk2LDcgKzk2LDcgQEAgdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7CiAgICAgW0VuYWJs
ZWRCeVNldHRpbmc9cmVxdWVzdElkbGVDYWxsYmFja10gdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRs
ZUNhbGxiYWNrKElkbGVSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2ssIG9wdGlvbmFsIElkbGVSZXF1
ZXN0T3B0aW9ucyBvcHRpb25zKTsKICAgICBbRW5hYmxlZEJ5U2V0dGluZz1yZXF1ZXN0SWRsZUNh
bGxiYWNrXSB2b2lkIGNhbmNlbElkbGVDYWxsYmFjayh1bnNpZ25lZCBsb25nIGhhbmRsZSk7CiAK
LSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlJkluY3VtYmVudFdpbmRvdywgRG9Ob3RDaGVja1NlY3Vy
aXR5LCBGb3J3YXJkRGVjbGFyZUluSGVhZGVyLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBwb3N0
TWVzc2FnZShhbnkgbWVzc2FnZSwgVVNWU3RyaW5nIHRhcmdldE9yaWdpbiwgb3B0aW9uYWwgc2Vx
dWVuY2U8b2JqZWN0PiB0cmFuc2ZlciA9IFtdKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0
JkluY3VtYmVudFdpbmRvdywgRG9Ob3RDaGVja1NlY3VyaXR5LCBGb3J3YXJkRGVjbGFyZUluSGVh
ZGVyLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgVVNW
U3RyaW5nIHRhcmdldE9yaWdpbiwgb3B0aW9uYWwgc2VxdWVuY2U8b2JqZWN0PiB0cmFuc2ZlciA9
IFtdKTsKIAogICAgIC8vIE9ic29sZXRlIG1lbWJlcnMsIHN0aWxsIHBhcnQgb2YgdGhlIEhUTUwg
c3BlY2lmaWNhdGlvbiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jV2luZG93LXBhcnRp
YWwpLgogICAgIHZvaWQgY2FwdHVyZUV2ZW50cygpOyAvLyBOb3QgaW1wbGVtZW50ZWQuIEFsc28g
bm90IGluIG1vZGVybiBzdGFuZGFyZHMuIEVtcHR5IGZ1bmN0aW9uIG1heSBoZWxwIGNvbXBhdGli
aWxpdHkgd2l0aCBsZWdhY3kgY29udGVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93RXh0ZW5zaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
RXh0ZW5zaW9uLmNwcAppbmRleCAyYjdiOGMzMmFlY2UwZDNhNDc4ZjdmMDNhZDEwMmIxZmJmOTk2
ODc2Li41YzgyZTYwN2I0NWJiMTUzYjhiMDJmZTgyMGU5YTk5OGViZjUzNjIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvd0V4dGVuc2lvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3dFeHRlbnNpb24uY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIEZy
YW1lKiBET01XaW5kb3dFeHRlbnNpb246OmZyYW1lKCkgY29uc3QKICAgICByZXR1cm4gbV93aW5k
b3cgPyBtX3dpbmRvdy0+ZnJhbWUoKSA6IG51bGxwdHI7CiB9CiAKLXZvaWQgRE9NV2luZG93RXh0
ZW5zaW9uOjpzdXNwZW5kRm9yUGFnZUNhY2hlKCkKK3ZvaWQgRE9NV2luZG93RXh0ZW5zaW9uOjpz
dXNwZW5kRm9yQmFja0ZvcndhcmRDYWNoZSgpCiB7CiAgICAgLy8gQ2FsbGluZyBvdXQgdG8gdGhl
IGNsaWVudCBtaWdodCByZXN1bHQgaW4gdGhpcyBET01XaW5kb3dFeHRlbnNpb24gYmVpbmcgZGVz
dHJveWVkCiAgICAgLy8gd2hpbGUgdGhlcmUgaXMgc3RpbGwgd29yayB0byBkby4KQEAgLTY5LDcg
KzY5LDcgQEAgdm9pZCBET01XaW5kb3dFeHRlbnNpb246OnN1c3BlbmRGb3JQYWdlQ2FjaGUoKQog
ICAgIG1fZGlzY29ubmVjdGVkRnJhbWUgPSBXVEZNb3ZlKGZyYW1lKTsKIH0KIAotdm9pZCBET01X
aW5kb3dFeHRlbnNpb246OnJlc3VtZUZyb21QYWdlQ2FjaGUoKQordm9pZCBET01XaW5kb3dFeHRl
bnNpb246OnJlc3VtZUZyb21CYWNrRm9yd2FyZENhY2hlKCkKIHsKICAgICBBU1NFUlQoZnJhbWUo
KSk7CiAgICAgQVNTRVJUKG1fZGlzY29ubmVjdGVkRnJhbWUgPT0gZnJhbWUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvd0V4dGVuc2lvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3dFeHRlbnNpb24uaAppbmRleCA0ODBkOThlZTE3MDM4NTM1NGU4
MjhhN2E4ZDM2MzY0MjU3YjAzNjJmLi45NGVkNmNhZWRjM2E0ZjdjNTQ3Y2ZhNjgzOWM2YmI1Mzcx
MWQ0YTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvd0V4dGVuc2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93RXh0ZW5zaW9uLmgKQEAgLTQ0
LDggKzQ0LDggQEAgY2xhc3MgRE9NV2luZG93RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIFJlZkNv
dW50ZWQ8RE9NV2luZG93RXh0ZW5zaW9uPiwgcHVibGljIEQKIAogICAgIFdFQkNPUkVfRVhQT1JU
IH5ET01XaW5kb3dFeHRlbnNpb24oKTsKIAotICAgIHZvaWQgc3VzcGVuZEZvclBhZ2VDYWNoZSgp
IGZpbmFsOwotICAgIHZvaWQgcmVzdW1lRnJvbVBhZ2VDYWNoZSgpIGZpbmFsOworICAgIHZvaWQg
c3VzcGVuZEZvckJhY2tGb3J3YXJkQ2FjaGUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZUZyb21C
YWNrRm9yd2FyZENhY2hlKCkgZmluYWw7CiAgICAgdm9pZCB3aWxsRGVzdHJveUdsb2JhbE9iamVj
dEluQ2FjaGVkRnJhbWUoKSBmaW5hbDsKICAgICB2b2lkIHdpbGxEZXN0cm95R2xvYmFsT2JqZWN0
SW5GcmFtZSgpIGZpbmFsOwogICAgIHZvaWQgd2lsbERldGFjaEdsb2JhbE9iamVjdEZyb21GcmFt
ZSgpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9n
Z2luZ0tleXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMu
Y3BwCmluZGV4IGI5ZTYxODY0ODlkNDhmYWRmY2I5MzQ1YjIyZGYxMDcyYTFiNTY1YTkuLjk4YmQw
Yzc4Y2QwMDZjZDllODY2MDk2YWIyZDk4NzBkNDRiNTUzYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAKQEAgLTIwOCwxNCArMjA4LDE0IEBAIFN0
cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vdEluTWVtb3J5Q2FjaGVLZXkoKQogICAgIHJl
dHVybiAibm90SW5NZW1vcnlDYWNoZSJfczsKIH0KIAotU3RyaW5nIERpYWdub3N0aWNMb2dnaW5n
S2V5czo6cGFnZUNhY2hlS2V5KCkKK1N0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmJhY2tG
b3J3YXJkQ2FjaGVLZXkoKQogewotICAgIHJldHVybiAicGFnZUNhY2hlIl9zOworICAgIHJldHVy
biAiYmFja0ZvcndhcmRDYWNoZSJfczsKIH0KIAotU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5
czo6cGFnZUNhY2hlRmFpbHVyZUtleSgpCitTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpi
YWNrRm9yd2FyZENhY2hlRmFpbHVyZUtleSgpCiB7Ci0gICAgcmV0dXJuICJwYWdlQ2FjaGVGYWls
dXJlIl9zOworICAgIHJldHVybiAiYmFja0ZvcndhcmRDYWNoZUZhaWx1cmUiX3M7CiB9CiAKIFN0
cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vRG9jdW1lbnRMb2FkZXJLZXkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmgKaW5kZXggZDQ1OWM0ZDI0ZjMx
NDE1ZTI2ZDk4ZTRkZTU4MDA0NWJmNjVlY2FmYi4uOTcyYTBkZmIzNDU4MWFhMGE5ZGZiNmFiMjky
NWE0NWNiMDliNWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGlj
TG9nZ2luZ0tleXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5n
S2V5cy5oCkBAIC0xMTQsOCArMTE0LDggQEAgY2xhc3MgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzIHsK
ICAgICBzdGF0aWMgU3RyaW5nIG5vdEluTWVtb3J5Q2FjaGVLZXkoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgU3RyaW5nIG9jY3VycmVkS2V5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFN0cmluZyBvdGhlcktleSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGFnZUNhY2hlS2V5KCk7
Ci0gICAgc3RhdGljIFN0cmluZyBwYWdlQ2FjaGVGYWlsdXJlS2V5KCk7CisgICAgc3RhdGljIFN0
cmluZyBiYWNrRm9yd2FyZENhY2hlS2V5KCk7CisgICAgc3RhdGljIFN0cmluZyBiYWNrRm9yd2Fy
ZENhY2hlRmFpbHVyZUtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgcGFnZUNvbnRhaW5zQXRMZWFz
dE9uZU1lZGlhRW5naW5lS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBwYWdlQ29udGFpbnNBdExl
YXN0T25lUGx1Z2luS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBwYWdlQ29udGFpbnNNZWRpYUVu
Z2luZUtleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAppbmRleCA3MTRlOWRjMDhi
MjE1NjI2MTc5ODExZjMyYTkzZTUzZjc2NmMzZThmLi5mMWY1YjMyYjA2Njc3MDNmMjEzNDNhZmM4
ZjUyNzU3NDYxYWVkZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcApAQCAtMTQz
LDcgKzE0Myw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OnNjaGVkdWxlSW5pdGlhbENvbm5lY3QoKQog
CiB2b2lkIEV2ZW50U291cmNlOjpzY2hlZHVsZVJlY29ubmVjdCgpCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9pc1N1c3BlbmRlZEZvclBhZ2VDYWNo
ZSk7CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9pc1N1
c3BlbmRlZEZvckJhY2tGb3J3YXJkQ2FjaGUpOwogICAgIG1fc3RhdGUgPSBDT05ORUNUSU5HOwog
ICAgIG1fY29ubmVjdFRpbWVyLnN0YXJ0T25lU2hvdCgxX21zICogbV9yZWNvbm5lY3REZWxheSk7
CiAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBFdmVu
dFNvdXJjZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3AKIHsKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBDT05ORUNUSU5HKTsKICAg
ICBBU1NFUlQobV9yZXF1ZXN0SW5GbGlnaHQpOwotICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIW1faXNTdXNwZW5kZWRGb3JQYWdlQ2FjaGUpOworICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW1faXNTdXNwZW5kZWRGb3JCYWNr
Rm9yd2FyZENhY2hlKTsKIAogICAgIGlmICghcmVzcG9uc2VJc1ZhbGlkKHJlc3BvbnNlKSkgewog
ICAgICAgICBkb0V4cGxpY2l0TG9hZENhbmNlbGxhdGlvbigpOwpAQCAtMjIxLDcgKzIyMSw3IEBA
IHZvaWQgRXZlbnRTb3VyY2U6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gT1BFTik7CiAgICAgQVNTRVJUKG1fcmVx
dWVzdEluRmxpZ2h0KTsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKCFtX2lzU3VzcGVuZGVkRm9yUGFnZUNhY2hlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFtX2lzU3VzcGVuZGVkRm9yQmFja0ZvcndhcmRDYWNoZSk7
CiAKICAgICBhcHBlbmQobV9yZWNlaXZlQnVmZmVyLCBtX2RlY29kZXItPmRlY29kZShkYXRhLCBs
ZW5ndGgpKTsKICAgICBwYXJzZUV2ZW50U3RyZWFtKCk7CkBAIC0yMzEsNyArMjMxLDcgQEAgdm9p
ZCBFdmVudFNvdXJjZTo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQogewogICAgIEFT
U0VSVChtX3N0YXRlID09IE9QRU4pOwogICAgIEFTU0VSVChtX3JlcXVlc3RJbkZsaWdodCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9pc1N1c3BlbmRl
ZEZvclBhZ2VDYWNoZSk7CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTighbV9pc1N1c3BlbmRlZEZvckJhY2tGb3J3YXJkQ2FjaGUpOwogCiAgICAgYXBwZW5kKG1f
cmVjZWl2ZUJ1ZmZlciwgbV9kZWNvZGVyLT5mbHVzaCgpKTsKICAgICBwYXJzZUV2ZW50U3RyZWFt
KCk7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFpbChjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBBU1NFUlQobV9yZXF1ZXN0SW5GbGlnaHQpOwogCiAg
ICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0aGUgbG9hZCBnZXRzIGNhbmNlbGxlZCBvbiBu
YXZpZ2F0aW5nIGF3YXkuIFdlIG9ubHkgZmlyZSBhbiBlcnJvciBldmVudCBhbmQgYXR0ZW1wdCB0
byByZWNvbm5lY3QKLSAgICAvLyBpZiB3ZSBlbmQgdXAgZ2V0dGluZyByZXN1bWVkIGZyb20gcGFn
ZSBjYWNoZS4KKyAgICAvLyBpZiB3ZSBlbmQgdXAgZ2V0dGluZyByZXN1bWVkIGZyb20gYmFjay9m
b3J3YXJkIGNhY2hlLgogICAgIGlmIChlcnJvci5pc0NhbmNlbGxhdGlvbigpICYmICFtX2lzRG9p
bmdFeHBsaWNpdENhbmNlbGxhdGlvbikgewogICAgICAgICBtX3Nob3VsZFJlY29ubmVjdE9uUmVz
dW1lID0gdHJ1ZTsKICAgICAgICAgbV9yZXF1ZXN0SW5GbGlnaHQgPSBmYWxzZTsKQEAgLTI3Nyw3
ICsyNzcsNyBAQCB2b2lkIEV2ZW50U291cmNlOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKQogdm9pZCBFdmVudFNvdXJjZTo6YWJvcnRDb25uZWN0aW9uQXR0ZW1wdCgpCiB7CiAg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gQ09OTkVDVElORyk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9pc1N1c3BlbmRlZEZvclBhZ2VDYWNoZSk7CisgICAg
UkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9pc1N1c3BlbmRlZEZv
ckJhY2tGb3J3YXJkQ2FjaGUpOwogCiAgICAgaWYgKG1fcmVxdWVzdEluRmxpZ2h0KQogICAgICAg
ICBkb0V4cGxpY2l0TG9hZENhbmNlbGxhdGlvbigpOwpAQCAtNDEwLDE5ICs0MTAsMTkgQEAgYm9v
bCBFdmVudFNvdXJjZTo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiAK
IHZvaWQgRXZlbnRTb3VyY2U6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiB7
Ci0gICAgaWYgKHJlYXNvbiAhPSBSZWFzb25Gb3JTdXNwZW5zaW9uOjpQYWdlQ2FjaGUpCisgICAg
aWYgKHJlYXNvbiAhPSBSZWFzb25Gb3JTdXNwZW5zaW9uOjpCYWNrRm9yd2FyZENhY2hlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2lzU3VzcGVuZGVkRm9yUGFnZUNhY2hlID0gdHJ1ZTsKLSAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIW1fcmVxdWVzdEluRmxpZ2h0LCAiTG9hZHMg
Z2V0IGNhbmNlbGxlZCBiZWZvcmUgZW50ZXJpbmcgUGFnZUNhY2hlLiIpOworICAgIG1faXNTdXNw
ZW5kZWRGb3JCYWNrRm9yd2FyZENhY2hlID0gdHJ1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X01FU1NBR0UoIW1fcmVxdWVzdEluRmxpZ2h0LCAiTG9hZHMgZ2V0IGNhbmNlbGxlZCBiZWZvcmUg
ZW50ZXJpbmcgdGhlIEJhY2tGb3J3YXJkQ2FjaGUuIik7CiB9CiAKIHZvaWQgRXZlbnRTb3VyY2U6
OnJlc3VtZSgpCiB7Ci0gICAgaWYgKCFtX2lzU3VzcGVuZGVkRm9yUGFnZUNhY2hlKQorICAgIGlm
ICghbV9pc1N1c3BlbmRlZEZvckJhY2tGb3J3YXJkQ2FjaGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1faXNTdXNwZW5kZWRGb3JQYWdlQ2FjaGUgPSBmYWxzZTsKKyAgICBtX2lzU3VzcGVuZGVk
Rm9yQmFja0ZvcndhcmRDYWNoZSA9IGZhbHNlOwogICAgIGlmIChzdGQ6OmV4Y2hhbmdlKG1fc2hv
dWxkUmVjb25uZWN0T25SZXN1bWUsIGZhbHNlKSkgewogICAgICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnBvc3RUYXNrKFt0aGlzLCBwZW5kaW5nQWN0aXZpdHkgPSBtYWtlUGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgICAgIGlm
ICghaXNDb250ZXh0U3RvcHBlZCgpKQpAQCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQgRXZlbnRTb3Vy
Y2U6OnJlc3VtZSgpCiAKIHZvaWQgRXZlbnRTb3VyY2U6OmRpc3BhdGNoTWVzc2FnZUV2ZW50KCkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFtX2lzU3Vz
cGVuZGVkRm9yUGFnZUNhY2hlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFtX2lzU3VzcGVuZGVkRm9yQmFja0ZvcndhcmRDYWNoZSk7CiAKICAgICBpZiAo
IW1fY3VycmVudGx5UGFyc2VkRXZlbnRJZC5pc051bGwoKSkKICAgICAgICAgbV9sYXN0RXZlbnRJ
ZCA9IFdURk1vdmUobV9jdXJyZW50bHlQYXJzZWRFdmVudElkKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRT
b3VyY2UuaAppbmRleCBkNzgxMDEzZTU5Y2I2Zjg2NWRkZmI1ZDRmYjBjMzg1MWQxZWQ3MDhlLi4z
NTU5MTQ0ZjdlZDIyOWFhYzUwZjA3YTRiNTRiNTc0OGNlZWIzNzA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudFNvdXJjZS5oCkBAIC0xMTgsNyArMTE4LDcgQEAgY2xhc3MgRXZlbnRTb3VyY2UgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudFNvdXJjZT4sIHB1YmxpYyBFdmVudFRhcmdldFdpdGgK
ICAgICBWZWN0b3I8VUNoYXI+IG1fcmVjZWl2ZUJ1ZmZlcjsKICAgICBib29sIG1fZGlzY2FyZFRy
YWlsaW5nTmV3bGluZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3JlcXVlc3RJbkZsaWdodCB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkRm9yUGFnZUNhY2hlIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faXNTdXNwZW5kZWRGb3JCYWNrRm9yd2FyZENhY2hlIHsgZmFsc2UgfTsKICAgICBi
b29sIG1faXNEb2luZ0V4cGxpY2l0Q2FuY2VsbGF0aW9uIHsgZmFsc2UgfTsKICAgICBib29sIG1f
c2hvdWxkUmVjb25uZWN0T25SZXN1bWUgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmlu
ZGV4IDY0NjZhNjAyMjYyZWY2MzY3ZmYxYmUzYzZhOTUzMTIzMTVmZmY2YmIuLjZmMDc3YzQwYmY5
MzI1NTIwMjNiN2NkMjVkYTUxOTU3NjIzYTEyYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgIkFwcGx5U3R5bGVD
b21tYW5kLmgiCisjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUgIkJhY2tG
b3J3YXJkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKQEAgLTczLDcgKzc0LDYg
QEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiUHJvY2Vz
c1dhcm1pbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIEZyYW1lOjpzZXRW
aWV3KFJlZlB0cjxGcmFtZVZpZXc+JiYgdmlldykKICAgICAvLyBQcmVwYXJlIGZvciBkZXN0cnVj
dGlvbiBub3csIHNvIGFueSB1bmxvYWQgZXZlbnQgaGFuZGxlcnMgZ2V0IHJ1biBhbmQgdGhlIERP
TVdpbmRvdyBpcwogICAgIC8vIG5vdGlmaWVkLiBJZiB3ZSB3YWl0IHVudGlsIHRoZSB2aWV3IGlz
IGRlc3Ryb3llZCwgdGhlbiB0aGluZ3Mgd29uJ3QgYmUgaG9va2VkIHVwIGVub3VnaCBmb3IKICAg
ICAvLyB0aGVzZSBjYWxscyB0byB3b3JrLgotICAgIGlmICghdmlldyAmJiBtX2RvYyAmJiBtX2Rv
Yy0+cGFnZUNhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6SW5QYWdlQ2FjaGUpCisgICAgaWYgKCF2
aWV3ICYmIG1fZG9jICYmIG1fZG9jLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVu
dDo6SW5CYWNrRm9yd2FyZENhY2hlKQogICAgICAgICBtX2RvYy0+cHJlcGFyZUZvckRlc3RydWN0
aW9uKCk7CiAgICAgCiAgICAgaWYgKG1fdmlldykKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEZy
YW1lOjpzZXREb2N1bWVudChSZWZQdHI8RG9jdW1lbnQ+JiYgbmV3RG9jdW1lbnQpCiAgICAgfQog
I2VuZGlmCiAKLSAgICBpZiAobV9kb2MgJiYgbV9kb2MtPnBhZ2VDYWNoZVN0YXRlKCkgIT0gRG9j
dW1lbnQ6OkluUGFnZUNhY2hlKQorICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+YmFja0ZvcndhcmRD
YWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6OkluQmFja0ZvcndhcmRDYWNoZSkKICAgICAgICAgbV9k
b2MtPnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOwogCiAgICAgbV9kb2MgPSBuZXdEb2N1bWVudC5j
b3B5UmVmKCk7CkBAIC03MDYsNyArNzA2LDcgQEAgdm9pZCBGcmFtZTo6d2lsbERldGFjaFBhZ2Uo
KQogICAgIC8vIC0gV2hlbiBjYWxsaW5nIEZyYW1lOjpzZXRWaWV3KCkgd2l0aCBhIG51bGwgRnJh
bWVWaWV3Ki4gVGhpcyBpcyBhbHdheXMgZG9uZSBiZWZvcmUgY2FsbGluZwogICAgIC8vICAgRnJh
bWU6OndpbGxEZXRhY2hQYWdlICh0aGlzIGZ1bmN0aW9uLikgSGVuY2UgdGhlIGFzc2VydGlvbiBi
ZWxvdy4KICAgICAvLwotICAgIC8vIC0gV2hlbiBhZGRpbmcgYSBkb2N1bWVudCB0byB0aGUgcGFn
ZSBjYWNoZSwgdGhlIHRyZWUgaXMgdG9ybiBkb3duIGJlZm9yZSBpbnN0YW50aWF0aW5nCisgICAg
Ly8gLSBXaGVuIGFkZGluZyBhIGRvY3VtZW50IHRvIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIHRo
ZSB0cmVlIGlzIHRvcm4gZG93biBiZWZvcmUgaW5zdGFudGlhdGluZwogICAgIC8vICAgdGhlIENh
Y2hlZFBhZ2UrQ2FjaGVkRnJhbWUgb2JqZWN0IHRyZWUuCiAgICAgQVNTRVJUKCFkb2N1bWVudCgp
IHx8ICFkb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCmluZGV4IGIwYTNlNTY0ODE2NTE0ZTRkMDEyNDc2NmY2ZDUzNjhjZmJlMzlhNzkuLjc4YzNk
YjQ1M2NkOTU1OWRlODk3ODExNzQxMjRjYjJlNDgxZTkyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKIAogI2lu
Y2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAj
aW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQW5pbWF0aW9u
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCkBAIC02OSw3ICs3MCw2IEBA
CiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2VP
dmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1
ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCkBAIC01NTMsOSArNTUzLDkgQEAgUmVmPFNjcm9s
bGJhcj4gRnJhbWVWaWV3OjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pCiAgICAgcmV0dXJuIFNjcm9sbFZpZXc6OmNyZWF0ZVNjcm9sbGJhcihvcmllbnRh
dGlvbik7CiB9CiAKLXZvaWQgRnJhbWVWaWV3OjpkaWRSZXN0b3JlRnJvbVBhZ2VDYWNoZSgpCit2
b2lkIEZyYW1lVmlldzo6ZGlkUmVzdG9yZUZyb21CYWNrRm9yd2FyZENhY2hlKCkKIHsKLSAgICAv
LyBXaGVuIHJlc3RvcmluZyBmcm9tIHBhZ2UgY2FjaGUsIHRoZSBtYWluIGZyYW1lIHN0YXlzIGlu
IHBsYWNlIHdoaWxlIHN1YmZyYW1lcyBnZXQgc3dhcHBlZCBpbi4KKyAgICAvLyBXaGVuIHJlc3Rv
cmluZyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSwgdGhlIG1haW4gZnJhbWUgc3RheXMgaW4gcGxh
Y2Ugd2hpbGUgc3ViZnJhbWVzIGdldCBzd2FwcGVkIGluLgogICAgIC8vIFdlIHVwZGF0ZSB0aGUg
c2Nyb2xsYWJsZSBhcmVhIHNldCB0byBlbnN1cmUgdGhhdCBzY3JvbGxpbmcgZGF0YSBzdHJ1Y3R1
cmVzIGdldCBpbnZhbGlkYXRlZC4KICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCgpOwogfQpA
QCAtNjAxLDcgKzYwMSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1NpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIAogICAgIGlmIChmcmFtZSgpLmlzTWFpbkZyYW1lKCkpIHsKICAgICAg
ICAgcGFnZS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7
Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yQ29udGVudHNTaXpl
Q2hhbmdlZCgqcGFnZSk7CisgICAgICAgIEJhY2tGb3J3YXJkQ2FjaGU6OnNpbmdsZXRvbigpLm1h
cmtQYWdlc0ZvckNvbnRlbnRzU2l6ZUNoYW5nZWQoKnBhZ2UpOwogICAgIH0KICAgICBsYXlvdXRD
b250ZXh0KCkuZW5hYmxlU2V0TmVlZHNMYXlvdXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CmluZGV4IDQwNzhlZWY3ZjgzOGFjY2EzODNjYzFkNWU3N2VkOGI1MDg3NDM5NWQuLmVmNTE5NDMy
ZTQyZGI1M2E4YzUxMjUzOWFjM2Q3NTVmMzZhNWQwZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aApAQCAtNTU0LDcgKzU1NCw3IEBAIGNsYXNzIEZyYW1lVmlldyBmaW5hbCA6IHB1YmxpYyBTY3Jv
bGxWaWV3IHsKIAogICAgIC8vIFBhZ2UgYW5kIEZyYW1lVmlldyBib3RoIHN0b3JlIGEgUGFnaW5h
dGlvbiB2YWx1ZS4gUGFnZTo6cGFnaW5hdGlvbigpIGlzIHNldCBvbmx5IGJ5IEFQSSwKICAgICAv
LyBhbmQgRnJhbWVWaWV3OjpwYWdpbmF0aW9uKCkgaXMgc2V0IG9ubHkgYnkgQ1NTLiBQYWdlOjpw
YWdpbmF0aW9uKCkgd2lsbCBhZmZlY3QgYWxsCi0gICAgLy8gRnJhbWVWaWV3cyBpbiB0aGUgcGFn
ZSBjYWNoZSwgYnV0IEZyYW1lVmlldzo6cGFnaW5hdGlvbigpIG9ubHkgYWZmZWN0cyB0aGUgY3Vy
cmVudAorICAgIC8vIEZyYW1lVmlld3MgaW4gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSwgYnV0IEZy
YW1lVmlldzo6cGFnaW5hdGlvbigpIG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudAogICAgIC8vIEZy
YW1lVmlldy4gRnJhbWVWaWV3OjpwYWdpbmF0aW9uKCkgd2lsbCByZXR1cm4gbV9wYWdpbmF0aW9u
IGlmIGl0IGhhcyBiZWVuIHNldC4gT3RoZXJ3aXNlLAogICAgIC8vIGl0IHdpbGwgcmV0dXJuIFBh
Z2U6OnBhZ2luYXRpb24oKSBzaW5jZSBjdXJyZW50bHkgdGhlcmUgYXJlIG5vIGNhbGxlcnMgdGhh
dCBuZWVkIHRvCiAgICAgLy8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvLgpAQCAtNjQzLDcg
KzY0Myw3IEBAIGNsYXNzIEZyYW1lVmlldyBmaW5hbCA6IHB1YmxpYyBTY3JvbGxWaWV3IHsKIAog
ICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0
IGZpbmFsOwogCi0gICAgdm9pZCBkaWRSZXN0b3JlRnJvbVBhZ2VDYWNoZSgpOworICAgIHZvaWQg
ZGlkUmVzdG9yZUZyb21CYWNrRm9yd2FyZENhY2hlKCk7CiAKICAgICB2b2lkIHdpbGxEZXN0cm95
UmVuZGVyVHJlZSgpOwogICAgIHZvaWQgZGlkRGVzdHJveVJlbmRlclRyZWUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwCmluZGV4IDMyMmY2Nzk3
Yjk0NmQxZGM5Y2Q1OGY4Mjg4NjBkYmFkY2JkNzFmNDEuLjFjOWUzMTU1YWU2ODFhZDUwYzQ3MmZm
OWJjMTNlZmMzNGY2MTMxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3TGF5b3V0Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdM
YXlvdXRDb250ZXh0LmNwcApAQCAtMTQ1LDggKzE0NSw4IEBAIHZvaWQgRnJhbWVWaWV3TGF5b3V0
Q29udGV4dDo6bGF5b3V0KCkKICAgICBBU1NFUlQoIXZpZXcoKS5pc1BhaW50aW5nKCkpOwogICAg
IEFTU0VSVChmcmFtZSgpLnZpZXcoKSA9PSAmdmlldygpKTsKICAgICBBU1NFUlQoZnJhbWUoKS5k
b2N1bWVudCgpKTsKLSAgICBBU1NFUlQoZnJhbWUoKS5kb2N1bWVudCgpLT5wYWdlQ2FjaGVTdGF0
ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZQotICAgICAgICB8fCBmcmFtZSgpLmRvY3Vt
ZW50KCktPnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6OkFib3V0VG9FbnRlclBhZ2VDYWNo
ZSk7CisgICAgQVNTRVJUKGZyYW1lKCkuZG9jdW1lbnQoKS0+YmFja0ZvcndhcmRDYWNoZVN0YXRl
KCkgPT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZQorICAgICAgICB8fCBmcmFtZSgp
LmRvY3VtZW50KCktPmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpBYm91dFRv
RW50ZXJCYWNrRm9yd2FyZENhY2hlKTsKICAgICBpZiAoIWNhblBlcmZvcm1MYXlvdXQoKSkgewog
ICAgICAgICBMT0coTGF5b3V0LCAiICBpcyBub3QgYWxsb3dlZCwgYmFpbGluZyIpOwogICAgICAg
ICByZXR1cm47CkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0
OjpkaXNhYmxlU2V0TmVlZHNMYXlvdXQoKQogCiB2b2lkIEZyYW1lVmlld0xheW91dENvbnRleHQ6
OnNjaGVkdWxlTGF5b3V0KCkKIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGUg
cGFnZSBpcyBub3QgaW4gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB0aGF0IGlzIGNhdXNpbmcKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGUgcGFnZSBpcyBub3QgaW4gdGhlIGJhY2svZm9y
d2FyZCBjYWNoZSwgYnV0IHRoYXQgaXMgY2F1c2luZwogICAgIC8vIHRvbyBtYW55IGZhbHNlIGFz
c2VydGlvbnMuIFNlZSA8cmRhcjovL3Byb2JsZW0vNzIxODExOD4uCiAgICAgQVNTRVJUKGZyYW1l
KCkudmlldygpID09ICZ2aWV3KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L01lbW9yeVJlbGVhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNw
cAppbmRleCAwZDczZTRiMzQxNjRmOWU1N2U3ZmMzMDVhN2JmYTcyNmQwN2RjNjg4Li5lNmI0ZTA0
ZWJlZmM1YjRmYTVhNGM3M2Y5NWE3MTcxNjJlNTdhYTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVt
b3J5UmVsZWFzZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJNZW1vcnlSZWxlYXNlLmgiCiAKKyNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgi
CiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIK
ICNpbmNsdWRlICJTY3JvbGxpbmdUaHJlYWQuaCIKICNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCkBA
IC03NywxMiArNzcsMTIgQEAgc3RhdGljIHZvaWQgcmVsZWFzZU5vbmNyaXRpY2FsTWVtb3J5KE1h
aW50YWluTWVtb3J5Q2FjaGUgbWFpbnRhaW5NZW1vcnlDYWNoZSkKICAgICBJbmxpbmVTdHlsZVNo
ZWV0T3duZXI6OmNsZWFyQ2FjaGUoKTsKIH0KIAotc3RhdGljIHZvaWQgcmVsZWFzZUNyaXRpY2Fs
TWVtb3J5KFN5bmNocm9ub3VzIHN5bmNocm9ub3VzLCBNYWludGFpblBhZ2VDYWNoZSBtYWludGFp
blBhZ2VDYWNoZSwgTWFpbnRhaW5NZW1vcnlDYWNoZSBtYWludGFpbk1lbW9yeUNhY2hlKQorc3Rh
dGljIHZvaWQgcmVsZWFzZUNyaXRpY2FsTWVtb3J5KFN5bmNocm9ub3VzIHN5bmNocm9ub3VzLCBN
YWludGFpbkJhY2tGb3J3YXJkQ2FjaGUgbWFpbnRhaW5CYWNrRm9yd2FyZENhY2hlLCBNYWludGFp
bk1lbW9yeUNhY2hlIG1haW50YWluTWVtb3J5Q2FjaGUpCiB7CiAgICAgLy8gUmlnaHQgbm93LCB0
aGUgb25seSByZWFzb24gd2UgY2FsbCByZWxlYXNlIGNyaXRpY2FsIG1lbW9yeSB3aGlsZSBub3Qg
dW5kZXIgbWVtb3J5IHByZXNzdXJlIGlzIGlmIHRoZSBwcm9jZXNzIGlzIGFib3V0IHRvIGJlIHN1
c3BlbmRlZC4KLSAgICBpZiAobWFpbnRhaW5QYWdlQ2FjaGUgPT0gTWFpbnRhaW5QYWdlQ2FjaGU6
Ok5vKSB7CisgICAgaWYgKG1haW50YWluQmFja0ZvcndhcmRDYWNoZSA9PSBNYWludGFpbkJhY2tG
b3J3YXJkQ2FjaGU6Ok5vKSB7CiAgICAgICAgIFBydW5pbmdSZWFzb24gcHJ1bmluZ1JlYXNvbiA9
IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJl
KCkgPyBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSA6IFBydW5pbmdSZWFzb246OlByb2Nl
c3NTdXNwZW5kZWQ7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVO
b3coMCwgcHJ1bmluZ1JlYXNvbik7CisgICAgICAgIEJhY2tGb3J3YXJkQ2FjaGU6OnNpbmdsZXRv
bigpLnBydW5lVG9TaXplTm93KDAsIHBydW5pbmdSZWFzb24pOwogICAgIH0KIAogICAgIGlmICht
YWludGFpbk1lbW9yeUNhY2hlID09IE1haW50YWluTWVtb3J5Q2FjaGU6Ok5vKSB7CkBAIC0xMTgs
MTQgKzExOCwxNCBAQCBzdGF0aWMgdm9pZCByZWxlYXNlQ3JpdGljYWxNZW1vcnkoU3luY2hyb25v
dXMgc3luY2hyb25vdXMsIE1haW50YWluUGFnZUNhY2hlIG1haQogICAgIH0KIH0KIAotdm9pZCBy
ZWxlYXNlTWVtb3J5KENyaXRpY2FsIGNyaXRpY2FsLCBTeW5jaHJvbm91cyBzeW5jaHJvbm91cywg
TWFpbnRhaW5QYWdlQ2FjaGUgbWFpbnRhaW5QYWdlQ2FjaGUsIE1haW50YWluTWVtb3J5Q2FjaGUg
bWFpbnRhaW5NZW1vcnlDYWNoZSkKK3ZvaWQgcmVsZWFzZU1lbW9yeShDcml0aWNhbCBjcml0aWNh
bCwgU3luY2hyb25vdXMgc3luY2hyb25vdXMsIE1haW50YWluQmFja0ZvcndhcmRDYWNoZSBtYWlu
dGFpbkJhY2tGb3J3YXJkQ2FjaGUsIE1haW50YWluTWVtb3J5Q2FjaGUgbWFpbnRhaW5NZW1vcnlD
YWNoZSkKIHsKICAgICBUcmFjZVNjb3BlIHNjb3BlKE1lbW9yeVByZXNzdXJlSGFuZGxlclN0YXJ0
LCBNZW1vcnlQcmVzc3VyZUhhbmRsZXJFbmQsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihjcml0aWNh
bCksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzeW5jaHJvbm91cykpOwogCiAgICAgaWYgKGNyaXRp
Y2FsID09IENyaXRpY2FsOjpZZXMpIHsKICAgICAgICAgLy8gUmV0dXJuIHVudXNlZCBwYWdlcyBi
YWNrIHRvIHRoZSBPUyBub3cgYXMgdGhpcyB3aWxsIGxpa2VseSBnaXZlIHVzIGEgbGl0dGxlIG1l
bW9yeSB0byB3b3JrIHdpdGguCiAgICAgICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVt
b3J5KCk7Ci0gICAgICAgIHJlbGVhc2VDcml0aWNhbE1lbW9yeShzeW5jaHJvbm91cywgbWFpbnRh
aW5QYWdlQ2FjaGUsIG1haW50YWluTWVtb3J5Q2FjaGUpOworICAgICAgICByZWxlYXNlQ3JpdGlj
YWxNZW1vcnkoc3luY2hyb25vdXMsIG1haW50YWluQmFja0ZvcndhcmRDYWNoZSwgbWFpbnRhaW5N
ZW1vcnlDYWNoZSk7CiAgICAgfQogCiAgICAgcmVsZWFzZU5vbmNyaXRpY2FsTWVtb3J5KG1haW50
YWluTWVtb3J5Q2FjaGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlS
ZWxlYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuaAppbmRleCAzZTA2
YjMwNDkzNzlkMTZjMDg4YjFlODc3ZjA2ZDRmMzFiZjk2NWEyLi42ZTVlYmQ4ODVjNGM2MDczMjQy
MmRlYTcwYjkxY2VjMjQyNDEwYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01l
bW9yeVJlbGVhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuaApA
QCAtMjksMTAgKzI5LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBjbGFzcyBN
YWludGFpblBhZ2VDYWNoZSA6IGJvb2wgeyBObywgWWVzIH07CitlbnVtIGNsYXNzIE1haW50YWlu
QmFja0ZvcndhcmRDYWNoZSA6IGJvb2wgeyBObywgWWVzIH07CiBlbnVtIGNsYXNzIE1haW50YWlu
TWVtb3J5Q2FjaGUgOiBib29sIHsgTm8sIFllcyB9OwogCi1XRUJDT1JFX0VYUE9SVCB2b2lkIHJl
bGVhc2VNZW1vcnkoQ3JpdGljYWwsIFN5bmNocm9ub3VzLCBNYWludGFpblBhZ2VDYWNoZSA9IE1h
aW50YWluUGFnZUNhY2hlOjpObywgTWFpbnRhaW5NZW1vcnlDYWNoZSA9IE1haW50YWluTWVtb3J5
Q2FjaGU6Ok5vKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVsZWFzZU1lbW9yeShDcml0aWNhbCwg
U3luY2hyb25vdXMsIE1haW50YWluQmFja0ZvcndhcmRDYWNoZSA9IE1haW50YWluQmFja0Zvcndh
cmRDYWNoZTo6Tm8sIE1haW50YWluTWVtb3J5Q2FjaGUgPSBNYWludGFpbk1lbW9yeUNhY2hlOjpO
byk7CiB2b2lkIHBsYXRmb3JtUmVsZWFzZU1lbW9yeShDcml0aWNhbCk7CiB2b2lkIGpldHRpc29u
RXhwZW5zaXZlT2JqZWN0c09uVG9wTGV2ZWxOYXZpZ2F0aW9uKCk7CiBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlZ2lzdGVyTWVtb3J5UmVsZWFzZU5vdGlmeUNhbGxiYWNrcygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKaW5kZXggNjNjYjVmZjY0ZDg1ZWIzZTVjNTFlNzk0MDUxOTUyNTgyZjJkMDUxNC4uM2YxNDY3
YmUxYzBhZWQyMTI1YjM3Nzc1YjBiYTU1NjQ1M2E3ZWViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBA
IC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKICNp
bmNsdWRlICJBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIuaCIKICNpbmNsdWRlICJBdXRo
ZW50aWNhdG9yQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAj
aW5jbHVkZSAiQmFja0ZvcndhcmRDbGllbnQuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCkBAIC03Myw3ICs3
NCw2IEBACiAjaW5jbHVkZSAiTG93UG93ZXJNb2RlTm90aWZpZXIuaCIKICNpbmNsdWRlICJNZWRp
YUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKLSNpbmNsdWRlICJQ
YWdlQ2FjaGUuaCIKICNpbmNsdWRlICJQYWdlQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIlBh
Z2VDb25zb2xlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGFnZURlYnVnZ2FibGUuaCIKQEAgLTM1OSw3
ICszNTksNyBAQCBQYWdlOjp+UGFnZSgpCiAKICAgICBiYWNrRm9yd2FyZCgpLmNsb3NlKCk7CiAg
ICAgaWYgKCFpc1V0aWxpdHlQYWdlKCkpCi0gICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCku
cmVtb3ZlQWxsSXRlbXNGb3JQYWdlKCp0aGlzKTsKKyAgICAgICAgQmFja0ZvcndhcmRDYWNoZTo6
c2luZ2xldG9uKCkucmVtb3ZlQWxsSXRlbXNGb3JQYWdlKCp0aGlzKTsKIAogI2lmbmRlZiBOREVC
VUcKICAgICBwYWdlQ291bnRlci5kZWNyZW1lbnQoKTsKQEAgLTEwNzEsNyArMTA3MSw3IEBAIHZv
aWQgUGFnZTo6c2V0Vmlld1NjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3ZpZXdTY2FsZUZhY3RvciA9IHNjYWxlOwotICAgIFBhZ2VDYWNoZTo6c2luZ2xl
dG9uKCkubWFya1BhZ2VzRm9yRGV2aWNlT3JQYWdlU2NhbGVDaGFuZ2VkKCp0aGlzKTsKKyAgICBC
YWNrRm9yd2FyZENhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JEZXZpY2VPclBhZ2VTY2Fs
ZUNoYW5nZWQoKnRoaXMpOwogfQogCiB2b2lkIFBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlRmFjdG9yKQpAQCAtMTA4Nyw3ICsxMDg3LDcgQEAgdm9pZCBQYWdlOjpzZXREZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKICAgICBzZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMoKTsKIAogICAgIG1haW5GcmFtZSgpLmRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpOwotICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yRGV2aWNl
T3JQYWdlU2NhbGVDaGFuZ2VkKCp0aGlzKTsKKyAgICBCYWNrRm9yd2FyZENhY2hlOjpzaW5nbGV0
b24oKS5tYXJrUGFnZXNGb3JEZXZpY2VPclBhZ2VTY2FsZUNoYW5nZWQoKnRoaXMpOwogCiAgICAg
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKaW5kZXggOTlhNWVlYjVmNGFmNDI4ZTgyNDJlMGYxNjczOTE4OTZmYzMyMWUw
NS4uODMxZjBhMDdjMGY2NGJkNzM4OWE3ZDE1MzRkNDFmNDlhMWVjNzBiNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmgKQEAgLTQxMyw3ICs0MTMsNyBAQCBjbGFzcyBQYWdlIDogcHVibGljIFN1cHBsZW1lbnRhYmxl
PFBhZ2U+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UGFnZT4gewogCiAgICAgLy8gUGFnZSBhbmQg
RnJhbWVWaWV3IGJvdGggc3RvcmUgYSBQYWdpbmF0aW9uIHZhbHVlLiBQYWdlOjpwYWdpbmF0aW9u
KCkgaXMgc2V0IG9ubHkgYnkgQVBJLAogICAgIC8vIGFuZCBGcmFtZVZpZXc6OnBhZ2luYXRpb24o
KSBpcyBzZXQgb25seSBieSBDU1MuIFBhZ2U6OnBhZ2luYXRpb24oKSB3aWxsIGFmZmVjdCBhbGwK
LSAgICAvLyBGcmFtZVZpZXdzIGluIHRoZSBwYWdlIGNhY2hlLCBidXQgRnJhbWVWaWV3OjpwYWdp
bmF0aW9uKCkgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50CisgICAgLy8gRnJhbWVWaWV3cyBpbiB0
aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBidXQgRnJhbWVWaWV3OjpwYWdpbmF0aW9uKCkgb25seSBh
ZmZlY3RzIHRoZSBjdXJyZW50CiAgICAgLy8gRnJhbWVWaWV3LgogICAgIGNvbnN0IFBhZ2luYXRp
b24mIHBhZ2luYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BhZ2luYXRpb247IH0KICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFBhZ2luYXRpb24oY29uc3QgUGFnaW5hdGlvbiYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCBjYzBjMjFmMTAxNmE5NzAy
Yjk0ZjBmYmJhYTQwNzIwMWNjNDI2OGM2Li4zYWE0OGE1OGVmODlkMTk2MjhhZWJhNjA2NzM5YTRk
Y2FjMzNlZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApA
QCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U+JiYKICAgICAgICAgaWYgKFVO
TElLRUxZKG1fcGFnZS5zZXR0aW5ncygpLmxvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVF
bmFibGVkKCkgfHwgc2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpKSB7CiAgICAgICAgICAgICBpZiAo
Y29uc29sZU1lc3NhZ2UtPnR5cGUoKSA9PSBNZXNzYWdlVHlwZTo6SW1hZ2UpIHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoY29uc29sZU1lc3NhZ2UtPmFyZ3VtZW50cygpKTsKLSAgICAgICAgICAg
ICAgICBDb25zb2xlQ2xpZW50OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNz
YWdlU291cmNlOjpDb25zb2xlQVBJLCBNZXNzYWdlVHlwZTo6TG9nLCBjb25zb2xlTWVzc2FnZS0+
bGV2ZWwoKSwgY29uc29sZU1lc3NhZ2UtPmFyZ3VtZW50cygpLT5nbG9iYWxTdGF0ZSgpLCAqY29u
c29sZU1lc3NhZ2UtPmFyZ3VtZW50cygpKTsKKyAgICAgICAgICAgICAgICBDb25zb2xlQ2xpZW50
OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlOjpDb25zb2xl
QVBJLCBNZXNzYWdlVHlwZTo6TG9nLCBjb25zb2xlTWVzc2FnZS0+bGV2ZWwoKSwgY29uc29sZU1l
c3NhZ2UtPmFyZ3VtZW50cygpLT5nbG9iYWxPYmplY3QoKSwgKmNvbnNvbGVNZXNzYWdlLT5hcmd1
bWVudHMoKSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBDb25zb2xlQ2xp
ZW50OjpwcmludENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksIE1lc3Nh
Z2VUeXBlOjpMb2csIGNvbnNvbGVNZXNzYWdlLT5sZXZlbCgpLCBjb25zb2xlTWVzc2FnZS0+bWVz
c2FnZSgpLCBjb25zb2xlTWVzc2FnZS0+dXJsKCksIGNvbnNvbGVNZXNzYWdlLT5saW5lKCksIGNv
bnNvbGVNZXNzYWdlLT5jb2x1bW4oKSk7CiAgICAgICAgIH0KQEAgLTE1Myw3ICsxNTMsNyBAQCB2
b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBN
ZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbgogICAgIGFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVz
c2FnZSwgU3RyaW5nKCksIDAsIDAsIFdURk1vdmUoY2FsbFN0YWNrKSwgMCk7CiB9CiAKLXZvaWQg
UGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3Nh
Z2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlVGV4dCwgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRVUkwsIHVuc2lnbmVkIHN1Z2dlc3RlZExpbmVOdW1iZXIsIHVuc2lnbmVkIHN1Z2dl
c3RlZENvbHVtbk51bWJlciwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3RhY2ssIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3Zv
aWQgUGFnZUNvbnNvbGVDbGllbnQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1l
c3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlVGV4dCwgY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRVUkwsIHVuc2lnbmVkIHN1Z2dlc3RlZExpbmVOdW1iZXIsIHVuc2lnbmVkIHN1
Z2dlc3RlZENvbHVtbk51bWJlciwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3RhY2ss
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxvbmcg
cmVxdWVzdElkZW50aWZpZXIpCiB7CiAgICAgaWYgKG11dGVDb3VudCAmJiBzb3VyY2UgIT0gTWVz
c2FnZVNvdXJjZTo6Q29uc29sZUFQSSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYzLDE4ICsxNjMs
MTggQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb24KICAgICBpZiAoY2FsbFN0YWNrKQogICAgICAg
ICBtZXNzYWdlID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3I6OkNvbnNvbGVNZXNzYWdlPihzb3VyY2Us
IE1lc3NhZ2VUeXBlOjpMb2csIGxldmVsLCBtZXNzYWdlVGV4dCwgY2FsbFN0YWNrLnJlbGVhc2VO
b25OdWxsKCksIHJlcXVlc3RJZGVudGlmaWVyKTsKICAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2Ug
PSBtYWtlVW5pcXVlPEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U+KHNvdXJjZSwgTWVzc2FnZVR5
cGU6OkxvZywgbGV2ZWwsIG1lc3NhZ2VUZXh0LCBzdWdnZXN0ZWRVUkwsIHN1Z2dlc3RlZExpbmVO
dW1iZXIsIHN1Z2dlc3RlZENvbHVtbk51bWJlciwgc3RhdGUsIHJlcXVlc3RJZGVudGlmaWVyKTsK
KyAgICAgICAgbWVzc2FnZSA9IG1ha2VVbmlxdWU8SW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZT4o
c291cmNlLCBNZXNzYWdlVHlwZTo6TG9nLCBsZXZlbCwgbWVzc2FnZVRleHQsIHN1Z2dlc3RlZFVS
TCwgc3VnZ2VzdGVkTGluZU51bWJlciwgc3VnZ2VzdGVkQ29sdW1uTnVtYmVyLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCByZXF1ZXN0SWRlbnRpZmllcik7CiAKICAgICBhZGRNZXNzYWdlKFdURk1vdmUo
bWVzc2FnZSkpOwogfQogCiAKLXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlw
ZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMp
Cit2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdl
VHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVu
dHMpCiB7CiAgICAgU3RyaW5nIG1lc3NhZ2VUZXh0OwogICAgIGJvb2wgZ290TWVzc2FnZSA9IGFy
Z3VtZW50cy0+Z2V0Rmlyc3RBcmd1bWVudEFzU3RyaW5nKG1lc3NhZ2VUZXh0KTsKIAotICAgIGF1
dG8gbWVzc2FnZSA9IG1ha2VVbmlxdWU8SW5zcGVjdG9yOjpDb25zb2xlTWVzc2FnZT4oTWVzc2Fn
ZVNvdXJjZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2VUZXh0LCBhcmd1bWVudHMu
Y29weVJlZigpLCBleGVjKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBtYWtlVW5pcXVlPEluc3BlY3Rv
cjo6Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksIHR5cGUsIGxldmVs
LCBtZXNzYWdlVGV4dCwgYXJndW1lbnRzLmNvcHlSZWYoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAKICAgICBTdHJpbmcgdXJsID0gbWVzc2FnZS0+dXJsKCk7CiAgICAgdW5zaWduZWQgbGluZU51
bWJlciA9IG1lc3NhZ2UtPmxpbmUoKTsKQEAgLTE4OSw1MiArMTg5LDUyIEBAIHZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1l
c3NhZ2VMZXZlbCBsCiAgICAgICAgIG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5hZGRNZXNzYWdl
VG9Db25zb2xlKE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksIGxldmVsLCBtZXNzYWdlVGV4dCwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyLCB1cmwpOwogCiAgICAgaWYgKG1fcGFnZS5zZXR0aW5n
cygpLmxvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKCkgfHwgUGFnZUNvbnNv
bGVDbGllbnQ6OnNob3VsZFByaW50RXhjZXB0aW9ucygpKQotICAgICAgICBDb25zb2xlQ2xpZW50
OjpwcmludENvbnNvbGVNZXNzYWdlV2l0aEFyZ3VtZW50cyhNZXNzYWdlU291cmNlOjpDb25zb2xl
QVBJLCB0eXBlLCBsZXZlbCwgZXhlYywgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgQ29u
c29sZUNsaWVudDo6cHJpbnRDb25zb2xlTWVzc2FnZVdpdGhBcmd1bWVudHMoTWVzc2FnZVNvdXJj
ZTo6Q29uc29sZUFQSSwgdHlwZSwgbGV2ZWwsIGxleGljYWxHbG9iYWxPYmplY3QsIFdURk1vdmUo
YXJndW1lbnRzKSk7CiB9CiAKLXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmNvdW50KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsKQordm9pZCBQYWdlQ29uc29sZUNsaWVu
dDo6Y291bnQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBsYWJlbCkKIHsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVD
b3VudChtX3BhZ2UsIGV4ZWMsIGxhYmVsKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmNvbnNvbGVDb3VudChtX3BhZ2UsIGxleGljYWxHbG9iYWxPYmplY3QsIGxhYmVsKTsKIH0KIAot
dm9pZCBQYWdlQ29uc29sZUNsaWVudDo6Y291bnRSZXNldChKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nJiBsYWJlbCkKK3ZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OmNvdW50UmVzZXQo
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBs
YWJlbCkKIHsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudFJlc2V0
KG1fcGFnZSwgZXhlYywgbGFiZWwpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29u
c29sZUNvdW50UmVzZXQobV9wYWdlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBsYWJlbCk7CiB9CiAK
LXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgdGl0bGUpCit2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpwcm9maWxlKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgdGl0bGUp
CiB7CiAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNTM0OTk+IFdlYiBJbnNw
ZWN0b3I6IGNvbnNvbGUucHJvZmlsZSBzaG91bGQgdXNlIHRoZSBuZXcgU2FtcGxpbmcgUHJvZmls
ZXIKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0YXJ0UHJvZmlsaW5nKG1fcGFnZSwg
ZXhlYywgdGl0bGUpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRQcm9maWxp
bmcobV9wYWdlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aXRsZSk7CiB9CiAKLXZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6OnByb2ZpbGVFbmQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCit2b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAg
ICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNTM0OTk+IFdlYiBJbnNwZWN0b3I6
IGNvbnNvbGUucHJvZmlsZSBzaG91bGQgdXNlIHRoZSBuZXcgU2FtcGxpbmcgUHJvZmlsZXIKLSAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BQcm9maWxpbmcobV9wYWdlLCBleGVjLCB0
aXRsZSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wUHJvZmlsaW5nKG1fcGFn
ZSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgdGl0bGUpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQ2xp
ZW50Ojp0YWtlSGVhcFNuYXBzaG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKK3ZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25hcHNob3QoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp0YWtlSGVhcFNuYXBzaG90KG1fcGFnZS5tYWluRnJhbWUoKSwgdGl0bGUpOwogfQog
Ci12b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojp0aW1lKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIGxhYmVsKQordm9pZCBQYWdlQ29uc29sZUNsaWVudDo6dGltZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewot
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RhcnRDb25zb2xlVGltaW5nKG1fcGFnZS5t
YWluRnJhbWUoKSwgZXhlYywgbGFiZWwpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c3RhcnRDb25zb2xlVGltaW5nKG1fcGFnZS5tYWluRnJhbWUoKSwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgbGFiZWwpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQ2xpZW50Ojp0aW1lTG9nKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYm
IGFyZ3VtZW50cykKK3ZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnRpbWVMb2coSlNDOjpKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUmVmPFNj
cmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpsb2dDb25zb2xlVGltaW5nKG1fcGFnZS5tYWluRnJhbWUoKSwgZXhlYywgbGFiZWwsIFdU
Rk1vdmUoYXJndW1lbnRzKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2dDb25z
b2xlVGltaW5nKG1fcGFnZS5tYWluRnJhbWUoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbGFiZWws
IFdURk1vdmUoYXJndW1lbnRzKSk7CiB9CiAKLXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnRpbWVF
bmQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIFBhZ2VD
b25zb2xlQ2xpZW50Ojp0aW1lRW5kKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzdG9wQ29uc29sZVRpbWluZyhtX3BhZ2UubWFpbkZyYW1lKCksIGV4ZWMsIGxhYmVsKTsK
KyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnN0b3BDb25zb2xlVGltaW5nKG1fcGFnZS5t
YWluRnJhbWUoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbGFiZWwpOwogfQogCi12b2lkIFBhZ2VD
b25zb2xlQ2xpZW50Ojp0aW1lU3RhbXAoSlNDOjpFeGVjU3RhdGUqLCBSZWY8U2NyaXB0QXJndW1l
bnRzPiYmIGFyZ3VtZW50cykKK3ZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnRpbWVTdGFtcChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7CiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb25zb2xlVGltZVN0YW1wKG1fcGFnZS5tYWlu
RnJhbWUoKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKIH0KQEAgLTI2NSwxOCArMjY1LDE4IEBAIHN0
YXRpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBQYWdl
Q29uc29sZUNsaWVudDo6cmVjb3JkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmPFNjcmlwdEFy
Z3VtZW50cz4mJiBhcmd1bWVudHMpCit2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpyZWNvcmQoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmPFNjcmlwdEFyZ3VtZW50
cz4mJiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKGF1dG8qIHRhcmdldCA9IG9iamVjdEFyZ3VtZW50
QXQoYXJndW1lbnRzLCAwKSkgewotICAgICAgICBpZiAoYXV0byogY29udGV4dCA9IGNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQoc3RhdGUtPnZtKCksIHRhcmdldCkpCi0gICAgICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcygqY29udGV4dCwg
KnN0YXRlLCBvYmplY3RBcmd1bWVudEF0KGFyZ3VtZW50cywgMSkpOworICAgICAgICBpZiAoYXV0
byogY29udGV4dCA9IGNhbnZhc1JlbmRlcmluZ0NvbnRleHQobGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKSwgdGFyZ2V0KSkKKyAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29u
c29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKCpjb250ZXh0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwg
b2JqZWN0QXJndW1lbnRBdChhcmd1bWVudHMsIDEpKTsKICAgICB9CiB9CiAKLXZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6OnJlY29yZEVuZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxTY3JpcHRB
cmd1bWVudHM+JiYgYXJndW1lbnRzKQordm9pZCBQYWdlQ29uc29sZUNsaWVudDo6cmVjb3JkRW5k
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFJlZjxTY3JpcHRBcmd1
bWVudHM+JiYgYXJndW1lbnRzKQogewogICAgIGlmIChhdXRvKiB0YXJnZXQgPSBvYmplY3RBcmd1
bWVudEF0KGFyZ3VtZW50cywgMCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBjYW52
YXNSZW5kZXJpbmdDb250ZXh0KHN0YXRlLT52bSgpLCB0YXJnZXQpKQorICAgICAgICBpZiAoYXV0
byogY29udGV4dCA9IGNhbnZhc1JlbmRlcmluZ0NvbnRleHQobGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKSwgdGFyZ2V0KSkKICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
RmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoKmNvbnRleHQsIHRydWUpOwogICAgIH0KIH0KQEAg
LTMwMSw5ICszMDEsOSBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBzbmFwc2hvdENhbnZhcyhI
VE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCwgQ2FudmFzUgogICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiB9CiAKLXZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmIGFyZ3VtZW50cykKK3ZvaWQg
UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7Ci0gICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgU3RyaW5nIGRhdGFVUkw7CiAgICAgSlNDOjpKU1ZhbHVlIHRh
cmdldDsKIApAQCAtMzg4LDcgKzM4OCw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVl
bnNob3QoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmCiAgICAg
ICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE4MDgzMz4gV2ViIEluc3Bl
Y3Rvcjogc3VwcG9ydCBPZmZzY3JlZW5DYW52YXMgZm9yIENhbnZhcyByZWxhdGVkIG9wZXJhdGlv
bnMKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBiYXNlNjQ7Ci0gICAgICAg
ICAgICBpZiAocG9zc2libGVUYXJnZXQuZ2V0U3RyaW5nKHN0YXRlLCBiYXNlNjQpICYmIGJhc2U2
NC5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoImRhdGE6Il9zKSAmJiBiYXNlNjQubGVuZ3Ro
KCkgPiA1KSB7CisgICAgICAgICAgICBpZiAocG9zc2libGVUYXJnZXQuZ2V0U3RyaW5nKGxleGlj
YWxHbG9iYWxPYmplY3QsIGJhc2U2NCkgJiYgYmFzZTY0LnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZSgiZGF0YToiX3MpICYmIGJhc2U2NC5sZW5ndGgoKSA+IDUpIHsKICAgICAgICAgICAgICAg
ICB0YXJnZXQgPSBwb3NzaWJsZVRhcmdldDsKICAgICAgICAgICAgICAgICBkYXRhVVJMID0gYmFz
ZTY0OwogICAgICAgICAgICAgfQpAQCAtNDEzLDcgKzQxMyw3IEBAIHZvaWQgUGFnZUNvbnNvbGVD
bGllbnQ6OnNjcmVlbnNob3QoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8U2NyaXB0QXJndW1l
bnRzPiYmCiAgICAgYWRqdXN0ZWRBcmd1bWVudHMuYXBwZW5kKHsgdm0sIHRhcmdldCA/IHRhcmdl
dCA6IEpTQzo6anNOb250cml2aWFsU3RyaW5nKHZtLCAiVmlld3BvcnQiX3MpIH0pOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAoIXRhcmdldCA/IDAgOiAxKTsgaSA8IGFyZ3VtZW50cy0+YXJndW1lbnRD
b3VudCgpOyArK2kpCiAgICAgICAgIGFkanVzdGVkQXJndW1lbnRzLmFwcGVuZCh7IHZtLCBhcmd1
bWVudHMtPmFyZ3VtZW50QXQoaSkgfSk7Ci0gICAgYXJndW1lbnRzID0gU2NyaXB0QXJndW1lbnRz
OjpjcmVhdGUoKnN0YXRlLCBXVEZNb3ZlKGFkanVzdGVkQXJndW1lbnRzKSk7CisgICAgYXJndW1l
bnRzID0gU2NyaXB0QXJndW1lbnRzOjpjcmVhdGUobGV4aWNhbEdsb2JhbE9iamVjdCwgV1RGTW92
ZShhZGp1c3RlZEFyZ3VtZW50cykpOwogICAgIGFkZE1lc3NhZ2UobWFrZVVuaXF1ZTxJbnNwZWN0
b3I6OkNvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCBNZXNzYWdlVHlw
ZTo6SW1hZ2UsIE1lc3NhZ2VMZXZlbDo6TG9nLCBkYXRhVVJMLCBXVEZNb3ZlKGFyZ3VtZW50cykp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5oCmluZGV4IGQ1NmE2
ZjVkMTE5ODBjYjRmYjI4N2ZhMmM3NWIxNmQyZDUzOTUwMzUuLjQ5MjliNDI1N2RiYmQ2ZTZmNDQ5
YTc1MGY4NmYzYTllMGEwYzFjM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUNvbnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmgKQEAgLTM4LDcgKzM4LDYgQEAgY2xhc3MgQ29uc29sZU1lc3NhZ2U7CiAKIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgQ2FsbEZyYW1lOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwog
fQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MiwyNCArNjEsMjQgQEAgY2xhc3MgV0VCQ09S
RV9FWFBPUlQgUGFnZUNvbnNvbGVDbGllbnQgZmluYWwgOiBwdWJsaWMgSlNDOjpDb25zb2xlQ2xp
ZW50IHsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYWRkTWVzc2FnZSBmdW5jdGlvbiBhcmUgZGVw
cmVjYXRlZC4KICAgICAvLyBDYWxsZXJzIHNob3VsZCB0cnkgdG8gY3JlYXRlIHRoZSBDb25zb2xl
TWVzc2FnZSB0aGVtc2VsdmVzLgotICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmID0gbnVsbHB0ciwgSlNDOjpFeGVjU3RhdGUqID0g
bnVsbHB0ciwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciA9IDApOworICAgIHZvaWQg
YWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmID0g
bnVsbHB0ciwgSlNDOjpKU0dsb2JhbE9iamVjdCogPSBudWxscHRyLCB1bnNpZ25lZCBsb25nIHJl
cXVlc3RJZGVudGlmaWVyID0gMCk7CiAgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Us
IE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBSZWY8SW5zcGVjdG9yOjpTY3Jp
cHRDYWxsU3RhY2s+JiYpOwogICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRl
bnRpZmllciA9IDAsIERvY3VtZW50KiA9IG51bGxwdHIpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBKU0M6
OkV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgbGFiZWwpIG92
ZXJyaWRlOwotICAgIHZvaWQgY291bnRSZXNldChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgbGFiZWwpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvZmlsZShKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJvZmlsZUVuZChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgdGFrZUhl
YXBTbmFwc2hvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRl
OwotICAgIHZvaWQgdGltZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgbGFiZWwpIG92
ZXJyaWRlOwotICAgIHZvaWQgdGltZUxvZyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYg
bGFiZWwsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB0aW1lRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJlbCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB0aW1lU3RhbXAoSlNDOjpFeGVjU3RhdGUqLCBSZWY8SW5zcGVjdG9yOjpT
Y3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVjb3JkKEpTQzo6RXhlY1N0
YXRlKiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKLSAgICB2
b2lkIHJlY29yZEVuZChKU0M6OkV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3Vt
ZW50cz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY3JlZW5zaG90KEpTQzo6RXhlY1N0YXRlKiwg
UmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIG1l
c3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRl
OworICAgIHZvaWQgY291bnQoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFi
ZWwpIG92ZXJyaWRlOworICAgIHZvaWQgY291bnRSZXNldChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJiBsYWJlbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9maWxlKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsKKyAgICB2b2lkIHBy
b2ZpbGVFbmQoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJy
aWRlOworICAgIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB0aW1lKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBvdmVycmlkZTsKKyAgICB2b2lkIHRpbWVMb2co
SlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwsIFJlZjxJbnNwZWN0b3I6
OlNjcmlwdEFyZ3VtZW50cz4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCB0aW1lRW5kKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBvdmVycmlkZTsKKyAgICB2b2lkIHRp
bWVTdGFtcChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlY29yZChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
UmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJl
Y29yZEVuZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1l
bnRzPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjcmVlbnNob3QoSlNDOjpKU0dsb2JhbE9iamVj
dCosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgb3ZlcnJpZGU7CiAKIHByaXZh
dGU6CiAgICAgUGFnZSYgbV9wYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCmluZGV4IDY0
YTNkMzc4MGI0MjgxZWViYTg5M2FjZTM1N2ZiZWM1OTM5MGM3OTAuLjQ3NGIwMjk1MDcxNGM0MWMy
NmVmYTk1MmY2ZTE2MjMyZDkwMDdmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKQEAg
LTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhZ2VHcm91
cC5oIgogCisjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUgIkRPTVdyYXBw
ZXJXb3JsZC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiU3RvcmFn
ZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3RydWN0dXJlSW5saW5lcy5oPgpAQCAtMTA2LDcgKzEw
Niw3IEBAIHZvaWQgUGFnZUdyb3VwOjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKIHsKICAg
ICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKQogICAgICAgICBwYWdlLT5jYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkKCk7Ci0gICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JD
YXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xl
dG9uKCkubWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogfQogCiBDYXB0
aW9uVXNlclByZWZlcmVuY2VzJiBQYWdlR3JvdXA6OmNhcHRpb25QcmVmZXJlbmNlcygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAKaW5kZXggYjkwNGMyM2VkYmVh
Yzc0MTJmMDliMGMzM2I1OWNhMWZjYjI3MDE3ZC4uMzZlMzhkNDc5MTdlM2YyY2RiOWRkYThjMDBi
YjJkNTJhZDRiNjMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZUxvZ2dpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VMb2dnaW5n
LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBl
cmZvcm1hbmNlTG9nZ2luZy5oIgogCisjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2lu
Y2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUNhY2hl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTksOCArNTksOCBAQCBIYXNoTWFwPGNv
bnN0IGNoYXIqLCBzaXplX3Q+IFBlcmZvcm1hbmNlTG9nZ2luZzo6bWVtb3J5VXNhZ2VTdGF0aXN0
aWNzKFNob3VsZEluYwogICAgIHN0YXRzLmFkZCgiamF2YXNjcmlwdF9nY19oZWFwX2NhcGFjaXR5
Iiwgdm0uaGVhcC5jYXBhY2l0eSgpKTsKICAgICBzdGF0cy5hZGQoImphdmFzY3JpcHRfZ2NfaGVh
cF9leHRyYV9tZW1vcnlfc2l6ZSIsIHZtLmhlYXAuZXh0cmFNZW1vcnlTaXplKCkpOwogCi0gICAg
YXV0byYgcGFnZUNhY2hlID0gUGFnZUNhY2hlOjpzaW5nbGV0b24oKTsKLSAgICBzdGF0cy5hZGQo
InBhZ2VjYWNoZV9wYWdlX2NvdW50IiwgcGFnZUNhY2hlLnBhZ2VDb3VudCgpKTsKKyAgICBhdXRv
JiBiYWNrRm9yd2FyZENhY2hlID0gQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xldG9uKCk7CisgICAg
c3RhdHMuYWRkKCJiYWNrZm9yd2FyZF9jYWNoZV9wYWdlX2NvdW50IiwgYmFja0ZvcndhcmRDYWNo
ZS5wYWdlQ291bnQoKSk7CiAKICAgICBzdGF0cy5hZGQoImRvY3VtZW50X2NvdW50IiwgRG9jdW1l
bnQ6OmFsbERvY3VtZW50cygpLnNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVtb3RlRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVtb3RlRE9N
V2luZG93LmNwcAppbmRleCA2NTQ0NmIzOGY3NzFlMjJkMjA5ZDkyNzI4NTBkN2E2ZjE0OWUyMjli
Li4wY2NiMWY4ZDQ4ZDkzODVkOGUwYzgyM2ZlYzhiODZlNTZiYmNlZDBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1JlbW90ZURPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9SZW1vdGVET01XaW5kb3cuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgV2luZG93UHJv
eHkqIFJlbW90ZURPTVdpbmRvdzo6cGFyZW50KCkgY29uc3QKICAgICByZXR1cm4gJm1fZnJhbWUt
PndpbmRvd1Byb3h5KCk7CiB9CiAKLXZvaWQgUmVtb3RlRE9NV2luZG93Ojpwb3N0TWVzc2FnZShK
U0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYgaW5jdW1iZW50V2luZG93LCBKU0M6OkpTVmFsdWUg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIFZlY3RvcjxKU0M6OlN0cm9uZzxK
U0M6OkpTT2JqZWN0Pj4mJikKK3ZvaWQgUmVtb3RlRE9NV2luZG93Ojpwb3N0TWVzc2FnZShKU0M6
OkpTR2xvYmFsT2JqZWN0JiwgRE9NV2luZG93JiBpbmN1bWJlbnRXaW5kb3csIEpTQzo6SlNWYWx1
ZSBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwgVmVjdG9yPEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+PiYmKQogewogICAgIFVOVVNFRF9QQVJBTShpbmN1bWJlbnRXaW5kb3cp
OwogICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUmVtb3RlRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1JlbW90ZURPTVdp
bmRvdy5oCmluZGV4IGY1NWJmNmExYzkwYWU4YThhNzdiMWFlOGU5OTYzOTQ0MmRlNThjNmUuLjIx
NDVjYmI1Y2FhNWVhYmUxODE5NWZhMzVjYjVhZjg3ZjE5NjMwNGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUmVtb3RlRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9SZW1vdGVET01XaW5kb3cuaApAQCAtMzUsNyArMzUsNiBAQCBjbGFzcyBDYWxsRnJhbWU7CiBj
bGFzcyBKU09iamVjdDsKIGNsYXNzIEpTVmFsdWU7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3Mg
U3Ryb25nOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogfQogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC02OCw3ICs2Nyw3IEBAIGNsYXNzIFJlbW90ZURPTVdpbmRvdyBmaW5hbCA6IHB1
YmxpYyBBYnN0cmFjdERPTVdpbmRvdyB7CiAgICAgV2luZG93UHJveHkqIHRvcCgpIGNvbnN0Owog
ICAgIFdpbmRvd1Byb3h5KiBvcGVuZXIoKSBjb25zdDsKICAgICBXaW5kb3dQcm94eSogcGFyZW50
KCkgY29uc3Q7Ci0gICAgdm9pZCBwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRv
dyYgaW5jdW1iZW50V2luZG93LCBKU0M6OkpTVmFsdWUgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiB0
YXJnZXRPcmlnaW4sIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4mJik7CisgICAg
dm9pZCBwb3N0TWVzc2FnZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgRE9NV2luZG93JiBpbmN1bWJl
bnRXaW5kb3csIEpTQzo6SlNWYWx1ZSBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldE9yaWdp
biwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmKTsKIAogcHJpdmF0ZToKICAg
ICBXRUJDT1JFX0VYUE9SVCBSZW1vdGVET01XaW5kb3coUmVmPFJlbW90ZUZyYW1lPiYmLCBHbG9i
YWxXaW5kb3dJZGVudGlmaWVyJiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9S
ZW1vdGVET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZW1vdGVET01XaW5kb3cu
aWRsCmluZGV4IGU3YTlkMGNiZDUxNmUyZDRlNWFhNzVmNDVmZTJhZmM3OTRhN2Y1NmEuLmM0MmVh
OWE3YzEyNWI1OWIxNjc1NmM4NTI1NDI5MGExOTExNDRlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUmVtb3RlRE9NV2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1JlbW90ZURPTVdpbmRvdy5pZGwKQEAgLTU1LDUgKzU1LDUgQEAKICAgICBbVW5mb3JnZWFibGVd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBXaW5kb3dQcm94eT8gdG9wOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBXaW5kb3dQcm94eT8gb3BlbmVyOwogICAgIFtSZXBsYWNlYWJsZV0gcmVhZG9ubHkgYXR0
cmlidXRlIFdpbmRvd1Byb3h5PyBwYXJlbnQ7Ci0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSZJbmN1
bWJlbnRXaW5kb3csIEZvcndhcmREZWNsYXJlSW5IZWFkZXJdIHZvaWQgcG9zdE1lc3NhZ2UoYW55
IG1lc3NhZ2UsIFVTVlN0cmluZyB0YXJnZXRPcmlnaW4sIG9wdGlvbmFsIHNlcXVlbmNlPG9iamVj
dD4gdHJhbnNmZXIgPSBbXSk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCZJbmN1bWJlbnRX
aW5kb3csIEZvcndhcmREZWNsYXJlSW5IZWFkZXJdIHZvaWQgcG9zdE1lc3NhZ2UoYW55IG1lc3Nh
Z2UsIFVTVlN0cmluZyB0YXJnZXRPcmlnaW4sIG9wdGlvbmFsIHNlcXVlbmNlPG9iamVjdD4gdHJh
bnNmZXIgPSBbXSk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaAppbmRleCAzYmJiYjE0OTVlNmI0MzQ3MjAxMDY4MzQ5Zjk1Yjc3NjBkNWRhMmI5Li4z
ZDRjNTZiZjQzMjQ1YzMxOTQxZjA2NGVhZTU0NTU0NmVkNDY3MmFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaApAQCAtMTQ3LDkgKzE0Nyw2IEBAIGNs
YXNzIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMgewogICAgIHZvaWQgc2V0SXNJVFBEYXRhYmFzZUVu
YWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCA9IGlzRW5hYmxl
ZDsgfQogICAgIGJvb2wgaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
SVRQRGF0YWJhc2VFbmFibGVkOyB9CiAKLSAgICB2b2lkIHNldElzSVRQU2Vzc2lvblN3aXRjaGlu
Z0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc0lUUFNlc3Npb25Td2l0Y2hpbmdFbmFibGVk
ID0gaXNFbmFibGVkOyB9Ci0gICAgYm9vbCBpc0lUUFNlc3Npb25Td2l0Y2hpbmdFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0lUUFNlc3Npb25Td2l0Y2hpbmdFbmFibGVkOyB9Ci0KICAgICB2
b2lkIHNldFJlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoYm9vbCBpc0VuYWJsZWQpIHsgbV9p
c1Jlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3MgPSBpc0VuYWJsZWQ7IH0KICAgICBib29sIHJl
c3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzdHJpY3Rl
ZEhUVFBSZXNwb25zZUFjY2VzczsgfQogCkBAIC00MjAsNyArNDE3LDYgQEAgY2xhc3MgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcyB7CiAgICAgYm9vbCBtX2FjY2Vzc2liaWxpdHlPYmplY3RNb2RlbEVu
YWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9hcmlhUmVmbGVjdGlvbkVuYWJsZWQgeyB0cnVl
IH07CiAgICAgYm9vbCBtX2l0cERlYnVnTW9kZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzSVRQ
U2Vzc2lvblN3aXRjaGluZ0VuYWJsZWQgeyB0cnVlIH07CiAgICAgYm9vbCBtX2lzUmVzdHJpY3Rl
ZEhUVFBSZXNwb25zZUFjY2VzcyB7IHRydWUgfTsKICAgICBib29sIG1fY3Jvc3NPcmlnaW5SZXNv
dXJjZVBvbGljeUVuYWJsZWQgeyB0cnVlIH07CiAgICAgYm9vbCBtX2lzV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFTVENTdXBwb3J0RW5hYmxlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LnlhbWwKaW5kZXggNDdmMGVkNmE4ZWYwODU1ZmE1YTU0MjQ0OGExM2IyMzYzMzkyNDUwYy4uMzU3
NzBhZmIwZTM2NWFmZjkxMWFhYzFmNWZmYWQxNjM4ODNlY2E3MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MueWFtbApAQCAtMTc3LDcgKzE3Nyw3IEBAIHRyZWF0c0FueVRleHRDU1NMaW5rQXNTdHls
ZXNoZWV0OgogICBpbml0aWFsOiBmYWxzZQogc2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNUb0ZpdDoK
ICAgaW5pdGlhbDogdHJ1ZQotcGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zOgorYmFja0ZvcndhcmRD
YWNoZVN1cHBvcnRzUGx1Z2luczoKICAgaW5pdGlhbDogZmFsc2UKIHNob3dzVVJMc0luVG9vbFRp
cHM6CiAgIGluaXRpYWw6IGZhbHNlCkBAIC03MTYsOSArNzE2LDkgQEAgcGx1Z2luc0VuYWJsZWQ6
CiAgIGdldHRlcjogYXJlUGx1Z2luc0VuYWJsZWQKICAgb25DaGFuZ2U6IHBsdWdpbnNFbmFibGVk
Q2hhbmdlZAogCi11c2VzUGFnZUNhY2hlOgordXNlc0JhY2tGb3J3YXJkQ2FjaGU6CiAgIGluaXRp
YWw6IGZhbHNlCi0gIG9uQ2hhbmdlOiB1c2VzUGFnZUNhY2hlQ2hhbmdlZAorICBvbkNoYW5nZTog
dXNlc0JhY2tGb3J3YXJkQ2FjaGVDaGFuZ2VkCiAKIGRuc1ByZWZldGNoaW5nRW5hYmxlZDoKICAg
aW5pdGlhbDogZmFsc2UKQEAgLTg2OSw4ICs4NjksOCBAQCB3ZWJSVENFbmNyeXB0aW9uRW5hYmxl
ZDoKICAgaW5pdGlhbDogdHJ1ZQogICBpbnNwZWN0b3JPdmVycmlkZTogdHJ1ZQogCi1pc0lUUFNl
c3Npb25Td2l0Y2hpbmdFbmFibGVkOgotICBpbml0aWFsOiB0cnVlCitpc1RoaXJkUGFydHlDb29r
aWVCbG9ja2luZ09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uRW5hYmxlZDoKKyAgaW5pdGlh
bDogZmFsc2UKIAogaXNMb2dnZWRJbkFQSUVuYWJsZWQ6CiAgIGluaXRpYWw6IGZhbHNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAKaW5kZXggMjdlZWE2YzBhYjkzOGViYzhmOTY1ZGFj
YjgyMDMxMTQ0MzE2MGI5YS4uYzk4OTlhZGVmMDkzZmI0ZjFjMTUwODdjZGNmN2EyYTNkYmI0ZjAz
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmNwcApAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIlNldHRpbmdzQmFzZS5oIgogCiAjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisj
aW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ29v
a2llU3RvcmFnZS5oIgpAQCAtNDAsNyArNDEsNiBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBh
Z2VDYWNoZS5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrcy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0zNjIsMTMgKzM2
MiwxMyBAQCB2b2lkIFNldHRpbmdzQmFzZTo6dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQo
KQogICAgICAgICBtX3BhZ2UtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKCk7CiB9CiAK
LXZvaWQgU2V0dGluZ3NCYXNlOjp1c2VzUGFnZUNhY2hlQ2hhbmdlZCgpCit2b2lkIFNldHRpbmdz
QmFzZTo6dXNlc0JhY2tGb3J3YXJkQ2FjaGVDaGFuZ2VkKCkKIHsKICAgICBpZiAoIW1fcGFnZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3BhZ2UtPnNldHRpbmdzKCkudXNlc1BhZ2VD
YWNoZSgpKQotICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAs
IFBydW5pbmdSZWFzb246Ok5vbmUpOworICAgIGlmICghbV9wYWdlLT5zZXR0aW5ncygpLnVzZXNC
YWNrRm9yd2FyZENhY2hlKCkpCisgICAgICAgIEJhY2tGb3J3YXJkQ2FjaGU6OnNpbmdsZXRvbigp
LnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOwogfQogCiB2b2lkIFNldHRp
bmdzQmFzZTo6ZG5zUHJlZmV0Y2hpbmdFbmFibGVkQ2hhbmdlZCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5nc0Jhc2UuaAppbmRleCBiODUwMWNiNzFhOTRjMWFhMDdiZjFhMTJmYmY1OTM1MTczNmRkYjBm
Li4xZDk4M2EyMGE3NjY0OTNhOTk2OTg5Y2UwY2Y4MGJmYTkyNzU2NjFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3NCYXNlLmgKQEAgLTE4NSw3ICsxODUsNyBAQCBjbGFzcyBTZXR0aW5nc0Jhc2Ug
ewogICAgIHZvaWQgaW1hZ2VzRW5hYmxlZENoYW5nZWQoKTsKICAgICB2b2lkIHBsdWdpbnNFbmFi
bGVkQ2hhbmdlZCgpOwogICAgIHZvaWQgdXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKTsK
LSAgICB2b2lkIHVzZXNQYWdlQ2FjaGVDaGFuZ2VkKCk7CisgICAgdm9pZCB1c2VzQmFja0Zvcndh
cmRDYWNoZUNoYW5nZWQoKTsKICAgICB2b2lkIGRuc1ByZWZldGNoaW5nRW5hYmxlZENoYW5nZWQo
KTsKICAgICB2b2lkIHN0b3JhZ2VCbG9ja2luZ1BvbGljeUNoYW5nZWQoKTsKICAgICB2b2lkIGJh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dPcldvcmtlckdsb2JhbFNjb3BlLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvV2luZG93T3JXb3JrZXJHbG9iYWxTY29wZS5pZGwKaW5kZXggZjYyM2FkZTRl
ODZiYTE5NGNiMjM3MTYzODg3NzA1OWM0M2FiNzg0NC4uMmIxOGI3Zjc1NmFkMmViNjdiMWM5Y2Zi
OWYxMDZkOGMxZjQyMDZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dP
cldvcmtlckdsb2JhbFNjb3BlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd09y
V29ya2VyR2xvYmFsU2NvcGUuaWRsCkBAIC00MiwxMCArNDIsMTAgQEAgdHlwZWRlZiAoQ2FudmFz
SW1hZ2VTb3VyY2Ugb3IgQmxvYiBvciBJbWFnZURhdGEpIEltYWdlQml0bWFwU291cmNlOwogCiAg
ICAgLy8gVGltZXJzCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHRha2UgYSBUaW1lckhhbmRs
ZXIgKGEuay5hLiAoRE9NU3RyaW5nIG9yIEZ1bmN0aW9uKSkgcmF0aGVyIHRoYW4gYSBTY2hlZHVs
ZWRBY3Rpb24uCi0gICAgW0NhbGxXaXRoPUV4ZWNTdGF0ZSwgTWF5VGhyb3dFeGNlcHRpb25dIGxv
bmcgc2V0VGltZW91dChTY2hlZHVsZWRBY3Rpb24gaGFuZGxlciwgb3B0aW9uYWwgbG9uZyB0aW1l
b3V0ID0gMCwgYW55Li4uIGFyZ3VtZW50cyk7CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwg
TWF5VGhyb3dFeGNlcHRpb25dIGxvbmcgc2V0VGltZW91dChTY2hlZHVsZWRBY3Rpb24gaGFuZGxl
ciwgb3B0aW9uYWwgbG9uZyB0aW1lb3V0ID0gMCwgYW55Li4uIGFyZ3VtZW50cyk7CiAgICAgdm9p
ZCBjbGVhclRpbWVvdXQob3B0aW9uYWwgbG9uZyBoYW5kbGUgPSAwKTsKICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgdGFrZSBhIFRpbWVySGFuZGxlciAoYS5rLmEuIChET01TdHJpbmcgb3IgRnVu
Y3Rpb24pKSByYXRoZXIgdGhhbiBhIFNjaGVkdWxlZEFjdGlvbi4KLSAgICBbQ2FsbFdpdGg9RXhl
Y1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlvbl0gbG9uZyBzZXRJbnRlcnZhbChTY2hlZHVsZWRBY3Rp
b24gaGFuZGxlciwgb3B0aW9uYWwgbG9uZyB0aW1lb3V0ID0gMCwgYW55Li4uIGFyZ3VtZW50cyk7
CisgICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb25dIGxvbmcgc2V0
SW50ZXJ2YWwoU2NoZWR1bGVkQWN0aW9uIGhhbmRsZXIsIG9wdGlvbmFsIGxvbmcgdGltZW91dCA9
IDAsIGFueS4uLiBhcmd1bWVudHMpOwogICAgIHZvaWQgY2xlYXJJbnRlcnZhbChvcHRpb25hbCBs
b25nIGhhbmRsZSA9IDApOwogCiAgICAgW0N1c3RvbV0gdm9pZCBxdWV1ZU1pY3JvdGFzayhWb2lk
Q2FsbGJhY2sgY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25CYXNlLmNwcAppbmRleCBkZWNhNmMxYzg1N2E2MjQzNDVkOGQ5ZGYzMzBmZGFjYjg3
MzQxNzg0Li4wYTZhZmY5ZDcxYjRjNWM1OGNmOGQ3YjdjZmFkYTViNWM4N2ViZmU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApAQCAtODEs
NyArODEsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnNldE5lZWRzU3R5bGVSZWNhbGMoRWxlbWVu
dCogZWxlbWVudCkKICAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC0+ZG9jdW1lbnQoKS5yZW5k
ZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVs
ZW1lbnQtPmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5QYWdl
Q2FjaGUpOworICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVT
dGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwogICAgIGVsZW1lbnQt
PmludmFsaWRhdGVTdHlsZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDEzYzMxZjU3NjRi
N2IyMjRhMmI3ZWE1NWFlMzNhNmIzOTg2Yjk2ZDIuLmNhODkwZTc3YjA5OWQzMGI5ZjFiYWVlZjY2
Njk5ZGM0MjNiNTJhZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0xNTAsNyArMTUwLDcgQEAgT3B0
aW9uYWw8U2Vjb25kcz4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1h
dGlvbnMoU2V0Q2hhbmdlZCBjYWwKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9ICpjb21wb3NpdGVB
bmltYXRpb24ua2V5OwotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LmRvY3VtZW50KCku
cGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChlbGVtZW50LmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkg
PT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7CiAgICAgICAgICAgICAgICAgZWxl
bWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKICAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRFdmVudFRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgQQogdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkRWxlbWVu
dENoYW5nZVRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBtX2VsZW1lbnRDaGFu
Z2VzVG9EaXNwYXRjaC5hcHBlbmQoZWxlbWVudCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudENoYW5n
ZXNUb0Rpc3BhdGNoLmxhc3QoKS0+ZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3Vt
ZW50OjpOb3RJblBhZ2VDYWNoZSk7CisgICAgQVNTRVJUKG1fZWxlbWVudENoYW5nZXNUb0Rpc3Bh
dGNoLmxhc3QoKS0+ZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVu
dDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWRE
aXNwYXRjaGVyKCk7CiB9CiAKQEAgLTYwOSw3ICs2MDksNyBAQCB2b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCkKIAogICAgIGlmIChl
bGVtZW50LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0g
RG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKKyAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgp
LmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2Fj
aGUpOwogICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7CiB9CiAKQEAgLTYxOSw3ICs2MTks
NyBAQCBBbmltYXRpb25VcGRhdGUgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0
aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdAogICAgIGlmICghaGFzT3JIYWRBbmltYXRpb25z
KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdl
Q2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSkKKyAgICBpZiAoZWxlbWVu
dC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpOb3RJbkJh
Y2tGb3J3YXJkQ2FjaGUpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBEb24ndCBydW4g
dHJhbnNpdGlvbnMgd2hlbiBwcmludGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAppbmRleCAwNDc3YTllN2QwODVlMjc3N2Rh
ZmIyY2IxY2Y5ZDliMzk5ZGM5NzRjLi44MzI1YTU5MTlhZjhkYTQwODc4Yjk2NDU1YTQ2MTQ2MThh
MWU4MzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNp
dEFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGlj
aXRBbmltYXRpb24uY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlv
bjo6c2VuZFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGRvdWJs
ZQogICAgICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50CiAgICAgICAgICAgICBhdXRvIGVs
ZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmVsZW1lbnQoKSk7CiAKLSAgICAgICAgICAgIEFTU0VS
VCghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9j
dW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKKyAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudCB8fCBl
bGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpO
b3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50KQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCmluZGV4IDlhZjVmMDg0YzUwMTM2NjAzZDUy
NGIyMGZiYTE2ZjU5NWJiOTc5ZmEuLmY5MWQzYTU1YzVjOWM3OTg0YTAyNDYxMjgzOTA3NTdjNDFm
NDFlOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5jcHAKQEAgLTM2Miw3ICszNjIsNyBAQCBib29sIEtleWZyYW1lQW5pbWF0aW9u
OjpzZW5kQW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUg
ZQogICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQKICAgICAgICAgYXV0byBlbGVtZW50ID0g
bWFrZVJlZlB0cih0aGlzLT5lbGVtZW50KCkpOwogCi0gICAgICAgIEFTU0VSVCghZWxlbWVudCB8
fCBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdElu
UGFnZUNhY2hlKTsKKyAgICAgICAgQVNTRVJUKCFlbGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50
KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRD
YWNoZSk7CiAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5j
cHAKaW5kZXggMTlmMDMxZTY0OGNhNGViNzI1MjA3NzhhYzhiYWVlNjQwMzNmYWIwOS4uYWQ2ZjUy
MDljNTJlMDg0MmQ5M2JlMjY3ZjhmNWU5OTU1MWRmZTA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC00NjQsNyArNDY0LDcg
QEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SW5saW5lU3R5bGUoY29uc3QgU3Ry
aW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEYKICAgICByZXR1cm4gZm91bmRIYXNoSW5FbmZvcmNl
ZFBvbGljaWVzIHx8IGFsbFBvbGljaWVzV2l0aERpc3Bvc2l0aW9uQWxsb3coQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpEaXNwb3NpdGlvbjo6RW5mb3JjZSwgaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUs
ICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZv
clVuc2FmZUlubGluZVN0eWxlKTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFs
bG93RXZhbChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJp
dHlQb2xpY3kpIGNvbnN0Citib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dFdmFsKEpT
Qzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9s
aWN5KSBjb25zdAogewogICAgIGlmIChvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC02NTksMjQgKzY1OSwyNCBAQCBTdHJpbmcgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpkZXByZWNhdGVkVVJMRm9yUmVwb3J0aW5nKGNvbnN0IFVSTCYgdXJsKSBj
b25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTZWN1cml0eU9yaWdpbkRhdGE+KCptX3NlbGZT
b3VyY2UpLnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSA/IHVybC5zdHJpcHBlZEZv
clVzZUFzUmVmZXJyZXIoKSA6IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKS0+dG9TdHJpbmco
KTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFZpb2xhdGlvbihjb25z
dCBTdHJpbmcmIHZpb2xhdGVkRGlyZWN0aXZlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmUmIGVmZmVjdGl2ZVZpb2xhdGVkRGlyZWN0aXZlLCBjb25zdCBVUkwmIGJsb2NrZWRV
UkwsIGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkg
Y29uc3QKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9sYXRpb24oY29uc3Qg
U3RyaW5nJiB2aW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlJiBlZmZlY3RpdmVWaW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgVVJMJiBibG9ja2VkVVJM
LCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBzdGF0
ZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogRXh0cmFjdCBzb3VyY2UgZmlsZSBhbmQgc291cmNl
IHBvc2l0aW9uIGZyb20gSlNDOjpFeGVjU3RhdGUuCiAgICAgcmV0dXJuIHJlcG9ydFZpb2xhdGlv
bih2aW9sYXRlZERpcmVjdGl2ZSwgZWZmZWN0aXZlVmlvbGF0ZWREaXJlY3RpdmUudGV4dCgpLCBl
ZmZlY3RpdmVWaW9sYXRlZERpcmVjdGl2ZS5kaXJlY3RpdmVMaXN0KCksIGJsb2NrZWRVUkwsIGNv
bnNvbGVNZXNzYWdlLCBTdHJpbmcoKSwgVGV4dFBvc2l0aW9uKFdURjo6T3JkaW5hbE51bWJlcjo6
YmVmb3JlRmlyc3QoKSwgV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpKSwgc3RhdGUp
OwogfQogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0VmlvbGF0aW9uKGNvbnN0
IFN0cmluZyYgZWZmZWN0aXZlVmlvbGF0ZWREaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgdmlvbGF0
ZWREaXJlY3RpdmUsIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QmIHZp
b2xhdGVkRGlyZWN0aXZlTGlzdCwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25zdCBTdHJpbmcm
IGNvbnNvbGVNZXNzYWdlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIGNvbnN0Cit2b2lkIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6cmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZWZmZWN0aXZl
VmlvbGF0ZWREaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgdmlvbGF0ZWREaXJlY3RpdmUsIGNvbnN0
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QmIHZpb2xhdGVkRGlyZWN0aXZlTGlz
dCwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBzdGF0ZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogRXh0cmFj
dCBzb3VyY2UgZmlsZSBhbmQgc291cmNlIHBvc2l0aW9uIGZyb20gSlNDOjpFeGVjU3RhdGUuCiAg
ICAgcmV0dXJuIHJlcG9ydFZpb2xhdGlvbihlZmZlY3RpdmVWaW9sYXRlZERpcmVjdGl2ZSwgdmlv
bGF0ZWREaXJlY3RpdmUsIHZpb2xhdGVkRGlyZWN0aXZlTGlzdCwgYmxvY2tlZFVSTCwgY29uc29s
ZU1lc3NhZ2UsIFN0cmluZygpLCBUZXh0UG9zaXRpb24oV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZv
cmVGaXJzdCgpLCBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCkpLCBzdGF0ZSk7CiB9
CiAKLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9sYXRpb24oY29uc3QgU3Ry
aW5nJiBlZmZlY3RpdmVWaW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlJiB2aW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBj
b25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29u
c3QgVGV4dFBvc2l0aW9uJiBzb3VyY2VQb3NpdGlvbiwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlKSBj
b25zdAordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFZpb2xhdGlvbihjb25zdCBT
dHJpbmcmIGVmZmVjdGl2ZVZpb2xhdGVkRGlyZWN0aXZlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmUmIHZpb2xhdGVkRGlyZWN0aXZlLCBjb25zdCBVUkwmIGJsb2NrZWRVUkws
IGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBj
b25zdCBUZXh0UG9zaXRpb24mIHNvdXJjZVBvc2l0aW9uLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBz
dGF0ZSkgY29uc3QKIHsKICAgICByZXR1cm4gcmVwb3J0VmlvbGF0aW9uKGVmZmVjdGl2ZVZpb2xh
dGVkRGlyZWN0aXZlLCB2aW9sYXRlZERpcmVjdGl2ZS50ZXh0KCksIHZpb2xhdGVkRGlyZWN0aXZl
LmRpcmVjdGl2ZUxpc3QoKSwgYmxvY2tlZFVSTCwgY29uc29sZU1lc3NhZ2UsIHNvdXJjZVVSTCwg
c291cmNlUG9zaXRpb24sIHN0YXRlKTsKIH0KIAotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OnJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZVZpb2xhdGVkRGlyZWN0aXZl
LCBjb25zdCBTdHJpbmcmIHZpb2xhdGVkRGlyZWN0aXZlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVMaXN0JiB2aW9sYXRlZERpcmVjdGl2ZUxpc3QsIGNvbnN0IFVSTCYgYmxv
Y2tlZFVSTCwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbiYgc291cmNlUG9zaXRpb24sIEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSkgY29uc3QKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9sYXRp
b24oY29uc3QgU3RyaW5nJiBlZmZlY3RpdmVWaW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgU3RyaW5n
JiB2aW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdCYgdmlvbGF0ZWREaXJlY3RpdmVMaXN0LCBjb25zdCBVUkwmIGJsb2NrZWRVUkwsIGNvbnN0
IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBjb25zdCBU
ZXh0UG9zaXRpb24mIHNvdXJjZVBvc2l0aW9uLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBzdGF0ZSkg
Y29uc3QKIHsKICAgICBsb2dUb0NvbnNvbGUoY29uc29sZU1lc3NhZ2UsIHNvdXJjZVVSTCwgc291
cmNlUG9zaXRpb24ubV9saW5lLCBzb3VyY2VQb3NpdGlvbi5tX2NvbHVtbiwgc3RhdGUpOwogCkBA
IC04NTcsNyArODU3LDcgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydE1pc3Np
bmdSZXBvcnRVUkkoY29uc3QgU3RyaW5nJiBwb2xpY3kpIGNvbnN0CiAgICAgbG9nVG9Db25zb2xl
KCJUaGUgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgJyIgKyBwb2xpY3kgKyAiJyB3YXMgZGVsaXZl
cmVkIGluIHJlcG9ydC1vbmx5IG1vZGUsIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgJ3JlcG9ydC11
cmknOyB0aGUgcG9saWN5IHdpbGwgaGF2ZSBubyBlZmZlY3QuIFBsZWFzZSBlaXRoZXIgYWRkIGEg
J3JlcG9ydC11cmknIGRpcmVjdGl2ZSwgb3IgZGVsaXZlciB0aGUgcG9saWN5IHZpYSB0aGUgJ0Nv
bnRlbnQtU2VjdXJpdHktUG9saWN5JyBoZWFkZXIuIik7CiB9CiAKLXZvaWQgQ29udGVudFNlY3Vy
aXR5UG9saWN5Ojpsb2dUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIGNv
bnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dENvbHVtbiwgSlNDOjpFeGVjU3RhdGUqIHN0
YXRlKSBjb25zdAordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmxvZ1RvQ29uc29sZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpP
cmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250
ZXh0Q29sdW1uLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBzdGF0ZSkgY29uc3QKIHsKICAgICBpZiAo
IW1faXNSZXBvcnRpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCmluZGV4IGRjMDJiZjRmMzA2ZWFm
MjhmOWY0YTRmMWNhYjMwOTU5YjY2ZDM0NDMuLjEyZmQ0YWYyZTgzYTJhOWY1MWNlNTM4Y2ZmYTE5
OTdhNDlmZmRmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeS5oCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogY2xhc3Mg
Q2FsbEZyYW1lOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOworY2xhc3MgSlNHbG9iYWxP
YmplY3Q7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtOTQsNyArOTQsNyBAQCBjbGFzcyBDb250
ZW50U2VjdXJpdHlQb2xpY3kgewogICAgIGJvb2wgYWxsb3dJbmxpbmVTY3JpcHQoY29uc3QgU3Ry
aW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBj
b25zdCBTdHJpbmcmIHNjcmlwdENvbnRlbnQsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQ
b2xpY3kgPSBmYWxzZSkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd0lubGluZVN0eWxlKGNvbnN0IFN0
cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwg
Y29uc3QgU3RyaW5nJiBzdHlsZUNvbnRlbnQsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQ
b2xpY3kgPSBmYWxzZSkgY29uc3Q7CiAKLSAgICBib29sIGFsbG93RXZhbChKU0M6OkV4ZWNTdGF0
ZSosIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSkgY29uc3Q7Cisg
ICAgYm9vbCBhbGxvd0V2YWwoSlNDOjpKU0dsb2JhbE9iamVjdCosIGJvb2wgb3ZlcnJpZGVDb250
ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSkgY29uc3Q7CiAKICAgICBib29sIGFsbG93UGx1Z2lu
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdHlwZUF0dHJpYnV0ZSwgY29u
c3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlKSBjb25z
dDsKIApAQCAtMTc2LDcgKzE3Niw3IEBAIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeSB7CiAg
ICAgdm9pZCB1cGRhdGVTb3VyY2VTZWxmKGNvbnN0IFNlY3VyaXR5T3JpZ2luJik7CiAKIHByaXZh
dGU6Ci0gICAgdm9pZCBsb2dUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIGNvbnRleHRVUkwgPSBTdHJpbmcoKSwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBj
b250ZXh0TGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgY29uc3QgV1RG
OjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0Q29sdW1uID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZv
cmVGaXJzdCgpLCBKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyKSBjb25zdDsKKyAgICB2b2lkIGxv
Z1RvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4dFVS
TCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lID0gV1RG
OjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXIm
IGNvbnRleHRDb2x1bW4gPSBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCksIEpTQzo6
SlNHbG9iYWxPYmplY3QqID0gbnVsbHB0cikgY29uc3Q7CiAgICAgdm9pZCBhcHBseVBvbGljeVRv
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogCiAgICAgLy8gSW1wbGVtZW50cyB0aGUgZGVwcmVj
YXRlZCBDU1AyICJzdHJpcCB1cmkgZm9yIHJlcG9ydGluZyIgYWxnb3JpdGhtIGZyb20gPGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9DU1AyLyN2aW9sYXRpb24tcmVwb3J0cz4uCkBAIC0yMDYsMTAgKzIw
NiwxMCBAQCBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3kgewogICAgIHVzaW5nIEhhc2hJbkVu
Zm9yY2VkQW5kUmVwb3J0T25seVBvbGljaWVzUGFpciA9IHN0ZDo6cGFpcjxib29sLCBib29sPjsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+IEhhc2hJbkVuZm9yY2VkQW5kUmVwb3J0
T25seVBvbGljaWVzUGFpciBmaW5kSGFzaE9mQ29udGVudEluUG9saWNpZXMoUHJlZGljYXRlJiYs
IGNvbnN0IFN0cmluZyYgY29udGVudCwgT3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhh
c2hBbGdvcml0aG0+KSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CiAKLSAgICB2b2lkIHJlcG9y
dFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZVZpb2xhdGVkRGlyZWN0aXZlLCBjb25z
dCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUmIHZpb2xhdGVkRGlyZWN0aXZlLCBjb25z
dCBVUkwmIGJsb2NrZWRVUkwsIGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIEpTQzo6RXhl
Y1N0YXRlKikgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBl
ZmZlY3RpdmVWaW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgU3RyaW5nJiB2aW9sYXRlZERpcmVjdGl2
ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdCYsIGNvbnN0IFVSTCYg
YmxvY2tlZFVSTCwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgSlNDOjpFeGVjU3RhdGUq
ID0gbnVsbHB0cikgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5n
JiBlZmZlY3RpdmVWaW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlJiB2aW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25z
dCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3Qg
VGV4dFBvc2l0aW9uJiBzb3VyY2VQb3NpdGlvbiwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0cikg
Y29uc3Q7Ci0gICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBlZmZlY3RpdmVW
aW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgU3RyaW5nJiB2aW9sYXRlZERpcmVjdGl2ZSwgY29uc3Qg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdCYgdmlvbGF0ZWREaXJlY3RpdmVMaXN0
LCBjb25zdCBVUkwmIGJsb2NrZWRVUkwsIGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24mIHNvdXJjZVBvc2l0aW9u
LCBKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0OworICAgIHZvaWQgcmVwb3J0VmlvbGF0aW9uKGNvbnN0
IFN0cmluZyYgZWZmZWN0aXZlVmlvbGF0ZWREaXJlY3RpdmUsIGNvbnN0IENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZSYgdmlvbGF0ZWREaXJlY3RpdmUsIGNvbnN0IFVSTCYgYmxvY2tlZFVS
TCwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgSlNDOjpKU0dsb2JhbE9iamVjdCopIGNv
bnN0OworICAgIHZvaWQgcmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZWZmZWN0aXZlVmlv
bGF0ZWREaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgdmlvbGF0ZWREaXJlY3RpdmUsIGNvbnN0IENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QmLCBjb25zdCBVUkwmIGJsb2NrZWRVUkws
IGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIEpTQzo6SlNHbG9iYWxPYmplY3QqID0gbnVs
bHB0cikgY29uc3Q7CisgICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBlZmZl
Y3RpdmVWaW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlJiB2aW9sYXRlZERpcmVjdGl2ZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25zdCBTdHJp
bmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBv
c2l0aW9uJiBzb3VyY2VQb3NpdGlvbiwgSlNDOjpKU0dsb2JhbE9iamVjdCogPSBudWxscHRyKSBj
b25zdDsKKyAgICB2b2lkIHJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZVZp
b2xhdGVkRGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIHZpb2xhdGVkRGlyZWN0aXZlLCBjb25zdCBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0JiB2aW9sYXRlZERpcmVjdGl2ZUxpc3Qs
IGNvbnN0IFVSTCYgYmxvY2tlZFVSTCwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbiYgc291cmNlUG9zaXRpb24s
IEpTQzo6SlNHbG9iYWxPYmplY3QqKSBjb25zdDsKICAgICB2b2lkIHJlcG9ydEJsb2NrZWRTY3Jp
cHRFeGVjdXRpb25Ub0luc3BlY3Rvcihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpIGNvbnN0
OwogCiAgICAgLy8gV2UgY2FuIG5ldmVyIGhhdmUgYm90aCBhIHNjcmlwdCBleGVjdXRpb24gY29u
dGV4dCBhbmQgYSBDb250ZW50U2VjdXJpdHlQb2xpY3lDbGllbnQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
Y3BwCmluZGV4IDVmMGE5NzYzZTczZTE1MGRlMDlmZjAwZDgwYzhhNDZiNWMwMjQ5M2QuLjU0YTkw
ZTA4NWZmYmRmM2U0YTllOTQyY2NjMzk2MzFlMzUxYTY2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
Y3BwCkBAIC0yNDYsMTQgKzI0NiwxNCBAQCBib29sIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShTY3JvbGxhYmxlQXJlYSYgc2NybwogICAgIGlm
ICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoKmZyYW1lVmlldykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgaW5QYWdlQ2FjaGUgPSBmcmFtZVZpZXctPmZyYW1l
KCkuZG9jdW1lbnQoKS0+cGFnZUNhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90SW5QYWdlQ2Fj
aGU7CisgICAgYm9vbCBpbkJhY2tGb3J3YXJkQ2FjaGUgPSBmcmFtZVZpZXctPmZyYW1lKCkuZG9j
dW1lbnQoKS0+YmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluQmFja0Zv
cndhcmRDYWNoZTsKICAgICBib29sIGluUHJvZ3JhbW1hdGljU2Nyb2xsID0gc2Nyb2xsYWJsZUFy
ZWEuY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWM7Ci0gICAg
aWYgKGluUHJvZ3JhbW1hdGljU2Nyb2xsIHx8IGluUGFnZUNhY2hlKQorICAgIGlmIChpblByb2dy
YW1tYXRpY1Njcm9sbCB8fCBpbkJhY2tGb3J3YXJkQ2FjaGUpCiAgICAgICAgIHVwZGF0ZVNjcm9s
bFBvc2l0aW9uQWZ0ZXJBc3luY1Njcm9sbChzY3JvbGxpbmdOb2RlSUQsIHNjcm9sbFBvc2l0aW9u
LCB7IH0sIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFj
dGlvbjo6U2V0KTsKIAotICAgIC8vIElmIHRoaXMgZnJhbWUgdmlldydzIGRvY3VtZW50IGlzIGJl
aW5nIHB1dCBpbnRvIHRoZSBwYWdlIGNhY2hlLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBvdXIK
KyAgICAvLyBJZiB0aGlzIGZyYW1lIHZpZXcncyBkb2N1bWVudCBpcyBiZWluZyBwdXQgaW50byB0
aGUgYmFjay9mb3J3YXJkIGNhY2hlLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBvdXIKICAgICAv
LyBtYWluIGZyYW1lIHNjcm9sbCBwb3NpdGlvbi4gSnVzdCBsZXQgdGhlIEZyYW1lVmlldyB0aGlu
ayB0aGF0IHdlIGRpZC4KLSAgICBpZiAoaW5QYWdlQ2FjaGUpCisgICAgaWYgKGluQmFja0Zvcndh
cmRDYWNoZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBhdXRvKiBzdGF0ZU5vZGUgPSBk
b3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+KG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5zdGF0ZU5vZGVGb3JJRChzY3JvbGxpbmdOb2RlSUQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xlbmd0aFNpemUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xl
bmd0aFNpemUuaAppbmRleCAyMmE4MWJmZjAzYjAwZTBjZGJhNmMwYzIzZmMwZjI3ZTczYTI4MjRh
Li5iZDU3NDFhMWFkOTg0NzU2NzBhZGY5YzkyNmU0NTUxNWFhNGEzNDZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhTaXplLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTGVuZ3RoU2l6ZS5oCkBAIC0yOCw2ICsyOCw3IEBAIHN0cnVjdCBMZW5ndGhTaXpl
IHsKICAgICBMZW5ndGggaGVpZ2h0OwogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gd2lkdGguaXNaZXJvKCkgfHwgaGVpZ2h0LmlzWmVybygpOyB9CisgICAgYm9vbCBpc1plcm8o
KSBjb25zdCB7IHJldHVybiB3aWR0aC5pc1plcm8oKSAmJiBoZWlnaHQuaXNaZXJvKCk7IH0KIH07
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExlbmd0aFNpemUmIGEsIGNv
bnN0IExlbmd0aFNpemUmIGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
YXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXgg
ZDM3YzNjNWI2OWQ4NDk2N2Y1MzVhNWNlOWNkMmE2MzM3ZTBjYTc3Zi4uZDUxOGE5NTlhNzIzMzUy
N2QzZWVkZTQyN2YyMTIxMThlMmIxOTZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmQuaApAQCAtMjUzLDYgKzI1Myw4IEBAIGNsYXNzIFBhc3RlYm9hcmQgewogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBOU0FycmF5ICpzdXBwb3J0ZWRGaWxlVXBsb2FkUGFzdGVib2FyZFR5cGVz
KCk7CiAgICAgbG9uZyBjaGFuZ2VDb3VudCgpIGNvbnN0OwogICAgIGNvbnN0IFBhc3RlYm9hcmRD
dXN0b21EYXRhJiByZWFkQ3VzdG9tRGF0YSgpOworI2Vsc2UKKyAgICBsb25nIGNoYW5nZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJl
c2VudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TZXJpYWxpemVkUGxhdGZvcm1S
ZXByZXNlbnRhdGlvbi5oCmluZGV4IGQzYzg5NGUxNzQ5MDMwY2FiNDMyMGRhMTdmYmI0YjkxZjhj
NjNiY2MuLjQ0Mjg5ZWI4Njk5OTFhYWZlNTg4MDMyZWZjZjY2MWZiOTg0YTQxYWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRmb3JtUmVw
cmVzZW50YXRpb24uaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBTZXJpYWxpemVkUGxhdGZvcm1S
ZXByZXNlbnRhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcAog
cHVibGljOgogICAgIHZpcnR1YWwgflNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uKCkg
PSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgZGVzZXJpYWxpemUoSlNDOjpF
eGVjU3RhdGUqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgZGVzZXJpYWxp
emUoSlNDOjpKU0dsb2JhbE9iamVjdCopIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlZlB0cjxK
U0M6OkFycmF5QnVmZmVyPiBkYXRhKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0Vx
dWFsKGNvbnN0IFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uJikgY29uc3QgPSAwOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgKaW5kZXggMmRlZGZh
OTcyNTY4NTIwNWRjNWI4OWFhMzZlNjU1NjhmYWIyNDhjMC4uM2Q3NDE3Y2NjYzk5M2M5NDQ4OWEz
NjRkY2MxMzY3ZGI1NzA1ZGM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhyZWFkR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEds
b2JhbERhdGEuaApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENh
bGxGcmFtZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKK2NsYXNzIEpTR2xvYmFsT2Jq
ZWN0OwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw4ICs2Myw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICBJQ1VDb252ZXJ0ZXJXcmFwcGVyJiBjYWNoZWRDb252ZXJ0
ZXJJQ1UoKSB7IHJldHVybiAqbV9jYWNoZWRDb252ZXJ0ZXJJQ1U7IH0KIAotICAgICAgICBKU0M6
OkV4ZWNTdGF0ZSogY3VycmVudFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50U3RhdGU7
IH0KLSAgICAgICAgdm9pZCBzZXRDdXJyZW50U3RhdGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKSB7
IG1fY3VycmVudFN0YXRlID0gc3RhdGU7IH0KKyAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCog
Y3VycmVudFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50U3RhdGU7IH0KKyAgICAgICAg
dm9pZCBzZXRDdXJyZW50U3RhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCogc3RhdGUpIHsgbV9jdXJy
ZW50U3RhdGUgPSBzdGF0ZTsgfQogCiAjaWYgVVNFKFdFQl9USFJFQUQpCiAgICAgICAgIHZvaWQg
c2V0V2ViQ29yZVRocmVhZERhdGEoKTsKQEAgLTc4LDcgKzc4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnROYW1lcz4gbV9ldmVudE5hbWVzOwog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkVGltZXJzPiBtX3RocmVhZFRpbWVyczsKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFF1YWxpZmllZE5hbWVDYWNoZT4gbV9xdWFsaWZpZWROYW1l
Q2FjaGU7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBtX2N1cnJlbnRTdGF0ZSB7IG51bGxwdHIg
fTsKKyAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbV9jdXJyZW50U3RhdGUgeyBudWxscHRy
IH07CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGJvb2wgbV9pc01haW5UaHJlYWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2Uu
Y3BwCmluZGV4IGZkNTFiYzQ1MTE5MDU1ZGU4OTc1OTQ2NDVhMGJlNWQ0ZTdkYmRmOTIuLjY1OTA0
MTVjYzAzNzc5NmYxNGQwMzI2YjkxNjlmZTIxYTEyZWVmZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCkBAIC0xNTMs
MTIgKzE1MywxMiBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21Q
YWludChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqcGFpbnRD
b25zdHJ1Y3Rvci5nZXRPYmplY3QoKS0+Z2xvYmFsT2JqZWN0KCk7CiAKLSAgICBhdXRvJiBzdGF0
ZSA9ICpnbG9iYWxPYmplY3QuZ2xvYmFsRXhlYygpOworICAgIGF1dG8mIGxleGljYWxHbG9iYWxP
YmplY3QgPSBnbG9iYWxPYmplY3Q7CiAgICAgSlNDOjpBcmdMaXN0IG5vQXJnczsKLSAgICBKU0M6
OkpTVmFsdWUgdGhpc09iamVjdCA9IHsgSlNDOjpjb25zdHJ1Y3QoJnN0YXRlLCBwYWludENvbnN0
cnVjdG9yLCBub0FyZ3MsICJGYWlsZWQgdG8gY29uc3RydWN0IHBhaW50IGNsYXNzIikgfTsKKyAg
ICBKU0M6OkpTVmFsdWUgdGhpc09iamVjdCA9IHsgSlNDOjpjb25zdHJ1Y3QoJmxleGljYWxHbG9i
YWxPYmplY3QsIHBhaW50Q29uc3RydWN0b3IsIG5vQXJncywgIkZhaWxlZCB0byBjb25zdHJ1Y3Qg
cGFpbnQgY2xhc3MiKSB9OwogCiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkg
ewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCBzY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250
ZW50S2V5U2Vzc2lvbi5tbQppbmRleCAxZjQ2ODc5NzcwMGMwNWYzOTY5N2M1MjhiODZkNjQ3MWU4
M2MzMTNmLi5mMjBhOGQzNDZmZGE0N2QxOTcxOGUwMGQ2MGExMjVlZDVkM2UwYWViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9D
RE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vz
c2lvbi5tbQpAQCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCAiV2ViQ29yZU5TRXJyb3JFeHRyYXMu
aCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkVycm9yLmg+CiAjaW1wb3J0IDxDb3JlTWVkaWEv
Q01CYXNlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdElubGluZXMu
aD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW1wb3J0
IDxvYmpjL29iamMtcnVudGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvQVZGb3VuZGF0aW9u
U1BJLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhZGllbnREaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKaW5kZXggZmNiMTczZjJhZjE1MDUxZTE4N2E1ZWI2ZmUw
MDNkY2U3OTc5NmZiMy4uODkwOTZmNDI2ZGVlMWM3MWE3N2QxZmJjOWM0OGVjYjk3YzA5ZmEzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50
RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFkaWVudERpcmVjdDJELmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsNiArNTYsMTUgQEAgSUQyRDFCcnVzaCogR3Jh
ZGllbnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeShJRDJEMVJlbmRlclRhcmdl
dCogY29udGUKICAgICByZXR1cm4gbV9ncmFkaWVudDsKIH0KIAorc3RhdGljIGJvb2wgY2lyY2xl
SXNFbnRpcmVseUNvbnRhaW5lZChjb25zdCBGbG9hdFBvaW50JiBjZW50ZXJBLCBmbG9hdCByYWRp
dXNBLCBjb25zdCBGbG9hdFBvaW50JiBjZW50ZXJCLCBmbG9hdCByYWRpdXNCKQoreworICAgIGRv
dWJsZSBkZWx0YVggPSBjZW50ZXJCLngoKSAtIGNlbnRlckEueCgpOworICAgIGRvdWJsZSBkZWx0
YVkgPSBjZW50ZXJCLnkoKSAtIGNlbnRlckEueSgpOworICAgIGRvdWJsZSBkZWx0YVJhZGl1cyA9
IHJhZGl1c0IgLSByYWRpdXNBOworCisgICAgcmV0dXJuIGRlbHRhWCAqIGRlbHRhWCArIGRlbHRh
WSAqIGRlbHRhWSA8IGRlbHRhUmFkaXVzICogZGVsdGFSYWRpdXMgJiYgcmFkaXVzQSA8IHJhZGl1
c0I7Cit9CisKIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW5kZXJUYXJn
ZXQqIHJlbmRlclRhcmdldCkKIHsKICAgICBzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpOwpAQCAtNzUs
MTEgKzg0LDIzIEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW5kZXJU
YXJnZXQqIHJlbmRlclRhcmdldCkKICAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJikgewog
ICAgICAgICAgICAgLy8gTm8gYWN0aW9uIG5lZWRlZC4KICAgICAgICAgfSwKLSAgICAgICAgWyZd
IChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJh
ZGl1cyAmJiBkYXRhLmVuZFJhZGl1cykgewotICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0UG9z
aXRpb24gPSBzdGQ6OmFicyhkYXRhLnN0YXJ0UmFkaXVzIC8gZGF0YS5lbmRSYWRpdXMpOwotICAg
ICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gMS4wKQotICAgICAgICAgICAgICAgICAg
ICBzdGFydFBvc2l0aW9uID0gMS4wIC8gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgWyZdIChSYWRp
YWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLnN0YXJ0UmFk
aXVzID49IDApOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5lbmRSYWRpdXMgPj0g
MCk7CisKKyAgICAgICAgICAgIGlmIChkYXRhLnN0YXJ0UmFkaXVzID4gZGF0YS5lbmRSYWRpdXMp
IHsKKyAgICAgICAgICAgICAgICBncmFkaWVudFN0b3BzLnJldmVyc2UoKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8mIHN0b3AgOiBncmFkaWVudFN0b3BzKQorICAgICAgICAgICAgICAgICAg
ICBzdG9wLnBvc2l0aW9uID0gMS4wIC0gc3RvcC5wb3NpdGlvbjsKKworICAgICAgICAgICAgICAg
IHN0ZDo6c3dhcChkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLmVuZFJhZGl1cyk7CisgICAgICAgICAg
ICAgICAgc3RkOjpzd2FwKGRhdGEucG9pbnQwLCBkYXRhLnBvaW50MSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChkYXRhLnN0YXJ0UmFkaXVzKSB7CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZGF0YS5lbmRSYWRpdXMgPiAwKTsKKyAgICAgICAgICAgICAgICBmbG9h
dCBzdGFydFBvc2l0aW9uID0gZGF0YS5zdGFydFJhZGl1cyAvIGRhdGEuZW5kUmFkaXVzOworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0UG9zaXRpb24gPD0gMS4wKTsKICAgICAg
ICAgICAgICAgICBmbG9hdCBhdmFpbGFibGVSYW5nZSA9IDEuMCAtIHN0YXJ0UG9zaXRpb247CiAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXZhaWxhYmxlUmFuZ2UgPD0gMS4wICYmIGF2
YWlsYWJsZVJhbmdlID49IDApOwogCkBAIC05MCw5ICsxMTEsMTAgQEAgdm9pZCBHcmFkaWVudDo6
Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogCiAgICAg
ICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgJ3N0YXJ0JyBwb3NpdGlvbgogICAgICAgICAgICAg
ICAgIGF1dG8gZmlyc3RTdG9wID0gZ3JhZGllbnRTdG9wcy5maXJzdCgpOwotICAgICAgICAgICAg
ICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IDA7Ci0KLSAgICAgICAgICAgICAgICBncmFkaWVudFN0
b3BzLmluc2VydCgwLCBmaXJzdFN0b3ApOworICAgICAgICAgICAgICAgIGlmICghV1RGOjphcmVF
c3NlbnRpYWxseUVxdWFsKGZpcnN0U3RvcC5wb3NpdGlvbiwgMC4wZikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZmlyc3RTdG9wLnBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZ3Jh
ZGllbnRTdG9wcy5pbnNlcnQoMCwgZmlyc3RTdG9wKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgewpA
QCAtMTIwLDcgKzE0MiwxMiBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQx
UmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCiAgICAgICAgICAgICBtX2dyYWRpZW50ID0gbGlu
ZWFyR3JhZGllbnQ7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYg
ZGF0YSkgewotICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IGRhdGEucG9pbnQwIC0gZGF0
YS5wb2ludDE7CisgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0OworICAgICAgICAgICAgaWYg
KCFjaXJjbGVJc0VudGlyZWx5Q29udGFpbmVkKGRhdGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVz
LCBkYXRhLnBvaW50MSwgZGF0YS5lbmRSYWRpdXMpKQorICAgICAgICAgICAgICAgIG9mZnNldCA9
IChkYXRhLnBvaW50MS5zY2FsZWQoZGF0YS5zdGFydFJhZGl1cykgLSBkYXRhLnBvaW50MC5zY2Fs
ZWQoZGF0YS5lbmRSYWRpdXMpKSAvIChkYXRhLmVuZFJhZGl1cyAtIGRhdGEuc3RhcnRSYWRpdXMp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9mZnNldCA9IGRhdGEucG9pbnQw
IC0gZGF0YS5wb2ludDE7CisKICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2VudGVyID0gZGF0YS5w
b2ludDE7CiAgICAgICAgICAgICBmbG9hdCByYWRpdXNYID0gZGF0YS5lbmRSYWRpdXM7CiAgICAg
ICAgICAgICBmbG9hdCByYWRpdXNZID0gcmFkaXVzWCAvIGRhdGEuYXNwZWN0UmF0aW87CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5t
bQppbmRleCAzMWIyMDcwNGRhOWE1MzBlYWYzZDdjMGUxNzRmYmU2Yzk4N2ZkNzMzLi5iMzU2NTI1
N2ZhMGU0MmY2NTJmMDcwMzMxNDFkNmVjNzJjZTA1NWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTk3LDYgKzk3
LDQ1IEBAIGludCBQbGF0Zm9ybVBhc3RlYm9hcmQ6Om51bWJlck9mRmlsZXMoKSBjb25zdAogCiAj
aWYgUEFTVEVCT0FSRF9TVVBQT1JUU19JVEVNX1BST1ZJREVSUwogCitzdGF0aWMgY29uc3QgY2hh
ciAqc2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZUZvclBsYXRmb3JtVHlwZShjb25zdCBTdHJp
bmcmIHBsYXRmb3JtVHlwZSkKK3sKKyAgICBhdXRvIGNmVHlwZSA9IHBsYXRmb3JtVHlwZS5jcmVh
dGVDRlN0cmluZygpOworICAgIGlmIChVVFR5cGVDb25mb3Jtc1RvKGNmVHlwZS5nZXQoKSwga1VU
VHlwZVBsYWluVGV4dCkpCisgICAgICAgIHJldHVybiAidGV4dC9wbGFpbiJfczsKKworICAgIGlm
IChVVFR5cGVDb25mb3Jtc1RvKGNmVHlwZS5nZXQoKSwga1VUVHlwZUhUTUwpIHx8IFVUVHlwZUNv
bmZvcm1zVG8oY2ZUeXBlLmdldCgpLCAoQ0ZTdHJpbmdSZWYpV2ViQXJjaGl2ZVBib2FyZFR5cGUp
CisgICAgICAgIHx8IFVUVHlwZUNvbmZvcm1zVG8oY2ZUeXBlLmdldCgpLCBrVVRUeXBlUlRGKSB8
fCBVVFR5cGVDb25mb3Jtc1RvKGNmVHlwZS5nZXQoKSwga1VUVHlwZUZsYXRSVEZEKSkKKyAgICAg
ICAgcmV0dXJuICJ0ZXh0L2h0bWwiX3M7CisKKyAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhjZlR5
cGUuZ2V0KCksIGtVVFR5cGVVUkwpKQorICAgICAgICByZXR1cm4gInRleHQvdXJpLWxpc3QiX3M7
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIFZlY3RvcjxTdHJpbmc+IHdlYlNh
ZmVUeXBlcyhOU0FycmF5PE5TU3RyaW5nICo+ICpwbGF0Zm9ybVR5cGVzLCBGdW5jdGlvbjxib29s
KCk+JiYgc2hvdWxkQXZvaWRFeHBvc2luZ1VSTFR5cGUpCit7CisgICAgTGlzdEhhc2hTZXQ8U3Ry
aW5nPiBkb21QYXN0ZWJvYXJkVHlwZXM7CisgICAgZm9yIChOU1N0cmluZyAqdHlwZSBpbiBwbGF0
Zm9ybVR5cGVzKSB7CisgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6QChQYXN0ZWJv
YXJkQ3VzdG9tRGF0YTo6Y29jb2FUeXBlKCkpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGlmIChQYXN0ZWJvYXJkOjppc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlw
ZSkpIHsKKyAgICAgICAgICAgIGRvbVBhc3RlYm9hcmRUeXBlcy5hZGQodHlwZSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBjb2VyY2VkVHlw
ZSA9IHNhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGVGb3JQbGF0Zm9ybVR5cGUodHlwZSkpIHsK
KyAgICAgICAgICAgIGF1dG8gZG9tVHlwZUFzU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChjb2Vy
Y2VkVHlwZSk7CisgICAgICAgICAgICBpZiAoZG9tVHlwZUFzU3RyaW5nID09ICJ0ZXh0L3VyaS1s
aXN0Il9zICYmIChbcGxhdGZvcm1UeXBlcyBjb250YWluc09iamVjdDooX19icmlkZ2UgTlNTdHJp
bmcgKilrVVRUeXBlRmlsZVVSTF0gfHwgc2hvdWxkQXZvaWRFeHBvc2luZ1VSTFR5cGUoKSkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGRvbVBhc3RlYm9hcmRUeXBl
cy5hZGQoV1RGTW92ZShkb21UeXBlQXNTdHJpbmcpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gY29weVRvVmVjdG9yKGRvbVBhc3RlYm9hcmRUeXBlcyk7Cit9CisKICNpZiBQQVNURUJP
QVJEX1NVUFBPUlRTX1BSRVNFTlRBVElPTl9TVFlMRV9BTkRfVEVBTV9EQVRBCiAKIHN0YXRpYyBQ
YXN0ZWJvYXJkSXRlbVByZXNlbnRhdGlvblN0eWxlIHBhc3RlYm9hcmRJdGVtUHJlc2VudGF0aW9u
U3R5bGUoVUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZSBzdHlsZSkKQEAgLTExNiw2ICsxNTUs
MTUgQEAgc3RhdGljIFBhc3RlYm9hcmRJdGVtUHJlc2VudGF0aW9uU3R5bGUgcGFzdGVib2FyZEl0
ZW1QcmVzZW50YXRpb25TdHlsZShVSVByZWZlcnIKIAogI2VuZGlmIC8vIFBBU1RFQk9BUkRfU1VQ
UE9SVFNfUFJFU0VOVEFUSU9OX1NUWUxFX0FORF9URUFNX0RBVEEKIAorc3RhdGljIGJvb2wgc2hv
dWxkVHJlYXRBdExlYXN0T25lVHlwZUFzRmlsZShOU0FycmF5IDxOU1N0cmluZyAqPiAqcGxhdGZv
cm1UeXBlcykKK3sKKyAgICBmb3IgKE5TU3RyaW5nICp0eXBlIGluIHBsYXRmb3JtVHlwZXMpIHsK
KyAgICAgICAgaWYgKFBhc3RlYm9hcmQ6OnNob3VsZFRyZWF0Q29jb2FUeXBlQXNGaWxlKHR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KwogUGFzdGVib2FyZEl0ZW1JbmZvIFBsYXRmb3JtUGFzdGVib2FyZDo6aW5mb3JtYXRpb25Gb3JJ
dGVtQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IHN0YXRpY19jYXN0
PE5TVUludGVnZXI+KFttX3Bhc3RlYm9hcmQgbnVtYmVyT2ZJdGVtc10pKQpAQCAtMTgzLDYgKzIz
MSw5IEBAIFBhc3RlYm9hcmRJdGVtSW5mbyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmluZm9ybWF0aW9u
Rm9ySXRlbUF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIH0KIAogICAgIGluZm8uY2hhbmdlQ291
bnQgPSBjaGFuZ2VDb3VudCgpOworICAgIGluZm8ud2ViU2FmZVR5cGVzQnlGaWRlbGl0eSA9IHdl
YlNhZmVUeXBlcyhyZWdpc3RlcmVkVHlwZUlkZW50aWZpZXJzLCBbJl0geworICAgICAgICByZXR1
cm4gc2hvdWxkVHJlYXRBdExlYXN0T25lVHlwZUFzRmlsZShyZWdpc3RlcmVkVHlwZUlkZW50aWZp
ZXJzKSAmJiAhUGFzdGVib2FyZDo6Y2FuRXhwb3NlVVJMVG9ET01XaGVuUGFzdGVib2FyZENvbnRh
aW5zRmlsZXMocmVhZFN0cmluZyhpbmRleCwga1VUVHlwZVVSTCkpOworICAgIH0pOwogCiAgICAg
cmV0dXJuIGluZm87CiB9CkBAIC0yMDIsMTIgKzI1Myw3IEBAIHN0YXRpYyBib29sIHBhc3RlYm9h
cmRNYXlDb250YWluRmlsZVBhdGhzKGlkPEFic3RyYWN0UGFzdGVib2FyZD4gcGFzdGVib2FyZCkK
ICAgICBpZiAoW3Bhc3RlYm9hcmQgaXNLaW5kT2ZDbGFzczpbV2ViSXRlbVByb3ZpZGVyUGFzdGVi
b2FyZCBjbGFzc11dKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKLQotICAgIGZvciAo
TlNTdHJpbmcgKnR5cGUgaW4gcGFzdGVib2FyZC5wYXN0ZWJvYXJkVHlwZXMpIHsKLSAgICAgICAg
aWYgKFBhc3RlYm9hcmQ6OnNob3VsZFRyZWF0Q29jb2FUeXBlQXNGaWxlKHR5cGUpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
c2hvdWxkVHJlYXRBdExlYXN0T25lVHlwZUFzRmlsZShwYXN0ZWJvYXJkLnBhc3RlYm9hcmRUeXBl
cyk7CiB9CiAKIFN0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnN0cmluZ0ZvclR5cGUoY29uc3Qg
U3RyaW5nJiB0eXBlKSBjb25zdApAQCAtNDgwLDIyICs1MjYsNiBAQCB2b2lkIFBsYXRmb3JtUGFz
dGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFVSTCYgdXJsKQogICAgIHJlZ2lzdGVySXRl
bVRvUGFzdGVib2FyZChyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyLmdldCgpLCBtX3Bhc3RlYm9h
cmQuZ2V0KCkpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqc2FmZVR5cGVGb3JET01Ub1JlYWRB
bmRXcml0ZUZvclBsYXRmb3JtVHlwZShjb25zdCBTdHJpbmcmIHBsYXRmb3JtVHlwZSkKLXsKLSAg
ICBhdXRvIGNmVHlwZSA9IHBsYXRmb3JtVHlwZS5jcmVhdGVDRlN0cmluZygpOwotICAgIGlmIChV
VFR5cGVDb25mb3Jtc1RvKGNmVHlwZS5nZXQoKSwga1VUVHlwZVBsYWluVGV4dCkpCi0gICAgICAg
IHJldHVybiAidGV4dC9wbGFpbiJfczsKLQotICAgIGlmIChVVFR5cGVDb25mb3Jtc1RvKGNmVHlw
ZS5nZXQoKSwga1VUVHlwZUhUTUwpIHx8IFVUVHlwZUNvbmZvcm1zVG8oY2ZUeXBlLmdldCgpLCAo
Q0ZTdHJpbmdSZWYpV2ViQXJjaGl2ZVBib2FyZFR5cGUpCi0gICAgICAgIHx8IFVUVHlwZUNvbmZv
cm1zVG8oY2ZUeXBlLmdldCgpLCBrVVRUeXBlUlRGKSB8fCBVVFR5cGVDb25mb3Jtc1RvKGNmVHlw
ZS5nZXQoKSwga1VUVHlwZUZsYXRSVEZEKSkKLSAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwiX3M7
Ci0KLSAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhjZlR5cGUuZ2V0KCksIGtVVFR5cGVVUkwpKQot
ICAgICAgICByZXR1cm4gInRleHQvdXJpLWxpc3QiX3M7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQogc3RhdGljIGNvbnN0IGNoYXIgb3JpZ2luS2V5Rm9yVGVhbURhdGFbXSA9ICJjb20uYXBw
bGUuV2ViS2l0LmRyYWctYW5kLWRyb3AtdGVhbS1kYXRhLm9yaWdpbiI7CiBzdGF0aWMgY29uc3Qg
Y2hhciBjdXN0b21UeXBlc0tleUZvclRlYW1EYXRhW10gPSAiY29tLmFwcGxlLldlYktpdC5kcmFn
LWFuZC1kcm9wLXRlYW0tZGF0YS5jdXN0b20tdHlwZXMiOwogCkBAIC01MzQsMjggKzU2NCwxMyBA
QCBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYgbwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChO
U1N0cmluZyAqdHlwZSBpbiBbbV9wYXN0ZWJvYXJkIHBhc3RlYm9hcmRUeXBlc10pIHsKLSAgICAg
ICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpAKFBhc3RlYm9hcmRDdXN0b21EYXRhOjpjb2Nv
YVR5cGUoKSldKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKFBhc3RlYm9h
cmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSkgewotICAgICAgICAgICAg
ZG9tUGFzdGVib2FyZFR5cGVzLmFkZCh0eXBlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9CisgICAgYXV0byB3ZWJTYWZlUGFzdGVib2FyZFR5cGVzID0gd2ViU2FmZVR5cGVzKFtt
X3Bhc3RlYm9hcmQgcGFzdGVib2FyZFR5cGVzXSwgWyZdIHsKKyAgICAgICAgQk9PTCBhYmxlVG9E
ZXRlcm1pbmVQcm90b2NvbE9mUGFzdGVib2FyZFVSTCA9ICFbbV9wYXN0ZWJvYXJkIGlzS2luZE9m
Q2xhc3M6W1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgY2xhc3NdXTsKKyAgICAgICAgcmV0dXJu
IGFibGVUb0RldGVybWluZVByb3RvY29sT2ZQYXN0ZWJvYXJkVVJMICYmIHN0cmluZ0ZvclR5cGUo
a1VUVHlwZVVSTCkuaXNFbXB0eSgpOworICAgIH0pOwogCi0gICAgICAgIGlmIChhdXRvKiBjb2Vy
Y2VkVHlwZSA9IHNhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGVGb3JQbGF0Zm9ybVR5cGUodHlw
ZSkpIHsKLSAgICAgICAgICAgIGF1dG8gZG9tVHlwZUFzU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChjb2VyY2VkVHlwZSk7Ci0gICAgICAgICAgICBpZiAoZG9tVHlwZUFzU3RyaW5nID09ICJ0ZXh0
L3VyaS1saXN0IikgewotICAgICAgICAgICAgICAgIEJPT0wgYWJsZVRvRGV0ZXJtaW5lUHJvdG9j
b2xPZlBhc3RlYm9hcmRVUkwgPSAhW21fcGFzdGVib2FyZCBpc0tpbmRPZkNsYXNzOltXZWJJdGVt
UHJvdmlkZXJQYXN0ZWJvYXJkIGNsYXNzXV07Ci0gICAgICAgICAgICAgICAgaWYgKGFibGVUb0Rl
dGVybWluZVByb3RvY29sT2ZQYXN0ZWJvYXJkVVJMICYmIHN0cmluZ0ZvclR5cGUoa1VUVHlwZVVS
TCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgICAgIGlmIChbW21fcGFzdGVib2FyZCBwYXN0ZWJvYXJkVHlwZXNdIGNvbnRhaW5zT2JqZWN0
OihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVGaWxlVVJMXSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkb21QYXN0ZWJvYXJkVHlw
ZXMuYWRkKFdURk1vdmUoZG9tVHlwZUFzU3RyaW5nKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
Zm9yIChhdXRvJiB0eXBlIDogd2ViU2FmZVBhc3RlYm9hcmRUeXBlcykKKyAgICAgICAgZG9tUGFz
dGVib2FyZFR5cGVzLmFkZCh0eXBlKTsKIAogICAgIHJldHVybiBjb3B5VG9WZWN0b3IoZG9tUGFz
dGVib2FyZFR5cGVzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxBbmltYXRvck1hYy5tbQppbmRleCA3ZjRlNGJmMWVkOWFmYjIzODc1OGFkY2IwYmRkNzI1MWU2
ZGE1ODExLi5mNTkxNzY3MmVlZmRmMWY1MjNjZGY2OTI0NmIyMzg2MDQ5NGZiMmEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC0x
MTQxLDcgKzExNDEsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzaG91bGRTY3JvbGxiYXJQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZyhTY3JvbGxiYXIqIHNjcm9sbAogCiB2b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjpub3RpZnlDb250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVs
dGEpCiB7Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29p
bmcgaW50byB0aGUgcGFnZSBjYWNoZSwgYnV0IHRoZSBwYWdlCisgICAgLy8gVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgYmFjay9mb3J3YXJkIGNh
Y2hlLCBidXQgdGhlIHBhZ2UKICAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xsaW5nIGluIHRoYXQg
Y2FzZS4gV2Ugc2hvdWxkIG9ubHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUKICAgICAvLyBT
Y3JvbGxlckltcFBhaXIgd2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5nIG9uIGFuIGFjdGl2ZSBw
YWdlLgogICAgIGlmIChbbV9zY3JvbGxlckltcFBhaXIgb3ZlcmxheVNjcm9sbGVyU3RhdGVJc0xv
Y2tlZF0pCkBAIC0xNDE4LDcgKzE0MTgsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp1cGRh
dGVTY3JvbGxlclN0eWxlKCkKICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVS
ZWN0KEludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3MpKTsKICAgICB9CiAKLSAgICAv
LyBJZiBtX25lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSBpcyB0cnVlLCB0aGVuIHRoZSBwYWdlIGlz
IHJlc3RvcmluZyBmcm9tIHRoZSBwYWdlIGNhY2hlLCBhbmQgCisgICAgLy8gSWYgbV9uZWVkc1Nj
cm9sbGVyU3R5bGVVcGRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0b3JpbmcgZnJv
bSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCBhbmQKICAgICAvLyBhIHJlbGF5b3V0IHdpbGwgaGFw
cGVuIG9uIGl0cyBvd24uIE90aGVyd2lzZSwgd2UgbXVzdCBpbml0aWF0ZSBhIHJlLWxheW91dCBv
dXJzZWx2ZXMuCiAgICAgc2Nyb2xsYWJsZUFyZWEoKS5zY3JvbGxiYXJTdHlsZUNoYW5nZWQobmV3
U3R5bGUgPT0gTlNTY3JvbGxlclN0eWxlT3ZlcmxheSA/IFNjcm9sbGJhclN0eWxlOjpPdmVybGF5
IDogU2Nyb2xsYmFyU3R5bGU6OkFsd2F5c1Zpc2libGUsICFtX25lZWRzU2Nyb2xsZXJTdHlsZVVw
ZGF0ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TZXJpYWxp
emVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLmgKaW5kZXggMjIzODZiNWFm
MzY5NWQyNzI0MTc2Y2M0ZGNlZGE2OTE5NjFlNGUzMi4uZmY1NjRjYTM4ZDQxMDhkZWNmZTJkY2Y4
MTBlNzQxNzA3NjcyMjE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLmgKQEAg
LTQxLDcgKzQxLDcgQEAgY2xhc3MgU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMg
OiBwdWJsaWMgU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXQKICAgICB2aXJ0dWFsIH5TZXJp
YWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYygpOwogICAgIHN0YXRpYyBSZWY8U2VyaWFs
aXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb24+IGNyZWF0ZShpZCk7CiAKLSAgICBKU0M6OkpTVmFs
dWUgZGVzZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICBKU0M6
OkpTVmFsdWUgZGVzZXJpYWxpemUoSlNDOjpKU0dsb2JhbE9iamVjdCopIGNvbnN0IG92ZXJyaWRl
OwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gZGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBpc0VxdWFsKGNvbnN0IFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uJikgY29u
c3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Vy
aWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0KaW5kZXggYzI5
NTNjYTAzZTgwNWNmZGMzMDUwY2Y2MGEzNWQ4NGNmZmM5NTg3OS4uNWQ2NGUxMTBiMWUzYjJmZWNh
YzkwMTFlOWY3YmFmOWQzODhhYmZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1h
Yy5tbQpAQCAtNzIsMTkgKzcyLDE5IEBAIFJlZlB0cjxBcnJheUJ1ZmZlcj4gU2VyaWFsaXplZFBs
YXRmb3JtUmVwcmVzZW50YXRpb25NYWM6OmRhdGEoKSBjb25zdAogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1KU0M6OkpTVmFsdWUgU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWM6
OmRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNDOjpKU1ZhbHVlIFNl
cmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjOjpkZXNlcmlhbGl6ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECiAgICAgaWYgKCFtX25hdGl2ZVZhbHVlKQogICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKIAotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0dsb2JhbENvbnRleHRSZWYgPSB0
b0dsb2JhbFJlZihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Cisg
ICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzR2xvYmFsQ29udGV4dFJlZiA9IHRvR2xvYmFsUmVmKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIEpTQ29udGV4dCAqanNDb250ZXh0ID0gW0pTQ29udGV4
dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjpqc0dsb2JhbENvbnRleHRSZWZdOwogICAg
IEpTVmFsdWUgKnNlcmlhbGl6ZWRWYWx1ZSA9IGpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQobV9u
YXRpdmVWYWx1ZS5nZXQoKSwganNDb250ZXh0KTsKIAotICAgIHJldHVybiB0b0pTKGV4ZWMsIFtz
ZXJpYWxpemVkVmFsdWUgSlNWYWx1ZVJlZl0pOworICAgIHJldHVybiB0b0pTKGxleGljYWxHbG9i
YWxPYmplY3QsIFtzZXJpYWxpemVkVmFsdWUgSlNWYWx1ZVJlZl0pOwogI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogI2VuZGlmCiB9CkBAIC0xNDEsMTAgKzE0MSwxMCBA
QCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KE5TRGF0YSAqZGF0YSwg
SlNDb250ZXh0ICpjb250ZXh0KQogewogICAgIGF1dG8gZGF0YUFycmF5ID0gQXJyYXlCdWZmZXI6
OnRyeUNyZWF0ZShbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0pOwogCi0gICAgYXV0byogc3Rh
dGUgPSB0b0pTKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOwotICAgIEpTQzo6SlNWYWx1
ZSBhcnJheSA9IHRvSlMoc3RhdGUsIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGRhdGFBcnJheS5nZXQoKSk7CisgICAgYXV0byog
bGV4aWNhbEdsb2JhbE9iamVjdCA9IHRvSlMoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7
CisgICAgSlNDOjpKU1ZhbHVlIGFycmF5ID0gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLCBkYXRhQXJy
YXkuZ2V0KCkpOwogCi0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9S
ZWYoc3RhdGUsIGFycmF5KSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJyYXkpIGlu
Q29udGV4dDpjb250ZXh0XTsKIH0KIAogc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQXJyYXlJ
bkNvbnRleHQoTlNBcnJheSAqYXJyYXksIEpTQ29udGV4dCAqY29udGV4dCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja0JveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tCb3guY3BwCmluZGV4
IDdhZDcwODQxMTAyOTJmNzZlOTdkMDM4YzQzMDgzMDZmZGI2YjYwMTMuLmFkNzFlMWUzMTQzZWQ5
MmMwZTA2M2Q2NmJhZTkyOWU4Nzc2NDdjYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrQm94LmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1
ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdElubGlu
ZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uLmNwcAppbmRleCAzMWQ1NzVmODVlZWNjZmZjYTc5M2JmMjY2
ZmM1Mzc0MDIzNDdiYTA3Li4yYzQ1NTZhZjU5ZDUzMDAyYzljNDM2MWMxZWI0ZTg2NTZiNTc4Y2Nl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JrU3RvcmFnZVNlc3Npb24uY3BwCkBAIC03OCw2ICs3OCwxNCBAQCBib29sIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6c2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0J1dEtlZXBGaXJzdFBhcnR5
Q29va2llcwogICAgIHJldHVybiBtX3JlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2tCdXRLZWVwQ29v
a2llc0Zvci5jb250YWlucyhyZWdpc3RyYWJsZURvbWFpbik7CiB9CiAKK2Jvb2wgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpoYXNIYWRVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIHJlZ2lzdHJhYmxlRG9tYWluKSBjb25zdAoreworICAgIGlmIChyZWdp
c3RyYWJsZURvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBtX3JlZ2lzdHJhYmxlRG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHku
Y29udGFpbnMocmVnaXN0cmFibGVEb21haW4pOworfQorCiBib29sIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6c2hvdWxkQmxvY2tDb29raWVzKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
T3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBPcHRpb25hbDxQYWdlSWRlbnRpZmll
cj4gcGFnZUlEKSBjb25zdAogewogICAgIHJldHVybiBzaG91bGRCbG9ja0Nvb2tpZXMocmVxdWVz
dC5maXJzdFBhcnR5Rm9yQ29va2llcygpLCByZXF1ZXN0LnVybCgpLCBmcmFtZUlELCBwYWdlSUQp
OwpAQCAtOTksNiArMTA3LDkgQEAgYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNob3VsZEJs
b2NrQ29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLAogICAgIGlmIChwYWdl
SUQgJiYgaGFzU3RvcmFnZUFjY2VzcyhyZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbiwg
ZnJhbWVJRCwgcGFnZUlELnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAobV9pc1RoaXJkUGFydHlDb29raWVCbG9ja2luZ09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0
aW9uRW5hYmxlZCAmJiAhaGFzSGFkVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5KGZpcnN0UGFy
dHlEb21haW4pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIHJldHVybiBzaG91bGRCbG9j
a1RoaXJkUGFydHlDb29raWVzKHJlc291cmNlRG9tYWluKTsKIH0KIApAQCAtMTI3LDYgKzEzOCwx
MiBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0UHJldmFsZW50RG9tYWluc1RvQmxv
Y2tCdXRLZWVwQ29va2llc0Zvcihjb25zdCBWZQogICAgIG1fcmVnaXN0cmFibGVEb21haW5zVG9C
bG9ja0J1dEtlZXBDb29raWVzRm9yLmFkZChkb21haW5zLmJlZ2luKCksIGRvbWFpbnMuZW5kKCkp
OwogfQogCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0RG9tYWluc1dpdGhVc2VySW50
ZXJhY3Rpb25Bc0ZpcnN0UGFydHkoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9t
YWlucykKK3sKKyAgICBtX3JlZ2lzdHJhYmxlRG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0Zp
cnN0UGFydHkuY2xlYXIoKTsKKyAgICBtX3JlZ2lzdHJhYmxlRG9tYWluc1dpdGhVc2VySW50ZXJh
Y3Rpb25Bc0ZpcnN0UGFydHkuYWRkKGRvbWFpbnMuYmVnaW4oKSwgZG9tYWlucy5lbmQoKSk7Cit9
CisKIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpyZW1vdmVQcmV2YWxlbnREb21haW5zKGNv
bnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCiB7CiAgICAgZm9yIChhdXRv
JiBkb21haW4gOiBkb21haW5zKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAppbmRleCA1YmI4NDM3NzQ5NTYxODRk
MzEzMzU0ODI0Y2VlNjllMmFlYjVhM2ZjLi4yMDM4Yjg4YzE5OWNkYThjNDI1YTRhMzE0MTRmZTgy
Nzg2NTFlZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKQEAgLTE0Nyw4ICsxNDcsMTAgQEAgY2xhc3MgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uIHsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNob3VsZEJsb2Nr
Q29va2llcyhjb25zdCBVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBVUkwmIHJlc291
cmNlLCBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+LCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4p
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29v
a2llcyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgc2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0J1dEtlZXBGaXJzdFBhcnR5Q29va2ll
c0Zvcihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5KGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQcmV2YWxlbnREb21h
aW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UHJldmFsZW50RG9tYWluc1RvQmxv
Y2tCdXRLZWVwQ29va2llc0Zvcihjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+Jik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmly
c3RQYXJ0eShjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+Jik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhPcHRpb25hbDxTZWNvbmRz
Pik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVQcmV2YWxlbnREb21haW5zKGNvbnN0
IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpOwogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVzb3VyY2VE
b21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBPcHRpb25h
bDxGcmFtZUlkZW50aWZpZXI+LCBQYWdlSWRlbnRpZmllcikgY29uc3Q7CkBAIC0xNjIsNiArMTY0
LDcgQEAgY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIHsKICAgICBXRUJDT1JFX0VYUE9SVCBP
cHRpb25hbDxTZWNvbmRzPiBtYXhBZ2VDYWNoZUNhcChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRy
YW5zZmVyRnJvbVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b0Rv
bWFpbiwgUGFnZUlkZW50aWZpZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRDcm9z
c1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoKTsKKyAgICB2b2lkIHNldElz
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25FbmFi
bGVkKGJvb2wgZW5hYmxlZCkgeyBtX2lzVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nT25TaXRlc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb25FbmFibGVkID0gZW5hYmxlZDsgfQogI2VuZGlmCiAKIHByaXZh
dGU6CkBAIC0xODgsNiArMTkxLDcgQEAgY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIHsKICAg
ICBPcHRpb25hbDxTZWNvbmRzPiBjbGllbnRTaWRlQ29va2llQ2FwKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBmaXJzdFBhcnR5LCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4pIGNvbnN0OwogICAg
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+IG1fcmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Fu
ZERlbGV0ZUNvb2tpZXNGb3I7CiAgICAgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4gbV9yZWdp
c3RyYWJsZURvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3I7CisgICAgSGFzaFNldDxSZWdp
c3RyYWJsZURvbWFpbj4gbV9yZWdpc3RyYWJsZURvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNG
aXJzdFBhcnR5OwogICAgIEhhc2hNYXA8UGFnZUlkZW50aWZpZXIsIEhhc2hNYXA8RnJhbWVJZGVu
dGlmaWVyLCBSZWdpc3RyYWJsZURvbWFpbj4+IG1fZnJhbWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3M7
CiAgICAgSGFzaE1hcDxQYWdlSWRlbnRpZmllciwgSGFzaE1hcDxSZWdpc3RyYWJsZURvbWFpbiwg
UmVnaXN0cmFibGVEb21haW4+PiBtX3BhZ2VzR3JhbnRlZFN0b3JhZ2VBY2Nlc3M7CiAgICAgT3B0
aW9uYWw8U2Vjb25kcz4gbV9jYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyB7IH07
CkBAIC0xOTUsNiArMTk5LDcgQEAgY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uIHsKICAgICBP
cHRpb25hbDxTZWNvbmRzPiBtX2FnZUNhcEZvckNsaWVudFNpZGVDb29raWVzU2hvcnQgeyB9Owog
ICAgIEhhc2hNYXA8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFJlZ2lzdHJhYmxlRG9tYWluPiBt
X25hdmlnYXRlZFRvV2l0aExpbmtEZWNvcmF0aW9uQnlQcmV2YWxlbnRSZXNvdXJjZTsKICAgICBi
b29sIG1fbmF2aWdhdGlvbldpdGhMaW5rRGVjb3JhdGlvblRlc3RNb2RlID0gZmFsc2U7CisgICAg
Ym9vbCBtX2lzVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nT25TaXRlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb25FbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3QmFzZS5oCmluZGV4IGRhZjFkOTMxYmFmMTY0MWRi
ZWNlYjM4YzIzMTE3NDhiMmJhN2ZjZjguLjFiMjFmMDQ0N2Y3N2IyNDkxMDhjMjkwYjc1NDY0ZDg4
MDBhOWRmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld0Jh
c2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdCYXNlLmgKQEAgLTM5
LDcgKzM5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQ2FsbEZyYW1lOwogICAgIGNs
YXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIEpTT2JqZWN0OwotICAgIHVzaW5nIEV4ZWNT
dGF0ZSA9IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBlMDc4NWVjNDMz
Nzg0MWRiODU4MzBmMTgxZmIwODlmNzU3N2Y1NmM1Li4yMTRmNjA5NTc3ZjhhOGYwYjU3NWZkNTFh
YTU0YTM2MzY0OWUzMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcApAQCAtMjc4MCw4ICsyNzgwLDggQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnBhaW50SW50b0xheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIs
IEdyYXAKICAgICBpZiAoKHBhaW50c0ludG9XaW5kb3coKSB8fCBwYWludHNJbnRvQ29tcG9zaXRl
ZEFuY2VzdG9yKCkpICYmIGdyYXBoaWNzTGF5ZXItPnBhaW50aW5nUGhhc2UoKSAhPSBPcHRpb25T
ZXQ8R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2U+KEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNl
OjpDaGlsZENsaXBwaW5nTWFzaykpIHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIU9T
KFdJTkRPV1MpCiAgICAgICAgIC8vIEZJWE1FOiBMb29rcyBsaWtlIHRoZSBDQUxheWVyIHRyZWUg
aXMgb3V0IG9mIHN5bmMgd2l0aCB0aGUgR3JhcGhpY3NMYXllciBoZWlyYXJjaHkKLSAgICAgICAg
Ly8gd2hlbiBwYWdlcyBhcmUgcmVzdG9yZWQgZnJvbSB0aGUgUGFnZUNhY2hlLgotICAgICAgICAv
LyA8cmRhcjovL3Byb2JsZW0vODcxMjU4Nz4gQVNTRVJUOiBXaGVuIEdvaW5nIEJhY2sgdG8gUGFn
ZSB3aXRoIFBsdWdpbnMgaW4gUGFnZUNhY2hlCisgICAgICAgIC8vIHdoZW4gcGFnZXMgYXJlIHJl
c3RvcmVkIGZyb20gdGhlIEJhY2tGb3J3YXJkQ2FjaGUuCisgICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS84NzEyNTg3PiBBU1NFUlQ6IFdoZW4gR29pbmcgQmFjayB0byBQYWdlIHdpdGggUGx1Z2lu
cyBpbiBCYWNrRm9yd2FyZENhY2hlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2Vu
ZGlmCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggYzBkZDA2MGI1ZDMzYzllZGRmYTMwZjdkNTM0
ZGE3ZDk3OTMyOGM0OC4uZmY5ZmViZmFlZDIwYzZmMTdmYzFiNThjNTA3YmU1MDY1NDMzNDdiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKQEAgLTcxNiw4ICs3MTYsOCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBk
YXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVwZGF0ZQogCiAgICAg
bV91cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVyLnN0b3AoKTsKIAotICAgIEFTU0VSVChtX3Jl
bmRlclZpZXcuZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBh
Z2VDYWNoZQotICAgICAgICB8fCBtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0
ZSgpID09IERvY3VtZW50OjpBYm91dFRvRW50ZXJQYWdlQ2FjaGUpOworICAgIEFTU0VSVChtX3Jl
bmRlclZpZXcuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6
Tm90SW5CYWNrRm9yd2FyZENhY2hlCisgICAgICAgIHx8IG1fcmVuZGVyVmlldy5kb2N1bWVudCgp
LmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpBYm91dFRvRW50ZXJCYWNrRm9y
d2FyZENhY2hlKTsKICAgICAKICAgICAvLyBDb21wb3NpdGluZyBsYXllcnMgd2lsbCBiZSB1cGRh
dGVkIGluIERvY3VtZW50OjpzZXRWaXN1YWxVcGRhdGVzQWxsb3dlZChib29sKSBpZiBzdXBwcmVz
c2VkIGhlcmUuCiAgICAgaWYgKCFtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS52aXN1YWxVcGRhdGVz
QWxsb3dlZCgpKQpAQCAtNDY1Miw3ICs0NjUyLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXkK
ICAgICAgICAgcmV0dXJuOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBBU1NFUlQo
bV9yZW5kZXJWaWV3LmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90
SW5QYWdlQ2FjaGUpOworICAgIEFTU0VSVChtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5iYWNrRm9y
d2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKICAg
ICBpZiAobV9sZWdhY3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yKQogICAgICAgICBtX2xlZ2Fj
eVNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3ItPnJlbW92ZVNjcm9sbGluZ0xheWVyKGxheWVyLCBi
YWNraW5nKTsKICNlbHNlCkBAIC00NjY4LDcgKzQ2NjgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQogICAgICAg
ICByZXR1cm47CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIEFTU0VSVChtX3JlbmRl
clZpZXcuZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJblBhZ2VD
YWNoZSk7CisgICAgQVNTRVJUKG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2Fj
aGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwogICAgIGlmICht
X2xlZ2FjeVNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3IpCiAgICAgICAgIG1fbGVnYWN5U2Nyb2xs
aW5nTGF5ZXJDb29yZGluYXRvci0+YWRkU2Nyb2xsaW5nTGF5ZXIobGF5ZXIpOwogI2Vsc2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRl
eCA2NTJkNjAxNTEyZDZlZjAyZmY1ODA5MTU1NzEzZjY3NWU4ZDA3NjRiLi4wNzhmNzliYWQwMjM4
OTNlMjJkMTYyOTMwOGM3ZmI0NGI0N2Y1OTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0xOTMsNyArMTkzLDcgQEAgY2xhc3Mg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yIGZpbmFsIDogcHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQs
IHB1YmxpYyBHcmFwaGljc0wKICAgICAvLyBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHN0YXRlIGNo
YW5nZXMgYW5kIHdlIGRvIG5vdCBleGVwZWN0IGEgc3R5bGUgdXBkYXRlIG9yIGxheW91dCB0byBo
YXBwZW4gc29vbiAoZS5nLiB3aGVuCiAgICAgLy8gd2UgZGlzY292ZXIgdGhhdCBhbiBpZnJhbWUg
aXMgb3ZlcmxhcHBlZCBkdXJpbmcgcGFpbnRpbmcpLgogICAgIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGluZ0xheWVyVXBkYXRlKCk7Ci0gICAgLy8gVGhpcyBpcyB1c2VkIHRvIGNhbmNlbCBhbnkgcGVu
ZGluZyB1cGRhdGUgdGltZXJzIHdoZW4gdGhlIGRvY3VtZW50IGdvZXMgaW50byBwYWdlIGNhY2hl
LgorICAgIC8vIFRoaXMgaXMgdXNlZCB0byBjYW5jZWwgYW55IHBlbmRpbmcgdXBkYXRlIHRpbWVy
cyB3aGVuIHRoZSBkb2N1bWVudCBnb2VzIGludG8gYmFjay9mb3J3YXJkIGNhY2hlLgogICAgIHZv
aWQgY2FuY2VsQ29tcG9zaXRpbmdMYXllclVwZGF0ZSgpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBj
b21wb3NpdGluZyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gbGF5ZXIuIFJldHVybnMgdHJ1ZSBpZiB0aGF0
IHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5k
ZXggY2FhYzVjZGUwZWQ4NDdiZGMyMGU1Y2E3YTVmMWVkODAxMGM0YmY1Zi4uNzZlMjhkN2RmMzQy
OTgxMzljMjhkNmJlMzdkNjczYjczZjNiNzM5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaApAQCAtNzIzLDcgKzcyMyw3IEBAIGNsYXNzIFJlbmRlck9iamVjdCA6IHB1
YmxpYyBDYWNoZWRJbWFnZUNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlck9iamVj
CiAgICAgICovCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJv
eCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxp
bmUgPSBudWxscHRyKTsKIAotICAgIC8vIFdoZW4gcGVyZm9ybWluZyBhIGdsb2JhbCBkb2N1bWVu
dCB0ZWFyLWRvd24sIG9yIHdoZW4gZ29pbmcgaW50byB0aGUgcGFnZSBjYWNoZSwgdGhlIHJlbmRl
cmVyIG9mIHRoZSBkb2N1bWVudCBpcyBjbGVhcmVkLgorICAgIC8vIFdoZW4gcGVyZm9ybWluZyBh
IGdsb2JhbCBkb2N1bWVudCB0ZWFyLWRvd24sIG9yIHdoZW4gZ29pbmcgaW50byB0aGUgYmFjay9m
b3J3YXJkIGNhY2hlLCB0aGUgcmVuZGVyZXIgb2YgdGhlIGRvY3VtZW50IGlzIGNsZWFyZWQuCiAg
ICAgYm9vbCByZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSBjb25zdDsKIAogICAgIHZvaWQgZGVz
dHJveSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRDb3ZlcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dENvdmVyYWdlLmNwcAppbmRleCBhYzEwOWRiYzM0MmY4Yzc3ODZkYWU3ODVjZmZkOTVjNjAw
ZmZjODJmLi41NWY1ZmQzNzA3NmI4MjUzY2UxNTk5ZjcwY2FmZTZjY2RhNWQyMjQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dENvdmVyYWdl
LmNwcApAQCAtMjY5LDcgKzI2OSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3ROb25FbXB0eUxlYWZS
ZW5kZXJCbG9ja0Zsb3dzKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIEhhCiBzdGF0aWMg
dm9pZCBjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93c0ZvckN1cnJlbnRQYWdlKEhh
c2hTZXQ8Y29uc3QgUmVuZGVyQmxvY2tGbG93Kj4mIGxlYWZSZW5kZXJlcnMpCiB7CiAgICAgZm9y
IChjb25zdCBhdXRvKiBkb2N1bWVudCA6IERvY3VtZW50OjphbGxEb2N1bWVudHMoKSkgewotICAg
ICAgICBpZiAoIWRvY3VtZW50LT5yZW5kZXJWaWV3KCkgfHwgZG9jdW1lbnQtPnBhZ2VDYWNoZVN0
YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKQorICAgICAgICBpZiAoIWRvY3VtZW50
LT5yZW5kZXJWaWV3KCkgfHwgZG9jdW1lbnQtPmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IERv
Y3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgaWYgKCFkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQtPmlzWEhU
TUxEb2N1bWVudCgpKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmNiNDg5Y2FlMzM2NDc2
MzIzOTgyZDMyZjI3NTE0YjMyMTE1MmExMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9Cb3JkZXJEYXRhLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgor
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgor
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgor
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCb3JkZXJEYXRhLmgiCisKKyNpbmNsdWRlICJPdXRsaW5lVmFsdWUu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQm9yZGVy
VmFsdWUmIGJvcmRlclZhbHVlKQoreworICAgIHRzIDw8IGJvcmRlclZhbHVlLndpZHRoKCkgPDwg
IiAiIDw8IGJvcmRlclZhbHVlLnN0eWxlKCkgPDwgIiAiIDw8IGJvcmRlclZhbHVlLmNvbG9yKCk7
CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBPdXRsaW5lVmFsdWUmIG91dGxpbmVWYWx1ZSkKK3sKKyAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBCb3JkZXJWYWx1ZSY+KG91dGxpbmVWYWx1ZSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJvdXRsaW5lLW9mZnNldCIsIG91dGxpbmVWYWx1ZS5vZmZzZXQoKSk7CisgICAgcmV0
dXJuIHRzOworfQorCit2b2lkIEJvcmRlckRhdGE6OmR1bXAoVGV4dFN0cmVhbSYgdHMsIER1bXBT
dHlsZVZhbHVlcyBiZWhhdmlvcikgY29uc3QKK3sKKyAgICBpZiAoYmVoYXZpb3IgPT0gRHVtcFN0
eWxlVmFsdWVzOjpBbGwgfHwgbGVmdCgpICE9IEJvcmRlclZhbHVlKCkpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgibGVmdCIsIGxlZnQoKSk7CisgICAgaWYgKGJlaGF2aW9yID09IER1bXBTdHls
ZVZhbHVlczo6QWxsIHx8IHJpZ2h0KCkgIT0gQm9yZGVyVmFsdWUoKSkKKyAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJyaWdodCIsIHJpZ2h0KCkpOworICAgIGlmIChiZWhhdmlvciA9PSBEdW1wU3R5
bGVWYWx1ZXM6OkFsbCB8fCB0b3AoKSAhPSBCb3JkZXJWYWx1ZSgpKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInRvcCIsIHRvcCgpKTsKKyAgICBpZiAoYmVoYXZpb3IgPT0gRHVtcFN0eWxlVmFs
dWVzOjpBbGwgfHwgYm90dG9tKCkgIT0gQm9yZGVyVmFsdWUoKSkKKyAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJib3R0b20iLCBib3R0b20oKSk7CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImltYWdl
IiwgaW1hZ2UoKSk7CisKKyAgICBpZiAoYmVoYXZpb3IgPT0gRHVtcFN0eWxlVmFsdWVzOjpBbGwg
fHwgIXRvcExlZnRSYWRpdXMoKS5pc1plcm8oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ0
b3AtbGVmdCIsIHRvcExlZnRSYWRpdXMoKSk7CisgICAgaWYgKGJlaGF2aW9yID09IER1bXBTdHls
ZVZhbHVlczo6QWxsIHx8ICF0b3BSaWdodFJhZGl1cygpLmlzWmVybygpKQorICAgICAgICB0cy5k
dW1wUHJvcGVydHkoInRvcC1yaWdodCIsIHRvcFJpZ2h0UmFkaXVzKCkpOworICAgIGlmIChiZWhh
dmlvciA9PSBEdW1wU3R5bGVWYWx1ZXM6OkFsbCB8fCAhYm90dG9tTGVmdFJhZGl1cygpLmlzWmVy
bygpKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJvdHRvbS1sZWZ0IiwgYm90dG9tTGVmdFJh
ZGl1cygpKTsKKyAgICBpZiAoYmVoYXZpb3IgPT0gRHVtcFN0eWxlVmFsdWVzOjpBbGwgfHwgIWJv
dHRvbVJpZ2h0UmFkaXVzKCkuaXNaZXJvKCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm90
dG9tLXJpZ2h0IiwgYm90dG9tUmlnaHRSYWRpdXMoKSk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlckRhdGEpCit7Cisg
ICAgYm9yZGVyRGF0YS5kdW1wKHRzKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9C
b3JkZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5o
CmluZGV4IDVjY2MxYzQ2ZWQwNWE5NzBkYzZmNjRlYTU3Yzg0ZjcyMzExOWEyZTkuLjZmZDViMDNl
ZGNlMjE1MjNkMTA3ODViZWEyY2I4ZWVmNTYwOTg5Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9Cb3JkZXJEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaApAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIE91dGxpbmVWYWx1ZTsKKwogY2xhc3MgQm9yZGVyRGF0YSB7CiBm
cmllbmQgY2xhc3MgUmVuZGVyU3R5bGU7CiBwdWJsaWM6CkBAIC0xMjIsNiArMTI0LDggQEAgZnJp
ZW5kIGNsYXNzIFJlbmRlclN0eWxlOwogICAgIGNvbnN0IExlbmd0aFNpemUmIGJvdHRvbUxlZnRS
YWRpdXMoKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbUxlZnRSYWRpdXM7IH0KICAgICBjb25zdCBM
ZW5ndGhTaXplJiBib3R0b21SaWdodFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tUmln
aHRSYWRpdXM7IH0KIAorICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiwgRHVtcFN0eWxlVmFsdWVz
ID0gRHVtcFN0eWxlVmFsdWVzOjpBbGwpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEJvcmRlclZh
bHVlIG1fbGVmdDsKICAgICBCb3JkZXJWYWx1ZSBtX3JpZ2h0OwpAQCAtMTM2LDQgKzE0MCw4IEBA
IGZyaWVuZCBjbGFzcyBSZW5kZXJTdHlsZTsKICAgICBMZW5ndGhTaXplIG1fYm90dG9tUmlnaHRS
YWRpdXM7CiB9OwogCitXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFt
JiwgY29uc3QgQm9yZGVyVmFsdWUmKTsKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBPdXRsaW5lVmFsdWUmKTsKK1dURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBCb3JkZXJEYXRhJik7CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlQ29uc3RhbnRzLmgKaW5kZXggOWI2Y2ZlYjU3ZDJmZDk3NTIwMDA1MTRmZTAx
NjgyMzFkYWU4ODljZS4uM2FlYmJhNmEyNTE4MTU2YTMyMjZhMmI1ZDVmYjI5NGM0NWQxYzIxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29u
c3RhbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
Q29uc3RhbnRzLmgKQEAgLTMzLDYgKzMzLDExIEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorZW51bSBjbGFzcyBEdW1wU3R5bGVWYWx1ZXMgeworICAgIEFsbCwK
KyAgICBOb25Jbml0aWFsLAorfTsKKwogc3RhdGljIGNvbnN0IHNpemVfdCBQcmludENvbG9yQWRq
dXN0Qml0cyA9IDE7CiBlbnVtIGNsYXNzIFByaW50Q29sb3JBZGp1c3QgOiB1aW50OF90IHsKICAg
ICBFY29ub215LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlQmFja2dyb3VuZERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlQmFja2dyb3VuZERhdGEuY3BwCmluZGV4IDRiNzNlNDA0NTBjZjAxZWIxY2ExZTJjMmQ5MDFh
ODIyZjg2YWY2M2EuLjBhZmE3YzA1ZGRjYTJkNWNlZDcwNTU5ZDliOTQwNzNlYTBlOWM2M2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUJhY2tncm91bmRE
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3Jv
dW5kRGF0YS5jcHAKQEAgLTYwLDQgKzYwLDIwIEBAIGJvb2wgU3R5bGVCYWNrZ3JvdW5kRGF0YTo6
aXNFcXVpdmFsZW50Rm9yUGFpbnRpbmcoY29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSYgb3RoCiAg
ICAgcmV0dXJuIG91dGxpbmUgPT0gb3RoZXIub3V0bGluZTsKIH0KIAordm9pZCBTdHlsZUJhY2tn
cm91bmREYXRhOjpkdW1wKFRleHRTdHJlYW0mIHRzLCBEdW1wU3R5bGVWYWx1ZXMgYmVoYXZpb3Ip
IGNvbnN0Cit7CisgICAgaWYgKGJlaGF2aW9yID09IER1bXBTdHlsZVZhbHVlczo6QWxsIHx8IGJh
Y2tncm91bmQgIT0gRmlsbExheWVyKEZpbGxMYXllclR5cGU6OkJhY2tncm91bmQpKQorICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoImJhY2tncm91bmQtaW1hZ2UiLCBiYWNrZ3JvdW5kKTsKKyAgICBp
ZiAoYmVoYXZpb3IgPT0gRHVtcFN0eWxlVmFsdWVzOjpBbGwgfHwgY29sb3IgIT0gUmVuZGVyU3R5
bGU6OmluaXRpYWxCYWNrZ3JvdW5kQ29sb3IoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJi
YWNrZ3JvdW5kLWNvbG9yIiwgY29sb3IpOworICAgIGlmIChiZWhhdmlvciA9PSBEdW1wU3R5bGVW
YWx1ZXM6OkFsbCB8fCBvdXRsaW5lICE9IE91dGxpbmVWYWx1ZSgpKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoIm91dGxpbmUiLCBvdXRsaW5lKTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSYgYmFja2dyb3VuZERh
dGEpCit7CisgICAgYmFja2dyb3VuZERhdGEuZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVCYWNrZ3JvdW5kRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlQmFja2dyb3VuZERhdGEuaAppbmRleCA5Yjk1ZWUwY2FiOTkxZDZmZGZi
MGI1NmRlZGExYzgwYWVlODk0NDE1Li45NzkzNDMxM2JjNDJhZjVhNWQzNjAwNDYxOWRlMGNiYWY1
YTFiMDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVC
YWNrZ3JvdW5kRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZUJhY2tncm91bmREYXRhLmgKQEAgLTQ2LDkgKzQ2LDEzIEBAIGNsYXNzIFN0eWxlQmFja2dyb3Vu
ZERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZUJhY2tncm91bmREYXRhPiB7CiAgICAgQ29s
b3IgY29sb3I7CiAgICAgT3V0bGluZVZhbHVlIG91dGxpbmU7CiAKKyAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYsIER1bXBTdHlsZVZhbHVlcyA9IER1bXBTdHlsZVZhbHVlczo6QWxsKSBjb25zdDsK
KwogcHJpdmF0ZToKICAgICBTdHlsZUJhY2tncm91bmREYXRhKCk7CiAgICAgU3R5bGVCYWNrZ3Jv
dW5kRGF0YShjb25zdCBTdHlsZUJhY2tncm91bmREYXRhJik7CiB9OwogCitXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0
YSYpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVRyZWVSZXNvbHZlci5jcHAKaW5kZXggYTAwZjRmZTBmNGNjYjUyZGQ4MzFhOTRlMjZhNTg2NGU1
YzFiNzkyNy4uMDJhMGUzN2UwY2E5M2JlOGY3ZThjZjRkNWM1OWQ5ZWI1YzE2YTUxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcApAQCAtMjk2LDcgKzI5Niw3
IEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXRlZEVsZW1lbnRVcGRh
dGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0CiAgICAgICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSB0aGF0IGFueSBuZXcgQ1NTIGFuaW1hdGlvbiBvY2N1cmluZyBvbiB0aGlzIGVs
ZW1lbnQgaGFzIGEgbWF0Y2hpbmcgV2ViQW5pbWF0aW9uCiAgICAgICAgIC8vIG9uIHRoZSBkb2N1
bWVudCB0aW1lbGluZS4gTm90ZSB0aGF0IHdlIGdldCB0aW1lbGluZSgpIG9uIHRoZSBEb2N1bWVu
dCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCBhIHRpbWVsaW5lIGNyZWF0ZWQKICAgICAgICAgLy8gaW4g
Y2FzZSBubyBXZWIgQW5pbWF0aW9ucyBoYXZlIGJlZW4gY3JlYXRlZCB0aHJvdWdoIHRoZSBKUyBB
UEkuCi0gICAgICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkucGFnZUNhY2hlU3RhdGUoKSA9PSBE
b2N1bWVudDo6Tm90SW5QYWdlQ2FjaGUgJiYgIWVsZW1lbnQuZG9jdW1lbnQoKS5yZW5kZXJWaWV3
KCktPnByaW50aW5nKCkpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9y
d2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlICYmICFl
bGVtZW50LmRvY3VtZW50KCkucmVuZGVyVmlldygpLT5wcmludGluZygpKSB7CiAgICAgICAgICAg
ICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxlLT5oYXNUcmFuc2l0aW9ucygpIHx8IG5ld1N0eWxl
LT5oYXNUcmFuc2l0aW9ucygpKSkKICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5l
KCkudXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsICpvbGRTdHlsZSwgKm5l
d1N0eWxlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDhmOGM1Yzdk
OTI3YzA3OTYyOWQ2N2VkMTVhYzAyMzg1NTZkNDkyOWEuLmNlMDUxZGU5MTczNDc3ZTU0MjQyYTE0
YTMxNzY1NDQzZTY5MzQwMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgogI2lu
Y2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgogI2luY2x1ZGUgIkF1dG9maWxsLmgiCisjaW5jbHVkZSAi
QmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxl
ci5oIgpAQCAtMTI3LDcgKzEyOCw2IEBACiAjaW5jbHVkZSAiTmF2aWdhdG9yTWVkaWFEZXZpY2Vz
LmgiCiAjaW5jbHVkZSAiTmV0d29ya0xvYWRJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2lu
Y2x1ZGUgIlBhdGhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aCIKQEAgLTkyMiwxNCArOTIyLDE0IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRHcmlkTWF4VHJhY2tz
TGltaXQodW5zaWduZWQgbWF4VHJhY2tMaW1pdCkKICAgICBHcmlkUG9zaXRpb246OnNldE1heFBv
c2l0aW9uRm9yVGVzdGluZyhtYXhUcmFja0xpbWl0KTsKIH0KIAotdm9pZCBJbnRlcm5hbHM6OmNs
ZWFyUGFnZUNhY2hlKCkKK3ZvaWQgSW50ZXJuYWxzOjpjbGVhckJhY2tGb3J3YXJkQ2FjaGUoKQog
ewotICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1Jl
YXNvbjo6Tm9uZSk7CisgICAgQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1Np
emVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7CiB9CiAKLXVuc2lnbmVkIEludGVybmFsczo6
cGFnZUNhY2hlU2l6ZSgpIGNvbnN0Cit1bnNpZ25lZCBJbnRlcm5hbHM6OmJhY2tGb3J3YXJkQ2Fj
aGVTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5wYWdl
Q291bnQoKTsKKyAgICByZXR1cm4gQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xldG9uKCkucGFnZUNv
dW50KCk7CiB9CiAKIGNsYXNzIFVuc3VzcGVuZGFibGVBY3RpdmVET01PYmplY3QgZmluYWwgOiBw
dWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgUmVmQ291bnRlZDxVbnN1c3BlbmRhYmxlQWN0
aXZlRE9NT2JqZWN0PiB7CkBAIC05NDcsNyArOTQ3LDcgQEAgY2xhc3MgVW5zdXNwZW5kYWJsZUFj
dGl2ZURPTU9iamVjdCBmaW5hbCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBSZWZD
b3UKICAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QgeyByZXR1cm4g
IlVuc3VzcGVuZGFibGVBY3RpdmVET01PYmplY3QiOyB9CiB9OwogCi12b2lkIEludGVybmFsczo6
cHJldmVudERvY3VtZW50Rm9yRW50ZXJpbmdQYWdlQ2FjaGUoKQordm9pZCBJbnRlcm5hbHM6OnBy
ZXZlbnREb2N1bWVudEZvckVudGVyaW5nQmFja0ZvcndhcmRDYWNoZSgpCiB7CiAgICAgaWYgKGF1
dG8qIGNvbnRleHQgPSBjb250ZXh0RG9jdW1lbnQoKSkKICAgICAgICAgbV91bnN1c3BlbmRhYmxl
QWN0aXZlRE9NT2JqZWN0ID0gVW5zdXNwZW5kYWJsZUFjdGl2ZURPTU9iamVjdDo6Y3JlYXRlKCpj
b250ZXh0KTsKQEAgLTIxOTksMTYgKzIxOTksMTcgQEAgY2xhc3MgR2V0Q2FsbGVyQ29kZUJsb2Nr
RnVuY3RvciB7CiBTdHJpbmcgSW50ZXJuYWxzOjpwYXJzZXJNZXRhRGF0YShKU0M6OkpTVmFsdWUg
Y29kZSkKIHsKICAgICBKU0M6OlZNJiB2bSA9IGNvbnRleHREb2N1bWVudCgpLT52bSgpOwotICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdm0udG9wQ2FsbEZyYW1lOworICAgIEpTQzo6Q2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSB2bS50b3BDYWxsRnJhbWU7CisgICAgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAg
U2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKIAogICAgIGlmICghY29kZSB8fCBjb2RlLmlz
TnVsbCgpIHx8IGNvZGUuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBHZXRDYWxsZXJDb2RlQmxv
Y2tGdW5jdG9yIGl0ZXI7Ci0gICAgICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7CisgICAgICAgIGNh
bGxGcmFtZS0+aXRlcmF0ZShpdGVyKTsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBp
dGVyLmNvZGVCbG9jaygpOwogICAgICAgICBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKTsKICAgICB9IGVsc2UgaWYgKGNvZGUuaXNGdW5jdGlvbih2bSkpIHsKLSAgICAg
ICAgSlNGdW5jdGlvbiogZnVuY09iaiA9IEpTQzo6anNDYXN0PEpTRnVuY3Rpb24qPihjb2RlLnRv
T2JqZWN0KGV4ZWMpKTsKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuY09iaiA9IEpTQzo6anNDYXN0
PEpTRnVuY3Rpb24qPihjb2RlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCkpOwogICAgICAgICBleGVj
dXRhYmxlID0gZnVuY09iai0+anNFeGVjdXRhYmxlKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKQEAgLTM0NjYsNyArMzQ2Nyw3IEBAIFJlZjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IEludGVybmFsczo6ZGVzZXJpYWxpemVCdWZmZXIoQXJyYXlCdWZmZXImIGJ1ZmZlcikg
Y29uCiAKIGJvb2wgSW50ZXJuYWxzOjppc0Zyb21DdXJyZW50V29ybGQoSlNDOjpKU1ZhbHVlIHZh
bHVlKSBjb25zdAogewotICAgIHJldHVybiBpc1dvcmxkQ29tcGF0aWJsZSgqY29udGV4dERvY3Vt
ZW50KCktPnZtKCkudG9wQ2FsbEZyYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJuIGlzV29ybGRDb21w
YXRpYmxlKCpjb250ZXh0RG9jdW1lbnQoKS0+dm0oKS50b3BDYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgdmFsdWUpOwogfQogCiB2b2lkIEludGVybmFsczo6c2V0VXNlc092ZXJsYXlT
Y3JvbGxiYXJzKGJvb2wgZW5hYmxlZCkKQEAgLTQ0NTksMTIgKzQ0NjAsMTIgQEAgdm9pZCBJbnRl
cm5hbHM6OnNldFNob3dBbGxQbHVnaW5zKGJvb2wgc2hvdykKIAogI2lmIEVOQUJMRShTVFJFQU1T
X0FQSSkKIAotYm9vbCBJbnRlcm5hbHM6OmlzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHN0cmVhbSkKK2Jvb2wgSW50ZXJuYWxzOjppc1JlYWRh
YmxlU3RyZWFtRGlzdHVyYmVkKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBKU1ZhbHVlIHN0
cmVhbSkKIHsKICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW06OmlzRGlzdHVyYmVkKHN0YXRlLCBz
dHJlYW0pOwogfQogCi1KU1ZhbHVlIEludGVybmFsczo6Y2xvbmVBcnJheUJ1ZmZlcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgYnVmZmVyLCBKU1ZhbHVlIHNyY0J5dGVPZmZzZXQsIEpT
VmFsdWUgc3JjTGVuZ3RoKQorSlNWYWx1ZSBJbnRlcm5hbHM6OmNsb25lQXJyYXlCdWZmZXIoSlND
OjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEpTVmFsdWUgYnVmZmVyLCBKU1ZhbHVlIHNyY0J5dGVP
ZmZzZXQsIEpTVmFsdWUgc3JjTGVuZ3RoKQogewogICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0udm1FbnRyeUdsb2JhbE9i
amVjdCgmc3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggYmEyYmI5NzRh
OTJjZWYxYWM3ZTM0NDc2ZWJiMTJlYWVkZDcwN2E4OS4uOGU5YmY5ZTFkY2EwZTZlYWY0MGQ3Njdh
YWI0NDYxYTMwNTQyZmYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0xNjks
OSArMTY5LDkgQEAgY2xhc3MgSW50ZXJuYWxzIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8SW50
ZXJuYWxzPiwgcHJpdmF0ZSBDb250ZXh0RGVzdHJ1Y3Rpb24KIAogICAgIHZvaWQgc2V0R3JpZE1h
eFRyYWNrc0xpbWl0KHVuc2lnbmVkKTsKIAotICAgIHZvaWQgY2xlYXJQYWdlQ2FjaGUoKTsKLSAg
ICB1bnNpZ25lZCBwYWdlQ2FjaGVTaXplKCkgY29uc3Q7Ci0gICAgdm9pZCBwcmV2ZW50RG9jdW1l
bnRGb3JFbnRlcmluZ1BhZ2VDYWNoZSgpOworICAgIHZvaWQgY2xlYXJCYWNrRm9yd2FyZENhY2hl
KCk7CisgICAgdW5zaWduZWQgYmFja0ZvcndhcmRDYWNoZVNpemUoKSBjb25zdDsKKyAgICB2b2lk
IHByZXZlbnREb2N1bWVudEZvckVudGVyaW5nQmFja0ZvcndhcmRDYWNoZSgpOwogCiAgICAgdm9p
ZCBkaXNhYmxlVGlsZVNpemVVcGRhdGVEZWxheSgpOwogCkBAIC02NzIsOCArNjcyLDggQEAgY2xh
c3MgSW50ZXJuYWxzIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZXJuYWxzPiwgcHJpdmF0
ZSBDb250ZXh0RGVzdHJ1Y3Rpb24KICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkKGJvb2wpOwogCiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQotICAgIGJvb2wgaXNSZWFk
YWJsZVN0cmVhbURpc3R1cmJlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAg
SlNDOjpKU1ZhbHVlIGNsb25lQXJyYXlCdWZmZXIoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlKTsKKyAgICBib29sIGlzUmVhZGFibGVTdHJl
YW1EaXN0dXJiZWQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CisgICAgSlND
OjpKU1ZhbHVlIGNsb25lQXJyYXlCdWZmZXIoSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNW
YWx1ZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUpOwogI2VuZGlmCiAKICAgICBTdHJpbmcg
Y29tcG9zZWRUcmVlQXNUZXh0KE5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlk
bAppbmRleCAxZWVlM2M5ZDNhZTNiMjZlZTdmNGFkMTI3MDk4NTU2YmFkYzYyZWMzLi5iNzI4OGFm
YWI2MDM3OWExYjQzNmIxODZjODExZmNkMjMwYTgwMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaWRsCkBAIC0yMDcsOSArMjA3LDkgQEAgZW51bSBDb21wb3NpdGluZ1BvbGljeSB7
CiAgICAgdm9pZCBzZXRPdmVycmlkZVJlc291cmNlTG9hZFByaW9yaXR5KFJlc291cmNlTG9hZFBy
aW9yaXR5IHByaW9yaXR5KTsKICAgICB2b2lkIHNldFN0cmljdFJhd1Jlc291cmNlVmFsaWRhdGlv
blBvbGljeURpc2FibGVkKGJvb2xlYW4gZGlzYWJsZWQpOwogCi0gICAgdm9pZCBjbGVhclBhZ2VD
YWNoZSgpOwotICAgIHVuc2lnbmVkIGxvbmcgcGFnZUNhY2hlU2l6ZSgpOwotICAgIHZvaWQgcHJl
dmVudERvY3VtZW50Rm9yRW50ZXJpbmdQYWdlQ2FjaGUoKTsKKyAgICB2b2lkIGNsZWFyQmFja0Zv
cndhcmRDYWNoZSgpOworICAgIHVuc2lnbmVkIGxvbmcgYmFja0ZvcndhcmRDYWNoZVNpemUoKTsK
KyAgICB2b2lkIHByZXZlbnREb2N1bWVudEZvckVudGVyaW5nQmFja0ZvcndhcmRDYWNoZSgpOwog
CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZElu
Zm8oRWxlbWVudCBlbGVtZW50KTsKIApAQCAtNjUxLDggKzY1MSw4IEBAIGVudW0gQ29tcG9zaXRp
bmdQb2xpY3kgewogCiAgICAgdm9pZCBzZXRTaG93QWxsUGx1Z2lucyhib29sZWFuIHNob3dBbGwp
OwogCi0gICAgW0NvbmRpdGlvbmFsPVNUUkVBTVNfQVBJLCBDYWxsV2l0aD1FeGVjU3RhdGVdIGFu
eSBjbG9uZUFycmF5QnVmZmVyKGFueSBidWZmZXIsIGFueSBzcmNCeXRlT2Zmc2V0LCBhbnkgYnl0
ZUxlbmd0aCk7Ci0gICAgW0NvbmRpdGlvbmFsPVNUUkVBTVNfQVBJLCBDYWxsV2l0aD1FeGVjU3Rh
dGVdIGJvb2xlYW4gaXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZChhbnkgc3RyZWFtKTsKKyAgICBb
Q29uZGl0aW9uYWw9U1RSRUFNU19BUEksIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gYW55IGNsb25l
QXJyYXlCdWZmZXIoYW55IGJ1ZmZlciwgYW55IHNyY0J5dGVPZmZzZXQsIGFueSBieXRlTGVuZ3Ro
KTsKKyAgICBbQ29uZGl0aW9uYWw9U1RSRUFNU19BUEksIENhbGxXaXRoPUdsb2JhbE9iamVjdF0g
Ym9vbGVhbiBpc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkKGFueSBzdHJlYW0pOwogCiAgICAgRE9N
U3RyaW5nIHJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JVUkwoRE9NVVJMIHVybCk7CiAgICAgdm9p
ZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sZWFuIGVuYWJsZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKaW5kZXgg
MGJiMjQ1OWU1ZmZlYWQ2MDliZmEzNmRmNjk2NzNhMjQwNTViYTc2OS4uNDY2ZmE0MjcwOWNlMjM4
ZWE4ZDI0ZjgyOTU0MTgyZmM2NzMwYzc1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcApAQCAtNTYsMTMgKzU2LDEzIEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiB2b2lkIGluamVjdEludGVybmFsc09iamVjdChKU0NvbnRleHRS
ZWYgY29udGV4dCkKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOwotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKGlzPERvY3VtZW50Pigqc2NyaXB0Q29udGV4dCkp
IHsKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIEludGVybmFsczo6aW50ZXJuYWxzSWQpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgSW50ZXJuYWxzOjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRDb250ZXh0KSkp
KTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIEludGVybmFsczo6aW50ZXJuYWxzSWQpLCB0b0pTKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgSW50ZXJuYWxzOjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KCpz
Y3JpcHRDb250ZXh0KSkpKTsKICAgICAgICAgT3B0aW9uczo6dXNlRG9sbGFyVk0oKSA9IHRydWU7
CiAgICAgICAgIGdsb2JhbE9iamVjdC0+ZXhwb3NlRG9sbGFyVk0odm0pOwogICAgIH0KQEAgLTcw
LDkgKzcwLDkgQEAgdm9pZCBpbmplY3RJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRl
eHQpCiAKIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQg
PSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBQYWdlKiBwYWdl
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdENvbnRleHQpLT5mcmFtZSgpLT5wYWdlKCk7CiAg
ICAgSW50ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCpwYWdlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKaW5k
ZXggNWU2YTFkMmM0ODQzNWRkNWJmYzg3ZmU5OTc2NGVhMGUxZDA3NWZlOC4uZmQ0MzU5MDRjNzBm
MjAzNzFlYWQ0ZTc0OGQ3NzQ3NDg2Y2U2OWViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTY1LDcgKzY1LDcg
QEAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OmV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKICAgICByZXR1cm4gRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGVFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IERl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSBtZXNzYWdlVmFsdWUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpT
T2JqZWN0Pj4mJiB0cmFuc2ZlcikKK0V4Y2VwdGlvbk9yPHZvaWQ+IERlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlOjpwb3N0TWVzc2FnZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIG1lc3NhZ2VWYWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYm
IHRyYW5zZmVyKQogewogICAgIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBwb3J0czsKICAg
ICBhdXRvIG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgbWVz
c2FnZVZhbHVlLCBXVEZNb3ZlKHRyYW5zZmVyKSwgcG9ydHMsIFNlcmlhbGl6YXRpb25Db250ZXh0
OjpXb3JrZXJQb3N0TWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggOTA1MjlhOWU4ZWQxOTllZjhhNDdhY2Vh
ZWI0ZGM1M2U4NTM3ZmRmNS4uZTUyYTU5ZmMyZTJkNzFlNGM3NGM3MWUzZjNkZmYwNzg5MmViYjM0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGUuaApAQCAtMzcsNyArMzcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxG
cmFtZTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNWYWx1ZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9
IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTUsNyArNTQsNyBAQCBj
bGFzcyBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSBmaW5hbCA6IHB1YmxpYyBXb3JrZXJHbG9i
YWxTY29wZSB7CiAKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWU7IH0KIAotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlIG1lc3NhZ2UsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
Pj4mJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gcG9zdE1lc3NhZ2UoSlNDOjpKU0dsb2JhbE9i
amVjdCYsIEpTQzo6SlNWYWx1ZSBtZXNzYWdlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09i
amVjdD4+JiYpOwogCiAgICAgRGVkaWNhdGVkV29ya2VyVGhyZWFkJiB0aHJlYWQoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmlkbAppbmRleCA1OTY5MmRiN2MwOTYzNDM0ODk3NmE0ZmNlYzRhOThhZWM0MDk5ZWJhLi4xMDhj
NDc1NTMxMjVmOTJmN2ZmMGQxNzY1MDJiNDQ5MjQ0NWU5OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlkbApAQCAtMzks
NyArMzksNyBAQAogXSBpbnRlcmZhY2UgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgOiBXb3Jr
ZXJHbG9iYWxTY29wZSB7CiAgICAgW1JlcGxhY2VhYmxlXSByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIG5hbWU7CiAKLSAgICBbQ2FsbFdpdGg9RXhlY1N0YXRlLCBNYXlUaHJvd0V4Y2VwdGlv
bl0gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgc2VxdWVuY2U8b2JqZWN0
PiB0cmFuc2ZlciA9IFtdKTsKKyAgICBbQ2FsbFdpdGg9R2xvYmFsT2JqZWN0LCBNYXlUaHJvd0V4
Y2VwdGlvbl0gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgc2VxdWVuY2U8
b2JqZWN0PiB0cmFuc2ZlciA9IFtdKTsKIAogICAgIHZvaWQgY2xvc2UoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXIuY3BwCmluZGV4IGUzOGVlZTM1N2ZlYTk1MzMxOTY0NjdhNGJjNjAwODc3MDgw
OTZjYmUuLjEwMDIzZjdmZGI4YTQwMWNmYWIwM2ExY2M2MzQyYTNiNzNhYTc2NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlci5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCBXb3JrZXI6On5Xb3JrZXIo
KQogICAgIG1fY29udGV4dFByb3h5Lndvcmtlck9iamVjdERlc3Ryb3llZCgpOwogfQogCi1FeGNl
cHRpb25Pcjx2b2lkPiBXb3JrZXI6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIG1lc3NhZ2VWYWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmpl
Y3Q+PiYmIHRyYW5zZmVyKQorRXhjZXB0aW9uT3I8dm9pZD4gV29ya2VyOjpwb3N0TWVzc2FnZShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIG1lc3NhZ2VWYWx1ZSwgVmVj
dG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmIHRyYW5zZmVyKQogewogICAgIFZlY3Rv
cjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBwb3J0czsKICAgICBhdXRvIG1lc3NhZ2UgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgbWVzc2FnZVZhbHVlLCBXVEZNb3ZlKHRyYW5z
ZmVyKSwgcG9ydHMsIFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQb3N0TWVzc2FnZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXIuaAppbmRleCA4ZTNiZmE4N2VjNThmMDY4YTMyOTg0MDlhYTU2YjE0
ZjljMDA2MGQ5Li40YjY0YWM4MTE1OGJlMjhjNzllNGI5ZWRhOTVlOGEwMGExZjYxNzZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmgKQEAgLTQxLDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTVmFsdWU7Ci11c2luZyBF
eGVjU3RhdGUgPSBDYWxsRnJhbWU7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcg
KzU4LDcgQEAgY2xhc3MgV29ya2VyIGZpbmFsIDogcHVibGljIEFic3RyYWN0V29ya2VyLCBwdWJs
aWMgQWN0aXZlRE9NT2JqZWN0LCBwcml2YXRlIFdvcmsKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8
UmVmPFdvcmtlcj4+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSlNDOjpSdW50aW1l
RmxhZ3MsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBPcHRpb25zJik7CiAgICAgdmlydHVhbCB+
V29ya2VyKCk7CiAKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBwb3N0TWVzc2FnZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSBtZXNzYWdlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09i
amVjdD4+JiYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHBvc3RNZXNzYWdlKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBKU0M6OkpTVmFsdWUgbWVzc2FnZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6
SlNPYmplY3Q+PiYmKTsKIAogICAgIHZvaWQgdGVybWluYXRlKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyLmlkbAppbmRleCA4OWVlNWNmNTBiODNiYmFmNGRlNGU0ZDgxYzU5ODc5MDkwODZhNTc1
Li43OGIxYWJjYmUwZTEyYWMzMzY4M2M5NzI4NmM1ZTMzNjMzMWQ1Y2Y4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXIuaWRsCkBAIC0zMiw3ICszMiw3IEBACiBdIGludGVyZmFjZSBXb3JrZXIgOiBF
dmVudFRhcmdldCB7CiAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKIAotICAgIFtDYWxsV2l0aD1FeGVj
U3RhdGUsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHBvc3RNZXNzYWdlKGFueSBtZXNzYWdlLCBv
cHRpb25hbCBzZXF1ZW5jZTxvYmplY3Q+IHRyYW5zZmVyID0gW10pOworICAgIFtDYWxsV2l0aD1H
bG9iYWxPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHBvc3RNZXNzYWdlKGFueSBtZXNz
YWdlLCBvcHRpb25hbCBzZXF1ZW5jZTxvYmplY3Q+IHRyYW5zZmVyID0gW10pOwogICAgIGF0dHJp
YnV0ZSBFdmVudEhhbmRsZXIgb25tZXNzYWdlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29uc29sZUNsaWVudC5jcHAKaW5kZXggOGYxNjQ3YzFmMzIyNTE4MTZjN2Nm
MDg5NjE4MmFlMzQyMzVjNTE4Mi4uNzIxNTgxZjFiN2M4MTYzNDQ0MzhhZTRlY2NiYTBmOTBhMTQy
MjQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb25zb2xlQ2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnNvbGVDbGllbnQu
Y3BwCkBAIC00Miw3ICs0Miw3IEBAIFdvcmtlckNvbnNvbGVDbGllbnQ6OldvcmtlckNvbnNvbGVD
bGllbnQoV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlKQogCiBXb3JrZXJDb25z
b2xlQ2xpZW50Ojp+V29ya2VyQ29uc29sZUNsaWVudCgpID0gZGVmYXVsdDsKIAotdm9pZCBXb3Jr
ZXJDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBl
LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBSZWY8SW5zcGVjdG9y
OjpTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQordm9pZCBXb3JrZXJDb25zb2xlQ2xpZW50
OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFy
Z3VtZW50cz4mJiBhcmd1bWVudHMpCiB7CiAgICAgU3RyaW5nIG1lc3NhZ2VUZXh0OwogICAgIGFy
Z3VtZW50cy0+Z2V0Rmlyc3RBcmd1bWVudEFzU3RyaW5nKG1lc3NhZ2VUZXh0KTsKQEAgLTUwLDQy
ICs1MCw0MiBAQCB2b2lkIFdvcmtlckNvbnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExl
dmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbAogICAgIG1fd29ya2VyR2xvYmFsU2Nv
cGUuYWRkQ29uc29sZU1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7CiB9CiAKLXZvaWQgV29ya2Vy
Q29uc29sZUNsaWVudDo6Y291bnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
bGFiZWwpCit2b2lkIFdvcmtlckNvbnNvbGVDbGllbnQ6OmNvdW50KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpjb25zb2xlQ291bnQobV93b3JrZXJHbG9iYWxTY29wZSwgZXhlYywgbGFiZWwpOwog
fQogCi12b2lkIFdvcmtlckNvbnNvbGVDbGllbnQ6OmNvdW50UmVzZXQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIFdvcmtlckNvbnNvbGVDbGllbnQ6OmNv
dW50UmVzZXQoSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgU3RyaW5nJiBsYWJlbCkK
IHsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnNvbGVDb3VudFJlc2V0KG1fd29y
a2VyR2xvYmFsU2NvcGUsIGV4ZWMsIGxhYmVsKTsKIH0KIAotdm9pZCBXb3JrZXJDb25zb2xlQ2xp
ZW50Ojp0aW1lKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGxhYmVsKQordm9p
ZCBXb3JrZXJDb25zb2xlQ2xpZW50Ojp0aW1lKEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgbGFiZWwpCiB7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFy
dENvbnNvbGVUaW1pbmcobV93b3JrZXJHbG9iYWxTY29wZSwgZXhlYywgbGFiZWwpOwogfQogCi12
b2lkIFdvcmtlckNvbnNvbGVDbGllbnQ6OnRpbWVMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgbGFiZWwsIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQordm9p
ZCBXb3JrZXJDb25zb2xlQ2xpZW50Ojp0aW1lTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgbGFiZWwsIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYgYXJndW1lbnRzKQog
ewogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9nQ29uc29sZVRpbWluZyhtX3dvcmtl
ckdsb2JhbFNjb3BlLCBleGVjLCBsYWJlbCwgV1RGTW92ZShhcmd1bWVudHMpKTsKIH0KIAotdm9p
ZCBXb3JrZXJDb25zb2xlQ2xpZW50Ojp0aW1lRW5kKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIGxhYmVsKQordm9pZCBXb3JrZXJDb25zb2xlQ2xpZW50Ojp0aW1lRW5kKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7CiAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzdG9wQ29uc29sZVRpbWluZyhtX3dvcmtlckdsb2JhbFNjb3Bl
LCBleGVjLCBsYWJlbCk7CiB9CiAKIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTUz
NDk5PiBXZWIgSW5zcGVjdG9yOiBjb25zb2xlLnByb2ZpbGUgc2hvdWxkIHVzZSB0aGUgbmV3IFNh
bXBsaW5nIFByb2ZpbGVyCi12b2lkIFdvcmtlckNvbnNvbGVDbGllbnQ6OnByb2ZpbGUoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgV29ya2VyQ29uc29sZUNsaWVudDo6
cHJvZmlsZUVuZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBXb3Jr
ZXJDb25zb2xlQ2xpZW50Ojpwcm9maWxlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJp
bmcmKSB7IH0KK3ZvaWQgV29ya2VyQ29uc29sZUNsaWVudDo6cHJvZmlsZUVuZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJikgeyB9CiAKIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTI3NjM0PiBXZWIgSW5zcGVjdG9yOiBzdXBwb3J0IGRlYnVnZ2luZyB3ZWIgd29y
a2Vycwotdm9pZCBXb3JrZXJDb25zb2xlQ2xpZW50Ojp0YWtlSGVhcFNuYXBzaG90KEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFdvcmtlckNvbnNvbGVDbGllbnQ6OnRp
bWVTdGFtcChKU0M6OkV4ZWNTdGF0ZSosIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYpIHsgfQordm9p
ZCBXb3JrZXJDb25zb2xlQ2xpZW50Ojp0YWtlSGVhcFNuYXBzaG90KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgV29ya2VyQ29uc29sZUNsaWVudDo6dGltZVN0
YW1wKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmKSB7IH0KIAot
dm9pZCBXb3JrZXJDb25zb2xlQ2xpZW50OjpyZWNvcmQoSlNDOjpFeGVjU3RhdGUqLCBSZWY8U2Ny
aXB0QXJndW1lbnRzPiYmKSB7IH0KLXZvaWQgV29ya2VyQ29uc29sZUNsaWVudDo6cmVjb3JkRW5k
KEpTQzo6RXhlY1N0YXRlKiwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJikgeyB9Cit2b2lkIFdvcmtl
ckNvbnNvbGVDbGllbnQ6OnJlY29yZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUmVmPFNjcmlwdEFy
Z3VtZW50cz4mJikgeyB9Cit2b2lkIFdvcmtlckNvbnNvbGVDbGllbnQ6OnJlY29yZEVuZChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJikgeyB9CiAKLXZvaWQgV29y
a2VyQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkV4ZWNTdGF0ZSosIFJlZjxTY3JpcHRB
cmd1bWVudHM+JiYpIHsgfQordm9pZCBXb3JrZXJDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBSZWY8U2NyaXB0QXJndW1lbnRzPiYmKSB7IH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb25zb2xlQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnNvbGVD
bGllbnQuaAppbmRleCBjYjdkZjY3NGFlMDgyMDVjMTkxOWU0NjNkNmZjM2E3ZTRiYzBlZTIyLi5k
YjNlOTM3NDIwMDkyODQyZDAzZDM0NGQ4MmZmNWJiMjIwODk4OWJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnNvbGVDbGllbnQuaApAQCAtMzEsNyArMzEsNiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhbGxGcmFtZTsKLXVzaW5nIEV4ZWNTdGF0ZSA9IENhbGxG
cmFtZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsMTkgKzQyLDE5IEBAIGNsYXNz
IFdvcmtlckNvbnNvbGVDbGllbnQgZmluYWwgOiBwdWJsaWMgSlNDOjpDb25zb2xlQ2xpZW50IHsK
ICAgICB2aXJ0dWFsIH5Xb3JrZXJDb25zb2xlQ2xpZW50KCk7CiAKIHByb3RlY3RlZDoKLSAgICB2
b2lkIG1lc3NhZ2VXaXRoVHlwZUFuZExldmVsKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIEpT
Qzo6RXhlY1N0YXRlKiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNvdW50KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJlbCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjb3VudFJlc2V0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJiBsYWJlbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9maWxlKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcm9maWxlRW5kKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0YWtl
SGVhcFNuYXBzaG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB0aW1lKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBsYWJlbCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB0aW1lTG9nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
JiBsYWJlbCwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHRpbWVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHRpbWVTdGFtcChKU0M6OkV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6
OlNjcmlwdEFyZ3VtZW50cz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWNvcmQoSlNDOjpFeGVj
U3RhdGUqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgcmVjb3JkRW5kKEpTQzo6RXhlY1N0YXRlKiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJn
dW1lbnRzPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjcmVlbnNob3QoSlNDOjpFeGVjU3RhdGUq
LCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOworICAgIHZvaWQg
bWVzc2FnZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjb3VudChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBs
YWJlbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb3VudFJlc2V0KEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIGxhYmVsKSBvdmVycmlkZTsKKyAgICB2b2lkIHByb2ZpbGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOworICAgIHZvaWQg
cHJvZmlsZUVuZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCB0YWtlSGVhcFNuYXBzaG90KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsKKyAgICB2b2lkIHRpbWUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpIG92ZXJyaWRlOworICAgIHZvaWQgdGltZUxv
ZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBsYWJlbCwgUmVmPEluc3BlY3Rv
cjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHRpbWVFbmQoSlNDOjpK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbGFiZWwpIG92ZXJyaWRlOworICAgIHZvaWQg
dGltZVN0YW1wKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVjb3JkKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpIG92ZXJyaWRlOworICAgIHZvaWQg
cmVjb3JkRW5kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBvdmVycmlkZTsKIAogcHJp
dmF0ZToKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9iYWxTY29wZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKaW5kZXggOTUzZjkwZWEw
Nzg0NWYwMzAwMDVhMzRjN2RiNjMxNzdmNmFiMjE2ZC4uNGIyZGYyZTA0MmQzYjVkNTk4ODcwYjVi
N2ExMmI1NWQ3MTBkMDQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9i
YWxTY29wZS5jcHAKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjpw
b3N0VGFzayhUYXNrJiYgdGFzaykKICAgICB0aHJlYWQoKS5ydW5Mb29wKCkucG9zdFRhc2soV1RG
TW92ZSh0YXNrKSk7CiB9CiAKLUV4Y2VwdGlvbk9yPGludD4gV29ya2VyR2xvYmFsU2NvcGU6OnNl
dFRpbWVvdXQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVk
QWN0aW9uPiBhY3Rpb24sIGludCB0aW1lb3V0LCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtu
b3duPj4mJiBhcmd1bWVudHMpCitFeGNlcHRpb25PcjxpbnQ+IFdvcmtlckdsb2JhbFNjb3BlOjpz
ZXRUaW1lb3V0KEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBzdGQ6OnVuaXF1ZV9wdHI8U2No
ZWR1bGVkQWN0aW9uPiBhY3Rpb24sIGludCB0aW1lb3V0LCBWZWN0b3I8SlNDOjpTdHJvbmc8SlND
OjpVbmtub3duPj4mJiBhcmd1bWVudHMpCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGNo
ZWNrIHJlYWxseSBoYXBwZW4gaGVyZT8gT3Igc2hvdWxkIGl0IGhhcHBlbiB3aGVuIGNvZGUgaXMg
YWJvdXQgdG8gZXZhbD8KICAgICBpZiAoYWN0aW9uLT50eXBlKCkgPT0gU2NoZWR1bGVkQWN0aW9u
OjpUeXBlOjpDb2RlKSB7CkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29w
ZTo6Y2xlYXJUaW1lb3V0KGludCB0aW1lb3V0SWQpCiAgICAgRE9NVGltZXI6OnJlbW92ZUJ5SWQo
KnRoaXMsIHRpbWVvdXRJZCk7CiB9CiAKLUV4Y2VwdGlvbk9yPGludD4gV29ya2VyR2xvYmFsU2Nv
cGU6OnNldEludGVydmFsKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc3RkOjp1bmlxdWVfcHRyPFNj
aGVkdWxlZEFjdGlvbj4gYWN0aW9uLCBpbnQgdGltZW91dCwgVmVjdG9yPEpTQzo6U3Ryb25nPEpT
Qzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKQorRXhjZXB0aW9uT3I8aW50PiBXb3JrZXJHbG9iYWxT
Y29wZTo6c2V0SW50ZXJ2YWwoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIHN0ZDo6dW5pcXVl
X3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiwgaW50IHRpbWVvdXQsIFZlY3RvcjxKU0M6OlN0
cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50cykKIHsKICAgICAvLyBGSVhNRTogU2hvdWxk
IHRoaXMgY2hlY2sgcmVhbGx5IGhhcHBlbiBoZXJlPyBPciBzaG91bGQgaXQgaGFwcGVuIHdoZW4g
Y29kZSBpcyBhYm91dCB0byBldmFsPwogICAgIGlmIChhY3Rpb24tPnR5cGUoKSA9PSBTY2hlZHVs
ZWRBY3Rpb246OlR5cGU6OkNvZGUpIHsKQEAgLTM1OCw3ICszNTgsNyBAQCB2b2lkIFdvcmtlckds
b2JhbFNjb3BlOjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZUxldmVsIGxldgogICAgIGFkZE1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgeyB9LCAw
LCAwLCBudWxscHRyLCBudWxscHRyLCByZXF1ZXN0SWRlbnRpZmllcik7CiB9CiAKLXZvaWQgV29y
a2VyR2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlVGV4dCwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRy
PFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdW5z
aWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmFk
ZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlVGV4dCwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4m
JiBjYWxsU3RhY2ssIEpTQzo6SlNHbG9iYWxPYmplY3QqIHN0YXRlLCB1bnNpZ25lZCBsb25nIHJl
cXVlc3RJZGVudGlmaWVyKQogewogICAgIGlmICghaXNDb250ZXh0VGhyZWFkKCkpIHsKICAgICAg
ICAgcG9zdFRhc2soQWRkQ29uc29sZU1lc3NhZ2VUYXNrKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2VU
ZXh0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNj
b3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXgg
MzliOGZjNTFiMDdmZGE4NTY0NDVmNjgxODgzZDBjYjcwYTI1OTEwNS4uYzUzN2UxODlkZmFhZjU2
M2ZhODExNjI4MDFmYmU1MmFkNzU0OWU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyR2xvYmFsU2NvcGUuaApAQCAtMTAxLDkgKzEwMSw5IEBAIGNsYXNzIFdvcmtlckdsb2JhbFNj
b3BlIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyR2xvYmFsU2NvcGU+LCBwdWJsaWMgU3VwcGxl
bWVuCiAKICAgICB2b2lkIHNldElzT25saW5lKGJvb2wpOwogCi0gICAgRXhjZXB0aW9uT3I8aW50
PiBzZXRUaW1lb3V0KEpTQzo6RXhlY1N0YXRlJiwgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFj
dGlvbj4sIGludCB0aW1lb3V0LCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBh
cmd1bWVudHMpOworICAgIEV4Y2VwdGlvbk9yPGludD4gc2V0VGltZW91dChKU0M6OkpTR2xvYmFs
T2JqZWN0Jiwgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4sIGludCB0aW1lb3V0LCBW
ZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpOwogICAgIHZvaWQg
Y2xlYXJUaW1lb3V0KGludCB0aW1lb3V0SWQpOwotICAgIEV4Y2VwdGlvbk9yPGludD4gc2V0SW50
ZXJ2YWwoSlNDOjpFeGVjU3RhdGUmLCBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiwg
aW50IHRpbWVvdXQsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50
cyk7CisgICAgRXhjZXB0aW9uT3I8aW50PiBzZXRJbnRlcnZhbChKU0M6OkpTR2xvYmFsT2JqZWN0
Jiwgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4sIGludCB0aW1lb3V0LCBWZWN0b3I8
SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpOwogICAgIHZvaWQgY2xlYXJJ
bnRlcnZhbChpbnQgdGltZW91dElkKTsKIAogICAgIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkgY29u
c3QgZmluYWw7CkBAIC0xNDcsNyArMTQ3LDcgQEAgY2xhc3MgV29ya2VyR2xvYmFsU2NvcGUgOiBw
dWJsaWMgUmVmQ291bnRlZDxXb3JrZXJHbG9iYWxTY29wZT4sIHB1YmxpYyBTdXBwbGVtZW4KIAog
ICAgIC8vIFRoZSBmb2xsb3dpbmcgYWRkTWVzc2FnZSBhbmQgYWRkQ29uc29sZU1lc3NhZ2UgZnVu
Y3Rpb25zIGFyZSBkZXByZWNhdGVkLgogICAgIC8vIENhbGxlcnMgc2hvdWxkIHRyeSB0byBjcmVh
dGUgdGhlIENvbnNvbGVNZXNzYWdlIHRoZW1zZWx2ZXMuCi0gICAgdm9pZCBhZGRNZXNzYWdlKE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYsIEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikgZmluYWw7CisgICAgdm9pZCBhZGRN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQg
Y29sdW1uTnVtYmVyLCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKSBmaW5hbDsK
ICAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyKSBm
aW5hbDsKIAogICAgIGJvb2wgaXNXb3JrZXJHbG9iYWxTY29wZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9F
eHRlbmRhYmxlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL0V4dGVu
ZGFibGVFdmVudC5jcHAKaW5kZXggMDQzN2U0MjE5ZjU3Y2EzYTQ5YzU4OWZhZGZkNjdhZGVmOTkx
ZWM4My4uZTcyZWYxMzc3OGQ2NDAzYzFiZjg1YjRlMTdlY2ExM2E1OTRmNmNkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL0V4dGVuZGFibGVFdmVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL0V4dGVuZGFibGVFdmVudC5jcHAKQEAg
LTc4LDcgKzc4LDcgQEAgY2xhc3MgRnVuY3Rpb25NaWNyb3Rhc2sgZmluYWwgOiBwdWJsaWMgSlND
OjpNaWNyb3Rhc2sgewogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHJ1bihKU0M6OkV4ZWNTdGF0
ZSopIGZpbmFsCisgICAgdm9pZCBydW4oSlNDOjpKU0dsb2JhbE9iamVjdCopIGZpbmFsCiAgICAg
ewogICAgICAgICBtX2Z1bmN0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL0V4dGVuZGFibGVNZXNzYWdlRXZlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL0V4dGVuZGFibGVNZXNzYWdlRXZlbnQuY3BwCmluZGV4IGNj
ZWIzNWY0ODU5NGM0YzM3ZGZhZmQwYTEzNGNkYWJkY2I5NjUyMTguLmU2YWJiMTQ1MDQ0M2YyZWQ4
NDRiMjlhODM5YjYzMzgwNWI5NmI1YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9FeHRlbmRhYmxlTWVzc2FnZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NlcnZpY2UvRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudC5jcHAKQEAgLTQwLDcgKzQw
LDcgQEAgUmVmPEV4dGVuZGFibGVNZXNzYWdlRXZlbnQ+IEV4dGVuZGFibGVNZXNzYWdlRXZlbnQ6
OmNyZWF0ZShWZWN0b3I8UmVmUHRyPE1lc3NhZ2UKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBF
eHRlbmRhYmxlTWVzc2FnZUV2ZW50KFdURk1vdmUoZGF0YSksIG9yaWdpbiwgbGFzdEV2ZW50SWQs
IFdURk1vdmUoc291cmNlKSwgV1RGTW92ZShwb3J0cykpKTsKIH0KIAotRXh0ZW5kYWJsZU1lc3Nh
Z2VFdmVudDo6RXh0ZW5kYWJsZU1lc3NhZ2VFdmVudChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IEF0b21TdHJpbmcmIHR5cGUsIGNvbnN0IEluaXQmIGluaXQsIElzVHJ1c3RlZCBpc1RydXN0
ZWQpCitFeHRlbmRhYmxlTWVzc2FnZUV2ZW50OjpFeHRlbmRhYmxlTWVzc2FnZUV2ZW50KEpTQzo6
SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBjb25zdCBBdG9tU3RyaW5nJiB0eXBlLCBjb25zdCBJbml0
JiBpbml0LCBJc1RydXN0ZWQgaXNUcnVzdGVkKQogICAgIDogRXh0ZW5kYWJsZUV2ZW50KHR5cGUs
IGluaXQsIGlzVHJ1c3RlZCkKICAgICAsIG1fZGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShzdGF0ZSwgaW5pdC5kYXRhLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpOb25UaHJvd2lu
ZykpCiAgICAgLCBtX29yaWdpbihpbml0Lm9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2VydmljZS9FeHRlbmRhYmxlTWVzc2FnZUV2ZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NlcnZpY2UvRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudC5oCmluZGV4IDkzYThl
YWRkNzAzMDBjZWM4YzU4YmNmMmJhYzExZDk0N2IzMjhjZjcuLjY0MWEzNWQyMWI4ODlhYzhjZjZm
YTdmZmM0ODc1M2RmY2M5OTcwYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9FeHRlbmRhYmxlTWVzc2FnZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zZXJ2aWNlL0V4dGVuZGFibGVNZXNzYWdlRXZlbnQuaApAQCAtMzcsNyArMzcsNiBAQAog
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWxsRnJhbWU7CiBjbGFzcyBKU1ZhbHVlOwotdXNpbmcg
RXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OSw3
ICs1OCw3IEBAIGNsYXNzIEV4dGVuZGFibGVNZXNzYWdlRXZlbnQgZmluYWwgOiBwdWJsaWMgRXh0
ZW5kYWJsZUV2ZW50IHsKICAgICAgICAgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+IHBvcnRz
OwogICAgIH07CiAKLSAgICBzdGF0aWMgUmVmPEV4dGVuZGFibGVNZXNzYWdlRXZlbnQ+IGNyZWF0
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEF0b21TdHJpbmcmIHR5cGUsIGNvbnN0IElu
aXQmIGluaXRpYWxpemVyLCBJc1RydXN0ZWQgaXNUcnVzdGVkID0gSXNUcnVzdGVkOjpObykKKyAg
ICBzdGF0aWMgUmVmPEV4dGVuZGFibGVNZXNzYWdlRXZlbnQ+IGNyZWF0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBzdGF0ZSwgY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgY29uc3QgSW5pdCYgaW5pdGlh
bGl6ZXIsIElzVHJ1c3RlZCBpc1RydXN0ZWQgPSBJc1RydXN0ZWQ6Ok5vKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudChzdGF0ZSwgdHlw
ZSwgaW5pdGlhbGl6ZXIsIGlzVHJ1c3RlZCkpOwogICAgIH0KQEAgLTc3LDcgKzc2LDcgQEAgY2xh
c3MgRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudCBmaW5hbCA6IHB1YmxpYyBFeHRlbmRhYmxlRXZlbnQg
ewogICAgIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudEludGVyZmFjZVR5cGU7IH0KIAogcHJpdmF0ZToKLSAg
ICBFeHRlbmRhYmxlTWVzc2FnZUV2ZW50KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgQXRvbVN0cmlu
ZyYsIGNvbnN0IEluaXQmLCBJc1RydXN0ZWQpOworICAgIEV4dGVuZGFibGVNZXNzYWdlRXZlbnQo
SlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IEF0b21TdHJpbmcmLCBjb25zdCBJbml0JiwgSXNU
cnVzdGVkKTsKICAgICBFeHRlbmRhYmxlTWVzc2FnZUV2ZW50KFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+JiYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFz
dEV2ZW50SWQsIE9wdGlvbmFsPEV4dGVuZGFibGVNZXNzYWdlRXZlbnRTb3VyY2U+JiYsIFZlY3Rv
cjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYmKTsKIAogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG1fZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9GZXRjaEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9GZXRjaEV2
ZW50LmNwcAppbmRleCAxNWZlMTE0YTNhNWI4YmY4OWViYzlmZjIwYjRiOGRmYmMwYjE2OGIzLi4x
ZWI4YzdhMmU1NWRkZWU3ZWUwNThjMDk1YjlhYTU2NTdiYzgyMzU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvRmV0Y2hFdmVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zZXJ2aWNlL0ZldGNoRXZlbnQuY3BwCkBAIC0xMTMsMTMgKzExMywxMyBA
QCB2b2lkIEZldGNoRXZlbnQ6OnByb2Nlc3NSZXNwb25zZShFeHBlY3RlZDxSZWY8RmV0Y2hSZXNw
b25zZT4sIFJlc291cmNlRXJyb3I+JiYgcgogdm9pZCBGZXRjaEV2ZW50Ojpwcm9taXNlSXNTZXR0
bGVkKCkKIHsKICAgICBpZiAobV9yZXNwb25kUHJvbWlzZS0+c3RhdHVzKCkgPT0gRE9NUHJvbWlz
ZTo6U3RhdHVzOjpSZWplY3RlZCkgewotICAgICAgICBhdXRvIHJlYXNvbiA9IG1fcmVzcG9uZFBy
b21pc2UtPnJlc3VsdCgpLnRvV1RGU3RyaW5nKG1fcmVzcG9uZFByb21pc2UtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCkpOworICAgICAgICBhdXRvIHJlYXNvbiA9IG1fcmVzcG9uZFByb21p
c2UtPnJlc3VsdCgpLnRvV1RGU3RyaW5nKG1fcmVzcG9uZFByb21pc2UtPmdsb2JhbE9iamVjdCgp
KTsKICAgICAgICAgcmVzcG9uZFdpdGhFcnJvcihjcmVhdGVSZXNwb25zZUVycm9yKG1fcmVxdWVz
dC0+dXJsKCksIHJlYXNvbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJU
KG1fcmVzcG9uZFByb21pc2UtPnN0YXR1cygpID09IERPTVByb21pc2U6OlN0YXR1czo6RnVsZmls
bGVkKTsKLSAgICBhdXRvIHJlc3BvbnNlID0gSlNGZXRjaFJlc3BvbnNlOjp0b1dyYXBwZWQobV9y
ZXNwb25kUHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKS0+dm0oKSwgbV9yZXNw
b25kUHJvbWlzZS0+cmVzdWx0KCkpOworICAgIGF1dG8gcmVzcG9uc2UgPSBKU0ZldGNoUmVzcG9u
c2U6OnRvV3JhcHBlZChtX3Jlc3BvbmRQcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgbV9y
ZXNwb25kUHJvbWlzZS0+cmVzdWx0KCkpOwogICAgIGlmICghcmVzcG9uc2UpIHsKICAgICAgICAg
cmVzcG9uZFdpdGhFcnJvcihjcmVhdGVSZXNwb25zZUVycm9yKG1fcmVxdWVzdC0+dXJsKCksICJS
ZXR1cm5lZCByZXNwb25zZSBpcyBudWxsLiJfcykpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAKaW5k
ZXggMjZiOWFmOWNiZjdiNGZjYTIyMDViOGI3OTg3YzI4MTg1MTEzODcwZi4uMTgxODBjNTE2ZWQ2
YzU1NTg4MGU3NGUzOTRkNjVmNTk2OWM1NTRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d29ya2xldHMvUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtsZXRzL1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcApAQCAtNjgsNyArNjgsNyBAQCBQ
YWludFdvcmtsZXRHbG9iYWxTY29wZTo6UGFpbnREZWZpbml0aW9uOjpQYWludERlZmluaXRpb24o
Y29uc3QgQXRvbVN0cmluZyYgbmFtZQogfQogCiAvLyBodHRwczovL2RyYWZ0cy5jc3MtaG91ZGlu
aS5vcmcvY3NzLXBhaW50LWFwaS8jcmVnaXN0ZXJpbmctY3VzdG9tLXBhaW50Ci1FeGNlcHRpb25P
cjx2b2lkPiBQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6cmVnaXN0ZXJQYWludChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgU3Ryb25nPEpTT2JqZWN0PiBwYWludENvbnN0cnVjdG9yKQorRXhjZXB0aW9uT3I8
dm9pZD4gUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnJlZ2lzdGVyUGFpbnQoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFN0cm9uZzxKU09iamVj
dD4gcGFpbnRDb25zdHJ1Y3RvcikKIHsKICAgICBhdXRvJiB2bSA9IHBhaW50Q29uc3RydWN0b3It
PnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC05MCwyNyArOTAsMjcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnJlZ2lzdGVyUGFp
bnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLAogCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGlucHV0
UHJvcGVydGllczsKIAotICAgICAgICBKU1ZhbHVlIGlucHV0UHJvcGVydGllc0l0ZXJhYmxlVmFs
dWUgPSBwYWludENvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiaW5wdXRQcm9wZXJ0aWVzIikpOworICAgICAgICBKU1ZhbHVlIGlucHV0UHJvcGVydGll
c0l0ZXJhYmxlVmFsdWUgPSBwYWludENvbnN0cnVjdG9yLT5nZXQoJmdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImlucHV0UHJvcGVydGllcyIpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25FcnJv
ciB9KTsKIAogICAgICAgICBpZiAoIWlucHV0UHJvcGVydGllc0l0ZXJhYmxlVmFsdWUuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgIGlucHV0UHJvcGVydGllcyA9IGNvbnZlcnQ8SURMU2VxdWVu
Y2U8SURMRE9NU3RyaW5nPj4oc3RhdGUsIGlucHV0UHJvcGVydGllc0l0ZXJhYmxlVmFsdWUpOwor
ICAgICAgICAgICAgaW5wdXRQcm9wZXJ0aWVzID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExET01T
dHJpbmc+PihnbG9iYWxPYmplY3QsIGlucHV0UHJvcGVydGllc0l0ZXJhYmxlVmFsdWUpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2Vw
dGlvbkVycm9yIH0pOwogCiAgICAgICAgIC8vIEZJWE1FOiBWYWxpZGF0ZSBpbnB1dCBwcm9wZXJ0
aWVzIGhlcmUgKHN0ZXAgNykuCiAKICAgICAgICAgVmVjdG9yPFN0cmluZz4gaW5wdXRBcmd1bWVu
dHM7CiAKLSAgICAgICAgSlNWYWx1ZSBpbnB1dEFyZ3VtZW50c0l0ZXJhYmxlVmFsdWUgPSBwYWlu
dENvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiaW5w
dXRBcmd1bWVudHMiKSk7CisgICAgICAgIEpTVmFsdWUgaW5wdXRBcmd1bWVudHNJdGVyYWJsZVZh
bHVlID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJpbnB1dEFyZ3VtZW50cyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25FcnJvciB9KTsKIAogICAg
ICAgICBpZiAoIWlucHV0QXJndW1lbnRzSXRlcmFibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICAgICAgaW5wdXRBcmd1bWVudHMgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmlu
Zz4+KHN0YXRlLCBpbnB1dEFyZ3VtZW50c0l0ZXJhYmxlVmFsdWUpOworICAgICAgICAgICAgaW5w
dXRBcmd1bWVudHMgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KGdsb2JhbE9i
amVjdCwgaW5wdXRBcmd1bWVudHNJdGVyYWJsZVZhbHVlKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25FcnJvciB9KTsKIAog
ICAgICAgICAvLyBGSVhNRTogUGFyc2Ugc3ludGF4IGZvciBpbnB1dEFyZ3VtZW50cyBoZXJlIChz
dGVwcyAxMSBhbmQgMTIpLgogCi0gICAgICAgIEpTVmFsdWUgY29udGV4dE9wdGlvbnNWYWx1ZSA9
IHBhaW50Q29uc3RydWN0b3ItPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJjb250ZXh0T3B0aW9ucyIpKTsKKyAgICAgICAgSlNWYWx1ZSBjb250ZXh0T3B0aW9uc1ZhbHVl
ID0gcGFpbnRDb25zdHJ1Y3Rvci0+Z2V0KCZnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJjb250ZXh0T3B0aW9ucyIpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25FcnJvciB9KTsKICAgICAgICAg
VU5VU0VEX1BBUkFNKGNvbnRleHRPcHRpb25zVmFsdWUpOwogCkBAIC0xMTksMTkgKzExOSwxOSBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6cmVnaXN0ZXJQYWlu
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsCiAgICAgICAgIGlmICghcGFpbnRDb25zdHJ1Y3Rvci0+
aXNDb25zdHJ1Y3Rvcih2bSkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVy
cm9yLCAiVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgY29uc3RydWN0b3IiIH07CiAKLSAg
ICAgICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IHBhaW50Q29uc3RydWN0b3ItPmdldCgmc3Rh
dGUsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90
eXBlVmFsdWUgPSBwYWludENvbnN0cnVjdG9yLT5nZXQoJmdsb2JhbE9iamVjdCwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
RXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25FcnJvciB9KTsKIAogICAgICAgICBpZiAoIXBy
b3RvdHlwZVZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
VHlwZUVycm9yLCAiVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGhhdmUgYSBwcm90b3R5cGUgdGhh
dCBpcyBhbiBvYmplY3QiIH07CiAKLSAgICAgICAgSlNWYWx1ZSBwYWludFZhbHVlID0gcHJvdG90
eXBlVmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhaW50Iikp
OworICAgICAgICBKU1ZhbHVlIHBhaW50VmFsdWUgPSBwcm90b3R5cGVWYWx1ZS5nZXQoJmdsb2Jh
bE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInBhaW50IikpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVy
cm9yIH0pOwogCiAgICAgICAgIGlmIChwYWludFZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiVGhlIGNsYXNzIG11c3QgaGF2ZSBh
IHBhaW50IG1ldGhvZCIgfTsKIAotICAgICAgICBSZWZQdHI8SlNDU1NQYWludENhbGxiYWNrPiBw
YWludCA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU0NTU1BhaW50Q2FsbGJhY2s+Pihz
dGF0ZSwgcGFpbnRWYWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUmVmUHRyPEpTQ1NTUGFp
bnRDYWxsYmFjaz4gcGFpbnQgPSBjb252ZXJ0PElETENhbGxiYWNrRnVuY3Rpb248SlNDU1NQYWlu
dENhbGxiYWNrPj4oZ2xvYmFsT2JqZWN0LCBwYWludFZhbHVlLCAqanNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oJmdsb2JhbE9iamVjdCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOwogCiAgICAgICAgIGF1
dG8gcGFpbnREZWZpbml0aW9uID0gbWFrZVVuaXF1ZTxQYWludERlZmluaXRpb24+KG5hbWUsIHBh
aW50Q29uc3RydWN0b3IuZ2V0KCksIHBhaW50LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUoaW5w
dXRQcm9wZXJ0aWVzKSwgV1RGTW92ZShpbnB1dEFyZ3VtZW50cykpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd29ya2xldHMvUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtsZXRzL1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmgKaW5kZXggNjRmYzc4ZWVl
Nzg4MGVkOWJlZGNmYzJhNzAxMmNhNmVjM2NlMWMwNi4uYjQ2M2RmNDJjMTQ0YjUwZmYxZTc2Mzk0
YmE0ODQyYmUzOTg4ZDYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2xldHMvUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9QYWlu
dFdvcmtsZXRHbG9iYWxTY29wZS5oCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIFBhaW50V29ya2xl
dEdsb2JhbFNjb3BlIDogcHVibGljIFdvcmtsZXRHbG9iYWxTY29wZSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxQYWludFdvcmtsZXRHbG9iYWxTY29wZT4gY3JlYXRlKERvY3VtZW50JiwgU2Ny
aXB0U291cmNlQ29kZSYmKTsKIAotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlZ2lzdGVyUGFpbnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gcGFpbnRDb25zdHJ1Y3Rvcik7CisgICAgRXhjZXB0
aW9uT3I8dm9pZD4gcmVnaXN0ZXJQYWludChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBwYWludENvbnN0cnVjdG9yKTsK
ICAgICBkb3VibGUgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0OwogCiAgICAgLy8gQWxsIHBhaW50
IGRlZmluaXRpb25zIG11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSB0aGUgdm0gaXMgZGVzdHJveWVk
LCBiZWNhdXNlIG90aGVyd2lzZSB0aGV5IHdpbGwgcG9pbnQgdG8gZnJlZWQgbWVtb3J5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2xldHMvUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUu
aWRsIGIvU291cmNlL1dlYkNvcmUvd29ya2xldHMvUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaWRs
CmluZGV4IDkyNmRmN2Q3NTA5YjY2MDliOTljYTA4OWJmMTgzYWUxM2EwZjc5ODMuLjU1MDllMThk
ZWEyYjJiNTFkNTliNGRlYWE2M2YzZjJkNWEyYjNhNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtsZXRzL1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrbGV0cy9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5pZGwKQEAgLTM0LDYgKzM0LDYg
QEAKICAgICBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdE9uUHJvdG90eXBlLAogICAg
IEdsb2JhbD0oV29ya2xldCxQYWludFdvcmtsZXQpLAogXSBpbnRlcmZhY2UgUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGUgOiBXb3JrbGV0R2xvYmFsU2NvcGUgewotICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bixDYWxsV2l0aD1FeGVjU3RhdGUmR2xvYmFsT2JqZWN0XSB2b2lkIHJlZ2lzdGVyUGFpbnQoRE9N
U3RyaW5nIG5hbWUsIG9iamVjdCBwYWludENvbnN0cnVjdG9yKTsKKyAgICBbTWF5VGhyb3dFeGNl
cHRpb24sQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSB2b2lkIHJlZ2lzdGVyUGFpbnQoRE9NU3RyaW5n
IG5hbWUsIG9iamVjdCBwYWludENvbnN0cnVjdG9yKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
dW5yZXN0cmljdGVkIGRvdWJsZSBkZXZpY2VQaXhlbFJhdGlvOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRDb25zb2xlQ2xpZW50LmNwcAppbmRleCAzZjA5MjU2M2Jk
NTJhYzRhNGJiZWRhNDE1YzIzN2EyZDFkZmRhZGI3Li40ZTUxN2EwMWE3MzQ3M2IwYmQ0NTlmOWQ1
MGNkZTIyOGE4MDc2OWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3Jr
bGV0Q29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xl
dENvbnNvbGVDbGllbnQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIFdvcmtsZXRDb25zb2xlQ2xpZW50
OjpXb3JrbGV0Q29uc29sZUNsaWVudChXb3JrbGV0R2xvYmFsU2NvcGUmIHdvcmtsZXRHbG9iYWxT
Y29wCiAKIFdvcmtsZXRDb25zb2xlQ2xpZW50Ojp+V29ya2xldENvbnNvbGVDbGllbnQoKSA9IGRl
ZmF1bHQ7CiAKLXZvaWQgV29ya2xldENvbnNvbGVDbGllbnQ6Om1lc3NhZ2VXaXRoVHlwZUFuZExl
dmVsKE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCit2b2lk
IFdvcmtsZXRDb25zb2xlQ2xpZW50OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIFJl
ZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJiBhcmd1bWVudHMpCiB7CiAgICAgU3RyaW5n
IG1lc3NhZ2VUZXh0OwogICAgIGFyZ3VtZW50cy0+Z2V0Rmlyc3RBcmd1bWVudEFzU3RyaW5nKG1l
c3NhZ2VUZXh0KTsKQEAgLTUyLDIzICs1MiwyMyBAQCB2b2lkIFdvcmtsZXRDb25zb2xlQ2xpZW50
OjptZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZQog
ICAgIG1fd29ya2xldEdsb2JhbFNjb3BlLmFkZENvbnNvbGVNZXNzYWdlKFdURk1vdmUobWVzc2Fn
ZSkpOwogfQogCi12b2lkIFdvcmtsZXRDb25zb2xlQ2xpZW50Ojpjb3VudChKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBXb3JrbGV0Q29uc29sZUNsaWVudDo6Y291bnRS
ZXNldChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBXb3JrbGV0Q29u
c29sZUNsaWVudDo6Y291bnQoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpIHsg
fQordm9pZCBXb3JrbGV0Q29uc29sZUNsaWVudDo6Y291bnRSZXNldChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJikgeyB9CiAKLXZvaWQgV29ya2xldENvbnNvbGVDbGllbnQ6OnRp
bWUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgV29ya2xldENvbnNv
bGVDbGllbnQ6OnRpbWVMb2coSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCBSZWY8U2Ny
aXB0QXJndW1lbnRzPiYmKSB7IH0KLXZvaWQgV29ya2xldENvbnNvbGVDbGllbnQ6OnRpbWVFbmQo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgV29ya2xldENvbnNvbGVD
bGllbnQ6OnRpbWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpIHsgfQordm9p
ZCBXb3JrbGV0Q29uc29sZUNsaWVudDo6dGltZUxvZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgU3RyaW5nJiwgUmVmPFNjcmlwdEFyZ3VtZW50cz4mJikgeyB9Cit2b2lkIFdvcmtsZXRDb25z
b2xlQ2xpZW50Ojp0aW1lRW5kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKSB7
IH0KIAotdm9pZCBXb3JrbGV0Q29uc29sZUNsaWVudDo6cHJvZmlsZShKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBXb3JrbGV0Q29uc29sZUNsaWVudDo6cHJvZmlsZUVu
ZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBXb3JrbGV0Q29uc29s
ZUNsaWVudDo6cHJvZmlsZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJikgeyB9
Cit2b2lkIFdvcmtsZXRDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmKSB7IH0KIAotdm9pZCBXb3JrbGV0Q29uc29sZUNsaWVudDo6dGFr
ZUhlYXBTbmFwc2hvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBX
b3JrbGV0Q29uc29sZUNsaWVudDo6dGltZVN0YW1wKEpTQzo6RXhlY1N0YXRlKiwgUmVmPFNjcmlw
dEFyZ3VtZW50cz4mJikgeyB9Cit2b2lkIFdvcmtsZXRDb25zb2xlQ2xpZW50Ojp0YWtlSGVhcFNu
YXBzaG90KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgV29y
a2xldENvbnNvbGVDbGllbnQ6OnRpbWVTdGFtcChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUmVmPFNj
cmlwdEFyZ3VtZW50cz4mJikgeyB9CiAKLXZvaWQgV29ya2xldENvbnNvbGVDbGllbnQ6OnJlY29y
ZChKU0M6OkV4ZWNTdGF0ZSosIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYpIHsgfQotdm9pZCBXb3Jr
bGV0Q29uc29sZUNsaWVudDo6cmVjb3JkRW5kKEpTQzo6RXhlY1N0YXRlKiwgUmVmPFNjcmlwdEFy
Z3VtZW50cz4mJikgeyB9Cit2b2lkIFdvcmtsZXRDb25zb2xlQ2xpZW50OjpyZWNvcmQoSlNDOjpK
U0dsb2JhbE9iamVjdCosIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYpIHsgfQordm9pZCBXb3JrbGV0
Q29uc29sZUNsaWVudDo6cmVjb3JkRW5kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBSZWY8U2NyaXB0
QXJndW1lbnRzPiYmKSB7IH0KIAotdm9pZCBXb3JrbGV0Q29uc29sZUNsaWVudDo6c2NyZWVuc2hv
dChKU0M6OkV4ZWNTdGF0ZSosIFJlZjxTY3JpcHRBcmd1bWVudHM+JiYpIHsgfQordm9pZCBXb3Jr
bGV0Q29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUmVmPFNj
cmlwdEFyZ3VtZW50cz4mJikgeyB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldENvbnNvbGVDbGllbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRDb25zb2xlQ2xpZW50LmgKaW5kZXgg
MWJiNzEzZDcwOWExZDY4MjhkYWE3MjQ5Zjk0YTdmYmNlYmZkMTIzYi4uZmIzZDAxZGFjNjk4OGQw
MDIyNWE2ZGZkZGRlNTkzY2Q3MTk4NTg4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2xldHMvV29ya2xldENvbnNvbGVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0
cy9Xb3JrbGV0Q29uc29sZUNsaWVudC5oCkBAIC0zMyw3ICszMyw2IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogY2xhc3MgQ2FsbEZyYW1lOwotdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogfQog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSwxOSArNDQsMTkgQEAgY2xhc3MgV29ya2xldENv
bnNvbGVDbGllbnQgZmluYWwgOiBwdWJsaWMgSlNDOjpDb25zb2xlQ2xpZW50IHsKICAgICB2aXJ0
dWFsIH5Xb3JrbGV0Q29uc29sZUNsaWVudCgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgbWVzc2Fn
ZVdpdGhUeXBlQW5kTGV2ZWwoTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3Rh
dGUqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpIGZpbmFsOwotICAgIHZvaWQg
Y291bnQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBmaW5hbDsKLSAgICB2
b2lkIGNvdW50UmVzZXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBmaW5h
bDsKLSAgICB2b2lkIHByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIHRpdGxl
KSBmaW5hbDsKLSAgICB2b2lkIHByb2ZpbGVFbmQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmIHRpdGxlKSBmaW5hbDsKLSAgICB2b2lkIHRha2VIZWFwU25hcHNob3QoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBmaW5hbDsKLSAgICB2b2lkIHRpbWUoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBmaW5hbDsKLSAgICB2b2lkIHRpbWVMb2coSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+JiYpIGZpbmFsOwotICAgIHZvaWQgdGltZUVuZChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYgbGFiZWwpIGZpbmFsOwotICAgIHZvaWQgdGltZVN0YW1wKEpTQzo6RXhlY1N0
YXRlKiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZChKU0M6OkV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4m
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRFbmQoSlNDOjpFeGVjU3RhdGUqLCBSZWY8SW5zcGVj
dG9yOjpTY3JpcHRBcmd1bWVudHM+JiYpIGZpbmFsOwotICAgIHZvaWQgc2NyZWVuc2hvdChKU0M6
OkV4ZWNTdGF0ZSosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgZmluYWw7Cisg
ICAgdm9pZCBtZXNzYWdlV2l0aFR5cGVBbmRMZXZlbChNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVs
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUmVmPEluc3BlY3Rvcjo6U2NyaXB0QXJndW1lbnRzPiYm
KSBmaW5hbDsKKyAgICB2b2lkIGNvdW50KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJp
bmcmIGxhYmVsKSBmaW5hbDsKKyAgICB2b2lkIGNvdW50UmVzZXQoSlNDOjpKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFN0cmluZyYgbGFiZWwpIGZpbmFsOworICAgIHZvaWQgcHJvZmlsZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiB0aXRsZSkgZmluYWw7CisgICAgdm9pZCBwcm9m
aWxlRW5kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBmaW5hbDsK
KyAgICB2b2lkIHRha2VIZWFwU25hcHNob3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cmluZyYgdGl0bGUpIGZpbmFsOworICAgIHZvaWQgdGltZShKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJiBsYWJlbCkgZmluYWw7CisgICAgdm9pZCB0aW1lTG9nKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRBcmd1
bWVudHM+JiYpIGZpbmFsOworICAgIHZvaWQgdGltZUVuZChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJiBsYWJlbCkgZmluYWw7CisgICAgdm9pZCB0aW1lU3RhbXAoSlNDOjpKU0ds
b2JhbE9iamVjdCosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgZmluYWw7Cisg
ICAgdm9pZCByZWNvcmQoSlNDOjpKU0dsb2JhbE9iamVjdCosIFJlZjxJbnNwZWN0b3I6OlNjcmlw
dEFyZ3VtZW50cz4mJikgZmluYWw7CisgICAgdm9pZCByZWNvcmRFbmQoSlNDOjpKU0dsb2JhbE9i
amVjdCosIFJlZjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4mJikgZmluYWw7CisgICAgdm9p
ZCBzY3JlZW5zaG90KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBSZWY8SW5zcGVjdG9yOjpTY3JpcHRB
cmd1bWVudHM+JiYpIGZpbmFsOwogCiAgICAgV29ya2xldEdsb2JhbFNjb3BlJiBtX3dvcmtsZXRH
bG9iYWxTY29wZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3Jr
bGV0R2xvYmFsU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldEdsb2Jh
bFNjb3BlLmNwcAppbmRleCBhNWQ3ZTYxYjFhNjdlNDk4MWE3YTc0ZmI2OTJkMjg1NjBhZmMyZmUw
Li42NDFkY2Q3N2UzZjNhNjgxYWRhMGFiMzI4ZjgzMDIyNmRjNjFiM2YxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2NvcGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5jcHAKQEAgLTE0OSw3ICsxNDks
NyBAQCB2b2lkIFdvcmtsZXRHbG9iYWxTY29wZTo6YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZQogICAgIG1fZG9jdW1lbnQtPmFkZENvbnNvbGVN
ZXNzYWdlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHJlcXVlc3RJZGVudGlmaWVyKTsKIH0KIAot
dm9pZCBXb3JrbGV0R2xvYmFsU2NvcGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlVGV4dCwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJl
ciwgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4mJiBjYWxsU3RhY2ssIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllcikKK3ZvaWQgV29ya2xldEdsb2JhbFNjb3Bl
OjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZVRleHQsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+JiYgY2FsbFN0YWNrLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgbG9uZyByZXF1
ZXN0SWRlbnRpZmllcikKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgaXNKU0V4ZWN1dGlvbkZv
cmJpZGRlbigpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dv
cmtsZXRHbG9iYWxTY29wZS5oCmluZGV4IDhhMmU4ODAwYmE5OTJkZGI1NThiYWNiZDE1NmU2ZWVk
YjFiOGNkODkuLjA1OTAyZDUwOTA4NjdlM2IzMWUyZWJhN2FmMGQ4MWFjYjhmZmY5NDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRHbG9iYWxTY29wZS5oCkBAIC0xMDgsNyAr
MTA4LDcgQEAgY2xhc3MgV29ya2xldEdsb2JhbFNjb3BlIDogcHVibGljIFJlZkNvdW50ZWQ8V29y
a2xldEdsb2JhbFNjb3BlPiwgcHVibGljIFNjcmlwdEUKICAgICBib29sIGlzV29ya2xldEdsb2Jh
bFNjb3BlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCBsb2dFeGNl
cHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYs
IGludCwgaW50LCBSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+JiYpIGZpbmFsOwot
ICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgUmVmUHRyPEluc3BlY3Rv
cjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGxvbmcpIGZp
bmFsOworICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgUmVmUHRyPElu
c3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPiYmLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQgbG9uZykgZmluYWw7CiAgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
LCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcpIGZpbmFsOwogCiAg
ICAgRXZlbnRUYXJnZXQqIGVycm9yRXZlbnRUYXJnZXQoKSBmaW5hbCB7IHJldHVybiB0aGlzOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0U2NyaXB0Q29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0U2NyaXB0Q29udHJvbGxl
ci5jcHAKaW5kZXggNzEzMzkwMGYxNzFlZWY0MTU2NzNkNGU5MGQ1Y2Y3N2NmZWJjMmJiMC4uZjll
ZjVmZDJjZjQyNGFmNTY4MzA4MTM1OTM4YzU3YTIyNGVkZGI5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd29ya2xldHMvV29ya2xldFNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRTY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMTYyLDcg
KzE2Miw3IEBAIHZvaWQgV29ya2xldFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNj
cmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIFN0cmluCiAgICAgZXZhbHVhdGUoc291cmNlQ29k
ZSwgZXhjZXB0aW9uLCByZXR1cm5lZEV4Y2VwdGlvbk1lc3NhZ2UpOwogICAgIGlmIChleGNlcHRp
b24pIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0oKSk7Ci0gICAgICAgIHJlcG9ydEV4
Y2VwdGlvbihtX3dvcmtsZXRHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0
aW9uKTsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29ya2xldEdsb2JhbFNjb3BlV3JhcHBl
ci0+Z2xvYmFsT2JqZWN0KCksIGV4Y2VwdGlvbik7CiAgICAgfQogfQogCkBAIC0xNzQsMjYgKzE3
NCwyNiBAQCB2b2lkIFdvcmtsZXRTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBOYWtlZAogCiAgICAgaW5pdFNjcmlwdElmTmVlZGVk
KCk7CiAKLSAgICBhdXRvJiBzdGF0ZSA9ICptX3dvcmtsZXRHbG9iYWxTY29wZVdyYXBwZXItPmds
b2JhbEV4ZWMoKTsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8mIGxleGljYWxH
bG9iYWxPYmplY3QgPSAqbV93b3JrbGV0R2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxPYmplY3Qo
KTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sgeyB2bSB9OwogCi0gICAgSlNFeGVjU3RhdGU6OnByb2ZpbGVkRXZhbHVhdGUoJnN0
YXRlLCBKU0M6OlByb2ZpbGluZ1JlYXNvbjo6T3RoZXIsIHNvdXJjZUNvZGUuanNTb3VyY2VDb2Rl
KCksIG1fd29ya2xldEdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsVGhpcygpLCByZXR1cm5lZEV4
Y2VwdGlvbik7CisgICAgSlNFeGVjU3RhdGU6OnByb2ZpbGVkRXZhbHVhdGUoJmxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6UHJvZmlsaW5nUmVhc29uOjpPdGhlciwgc291cmNlQ29kZS5qc1NvdXJj
ZUNvZGUoKSwgbV93b3JrbGV0R2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxUaGlzKCksIHJldHVy
bmVkRXhjZXB0aW9uKTsKIAogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbiAmJiByZXR1cm5lZEV4
Y2VwdGlvbk1lc3NhZ2UpIHsKICAgICAgICAgLy8gVGhpcyBGSVhNRSBpcyBmcm9tIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIuCiAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBncmVhdCB0aGF0IHRo
aXMgY2FuIHJ1biBhcmJpdHJhcnkgY29kZSB0byBzdHJpbmctaWZ5IHRoZSB2YWx1ZSBvZiB0aGUg
ZXhjZXB0aW9uLgogICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIHRvIGhhbmRs
ZSB0aGF0IHByb3Blcmx5LCBpZiBpdCwgc2F5LCByYWlzZXMgYW5vdGhlciBleGNlcHRpb24/Ci0g
ICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvbk1lc3NhZ2UgPSByZXR1cm5lZEV4Y2VwdGlvbi0+dmFs
dWUoKS50b1dURlN0cmluZygmc3RhdGUpOworICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25NZXNz
YWdlID0gcmV0dXJuZWRFeGNlcHRpb24tPnZhbHVlKCkudG9XVEZTdHJpbmcoJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIH0KIH0KIAogdm9pZCBXb3JrbGV0U2NyaXB0Q29udHJvbGxlcjo6c2V0
RXhjZXB0aW9uKEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pCiB7Ci0gICAgYXV0byogZXhlYyA9
IG1fd29ya2xldEdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsRXhlYygpOwotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1fd29ya2xldEds
b2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGV4Y2VwdGlvbik7CisgICAgdGhy
b3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGV4Y2VwdGlvbik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
CmluZGV4IDdmMGUwMzVjNWY5NTVlNGUxYTBmNzNhNzliNzg4NDcwZGU5NjYyZWIuLjUzYzQ4MDcx
YmU5NWRjMTViOGNkODAxNzhjODA3YTkyOGUzMmEzNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcApAQCAtMTE2Myw4ICsxMTYzLDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKICAgICAgICAgbV9kaXNwYXRjaEVy
cm9yT25SZXN1bWluZyA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKHJlYXNvbiA9PSBSZWFzb25G
b3JTdXNwZW5zaW9uOjpQYWdlQ2FjaGUgJiYgbV9sb2FkZXIpIHsKLSAgICAgICAgLy8gR29pbmcg
aW50byBQYWdlQ2FjaGUsIGFib3J0IHRoZSByZXF1ZXN0IGFuZCBkaXNwYXRjaCBhIG5ldHdvcmsg
ZXJyb3Igb24gcmVzdW1pbmcuCisgICAgaWYgKHJlYXNvbiA9PSBSZWFzb25Gb3JTdXNwZW5zaW9u
OjpCYWNrRm9yd2FyZENhY2hlICYmIG1fbG9hZGVyKSB7CisgICAgICAgIC8vIEdvaW5nIGludG8g
dGhlIEJhY2tGb3J3YXJkQ2FjaGUsIGFib3J0IHRoZSByZXF1ZXN0IGFuZCBkaXNwYXRjaCBhIG5l
dHdvcmsgZXJyb3Igb24gcmVzdW1pbmcuCiAgICAgICAgIGdlbmVyaWNFcnJvcigpOwogICAgICAg
ICBtX2Rpc3BhdGNoRXJyb3JPblJlc3VtaW5nID0gdHJ1ZTsKICAgICAgICAgYm9vbCBhYm9ydGVk
ID0gaW50ZXJuYWxBYm9ydCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0
aW9ucy9XZWJLaXQueGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL1dlYktp
dC54Y2NvbmZpZwppbmRleCBmZWEyNWVlZDZlM2IyMDQwNzZhMGZjMDMxMDE1ZjhkOTI4MjkxMTRh
Li5iNjdmMWMyYTE4ZmJlMDdlMzY1OWQyYTg2YTkwMzFmZTdjOTJmOGUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NvbmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZwpAQCAtMzAsNyArMzAsMTAgQEAg
SU5GT1BMSVNUX0ZJTEUgPSBJbmZvLnBsaXN0OwogREVGSU5FU19NT0RVTEUgPSBZRVM7CiBNT0RV
TEVNQVBfRklMRSA9ICQoTU9EVUxFTUFQX0ZJTEVfJChXS19DT0NPQV9UT1VDSCkpOwogTU9EVUxF
TUFQX0ZJTEVfY29jb2F0b3VjaCA9IE1vZHVsZXMvaU9TLm1vZHVsZW1hcDsKLU1PRFVMRU1BUF9G
SUxFXyA9IE1vZHVsZXMvT1NYLm1vZHVsZW1hcDsKK01PRFVMRU1BUF9GSUxFXyA9IE1vZHVsZXMv
bWFjT1MubW9kdWxlbWFwOworTU9EVUxFTUFQX1BSSVZBVEVfRklMRSA9ICQoTU9EVUxFTUFQX1BS
SVZBVEVfRklMRV8kKFdLX0NPQ09BX1RPVUNIKSk7CitNT0RVTEVNQVBfUFJJVkFURV9GSUxFX2Nv
Y29hdG91Y2ggPSBNb2R1bGVzL2lPUy5wcml2YXRlLm1vZHVsZW1hcDsKK01PRFVMRU1BUF9QUklW
QVRFX0ZJTEVfID0gTW9kdWxlcy9tYWNPUy5wcml2YXRlLm1vZHVsZW1hcDsKIAogSU5TVEFMTF9Q
QVRIID0gJChXRUJLSVRfRlJBTUVXT1JLU19ESVIpOwogRFlMSUJfSU5TVEFMTF9OQU1FX0JBU0Ug
PSAkKERZTElCX0lOU1RBTExfTkFNRV9CQVNFXyQoV0tfVVNFX0FMVEVSTkFURV9GUkFNRVdPUktT
X0RJUikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Nb2R1bGVzL09TWC5tb2R1bGVtYXAg
Yi9Tb3VyY2UvV2ViS2l0L01vZHVsZXMvT1NYLm1vZHVsZW1hcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggODljYTA3NGY0NzgyOGM3MzY0YTFkMWZkYTA5OGY0N2VmOTdmNDBmOC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L01vZHVsZXMvT1NYLm1vZHVsZW1hcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLWZy
YW1ld29yayBtb2R1bGUgV2ViS2l0IFtzeXN0ZW1dIFtleHRlcm5fY10gewotICB1bWJyZWxsYSBo
ZWFkZXIgIldlYktpdC5oIgotICBtb2R1bGUgKiB7IGV4cG9ydCAqIH0KLSAgZXhwb3J0ICoKLSAg
Ci0gIGV4cGxpY2l0IG1vZHVsZSBOUEFQSSB7Ci0gICAgaGVhZGVyICJucHR5cGVzLmgiCi0gICAg
aGVhZGVyICJucGFwaS5oIgotICAgIGhlYWRlciAibnBmdW5jdGlvbnMuaCIKLSAgICBoZWFkZXIg
Im5wcnVudGltZS5oIgotICAgIGV4cG9ydCAqCi0gIH0KLQotICBleHBsaWNpdCBtb2R1bGUgRE9N
UHJvZ3Jlc3NFdmVudCB7Ci0gICAgaGVhZGVyICJET01Qcm9ncmVzc0V2ZW50LmgiCi0gICAgZXhw
b3J0ICoKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Nb2R1bGVzL2lPUy5wcml2
YXRlLm1vZHVsZW1hcCBiL1NvdXJjZS9XZWJLaXQvTW9kdWxlcy9pT1MucHJpdmF0ZS5tb2R1bGVt
YXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDJkODJlOWE3NDUxZWY0MmYwOGM4ZjBiYmMzMzhmMzFmMDU1OWI2Ngot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTW9kdWxlcy9pT1MucHJpdmF0ZS5tb2R1
bGVtYXAKQEAgLTAsMCArMSw1IEBACitmcmFtZXdvcmsgbW9kdWxlIFdlYktpdF9Qcml2YXRlIFtz
eXN0ZW1dIFtleHRlcm5fY10geworICB1bWJyZWxsYSBoZWFkZXIgIldlYktpdFByaXZhdGUuaCIK
KyAgbW9kdWxlICogeyBleHBvcnQgKiB9CisgIGV4cG9ydCAqCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L01vZHVsZXMvbWFjT1MubW9kdWxlbWFwIGIvU291cmNlL1dlYktpdC9Nb2R1bGVz
L21hY09TLm1vZHVsZW1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWNhMDc0ZjQ3ODI4YzczNjRhMWQxZmRhMDk4
ZjQ3ZWY5N2Y0MGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9Nb2R1bGVzL21h
Y09TLm1vZHVsZW1hcApAQCAtMCwwICsxLDE4IEBACitmcmFtZXdvcmsgbW9kdWxlIFdlYktpdCBb
c3lzdGVtXSBbZXh0ZXJuX2NdIHsKKyAgdW1icmVsbGEgaGVhZGVyICJXZWJLaXQuaCIKKyAgbW9k
dWxlICogeyBleHBvcnQgKiB9CisgIGV4cG9ydCAqCisgIAorICBleHBsaWNpdCBtb2R1bGUgTlBB
UEkgeworICAgIGhlYWRlciAibnB0eXBlcy5oIgorICAgIGhlYWRlciAibnBhcGkuaCIKKyAgICBo
ZWFkZXIgIm5wZnVuY3Rpb25zLmgiCisgICAgaGVhZGVyICJucHJ1bnRpbWUuaCIKKyAgICBleHBv
cnQgKgorICB9CisKKyAgZXhwbGljaXQgbW9kdWxlIERPTVByb2dyZXNzRXZlbnQgeworICAgIGhl
YWRlciAiRE9NUHJvZ3Jlc3NFdmVudC5oIgorICAgIGV4cG9ydCAqCisgIH0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTW9kdWxlcy9tYWNPUy5wcml2YXRlLm1vZHVsZW1hcCBiL1NvdXJj
ZS9XZWJLaXQvTW9kdWxlcy9tYWNPUy5wcml2YXRlLm1vZHVsZW1hcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMmQ4
MmU5YTc0NTFlZjQyZjA4YzhmMGJiYzMzOGYzMWYwNTU5YjY2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9Nb2R1bGVzL21hY09TLnByaXZhdGUubW9kdWxlbWFwCkBAIC0wLDAgKzEs
NSBAQAorZnJhbWV3b3JrIG1vZHVsZSBXZWJLaXRfUHJpdmF0ZSBbc3lzdGVtXSBbZXh0ZXJuX2Nd
IHsKKyAgdW1icmVsbGEgaGVhZGVyICJXZWJLaXRQcml2YXRlLmgiCisgIG1vZHVsZSAqIHsgZXhw
b3J0ICogfQorICBleHBvcnQgKgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggMWRiNTQxZTQ2YTg3YjJiM2Q0NWFjMzI3
NTMxYzQyODlhZDIyNDZkYi4uZWI5NGFiYmY3OGRlNTZkYWVjMDViNWFhODRjYzgyMTkwNmVkY2Q0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmUuY3BwCkBAIC0xNjgwLDcgKzE2ODAsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcAog
ICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNr
QWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAKICAgICBhdXRvIHJlZ2lzdHJhYmxlRG9tYWlu
c1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yID0gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9y
RGVidWdNb2RlKCk7Ci0gICAgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IgZG9t
YWluc1RvQmxvY2sgeyByZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zv
ciwgeyB9IH07CisgICAgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IgZG9tYWlu
c1RvQmxvY2sgeyByZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zvciwg
eyB9LCB7IH0gfTsKICAgICB1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoZG9tYWluc1Rv
QmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOwogfQogCkBAIC0xNzUyLDE5ICsxNzUyLDM1IEBAIFZlY3RvcjxSZWdpc3RyYWJsZURv
bWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2Nr
QnV0CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uQXNGaXJzdFBhcnR5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21h
aW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7
CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1
cm4gcmVzdWx0czsKKyAgICAKKyAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKQorICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2Vk
Q3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0
KDApKSk7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwogCiAgICAgYXV0byBkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3Ig
PSB0aGlzLT5kb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IoKTsKICAgICBhdXRvIGRv
bWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IgPSB0aGlzLT5kb21haW5zVG9CbG9ja0J1dEtl
ZXBDb29raWVzRm9yKCk7CisgICAgYXV0byBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmly
c3RQYXJ0eSA9IHRoaXMtPmRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5KCk7
CiAKLSAgICBpZiAoZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLmlzRW1wdHkoKSAm
JiBkb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSkgeworICAgIGlmIChk
b21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IuaXNFbXB0eSgpICYmIGRvbWFpbnNUb0Js
b2NrQnV0S2VlcENvb2tpZXNGb3IuaXNFbXB0eSgpICYmIGRvbWFpbnNXaXRoVXNlckludGVyYWN0
aW9uQXNGaXJzdFBhcnR5LmlzRW1wdHkoKSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVnaXN0cmFibGVEb21haW5zVG9CbG9j
a0Nvb2tpZXNGb3IgZG9tYWluc1RvQmxvY2sgeyBkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tp
ZXNGb3IsIGRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IgfTsKKyAgICBSZWdpc3RyYWJs
ZURvbWFpbnNUb0Jsb2NrQ29va2llc0ZvciBkb21haW5zVG9CbG9jayB7IGRvbWFpbnNUb0Jsb2Nr
QW5kRGVsZXRlQ29va2llc0ZvciwgZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvciwgZG9t
YWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkgfTsKIAogICAgIGlmIChkZWJ1Z0xv
Z2dpbmdFbmFibGVkKCkgJiYgIWRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zvci5pc0Vt
cHR5KCkgJiYgIWRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IuaXNFbXB0eSgpKQogICAg
ICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoImJsb2NrIiwgZG9tYWluc1RvQmxvY2spOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApp
bmRleCBiZWVkODM0MjEyMzFlZjkwMTY5YzY3ZmQyNzJiOGNhYTg4OTU5OWY4Li4wMjI2MzI1Nzkx
NGJjOTdlYzRiOGIzOGUxNGNhNzAzZDUzYzlkNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMTU1LDYgKzE1NSw3IEBAIGNs
YXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIGZpbmFsIDogcHVibGljIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTCiAgICAgdm9pZCBzZXRVc2VySW50ZXJhY3Rpb24oY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUpOwog
ICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29r
aWVzRm9yKCkgY29uc3Q7CiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW5zVG9C
bG9ja0J1dEtlZXBDb29raWVzRm9yKCkgY29uc3Q7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSgpIGNvbnN0OwogCiAg
ICAgc3RydWN0IFByZXZhbGVudERvbWFpbkRhdGEgewogICAgICAgICB1bnNpZ25lZCBkb21haW5J
RDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5j
cHAKaW5kZXggNjU4OWY2YjFkZTJiZDg1NzIxYzYzMDcyMWQzYzM2Zjk1NDFiMWM1Yy4uZjkyZjRm
ZGE3YWI3NDM5N2QxOTk0MzBkOGIwN2QzOTYxOGFhNmNmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKQEAgLTY5Nyw3ICs2OTcsNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXIoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZQogICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2Nh
bGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAK
ICAgICBhdXRvIHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yID0g
ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Ci0gICAgUmVnaXN0cmFibGVE
b21haW5zVG9CbG9ja0Nvb2tpZXNGb3IgZG9tYWluc1RvQmxvY2sgeyByZWdpc3RyYWJsZURvbWFp
bnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvciwgeyB9IH07CisgICAgUmVnaXN0cmFibGVEb21h
aW5zVG9CbG9ja0Nvb2tpZXNGb3IgZG9tYWluc1RvQmxvY2sgeyByZWdpc3RyYWJsZURvbWFpbnNU
b0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvciwgeyB9LCB7IH0gfTsKICAgICB1cGRhdGVDb29raWVC
bG9ja2luZ0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBj
YWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogfQogCkBAIC03MzUsMjEgKzczNSwy
MiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2ll
QmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dgogCiAgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3I7CiAgICAgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiBkb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yOworICAgIFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFy
dHk7CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZh
bGVudFJlc291cmNlKSB7Ci0gICAgICAgICAgICBpZiAoaGFzSGFkVW5leHBpcmVkUmVjZW50VXNl
ckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9u
ZykpCi0gICAgICAgICAgICAgICAgZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5hcHBl
bmQocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zvci5hcHBl
bmQocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwotICAgICAgICB9CisgICAg
ICAgIGlmIChoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24ocmVzb3VyY2VTdGF0
aXN0aWMsIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKSkgeworICAgICAgICAgICAgaWYgKHJl
c291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAgICAgICAgICAgICAgZG9t
YWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5hcHBlbmQocmVzb3VyY2VTdGF0aXN0aWMucmVn
aXN0cmFibGVEb21haW4uaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICAgICAgZG9tYWluc1dpdGhV
c2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkuYXBwZW5kKHJlc291cmNlU3RhdGlzdGljLnJlZ2lz
dHJhYmxlRG9tYWluKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1By
ZXZhbGVudFJlc291cmNlKQorICAgICAgICAgICAgZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29r
aWVzRm9yLmFwcGVuZChyZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7CiAgICAg
fQogCi0gICAgaWYgKGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zvci5pc0VtcHR5KCkg
JiYgZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5pc0VtcHR5KCkgJiYgIWRlYnVnTW9k
ZUVuYWJsZWQoKSkgeworICAgIGlmIChkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3Iu
aXNFbXB0eSgpICYmIGRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IuaXNFbXB0eSgpICYm
IGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5LmlzRW1wdHkoKSAmJiAhZGVi
dWdNb2RlRW5hYmxlZCgpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQ29va2llc0Zv
ciBkb21haW5zVG9CbG9jayB7IGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvciwgZG9t
YWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvciB9OworICAgIFJlZ2lzdHJhYmxlRG9tYWluc1Rv
QmxvY2tDb29raWVzRm9yIGRvbWFpbnNUb0Jsb2NrIHsgZG9tYWluc1RvQmxvY2tBbmREZWxldGVD
b29raWVzRm9yLCBkb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLCBkb21haW5zV2l0aFVz
ZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSB9OwogCiAgICAgaWYgKGRlYnVnTG9nZ2luZ0VuYWJs
ZWQoKSAmJiAhZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLmlzRW1wdHkoKSAmJiAh
ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5pc0VtcHR5KCkpCiAgICAgICAgIGRlYnVn
TG9nRG9tYWluc0luQmF0Y2hlcygiYmxvY2siLCBkb21haW5zVG9CbG9jayk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IGUwOGFiNWQ2MGJl
ZjExZDEyNDc5Njk4YzdiODExZGI3OGNkMTY5YmQuLjdiOGFkZWNmNWE0Njc0MTk2MzgwMGQ4YjE5
NzY2NTM4NDIwNzNkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwCkBAIC05NjUsNiArOTY1LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IK
ICAgICAgICAgaWYgKGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbV9uZXR3b3JrU2Vzc2lvbi0+bmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCkpIHsKICAgICAgICAgICAgIHN0b3JhZ2VTZXNzaW9uLT5zZXRQ
cmV2YWxlbnREb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IoZG9tYWluc1RvQmxvY2su
ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yKTsKICAgICAgICAgICAgIHN0b3JhZ2VT
ZXNzaW9uLT5zZXRQcmV2YWxlbnREb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yKGRvbWFp
bnNUb0Jsb2NrLmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IpOworICAgICAgICAgICAg
c3RvcmFnZVNlc3Npb24tPnNldERvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5
KGRvbWFpbnNUb0Jsb2NrLmRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5KTsK
ICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oCmluZGV4IDQxNjRhYjZhZDhjZGZlMjI3NjBhOTZlY2Q5YTljZTFlMzBiOTA3Y2Uu
LjM4YjdjMGUwNTcwNDY0MTcyNDM3OWZiZDRmZmYxYjcxYTQ1YjdkYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAgLTY1LDcgKzY1LDYgQEAgY2xh
c3MgV2ViUHJvY2Vzc1Byb3h5OwogZW51bSBjbGFzcyBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3Rp
Y3MgOiBib29sOwogZW51bSBjbGFzcyBTaG91bGRJbmNsdWRlTG9jYWxob3N0IDogYm9vbCB7IE5v
LCBZZXMgfTsKIGVudW0gY2xhc3MgRW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZSA6IGJvb2wgeyBObywgWWVzIH07Ci1lbnVtIGNsYXNzIEVuYWJsZVJlc291cmNlTG9hZFN0YXRp
c3RpY3NOU1VSTFNlc3Npb25Td2l0Y2hpbmcgOiBib29sIHsgTm8sIFllcyB9OwogZW51bSBjbGFz
cyBXZWJzaXRlRGF0YVRvUmVtb3ZlIDogdWludDhfdCB7CiAgICAgQWxsLAogICAgIEFsbEJ1dEh0
dHBPbmx5Q29va2llcywKQEAgLTc0LDcgKzczLDggQEAgZW51bSBjbGFzcyBXZWJzaXRlRGF0YVRv
UmVtb3ZlIDogdWludDhfdCB7CiBzdHJ1Y3QgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tp
ZXNGb3IgewogICAgIFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1Rv
QmxvY2tBbmREZWxldGVDb29raWVzRm9yOwogICAgIFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4gZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvcjsKLSAgICBSZWdpc3RyYWJs
ZURvbWFpbnNUb0Jsb2NrQ29va2llc0ZvciBpc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiB7
IGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zvci5pc29sYXRlZENvcHkoKSwgZG9tYWlu
c1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5pc29sYXRlZENvcHkoKSB9OyB9CisgICAgVmVjdG9y
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFz
Rmlyc3RQYXJ0eTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQ29va2llc0ZvciBpc29s
YXRlZENvcHkoKSBjb25zdCB7IHJldHVybiB7IGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2ll
c0Zvci5pc29sYXRlZENvcHkoKSwgZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5pc29s
YXRlZENvcHkoKSwgZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkuaXNvbGF0
ZWRDb3B5KCkgfTsgfQogfTsKIAogY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
IGZpbmFsIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4gewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAxNDI1OWIxMjgz
YjFhM2FkMWMzNTg2NDg3NGQwZDc5YjJlMzY3ODViLi5kNTU3NWNlYzE2OGFhZGNkMDZkZWU1NDk0
ZGZkN2Q0OGZiZTI4OTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcApAQCAtNjY2LDE1ICs2NjYsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6c2V0R3JhbmRmYXRoZXJlZChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lz
dHJhYmwKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFVzZUlUUERhdGFiYXNl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCB2YWx1ZSkKK3ZvaWQgTmV0d29ya1Byb2Nl
c3M6OnNldFVzZUlUUERhdGFiYXNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgYm9vbCB2YWx1
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25J
RCkpIHsKICAgICAgICAgaWYgKG1faXNJVFBEYXRhYmFzZUVuYWJsZWQgIT0gdmFsdWUpIHsKICAg
ICAgICAgICAgIG1faXNJVFBEYXRhYmFzZUVuYWJsZWQgPSB2YWx1ZTsKICAgICAgICAgICAgIG5l
dHdvcmtTZXNzaW9uLT5yZWNyZWF0ZVJlc291cmNlTG9hZFN0YXRpc3RpY1N0b3JlKCk7CiAgICAg
ICAgIH0KLSAgICB9IGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9IGVs
c2UgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKKyAgICB9CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFByZXZhbGVudFJl
c291cmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTI1NSw2ICsxMjU4LDE1IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFNob3VsZERvd25n
cmFkZVJlZmVycmVyRm9yVGVzdGluZyhib29sIGVuYWJsZWQsIENvbXBsZXRpCiAgICAgfSk7CiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2hv
dWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0ZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBib29sIGVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gc3RvcmFn
ZVNlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zZXRJ
c1RoaXJkUGFydHlDb29raWVCbG9ja2luZ09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uRW5h
YmxlZChlbmFibGVkKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CiAjZW5kaWYgLy8gRU5BQkxFKFJFU09VUkNFX0xP
QURfU1RBVElTVElDUykKIAogYm9vbCBOZXR3b3JrUHJvY2Vzczo6c2Vzc2lvbklzQ29udHJvbGxl
ZEJ5QXV0b21hdGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggYzEzMGNhYzZhZTIy
NDAxZThmMTQ3YTNlZDMxZDcxMTlhMDNiMzc1Mi4uYjVkYjU2ZjAyZDJhYzE0N2MxYmRhNjZlZDUw
YTg1ZjUxODIxYWI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaApAQCAtMjIxLDcgKzIyMSw3IEBAIGNsYXNzIE5ldHdvcmtQcm9jZXNzIDogcHVi
bGljIEF1eGlsaWFyeVByb2Nlc3MsIHByaXZhdGUgRG93bmxvYWRNYW5hZ2VyOjpDbGllbnQsCiAg
ICAgdm9pZCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgc2V0
R3JhbmRmYXRoZXJlZChQQUw6OlNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBi
b29sIGlzR3JhbmRmYXRoZXJlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2
b2lkIHNldFVzZUlUUERhdGFiYXNlKFBBTDo6U2Vzc2lvbklELCBib29sIHZhbHVlKTsKKyAgICB2
b2lkIHNldFVzZUlUUERhdGFiYXNlKFBBTDo6U2Vzc2lvbklELCBib29sIHZhbHVlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMo
UEFMOjpTZXNzaW9uSUQsIHVpbnQ2NF90IG1heGltdW1FbnRyeUNvdW50LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKFBBTDo6U2Vz
c2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CkBAIC0yNjYsNiArMjY2LDcgQEAgY2xhc3MgTmV0d29ya1Byb2Nlc3MgOiBwdWJsaWMg
QXV4aWxpYXJ5UHJvY2VzcywgcHJpdmF0ZSBEb3dubG9hZE1hbmFnZXI6OkNsaWVudCwKICAgICB2
b2lkIGhhc0lzb2xhdGVkU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBjb25zdDsK
ICAgICBib29sIGlzSVRQRGF0YWJhc2VFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0lUUERh
dGFiYXNlRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JU
ZXN0aW5nKGJvb2wsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZXRT
aG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgYm9v
bCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICNlbmRpZgogCiAgICAgdXNpbmcgQ2Fj
aGVTdG9yYWdlUm9vdFBhdGhDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5n
JiYpPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGNlNWI2YmE0MzY0ZDI4NmQ3ZGFjNTQ3ZDY4YWU2NDRj
ZmUzYmRlZmEuLjQxZmVhMGRmNTg5NGYzYzRjMWEyYzJjMzM1ZWFiMmU4M2FkMDRiM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbgpAQCAtMTEyLDcgKzExMiw3IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNz
IExlZ2FjeVJlY2VpdmVyIHsKICAgICBTdWJtaXRUZWxlbWV0cnkoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKSAtPiAoKSBBc3luYwogICAgIFNldENhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVz
b3VyY2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU2Vjb25kcyBzZWNvbmRzKSAtPiAoKSBB
c3luYwogICAgIFNldEdyYW5kZmF0aGVyZWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiByZXNvdXJjZURvbWFpbiwgYm9vbCBpc0dyYW5kZmF0aGVy
ZWQpIC0+ICgpIEFzeW5jCi0gICAgU2V0VXNlSVRQRGF0YWJhc2UoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBib29sIHZhbHVlKQorICAgIFNldFVzZUlUUERhdGFiYXNlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgYm9vbCB2YWx1ZSkgLT4gKCkgQXN5bmMKICAgICBTZXRHcmFuZGZhdGhlcmlu
Z1RpbWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTZWNvbmRzIHNlY29uZHMpIC0+ICgpIEFz
eW5jCiAgICAgU2V0TWF4U3RhdGlzdGljc0VudHJpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCB1aW50NjRfdCBtYXhpbXVtRW50cnlDb3VudCkgLT4gKCkgQXN5bmMKICAgICBTZXRNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBT
ZWNvbmRzIHNlY29uZHMpIC0+ICgpIEFzeW5jCkBAIC0xMzcsNiArMTM3LDcgQEAgbWVzc2FnZXMg
LT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIERlbGV0ZUNvb2tpZXNGb3JU
ZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4gZG9tYWluLCBib29sIGluY2x1ZGVIdHRwT25seUNvb2tpZXMpIC0+ICgpIEFzeW5jCiAgICAg
SGFzSXNvbGF0ZWRTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4gZG9tYWluKSAtPiAoYm9vbCBoYXNJc29sYXRlZFNlc3Npb24pIEFzeW5j
CiAgICAgU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCkg
LT4gKCkgQXN5bmMKKyAgICBTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzRm9yVGVzdGlu
ZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wgZW5hYmxlZCkgLT4gKCkgQXN5bmMKICNl
bmRpZgogCiAgICAgU2V0U2Vzc2lvbklzQ29udHJvbGxlZEJ5QXV0b21hdGlvbihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGJvb2wgY29udHJvbGxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKaW5kZXggOTEwMjI3OWYyOWRlNDlhMGZkMWRmN2Q4
ZTA3YjAyNzM5ODU5YmU4NS4uYWE0NDA1ODc4ZjA0MTEyZWE2YTZhMDVkMjlhYWQ3ODBlZTQ3MDIz
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApA
QCAtOTMsMTEgKzkzLDExIEBAIGNsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIENhbk1ha2VX
ZWFrUHRyPE5ldHdvcmtTZXNzaW9uPiB7CiAgICAgdm9pZCBub3RpZnlQYWdlU3RhdGlzdGljc1Rl
bGVtZXRyeUZpbmlzaGVkKHVuc2lnbmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzLCB1bnNp
Z25lZCBudW1iZXJPZlByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2ln
bmVkIG51bWJlck9mUHJldmFsZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiwgdW5z
aWduZWQgdG9wUHJldmFsZW50UmVzb3VyY2VXaXRoVXNlckludGVyYWN0aW9uRGF5c1NpbmNlVXNl
ckludGVyYWN0aW9uLCB1bnNpZ25lZCBtZWRpYW5EYXlzU2luY2VVc2VySW50ZXJhY3Rpb25QcmV2
YWxlbnRSZXNvdXJjZVdpdGhVc2VySW50ZXJhY3Rpb24sIHVuc2lnbmVkIHRvcDNOdW1iZXJPZlBy
ZXZhbGVudFJlc291cmNlc1dpdGhVSSwgdW5zaWduZWQgdG9wM01lZGlhblN1YkZyYW1lV2l0aG91
dFVJLCB1bnNpZ25lZCB0b3AzTWVkaWFuU3ViUmVzb3VyY2VXaXRob3V0VUksIHVuc2lnbmVkIHRv
cDNNZWRpYW5VbmlxdWVSZWRpcmVjdHNXaXRob3V0VUksIHVuc2lnbmVkIHRvcDNNZWRpYW5EYXRh
UmVjb3Jkc1JlbW92ZWRXaXRob3V0VUkpOwogICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0xvZ1Rlc3RpbmdFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudDsgfQogICAgIHZvaWQgc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0xvZ1Rlc3RpbmdFdmVudChib29sIGxvZykgeyBtX2VuYWJsZVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgPSBsb2c7IH0KLSAgICBib29sIHNob3VsZElzb2xh
dGVTZXNzaW9uc0ZvclByZXZhbGVudFRvcEZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljc05TVVJMU2Vzc2lvblN3aXRjaGluZyA9PSBFbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTlNVUkxTZXNzaW9uU3dpdGNoaW5nOjpZZXM7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaGFzSXNvbGF0ZWRTZXNzaW9uKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVhcklzb2xh
dGVkU2Vzc2lvbnMoKSB7IH0KICAgICB2b2lkIHNldFNob3VsZERvd25ncmFkZVJlZmVycmVyRm9y
VGVzdGluZyhib29sKTsKICAgICBib29sIHNob3VsZERvd25ncmFkZVJlZmVycmVyKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzRm9yVGVzdGluZyhib29s
KTsKICNlbmRpZgogICAgIHZvaWQgc3RvcmVBZENsaWNrQXR0cmlidXRpb24oV2ViQ29yZTo6QWRD
bGlja0F0dHJpYnV0aW9uJiYpOwogICAgIHZvaWQgaGFuZGxlQWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvbihXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb246OkNvbnZlcnNpb24mJiwgY29uc3Qg
VVJMJiByZXF1ZXN0VVJMLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlZGlyZWN0
UmVxdWVzdCk7CkBAIC0xNDAsNyArMTQwLDYgQEAgY2xhc3MgTmV0d29ya1Nlc3Npb24gOiBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8TmV0d29ya1Nlc3Npb24+IHsKICAgICBTaG91bGRJbmNsdWRlTG9j
YWxob3N0IG1fc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7
IFNob3VsZEluY2x1ZGVMb2NhbGhvc3Q6OlllcyB9OwogICAgIEVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUgbV9lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2Rl
IHsgRW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZTo6Tm8gfTsKICAgICBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLSAgICBFbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTlNVUkxTZXNz
aW9uU3dpdGNoaW5nIG1fZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc05TVVJMU2Vzc2lvblN3
aXRjaGluZyB7IEVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NOU1VSTFNlc3Npb25Td2l0Y2hp
bmc6Ok5vIH07CiAgICAgYm9vbCBtX2VuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0
aW5nRXZlbnQ7CiAgICAgYm9vbCBtX2Rvd25ncmFkZVJlZmVycmVyIHsgdHJ1ZSB9OwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IGNjMTQwOTlhM2RkNTQ3MjM4
Njg2OWM1N2RmMmJmZDc4YmY1NmU1NzQuLmQ4NzM0YjVkYWU4YjkzMjRiYWE0MDY2NmRjODEzZTAz
ZTgyM2NlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC02OCw3ICs2
OCw3IEBAIHZvaWQgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6
OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBzaG91bGRJbmNsdWRlTG9j
YWxob3N0SW5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogICAgIGVuY29kZXIgPDwgZW5hYmxlUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZTsKICAgICBlbmNvZGVyIDw8IHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICBlbmNvZGVyIDw8IGVuYWJs
ZVJlc291cmNlTG9hZFN0YXRpc3RpY3NOU1VSTFNlc3Npb25Td2l0Y2hpbmc7CisgICAgZW5jb2Rl
ciA8PCBlbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdPblNpdGVzV2l0aG91dFVzZXJJbnRl
cmFjdGlvbjsKIAogICAgIGVuY29kZXIgPDwgbmV0d29ya0NhY2hlRGlyZWN0b3J5IDw8IG5ldHdv
cmtDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKIApAQCAtMTk5LDkgKzE5OSw5IEBAIE9w
dGlvbmFsPE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzPiBOZXR3b3JrU2Vzc2lvbkNy
ZWF0aW9uUGFyYW1ldGVyczo6ZGVjCiAgICAgaWYgKCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBPcHRpb25hbDxib29sPiBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTlNVUkxTZXNzaW9u
U3dpdGNoaW5nOwotICAgIGRlY29kZXIgPj4gZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc05T
VVJMU2Vzc2lvblN3aXRjaGluZzsKLSAgICBpZiAoIWVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NOU1VSTFNlc3Npb25Td2l0Y2hpbmcpCisgICAgT3B0aW9uYWw8Ym9vbD4gZW5hYmxlVGhpcmRQ
YXJ0eUNvb2tpZUJsb2NraW5nT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb247CisgICAgZGVj
b2RlciA+PiBlbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdPblNpdGVzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbjsKKyAgICBpZiAoIWVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZ09uU2l0
ZXNXaXRob3V0VXNlckludGVyYWN0aW9uKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgT3B0aW9uYWw8U3RyaW5nPiBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnk7CkBAIC0yODIsNyAr
MjgyLDcgQEAgT3B0aW9uYWw8TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM+IE5ldHdv
cmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWMKICAgICAgICAgLCBXVEZNb3ZlKCplbmFi
bGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTG9nVGVzdGluZ0V2ZW50KQogICAgICAgICAsIFdURk1v
dmUoKnNob3VsZEluY2x1ZGVMb2NhbGhvc3RJblJlc291cmNlTG9hZFN0YXRpc3RpY3MpCiAgICAg
ICAgICwgV1RGTW92ZSgqZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSkKLSAg
ICAgICAgLCBXVEZNb3ZlKCplbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTlNVUkxTZXNzaW9u
U3dpdGNoaW5nKQorICAgICAgICAsIFdURk1vdmUoKmVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9j
a2luZ09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uKQogICAgICAgICAsIFdURk1vdmUoKmRl
dmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNFbmFibGVkKQogICAgICAgICAsIFdURk1vdmUoKmFs
bExvYWRzQmxvY2tlZEJ5RGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0ZvclRlc3RpbmcpCiAg
ICAgICAgICwgV1RGTW92ZSgqcmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJl
c291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
U2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IGU4MDE3MTJhMzNkYWU0
Y2QzYTlmNTk2M2EwZjc1ZDMwNGFiODVkMDEuLjRjZGRiMGU1MTU0MTQ1NTBkMzc0YTJjMGJmMWZh
ODdlYWY3ZDYwZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTg1LDcgKzg1
LDcgQEAgc3RydWN0IE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBib29s
IGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NMb2dUZXN0aW5nRXZlbnQgeyBmYWxzZSB9Owog
ICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7
IHRydWUgfTsKICAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUg
eyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc05TVVJMU2Vz
c2lvblN3aXRjaGluZyB7IHRydWUgfTsKKyAgICBib29sIGVuYWJsZVRoaXJkUGFydHlDb29raWVC
bG9ja2luZ09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uIHsgZmFsc2UgfTsKICAgICBib29s
IGRldmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29s
IGFsbExvYWRzQmxvY2tlZEJ5RGV2aWNlTWFuYWdlbWVudFJlc3RyaWN0aW9uc0ZvclRlc3Rpbmcg
eyBmYWxzZSB9OwogICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQpp
bmRleCA3N2EyMjBmMGU3ODhjYzYxNzdlMDIzNTJkM2ZkYzZhM2UyMzc5N2EzLi4zOWRiOGI0M2Nl
ZDVhZDE1NzNhOGVmZmNiZTJmOTE5YmYzMTVjZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KQEAg
LTIxMyw3ICsyMTMsNyBAQCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0RhdGFUYXNrQ29j
b2EoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVAogICAgIGlmIChhdXRvKiBu
ZXR3b3JrU3RvcmFnZVNlc3Npb24gPSBzZXNzaW9uLm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpKSB7
CiAgICAgICAgIGlmICghc2hvdWxkQmxvY2tDb29raWVzKQogICAgICAgICAgICAgc2hvdWxkQmxv
Y2tDb29raWVzID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zaG91bGRCbG9ja0Nvb2tpZXMocmVx
dWVzdCwgZnJhbWVJRCwgcGFnZUlEKTsKLSAgICAgICAgbmVlZHNJc29sYXRlZFNlc3Npb24gPSBz
ZXNzaW9uLnNob3VsZElzb2xhdGVTZXNzaW9uc0ZvclByZXZhbGVudFRvcEZyYW1lcygpICYmIG5l
dHdvcmtTdG9yYWdlU2Vzc2lvbi0+c2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0J1dEtlZXBG
aXJzdFBhcnR5Q29va2llc0ZvcihmaXJzdFBhcnR5KTsKKyAgICAgICAgbmVlZHNJc29sYXRlZFNl
c3Npb24gPSBuZXR3b3JrU3RvcmFnZVNlc3Npb24tPnNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tp
ZXNCdXRLZWVwRmlyc3RQYXJ0eUNvb2tpZXNGb3IoZmlyc3RQYXJ0eSk7CiAgICAgfQogI2VuZGlm
CiAgICAgcmVzdHJpY3RSZXF1ZXN0UmVmZXJyZXJUb09yaWdpbklmTmVlZGVkKHJlcXVlc3QpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vz
c2lvbkNvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tCmluZGV4IDAwYmUyYzIwOWJjZmU2MmIwMTZjMTliNWI2NmY0OGFlNWM0
YjQ4ODguLmZhYjZmY2VlOTM2N2UxNTVmZjQ3Y2FhMTE0M2Q5ZDViY2M5MDEyNzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNz
aW9uQ29jb2EubW0KQEAgLTExMDksNyArMTEwOSw3IEBAIE5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5l
dHdvcmtTZXNzaW9uQ29jb2EoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBOZXR3b3Jr
CiAgICAgbV9zaG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0g
cGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
ID8gU2hvdWxkSW5jbHVkZUxvY2FsaG9zdDo6WWVzIDogU2hvdWxkSW5jbHVkZUxvY2FsaG9zdDo6
Tm87CiAgICAgbV9lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID0gcGFyYW1l
dGVycy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlID8gRW5hYmxlUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZTo6WWVzIDogRW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZTo6Tm87CiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UgPSBwYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZTsKLSAgICBtX2VuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NOU1VS
TFNlc3Npb25Td2l0Y2hpbmcgPSBwYXJhbWV0ZXJzLmVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NOU1VSTFNlc3Npb25Td2l0Y2hpbmcgPyBFbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTlNV
UkxTZXNzaW9uU3dpdGNoaW5nOjpZZXMgOiBFbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTlNV
UkxTZXNzaW9uU3dpdGNoaW5nOjpObzsKKyAgICBzdG9yYWdlU2Vzc2lvbi0+c2V0SXNUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbkVuYWJsZWQocGFy
YW1ldGVycy5lbmFibGVUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdPblNpdGVzV2l0aG91dFVzZXJJ
bnRlcmFjdGlvbik7CiAgICAgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQocGFyYW1l
dGVycy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKTsKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1Jlc291cmNlcy9TYW5kYm94UHJvZmlsZXMvaW9zL2NvbS5hcHBsZS5X
ZWJLaXQuV2ViQ29udGVudC5zYiBiL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1NhbmRib3hQcm9m
aWxlcy9pb3MvY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LnNiCmluZGV4IDI1NDdkZjI0OGEy
YTZmN2E3YmUxMzk2ZDkzZjNkMzUxNDliZDkzMWYuLjhlZTRkMTFkMDYwOTUwMWM5YzlhODM5Mzli
NThmZmM2ZGY5ZTNjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUmVzb3VyY2VzL1NhbmRi
b3hQcm9maWxlcy9pb3MvY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LnNiCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUmVzb3VyY2VzL1NhbmRib3hQcm9maWxlcy9pb3MvY29tLmFwcGxlLldlYktpdC5X
ZWJDb250ZW50LnNiCkBAIC00MCw5ICs0MCw2IEBACiAgICAgKGdsb2JhbC1uYW1lICJjb20uYXBw
bGUuZnJvbnRib2FyZC5zeXN0ZW1hcHBzZXJ2aWNlcyIpICAgICAgICAgICAgICAgICA7IC1bVUlW
aWV3U2VydmljZUludGVyZmFjZSBfY3JlYXRlUHJvY2Vzc0Fzc2VydGlvbl0gLT4gU0JTUHJvY2Vz
c0lERm9yRGlzcGxheUlkZW50aWZpZXIoKQogICAgIChnbG9iYWwtbmFtZS1yZWdleCAjIl5jb21c
LmFwcGxlXC51aWtpdFwudmlld3NlcnZpY2VcLi4rIikpCiAKLTs7IEFueSBhcHAgY291bGQgdXNl
IHViaXF1aXR5LgotKHViaXF1aXR5LWNsaWVudCkKLQogOzsgQW55IGFwcCBjYW4gcGxheSBhdWRp
byAmIG1vdmllcy4KIChwbGF5LWF1ZGlvKQogKHBsYXktbWVkaWEpCkBAIC0zOTcsMTAgKzM5NCw2
IEBACiAgICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuY29yZW1lZGlhLmRlY29tcHJlc3Npb25z
ZXNzaW9uIikKICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5jb3JlbWVkaWEudmlkZW9xdWV1
ZSIpKQogCi07OyBGSVhNRTogcmVtb3ZlIHRoZSBzZW5kLXNpZ25hbCB3aGVuIHRoaXMgcnVsZSBp
cyBubyBsb25nZXIgZ2VuZXJhdGluZyBjcmFzaGVzLgotKGRlbnkgbWFjaC1sb29rdXAgKHdpdGgg
c2VuZC1zaWduYWwgU0lHS0lMTCkKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5iYWNrYm9h
cmQuaGlkLnNlcnZpY2VzIikpCi0KIChhbGxvdyBtYWNoLWxvb2t1cCAoZXh0ZW5zaW9uICJjb20u
YXBwbGUud2Via2l0LmV4dGVuc2lvbi5tYWNoIikpCiAKIDs7IFRoZXNlIHNlcnZpY2VzIGhhdmUg
YmVlbiBpZGVudGlmaWVkIGFzIHVudXNlZCBkdXJpbmcgbGl2aW5nLW9uLgpAQCAtNDA5LDggKzQw
Miw2IEBACiA7OyBlc3RhYmxpc2hlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTM4NDAKIChkZW55IG1hY2gtbG9va3VwCiAgICAgKGdsb2JhbC1uYW1lICJj
b20uYXBwbGUuQ29yZUF1dGhlbnRpY2F0aW9uLmRhZW1vbi5saWJ4cGMiKQotICAgIChnbG9iYWwt
bmFtZSAiY29tLmFwcGxlLkZpbGVDb29yZGluYXRpb24iKQotICAgIChnbG9iYWwtbmFtZSAiY29t
LmFwcGxlLkZpbGVQcm92aWRlciIpCiAgICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuSG9uZXli
ZWUuZXZlbnQtbm90aWZ5IikKICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5NZWRpYVBsYXll
ci5SZW1vdGVQbGF5ZXJTZXJ2aWNlIikKICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5SZXBv
cnRDcmFzaC5TaW11bGF0ZUNyYXNoIikKQEAgLTQxOCw4ICs0MDksNyBAQAogICAgIChnbG9iYWwt
bmFtZSAiY29tLmFwcGxlLmFwcHN1cHBvcnQuY3Bsb2dkIikKICAgICAoZ2xvYmFsLW5hbWUgImNv
bS5hcHBsZS5hc3NlcnRpb25kLnByb2Nlc3Nhc3NlcnRpb25jb25uZWN0aW9uIikKICAgICAoZ2xv
YmFsLW5hbWUgImNvbS5hcHBsZS5hdWRpby5yZXBvcnRpbmcueHBjIikKLSAgICAoZ2xvYmFsLW5h
bWUgImNvbS5hcHBsZS5iaXJkIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5iaXJkLnRv
a2VuIikKKyAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5iYWNrYm9hcmQuaGlkLnNlcnZpY2Vz
IikKICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5jZnByZWZzZC5hZ2VudCIpCiAgICAgKGds
b2JhbC1uYW1lICJjb20uYXBwbGUuY29udGFpbmVybWFuYWdlcmQiKQogICAgIChnbG9iYWwtbmFt
ZSAiY29tLmFwcGxlLmNvcmVtZWRpYS5hc3NldGNhY2hlaW5zcGVjdG9yIikKQEAgLTQzNyw3ICs0
MjcsNiBAQAogICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmhhbmd0cmFjZXJkIikKICAgICAo
Z2xvYmFsLW5hbWUgImNvbS5hcHBsZS5pdHVuZXNjbG91ZGQueHBjIikKICAgICAoZ2xvYmFsLW5h
bWUgImNvbS5hcHBsZS5pdHVuZXNzdG9yZWQueHBjIikKLSAgICAoZ2xvYmFsLW5hbWUgImNvbS5h
cHBsZS5saWJyYXJpYW5kIikKICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5sb2NhdGlvbmQu
c3BpIikKICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5sb2NhdGlvbmQuc3luY2hyb25vdXMi
KQogICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLmxzZCIpCkBAIC00NTMsOCArNDQyLDYgQEAK
ICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5wZWdhc3VzIikKICAgICAoZ2xvYmFsLW5hbWUg
ImNvbS5hcHBsZS5wbHVnaW5raXQucGtkIikKICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5w
bHVnaW5raXQucGx1Z2luLXNlcnZpY2UiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLnF1
aWNrbG9vay5UaHVtYm5haWxzQWdlbnQiKQotICAgIChnbG9iYWwtbmFtZSAiY29tLmFwcGxlLnJl
dmlzaW9uZCIpCiAgICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUuc3ByaW5nYm9hcmQuYmFja2dy
b3VuZGFwcHNlcnZpY2VzIikKICAgICAoZ2xvYmFsLW5hbWUgImNvbS5hcHBsZS5zeXN0ZW0ubGli
aW5mby5tdXNlciIpCiAgICAgKGdsb2JhbC1uYW1lICJjb20uYXBwbGUud2Via2l0LmNhbWVyYSIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV2ViS2l0UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dlYktpdFByaXZhdGUuaAppbmRl
eCAxOGJmMGM1ZDhhNjNhZmUzOTAzMmZiNDQ3YjUyMjVlNTIxODc2YmVhLi42ZWMzYjRkM2QzOGVi
ZDI0OTM3MmU3MDFjY2JhNjdmNTQ5Yzc3OTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvQ29jb2EvV2ViS2l0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0FQSS9Db2NvYS9XZWJLaXRQcml2YXRlLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2ltcG9ydCA8
V2ViS2l0L1dLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLTmF2
aWdhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9DYWNo
ZU1vZGVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NhY2hlTW9kZWwuY3BwCmluZGV4IGYw
OWVjNmQ4YjI1ZWFlNDJmODVkMDVjNzUwMjhkMTBkZjMyNjc2NDYuLjljYmQ2YWI5YWMxMDk1NzY4
NmJhZGMwMzIxN2QxZDYxZTI0OGIxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0NhY2hlTW9kZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NhY2hlTW9kZWwuY3Bw
CkBAIC0zMywxNCArMzMsMTQgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgY2FsY3Vs
YXRlTWVtb3J5Q2FjaGVTaXplcyhDYWNoZU1vZGVsIGNhY2hlTW9kZWwsIHVuc2lnbmVkJiBjYWNo
ZVRvdGFsQ2FwYWNpdHksIHVuc2lnbmVkJiBjYWNoZU1pbkRlYWRDYXBhY2l0eSwgdW5zaWduZWQm
IGNhY2hlTWF4RGVhZENhcGFjaXR5LCBTZWNvbmRzJiBkZWFkRGVjb2RlZERhdGFEZWxldGlvbklu
dGVydmFsLCB1bnNpZ25lZCYgcGFnZUNhY2hlQ2FwYWNpdHkpCit2b2lkIGNhbGN1bGF0ZU1lbW9y
eUNhY2hlU2l6ZXMoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsLCB1bnNpZ25lZCYgY2FjaGVUb3RhbENh
cGFjaXR5LCB1bnNpZ25lZCYgY2FjaGVNaW5EZWFkQ2FwYWNpdHksIHVuc2lnbmVkJiBjYWNoZU1h
eERlYWRDYXBhY2l0eSwgU2Vjb25kcyYgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCwg
dW5zaWduZWQmIGJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSkKIHsKICAgICB1aW50NjRfdCBtZW1v
cnlTaXplID0gcmFtU2l6ZSgpIC8gTUI7CiAKICAgICBzd2l0Y2ggKGNhY2hlTW9kZWwpIHsKICAg
ICBjYXNlIENhY2hlTW9kZWw6OkRvY3VtZW50Vmlld2VyOiB7Ci0gICAgICAgIC8vIFBhZ2UgY2Fj
aGUgY2FwYWNpdHkgKGluIHBhZ2VzKQotICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7Cisg
ICAgICAgIC8vIGJhY2svZm9yd2FyZCBjYWNoZSBjYXBhY2l0eSAoaW4gcGFnZXMpCisgICAgICAg
IGJhY2tGb3J3YXJkQ2FjaGVDYXBhY2l0eSA9IDA7CiAKICAgICAgICAgLy8gT2JqZWN0IGNhY2hl
IGNhcGFjaXRpZXMgKGluIGJ5dGVzKQogICAgICAgICBpZiAobWVtb3J5U2l6ZSA+PSAyMDQ4KQpA
QCAtNjAsMTMgKzYwLDEzIEBAIHZvaWQgY2FsY3VsYXRlTWVtb3J5Q2FjaGVTaXplcyhDYWNoZU1v
ZGVsIGNhY2hlTW9kZWwsIHVuc2lnbmVkJiBjYWNoZVRvdGFsQ2FwYWNpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIENhY2hlTW9kZWw6OkRvY3VtZW50QnJvd3NlcjogewotICAgICAg
ICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKKyAgICAgICAgLy8gYmFjay9mb3J3
YXJkIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKICAgICAgICAgaWYgKG1lbW9yeVNpemUgPj0g
NTEyKQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOworICAgICAgICAgICAgYmFj
a0ZvcndhcmRDYWNoZUNhcGFjaXR5ID0gMjsKICAgICAgICAgZWxzZSBpZiAobWVtb3J5U2l6ZSA+
PSAyNTYpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDE7CisgICAgICAgICAgICBi
YWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkgPSAxOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBw
YWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgICAgICAgICBiYWNrRm9yd2FyZENhY2hlQ2FwYWNp
dHkgPSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRlcykK
ICAgICAgICAgaWYgKG1lbW9yeVNpemUgPj0gMjA0OCkKQEAgLTg2LDEzICs4NiwxMyBAQCB2b2lk
IGNhbGN1bGF0ZU1lbW9yeUNhY2hlU2l6ZXMoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsLCB1bnNpZ25l
ZCYgY2FjaGVUb3RhbENhcGFjaQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDYWNo
ZU1vZGVsOjpQcmltYXJ5V2ViQnJvd3NlcjogewotICAgICAgICAvLyBQYWdlIGNhY2hlIGNhcGFj
aXR5IChpbiBwYWdlcykKKyAgICAgICAgLy8gYmFjay9mb3J3YXJkIGNhY2hlIGNhcGFjaXR5IChp
biBwYWdlcykKICAgICAgICAgaWYgKG1lbW9yeVNpemUgPj0gNTEyKQotICAgICAgICAgICAgcGFn
ZUNhY2hlQ2FwYWNpdHkgPSAyOworICAgICAgICAgICAgYmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5
ID0gMjsKICAgICAgICAgZWxzZSBpZiAobWVtb3J5U2l6ZSA+PSAyNTYpCi0gICAgICAgICAgICBw
YWdlQ2FjaGVDYXBhY2l0eSA9IDE7CisgICAgICAgICAgICBiYWNrRm9yd2FyZENhY2hlQ2FwYWNp
dHkgPSAxOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7
CisgICAgICAgICAgICBiYWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkgPSAwOwogCiAgICAgICAgIC8v
IE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRlcykKICAgICAgICAgLy8gKFRlc3Rpbmcg
aW5kaWNhdGVzIHRoYXQgdmFsdWUgLyBNQiBkZXBlbmRzIGhlYXZpbHkgb24gY29udGVudCBhbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NhY2hlTW9kZWwuaCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0NhY2hlTW9kZWwuaAppbmRleCBmMjM5NTM4ZTY3OGViZGZjMDgxNGVkYzc2
YmY4NjNlMmYzYzI1N2NhLi5jZDY0OGI0N2JmM2Y1ZGY0NzM0NDdlZjUyNmVkNTkwMTIyMDA2YTlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9DYWNoZU1vZGVsLmgKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQ2FjaGVNb2RlbC5oCkBAIC0zNyw3ICszNyw3IEBAIGVudW0gY2xh
c3MgQ2FjaGVNb2RlbCA6IHVpbnQ4X3QgewogICAgIFByaW1hcnlXZWJCcm93c2VyCiB9OwogCi12
b2lkIGNhbGN1bGF0ZU1lbW9yeUNhY2hlU2l6ZXMoQ2FjaGVNb2RlbCwgdW5zaWduZWQmIGNhY2hl
VG90YWxDYXBhY2l0eSwgdW5zaWduZWQmIGNhY2hlTWluRGVhZENhcGFjaXR5LCB1bnNpZ25lZCYg
Y2FjaGVNYXhEZWFkQ2FwYWNpdHksIFNlY29uZHMmIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50
ZXJ2YWwsIHVuc2lnbmVkJiBwYWdlQ2FjaGVDYXBhY2l0eSk7Cit2b2lkIGNhbGN1bGF0ZU1lbW9y
eUNhY2hlU2l6ZXMoQ2FjaGVNb2RlbCwgdW5zaWduZWQmIGNhY2hlVG90YWxDYXBhY2l0eSwgdW5z
aWduZWQmIGNhY2hlTWluRGVhZENhcGFjaXR5LCB1bnNpZ25lZCYgY2FjaGVNYXhEZWFkQ2FwYWNp
dHksIFNlY29uZHMmIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwsIHVuc2lnbmVkJiBi
YWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkpOwogdm9pZCBjYWxjdWxhdGVVUkxDYWNoZVNpemVzKENh
Y2hlTW9kZWwsIHVpbnQ2NF90IGRpc2tGcmVlU2l6ZSwgdW5zaWduZWQmIHVybENhY2hlTWVtb3J5
Q2FwYWNpdHksIHVpbnQ2NF90JiB1cmxDYWNoZURpc2tDYXBhY2l0eSk7CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5j
ZXMueWFtbCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKaW5kZXgg
OTc0NjE4ZjZkMjY1NDkwNjNjODM4OGZjZGFlMmViNGQ1Njc2MWEwNi4uNGYwYjZjNjQ0NjQ1NDk3
NzhmZGRhYzBmMDg4NDg3ZTc2YzUxMjk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViUHJlZmVyZW5jZXMueWFtbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVm
ZXJlbmNlcy55YW1sCkBAIC0xNTUsMTEgKzE1NSwxMSBAQCBMb2NhbEZpbGVDb250ZW50U25pZmZp
bmdFbmFibGVkOgogICB0eXBlOiBib29sCiAgIGRlZmF1bHRWYWx1ZTogZmFsc2UKIAotVXNlc1Bh
Z2VDYWNoZToKK1VzZXNCYWNrRm9yd2FyZENhY2hlOgogICB0eXBlOiBib29sCiAgIGRlZmF1bHRW
YWx1ZTogdHJ1ZQogCi1QYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnM6CitCYWNrRm9yd2FyZENhY2hl
U3VwcG9ydHNQbHVnaW5zOgogICB0eXBlOiBib29sCiAgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogCkBA
IC0xNzY1LDEyICsxNzY1LDExIEBAIExhenlJbWFnZUxvYWRpbmdFbmFibGVkOgogICB3ZWJjb3Jl
QmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcwogICBjYXRlZ29yeTogZXhwZXJpbWVudGFs
CiAKLUlzSVRQU2Vzc2lvblN3aXRjaGluZ0VuYWJsZWQ6CitJc1RoaXJkUGFydHlDb29raWVCbG9j
a2luZ09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uRW5hYmxlZDoKICAgdHlwZTogYm9vbAot
ICBkZWZhdWx0VmFsdWU6IHRydWUKLSAgaHVtYW5SZWFkYWJsZU5hbWU6ICJJVFAgU2Vzc2lvbiBT
d2l0Y2hpbmciCi0gIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBzZXNzaW9uIHN3
aXRjaGluZyBmb3IgZG9tYWlucyBjbGFzc2lmaWVkIGJ5IElUUCIKLSAgd2ViY29yZUJpbmRpbmc6
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMKKyAgZGVmYXVsdFZhbHVlOiBmYWxzZQorICBodW1hblJl
YWRhYmxlTmFtZTogIkJsb2NrIDNyZC1QYXJ0eSBDb29raWVzIE9uIFNpdGVzIFdpdGhvdXQgSW50
ZXJhY3Rpb24gKElUUCkiCisgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkJsb2NrIGFsbCB0
aGlyZC1wYXJ0eSBjb29raWVzIG9uIHdlYnNpdGVzIHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbiIK
ICAgY2F0ZWdvcnk6IGludGVybmFsCiAKIElzTG9nZ2VkSW5BUElFbmFibGVkOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgKaW5kZXggY2Qy
MmEyNjc2NDY4ZDE4MjM0YTYwODQyZmU5ZDkxNjcxYjIwYTg3ZC4uMzhjYzc1MGNiMmM0MTgxYzA4
ZTAxNjVkZjM2MGQ3NGM4Mjk3YTk1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCkBAIC0xMzgsNyArMTM4LDcgQEAgY2xhc3MgTmF2
aWdhdGlvbkNsaWVudCB7CiAgICAgdmlydHVhbCB2b2lkIHJlc29sdmVXZWJHTExvYWRQb2xpY3ko
V2ViS2l0OjpXZWJQYWdlUHJveHkmLCBjb25zdCBXVEY6OlVSTCYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29u
c3QgeyBjb21wbGV0aW9uSGFuZGxlcihXZWJDb3JlOjpXZWJHTExvYWRQb2xpY3k6OldlYkdMQWxs
b3dDcmVhdGlvbik7IH0KICNlbmRpZgogICAgIAotICAgIHZpcnR1YWwgYm9vbCB3aWxsR29Ub0Jh
Y2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0mLCBib29sIGluUGFnZUNhY2hlKSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCB3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViS2l0OjpXZWJQYWdl
UHJveHkmLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mLCBib29sIGluQmFja0Zvcndh
cmRDYWNoZSkgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbk5h
dmlnYXRpb25HZXN0dXJlKFdlYktpdDo6V2ViUGFnZVByb3h5JikgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wg
d2lsbE5hdmlnYXRlLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSB7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5jcHAKaW5kZXggZTM3MzkzNGMyM2RkZjVkNWQ5OTM5YTc1MTk3OWYwNWM5MzVh
YzBlMS4uMWUwMGE1ZTg5NDNlOGU2YWFjZDJiNWMxNzcxYmE2ZmNkMDQ0NTUyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgUmVmPFByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbj4gUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjb3B5KCkKICAgICBjb3B5LT5tX3Byb2Nl
c3NTd2Fwc09uV2luZG93T3BlbldpdGhPcGVuZXIgPSB0aGlzLT5tX3Byb2Nlc3NTd2Fwc09uV2lu
ZG93T3BlbldpdGhPcGVuZXI7CiAgICAgY29weS0+bV9pc0F1dG9tYXRpY1Byb2Nlc3NXYXJtaW5n
RW5hYmxlZEJ5Q2xpZW50ID0gdGhpcy0+bV9pc0F1dG9tYXRpY1Byb2Nlc3NXYXJtaW5nRW5hYmxl
ZEJ5Q2xpZW50OwogICAgIGNvcHktPm1fdXNlc1dlYlByb2Nlc3NDYWNoZSA9IHRoaXMtPm1fdXNl
c1dlYlByb2Nlc3NDYWNoZTsKLSAgICBjb3B5LT5tX3VzZXNQYWdlQ2FjaGUgPSB0aGlzLT5tX3Vz
ZXNQYWdlQ2FjaGU7CisgICAgY29weS0+bV91c2VzQmFja0ZvcndhcmRDYWNoZSA9IHRoaXMtPm1f
dXNlc0JhY2tGb3J3YXJkQ2FjaGU7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgY29weS0+bV9z
dXBwcmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UgPSB0aGlzLT5tX3N1
cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oCmluZGV4IDFmYTc5MDE3YWY4NjRlYzk2ZGUyZWY4MTllYTc5YmYxOGEyMjgz
MmYuLjM5NmYzZTUzNDJiZWFhNjdjZjY3M2NhYzUyNjRkZmFmOTQ2N2Q1NWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24u
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmgKQEAgLTY4LDggKzY4LDggQEAgY2xhc3MgUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
IGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpQcm9jZXNzUG8KICAgICBi
b29sIGNsaWVudFdvdWxkQmVuZWZpdEZyb21BdXRvbWF0aWNQcm9jZXNzUHJld2FybWluZygpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50V291bGRCZW5lZml0RnJvbUF1dG9tYXRpY1Byb2Nlc3NQcmV3
YXJtaW5nOyB9CiAgICAgdm9pZCBzZXRDbGllbnRXb3VsZEJlbmVmaXRGcm9tQXV0b21hdGljUHJv
Y2Vzc1ByZXdhcm1pbmcoYm9vbCB2YWx1ZSkgeyBtX2NsaWVudFdvdWxkQmVuZWZpdEZyb21BdXRv
bWF0aWNQcm9jZXNzUHJld2FybWluZyA9IHZhbHVlOyB9CiAKLSAgICB2b2lkIHNldFVzZXNQYWdl
Q2FjaGUoYm9vbCB2YWx1ZSkgeyBtX3VzZXNQYWdlQ2FjaGUgPSB2YWx1ZTsgfQotICAgIGJvb2wg
dXNlc1BhZ2VDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1BhZ2VDYWNoZTsgfQorICAgIHZv
aWQgc2V0VXNlc0JhY2tGb3J3YXJkQ2FjaGUoYm9vbCB2YWx1ZSkgeyBtX3VzZXNCYWNrRm9yd2Fy
ZENhY2hlID0gdmFsdWU7IH0KKyAgICBib29sIHVzZXNCYWNrRm9yd2FyZENhY2hlKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VzQmFja0ZvcndhcmRDYWNoZTsgfQogCiAgICAgY29uc3QgV1RGOjpTdHJp
bmcmIGluamVjdGVkQnVuZGxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1faW5qZWN0ZWRCdW5kbGVQ
YXRoOyB9CiAgICAgdm9pZCBzZXRJbmplY3RlZEJ1bmRsZVBhdGgoY29uc3QgV1RGOjpTdHJpbmcm
IGluamVjdGVkQnVuZGxlUGF0aCkgeyBtX2luamVjdGVkQnVuZGxlUGF0aCA9IGluamVjdGVkQnVu
ZGxlUGF0aDsgfQpAQCAtMTY5LDcgKzE2OSw3IEBAIGNsYXNzIFByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbiBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6UHJvY2Vzc1BvCiAg
ICAgYm9vbCBtX3Byb2Nlc3NTd2Fwc09uV2luZG93T3BlbldpdGhPcGVuZXIgeyBmYWxzZSB9Owog
ICAgIE9wdGlvbmFsPGJvb2w+IG1faXNBdXRvbWF0aWNQcm9jZXNzV2FybWluZ0VuYWJsZWRCeUNs
aWVudDsKICAgICBib29sIG1fdXNlc1dlYlByb2Nlc3NDYWNoZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX3VzZXNQYWdlQ2FjaGUgeyB0cnVlIH07CisgICAgYm9vbCBtX3VzZXNCYWNrRm9yd2FyZENh
Y2hlIHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9jbGllbnRXb3VsZEJlbmVmaXRGcm9tQXV0b21hdGlj
UHJvY2Vzc1ByZXdhcm1pbmcgeyBmYWxzZSB9OwogICAgIFdURjo6U3RyaW5nIG1fY3VzdG9tV2Vi
Q29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyOwogICAgIGJvb2wgbV9zaG91bGRDb25maWd1
cmVKU0NGb3JUZXN0aW5nIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggYjM0ZjRiYzc3ZGFkODhkZmVhMDdlODdiYWE2
NjM4MTc1YmUzZWI1MC4uODg4MDJhMmU4MWJiMzEwNjk3OTFlMGJiM2UyNjY5NDlkNTE3Zjc2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAK
QEAgLTYxMCwyMiArNjEwLDIyIEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldExvY2FsRmlsZUNvbnRl
bnRTbmlmZmluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlCiAKIHZvaWQgV0tQ
cmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFVz
ZXNQYWdlQ2FjaGUoZW5hYmxlZCk7CisgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0VXNl
c0JhY2tGb3J3YXJkQ2FjaGUoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBh
Z2VDYWNoZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICBy
ZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dXNlc1BhZ2VDYWNoZSgpOworICAgIHJldHVy
biB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT51c2VzQmFja0ZvcndhcmRDYWNoZSgpOwogfQogCi12
b2lkIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMoV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBwYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMpCit2b2lk
IFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBiYWNrRm9yd2FyZENhY2hlU3VwcG9ydHNQbHVnaW5zKQog
ewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lu
cyhwYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMpOworICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PnNldEJhY2tGb3J3YXJkQ2FjaGVTdXBwb3J0c1BsdWdpbnMoYmFja0ZvcndhcmRDYWNoZVN1cHBv
cnRzUGx1Z2lucyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBhZ2VDYWNoZVN1cHBvcnRz
UGx1Z2lucyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMoKTsKKyAgICBy
ZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YmFja0ZvcndhcmRDYWNoZVN1cHBvcnRzUGx1
Z2lucygpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRQYWdpbmF0ZUR1cmluZ0xheW91dEVu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3Jl
UmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9y
ZVJlZi5jcHAKaW5kZXggNzQ0ZmNiYTllZTJhMTk2MTc1YTEzYTUxMjc5NDZkZjE0M2UwNGU3Ny4u
NzA4OWY3ZWQ1ZjEyZGJlYTIwODZkMTZhNDczNjVjZmVmMTNkODE4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3Bw
CkBAIC0yODksMTAgKzI4OSwxNCBAQCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUlzU3RhdGlzdGlj
c0dyYW5kZmF0aGVyZWQoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZQogI2VuZGlmCiB9
CiAKLXZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0VXNlSVRQRGF0YWJhc2UoV0tXZWJzaXRlRGF0
YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCB2YWx1ZSkKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0
b3JlU2V0VXNlSVRQRGF0YWJhc2UoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwg
Ym9vbCB2YWx1ZSwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlU2V0VXNlSVRQRGF0
YWJhc2VGdW5jdGlvbiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZVJlZiktPnNldFVz
ZUlUUERhdGFiYXNlKHZhbHVlKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmVSZWYpLT5z
ZXRVc2VJVFBEYXRhYmFzZSh2YWx1ZSwgW2NvbnRleHQsIGNvbXBsZXRpb25IYW5kbGVyXSB7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRleHQpOworICAgIH0pOworI2Vsc2UKKyAgICBj
b21wbGV0aW9uSGFuZGxlcihjb250ZXh0KTsKICNlbmRpZgogfQogCkBAIC01MzQsNiArNTM4LDE3
IEBAIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3Vs
ZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluCiAjZW5kaWYKIH0KIAordm9pZCBXS1dlYnNpdGVE
YXRhU3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29v
a2llc0ZvclRlc3RpbmcoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgYm9vbCBl
bmFibGVkLCB2b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0ZvclRlc3RpbmdGdW5jdGlvbiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQorICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZVJlZiktPnNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzRm9yVGVzdGluZyhlbmFibGVkLCBbY29u
dGV4dCwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29u
dGV4dCk7CisgICAgfSk7CisjZWxzZQorICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRleHQpOwor
I2VuZGlmCit9CisKIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc1Jlc2V0VG9Db25z
aXN0ZW50U3RhdGUoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgdm9pZCogY29u
dGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGVG
dW5jdGlvbiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQpAQCAtNTQ2LDggKzU2MSwxMCBAQCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVN0
YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYQog
ICAgIHN0b3JlLnJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoW2NhbGxi
YWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAgICAg
c3RvcmUucmVzZXRDcm9zc1NpdGVMb2Fkc1dpdGhMaW5rRGVjb3JhdGlvbkZvclRlc3RpbmcoW2Nh
bGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CiAg
ICAgc3RvcmUuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVy
Rm9yVGVzdGluZyh0cnVlLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9y
LmNvcHlSZWYoKV0geyB9KTsKKyAgICBzdG9yZS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hv
dWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0ZvclRlc3RpbmcoZmFsc2UsIFtjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogICAgIHN0b3JlLnJl
c2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJh
Y2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKICAgICBzdG9yZS5zY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KFdlYktpdDo6U2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpO
bywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsg
fSk7CisgICAgc3RvcmUuc2V0VXNlSVRQRGF0YWJhc2UoZmFsc2UsIFtjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0oZGF0YVN0b3JlUmVmKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZXh0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmgKaW5kZXggZWY0MzM5ODYwNDRhYTExNDUxNTdmOWM3YmRiZmFkYjRiZGFmZGYzZi4u
NjUzODVmODVjYmY5MjM2MzRiNzcyNDc2ZTU4ODQ1ZWExYWI5Y2M1MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKQEAg
LTc1LDcgKzc1LDggQEAgV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlSXNTdGF0aXN0
aWNzT25seUluRGF0YWJhc2VPbmNlKFdLV2Vic2l0ZURhdGFTdG8KIFdLX0VYUE9SVCB2b2lkIFdL
V2Vic2l0ZURhdGFTdG9yZVNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmVkKFdLV2Vic2l0ZURhdGFT
dG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLU3RyaW5nUmVmIGhvc3QsIGJvb2wgdmFsdWUpOwogdHlw
ZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlSXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZEZ1
bmN0aW9uKShib29sIGlzR3JhbmRmYXRoZXJlZCwgdm9pZCogZnVuY3Rpb25Db250ZXh0KTsKIFdL
X0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUlzU3RhdGlzdGljc0dyYW5kZmF0aGVyZWQo
V0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tTdHJpbmdSZWYgaG9zdCwgdm9p
ZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlSXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZEZ1
bmN0aW9uIGNhbGxiYWNrKTsKLVdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFVz
ZUlUUERhdGFiYXNlKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIGJvb2wgdmFs
dWUpOwordHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU2V0VXNlSVRQRGF0YWJhc2VG
dW5jdGlvbikodm9pZCogZnVuY3Rpb25Db250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0
ZURhdGFTdG9yZVNldFVzZUlUUERhdGFiYXNlKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3Rv
cmVSZWYsIGJvb2wgdmFsdWUsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVNldFVz
ZUlUUERhdGFiYXNlRnVuY3Rpb24gY2FsbGJhY2spOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRl
RGF0YVN0b3JlU2V0U3RhdGlzdGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihXS1dlYnNp
dGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCBXS1N0cmluZ1Jl
ZiB0b3BGcmFtZUhvc3QpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0U3Rh
dGlzdGljc1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCBXS1N0cmluZ1JlZiB0b3BGcmFtZUhv
c3QpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0U3RhdGlzdGljc1N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVm
LCBXS1N0cmluZ1JlZiBob3N0LCBXS1N0cmluZ1JlZiBob3N0UmVkaXJlY3RlZFRvKTsKQEAgLTEx
Niw2ICsxMTcsOCBAQCB0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNz
SGFzSXNvbGF0ZWRTZXNzaW9uRnVuY3Rpb24pKGJvb2wgaGFzSQogV0tfRVhQT1JUIHZvaWQgV0tX
ZWJzaXRlRGF0YVN0b3JlU3RhdGlzdGljc0hhc0lzb2xhdGVkU2Vzc2lvbihXS1dlYnNpdGVEYXRh
U3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS1N0cmluZ1JlZiBob3N0LCB2b2lkKiBjb250ZXh0LCBX
S1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzSGFzSXNvbGF0ZWRTZXNzaW9uRnVuY3Rpb24gY2Fs
bGJhY2spOwogdHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZ0Z1bmN0aW9uKSh2b2lk
KiBmdW5jdGlvbkNvbnRleHQpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyRm9yVGVzdGluZyhX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZWQsIHZvaWQqIGNv
bnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRE
b3duZ3JhZGVSZWZlcnJlckZvclRlc3RpbmdGdW5jdGlvbiBjb21wbGV0aW9uSGFuZGxlcik7Cit0
eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVTZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0ZvclRlc3RpbmdGdW5jdGlvbikodm9pZCogZnVu
Y3Rpb25Db250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzRm9yVGVzdGluZyhX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBib29sIGVuYWJsZWQsIHZvaWQqIGNv
bnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NTaG91bGRC
bG9ja1RoaXJkUGFydHlDb29raWVzRm9yVGVzdGluZ0Z1bmN0aW9uIGNvbXBsZXRpb25IYW5kbGVy
KTsKIHR5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlRnVuY3Rpb24pKHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7CiBXS19FWFBPUlQg
dm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCB2b2lkKiBjb250ZXh0LCBXS1dlYnNp
dGVEYXRhU3RvcmVTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUZ1bmN0aW9uIGNvbXBs
ZXRpb25IYW5kbGVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcmVmZXJlbmNlcy5tbQppbmRleCAxOTQyNjBlMGMyZWNkYzA5ZjRiZmFhOTY2NzU4NzVm
YmE1ODJmYjQwLi5jMWE3MzA4ZDNkNTU0OTg3ODE1MzBhZDliYTJmN2M2MzUzMWM3NDNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5t
bQpAQCAtOTQ0LDIyICs5NDQsMjIgQEAgLSAoQk9PTClfbG9jYWxGaWxlQ29udGVudFNuaWZmaW5n
RW5hYmxlZAogCiAtICh2b2lkKV9zZXRVc2VzUGFnZUNhY2hlOihCT09MKWVuYWJsZWQKIHsKLSAg
ICBfcHJlZmVyZW5jZXMtPnNldFVzZXNQYWdlQ2FjaGUoZW5hYmxlZCk7CisgICAgX3ByZWZlcmVu
Y2VzLT5zZXRVc2VzQmFja0ZvcndhcmRDYWNoZShlbmFibGVkKTsKIH0KIAogLSAoQk9PTClfdXNl
c1BhZ2VDYWNoZQogewotICAgIHJldHVybiBfcHJlZmVyZW5jZXMtPnVzZXNQYWdlQ2FjaGUoKTsK
KyAgICByZXR1cm4gX3ByZWZlcmVuY2VzLT51c2VzQmFja0ZvcndhcmRDYWNoZSgpOwogfQogCiAt
ICh2b2lkKV9zZXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnM6KEJPT0wpZW5hYmxlZAogewotICAg
IF9wcmVmZXJlbmNlcy0+c2V0UGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zKGVuYWJsZWQpOworICAg
IF9wcmVmZXJlbmNlcy0+c2V0QmFja0ZvcndhcmRDYWNoZVN1cHBvcnRzUGx1Z2lucyhlbmFibGVk
KTsKIH0KIAogLSAoQk9PTClfcGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zCiB7Ci0gICAgcmV0dXJu
IF9wcmVmZXJlbmNlcy0+cGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zKCk7CisgICAgcmV0dXJuIF9w
cmVmZXJlbmNlcy0+YmFja0ZvcndhcmRDYWNoZVN1cHBvcnRzUGx1Z2lucygpOwogfQogCiAtICh2
b2lkKV9zZXRTaG91bGRQcmludEJhY2tncm91bmRzOihCT09MKWVuYWJsZWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLm1tCmluZGV4IDg3N2Q1MmNhZDMwZTBmZTM4ZjNjOWVhNzNiOTg5MjU3
MzhmMjU4ZTMuLjBiNjc3YmNjNGY4MjAyY2UyMzk5NWEwODJiYmI1YjAzODIwZmM4YjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbQpAQCAtMzEzLDEyICszMTMsMTIgQEAgLSAoQk9P
TClwcm9jZXNzU3dhcHNPbldpbmRvd09wZW5XaXRoT3BlbmVyCiAKIC0gKEJPT0wpcGFnZUNhY2hl
RW5hYmxlZAogewotICAgIHJldHVybiBfcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLT51c2VzUGFn
ZUNhY2hlKCk7CisgICAgcmV0dXJuIF9wcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24tPnVzZXNCYWNr
Rm9yd2FyZENhY2hlKCk7CiB9CiAKIC0gKHZvaWQpc2V0UGFnZUNhY2hlRW5hYmxlZDooQk9PTCll
bmFibGVkCiB7Ci0gICAgcmV0dXJuIF9wcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24tPnNldFVzZXNQ
YWdlQ2FjaGUoZW5hYmxlZCk7CisgICAgcmV0dXJuIF9wcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24t
PnNldFVzZXNCYWNrRm9yd2FyZENhY2hlKGVuYWJsZWQpOwogfQogCiAtIChCT09MKXVzZXNTaW5n
bGVXZWJQcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRTZXR0aW5ncy5jcHAKaW5kZXggYWUyNzhjNzYyNTA5M2VjNTUxMTAzYjM4NzFmMGI4YTQ5
NjUwOTRmZS4uZTU3MDE2YjM1YzFiMWM1ZjA0Zjc5MmY1ODMxMjg3NDJlYTVhOWQwOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0U2V0dGluZ3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFNldHRpbmdzLmNw
cApAQCAtMjk4NCw3ICsyOTg0LDcgQEAgZ2Jvb2xlYW4gd2Via2l0X3NldHRpbmdzX2dldF9lbmFi
bGVfcGFnZV9jYWNoZShXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MpCiB7CiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1NFVFRJTkdTKHNldHRpbmdzKSwgRkFMU0UpOwogCi0gICAg
cmV0dXJuIHNldHRpbmdzLT5wcml2LT5wcmVmZXJlbmNlcy0+dXNlc1BhZ2VDYWNoZSgpOworICAg
IHJldHVybiBzZXR0aW5ncy0+cHJpdi0+cHJlZmVyZW5jZXMtPnVzZXNCYWNrRm9yd2FyZENhY2hl
KCk7CiB9CiAKIC8qKgpAQCAtMjk5OSwxMSArMjk5OSwxMSBAQCB2b2lkIHdlYmtpdF9zZXR0aW5n
c19zZXRfZW5hYmxlX3BhZ2VfY2FjaGUoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzLCBnYm9vbGVh
biBlbgogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1NFVFRJTkdTKHNldHRpbmdzKSk7
CiAKICAgICBXZWJLaXRTZXR0aW5nc1ByaXZhdGUqIHByaXYgPSBzZXR0aW5ncy0+cHJpdjsKLSAg
ICBib29sIGN1cnJlbnRWYWx1ZSA9IHByaXYtPnByZWZlcmVuY2VzLT51c2VzUGFnZUNhY2hlKCk7
CisgICAgYm9vbCBjdXJyZW50VmFsdWUgPSBwcml2LT5wcmVmZXJlbmNlcy0+dXNlc0JhY2tGb3J3
YXJkQ2FjaGUoKTsKICAgICBpZiAoY3VycmVudFZhbHVlID09IGVuYWJsZWQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHByaXYtPnByZWZlcmVuY2VzLT5zZXRVc2VzUGFnZUNhY2hlKGVuYWJsZWQp
OworICAgIHByaXYtPnByZWZlcmVuY2VzLT5zZXRVc2VzQmFja0ZvcndhcmRDYWNoZShlbmFibGVk
KTsKICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLXBhZ2Ut
Y2FjaGUiKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
TmF2aWdhdGlvblN0YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0
aW9uU3RhdGUuaAppbmRleCBiM2EzZDZmYmE5Njc0NmFiNDJlMjQxNTU5MzQzYTQ4OGQ1Y2Y3NjNl
Li4wZGZkZTdjOTg2ODAxZDhjMTg1ODJjMmE4YTM1NzkyNWFlNmMyMDI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaApAQCAtMTI4LDcgKzEy
OCw3IEBAIGNsYXNzIE5hdmlnYXRpb25TdGF0ZSBmaW5hbCA6IHByaXZhdGUgUGFnZUxvYWRTdGF0
ZTo6T2JzZXJ2ZXIgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgdm9pZCB3ZWJHTExvYWRQ
b2xpY3koV2ViUGFnZVByb3h5JiwgY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChX
ZWJDb3JlOjpXZWJHTExvYWRQb2xpY3kpPiYmKSBjb25zdCBmaW5hbDsKICAgICAgICAgdm9pZCBy
ZXNvbHZlV2ViR0xMb2FkUG9saWN5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFVSTCYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5KT4mJikgY29uc3QgZmluYWw7
Ci0gICAgICAgIGJvb2wgd2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKFdlYlBhZ2VQcm94eSYs
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mLCBib29sIGluUGFnZUNhY2hlKSBmaW5hbDsKKyAgICAg
ICAgYm9vbCB3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViUGFnZVByb3h5JiwgV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSYsIGJvb2wgaW5CYWNrRm9yd2FyZENhY2hlKSBmaW5hbDsKICAgICAg
ICAgYm9vbCBkaWRGYWlsVG9Jbml0aWFsaXplUGx1Z0luKFdlYlBhZ2VQcm94eSYsIEFQSTo6RGlj
dGlvbmFyeSYpIGZpbmFsOwogICAgICAgICBib29sIGRpZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJz
aW9uKFdlYlBhZ2VQcm94eSYsIEFQSTo6RGljdGlvbmFyeSYpIGZpbmFsOwogICAgICAgICB2b2lk
IGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6
OlBsdWdpbk1vZHVsZUxvYWRQb2xpY3ksIEFQSTo6RGljdGlvbmFyeSYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoV2ViS2l0OjpQbHVnaW5Nb2R1bGVMb2FkUG9saWN5LCBjb25zdCBXVEY6OlN0cmlu
ZyYpPiYmKSBmaW5hbDsKQEAgLTI0MCw3ICsyNDAsNyBAQCBjbGFzcyBOYXZpZ2F0aW9uU3RhdGUg
ZmluYWwgOiBwcml2YXRlIFBhZ2VMb2FkU3RhdGU6Ok9ic2VydmVyIHsKICAgICAgICAgYm9vbCB3
ZWJWaWV3QmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkUmVtb3ZlZCA6IDE7CiAgICAgICAgIGJvb2wg
d2ViVmlld0RpZEZhaWxUb0luaXRpYWxpemVQbHVnSW5XaXRoSW5mbyA6IDE7CiAgICAgICAgIGJv
b2wgd2ViVmlld0RpZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJzaW9uV2l0aEluZm8gOiAxOwotICAg
ICAgICBib29sIHdlYlZpZXdXaWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW1JblBhZ2VDYWNoZSA6
IDE7CisgICAgICAgIGJvb2wgd2ViVmlld1dpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbUluQmFj
a0ZvcndhcmRDYWNoZSA6IDE7CiAgICAgICAgIGJvb2wgd2ViVmlld0RlY2lkZVBvbGljeUZvclBs
dWdpbkxvYWRXaXRoQ3VycmVudFBvbGljeVBsdWdpbkluZm9Db21wbGV0aW9uSGFuZGxlciA6IDE7
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2
aWdhdGlvblN0YXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlv
blN0YXRlLm1tCmluZGV4IDZiMTVjMDZiZDllZmExOWFkNjM2YjMyOWEyYTc2YTZiZTg1NWNkZDgu
Ljk0YWU5YjEzMGZiODk5OTM4ZTljZTI2MWI1ZTY4ZTEzZTUyZTAxYjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KQEAgLTE5Miw3ICsx
OTIsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6c2V0TmF2aWdhdGlvbkRlbGVnYXRlKGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZT4gZGVsZWdhdGUpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIG1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViR0xMb2FkUG9saWN5Rm9yVVJMID0g
W2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6d2ViR0xMb2Fk
UG9saWN5Rm9yVVJMOmRlY2lzaW9uSGFuZGxlcjopXTsKICAgICBtX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1Jlc29sdmVXZWJHTExvYWRQb2xpY3lGb3JVUkwgPSBbZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpyZXNvbHZlV2ViR0xMb2FkUG9s
aWN5Rm9yVVJMOmRlY2lzaW9uSGFuZGxlcjopXTsKLSAgICBtX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld1dpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbUluUGFnZUNhY2hlID0gW2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6d2lsbEdvVG9CYWNr
Rm9yd2FyZExpc3RJdGVtOmluUGFnZUNhY2hlOildOworICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3V2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtSW5CYWNrRm9yd2FyZENh
Y2hlID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6d2ls
bEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtOmluUGFnZUNhY2hlOildOwogICAgIG1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdJbldpdGhJbmZv
ID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGlkRmFp
bFRvSW5pdGlhbGl6ZVBsdWdJbldpdGhJbmZvOildOwogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkQmxvY2tJbnNlY3VyZVBsdWdpblZlcnNpb25XaXRoSW5mbyA9IFtk
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZEJsb2NrSW5z
ZWN1cmVQbHVnaW5WZXJzaW9uV2l0aEluZm86KV07CiAgICAgbV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdCYWNrRm9yd2FyZExpc3RJdGVtQWRkZWRSZW1vdmVkID0gW2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6YmFja0ZvcndhcmRMaXN0SXRl
bUFkZGVkOnJlbW92ZWQ6KV07CkBAIC00NjIsMTYgKzQ2MiwxNiBAQCBib29sIE5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQ
cm94eSYsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTmF2aWdhdGlvblN0YXRlOjpOYXZp
Z2F0aW9uQ2xpZW50Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViUGFnZVByb3h5Jiwg
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSwgYm9vbCBpblBhZ2VDYWNoZSkKK2Jvb2wgTmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0
ZW0oV2ViUGFnZVByb3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSwgYm9vbCBpbkJh
Y2tGb3J3YXJkQ2FjaGUpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbUluUGFn
ZUNhY2hlKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdXaWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW1JbkJhY2tGb3J3YXJkQ2Fj
aGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYg
KCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFsoaWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyB3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW06
d3JhcHBlcihpdGVtKSBpblBhZ2VDYWNoZTppblBhZ2VDYWNoZV07CisgICAgWyhpZCA8V0tOYXZp
Z2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZp
Z2F0aW9uU3RhdGUubV93ZWJWaWV3IHdpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbTp3cmFwcGVy
KGl0ZW0pIGluUGFnZUNhY2hlOmluQmFja0ZvcndhcmRDYWNoZV07CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAjZW5kaWYKQEAgLTc1NCw3ICs3NTQsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2
aWdhdGlvbkNsaWVudDo6ZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24oV2ViUGFnZVBybwog
ICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwg
YnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUg
cGFnZSBjYWNoZS4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5hdmlnYXRp
b24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNvbWUgbmF2
aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgogCiAgICAgaWYgKG1fbmF2
aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRQ
cm92aXNpb25hbE5hdmlnYXRpb25Vc2VySW5mbykKICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUubV93ZWJWaWV3IGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2
aWdhdGlvbikgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rp
bmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF07CkBAIC03NzEsNyArNzcxLDcgQEAgdm9p
ZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRp
cmVjdEZvclByb3Zpc2lvbmFsTmEKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0
aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5h
dmlnYXRpb25zIHRocm91Z2ggdGhlIHBhZ2UgY2FjaGUuCisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJl
bnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBj
YWNoZS4KIAogICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS5tX3dlYlZpZXcgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0
aW9uOndyYXBwZXIobmF2aWdhdGlvbildOwogfQpAQCAtODM0LDcgKzgzNCw3IEBAIHN0YXRpYyBS
ZXRhaW5QdHI8TlNFcnJvcj4gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIoV0tXZWJW
aWV3ICp3ZWJWaWV3LCBXCiAvLyBGSVhNRTogU2hvdWxkbid0IG5lZWQgdG8gcGFzcyB0aGUgV2Vi
RnJhbWVQcm94eSBpbiBoZXJlLiBBdCBtb3N0LCBhIEZyYW1lSGFuZGxlLgogdm9pZCBOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25X
aXRoRXJyb3IoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiB3ZWJGcmFtZVByb3h5
LCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImIGVycm9yLCBBUEk6Ok9iamVjdCopCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3Nl
cnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBu
dWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIHBhZ2UgY2FjaGUuCisgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUs
IGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhl
IGJhY2svZm9yd2FyZCBjYWNoZS4KIAogICAgIC8vIEZJWE1FOiBTZXQgdGhlIGVycm9yIG9uIHRo
ZSBuYXZpZ2F0aW9uIG9iamVjdC4KIApAQCAtODcyLDcgKzg3Miw3IEBAIHZvaWQgTmF2aWdhdGlv
blN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDb21taXROYXZpZ2F0aW9uKFdlYlBhZ2VQcm94
eSYgcGFnZSwKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBu
dWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRo
cm91Z2ggdGhlIHBhZ2UgY2FjaGUuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhh
dCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZv
ciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KIAogICAg
IFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcg
ZGlkQ29tbWl0TmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pXTsKIH0KQEAgLTg4Niw3ICs4
ODYsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmluaXNo
RG9jdW1lbnRMb2FkKFdlYlBhZ2VQcm94eSYgcGFnZQogICAgIGlmICghbmF2aWdhdGlvbkRlbGVn
YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0
aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5IG51bGwg
Zm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgcGFnZSBjYWNoZS4KKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0
IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFj
ay9mb3J3YXJkIGNhY2hlLgogCiAgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdh
dGlvblN0YXRlLm1fd2ViVmlldyBuYXZpZ2F0aW9uRGlkRmluaXNoRG9jdW1lbnRMb2FkOndyYXBw
ZXIobmF2aWdhdGlvbildOwogfQpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQgTmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYg
cGFnZSwKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxs
IGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91
Z2ggdGhlIHBhZ2UgY2FjaGUuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBu
YXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBz
b21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KIAogICAgIFtu
YXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlk
RmluaXNoTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pXTsKIH0KQEAgLTkxNiw3ICs5MTYs
NyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbE5hdmln
YXRpb25XaXRoRXJyb3IoV2ViUGFnZVByb3h5JgogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0
IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9y
IHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgcGFnZSBjYWNoZS4KKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0
J3MgY3VycmVudGx5IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9m
b3J3YXJkIGNhY2hlLgogCiAgICAgYXV0byBlcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlciA9IGNy
ZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyKG1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmll
dywgd2ViRnJhbWVQcm94eSwgZXJyb3IpOwogICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9y
VXNlckluZm8pCkBAIC05MzQsNyArOTM0LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24oV2ViUGFnZVByb3h5JiwKICAg
ICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklY
TUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uSUQgaXMgbm90IHplcm8gaGVyZSwg
YnV0IGl0J3MgY3VycmVudGx5IHplcm8gZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUg
cGFnZSBjYWNoZS4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5hdmlnYXRp
b25JRCBpcyBub3QgemVybyBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgemVybyBmb3Igc29tZSBu
YXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAKICAgICBbc3RhdGlj
X2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IG5hdmlnYXRpb246
d3JhcHBlcihuYXZpZ2F0aW9uKSBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uOnRvV0tTYW1lRG9j
dW1lbnROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uVHlwZSldOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5k
ZXggY2ExZjVhYjI2MThhZGQ0NjM1NTA0NGFlMGZmZmZkYjZhMzc2M2U0ZC4uNmMxOTA1MjlkYWVl
MTBiMDQwZWQ3YjEwNGNkZDMzNjU2MmViMzVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC03ODYsMTIg
Kzc4Niw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0R3JhbmRmYXRoZXJlZChQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzCiAgICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0R3JhbmRmYXRoZXJlZChzZXNzaW9uSUQsIHJl
c291cmNlRG9tYWluLCBpc0dyYW5kZmF0aGVyZWQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2V0VXNlSVRQRGF0YWJhc2UoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIHZhbHVlKQordm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpzZXRVc2VJVFBEYXRhYmFzZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wgdmFs
dWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBpZiAoIWNhblNlbmRNZXNzYWdlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBzZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0VXNlSVRQRGF0YWJhc2Uoc2Vzc2lvbklELCB2
YWx1ZSksIDApOworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFVzZUlUUERhdGFiYXNlKHNlc3Npb25JRCwgdmFsdWUpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVxdWVzdFN0b3Jh
Z2VBY2Nlc3NDb25maXJtKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgcGFnZUlELCBGcmFtZUlkZW50
aWZpZXIgZnJhbWVJRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMDU3LDYgKzEwNTQsMTYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRl
c3RpbmcoYm9vbCBlbmFibGVkLCBDb20KICAgICAKICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZvclRlc3Rp
bmcoZW5hYmxlZCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KKwordm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpzZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzRm9yVGVzdGlu
ZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghY2FuU2VuZE1lc3Nh
Z2UoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OlNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUZXN0aW5nKHNlc3Npb25JRCwg
ZW5hYmxlZCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KICNlbmRpZiAvLyBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnNlbmRQcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggZmJmMmNl
NTlmOGQwNWFkN2RiODk5M2UyZmJjZDE0YjQ0NGQ1MTcyYi4uZGE0YmVkMjY4MjgxOGI0M2RhNDM4
ODgxYjU2OGVjYzBiYWQ1NjY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTExOCw3ICsxMTgsNyBAQCBjbGFz
cyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQcm94
eSwgcHJpdmF0ZSBQcm9jZXNzVAogICAgIHZvaWQgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tp
ZXMoUEFMOjpTZXNzaW9uSUQsIE9wdGlvbmFsPFNlY29uZHM+LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAoUEFMOjpTZXNzaW9uSUQsIFNl
Y29uZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzZXRHcmFuZGZh
dGhlcmVkKFBBTDo6U2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgaXNH
cmFuZGZhdGhlcmVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2V0
VXNlSVRQRGF0YWJhc2UoUEFMOjpTZXNzaW9uSUQsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgc2V0
VXNlSVRQRGF0YWJhc2UoUEFMOjpTZXNzaW9uSUQsIGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKFBBTDo6U2Vzc2lvbklELCBib29sLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogICAgIHZvaWQgc2V0SXNSdW5uaW5nUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3QoUEFM
OjpTZXNzaW9uSUQsIGJvb2wsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBzZXROb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChQQUw6OlNlc3Npb25JRCwg
Ym9vbCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTE1NSw2ICsxNTUsNyBAQCBj
bGFzcyBOZXR3b3JrUHJvY2Vzc1Byb3h5IGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NQ
cm94eSwgcHJpdmF0ZSBQcm9jZXNzVAogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFJblVJUHJv
Y2Vzc0ZvclJlZ2lzdHJhYmxlRG9tYWlucyhQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChIYXNoU2V0PFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiYmKT4mJik7CiAgICAgdm9pZCBoYXNJc29sYXRlZFNlc3Npb24o
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBzZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckZv
clRlc3RpbmcoYm9vbCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNl
dFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBi
b29sLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogI2VuZGlmCiAKICAgICB2b2lkIHBy
b2Nlc3NSZWFkeVRvU3VzcGVuZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVmlld0dlc3R1cmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Zp
ZXdHZXN0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggYjQ4Mjc3MjlkNzI0MjE1MmViNDc1MTZiODBl
NGRhMDc1YWZiNzUzZS4uMzU2MjM1NTU3YTdlYzdmYzQ2YTNkYWEzNWU3YzhkOTg5MjZlMGEwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIu
Y3BwCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmRpZFJl
YWNoTWFpbkZyYW1lTG9hZFRlcm1pbmFsU3RhdGUoKQogICAgIGlmICghbV9zbmFwc2hvdFJlbW92
YWxUcmFja2VyLmV2ZW50T2NjdXJyZWQoU25hcHNob3RSZW1vdmFsVHJhY2tlcjo6TWFpbkZyYW1l
TG9hZCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIENvbWluZyBiYWNrIGZyb20gdGhlIHBh
Z2UgY2FjaGUgd2lsbCByZXN1bHQgaW4gZ2V0dGluZyBhIGxvYWQgZXZlbnQsIGJ1dCBubyBmaXJz
dCB2aXN1YWxseSBub24tZW1wdHkgbGF5b3V0LgorICAgIC8vIENvbWluZyBiYWNrIGZyb20gdGhl
IGJhY2svZm9yd2FyZCBjYWNoZSB3aWxsIHJlc3VsdCBpbiBnZXR0aW5nIGEgbG9hZCBldmVudCwg
YnV0IG5vIGZpcnN0IHZpc3VhbGx5IG5vbi1lbXB0eSBsYXlvdXQuCiAgICAgLy8gV2ViQ29yZSBj
b25zaWRlcnMgYSBsb2FkZWQgZG9jdW1lbnQgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgdmlzdWFs
bHkgbm9uLWVtcHR5LCBzbyB0aGF0J3MgZ29vZAogICAgIC8vIGVub3VnaCBmb3IgdXMgdG9vLgog
ICAgIG1fc25hcHNob3RSZW1vdmFsVHJhY2tlci5jYW5jZWxPdXRzdGFuZGluZ0V2ZW50KFNuYXBz
aG90UmVtb3ZhbFRyYWNrZXI6OlZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYjM3MjU1OGZlYzc0MGU5MGYzMTdmZDcy
ZDg5YzBhOThlNjNmZWI1Zi4uMmNjOTY5MzZjNzBkM2JiOTMzOWNmYmZhNTE4YjI3ZGRlZmZiYmZj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC04MTUsNyAr
ODE1LDcgQEAgV2ViQmFja0ZvcndhcmRDYWNoZSYgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZENh
Y2hlKCkgY29uc3QKIAogYm9vbCBXZWJQYWdlUHJveHk6OnNob3VsZFVzZUJhY2tGb3J3YXJkQ2Fj
aGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByZWZlcmVuY2VzLT51c2VzUGFnZUNhY2hlKCkg
JiYgYmFja0ZvcndhcmRDYWNoZSgpLmNhcGFjaXR5KCkgPiAwOworICAgIHJldHVybiBtX3ByZWZl
cmVuY2VzLT51c2VzQmFja0ZvcndhcmRDYWNoZSgpICYmIGJhY2tGb3J3YXJkQ2FjaGUoKS5jYXBh
Y2l0eSgpID4gMDsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnN3YXBUb1dlYlByb2Nlc3MoUmVm
PFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLCBQYWdlSWRlbnRpZmllciB3ZWJQYWdlSUQsIHN0
ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PiYmIGRyYXdpbmdBcmVhLCBSZWZQdHI8V2Vi
RnJhbWVQcm94eT4mJiBtYWluRnJhbWUpCkBAIC0xNTY3LDEyICsxNTY3LDEyIEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSogYWRkZWQsIFZlY3RvCiAgICAgbV9wYWdlTG9hZFN0YXRlLnNldENhbkdvRm9yd2FyZCh0cmFu
c2FjdGlvbiwgbV9iYWNrRm9yd2FyZExpc3QtPmZvcndhcmRJdGVtKCkpOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6d2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKGNvbnN0IEJhY2tGb3J3YXJk
SXRlbUlkZW50aWZpZXImIGl0ZW1JRCwgYm9vbCBpblBhZ2VDYWNoZSkKK3ZvaWQgV2ViUGFnZVBy
b3h5Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oY29uc3QgQmFja0ZvcndhcmRJdGVtSWRl
bnRpZmllciYgaXRlbUlELCBib29sIGluQmFja0ZvcndhcmRDYWNoZSkKIHsKICAgICBQYWdlQ2xp
ZW50UHJvdGVjdG9yIHByb3RlY3RvcihwYWdlQ2xpZW50KCkpOwogCiAgICAgaWYgKGF1dG8qIGl0
ZW0gPSBtX2JhY2tGb3J3YXJkTGlzdC0+aXRlbUZvcklEKGl0ZW1JRCkpCi0gICAgICAgIG1fbmF2
aWdhdGlvbkNsaWVudC0+d2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKCp0aGlzLCAqaXRlbSwg
aW5QYWdlQ2FjaGUpOworICAgICAgICBtX25hdmlnYXRpb25DbGllbnQtPndpbGxHb1RvQmFja0Zv
cndhcmRMaXN0SXRlbSgqdGhpcywgKml0ZW0sIGluQmFja0ZvcndhcmRDYWNoZSk7CiB9CiAKIGJv
b2wgV2ViUGFnZVByb3h5OjpzaG91bGRLZWVwQ3VycmVudEJhY2tGb3J3YXJkTGlzdEl0ZW1Jbkxp
c3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKQEAgLTQwODMsNyArNDA4Myw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lU2hhcmVkKFJl
ZjxXZWJQcm9jZXNzUHJveHk+JiYKICAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UgPSBudWxscHRy
OwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWVzc2FnZSBjaGVjayB0aGF0IG5h
dmlnYXRpb25JRCBpcyBub3QgemVybyBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgemVybyBmb3Ig
c29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBwYWdlIGNhY2hlLgorICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbWVzc2FnZSBjaGVjayB0aGF0IG5hdmlnYXRpb25JRCBpcyBub3QgemVybyBoZXJl
LCBidXQgaXQncyBjdXJyZW50bHkgemVybyBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRo
ZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAgICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gbmF2aWdh
dGlvbjsKICAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkgJiYgbmF2aWdhdGlvbklEKQogICAg
ICAgICBuYXZpZ2F0aW9uID0gbmF2aWdhdGlvblN0YXRlKCkubmF2aWdhdGlvbihuYXZpZ2F0aW9u
SUQpOwpAQCAtNDE1MCw3ICs0MTUwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVT
ZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lU2hhcmVkKFJlZjwKICAgICBN
RVNTQUdFX0NIRUNLKHByb2Nlc3MsIGZyYW1lKTsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChwcm9j
ZXNzLCByZXF1ZXN0LnVybCgpKTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWVzc2FnZSBj
aGVjayB0aGF0IG5hdmlnYXRpb25JRCBpcyBub3QgemVybyBoZXJlLCBidXQgaXQncyBjdXJyZW50
bHkgemVybyBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBwYWdlIGNhY2hlLgorICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgbWVzc2FnZSBjaGVjayB0aGF0IG5hdmlnYXRpb25JRCBpcyBu
b3QgemVybyBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgemVybyBmb3Igc29tZSBuYXZpZ2F0aW9u
cyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAgICAgUmVmUHRyPEFQSTo6TmF2aWdh
dGlvbj4gbmF2aWdhdGlvbiA9IG5hdmlnYXRpb25JRCA/IG5hdmlnYXRpb25TdGF0ZSgpLm5hdmln
YXRpb24obmF2aWdhdGlvbklEKSA6IG51bGxwdHI7CiAgICAgaWYgKG5hdmlnYXRpb24pCiAgICAg
ICAgIG5hdmlnYXRpb24tPmFwcGVuZFJlZGlyZWN0aW9uVVJMKHJlcXVlc3QudXJsKCkpOwpAQCAt
NDI0NCw3ICs0MjQ0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZhaWxQcm92aXNpb25hbExv
YWRGb3JGcmFtZVNoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHAKICAgICAgICAgICAgIGF1
dG9tYXRpb25TZXNzaW9uLT5uYXZpZ2F0aW9uT2NjdXJyZWRGb3JGcmFtZSgqZnJhbWUpOwogICAg
IH0KIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWVzc2FnZSBjaGVjayB0aGF0IG5hdmlnYXRp
b25JRCBpcyBub3QgemVybyBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgemVybyBmb3Igc29tZSBu
YXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBwYWdlIGNhY2hlLgorICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgbWVzc2FnZSBjaGVjayB0aGF0IG5hdmlnYXRpb25JRCBpcyBub3QgemVybyBoZXJlLCBidXQg
aXQncyBjdXJyZW50bHkgemVybyBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBiYWNr
L2ZvcndhcmQgY2FjaGUuCiAgICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gbmF2aWdhdGlvbjsK
ICAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkgJiYgbmF2aWdhdGlvbklEKQogICAgICAgICBu
YXZpZ2F0aW9uID0gbmF2aWdhdGlvblN0YXRlKCkudGFrZU5hdmlnYXRpb24obmF2aWdhdGlvbklE
KTsKQEAgLTQzMTksNyArNDMxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDb21taXRMb2Fk
Rm9yRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnCiAgICAgV2Vi
RnJhbWVQcm94eSogZnJhbWUgPSBtX3Byb2Nlc3MtPndlYkZyYW1lKGZyYW1lSUQpOwogICAgIE1F
U1NBR0VfQ0hFQ0sobV9wcm9jZXNzLCBmcmFtZSk7CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IG1lc3NhZ2UgY2hlY2sgdGhhdCBuYXZpZ2F0aW9uSUQgaXMgbm90IHplcm8gaGVyZSwgYnV0IGl0
J3MgY3VycmVudGx5IHplcm8gZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgcGFnZSBj
YWNoZS4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1lc3NhZ2UgY2hlY2sgdGhhdCBuYXZpZ2F0
aW9uSUQgaXMgbm90IHplcm8gaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5IHplcm8gZm9yIHNvbWUg
bmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgogICAgIFJlZlB0cjxB
UEk6Ok5hdmlnYXRpb24+IG5hdmlnYXRpb247CiAgICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgp
ICYmIG5hdmlnYXRpb25JRCAmJiAobmF2aWdhdGlvbiA9IG5hdmlnYXRpb25TdGF0ZSgpLm5hdmln
YXRpb24obmF2aWdhdGlvbklEKSkpIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQpAQCAtNDQzNiw3ICs0NDM2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaERv
Y3VtZW50TG9hZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCB1aW50NjQKICAgICAg
ICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5kb2N1bWVudExvYWRlZEZvckZyYW1lKCpmcmFtZSk7
CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBtZXNzYWdlIGNoZWNrIHRoYXQgbmF2
aWdhdGlvbklEIGlzIG5vdCB6ZXJvIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSB6ZXJvIGZvciBz
b21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIHBhZ2UgY2FjaGUuCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBtZXNzYWdlIGNoZWNrIHRoYXQgbmF2aWdhdGlvbklEIGlzIG5vdCB6ZXJvIGhlcmUs
IGJ1dCBpdCdzIGN1cnJlbnRseSB6ZXJvIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhl
IGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBuYXZpZ2F0
aW9uOwogICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSAmJiBuYXZpZ2F0aW9uSUQpCiAgICAg
ICAgIG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU3RhdGUoKS5uYXZpZ2F0aW9uKG5hdmlnYXRpb25J
RCk7CkBAIC00NDU1LDcgKzQ0NTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoTG9h
ZEZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCB1aW50NjRfdCBuYXZpZwogICAgIFdl
YkZyYW1lUHJveHkqIGZyYW1lID0gbV9wcm9jZXNzLT53ZWJGcmFtZShmcmFtZUlEKTsKICAgICBN
RVNTQUdFX0NIRUNLKG1fcHJvY2VzcywgZnJhbWUpOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBtZXNzYWdlIGNoZWNrIHRoYXQgbmF2aWdhdGlvbklEIGlzIG5vdCB6ZXJvIGhlcmUsIGJ1dCBp
dCdzIGN1cnJlbnRseSB6ZXJvIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIHBhZ2Ug
Y2FjaGUuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtZXNzYWdlIGNoZWNrIHRoYXQgbmF2aWdh
dGlvbklEIGlzIG5vdCB6ZXJvIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSB6ZXJvIGZvciBzb21l
IG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICBSZWZQdHI8
QVBJOjpOYXZpZ2F0aW9uPiBuYXZpZ2F0aW9uOwogICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUo
KSAmJiBuYXZpZ2F0aW9uSUQpCiAgICAgICAgIG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU3RhdGUo
KS5uYXZpZ2F0aW9uKG5hdmlnYXRpb25JRCk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6ZGlkRmFpbExvYWRGb3JGcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwg
dWludDY0X3QgbmF2aWdhdAogICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gbV9wcm9jZXNzLT53
ZWJGcmFtZShmcmFtZUlEKTsKICAgICBNRVNTQUdFX0NIRUNLKG1fcHJvY2VzcywgZnJhbWUpOwog
Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBtZXNzYWdlIGNoZWNrIHRoYXQgbmF2aWdhdGlvbklE
IGlzIG5vdCB6ZXJvIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSB6ZXJvIGZvciBzb21lIG5hdmln
YXRpb25zIHRocm91Z2ggdGhlIHBhZ2UgY2FjaGUuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBt
ZXNzYWdlIGNoZWNrIHRoYXQgbmF2aWdhdGlvbklEIGlzIG5vdCB6ZXJvIGhlcmUsIGJ1dCBpdCdz
IGN1cnJlbnRseSB6ZXJvIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9y
d2FyZCBjYWNoZS4KICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBuYXZpZ2F0aW9uOwogICAg
IGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSAmJiBuYXZpZ2F0aW9uSUQpCiAgICAgICAgIG5hdmln
YXRpb24gPSBuYXZpZ2F0aW9uU3RhdGUoKS5uYXZpZ2F0aW9uKG5hdmlnYXRpb25JRCk7CkBAIC00
NTQzLDcgKzQ1NDMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU2FtZURvY3VtZW50TmF2aWdh
dGlvbkZvckZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCB1aQogICAgIE1FU1NBR0VfQ0hF
Q0sobV9wcm9jZXNzLCBmcmFtZSk7CiAgICAgTUVTU0FHRV9DSEVDS19VUkwobV9wcm9jZXNzLCB1
cmwpOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBtZXNzYWdlIGNoZWNrIHRoYXQgbmF2aWdh
dGlvbklEIGlzIG5vdCB6ZXJvIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSB6ZXJvIGZvciBzb21l
IG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIHBhZ2UgY2FjaGUuCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBtZXNzYWdlIGNoZWNrIHRoYXQgbmF2aWdhdGlvbklEIGlzIG5vdCB6ZXJvIGhlcmUsIGJ1
dCBpdCdzIGN1cnJlbnRseSB6ZXJvIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJh
Y2svZm9yd2FyZCBjYWNoZS4KICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBuYXZpZ2F0aW9u
OwogICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSAmJiBuYXZpZ2F0aW9uSUQpCiAgICAgICAg
IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU3RhdGUoKS5uYXZpZ2F0aW9uKG5hdmlnYXRpb25JRCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDc4NWNjNzNjMGU1YzZk
NWQ1OGZjNzhkYWUxNTQ1YmIxNDIxM2E4OTguLmM2YTRmZGNmYTM1ZWNiNTQxMjlhOTdiNDUwODhh
MmZjMTA0NzM0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01
NTgsNyArNTU4LDcgQEAgY2xhc3MgV2ViUGFnZVByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1w
bDxBUEk6Ok9iamVjdDo6VHlwZTo6UGFnZT4KICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBn
b1RvQmFja0ZvcndhcmRJdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKTsKICAgICB2b2lkIHRy
eVJlc3RvcmVTY3JvbGxQb3NpdGlvbigpOwogICAgIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRM
aXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGFkZGVkSXRlbSwgVmVjdG9yPFJlZjxXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtPj4mJiByZW1vdmVkKTsKLSAgICB2b2lkIHdpbGxHb1RvQmFja0Zvcndh
cmRMaXN0SXRlbShjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiwgYm9v
bCBpblBhZ2VDYWNoZSk7CisgICAgdm9pZCB3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oY29u
c3QgV2ViQ29yZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYsIGJvb2wgaW5CYWNrRm9yd2Fy
ZENhY2hlKTsKIAogICAgIGJvb2wgc2hvdWxkS2VlcEN1cnJlbnRCYWNrRm9yd2FyZExpc3RJdGVt
SW5MaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDMwNDNlY2U0ZTg1MTkyZjFm
YzAyOTg1YWE3ZDY5MWU3MDIzZDExN2UuLjdiOWZlMjA4NDJjN2QwODhlNDc4NDJiMGFiYzQxMWZh
NzczY2JjMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4KQEAgLTIzMCw3ICsyMzAsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkg
ewogICAgIEJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCgpIC0+ICh1aW50MzJfdCBjb3VudCkgU3lu
Y2hyb25vdXMKICAgICBCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoKSAtPiAodWludDMyX3Qg
Y291bnQpIFN5bmNocm9ub3VzCiAgICAgQmFja0ZvcndhcmRDbGVhcigpCi0gICAgV2lsbEdvVG9C
YWNrRm9yd2FyZExpc3RJdGVtKHN0cnVjdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlm
aWVyIGl0ZW1JRCwgYm9vbCBpblBhZ2VDYWNoZSkKKyAgICBXaWxsR29Ub0JhY2tGb3J3YXJkTGlz
dEl0ZW0oc3RydWN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIgaXRlbUlELCBi
b29sIGluQmFja0ZvcndhcmRDYWNoZSkKIAogICAgICMgVW5kby9SZWRvIG1lc3NhZ2VzCiAgICAg
UmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8odWludDY0X3QgY29tbWFuZElELCBTdHJpbmcgbGFi
ZWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggYzA2
ZDZjNmI3N2E3NGVlN2Q5MzliNzU4ZTAxZmNhZTZmY2E2ODEwNy4uMjc4ZTRjNzNmYmRlM2MwOGVm
ZWRhZjEyMzc4OTAwYjE5YmY2MDVkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcApAQCAtMTU3Miw3ICsxNTcyLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVnaXN0ZXJVUkxTY2hlbWVBc0NhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0KGNvbnN0IFN0cmlu
ZyYKIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlQmFja0ZvcndhcmRDYWNoZUNhcGFjaXR5
KCkKIHsKLSAgICBpZiAoIW1fY29uZmlndXJhdGlvbi0+dXNlc1BhZ2VDYWNoZSgpKQorICAgIGlm
ICghbV9jb25maWd1cmF0aW9uLT51c2VzQmFja0ZvcndhcmRDYWNoZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICB1bnNpZ25lZCBkdW1teSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q29jb2EubW0KaW5kZXggY2Q0YWI5Y2IyZDk5ZmQ0OTAzODk0NmEzZDZkODg1MjQ0MTVkOTlkNy4u
NzhjNjZhNmZlNTBhNmQzOGE2MmUwZjIzYzU5ZmMwYWEwNGIxMjBmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dl
YnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiQ29va2ll
U3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQg
IlN0b3JhZ2VNYW5hZ2VyLmgiCisjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc0tleXMuaCIKICNpbXBv
cnQgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbXBvcnQgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4u
aD4KQEAgLTY4LDExICs2OSwxMiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRl
RGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwogICAgIGJvb2wgc2hvdWxkTG9n
Q29va2llSW5mb3JtYXRpb24gPSBmYWxzZTsKICAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUgPSBmYWxzZTsKLSAgICBib29sIGVuYWJsZVJlc291cmNlTG9hZFN0
YXRpc3RpY3NOU1VSTFNlc3Npb25Td2l0Y2hpbmcgPSBXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmlzSVRQU2Vzc2lvblN3aXRjaGluZ0VuYWJsZWQoKTsK
LSAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UgeyB9OworICAgIGJvb2wgZW5hYmxlVGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nT25TaXRlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKICAgICBib29s
IGVuYWJsZUxlZ2FjeVRMUyA9IFtkZWZhdWx0cyBib29sRm9yS2V5OkAiV2ViS2l0RW5hYmxlTGVn
YWN5VExTIl07CisgICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNlIHsgfTsKICNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQogICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpAIklUUERlYnVnTW9kZSJdOworICAgIGVuYWJsZVRo
aXJkUGFydHlDb29raWVCbG9ja2luZ09uU2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uID0gW2Rl
ZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERl
YnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdPblNp
dGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbkVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdl
dCgpXV07CiAgICAgYXV0byogbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbZGVmYXVsdHMgc3Ry
aW5nRm9yS2V5OkAiSVRQTWFudWFsUHJldmFsZW50UmVzb3VyY2UiXTsKICAgICBpZiAobWFudWFs
UHJldmFsZW50UmVzb3VyY2UpIHsKICAgICAgICAgVVJMIHVybCB7IFVSTCgpLCBtYW51YWxQcmV2
YWxlbnRSZXNvdXJjZSB9OwpAQCAtMTM2LDcgKzEzOCw3IEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgICAgICBoYXNTdGF0aXN0
aWNzVGVzdGluZ0NhbGxiYWNrKCksCiAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3RJblJl
c291cmNlTG9hZFN0YXRpc3RpY3MsCiAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1Z01vZGUsCi0gICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NOU1VSTFNl
c3Npb25Td2l0Y2hpbmcsCisgICAgICAgIGVuYWJsZVRoaXJkUGFydHlDb29raWVCbG9ja2luZ09u
U2l0ZXNXaXRob3V0VXNlckludGVyYWN0aW9uLAogICAgICAgICBtX2NvbmZpZ3VyYXRpb24tPmRl
dmljZU1hbmFnZW1lbnRSZXN0cmljdGlvbnNFbmFibGVkKCksCiAgICAgICAgIG1fY29uZmlndXJh
dGlvbi0+YWxsTG9hZHNCbG9ja2VkQnlEZXZpY2VNYW5hZ2VtZW50UmVzdHJpY3Rpb25zRm9yVGVz
dGluZygpLAogICAgICAgICBXVEZNb3ZlKHJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2
YWxlbnRSZXNvdXJjZSksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IDgzNzUxZTkzNDVjZmE3YmZmM2E1
YTc0NWVhODhmMjAwZjlmYjk4NzYuLjE1ZGNhYjIyZGRiNTBiMTZmYTRmMjU4ZmVkY2IyMGUyYzZh
M2ViYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xNzAxLDEyICsxNzAxLDE2IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBVUkwmIHVybCwgYm9vbCBpc0dy
YW5kZmF0aGVyZWQsIENvCiAgICAgfQogfQogCi12b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVz
ZUlUUERhdGFiYXNlKGJvb2wgdmFsdWUpCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldFVzZUlU
UERhdGFiYXNlKGJvb2wgdmFsdWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgZm9y
IChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9v
bC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZXRVc2VJVFBEYXRhYmFzZShtX3Nlc3Npb25JRCwg
dmFsdWUpOworICAgIAorICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dy
ZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIAorICAgIGZv
ciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQorICAgICAgICAgICAg
cHJvY2Vzcy0+c2V0VXNlSVRQRGF0YWJhc2UobV9zZXNzaW9uSUQsIHZhbHVlLCBbY2FsbGJhY2tB
Z2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKKyAgICB9CiB9
CiAKIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3Jh
dGlvbkZvclRlc3RpbmcoY29uc3QgVVJMJiBmcm9tVVJMLCBjb25zdCBVUkwmIHRvVVJMLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNzc4LDYgKzE3
ODIsMjAgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW4KICAgICB9CiAgICAgQVNTRVJUKCFjb21w
bGV0aW9uSGFuZGxlcik7CiB9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUZXN0aW5nKGJvb2wg
ZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVh
dGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIAorICAgIGZvciAoYXV0byYgcHJv
Y2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAoYXV0byogbmV0d29ya1By
b2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MtPnNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUZXN0aW5nKG1f
c2Vzc2lvbklELCBlbmFibGVkLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKV0geyB9KTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9jZXNzUG9vbHMoKS5z
aXplKCkgPT0gMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBB
U1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKK30KICNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnNldENhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFNlY29uZHMgc2Vjb25kcywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjA2NSw2ICsyMDgzLDcgQEAgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAK
ICAgICBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHBlck9yaWdpblN0b3JhZ2VR
dW90YSgpOwogICAgIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9
IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKKyAgICBwYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5uZXR3b3JrQ2FjaGVEaXJlY3RvcnkgPSByZXNvbHZlZE5ldHdv
cmtDYWNoZURpcmVjdG9yeSgpOwogCiAgICAgcGxhdGZvcm1TZXROZXR3b3JrUGFyYW1ldGVycyhw
YXJhbWV0ZXJzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDk0ZGU5ZWVjZjNjNTg5M2Y5ZmE5MmQyY2Zj
NTMzMTkwMzRmMjdiZDAuLmY5YTIxZGI4NjAwYTQyZjA5NGI3MzMxZjJlYTEyMmUxM2FjMjQxZmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmgKQEAgLTE2Miw3ICsxNjIsNyBAQCBjbGFzcyBXZWJzaXRlRGF0YVN0b3Jl
IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6V2Vic2l0ZURhdGFT
dAogICAgIHZvaWQgc3VibWl0VGVsZW1ldHJ5KCk7CiAgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVk
KGNvbnN0IFVSTCYsIGJvb2wsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJik7Ci0gICAgdm9pZCBzZXRVc2VJVFBEYXRhYmFzZShib29sKTsKKyAgICB2b2lkIHNldFVz
ZUlUUERhdGFiYXNlKGJvb2wsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFVSTCYsIFNlY29uZHMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBtZXJnZVN0YXRpc3RpY0ZvclRlc3Rpbmco
Y29uc3QgVVJMJiwgY29uc3QgVVJMJiB0b3BGcmFtZVVybDEsIGNvbnN0IFVSTCYgdG9wRnJhbWVV
cmwyLCBTZWNvbmRzIGxhc3RTZWVuLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgU2Vjb25kcyBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBib29sIGlzR3JhbmRmYXRoZXJlZCwgYm9vbCBpc1By
ZXZhbGVudCwgYm9vbCBpc1ZlcnlQcmV2YWxlbnQsIHVuc2lnbmVkIGRhdGFSZWNvcmRzUmVtb3Zl
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKQEAgLTE5Miw2ICsxOTIsNyBAQCBjbGFz
cyBXZWJzaXRlRGF0YVN0b3JlIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6
VHlwZTo6V2Vic2l0ZURhdGFTdAogICAgIHZvaWQgaGFzTG9jYWxTdG9yYWdlRm9yVGVzdGluZyhj
b25zdCBVUkwmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBjb25zdDsKICAgICB2
b2lkIGhhc0lzb2xhdGVkU2Vzc2lvbkZvclRlc3RpbmcoY29uc3QgVVJMJiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJikgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVmZXJyZXJGb3JUZXN0aW5nKGJvb2wsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2hv
dWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0ZvclRlc3RpbmcoYm9vbCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKICNlbmRpZgogICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMoU2Vjb25kcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAg
ICB2b2lkIHJlc2V0Q2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGIyZDU1MDNjMThhYmMwNjg3
ZmVkZTc5Mjg3MzUyNDExMDZiZjQ1ZGMuLjc2Y2UzNDIyZTc0YTIzZDE0ZDg5NzJiNDA5MGUxZTZk
NDg2ZjFlNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMTc5NywxMCArMTc5Nyw3IEBAIC0gKHZvaWQp
X3Njcm9sbGluZ05vZGVTY3JvbGxpbmdEaWRFbmQKIAogLSAoQk9PTClzaG91bGRTaG93QXV0b21h
dGljS2V5Ym9hcmRVSQogewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBpbnB1dG1v
ZGU9Im5vbmUiIHdoZW4gdGhlIGhhcmR3YXJlIGtleWJvYXJkIGlzIGF0dGFjaGVkLgotICAgIC8v
IFdlIGN1cnJlbnRseSByZWZyYWluIGZyb20gZG9pbmcgc28gYmVjYXVzZSB0aGF0IHdvdWxkIHBy
ZXZlbnQgVUlLaXQgZnJvbSBzaG93aW5nCi0gICAgLy8gdGhlIGxhbmd1YWdlIHBpY2tlciB3aGVu
IHByZXNzaW5nIHRoZSBnbG9iZSBrZXkgdG8gY2hhbmdlIHRoZSBpbnB1dCBsYW5ndWFnZS4KLSAg
ICBpZiAoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaW5wdXRNb2RlID09IFdlYkNvcmU6Oklu
cHV0TW9kZTo6Tm9uZSAmJiAhR1NFdmVudElzSGFyZHdhcmVLZXlib2FyZEF0dGFjaGVkKCkpCisg
ICAgaWYgKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmlucHV0TW9kZSA9PSBXZWJDb3JlOjpJ
bnB1dE1vZGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiBOTzsKIAogICAgIHJldHVybiBbc2VsZiBf
c2hvdWxkU2hvd0F1dG9tYXRpY0tleWJvYXJkVUlJZ25vcmluZ0lucHV0TW9kZV07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCmluZGV4IGQ4
ZTNhOWYyMzE4N2VmYjNiNWIwNzY0YTE0YjEyZDVlOGM1MGIyMDUuLjc3OTg3ODIzMWY5Yzg0MDU1
NTRmNGNhYTJjNzE3N2I0ODQ1ZDkxZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCkBAIC02NCw3ICs2NCw3IEBAIGJvb2wgV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtSXNUYXJnZXRJdGVtKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbVJlZiBpdGVtCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdLQnVuZGxlQmFja0Zv
cndhcmRMaXN0SXRlbUlzSW5QYWdlQ2FjaGUoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVm
IGl0ZW1SZWYpCitib29sIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUlzSW5CYWNrRm9yd2Fy
ZENhY2hlKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtUmVmKQogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJk
TGlzdEl0ZW0uaAppbmRleCBmMDBlYWQ0NjY2MTk4OTU3NWJjMmI5ZGU3YWM5ZDliMjFkNTU3ZWE2
Li5jOWE2MDM1MWY2NWY4NjlmNDI5MWQ2ODUyYjA3OGE4ZmVmZTUwMWM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNr
Rm9yd2FyZExpc3RJdGVtLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oCkBAIC00NCw3ICs0NCw3
IEBAIFdLX0VYUE9SVCBXS1N0cmluZ1JlZiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5
VGl0bGUoV0tCdW5kbGVCYWNrRm9yd2FyZExpCiBXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVRhcmdldChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0
ZW1SZWYgaXRlbSkgV0tfQ19BUElfREVQUkVDQVRFRDsKIFdLX0VYUE9SVCBib29sIFdLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbUlzVGFyZ2V0SXRlbShXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0
ZW1SZWYgaXRlbSkgV0tfQ19BUElfREVQUkVDQVRFRDsKIAotV0tfRVhQT1JUIGJvb2wgV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtSXNJblBhZ2VDYWNoZShXS0J1bmRsZUJhY2tGb3J3YXJkTGlz
dEl0ZW1SZWYgaXRlbSkgV0tfQ19BUElfREVQUkVDQVRFRDsKK1dLX0VYUE9SVCBib29sIFdLQnVu
ZGxlQmFja0ZvcndhcmRMaXN0SXRlbUlzSW5CYWNrRm9yd2FyZENhY2hlKFdLQnVuZGxlQmFja0Zv
cndhcmRMaXN0SXRlbVJlZiBpdGVtKSBXS19DX0FQSV9ERVBSRUNBVEVEOwogV0tfRVhQT1JUIGJv
b2wgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtSGFzQ2FjaGVkUGFnZUV4cGlyZWQoV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0pIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKIFdL
X0VYUE9SVCBXS0FycmF5UmVmIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlDaGlsZHJl
bihXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbSkgV0tfQ19BUElfREVQUkVDQVRF
RDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ2xpYi9XZWJLaXRGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0RnJhbWUuY3BwCmluZGV4IGE0ZjUyYjJlNTBmYTJjMzdh
MTgyOWM5ZTRlMjZmNDg2OTBlNzU1Y2UuLmQzYzU1YmJjOTliNzQzMzUwZjNiNWEzNGI4NDE1YTk4
YTNjZTJmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ2xpYi9XZWJLaXRGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdEZyYW1lLmNwcApAQCAtMjM0LDEyICsy
MzQsMTEgQEAgSlNDVmFsdWUqIHdlYmtpdF9mcmFtZV9nZXRfanNfdmFsdWVfZm9yX2RvbV9vYmpl
Y3RfaW5fc2NyaXB0X3dvcmxkKFdlYktpdEZyYW1lKgogICAgIGF1dG8qIHdrV29ybGQgPSB3ZWJr
aXRTY3JpcHRXb3JsZEdldEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQod29ybGQpOwogICAgIGF1
dG8ganNDb250ZXh0ID0ganNjQ29udGV4dEdldE9yQ3JlYXRlKGZyYW1lLT5wcml2LT53ZWJGcmFt
ZS0+anNDb250ZXh0Rm9yV29ybGQod2tXb3JsZCkpOwogICAgIEpTRE9NV2luZG93KiBnbG9iYWxP
YmplY3QgPSBmcmFtZS0+cHJpdi0+d2ViRnJhbWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQoKS5nbG9i
YWxPYmplY3Qod2tXb3JsZC0+Y29yZVdvcmxkKCkpOwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgSlNWYWx1ZVJlZiBqc1ZhbHVlID0g
bnVsbHB0cjsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYg
KFdFQktJVF9ET01fSVNfTk9ERShkb21PYmplY3QpKQotICAgICAgICAgICAganNWYWx1ZSA9IHRv
UmVmKGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJLaXQ6OmNvcmUoV0VCS0lUX0RP
TV9OT0RFKGRvbU9iamVjdCkpKSk7CisgICAgICAgICAgICBqc1ZhbHVlID0gdG9SZWYoZ2xvYmFs
T2JqZWN0LCB0b0pTKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBXZWJLaXQ6OmNvcmUoV0VC
S0lUX0RPTV9OT0RFKGRvbU9iamVjdCkpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGpzVmFsdWUg
PyBqc2NDb250ZXh0R2V0T3JDcmVhdGVWYWx1ZShqc0NvbnRleHQuZ2V0KCksIGpzVmFsdWUpLmxl
YWtSZWYoKSA6IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCAzMWJkZDVlNjQ5YmM2
ZTEyYWE0OTQxYmE5OTg5NzE1NDA5YTNjNjRjLi4wMmEwNTc2YzMyOTdiNzlmYmUwYmE5MGNjYjEz
Nzc2YmVjYTBmYzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNp
bmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0FQSUNhc3QuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9FeGNlcHRpb24uaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0
aW9uQ2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+
CkBAIC01MDQsMTUgKzUwNSwxNCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBvcnRFeGNlcHRp
b24oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZXhjZXB0aW9uKQogICAgIGlmICgh
Y29udGV4dCB8fCAhZXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjU3RhdGUpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlMo
Y29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0KTsKIAogICAgIC8v
IE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBET01XaW5kb3cgZ2xvYmFsIG9iamVjdCwgb3Ro
ZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20gYSBQYWdlLgotICAgIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpOwogICAgIGlmICghdG9KU0RPTVdpbmRvdyhnbG9iYWxPYmplY3QtPnZtKCksIGds
b2JhbE9iamVjdCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYkNvcmU6OnJlcG9ydEV4Y2Vw
dGlvbihleGVjU3RhdGUsIHRvSlMoZXhlY1N0YXRlLCBleGNlcHRpb24pKTsKKyAgICBXZWJDb3Jl
OjpyZXBvcnRFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0b0pTKGdsb2JhbE9iamVjdCwgZXhjZXB0
aW9uKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UoV2ViUGFnZSog
cGFnZSkKQEAgLTU4NCw5ICs1ODQsOSBAQCB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZTo6d2ViTm90
aWZpY2F0aW9uSUQoSlNDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNWYWx1ZVJlZiBqcwogLy8gRklY
TUUgR2V0IHJpZCBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBtb3ZlIGl0IGludG8gV0tCdW5kbGUuY3Bw
LgogUmVmPEFQSTo6RGF0YT4gSW5qZWN0ZWRCdW5kbGU6OmNyZWF0ZVdlYkRhdGFGcm9tVWludDhB
cnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBkYXRhKQogewotICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pTKGNvbnRleHQpOwotICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWNTdGF0ZSk7Ci0gICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGFycmF5RGF0YSA9IFdlYkNv
cmU6OnRvVW5zaGFyZWRVaW50OEFycmF5KGV4ZWNTdGF0ZS0+dm0oKSwgdG9KUyhleGVjU3RhdGUs
IGRhdGEpKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTKGNv
bnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdCk7CisgICAgUmVmUHRy
PFVpbnQ4QXJyYXk+IGFycmF5RGF0YSA9IFdlYkNvcmU6OnRvVW5zaGFyZWRVaW50OEFycmF5KGds
b2JhbE9iamVjdC0+dm0oKSwgdG9KUyhnbG9iYWxPYmplY3QsIGRhdGEpKTsKICAgICByZXR1cm4g
QVBJOjpEYXRhOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGFycmF5RGF0YS0+
YmFzZUFkZHJlc3MoKSksIGFycmF5RGF0YS0+Ynl0ZUxlbmd0aCgpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9k
LmNwcAppbmRleCA2YmYwODVlZjRhMzliNWNkY2VkYmU2YmZiMmRjZWQxMTBjMzU1MDQzLi5hOGJh
NzE3NjcwYTQ4Nzk5NTM4M2FmYTc5ZTAzZTZhZTExNDViYzFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmNwcApA
QCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90
eXBlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSXNvU3Vic3BhY2VQZXJWTS5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU09iamVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNIVE1MRWxlbWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmg+CkBAIC04MCwxNyAr
ODAsMTcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbE1ldGhvZChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWwKICAgICAgICAgSlNIVE1MRWxlbWVudCog
ZWxlbWVudCA9IGpzQ2FzdDxKU0hUTUxFbGVtZW50Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAK
ICAgICAgICAgLy8gVHJ5IHRvIGdldCB0aGUgc2NyaXB0IG9iamVjdCBmcm9tIHRoZSBlbGVtZW50
Ci0gICAgICAgIGlmIChKU09iamVjdCogc2NyaXB0T2JqZWN0ID0gcGx1Z2luU2NyaXB0T2JqZWN0
KGNhbGxGcmFtZSwgZWxlbWVudCkpCisgICAgICAgIGlmIChKU09iamVjdCogc2NyaXB0T2JqZWN0
ID0gcGx1Z2luU2NyaXB0T2JqZWN0KGdsb2JhbE9iamVjdCwgZWxlbWVudCkpCiAgICAgICAgICAg
ICB0aGlzVmFsdWUgPSBzY3JpcHRPYmplY3Q7CiAgICAgfQogCiAgICAgaWYgKHRoaXNWYWx1ZS5p
bmhlcml0czxKU05QT2JqZWN0Pih2bSkpIHsKICAgICAgICAgSlNOUE9iamVjdCoganNOUE9iamVj
dCA9IGpzQ2FzdDxKU05QT2JqZWN0Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CiAKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05QT2JqZWN0LT5jYWxsTWV0aG9kKGNhbGxGcmFtZSwg
anNOUE1ldGhvZC0+bnBJZGVudGlmaWVyKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc05QT2JqZWN0LT5jYWxsTWV0aG9kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBqc05Q
TWV0aG9kLT5ucElkZW50aWZpZXIoKSkpOwogICAgIH0KIAotICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2Qu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2Qu
aAppbmRleCAyOGE3MmJiZGI5Y2NjZDQ4ZGRmMTRiMjE4Y2ZiMzVmZTU4YjI0NWJmLi41NTlmYTc3
NjVlNjg1OTUyZDBhOTRhZjgzOGYxYjg3MTQ1ZDFhMTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oCkBAIC00Nywx
MCArNDcsMTAgQEAgY2xhc3MgSlNOUE1ldGhvZCBmaW5hbCA6IHB1YmxpYyBKU0M6OkludGVybmFs
RnVuY3Rpb24gewogICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgSlNOUE1ldGhvZCogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgTlBJZGVu
dGlmaWVyIG5wSWRlbnQpCisgICAgc3RhdGljIEpTTlBNZXRob2QqIGNyZWF0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgTlBJZGVudGlmaWVy
IG5wSWRlbnQpCiAgICAgewogICAgICAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICAgICAgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUo
KSk7CisgICAgICAgIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Q
cm90b3R5cGUoKSk7CiAgICAgICAgIEpTTlBNZXRob2QqIG1ldGhvZCA9IG5ldyAoSlNDOjphbGxv
Y2F0ZUNlbGw8SlNOUE1ldGhvZD4odm0uaGVhcCkpIEpTTlBNZXRob2QoZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIG5wSWRlbnQpOwogICAgICAgICBtZXRob2QtPmZpbmlzaENyZWF0aW9uKHZtLCBu
YW1lKTsKICAgICAgICAgcmV0dXJuIG1ldGhvZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKaW5kZXggMDJhMzcw
YTllZjVkZjU2MzgxNWU5MzZkNzdmZDJiNzE3YjgxNWU0My4uMmVmYjIyNTIzZjkyMWU5MmFiZDAy
MTZlYjBjZDFmZmQxMDAzNjJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKQEAgLTExMCwyNSArMTEwLDI1
IEBAIE5QT2JqZWN0KiBKU05QT2JqZWN0OjpsZWFrTlBPYmplY3QoKQogICAgIHJldHVybiBvYmpl
Y3Q7CiB9CiAKLUpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMs
IE5QSWRlbnRpZmllciBtZXRob2ROYW1lKQorSlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsTWV0aG9k
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVF9USElTX0dDX09CSkVDVF9J
TkhFUklUUyhpbmZvKCkpOwogICAgIGlmICghbV9ucE9iamVjdCkKLSAgICAgICAgcmV0dXJuIHRo
cm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHRocm93
SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKIAogICAgIC8v
IElmIHRoZSBwcm9wZXJ0eU5hbWUgaXMgc3ltYm9sLgogICAgIGlmICghbWV0aG9kTmFtZSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpOwogICAgIFZlY3RvcjxOUFZhcmlhbnQsIDg+IGFyZ3VtZW50
cyhhcmd1bWVudENvdW50KTsKIAogICAgIC8vIENvbnZlcnQgYWxsIGFyZ3VtZW50cyB0byBOUFZh
cmlhbnRzLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQot
ICAgICAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudChpKSwgYXJndW1lbnRzW2ldKTsKKyAgICAgICAgbV9vYmplY3RN
YXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSwgYXJndW1lbnRzW2ldKTsKIAogICAgIC8vIENhbGxp
bmcgTlBDbGFzczo6aW52b2tlIHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwgYW5kIHRoZXJl
J3Mgbm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KICAgICAvLyAoaW5jbHVkaW5n
IGRlc3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1ha2Ugc3VyZSB0
byBrZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIApAQCAtMTQyLDcgKzE0Miw3IEBAIEpTVmFs
dWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIE5QSWRlbnRpZmllciBt
ZXRob2ROYW1lKQogICAgIHsKICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKGNvbW1vblZNKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFz
cy0+aW52b2tlKG1fbnBPYmplY3QsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3Vt
ZW50Q291bnQsICZyZXN1bHQpOwotICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKKyAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFw
Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgfQogCiAgICAgLy8gUmVsZWFzZSBhbGwgYXJndW1lbnRzLgpAQCAtMTUwLDI4ICsxNTAsMjgg
QEAgSlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgTlBJZGVu
dGlmaWVyIG1ldGhvZE5hbWUpCiAgICAgICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmYXJndW1l
bnRzW2ldKTsKIAogICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCAiRXJyb3IgY2FsbGluZyBtZXRob2Qgb24g
TlBPYmplY3QuIikpOworICAgICAgICB0aHJvd0V4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgIkVycm9yIGNhbGxpbmcg
bWV0aG9kIG9uIE5QT2JqZWN0LiIpKTsKIAotICAgIEpTVmFsdWUgcHJvcGVydHlWYWx1ZSA9IG1f
b2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGV4ZWMsIGdsb2JhbE9iamVjdCgp
LCByZXN1bHQpOworICAgIEpTVmFsdWUgcHJvcGVydHlWYWx1ZSA9IG1fb2JqZWN0TWFwLT5jb252
ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGdsb2JhbE9iamVjdCgpLCByZXN1bHQpOwogICAgIHJlbGVh
c2VOUFZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTsKIH0K
IAotSlNDOjpKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxPYmplY3QoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCitKU0M6OkpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE9iamVjdChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBBU1NFUlRfVEhJU19HQ19PQkpFQ1RfSU5IRVJJVFMoaW5mbygpKTsKICAgICBpZiAoIW1fbnBP
YmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSk7CiAKLSAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpOwogICAgIFZlY3RvcjxOUFZhcmlhbnQsIDg+IGFyZ3VtZW50cyhhcmd1bWVudENv
dW50KTsKICAgICAKICAgICAvLyBDb252ZXJ0IGFsbCBhcmd1bWVudHMgdG8gTlBWYXJpYW50cy4K
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAg
bV9vYmplY3RNYXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoZXhlYywgZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoaSksIGFyZ3VtZW50c1tpXSk7CisgICAgICAgIG1fb2JqZWN0TWFwLT5jb252
ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoaSksIGFyZ3VtZW50c1tpXSk7CiAKICAgICAvLyBDYWxsaW5nIE5QQ2xh
c3M6Omludm9rZURlZmF1bHQgd2lsbCBjYWxsIGludG8gcGx1Zy1pbiBjb2RlLCBhbmQgdGhlcmUn
cyBubyB0ZWxsaW5nIHdoYXQgdGhlIHBsdWctaW4gY2FuIGRvLgogICAgIC8vIChpbmNsdWRpbmcg
ZGVzdHJveWluZyB0aGUgcGx1Zy1pbikuIEJlY2F1c2Ugb2YgdGhpcywgd2UgbWFrZSBzdXJlIHRv
IGtlZXAgdGhlIHBsdWctaW4gYWxpdmUgdW50aWwgCkBAIC0xODUsNyArMTg1LDcgQEAgSlNDOjpK
U1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxPYmplY3QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ewogICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoY29tbW9uVk0oKSk7
CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0
KG1fbnBPYmplY3QsIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwot
ICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZShleGVjKTsKKyAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9u
VG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgfQogCiAgICAgLy8gUmVsZWFz
ZSBhbGwgYXJndW1lbnRzOwpAQCAtMTkzLDI4ICsxOTMsMjggQEAgSlNDOjpKU1ZhbHVlIEpTTlBP
YmplY3Q6OmNhbGxPYmplY3QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJlbGVhc2VO
UFZhcmlhbnRWYWx1ZSgmYXJndW1lbnRzW2ldKTsKIAogICAgIGlmICghcmV0dXJuVmFsdWUpCi0g
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCAiRXJy
b3IgY2FsbGluZyBtZXRob2Qgb24gTlBPYmplY3QuIikpOworICAgICAgICB0aHJvd0V4Y2VwdGlv
bihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgIkVycm9yIGNhbGxpbmcgbWV0aG9kIG9uIE5QT2JqZWN0LiIpKTsKIAotICAgIEpTVmFs
dWUgcHJvcGVydHlWYWx1ZSA9IG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVl
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCByZXN1bHQpOworICAgIEpTVmFsdWUgcHJvcGVydHlWYWx1
ZSA9IG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGdsb2JhbE9iamVjdCgp
LCByZXN1bHQpOwogICAgIHJlbGVhc2VOUFZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKICAgICByZXR1
cm4gcHJvcGVydHlWYWx1ZTsKIH0KIAotSlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjKQorSlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBBU1NFUlRfVEhJU19HQ19PQkpFQ1RfSU5IRVJJVFMoaW5mbygpKTsKICAgICBpZiAo
IW1fbnBPYmplY3QpCi0gICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVj
LCBzY29wZSk7CisgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpOwogICAgIFZlY3RvcjxOUFZhcmlhbnQsIDg+IGFyZ3VtZW50cyhhcmd1
bWVudENvdW50KTsKIAogICAgIC8vIENvbnZlcnQgYWxsIGFyZ3VtZW50cyB0byBOUFZhcmlhbnRz
LgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAg
ICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudChpKSwgYXJndW1lbnRzW2ldKTsKKyAgICAgICAgbV9vYmplY3RNYXAtPmNv
bnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudChpKSwgYXJndW1lbnRzW2ldKTsKIAogICAgIC8vIENhbGxpbmcgTlBD
bGFzczo6Y29uc3RydWN0IHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwgYW5kIHRoZXJlJ3Mg
bm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KICAgICAvLyAoaW5jbHVkaW5nIGRl
c3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1ha2Ugc3VyZSB0byBr
ZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIApAQCAtMjI4LDEzICsyMjgsMTMgQEAgSlNWYWx1
ZSBKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKICAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGNvbW1vblZNKCkpOwogICAg
ICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KG1fbnBPYmpl
Y3QsIGFyZ3VtZW50cy5kYXRhKCksIGFyZ3VtZW50Q291bnQsICZyZXN1bHQpOwotICAgICAgICBO
UFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsK
KyAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3Rh
dGUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgfQogCiAgICAgaWYgKCFyZXR1cm5WYWx1ZSkK
LSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsICJF
cnJvciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iKSk7CisgICAgICAgIHRocm93RXhjZXB0
aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiRXJyb3IgY2FsbGluZyBtZXRob2Qgb24gTlBPYmplY3QuIikpOwogICAgIAotICAg
IEpTVmFsdWUgdmFsdWUgPSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShl
eGVjLCBnbG9iYWxPYmplY3QoKSwgcmVzdWx0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gbV9vYmpl
Y3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoZ2xvYmFsT2JqZWN0KCksIHJlc3VsdCk7
CiAgICAgcmVsZWFzZU5QVmFyaWFudFZhbHVlKCZyZXN1bHQpOwogICAgIHJldHVybiB2YWx1ZTsK
IH0KQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsTlBKU09iamVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBjYWxsRnJhbWUtPmpzQ2FsbGVlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChn
bG9iYWxPYmplY3QsIG9iamVjdC0+aW5oZXJpdHM8SlNOUE9iamVjdD4oZ2xvYmFsT2JqZWN0LT52
bSgpKSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQ2FzdDxKU05QT2JqZWN0Kj4o
b2JqZWN0KS0+Y2FsbE9iamVjdChjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQ2FzdDxKU05QT2JqZWN0Kj4ob2JqZWN0KS0+Y2FsbE9iamVjdChnbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSkpOwogfQogCiBKU0M6OkNhbGxUeXBlIEpTTlBPYmplY3Q6OmdldENhbGxEYXRh
KEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSkKQEAgLTI2Myw3ICsy
NjMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRo
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsbwogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciA9IGNhbGxGcmFtZS0+anNDYWxsZWUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVj
dCwgY29uc3RydWN0b3ItPmluaGVyaXRzPEpTTlBPYmplY3Q+KGdsb2JhbE9iamVjdC0+dm0oKSkp
OwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Nhc3Q8SlNOUE9iamVjdCo+KGNvbnN0
cnVjdG9yKS0+Y2FsbENvbnN0cnVjdG9yKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNDYXN0PEpTTlBPYmplY3QqPihjb25zdHJ1Y3RvciktPmNhbGxDb25zdHJ1Y3Rv
cihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEpTTlBPYmpl
Y3Q6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiBjZWxsLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1
Y3REYXRhKQpAQCAtMjc3LDE1ICsyNzcsMTUgQEAgQ29uc3RydWN0VHlwZSBKU05QT2JqZWN0Ojpn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCogY2VsbCwgQ29uc3RydWN0RGF0YSYgY29uc3RydWMKICAg
ICByZXR1cm4gQ29uc3RydWN0VHlwZTo6SG9zdDsKIH0KIAotYm9vbCBKU05QT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTTlBPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU05QT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNOUE9i
amVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdCkgewotICAgICAgICB0
aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93SW52YWxp
ZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAKQEAgLTMxNCwxNSArMzE0LDE1IEBAIGJvb2wgSlNOUE9iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTTlBPYmplY3Q6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikKK2Jvb2wgSlNOUE9iamVjdDo6cHV0KEpT
Q2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTTlBPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU05QT2JqZWN0Kj4oY2VsbCk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAg
IGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdCkgewotICAgICAgICB0aHJvd0ludmFsaWRBY2Nl
c3NFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApAQCAtMzQwLDcgKzM0MCw3IEBAIGJvb2wgSlNOUE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIE5QVmFyaWFudCB2YXJpYW50OwotICAgIHRoaXNPYmplY3QtPm1f
b2JqZWN0TWFwLT5jb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHZhbHVlLCB2YXJpYW50
KTsKKyAgICB0aGlzT2JqZWN0LT5tX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFu
dChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgdmFyaWFudCk7CiAKICAgICAvLyBDYWxsaW5n
IE5QQ2xhc3M6OnNldFByb3BlcnR5IHdpbGwgY2FsbCBpbnRvIHBsdWctaW4gY29kZSwgYW5kIHRo
ZXJlJ3Mgbm8gdGVsbGluZyB3aGF0IHRoZSBwbHVnLWluIGNhbiBkby4KICAgICAvLyAoaW5jbHVk
aW5nIGRlc3Ryb3lpbmcgdGhlIHBsdWctaW4pLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG1ha2Ugc3Vy
ZSB0byBrZWVwIHRoZSBwbHVnLWluIGFsaXZlIHVudGlsIApAQCAtMzUyLDcgKzM1Miw3IEBAIGJv
b2wgSlNOUE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKCiAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2Nrcyhjb21tb25WTSgpKTsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iamVjdC0+bV9ucE9i
amVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50
aWZpZXIsICZ2YXJpYW50KTsKIAotICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKKyAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFw
Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAK
ICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgc2V0UHJv
cGVydHkgcmV0dXJucyBmYWxzZT8KICAgICB9CkBAIC0zNjEsMTkgKzM2MSwxOSBAQCBib29sIEpT
TlBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgSlNOUE9iamVj
dDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCitib29sIEpTTlBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxKU05QT2JqZWN0Kj4oY2VsbCkt
PmRlbGV0ZVByb3BlcnR5KGV4ZWMsIG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3BlcnR5
TmFtZSkpOworICAgIHJldHVybiBqc0Nhc3Q8SlNOUE9iamVjdCo+KGNlbGwpLT5kZWxldGVQcm9w
ZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9w
ZXJ0eU5hbWUpKTsKIH0KIAotYm9vbCBKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jv
b2wgSlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4ganNDYXN0PEpTTlBPYmplY3QqPihjZWxsKS0+ZGVsZXRlUHJvcGVydHkoZXhl
Yywgc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihJZGVudGlmaWVyUmVwOjpnZXQocHJvcGVydHlO
YW1lKSkpOworICAgIHJldHVybiBqc0Nhc3Q8SlNOUE9iamVjdCo+KGNlbGwpLT5kZWxldGVQcm9w
ZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXI+KElkZW50
aWZpZXJSZXA6OmdldChwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKLWJvb2wgSlNOUE9iamVjdDo6ZGVs
ZXRlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKQor
Ym9vbCBKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQVNTRVJUX1RISVNf
R0NfT0JKRUNUX0lOSEVSSVRTKGluZm8oKSk7CkBAIC0zODMsNyArMzgzLDcgQEAgYm9vbCBKU05Q
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIE5QSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9ucE9iamVjdCkg
ewotICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAg
IHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDA0LDIxICs0MDQsMjEgQEAgYm9vbCBK
U05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIE5QSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpCiAgICAgICAgIGlmICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9w
ZXJ0eShtX25wT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhl
Y1N0YXRlKGV4ZWMpOworICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNl
cHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUpCit2b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25N
b2RlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU05QT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTlBPYmplY3QqPihv
YmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPm1fbnBPYmplY3QpIHsKLSAgICAgICAgdGhyb3dJbnZh
bGlkQWNjZXNzRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICB0aHJvd0ludmFsaWRBY2Nlc3NF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTQ0MCw3ICs0NDAsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eQogICAgICAgICBp
ZiAoIXRoaXNPYmplY3QtPm1fbnBPYmplY3QtPl9jbGFzcy0+ZW51bWVyYXRlKHRoaXNPYmplY3Qt
Pm1fbnBPYmplY3QsICZpZGVudGlmaWVycywgJmlkZW50aWZpZXJDb3VudCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0
aW9uVG9FeGVjU3RhdGUoZXhlYyk7CisgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUds
b2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIH0KIAog
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBpZGVudGlmaWVyQ291bnQ7ICsraSkgewpAQCAt
NDYxLDE2ICs0NjEsMTYgQEAgdm9pZCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHkKICAgICBucG5NZW1GcmVl
KGlkZW50aWZpZXJzKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVydHlH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCitFbmNvZGVkSlNWYWx1ZSBKU05QT2JqZWN0Ojpwcm9wZXJ0eUdl
dHRlcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU05QT2JqZWN0KiB0
aGlzT2JqID0ganNDYXN0PEpTTlBPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqLCBpbmZvKCkpOwogICAgIAog
ICAgIGlmICghdGhpc09iai0+bV9ucE9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjLCBzY29wZSkpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlKSk7CiAKICAgICBpZiAoIXRoaXNPYmotPm1fbnBPYmplY3QtPl9jbGFzcy0+
Z2V0UHJvcGVydHkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC00OTMsMzkgKzQ5MywzOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU05QT2JqZWN0Ojpwcm9w
ZXJ0eUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogCiAgICAg
ICAgIHJldHVyblZhbHVlID0gdGhpc09iai0+bV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0
eSh0aGlzT2JqLT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIsICZyZXN1bHQpOwogICAgICAgICAK
LSAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3Rh
dGUoZXhlYyk7CisgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlv
blRvRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIH0KIAogICAgIGlmICghcmV0
dXJuVmFsdWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKLSAgICBKU1ZhbHVlIHByb3BlcnR5VmFsdWUgPSB0aGlzT2JqLT5tX29iamVjdE1hcC0+Y29u
dmVydE5QVmFyaWFudFRvSlNWYWx1ZShleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgcmVz
dWx0KTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5VmFsdWUgPSB0aGlzT2JqLT5tX29iamVjdE1hcC0+
Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZSh0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0
KTsKICAgICByZWxlYXNlTlBWYXJpYW50VmFsdWUoJnJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShwcm9wZXJ0eVZhbHVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNOUE9iamVj
dDo6bWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNOUE9iamVjdDo6
bWV0aG9kR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTTlBP
YmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNOUE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmosIGluZm8oKSk7
CiAgICAgCiAgICAgaWYgKCF0aGlzT2JqLT5tX25wT2JqZWN0KQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNjb3BlKSk7CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUpKTsKIAogICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIg
PSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwogICAgIC8vIElmIHRo
ZSBwcm9wZXJ0eU5hbWUgaXMgc3ltYm9sLgogICAgIGlmICghbnBJZGVudGlmaWVyKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMsIHNj
b3BlKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dJbnZhbGlkQWNjZXNz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUpKTsKIAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNOUE1ldGhvZDo6Y3JlYXRlKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgp
LCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBucElkZW50aWZpZXIpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTTlBNZXRob2Q6OmNyZWF0ZSh0aGlzT2JqLT5nbG9iYWxPYmplY3Qo
KSwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbnBJZGVudGlmaWVyKSk7CiB9CiAKLUpTQzo6
RXhjZXB0aW9uKiBKU05QT2JqZWN0Ojp0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIFRocm93U2NvcGUmIHNjb3BlKQorSlNDOjpFeGNlcHRpb24qIEpTTlBPYmplY3Q6OnRo
cm93SW52YWxpZEFjY2Vzc0Vycm9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBUaHJvd1Njb3BlJiBzY29wZSkKIHsKLSAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywg
c2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJUcnlpbmcgdG8gYWNjZXNzIG9iamVj
dCBmcm9tIGRlc3Ryb3llZCBwbHVnLWluLiIpKTsKKyAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsICJUcnlpbmcgdG8gYWNjZXNzIG9iamVjdCBmcm9tIGRlc3Ryb3llZCBwbHVn
LWluLiIpKTsKIH0KIAogSXNvU3Vic3BhY2UqIEpTTlBPYmplY3Q6OnN1YnNwYWNlRm9ySW1wbChW
TSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QT2JqZWN0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QT2JqZWN0LmgKaW5kZXggMmRjNWM4YmVmZmJiZmQ0ZTA1ZmE2MmExZGRjMmU4YTZm
ZTQxMDYwMC4uM2ZhYzBkMTMyYzY4ODQ5YWVmNzM1NWVmMzQzMmI0YTNlMjc1OWU2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBP
YmplY3QuaApAQCAtNjgsOSArNjgsOSBAQCBjbGFzcyBKU05QT2JqZWN0IGZpbmFsIDogcHVibGlj
IEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QgewogICAgIC8vIFVzZWQgdG8gaW52YWxpZGF0ZSBh
biBOUE9iamVjdCBhc3luY2hyb25vdXNseS4KICAgICBOUE9iamVjdCogbGVha05QT2JqZWN0KCk7
CiAKLSAgICBKU0M6OkpTVmFsdWUgY2FsbE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSosIE5QSWRlbnRp
ZmllciBtZXRob2ROYW1lKTsKLSAgICBKU0M6OkpTVmFsdWUgY2FsbE9iamVjdChKU0M6OkV4ZWNT
dGF0ZSopOwotICAgIEpTQzo6SlNWYWx1ZSBjYWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
KTsKKyAgICBKU0M6OkpTVmFsdWUgY2FsbE1ldGhvZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpDYWxsRnJhbWUqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSk7CisgICAgSlNDOjpKU1ZhbHVl
IGNhbGxPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisgICAg
SlNDOjpKU1ZhbHVlIGNhbGxDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpD
YWxsRnJhbWUqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApAQCAtOTIsMTkgKzkyLDE5IEBAIGNs
YXNzIEpTTlBPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCB7
CiAgICAgc3RhdGljIEpTQzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6
OkNhbGxEYXRhJik7CiAgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3RE
YXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7CiAKLSAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIGJvb2wgcHV0
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dChKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogCi0gICAgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
KTsKLSAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwog
Ci0gICAgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkV4ZWNTdGF0ZSosIE5QSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpOworICAgIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0dsb2JhbE9iamVj
dCosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUpOwogCi0gICAgc3Rh
dGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgcHJvcGVydHlHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIEpTQzo6
RW5jb2RlZEpTVmFsdWUgbWV0aG9kR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotICAgIHN0YXRpYyBKU0M6OkV4Y2VwdGlvbiog
dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlRocm93U2NvcGUm
KTsKKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eUdldHRlcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
ICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIG1ldGhvZEdldHRlcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworICAgIHN0
YXRpYyBKU0M6OkV4Y2VwdGlvbiogdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6VGhyb3dTY29wZSYpOwogCiAgICAgTlBSdW50aW1lT2JqZWN0TWFwKiBt
X29iamVjdE1hcDsKICAgICBOUE9iamVjdCogbV9ucE9iamVjdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAKaW5k
ZXggZGFlYTNhYjZmMGE2OTZjMDA4MDI4MTFkYWFmNDNhYjI0YWNlZjUxZi4uMzZmMjhlZTZmYjAx
MDJkOGMxNzcxM2M2MDhiNjE0ZWFmODVkZGI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAKQEAgLTgwLDkg
KzgwLDkgQEAgdm9pZCBOUEpTT2JqZWN0Ojppbml0aWFsaXplKFZNJiB2bSwgTlBSdW50aW1lT2Jq
ZWN0TWFwKiBvYmplY3RNYXAsIEpTT2JqZWN0KiBqc08KICAgICBtX2pzT2JqZWN0LnNldCh2bSwg
anNPYmplY3QpOwogfQogCi1zdGF0aWMgSWRlbnRpZmllciBpZGVudGlmaWVyRnJvbUlkZW50aWZp
ZXJSZXAoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVwKQorc3Rh
dGljIElkZW50aWZpZXIgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVwKQogewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBBU1NFUlQoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSk7CiAKICAgICBj
b25zdCBjaGFyKiBzdHJpbmcgPSBpZGVudGlmaWVyUmVwLT5zdHJpbmcoKTsKQEAgLTk4LDE1ICs5
OCwxNSBAQCBib29sIE5QSlNPYmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgbWV0aG9kTmFt
ZSkKICAgICBpZiAoIWlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fb2JqZWN0TWFwLT5nbG9iYWxFeGVjKCk7
Ci0gICAgaWYgKCFleGVjKQorICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
ID0gbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpOworICAgIGlmICghbGV4aWNhbEdsb2JhbE9i
amVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAK
LSAgICBKU1ZhbHVlIHZhbHVlID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9t
SWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7ICAgIAorICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2pzT2JqZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21J
ZGVudGlmaWVyUmVwKGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXApKTsgICAgCiAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAt
MTIwLDQ1ICsxMjAsNDUgQEAgYm9vbCBOUEpTT2JqZWN0OjppbnZva2UoTlBJZGVudGlmaWVyIG1l
dGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW4KICAgICBpZiAoIWlkZW50
aWZpZXJSZXAtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBtX29iamVjdE1hcC0+Z2xvYmFsRXhlYygpOwotICAgIGlmICghZXhl
YykKKyAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1fb2JqZWN0TWFw
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIAotICAgIEpTVmFsdWUgZnVu
Y3Rpb24gPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVw
KGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKLSAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0
TWFwLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwg
cmVzdWx0KTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gbV9qc09iamVjdC0+Z2V0KGxleGljYWxH
bG9iYWxPYmplY3QsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpZGVudGlmaWVyUmVwKSk7CisgICAgcmV0dXJuIGludm9rZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBmdW5jdGlvbiwgYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwogfQogCiBi
b29sIE5QSlNPYmplY3Q6Omludm9rZURlZmF1bHQoY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMs
IHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fb2JqZWN0TWFwLT5nbG9iYWxFeGVjKCk7Ci0gICAgaWYgKCFleGVjKQor
ICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gbV9vYmplY3RNYXAtPmds
b2JhbE9iamVjdCgpOworICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
bV9qc09iamVjdC5nZXQoKTsKLSAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFwLT5n
bG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0
KTsKKyAgICByZXR1cm4gaW52b2tlKGxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBhcmd1
bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7CiB9CiAKIGJvb2wgTlBKU09iamVjdDo6aGFz
UHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7CiAgICAgSWRlbnRpZmllclJlcCog
aWRlbnRpZmllclJlcCA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihpZGVudGlmaWVyKTsK
ICAgICAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX29iamVjdE1hcC0+Z2xvYmFsRXhlYygpOwot
ICAgIGlmICghZXhlYykKKyAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9
IG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKTsKKyAgICBpZiAoIWxleGljYWxHbG9iYWxPYmpl
Y3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
IAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQot
ICAgICAgICByZXN1bHQgPSBtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVy
RnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOworICAgICAgICByZXN1bHQg
PSBtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVy
RnJvbUlkZW50aWZpZXJSZXAobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJlcCkpOwog
ICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gbV9qc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywg
aWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOworICAgICAgICByZXN1bHQgPSBtX2pzT2JqZWN0LT5o
YXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7
CiAKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0x
NjgsMjEgKzE2OCwyMSBAQCBib29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCogcmVzdWx0KQogewogICAgIElkZW50aWZpZXJSZXAq
IGlkZW50aWZpZXJSZXAgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1l
KTsKICAgICAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX29iamVjdE1hcC0+Z2xvYmFsRXhlYygp
OwotICAgIGlmICghZXhlYykKKyAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKTsKKyAgICBpZiAoIWxleGljYWxHbG9iYWxP
YmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwog
CiAgICAgSlNWYWx1ZSBqc1Jlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmco
KSkKLSAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZy
b21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKKyAgICAgICAganNSZXN1bHQg
PSBtX2pzT2JqZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21JZGVu
dGlmaWVyUmVwKGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXApKTsKICAgICBlbHNl
Ci0gICAgICAgIGpzUmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJSZXAt
Pm51bWJlcigpKTsKKyAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQobGV4aWNhbEds
b2JhbE9iamVjdCwgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogICAgIAotICAgIG1fb2JqZWN0
TWFwLT5jb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGpzUmVzdWx0LCAqcmVzdWx0KTsK
KyAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBqc1Jlc3VsdCwgKnJlc3VsdCk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5MSwyMCArMTkxLDIwIEBAIGJvb2wgTlBKU09iamVj
dDo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYW50
KiB2YWx1ZSkKIHsKICAgICBJZGVudGlmaWVyUmVwKiBpZGVudGlmaWVyUmVwID0gc3RhdGljX2Nh
c3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAgICAgCi0gICAgRXhlY1N0YXRlKiBl
eGVjID0gbV9vYmplY3RNYXAtPmdsb2JhbEV4ZWMoKTsKLSAgICBpZiAoIWV4ZWMpCisgICAgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICBKU1ZhbHVlIGpzVmFsdWUg
PSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShleGVjLCBtX29iamVjdE1h
cC0+Z2xvYmFsT2JqZWN0KCksICp2YWx1ZSk7CisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gbV9vYmpl
Y3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUobV9vYmplY3RNYXAtPmdsb2JhbE9iamVj
dCgpLCAqdmFsdWUpOwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAg
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG1fanNPYmplY3QuZ2V0KCkpOwotICAgICAgICBtX2pz
T2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCksIGpzVmFsdWUsIHNs
b3QpOworICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dChtX2pzT2JqZWN0
LmdldCgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJlcCksIGpzVmFsdWUsIHNsb3QpOwogICAg
IH0gZWxzZQotICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgo
bV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCksIGpzVmFsdWUs
IGZhbHNlKTsKKyAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4
KG1fanNPYmplY3QuZ2V0KCksIGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXAtPm51
bWJlcigpLCBqc1ZhbHVlLCBmYWxzZSk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNCwzMCArMjE0LDMwIEBAIGJvb2wgTlBKU09iamVj
dDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKIHsKICAgICBJZGVu
dGlmaWVyUmVwKiBpZGVudGlmaWVyUmVwID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHBy
b3BlcnR5TmFtZSk7CiAgICAgCi0gICAgRXhlY1N0YXRlKiBleGVjID0gbV9vYmplY3RNYXAtPmds
b2JhbEV4ZWMoKTsKLSAgICBpZiAoIWV4ZWMpCisgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgaWYgKCFsZXhp
Y2FsR2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKIAogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7Ci0gICAgICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVj
LCBpZGVudGlmaWVyUmVwKTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gaWRlbnRp
ZmllckZyb21JZGVudGlmaWVyUmVwKGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXAp
OwogICAgICAgICAKLSAgICAgICAgaWYgKCFtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBp
ZGVudGlmaWVyKSkgeworICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGxleGlj
YWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXIpKSB7CiAgICAgICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KG1f
anNPYmplY3QuZ2V0KCksIGV4ZWMsIGlkZW50aWZpZXIpOworICAgICAgICBtX2pzT2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KG1fanNPYmplY3QuZ2V0KCksIGxleGljYWxH
bG9iYWxPYmplY3QsIGlkZW50aWZpZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9q
c09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpKSB7Cisg
ICAgICAgIGlmICghbV9qc09iamVjdC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwg
aWRlbnRpZmllclJlcC0+bnVtYmVyKCkpKSB7CiAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAg
bV9qc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgobV9qc09i
amVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOworICAgICAgICBtX2pz
T2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChtX2pzT2JqZWN0
LmdldCgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7CiAg
ICAgfQogCiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKQEAgLTI0NiwxNSArMjQ2LDE1IEBA
IGJvb2wgTlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSkKIAogYm9vbCBOUEpTT2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlmaWVyKiogaWRlbnRpZmll
cnMsIHVpbnQzMl90KiBpZGVudGlmaWVyQ291bnQpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0g
bV9vYmplY3RNYXAtPmdsb2JhbEV4ZWMoKTsKLSAgICBpZiAoIWV4ZWMpCisgICAgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0
ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0UHJvcGVydHlOYW1lcyhtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUoKSk7CisgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRQ
cm9wZXJ0eU5hbWVzKG1fanNPYmplY3QuZ2V0KCksIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKIAogICAgIE5QSWRlbnRpZmllciogbmFtZUlk
ZW50aWZpZXJzID0gbnBuTWVtTmV3QXJyYXk8TlBJZGVudGlmaWVyPihwcm9wZXJ0eU5hbWVzLnNp
emUoKSk7CiAKQEAgLTI2OSwxMSArMjY5LDExIEBAIGJvb2wgTlBKU09iamVjdDo6ZW51bWVyYXRl
KE5QSWRlbnRpZmllcioqIGlkZW50aWZpZXJzLCB1aW50MzJfdCogaWRlbnRpZmllckNvdW50CiAK
IGJvb2wgTlBKU09iamVjdDo6Y29uc3RydWN0KGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1
aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBtX29iamVjdE1hcC0+Z2xvYmFsRXhlYygpOwotICAgIGlmICghZXhlYykKKyAg
ICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IG1fb2JqZWN0TWFwLT5nbG9i
YWxPYmplY3QoKTsKKyAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCkBAIC0yODUsMjEgKzI4NSwyMSBA
QCBib29sIE5QSlNPYmplY3Q6OmNvbnN0cnVjdChjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywg
dWludDMyX3QgYXJndW1lbnRDb3VudCwgTgogICAgIC8vIENvbnZlcnQgdGhlIHBhc3NlZCBpbiBh
cmd1bWVudHMuCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRMaXN0OwogICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgIGFyZ3Vt
ZW50TGlzdC5hcHBlbmQobV9vYmplY3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoZXhl
YywgbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCBhcmd1bWVudHNbaV0pKTsKKyAgICAgICAg
YXJndW1lbnRMaXN0LmFwcGVuZChtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1
ZShtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksIGFyZ3VtZW50c1tpXSkpOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFhcmd1bWVudExpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKIAotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU0M6OmNvbnN0cnVjdChleGVjLCBtX2pzT2JqZWN0LmdldCgpLCBjb25zdHJ1Y3RU
eXBlLCBjb25zdHJ1Y3REYXRhLCBhcmd1bWVudExpc3QpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U0M6OmNvbnN0cnVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2pzT2JqZWN0LmdldCgpLCBjb25z
dHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmd1bWVudExpc3QpOwogICAgIAogICAgIC8vIENv
bnZlcnQgYW5kIHJldHVybiB0aGUgbmV3IG9iamVjdC4KLSAgICBtX29iamVjdE1hcC0+Y29udmVy
dEpTVmFsdWVUb05QVmFyaWFudChleGVjLCB2YWx1ZSwgKnJlc3VsdCk7CisgICAgbV9vYmplY3RN
YXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUs
ICpyZXN1bHQpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBOUEpTT2JqZWN0OjppbnZva2UoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGZ1bmN0aW9uLCBjb25zdCBOUFZhcmlhbnQq
IGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCiti
b29sIE5QSlNPYmplY3Q6Omludm9rZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKQEAgLTMxMCwxMCArMzEwLDEwIEBAIGJvb2wgTlBKU09iamVjdDo6aW52b2tlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBmCiAgICAgLy8g
Q29udmVydCB0aGUgcGFzc2VkIGluIGFyZ3VtZW50cy4KICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudExpc3Q7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291
bnQ7ICsraSkKLSAgICAgICAgYXJndW1lbnRMaXN0LmFwcGVuZChtX29iamVjdE1hcC0+Y29udmVy
dE5QVmFyaWFudFRvSlNWYWx1ZShleGVjLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50c1tpXSkpOwor
ICAgICAgICBhcmd1bWVudExpc3QuYXBwZW5kKG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50
VG9KU1ZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50c1tpXSkpOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFhcmd1bWVudExpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKIAotICAgIEpTVmFsdWUg
dmFsdWUgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9q
c09iamVjdC5nZXQoKSwgYXJndW1lbnRMaXN0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNDOjpj
YWxsKGxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG1f
anNPYmplY3QuZ2V0KCksIGFyZ3VtZW50TGlzdCk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CkBAIC0zMjEs
NyArMzIxLDcgQEAgYm9vbCBOUEpTT2JqZWN0OjppbnZva2UoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGYKICAgICB9CiAKICAgICAvLyBDb252
ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KLSAgICBtX29i
amVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCB2YWx1ZSwgKnJlc3VsdCk7
CisgICAgbV9vYmplY3RNYXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUsICpyZXN1bHQpOwogCiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkgewogICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5oCmlu
ZGV4IDY5MTE3YzkzMDU3MzMxYThhMmY2MWJjOTZjYTg1NmMyMzkyNjY2MGQuLjYyZTFlMDEyNzJi
MjY5NDllNjQwYTQwMTcxOWYyNWNjNDk4OTY1Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmgKQEAgLTc2LDcgKzc2
LDcgQEAgY2xhc3MgTlBKU09iamVjdCA6IHB1YmxpYyBOUE9iamVjdCB7CiAgICAgYm9vbCBlbnVt
ZXJhdGUoTlBJZGVudGlmaWVyKiogaWRlbnRpZmllcnMsIHVpbnQzMl90KiBpZGVudGlmaWVyQ291
bnQpOwogICAgIGJvb2wgY29uc3RydWN0KGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50
MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7CiAKLSAgICBib29sIGludm9r
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUgZnVu
Y3Rpb24sIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50
LCBOUFZhcmlhbnQqIHJlc3VsdCk7CisgICAgYm9vbCBpbnZva2UoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVp
bnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKIAogICAgIHN0YXRpYyBO
UENsYXNzKiBucENsYXNzKCk7CiAgICAgc3RhdGljIE5QT2JqZWN0KiBOUF9BbGxvY2F0ZShOUFAs
IE5QQ2xhc3MqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCmluZGV4IGMyYWYwZmVl
NWQzNThkYzdiNjk5ZjM0MzVjZmM5M2IyNzZlOTBiMTUuLjg3YzczMTMzMTM4MDdkZGY2ZTk0MzYy
NjkwNjJkMGEzMTVkYzIyMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcApAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Db21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9T
b3VyY2VDb2RlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25nLmg+CkBAIC0xMTAs
NyArMTExLDcgQEAgSlNPYmplY3QqIE5QUnVudGltZU9iamVjdE1hcDo6Z2V0T3JDcmVhdGVKU09i
amVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBqc05QT2JqZWN0
OwogfQogCi1KU1ZhbHVlIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydE5QVmFyaWFudFRvSlNW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBOUFZhcmlhbnQmIHZhcmlhbnQpCitKU1ZhbHVlIE5QUnVudGltZU9iamVjdE1h
cDo6Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IE5QVmFyaWFudCYgdmFyaWFudCkKIHsKICAgICBzd2l0Y2ggKHZhcmlhbnQu
dHlwZSkgewogICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Wb2lkOgpAQCAtMTM5LDEwICsxNDAsMTAg
QEAgSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzoKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAotdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBOUFZhcmlhbnQmIHZhcmlhbnQpCit2b2lkIE5Q
UnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgTlBWYXJpYW50JiB2YXJpYW50
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIAogICAgIFZPSURfVE9fTlBWQVJJQU5U
KHZhcmlhbnQpOwogICAgIApAQCAtMTU3LDE3ICsxNTgsMTcgQEAgdm9pZCBOUFJ1bnRpbWVPYmpl
Y3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHUKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpIHsKLSAgICAgICAgQk9P
TEVBTl9UT19OUFZBUklBTlQodmFsdWUudG9Cb29sZWFuKGV4ZWMpLCB2YXJpYW50KTsKKyAgICAg
ICAgQk9PTEVBTl9UT19OUFZBUklBTlQodmFsdWUudG9Cb29sZWFuKGxleGljYWxHbG9iYWxPYmpl
Y3QpLCB2YXJpYW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh2YWx1ZS5p
c051bWJlcigpKSB7Ci0gICAgICAgIERPVUJMRV9UT19OUFZBUklBTlQodmFsdWUudG9OdW1iZXIo
ZXhlYyksIHZhcmlhbnQpOworICAgICAgICBET1VCTEVfVE9fTlBWQVJJQU5UKHZhbHVlLnRvTnVt
YmVyKGxleGljYWxHbG9iYWxPYmplY3QpLCB2YXJpYW50KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIE5QU3RyaW5nIG5wU3Ry
aW5nID0gY3JlYXRlTlBTdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLnV0
ZjgoKSk7CisgICAgICAgIE5QU3RyaW5nIG5wU3RyaW5nID0gY3JlYXRlTlBTdHJpbmcodmFsdWUu
dG9TdHJpbmcobGV4aWNhbEdsb2JhbE9iamVjdCktPnZhbHVlKGxleGljYWxHbG9iYWxPYmplY3Qp
LnV0ZjgoKSk7CiAgICAgICAgIFNUUklOR05fVE9fTlBWQVJJQU5UKG5wU3RyaW5nLlVURjhDaGFy
YWN0ZXJzLCBucFN0cmluZy5VVEY4TGVuZ3RoLCB2YXJpYW50KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE4NywxNCArMTg4LDEyIEBAIGJvb2wgTlBSdW50aW1lT2JqZWN0TWFwOjpldmFs
dWF0ZShOUE9iamVjdCogbnBPYmplY3QsIGNvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nCiAgICAg
aWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC5nZXQo
KSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBnZXRPckNyZWF0ZUpTT2JqZWN0KGdsb2JhbE9i
amVjdC5nZXQoKSwgbnBPYmplY3QpOwogCi0gICAgSlNWYWx1ZSByZXN1bHRWYWx1ZSA9IEpTQzo6
ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcsIHsgfSksIHRoaXNWYWx1ZSk7
CisgICAgSlNWYWx1ZSByZXN1bHRWYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0Lmdl
dCgpLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZywgeyB9KSwgdGhpc1ZhbHVlKTsKIAotICAgIGNv
bnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0VmFsdWUsICpyZXN1bHQpOworICAg
IGNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoZ2xvYmFsT2JqZWN0LmdldCgpLCByZXN1bHRWYWx1
ZSwgKnJlc3VsdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzOCwxNSArMjM3LDYgQEAg
SlNHbG9iYWxPYmplY3QqIE5QUnVudGltZU9iamVjdE1hcDo6Z2xvYmFsT2JqZWN0KCkgY29uc3QK
ICAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsK
IH0KIAotRXhlY1N0YXRlKiBOUFJ1bnRpbWVPYmplY3RNYXA6Omdsb2JhbEV4ZWMoKSBjb25zdAot
ewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3Qo
KTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAg
cmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotfQotCiBzdGF0aWMgU3RyaW5nJiBn
bG9iYWxFeGNlcHRpb25TdHJpbmcoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGV4Y2VwdGlvblN0cmluZzsKQEAgLTI1OCw5ICsyNDgsOSBAQCB2b2lkIE5QUnVudGltZU9i
amVjdE1hcDo6c2V0R2xvYmFsRXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhjZXB0aW9uU3RyaW5n
KQogICAgIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpID0gZXhjZXB0aW9uU3RyaW5nOwogfQogICAg
IAotdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZShFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4
Y2VwdGlvblRvRXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBpZiAoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpCkBAIC0yNjgsNyArMjU4
LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNT
dGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICB7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKLSAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4
ZWMsIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7CisgICAgICAgIHRocm93RXhjZXB0aW9uKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpOwogICAgIH0KICAgICAKICAgICBnbG9iYWxFeGNl
cHRpb25TdHJpbmcoKSA9IFN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuaAppbmRl
eCA2NmYxZmM0MDliMTY1YTMxNDE5YjY1OTA1M2I0NTI3MjFiODg5MDRkLi5jZDc0OWEzYjhmN2E4
OTY5MjI0MTExMTUzYmZiZjI0MGRiOWNlZjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAu
aApAQCAtNDMsNyArNDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0dsb2JhbE9i
amVjdDsKICAgICBjbGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBKU1ZhbHVlOwotICAgIHVzaW5n
IEV4ZWNTdGF0ZSA9IENhbGxGcmFtZTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC03NSw4
ICs3NCw4IEBAIGNsYXNzIE5QUnVudGltZU9iamVjdE1hcCA6IHByaXZhdGUgSlNDOjpXZWFrSGFu
ZGxlT3duZXIgewogICAgIEpTQzo6SlNPYmplY3QqIGdldE9yQ3JlYXRlSlNPYmplY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCosIE5QT2JqZWN0Kik7CiAgICAgdm9pZCBqc05QT2JqZWN0RGVzdHJveWVk
KEpTTlBPYmplY3QqKTsKIAotICAgIHZvaWQgY29udmVydEpTVmFsdWVUb05QVmFyaWFudChKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgTlBWYXJpYW50Jik7Ci0gICAgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgTlBWYXJpYW50Jik7CisgICAgdm9pZCBjb252ZXJ0SlNWYWx1ZVRvTlBW
YXJpYW50KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUsIE5QVmFyaWFudCYpOwor
ICAgIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBjb25zdCBOUFZhcmlhbnQmKTsKIAogICAgIGJvb2wgZXZhbHVhdGUoTlBPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZywgTlBWYXJpYW50KiByZXN1bHQpOwogCkBAIC04
NCwxMCArODMsOSBAQCBjbGFzcyBOUFJ1bnRpbWVPYmplY3RNYXAgOiBwcml2YXRlIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIAogICAgIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0OwotICAgIEpTQzo6RXhlY1N0YXRlKiBnbG9i
YWxFeGVjKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxFeGNlcHRpb24oY29u
c3QgU3RyaW5nJiBleGNlcHRpb25TdHJpbmcpOwotICAgIHN0YXRpYyB2b2lkIG1vdmVHbG9iYWxF
eGNlcHRpb25Ub0V4ZWNTdGF0ZShKU0M6OkV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyB2b2lkIG1v
dmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAKIHBy
aXZhdGU6CiAgICAgLy8gV2Vha0hhbmRsZU93bmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGJjYTkxZWM0MDA5ZGY2MWNhMjQ5MmZk
NTM5YzY0MjdlM2U1ODUyZDcuLjg4ZTEzYWQ4MmFkY2VjNGZiZWU2ODVmMmM3YmU0NTk4ZjhkNGNi
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCkBAIC0xMjY2LDkgKzEyNjYsOSBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1KYXZhU2Ny
aXB0VVJMUmVxdWVzdChVUkxSZXF1ZXN0KiByZXF1ZXN0KQogICAgIGlmICghcmVxdWVzdC0+dGFy
Z2V0KCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogc2NyaXB0
U3RhdGUgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9i
YWxFeGVjKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3Jp
cHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmlu
ZzsKLSAgICByZXN1bHQuZ2V0U3RyaW5nKHNjcmlwdFN0YXRlLCByZXN1bHRTdHJpbmcpOworICAg
IHJlc3VsdC5nZXRTdHJpbmcoZ2xvYmFsT2JqZWN0LCByZXN1bHRTdHJpbmcpOwogICAKICAgICAv
LyBTZW5kIHRoZSByZXN1bHQgYmFjayB0byB0aGUgcGx1Zy1pbi4KICAgICBwbHVnaW4tPmRpZEV2
YWx1YXRlSmF2YVNjcmlwdChyZXF1ZXN0LT5yZXF1ZXN0SUQoKSwgcmVzdWx0U3RyaW5nKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9u
U3RhdGVDb252ZXJzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcAppbmRleCAwZWNhNGMxZDMyMGNlOTBkZWMx
Y2VhODM1NGZlMjI2ZTcwZjQ0NTMyLi4wMjY5NWQzZWI4OWY1ZTY0MDkzODQxNDI0OWU3ZjVjOWY4
MmFjNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCkBAIC0xMTUsNyAr
MTE1LDcgQEAgQmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlIHRvQmFja0ZvcndhcmRMaXN0SXRlbVN0
YXRlKGNvbnN0IFdlYkNvcmU6Okhpc3RvcnlJdGVtJgogICAgIHN0YXRlLnBhZ2VTdGF0ZS5tYWlu
RnJhbWVTdGF0ZSA9IHRvRnJhbWVTdGF0ZShoaXN0b3J5SXRlbSk7CiAgICAgc3RhdGUucGFnZVN0
YXRlLnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgPSBoaXN0b3J5SXRlbS5zaG91bGRPcGVu
RXh0ZXJuYWxVUkxzUG9saWN5KCk7CiAgICAgc3RhdGUucGFnZVN0YXRlLnNlc3Npb25TdGF0ZU9i
amVjdCA9IGhpc3RvcnlJdGVtLnN0YXRlT2JqZWN0KCk7Ci0gICAgc3RhdGUuaGFzQ2FjaGVkUGFn
ZSA9IGhpc3RvcnlJdGVtLmlzSW5QYWdlQ2FjaGUoKTsKKyAgICBzdGF0ZS5oYXNDYWNoZWRQYWdl
ID0gaGlzdG9yeUl0ZW0uaXNJbkJhY2tGb3J3YXJkQ2FjaGUoKTsKICAgICByZXR1cm4gc3RhdGU7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IGNjZWQxMWZhYmRlMWVi
YTkyYmQ2YzdlMGNiMTZiNTc5OTczZDNhNGMuLjc4ZGE0N2NhOWUxOWNmZTdmZDZlYzcxY2ZhZGU3
OTZlZTVkOTU2YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtMTA0LDcg
KzEwNCw3IEBAIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpXZWJGcmFtZUxvYWRlckNsaWVudCgpCiAg
ICAgLCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luVmlldyhmYWxzZSkKICAgICAsIG1fZGlkQ29t
cGxldGVQYWdlVHJhbnNpdGlvbihmYWxzZSkKICAgICAsIG1fZnJhbWVIYXNDdXN0b21Db250ZW50
UHJvdmlkZXIoZmFsc2UpCi0gICAgLCBtX2ZyYW1lQ2FtZUZyb21QYWdlQ2FjaGUoZmFsc2UpCisg
ICAgLCBtX2ZyYW1lQ2FtZUZyb21CYWNrRm9yd2FyZENhY2hlKGZhbHNlKQogewogfQogCkBAIC0x
MjA2LDcgKzEyMDYsNyBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRHb1RvSGlz
dG9yeUl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0pIGNvbnN0CiAgICAgV2ViUGFnZSogd2ViUGFnZSA9
IG1fZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXdlYlBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldpbGxHb1RvQmFj
a0ZvcndhcmRMaXN0SXRlbShpdGVtLmlkZW50aWZpZXIoKSwgaXRlbS5pc0luUGFnZUNhY2hlKCkp
KTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldpbGxHb1RvQmFj
a0ZvcndhcmRMaXN0SXRlbShpdGVtLmlkZW50aWZpZXIoKSwgaXRlbS5pc0luQmFja0ZvcndhcmRD
YWNoZSgpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0NjUsNyArMTQ2NSw3IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRG
cmFtZShDYWNoZWRGcmFtZSopCiB7CiAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVz
cG9uc2UoKTsKICAgICBtX2ZyYW1lSGFzQ3VzdG9tQ29udGVudFByb3ZpZGVyID0gbV9mcmFtZS0+
aXNNYWluRnJhbWUoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPnNob3VsZFVzZUN1c3RvbUNvbnRlbnRQ
cm92aWRlckZvclJlc3BvbnNlKHJlc3BvbnNlKTsKLSAgICBtX2ZyYW1lQ2FtZUZyb21QYWdlQ2Fj
aGUgPSB0cnVlOworICAgIG1fZnJhbWVDYW1lRnJvbUJhY2tGb3J3YXJkQ2FjaGUgPSB0cnVlOwog
fQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JO
ZXdQYWdlKCkKQEAgLTE0ODcsNyArMTQ4Nyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKQogCiAgICAgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1l
bnRMb2FkZXIoKS0+cmVzcG9uc2UoKTsKICAgICBtX2ZyYW1lSGFzQ3VzdG9tQ29udGVudFByb3Zp
ZGVyID0gaXNNYWluRnJhbWUgJiYgd2ViUGFnZS0+c2hvdWxkVXNlQ3VzdG9tQ29udGVudFByb3Zp
ZGVyRm9yUmVzcG9uc2UocmVzcG9uc2UpOwotICAgIG1fZnJhbWVDYW1lRnJvbVBhZ2VDYWNoZSA9
IGZhbHNlOworICAgIG1fZnJhbWVDYW1lRnJvbUJhY2tGb3J3YXJkQ2FjaGUgPSBmYWxzZTsKIAog
ICAgIFNjcm9sbGJhck1vZGUgZGVmYXVsdFNjcm9sbGJhck1vZGUgPSBzaG91bGRIaWRlU2Nyb2xs
YmFycyA/IFNjcm9sbGJhckFsd2F5c09mZiA6IFNjcm9sbGJhckF1dG87CiAKQEAgLTE1MzMsOSAr
MTUzMyw5IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRl
ZEZvck5ld1BhZ2UoKQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
ZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCkKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJl
c3RvcmVGcm9tQmFja0ZvcndhcmRDYWNoZSgpCiB7Ci0gICAgbV9mcmFtZUNhbWVGcm9tUGFnZUNh
Y2hlID0gdHJ1ZTsKKyAgICBtX2ZyYW1lQ2FtZUZyb21CYWNrRm9yd2FyZENhY2hlID0gdHJ1ZTsK
IH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNl
dChib29sIHZhbHVlKQpAQCAtMTU5Niw3ICsxNTk2LDcgQEAgUmVmUHRyPFdpZGdldD4gV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVs
ZW0KICAgICBwYXJhbWV0ZXJzLnZhbHVlcyA9IHBhcmFtVmFsdWVzOwogICAgIHBhcmFtZXRlcnMu
bWltZVR5cGUgPSBtaW1lVHlwZTsKICAgICBwYXJhbWV0ZXJzLmlzRnVsbEZyYW1lUGx1Z2luID0g
bG9hZE1hbnVhbGx5OwotICAgIHBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9hZGVyID0gcGFy
YW1ldGVycy5pc0Z1bGxGcmFtZVBsdWdpbiAmJiAhbV9mcmFtZUNhbWVGcm9tUGFnZUNhY2hlOwor
ICAgIHBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9hZGVyID0gcGFyYW1ldGVycy5pc0Z1bGxG
cmFtZVBsdWdpbiAmJiAhbV9mcmFtZUNhbWVGcm9tQmFja0ZvcndhcmRDYWNoZTsKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBwYXJhbWV0ZXJzLmxheWVySG9zdGluZ01vZGUgPSBtX2ZyYW1lLT5w
YWdlKCktPmxheWVySG9zdGluZ01vZGUoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuaAppbmRleCBhZmExN2E0OTY3Y2ZjMDNhNmM5NDhkYjk5Y2U4MDE0MjVkZWM0N2YxLi42MTFm
Y2I4NmRiZTYzYWQ3MzNiMTIwMTc1NmExNTJkZGNiOTM2MWMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuaApAQCAtNzEsNyArNzEsNyBAQCBjbGFzcyBXZWJGcmFtZUxvYWRlckNsaWVudCBm
aW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudCB7CiAgICAgCiAgICAgdm9p
ZCBtYWtlUmVwcmVzZW50YXRpb24oV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKSBmaW5hbDsKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgZm9yY2VMYXlvdXRPblJlc3RvcmVGcm9t
UGFnZUNhY2hlKCkgZmluYWw7CisgICAgYm9vbCBmb3JjZUxheW91dE9uUmVzdG9yZUZyb21CYWNr
Rm9yd2FyZENhY2hlKCkgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9u
SFRNTCgpIGZpbmFsOwogICAgIApAQCAtMjA2LDcgKzIwNiw3IEBAIGNsYXNzIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50IHsKICNl
bmRpZgogICAgIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpIGZpbmFsOwog
Ci0gICAgdm9pZCBkaWRSZXN0b3JlRnJvbVBhZ2VDYWNoZSgpIGZpbmFsOworICAgIHZvaWQgZGlk
UmVzdG9yZUZyb21CYWNrRm9yd2FyZENhY2hlKCkgZmluYWw7CiAKICAgICB2b2lkIGRpc3BhdGNo
RGlkQmVjb21lRnJhbWVzZXQoYm9vbCkgZmluYWw7CiAKQEAgLTI4MSw3ICsyODEsNyBAQCBjbGFz
cyBXZWJGcmFtZUxvYWRlckNsaWVudCBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudCB7CiAgICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luVmlldzsKICAgICBi
b29sIG1fZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbjsKICAgICBib29sIG1fZnJhbWVIYXNDdXN0
b21Db250ZW50UHJvdmlkZXI7Ci0gICAgYm9vbCBtX2ZyYW1lQ2FtZUZyb21QYWdlQ2FjaGU7Cisg
ICAgYm9vbCBtX2ZyYW1lQ2FtZUZyb21CYWNrRm9yd2FyZENhY2hlOwogICAgIGJvb2wgbV91c2VJ
Y29uTG9hZGluZ0NsaWVudCB7IGZhbHNlIH07CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKICAgICBPcHRpb25hbDxGcmFtZVNwZWNpZmljU3RvcmFnZUFjY2Vzc0lkZW50aWZp
ZXI+IG1fZnJhbWVTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NJZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJGcmFtZUxvYWRl
ckNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9p
b3MvV2ViRnJhbWVMb2FkZXJDbGllbnRJT1MubW0KaW5kZXggZmNhOWJkZjA2ZWRhYTNiNDk4N2Ix
OTg1NGU5MzNjZTZmMzQ3NWNiMS4uOGZhZjMxZWE0YjdiMzBlNTdkYzQ4ZWQyNjRhYzk2YWEyMTRm
ZGRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2lvcy9XZWJGcmFtZUxvYWRlckNsaWVudElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkZyYW1lTG9hZGVyQ2xpZW50SU9TLm1tCkBAIC01
Myw3ICs1Myw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJlc3RvcmVGcmFtZUhp
ZXJhcmNoeUZvckNhY2hlZEZyYW1lKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29s
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpmb3JjZUxheW91dE9uUmVzdG9yZUZyb21QYWdlQ2FjaGUo
KQorYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Zm9yY2VMYXlvdXRPblJlc3RvcmVGcm9tQmFj
a0ZvcndhcmRDYWNoZSgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXIuY3BwCmluZGV4IDRiYjRlMzQ0MjYyNzI1ODE4YmQ0MDA5MGQ5ZGFlZWMwZjU2MzI5
ZTUuLjJhZGQyMWJiZWU5NDlhMDhkNGJiMmMxMWY4YjY0MzFiNTEwZWI5NTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlci5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJWaXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VDYWNoZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQmFja0ZvcndhcmRDYWNoZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcApp
bmRleCBkODBkN2Y5NTdhOTYzYmQyYjlkZmI5MmJiZDk1NWI4ZDVkNTI0NDBmLi45MTc0ZmUxZjk5
YzJmYTUzYjkzZDdmOTJkZGUyZGYxZGFiZTQ1NmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3Bw
CkBAIC0zNCwxMCArMzQsMTAgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdl
cy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQmFja0ZvcndhcmRDYWNoZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hpc3RvcnlDb250cm9sbGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUNh
Y2hlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CkBAIC03OCw3ICs3OCw3IEBAIHZv
aWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0oY29uc3QgQmFja0ZvcndhcmRJ
dGVtSWRlbnRpZmllciYgaXRlbUlECiAgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAotICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCppdGVtKTsKKyAgICBC
YWNrRm9yd2FyZENhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKml0ZW0pOwogICAgIFdlYkNvcmU6
OlBhZ2U6OmNsZWFyUHJldmlvdXNJdGVtRnJvbUFsbFBhZ2VzKGl0ZW0uZ2V0KCkpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggMWRm
ZTM5ZDhmZWM3ZjdlY2U5MmE3MjM4MzI0YzVlZjY0MGYxZjFhNy4uMDVhNGRhMDU1Y2RlOTQ3MDll
M2IxZDY2MGZkMjBiYTgxNTU0ZDM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVQ
b2xpY2llc0RhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNMb2NrLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQXJjaGl2ZVJlc291cmNlLmg+CkBAIC01MTUsNyArNTE2LDcgQEAgSlNHbG9i
YWxDb250ZXh0UmVmIFdlYkZyYW1lOjpqc0NvbnRleHQoKQogICAgIGlmICghbV9jb3JlRnJhbWUp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRvR2xvYmFsUmVmKG1fY29y
ZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5n
bG9iYWxFeGVjKCkpOworICAgIHJldHVybiB0b0dsb2JhbFJlZihtX2NvcmVGcmFtZS0+c2NyaXB0
KCkuZ2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKSk7CiB9CiAKIEpTR2xvYmFs
Q29udGV4dFJlZiBXZWJGcmFtZTo6anNDb250ZXh0Rm9yV29ybGQoSW5qZWN0ZWRCdW5kbGVTY3Jp
cHRXb3JsZCogd29ybGQpCkBAIC01MjMsNyArNTI0LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIFdl
YkZyYW1lOjpqc0NvbnRleHRGb3JXb3JsZChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiB3b3Js
ZCkKICAgICBpZiAoIW1fY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiB0b0dsb2JhbFJlZihtX2NvcmVGcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHdv
cmxkLT5jb3JlV29ybGQoKSktPmdsb2JhbEV4ZWMoKSk7CisgICAgcmV0dXJuIHRvR2xvYmFsUmVm
KG1fY29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3Qod29ybGQtPmNvcmVXb3JsZCgpKSk7
CiB9CiAKIGJvb2wgV2ViRnJhbWU6OmhhbmRsZXNQYWdlU2NhbGVHZXN0dXJlKCkgY29uc3QKQEAg
LTcwMyw3ICs3MDQsNyBAQCB2b2lkIFdlYkZyYW1lOjpzdG9wTG9hZGluZygpCiBXZWJGcmFtZSog
V2ViRnJhbWU6OmZyYW1lRm9yQ29udGV4dChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKIAotICAg
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdE9iaiA9IHRvSlMoY29udGV4dCktPmxl
eGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3RPYmogPSB0b0pTKGNvbnRleHQpOwogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5bmFt
aWNDYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0T2JqLT52bSgpLCBnbG9iYWxPYmplY3RP
YmopOwogICAgIGlmICghd2luZG93KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTcxNiwx
MCArNzE3LDkgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlKiBub2RlSGFuZGxlLCBJbmoKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gbV9jb3JlRnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdCh3b3JsZC0+Y29yZVdvcmxkKCkpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
Ci0gICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBub2RlSGFu
ZGxlLT5jb3JlTm9kZSgpKSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0KTsK
KyAgICByZXR1cm4gdG9SZWYoZ2xvYmFsT2JqZWN0LCB0b0pTKGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBub2RlSGFuZGxlLT5jb3JlTm9kZSgpKSk7CiB9CiAKIEpTVmFsdWVSZWYgV2ViRnJh
bWU6OmpzV3JhcHBlckZvcldvcmxkKEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUqIHJhbmdlSGFu
ZGxlLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiB3b3JsZCkKQEAgLTcyOCwxMCArNzI4LDkg
QEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSW5qZWN0ZWRCdW5kbGVS
YW5nZUhhbmRsZSogcmFuZ2VIYW5kbGUsIEkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBKU0RP
TVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gbV9jb3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVj
dCh3b3JsZC0+Y29yZVdvcmxkKCkpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgcmV0
dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByYW5nZUhhbmRsZS0+Y29y
ZVJhbmdlKCkpKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiB0b1JlZihnbG9iYWxPYmplY3QsIHRvSlMoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHJhbmdlSGFuZGxlLT5jb3JlUmFuZ2UoKSkpOwogfQogCiBTdHJpbmcgV2ViRnJhbWU6OmNvdW50
ZXJWYWx1ZShKU09iamVjdFJlZiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAwODE3OTI3NjNiYmNhYjM4NWNhYTI3NWMzNTBiZjY5
ZDc3OGZhY2IwLi5mMzIzZGEwNjA3OTczMmMyYzBiMzhhNWMxNDE1MzkxMjVmMzcwZDQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTM2LDYg
KzEzNiw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU2FtcGxpbmdQcm9maWxlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQmFja0ZvcndhcmRD
YWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQmFja0ZvcndhcmRDb250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CkBA
IC0xOTIsNyArMTkzLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlQ2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VD
b25maWd1cmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QaW5nTG9hZGVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KQEAgLTE0OTAsMTIgKzE0OTAsMTIg
QEAgdm9pZCBXZWJQYWdlOjpzdXNwZW5kRm9yUHJvY2Vzc1N3YXAoKQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKCFQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLmFkZElmQ2FjaGVhYmxl
KCpjdXJyZW50SGlzdG9yeUl0ZW0sIGNvcmVQYWdlKCkpKSB7CisgICAgaWYgKCFCYWNrRm9yd2Fy
ZENhY2hlOjpzaW5nbGV0b24oKS5hZGRJZkNhY2hlYWJsZSgqY3VycmVudEhpc3RvcnlJdGVtLCBj
b3JlUGFnZSgpKSkgewogICAgICAgICBmYWlsZWRUb1N1c3BlbmQoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIC8vIFBhZ2UgY2FjaGUgZG9lcyBub3QgYnJlYWsgdGhlIG9wZW5lciBs
aW5rIGZvciB0aGUgbWFpbiBmcmFtZSAob25seSBkb2VzIHNvIGZvciB0aGUgc3ViZnJhbWVzKSBi
ZWNhdXNlIHRoZQorICAgIC8vIEJhY2svZm9yd2FyZCBjYWNoZSBkb2VzIG5vdCBicmVhayB0aGUg
b3BlbmVyIGxpbmsgZm9yIHRoZSBtYWluIGZyYW1lIChvbmx5IGRvZXMgc28gZm9yIHRoZSBzdWJm
cmFtZXMpIGJlY2F1c2UgdGhlCiAgICAgLy8gbWFpbiBmcmFtZSBpcyBub3JtYWxseSByZS11c2Vk
IGZvciB0aGUgbmF2aWdhdGlvbi4gSG93ZXZlciwgaW4gdGhlIGNhc2Ugb2YgcHJvY2Vzcy1zd2Fw
cGluZywgdGhlIG1haW4gZnJhbWUKICAgICAvLyBpcyBub3cgaG9zdGVkIGluIGFub3RoZXIgcHJv
Y2VzcyBhbmQgdGhlIG9uZSBpbiB0aGlzIHByb2Nlc3MgaXMgaW4gdGhlIGNhY2hlLgogICAgIGlm
IChtX21haW5GcmFtZSAmJiBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCkpCkBAIC0zMzQ0LDcgKzMz
NDQsNyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHQoV2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZQogICAgICAgICBpZiAoSlNWYWx1ZSByZXN1
bHRWYWx1ZSA9IGZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCkuZXhlY3V0ZVVzZXJBZ2VudFNj
cmlwdEluV29ybGQod29ybGQtPmNvcmVXb3JsZCgpLCBzY3JpcHQsIGZvcmNlVXNlckdlc3R1cmUs
ICZkZXRhaWxzKSkgewogICAgICAgICAgICAgaGFkRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgICAg
ICAgICBzZXJpYWxpemVkUmVzdWx0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShmcmFtZS0+anNDb250ZXh0Rm9yV29ybGQod29ybGQpLAotICAgICAgICAgICAgICAgIHRvUmVm
KGZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHdvcmxkLT5jb3JlV29y
bGQoKSktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0VmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgICAg
ICAgICB0b1JlZihmcmFtZS0+Y29yZUZyYW1lKCktPnNjcmlwdCgpLmdsb2JhbE9iamVjdCh3b3Js
ZC0+Y29yZVdvcmxkKCkpLCByZXN1bHRWYWx1ZSksIG51bGxwdHIpOwogICAgICAgICB9CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggYzY2YzgwNWQ2
MWU0YzI1MTZlMjY4YTNlZjk0YWZkODhkYjY4ZTc1OC4uYTU5Y2MyZTc3MTVlNTI4MGQ2Yzg2OTQ1
NGQwZjBmYzNkMTg3NDliZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cApAQCAtODIsNiArODIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9CYWNr
Rm9yd2FyZENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DUFVNb25pdG9yLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZS5oPgpAQCAtMTA3LDcgKzEwOCw2IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlQ2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91cC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaD4KQEAgLTMwNiw5ICszMDYsOSBAQCB2
b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgICAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgICAg
ICAgIGF1dG8gbWFpbnRhaW5QYWdlQ2FjaGUgPSBtX2lzU3VzcGVuZGluZyA/IFdlYkNvcmU6Ok1h
aW50YWluUGFnZUNhY2hlOjpZZXMgOiBXZWJDb3JlOjpNYWludGFpblBhZ2VDYWNoZTo6Tm87Cisg
ICAgICAgICAgICBhdXRvIG1haW50YWluQmFja0ZvcndhcmRDYWNoZSA9IG1faXNTdXNwZW5kaW5n
ID8gV2ViQ29yZTo6TWFpbnRhaW5CYWNrRm9yd2FyZENhY2hlOjpZZXMgOiBXZWJDb3JlOjpNYWlu
dGFpbkJhY2tGb3J3YXJkQ2FjaGU6Ok5vOwogICAgICAgICAgICAgYXV0byBtYWludGFpbk1lbW9y
eUNhY2hlID0gbV9pc1N1c3BlbmRpbmcgJiYgbV9oYXNTdXNwZW5kZWRQYWdlUHJveHkgPyBXZWJD
b3JlOjpNYWludGFpbk1lbW9yeUNhY2hlOjpZZXMgOiBXZWJDb3JlOjpNYWludGFpbk1lbW9yeUNh
Y2hlOjpObzsKLSAgICAgICAgICAgIFdlYkNvcmU6OnJlbGVhc2VNZW1vcnkoY3JpdGljYWwsIHN5
bmNocm9ub3VzLCBtYWludGFpblBhZ2VDYWNoZSwgbWFpbnRhaW5NZW1vcnlDYWNoZSk7CisgICAg
ICAgICAgICBXZWJDb3JlOjpyZWxlYXNlTWVtb3J5KGNyaXRpY2FsLCBzeW5jaHJvbm91cywgbWFp
bnRhaW5CYWNrRm9yd2FyZENhY2hlLCBtYWludGFpbk1lbW9yeUNhY2hlKTsKICAgICAgICAgfSk7
CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKICAg
ICAgICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyLnNldFNob3VsZFVzZVBlcmlvZGljTWVtb3J5TW9u
aXRvcih0cnVlKTsKQEAgLTQ3MSwxNSArNDcxLDYgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyhXZWJQcm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycyYmIHAK
ICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKIH0KIAotYm9vbCBXZWJQcm9j
ZXNzOjpoYXNQYWdlUmVxdWlyaW5nUGFnZUNhY2hlV2hpbGVTdXNwZW5kZWQoKSBjb25zdAotewot
ICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZU1hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAo
cGFnZS0+aXNTdXNwZW5kZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgV2ViUHJvY2Vzczo6YXJlQWxsUGFnZXNTdXNwZW5k
ZWQoKSBjb25zdAogewogICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZU1hcC52YWx1ZXMoKSkg
ewpAQCAtNjMxLDEzICs2MjIsMTMgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRDYWNoZU1vZGVsKENh
Y2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICB1bnNpZ25lZCBjYWNoZU1pbkRlYWRDYXBhY2l0eSA9
IDA7CiAgICAgdW5zaWduZWQgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOwogICAgIFNlY29uZHMg
ZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbDsKLSAgICB1bnNpZ25lZCBwYWdlQ2FjaGVT
aXplID0gMDsKLSAgICBjYWxjdWxhdGVNZW1vcnlDYWNoZVNpemVzKGNhY2hlTW9kZWwsIGNhY2hl
VG90YWxDYXBhY2l0eSwgY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5
LCBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsLCBwYWdlQ2FjaGVTaXplKTsKKyAgICB1
bnNpZ25lZCBiYWNrRm9yd2FyZENhY2hlU2l6ZSA9IDA7CisgICAgY2FsY3VsYXRlTWVtb3J5Q2Fj
aGVTaXplcyhjYWNoZU1vZGVsLCBjYWNoZVRvdGFsQ2FwYWNpdHksIGNhY2hlTWluRGVhZENhcGFj
aXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZh
bCwgYmFja0ZvcndhcmRDYWNoZVNpemUpOwogCiAgICAgYXV0byYgbWVtb3J5Q2FjaGUgPSBNZW1v
cnlDYWNoZTo6c2luZ2xldG9uKCk7CiAgICAgbWVtb3J5Q2FjaGUuc2V0Q2FwYWNpdGllcyhjYWNo
ZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0
eSk7CiAgICAgbWVtb3J5Q2FjaGUuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChk
ZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsKLSAgICBQYWdlQ2FjaGU6OnNpbmdsZXRv
bigpLnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CisgICAgQmFja0ZvcndhcmRDYWNoZTo6c2lu
Z2xldG9uKCkuc2V0TWF4U2l6ZShiYWNrRm9yd2FyZENhY2hlU2l6ZSk7CiAKICAgICBwbGF0Zm9y
bVNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCk7CiB9CkBAIC0xMjIwLDcgKzEyMTEsNyBAQCB2b2lk
IFdlYlByb2Nlc3M6Om5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkNsb3NlZChOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24qIGNvbm5lYwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAg
ICAgICBpZiAoYXV0byogZXhpc3RpbmdJREJDb25uZWN0aW9uVG9TZXJ2ZXIgPSBjb25uZWN0aW9u
LT5leGlzdGluZ0lEQkNvbm5lY3Rpb25Ub1NlcnZlcigpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
aWRiQ29ubmVjdGlvbiA9PSAmZXhpc3RpbmdJREJDb25uZWN0aW9uVG9TZXJ2ZXItPmNvcmVDb25u
ZWN0aW9uVG9TZXJ2ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGV4aXN0aW5nSURC
Q29ubmVjdGlvblRvU2VydmVyLCBpZGJDb25uZWN0aW9uID09ICZleGlzdGluZ0lEQkNvbm5lY3Rp
b25Ub1NlcnZlci0+Y29yZUNvbm5lY3Rpb25Ub1NlcnZlcigpKTsKICAgICAgICAgICAgIHBhZ2Ut
PmNvcmVQYWdlKCktPmNsZWFySURCQ29ubmVjdGlvbigpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MTMwOSw3ICsxMzAwLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLAogICAgIFVOVVNFRF9QQVJB
TShtb2RpZmllZFNpbmNlKTsKIAogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUpKSB7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xl
dG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7CisgICAgICAgIEJh
Y2tGb3J3YXJkQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFz
b246Ok5vbmUpOwogICAgICAgICBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkuZXZpY3RSZXNvdXJj
ZXMoc2Vzc2lvbklEKCkpOwogCiAgICAgICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGU6OnNpbmdsZXRvbigpLmNsZWFyKCk7CkBAIC0xNzc2LDcgKzE3NjcsNyBAQCBib29sIFdlYlBy
b2Nlc3M6Omhhc1Zpc2libGVXZWJQYWdlKCkgY29uc3QKIAogdm9pZCBXZWJQcm9jZXNzOjpzZXRC
YWNrRm9yd2FyZENhY2hlQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpCiB7Ci0gICAgUGFnZUNh
Y2hlOjpzaW5nbGV0b24oKS5zZXRNYXhTaXplKGNhcGFjaXR5KTsKKyAgICBCYWNrRm9yd2FyZENh
Y2hlOjpzaW5nbGV0b24oKS5zZXRNYXhTaXplKGNhcGFjaXR5KTsKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzOjpjbGVhckNhY2hlZFBhZ2UoQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciBiYWNrRm9yd2Fy
ZEl0ZW1JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMTc4NSw3ICsxNzc2LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpjbGVhckNhY2hlZFBhZ2UoQmFj
a0ZvcndhcmRJdGVtSWRlbnRpZmllciBiYWNrRm9yd2FyZEl0ZW1JRCwgQ28KICAgICBpZiAoIWl0
ZW0pCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwogCi0gICAgUGFnZUNhY2hl
OjpzaW5nbGV0b24oKS5yZW1vdmUoKml0ZW0pOworICAgIEJhY2tGb3J3YXJkQ2FjaGU6OnNpbmds
ZXRvbigpLnJlbW92ZSgqaXRlbSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKaW5kZXggZGQ2MGU4ZDgxZTJmYWUxMjZmMDQ1
OTU3YzFjYmM2ZTIzOWVkYTk4Yi4uOGMyNDZhZmE3N2ZlMTVmYWY5OTRlMDg5ZTc3ZjEzZjNlNTI2
OTVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCkBAIC0zOTAsNyArMzkw
LDYgQEAgY2xhc3MgV2ViUHJvY2VzcwogICAgIGVudW0gY2xhc3MgU2hvdWxkQWNrbm93bGVkZ2VX
aGVuUmVhZHlUb1N1c3BlbmQgeyBObywgWWVzIH07CiAgICAgdm9pZCBhY3R1YWxQcmVwYXJlVG9T
dXNwZW5kKFNob3VsZEFja25vd2xlZGdlV2hlblJlYWR5VG9TdXNwZW5kKTsKIAotICAgIGJvb2wg
aGFzUGFnZVJlcXVpcmluZ1BhZ2VDYWNoZVdoaWxlU3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgYm9v
bCBhcmVBbGxQYWdlc1N1c3BlbmRlZCgpIGNvbnN0OwogCiAgICAgdm9pZCBlbnN1cmVBdXRvbWF0
aW9uU2Vzc2lvblByb3h5KGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkZW50aWZpZXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViVmlldy9XZWJVSUtpdERlbGVnYXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJWaWV3L1dlYlVJS2l0RGVsZWdhdGUuaAppbmRl
eCA5ODk3NDU2MzdkYTNjMTRkNzhiOTcyY2E0NTU2MGM5NGIzMDA5NzZlLi4yZGI3MzhmZjA1M2Q5
Zjc1NzAwYjQzNmQxOWViOWZkNjhiNjA3YTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L2lvcy9XZWJWaWV3L1dlYlVJS2l0RGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L2lvcy9XZWJWaWV3L1dlYlVJS2l0RGVsZWdhdGUuaApAQCAtODIsNyArODIsNyBAQCB0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBXZWJNZWRpYUNhcHR1cmVUeXBlKSB7CiAtICh2b2lkKXdl
YlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGVsZW1lbnREaWRGb2N1c05vZGU6KERPTU5vZGUgKilu
b2RlOwogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBlbGVtZW50RGlkQmx1ck5v
ZGU6KERPTU5vZGUgKilub2RlOwogCi0vLyBQYWdlQ2FjaGUgc3VwcG9ydAorLy8gQmFja0Zvcndh
cmRDYWNoZSBzdXBwb3J0CiAtICh2b2lkKXdlYlZpZXdEaWRSZXN0b3JlRnJvbVBhZ2VDYWNoZToo
V2ViVmlldyAqKXdlYlZpZXc7CiAKIC0gKE5TVmlldyAqKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJW
aWV3IHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOihOU0RpY3Rpb25hcnkgKilhcmd1bWVudHMgZnJv
bVBsdWdJblBhY2thZ2U6KFdlYlBsdWdpblBhY2thZ2UgKilwYWNrYWdlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUludGVybmFsLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL0RPTUludGVybmFsLm1tCmluZGV4IGQ5ZTY1YTIwMTU1ZGJkMjI2NDZm
N2YwMjJjNjNjNTJhZmRmZmEyMWMuLjAxZjVlOTFiNWM1YzRlYzRlOGM0OTJiZTIyODVkYjc4YjNk
Yzk1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01JbnRlcm5h
bC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSW50ZXJuYWwubW0KQEAg
LTExOCwxMCArMTE4LDkgQEAgLSAodm9pZClfaW5pdGlhbGl6ZVNjcmlwdERPTU5vZGVJbXAKIAog
ICAgIC8vIFRoZSBnbG9iYWwgb2JqZWN0IHdoaWNoIHNob3VsZCBvd24gdGhpcyBub2RlIC0gRklY
TUU6IGRvZXMgdGhpcyBuZWVkIHRvIGJlIGlzb2xhdGVkLXdvcmxkIGF3YXJlPwogICAgIFdlYkNv
cmU6OkpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xv
YmFsT2JqZWN0KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKLSAgICBKU0M6OkV4
ZWNTdGF0ZSAqZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgLy8gR2V0
IChvciBjcmVhdGUpIGEgY2FjaGVkIEpTIG9iamVjdCBmb3IgdGhlIERPTSBub2RlLgotICAgIEpT
Qzo6SlNPYmplY3QgKnNjcmlwdEltcCA9IGFzT2JqZWN0KFdlYkNvcmU6OnRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBub2RlSW1wbCkpOworICAgIEpTQzo6SlNPYmplY3QgKnNjcmlwdEltcCA9IGFz
T2JqZWN0KFdlYkNvcmU6OnRvSlMoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG5vZGVJbXBs
KSk7CiAKICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gZnJhbWUt
PnNjcmlwdCgpLmJpbmRpbmdSb290T2JqZWN0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KaW5kZXggN2U1MTAwMTQyNWRkYzUwN2YwMDM4
ZTc5OTc3ZmUwYjFhMjAxNTJlMi4uMWQzMTBiOGVlYWRkMmNmMDE2ZTkxOGQyMWU0OTc3YjFiZjRj
ZWY5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJh
dGlvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlv
bnMubW0KQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFzLmgi
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU0NKU1ZhbHVlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVj
dElubGluZXMuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Eb2N1bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgpAQCAtNzIsOSAr
NzMsOSBAQCArIChET01FbGVtZW50ICopX0RPTUVsZW1lbnRGcm9tSlNDb250ZXh0OihKU0NvbnRl
eHRSZWYpY29udGV4dCB2YWx1ZTooSlNWYWx1ZVJlZgogICAgIGlmICghdmFsdWUpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICByZXR1cm4ga2l0KEpTRWxlbWVudDo6dG9XcmFw
cGVkKGV4ZWMtPnZtKCksIHRvSlMoZXhlYywgdmFsdWUpKSk7CisgICAgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QgPSB0b0pTKGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBraXQoSlNFbGVtZW50Ojp0b1dy
YXBwZWQobGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSkpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvSGlzdG9yeS9CYWNrRm9yd2FyZExpc3QubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9I
aXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5tbQppbmRleCBiNzA5NWE3ZGUyODY5ZjFmNmY1NGVmNTk5
ZDU4YWEzZjFkYWUyOWQ0Li5kMDU0YTFiOTRkMDAxODg0YWM0Mzg0OWExNDdlZTk2Y2QxYjM3Y2Nk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JhY2tGb3J3YXJk
TGlzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L0JhY2tGb3J3YXJk
TGlzdC5tbQpAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0Lmgi
CiAKLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VDYWNoZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQmFj
a0ZvcndhcmRDYWNoZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTgsNyAr
NTgsNyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6YWRkSXRlbShSZWY8SGlzdG9yeUl0ZW0+JiYg
bmV3SXRlbSkKICAgICAgICAgd2hpbGUgKG1fZW50cmllcy5zaXplKCkgPiB0YXJnZXRTaXplKSB7
CiAgICAgICAgICAgICBSZWY8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMudGFrZUxhc3Qo
KTsKICAgICAgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVtLnB0cigpKTsKLSAgICAgICAg
ICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKGl0ZW0pOworICAgICAgICAgICAgQmFj
a0ZvcndhcmRDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKGl0ZW0pOwogICAgICAgICB9CiAgICAg
fQogCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFJlZjxI
aXN0b3J5SXRlbT4mJiBuZXdJdGVtKQogICAgICAgICBSZWY8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBX
VEZNb3ZlKG1fZW50cmllc1swXSk7CiAgICAgICAgIG1fZW50cmllcy5yZW1vdmUoMCk7CiAgICAg
ICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVtLnB0cigpKTsKLSAgICAgICAgUGFnZUNhY2hlOjpz
aW5nbGV0b24oKS5yZW1vdmUoaXRlbSk7CisgICAgICAgIEJhY2tGb3J3YXJkQ2FjaGU6OnNpbmds
ZXRvbigpLnJlbW92ZShpdGVtKTsKICAgICAgICAgLS1tX2N1cnJlbnQ7CiAgICAgfQogCkBAIC0x
NjMsNyArMTYzLDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGludCBzaXpl
KQogICAgIHdoaWxlIChzaXplIDwgc3RhdGljX2Nhc3Q8aW50PihtX2VudHJpZXMuc2l6ZSgpKSkg
ewogICAgICAgICBSZWY8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMudGFrZUxhc3QoKTsK
ICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0ucHRyKCkpOwotICAgICAgICBQYWdlQ2Fj
aGU6OnNpbmdsZXRvbigpLnJlbW92ZShpdGVtKTsKKyAgICAgICAgQmFja0ZvcndhcmRDYWNoZTo6
c2luZ2xldG9uKCkucmVtb3ZlKGl0ZW0pOwogICAgIH0KIAogICAgIGlmICghc2l6ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0
Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3Qu
bW0KaW5kZXggZGY2MmRhOTY2Yzc5ZDNhNjNhMWZlMDYzYjEwNTAyZDgzY2Y4OTA3Yi4uMThmMDEz
YTBhODc1YmQzNmU4OTU1ODY2MzRhYjdkOGIwYThiMDJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0KKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0KQEAgLTQwLDgg
KzQwLDggQEAKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXdQ
cml2YXRlLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0JhY2tGb3J3YXJkQ2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZUNhY2hlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RocmVhZENoZWNrLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CkBAIC0zMzksNyArMzM5LDcgQEAgLSAo
dm9pZClzZXRQYWdlQ2FjaGVTaXplOihOU1VJbnRlZ2VyKXNpemUKIAogLSAoTlNVSW50ZWdlcilw
YWdlQ2FjaGVTaXplCiB7Ci0gICAgcmV0dXJuIFtjb3JlKHNlbGYpLT53ZWJWaWV3KCkgdXNlc1Bh
Z2VDYWNoZV0gPyBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1heFNpemUoKSA6IDA7
CisgICAgcmV0dXJuIFtjb3JlKHNlbGYpLT53ZWJWaWV3KCkgdXNlc1BhZ2VDYWNoZV0gPyBXZWJD
b3JlOjpCYWNrRm9yd2FyZENhY2hlOjpzaW5nbGV0b24oKS5tYXhTaXplKCkgOiAwOwogfQogCiAt
IChpbnQpYmFja0xpc3RDb3VudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
SGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3Rv
cnkvV2ViSGlzdG9yeUl0ZW0ubW0KaW5kZXggYzdjMDI3YjM0MGQwMGFjMmYwMmU4Nzk4ZjE0YTYy
YWNlNzg1OGVlZS4uYThkM2JjMjA2OGYyYzc2M2Y5NTU3ZDgxYzdmNWRkZjBmNWI3ZTA0OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1t
CkBAIC00Myw5ICs0Myw5IEBACiAjaW1wb3J0ICJXZWJQbHVnaW5Db250cm9sbGVyLmgiCiAjaW1w
b3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL0JhY2tGb3J3YXJkQ2FjaGUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvUGFnZUNhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RocmVhZENo
ZWNrLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNTk4LDkgKzU5OCw5IEBAIC0gKHZvaWQpX3NldFNjcm9sbFBv
aW50OihDR1BvaW50KXNjcm9sbFBvaW50CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZ
KQogCi0tIChCT09MKV9pc0luUGFnZUNhY2hlCistIChCT09MKV9pc0luQmFja0ZvcndhcmRDYWNo
ZQogewotICAgIHJldHVybiBjb3JlKF9wcml2YXRlKS0+aXNJblBhZ2VDYWNoZSgpOworICAgIHJl
dHVybiBjb3JlKF9wcml2YXRlKS0+aXNJbkJhY2tGb3J3YXJkQ2FjaGUoKTsKIH0KIAogLSAoQk9P
TClfaGFzQ2FjaGVkUGFnZUV4cGlyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtUHJpdmF0ZS5oCmluZGV4IDlkMGFhOGQxOGFkMDk2
MTY4MDdlZTI1MjQ5MjhmY2E2YmZmOTg1MzkuLmJhNWQ1NWNjNzQ0ZGU5NDYzNmMyNTZkZGE5OTI1
NTkxYzA5MjJlNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3Rvcnkv
V2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlz
dG9yeS9XZWJIaXN0b3J5SXRlbVByaXZhdGUuaApAQCAtNzcsNyArNzcsNyBAQCBleHRlcm4gTlNT
dHJpbmcgKldlYlZpZXdwb3J0Rml0Q292ZXJWYWx1ZTsKIC0gKHZvaWQpX3NldFNjcm9sbFBvaW50
OihDR1BvaW50KXNjcm9sbFBvaW50OwogI2VuZGlmCiAKLS0gKEJPT0wpX2lzSW5QYWdlQ2FjaGU7
CistIChCT09MKV9pc0luQmFja0ZvcndhcmRDYWNoZTsKIC0gKEJPT0wpX2hhc0NhY2hlZFBhZ2VF
eHBpcmVkOwogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNj
L1dlYkNhY2hlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDYWNoZS5tbQpp
bmRleCBiNTBiMjFjODViY2RiZjcyNTk5NDBjNDM2YjBiZTJlMzY0NDhmZmNhLi41MTM3ZTQxYzI0
MmZjYTU1YzRhMDk0YjY0MzM3M2U5ZTBhNmZlYzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9NaXNjL1dlYkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L01pc2MvV2ViQ2FjaGUubW0KQEAgLTQ2LDkgKzQ2LDkgQEAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogI2ltcG9ydCAiTWVtb3J5TWVhc3VyZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5h
bC5oIgorI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZENhY2hlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0NhY2hlZEltYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1BhZ2VDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkUnVuLmg+
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJD
b3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0
YXRpc3RpY3MubW0KaW5kZXggYzg2ODRjNDZjNWIwZDIxNTJiZTljYWMxZDc4MmM0ZTRmYjBiMDQw
Yy4uNDY2NjY1MzQyYTFlYTM5Zjc3MGI3NjA4NGI0YmIyY2MzOGU1M2JlMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC0zMyw2
ICszMyw3IEBACiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KU0xvY2suaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL01lbW9yeVN0YXRpc3Rp
Y3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQmFja0ZvcndhcmRDYWNoZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Db21tb25WTS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FjaGUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWUuaD4KQEAgLTQwLDcgKzQxLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvR2x5
cGhQYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlQ2FjaGUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUGFnZUNvbnNvbGVDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHJp
bnRDb250ZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KQEAgLTIy
NCwxMiArMjI0LDEyIEBAICsgKHZvaWQpcmV0dXJuRnJlZU1lbW9yeVRvU3lzdGVtCiAKICsgKGlu
dCljYWNoZWRQYWdlQ291bnQKIHsKLSAgICByZXR1cm4gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5w
YWdlQ291bnQoKTsKKyAgICByZXR1cm4gQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xldG9uKCkucGFn
ZUNvdW50KCk7CiB9CiAKICsgKGludCljYWNoZWRGcmFtZUNvdW50CiB7Ci0gICAgcmV0dXJuIFBh
Z2VDYWNoZTo6c2luZ2xldG9uKCkuZnJhbWVDb3VudCgpOworICAgIHJldHVybiBCYWNrRm9yd2Fy
ZENhY2hlOjpzaW5nbGV0b24oKS5mcmFtZUNvdW50KCk7CiB9CiAKIC8vIERlcHJlY2F0ZWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgKaW5kZXggZTU2YTEwM2EyOGE3NjBm
OWNlMGI5N2U3MWRkNmIyM2E2MGM1M2U4OC4uM2I0OTM0NDZjMTg4ODRkOGRlMjA0MTc2ZWVmZWYx
ODlhNzFhYTRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9I
b3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmgKQEAg
LTE0Myw5ICsxNDMsOSBAQCBjbGFzcyBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkgOiBwdWJs
aWMgUmVmQ291bnRlZDxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveAogICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSYgZGVzdFgsIGRvdWJsZSYgZGVzdFksIE5QQ29vcmRpbmF0ZVNwYWNlIGRl
c3RTcGFjZSk7CiAKICAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGNyZWF0ZUJp
bmRpbmdzSW5zdGFuY2UoUmVmPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+JiYpOwotICAgIFJl
dGFpblB0cjxOU0RhdGE+IG1hcnNoYWxWYWx1ZXMoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OkFyZ0xpc3QmIGFyZ3MpOwotICAgIHZvaWQgbWFyc2hhbFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBkYXRhX3QmIHJlc3VsdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3Qm
IHJlc3VsdExlbmd0aCk7Ci0gICAgSlNDOjpKU1ZhbHVlIGRlbWFyc2hhbFZhbHVlKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgY2hhciogdmFsdWVEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZh
bHVlTGVuZ3RoKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBtYXJzaGFsVmFsdWVzKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpOworICAgIHZvaWQgbWFyc2hh
bFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUsIGRhdGFfdCYgcmVzdWx0
RGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCYgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0M6OkpT
VmFsdWUgZGVtYXJzaGFsVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IGNoYXIqIHZh
bHVlRGF0YSwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCB2YWx1ZUxlbmd0aCk7CiAKICAgICAvLyBO
by1vcCBpZiB0aGUgdmFsdWUgZG9lcyBub3QgY29udGFpbiBhIGxvY2FsIG9iamVjdC4KICAgICB2
b2lkIHJldGFpbkxvY2FsT2JqZWN0KEpTQzo6SlNWYWx1ZSk7CkBAIC0xNjcsNyArMTY3LDcgQEAg
Y2xhc3MgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8TmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3gKICAgICB2b2lkIHByaXZhdGVCcm93c2luZ01vZGVEaWRD
aGFuZ2UoYm9vbCBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogICAgIAogICAgIHN0YXRpYyB2
b2lkIHNldEdsb2JhbEV4Y2VwdGlvbihjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHN0YXRpYyB2
b2lkIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShKU0M6OkV4ZWNTdGF0ZSopOworICAg
IHN0YXRpYyB2b2lkIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0Kik7CiAKICAgICAvLyBSZXBseSBzdHJ1Y3RzCiAgICAgc3RydWN0IFJlcGx5IHsKQEAg
LTMwNywxMCArMzA3LDEwIEBAIGNsYXNzIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eSA6IHB1
YmxpYyBSZWZDb3VudGVkPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94CiAgICAgCiAgICAgLy8g
TlBSdW50aW1lCiAKLSAgICB2b2lkIGFkZFZhbHVlVG9BcnJheShOU011dGFibGVBcnJheSAqLCBK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKTsKKyAgICB2b2lkIGFkZFZh
bHVlVG9BcnJheShOU011dGFibGVBcnJheSAqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBK
U0M6OkpTVmFsdWUgdmFsdWUpOwogICAgIAotICAgIGJvb2wgZGVtYXJzaGFsVmFsdWVGcm9tQXJy
YXkoSlNDOjpFeGVjU3RhdGUqLCBOU0FycmF5ICphcnJheSwgTlNVSW50ZWdlciYgaW5kZXgsIEpT
Qzo6SlNWYWx1ZSYgcmVzdWx0KTsKLSAgICB2b2lkIGRlbWFyc2hhbFZhbHVlcyhKU0M6OkV4ZWNT
dGF0ZSosIGRhdGFfdCB2YWx1ZXNEYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90IHZhbHVlc0xl
bmd0aCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYgcmVzdWx0KTsKKyAgICBib29sIGRlbWFy
c2hhbFZhbHVlRnJvbUFycmF5KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBOU0FycmF5ICphcnJheSwg
TlNVSW50ZWdlciYgaW5kZXgsIEpTQzo6SlNWYWx1ZSYgcmVzdWx0KTsKKyAgICB2b2lkIGRlbWFy
c2hhbFZhbHVlcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgZGF0YV90IHZhbHVlc0RhdGEsIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QgdmFsdWVzTGVuZ3RoLCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
JiByZXN1bHQpOwogCiAgICAgY2xhc3MgTG9jYWxPYmplY3RNYXAgewogICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShMb2NhbE9iamVjdE1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHkubW0KaW5kZXggOWZiMzY4MWQ4ODMzNGVhZmQ1YzYxMjk1ZGI1MWM0ODhmNTEx
YTgyZS4uMzAzMmFmYTI4MGZhOTI3ZDg3NzMyMGViODFjYmQ5MDcxMDI1NTk3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9z
dGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQpAQCAtNDQsNiArNDQsNyBAQAogI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQ2F0Y2hTY29wZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQ29tcGxldGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRXJyb3IuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgogI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNMb2NrLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5h
bWVBcnJheS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvU291cmNlQ29kZS5oPgpAQCAtODg1
LDEzICs4ODYsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRl
KHVpbnQzMl90IG9iamVjdElELCBjb25zdCBTdHJpbmcmIHNjcmkKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGds
b2JhbE9iamVjdCh2bSwgZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgp
KSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAK
ICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKGFsbG93UG9wdXBzID8g
T3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+KFByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSkgOiBXVEY6Om51bGxvcHQpOwogICAgIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFs
dWF0ZShleGVjLCBKU0M6Om1ha2VTb3VyY2Uoc2NyaXB0LCB7IH0pKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTQzo6ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LmdldCgpLCBKU0M6Om1ha2VTb3VyY2Uo
c2NyaXB0LCB7IH0pKTsKICAgICAKLSAgICBtYXJzaGFsVmFsdWUoZXhlYywgcmVzdWx0LCByZXN1
bHREYXRhLCByZXN1bHRMZW5ndGgpOworICAgIG1hcnNoYWxWYWx1ZShnbG9iYWxPYmplY3QuZ2V0
KCksIHJlc3VsdCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtOTE4LDIwICs5MTgsMjAgQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZSh1aW50MzJfdCBvYmplY3RJRCwg
Y29uc3QgSWRlbnRpZmllciYgbWUKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1l
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3Jp
cHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9
IG9iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIG1ldGhvZE5hbWUpOwogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodm0sIGZ1
bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0
OwotICAgIGRlbWFyc2hhbFZhbHVlcyhleGVjLCBhcmd1bWVudHNEYXRhLCBhcmd1bWVudHNMZW5n
dGgsIGFyZ0xpc3QpOworICAgIGRlbWFyc2hhbFZhbHVlcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudHNEYXRhLCBhcmd1bWVudHNMZW5ndGgsIGFyZ0xpc3QpOwogICAgIFJFTEVBU0VfQVNT
RVJUKCFhcmdMaXN0Lmhhc092ZXJmbG93ZWQoKSk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGFyZ0xpc3QpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7CiAgICAgICAgIAotICAgIG1hcnNo
YWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBtYXJz
aGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExl
bmd0aCk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTk1NSwxOSArOTU1LDE5IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpp
bnZva2VEZWZhdWx0KHVpbnQzMl90IG9iamVjdElELCBkYXRhX3QgYXJndW1lCiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBvYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7CiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwotICAgIGRlbWFyc2hhbFZhbHVlcyhl
eGVjLCBhcmd1bWVudHNEYXRhLCBhcmd1bWVudHNMZW5ndGgsIGFyZ0xpc3QpOworICAgIGRlbWFy
c2hhbFZhbHVlcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudHNEYXRhLCBhcmd1bWVudHNM
ZW5ndGgsIGFyZ0xpc3QpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFhcmdMaXN0Lmhhc092ZXJmbG93
ZWQoKSk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChleGVjLCBvYmplY3QsIGNhbGxUeXBl
LCBjYWxsRGF0YSwgb2JqZWN0LCBhcmdMaXN0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBvYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBh
cmdMaXN0KTsKICAgICAKLSAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEs
IHJlc3VsdExlbmd0aCk7CisgICAgbWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC05OTEsNyArOTkxLDcgQEAgYm9vbCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVjdCh1aW50MzJfdCBvYmplY3RJRCwgZGF0YV90
IGFyZ3VtZW50c0QKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUt
PnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAg
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0
RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0Q29uc3RydWN0RGF0YShvYmplY3QsIGNvbnN0cnVjdERhdGEpOwpAQCAtOTk5
LDEyICs5OTksMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVj
dCh1aW50MzJfdCBvYmplY3RJRCwgZGF0YV90IGFyZ3VtZW50c0QKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKLSAgICBkZW1hcnNoYWxW
YWx1ZXMoZXhlYywgYXJndW1lbnRzRGF0YSwgYXJndW1lbnRzTGVuZ3RoLCBhcmdMaXN0KTsKKyAg
ICBkZW1hcnNoYWxWYWx1ZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnRzRGF0YSwgYXJn
dW1lbnRzTGVuZ3RoLCBhcmdMaXN0KTsKICAgICBSRUxFQVNFX0FTU0VSVCghYXJnTGlzdC5oYXNP
dmVyZmxvd2VkKCkpOwogCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTQzo6Y29uc3RydWN0KGV4ZWMs
IG9iamVjdCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTQzo6Y29uc3RydWN0KGxleGljYWxHbG9iYWxPYmplY3QsIG9iamVjdCwg
Y29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCk7CiAgICAgCi0gICAgbWFyc2hh
bFZhbHVlKGV4ZWMsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOworICAgIG1hcnNo
YWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVu
Z3RoKTsKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMTAyOCwxMCArMTAyOCwxMCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
Z2V0UHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IElkZW50aWZpZQogICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0
KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVj
dC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUpOwogICAgIAotICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0
RGF0YSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBtYXJzaGFsVmFsdWUobGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CiAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwNTIsMTAgKzEwNTIsMTAgQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFByb3BlcnR5KHVpbnQzMl90IG9iamVj
dElELCB1bnNpZ25lZCBwcm9wZXIKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUp
OworICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlw
dCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gb2Jq
ZWN0LT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAKLSAgICBt
YXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CisgICAg
bWFyc2hhbFZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1
bHRMZW5ndGgpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC0xMDc5LDExICsxMDc5LDExIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpzZXRQcm9wZXJ0eSh1aW50MzJfdCBvYmplY3RJRCwgY29uc3QgSWRlbnRpZmllCiAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxP
YmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSk7CiAKLSAgICBKU1ZhbHVlIHZhbHVlID0gZGVtYXJzaGFsVmFsdWUoZXhlYywgdmFs
dWVEYXRhLCB2YWx1ZUxlbmd0aCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZhbHVl
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KG9iamVjdCk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnB1
dChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIG9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5wdXQob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMTEwOCwxMCArMTEwOCwxMCBAQCBib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvcGVydHkodWludDMyX3Qgb2JqZWN0SUQsIHVuc2lnbmVk
IHByb3BlcgogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2Ny
aXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFs
T2JqZWN0KHBsdWdpbldvcmxkKCkpOwogICAgIAotICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNo
YWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKLSAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IGZhbHNlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gZGVtYXJzaGFsVmFsdWUobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0aCk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPnB1dEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBmYWxzZSk7CiAgICAgCiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTExMzYsMTMgKzExMzYsMTMgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OnJlbW92ZVByb3BlcnR5KHVpbnQzMl90IG9iamVjdElELCBjb25zdCBJ
ZGVudGkKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlw
dCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIGlmICgh
b2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0
KHBsdWdpbldvcmxkKCkpOworICAgIGlmICghb2JqZWN0LT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsK
KyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMTY2LDEzICsxMTY2LDEzIEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSh1aW50MzJfdCBvYmplY3RJ
RCwgdW5zaWduZWQgcHJvCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZy
YW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsK
LSAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgeworICAg
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKKyAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHko
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkgewogICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIG9i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwog
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMTk2
LDggKzExOTYsOCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzUHJvcGVy
dHkodWludDMyX3Qgb2JqZWN0SUQsIGNvbnN0IElkZW50aWZpZQogICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgYm9vbCByZXN1bHQgPSBvYmplY3QtPmhhc1Byb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpOwor
ICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtMTIyMiw4ICsxMjIyLDggQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6Omhhc1Byb3BlcnR5KHVpbnQzMl90IG9iamVjdElELCB1bnNpZ25lZCBwcm9wZXIK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIGJvb2wgcmVzdWx0
ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVj
dChwbHVnaW5Xb3JsZCgpKTsKKyAgICBib29sIHJlc3VsdCA9IG9iamVjdC0+aGFzUHJvcGVydHko
bGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEyNDgsOCArMTI0OCw4IEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXRob2QodWludDMyX3Qgb2JqZWN0SUQs
IGNvbnN0IElkZW50aWZpZXImCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMo
KTsKLSAgICBKU1ZhbHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5n
bG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CisgICAgSlNWYWx1ZSBmdW5jID0gb2JqZWN0LT5n
ZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgbWV0aG9kTmFtZSk7CiAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKIH0KQEAgLTEyNzMsMTAg
KzEyNzMsMTAgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSh1
aW50MzJfdCBvYmplY3RJRCwgZGF0YV90JiByZXN1bHREYXQKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAg
RXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKICAKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUoKSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldFByb3Bl
cnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUoKSk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGFycmF5ID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMuc2l6ZSgpOyBpKyspIHsKQEAgLTEzMTYsMjAgKzEz
MTYsMjAgQEAgc3RhdGljIGJvb2wgZ2V0T2JqZWN0SUQoTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5KiBwbHVnaW5JbnN0YW5jZVByb3h5LCBKU09iamUKICAgICByZXR1cm4gdHJ1ZTsKIH0KICAg
ICAKLXZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkoTlNN
dXRhYmxlQXJyYXkgKmFycmF5LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit2b2lk
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KE5TTXV0YWJsZUFy
cmF5ICphcnJheSwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIGlm
ICh2YWx1ZS5pc1N0cmluZygpKSB7CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6U3RyaW5nVmFsdWVUeXBlXV07Ci0gICAgICAgIFthcnJheSBhZGRPYmpl
Y3Q6YXNTdHJpbmcodmFsdWUpLT52YWx1ZShleGVjKV07CisgICAgICAgIFthcnJheSBhZGRPYmpl
Y3Q6YXNTdHJpbmcodmFsdWUpLT52YWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0KV07CiAgICAgfSBl
bHNlIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6RG91YmxlVmFsdWVUeXBlXV07Ci0gICAgICAgIFthcnJheSBh
ZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dmFsdWUudG9OdW1iZXIoZXhlYyld
XTsKKyAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2
YWx1ZS50b051bWJlcihsZXhpY2FsR2xvYmFsT2JqZWN0KV1dOwogICAgIH0gZWxzZSBpZiAodmFs
dWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpCb29sVmFsdWVUeXBlXV07Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05T
TnVtYmVyIG51bWJlcldpdGhCb29sOnZhbHVlLnRvQm9vbGVhbihleGVjKV1dOworICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDp2YWx1ZS50b0Jvb2xlYW4o
bGV4aWNhbEdsb2JhbE9iamVjdCldXTsKICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVsbCgpKQog
ICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Ok51bGxWYWx1
ZVR5cGVdXTsKICAgICBlbHNlIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CkBAIC0xMzQ2LDExICsx
MzQ2LDExIEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJy
YXkoTlNNdXRhYmxlQXJyYXkgKmFycmF5LCBFeGVjU3RhCiAgICAgICAgIFthcnJheSBhZGRPYmpl
Y3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Vm9pZFZhbHVlVHlwZV1dOwogfQogCi12b2lkIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bWFyc2hhbFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgZGF0YV90JiByZXN1bHREYXRhLCBtYWNoX21zZ190eXBlX251bWJlcl90
JiByZXN1bHRMZW5ndGgpCit2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bWFyc2hh
bFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
LCBkYXRhX3QmIHJlc3VsdERhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QmIHJlc3VsdExlbmd0
aCkKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGFycmF5ID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgCi0gICAgYWRkVmFsdWVUb0FycmF5KGFy
cmF5LmdldCgpLCBleGVjLCB2YWx1ZSk7CisgICAgYWRkVmFsdWVUb0FycmF5KGFycmF5LmdldCgp
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAKICAgICBOU0RhdGEgKmRhdGEgPSBbTlNQ
cm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFXaXRoUHJvcGVydHlMaXN0OmFycmF5LmdldCgp
IGZvcm1hdDpOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wIG9wdGlvbnM6MCBlcnJvcjpu
dWxscHRyXTsKICAgICBBU1NFUlQoZGF0YSk7CkBAIC0xMzYxLDEyICsxMzYxLDEyIEBAIHZvaWQg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjptYXJzaGFsVmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlLCBkCiAgICAgbWVtY3B5KHJlc3VsdERhdGEsIGRhdGEuYnl0ZXMsIHJl
c3VsdExlbmd0aCk7CiB9CiAKLVJldGFpblB0cjxOU0RhdGE+IE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6bWFyc2hhbFZhbHVlcyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitSZXRhaW5QdHI8TlNEYXRhPiBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1hcnNo
YWxWYWx1ZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheSA9IGFkb3B0
TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyBpKyspCi0gICAgICAgIGFkZFZhbHVlVG9BcnJheShhcnJh
eS5nZXQoKSwgZXhlYywgYXJncy5hdChpKSk7CisgICAgICAgIGFkZFZhbHVlVG9BcnJheShhcnJh
eS5nZXQoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJncy5hdChpKSk7CiAKICAgICBOU0RhdGEg
KmRhdGEgPSBbTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIGRhdGFXaXRoUHJvcGVydHlMaXN0
OmFycmF5LmdldCgpIGZvcm1hdDpOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wIG9wdGlv
bnM6MCBlcnJvcjpudWxscHRyXTsKICAgICBBU1NFUlQoZGF0YSk7CkBAIC0xMzc0LDcgKzEzNzQs
NyBAQCBSZXRhaW5QdHI8TlNEYXRhPiBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1hcnNo
YWxWYWx1ZXMoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgIHJldHVybiBkYXRhOwogfSAgICAKIAot
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlbWFyc2hhbFZhbHVlRnJvbUFycmF5
KEV4ZWNTdGF0ZSogZXhlYywgTlNBcnJheSAqYXJyYXksIE5TVUludGVnZXImIGluZGV4LCBKU1Zh
bHVlJiByZXN1bHQpCitib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJzaGFs
VmFsdWVGcm9tQXJyYXkoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIE5TQXJy
YXkgKmFycmF5LCBOU1VJbnRlZ2VyJiBpbmRleCwgSlNWYWx1ZSYgcmVzdWx0KQogewogICAgIGlm
IChpbmRleCA9PSBbYXJyYXkgY291bnRdKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzk2
LDcgKzEzOTYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJzaGFs
VmFsdWVGcm9tQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBOU0FycgogICAgICAgICBjYXNlIFN0cmlu
Z1ZhbHVlVHlwZTogewogICAgICAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFthcnJheSBvYmpl
Y3RBdEluZGV4OmluZGV4KytdOwogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHQgPSBq
c1N0cmluZyhleGVjLT52bSgpLCBTdHJpbmcoc3RyaW5nKSk7CisgICAgICAgICAgICByZXN1bHQg
PSBqc1N0cmluZyhsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBTdHJpbmcoc3RyaW5nKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEpTT2JqZWN0
VmFsdWVUeXBlOiB7CkBAIC0xNDE3LDcgKzE0MTcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6ZGVtYXJzaGFsVmFsdWVGcm9tQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBOU0Fy
cgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgYXV0byByb290
T2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmNyZWF0ZVJvb3RPYmplY3QoKF9fYnJpZGdlIHZvaWQq
KW1fcGx1Z2luVmlldyk7Ci0gICAgICAgICAgICByZXN1bHQgPSBQcm94eUluc3RhbmNlOjpjcmVh
dGUoV1RGTW92ZShyb290T2JqZWN0KSwgdGhpcywgb2JqZWN0SUQpLT5jcmVhdGVSdW50aW1lT2Jq
ZWN0KGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0ID0gUHJveHlJbnN0YW5jZTo6Y3JlYXRlKFdU
Rk1vdmUocm9vdE9iamVjdCksIHRoaXMsIG9iamVjdElEKS0+Y3JlYXRlUnVudGltZU9iamVjdChs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNDI2LDcgKzE0MjYsNyBAQCBib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJzaGFsVmFsdWVGcm9tQXJyYXkoRXhlY1N0YXRlKiBleGVj
LCBOU0FycgogICAgIH0KIH0KIAotSlNWYWx1ZSBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmRlbWFyc2hhbFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgY2hhciogdmFsdWVEYXRhLCBt
YWNoX21zZ190eXBlX251bWJlcl90IHZhbHVlTGVuZ3RoKQorSlNWYWx1ZSBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmRlbWFyc2hhbFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjb25zdCBjaGFyKiB2YWx1ZURhdGEsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3Qg
dmFsdWVMZW5ndGgpCiB7CiAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6KHZvaWQqKXZhbHVlRGF0YSBsZW5ndGg6
dmFsdWVMZW5ndGggZnJlZVdoZW5Eb25lOk5PXSk7CiAKQEAgLTE0MzQsMTMgKzE0MzQsMTMgQEAg
SlNWYWx1ZSBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlbWFyc2hhbFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgY2hhcioKIAogICAgIE5TVUludGVnZXIgcG9zaXRpb24gPSAwOwog
ICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgYm9vbCByZXN1bHQgPSBkZW1hcnNoYWxWYWx1ZUZyb21B
cnJheShleGVjLCBhcnJheSwgcG9zaXRpb24sIHZhbHVlKTsKKyAgICBib29sIHJlc3VsdCA9IGRl
bWFyc2hhbFZhbHVlRnJvbUFycmF5KGxleGljYWxHbG9iYWxPYmplY3QsIGFycmF5LCBwb3NpdGlv
biwgdmFsdWUpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwogCiAgICAgcmV0
dXJuIHZhbHVlOwogfQogCi12b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZGVtYXJz
aGFsVmFsdWVzKEV4ZWNTdGF0ZSogZXhlYywgZGF0YV90IHZhbHVlc0RhdGEsIG1hY2hfbXNnX3R5
cGVfbnVtYmVyX3QgdmFsdWVzTGVuZ3RoLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgcmVzdWx0KQor
dm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmRlbWFyc2hhbFZhbHVlcyhKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgZGF0YV90IHZhbHVlc0RhdGEsIG1hY2hfbXNn
X3R5cGVfbnVtYmVyX3QgdmFsdWVzTGVuZ3RoLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgcmVzdWx0
KQogewogICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9j
XSBpbml0V2l0aEJ5dGVzTm9Db3B5OnZhbHVlc0RhdGEgbGVuZ3RoOnZhbHVlc0xlbmd0aCBmcmVl
V2hlbkRvbmU6Tk9dKTsKIApAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmRlbWFyc2hhbFZhbHVlcyhFeGVjU3RhdGUqIGV4ZWMsIGRhdGFfdCB2
YWx1ZXMKIAogICAgIE5TVUludGVnZXIgcG9zaXRpb24gPSAwOwogICAgIEpTVmFsdWUgdmFsdWU7
Ci0gICAgd2hpbGUgKGRlbWFyc2hhbFZhbHVlRnJvbUFycmF5KGV4ZWMsIGFycmF5LCBwb3NpdGlv
biwgdmFsdWUpKQorICAgIHdoaWxlIChkZW1hcnNoYWxWYWx1ZUZyb21BcnJheShsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcnJheSwgcG9zaXRpb24sIHZhbHVlKSkKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh2YWx1ZSk7CiB9CiAKQEAgLTE2NzksOSArMTY3OSw5IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpzZXRHbG9iYWxFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBleGNlcHRpb24p
CiAgICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBleGNlcHRpb247CiB9CiAKLXZvaWQgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUo
RXhlY1N0YXRlKiBleGVjKQordm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgaWYgKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKQpAQCAtMTY4
OSw3ICsxNjg5LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMKIAogICAgIHsKICAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOwotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKTsKKyAgICAgICAg
dGhyb3dFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7CiAgICAgfQogCiAg
ICAgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkgPSBTdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UuaCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UuaAppbmRleCAz
YjAyMjBiMjYxNzUxMDNmZThkNzExODJiMzE2NWUzZTU2MDUyNzM4Li45NGQ5ZjBkZDIzNmE1YzYz
Y2U5NWYwMmM5MTA1ZTIxOGFlZTIwYzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5oCkBAIC00OCw4ICs0OCw4IEBA
IGNsYXNzIFByb3h5SW5zdGFuY2UgOiBwdWJsaWMgSlNDOjpCaW5kaW5nczo6SW5zdGFuY2Ugewog
ICAgIEpTQzo6QmluZGluZ3M6Ok1ldGhvZCogbWV0aG9kTmFtZWQoSlNDOjpQcm9wZXJ0eU5hbWUp
OwogICAgIEpTQzo6QmluZGluZ3M6OkZpZWxkKiBmaWVsZE5hbWVkKEpTQzo6UHJvcGVydHlOYW1l
KTsKIAotICAgIEpTQzo6SlNWYWx1ZSBmaWVsZFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
SlNDOjpCaW5kaW5nczo6RmllbGQqKSBjb25zdDsKLSAgICBib29sIHNldEZpZWxkVmFsdWUoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkJpbmRpbmdzOjpGaWVsZCosIEpTQzo6SlNWYWx1ZSkg
Y29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIGZpZWxkVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCos
IGNvbnN0IEpTQzo6QmluZGluZ3M6OkZpZWxkKikgY29uc3Q7CisgICAgYm9vbCBzZXRGaWVsZFZh
bHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkJpbmRpbmdzOjpGaWVsZCosIEpT
Qzo6SlNWYWx1ZSkgY29uc3Q7CiAgICAgCiAKICAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHkqIGluc3RhbmNlUHJveHkoKSB7IHJldHVybiBtX2luc3RhbmNlUHJveHk7IH0KQEAgLTYxLDI5
ICs2MSwyOSBAQCBjbGFzcyBQcm94eUluc3RhbmNlIDogcHVibGljIEpTQzo6QmluZGluZ3M6Oklu
c3RhbmNlIHsKIHByaXZhdGU6CiAgICAgUHJveHlJbnN0YW5jZShSZWY8SlNDOjpCaW5kaW5nczo6
Um9vdE9iamVjdD4mJiwgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5KiwgdWludDMyX3Qgb2Jq
ZWN0SUQpOwogCi0gICAgdmlydHVhbCBKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0KiBuZXdS
dW50aW1lT2JqZWN0KEpTQzo6RXhlY1N0YXRlKik7CisgICAgdmlydHVhbCBKU0M6OkJpbmRpbmdz
OjpSdW50aW1lT2JqZWN0KiBuZXdSdW50aW1lT2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqKTsK
IAogICAgIHZpcnR1YWwgSlNDOjpCaW5kaW5nczo6Q2xhc3MqIGdldENsYXNzKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBnZXRNZXRob2QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSk7Ci0gICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgaW52b2tlTWV0aG9kKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpSdW50aW1lTWV0aG9kKik7CisgICAgdmlydHVhbCBKU0M6OkpT
VmFsdWUgZ2V0TWV0aG9kKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSk7
CisgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgaW52b2tlTWV0aG9kKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkNhbGxGcmFtZSosIEpTQzo6UnVudGltZU1ldGhvZCopOwogCiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
SlNDOjpKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKKyAgICB2
aXJ0dWFsIEpTQzo6SlNWYWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkNhbGxGcmFtZSopOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29uc3Ry
dWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgaW52b2tlQ29uc3RydWN0KEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CisgICAgdmlydHVhbCBKU0M6OkpT
VmFsdWUgaW52b2tlQ29uc3RydWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFt
ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwogCi0gICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgZGVm
YXVsdFZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSB2YWx1ZU9mKEpTQzo6RXhlY1N0YXRlKikg
Y29uc3Q7CisgICAgdmlydHVhbCBKU0M6OkpTVmFsdWUgZGVmYXVsdFZhbHVlKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OworICAgIHZpcnR1
YWwgSlNDOjpKU1ZhbHVlIHZhbHVlT2YoSlNDOjpKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAg
IAotICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYpOworICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVz
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jik7CiAKLSAgICBK
U0M6OkpTVmFsdWUgc3RyaW5nVmFsdWUoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU0M6
OkpTVmFsdWUgbnVtYmVyVmFsdWUoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBKU0M6OkpT
VmFsdWUgc3RyaW5nVmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIEpTQzo6
SlNWYWx1ZSBudW1iZXJWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgSlND
OjpKU1ZhbHVlIGJvb2xlYW5WYWx1ZSgpIGNvbnN0OwogICAgIAotICAgIEpTQzo6SlNWYWx1ZSBp
bnZva2UoSlNDOjpFeGVjU3RhdGUqLCBJbnZva2VUeXBlLCB1aW50NjRfdCBpZGVudGlmaWVyLCBj
b25zdCBKU0M6OkFyZ0xpc3QmKTsKKyAgICBKU0M6OkpTVmFsdWUgaW52b2tlKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSosIEludm9rZVR5cGUsIHVpbnQ2NF90IGlkZW50aWZp
ZXIsIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwogICAgIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgogICAgIHN0ZDo6dW5pcXVlX3B0cjxUPiB3YWl0Rm9yUmVwbHkodWludDMyX3QgcmVxdWVzdElE
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0
ZWQvUHJveHlJbnN0YW5jZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9z
dGVkL1Byb3h5SW5zdGFuY2UubW0KaW5kZXggOTA4N2M3OTFkZWQ2NDU2MTQ5ZjQ3ODVlMDM1OGI2
NjRiNWRhODllZS4uNDlhMzQ4ZmI4ZjFjOTQ5Y2I5NmYyZmEwNjRmNmZhOWJiZmY3NmMyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0
YW5jZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94
eUluc3RhbmNlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJQcm94eVJ1bnRpbWVPYmpl
Y3QuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Vycm9yLmg+CiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNH
bG9iYWxPYmplY3RJbmxpbmVzLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5h
bWVBcnJheS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db21tb25WTS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9JZGVudGlmaWVyUmVwLmg+CkBAIC04MSwyMCArODIsMjAgQEAgcHVibGljOgogICAgIHVpbnQ2
NF90IHNlcnZlcklkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3NlcnZlcklkZW50aWZpZXI7
IH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhl
Y1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0VmFs
dWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1ZSkgY29uc3Q7
CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgSW5zdGFuY2UqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWVUb0luc3Rh
bmNlKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdDsKICAg
ICAKICAgICB1aW50NjRfdCBtX3NlcnZlcklkZW50aWZpZXI7CiB9OwogCi1KU1ZhbHVlIFByb3h5
RmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2Uq
IGluc3RhbmNlKSBjb25zdAorSlNWYWx1ZSBQcm94eUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSW5zdGFuY2UqIGluc3Rh
bmNlKSBjb25zdAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQcm94eUluc3RhbmNl
Kj4oaW5zdGFuY2UpLT5maWVsZFZhbHVlKGV4ZWMsIHRoaXMpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBQcm94eUluc3RhbmNlKj4oaW5zdGFuY2UpLT5maWVsZFZhbHVlKGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXMpOwogfQogICAgIAotYm9vbCBQcm94eUZpZWxkOjpzZXRWYWx1ZVRv
SW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdGFuY2UsIEpTVmFs
dWUgdmFsdWUpIGNvbnN0Citib29sIFByb3h5RmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSW5zdGFuY2UqIGluc3RhbmNl
LCBKU1ZhbHVlIHZhbHVlKSBjb25zdAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQ
cm94eUluc3RhbmNlKj4oaW5zdGFuY2UpLT5zZXRGaWVsZFZhbHVlKGV4ZWMsIHRoaXMsIHZhbHVl
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJveHlJbnN0YW5jZSo+KGluc3RhbmNl
KS0+c2V0RmllbGRWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzLCB2YWx1ZSk7CiB9CiAK
IGNsYXNzIFByb3h5TWV0aG9kIDogcHVibGljIEpTQzo6QmluZGluZ3M6Ok1ldGhvZCB7CkBAIC0x
MzAsMTAgKzEzMSwxMCBAQCBQcm94eUluc3RhbmNlOjp+UHJveHlJbnN0YW5jZSgpCiAgICAgaW52
YWxpZGF0ZSgpOwogfQogICAgIAotUnVudGltZU9iamVjdCogUHJveHlJbnN0YW5jZTo6bmV3UnVu
dGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCitSdW50aW1lT2JqZWN0KiBQcm94eUluc3RhbmNl
OjpuZXdSdW50aW1lT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQog
ewogICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3Rv
dHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QuCi0gICAgcmV0dXJuIFByb3h5UnVu
dGltZU9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01T
dHJ1Y3R1cmU8UHJveHlSdW50aW1lT2JqZWN0PihleGVjKSwgKnRoaXMpOworICAgIHJldHVybiBQ
cm94eVJ1bnRpbWVPYmplY3Q6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBXZWJD
b3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFByb3h5UnVudGltZU9iamVjdD4obGV4aWNh
bEdsb2JhbE9iamVjdCksICp0aGlzKTsKIH0KIAogSlNDOjpCaW5kaW5nczo6Q2xhc3MqIFByb3h5
SW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKQEAgLTE0MSwxMiArMTQyLDEyIEBAIEpTQzo6Qmlu
ZGluZ3M6OkNsYXNzKiBQcm94eUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiAgICAgcmV0dXJu
IHByb3h5Q2xhc3MoKTsKIH0KIAotSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2UoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEludm9rZVR5cGUgdHlwZSwgdWludDY0X3QgaWRlbnRpZmllciwgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEludm9rZVR5cGUgdHlwZSwgdWludDY0X3QgaWRlbnRpZmllciwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKLSAgICBSZXRhaW5QdHI8TlNEYXRhPiBhcmd1bWVudHMobV9pbnN0YW5jZVBy
b3h5LT5tYXJzaGFsVmFsdWVzKGV4ZWMsIGFyZ3MpKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBh
cmd1bWVudHMobV9pbnN0YW5jZVByb3h5LT5tYXJzaGFsVmFsdWVzKGxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3MpKTsKIAogICAgIHVpbnQzMl90IHJlcXVlc3RJRCA9IG1faW5zdGFuY2VQcm94eS0+
bmV4dFJlcXVlc3RJRCgpOwogCkBAIC0xNjIsNyArMTYzLDcgQEAgSlNWYWx1ZSBQcm94eUluc3Rh
bmNlOjppbnZva2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEludm9rZVR5cGUgdHlwZSwgdWludDY0
X3QgaWQKICAgICB9CiAgICAgCiAgICAgYXV0byByZXBseSA9IHdhaXRGb3JSZXBseTxOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OkJvb2xlYW5BbmREYXRhUmVwbHk+KHJlcXVlc3RJRCk7Ci0g
ICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVj
U3RhdGUoZXhlYyk7CisgICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xvYmFs
RXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKICAgICBpZiAobV9p
bnN0YW5jZVByb3h5KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzLnNp
emUoKTsgaSsrKQpAQCAtMTcyLDE5ICsxNzMsMTkgQEAgSlNWYWx1ZSBQcm94eUluc3RhbmNlOjpp
bnZva2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEludm9rZVR5cGUgdHlwZSwgdWludDY0X3QgaWQK
ICAgICBpZiAoIXJlcGx5IHx8ICFyZXBseS0+bV9yZXR1cm5WYWx1ZSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgcmV0dXJuIG1faW5zdGFuY2VQcm94eS0+ZGVtYXJz
aGFsVmFsdWUoZXhlYywgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihyZXBseS0+bV9yZXN1bHQuZ2V0KCkpKSksIENGRGF0
YUdldExlbmd0aChyZXBseS0+bV9yZXN1bHQuZ2V0KCkpKTsKKyAgICByZXR1cm4gbV9pbnN0YW5j
ZVByb3h5LT5kZW1hcnNoYWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCByZWludGVycHJldF9j
YXN0PGNoYXIqPihjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKHJl
cGx5LT5tX3Jlc3VsdC5nZXQoKSkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKHJlcGx5LT5tX3Jlc3VsdC5n
ZXQoKSkpOwogfQogCiBjbGFzcyBQcm94eVJ1bnRpbWVNZXRob2QgOiBwdWJsaWMgUnVudGltZU1l
dGhvZCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBSdW50aW1lTWV0aG9kIEJhc2U7CiAKLSAgICBz
dGF0aWMgUHJveHlSdW50aW1lTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEJpbmRpbmdzOjpNZXRo
b2QqIG1ldGhvZCkKKyAgICBzdGF0aWMgUHJveHlSdW50aW1lTWV0aG9kKiBjcmVhdGUoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZCogbWV0aG9kKQogICAgIHsK
ICAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICAvLyBGSVhNRTog
ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3
cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIGV4ZWMtdm0oKSBpcyBhbHNvIGxpa2VseSB3
cm9uZy4KLSAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBkZXByZWNhdGVkR2V0RE9N
U3RydWN0dXJlPFByb3h5UnVudGltZU1ldGhvZD4oZXhlYyk7CisgICAgICAgIC8vIGxleGljYWxH
bG9iYWxPYmplY3Qtdm0oKSBpcyBhbHNvIGxpa2VseSB3cm9uZy4KKyAgICAgICAgU3RydWN0dXJl
KiBkb21TdHJ1Y3R1cmUgPSBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFByb3h5UnVudGltZU1l
dGhvZD4obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIFByb3h5UnVudGltZU1ldGhvZCog
cnVudGltZU1ldGhvZCA9IG5ldyAoYWxsb2NhdGVDZWxsPFByb3h5UnVudGltZU1ldGhvZD4odm0u
aGVhcCkpIFByb3h5UnVudGltZU1ldGhvZChnbG9iYWxPYmplY3QsIGRvbVN0cnVjdHVyZSwgbWV0
aG9kKTsKICAgICAgICAgcnVudGltZU1ldGhvZC0+ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOwog
ICAgICAgICByZXR1cm4gcnVudGltZU1ldGhvZDsKQEAgLTIxMiwyNCArMjEzLDI0IEBAIHByaXZh
dGU6CiAKIGNvbnN0IENsYXNzSW5mbyBQcm94eVJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIlBy
b3h5UnVudGltZU1ldGhvZCIsICZSdW50aW1lTWV0aG9kOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoUHJveHlSdW50aW1lTWV0aG9kKSB9OwogCi1KU1ZhbHVl
IFByb3h5SW5zdGFuY2U6OmdldE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKK0pTVmFsdWUgUHJveHlJbnN0YW5jZTo6Z2V0TWV0aG9kKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiB7CiAgICAgTWV0aG9kKiBtZXRob2QgPSBnZXRDbGFzcygpLT5tZXRob2ROYW1lZChw
cm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBQcm94eVJ1bnRpbWVNZXRob2Q6OmNyZWF0
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCksIG1ldGhvZCk7CisgICAgcmV0dXJuIFByb3h5UnVudGltZU1ldGhvZDo6Y3JlYXRlKGxl
eGljYWxHbG9iYWxPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZS5wdWJs
aWNOYW1lKCksIG1ldGhvZCk7CiB9CiAKLUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlTWV0
aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQor
SlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VNZXRob2QoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTQzo6UnVudGltZU1l
dGhvZCogcnVudGltZU1ldGhvZCkKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+
aW5oZXJpdHM8UHJveHlSdW50aW1lTWV0aG9kPih2bSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1wbHVnLWluIG1ldGhv
ZCBvbiBwbHVnLWluIG9iamVjdC4iX3MpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJBdHRlbXB0IHRvIGludm9rZSBub24tcGx1Zy1p
biBtZXRob2Qgb24gcGx1Zy1pbiBvYmplY3QuIl9zKTsKIAogICAgIFByb3h5TWV0aG9kKiBtZXRo
b2QgPSBzdGF0aWNfY2FzdDxQcm94eU1ldGhvZCo+KHJ1bnRpbWVNZXRob2QtPm1ldGhvZCgpKTsK
ICAgICBBU1NFUlQobWV0aG9kKTsKIAotICAgIHJldHVybiBpbnZva2UoZXhlYywgSW52b2tlLCBt
ZXRob2QtPnNlcnZlcklkZW50aWZpZXIoKSwgQXJnTGlzdChleGVjKSk7CisgICAgcmV0dXJuIGlu
dm9rZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIEludm9rZSwgbWV0aG9kLT5zZXJ2
ZXJJZGVudGlmaWVyKCksIEFyZ0xpc3QoY2FsbEZyYW1lKSk7CiB9CiAKIGJvb2wgUHJveHlJbnN0
YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3QKQEAgLTI0Niw5ICsyNDcs
OSBAQCBib29sIFByb3h5SW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNv
bnN0CiAgICAgcmV0dXJuIHJlcGx5ICYmIHJlcGx5LT5tX3Jlc3VsdDsKIH0KIAotSlNWYWx1ZSBQ
cm94eUluc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKK0pTVmFs
dWUgUHJveHlJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGlu
dm9rZShleGVjLCBJbnZva2VEZWZhdWx0LCAwLCBBcmdMaXN0KGV4ZWMpKTsKKyAgICByZXR1cm4g
aW52b2tlKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgSW52b2tlRGVmYXVsdCwgMCwg
QXJnTGlzdChjYWxsRnJhbWUpKTsKIH0KIAogYm9vbCBQcm94eUluc3RhbmNlOjpzdXBwb3J0c0Nv
bnN0cnVjdCgpIGNvbnN0CkBAIC0yNjUsMjcgKzI2NiwyNyBAQCBib29sIFByb3h5SW5zdGFuY2U6
OnN1cHBvcnRzQ29uc3RydWN0KCkgY29uc3QKICAgICByZXR1cm4gcmVwbHkgJiYgcmVwbHktPm1f
cmVzdWx0OwogfQogICAgIAotSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VDb25zdHJ1Y3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBQcm94eUluc3Rh
bmNlOjppbnZva2VDb25zdHJ1Y3QoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVy
biBpbnZva2UoZXhlYywgQ29uc3RydWN0LCAwLCBhcmdzKTsKKyAgICByZXR1cm4gaW52b2tlKGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgQ29uc3RydWN0LCAwLCBhcmdzKTsKIH0KIAot
SlNWYWx1ZSBQcm94eUluc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0CitKU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmRl
ZmF1bHRWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAogewogICAgIGlmIChoaW50ID09IFByZWZlclN0cmlu
ZykKLSAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOworICAgICAgICByZXR1cm4gc3Ry
aW5nVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKGhpbnQgPT0gUHJlZmVyTnVt
YmVyKQotICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUoZXhlYyk7Ci0gICAgcmV0dXJuIHZhbHVl
T2YoZXhlYyk7CisgICAgICAgIHJldHVybiBudW1iZXJWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICByZXR1cm4gdmFsdWVPZihsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIAotSlNWYWx1
ZSBQcm94eUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1Zh
bHVlIFByb3h5SW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIHNl
bnNpYmxlLgotICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKGV4ZWMtPnZtKCkpOworICAgIHJldHVy
biBqc0VtcHR5U3RyaW5nKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogfQogCi1KU1ZhbHVl
IFByb3h5SW5zdGFuY2U6Om51bWJlclZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0CitKU1ZhbHVlIFBy
b3h5SW5zdGFuY2U6Om51bWJlclZhbHVlKEpTR2xvYmFsT2JqZWN0KikgY29uc3QKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHNvbWV0aGluZyBzZW5zaWJsZS4KICAgICByZXR1cm4ganNOdW1i
ZXIoMCk7CkBAIC0yOTcsMTIgKzI5OCwxMiBAQCBKU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmJvb2xl
YW5WYWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiB9CiAKLUpTVmFs
dWUgUHJveHlJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVl
IFByb3h5SW5zdGFuY2U6OnZhbHVlT2YoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0cmluZ1ZhbHVlKGV4ZWMpOworICAgIHJldHVybiBz
dHJpbmdWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIAotdm9pZCBQcm94eUluc3RhbmNl
OjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIG5h
bWVBcnJheSkKK3ZvaWQgUHJveHlJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIG5hbWVBcnJheSkK
IHsKICAgICBpZiAoIW1faW5zdGFuY2VQcm94eSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzEzLDEz
ICszMTQsMTMgQEAgdm9pZCBQcm94eUluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIG5hbWVBcnIKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIGF1dG8gcmVwbHkgPSB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpCb29sZWFuQW5kRGF0YVJlcGx5PihyZXF1ZXN0SUQpOwotICAgIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOworICAg
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0
YXRlKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGlmICghcmVwbHkgfHwgIXJlcGx5LT5tX3Jl
dHVyblZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgTlNBcnJheSAqYXJyYXkgPSBb
TlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uIHByb3BlcnR5TGlzdFdpdGhEYXRhOihfX2JyaWRn
ZSBOU0RhdGEgKilyZXBseS0+bV9yZXN1bHQuZ2V0KCkgb3B0aW9uczpOU1Byb3BlcnR5TGlzdElt
bXV0YWJsZSBmb3JtYXQ6bnVsbHB0ciBlcnJvcjpudWxscHRyXTsKICAgICAKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgZm9yIChOU051bWJlciAqbnVtYmVyIGluIGFycmF5KSB7CiAgICAgICAgIElkZW50aWZpZXJS
ZXAqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PElkZW50aWZpZXJSZXAqPihbbnVtYmVy
IGxvbmdMb25nVmFsdWVdKTsKICAgICAgICAgaWYgKCFJZGVudGlmaWVyUmVwOjppc1ZhbGlkKGlk
ZW50aWZpZXIpKQpAQCAtNDAyLDcgKzQwMyw3IEBAIEZpZWxkKiBQcm94eUluc3RhbmNlOjpmaWVs
ZE5hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgcmV0dXJuIG1hcEFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBQcm94eUluc3RhbmNl
OjpmaWVsZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgRmllbGQqIGZpZWxkKSBjb25zdAor
SlNDOjpKU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmZpZWxkVmFsdWUoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEZpZWxkKiBmaWVsZCkgY29uc3QKIHsKICAgICBpZiAo
IW1faW5zdGFuY2VQcm94eSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00MTQs
MTQgKzQxNSwxNCBAQCBKU0M6OkpTVmFsdWUgUHJveHlJbnN0YW5jZTo6ZmllbGRWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEZpZWxkKiBmaWVsZCkgY29ucwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAKICAgICBhdXRvIHJlcGx5ID0gd2FpdEZvclJlcGx5PE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6Qm9vbGVhbkFuZERhdGFSZXBseT4ocmVxdWVzdElEKTsKLSAg
ICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNT
dGF0ZShleGVjKTsKKyAgICBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1vdmVHbG9iYWxF
eGNlcHRpb25Ub0V4ZWNTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXJlcGx5
IHx8ICFyZXBseS0+bV9yZXR1cm5WYWx1ZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgCi0gICAgcmV0dXJuIG1faW5zdGFuY2VQcm94eS0+ZGVtYXJzaGFsVmFsdWUoZXhlYywg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFyKj4oQ0ZEYXRh
R2V0Qnl0ZVB0cihyZXBseS0+bV9yZXN1bHQuZ2V0KCkpKSksIENGRGF0YUdldExlbmd0aChyZXBs
eS0+bV9yZXN1bHQuZ2V0KCkpKTsKKyAgICByZXR1cm4gbV9pbnN0YW5jZVByb3h5LT5kZW1hcnNo
YWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25z
dF9jYXN0PHVuc2lnbmVkIGNoYXIqPihDRkRhdGFHZXRCeXRlUHRyKHJlcGx5LT5tX3Jlc3VsdC5n
ZXQoKSkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKHJlcGx5LT5tX3Jlc3VsdC5nZXQoKSkpOwogfQogICAg
IAotYm9vbCBQcm94eUluc3RhbmNlOjpzZXRGaWVsZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgRmllbGQqIGZpZWxkLCBKU1ZhbHVlIHZhbHVlKSBjb25zdAorYm9vbCBQcm94eUluc3RhbmNl
OjpzZXRGaWVsZFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25z
dCBGaWVsZCogZmllbGQsIEpTVmFsdWUgdmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2luc3Rh
bmNlUHJveHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQzMiw3ICs0MzMsNyBAQCBib29s
IFByb3h5SW5zdGFuY2U6OnNldEZpZWxkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBGaWVs
ZCogZmllbGQsIEpTVmFsdWUgdgogICAgIGRhdGFfdCB2YWx1ZURhdGE7CiAgICAgbWFjaF9tc2df
dHlwZV9udW1iZXJfdCB2YWx1ZUxlbmd0aDsKIAotICAgIG1faW5zdGFuY2VQcm94eS0+bWFyc2hh
bFZhbHVlKGV4ZWMsIHZhbHVlLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKKyAgICBtX2luc3Rh
bmNlUHJveHktPm1hcnNoYWxWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgdmFsdWVE
YXRhLCB2YWx1ZUxlbmd0aCk7CiAgICAgbV9pbnN0YW5jZVByb3h5LT5yZXRhaW5Mb2NhbE9iamVj
dCh2YWx1ZSk7CiAgICAga2Vybl9yZXR1cm5fdCBrciA9IF9XS1BITlBPYmplY3RTZXRQcm9wZXJ0
eShtX2luc3RhbmNlUHJveHktPmhvc3RQcm94eSgpLT5wb3J0KCksIG1faW5zdGFuY2VQcm94eS0+
cGx1Z2luSUQoKSwgcmVxdWVzdElELCBtX29iamVjdElELCBzZXJ2ZXJJZGVudGlmaWVyLCB2YWx1
ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBtaWdfZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0
PHZtX2FkZHJlc3NfdD4odmFsdWVEYXRhKSwgdmFsdWVMZW5ndGgpOwpAQCAtNDQyLDcgKzQ0Myw3
IEBAIGJvb2wgUHJveHlJbnN0YW5jZTo6c2V0RmllbGRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEZpZWxkKiBmaWVsZCwgSlNWYWx1ZSB2CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICB3YWl0Rm9yUmVwbHk8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpCb29sZWFuUmVw
bHk+KHJlcXVlc3RJRCk7Ci0gICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CisgICAgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCmluZGV4
IGMyMWJkY2Y3MTA2Mzk2OWUxMWNiZGJiMGE1YjkzZTViYWE4NmQ4MzQuLmI0ZWU5ZTYwNmM1N2Zj
ZjU3MmUxMTM4NjM5YmMxNDUzNGYzNzg5MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaApA
QCAtNjksNyArNjksNyBAQCBjbGFzcyBXZWJGcmFtZUxvYWRlckNsaWVudCA6IHB1YmxpYyBXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudCB7CiAgICAgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXIqKSBmaW5hbDsKICAgICBib29sIGhhc0hUTUxWaWV3KCkgY29u
c3QgZmluYWw7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGZvcmNlTGF5b3V0
T25SZXN0b3JlRnJvbVBhZ2VDYWNoZSgpIGZpbmFsOworICAgIGJvb2wgZm9yY2VMYXlvdXRPblJl
c3RvcmVGcm9tQmFja0ZvcndhcmRDYWNoZSgpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCBmb3Jj
ZUxheW91dEZvck5vbkhUTUwoKSBmaW5hbDsKIApAQCAtMTg0LDcgKzE4NCw3IEBAIGNsYXNzIFdl
YkZyYW1lTG9hZGVyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50IHsK
ICNlbmRpZgogICAgIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpIGZpbmFs
OwogCi0gICAgdm9pZCBkaWRSZXN0b3JlRnJvbVBhZ2VDYWNoZSgpIGZpbmFsOworICAgIHZvaWQg
ZGlkUmVzdG9yZUZyb21CYWNrRm9yd2FyZENhY2hlKCkgZmluYWw7CiAKICAgICB2b2lkIGRpc3Bh
dGNoRGlkQmVjb21lRnJhbWVzZXQoYm9vbCkgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQubW0KaW5kZXggMmUzNTM3NTU2ODFmMzk1ZDM5Y2M2OTFmN2NjNzBlNWU1YjAwOTQ4NC4uYTNl
OTgzMzhiNjQ4OWVhYzk2YjdjMWQwOTc5ZDI1NTYxZmEwYzUwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQubW0KQEAgLTIzOSwxMCArMjM5LDEwIEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6Omhhc0hUTUxWaWV3KCkgY29uc3QKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1i
b29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpmb3JjZUxheW91dE9uUmVzdG9yZUZyb21QYWdlQ2Fj
aGUoKQorYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Zm9yY2VMYXlvdXRPblJlc3RvcmVGcm9t
QmFja0ZvcndhcmRDYWNoZSgpCiB7CiAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICp2aWV3
ID0gW21fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJGcmFtZVZpZXcgZG9jdW1lbnRWaWV3XTsKLSAg
ICAvLyBUaGlzIGdldHMgY2FsbGVkIHRvIGxheSBvdXQgYSBwYWdlIHJlc3RvcmVkIGZyb20gdGhl
IHBhZ2UgY2FjaGUuCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCB0byBsYXkgb3V0IGEgcGFnZSBy
ZXN0b3JlZCBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAgICAgLy8gVG8gd29yayBhcm91
bmQgdGltaW5nIHByb2JsZW1zIHdpdGggVUlLaXQsIHJlc3RvcmUgZml4ZWQgCiAgICAgLy8gbGF5
b3V0IHNldHRpbmdzIGhlcmUuCiAgICAgV2ViVmlldyogd2ViVmlldyA9IGdldFdlYlZpZXcobV93
ZWJGcmFtZS5nZXQoKSk7CkBAIC0xNDk1LDcgKzE0OTUsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKICAgICB9CiB9CiAKLXZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCkKK3ZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJlc3RvcmVGcm9tQmFja0ZvcndhcmRDYWNoZSgpCiB7
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2Vi
VmlldyhtX3dlYkZyYW1lLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLm1tCmluZGV4IDA4
NDRiMzlkMzY3MDU1M2EwOTMyMjcxY2VkYjczOTA3MGExODVjOGIuLmQ1N2RjYzVkNTEwZjk0MDc5
MWFhNzAwMTQ1Y2Y5NDUzYzU3NTAyMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbQpAQCAt
MzAsNyArMzAsNyBAQAogI2ltcG9ydCAiV2ViSGlzdG9yeURlbGVnYXRlLmgiCiAjaW1wb3J0ICJX
ZWJIaXN0b3J5SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9y
dCA8V2ViQ29yZS9QYWdlQ2FjaGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQmFja0ZvcndhcmRDYWNo
ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQppbmRleCA0YTRhNDAwODQ2NDQ0NzExMTc3MzczZjk2YTBmMDllYTVjZWM3N2FmLi5k
Njc3YTkwNDk0Yjk0Y2ZjZTc3ZGQxMTQ2OTM2NDg0MzYwNTQxMmQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTU1LDYgKzU1LDcgQEAKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
Q0pTVmFsdWUuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dEludGVybmFsLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNP
YmplY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgpAQCAtNjk1LDggKzY5
Niw4IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZyBmb3JjZVVzCiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOwotICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCkuZ2xvYmFs
T2JqZWN0KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGpzY0xvY2soZXhlYyk7CisgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIganNjTG9jayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICNlbmRpZgogCiAg
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLmV4
ZWN1dGVTY3JpcHQoc3RyaW5nLCBmb3JjZVVzZXJHZXN0dXJlKTsKQEAgLTcxMSwxMCArNzEyLDEw
IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZyBmb3JjZVVzCiAgICAgICAgIHJldHVybiBAIiI7CiAKICNpZiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IF9wcml2YXRl
LT5jb3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9y
bWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QoV2ViQ29yZTo6bWFpblRocmVh
ZE5vcm1hbFdvcmxkKCkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAjZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0LnRvV1RGU3RyaW5nKGV4ZWMpOwor
ICAgIHJldHVybiByZXN1bHQudG9XVEZTdHJpbmcobGV4aWNhbEdsb2JhbE9iamVjdCk7CiB9CiAK
IC0gKE5TUmVjdClfY2FyZXRSZWN0QXRQb3NpdGlvbjooY29uc3QgV2ViQ29yZTo6UG9zaXRpb24m
KXBvcyBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eQpAQCAtMjEwOCw5ICsy
MTA5LDkgQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21T
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHdpdGhHbG8KICAgICBpZiAoIXJlc3VsdCB8fCAoIXJl
c3VsdC5pc0Jvb2xlYW4oKSAmJiAhcmVzdWx0LmlzU3RyaW5nKCkgJiYgIXJlc3VsdC5pc051bWJl
cigpKSkKICAgICAgICAgcmV0dXJuIEAiIjsKIAotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
YW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwotICAgIHJldHVybiByZXN1bHQudG9XVEZTdHJpbmcoZXhlYyk7CisgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGFueVdvcmxkR2xvYmFs
T2JqZWN0OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgcmV0dXJuIHJlc3VsdC50b1dURlN0cmluZyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0K
IAogLSAoSlNHbG9iYWxDb250ZXh0UmVmKV9nbG9iYWxDb250ZXh0Rm9yU2NyaXB0V29ybGQ6KFdl
YlNjcmlwdFdvcmxkICopd29ybGQKQEAgLTIxMjEsNyArMjEyMiw3IEBAIC0gKEpTR2xvYmFsQ29u
dGV4dFJlZilfZ2xvYmFsQ29udGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdv
cmxkCiAgICAgYXV0byogY29yZVdvcmxkID0gY29yZSh3b3JsZCk7CiAgICAgaWYgKCFjb3JlV29y
bGQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0dsb2JhbFJlZihjb3JlRnJhbWUt
PnNjcmlwdCgpLmdsb2JhbE9iamVjdCgqY29yZVdvcmxkKS0+Z2xvYmFsRXhlYygpKTsKKyAgICBy
ZXR1cm4gdG9HbG9iYWxSZWYoY29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QoKmNvcmVX
b3JsZCkpOwogfQogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKQEAgLTIzNDUsMTAgKzIzNDYs
MTAgQEAgLSAoSlNWYWx1ZVJlZilqc1dyYXBwZXJGb3JOb2RlOihET01Ob2RlICopbm9kZSBpblNj
cmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXcKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBX
ZWJDb3JlOjpKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gY29yZUZyYW1lLT5zY3JpcHQoKS5n
bG9iYWxPYmplY3QoKmNvcmUod29ybGQpKTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwotICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgY29yZShub2RlKSkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgcmV0dXJuIHRvUmVmKGxleGljYWxHbG9iYWxPYmplY3QsIHRvSlMobGV4
aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBjb3JlKG5vZGUpKSk7CiB9CiAKIC0gKE5T
RGljdGlvbmFyeSAqKWVsZW1lbnRBdFBvaW50OihOU1BvaW50KXBvaW50CkBAIC0yNjE3LDcgKzI2
MTgsNyBAQCAtIChKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dAogICAgIGF1dG8qIGNv
cmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0dsb2JhbFJlZihjb3JlRnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4
ZWMoKSk7CisgICAgcmV0dXJuIHRvR2xvYmFsUmVmKGNvcmVGcmFtZS0+c2NyaXB0KCkuZ2xvYmFs
T2JqZWN0KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKSk7CiB9CiAKICNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0KaW5kZXggYmM3NzRkNzY1NjE2YTVhOGM0YTMwMjkxNWRhNzliYjM1MzkzYjAz
Ny4uYzJlZmI3N2MzZTgzNDEzZjVhYzNiN2MxOWIwNWJhNWM0YWQ5ZTM3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0zMzQyLDcgKzMz
NDIsNyBAQCAtICh2b2lkKWxheW91dFRvTWluaW11bVBhZ2VXaWR0aDooZmxvYXQpbWluUGFnZUxv
Z2ljYWxXaWR0aCBoZWlnaHQ6KGZsb2F0KW1pblBhZwogICAgIGlmICghY29yZUZyYW1lKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkgewotICAgICAgICBp
ZiAoY29yZUZyYW1lLT5kb2N1bWVudCgpLT5wYWdlQ2FjaGVTdGF0ZSgpICE9IFdlYkNvcmU6OkRv
Y3VtZW50OjpOb3RJblBhZ2VDYWNoZSkKKyAgICAgICAgaWYgKGNvcmVGcmFtZS0+ZG9jdW1lbnQo
KS0+YmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gV2ViQ29yZTo6RG9jdW1lbnQ6Ok5vdEluQmFj
a0ZvcndhcmRDYWNoZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY29yZUZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgfQpAQCAtMzg1NCw3ICszODU0
LDcgQEAgLSAodm9pZClzZXROZWVkc0xheW91dDogKEJPT0wpZmxhZwogICAgIGlmICghZmxhZykK
ICAgICAgICAgcmV0dXJuOyAvLyBUaGVyZSdzIG5vIHdheSB0byBzYXkgeW91IGRvbid0IG5lZWQg
YSBsYXlvdXQuCiAgICAgaWYgKGF1dG8qIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewot
ICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50KCktPnBhZ2VD
YWNoZVN0YXRlKCkgIT0gV2ViQ29yZTo6RG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKQorICAgICAg
ICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50KCktPmJhY2tGb3J3YXJk
Q2FjaGVTdGF0ZSgpICE9IFdlYkNvcmU6OkRvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChhdXRvKiB2aWV3ID0gZnJhbWUtPnZp
ZXcoKSkKICAgICAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0QWZ0ZXJWaWV3Q29uZmlndXJh
dGlvbkNoYW5nZSgpOwpAQCAtMzg2Nyw3ICszODY3LDcgQEAgLSAodm9pZClzZXROZWVkc1RvQXBw
bHlTdHlsZXM6IChCT09MKWZsYWcKICAgICBpZiAoIWZsYWcpCiAgICAgICAgIHJldHVybjsgLy8g
VGhlcmUncyBubyB3YXkgdG8gc2F5IHlvdSBkb24ndCBuZWVkIGEgc3R5bGUgcmVjYWxjLgogICAg
IGlmIChhdXRvKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgaWYgKGZy
YW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5wYWdlQ2FjaGVTdGF0ZSgpICE9
IFdlYkNvcmU6OkRvY3VtZW50OjpOb3RJblBhZ2VDYWNoZSkKKyAgICAgICAgaWYgKGZyYW1lLT5k
b2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAh
PSBXZWJDb3JlOjpEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2NoZWR1bGVGdWxsU3R5bGVSZWJ1
aWxkKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJTY3JpcHREZWJ1Z2dlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJTY3JpcHREZWJ1Z2dlci5oCmluZGV4IDc5YzJhNjkxOGViNGM4YTcwOThhNWQ1OWJiMDA1YzU2
MDU4MjhhZjUuLjVlZGU1MWMxMWQwYzhlZmRmYzBlNDE0YmIwZTI2M2Y0NTYwN2Y5N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2Vy
LmgKQEAgLTQxLDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNHbG9iYWxP
YmplY3Q7CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgQXJnTGlzdDsKLSAgICB1c2lu
ZyBFeGVjU3RhdGUgPSBDYWxsRnJhbWU7CiB9CiAKIEBjbGFzcyBXZWJTY3JpcHRDYWxsRnJhbWU7
CkBAIC01Myw3ICs1Miw3IEBAIGNsYXNzIFdlYlNjcmlwdERlYnVnZ2VyIGZpbmFsIDogcHVibGlj
IEpTQzo6RGVidWdnZXIgewogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAg
dm9pZCBzb3VyY2VQYXJzZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiwg
aW50IGVycm9yTGluZSwgY29uc3QgV1RGOjpTdHJpbmcmIGVycm9yTXNnKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNvdXJjZVBhcnNlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTb3VyY2VQcm92
aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFdURjo6U3RyaW5nJiBlcnJvck1zZykgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBoYW5kbGVQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpEZWJ1
Z2dlcjo6UmVhc29uRm9yUGF1c2UpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBtX2NhbGxpbmdEZWxl
Z2F0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViU2Ny
aXB0RGVidWdnZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlNjcmlw
dERlYnVnZ2VyLm1tCmluZGV4IGZiMWNjMzJhNzYyZTBkYjdlMTE2MTkyNDBkODE4ZTNmOTMwMTRh
ZWQuLmJmMjM0NzU1YjRhMzBhYjg0YTEzZDIwM2JlZjM2N2MxZTgwYjg2NmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQpA
QCAtNzksNyArNzksNyBAQCBXZWJTY3JpcHREZWJ1Z2dlcjo6V2ViU2NyaXB0RGVidWdnZXIoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogfQogCiAvLyBjYWxsYmFja3MgLSByZWxh
eSB0byBkZWxlZ2F0ZQotdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6c291cmNlUGFyc2VkKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OlNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50
IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1zZykKK3ZvaWQgV2ViU2NyaXB0RGVidWdn
ZXI6OnNvdXJjZVBhcnNlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgaW50IGVycm9yTGluZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1zZykKIHsKICAgICBpZiAobV9jYWxsaW5nRGVsZWdhdGUpCiAgICAg
ICAgIHJldHVybjsKQEAgLTkwLDggKzkwLDggQEAgdm9pZCBXZWJTY3JpcHREZWJ1Z2dlcjo6c291
cmNlUGFyc2VkKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlNvdXJjZVByb3ZpZGVyKgogICAg
IE5TVVJMICpuc1VSTCA9IHRvTlNVUkwoc291cmNlUHJvdmlkZXItPnVybCgpKTsKICAgICBpbnQg
Zmlyc3RMaW5lID0gc291cmNlUHJvdmlkZXItPnN0YXJ0UG9zaXRpb24oKS5tX2xpbmUub25lQmFz
ZWRJbnQoKTsKIAotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBXZWJGcmFtZSAq
d2ViRnJhbWUgPSB0b1dlYkZyYW1lKHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYykpOworICAg
IEpTQzo6Vk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBXZWJGcmFtZSAq
d2ViRnJhbWUgPSB0b1dlYkZyYW1lKHZtLnZtRW50cnlHbG9iYWxPYmplY3QobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbd2ViRnJhbWUgd2ViVmlld107CiAg
ICAgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0
aW9ucyA9IFdlYlZpZXdHZXRTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25zKHdlYlZp
ZXcpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXgg
NDg4NmM4NDkzMTc4ZWI1MWUxYzk0Mzg2OWYxMzk1N2Y3NmVhMzI3ZS4uNWMyOTY5MWViZDRmOTcz
ODllN2IyNTQyODI0NWQ3MzdmYWQ3NDNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQpAQCAtMTI2LDEwICsxMjYsMTIgQEAKICNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0V4Y2VwdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZS5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYu
aD4KICNpbXBvcnQgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0JhY2tGb3J3YXJkQ2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQmFja0ZvcndhcmRDb250cm9s
bGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ2FjaGVTdG9yYWdlUHJvdmlkZXIuaD4KQEAgLTE4NSw3ICsxODcsNiBAQAog
I2ltcG9ydCA8V2ViQ29yZS9Ob3RpZmljYXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90aWZp
Y2F0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1BhZ2VDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlQ29uZmlndXJhdGlvbi5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGF0aFV0
aWxpdGllcy5oPgpAQCAtMTE1OSwxNSArMTE2MCwxNCBAQCArICh2b2lkKV9yZXBvcnRFeGNlcHRp
b246KEpTVmFsdWVSZWYpZXhjZXB0aW9uIGluQ29udGV4dDooSlNDb250ZXh0UmVmKWNvbnRleHQK
ICAgICBpZiAoIWV4Y2VwdGlvbiB8fCAhY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7Ci0gICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9i
YWxPYmplY3QpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRv
dyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUg
ZnJvbSBhIFdlYlZpZXcuCi0gICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgaWYgKCFXZWJDb3JlOjp0b0pT
RE9NV2luZG93KGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0KSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uKGV4ZWNTdGF0ZSwgdG9KUyhleGVj
U3RhdGUsIGV4Y2VwdGlvbikpOworICAgIFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIHRvSlMoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pKTsKIH0KIAogc3RhdGljIGJvb2wg
c2hvdWxkRW5hYmxlTG9hZERlZmVycmluZygpCkBAIC0yMzY3LDggKzIzNjcsOCBAQCAtICh2b2lk
KV9jbG9zZQogCiAgICAgX3ByaXZhdGUtPmdyb3VwLT5yZW1vdmVXZWJWaWV3KHNlbGYpOwogCi0g
ICAgLy8gRGVsZXRlaW5nIHRoZSBXZWJDb3JlOjpQYWdlIHdpbGwgY2xlYXIgdGhlIHBhZ2UgY2Fj
aGUgc28gd2UgY2FsbCBkZXN0cm95IG9uCi0gICAgLy8gYWxsIHRoZSBwbHVnLWlucyBpbiB0aGUg
cGFnZSBjYWNoZSB0byBicmVhayBhbnkgcmV0YWluIGN5Y2xlcy4KKyAgICAvLyBEZWxldGVpbmcg
dGhlIFdlYkNvcmU6OlBhZ2Ugd2lsbCBjbGVhciB0aGUgYmFjay9mb3J3YXJkIGNhY2hlIHNvIHdl
IGNhbGwgZGVzdHJveSBvbgorICAgIC8vIGFsbCB0aGUgcGx1Zy1pbnMgaW4gdGhlIGJhY2svZm9y
d2FyZCBjYWNoZSB0byBicmVhayBhbnkgcmV0YWluIGN5Y2xlcy4KICAgICAvLyBTZWUgY29tbWVu
dCBpbiBIaXN0b3J5SXRlbTo6cmVsZWFzZUFsbFBlbmRpbmdQYWdlQ2FjaGVzKCkgZm9yIG1vcmUg
aW5mb3JtYXRpb24uCiAgICAgYXV0byogcGFnZSA9IF9wcml2YXRlLT5wYWdlOwogICAgIF9wcml2
YXRlLT5wYWdlID0gbnVsbHB0cjsKQEAgLTI5MTEsOCArMjkxMSw4IEBAIC0gKHZvaWQpX3ByZWZl
cmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilwcmVmZXJlbmNlcwogICAgIHNldHRpbmdz
LnNldEVkaXRhYmxlTGlua0JlaGF2aW9yKGNvcmUoW3ByZWZlcmVuY2VzIGVkaXRhYmxlTGlua0Jl
aGF2aW9yXSkpOwogICAgIHNldHRpbmdzLnNldFRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9u
QmVoYXZpb3IoY29yZShbcHJlZmVyZW5jZXMgdGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25C
ZWhhdmlvcl0pKTsKICAgICBzZXR0aW5ncy5zZXRET01QYXN0ZUFsbG93ZWQoW3ByZWZlcmVuY2Vz
IGlzRE9NUGFzdGVBbGxvd2VkXSk7Ci0gICAgc2V0dGluZ3Muc2V0VXNlc1BhZ2VDYWNoZShbc2Vs
ZiB1c2VzUGFnZUNhY2hlXSk7Ci0gICAgc2V0dGluZ3Muc2V0UGFnZUNhY2hlU3VwcG9ydHNQbHVn
aW5zKFtwcmVmZXJlbmNlcyBwYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnNdKTsKKyAgICBzZXR0aW5n
cy5zZXRVc2VzQmFja0ZvcndhcmRDYWNoZShbc2VsZiB1c2VzUGFnZUNhY2hlXSk7CisgICAgc2V0
dGluZ3Muc2V0QmFja0ZvcndhcmRDYWNoZVN1cHBvcnRzUGx1Z2lucyhbcHJlZmVyZW5jZXMgcGFn
ZUNhY2hlU3VwcG9ydHNQbHVnaW5zXSk7CiAgICAgc2V0dGluZ3Muc2V0QmFja0ZvcndhcmRDYWNo
ZUV4cGlyYXRpb25JbnRlcnZhbChTZWNvbmRzIHsgW3ByZWZlcmVuY2VzIF9iYWNrRm9yd2FyZENh
Y2hlRXhwaXJhdGlvbkludGVydmFsXSB9KTsKIAogICAgIHNldHRpbmdzLnNldERldmVsb3BlckV4
dHJhc0VuYWJsZWQoW3ByZWZlcmVuY2VzIGRldmVsb3BlckV4dHJhc0VuYWJsZWRdKTsKQEAgLTMw
NDEsNyArMzA0MSw3IEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5j
ZXMgKilwcmVmZXJlbmNlcwogICAgIHNldHRpbmdzLnNldFBhc3N3b3JkRWNob0VuYWJsZWQoW3By
ZWZlcmVuY2VzIF9hbGxvd1Bhc3N3b3JkRWNob10pOwogICAgIHNldHRpbmdzLnNldFBhc3N3b3Jk
RWNob0R1cmF0aW9uSW5TZWNvbmRzKFtwcmVmZXJlbmNlcyBfcGFzc3dvcmRFY2hvRHVyYXRpb25d
KTsKIAotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc2V0dGluZ3MucGFnZUNhY2hlU3VwcG9ydHNQ
bHVnaW5zKCksICJQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMgc2hvdWxkIGJlIGVuYWJsZWQgb24g
aU9TLiIpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc2V0dGluZ3MuYmFja0ZvcndhcmRDYWNo
ZVN1cHBvcnRzUGx1Z2lucygpLCAiQmFja0ZvcndhcmRDYWNoZVN1cHBvcnRzUGx1Z2lucyBzaG91
bGQgYmUgZW5hYmxlZCBvbiBpT1MuIik7CiAgICAgc2V0dGluZ3Muc2V0RGVsZWdhdGVzUGFnZVNj
YWxpbmcodHJ1ZSk7CiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQpAQCAtNDM1OSw3ICs0
MzU5LDcgQEAgLSAoTlNBcnJheSAqKV90b3VjaEV2ZW50UmVnaW9ucwogI2VuZGlmIC8vIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiAKIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHRo
ZSBXZWJCYWNrRm9yd2FyZExpc3QgQVBJLCB3ZSBob25vciBib3RoCi0vLyBhIHBlci1XZWJWaWV3
IGFuZCBhIHBlci1wcmVmZXJlbmNlcyBzZXR0aW5nIGZvciB3aGV0aGVyIHRvIHVzZSB0aGUgcGFn
ZSBjYWNoZS4KKy8vIGEgcGVyLVdlYlZpZXcgYW5kIGEgcGVyLXByZWZlcmVuY2VzIHNldHRpbmcg
Zm9yIHdoZXRoZXIgdG8gdXNlIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAKIC0gKEJPT0wpdXNl
c1BhZ2VDYWNoZQogewpAQCAtNzgzMCwxNyArNzgzMCwxNyBAQCAtIChCT09MKXNob3VsZENsb3Nl
CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXN0YXRpYyBOU0FwcGxlRXZlbnREZXNj
cmlwdG9yKiBhZURlc2NGcm9tSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUpCitzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvbUpT
VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUpCiB7CiAgICAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgTlNBcHBsZUV2ZW50
RGVzY3JpcHRvciogYWVEZXNjID0gMDsKICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkKICAg
ICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoQm9vbGVh
bjpqc1ZhbHVlLmFzQm9vbGVhbigpXTsKICAgICBpZiAoanNWYWx1ZS5pc1N0cmluZygpKQotICAg
ICAgICByZXR1cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhTdHJpbmc6
YXNTdHJpbmcoanNWYWx1ZSktPnZhbHVlKGV4ZWMpXTsKKyAgICAgICAgcmV0dXJuIFtOU0FwcGxl
RXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoU3RyaW5nOmFzU3RyaW5nKGpzVmFsdWUpLT52
YWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0KV07CiAgICAgaWYgKGpzVmFsdWUuaXNOdW1iZXIoKSkg
ewogICAgICAgICBkb3VibGUgdmFsdWUgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIGlu
dCBpbnRWYWx1ZSA9IHZhbHVlOwpAQCAtNzg2NiwxNyArNzg2NiwxNyBAQCBzdGF0aWMgTlNBcHBs
ZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvbUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNWYQogICAgICAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlw
dG9yIGxpc3REZXNjcmlwdG9yXTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1JdGVtcyA9
IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtSXRlbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgW2FlRGVzYyBpbnNlcnREZXNj
cmlwdG9yOmFlRGVzY0Zyb21KU1ZhbHVlKGV4ZWMsIGFycmF5LT5nZXQoZXhlYywgaSkpIGF0SW5k
ZXg6MF07CisgICAgICAgICAgICAgICAgICAgIFthZURlc2MgaW5zZXJ0RGVzY3JpcHRvcjphZURl
c2NGcm9tSlNWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcnJheS0+Z2V0KGxleGljYWxHbG9i
YWxPYmplY3QsIGkpKSBhdEluZGV4OjBdOwogICAgICAgICAgICAgICAgIHZpc2l0ZWRFbGVtcy5n
ZXQoKS5yZW1vdmUob2JqZWN0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gYWVEZXNjOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEpTQzo6SlNWYWx1ZSBwcmltaXRpdmUgPSBv
YmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMpOworICAgICAgICBKU0M6OkpTVmFsdWUgcHJpbWl0aXZl
ID0gb2JqZWN0LT50b1ByaW1pdGl2ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBu
dWxsRGVzY3JpcHRvcl07CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFlRGVzY0Zyb21KU1Zh
bHVlKGV4ZWMsIHByaW1pdGl2ZSk7CisgICAgICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcmltaXRpdmUpOwogICAgIH0KICAgICBpZiAoanNWYWx1ZS5p
c1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVz
Y3JpcHRvcldpdGhUeXBlQ29kZTpjTWlzc2luZ1ZhbHVlXTsKQEAgLTc4OTQsOCArNzg5NCw4IEBA
IC0gKE5TQXBwbGVFdmVudERlc2NyaXB0b3IgKilhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
RnJvbVN0cmluZzooTlNTdHJpbmcgKilzCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGNvcmVG
cmFtZS0+c2NyaXB0KCkuZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpOwogICAgIGlmICghcmVz
dWx0KSAvLyBGSVhNRTogcGFzcyBlcnJvcnMKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhjb3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChXZWJDb3Jl
OjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSk7Ci0gICAgcmV0dXJuIGFl
RGVzY0Zyb21KU1ZhbHVlKGNvcmVGcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KFdlYkNvcmU6
Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1bHQpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soY29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QoV2Vi
Q29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpKTsKKyAgICByZXR1cm4gYWVEZXNjRnJvbUpT
VmFsdWUoY29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QoV2ViQ29yZTo6bWFpblRocmVh
ZE5vcm1hbFdvcmxkKCkpLCByZXN1bHQpOwogfQogI2VuZGlmCiAKQEAgLTg3OTcsNyArODc5Nyw3
IEBAICsgKHZvaWQpX3NldENhY2hlTW9kZWw6KFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbAogCiAg
ICAgc3dpdGNoIChjYWNoZU1vZGVsKSB7CiAgICAgY2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRW
aWV3ZXI6IHsKLSAgICAgICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0eSAoaW4gcGFnZXMpCisgICAg
ICAgIC8vIEJhY2svZm9yd2FyZCBjYWNoZSBjYXBhY2l0eSAoaW4gcGFnZXMpCiAgICAgICAgIHBh
Z2VDYWNoZVNpemUgPSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChp
biBieXRlcykKQEAgLTg4MzMsNyArODgzMyw3IEBAICsgKHZvaWQpX3NldENhY2hlTW9kZWw6KFdl
YkNhY2hlTW9kZWwpY2FjaGVNb2RlbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBX
ZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyOiB7Ci0gICAgICAgIC8vIFBhZ2UgY2FjaGUgY2Fw
YWNpdHkgKGluIHBhZ2VzKQorICAgICAgICAvLyBCYWNrL2ZvcndhcmQgY2FjaGUgY2FwYWNpdHkg
KGluIHBhZ2VzKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSA1MTIpCiAgICAgICAgICAgICBwYWdl
Q2FjaGVTaXplID0gMjsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAyNTYpCkBAIC04ODg0
LDcgKzg4ODQsNyBAQCArICh2b2lkKV9zZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1vZGVsKWNhY2hl
TW9kZWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgV2ViQ2FjaGVNb2RlbFByaW1h
cnlXZWJCcm93c2VyOiB7Ci0gICAgICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2Vz
KQorICAgICAgICAvLyBCYWNrL2ZvcndhcmQgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2VzKQogICAg
ICAgICBpZiAobWVtU2l6ZSA+PSA1MTIpCiAgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMjsK
ICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAyNTYpCkBAIC04OTY3LDcgKzg5NjcsNyBAQCAr
ICh2b2lkKV9zZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1vZGVsKWNhY2hlTW9kZWwKICAgICBtZW1v
cnlDYWNoZS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRD
YXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZS5zZXREZWFkRGVj
b2RlZERhdGFEZWxldGlvbkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwp
OwogCi0gICAgYXV0byYgcGFnZUNhY2hlID0gV2ViQ29yZTo6UGFnZUNhY2hlOjpzaW5nbGV0b24o
KTsKKyAgICBhdXRvJiBwYWdlQ2FjaGUgPSBXZWJDb3JlOjpCYWNrRm9yd2FyZENhY2hlOjpzaW5n
bGV0b24oKTsKICAgICBwYWdlQ2FjaGUuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogICAgIG5zdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IHN0ZDo6
bWF4KG5zdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgW25zdXJsQ2FjaGUgbWVtb3J5Q2FwYWNpdHld
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0JhY2tGb3J3YXJkTGlzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9CYWNrRm9yd2FyZExpc3QuY3BwCmluZGV4IGRh
ZWExNjFhMTA1YmEyZWI0ZjY3MThiNTI3YjM1MzRhODg0OTc0OTYuLmIyMDE0OGZkZWQyYTQ2Y2My
NmM0ZDBkZjc5NDI3MThhNmY1OGMyODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL0JhY2tGb3J3YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQmFj
a0ZvcndhcmRMaXN0LmNwcApAQCAtMjcsMTIgKzI3LDEyIEBACiAjaW5jbHVkZSAiV2ViS2l0RExM
LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCiAKKyNpbmNsdWRlIDxXZWJDb3JlL0Jh
Y2tGb3J3YXJkQ2FjaGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJDbGll
bnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Mb2dnaW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlQ2FjaGUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQg
RGVmYXVsdENhcGFjaXR5ID0gMTAwOwpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6YWRkSXRlbShSZWY8SGlzdG9yeUl0ZW0+JiYgbmV3SXRlbSkKICAgICAgICAgd2hpbGUg
KG1fZW50cmllcy5zaXplKCkgPiB0YXJnZXRTaXplKSB7CiAgICAgICAgICAgICBSZWY8SGlzdG9y
eUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMudGFrZUxhc3QoKTsKICAgICAgICAgICAgIG1fZW50cnlI
YXNoLnJlbW92ZShpdGVtLnB0cigpKTsKLSAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9u
KCkucmVtb3ZlKGl0ZW0pOworICAgICAgICAgICAgQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xldG9u
KCkucmVtb3ZlKGl0ZW0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC03NCw3ICs3NCw3IEBAIHZv
aWQgQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFJlZjxIaXN0b3J5SXRlbT4mJiBuZXdJdGVtKQog
ICAgICAgICBSZWY8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBXVEZNb3ZlKG1fZW50cmllc1swXSk7CiAg
ICAgICAgIG1fZW50cmllcy5yZW1vdmUoMCk7CiAgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShp
dGVtLnB0cigpKTsKLSAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoaXRlbSk7
CisgICAgICAgIEJhY2tGb3J3YXJkQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZShpdGVtKTsKICAg
ICAgICAgLS1tX2N1cnJlbnQ7CiAgICAgfQogCkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBCYWNr
Rm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGludCBzaXplKQogICAgIHdoaWxlIChzaXplIDwgc3Rh
dGljX2Nhc3Q8aW50PihtX2VudHJpZXMuc2l6ZSgpKSkgewogICAgICAgICBSZWY8SGlzdG9yeUl0
ZW0+IGl0ZW0gPSBtX2VudHJpZXMudGFrZUxhc3QoKTsKICAgICAgICAgbV9lbnRyeUhhc2gucmVt
b3ZlKGl0ZW0ucHRyKCkpOwotICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZShp
dGVtKTsKKyAgICAgICAgQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKGl0ZW0p
OwogICAgIH0KIAogICAgIGlmICghc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCmluZGV4IGU2MmJmMjYzZTM4NjA1MGYxYTY1YTVk
OGU1OTI3YzUxMDI3NWZhMmIuLjdmNWMxZTczZDQ4ZjRjMDNjYzAyMTA1NTFlZWU1MDg5NTM0ODdk
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmNwcApAQCAtMTg3LDEwICsxODcsMTAgQEAgUmVmPFBsdWdpblBhY2thZ2U+IFBsdWdpblBh
Y2thZ2U6OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb24KICNl
bmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1zdGF0aWMgdm9pZCBnZXRM
aXN0RnJvbVZhcmlhbnRBcmdzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBOUFZhcmlhbnQq
IGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290
T2JqZWN0LCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhTGlzdCkKK3N0YXRpYyB2b2lkIGdl
dExpc3RGcm9tVmFyaWFudEFyZ3MoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgSlNDOjpCaW5k
aW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYg
YUxpc3QpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCi0g
ICAgICAgIGFMaXN0LmFwcGVuZChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBWYXJpYW50VG9WYWx1
ZShleGVjLCAmYXJnc1tpXSwgcm9vdE9iamVjdCkpOworICAgICAgICBhTGlzdC5hcHBlbmQoSlND
OjpCaW5kaW5nczo6Y29udmVydE5QVmFyaWFudFRvVmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwg
JmFyZ3NbaV0sIHJvb3RPYmplY3QpKTsKIH0KIAogc3RhdGljIGJvb2wgTlBOX0V2YWx1YXRlKE5Q
UCBpbnN0YW5jZSwgTlBPYmplY3QqIG8sIE5QU3RyaW5nKiBzLCBOUFZhcmlhbnQqIHZhcmlhbnQp
CkBAIC0yMTEsMTIgKzIxMSwxMiBAQCBzdGF0aWMgYm9vbCBOUE5fRXZhbHVhdGUoTlBQIGluc3Rh
bmNlLCBOUE9iamVjdCogbywgTlBTdHJpbmcqIHMsIE5QVmFyaWFudCogdmFyaQogICAgICAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogCi0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAgICAgICAgIFN0cmluZyBzY3JpcHRTdHJp
bmcgPSBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwogCi0gICAgICAg
IEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgSlNDOjptYWtl
U291cmNlKHNjcmlwdFN0cmluZywgeyB9KSwgSlNDOjpKU1ZhbHVlKCkpOworICAgICAgICBKU0M6
OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6bWFrZVNvdXJjZShzY3JpcHRTdHJpbmcsIHsgfSksIEpTQzo6SlNWYWx1ZSgpKTsKIAot
ICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXR1
cm5WYWx1ZSwgdmFyaWFudCk7CisgICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRv
TlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIHJldHVyblZhbHVlLCB2YXJpYW50KTsKICAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQpAQCAtMjUzLDggKzI1Myw4IEBAIHN0YXRpYyBib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBP
YmplY3QqIG8sIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhCiAgICAgICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gb2Jq
LT5pbXAtPmdldChleGVjLCBKU0M6OkJpbmRpbmdzOjppZGVudGlmaWVyRnJvbU5QSWRlbnRpZmll
cihleGVjLCBpLT5zdHJpbmcoKSkpOworICAgICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OworICAgICAgICBKU0M6OkpTVmFsdWUgZnVu
Y3Rpb24gPSBvYmotPmltcC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6QmluZGluZ3M6
OmlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxPYmplY3QsIGktPnN0cmlu
ZygpKSk7CiAgICAgICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIEpTQzo6Q2Fs
bFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAg
ICAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCkBAIC0yNjIsMTEgKzI2
MiwxMSBAQCBzdGF0aWMgYm9vbCBOUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOUElk
ZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYQogCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1
bmN0aW9uIG9iamVjdC4KICAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0
OwotICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50LCBy
b290T2JqZWN0LCBhcmdMaXN0KTsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdFYgPSBKU0M6
OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqLT5pbXAsIGFyZ0xp
c3QpOworICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3MsIGFyZ0NvdW50LCByb290T2JqZWN0LCBhcmdMaXN0KTsKKyAgICAgICAgSlNDOjpKU1Zh
bHVlIHJlc3VsdFYgPSBKU0M6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgZnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSwgb2JqLT5pbXAsIGFyZ0xpc3QpOwogCiAgICAgICAgIC8vIENvbnZl
cnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgotICAgICAgICBK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1
bHQpOworICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCByZXN1bHRWLCByZXN1bHQpOwogICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCA1NDcxNmEwYmIyYjFmYWI3
NWQ4MWRlNDJhZWU5NmVlYTJmNmIxM2U2Li5lNWVmNjNiNGNkODY3MTdiMzYwYjA5OWM4NjJlMjdh
NjM1MTE1MDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKQEAgLTgxLDcgKzgxLDYgQEAKICNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luLmgiCiAjZW5kaWYKIAotdXNpbmcgSlNDOjpFeGVjU3RhdGU7CiB1c2luZyBKU0M6OkpT
TG9jazsKIHVzaW5nIEpTQzo6SlNPYmplY3Q7CiB1c2luZyBKU0M6OkpTVmFsdWU7CkBAIC00NDUs
MTAgKzQ0NCwxMCBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVl
c3QqIHJlcXVlc3QpCiAgICAgaWYgKHRhcmdldEZyYW1lTmFtZS5pc051bGwoKSkgewogICAgICAg
ICBDU3RyaW5nIGNzdHI7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSA9ICptX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soJnN0
YXRlKTsKKyAgICAgICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCA9ICpt
X3BhcmVudEZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CisgICAg
ICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKCZnbG9iYWxPYmplY3QpOwogICAgICAgICAg
ICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0
LmdldFN0cmluZygmc3RhdGUsIHJlc3VsdFN0cmluZykpCisgICAgICAgICAgICBpZiAocmVzdWx0
ICYmIHJlc3VsdC5nZXRTdHJpbmcoJmdsb2JhbE9iamVjdCwgcmVzdWx0U3RyaW5nKSkKICAgICAg
ICAgICAgICAgICBjc3RyID0gcmVzdWx0U3RyaW5nLnV0ZjgoKTsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKaW5kZXggOTEyMGFj
YzhlMGI5Zjk1ZTU2Nzk2MTRjMDk4ODIxMWYyZTg1Mzc3Mi4uOWM5NmE2N2U5ZDBjMWY5MDQ0MmYw
YjQwYzQ0ODI2YjVjNTZiNWEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViQ29yZVN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNv
cmVTdGF0aXN0aWNzLmNwcApAQCAtMjksMTMgKzI5LDEzIEBACiAjaW5jbHVkZSAiQ09NUHJvcGVy
dHlCYWcuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9NZW1vcnlTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9CYWNr
Rm9yd2FyZENhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FjaGUuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0dDQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR2x5cGhQ
YWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZUNhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlQ29uc29sZUNsaWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVk
QnVmZmVyLmg+CkBAIC0zMjAsNyArMzIwLDcgQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6
Y2FjaGVkUGFnZUNvdW50KF9PdXRfIElOVCogY291bnQpCiAgICAgaWYgKCFjb3VudCkKICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgICpjb3VudCA9IFBhZ2VDYWNoZTo6c2luZ2xldG9u
KCkucGFnZUNvdW50KCk7CisgICAgKmNvdW50ID0gQmFja0ZvcndhcmRDYWNoZTo6c2luZ2xldG9u
KCkucGFnZUNvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTMyOSw2ICszMjksNiBA
QCBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNzOjpjYWNoZWRGcmFtZUNvdW50KF9PdXRfIElOVCog
Y291bnQpCiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAg
ICpjb3VudCA9IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuZnJhbWVDb3VudCgpOworICAgICpjb3Vu
dCA9IEJhY2tGb3J3YXJkQ2FjaGU6OnNpbmdsZXRvbigpLmZyYW1lQ291bnQoKTsKICAgICByZXR1
cm4gU19PSzsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCAyNjIxMWZhOTY3
ODA2YTQ0ZmFhZDA2OGEwNzhiMTM2MzE4ZWU0YjBmLi45N2YxYWY4NjkwZDFjNTZmZjRhYTRlYWZi
ODRkZDJjYzM3ZmU2MzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC05OTIs
NyArOTkyLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0
dGVkRm9yTmV3UGFnZSgpCiAgICAgY29yZShtX3dlYkZyYW1lKS0+Y3JlYXRlVmlldyhlbmNsb3Np
bmdJbnRSZWN0KGxvZ2ljYWxGcmFtZSkuc2l6ZSgpLCBiYWNrZ3JvdW5kQ29sb3IsIC8qIGZpeGVk
TGF5b3V0U2l6ZSAqLyB7IH0sIC8qIGZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0ICovIHsgfSk7CiB9
CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCkK
K3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJlc3RvcmVGcm9tQmFja0ZvcndhcmRDYWNo
ZSgpCiB7CiB9CiAKQEAgLTEyNDMsNyArMTI0Myw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKERPTVdyYXBwZXJXb3JsZCYK
ICAgICBpZiAoJndvcmxkICE9ICZtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihjb3JlRnJhbWUtPnNjcmlw
dCgpLmdsb2JhbE9iamVjdCh3b3JsZCktPmdsb2JhbEV4ZWMoKSk7CisgICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSB0b1JlZihjb3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdCh3b3JsZCkp
OwogICAgIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCA9IHRvUmVmKGNvcmVGcmFtZS0+c2NyaXB0
KCkuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CiAgICAgQVNTRVJUKHdpbmRvd09iamVjdCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IDg1NmY1MjVmZGNlOTNkZGY0ZmU3ZmRlYWZmNDI1
NWU1ZmY1NDc3NTAuLjY3NmE4ZDYxYzUzODkwYjk5YTRlNDQ3NzgwZTVmYWQwYzkyOTI2ODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaApAQCAtMTc2LDcgKzE3Niw3IEBAIGNsYXNzIFdlYkZy
YW1lTG9hZGVyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50LCBwdWJs
aWMgV2ViQ29yZTo6CiAgICAgdm9pZCBkaWRGaW5pc2hMb2FkKCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRpZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZXN0b3Jl
RnJvbUJhY2tGb3J3YXJkQ2FjaGUoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGlzcGF0Y2hEaWRC
ZWNvbWVGcmFtZXNldChib29sKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmNw
cAppbmRleCAyYTVlMTA1MzY3YTBmZmY2OTVmODA1MzFiYzRiNWM3Yjk5OTk5ZDczLi4yMDBhNjNj
NmM1ZGRkZDkyNzhjMDRiNGQyZmQ0MTMxMDI0MWE5NzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0
b3JlLmNwcApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiV2ViSGlzdG9yeS5oIgogI2lu
Y2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VDYWNoZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvQmFja0ZvcndhcmRDYWNoZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dl
YkZyYW1lLmNwcAppbmRleCAxYTZhNzNiNmVlOGViMDdhZTY2YjkyNWU4Njg4OTU5NzUzMDFlMjNm
Li42ZWZhZThmNjIyOTg0OWNhMWY1OTZiNzM1NWNlZWY0M2NmZDY5MGE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViRnJhbWUuY3BwCkBAIC01MjgsNyArNTI4LDcgQEAgSlNHbG9iYWxDb250ZXh0
UmVmIFdlYkZyYW1lOjpnbG9iYWxDb250ZXh0KCkKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdG9HbG9iYWxSZWYoY29yZUZyYW1lLT5z
Y3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVj
KCkpOworICAgIHJldHVybiB0b0dsb2JhbFJlZihjb3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkpOwogfQogCiBKU0dsb2JhbENvbnRleHRSZWYg
V2ViRnJhbWU6Omdsb2JhbENvbnRleHRGb3JTY3JpcHRXb3JsZChJV2ViU2NyaXB0V29ybGQqIGlX
b3JsZCkKQEAgLTU0MSw3ICs1NDEsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgV2ViRnJhbWU6Omds
b2JhbENvbnRleHRGb3JTY3JpcHRXb3JsZChJV2ViU2NyaXB0V29ybGQqIGlXb3JsZAogICAgIGlm
ICghd29ybGQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHRvR2xvYmFsUmVmKGNv
cmVGcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHdvcmxkLT53b3JsZCgpKS0+Z2xvYmFsRXhl
YygpKTsKKyAgICByZXR1cm4gdG9HbG9iYWxSZWYoY29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxP
YmplY3Qod29ybGQtPndvcmxkKCkpKTsKIH0KIAogSFJFU1VMVCBXZWJGcmFtZTo6bG9hZFJlcXVl
c3QoX0luX29wdF8gSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QpCkBAIC0yMDY2LDkgKzIwNjYsOSBA
QCBIUkVTVUxUIFdlYkZyYW1lOjpzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0SW5TY3JpcHRX
b3JsZChJV2ViU2NyaXB0V29ybGQqIGlXbwogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0Lmlz
Qm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQog
ICAgICAgICByZXR1cm4gU19PSzsKIAotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gYW55V29y
bGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwotICAgIFN0cmluZyByZXN1bHRTdHJpbmcgPSByZXN1bHQudG9XVEZTdHJpbmcoZXhl
Yyk7CisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGFueVdv
cmxkR2xvYmFsT2JqZWN0OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IHJlc3VsdC50b1dURlN0cmluZyhs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAqZXZhbHVhdGlvblJlc3VsdCA9IEJTdHJpbmcocmVz
dWx0U3RyaW5nKS5yZWxlYXNlKCk7CiAKICAgICByZXR1cm4gU19PSzsKQEAgLTIxMTksNyArMjEx
OSw3IEBAIENPTVB0cjxJQWNjZXNzaWJsZT4gV2ViRnJhbWU6OmFjY2Vzc2libGUoKSBjb25zdAog
ICAgIGVsc2UgaWYgKCFtX2FjY2Vzc2libGUgfHwgbV9hY2Nlc3NpYmxlLT5kb2N1bWVudCgpICE9
IGN1cnJlbnREb2N1bWVudCkgewogICAgICAgICAvLyBFaXRoZXIgd2UndmUgbmV2ZXIgaGFkIGEg
d3JhcHBlciBmb3IgdGhpcyBmcmFtZSdzIHRvcC1sZXZlbCBEb2N1bWVudCwKICAgICAgICAgLy8g
dGhlIERvY3VtZW50IHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQgYW5kIGl0cyB3cmFwcGVyIHdhcyBk
ZXRhY2hlZCwgb3IKLSAgICAgICAgLy8gdGhlIHByZXZpb3VzIERvY3VtZW50IGlzIGluIHRoZSBw
YWdlIGNhY2hlLCBhbmQgdGhlIGN1cnJlbnQgZG9jdW1lbnQKKyAgICAgICAgLy8gdGhlIHByZXZp
b3VzIERvY3VtZW50IGlzIGluIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIGFuZCB0aGUgY3VycmVu
dCBkb2N1bWVudAogICAgICAgICAvLyBuZWVkcyB0byBiZSB3cmFwcGVkLgogICAgICAgICBtX2Fj
Y2Vzc2libGUgPSBuZXcgQWNjZXNzaWJsZURvY3VtZW50KGN1cnJlbnREb2N1bWVudCwgd2ViVmll
dygpLT52aWV3V2luZG93KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAK
aW5kZXggNzkwYzFhMWI4OThiZjVkMDMxNjBjZDI5YmI4ZjA3MjQ0ZTQ1Njg2Mi4uNTQwNDZkNmFk
ZDcxNzI0ZjJlOGIyZWEyOTQ4ZTcwYzQwZDdiZGIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2Vi
Vmlldy5jcHAKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0FYT2JqZWN0Q2Fj
aGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9CYWNrRm9yd2FyZENh
Y2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlU3RvcmFn
ZVByb3ZpZGVyLmg+CkBAIC0xMzEsOCArMTMyLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL01lbW9y
eVJlbGVhc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bh
Z2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZUNvbmZpZ3VyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGF0aFV0aWxpdGllcy5oPgpAQCAtNTQwLDEzICs1MzksMTMgQEAgdm9p
ZCBXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICB1
bnNpZ25lZCBjYWNoZU1heERlYWRDYXBhY2l0eSA9IDA7CiAgICAgU2Vjb25kcyBkZWFkRGVjb2Rl
ZERhdGFEZWxldGlvbkludGVydmFsOwogCi0gICAgdW5zaWduZWQgcGFnZUNhY2hlU2l6ZSA9IDA7
CisgICAgdW5zaWduZWQgYmFja0ZvcndhcmRDYWNoZVNpemUgPSAwOwogCiAKICAgICBzd2l0Y2gg
KGNhY2hlTW9kZWwpIHsKICAgICBjYXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdlcjogewot
ICAgICAgICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKLSAgICAgICAgcGFnZUNh
Y2hlU2l6ZSA9IDA7CisgICAgICAgIC8vIEJhY2svZm9yd2FyZCBjYWNoZSBjYXBhY2l0eSAoaW4g
cGFnZXMpCisgICAgICAgIGJhY2tGb3J3YXJkQ2FjaGVTaXplID0gMDsKIAogICAgICAgICAvLyBP
YmplY3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMpCiAgICAgICAgIGlmIChtZW1TaXplID49
IDIwNDgpCkBAIC01NzEsMTUgKzU3MCwxNSBAQCB2b2lkIFdlYlZpZXc6OnNldENhY2hlTW9kZWwo
V2ViQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyOiB7Ci0gICAgICAgIC8vIFBhZ2UgY2FjaGUg
Y2FwYWNpdHkgKGluIHBhZ2VzKQorICAgICAgICAvLyBCYWNrL2ZvcndhcmQgY2FjaGUgY2FwYWNp
dHkgKGluIHBhZ2VzKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAxMDI0KQotICAgICAgICAgICAg
cGFnZUNhY2hlU2l6ZSA9IDM7CisgICAgICAgICAgICBiYWNrRm9yd2FyZENhY2hlU2l6ZSA9IDM7
CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gNTEyKQotICAgICAgICAgICAgcGFnZUNhY2hl
U2l6ZSA9IDI7CisgICAgICAgICAgICBiYWNrRm9yd2FyZENhY2hlU2l6ZSA9IDI7CiAgICAgICAg
IGVsc2UgaWYgKG1lbVNpemUgPj0gMjU2KQotICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDE7
CisgICAgICAgICAgICBiYWNrRm9yd2FyZENhY2hlU2l6ZSA9IDE7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAwOworICAgICAgICAgICAgYmFja0ZvcndhcmRDYWNo
ZVNpemUgPSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRl
cykKICAgICAgICAgaWYgKG1lbVNpemUgPj0gMjA0OCkKQEAgLTYxNywxOCArNjE2LDE4IEBAIHZv
aWQgV2ViVmlldzo6c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFdlYkNhY2hlTW9kZWxQcmltYXJ5V2ViQnJvd3Nl
cjogewotICAgICAgICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKKyAgICAgICAg
Ly8gQmFjay9mb3J3YXJkIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKICAgICAgICAgLy8gKFJl
c2VhcmNoIGluZGljYXRlcyB0aGF0IHZhbHVlIC8gcGFnZSBkcm9wcyBzdWJzdGFudGlhbGx5IGFm
dGVyIDMgcGFnZXMuKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAyMDQ4KQotICAgICAgICAgICAg
cGFnZUNhY2hlU2l6ZSA9IDU7CisgICAgICAgICAgICBiYWNrRm9yd2FyZENhY2hlU2l6ZSA9IDU7
CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMTAyNCkKLSAgICAgICAgICAgIHBhZ2VDYWNo
ZVNpemUgPSA0OworICAgICAgICAgICAgYmFja0ZvcndhcmRDYWNoZVNpemUgPSA0OwogICAgICAg
ICBlbHNlIGlmIChtZW1TaXplID49IDUxMikKLSAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAz
OworICAgICAgICAgICAgYmFja0ZvcndhcmRDYWNoZVNpemUgPSAzOwogICAgICAgICBlbHNlIGlm
IChtZW1TaXplID49IDI1NikKLSAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAyOworICAgICAg
ICAgICAgYmFja0ZvcndhcmRDYWNoZVNpemUgPSAyOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBwYWdlQ2FjaGVTaXplID0gMTsKKyAgICAgICAgICAgIGJhY2tGb3J3YXJkQ2FjaGVTaXplID0g
MTsKIAogICAgICAgICAvLyBPYmplY3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMpCiAgICAg
ICAgIC8vIChUZXN0aW5nIGluZGljYXRlcyB0aGF0IHZhbHVlIC8gTUIgZGVwZW5kcyBoZWF2aWx5
IG9uIGNvbnRlbnQgYW5kCkBAIC02ODYsNyArNjg1LDcgQEAgdm9pZCBXZWJWaWV3OjpzZXRDYWNo
ZU1vZGVsKFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICBhdXRvJiBtZW1vcnlDYWNoZSA9
IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKTsKICAgICBtZW1vcnlDYWNoZS5zZXRDYXBhY2l0aWVz
KGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENh
cGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZS5zZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVy
dmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIFBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKKyAgICBCYWNrRm9yd2FyZENhY2hl
OjpzaW5nbGV0b24oKS5zZXRNYXhTaXplKGJhY2tGb3J3YXJkQ2FjaGVTaXplKTsKIAogI2lmIFVT
RShDRlVSTENPTk5FQ1RJT04pCiAgICAgLy8gRG9uJ3Qgc2hyaW5rIGEgYmlnIGRpc2sgY2FjaGUs
IHNpbmNlIHRoYXQgd291bGQgY2F1c2UgY2h1cm4uCkBAIC0zNjUzLDkgKzM2NTIsOSBAQCBIUkVT
VUxUIFdlYlZpZXc6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nKF9Jbl8g
QlNUUiBzY3JpcHQsIC8vIGFzcwogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uUmVzdWx0KQogICAg
ICAgICByZXR1cm4gRV9GQUlMOwogICAgIGVsc2UgaWYgKHNjcmlwdEV4ZWN1dGlvblJlc3VsdC5p
c1N0cmluZygpKSB7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gY29yZUZyYW1lLT5z
Y3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgICAgICpyZXN1
bHQgPSBCU3RyaW5nKHNjcmlwdEV4ZWN1dGlvblJlc3VsdC5nZXRTdHJpbmcoZXhlYykpOworICAg
ICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gY29yZUZyYW1l
LT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICAq
cmVzdWx0ID0gQlN0cmluZyhzY3JpcHRFeGVjdXRpb25SZXN1bHQuZ2V0U3RyaW5nKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKICAgICB9CiAKICAgICByZXR1cm4gU19PSzsKQEAgLTUzODUsNyArNTM4
NCw3IEBAIEhSRVNVTFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKElXZWJOb3Rp
ZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICBociA9IHByZWZlcmVuY2VzLT51c2VzUGFnZUNh
Y2hlKCZlbmFibGVkKTsKICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwot
ICAgIHNldHRpbmdzLnNldFVzZXNQYWdlQ2FjaGUoISFlbmFibGVkKTsKKyAgICBzZXR0aW5ncy5z
ZXRVc2VzQmFja0ZvcndhcmRDYWNoZSghIWVuYWJsZWQpOwogCiAgICAgaHIgPSBwcmVmZXJlbmNl
cy0+aXNET01QYXN0ZUFsbG93ZWQoJmVuYWJsZWQpOwogICAgIGlmIChGQUlMRUQoaHIpKQpAQCAt
NjU1NSw3ICs2NTU0LDcgQEAgSFJFU1VMVCBXZWJWaWV3OjpyZXBvcnRFeGNlcHRpb24oX0luXyBK
U0NvbnRleHRSZWYgY29udGV4dCwgX0luXyBKU1ZhbHVlUmVmIGV4Y2UKICAgICBpZiAoIWNvbnRl
eHQgfHwgIWV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKIAotICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pTKGNvbnRleHQpOworICAgIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CiAgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBh
IERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBv
cmlnaW5hdGUgZnJvbSBhIFdlYlZpZXcuCkBAIC02NTc2LDkgKzY1NzUsOSBAQCBIUkVTVUxUIFdl
YlZpZXc6OmVsZW1lbnRGcm9tSlMoX0luXyBKU0NvbnRleHRSZWYgY29udGV4dCwgX0luXyBKU1Zh
bHVlUmVmIG5vZGVPYgogICAgIGlmICghY29udGV4dCB8fCAhbm9kZU9iamVjdCkKICAgICAgICAg
cmV0dXJuIEVfSU5WQUxJREFSRzsKIAotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhj
b250ZXh0KTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIEVsZW1lbnQq
IGVsdCA9IEpTRWxlbWVudDo6dG9XcmFwcGVkKGV4ZWMtPnZtKCksIHRvSlMoZXhlYywgbm9kZU9i
amVjdCkpOworICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSB0
b0pTKGNvbnRleHQpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sobGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgRWxlbWVudCogZWx0ID0gSlNFbGVtZW50Ojp0b1dyYXBwZWQobGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKSwgdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBub2RlT2JqZWN0KSk7
CiAgICAgaWYgKCFlbHQpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5YzljNTAwYTEzMjY5MmVmZjhi
YTk1YWVjMDdkZTQ2YWFjOTM5ZDRjLi5kZDExYmEwN2Y4YWJiOTFhODM3YzhkMjJiY2RmMjFkZjUx
MGNlMjQ2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTM1IEBACisyMDE5LTEwLTE2ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gVGhyZWFkIEpTR2xvYmFsT2JqZWN0KiBpbnN0ZWFk
IG9mIEV4ZWNTdGF0ZSoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMjM5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHA6CisKKzIwMTktMTAtMTYgIEFu
ZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtRdWljayBMb29rXSBUZXN0
IHRoYXQgbGVnYWN5IHdlYiB2aWV3cyBsb2FkIHByZXZpZXdzIGJlZm9yZSBkZWNpZGluZyBjb250
ZW50IHBvbGljeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAyOTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUXVpY2tMb29rLm1tOgorICAg
ICAgICAoLVtRdWlja0xvb2tMZWdhY3lEZWxlZ2F0ZSB3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck1J
TUVUeXBlOnJlcXVlc3Q6ZnJhbWU6ZGVjaXNpb25MaXN0ZW5lcjpdKToKKyAgICAgICAgKFRFU1Qp
OgorICAgICAgICAoLVtRdWlja0xvb2tGcmFtZUxvYWREZWxlZ2F0ZSB3ZWJWaWV3OmRpZEZpbmlz
aExvYWRGb3JGcmFtZTpdKTogRGVsZXRlZC4KKworMjAxOS0xMC0xNiAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBQYWdlQ2FjaGUgdG8gQmFja0Zvcndh
cmRDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjAzMDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAg
ICBSZW5hbWUgUGFnZUNhY2hlIHRvIEJhY2tGb3J3YXJkQ2FjaGUgZm9yIGNsYXJpdHkgYW5kIGNv
bnNpc3RlbmN5IHdpdGggdGhlIFVJUHJvY2VzcydzIFdlYkJhY2tGb3J3YXJkQ2FjaGUuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChUZXN0T3B0
aW9uczo6VGVzdE9wdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChv
dmVycmlkZVByZWZlcmVuY2VDYWxsYmFjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0
aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoK
KyAgICAgICAgKHJlc2V0V2ViUHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAg
ICAoc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9ET01XaW5kb3dF
eHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpET01X
aW5kb3dFeHRlbnNpb25Ob0NhY2hlOjp3aWxsRGlzY29ubmVjdERPTVdpbmRvd0V4dGVuc2lvbkZy
b21HbG9iYWxPYmplY3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RE9NV2luZG93RXh0ZW5z
aW9uTm9DYWNoZTo6ZGlkUmVjb25uZWN0RE9NV2luZG93RXh0ZW5zaW9uVG9HbG9iYWxPYmplY3Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0RpZFJlbW92ZUZyYW1lRnJv
bUhpZWFyY2h5SW5QYWdlQ2FjaGUuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRGlkUmVtb3ZlRnJhbWVGcm9t
SGllYXJjaHlJblBhZ2VDYWNoZV9CdW5kbGUuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
RGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJbkJhY2tGb3J3YXJkQ2FjaGVUZXN0OjpEaWRSZW1v
dmVGcmFtZUZyb21IaWVhcmNoeUluQmFja0ZvcndhcmRDYWNoZVRlc3QpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6RGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJbkJhY2tGb3J3YXJkQ2FjaGVU
ZXN0OjpkaWRDcmVhdGVQYWdlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dC9MYXlvdXRNaWxlc3RvbmVzV2l0aEFsbENvbnRlbnRJbkZyYW1lLmNwcDoKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW06CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRTZXR0aW5ncy5jcHA6CisgICAgICAgICh0ZXN0
V2ViS2l0U2V0dGluZ3MpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6Om92ZXJyaWRlUHJl
ZmVyZW5jZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6dXBkYXRlVGVzdE9wdGlvbnNGcm9tVGVzdEhlYWRl
cik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oOgorICAgICAgICAo
V1RSOjpUZXN0T3B0aW9uczo6aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyBjb25zdCk6Cisg
ICAgICAgICogbGxkYi9sbGRiX3dlYmtpdC5weToKKyAgICAgICAgKFdlYkNvcmVGcmFtZV9TdW1t
YXJ5UHJvdmlkZXIpOgorICAgICAgICAoV2ViQ29yZURvY3VtZW50X1N1bW1hcnlQcm92aWRlcik6
CisgICAgICAgIChXZWJDb3JlRG9jdW1lbnRQcm92aWRlci5wYWdlX2NhY2hlX3N0YXRlKToKKwor
MjAxOS0xMC0xNiAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CisKKyAgICAg
ICAgUHl0aG9uIDM6IEFkZCBzdXBwb3J0IGluIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjQ2OAor
CisgICAgICAgIFJldmlld2VkIGJ5IFN0ZXBoYW5pZSBMZXdpcy4KKworICAgICAgICBNYWtlIHRo
ZSBpcmMgbGlicmFyeSB3ZSB1c2UgUHl0aG9uIDMgY29tcGF0aWJsZS4KKworICAgICAgICAqIFNj
cmlwdHMvdGVzdC13ZWJraXRweS1weXRob24zOiBBZGQgd2Via2l0cHkuY29tbW9uLm5ldC5idWd6
aWxsYSB0byB0aGUgdGVzdCBsaXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9pcmMvaXJjYm90LnB5OiBVc2UgZnVsbCBpbXBvcnQgcGF0aHMuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2lyYy9pcmNsaWIucHk6IEZpeCBleGNlcHRpb25zLCBw
cmludGluZyBmb3IgUHl0aG9uIDMuCisgICAgICAgIChDb25uZWN0aW9uLl9nZXRfc29ja2V0KTog
CisgICAgICAgIChTZXJ2ZXJDb25uZWN0aW9uLmNvbm5lY3QpOgorICAgICAgICAoU2VydmVyQ29u
bmVjdGlvbi5wcm9jZXNzX2RhdGEpOgorICAgICAgICAoU2VydmVyQ29ubmVjdGlvbi5kaXNjb25u
ZWN0KToKKyAgICAgICAgKFNlcnZlckNvbm5lY3Rpb24uc2VuZF9yYXcpOgorICAgICAgICAoREND
Q29ubmVjdGlvbi5jb25uZWN0KToKKyAgICAgICAgKERDQ0Nvbm5lY3Rpb24ubGlzdGVuKToKKyAg
ICAgICAgKERDQ0Nvbm5lY3Rpb24uZGlzY29ubmVjdCk6CisgICAgICAgIChEQ0NDb25uZWN0aW9u
LnByb2Nlc3NfZGF0YSk6CisgICAgICAgIChEQ0NDb25uZWN0aW9uLnByaXZtc2cpOgorCisyMDE5
LTEwLTE2ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJl
c291cmNlIExvYWQgU3RhdGlzdGljcyAoZXhwZXJpbWVudGFsKTogQmxvY2sgYWxsIHRoaXJkLXBh
cnR5IGNvb2tpZXMgb24gd2Vic2l0ZXMgd2l0aG91dCBwcmlvciB1c2VyIGludGVyYWN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMwMTcKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2MjYyNzA4PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFs
ZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgVGhlc2UgY2hhbmdlcyBhcmUgdGVzdCBpbmZyYXN0
cnVjdHVyZSB0byBiZSBhYmxlIHRvIHRvZ2dsZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgdGhyb3Vn
aCB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKCku
CisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlkUmVj
ZWl2ZU1lc3NhZ2VUb1BhZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1
bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2Fs
bGJhY2spOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhp
cmRQYXJ0eUNvb2tpZXMpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAg
ICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUpOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkU2V0
U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0SW52b2NhdGlvbi5oOgorCisyMDE5LTEwLTE2ICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFdLV2Vic2l0ZURhdGFTdG9yZVN0YXRpc3Rp
Y3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCkgc2hvdWxkIGNhbGwgc3RvcmUuc2V0VXNlSVRQRGF0
YWJhc2UoZmFsc2UpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDMwMjAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2MzE0NDg0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEFkZGVkIGEgY29tcGxldGlvbiBo
YW5kbGVyIHRvIHNldFVzZUlUUERhdGFiYXNlKCkgdG8gYXZvaWQgcmFjZQorICAgICAgICBjb25k
aXRpb25zLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRVc2VJVFBEYXRhYmFzZSk6CisKIDIw
MTktMTAtMTYgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAg
ICAgICAgRHVtcFJlbmRlclRyZWUgc2hvdWxkIGNsZWFyIFdURkxvZ0NoYW5uZWxTdGF0ZTo6T25X
aXRoQWNjdW11bGF0aW9uIHN0YXRlIHNldCBieSB0ZXN0UnVubmVyLmFjY3VtbXVsYXRlTG9nc0Zv
ckNoYW5uZWwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcAppbmRleCAxZmY4NDllMTdh
ODViNmYyZmRhOGE5MGVhNDBhYWI5Mjk5MzY2NWFiLi41NTZlZWMyNzY2MzdlODFiOTNmNzdkOTY1
OTM3NWNmYzJhNDk1OTU5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0
aW9ucy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwCkBAIC04
MSw4ICs4MSw4IEBAIFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYg
cGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1CiAgICAgICAgICAgICBlbmFibGVJ
bnRlcnNlY3Rpb25PYnNlcnZlciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlRXBoZW1lcmFsU2Vzc2lvbiIpCiAgICAgICAg
ICAgICB1c2VFcGhlbWVyYWxTZXNzaW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQYWdlQ2FjaGUiKQotICAgICAg
ICAgICAgZW5hYmxlUGFnZUNhY2hlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIikKKyAg
ICAgICAgICAgIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwogICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZU1lbnVJdGVtRWxl
bWVudCIpCiAgICAgICAgICAgICBlbmFibGVNZW51SXRlbUVsZW1lbnQgPSBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpOwogICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUtl
eWdlbkVsZW1lbnQiKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgKaW5kZXggMDk2OWIxODZi
ZmEwMWIzMDM1MzhmYWNmZTBlOTQ2MjFlZjllN2U2Ny4uZTUzMzVlODMxMTRlNzllNWI1NGQ4NjFj
M2QyM2ZmY2ViYmE3MGEwYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9w
dGlvbnMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCkBAIC0zMyw3
ICszMyw3IEBAIHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAgICAgYm9vbCB1c2VBY2NlbGVyYXRlZERy
YXdpbmcgeyBmYWxzZSB9OwogICAgIGJvb2wgZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgeyBm
YWxzZSB9OwogICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbiB7IGZhbHNlIH07Ci0gICAgYm9v
bCBlbmFibGVQYWdlQ2FjaGUgeyBmYWxzZSB9OworICAgIGJvb2wgZW5hYmxlQmFja0ZvcndhcmRD
YWNoZSB7IGZhbHNlIH07CiAgICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1lbnQgeyBmYWxzZSB9
OwogICAgIGJvb2wgZW5hYmxlS2V5Z2VuRWxlbWVudCB7IGZhbHNlIH07CiAgICAgYm9vbCBlbmFi
bGVNb2Rlcm5NZWRpYUNvbnRyb2xzIHsgdHJ1ZSB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVy
LmNwcAppbmRleCAxNDdlYjMxZTE4OTk4MDhhZmU0ZDlkNjIxY2U0YmJhZWI4NjljMzcwLi4wMWY3
MzE4ZjE4NDI4NjE1YzU0YjJjYzg4NTM4ODRjNGZmN2M4NGU1IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0UnVubmVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDVGVzdFJ1
bm5lclV0aWxzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU1JldGFpblB0ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxp
bmVzLmg+CkBAIC01ODMsOCArNTg0LDggQEAgc3RhdGljIEpTVmFsdWVSZWYgb3ZlcnJpZGVQcmVm
ZXJlbmNlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGYKICAgICBh
dXRvIHZhbHVlID0gYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbikpOwogICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CiAKLSAgICAvLyBTaG91
bGQgdXNlIGA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0g
LS0+YCBpbnN0ZWFkLgotICAgIFJFTEVBU0VfQVNTRVJUKCFKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKGtleS5nZXQoKSwgIldlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IikpOwor
ICAgIC8vIFNob3VsZCB1c2UgYDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zv
cndhcmRDYWNoZT10cnVlIF0gLS0+YCBpbnN0ZWFkLgorICAgIFJFTEVBU0VfQVNTRVJUKCFKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGtleS5nZXQoKSwgIldlYktpdFVzZXNCYWNrRm9yd2Fy
ZENhY2hlUHJlZmVyZW5jZUtleSIpKTsKIAogICAgIFRlc3RSdW5uZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
ICAgICBjb250cm9sbGVyLT5vdmVycmlkZVByZWZlcmVuY2Uoa2V5LmdldCgpLCB2YWx1ZS5nZXQo
KSk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggZWNm
YTQ4N2MyNDdjY2Y3YTMxZDU4ZmM2OGI1MmEwNzdkZDkwZGM2NC4uMTg4MGJiZTUzMjc3YzA4ODA0
ZWRjZTBlMmQ1ZjdiOTAzOWRmMWNiMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1w
UmVuZGVyVHJlZS5tbQpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgc3RhdGljIHZvaWQgc2V0V2ViUHJl
ZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKICAgICBw
cmVmZXJlbmNlcy5yZXF1ZXN0SWRsZUNhbGxiYWNrRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlUmVx
dWVzdElkbGVDYWxsYmFjazsKICAgICBwcmVmZXJlbmNlcy5hc3luY0NsaXBib2FyZEFQSUVuYWJs
ZWQgPSBvcHRpb25zLmVuYWJsZUFzeW5jQ2xpcGJvYXJkQVBJOwogICAgIHByZWZlcmVuY2VzLnBy
aXZhdGVCcm93c2luZ0VuYWJsZWQgPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb247Ci0gICAg
cHJlZmVyZW5jZXMudXNlc1BhZ2VDYWNoZSA9IG9wdGlvbnMuZW5hYmxlUGFnZUNhY2hlOworICAg
IHByZWZlcmVuY2VzLnVzZXNQYWdlQ2FjaGUgPSBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2Fj
aGU7CiB9CiAKIC8vIENhbGxlZCBvbmNlIG9uIER1bXBSZW5kZXJUcmVlIHN0YXJ0dXAuCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA2ODg0ODZhODkw
ZGNlOTIxZGQzMTBmZmM0Y2UzMGEyZjgyMTQ4ZjU0Li4yNGQ4YWQwNWRmMWU0MWQ5OGMzZTVmMDli
MmY5NzNiMDkwNmFlYzMzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHAKQEAgLTkxNCw3ICs5MTQsNyBAQCBzdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNl
c0ZvclRlc3RPcHRpb25zKElXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMsIGNvbnN0CiAgICAg
cHJlZnNQcml2YXRlLT5zZXRSZXF1ZXN0SWRsZUNhbGxiYWNrRW5hYmxlZChvcHRpb25zLmVuYWJs
ZVJlcXVlc3RJZGxlQ2FsbGJhY2spOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0QXN5bmNDbGlwYm9h
cmRBUElFbmFibGVkKG9wdGlvbnMuZW5hYmxlQXN5bmNDbGlwYm9hcmRBUEkpOwogICAgIHByZWZl
cmVuY2VzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vz
c2lvbik7Ci0gICAgcHJlZmVyZW5jZXMtPnNldFVzZXNQYWdlQ2FjaGUob3B0aW9ucy5lbmFibGVQ
YWdlQ2FjaGUpOworICAgIHByZWZlcmVuY2VzLT5zZXRVc2VzUGFnZUNhY2hlKG9wdGlvbnMuZW5h
YmxlQmFja0ZvcndhcmRDYWNoZSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgYXBwbGljYXRpb25JZCgp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHktcHl0aG9uMyBiL1Rvb2xz
L1NjcmlwdHMvdGVzdC13ZWJraXRweS1weXRob24zCmluZGV4IGVkYTNhODI5MzBiMDRlNDY5ZmZl
ZWI5MmNlNDQxZDY3NThmMWUzZDEuLjYwMGU4MjA3M2NkYTNlOWViNTkwMWM2YTI2Zjc0NGVlODI4
OWRiZmQgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweS1weXRob24zCisr
KyBiL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweS1weXRob24zCkBAIC0zNSw2ICszNSw3IEBA
IFBZVEhPTjNfQ09NUEFUSUJMRV9ESVJFQ1RPUklFUyA9IFsKICAgJ3dlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0nLAogICAnd2Via2l0cHkuY29tbW9uLnRocmVhZCcsCiAgICd3ZWJraXRweS5jb21tb24u
bmV0LmJ1Z3ppbGxhJywKKyAgJ3dlYmtpdHB5LmNvbW1vbi5uZXQuaXJjJywKIF0KIAogCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvaXJjL2lyY2JvdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9pcmMvaXJjYm90LnB5CmluZGV4IDZm
MjlhNjUyYzgzY2M2YzUyYzMxOGE0YzgyNDFhMTRjMDQwOWIyZWEuLjYxYjM3OGU3OTQ5MTU5MzA0
N2VlZDFlMGU4ZThlNTM4OTdiMGJkZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS9pcmMvaXJjYm90LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGhpcmRwYXJ0eS9pcmMvaXJjYm90LnB5CkBAIC0yNSwxMiArMjUsMTYgQEAKICIiIgogCiBpbXBv
cnQgc3lzCi1mcm9tIFVzZXJEaWN0IGltcG9ydCBVc2VyRGljdAogCi1mcm9tIGlyY2xpYiBpbXBv
cnQgU2ltcGxlSVJDQ2xpZW50Ci1mcm9tIGlyY2xpYiBpbXBvcnQgbm1fdG9fbiwgaXJjX2xvd2Vy
LCBhbGxfZXZlbnRzCi1mcm9tIGlyY2xpYiBpbXBvcnQgcGFyc2VfY2hhbm5lbF9tb2RlcywgaXNf
Y2hhbm5lbAotZnJvbSBpcmNsaWIgaW1wb3J0IFNlcnZlckNvbm5lY3Rpb25FcnJvcgoraWYgc3lz
LnZlcnNpb25faW5mbyA+ICgzLCAwKToKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBVc2Vy
RGljdAorZWxzZToKKyAgICBmcm9tIFVzZXJEaWN0IGltcG9ydCBVc2VyRGljdAorCitmcm9tIHdl
YmtpdHB5LnRoaXJkcGFydHkuaXJjLmlyY2xpYiBpbXBvcnQgU2ltcGxlSVJDQ2xpZW50Citmcm9t
IHdlYmtpdHB5LnRoaXJkcGFydHkuaXJjLmlyY2xpYiBpbXBvcnQgbm1fdG9fbiwgaXJjX2xvd2Vy
LCBhbGxfZXZlbnRzCitmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuaXJjLmlyY2xpYiBpbXBvcnQg
cGFyc2VfY2hhbm5lbF9tb2RlcywgaXNfY2hhbm5lbAorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5
LmlyYy5pcmNsaWIgaW1wb3J0IFNlcnZlckNvbm5lY3Rpb25FcnJvcgogCiBjbGFzcyBTaW5nbGVT
ZXJ2ZXJJUkNCb3QoU2ltcGxlSVJDQ2xpZW50KToKICAgICAiIiJBIHNpbmdsZS1zZXJ2ZXIgSVJD
IGJvdCBjbGFzcy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9pcmMvaXJjbGliLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2lyYy9p
cmNsaWIucHkKaW5kZXggNWY3MTQxYzRlODhlMjc2NjgyODEyZDNjZjQ1ODVkMmZiZDIzYTczZC4u
ODEyZjZmZDZiMTAwMTkyMjcxMDM5MDk4YzlhNjY2OGU3MDcyZGJjMiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2lyYy9pcmNsaWIucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2lyYy9pcmNsaWIucHkKQEAgLTM0Miw3ICszNDIs
NyBAQCBkZWYgX19pbml0X18oc2VsZiwgaXJjbGlib2JqKToKICAgICAgICAgc2VsZi5pcmNsaWJv
YmogPSBpcmNsaWJvYmoKIAogICAgIGRlZiBfZ2V0X3NvY2tldCgpOgotICAgICAgICByYWlzZSBJ
UkNFcnJvciwgIk5vdCBvdmVycmlkZGVuIgorICAgICAgICByYWlzZSBJUkNFcnJvcigiTm90IG92
ZXJyaWRkZW4iKQogCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgIyMj
IENvbnZlbmllbmNlIHdyYXBwZXJzLgpAQCAtNDMzLDEwICs0MzMsMTAgQEAgZGVmIGNvbm5lY3Qo
c2VsZiwgc2VydmVyLCBwb3J0LCBuaWNrbmFtZSwgcGFzc3dvcmQ9Tm9uZSwgdXNlcm5hbWU9Tm9u
ZSwKICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNvbm5lY3QoKHNlbGYuc2VydmVyLCBzZWxmLnBv
cnQpKQogICAgICAgICAgICAgaWYgc3NsOgogICAgICAgICAgICAgICAgIHNlbGYuc3NsID0gc29j
a2V0LnNzbChzZWxmLnNvY2tldCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgeDoKKyAg
ICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB4OgogICAgICAgICAgICAgc2VsZi5zb2NrZXQu
Y2xvc2UoKQogICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBOb25lCi0gICAgICAgICAgICByYWlz
ZSBTZXJ2ZXJDb25uZWN0aW9uRXJyb3IsICJDb3VsZG4ndCBjb25uZWN0IHRvIHNvY2tldDogJXMi
ICUgeAorICAgICAgICAgICAgcmFpc2UgU2VydmVyQ29ubmVjdGlvbkVycm9yKCJDb3VsZG4ndCBj
b25uZWN0IHRvIHNvY2tldDogJXMiICUgeCkKICAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSAxCiAg
ICAgICAgIGlmIHNlbGYuaXJjbGlib2JqLmZuX3RvX2FkZF9zb2NrZXQ6CiAgICAgICAgICAgICBz
ZWxmLmlyY2xpYm9iai5mbl90b19hZGRfc29ja2V0KHNlbGYuc29ja2V0KQpAQCAtNDkxLDcgKzQ5
MSw3IEBAIGRlZiBwcm9jZXNzX2RhdGEoc2VsZik6CiAgICAgICAgICAgICAgICAgbmV3X2RhdGEg
PSBzZWxmLnNzbC5yZWFkKDIqKjE0KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
ICBuZXdfZGF0YSA9IHNlbGYuc29ja2V0LnJlY3YoMioqMTQpCi0gICAgICAgIGV4Y2VwdCBzb2Nr
ZXQuZXJyb3IsIHg6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CiAgICAgICAgICAgICAj
IFRoZSBzZXJ2ZXIgaHVuZyB1cC4KICAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdCgiQ29ubmVj
dGlvbiByZXNldCBieSBwZWVyIikKICAgICAgICAgICAgIHJldHVybgpAQCAtNTA3LDcgKzUwNyw3
IEBAIGRlZiBwcm9jZXNzX2RhdGEoc2VsZik6CiAKICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6
CiAgICAgICAgICAgICBpZiBERUJVRzoKLSAgICAgICAgICAgICAgICBwcmludCAiRlJPTSBTRVJW
RVI6IiwgbGluZQorICAgICAgICAgICAgICAgIHByaW50KCJGUk9NIFNFUlZFUjoiLCBsaW5lKQog
CiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAt
NTY5LDE1ICs1NjksMTMgQEAgZGVmIHByb2Nlc3NfZGF0YShzZWxmKToKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgbSA9IGxpc3QobSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIERFQlVH
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJjb21tYW5kOiAlcywgc291cmNl
OiAlcywgdGFyZ2V0OiAlcywgYXJndW1lbnRzOiAlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1hbmQsIHByZWZpeCwgdGFyZ2V0LCBtKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByaW50KCJjb21tYW5kOiAlcywgc291cmNlOiAlcywgdGFyZ2V0OiAlcywg
YXJndW1lbnRzOiAlcyIgJSAoY29tbWFuZCwgcHJlZml4LCB0YXJnZXQsIG0pKQogICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V2ZW50KEV2ZW50KGNvbW1hbmQsIHByZWZpeCwg
dGFyZ2V0LCBtKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQgPT0gImN0Y3Ai
IGFuZCBtWzBdID09ICJBQ1RJT04iOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2hhbmRsZV9ldmVudChFdmVudCgiYWN0aW9uIiwgcHJlZml4LCB0YXJnZXQsIG1bMTpdKSkKICAg
ICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIERFQlVH
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJjb21tYW5kOiAlcywgc291cmNl
OiAlcywgdGFyZ2V0OiAlcywgYXJndW1lbnRzOiAlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1hbmQsIHByZWZpeCwgdGFyZ2V0LCBbbV0pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpbnQoImNvbW1hbmQ6ICVzLCBzb3VyY2U6ICVzLCB0YXJnZXQ6ICVz
LCBhcmd1bWVudHM6ICVzIiAlIChjb21tYW5kLCBwcmVmaXgsIHRhcmdldCwgW21dKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9ldmVudChFdmVudChjb21tYW5kLCBwcmVm
aXgsIHRhcmdldCwgW21dKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGFy
Z2V0ID0gTm9uZQpAQCAtNTk1LDggKzU5Myw3IEBAIGRlZiBwcm9jZXNzX2RhdGEoc2VsZik6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gInVtb2RlIgogCiAgICAgICAgICAgICAg
ICAgaWYgREVCVUc6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICJjb21tYW5kOiAlcywgc291
cmNlOiAlcywgdGFyZ2V0OiAlcywgYXJndW1lbnRzOiAlcyIgJSAoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb21tYW5kLCBwcmVmaXgsIHRhcmdldCwgYXJndW1lbnRzKQorICAgICAgICAgICAg
ICAgICAgICBwcmludCgiY29tbWFuZDogJXMsIHNvdXJjZTogJXMsIHRhcmdldDogJXMsIGFyZ3Vt
ZW50czogJXMiICUgKGNvbW1hbmQsIHByZWZpeCwgdGFyZ2V0LCBhcmd1bWVudHMpKQogICAgICAg
ICAgICAgICAgIHNlbGYuX2hhbmRsZV9ldmVudChFdmVudChjb21tYW5kLCBwcmVmaXgsIHRhcmdl
dCwgYXJndW1lbnRzKSkKIAogICAgIGRlZiBfaGFuZGxlX2V2ZW50KHNlbGYsIGV2ZW50KToKQEAg
LTY2MCw3ICs2NTcsNyBAQCBkZWYgZGlzY29ubmVjdChzZWxmLCBtZXNzYWdlPSIiKToKIAogICAg
ICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCi0gICAgICAgIGV4Y2Vw
dCBzb2NrZXQuZXJyb3IsIHg6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CiAgICAgICAg
ICAgICBwYXNzCiAgICAgICAgIHNlbGYuc29ja2V0ID0gTm9uZQogICAgICAgICBzZWxmLl9oYW5k
bGVfZXZlbnQoRXZlbnQoImRpc2Nvbm5lY3QiLCBzZWxmLnNlcnZlciwgIiIsIFttZXNzYWdlXSkp
CkBAIC03ODIsMTUgKzc3OSwxNSBAQCBkZWYgc2VuZF9yYXcoc2VsZiwgc3RyaW5nKToKICAgICAg
ICAgVGhlIHN0cmluZyB3aWxsIGJlIHBhZGRlZCB3aXRoIGFwcHJvcHJpYXRlIENSIExGLgogICAg
ICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5zb2NrZXQgaXMgTm9uZToKLSAgICAgICAgICAgIHJh
aXNlIFNlcnZlck5vdENvbm5lY3RlZEVycm9yLCAiTm90IGNvbm5lY3RlZC4iCisgICAgICAgICAg
ICByYWlzZSBTZXJ2ZXJOb3RDb25uZWN0ZWRFcnJvcigiTm90IGNvbm5lY3RlZC4iKQogICAgICAg
ICB0cnk6CiAgICAgICAgICAgICBpZiBzZWxmLnNzbDoKICAgICAgICAgICAgICAgICBzZWxmLnNz
bC53cml0ZShzdHJpbmcgKyAiXHJcbiIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
ICAgIHNlbGYuc29ja2V0LnNlbmQoc3RyaW5nICsgIlxyXG4iKQogICAgICAgICAgICAgaWYgREVC
VUc6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIlRPIFNFUlZFUjoiLCBzdHJpbmcKLSAgICAgICAg
ZXhjZXB0IHNvY2tldC5lcnJvciwgeDoKKyAgICAgICAgICAgICAgICBwcmludCgiVE8gU0VSVkVS
OiIsIHN0cmluZykKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgICMg
T3VjaCEKICAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdCgiQ29ubmVjdGlvbiByZXNldCBieSBw
ZWVyLiIpCiAKQEAgLTg4OCw4ICs4ODUsOCBAQCBkZWYgY29ubmVjdChzZWxmLCBhZGRyZXNzLCBw
b3J0KToKICAgICAgICAgc2VsZi5wYXNzaXZlID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAg
ICBzZWxmLnNvY2tldC5jb25uZWN0KChzZWxmLnBlZXJhZGRyZXNzLCBzZWxmLnBlZXJwb3J0KSkK
LSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgeDoKLSAgICAgICAgICAgIHJhaXNlIERDQ0Nv
bm5lY3Rpb25FcnJvciwgIkNvdWxkbid0IGNvbm5lY3QgdG8gc29ja2V0OiAlcyIgJSB4CisgICAg
ICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIHJhaXNlIERDQ0Nvbm5l
Y3Rpb25FcnJvcigiQ291bGRuJ3QgY29ubmVjdCB0byBzb2NrZXQ6ICVzIiAlIHgpCiAgICAgICAg
IHNlbGYuY29ubmVjdGVkID0gMQogICAgICAgICBpZiBzZWxmLmlyY2xpYm9iai5mbl90b19hZGRf
c29ja2V0OgogICAgICAgICAgICAgc2VsZi5pcmNsaWJvYmouZm5fdG9fYWRkX3NvY2tldChzZWxm
LnNvY2tldCkKQEAgLTkxMyw4ICs5MTAsOCBAQCBkZWYgbGlzdGVuKHNlbGYpOgogICAgICAgICAg
ICAgc2VsZi5zb2NrZXQuYmluZCgoc29ja2V0LmdldGhvc3RieW5hbWUoc29ja2V0LmdldGhvc3Ru
YW1lKCkpLCAwKSkKICAgICAgICAgICAgIHNlbGYubG9jYWxhZGRyZXNzLCBzZWxmLmxvY2FscG9y
dCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKCkKICAgICAgICAgICAgIHNlbGYuc29ja2V0Lmxp
c3RlbigxMCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgeDoKLSAgICAgICAgICAgIHJh
aXNlIERDQ0Nvbm5lY3Rpb25FcnJvciwgIkNvdWxkbid0IGJpbmQgc29ja2V0OiAlcyIgJSB4Cisg
ICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIHJhaXNlIERDQ0Nv
bm5lY3Rpb25FcnJvcigiQ291bGRuJ3QgYmluZCBzb2NrZXQ6ICVzIiAlIHgpCiAgICAgICAgIHJl
dHVybiBzZWxmCiAKICAgICBkZWYgZGlzY29ubmVjdChzZWxmLCBtZXNzYWdlPSIiKToKQEAgLTkz
MCw3ICs5MjcsNyBAQCBkZWYgZGlzY29ubmVjdChzZWxmLCBtZXNzYWdlPSIiKToKICAgICAgICAg
c2VsZi5jb25uZWN0ZWQgPSAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc29ja2V0
LmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgeDoKKyAgICAgICAgZXhjZXB0
IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5zb2NrZXQgPSBO
b25lCiAgICAgICAgIHNlbGYuaXJjbGlib2JqLl9oYW5kbGVfZXZlbnQoCkBAIC05NDcsOCArOTQ0
LDcgQEAgZGVmIHByb2Nlc3NfZGF0YShzZWxmKToKICAgICAgICAgICAgIHNlbGYuc29ja2V0ID0g
Y29ubgogICAgICAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSAxCiAgICAgICAgICAgICBpZiBERUJV
RzoKLSAgICAgICAgICAgICAgICBwcmludCAiRENDIGNvbm5lY3Rpb24gZnJvbSAlczolZCIgJSAo
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucGVlcmFkZHJlc3MsIHNlbGYucGVlcnBvcnQpCisg
ICAgICAgICAgICAgICAgcHJpbnQoIkRDQyBjb25uZWN0aW9uIGZyb20gJXM6JWQiICUgKHNlbGYu
cGVlcmFkZHJlc3MsIHNlbGYucGVlcnBvcnQpKQogICAgICAgICAgICAgc2VsZi5pcmNsaWJvYmou
X2hhbmRsZV9ldmVudCgKICAgICAgICAgICAgICAgICBzZWxmLAogICAgICAgICAgICAgICAgIEV2
ZW50KCJkY2NfY29ubmVjdCIsIHNlbGYucGVlcmFkZHJlc3MsIE5vbmUsIE5vbmUpKQpAQCAtOTU2
LDcgKzk1Miw3IEBAIGRlZiBwcm9jZXNzX2RhdGEoc2VsZik6CiAKICAgICAgICAgdHJ5OgogICAg
ICAgICAgICAgbmV3X2RhdGEgPSBzZWxmLnNvY2tldC5yZWN2KDIqKjE0KQotICAgICAgICBleGNl
cHQgc29ja2V0LmVycm9yLCB4OgorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgogICAgICAg
ICAgICAgIyBUaGUgc2VydmVyIGh1bmcgdXAuCiAgICAgICAgICAgICBzZWxmLmRpc2Nvbm5lY3Qo
IkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIpCiAgICAgICAgICAgICByZXR1cm4KQEAgLTk4NSwx
MSArOTgxLDEwIEBAIGRlZiBwcm9jZXNzX2RhdGEoc2VsZik6CiAgICAgICAgIHRhcmdldCA9IE5v
bmUKICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKICAgICAgICAgICAgIGlmIERFQlVHOgot
ICAgICAgICAgICAgICAgIHByaW50ICJGUk9NIFBFRVI6IiwgY2h1bmsKKyAgICAgICAgICAgICAg
ICBwcmludCgiRlJPTSBQRUVSOiIsIGNodW5rXykKICAgICAgICAgICAgIGFyZ3VtZW50cyA9IFtj
aHVua10KICAgICAgICAgICAgIGlmIERFQlVHOgotICAgICAgICAgICAgICAgIHByaW50ICJjb21t
YW5kOiAlcywgc291cmNlOiAlcywgdGFyZ2V0OiAlcywgYXJndW1lbnRzOiAlcyIgJSAoCi0gICAg
ICAgICAgICAgICAgICAgIGNvbW1hbmQsIHByZWZpeCwgdGFyZ2V0LCBhcmd1bWVudHMpCisgICAg
ICAgICAgICAgICAgcHJpbnQoImNvbW1hbmQ6ICVzLCBzb3VyY2U6ICVzLCB0YXJnZXQ6ICVzLCBh
cmd1bWVudHM6ICVzIiAlIChjb21tYW5kLCBwcmVmaXgsIHRhcmdldCwgYXJndW1lbnRzKSkKICAg
ICAgICAgICAgIHNlbGYuaXJjbGlib2JqLl9oYW5kbGVfZXZlbnQoCiAgICAgICAgICAgICAgICAg
c2VsZiwKICAgICAgICAgICAgICAgICBFdmVudChjb21tYW5kLCBwcmVmaXgsIHRhcmdldCwgYXJn
dW1lbnRzKSkKQEAgLTEwMDksOCArMTAwNCw4IEBAIGRlZiBwcml2bXNnKHNlbGYsIHN0cmluZyk6
CiAgICAgICAgICAgICBpZiBzZWxmLmRjY3R5cGUgPT0gImNoYXQiOgogICAgICAgICAgICAgICAg
IHNlbGYuc29ja2V0LnNlbmQoIlxuIikKICAgICAgICAgICAgIGlmIERFQlVHOgotICAgICAgICAg
ICAgICAgIHByaW50ICJUTyBQRUVSOiAlc1xuIiAlIHN0cmluZwotICAgICAgICBleGNlcHQgc29j
a2V0LmVycm9yLCB4OgorICAgICAgICAgICAgICAgIHByaW50KCJUTyBQRUVSOiAlc1xuIiAlIHN0
cmluZykKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgICMgT3VjaCEK
ICAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdCgiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyLiIp
CiAKQEAgLTExODMsOCArMTE3OCwxMyBAQCBkZWYgbWFza19tYXRjaGVzKG5pY2ssIG1hc2spOgog
CiBfc3BlY2lhbCA9ICItW11cXGBee30iCiBuaWNrX2NoYXJhY3RlcnMgPSBzdHJpbmcuYXNjaWlf
bGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyBfc3BlY2lhbAotX2lyY3N0cmluZ190cmFuc2xhdGlv
biA9IHN0cmluZy5tYWtldHJhbnMoc3RyaW5nLmFzY2lpX3VwcGVyY2FzZSArICJbXVxcXiIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuYXNjaWlfbG93
ZXJjYXNlICsgInt9fH4iKQorCitpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApOgorICAgIF9p
cmNzdHJpbmdfdHJhbnNsYXRpb24gPSBzdHIubWFrZXRyYW5zKHN0cmluZy5hc2NpaV91cHBlcmNh
c2UgKyAiW11cXF4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmluZy5hc2NpaV9sb3dlcmNhc2UgKyAie318fiIpCitlbHNlOgorICAgIF9pcmNzdHJp
bmdfdHJhbnNsYXRpb24gPSBzdHJpbmcubWFrZXRyYW5zKHN0cmluZy5hc2NpaV91cHBlcmNhc2Ug
KyAiW11cXF4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmluZy5hc2NpaV9sb3dlcmNhc2UgKyAie318fiIpCiAKIGRlZiBpcmNfbG93ZXIocyk6CiAg
ICAgIiIiUmV0dXJucyBhIGxvd2VyY2FzZWQgc3RyaW5nLgpAQCAtMTU1Nyw0ICsxNTU3LDQgQEAg
ZGVmIF9waW5nX3Bvbmdlcihjb25uZWN0aW9uLCBldmVudCk6CiAgICAgInBvbmciLAogXQogCi1h
bGxfZXZlbnRzID0gZ2VuZXJhdGVkX2V2ZW50cyArIHByb3RvY29sX2V2ZW50cyArIG51bWVyaWNf
ZXZlbnRzLnZhbHVlcygpCithbGxfZXZlbnRzID0gZ2VuZXJhdGVkX2V2ZW50cyArIHByb3RvY29s
X2V2ZW50cyArIGxpc3QobnVtZXJpY19ldmVudHMudmFsdWVzKCkpCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9ET01XaW5kb3dFeHRlbnNpb25CYXNpYy5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9ET01XaW5kb3dFeHRlbnNpb25CYXNp
Yy5jcHAKaW5kZXggMmQwNDM1YzBlMmEzNzBmOGNjNDM3NjYxNjBkNzNjOGM2MTFkMTc3OC4uNTVh
YTM3ZTEzMDJjMjZkMmU5NTAzZDA1YTg4YmM3MTQ1Y2ZjNjUzOSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMuY3BwCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0RPTVdpbmRvd0V4dGVuc2lvbkJh
c2ljLmNwcApAQCAtOTUsNyArOTUsNyBAQCBURVNUKFdlYktpdCwgRElTQUJMRURfRE9NV2luZG93
RXh0ZW5zaW9uQmFzaWMpCiAgICAgV0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoY29u
dGV4dC5nZXQoKSwgJmluamVjdGVkQnVuZGxlQ2xpZW50LmJhc2UpOwogICAgIAogICAgIC8vIFRo
ZSBkZWZhdWx0IGNhY2hlIG1vZGVsIGhhcyBhIGNhcGFjaXR5IG9mIDAsIHNvIGl0IGlzIG5lY2Vz
c2FyeSB0byBzd2l0Y2ggdG8gYSBjYWNoZQotICAgIC8vIG1vZGVsIHRoYXQgYWN0dWFsbHkgYWxs
b3dzIGZvciBhIHBhZ2UgY2FjaGUuCisgICAgLy8gbW9kZWwgdGhhdCBhY3R1YWxseSBhbGxvd3Mg
Zm9yIGEgYmFjay9mb3J3YXJkIGNhY2hlLgogICAgIFdLQ29udGV4dFNldENhY2hlTW9kZWwoY29u
dGV4dC5nZXQoKSwga1dLQ2FjaGVNb2RlbERvY3VtZW50QnJvd3Nlcik7CiAKICAgICBQbGF0Zm9y
bVdlYlZpZXcgd2ViVmlldyhjb250ZXh0LmdldCgpLCBwYWdlR3JvdXAuZ2V0KCkpOwpAQCAtMTIw
LDcgKzEyMCw3IEBAIFRFU1QoV2ViS2l0LCBESVNBQkxFRF9ET01XaW5kb3dFeHRlbnNpb25CYXNp
YykKICAgICBVdGlsOjpydW4oJmZpbmlzaGVkKTsKICAgICBmaW5pc2hlZCA9IGZhbHNlOwogCi0g
ICAgLy8gTWFrZSBzdXJlIHRoZSAyIGRpc2Nvbm5lY3RlZCBleHRlbnNpb25zIGluIHRoZSBwYWdl
IGNhY2hlIGFuZCB0aGUgNCBhY3RpdmUgZXh0ZW5zaW9ucyBhcmUgYWxsIHJlbW92ZWQuCisgICAg
Ly8gTWFrZSBzdXJlIHRoZSAyIGRpc2Nvbm5lY3RlZCBleHRlbnNpb25zIGluIHRoZSBiYWNrL2Zv
cndhcmQgY2FjaGUgYW5kIHRoZSA0IGFjdGl2ZSBleHRlbnNpb25zIGFyZSBhbGwgcmVtb3ZlZC4K
ICAgICBXS1BhZ2VDbG9zZSh3ZWJWaWV3LnBhZ2UoKSk7CiAKICAgICBVdGlsOjpydW4oJmZpbmlz
aGVkKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCBURVNUKFdlYktpdCwgRE9NV2luZG93RXh0ZW5zaW9u
Q3Jhc2hPblJlbG9hZCkKICAgICBXS0NvbnRleHRTZXRJbmplY3RlZEJ1bmRsZUNsaWVudChjb250
ZXh0LmdldCgpLCAmaW5qZWN0ZWRCdW5kbGVDbGllbnQuYmFzZSk7CiAKICAgICAvLyBUaGUgZGVm
YXVsdCBjYWNoZSBtb2RlbCBoYXMgYSBjYXBhY2l0eSBvZiAwLCBzbyBpdCBpcyBuZWNlc3Nhcnkg
dG8gc3dpdGNoIHRvIGEgY2FjaGUKLSAgICAvLyBtb2RlbCB0aGF0IGFjdHVhbGx5IGFsbG93cyBm
b3IgYSBwYWdlIGNhY2hlLgorICAgIC8vIG1vZGVsIHRoYXQgYWN0dWFsbHkgYWxsb3dzIGZvciBh
IGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICBXS0NvbnRleHRTZXRDYWNoZU1vZGVsKGNvbnRleHQu
Z2V0KCksIGtXS0NhY2hlTW9kZWxEb2N1bWVudEJyb3dzZXIpOwogCiAgICAgUGxhdGZvcm1XZWJW
aWV3IHdlYlZpZXcoY29udGV4dC5nZXQoKSwgcGFnZUdyb3VwLmdldCgpKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2Fj
aGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRE9NV2luZG93RXh0ZW5z
aW9uTm9DYWNoZS5jcHAKaW5kZXggYmM1MGI1ZTJiMDBjNTkwODQ3MDYxNzYyYWUzZGQ3MGY0ZjUx
YjllYi4uZTE2OTZkNWJkNjU2OTQ3Mjc4Zjk0NzQ4NTI1MzE3MmJjNDliN2NhNyAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRE9NV2luZG93RXh0ZW5zaW9uTm9D
YWNoZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRE9NV2luZG93
RXh0ZW5zaW9uTm9DYWNoZS5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgVEVTVChXZWJLaXQsIERJU0FC
TEVEX0RPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGUpCiAKICAgICBXS0NvbnRleHRTZXRJbmplY3Rl
ZEJ1bmRsZUNsaWVudChjb250ZXh0LmdldCgpLCAmaW5qZWN0ZWRCdW5kbGVDbGllbnQuYmFzZSk7
CiAKLSAgICAvLyBEaXNhYmxlIHRoZSBwYWdlIGNhY2hlLgorICAgIC8vIERpc2FibGUgdGhlIGJh
Y2svZm9yd2FyZCBjYWNoZS4KICAgICBXS0NvbnRleHRTZXRDYWNoZU1vZGVsKGNvbnRleHQuZ2V0
KCksIGtXS0NhY2hlTW9kZWxEb2N1bWVudFZpZXdlcik7CiAKICAgICBQbGF0Zm9ybVdlYlZpZXcg
d2ViVmlldyhjb250ZXh0LmdldCgpLCBwYWdlR3JvdXAuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9C
dW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRE9NV2luZG93RXh0
ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwCmluZGV4IDQwYjc3ZjFkYjA1MTI2OTdmZjU5Y2M2OWU2
ZTAyNzlhOGI2MjA3YTcuLmRjMjNlNjdjNmY2YzE4Y2U0ODhlYzZlN2NkMzdlMjFiZmFlYTU2ZjQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0RPTVdpbmRvd0V4
dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdC9ET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAKQEAgLTIzNSwxMyAr
MjM1LDEzIEBAIHZvaWQgRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZTo6Z2xvYmFsT2JqZWN0SXNB
dmFpbGFibGVGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmCiAKIHZvaWQgRE9NV2luZG93RXh0ZW5z
aW9uTm9DYWNoZTo6d2lsbERpc2Nvbm5lY3RET01XaW5kb3dFeHRlbnNpb25Gcm9tR2xvYmFsT2Jq
ZWN0KFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uUmVmIGV4dGVuc2lvbikKIHsKLSAgICAvLyBO
byBpdGVtcyBzaG91bGQgYmUgZ29pbmcgaW50byBhIDAtY2FwYWNpdHkgcGFnZSBjYWNoZS4KKyAg
ICAvLyBObyBpdGVtcyBzaG91bGQgYmUgZ29pbmcgaW50byBhIDAtY2FwYWNpdHkgYmFjay9mb3J3
YXJkIGNhY2hlLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIERPTVdpbmRv
d0V4dGVuc2lvbk5vQ2FjaGU6OmRpZFJlY29ubmVjdERPTVdpbmRvd0V4dGVuc2lvblRvR2xvYmFs
T2JqZWN0KFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uUmVmKQogewotICAgIC8vIE5vIGl0ZW1z
IHNob3VsZCBiZSBjb21pbmcgb3V0IG9mIGEgMC1jYXBhY2l0eSBwYWdlIGNhY2hlLgorICAgIC8v
IE5vIGl0ZW1zIHNob3VsZCBiZSBjb21pbmcgb3V0IG9mIGEgMC1jYXBhY2l0eSBiYWNrL2Zvcndh
cmQgY2FjaGUuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0RpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5
SW5QYWdlQ2FjaGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRGlkUmVt
b3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZS5jcHAKaW5kZXggMTU4YzY0MGRjMzlhYzg5
ZTI1NjZmOTdiNDVjOTQyMjY5ZDVlNzcwMi4uZmU5ZjU0M2MyYmVlMzNlODdiYzBjM2I3YjJkNWFl
ODk2NWZjYjM4NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQv
RGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZS5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJblBhZ2VD
YWNoZS5jcHAKQEAgLTcwLDkgKzcwLDkgQEAgc3RhdGljIHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVD
bGllbnQoV0tQYWdlUmVmIHBhZ2UpCiAgICAgV0tQYWdlU2V0UGFnZUluamVjdGVkQnVuZGxlQ2xp
ZW50KHBhZ2UsICZpbmplY3RlZEJ1bmRsZUNsaWVudC5iYXNlKTsKIH0KIAotVEVTVChXZWJLaXQs
IERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGUpCitURVNUKFdlYktpdCwgRGlk
UmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJbkJhY2tGb3J3YXJkQ2FjaGUpCiB7Ci0gICAgV0tSZXRh
aW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0ID0gYWRvcHRXSyhVdGlsOjpjcmVhdGVDb250ZXh0
Rm9ySW5qZWN0ZWRCdW5kbGVUZXN0KCJEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNh
Y2hlIikpOworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dCA9IGFkb3B0V0so
VXRpbDo6Y3JlYXRlQ29udGV4dEZvckluamVjdGVkQnVuZGxlVGVzdCgiRGlkUmVtb3ZlRnJhbWVG
cm9tSGllYXJjaHlJbkJhY2tGb3J3YXJkQ2FjaGUiKSk7CiAgICAgLy8gRW5hYmxlIHRoZSBwYWdl
IGNhY2hlIHNvIHdlIGNhbiB0ZXN0IHRoZSBXS0J1bmRsZVBhZ2VEaWRSZW1vdmVGcmFtZUZyb21I
aWVyYXJjaHlDYWxsYmFjayBBUEkKICAgICBXS0NvbnRleHRTZXRDYWNoZU1vZGVsKGNvbnRleHQu
Z2V0KCksIGtXS0NhY2hlTW9kZWxQcmltYXJ5V2ViQnJvd3Nlcik7CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0RpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5
SW5QYWdlQ2FjaGVfQnVuZGxlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
L0RpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGVfQnVuZGxlLmNwcAppbmRleCA5
OTFkZTg1MDA0ZTA1MWU0MWRiMDAzZTJkMTgxZGMwNjJkZGU3MWI1Li4yNmI1MjRlZGY0Y2VhMjgw
YWZiZWZjODk4ZWQ3OTdiNTRiZmY3ZjRkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdC9EaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hlX0J1bmRs
ZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvRGlkUmVtb3ZlRnJh
bWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZV9CdW5kbGUuY3BwCkBAIC0zNSwxNCArMzUsMTQgQEAK
IAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCi1jbGFzcyBEaWRSZW1vdmVGcmFtZUZyb21I
aWVhcmNoeUluUGFnZUNhY2hlVGVzdCA6IHB1YmxpYyBJbmplY3RlZEJ1bmRsZVRlc3QgeworY2xh
c3MgRGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJbkJhY2tGb3J3YXJkQ2FjaGVUZXN0IDogcHVi
bGljIEluamVjdGVkQnVuZGxlVGVzdCB7CiBwdWJsaWM6Ci0gICAgRGlkUmVtb3ZlRnJhbWVGcm9t
SGllYXJjaHlJblBhZ2VDYWNoZVRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIGlkZW50aWZpZXIpOwor
ICAgIERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5CYWNrRm9yd2FyZENhY2hlVGVzdChjb25z
dCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRl
UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmKTsKIH07CiAKLXN0YXRpYyBJbmplY3Rl
ZEJ1bmRsZVRlc3Q6OlJlZ2lzdGVyPERpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2Fj
aGVUZXN0PiByZWdpc3RyYXIoIkRpZFJlbW92ZUZyYW1lRnJvbUhpZWFyY2h5SW5QYWdlQ2FjaGUi
KTsKK3N0YXRpYyBJbmplY3RlZEJ1bmRsZVRlc3Q6OlJlZ2lzdGVyPERpZFJlbW92ZUZyYW1lRnJv
bUhpZWFyY2h5SW5CYWNrRm9yd2FyZENhY2hlVGVzdD4gcmVnaXN0cmFyKCJEaWRSZW1vdmVGcmFt
ZUZyb21IaWVhcmNoeUluQmFja0ZvcndhcmRDYWNoZSIpOwogCiBzdGF0aWMgdW5zaWduZWQgZGlk
UmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5Q291bnQ7CiAKQEAgLTU2LDEyICs1NiwxMiBAQCB2b2lk
IGRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeUNhbGxiYWNrKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBXS0J1bmRsZUZyYW1lUmVmCiAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgbWVz
c2FnZS5nZXQoKSwgbWVzc2FnZS5nZXQoKSk7CiB9CiAKLURpZFJlbW92ZUZyYW1lRnJvbUhpZWFy
Y2h5SW5QYWdlQ2FjaGVUZXN0OjpEaWRSZW1vdmVGcmFtZUZyb21IaWVhcmNoeUluUGFnZUNhY2hl
VGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcikKK0RpZFJlbW92ZUZyYW1lRnJvbUhp
ZWFyY2h5SW5CYWNrRm9yd2FyZENhY2hlVGVzdDo6RGlkUmVtb3ZlRnJhbWVGcm9tSGllYXJjaHlJ
bkJhY2tGb3J3YXJkQ2FjaGVUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlmaWVyKQogICAg
IDogSW5qZWN0ZWRCdW5kbGVUZXN0KGlkZW50aWZpZXIpCiB7CiB9CiAKLXZvaWQgRGlkUmVtb3Zl
RnJhbWVGcm9tSGllYXJjaHlJblBhZ2VDYWNoZVRlc3Q6OmRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVS
ZWYgYnVuZGxlLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKK3ZvaWQgRGlkUmVtb3ZlRnJhbWVGcm9t
SGllYXJjaHlJbkJhY2tGb3J3YXJkQ2FjaGVUZXN0OjpkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVm
IGJ1bmRsZSwgV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiB7CiAgICAgV0tCdW5kbGVQYWdlTG9hZGVy
Q2xpZW50VjggcGFnZUxvYWRlckNsaWVudDsKICAgICBtZW1zZXQoJnBhZ2VMb2FkZXJDbGllbnQs
IDAsIHNpemVvZihwYWdlTG9hZGVyQ2xpZW50KSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdC9MYXlvdXRNaWxlc3RvbmVzV2l0aEFsbENvbnRlbnRJbkZyYW1l
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0xheW91dE1pbGVzdG9uZXNX
aXRoQWxsQ29udGVudEluRnJhbWUuY3BwCmluZGV4IDU2NDZiZDgxOTc1ZThlNTgzMmExNTQ2OWZm
YmM0MWM4ZWRkNTVjNmUuLjFhNmNiYjE1MzBjYjc0M2YzMGNmODU1MzYzZWZlNDQ1NDFiNjZjNDcg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L0xheW91dE1pbGVz
dG9uZXNXaXRoQWxsQ29udGVudEluRnJhbWUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0L0xheW91dE1pbGVzdG9uZXNXaXRoQWxsQ29udGVudEluRnJhbWUuY3BwCkBA
IC03Niw3ICs3Niw3IEBAIFRFU1QoV2ViS2l0LCBGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRB
ZnRlclBhZ2VDYWNoZVJlc3RvcmUpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBj
b250ZXh0ID0gYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihudWxscHRy
KSk7CiAKLSAgICBXS0NvbnRleHRTZXRDYWNoZU1vZGVsKGNvbnRleHQuZ2V0KCksIGtXS0NhY2hl
TW9kZWxQcmltYXJ5V2ViQnJvd3Nlcik7IC8vIEVuYWJsZXMgdGhlIFBhZ2UgQ2FjaGUuCisgICAg
V0tDb250ZXh0U2V0Q2FjaGVNb2RlbChjb250ZXh0LmdldCgpLCBrV0tDYWNoZU1vZGVsUHJpbWFy
eVdlYkJyb3dzZXIpOyAvLyBFbmFibGVzIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAKICAgICBQ
bGF0Zm9ybVdlYlZpZXcgd2ViVmlldyhjb250ZXh0LmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlv
bi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb24ubW0KaW5kZXggZWU0MDM3OGUyZWQ2NWU2MTI0MGNmOTAyNDU3ZTc3NTYwODRh
NDVhNC4uOGQyNGJiYmEzODU5N2JiYzNjMDJlMTVkZjAwYTRkMmYzZmI4MDJiNiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1By
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCkBAIC0yNDg0LDcgKzI0ODQsNyBAQCBURVNUKFByb2Nl
c3NTd2FwLCBSZXVzZVN1c3BlbmRlZFByb2Nlc3MpCiBzdGF0aWMgY29uc3QgY2hhciogZmFpbHNU
b0VudGVyUGFnZUNhY2hlVGVzdEJ5dGVzID0gUiJQU09OUkVTT1VSQ0UoCiA8Ym9keT4KIDxzY3Jp
cHQ+Ci0vLyBQYWdlcyB3aXRoIGRlZGljYXRlZCB3b3JrZXJzIGRvIG5vdCBnbyBpbnRvIHBhZ2Ug
Y2FjaGUuCisvLyBQYWdlcyB3aXRoIGRlZGljYXRlZCB3b3JrZXJzIGRvIG5vdCBnbyBpbnRvIGJh
Y2svZm9yd2FyZCBjYWNoZS4KIHZhciBteVdvcmtlciA9IG5ldyBXb3JrZXIoJ3dvcmtlci5qcycp
OwogPC9zY3JpcHQ+CiA8L2JvZHk+CkBAIC0zNjk5LDcgKzM2OTksNyBAQCBURVNUKFByb2Nlc3NT
d2FwLCBQYWdlU2hvd0hpZGUpCiAgICAgfQogfQogCi0vLyBEaXNhYmxpbmcgdGhlIHBhZ2UgY2Fj
aGUgZXhwbGljaXRseSBpcyAoZm9yIHNvbWUgcmVhc29uKSBub3QgYXZhaWxhYmxlIG9uIGlPUy4K
Ky8vIERpc2FibGluZyB0aGUgYmFjay9mb3J3YXJkIGNhY2hlIGV4cGxpY2l0bHkgaXMgKGZvciBz
b21lIHJlYXNvbikgbm90IGF2YWlsYWJsZSBvbiBpT1MuCiAjaWYgIVRBUkdFVF9PU19JUEhPTkUK
IHN0YXRpYyBjb25zdCBjaGFyKiBsb2FkVW5sb2FkQnl0ZXMgPSBSIlBTT05SRVNPVVJDRSgKIDxz
Y3JpcHQ+CkBAIC01NzgyLDcgKzU3ODIsNyBAQCBURVNUKFByb2Nlc3NTd2FwLCBHb0JhY2tUb1N1
c3BlbmRlZFBhZ2VXaXRoTWFpbkZyYW1lSURUaGF0SXNOb3RPbmUpCiAgICAgYXV0byBwaWQzID0g
W2NyZWF0ZWRXZWJWaWV3IF93ZWJQcm9jZXNzSWRlbnRpZmllcl07CiAgICAgRVhQRUNUX05FKHBp
ZDEsIHBpZDMpOyAvLyBTaG91bGQgaGF2ZSBwcm9jZXNzLXN3YXBwZWQuCiAKLSAgICAvLyBOYXZp
Z2F0ZSBiYWNrIHRvIHRoZSBzdXNwZW5kZWQgcGFnZSAoc2hvdWxkIHVzZSB0aGUgcGFnZSBjYWNo
ZSkuCisgICAgLy8gTmF2aWdhdGUgYmFjayB0byB0aGUgc3VzcGVuZGVkIHBhZ2UgKHNob3VsZCB1
c2UgdGhlIGJhY2svZm9yd2FyZCBjYWNoZSkuCiAgICAgW2NyZWF0ZWRXZWJWaWV3IGdvQmFja107
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZE1lc3NhZ2UpOwogICAgIHJl
Y2VpdmVkTWVzc2FnZSA9IGZhbHNlOwpAQCAtNTgxOSw3ICs1ODE5LDcgQEAgYm9keSB7CiA8L2hl
YWQ+CiA8Ym9keT4KIDxzY3JpcHQ+Ci0vLyBQYWdlcyB3aXRoIGRlZGljYXRlZCB3b3JrZXJzIGRv
IG5vdCBnbyBpbnRvIHBhZ2UgY2FjaGUuCisvLyBQYWdlcyB3aXRoIGRlZGljYXRlZCB3b3JrZXJz
IGRvIG5vdCBnbyBpbnRvIGJhY2svZm9yd2FyZCBjYWNoZS4KIHZhciBteVdvcmtlciA9IG5ldyBX
b3JrZXIoJ3dvcmtlci5qcycpOwogPC9zY3JpcHQ+CiA8YSBpZD0idGVzdExpbmsiIGhyZWY9InBz
b246Ly93d3cuYXBwbGUuY29tL21haW4uaHRtbCI+VGVzdDwvYT4KQEAgLTU5MjcsNyArNTkyNyw3
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50QmxvY2tpbmdBZnRlclByb2Nlc3NTd2FwVGVz
dEJ5dGVzID0gUiJQU09OUkVTT1VSQ0UoCiA8Ym9keT4KIDxzY3JpcHQ+CiBsZXQgd2FzU3ViZnJh
bWVMb2FkZWQgPSBmYWxzZTsKLS8vIFBhZ2VzIHdpdGggZGVkaWNhdGVkIHdvcmtlcnMgZG8gbm90
IGdvIGludG8gcGFnZSBjYWNoZS4KKy8vIFBhZ2VzIHdpdGggZGVkaWNhdGVkIHdvcmtlcnMgZG8g
bm90IGdvIGludG8gYmFjay9mb3J3YXJkIGNhY2hlLgogdmFyIG15V29ya2VyID0gbmV3IFdvcmtl
cignd29ya2VyLmpzJyk7CiA8L3NjcmlwdD4KIDxpZnJhbWUgc3JjPSJibG9ja21lLmh0bWwiPjwv
aWZyYW1lPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9RdWlja0xvb2subW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1F1
aWNrTG9vay5tbQppbmRleCBhNTRlYTc4NzZkZGVkMDVlZmNjYmRjMDY1OTI2Zjc1NTQwNTdhY2Yw
Li44MjY1MWZhNjMzMDRhMThmZTNjYzEzMTQ3NTQ2Mjg4ZjRjZTE4YjE2IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1F1aWNrTG9vay5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1F1aWNrTG9vay5tbQpAQCAtNDI1
LDE2ICs0MjUsMjIgQEAgVEVTVChRdWlja0xvb2ssIFJlbG9hZEFuZFNhbWVEb2N1bWVudE5hdmln
YXRpb24pCiAgICAgVXRpbDo6cnVuKCZpc0RvbmUpOwogfQogCi1AaW50ZXJmYWNlIFF1aWNrTG9v
a0ZyYW1lTG9hZERlbGVnYXRlIDogTlNPYmplY3QgPFdlYkZyYW1lTG9hZERlbGVnYXRlPgorQGlu
dGVyZmFjZSBRdWlja0xvb2tMZWdhY3lEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXZWJGcmFtZUxvYWRE
ZWxlZ2F0ZSwgV2ViUG9saWN5RGVsZWdhdGU+CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBRdWlj
a0xvb2tGcmFtZUxvYWREZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIFF1aWNrTG9va0xlZ2FjeURl
bGVnYXRlCiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRGaW5pc2hMb2Fk
Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKIHsKICAgICBpc0RvbmUgPSB0cnVlOwogfQogCist
ICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck1JTUVUeXBl
OihOU1N0cmluZyAqKXR5cGUgcmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBmcmFtZToo
V2ViRnJhbWUgKilmcmFtZSBkZWNpc2lvbkxpc3RlbmVyOihpZDxXZWJQb2xpY3lEZWNpc2lvbkxp
c3RlbmVyPilsaXN0ZW5lcgoreworICAgIEVYUEVDVF9XS19TVFJFUShwYWdlc0RvY3VtZW50UHJl
dmlld01JTUVUeXBlLCB0eXBlKTsKKyAgICBbbGlzdGVuZXIgdXNlXTsKK30KKwogQGVuZAogCiBU
RVNUKFF1aWNrTG9vaywgTGVnYWN5UXVpY2tMb29rQ29udGVudCkKQEAgLTQ0NCw4ICs0NTAsOSBA
QCBURVNUKFF1aWNrTG9vaywgTGVnYWN5UXVpY2tMb29rQ29udGVudCkKIAogICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tXZWJWaWV3IGFsbG9jXSBpbml0XSk7CiAKLSAgICBhdXRvIGZyYW1l
TG9hZERlbGVnYXRlID0gYWRvcHROUyhbW1F1aWNrTG9va0ZyYW1lTG9hZERlbGVnYXRlIGFsbG9j
XSBpbml0XSk7Ci0gICAgW3dlYlZpZXcgc2V0RnJhbWVMb2FkRGVsZWdhdGU6ZnJhbWVMb2FkRGVs
ZWdhdGUuZ2V0KCldOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbUXVpY2tMb29rTGVn
YWN5RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXRGcmFtZUxvYWREZWxl
Z2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgc2V0UG9saWN5RGVsZWdhdGU6ZGVs
ZWdhdGUuZ2V0KCldOwogCiAgICAgYXV0byB3ZWJQcmVmZXJlbmNlcyA9IGFkb3B0TlMoW1tXZWJQ
cmVmZXJlbmNlcyBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOkAiTGVnYWN5UXVpY2tMb29rQ29u
dGVudCJdKTsKICAgICBbd2ViUHJlZmVyZW5jZXMgc2V0UXVpY2tMb29rRG9jdW1lbnRTYXZpbmdF
bmFibGVkOllFU107CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEdMaWIvVGVzdFdlYktpdFNldHRpbmdzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwCmluZGV4IDNhNDBjMjkzNWIyMDFiMDU2
ZTg5ZWNlYTZhZjJhNDliMGM3YWYyZTkuLjhlOTk0NGFkMWJiZDE0MTZmNjc1ZjlmNmZjNzhiN2Iz
N2FmOWJmZDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xp
Yi9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0V2ViS2l0U2V0dGluZ3MuY3BwCkBAIC0yNzYsNyArMjc2LDcgQEAgc3Rh
dGljIHZvaWQgdGVzdFdlYktpdFNldHRpbmdzKFRlc3QqLCBnY29uc3Rwb2ludGVyKQogICAgIHdl
YmtpdF9zZXR0aW5nc19zZXRfZW5hYmxlX3NpdGVfc3BlY2lmaWNfcXVpcmtzKHNldHRpbmdzLCBG
QUxTRSk7CiAgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfc2l0
ZV9zcGVjaWZpY19xdWlya3Moc2V0dGluZ3MpKTsKIAotICAgIC8vIEJ5IGRlZmF1bHQsIHBhZ2Ug
Y2FjaGUgaXMgZW5hYmxlZC4KKyAgICAvLyBCeSBkZWZhdWx0LCB0aGUgYmFjay9mb3J3YXJkIGNh
Y2hlIGlzIGVuYWJsZWQuCiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV9wYWdlX2NhY2hlKHNldHRpbmdzKSk7CiAgICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFi
bGVfcGFnZV9jYWNoZShzZXR0aW5ncywgRkFMU0UpOwogICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtp
dF9zZXR0aW5nc19nZXRfZW5hYmxlX3BhZ2VfY2FjaGUoc2V0dGluZ3MpKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5l
ci5pZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsCmluZGV4IGUyNmI0ZmE4YWUyNGZlZWNmMmVjYzkxMTAwZWI5ZjE2YjE4YTA0
MTQuLmZhZWYwYTAzZmM0YjA1ODllNzQzYzY5M2U0NDI3Mzg0MzY3MDQ2NzAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5l
ci5pZGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cy9UZXN0UnVubmVyLmlkbApAQCAtMzQxLDYgKzM0MSw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVy
IHsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKG9iamVjdCBjb21w
bGV0aW9uSGFuZGxlcik7CiAgICAgYm9vbGVhbiBoYXNTdGF0aXN0aWNzSXNvbGF0ZWRTZXNzaW9u
KERPTVN0cmluZyBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdy
YWRlUmVmZXJyZXIoYm9vbGVhbiB2YWx1ZSwgb2JqZWN0IGNhbGxiYWNrKTsKKyAgICB2b2lkIHNl
dFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJvb2xlYW4gdmFsdWUsIG9i
amVjdCBjYWxsYmFjayk7CiAKICAgICAvLyBJbmplY3RlZCBidW5kbGUgZm9ybSBjbGllbnQuCiAg
ICAgdm9pZCBpbnN0YWxsVGV4dERpZENoYW5nZUluVGV4dEZpZWxkQ2FsbGJhY2sob2JqZWN0IGNh
bGxiYWNrKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggZTdhZDAxNWYzN2ViYWNhZjliNGYyYzkzZTVi
Y2Q0ZWUyY2JlNmMyMy4uZjUyZWQxYWE1NzM4YjQxMmM3M2MzOTJmOGE1MGIzOWEwMGUwY2VkZiAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAKQEAgLTMzMiw2ICszMzIsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5n
UmVmIG0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQ2FsbERpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0
eUNvb2tpZXMiKSkgeworICAgICAgICBtX3Rlc3RSdW5uZXItPnN0YXRpc3RpY3NDYWxsRGlkU2V0
U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0NhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkNhbGxEaWRSZXNldFN0YXRpc3RpY3NUb0NvbnNpc3RlbnRTdGF0ZSIpKSB7CiAgICAgICAg
IG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0NhbGxEaWRSZXNldFRvQ29uc2lzdGVudFN0YXRlQ2Fs
bGJhY2soKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggYmE1OTkzYzdhMjIyZmIzMGE3
YzA3NTRjZGJhNzU5NmEyYjgxMzliYi4uY2UzMjEzNzU2YzlmMDUwYzk2YTY4M2JjNTE5YTRmOTRh
NDMyZmM0ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC03NDMsNiArNzQzLDcgQEAgZW51bSB7CiAgICAgU3RhdGlz
dGljc0RpZFJlc2V0VG9Db25zaXN0ZW50U3RhdGVDYWxsYmFja0lELAogICAgIFN0YXRpc3RpY3NE
aWRTZXRCbG9ja0Nvb2tpZXNGb3JIb3N0Q2FsbGJhY2tJRCwKICAgICBTdGF0aXN0aWNzRGlkU2V0
U2hvdWxkRG93bmdyYWRlUmVmZXJyZXJDYWxsYmFja0lELAorICAgIFN0YXRpc3RpY3NEaWRTZXRT
aG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2tJRCwKICAgICBBbGxTdG9yYWdlQWNj
ZXNzRW50cmllc0NhbGxiYWNrSUQsCiAgICAgRGlkUmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxz
Q2FsbGJhY2tJRCwKICAgICBHZXRBcHBsaWNhdGlvbk1hbmlmZXN0Q2FsbGJhY2tJRCwKQEAgLTg1
OSw4ICs4NjAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdG9Cb29sKEpTU3RyaW5nUmVmIHZhbHVl
KQogdm9pZCBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYgcHJlZmVy
ZW5jZSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Ci0gICAgLy8gU2hvdWxkIHVzZSBgPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPmAgaW5zdGVhZC4KLSAg
ICBSRUxFQVNFX0FTU0VSVCghSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhwcmVmZXJlbmNl
LCAiV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVuY2VLZXkiKSk7CisgICAgLy8gU2hvdWxkIHVz
ZSBgPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUg
XSAtLT5gIGluc3RlYWQuCisgICAgUkVMRUFTRV9BU1NFUlQoIUpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcocHJlZmVyZW5jZSwgIldlYktpdFVzZXNCYWNrRm9yd2FyZENhY2hlUHJlZmVyZW5j
ZUtleSIpKTsKIAogICAgIC8vIEZJWE1FOiBoYW5kbGUgbm9uLWJvb2xlYW4gcHJlZmVyZW5jZXMu
CiAgICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihpbmplY3Rl
ZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIHRvV0socHJlZmVy
ZW5jZSkuZ2V0KCksIHRvQm9vbCh2YWx1ZSkpOwpAQCAtMjIwOCw2ICsyMjA5LDIzIEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlckNh
bGxiYWNrKCkKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRTZXRTaG91
bGREb3duZ3JhZGVSZWZlcnJlckNhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFN0YXRpc3RpY3NTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKGJvb2wgdmFsdWUsIEpTVmFs
dWVSZWYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKG1faGFzU2V0QmxvY2tUaGlyZFBh
cnR5Q29va2llc0NhbGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY2FjaGVUZXN0
UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tp
ZXNDYWxsYmFja0lELCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMiKSk7CisgICAgV0tS
ZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKHZhbHVlKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKKyAgICBtX2hhc1NldEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXND
YWxsYmFjayA9IHRydWU7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NhbGxEaWRT
ZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzQ2FsbGJhY2soKQoreworICAgIGNhbGxUZXN0
UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZFNldFNob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tp
ZXNDYWxsYmFja0lEKTsKK30KKwogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2FsbENsZWFy
VGhyb3VnaFdlYnNpdGVEYXRhUmVtb3ZhbENhbGxiYWNrKCkKIHsKICAgICBjYWxsVGVzdFJ1bm5l
ckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWxDYWxs
YmFja0lEKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXN0UnVubmVyLmgKaW5kZXggYzFmMTI0ZjNiMTNjYWU5MWE4OWI3Y2I4NjI1YmI0ODIyOTJkMGI4
My4uZTAzOTRlNjU4OGUzOWZkMzVmODdiNWI3MzJjNTc2YWMxMmZmZDViZSAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKQEAgLTQ0
MCw2ICs0NDAsOCBAQCBjbGFzcyBUZXN0UnVubmVyIDogcHVibGljIEpTV3JhcHBhYmxlIHsKICAg
ICBib29sIGhhc1N0YXRpc3RpY3NJc29sYXRlZFNlc3Npb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUp
OwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2wsIEpT
VmFsdWVSZWYgY2FsbGJhY2spOwogICAgIHZvaWQgc3RhdGlzdGljc0NhbGxEaWRTZXRTaG91bGRE
b3duZ3JhZGVSZWZlcnJlckNhbGxiYWNrKCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxk
QmxvY2tUaGlyZFBhcnR5Q29va2llcyhib29sLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKKyAgICB2
b2lkIHN0YXRpc3RpY3NDYWxsRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llc0NhbGxi
YWNrKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShKU1ZhbHVl
UmVmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDYWxsRGlkUmVzZXRU
b0NvbnNpc3RlbnRTdGF0ZUNhbGxiYWNrKCk7CiAKQEAgLTU3Myw2ICs1NzUsNyBAQCBjbGFzcyBU
ZXN0UnVubmVyIDogcHVibGljIEpTV3JhcHBhYmxlIHsKICAgICBib29sIG1fdXNlclN0eWxlU2hl
ZXRFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fZHVtcEFsbEhUVFBSZWRpcmVjdGVkUmVz
cG9uc2VIZWFkZXJzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzU2V0RG93bmdyYWRlUmVmZXJy
ZXJDYWxsYmFjayB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1NldEJsb2NrVGhpcmRQYXJ0eUNv
b2tpZXNDYWxsYmFjayB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggZTlkNDI4ZTgzNGY2ZGNj
ZGU5NzNlMmVlZThiNTIyZjg5MzRmZDA2MS4uNzU0NWZiZmRmNTQ3YjE4OGY3Y2E0YTVkYWNkMWQ1
YzFhZDI1MGEzYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAK
QEAgLTg0Niw3ICs4NDYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2Vz
VG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpbwogICAgIFdLUHJlZmVy
ZW5jZXNTZXRBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyhw
cmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JD
cmVkZW50aWFscyk7CiAgICAgV0tQcmVmZXJlbmNlc1NldENvbG9yRmlsdGVyRW5hYmxlZChwcmVm
ZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcik7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUocHJlZmVyZW5jZXMsIG9wdGlvbnMu
cHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSk7Ci0gICAgV0tQcmVmZXJlbmNlc1Nl
dFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlUGFnZUNhY2hlKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZUNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVCYWNrRm9yd2FyZENhY2hlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0TGF6eUltYWdl
TG9hZGluZ0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTGF6eUltYWdlTG9hZGlu
Zyk7CiAKICAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZGVmYXVsdFRleHRFbmNvZGluZyA9IFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJU08tODg1OS0xIik7CkBAIC0xNDI5LDggKzE0Mjks
OCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKFRlc3RPcHRp
b25zJiB0ZXN0T3B0aW9ucywgY29uc3Qgc3RkOgogICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29u
dGVudE1vZGUgPSB7IHZhbHVlLmNfc3RyKCkgfTsKICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJl
bmFibGVBcHBOYXAiKQogICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQXBwTmFwID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJlbmFibGVQYWdlQ2FjaGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlUGFnZUNh
Y2hlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKKyAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIikKKyAgICAgICAgICAgIHRlc3RPcHRp
b25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwogICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUxhenlJbWFnZUxvYWRpbmci
KQogICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlTGF6eUltYWdlTG9hZGluZyA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
YWxsb3dzTGlua1ByZXZpZXciKQpAQCAtMzM4Miw3ICszMzgyLDkgQEAgYm9vbCBUZXN0Q29udHJv
bGxlcjo6aXNTdGF0aXN0aWNzR3JhbmRmYXRoZXJlZChXS1N0cmluZ1JlZiBob3N0KQogCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpzZXRVc2VJVFBEYXRhYmFzZShib29sIHZhbHVlKQogewotICAgIFdL
V2Vic2l0ZURhdGFTdG9yZVNldFVzZUlUUERhdGFiYXNlKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRl
RGF0YVN0b3JlKCksIHZhbHVlKTsKKyAgICBSZXNvdXJjZVN0YXRpc3RpY3NDYWxsYmFja0NvbnRl
eHQgY29udGV4dCgqdGhpcyk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlU2V0VXNlSVRQRGF0YWJh
c2UoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUoKSwgdmFsdWUsICZjb250ZXh0LCBy
ZXNvdXJjZVN0YXRpc3RpY3NWb2lkUmVzdWx0Q2FsbGJhY2spOworICAgIHJ1blVudGlsKGNvbnRl
eHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlz
dGljc1N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihXS1N0cmluZ1JlZiBob3N0LCBXS1N0cmlu
Z1JlZiB0b3BGcmFtZUhvc3QpCkBAIC0zNTUzLDYgKzM1NTUsMTQgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0U3RhdGlzdGljc1Nob3VsZERvd25ncmFkZVJlZmVycmVyKGJvb2wgdmFsdWUpCiAg
ICAgbV9jdXJyZW50SW52b2NhdGlvbi0+ZGlkU2V0U2hvdWxkRG93bmdyYWRlUmVmZXJyZXIoKTsK
IH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQ
YXJ0eUNvb2tpZXMoYm9vbCB2YWx1ZSkKK3sKKyAgICBSZXNvdXJjZVN0YXRpc3RpY3NDYWxsYmFj
a0NvbnRleHQgY29udGV4dCgqdGhpcyk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlU2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXNGb3JUZXN0aW5nKFRl
c3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCksIHZhbHVlLCAmY29udGV4dCwgcmVzb3Vy
Y2VTdGF0aXN0aWNzVm9pZFJlc3VsdENhbGxiYWNrKTsKKyAgICBydW5VbnRpbChjb250ZXh0LmRv
bmUsIG5vVGltZW91dCk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+ZGlkU2V0U2hvdWxkQmxv
Y2tUaGlyZFBhcnR5Q29va2llcygpOworfQorCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0
aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCiB7CiAgICAgUmVzb3VyY2VTdGF0aXN0aWNzQ2Fs
bGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5oCmluZGV4IDRiZjkwMjNhYjcyMmEwOTEwMWVkMjUwZmI4MjhjYjdmMmFiNWE0NmUu
LjY4MGQyZTI0NjE3MWNjNjZjYzM2YmZhYjRlZWQ4M2Q1N2RiYWFlNDkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTI1Miw2ICsyNTIsNyBAQCBjbGFzcyBUZXN0
Q29udHJvbGxlciB7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAoZG91Ymxl
IHNlY29uZHMpOwogICAgIGJvb2wgaGFzU3RhdGlzdGljc0lzb2xhdGVkU2Vzc2lvbihXS1N0cmlu
Z1JlZiBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkRG93bmdyYWRlUmVm
ZXJyZXIoYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGly
ZFBhcnR5Q29va2llcyhib29sIHZhbHVlKTsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKCk7CiAKICAgICB2b2lkIGdldEFsbFN0b3JhZ2VBY2Nlc3NFbnRyaWVzKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IDhmZTkyNzlj
ZmVmMTBiNDlhNDYzZWQyNjIyMmQ2YzYwMDI3NDI3M2MuLjNjNjI2OWM0OTA2NGRhM2Q4OWY3NTlh
ZDM2ZThlMWM0NTFkYjI0NTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwCkBAIC0xNTQyLDYgKzE1NDIsMTMgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0
SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhp
cmRQYXJ0eUNvb2tpZXMiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5
Q29va2llcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJSZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMiKSkgewogICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzKCk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTgyNSw2ICsxODMyLDEyIEBAIHZvaWQgVGVzdElu
dm9jYXRpb246OmRpZFNldFNob3VsZERvd25ncmFkZVJlZmVycmVyKCkKICAgICBXS1BhZ2VQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwogfQogCit2b2lkIFRlc3RJ
bnZvY2F0aW9uOjpkaWRTZXRTaG91bGRCbG9ja1RoaXJkUGFydHlDb29raWVzKCkKK3sKKyAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRGlkU2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2ll
cyIpKTsKKyAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG51bGxwdHIpOworfQorCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZXNldFN0YXRpc3RpY3NU
b0NvbnNpc3RlbnRTdGF0ZSgpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbERpZFJl
c2V0U3RhdGlzdGljc1RvQ29uc2lzdGVudFN0YXRlIikpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5oCmluZGV4IGEyNjVlYjliMjZlOTRkMWU0YThmZmRjZWY1ZGUyOTQzOTUx
YmI0MDUuLjc4MDZmYTI5N2RmMmUwMTZhNmI4YjRhMDY2YzU2NmUzYTY4YWYyZjEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgKQEAgLTc0LDYgKzc0LDcgQEAgY2xhc3Mg
VGVzdEludm9jYXRpb24gZmluYWwgOiBwdWJsaWMgVUlTY3JpcHRDb250ZXh0RGVsZWdhdGUgewog
CiAgICAgdm9pZCBkaWRDbGVhclN0YXRpc3RpY3NUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdmFsKCk7
CiAgICAgdm9pZCBkaWRTZXRTaG91bGREb3duZ3JhZGVSZWZlcnJlcigpOworICAgIHZvaWQgZGlk
U2V0U2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcygpOwogICAgIHZvaWQgZGlkUmVzZXRTdGF0
aXN0aWNzVG9Db25zaXN0ZW50U3RhdGUoKTsKICAgICB2b2lkIGRpZFNldEJsb2NrQ29va2llc0Zv
ckhvc3QoKTsKICAgICB2b2lkIGRpZFNldFN0YXRpc3RpY3NEZWJ1Z01vZGUoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdE9wdGlvbnMuaAppbmRleCBjYjZhNWQ1NmRmNDVjY2UyZDQ1NWNhMmQ5OGM2
NGEyMzQ1MDY3NjM2Li41MTVkNWJmYmRlMmRiNzlkMWQ1MzhkYmY3MjE1NjM2ZTQwZjljYTc2IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oCkBAIC05NCw3ICs5NCw3IEBAIHN0cnVj
dCBUZXN0T3B0aW9ucyB7CiAgICAgYm9vbCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgeyB0cnVl
IH07CiAgICAgYm9vbCBzaG91bGRQcmVzZW50UG9wb3ZlcnMgeyB0cnVlIH07CiAgICAgYm9vbCBl
bmFibGVBcHBOYXAgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlUGFnZUNhY2hlIHsgZmFsc2Ug
fTsKKyAgICBib29sIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgeyBmYWxzZSB9OwogICAgIGJvb2wg
ZW5hYmxlTGF6eUltYWdlTG9hZGluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBhbGxvd3NMaW5rUHJl
dmlldyB7IHRydWUgfTsKIApAQCAtMTU0LDcgKzE1NCw3IEBAIHN0cnVjdCBUZXN0T3B0aW9ucyB7
CiAgICAgICAgICAgICB8fCBjb250ZW50SW5zZXRUb3AgIT0gb3B0aW9ucy5jb250ZW50SW5zZXRU
b3AKICAgICAgICAgICAgIHx8IGNvbnRlbnRNb2RlICE9IG9wdGlvbnMuY29udGVudE1vZGUKICAg
ICAgICAgICAgIHx8IGVuYWJsZUFwcE5hcCAhPSBvcHRpb25zLmVuYWJsZUFwcE5hcAotICAgICAg
ICAgICAgfHwgZW5hYmxlUGFnZUNhY2hlICE9IG9wdGlvbnMuZW5hYmxlUGFnZUNhY2hlCisgICAg
ICAgICAgICB8fCBlbmFibGVCYWNrRm9yd2FyZENhY2hlICE9IG9wdGlvbnMuZW5hYmxlQmFja0Zv
cndhcmRDYWNoZQogICAgICAgICAgICAgfHwgZW5hYmxlTGF6eUltYWdlTG9hZGluZyAhPSBvcHRp
b25zLmVuYWJsZUxhenlJbWFnZUxvYWRpbmcKICAgICAgICAgICAgIHx8IGFsbG93c0xpbmtQcmV2
aWV3ICE9IG9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Ub29scy9sbGRiL2xsZGJfd2Via2l0LnB5IGIvVG9vbHMvbGxkYi9s
bGRiX3dlYmtpdC5weQppbmRleCBmNWFlMmMxOTM4YmQ4YTUxNDAxNmIyMGU1NzA1ZjEzZjVlZmYz
ODM2Li5kNTgwODk5N2FjNzFkMWEwNTQ5ZGEwZTVhYThkOWIxZTRjOTM1NjM3IDEwMDY0NAotLS0g
YS9Ub29scy9sbGRiL2xsZGJfd2Via2l0LnB5CisrKyBiL1Rvb2xzL2xsZGIvbGxkYl93ZWJraXQu
cHkKQEAgLTIzOSwxOSArMjM5LDE5IEBAIGRlZiBXZWJDb3JlRnJhbWVfU3VtbWFyeVByb3ZpZGVy
KHZhbG9iaiwgZGljdCk6CiAgICAgaWYgZG9jdW1lbnQ6CiAgICAgICAgIG9yaWdpbiA9IGRvY3Vt
ZW50Lm9yaWdpbigpCiAgICAgICAgIHVybCA9IGRvY3VtZW50LnVybCgpCi0gICAgICAgIHBhZ2VD
YWNoZVN0YXRlID0gZG9jdW1lbnQucGFnZV9jYWNoZV9zdGF0ZSgpCisgICAgICAgIGJhY2tGb3J3
YXJkQ2FjaGVTdGF0ZSA9IGRvY3VtZW50LnBhZ2VfY2FjaGVfc3RhdGUoKQogICAgIGVsc2U6CiAg
ICAgICAgIG9yaWdpbiA9ICcnCiAgICAgICAgIHVybCA9ICcnCi0gICAgICAgIHBhZ2VDYWNoZVN0
YXRlID0gJycKLSAgICByZXR1cm4gJ3sgb3JpZ2luID0gJXMsIHVybCA9ICVzLCBpc01haW5GcmFt
ZSA9ICVkLCBwYWdlQ2FjaGVTdGF0ZSA9ICVzIH0nICUgKG9yaWdpbiwgdXJsLCBwcm92aWRlci5p
c19tYWluX2ZyYW1lKCksIHBhZ2VDYWNoZVN0YXRlKQorICAgICAgICBiYWNrRm9yd2FyZENhY2hl
U3RhdGUgPSAnJworICAgIHJldHVybiAneyBvcmlnaW4gPSAlcywgdXJsID0gJXMsIGlzTWFpbkZy
YW1lID0gJWQsIGJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSA9ICVzIH0nICUgKG9yaWdpbiwgdXJsLCBw
cm92aWRlci5pc19tYWluX2ZyYW1lKCksIGJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSkKIAogCiBkZWYg
V2ViQ29yZURvY3VtZW50X1N1bW1hcnlQcm92aWRlcih2YWxvYmosIGRpY3QpOgogICAgIHByb3Zp
ZGVyID0gV2ViQ29yZURvY3VtZW50UHJvdmlkZXIodmFsb2JqLCBkaWN0KQogICAgIGZyYW1lID0g
cHJvdmlkZXIuZnJhbWUoKQogICAgIGluX21haW5fZnJhbWUgPSAnJWQnICUgZnJhbWUuaXNfbWFp
bl9mcmFtZSgpIGlmIGZyYW1lIGVsc2UgJ0RldGFjaGVkJwotICAgIHJldHVybiAneyBvcmlnaW4g
PSAlcywgdXJsID0gJXMsIGluTWFpbkZyYW1lID0gJXMsIHBhZ2VDYWNoZVN0YXRlID0gJXMgfScg
JSAocHJvdmlkZXIub3JpZ2luKCksIHByb3ZpZGVyLnVybCgpLCBpbl9tYWluX2ZyYW1lLCBwcm92
aWRlci5wYWdlX2NhY2hlX3N0YXRlKCkpCisgICAgcmV0dXJuICd7IG9yaWdpbiA9ICVzLCB1cmwg
PSAlcywgaW5NYWluRnJhbWUgPSAlcywgYmFja0ZvcndhcmRDYWNoZVN0YXRlID0gJXMgfScgJSAo
cHJvdmlkZXIub3JpZ2luKCksIHByb3ZpZGVyLnVybCgpLCBpbl9tYWluX2ZyYW1lLCBwcm92aWRl
ci5wYWdlX2NhY2hlX3N0YXRlKCkpCiAKIAogZGVmIGJ0anMoZGVidWdnZXIsIGNvbW1hbmQsIHJl
c3VsdCwgaW50ZXJuYWxfZGljdCk6CkBAIC03MjMsNyArNzIzLDcgQEAgZGVmIG9yaWdpbihzZWxm
KToKICAgICAgICAgcmV0dXJuIFdlYkNvcmVTZWN1cml0eU9yaWdpblByb3ZpZGVyKHNlY3VyaXR5
X29yaWdpbl9wdHIsIGRpY3QoKSkudG9fc3RyaW5nKCkKIAogICAgIGRlZiBwYWdlX2NhY2hlX3N0
YXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi52YWxvYmouR2V0Q2hpbGRNZW1iZXJXaXRo
TmFtZSgnbV9wYWdlQ2FjaGVTdGF0ZScpLkdldFZhbHVlKCkKKyAgICAgICAgcmV0dXJuIHNlbGYu
dmFsb2JqLkdldENoaWxkTWVtYmVyV2l0aE5hbWUoJ21fYmFja0ZvcndhcmRDYWNoZVN0YXRlJyku
R2V0VmFsdWUoKQogCiAgICAgZGVmIGZyYW1lKHNlbGYpOgogICAgICAgICBmcmFtZV9wdHIgPSBz
ZWxmLnZhbG9iai5HZXRDaGlsZE1lbWJlcldpdGhOYW1lKCdtX2ZyYW1lJykKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjZDll
MWM4Y2E1MjgyOTRiODIyOTM2Mjc0Yzg3OWM4OGRjYTQ5MzBlLi4yMTU1ZWVkZmFkN2NiYTQwZmM2
ZTM4ZGVjZjNkZTQyODQzMjI0MGM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkxIEBACisyMDE5LTEwLTE2
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIFBhZ2VD
YWNoZSB0byBCYWNrRm9yd2FyZENhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDMwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlz
dGVuc2VuLgorCisgICAgICAgIFJlbmFtZSBQYWdlQ2FjaGUgdG8gQmFja0ZvcndhcmRDYWNoZSBm
b3IgY2xhcml0eSBhbmQgY29uc2lzdGVuY3kgd2l0aCB0aGUgVUlQcm9jZXNzJ3MgV2ViQmFja0Zv
cndhcmRDYWNoZS4KKworICAgICAgICAqIGFuaW1hdGlvbnMvcmVzdW1lLWFmdGVyLXBhZ2UtY2Fj
aGUuaHRtbDoKKyAgICAgICAgKiBjb21wb3NpdGluZy9hY2NlbGVyYXRlZC1sYXllcnMtYWZ0ZXIt
YmFjay5odG1sOgorICAgICAgICAqIGNvbXBvc2l0aW5nL2lmcmFtZXMvcGFnZS1jYWNoZS1sYXll
ci10cmVlLmh0bWw6CisgICAgICAgICogY29tcG9zaXRpbmcvcGFnZS1jYWNoZS1iYWNrLWNyYXNo
Lmh0bWw6CisgICAgICAgICogY29tcG9zaXRpbmcvc2hvdy1jb21wb3NpdGVkLWlmcmFtZS1vbi1i
YWNrLWJ1dHRvbi5odG1sOgorICAgICAgICAqIGVkaXRpbmcvbWFjL2lucHV0L3VuY29uZmlybWVk
LXRleHQtbmF2aWdhdGlvbi13aXRoLXBhZ2UtY2FjaGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9jYW52YXMtd2ViZ2wtcGFnZS1jYWNoZS5odG1sOgorICAgICAgICAqIGZhc3Qv
Y3NzL2ZvbnRsb2FkZXItcGFnZS1jYWNoZS5odG1sOgorICAgICAgICAqIGZhc3QvZG9tL0Rldmlj
ZU1vdGlvbi9uby1wYWdlLWNhY2hlLmh0bWw6CisgICAgICAgICogZmFzdC9kb20vRGV2aWNlT3Jp
ZW50YXRpb24vZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5odG1sOgorICAgICAgICAqIGZhc3QvZG9t
L0RldmljZU9yaWVudGF0aW9uL25vLXBhZ2UtY2FjaGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Rv
bS9XaW5kb3cvdGltZXItcmVzdW1lLW9uLW5hdmlnYXRpb24tYmFjay5odG1sOgorICAgICAgICAq
IGZhc3QvZXZlbnRzL29udW5sb2FkLWJhY2stdG8tcGFnZS1jYWNoZS5odG1sOgorICAgICAgICAq
IGZhc3QvZXZlbnRzL3BhZ2VoaWRlLXRpbWVvdXQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2V2ZW50
cy9wYWdlaGlkZS14aHItb3Blbi5odG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3BhZ2VzaG93
LXBhZ2VoaWRlLW9uLWJhY2stY2FjaGVkLXdpdGgtZnJhbWVzLmh0bWw6CisgICAgICAgICogZmFz
dC9ldmVudHMvcGFnZXNob3ctcGFnZWhpZGUtb24tYmFjay1jYWNoZWQuaHRtbDoKKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9zdXNwZW5kLXRpbWVycy5odG1sOgorICAgICAgICAqIGZhc3QvZm9ybXMv
YXV0b2NvbXBsZXRlLW9mZi13aXRoLWRlZmF1bHQtdmFsdWUtZG9lcy1ub3QtY2xlYXIuaHRtbDoK
KyAgICAgICAgKiBmYXN0L2ZyYW1lcy9mcmFtZS1jcmFzaC13aXRoLXBhZ2UtY2FjaGUuaHRtbDoK
KyAgICAgICAgKiBmYXN0L2ZyYW1lcy9mcmFtZS11bmxvYWQtbmF2aWdhdGUtYW5kLXNldFRpbWVv
dXQtYXNzZXJ0LWZhaWwuaHRtbDoKKyAgICAgICAgKiBmYXN0L2ZyYW1lcy9wYWdlLWhpZGUtZG9j
dW1lbnQtb3Blbi5odG1sOgorICAgICAgICAqIGZhc3QvZnJhbWVzL3Jlc3RvcmluZy1wYWdlLWNh
Y2hlLXNob3VsZC1ub3QtcnVuLXNjcmlwdHMtdmlhLXN0eWxlLXVwZGF0ZS5odG1sOgorICAgICAg
ICAqIGZhc3QvZnJhbWVzL3Jlc3RvcmluZy1wYWdlLWNhY2hlLXNob3VsZC1ub3QtcnVuLXNjcmlw
dHMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2hhcm5lc3MvcGFnZS1jYWNoZS1jcmFzaC1vbi1kYXRh
LXVybHMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2hhcm5lc3MvdXNlLXBhZ2UtY2FjaGUuaHRtbDoK
KyAgICAgICAgKiBmYXN0L2hpc3RvcnkvYmFjay1mcm9tLXBhZ2Utd2l0aC1mb2N1c2VkLWlmcmFt
ZS5odG1sOgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9nby1iYWNrLXRvLWlmcmFtZS13aXRoLXBs
dWdpbi5odG1sOgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9nby1iYWNrLXRvLW9iamVjdC1zdWJm
cmFtZS5odG1sOgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9oaXN0b3J5LWJhY2std2hpbGUtcGRm
LWluLXBhZ2VjYWNoZS5odG1sOgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLU1l
c3NhZ2VQb3J0LXBlbmRpbmctbWVzc2FnZS5odG1sOgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9w
YWdlLWNhY2hlLWFmdGVyLXdpbmRvdy1vcGVuLmh0bWw6CisgICAgICAgICogZmFzdC9oaXN0b3J5
L3BhZ2UtY2FjaGUtYmFjay1uYXZpZ2F0aW9uLWNyYXNoLmh0bWw6CisgICAgICAgICogZmFzdC9o
aXN0b3J5L3BhZ2UtY2FjaGUtY2xlYXJpbmctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
aGlzdG9yeS9wYWdlLWNhY2hlLWNsZWFyaW5nLmh0bWw6CisgICAgICAgICogZmFzdC9oaXN0b3J5
L3BhZ2UtY2FjaGUtY2xvc2VkLWF1ZGlvY29udGV4dC5odG1sOgorICAgICAgICAqIGZhc3QvaGlz
dG9yeS9wYWdlLWNhY2hlLWNyZWF0ZUltYWdlQml0bWFwLmh0bWw6CisgICAgICAgICogZmFzdC9o
aXN0b3J5L3BhZ2UtY2FjaGUtY3JlYXRlT2JqZWN0VVJMLXVzaW5nLW9wZW4tcGFuZWwuaHRtbDoK
KyAgICAgICAgKiBmYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1jcmVhdGVPYmplY3RVUkwuaHRtbDoK
KyAgICAgICAgKiBmYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1kZXN0cm95LWRvY3VtZW50Lmh0bWw6
CisgICAgICAgICogZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtZWxlbWVudC1zdGF0ZS1mb2N1c2Vk
Lmh0bWw6CisgICAgICAgICogZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtZXhlY3V0ZS1zY3JpcHQt
ZHVyaW5nLXJlc3RvcmUuaHRtbDoKKyAgICAgICAgKiBmYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1n
ZW9sb2NhdGlvbi1hY3RpdmUtb25lc2hvdC5odG1sOgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9w
YWdlLWNhY2hlLWdlb2xvY2F0aW9uLWFjdGl2ZS13YXRjaGVyLmh0bWw6CisgICAgICAgICogZmFz
dC9oaXN0b3J5L3BhZ2UtY2FjaGUtZ2VvbG9jYXRpb24uaHRtbDoKKyAgICAgICAgKiBmYXN0L2hp
c3RvcnkvcGFnZS1jYWNoZS1pZnJhbWUtanMtdXJsLmh0bWw6CisgICAgICAgICogZmFzdC9oaXN0
b3J5L3BhZ2UtY2FjaGUtaW5kZXhlZC1jbG9zZWQtZGIuaHRtbDoKKyAgICAgICAgKiBmYXN0L2hp
c3RvcnkvcGFnZS1jYWNoZS1pbmRleGVkLW9wZW5lZC1kYi5odG1sOgorICAgICAgICAqIGZhc3Qv
aGlzdG9yeS9wYWdlLWNhY2hlLW1lZGlhLXNvdXJjZS1jbG9zZWQtMi5odG1sOgorICAgICAgICAq
IGZhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLW1lZGlhLXNvdXJjZS1jbG9zZWQuaHRtbDoKKyAgICAg
ICAgKiBmYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1tZWRpYS1zb3VyY2Utb3BlbmVkLmh0bWw6Cisg
ICAgICAgICogZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtbmF2aWdhdGUtZHVyaW5nLXJlc3RvcmUu
aHRtbDoKKyAgICAgICAgKiBmYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1ub3RpZmljYXRpb24tbm9u
LXN1c3BlbmRhYmxlLmh0bWw6CisgICAgICAgICogZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtbm90
aWZpY2F0aW9uLXN1c3BlbmRhYmxlLmh0bWw6CisgICAgICAgICogZmFzdC9oaXN0b3J5L3BhZ2Ut
Y2FjaGUtcmVtb3ZlZC1zb3VyY2UtYnVmZmVyLmh0bWw6CisgICAgICAgICogZmFzdC9oaXN0b3J5
L3BhZ2UtY2FjaGUtcnVubmluZy1hdWRpb2NvbnRleHQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2hp
c3RvcnkvcGFnZS1jYWNoZS1zdWJmcmFtZXMtd2l0aC1wcm92aXNpb25hbC1sb2FkLmh0bWw6Cisg
ICAgICAgICogZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtc3VzcGVuZGVkLWF1ZGlvY29udGV4dC5o
dG1sOgorICAgICAgICAqIGZhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLXdlYmRhdGFiYXNlLW5vLXRy
YW5zYWN0aW9uLWRiLmh0bWw6CisgICAgICAgICogZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtd2Vi
ZGF0YWJhc2UtcGVuZGluZy10cmFuc2FjdGlvbi5odG1sOgorICAgICAgICAqIGZhc3QvaGlzdG9y
eS9wYWdlLWNhY2hlLXdpdGgtb3BlbmVyLmh0bWw6CisgICAgICAgICogZmFzdC9oaXN0b3J5L3Bh
Z2VoaWRlLXJlbW92ZS1pZnJhbWUtY3Jhc2guaHRtbDoKKyAgICAgICAgKiBmYXN0L2hpc3Rvcnkv
cmVzb3VyY2VzL3BhZ2UtY2FjaGUtd2luZG93LXdpdGgtaWZyYW1lLmh0bWw6CisgICAgICAgICog
ZmFzdC9oaXN0b3J5L3Jlc291cmNlcy9wYWdlLWNhY2hlLXdpbmRvdy13aXRoLW9wZW5lci5odG1s
OgorICAgICAgICAqIGZhc3QvaGlzdG9yeS90aW1lZC1yZWZyZXNoLWluLWNhY2hlZC1mcmFtZS5o
dG1sOgorICAgICAgICAqIGZhc3QvaW1hZ2VzL2FuaW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9tLWJm
Y2FjaGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L2xvYWRlci9mcmFtZXMtd2l0aC11bmxvYWQtaGFu
ZGxlcnMtaW4tcGFnZS1jYWNoZS5odG1sOgorICAgICAgICAqIGZhc3QvbG9hZGVyL2ltYWdlLWlu
LXBhZ2UtY2FjaGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L2xvYWRlci9pbnB1dC1lbGVtZW50LXBh
Z2UtY2FjaGUtY3Jhc2guaHRtbDoKKyAgICAgICAgKiBmYXN0L2xvYWRlci9uYXZpZ2F0ZS13aXRo
LW5ldy10YXJnZXQtYWZ0ZXItYmFjay1mb3J3YXJkLW5hdmlnYXRpb24uaHRtbDoKKyAgICAgICAg
KiBmYXN0L2xvYWRlci9uYXZpZ2F0ZS13aXRoLXBvc3QtdG8tbmV3LXRhcmdldC1hZnRlci1iYWNr
LWZvcndhcmQtbmF2aWdhdGlvbi5odG1sOgorICAgICAgICAqIGZhc3QvbG9hZGVyL3Njcm9sbC1w
b3NpdGlvbi1yZXN0b3JlZC1vbi1iYWNrLmh0bWw6CisgICAgICAgICogZmFzdC9sb2FkZXIvc3Rh
dGVvYmplY3RzL25vLXBvcHN0YXRlLXdoZW4tYmFjay10by1zdGF0ZWxlc3MtZW50cnktd2l0aC1w
YWdlLWNhY2hlLmh0bWw6CisgICAgICAgICogZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3BvcHN0
YXRlLWZpcmVzLXdpdGgtcGFnZS1jYWNoZS5odG1sOgorICAgICAgICAqIGZhc3QvbG9hZGVyL3Vu
c2NoZWR1bGUtcmVsYXlvdXQtYWZ0ZXItdW5sb2FkLmh0bWw6CisgICAgICAgICogZmFzdC9sb2Fk
ZXIvd2luZG93LXByb3BlcnRpZXMtcmVzdG9yZWQtZnJvbS1wYWdlLWNhY2hlLmh0bWw6CisgICAg
ICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1wYWdlLWNhY2hlLmh0bWw6
CisgICAgICAgICogZmFzdC9vdmVyZmxvdy9ob3Jpem9udGFsLXNjcm9sbC1hZnRlci1iYWNrLmh0
bWw6CisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvaWZyYW1lLXNjcm9sbGFibGUtYWZ0ZXItYmFj
ay5odG1sOgorICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL2lvcy9zY3JvbGwtZXZlbnRzLWJhY2st
Zm9yd2FyZC1hZnRlci1wYWdlc2hvdy5odG1sOgorICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL2lv
cy9zY3JvbGwtZXZlbnRzLWJhY2stZm9yd2FyZC5odG1sOgorICAgICAgICAqIGZhc3Qvc2Nyb2xs
aW5nL2lvcy90b3VjaC1zY3JvbGwtYmFjay1mb3J3YXJkLmh0bWw6CisgICAgICAgICogZmFzdC9z
Y3JvbGxpbmcvb3ZlcmZsb3ctc2Nyb2xsYWJsZS1hZnRlci1iYWNrLmh0bWw6CisgICAgICAgICog
ZmFzdC9zY3JvbGxpbmcvcGFnZS1jYWNoZS1iYWNrLW92ZXJmbG93LXNjcm9sbC1yZXN0b3JlLmh0
bWw6CisgICAgICAgICogZmFzdC90ZXh0LWF1dG9zaXppbmcvaW9zL3RleHQtYXV0b3NpemluZy1h
ZnRlci1iYWNrLmh0bWw6CisgICAgICAgICogZmFzdC92aWV3cG9ydC9pb3Mvdmlld3BvcnQtc2hy
aW5rLXRvLWZpdC1vbi1uZXctbmF2aWdhdGlvbi5odG1sOgorICAgICAgICAqIGZhc3Qvdmlld3Bv
cnQvdmlld3BvcnQtMTI4Lmh0bWw6CisgICAgICAgICogZmFzdC93b3JrZXJzL3dvcmtlci1wYWdl
LWNhY2hlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS9kaXNwbGF5LWltYWdlLXVu
c2V0LWFsbG93cy1jYWNoZWQtaW1hZ2UtbG9hZC5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMv
ZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFnZS1jYWNoZS1jb25uZWN0ZWQuaHRtbDoKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXBhZ2UtY2FjaGUtY29ubmVj
dGluZy5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9tYWluLXJlc291cmNlLWRl
bGVnYXRlcy1vbi1iYWNrLW5hdmlnYXRpb24uaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
YWRpbmcvdW5maW5pc2hlZC1sb2FkLWJhY2stdG8tY2FjaGVkLXBhZ2UtY2FsbGJhY2tzLmh0bWw6
CisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3VuZmluaXNoZWQtbWFpbi1yZXNvdXJjZS1i
YWNrLXRvLWNhY2hlZC1wYWdlLWNhbGxiYWNrcy5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bWVkaWEvcmVsb2FkLWFmdGVyLWRpYWxvZy5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9nby1iYWNrLXRvLWVycm9yLXBhZ2UuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L25hdmlnYXRpb24vaHR0cHMtaW4tcGFnZS1jYWNoZS5odG1sOgorICAgICAgICAqIGh0dHAvdGVz
dHMvbmF2aWdhdGlvbi9odHRwcy1uby1zdG9yZS1zdWJmcmFtZS1pbi1wYWdlLWNhY2hlLmh0bWw6
CisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tcGFnZWhpZGUt
aGFuZGxlci5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hl
LWRvbWNhY2hlLXBlbmRpbmctcHJvbWlzZS5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9wYWdlLWNhY2hlLWRvbWNhY2hlc3RvcmFnZS1wZW5kaW5nLXByb21pc2UuaHRtbDoK
KyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1mYWlsZWQteGhyLmh0
bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtZm9udGZhY2Vz
ZXQuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1mcmFn
bWVudC1yZWZlcnJlci5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdl
LWNhY2hlLWlmcmFtZS1uby1jdXJyZW50LWhpc3RvcnlJdGVtLmh0bWw6CisgICAgICAgICogaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5
bmMtZGVsZWdhdGVzLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2Ut
Y2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L25hdmlnYXRpb24vcGFnZS1jYWNoZS1wZW5kaW5nLWltYWdlLWxvYWQtY2FjaGUtcGFydGl0aW9u
Lmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtcGVuZGlu
Zy1pbWFnZS1sb2FkLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2Ut
Y2FjaGUtcGVuZGluZy1sb2FkLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L3BhZ2UtY2FjaGUtcGVuZGluZy1waW5nLWxvYWQtY3Jvc3Mtb3JpZ2luLmh0bWw6CisgICAgICAg
ICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtcGVuZGluZy1waW5nLWxvYWQtc2Ft
ZS1vcmlnaW4uaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNo
ZS1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmln
YXRpb24vcGFnZS1jYWNoZS14aHItaW4tcGFnZWhpZGUuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rl
c3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS14aHIuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L25hdmlnYXRpb24vcmVzb3VyY2VzL2h0dHBzLWluLXBhZ2UtY2FjaGUtMy5odG1sOgorICAgICAg
ICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9zdWJmcmFtZS1wYWdlaGlkZS1oYW5kbGVyLXN0YXJ0
cy1sb2FkLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3N1YmZyYW1lLXBh
Z2VoaWRlLWhhbmRsZXItc3RhcnRzLWxvYWQyLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9z
ZWN1cml0eS9jcm9zcy1vcmlnaW4td2luZG93LW9wZW4taW5zZXJ0LXNjcmlwdC5odG1sOgorICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLXdpbmRvdy1vcGVuLWphdmFz
Y3JpcHQtdXJsLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9uYXZpZ2F0ZS13
aGVuLXJlc3RvcmluZy1jYWNoZWQtcGFnZS5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzLURFTklFRC1jbGljay1hbmQtZm9ybS1zdWJtaXNzaW9uLWZyb20taW5hY3RpdmUt
ZG9td2luZG93Lmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtREVOSUVE
LXNjcmlwdC1pbmplY3QtaW50by1pbmFjdGl2ZS13aW5kb3cuaHRtbDoKKyAgICAgICAgKiBodHRw
L3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQtc2NyaXB0LWluamVjdC1pbnRvLWluYWN0aXZlLXdp
bmRvdzItcHNvbi5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzLURFTklF
RC1zY3JpcHQtaW5qZWN0LWludG8taW5hY3RpdmUtd2luZG93Mi5odG1sOgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkveHNzLURFTklFRC1zY3JpcHQtaW5qZWN0LWludG8taW5hY3RpdmUt
d2luZG93My5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
Y2xvc2VkLXdoZW4tZW50ZXJpbmctcGFnZS1jYWNoZS5odG1sOgorICAgICAgICAqIGh0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc3RvcC1vbi1yZXN1bWUtaW4tZXJyb3ItaGFuZGxlci5o
dG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvd29ya2Vycy9zZXJ2aWNlL2NsaWVudC1hZGRlZC10
by1jbGllbnRzLXdoZW4tcmVzdG9yZWQtZnJvbS1wYWdlLWNhY2hlLmh0bWw6CisgICAgICAgICog
aHR0cC90ZXN0cy93b3JrZXJzL3NlcnZpY2UvY2xpZW50LXJlbW92ZWQtZnJvbS1jbGllbnRzLXdo
aWxlLWluLXBhZ2UtY2FjaGUuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dvcmtlcnMvc2Vy
dmljZS9wYWdlLWNhY2hlLXNlcnZpY2Utd29ya2VyLXBlbmRpbmctcHJvbWlzZS5odHRwcy5odG1s
OgorICAgICAgICAqIGh0dHAvdGVzdHMvd29ya2Vycy9zZXJ2aWNlL3BhZ2UtY2FjaGluZy5odG1s
OgorICAgICAgICAqIGh0dHAvd3B0L2JlYWNvbi9zdXBwb3J0L3NlbmRCZWFjb24tb25wYWdlaGlk
ZS13aW5kb3cuaHRtbDoKKyAgICAgICAgKiBsZWdhY3ktYW5pbWF0aW9uLWVuZ2luZS9hbmltYXRp
b25zL3Jlc3VtZS1hZnRlci1wYWdlLWNhY2hlLmh0bWw6CisgICAgICAgICogbG9hZGVyL2dvLWJh
Y2stY2FjaGVkLW1haW4tcmVzb3VyY2UuaHRtbDoKKyAgICAgICAgKiBsb2FkZXIvZ28tYmFjay10
by1kaWZmZXJlbnQtd2luZG93LXNpemUuaHRtbDoKKyAgICAgICAgKiBtZWRpYS9jcmFzaC1jbG9z
aW5nLXBhZ2Utd2l0aC1tZWRpYS1hcy1wbHVnaW4tZmFsbGJhY2suaHRtbDoKKyAgICAgICAgKiBt
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXBhZ2UtY2FjaGUuaHRtbDoKKyAgICAgICAg
KiBtZWRpYS9yZXN0b3JlLWZyb20tcGFnZS1jYWNoZS5odG1sOgorICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9pb3MvZml4ZWQvZml4ZWQtYmFjay1mb3J3YXJkLmh0bWw6CisgICAgICAgICogcGx1Z2lu
cy9jcmFzaC1yZXN0b3JpbmctcGx1Z2luLXBhZ2UtZnJvbS1wYWdlLWNhY2hlLmh0bWw6CisgICAg
ICAgICogcGx1Z2lucy9mcmFtZXNldC13aXRoLXBsdWdpbi1mcmFtZS5odG1sOgorICAgICAgICAq
IHBsdWdpbnMvbmV0c2NhcGUtcGx1Z2luLXBhZ2UtY2FjaGUtd29ya3MuaHRtbDoKKyAgICAgICAg
KiBzdG9yYWdlL2luZGV4ZWRkYi9JREJSZXF1ZXN0LXBhZ2UtY2FjaGUuaHRtbDoKKyAgICAgICAg
KiBzdG9yYWdlL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi1wYWdlLWNhY2hlLmh0bWw6CisgICAg
ICAgICogc3dpcGUvYmFzaWMtY2FjaGVkLWJhY2stc3dpcGUuaHRtbDoKKyAgICAgICAgKiBzd2lw
ZS9tYWluLWZyYW1lLXBpbm5pbmctcmVxdWlyZW1lbnQuaHRtbDoKKyAgICAgICAgKiBzd2lwZS9w
dXNoU3RhdGUtY2FjaGVkLWJhY2stc3dpcGUuaHRtbDoKKyAgICAgICAgKiBzd2lwZS9wdXNoU3Rh
dGUtcHJvZ3JhbW1hdGljLWJhY2std2hpbGUtc3dpcGluZy1jcmFzaC5odG1sOgorICAgICAgICAq
IHN3aXBlL3B1c2hzdGF0ZS13aXRoLW1hbnVhbC1zY3JvbGxyZXN0b3JhdGlvbi5odG1sOgorICAg
ICAgICAqIHRpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nL251bGwtcGFyZW50LWJhY2stY3Jhc2guaHRt
bDoKKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL3RpbGVkLWRyYXdpbmctc2Nyb2xsLXBvc2l0aW9u
LXBhZ2UtY2FjaGUtcmVzdG9yYXRpb24uaHRtbDoKKyAgICAgICAgKiB3ZWJydGMvZGF0YWNoYW5u
ZWwvZGF0YWNoYW5uZWwtcGFnZS1jYWNoZS1zZW5kLmh0bWw6CisgICAgICAgICogd2VicnRjL2Rh
dGFjaGFubmVsL2RhdGFjaGFubmVsLXBhZ2UtY2FjaGUuaHRtbDoKKworMjAxOS0xMC0xNiAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBpT1M6IGlucHV0
bW9kZT1ub25lIGlzIG5vdCByZXNwZWN0ZWQgd2l0aCBhIGhhcmR3YXJlIGtleWJvYXJkIGF0dGFj
aGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMw
NjEKKworICAgICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0ZXMuCisKKyAgICAgICAgKiBmYXN0
L2Zvcm1zL2lvcy9pbnB1dG1vZGUtbm9uZS13aXRoLWhhcmR3YXJlLWtleWJvYXJkLmh0bWw6IEFk
ZGVkLgorICAgICAgICBDbG9uZSBpbnB1dG1vZGUtbm9uZS5odG1sIHRvIGlucHV0bW9kZS1ub25l
LXdpdGgtaGFyZHdhcmUta2V5Ym9hcmQuaHRtbAorICAgICAgICBhbmQgcmVtb3ZlIHRoZSBsaW5l
IHRvIGZhdXgtZGV0YWNoIHRoZSBoYXJkd2FyZSBrZXlib2FyZC4KKworMjAxOS0xMC0xNiAgSm9o
biBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2Fk
IFN0YXRpc3RpY3MgKGV4cGVyaW1lbnRhbCk6IEJsb2NrIGFsbCB0aGlyZC1wYXJ0eSBjb29raWVz
IG9uIHdlYnNpdGVzIHdpdGhvdXQgcHJpb3IgdXNlciBpbnRlcmFjdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDE3CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81NjI2MjcwOD4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVu
c2VuLgorCisgICAgICAgICogaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RoaXJk
LXBhcnR5LWNvb2tpZS1ibG9ja2luZy1vbi1zaXRlcy13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24t
ZGF0YWJhc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvdGhpcmQtcGFydHktY29va2llLWJsb2NraW5nLW9uLXNpdGVzLXdp
dGhvdXQtdXNlci1pbnRlcmFjdGlvbi1kYXRhYmFzZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGhpcmQtcGFydHktY29va2llLWJsb2Nr
aW5nLW9uLXNpdGVzLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90aGlyZC1wYXJ0
eS1jb29raWUtYmxvY2tpbmctb24tc2l0ZXMtd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWw6
IEFkZGVkLgorCiAyMDE5LTEwLTE2ICBSdXNzZWxsIEVwc3RlaW4gIDxyZXBzdGVpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgQ29ycmVjdCBUZXN0RXhwZWN0YXRpb25zIGZyb20gcjI1MTExOS4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzdW1lLWFmdGVyLXBhZ2UtY2FjaGUu
aHRtbCBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzdW1lLWFmdGVyLXBhZ2UtY2FjaGUuaHRt
bAppbmRleCBhNjYyMmVlMzA4MTI5MThlNjNkNTZmMjRmM2RlYTU1NDI5MTQ1M2M3Li5lOThjNDk5
ZWQ3YjQwMjVmNWI1MDczNGVhZDQzYzNkOWUxZjE3ZDI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9hbmltYXRpb25zL3Jlc3VtZS1hZnRlci1wYWdlLWNhY2hlLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvYW5pbWF0aW9ucy9yZXN1bWUtYWZ0ZXItcGFnZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgor
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAt
LT4KIDxzdHlsZT4KIEAtd2Via2l0LWtleWZyYW1lcyBib3VuY2UgewogICAgIGZyb20gewpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvYWNjZWxlcmF0ZWQtbGF5ZXJzLWFmdGVy
LWJhY2suaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL2FjY2VsZXJhdGVkLWxheWVycy1h
ZnRlci1iYWNrLmh0bWwKaW5kZXggM2I2MWE0NGMzYzY1ODUzMDhiMmRkYTVlNWE5NTViYTE2YzE0
MTYxZi4uYTVmYmMxNWI0ZTRkZDM0OGRjYmZkNWU3NmZjNDEyMTk1MmI0NTNhOCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvYWNjZWxlcmF0ZWQtbGF5ZXJzLWFmdGVyLWJhY2su
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9hY2NlbGVyYXRlZC1sYXllcnMtYWZ0
ZXItYmFjay5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgdXNlQWNjZWxlcmF0ZWREcmF3aW5nPXRydWUgZW5hYmxlUGFnZUNhY2hl
PXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVz
ZUFjY2VsZXJhdGVkRHJhd2luZz10cnVlIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0t
PgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcv
aWZyYW1lcy9wYWdlLWNhY2hlLWxheWVyLXRyZWUuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0
aW5nL2lmcmFtZXMvcGFnZS1jYWNoZS1sYXllci10cmVlLmh0bWwKaW5kZXggOTZjNjk4ZjM3NDA4
MmU5NjE4M2Y3ZTZhZGZmNzA5MzczNTM3NmU5Zi4uMDU0YWExODkzZTQxNjMxYjdiY2EyMjQ3MzY5
Y2Y4Y2NlNDUyYjhiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaWZyYW1l
cy9wYWdlLWNhY2hlLWxheWVyLXRyZWUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGlu
Zy9pZnJhbWVzL3BhZ2UtY2FjaGUtbGF5ZXItdHJlZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwh
RE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL3BhZ2UtY2FjaGUtYmFjay1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvY29tcG9z
aXRpbmcvcGFnZS1jYWNoZS1iYWNrLWNyYXNoLmh0bWwKaW5kZXggOGY2OGJjZDhmYTk1ZTVjYmQ5
YzAzYTBmMzk0MTUzMTMyZmI4YTBhZS4uYzY3ZjIxNDIwYjg4ZmMwN2IwN2RjMmEyNzVkY2U5Y2Mx
MzlkYmRjNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvcGFnZS1jYWNoZS1i
YWNrLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvcGFnZS1jYWNoZS1i
YWNrLWNyYXNoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPHN0eWxlPgogLm91dGVyIHsgcG9zaXRp
b246IGZpeGVkOyB9CiAuaW5uZXIgeyBwb3NpdGlvbjogYWJzb2x1dGU7IH0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL3Nob3ctY29tcG9zaXRlZC1pZnJhbWUtb24tYmFjay1i
dXR0b24uaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL3Nob3ctY29tcG9zaXRlZC1pZnJh
bWUtb24tYmFjay1idXR0b24uaHRtbAppbmRleCA1Njk1ZTc0ZjMwOWUxNzQwY2E3ZTk4NDhjNGEz
YjMyZmMzZjJlYTQzLi4wZTY4YTNkNTQ1YWE4NjJkNjA3Nzk3NDA3YzVmYjkwZjM5NzI3NjMzIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9zaG93LWNvbXBvc2l0ZWQtaWZyYW1l
LW9uLWJhY2stYnV0dG9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvc2hvdy1j
b21wb3NpdGVkLWlmcmFtZS1vbi1iYWNrLWJ1dHRvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwh
RE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvbWFjL2lucHV0L3VuY29uZmlybWVkLXRleHQtbmF2aWdhdGlvbi13aXRoLXBhZ2UtY2Fj
aGUuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvbWFjL2lucHV0L3VuY29uZmlybWVkLXRleHQt
bmF2aWdhdGlvbi13aXRoLXBhZ2UtY2FjaGUuaHRtbAppbmRleCAzODg3N2NiZDBlODI3NmYyY2M0
MGM2NGJiNzZmNWUxOTRiZWEzMDhhLi43YjhkNzkyYzY3M2E3NjVkMGM3ZjQ3OTRlYzBmYjJmNmY5
NGQ1MjA0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL21hYy9pbnB1dC91bmNvbmZp
cm1lZC10ZXh0LW5hdmlnYXRpb24td2l0aC1wYWdlLWNhY2hlLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9tYWMvaW5wdXQvdW5jb25maXJtZWQtdGV4dC1uYXZpZ2F0aW9uLXdpdGgtcGFn
ZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
bmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFi
bGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxodG1sPgogPGhlYWQ+CiA8dGl0bGU+VGVz
dCB3aGF0IGhhcHBlbnMgd2hlbiBuYXZpZ2F0aW5nIGZyb20gYSBwYWdlIHdpdGggdW5jb25maXJt
ZWQgaW5saW5lIGlucHV0IHdoZW4gdGhlIHBhZ2UgaXMgY2FjaGVhYmxlPC90aXRsZT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy13ZWJnbC1wYWdlLWNh
Y2hlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtd2ViZ2wtcGFn
ZS1jYWNoZS5odG1sCmluZGV4IGNiYTMyNzkzMTMwZWRhYzU2ZWJjYjIwOTY5NTg4Yjk0YzdjNjg0
NmUuLjljN2M4MzdmZDJhODQzNTM4YzI3MTU1NzU1ODg3NDg0NGM4NWE0NjcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy13ZWJnbC1wYWdlLWNhY2hlLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXdlYmdsLXBhZ2Ut
Y2FjaGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5h
YmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxl
QmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MvZm9udGxvYWRlci1wYWdlLWNhY2hlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9mb250bG9hZGVyLXBhZ2UtY2FjaGUuaHRtbAppbmRleCA3
YTIwYTBjMWEyOTI1MjBiNDAyNTg5NDM3ODY4YzI0NjZiY2RhZjcyLi45ODc5MmNjZTJiNDUxNjYz
MzUwNjA3ZmY5YWNlMzFlMzYyNmYzNDNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9mb250bG9hZGVyLXBhZ2UtY2FjaGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9m
b250bG9hZGVyLXBhZ2UtY2FjaGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IWRvY3R5cGUgaHRt
bD4KIDxodG1sPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vRGV2
aWNlTW90aW9uL25vLXBhZ2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Rldmlj
ZU1vdGlvbi9uby1wYWdlLWNhY2hlLmh0bWwKaW5kZXggNTllNzM4MzE5MTgwZTg4ZWNmZjBkYThj
NjY3MzNhNzgzZDY5NTY4ZC4uZTZmOWViZTI1MzEyMzgwMTZmNTA3OGQ2OGZlZWNiMjY2NDU0ZTZh
YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vRGV2aWNlTW90aW9uL25vLXBhZ2Ut
Y2FjaGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9EZXZpY2VNb3Rpb24vbm8tcGFn
ZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
bmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFi
bGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0RldmljZU9yaWVudGF0aW9uL2V2ZW50LWFmdGVyLW5h
dmlnYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0RldmljZU9yaWVudGF0aW9uL2V2
ZW50LWFmdGVyLW5hdmlnYXRpb24uaHRtbAppbmRleCAyMzhiMzcxNGYwMjdiYmQ5ZWI2MzVkZTBi
YTgyOTJkZWQ1OWE2Y2Q0Li4zNjAyNTE4ODk3M2U4YmQyOGY4YTc2ZTE5ZjhmMjA4YTFjZGU3ZTBl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9EZXZpY2VPcmllbnRhdGlvbi9ldmVu
dC1hZnRlci1uYXZpZ2F0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRGV2aWNl
T3JpZW50YXRpb24vZXZlbnQtYWZ0ZXItbmF2aWdhdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4K
IDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Rldmlj
ZU9yaWVudGF0aW9uL25vLXBhZ2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0Rl
dmljZU9yaWVudGF0aW9uL25vLXBhZ2UtY2FjaGUuaHRtbAppbmRleCA2NjUxZjUxNmRlOWY0MTIw
NjkyM2Y4YWJkODU5ZjRjZTAzMWJlOWMzLi41ZWM2NDkxODJmNGY3MjA5OTY2ZjYwYmI4N2Y5N2Uy
ZGI5ZTVhMTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9EZXZpY2VPcmllbnRh
dGlvbi9uby1wYWdlLWNhY2hlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vRGV2aWNl
T3JpZW50YXRpb24vbm8tcGFnZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxodG1sPgog
PGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy90aW1lci1y
ZXN1bWUtb24tbmF2aWdhdGlvbi1iYWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5k
b3cvdGltZXItcmVzdW1lLW9uLW5hdmlnYXRpb24tYmFjay5odG1sCmluZGV4IDMwMmE0MjQwYjhk
M2MxYjEyNDUxMmYxMTEyNWZkM2Y2OWY4NmNiMWYuLjJhZWM4NDg2OWRiMTZiMjlkZTYzYTgzODZk
YWYyNDBjZDlhNDdkYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy90
aW1lci1yZXN1bWUtb24tbmF2aWdhdGlvbi1iYWNrLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vV2luZG93L3RpbWVyLXJlc3VtZS1vbi1uYXZpZ2F0aW9uLWJhY2suaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUg
XSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10
cnVlIF0gLS0+CiA8aHRtbD4KIDxzY3JpcHQ+CiB2YXIgdGltZW91dFZhbHVlID0gMTAwOyAvL21z
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9vbnVubG9hZC1iYWNrLXRvLXBh
Z2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL29udW5sb2FkLWJhY2stdG8t
cGFnZS1jYWNoZS5odG1sCmluZGV4IGYwMTg0ZjM3YzZiYTA5ZTMwMzIxZTk4MGYyNjY1YzJjYzY1
MjJlMDQuLjI0YzBhMWVmNDNmYTlmNzIxZDVlMzlhOTAwM2RiY2Q3MmVjZDViOGEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL29udW5sb2FkLWJhY2stdG8tcGFnZS1jYWNoZS5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL29udW5sb2FkLWJhY2stdG8tcGFnZS1j
YWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFi
bGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVC
YWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS10aW1lb3V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9wYWdlaGlkZS10aW1lb3V0Lmh0bWwKaW5kZXggNDgwMWVlODg2OTE4NTgzN2YxOWU3YzZm
MTNhZTljNWFlZDEyMTU2Zi4uYTE3M2RiMzhhNTU5YTBmYjg5MDVkYzhhNTA1ZDNkZWQzYjBhM2U2
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZWhpZGUtdGltZW91dC5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXRpbWVvdXQuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hl
PXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRD
YWNoZT10cnVlIF0gLS0+CiA8aHRtbD4KIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvcGFnZWhpZGUteGhyLW9wZW4uaHRtbAppbmRleCBhM2I5YjVjZTM3ZTA0ZWQyODFhYjJkYjUz
NmUxOTFjMjNjNzBlM2ZmLi41MTdmNDFiNjg5OTM4NDA1ZTQzNGViNjkzZGU5MDEwMzI2MDM5MWVh
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlaGlkZS14aHItb3Blbi5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VoaWRlLXhoci1vcGVuLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNo
ZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJk
Q2FjaGU9dHJ1ZSBdIC0tPgogPGh0bWw+CiA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvcGFnZXNob3ctcGFnZWhpZGUtb24tYmFjay1jYWNoZWQtd2l0aC1mcmFtZXMu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VzaG93LXBhZ2VoaWRlLW9uLWJhY2st
Y2FjaGVkLXdpdGgtZnJhbWVzLmh0bWwKaW5kZXggNDIxMjg2ZDUwMDA5ODMzZjU1MGZiODE1MDJk
YmRmMjJiNmQzMTI4OC4uZjJmMzIwMTI2ODBlMDJhZWNjZjUxNjRkNzJlYjBiNzc1ZjVkOGFjMCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZXNob3ctcGFnZWhpZGUtb24t
YmFjay1jYWNoZWQtd2l0aC1mcmFtZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1iYWNrLWNhY2hlZC13aXRoLWZyYW1lcy5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1
ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hl
PXRydWUgXSAtLT4KIDxodG1sPgogPGJvZHk+CiBUZXN0IHBhZ2VzaG93L3BhZ2VoaWRlIGV2ZW50
IGJlaGF2aW9yIHdoZW4gbmF2aWdhdGluZyBhd2F5IGZyb20gYSBwYWdlIHdpdGggZnJhbWVzLCBw
dXR0aW5nIHRoZSBwYWdlIGluIHRoZSBwYWdlIGNhY2hlLCB0aGVuIGJhY2sgdG8gaXQuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1iYWNr
LWNhY2hlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGFnZXNob3ctcGFnZWhpZGUt
b24tYmFjay1jYWNoZWQuaHRtbAppbmRleCBjZjkyMWJmY2Q4YmYxYzEyOTEwNjcxZGE1ODFmNGQy
MjNjOWY4YTJhLi4wY2JiYWFjNTk1MTYwZDQyOWVlN2U1NWViY2NhODhlYjlhYzhmZmRlIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wYWdlc2hvdy1wYWdlaGlkZS1vbi1iYWNr
LWNhY2hlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3BhZ2VzaG93LXBhZ2Vo
aWRlLW9uLWJhY2stY2FjaGVkLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPHA+VGVzdCBwYWdlc2hv
dy9wYWdlaGlkZSBldmVudCBiZWhhdmlvciB3aGVuIG5hdmlnYXRpbmcgYmFjayB0byBhbiBjYWNo
ZWQgcGFnZS48L3A+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zdXNwZW5kLXRpbWVycy5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvc3VzcGVuZC10aW1lcnMuaHRtbAppbmRleCAzYzg1ZjQ4MWU0MzY4
ZDRmMDMxMzYzZmQzOTIxNWM1NDk3NTFlOWQ4Li42ZWE4OTgxZjE0YWZjNjQ0NjZlMmQyYTg4ZjI3
NGY2NjVkNThkODM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zdXNwZW5k
LXRpbWVycy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3N1c3BlbmQtdGltZXJz
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBh
Z2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tG
b3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9hdXRvY29tcGxldGUtb2ZmLXdpdGgt
ZGVmYXVsdC12YWx1ZS1kb2VzLW5vdC1jbGVhci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9hdXRvY29tcGxldGUtb2ZmLXdpdGgtZGVmYXVsdC12YWx1ZS1kb2VzLW5vdC1jbGVhci5odG1s
CmluZGV4IGIzZmRkMmFlODVkYzNkYzU5MTA0MzIyZDAwODI0ZGEzZmE2YWY3MzUuLjQ1NTYwNzEy
OGZhOTQ0NGM4NzY3YjE5YjA3MDk3MWU3N2Y5NGU3NWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvYXV0b2NvbXBsZXRlLW9mZi13aXRoLWRlZmF1bHQtdmFsdWUtZG9lcy1ub3Qt
Y2xlYXIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2F1dG9jb21wbGV0ZS1vZmYt
d2l0aC1kZWZhdWx0LXZhbHVlLWRvZXMtbm90LWNsZWFyLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgog
PHNjcmlwdD4KIAogaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2lvcy9pbnB1dG1vZGUtbm9uZS13aXRoLWhhcmR3YXJlLWtleWJvYXJk
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lvcy9pbnB1dG1vZGUtbm9uZS13aXRoLWhh
cmR3YXJlLWtleWJvYXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBkZTA4YzdhMGZlMjFjNzNiNDU1Njhi
YjI0NzE5NTY2MDlhMDQ2NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvaW9zL2lucHV0bW9kZS1ub25lLXdpdGgtaGFyZHdhcmUta2V5Ym9hcmQuaHRtbApAQCAtMCww
ICsxLDU0IEBACis8IURPQ1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VG
bGV4aWJsZVZpZXdwb3J0PXRydWUgXSAtLT4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2
aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHVz
ZXItc2NhbGFibGU9bm8iPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvdWktaGVscGVy
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxkaXY+
PGlucHV0IGlkPSJpbnB1dC1rZXlib2FyZCIgaW5wdXRtb2RlPSJ0ZXh0Ij48L2Rpdj4KKzxkaXY+
PGlucHV0IGlkPSJpbnB1dC1ub2tleWJvYXJkIiBpbnB1dG1vZGU9Im5vbmUiPjwvZGl2PgorPHBy
ZSBpZD0iZGVzY3JpcHRpb24iPjwvcHJlPgorPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8c2Ny
aXB0PgoranNUZXN0SXNBc3luYyA9IHRydWU7CisKK2FzeW5jIGZ1bmN0aW9uIHJ1blRlc3QoKSB7
CisgICAgaW5wdXRXaXRoU3lzdGVtS2V5Ym9hcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aW5wdXQta2V5Ym9hcmQiKTsKKyAgICBpbnB1dFdpdGhvdXRTeXN0ZW1LZXlib2FyZCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dC1ub2tleWJvYXJkIik7CisKKyAgICBkZXNjcmlwdGlv
bigiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgdGhlIHN5c3RlbSBrZXlib2FyZCBpcyBub3Qgdmlz
aWJsZSB3aGVuIHRhcHBpbmcgb24gYW4gaW5wdXQgZmllbGQgd2l0aCBpbnB1dG1vZGU9bm9uZS4i
KTsKKworICAgIGRlYnVnKCJcbkFDVElWQVRFIGlucHV0IHdpdGggaW5wdXRtb2RlPXRleHQiKTsK
KyAgICBhd2FpdCBVSUhlbHBlci5hY3RpdmF0ZUVsZW1lbnRBbmRXYWl0Rm9ySW5wdXRTZXNzaW9u
KGlucHV0V2l0aFN5c3RlbUtleWJvYXJkKTsKKyAgICBzeXN0ZW1LZXlib2FyZFJlY3QgPSBhd2Fp
dCBVSUhlbHBlci5pbnB1dFZpZXdCb3VuZHMoKTsKKyAgICBzaG91bGRCZSgic3lzdGVtS2V5Ym9h
cmRSZWN0LmhlaWdodCA+IDAiLCAidHJ1ZSIpOworICAgIGF3YWl0IFVJSGVscGVyLmVudGVyVGV4
dCgiVGV4dCIpOworICAgIHNob3VsZEJlKCJpbnB1dFdpdGhTeXN0ZW1LZXlib2FyZC52YWx1ZSIs
ICInVGV4dCciKTsKKworICAgIGRlYnVnKCJcbkFDVElWQVRFIGlucHV0IHdpdGggaW5wdXRtb2Rl
PW5vbmUiKTsKKyAgICBhd2FpdCBVSUhlbHBlci5hY3RpdmF0ZUVsZW1lbnQoaW5wdXRXaXRob3V0
U3lzdGVtS2V5Ym9hcmQpOworICAgIGF3YWl0IFVJSGVscGVyLndhaXRGb3JLZXlib2FyZFRvSGlk
ZSgpOworICAgIHRlc3RQYXNzZWQoIlN1Y2Nlc3NmdWxseSBkaXNtaXNzZWQga2V5Ym9hcmQiKTsK
KworICAgIGRlYnVnKCJcblRFU1QgZW50ZXIgdGV4dCBpbiBpbnB1dCB3aXRoIGlucHV0bW9kZT1u
b25lIik7CisgICAgYXdhaXQgVUlIZWxwZXIuZW50ZXJUZXh0KCJOb25lIik7CisgICAgc2hvdWxk
QmUoImlucHV0V2l0aG91dFN5c3RlbUtleWJvYXJkLnZhbHVlIiwgIidOb25lJyIpOworCisgICAg
ZGVidWcoIlxuVEVTVCBzZWxlY3Rpb24gaW4gaW5wdXQgd2l0aCBpbnB1dG1vZGU9bm9uZSIpOwor
ICAgIGlucHV0V2l0aG91dFN5c3RlbUtleWJvYXJkLnNlbGVjdCgpOworCisgICAgc2VsZWN0aW9u
UmVjdHMgPSBbXTsKKyAgICB3aGlsZSAoIXNlbGVjdGlvblJlY3RzLmxlbmd0aCkKKyAgICAgICAg
c2VsZWN0aW9uUmVjdHMgPSBhd2FpdCBVSUhlbHBlci5nZXRVSVNlbGVjdGlvblZpZXdSZWN0cygp
OworCisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzLmxlbmd0aCIsICIxIik7CisgICAgc2hv
dWxkQmUoInNlbGVjdGlvblJlY3RzWzBdLmxlZnQiLCAiMTYiKTsKKyAgICBzaG91bGRCZSgic2Vs
ZWN0aW9uUmVjdHNbMF0udG9wIiwgIjM4Iik7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3Rz
WzBdLndpZHRoIiwgIjI3Iik7CisgICAgc2hvdWxkQmUoInNlbGVjdGlvblJlY3RzWzBdLmhlaWdo
dCIsICIxNSIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9mcmFtZS1jcmFzaC13
aXRoLXBhZ2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2ZyYW1lLWNyYXNo
LXdpdGgtcGFnZS1jYWNoZS5odG1sCmluZGV4IGEyOTljZjg1M2YzNzU0YzIzNzg2ZGE3NjQwOTYz
MDE0NTcwMjViOGEuLjZkZjBlNDJlMWEzMjA2YmQ3Yzg3ZDhkYWQ2ODg2NWZjMzUzZDQzNmQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2ZyYW1lLWNyYXNoLXdpdGgtcGFnZS1j
YWNoZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2ZyYW1lLWNyYXNoLXdpdGgt
cGFnZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
bmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxodG1sPgogPHNjcmlwdD4KIHdpbmRv
dy5maW5pc2ggPSBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1l
cy9mcmFtZS11bmxvYWQtbmF2aWdhdGUtYW5kLXNldFRpbWVvdXQtYXNzZXJ0LWZhaWwuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2ZyYW1lLXVubG9hZC1uYXZpZ2F0ZS1hbmQtc2V0VGlt
ZW91dC1hc3NlcnQtZmFpbC5odG1sCmluZGV4IDM4MzJkNjdkZjUzN2ExYzViYmE3Njg4YWNjNTQz
ZmU5OTk2NTRiODIuLmRlN2ZmZWQ4NTUyMDRmZDA3MTNhMDUyNmM5OTdlYzQ5ZGM5NzAzMmYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL2ZyYW1lLXVubG9hZC1uYXZpZ2F0ZS1h
bmQtc2V0VGltZW91dC1hc3NlcnQtZmFpbC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZnJh
bWVzL2ZyYW1lLXVubG9hZC1uYXZpZ2F0ZS1hbmQtc2V0VGltZW91dC1hc3NlcnQtZmFpbC5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2Fj
aGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3BhZ2UtaGlkZS1kb2N1bWVudC1vcGVuLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9wYWdlLWhpZGUtZG9jdW1lbnQtb3Blbi5odG1s
CmluZGV4IDk1YzE0YWIzYTVlMGFkZDEyYmQwMjQ0ZTNhMWU1ZWRiYTdkNjIzMmYuLmM1MDQ5MmFh
Mjc2MzEyZjc3YjgzZTQ3NmE0ZTFlYzY5NzFmNmRkN2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZnJhbWVzL3BhZ2UtaGlkZS1kb2N1bWVudC1vcGVuLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9mcmFtZXMvcGFnZS1oaWRlLWRvY3VtZW50LW9wZW4uaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4K
KzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0g
LS0+CiA8IURPQ1RZUEUgaHRtbD4KIFBhc3NlcyBpZiBpdCBkb2VzIG5vdCBjcmFzaC4KIDxzY3Jp
cHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZyYW1lcy9yZXN0b3JpbmctcGFnZS1j
YWNoZS1zaG91bGQtbm90LXJ1bi1zY3JpcHRzLXZpYS1zdHlsZS11cGRhdGUuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc3RvcmluZy1wYWdlLWNhY2hlLXNob3VsZC1ub3QtcnVuLXNj
cmlwdHMtdmlhLXN0eWxlLXVwZGF0ZS5odG1sCmluZGV4IGRiMWQxNGU4NmQxZjJmZjgxNjFlYWVl
MWFjOWQ4ZjA2MjdmYjBjYmEuLmJkMDNlOTMzMGU0OTE1MDRhNTU4MjMzY2FjZTZjMjUwNTlmN2I3
YmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc3RvcmluZy1wYWdlLWNh
Y2hlLXNob3VsZC1ub3QtcnVuLXNjcmlwdHMtdmlhLXN0eWxlLXVwZGF0ZS5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc3RvcmluZy1wYWdlLWNhY2hlLXNob3VsZC1ub3QtcnVu
LXNjcmlwdHMtdmlhLXN0eWxlLXVwZGF0ZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQ
RSBodG1sPgogPGh0bWw+CiA8Ym9keT4KQEAgLTEwLDcgKzEwLDcgQEAKICAgICB0ZXN0UnVubmVy
LmR1bXBBc1RleHQoKTsKICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKICAgICB0ZXN0
UnVubmVyLnNldENhbk9wZW5XaW5kb3dzKCk7Ci0gICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldFBh
Z2VDYWNoZVN1cHBvcnRzUGx1Z2lucyh0cnVlKTsKKyAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0
QmFja0ZvcndhcmRDYWNoZVN1cHBvcnRzUGx1Z2lucyh0cnVlKTsKIH0KIAogbGV0IG5ld1dpbmRv
dzsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVzL3Jlc3RvcmluZy1wYWdlLWNh
Y2hlLXNob3VsZC1ub3QtcnVuLXNjcmlwdHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZnJhbWVz
L3Jlc3RvcmluZy1wYWdlLWNhY2hlLXNob3VsZC1ub3QtcnVuLXNjcmlwdHMuaHRtbAppbmRleCBj
MTQ1YjUwOTViMDE4ODgwMmMwNTRiMDFmZjhjMDNkM2IwZmJkOWU1Li42NzI1ZTY0ZDA3Zjg4NzFi
NjNmY2Q1ODRmZTZkZGUxZTI3YWIxMTRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zy
YW1lcy9yZXN0b3JpbmctcGFnZS1jYWNoZS1zaG91bGQtbm90LXJ1bi1zY3JpcHRzLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9mcmFtZXMvcmVzdG9yaW5nLXBhZ2UtY2FjaGUtc2hvdWxkLW5v
dC1ydW4tc2NyaXB0cy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0
bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGFybmVzcy9wYWdlLWNh
Y2hlLWNyYXNoLW9uLWRhdGEtdXJscy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oYXJuZXNzL3Bh
Z2UtY2FjaGUtY3Jhc2gtb24tZGF0YS11cmxzLmh0bWwKaW5kZXggMTE4N2M2MGU1M2Y4ZGFkZjg0
YTBhMzM1NmU1MTZiNzMwMWM3MzA4Ni4uMjE5MWVlZDQ4NDkxOGY4ZDViY2UwYjcxMDY4ZWU5MmM1
OGMxZjg0NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oYXJuZXNzL3BhZ2UtY2FjaGUt
Y3Jhc2gtb24tZGF0YS11cmxzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oYXJuZXNzL3Bh
Z2UtY2FjaGUtY3Jhc2gtb24tZGF0YS11cmxzLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPGh0bWw+
CiA8c2NyaXB0Pgogd2luZG93LmZpbmlzaCA9IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvaGFybmVzcy91c2UtcGFnZS1jYWNoZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9oYXJuZXNzL3VzZS1wYWdlLWNhY2hlLmh0bWwKaW5kZXggYTAyM2JjYTkxZDNmMTI1YmZlNTBk
NjA1MzgxYTE1NGMxZjY4YWI5NS4uNjA1NDUyMjMyZTcwZTQxNTc4NWVhODU1ZWQyYzc3MzRiNmQw
YmUzNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oYXJuZXNzL3VzZS1wYWdlLWNhY2hl
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oYXJuZXNzL3VzZS1wYWdlLWNhY2hlLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNo
ZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJk
Q2FjaGU9dHJ1ZSBdIC0tPgogPGh0bWw+CiA8c2NyaXB0Pgogd2luZG93LmZpbmlzaCA9IGZ1bmN0
aW9uKCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9iYWNrLWZyb20tcGFn
ZS13aXRoLWZvY3VzZWQtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvYmFj
ay1mcm9tLXBhZ2Utd2l0aC1mb2N1c2VkLWlmcmFtZS5odG1sCmluZGV4IDZkM2Y4NGIzNWQ1YzFk
OTM2YzdjMWIzOGQxNTVlZTNhZmIxMDllOGIuLmU4MGU2MmYyYTgyZmU1NGEwYTYyZWY3Mzk4NGEx
NDgxNzFkNTYyZmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9iYWNrLWZy
b20tcGFnZS13aXRoLWZvY3VzZWQtaWZyYW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9o
aXN0b3J5L2JhY2stZnJvbS1wYWdlLXdpdGgtZm9jdXNlZC1pZnJhbWUuaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAt
LT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVl
IF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2hpc3RvcnkvZ28tYmFjay10by1pZnJhbWUtd2l0aC1wbHVnaW4uaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9nby1iYWNrLXRvLWlmcmFtZS13aXRoLXBsdWdpbi5o
dG1sCmluZGV4IDNjNDRhZDUyNjVmZTJjNjgwNjkwNTdmNjVkMjYwMTRmZWIyMjQyYWYuLjVkZGFi
ODNkYmIzYjcxZDY3Njk3NmM1Nzg4NWMzNDU5ZDk1ZjVlMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS9nby1iYWNrLXRvLWlmcmFtZS13aXRoLXBsdWdpbi5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9nby1iYWNrLXRvLWlmcmFtZS13aXRoLXBsdWdpbi5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdl
Q2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9y
d2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L2dvLWJhY2stdG8tb2JqZWN0LXN1
YmZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvZ28tYmFjay10by1vYmplY3Qt
c3ViZnJhbWUuaHRtbAppbmRleCBmMDhkMDU2MWQwYzRmNWFlMTdjYzgxZTM2MjI2ODQyMjYzNWM2
MGRiLi5hZjA4MzViNTU0MWMxMjZlNjU0OWJhMDZlMWY2YjdjYjE3Y2M5Y2EwIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvZ28tYmFjay10by1vYmplY3Qtc3ViZnJhbWUuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvZ28tYmFjay10by1vYmplY3Qtc3ViZnJh
bWUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxl
UGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFj
a0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvaGlzdG9yeS1iYWNrLXdoaWxl
LXBkZi1pbi1wYWdlY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9oaXN0b3J5
LWJhY2std2hpbGUtcGRmLWluLXBhZ2VjYWNoZS5odG1sCmluZGV4IDFiNTgxZmE5MWQ0NWRlNGU2
YmY2ZjlmYjFhNzlmMjkzNjQ1NTlkNmQuLmNmYmMwNjc1YmJiMDNhZWY3YjhkMmM2MDM5ODgyY2Uz
MTJiNjUzMzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9oaXN0b3J5LWJh
Y2std2hpbGUtcGRmLWluLXBhZ2VjYWNoZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlz
dG9yeS9oaXN0b3J5LWJhY2std2hpbGUtcGRmLWluLXBhZ2VjYWNoZS5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0t
PgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUg
XSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLU1lc3NhZ2VQb3J0LXBlbmRpbmctbWVzc2Fn
ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtTWVzc2FnZVBvcnQt
cGVuZGluZy1tZXNzYWdlLmh0bWwKaW5kZXggY2VjZjYwNDBiYWMxZDM5OGFhYjI0MjZlMDJjOGRi
MDRlZTM2NTYxZC4uYTA4NjU4ZTU1YWUzNjQxMGQ4ZWUzMmUxY2Q5NTAxNmMwMzNlY2VjZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtTWVzc2FnZVBvcnQt
cGVuZGluZy1tZXNzYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2Ut
Y2FjaGUtTWVzc2FnZVBvcnQtcGVuZGluZy1tZXNzYWdlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgog
PCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtYWZ0ZXItd2luZG93LW9wZW4uaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWFmdGVyLXdpbmRvdy1vcGVuLmh0bWwKaW5kZXgg
ZmNkNWRlNDBkMWZhYjNkNTBkMDZkMGVkMzQzODUyYWE0ZDVhNjhmOS4uNDg5ZmY4NGMzMTMyNGY5
Y2NlZWFmNmE5YTcyNzBiMzcxNjM0YmE4NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9o
aXN0b3J5L3BhZ2UtY2FjaGUtYWZ0ZXItd2luZG93LW9wZW4uaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1hZnRlci13aW5kb3ctb3Blbi5odG1sCkBAIC0xLDQg
KzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBd
IC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRy
dWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWJhY2stbmF2aWdhdGlvbi1jcmFzaC5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtYmFjay1uYXZpZ2F0aW9u
LWNyYXNoLmh0bWwKaW5kZXggMDJmODE3MDhiOWYwYjMyZjQ4NzFmMGE3NzZhYWY2ZDJkZGE0YjMw
Yi4uYzc4ZDUzNmJmN2E2YmUxNTVjOTc4YTJlMzBhMjY2OTkxYjdkNzRiZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtYmFjay1uYXZpZ2F0aW9uLWNyYXNo
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtYmFjay1uYXZp
Z2F0aW9uLWNyYXNoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRt
bD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2Fj
aGUtY2xlYXJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2Ut
Y2FjaGUtY2xlYXJpbmctZXhwZWN0ZWQudHh0CmluZGV4IDYyNzlkYTkyNmU4NGQyMjM4NGIyMWQ5
MmJkM2IzMmFiZTE0YjkzMjguLjhlNzkyNzFiZWUzMjcxZDBkN2VmNmM5M2IyZDY3MTMyNTIyYmI3
NGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWNsZWFy
aW5nLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNo
ZS1jbGVhcmluZy1leHBlY3RlZC50eHQKQEAgLTYsOSArNiw5IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFCiBwYWdlc2hvdyAtIG5vdCBmcm9tIGNhY2hlCiBwYWdlaGlkZSAtIGVudGVyaW5nIGNh
Y2hlCiBwYWdlc2hvdyAtIGZyb20gY2FjaGUKLVBBU1Mgd2luZG93LmludGVybmFscy5wYWdlQ2Fj
aGVTaXplKCkgPiAwIGlzIHRydWUKLXdpbmRvdy5pbnRlcm5hbHMuY2xlYXJQYWdlQ2FjaGUoKQot
UEFTUyB3aW5kb3cuaW50ZXJuYWxzLnBhZ2VDYWNoZVNpemUoKSBpcyAwCitQQVNTIHdpbmRvdy5p
bnRlcm5hbHMuYmFja0ZvcndhcmRDYWNoZVNpemUoKSA+IDAgaXMgdHJ1ZQord2luZG93LmludGVy
bmFscy5jbGVhckJhY2tGb3J3YXJkQ2FjaGUoKQorUEFTUyB3aW5kb3cuaW50ZXJuYWxzLmJhY2tG
b3J3YXJkQ2FjaGVTaXplKCkgaXMgMAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFn
ZS1jYWNoZS1jbGVhcmluZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2Fj
aGUtY2xlYXJpbmcuaHRtbAppbmRleCA4YWE5NzJhMmM5NTlmZjUxMTAzNTg3YmM5MjI0YTI2Y2U2
OGVlODVjLi5kZjhiNDdiYWUyY2IwOWU3ZWQyNjY4MzFhNDU0MzhiYThiYzQyMTEzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1jbGVhcmluZy5odG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWNsZWFyaW5nLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10
cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2Fj
aGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxib2R5PgpAQCAtMTMsOSAr
MTMsOSBAQAogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VzaG93IiwgZnVuY3Rpb24oZXZl
bnQpIHsKICAgICBkZWJ1ZygicGFnZXNob3cgLSAiICsgKGV2ZW50LnBlcnNpc3RlZCA/ICIiIDog
Im5vdCAiKSArICJmcm9tIGNhY2hlIik7CiAgICAgaWYgKGV2ZW50LnBlcnNpc3RlZCkgewotICAg
ICAgICBzaG91bGRCZVRydWUoIndpbmRvdy5pbnRlcm5hbHMucGFnZUNhY2hlU2l6ZSgpID4gMCIp
OwotICAgICAgICBldmFsQW5kTG9nKCJ3aW5kb3cuaW50ZXJuYWxzLmNsZWFyUGFnZUNhY2hlKCki
KTsKLSAgICAgICAgc2hvdWxkQmUoIndpbmRvdy5pbnRlcm5hbHMucGFnZUNhY2hlU2l6ZSgpIiwg
IjAiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJ3aW5kb3cuaW50ZXJuYWxzLmJhY2tGb3J3YXJk
Q2FjaGVTaXplKCkgPiAwIik7CisgICAgICAgIGV2YWxBbmRMb2coIndpbmRvdy5pbnRlcm5hbHMu
Y2xlYXJCYWNrRm9yd2FyZENhY2hlKCkiKTsKKyAgICAgICAgc2hvdWxkQmUoIndpbmRvdy5pbnRl
cm5hbHMuYmFja0ZvcndhcmRDYWNoZVNpemUoKSIsICIwIik7CiAgICAgICAgIGZpbmlzaEpTVGVz
dCgpOwogICAgIH0KIH0sIGZhbHNlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlz
dG9yeS9wYWdlLWNhY2hlLWNsb3NlZC1hdWRpb2NvbnRleHQuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvaGlzdG9yeS9wYWdlLWNhY2hlLWNsb3NlZC1hdWRpb2NvbnRleHQuaHRtbAppbmRleCBmZmU1
YjI5OWE1NmM4MmMyMDZlY2U4MzUzNmUyM2E0MmZkYTdjMGJjLi5hYWFlNTEwZDU3MTJmMWNkYzgz
ZDUwMzgyMGNkOGFlMjk0ZWZjZDdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3Rv
cnkvcGFnZS1jYWNoZS1jbG9zZWQtYXVkaW9jb250ZXh0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtY2xvc2VkLWF1ZGlvY29udGV4dC5odG1sCkBAIC0xLDQg
KzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBd
IC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRy
dWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWNyZWF0ZUltYWdlQml0bWFwLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1jcmVhdGVJbWFnZUJpdG1hcC5o
dG1sCmluZGV4IDk5YjY1MTM2OTZmZDc2OWRhNzg1ZTdjYzNjODU0ZDI4MWMxNTEzZWQuLjY5NmZk
ZGM2N2ZjOTk2YjhlOTU2MTI4ZTcwMTA1NTZlZjVkZDZlMjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWNyZWF0ZUltYWdlQml0bWFwLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtY3JlYXRlSW1hZ2VCaXRtYXAuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNh
Y2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zvcndh
cmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1jcmVhdGVPYmplY3RV
UkwtdXNpbmctb3Blbi1wYW5lbC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2Ut
Y2FjaGUtY3JlYXRlT2JqZWN0VVJMLXVzaW5nLW9wZW4tcGFuZWwuaHRtbAppbmRleCBiZmNjMmU5
ZGE4ZjkzNmUyZmZkNjVjNmM1MDM2ODFiZDVhMDRiZjgxLi5mMGZkNmViNzZkNzM1NTY0YTZhMjQz
ZDY2ZWQzOWQyY2Y4ZDkxZjA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3Rvcnkv
cGFnZS1jYWNoZS1jcmVhdGVPYmplY3RVUkwtdXNpbmctb3Blbi1wYW5lbC5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWNyZWF0ZU9iamVjdFVSTC11c2luZy1v
cGVuLXBhbmVsLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4K
IDxib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUt
Y3JlYXRlT2JqZWN0VVJMLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNo
ZS1jcmVhdGVPYmplY3RVUkwuaHRtbAppbmRleCBhNjI4YzgyYWMzMDgzN2ExODFiNmEyMDYxMjNk
MGUxMTQ2YTQ0YTZmLi41NTZjMTk1MGMxYTg5ZGM4YTFlNmZkMmZkM2JiYWM5NjcyZjM4MTZhIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1jcmVhdGVPYmpl
Y3RVUkwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1jcmVh
dGVPYmplY3RVUkwuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1s
PgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNo
ZS1kZXN0cm95LWRvY3VtZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1j
YWNoZS1kZXN0cm95LWRvY3VtZW50Lmh0bWwKaW5kZXggNmQxZDdiZjczMjhhMWM2YzEwNGE0MDI5
MjYzZTU0MTJjMmE4Y2IzNS4uOTlkNWU1MzEyMjU5NzNmNTYwZDE4N2Y0ODUyOTNlZDZkMDNmODIz
ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtZGVzdHJv
eS1kb2N1bWVudC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hl
LWRlc3Ryb3ktZG9jdW1lbnQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtZWxlbWVudC1zdGF0ZS1mb2N1
c2VkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1lbGVtZW50LXN0
YXRlLWZvY3VzZWQuaHRtbAppbmRleCBmZGVmNWVmNjNjOWIzNTI0YTZhMDE3NDBhNTUwNjkzODc4
MGE4Y2I1Li5mY2Q5MWU1ZjU2YjFmZDhhZmY5NDE2YmZiZTI1ZWE0MTMyMGQwMzM0IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1lbGVtZW50LXN0YXRlLWZv
Y3VzZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1lbGVt
ZW50LXN0YXRlLWZvY3VzZWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4K
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFn
ZS1jYWNoZS1leGVjdXRlLXNjcmlwdC1kdXJpbmctcmVzdG9yZS5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtZXhlY3V0ZS1zY3JpcHQtZHVyaW5nLXJlc3RvcmUuaHRt
bAppbmRleCAyZTM0ZjQ5NjJjOTRmYzBlZTZkODk2NzBmYTZlNWUyM2ZhN2QzODRjLi5jNDdjNzRl
YjZkZDU1MTRjZmZkMzNjYTYwZDA5MzQ1ZWNkZDI4NmU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1leGVjdXRlLXNjcmlwdC1kdXJpbmctcmVzdG9yZS5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWV4ZWN1dGUtc2Ny
aXB0LWR1cmluZy1yZXN0b3JlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+
CiA8aHRtbD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3Bh
Z2UtY2FjaGUtZ2VvbG9jYXRpb24tYWN0aXZlLW9uZXNob3QuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvaGlzdG9yeS9wYWdlLWNhY2hlLWdlb2xvY2F0aW9uLWFjdGl2ZS1vbmVzaG90Lmh0bWwKaW5k
ZXggMGNlNDgwMzhkNWVhOTgwNzY0YTA4YWNkOTU2MDY2YzdhZjllNGM2Mi4uOGRmOTgwOGUzNDA3
NWU2OGJmNWIzNGI5Nzg0ZWU4MWJhNjAyMjQxMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9oaXN0b3J5L3BhZ2UtY2FjaGUtZ2VvbG9jYXRpb24tYWN0aXZlLW9uZXNob3QuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1nZW9sb2NhdGlvbi1hY3RpdmUt
b25lc2hvdC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
bmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFi
bGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8
Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWdl
b2xvY2F0aW9uLWFjdGl2ZS13YXRjaGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3Rvcnkv
cGFnZS1jYWNoZS1nZW9sb2NhdGlvbi1hY3RpdmUtd2F0Y2hlci5odG1sCmluZGV4IDk0YzA3NzJl
NGY4MDQ5ZTM1YzdmMjcwOTFiZDI2Y2NmOTYxMmI4ZTAuLjMwOTA1YzY0NmFmNjA5N2JmMjYxZGYx
NDk3YWQ4MGViNmQ4OTUwNDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9w
YWdlLWNhY2hlLWdlb2xvY2F0aW9uLWFjdGl2ZS13YXRjaGVyLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtZ2VvbG9jYXRpb24tYWN0aXZlLXdhdGNoZXIuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNh
Y2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zvcndh
cmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1nZW9sb2NhdGlvbi5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtZ2VvbG9jYXRpb24uaHRt
bAppbmRleCA0ODQ2YWI2NDc4ZjU0MmRmNmY3Nzc4YjQ0NWI5ODYzMjQzYTBhZDI0Li4zZDA2NDE2
NDY4ZmM1MTFmZWE2MTAyODExOGExNDBiZmM5M2U3ZmIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1nZW9sb2NhdGlvbi5odG1sCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWdlb2xvY2F0aW9uLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+
Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBd
IC0tPgogPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNh
Y2hlLWlmcmFtZS1qcy11cmwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNh
Y2hlLWlmcmFtZS1qcy11cmwuaHRtbAppbmRleCBjY2M2YTUzOWQwMTA3Y2Y1MGU1NjdiZjhkMzRm
MTAyYzljNWEzNDY1Li40NWVjM2E2YzgzNmQwYWMxY2NmZThiMGFjZTE2MGNlMjgyYjUxNzhlIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1pZnJhbWUtanMt
dXJsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtaWZyYW1l
LWpzLXVybC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
bmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFi
bGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8
aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWlu
ZGV4ZWQtY2xvc2VkLWRiLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNo
ZS1pbmRleGVkLWNsb3NlZC1kYi5odG1sCmluZGV4IGNjMDk3NjE1ZmNjMDFkMjJhMmIzNjE2YmQx
ODZjNDA0Yzk4Nzg1MTMuLmQwNzQxMjBhNDdhMjVjNWUzODkxNjBmM2IxNzU1MWE5MzFiNzQ4Y2Ig
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWluZGV4ZWQt
Y2xvc2VkLWRiLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUt
aW5kZXhlZC1jbG9zZWQtZGIuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4K
IDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFn
ZS1jYWNoZS1pbmRleGVkLW9wZW5lZC1kYi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5
L3BhZ2UtY2FjaGUtaW5kZXhlZC1vcGVuZWQtZGIuaHRtbAppbmRleCBjYWE3N2NiZmE5Njg3NWFj
NWRmZjlmMmFiY2IzZTkwNjdhMGQ2NDU2Li43ZDZiZGIyYzBhZjdjY2NjMDcxZjQzM2E3NGU0YzE2
MWE4YmIwNGU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNo
ZS1pbmRleGVkLW9wZW5lZC1kYi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9w
YWdlLWNhY2hlLWluZGV4ZWQtb3BlbmVkLWRiLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NU
WVBFIGh0bWw+CiA8aHRtbD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9o
aXN0b3J5L3BhZ2UtY2FjaGUtbWVkaWEtc291cmNlLWNsb3NlZC0yLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1tZWRpYS1zb3VyY2UtY2xvc2VkLTIuaHRtbAppbmRl
eCBkOGUzYzRmMzAzNWIzZWE1MTQ4MzE2ZmE0YWExNGUwNmEzZTM2ZjM4Li5kNTE2MWNjYTE3NTUz
YTE0YTcyYjhkYjI0MGNiNmE4YTNjNjE2YTdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2hpc3RvcnkvcGFnZS1jYWNoZS1tZWRpYS1zb3VyY2UtY2xvc2VkLTIuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1tZWRpYS1zb3VyY2UtY2xvc2VkLTIuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNh
Y2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zvcndh
cmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1tZWRpYS1zb3VyY2Ut
Y2xvc2VkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1tZWRpYS1z
b3VyY2UtY2xvc2VkLmh0bWwKaW5kZXggODE4ZjAyNjUyZDgyOGMzOTNiNDlmMDFiNzA2NmUyZjMw
YjkyYmU2Ny4uMjhhN2MxZjUxYTUwMjg0MWJlOWYxNDExYzg5MzFhYjJhZmUwMGY1NiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtbWVkaWEtc291cmNlLWNs
b3NlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLW1lZGlh
LXNvdXJjZS1jbG9zZWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxo
dG1sPgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1j
YWNoZS1tZWRpYS1zb3VyY2Utb3BlbmVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3Rvcnkv
cGFnZS1jYWNoZS1tZWRpYS1zb3VyY2Utb3BlbmVkLmh0bWwKaW5kZXggOTU1YWY5NWIyZjE5MTM2
OTk2MTBlYTI5NmMyZGZhMTljYWUxOGZlMS4uMGI1ZjZhYTU2ZmE3ZWQxZmY5YThmMDI3MTRkZjcz
ZjNkYTgxMzRhNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2Fj
aGUtbWVkaWEtc291cmNlLW9wZW5lZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9y
eS9wYWdlLWNhY2hlLW1lZGlhLXNvdXJjZS1vcGVuZWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8
IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1uYXZpZ2F0ZS1kdXJpbmctcmVzdG9yZS5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtbmF2aWdhdGUtZHVyaW5nLXJlc3RvcmUu
aHRtbAppbmRleCA5Nzk2N2FlMzhhOWRmNzMyZWZjN2MxZmVkOGRiYjdmNGEyNWNiNWMwLi5mNDg4
ZTQ1YTMwYWU3ZjViYjViYWRlNDE3MmNlYjM4ZGEwYWYxZGRhIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1uYXZpZ2F0ZS1kdXJpbmctcmVzdG9yZS5odG1s
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLW5hdmlnYXRlLWR1cmlu
Zy1yZXN0b3JlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4K
IDxib2R5PgpAQCAtMTMsNyArMTMsNyBAQAogICAgIHRlc3RSdW5uZXIuY2xlYXJCYWNrRm9yd2Fy
ZExpc3QoKTsKICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKICAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKLSAgICBpbnRlcm5hbHMuY2xlYXJQYWdlQ2FjaGUoKTsKKyAgICBpbnRl
cm5hbHMuY2xlYXJCYWNrRm9yd2FyZENhY2hlKCk7CiB9CiBzZXNzaW9uU3RvcmFnZS50ZXN0U3Rh
Z2UgPSAnaW5pdGlhbCc7CiBsZXQgcGVyc2lzdGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1ub3RpZmljYXRpb24tbm9uLXN1c3BlbmRh
YmxlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1ub3RpZmljYXRp
b24tbm9uLXN1c3BlbmRhYmxlLmh0bWwKaW5kZXggYTYyZTk3YjRjOGNjMmRhOTlhM2JmOGY3ZGNk
OGRmZDQ0NWExODVmYS4uNTNkYmFjYjRjNjdjMjgyOTYzMzdlM2MwNGQ1MzZlZTE5NWY0Yjg4MyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtbm90aWZpY2F0
aW9uLW5vbi1zdXNwZW5kYWJsZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9w
YWdlLWNhY2hlLW5vdGlmaWNhdGlvbi1ub24tc3VzcGVuZGFibGUuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4K
KzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0g
LS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1ub3RpZmljYXRpb24tc3VzcGVuZGFibGUuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLW5vdGlmaWNhdGlvbi1zdXNw
ZW5kYWJsZS5odG1sCmluZGV4IDUxY2JhNWQ0YTAxNTBmMzhkNWQyOGNiZjBkZWYxZjA1MjA2OTAz
ZTYuLjA0YjdiZDZjZjI4YjczMGE0N2ZhYTE2ZGZiYWE2MWRjNzVmYjI3YWMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLW5vdGlmaWNhdGlvbi1zdXNwZW5k
YWJsZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLW5vdGlm
aWNhdGlvbi1zdXNwZW5kYWJsZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1s
PgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9w
YWdlLWNhY2hlLXJlbW92ZWQtc291cmNlLWJ1ZmZlci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9o
aXN0b3J5L3BhZ2UtY2FjaGUtcmVtb3ZlZC1zb3VyY2UtYnVmZmVyLmh0bWwKaW5kZXggMGUyOGFj
ZjU0YTQ5YjYyYWI2ZGIxOGI1ODFiZjdhN2FlNmVjNzQ4Yy4uYmExZGM3NDkzNzI1ODllMzJlNTVk
MWI5MDYwN2JmNjVlZGQzYmJlNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5
L3BhZ2UtY2FjaGUtcmVtb3ZlZC1zb3VyY2UtYnVmZmVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtcmVtb3ZlZC1zb3VyY2UtYnVmZmVyLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVl
IF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9
dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtcnVubmluZy1hdWRpb2NvbnRleHQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLXJ1bm5pbmctYXVkaW9j
b250ZXh0Lmh0bWwKaW5kZXggNzliNTI1NTZhZjBjNTMzNWEyYTA5MjJhYTRkNDgwMzcyZDBlNDM4
NS4uNDllYWNmZDUzOTljMzZiMjVkYmFjZTRjODViOWZmNDVkMzg2MTdjOCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtcnVubmluZy1hdWRpb2NvbnRleHQu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1ydW5uaW5nLWF1
ZGlvY29udGV4dC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
bmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+
CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hl
LXN1YmZyYW1lcy13aXRoLXByb3Zpc2lvbmFsLWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
aGlzdG9yeS9wYWdlLWNhY2hlLXN1YmZyYW1lcy13aXRoLXByb3Zpc2lvbmFsLWxvYWQuaHRtbApp
bmRleCBjYjk0NTFmYmQ5NmQzZGRhOTJjY2NlMmJiYzU2MGNkMDYwZGViNzZiLi4zNmQ1MGZkOTI0
NzVlOWQ3ZWI5ZWI3OGVkMjNiZjY3MGU3MDFkMGM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1zdWJmcmFtZXMtd2l0aC1wcm92aXNpb25hbC1sb2FkLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtc3ViZnJhbWVzLXdp
dGgtcHJvdmlzaW9uYWwtbG9hZC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1s
PgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9w
YWdlLWNhY2hlLXN1c3BlbmRlZC1hdWRpb2NvbnRleHQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
aGlzdG9yeS9wYWdlLWNhY2hlLXN1c3BlbmRlZC1hdWRpb2NvbnRleHQuaHRtbAppbmRleCAzMTU0
NDAxY2U5MzI0NjBlMWUwNmY2YjY0ZjhmNmY4YjEwZmY2ZGMzLi4xN2VjYzBhNDk2NDc2N2EwZWRj
MWYwNDVhMjRjYzQ0NmM5ODkyYTIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3Rv
cnkvcGFnZS1jYWNoZS1zdXNwZW5kZWQtYXVkaW9jb250ZXh0Lmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtc3VzcGVuZGVkLWF1ZGlvY29udGV4dC5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9
dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENh
Y2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLXdlYmRhdGFiYXNlLW5vLXRy
YW5zYWN0aW9uLWRiLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS13
ZWJkYXRhYmFzZS1uby10cmFuc2FjdGlvbi1kYi5odG1sCmluZGV4IGE0ZjU2NTU1MDE3MmExYzE3
NDgyN2IzNzg5NDYxZDQ3YmMzZmJhMzEuLjJkMTQxNDRiMWFiMDRjNTlkOTlkNWM1ZjFlNmNjYmQz
ZGMwNTQ2NzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hl
LXdlYmRhdGFiYXNlLW5vLXRyYW5zYWN0aW9uLWRiLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9oaXN0b3J5L3BhZ2UtY2FjaGUtd2ViZGF0YWJhc2Utbm8tdHJhbnNhY3Rpb24tZGIuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hl
PXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRD
YWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS13ZWJkYXRhYmFzZS1wZW5k
aW5nLXRyYW5zYWN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNo
ZS13ZWJkYXRhYmFzZS1wZW5kaW5nLXRyYW5zYWN0aW9uLmh0bWwKaW5kZXggMGVhYjIzZGZiODc4
ODI1NWM2YjdlNjdkMzliMTUwMjgwZTk0YTc2My4uNTU5NjNiY2ZmNDQ5Nzc4YTIyZTgxMDdkZjk3
OTJjMWYyMjI2YTE3MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2Ut
Y2FjaGUtd2ViZGF0YWJhc2UtcGVuZGluZy10cmFuc2FjdGlvbi5odG1sCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLXdlYmRhdGFiYXNlLXBlbmRpbmctdHJhbnNhY3Rp
b24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxl
UGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFj
a0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS13aXRoLW9w
ZW5lci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtd2l0aC1vcGVu
ZXIuaHRtbAppbmRleCBmOGU0MGU0NmZiZjFlZDI3ODc4ZmM3ZmVmZDQwNDY5NjZhM2NhNzQzLi5h
MmZiM2JjY2FkNzc1MWVjMDk4Y2U3ZDQyOTkxNTNlY2Y0YTUyZWU3IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS13aXRoLW9wZW5lci5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLXdpdGgtb3BlbmVyLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVl
IF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9
dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2VoaWRlLXJlbW92ZS1pZnJhbWUtY3Jhc2guaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9wYWdlaGlkZS1yZW1vdmUtaWZyYW1lLWNyYXNo
Lmh0bWwKaW5kZXggNWNjNTE0M2ZjZmUwZjZlNGJlOTJmMDUzMWY3MjkyMWQzYzllOGYwNi4uODA4
NjZkMWYwM2E3OGU2M2ZhYmM5YWE0M2RhOWUzOGFmZDhmZGFiMiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9oaXN0b3J5L3BhZ2VoaWRlLXJlbW92ZS1pZnJhbWUtY3Jhc2guaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcGFnZWhpZGUtcmVtb3ZlLWlmcmFtZS1jcmFzaC5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdl
Q2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9y
d2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9yZXNvdXJjZXMvcGFnZS1jYWNoZS13
aW5kb3ctd2l0aC1pZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9yZXNvdXJj
ZXMvcGFnZS1jYWNoZS13aW5kb3ctd2l0aC1pZnJhbWUuaHRtbAppbmRleCBmZDYyYmQzODI4NjY2
YTg3NmIwZGVlMWNiNGE1ZDMyMmFkYTc3N2ZiLi40OTQ4MzViOGJkNjRiMjFhOWQ2ZDE2MGIzMjc5
MWExZWYzY2Y4MmIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcmVzb3Vy
Y2VzL3BhZ2UtY2FjaGUtd2luZG93LXdpdGgtaWZyYW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9oaXN0b3J5L3Jlc291cmNlcy9wYWdlLWNhY2hlLXdpbmRvdy13aXRoLWlmcmFtZS5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2Fj
aGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9yZXNvdXJjZXMvcGFnZS1jYWNoZS13aW5k
b3ctd2l0aC1vcGVuZXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS9yZXNvdXJjZXMv
cGFnZS1jYWNoZS13aW5kb3ctd2l0aC1vcGVuZXIuaHRtbAppbmRleCBiYTYzMDExZjEwMDA0NzA0
Y2I1YzNmMTZlNGUyODc4NzE5YjA3NmJiLi4zY2FmMzZlMGUxZjNjMWUyYzA2ZGYxZGJiZmIyODJh
NTU3MjdmY2M1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2hpc3RvcnkvcmVzb3VyY2Vz
L3BhZ2UtY2FjaGUtd2luZG93LXdpdGgtb3BlbmVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9oaXN0b3J5L3Jlc291cmNlcy9wYWdlLWNhY2hlLXdpbmRvdy13aXRoLW9wZW5lci5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9
dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENh
Y2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvaGlzdG9yeS90aW1lZC1yZWZyZXNoLWluLWNhY2hlZC1mcmFt
ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3RpbWVkLXJlZnJlc2gtaW4tY2FjaGVk
LWZyYW1lLmh0bWwKaW5kZXggMjQyODAxNmNhNjZjOTA2N2EzMjAxMjE3ZTZjNGY3ZjBiMjg0MTk0
Ny4uMDMzNDFhYzcwNTczZjBjZjkwNDc0YTZhNjAxYTg1NTY0MzVlODY3NiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3RpbWVkLXJlZnJlc2gtaW4tY2FjaGVkLWZyYW1lLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9oaXN0b3J5L3RpbWVkLXJlZnJlc2gtaW4tY2FjaGVk
LWZyYW1lLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVu
YWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJs
ZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPGJvZHkgb25sb2FkPSJyZWRpcmVjdCgpIj4K
IDwhLS0gTmVlZHMgdG8gdGFrZSB0d28gc2Vjb25kcywgYmVjYXVzZSBhIGZhc3RlciByZWZyZXNo
IHdvdWxkIHJlc3VsdCBpbiBub3QgY3JlYXRpbmcgYSBiL2YgaXRlbSBmb3IgdGhlIG5hdmlnYXRp
b24gLS0+CiA8aWZyYW1lIHNyYz0nZGF0YTp0ZXh0L2h0bWwsPG1ldGEgaHR0cC1lcXVpdj0iUmVm
cmVzaCIgY29udGVudD0iMjsgVVJMPWFib3V0OmJsYW5rIj48c2NyaXB0PmlmICh3aW5kb3cudGVz
dFJ1bm5lcikgeyB3aW5kb3cub25wYWdlaGlkZT1mdW5jdGlvbihlKXthbGVydCgmYXBvcztwYWdl
aGlkZSAmYXBvczsgKyBlLnBlcnNpc3RlZCl9OyB9PC9zY3JpcHQ+Jz48L2lmcmFtZT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2FuaW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9t
LWJmY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2FuaW1hdGVkLWdpZi1yZXN0
b3JlZC1mcm9tLWJmY2FjaGUuaHRtbAppbmRleCA4MjhiY2JhYWViYzQ3OTA5OTA1YmRkODg3YTVj
OTJkOTk4NGNkY2UzLi42NGIxNTEwNTliZWEyMjI1ZmJjZjFlNDg1NmM2YTJkY2E1YzNiZjAyIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hbmltYXRlZC1naWYtcmVzdG9yZWQt
ZnJvbS1iZmNhY2hlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvYW5pbWF0ZWQt
Z2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxzY3JpcHQ+
CiAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1Rl
eHQoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL2ZyYW1lcy13aXRoLXVu
bG9hZC1oYW5kbGVycy1pbi1wYWdlLWNhY2hlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRl
ci9mcmFtZXMtd2l0aC11bmxvYWQtaGFuZGxlcnMtaW4tcGFnZS1jYWNoZS5odG1sCmluZGV4IGI4
MWY4NzczYTI4ZTM4ZGU5ZWM1NDJhYTBmOTZjNjA1ZjJlNTEzN2YuLmEzN2QyN2ViZGRmYjA4MGE4
ODY0ZjU2OGI5ZTJlNzY3ZDc3MzFhYTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbG9h
ZGVyL2ZyYW1lcy13aXRoLXVubG9hZC1oYW5kbGVycy1pbi1wYWdlLWNhY2hlLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvZnJhbWVzLXdpdGgtdW5sb2FkLWhhbmRsZXJzLWluLXBh
Z2UtY2FjaGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5h
YmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8aHRtbD4KIDxoZWFkPgogPHNjcmlwdD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL2ltYWdlLWluLXBhZ2UtY2FjaGUu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL2ltYWdlLWluLXBhZ2UtY2FjaGUuaHRtbApp
bmRleCA3ZDQzMTAzYjMzMmMxYzNiOWVjNWZhNWNmMmNlZjEyMDc5MTk0MzNjLi45N2M5YmMwMTE0
YWEyNWVkZGY4ZTMzY2U2YzA5N2FkMDc3MjYwYzg2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L2xvYWRlci9pbWFnZS1pbi1wYWdlLWNhY2hlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9sb2FkZXIvaW1hZ2UtaW4tcGFnZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9D
VFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
bG9hZGVyL2lucHV0LWVsZW1lbnQtcGFnZS1jYWNoZS1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9sb2FkZXIvaW5wdXQtZWxlbWVudC1wYWdlLWNhY2hlLWNyYXNoLmh0bWwKaW5kZXggYzg2
YjI1ODljZGUyNjM5ODUzZWVjMTZjN2MzYzMxN2M3ZWUyNDc2My4uN2YxYmZlM2NiYWIyYWVmMDdk
MzYxYTczYmZkMjA5NjIyMzQwZmJmYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9sb2Fk
ZXIvaW5wdXQtZWxlbWVudC1wYWdlLWNhY2hlLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9sb2FkZXIvaW5wdXQtZWxlbWVudC1wYWdlLWNhY2hlLWNyYXNoLmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0g
LS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1
ZSBdIC0tPgogPGh0bWw+CiA8aGVhZD4KIDxzY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2xvYWRlci9uYXZpZ2F0ZS13aXRoLW5ldy10YXJnZXQtYWZ0ZXItYmFjay1mb3J3YXJk
LW5hdmlnYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL25hdmlnYXRlLXdpdGgt
bmV3LXRhcmdldC1hZnRlci1iYWNrLWZvcndhcmQtbmF2aWdhdGlvbi5odG1sCmluZGV4IGM1OGM3
MjZkMGM5YTM0ZTE4MzZjNjdmYWIyZGMzMjVjZTI0NjJlYzYuLjEwNDdkMDdkZjlkYzE2MDhiOWNm
YTFhMDU2YWQ3NjNjMjQwNDk4ZDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVy
L25hdmlnYXRlLXdpdGgtbmV3LXRhcmdldC1hZnRlci1iYWNrLWZvcndhcmQtbmF2aWdhdGlvbi5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL25hdmlnYXRlLXdpdGgtbmV3LXRhcmdl
dC1hZnRlci1iYWNrLWZvcndhcmQtbmF2aWdhdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwh
RE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvbG9hZGVyL25hdmlnYXRlLXdpdGgtcG9zdC10by1uZXctdGFyZ2V0LWFmdGVyLWJhY2stZm9y
d2FyZC1uYXZpZ2F0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9uYXZpZ2F0ZS13
aXRoLXBvc3QtdG8tbmV3LXRhcmdldC1hZnRlci1iYWNrLWZvcndhcmQtbmF2aWdhdGlvbi5odG1s
CmluZGV4IDJmYzIzOTU0NDYzOWMxZjE2YzZmN2RkMDllNzI0ZDU0ZmNmNGI4YzUuLmMyYjcwNTMx
MWY1YmY0MTI5NmFlMmVlMGY0ODg4YjQ5MGNkODE0MzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvbG9hZGVyL25hdmlnYXRlLXdpdGgtcG9zdC10by1uZXctdGFyZ2V0LWFmdGVyLWJhY2st
Zm9yd2FyZC1uYXZpZ2F0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvbmF2
aWdhdGUtd2l0aC1wb3N0LXRvLW5ldy10YXJnZXQtYWZ0ZXItYmFjay1mb3J3YXJkLW5hdmlnYXRp
b24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxl
UGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFj
a0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zY3JvbGwtcG9zaXRpb24tcmVz
dG9yZWQtb24tYmFjay5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc2Nyb2xsLXBvc2l0
aW9uLXJlc3RvcmVkLW9uLWJhY2suaHRtbAppbmRleCA3ODBlYzYwNDA5NTU0NjFjNGU2YzA3MWJh
YTgzZGU4NTg2NmI1ZTU3Li4xMTMxNGE1M2YyOGI5ZWVlMzFjMzlkYzE4YmU3MDQwMzkwNmQ2NmI4
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zY3JvbGwtcG9zaXRpb24tcmVz
dG9yZWQtb24tYmFjay5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Njcm9sbC1w
b3NpdGlvbi1yZXN0b3JlZC1vbi1iYWNrLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPGh0bWw+CiA8
aGVhZD4KIDxzY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9zdGF0
ZW9iamVjdHMvbm8tcG9wc3RhdGUtd2hlbi1iYWNrLXRvLXN0YXRlbGVzcy1lbnRyeS13aXRoLXBh
Z2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9uby1w
b3BzdGF0ZS13aGVuLWJhY2stdG8tc3RhdGVsZXNzLWVudHJ5LXdpdGgtcGFnZS1jYWNoZS5odG1s
CmluZGV4IGJiMDQ2MGIxMTc0ZGIzYjVjYzg5MjJlNTEzZDg3NzlmMzVlNDAyMTMuLmYwNDUzODNi
NDhiYmQyMjk4YTcyOGI5OGI4ZjRhNmM1NmI0YzVhNDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9uby1wb3BzdGF0ZS13aGVuLWJhY2stdG8tc3RhdGVs
ZXNzLWVudHJ5LXdpdGgtcGFnZS1jYWNoZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbG9h
ZGVyL3N0YXRlb2JqZWN0cy9uby1wb3BzdGF0ZS13aGVuLWJhY2stdG8tc3RhdGVsZXNzLWVudHJ5
LXdpdGgtcGFnZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgog
PGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3N0YXRl
b2JqZWN0cy9wb3BzdGF0ZS1maXJlcy13aXRoLXBhZ2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9wb3BzdGF0ZS1maXJlcy13aXRoLXBhZ2UtY2FjaGUu
aHRtbAppbmRleCA1NDAzYzFmN2Q5NjhjNjMzYjVlZjI1MzY0ZmNjODc3YTVmODFkZGExLi44ZTQw
MzBjNDE1MmQxMDY2NWU5Y2M5MDc3NWU4YzE5YzcwMjFjNDRkIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L2xvYWRlci9zdGF0ZW9iamVjdHMvcG9wc3RhdGUtZmlyZXMtd2l0aC1wYWdlLWNh
Y2hlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvc3RhdGVvYmplY3RzL3BvcHN0
YXRlLWZpcmVzLXdpdGgtcGFnZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQ
RSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9h
ZGVyL3Vuc2NoZWR1bGUtcmVsYXlvdXQtYWZ0ZXItdW5sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2xvYWRlci91bnNjaGVkdWxlLXJlbGF5b3V0LWFmdGVyLXVubG9hZC5odG1sCmluZGV4IDY5
MmM3MDZlYTQ0Yjc5YzQ1YmMyY2YzNzlmMGMzZDU0MjI1MGUyN2EuLjMxMTBlYWI0MTVlZjkzNjJl
YTMxNzk0MmQxNjY2NDExYzAzMDY0NTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbG9h
ZGVyL3Vuc2NoZWR1bGUtcmVsYXlvdXQtYWZ0ZXItdW5sb2FkLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9sb2FkZXIvdW5zY2hlZHVsZS1yZWxheW91dC1hZnRlci11bmxvYWQuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRy
dWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZT10cnVlIF0gLS0+CiA8aHRtbD4KIDxib2R5PgogPHByZSBpZD0ibG9nIj48L3ByZT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3dpbmRvdy1wcm9wZXJ0aWVzLXJlc3RvcmVk
LWZyb20tcGFnZS1jYWNoZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvd2luZG93LXBy
b3BlcnRpZXMtcmVzdG9yZWQtZnJvbS1wYWdlLWNhY2hlLmh0bWwKaW5kZXggOTM0MzVhNTE3NTlk
NDc4ZTVhMWQwMzU2MTVmNTA1MDQ0MDQxZmEwZC4uMzY1MDZlNmNmOGQyNTU5ZTNhM2MxYmU2Y2Iw
MDkzMDVjMzkyZjc0YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvd2luZG93
LXByb3BlcnRpZXMtcmVzdG9yZWQtZnJvbS1wYWdlLWNhY2hlLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9sb2FkZXIvd2luZG93LXByb3BlcnRpZXMtcmVzdG9yZWQtZnJvbS1wYWdlLWNhY2hl
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBh
Z2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tG
b3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPHNjcmlwdD4KIGlmICh3aW5kb3cudGVzdFJ1bm5lcikg
ewogCXRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1wYWdlLWNhY2hlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXBhZ2UtY2FjaGUuaHRtbApp
bmRleCBkMmU5M2FhOTYxNTkyYjA5OTM2NTU5Y2E1MjA0YWNhNTYwNzg2ODA4Li43OGIyODFjZDUz
YWNlYjczYzcwYmJkMzM2MGMwNzQ1Yzc3ZWRjNDZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXBhZ2UtY2FjaGUuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXBhZ2UtY2FjaGUu
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFn
ZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zv
cndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L292ZXJmbG93L2hvcml6b250YWwtc2Nyb2xsLWFm
dGVyLWJhY2suaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvb3ZlcmZsb3cvaG9yaXpvbnRhbC1zY3Jv
bGwtYWZ0ZXItYmFjay5odG1sCmluZGV4IDE0YTdkOWIwNDQzMzA5MDU5MTQxOWViNmVhN2FhYjMx
MjQ4NzdlOWYuLjcwM2NlNjRmNjQ4N2I4MWMxOThiZmRjNTBkYzc2YTU5N2I2N2ZiMDUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvb3ZlcmZsb3cvaG9yaXpvbnRhbC1zY3JvbGwtYWZ0ZXIt
YmFjay5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvb3ZlcmZsb3cvaG9yaXpvbnRhbC1zY3Jv
bGwtYWZ0ZXItYmFjay5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxodG1sPgogPHNjcmlwdD4KIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvaWZyYW1lLXNjcm9sbGFibGUt
YWZ0ZXItYmFjay5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvaWZyYW1lLXNjcm9s
bGFibGUtYWZ0ZXItYmFjay5odG1sCmluZGV4IGYwMDY1ZmQzNmZhY2NkNTk0MmMwMGRiNWFkMTAz
ZGFiOGIzZmU0ZmQuLjJiODQ3ZDgyMDIxMzdhYzI2OTM1ZjFhYTk5ZDZmNTc2YTI3NmEyOGEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lmcmFtZS1zY3JvbGxhYmxlLWFm
dGVyLWJhY2suaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pZnJhbWUtc2Ny
b2xsYWJsZS1hZnRlci1iYWNrLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcv
aW9zL3Njcm9sbC1ldmVudHMtYmFjay1mb3J3YXJkLWFmdGVyLXBhZ2VzaG93Lmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLWV2ZW50cy1iYWNrLWZvcndhcmQtYWZ0
ZXItcGFnZXNob3cuaHRtbAppbmRleCA1YTZiZDg5YmFiNGYwOTNhNjg1NDUwZDI4NWNmN2RlMDUw
ZWQ4ZTlhLi5kNzEzMzJiOGNhN2ZjMTJhM2U1MTNjNTg5NGU0NzllYjNlNmUxMjc5IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLWV2ZW50cy1iYWNrLWZv
cndhcmQtYWZ0ZXItcGFnZXNob3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGlu
Zy9pb3Mvc2Nyb2xsLWV2ZW50cy1iYWNrLWZvcndhcmQtYWZ0ZXItcGFnZXNob3cuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRy
dWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9pb3Mvc2Nyb2xsLWV2ZW50cy1iYWNrLWZvcndh
cmQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lvcy9zY3JvbGwtZXZlbnRzLWJh
Y2stZm9yd2FyZC5odG1sCmluZGV4IGUyZjk4NjY4NDM1ZTY5NWQzODdlNmYxMzY3MDg5OTJmMmVi
N2QzOWUuLmMxMTUxOTZlMDZiNzY0YWIxNWU3ZTI2NDNlMDg2ZTljOGMzMTYwNGMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lvcy9zY3JvbGwtZXZlbnRzLWJhY2stZm9y
d2FyZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lvcy9zY3JvbGwtZXZl
bnRzLWJhY2stZm9yd2FyZC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgog
PGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lv
cy90b3VjaC1zY3JvbGwtYmFjay1mb3J3YXJkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9s
bGluZy9pb3MvdG91Y2gtc2Nyb2xsLWJhY2stZm9yd2FyZC5odG1sCmluZGV4IDExNjU0NDc1MWYx
MmNkOGRiNTY5ZGFiMjJkMDIwZGNkMmUyMzJhMzAuLjFjZGEyYmVhM2YxYmFkYWZmNmU3YjA2MjNm
MTU0MWJjNGU4OTNmYjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2lv
cy90b3VjaC1zY3JvbGwtYmFjay1mb3J3YXJkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9z
Y3JvbGxpbmcvaW9zL3RvdWNoLXNjcm9sbC1iYWNrLWZvcndhcmQuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGludGVybmFsOkFz
eW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkPXRydWUgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGludGVybmFsOkFz
eW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkPXRydWUgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10
cnVlIF0gLS0+CiA8aHRtbD4KIDxoZWFkPgogICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3Qvc2Nyb2xsaW5nL292ZXJmbG93LXNjcm9sbGFibGUtYWZ0ZXItYmFjay5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9zY3JvbGxpbmcvb3ZlcmZsb3ctc2Nyb2xsYWJsZS1hZnRlci1iYWNrLmh0bWwK
aW5kZXggMDdlMTM1YTkyMzMxZTJhNWI5ZDZjOWVkYjNiNzE4MmI5YTQ4NWE3Yi4uMWVkZTY2MTQ2
Yzg0ZDA5YjRiZDJhZjkxMWFkMWMyYTYwODAzMzc3ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC9zY3JvbGxpbmcvb3ZlcmZsb3ctc2Nyb2xsYWJsZS1hZnRlci1iYWNrLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvb3ZlcmZsb3ctc2Nyb2xsYWJsZS1hZnRlci1iYWNr
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBh
Z2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tG
b3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvcGFnZS1jYWNoZS1iYWNrLW92
ZXJmbG93LXNjcm9sbC1yZXN0b3JlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9w
YWdlLWNhY2hlLWJhY2stb3ZlcmZsb3ctc2Nyb2xsLXJlc3RvcmUuaHRtbAppbmRleCA2OTE3NmE3
ZTgyMzMyZWJkNjY0YjVjN2U0YTUyNDUyMWQ2NTZmNmZjLi42ZjdkZjA3NmM5YTBiMTk2MGZjZWI2
MmQ0ZmYyNGZmYzI0MmQwYWY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGlu
Zy9wYWdlLWNhY2hlLWJhY2stb3ZlcmZsb3ctc2Nyb2xsLXJlc3RvcmUuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L3Njcm9sbGluZy9wYWdlLWNhY2hlLWJhY2stb3ZlcmZsb3ctc2Nyb2xsLXJl
c3RvcmUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5h
YmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxl
QmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8c3R5bGU+CiAjcHVmZmluIHsKICAgICBmb250
OiBBaGVtIDEwcHg7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Npemlu
Zy9pb3MvdGV4dC1hdXRvc2l6aW5nLWFmdGVyLWJhY2suaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC1hdXRvc2l6aW5nL2lvcy90ZXh0LWF1dG9zaXppbmctYWZ0ZXItYmFjay5odG1sCmluZGV4
IGU2MjFjODg1MGQyNmVkZWU4OTI3Mjc1ZGM4YzhlMTQ2Yzc4OGNhMDcuLmVmZWVlNWZmMWQ5NWQ5
NDVkNjgyZDMzMDM5N2NiYzk5YThmNjVjZDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC1hdXRvc2l6aW5nL2lvcy90ZXh0LWF1dG9zaXppbmctYWZ0ZXItYmFjay5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL2lvcy90ZXh0LWF1dG9zaXppbmctYWZ0
ZXItYmFjay5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIGVuYWJsZVBhZ2VDYWNoZT10
cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VG
bGV4aWJsZVZpZXdwb3J0PXRydWUgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L2lv
cy92aWV3cG9ydC1zaHJpbmstdG8tZml0LW9uLW5ldy1uYXZpZ2F0aW9uLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L3ZpZXdwb3J0L2lvcy92aWV3cG9ydC1zaHJpbmstdG8tZml0LW9uLW5ldy1uYXZp
Z2F0aW9uLmh0bWwKaW5kZXggOWJiM2Q5YTg1MGI2M2YwMWM3YjE2NTBhMzZlNGEwZjZlMjU0Yzk4
MC4uZDgxMzdiYTQ3YThhMjRmNTY0Mzc5N2RiOWZlMjUyYzc5ZWU2NzkzNiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC9pb3Mvdmlld3BvcnQtc2hyaW5rLXRvLWZpdC1vbi1u
ZXctbmF2aWdhdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvaW9zL3Zp
ZXdwb3J0LXNocmluay10by1maXQtb24tbmV3LW5hdmlnYXRpb24uaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHNob3VsZElnbm9y
ZU1ldGFWaWV3cG9ydD10cnVlIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQ9
dHJ1ZSBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIAogPGh0bWw+CiA8aGVhZD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtMTI4Lmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTEyOC5odG1sCmluZGV4IDNmZWIw
MGQ5YTllN2Q5MDZlYmE5YzgwOWZjYjcxZmMzZmNhNWY5MGYuLjQ2ZTgzODIwMWY4NTg5YTQ2ZWMz
MDkwNjg0NmM2ZjQ3OWUwOTY1MjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvdmlld3Bv
cnQvdmlld3BvcnQtMTI4Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC92aWV3
cG9ydC0xMjguaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5h
YmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8aHRtbD4KICAgICA8aGVhZD4KICAgICAg
ICAgPHRpdGxlPlZpZXdwb3J0IG1ldGEgZGF0YSBzdG9yZWQgaW4gcGFnZSBjYWNoZS48L3RpdGxl
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1wYWdlLWNhY2hl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLXBhZ2UtY2FjaGUuaHRtbApp
bmRleCAzNTQyYzM2OTZkM2QzMGQ5YzM1ZTA5MDQ3ZDk2ZTEzM2NjMmNlZDdjLi4xNDE2MzFlZjYy
YzU2Nzc0NGQ5YTg1NzhlNWNlOGRhNGFkMDdjNGRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvd29ya2VyLXBhZ2UtY2FjaGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvd29ya2VyLXBhZ2UtY2FjaGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8aGVhZD4K
IDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+CiA8L2hl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL2Rpc3BsYXktaW1h
Z2UtdW5zZXQtYWxsb3dzLWNhY2hlZC1pbWFnZS1sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2NhY2hlL2Rpc3BsYXktaW1hZ2UtdW5zZXQtYWxsb3dzLWNhY2hlZC1pbWFnZS1sb2Fk
Lmh0bWwKaW5kZXggZmY1ODE1ZTg5N2MxN2VmMWZhZjU4ODk0YWVhNDE4ZTJlZDY1NzgzZi4uNDcy
ODIyMmMwNjEzYzBkMjIwYmNjMTE1NmVmZjQ4ZTJiODE1ODk4OCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9kaXNwbGF5LWltYWdlLXVuc2V0LWFsbG93cy1jYWNoZWQt
aW1hZ2UtbG9hZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvZGlzcGxh
eS1pbWFnZS11bnNldC1hbGxvd3MtY2FjaGVkLWltYWdlLWxvYWQuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4K
KzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0g
LS0+CiA8aHRtbD4KIDxoZWFkPgogPHNjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFnZS1jYWNoZS1jb25uZWN0ZWQuaHRt
bCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFnZS1j
YWNoZS1jb25uZWN0ZWQuaHRtbAppbmRleCBjNjY5ZjJjMDBhMjE4Y2YwYzgwMjRiMjk1NWU2NTcw
NTY5OGRiNmRkLi4yMDVkOWMwMTNjNzhkY2RjZWVlMzlmYmRiYjA2ZjM2NWEwNDZjZDNkIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXBh
Z2UtY2FjaGUtY29ubmVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVu
dHNvdXJjZS9ldmVudHNvdXJjZS1wYWdlLWNhY2hlLWNvbm5lY3RlZC5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0t
PgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUg
XSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFnZS1jYWNoZS1jb25u
ZWN0aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291
cmNlLXBhZ2UtY2FjaGUtY29ubmVjdGluZy5odG1sCmluZGV4IGIwNWU0NzRiOTk3YmE2MzAxMjhi
ZTY5YzA1ZTE5YmRmODM3MzljNTUuLmVkNmZhOTcyYzE4ZTQyNWQ4NWM4Nzk0NDhhNjQ0OWQxOWVm
ZTYyNTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZl
bnRzb3VyY2UtcGFnZS1jYWNoZS1jb25uZWN0aW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1wYWdlLWNhY2hlLWNvbm5lY3RpbmcuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNh
Y2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zvcndh
cmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvbWFpbi1yZXNvdXJjZS1kZWxl
Z2F0ZXMtb24tYmFjay1uYXZpZ2F0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xv
YWRpbmcvbWFpbi1yZXNvdXJjZS1kZWxlZ2F0ZXMtb24tYmFjay1uYXZpZ2F0aW9uLmh0bWwKaW5k
ZXggMDQ5NDg3NTliYzk5NGFlMzJhNjFmYTliMjRkNmQwMGQ2NTE0Yzg5Yi4uZjFlMWY4ZDlhYThj
YjE3M2VkZTgyMDAyZWZhMTdiYTE1ZDE0YTJiYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2FkaW5nL21haW4tcmVzb3VyY2UtZGVsZWdhdGVzLW9uLWJhY2stbmF2aWdhdGlv
bi5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9tYWluLXJlc291cmNl
LWRlbGVnYXRlcy1vbi1iYWNrLW5hdmlnYXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURP
Q1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvYWRpbmcvdW5maW5pc2hlZC1sb2FkLWJhY2stdG8tY2FjaGVkLXBhZ2UtY2FsbGJh
Y2tzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvdW5maW5pc2hlZC1sb2Fk
LWJhY2stdG8tY2FjaGVkLXBhZ2UtY2FsbGJhY2tzLmh0bWwKaW5kZXggY2E1Nzg4ZTA3ODMwMzY0
NGRhOGZjMDE4YzNmZjZlZTg4MzBiYzMzMi4uOTRjZmY3YWE5ZjVkZmM0OTUyODU5MTBmYmRkZjQx
ZjQ2MDg5NDFhZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Vu
ZmluaXNoZWQtbG9hZC1iYWNrLXRvLWNhY2hlZC1wYWdlLWNhbGxiYWNrcy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy91bmZpbmlzaGVkLWxvYWQtYmFjay10by1jYWNo
ZWQtcGFnZS1jYWxsYmFja3MuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8c2NyaXB0PgogCiB3aW5k
b3cub25wYWdlc2hvdyA9IGZ1bmN0aW9uKGV2dCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL3VuZmluaXNoZWQtbWFpbi1yZXNvdXJjZS1iYWNrLXRvLWNhY2hl
ZC1wYWdlLWNhbGxiYWNrcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Vu
ZmluaXNoZWQtbWFpbi1yZXNvdXJjZS1iYWNrLXRvLWNhY2hlZC1wYWdlLWNhbGxiYWNrcy5odG1s
CmluZGV4IGYyYWM2NmFkMWY2OTBlNDEyNjE3MDgxYmYzNTU3NzUyYjE2YjQ2ZjQuLmQ4OTY1ODA3
NDEzOTJkNjc4ZGRjMTU5MmU0YjkyNTc5NTUyMTJkNTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbG9hZGluZy91bmZpbmlzaGVkLW1haW4tcmVzb3VyY2UtYmFjay10by1jYWNo
ZWQtcGFnZS1jYWxsYmFja3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRp
bmcvdW5maW5pc2hlZC1tYWluLXJlc291cmNlLWJhY2stdG8tY2FjaGVkLXBhZ2UtY2FsbGJhY2tz
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBh
Z2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tG
b3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPHNjcmlwdD4KIAogd2luZG93Lm9ucGFnZXNob3cgPSBm
dW5jdGlvbihldnQpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEv
cmVsb2FkLWFmdGVyLWRpYWxvZy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9y
ZWxvYWQtYWZ0ZXItZGlhbG9nLmh0bWwKaW5kZXggM2ZlNjgwMGM4OGNlMDllZDkyOTEwNzZhZjVi
MDQyMTRlNDE0YWQ4MS4uYTA3YTAzYjM3Mjk4NjJmNGJhYmMzOWIwYTc3Yzk3NTM3ZjJjMGVjNCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZWxvYWQtYWZ0ZXItZGlh
bG9nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9yZWxvYWQtYWZ0ZXIt
ZGlhbG9nLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVu
YWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJs
ZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KICAg
ICA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9n
by1iYWNrLXRvLWVycm9yLXBhZ2UuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9nby1iYWNrLXRvLWVycm9yLXBhZ2UuaHRtbAppbmRleCAxOGJkMTM5ZGEwZWZkNTcxNWZj
ZjFmNDVhNjhhNTc1OWE4ZjgzNGM3Li4xZWZmYzY4OGQ3NTkxNTUwYzVjOTE5MWRlMTczODI4MzRl
YjViOWNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vZ28t
YmFjay10by1lcnJvci1wYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2dvLWJhY2stdG8tZXJyb3ItcGFnZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxzY3Jp
cHQ+CiBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9odHRwcy1p
bi1wYWdlLWNhY2hlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaHR0
cHMtaW4tcGFnZS1jYWNoZS5odG1sCmluZGV4IGVlZTliMjY4N2MzYmZjYWYwZDI0ZDRmOTY0ZTky
N2JjN2YwYTlhZGMuLjNmMDk4Njc1NmJmYWQ5M2JlY2FhYTRmMzVmNmI0MzZiNzIwOWU3MjIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9odHRwcy1pbi1wYWdl
LWNhY2hlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2h0dHBz
LWluLXBhZ2UtY2FjaGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8c2NyaXB0PgogCiBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9odHRwcy1uby1zdG9yZS1zdWJmcmFtZS1pbi1wYWdlLWNhY2hlLmh0bWwgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaHR0cHMtbm8tc3RvcmUtc3ViZnJhbWUtaW4t
cGFnZS1jYWNoZS5odG1sCmluZGV4IDk4MGYyMGI2MDY3OTUwMWE0NDQzMjhkNTgwNzRlNTBjMjIz
ZjIwOWUuLjIzZDU4M2QwYzk1MWQ0MjcyYWZmMjM3NjdkZDE3MTI2N2NhNmE5ZDcgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9odHRwcy1uby1zdG9yZS1zdWJm
cmFtZS1pbi1wYWdlLWNhY2hlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2h0dHBzLW5vLXN0b3JlLXN1YmZyYW1lLWluLXBhZ2UtY2FjaGUuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUg
XSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10
cnVlIF0gLS0+CiA8c2NyaXB0PgogCiBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXBhZ2Vo
aWRlLWhhbmRsZXIuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFn
ZS1sb2FkLWluLXBhZ2VoaWRlLWhhbmRsZXIuaHRtbAppbmRleCBmMDk4ZjE0MGM5Y2Q2NTk0ZDA3
NTkyZTdhMzZjOWVlZDliN2IyYWE5Li45MDNmOTMzYjI1MzdmMjM3NWU1YjcyZDkwYzUwMDZhOWIw
MTkyOGE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1h
Z2UtbG9hZC1pbi1wYWdlaGlkZS1oYW5kbGVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tcGFnZWhpZGUtaGFuZGxlci5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1
ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hl
PXRydWUgXSAtLT4KIDxodG1sPjxoZWFkPgogPHRpdGxlPkltYWdlIGxvYWQgaW4gcGFnZWhpZGUg
aGFuZGxlcjwvdGl0bGU+CiA8c2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtZG9tY2FjaGUtcGVuZGluZy1wcm9taXNlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1kb21jYWNoZS1w
ZW5kaW5nLXByb21pc2UuaHRtbAppbmRleCBkYmU3NjVkZmJhMGJlNTNhNTJhNTYxMDA4ZDYxYzZj
YzM4NmZiY2VjLi43NWViZmNlOTcxMzMyYzVkMDNiNzNhYmY4NTA4Mzc1MDdlYzEwYmE5IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1kb21j
YWNoZS1wZW5kaW5nLXByb21pc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25h
dmlnYXRpb24vcGFnZS1jYWNoZS1kb21jYWNoZS1wZW5kaW5nLXByb21pc2UuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUg
XSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10
cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1kb21jYWNoZXN0b3Jh
Z2UtcGVuZGluZy1wcm9taXNlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRp
b24vcGFnZS1jYWNoZS1kb21jYWNoZXN0b3JhZ2UtcGVuZGluZy1wcm9taXNlLmh0bWwKaW5kZXgg
ZDA1ZTVlMDkyMDUyZGRmNzNmZjRmZjAxNzVlOThlMWJkOTBhMmIxMy4uYzIyM2RkOTYyZWZkMDI5
ZWUyZjQxNDI0YzhiYjZhOTI2MWVjNGIyNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtZG9tY2FjaGVzdG9yYWdlLXBlbmRpbmctcHJvbWlz
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hl
LWRvbWNhY2hlc3RvcmFnZS1wZW5kaW5nLXByb21pc2UuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8
IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1mYWlsZWQteGhyLmh0bWwgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1mYWlsZWQteGhyLmh0bWwKaW5k
ZXggNzJkMGJjOTc2YzA3YjViNDVhNDAyNzcwZGQ2NTBlMWM3ZWM5NDg3MS4uN2M5MTAzMzJiNTNh
OGVlZDY4ZWM3NGJiZjY4MzE3MjFkYTdmY2U0OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtZmFpbGVkLXhoci5odG1sCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWZhaWxlZC14aHIuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hl
PXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRD
YWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1mb250ZmFj
ZXNldC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUt
Zm9udGZhY2VzZXQuaHRtbAppbmRleCBlZjlmNWMzMjM4NjNjY2U4NDg3MmU3MmJjNmYwYzNlYTZk
MGZhOGMwLi41ZDYyNDQ1ZmFiNzlhOWM4MTUwMDc3ZGM2YWI4ZmE3ZDc5YmM1Yjc4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1mb250ZmFj
ZXNldC5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNh
Y2hlLWZvbnRmYWNlc2V0Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8
aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL3BhZ2UtY2FjaGUtZnJhZ21lbnQtcmVmZXJyZXIuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWZyYWdtZW50LXJlZmVycmVyLmh0bWwKaW5kZXgg
MDI2N2U1ZGZiMzNjNTY0ODQzZGM2MDAyNTMyYzM3NmE3ZjQ1MjlmZC4uM2RkNTA3ZGIwODRhZGY4
MmUxNTY0NmYyODYzYWJjYmZkODBjNDQ2NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtZnJhZ21lbnQtcmVmZXJyZXIuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1mcmFnbWVudC1yZWZl
cnJlci5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFi
bGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVC
YWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNh
Y2hlLWlmcmFtZS1uby1jdXJyZW50LWhpc3RvcnlJdGVtLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtbm8tY3VycmVudC1oaXN0b3J5SXRl
bS5odG1sCmluZGV4IGJjODg3NjQ2MGNjYTMyZTExMjgzNzNkOWM4ZTQ0YWRiY2I5OWQ5Y2YuLjUx
ZjI0OTVlOGRmMmM5YjdmMDY3M2JiYTZhOGNhYmUyZDViZDMxZGYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1uby1jdXJyZW50
LWhpc3RvcnlJdGVtLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L3BhZ2UtY2FjaGUtaWZyYW1lLW5vLWN1cnJlbnQtaGlzdG9yeUl0ZW0uaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAt
LT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVl
IF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9u
YWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLWFzeW5jLWRlbGVnYXRl
cy5odG1sCmluZGV4IDAzOGYwOGEyOTQ1N2E5NmIzYWVjMzU3Nzg2OTk1OGIyZTc4ZTNmMzUuLmQx
NGMzMzcyMjBhM2NkN2VmYWYxMzc4N2EwYWYxMGFhOTU1MzUzYjUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25h
bC1sb2FkLWFzeW5jLWRlbGVnYXRlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLWFzeW5jLWRlbGVn
YXRlcy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFi
bGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVC
YWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9k
eT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNh
Y2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC5odG1sCmluZGV4
IDAxZjYzYmRhODQ0MjczYTUwNjE0MWYyMmQwMDFkYjUxMjQ5OGI2Y2QuLjE4NWVlZGFhNWNmOTYx
YmYwYjhlODBkZjhmMjYxODgwMTM4YzcyMTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1l
LXByb3Zpc2lvbmFsLWxvYWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4K
IDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmln
YXRpb24vcGFnZS1jYWNoZS1wZW5kaW5nLWltYWdlLWxvYWQtY2FjaGUtcGFydGl0aW9uLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1wZW5kaW5nLWlt
YWdlLWxvYWQtY2FjaGUtcGFydGl0aW9uLmh0bWwKaW5kZXggNDgwYjFjYmY2NTdlZDgzZmNmNWQ1
YTEzNGY3OGNmOWExYjM1OTk1Ny4uZmNjNDdhYzVlYTFjOGIwYjQ5YTFmM2FiM2ZjYTk2OGI0ZDM2
NmEyMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2Ut
Y2FjaGUtcGVuZGluZy1pbWFnZS1sb2FkLWNhY2hlLXBhcnRpdGlvbi5odG1sCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLXBlbmRpbmctaW1hZ2UtbG9h
ZC1jYWNoZS1wYXJ0aXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4K
IDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmln
YXRpb24vcGFnZS1jYWNoZS1wZW5kaW5nLWltYWdlLWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLXBlbmRpbmctaW1hZ2UtbG9hZC5odG1sCmlu
ZGV4IDQ1N2UyMTczZTVlNjJiZmFjZGVlZDVlZTkwODliNzY0MzVmM2M5MWMuLjZkZjk0NmQ2NDZj
MjYwYjQzZmM0NWU1ZTNlZjdjNjgyMWY1ZDMwZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLXBlbmRpbmctaW1hZ2UtbG9hZC5odG1sCisr
KyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLXBlbmRpbmct
aW1hZ2UtbG9hZC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
bmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+
CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9w
YWdlLWNhY2hlLXBlbmRpbmctbG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL3BhZ2UtY2FjaGUtcGVuZGluZy1sb2FkLmh0bWwKaW5kZXggNDU5NTM3NWQyMTc3ZjM1
ZjIwZGFjNGM5Y2RkNGU4ODczZDdiZTAyZC4uMTc2ZjFiODJiMzc0YzQ3MjYyYWQ1ZDQ0MzUzNjM3
YzBiMmNkZmYwNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L3BhZ2UtY2FjaGUtcGVuZGluZy1sb2FkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtcGVuZGluZy1sb2FkLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0t
PgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtcGVuZGluZy1waW5nLWxvYWQtY3Jv
c3Mtb3JpZ2luLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1j
YWNoZS1wZW5kaW5nLXBpbmctbG9hZC1jcm9zcy1vcmlnaW4uaHRtbAppbmRleCAxM2IwZjkyY2E5
NzVjZDFlZDQ0MzYzNTA2YmVmMjAwMzIzOWI1MWRjLi41MjQ5MGU0Y2Y4YjMwNjQwMDNlMTU3NzUy
MGIzMDNmN2U4MGIyMmNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmln
YXRpb24vcGFnZS1jYWNoZS1wZW5kaW5nLXBpbmctbG9hZC1jcm9zcy1vcmlnaW4uaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1wZW5kaW5nLXBp
bmctbG9hZC1jcm9zcy1vcmlnaW4uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwh
RE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRD
YWNoZT10cnVlIF0gLS0+CiA8aHRtbD4KIDxib2R5PgogPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1wZW5kaW5nLXBpbmctbG9hZC1zYW1lLW9y
aWdpbi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUt
cGVuZGluZy1waW5nLWxvYWQtc2FtZS1vcmlnaW4uaHRtbAppbmRleCAwNTdmYzg5OTZhZmM0MWI3
MmMzNzI2OWE5MDU3YjI2MDdkMjY1MjhkLi5lYjg1NzUyNmU3ZTM5Yzk3NGNiM2IwNjczYTFhNWZi
MDBiYTNkNGJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
cGFnZS1jYWNoZS1wZW5kaW5nLXBpbmctbG9hZC1zYW1lLW9yaWdpbi5odG1sCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLXBlbmRpbmctcGluZy1sb2Fk
LXNhbWUtb3JpZ2luLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRt
bD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L3BhZ2UtY2FjaGUtcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuaHRtbApp
bmRleCA2MWNhZjA3ZmZhY2VmMGVjNjRiNmRlNjk4ODM2YTJiNmIwZTBjMzhmLi42OTlmMGJiYmRm
ZjM5NTZkMjEzYmY3ZmMyZGQyNDE1YzYzODYwN2ZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1yZXF1
ZXN0QW5pbWF0aW9uRnJhbWUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4K
IDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmln
YXRpb24vcGFnZS1jYWNoZS14aHItaW4tcGFnZWhpZGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLXhoci1pbi1wYWdlaGlkZS5odG1sCmluZGV4IDBi
MTEzMDFkNzZkZWJhZTQxNTM3YTEyMWUxZTUwNzNmNDdiOWQ5NWQuLmEyZjFmNGNhZGZjZWFjZWQ4
Yjc3MTFkMGI5MmVkZjE3NGFmMWFhMTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLXhoci1pbi1wYWdlaGlkZS5odG1sCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLXhoci1pbi1wYWdlaGlkZS5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdl
Q2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9y
d2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLXho
ci5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUteGhy
Lmh0bWwKaW5kZXggNTIyZDc4NzE2MjczN2QwZGNjMmI0YzkyYTQ0MGJhMDNmMDE2ZDIwZi4uMzcz
YjU1ZDYzMjEwZmE0ZGRkMThhZGEwNGE2ODdjYzdmOWY4MjJkMCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUteGhyLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUteGhyLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVl
IF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9
dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9odHRwcy1pbi1wYWdl
LWNhY2hlLTMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJj
ZXMvaHR0cHMtaW4tcGFnZS1jYWNoZS0zLmh0bWwKaW5kZXggN2RmZmYyOGI3NzFmYjBjMDI2ZWQz
ZWZjNjNlYjRiNDM0ZGYwMWFkOC4uZTgxYTA1Mzc4NDNhNjBiYzUzZTFhMDUxMDUxMWMwM2I4YmNm
MGRhYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291
cmNlcy9odHRwcy1pbi1wYWdlLWNhY2hlLTMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL2h0dHBzLWluLXBhZ2UtY2FjaGUtMy5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1
ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hl
PXRydWUgXSAtLT4KIDxzY3JpcHQ+CiB3aW5kb3cub25wYWdlc2hvdyA9IGZ1bmN0aW9uKGV2dCkg
ewogCWlmICghZXZ0LnBlcnNpc3RlZCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9zdWJmcmFtZS1wYWdlaGlkZS1oYW5kbGVyLXN0YXJ0cy1sb2FkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vc3ViZnJhbWUtcGFnZWhpZGUtaGFu
ZGxlci1zdGFydHMtbG9hZC5odG1sCmluZGV4IGEzNDRlMjY3MTUyODg4YWU5YWE5YmE0OWQxMDk3
M2E5NmY5YjFjYjQuLmIxMmIxYTI2YjI4ZTQwZTMyMDM5OWEyNjA4YTJkOGNkYjBmN2M2N2EgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9zdWJmcmFtZS1wYWdl
aGlkZS1oYW5kbGVyLXN0YXJ0cy1sb2FkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL3N1YmZyYW1lLXBhZ2VoaWRlLWhhbmRsZXItc3RhcnRzLWxvYWQuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hl
PXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRD
YWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCkiPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L3N1YmZyYW1lLXBhZ2VoaWRlLWhhbmRsZXItc3RhcnRzLWxvYWQyLmh0bWwgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vc3ViZnJhbWUtcGFnZWhpZGUtaGFuZGxlci1zdGFydHMt
bG9hZDIuaHRtbAppbmRleCBjM2MzNzU1NWIzYzA1NDUyNTIxODA3OWM4NjQwMTM0MTM3ZWI0NGU0
Li42NjY0NzVjZjVhOGY4YTNjYTFmZmVkMWIxMmE5OWI4NjFmMGZhMDg3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vc3ViZnJhbWUtcGFnZWhpZGUtaGFuZGxl
ci1zdGFydHMtbG9hZDIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRp
b24vc3ViZnJhbWUtcGFnZWhpZGUtaGFuZGxlci1zdGFydHMtbG9hZDIuaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAt
LT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVl
IF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHkgb25sb2FkPSJydW5UZXN0KCki
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1vbi1zaXRlcy13aXRob3V0LXVzZXItaW50
ZXJhY3Rpb24tZGF0YWJhc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1vbi1zaXRl
cy13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZGF0YWJhc2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE3ZmVkM2E1Y2RiMDExNWU0YTA5NDQyOWI5NWE4MTgxY2ZmOTRmMmMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGhp
cmQtcGFydHktY29va2llLWJsb2NraW5nLW9uLXNpdGVzLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlv
bi1kYXRhYmFzZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNSBAQAorVGVzdHMgdGhhdCBhbGwg
dGhpcmQtcGFydHkgY29va2llcyBhcmUgYmxvY2tlZCB1bmRlciB3ZWJzaXRlcyB0aGF0IGhhdmUg
bm90IHJlY2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KyAgCisKKy0tLS0tLS0tCitGcmFtZTogJzwhLS1mcmFtZTEtLT4nCistLS0tLS0tLQorQmVmb3Jl
IHVzZXIgaW50ZXJhY3Rpb24sIHNob3VsZCByZWNlaXZlIG5vIGNvb2tpZXMuCitEaWQgbm90IHJl
Y2VpdmUgY29va2llIG5hbWVkICdmaXJzdFBhcnR5Q29va2llJy4KK0RpZCBub3QgcmVjZWl2ZSBj
b29raWUgbmFtZWQgJ3BhcnRpdGlvbmVkQ29va2llJy4KK0NsaWVudC1zaWRlIGRvY3VtZW50LmNv
b2tpZToKKworLS0tLS0tLS0KK0ZyYW1lOiAnPCEtLWZyYW1lMi0tPicKKy0tLS0tLS0tCitBZnRl
ciB1c2VyIGludGVyYWN0aW9uLCBzaG91bGQgcmVjZWl2ZSBmaXJzdC1wYXJ0eSBjb29raWUuCitS
ZWNlaXZlZCBjb29raWUgbmFtZWQgJ2ZpcnN0UGFydHlDb29raWUnLgorRGlkIG5vdCByZWNlaXZl
IGNvb2tpZSBuYW1lZCAncGFydGl0aW9uZWRDb29raWUnLgorQ2xpZW50LXNpZGUgZG9jdW1lbnQu
Y29va2llOiBmaXJzdFBhcnR5Q29va2llPXZhbHVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGhpcmQtcGFydHktY29va2llLWJsb2Nr
aW5nLW9uLXNpdGVzLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1kYXRhYmFzZS5odG1sIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RoaXJkLXBhcnR5LWNv
b2tpZS1ibG9ja2luZy1vbi1zaXRlcy13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZGF0YWJhc2Uu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mYzkyMzNjMDRmMTZkNTRkZjU3N2FjMmJjYTQzOWZkZWE1MGI3NzY2
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1vbi1zaXRlcy13aXRob3V0LXVz
ZXItaW50ZXJhY3Rpb24tZGF0YWJhc2UuaHRtbApAQCAtMCwwICsxLDc4IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04
Ij4KKyAgICA8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgYWxsIHRo
aXJkLXBhcnR5IGNvb2tpZXMgYXJlIGJsb2NrZWQgdW5kZXIgd2Vic2l0ZXMgdGhhdCBoYXZlIG5v
dCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uLiIpOworICAgIGpzVGVzdElzQXN5bmMgPSB0cnVl
OworCisgICAgY29uc3QgcGFydGl0aW9uSG9zdCA9ICIxMjcuMC4wLjE6ODAwMCI7CisgICAgY29u
c3QgcGFydGl0aW9uT3JpZ2luID0gImh0dHA6Ly8iICsgcGFydGl0aW9uSG9zdDsKKyAgICBjb25z
dCB0aGlyZFBhcnR5T3JpZ2luID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCI7CisgICAgY29uc3Qg
cmVzb3VyY2VQYXRoID0gIi9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNlcyI7CisgICAg
Y29uc3QgdGhpcmRQYXJ0eUJhc2VVcmwgPSB0aGlyZFBhcnR5T3JpZ2luICsgcmVzb3VyY2VQYXRo
OworICAgIGNvbnN0IGZpcnN0UGFydHlDb29raWVOYW1lID0gImZpcnN0UGFydHlDb29raWUiOwor
ICAgIGNvbnN0IHN1YlBhdGhUb1NldEZpcnN0UGFydHlDb29raWUgPSAiL3NldC1jb29raWUucGhw
P25hbWU9IiArIGZpcnN0UGFydHlDb29raWVOYW1lICsgIiZ2YWx1ZT12YWx1ZSI7CisgICAgY29u
c3QgcGFydGl0aW9uZWRDb29raWVOYW1lID0gInBhcnRpdGlvbmVkQ29va2llIjsKKyAgICBjb25z
dCBzdWJQYXRoVG9TZXRQYXJ0aXRpb25lZENvb2tpZSA9ICIvc2V0LWNvb2tpZS5waHA/bmFtZT0i
ICsgcGFydGl0aW9uZWRDb29raWVOYW1lICsgIiZ2YWx1ZT12YWx1ZSI7CisgICAgY29uc3QgcmV0
dXJuVXJsID0gcGFydGl0aW9uT3JpZ2luICsgIi9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RoaXJk
LXBhcnR5LWNvb2tpZS1ibG9ja2luZy1vbi1zaXRlcy13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24u
aHRtbCI7CisgICAgY29uc3Qgc3ViUGF0aFRvR2V0Q29va2llcyA9ICIvZ2V0LWNvb2tpZXMucGhw
P25hbWUxPSIgKyBmaXJzdFBhcnR5Q29va2llTmFtZSArICImbmFtZTI9IiArIHBhcnRpdGlvbmVk
Q29va2llTmFtZTsKKworICAgIGZ1bmN0aW9uIG9wZW5JZnJhbWUodXJsLCBvbkxvYWRIYW5kbGVy
KSB7CisgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJh
bWUiKTsKKyAgICAgICAgZWxlbWVudC5zcmMgPSB1cmw7CisgICAgICAgIGlmIChvbkxvYWRIYW5k
bGVyKSB7CisgICAgICAgICAgICBlbGVtZW50Lm9ubG9hZCA9IG9uTG9hZEhhbmRsZXI7CisgICAg
ICAgIH0KKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBzd2l0Y2ggKGRvY3VtZW50Lmxv
Y2F0aW9uLmhhc2gpIHsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwMSI6CisgICAgICAgICAgICAg
ICAgLy8gU2V0IGZpcnN0LXBhcnR5IGNvb2tpZSBmb3IgbG9jYWxob3N0LgorICAgICAgICAgICAg
ICAgIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSB0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhU
b1NldEZpcnN0UGFydHlDb29raWUgKyAiIyIgKyByZXR1cm5VcmwgKyAiI3N0ZXAyIjsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwMiI6CisgICAgICAgICAg
ICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVwMyI7CisgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCB0aGUgY29va2llIGlzIGJsb2NrZWQgZm9yIGxvY2FsaG9zdCB1bmRlciAx
MjcuMC4wLjEgZXZlbiB0aG91Z2ggbG9jYWxob3N0IGlzIG5vdCBwcmV2YWxlbnQuCisgICAgICAg
ICAgICAgICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb0dldENvb2tp
ZXMgKyAiJm1lc3NhZ2U9QmVmb3JlIHVzZXIgaW50ZXJhY3Rpb24sIHNob3VsZCByZWNlaXZlIG5v
IGNvb2tpZXMuIiwgcnVuVGVzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICIjc3RlcDMiOgorICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2gg
PSAic3RlcDQiOworICAgICAgICAgICAgICAgIC8vIFByb2R1Y2UgdXNlciBpbnRlcmFjdGlvbiBm
b3IgdGhlIGZpcnN0LXBhcnR5IHRvIGFsbG93IHRoaXJkLXBhcnR5IGNvb2tpZSBhY2Nlc3MuCisg
ICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uKHBhcnRpdGlvbk9yaWdpbiwgdHJ1ZSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1VwZGF0ZUNvb2tpZUJsb2NraW5nKGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgY29va2llIGlzIG5v
IGxvbmdlciBibG9ja2VkIGZvciBsb2NhbGhvc3QgdW5kZXIgMTI3LjAuMC4xLgorICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhUb0dl
dENvb2tpZXMgKyAgIiZtZXNzYWdlPUFmdGVyIHVzZXIgaW50ZXJhY3Rpb24sIHNob3VsZCByZWNl
aXZlIGZpcnN0LXBhcnR5IGNvb2tpZS4iLCBydW5UZXN0KTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlICIjc3RlcDQiOgorICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0VXNlSVRQ
RGF0YWJhc2UoZmFsc2UpOworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoZmFsc2UsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICBzZXRFbmFibGVGZWF0dXJlKGZhbHNlLCBmaW5pc2hKU1Rlc3QpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPT09ICIiKSB7CisgICAgICAgIHRl
c3RSdW5uZXIuc2V0VXNlSVRQRGF0YWJhc2UodHJ1ZSk7CisgICAgICAgIHNldEVuYWJsZUZlYXR1
cmUodHJ1ZSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodGhpcmRQYXJ0eU9yaWdpbikpCisgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgiTG9jYWxob3N0IHdhcyBjbGFzc2lmaWVkIGFzIHByZXZhbGVudCByZXNv
dXJjZSBiZWZvcmUgdGhlIHRlc3Qgc3RhcnRzLiIpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5k
dW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhh
c2ggPSAic3RlcDEiOworICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxk
QmxvY2tUaGlyZFBhcnR5Q29va2llcyh0cnVlLCBydW5UZXN0KTsKKyAgICAgICAgfSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1vbi1zaXRlcy13aXRob3V0LXVz
ZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1vbi1zaXRlcy13
aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3ZmVkM2E1
Y2RiMDExNWU0YTA5NDQyOWI5NWE4MTgxY2ZmOTRmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGhpcmQtcGFydHktY29v
a2llLWJsb2NraW5nLW9uLXNpdGVzLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwyNSBAQAorVGVzdHMgdGhhdCBhbGwgdGhpcmQtcGFydHkgY29va2llcyBh
cmUgYmxvY2tlZCB1bmRlciB3ZWJzaXRlcyB0aGF0IGhhdmUgbm90IHJlY2VpdmVkIHVzZXIgaW50
ZXJhY3Rpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyAgCisKKy0tLS0tLS0tCitGcmFt
ZTogJzwhLS1mcmFtZTEtLT4nCistLS0tLS0tLQorQmVmb3JlIHVzZXIgaW50ZXJhY3Rpb24sIHNo
b3VsZCByZWNlaXZlIG5vIGNvb2tpZXMuCitEaWQgbm90IHJlY2VpdmUgY29va2llIG5hbWVkICdm
aXJzdFBhcnR5Q29va2llJy4KK0RpZCBub3QgcmVjZWl2ZSBjb29raWUgbmFtZWQgJ3BhcnRpdGlv
bmVkQ29va2llJy4KK0NsaWVudC1zaWRlIGRvY3VtZW50LmNvb2tpZToKKworLS0tLS0tLS0KK0Zy
YW1lOiAnPCEtLWZyYW1lMi0tPicKKy0tLS0tLS0tCitBZnRlciB1c2VyIGludGVyYWN0aW9uLCBz
aG91bGQgcmVjZWl2ZSBmaXJzdC1wYXJ0eSBjb29raWUuCitSZWNlaXZlZCBjb29raWUgbmFtZWQg
J2ZpcnN0UGFydHlDb29raWUnLgorRGlkIG5vdCByZWNlaXZlIGNvb2tpZSBuYW1lZCAncGFydGl0
aW9uZWRDb29raWUnLgorQ2xpZW50LXNpZGUgZG9jdW1lbnQuY29va2llOiBmaXJzdFBhcnR5Q29v
a2llPXZhbHVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvdGhpcmQtcGFydHktY29va2llLWJsb2NraW5nLW9uLXNpdGVzLXdpdGhvdXQt
dXNlci1pbnRlcmFjdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1vbi1zaXRlcy13aXRob3V0
LXVzZXItaW50ZXJhY3Rpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGY3MzIzNjExMzllMDhjMDljMzM3
YWYxMjdjY2I0OGFjMmQ4OWU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1v
bi1zaXRlcy13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbApAQCAtMCwwICsxLDc2IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJz
ZXQ9IlVURi04Ij4KKyAgICA8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdXRpbC5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRlc3RzIHRo
YXQgYWxsIHRoaXJkLXBhcnR5IGNvb2tpZXMgYXJlIGJsb2NrZWQgdW5kZXIgd2Vic2l0ZXMgdGhh
dCBoYXZlIG5vdCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uLiIpOworICAgIGpzVGVzdElzQXN5
bmMgPSB0cnVlOworCisgICAgY29uc3QgcGFydGl0aW9uSG9zdCA9ICIxMjcuMC4wLjE6ODAwMCI7
CisgICAgY29uc3QgcGFydGl0aW9uT3JpZ2luID0gImh0dHA6Ly8iICsgcGFydGl0aW9uSG9zdDsK
KyAgICBjb25zdCB0aGlyZFBhcnR5T3JpZ2luID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCI7Cisg
ICAgY29uc3QgcmVzb3VyY2VQYXRoID0gIi9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Jlc291cmNl
cyI7CisgICAgY29uc3QgdGhpcmRQYXJ0eUJhc2VVcmwgPSB0aGlyZFBhcnR5T3JpZ2luICsgcmVz
b3VyY2VQYXRoOworICAgIGNvbnN0IGZpcnN0UGFydHlDb29raWVOYW1lID0gImZpcnN0UGFydHlD
b29raWUiOworICAgIGNvbnN0IHN1YlBhdGhUb1NldEZpcnN0UGFydHlDb29raWUgPSAiL3NldC1j
b29raWUucGhwP25hbWU9IiArIGZpcnN0UGFydHlDb29raWVOYW1lICsgIiZ2YWx1ZT12YWx1ZSI7
CisgICAgY29uc3QgcGFydGl0aW9uZWRDb29raWVOYW1lID0gInBhcnRpdGlvbmVkQ29va2llIjsK
KyAgICBjb25zdCBzdWJQYXRoVG9TZXRQYXJ0aXRpb25lZENvb2tpZSA9ICIvc2V0LWNvb2tpZS5w
aHA/bmFtZT0iICsgcGFydGl0aW9uZWRDb29raWVOYW1lICsgIiZ2YWx1ZT12YWx1ZSI7CisgICAg
Y29uc3QgcmV0dXJuVXJsID0gcGFydGl0aW9uT3JpZ2luICsgIi9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3RoaXJkLXBhcnR5LWNvb2tpZS1ibG9ja2luZy1vbi1zaXRlcy13aXRob3V0LXVzZXItaW50
ZXJhY3Rpb24uaHRtbCI7CisgICAgY29uc3Qgc3ViUGF0aFRvR2V0Q29va2llcyA9ICIvZ2V0LWNv
b2tpZXMucGhwP25hbWUxPSIgKyBmaXJzdFBhcnR5Q29va2llTmFtZSArICImbmFtZTI9IiArIHBh
cnRpdGlvbmVkQ29va2llTmFtZTsKKworICAgIGZ1bmN0aW9uIG9wZW5JZnJhbWUodXJsLCBvbkxv
YWRIYW5kbGVyKSB7CisgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJpZnJhbWUiKTsKKyAgICAgICAgZWxlbWVudC5zcmMgPSB1cmw7CisgICAgICAgIGlmIChv
bkxvYWRIYW5kbGVyKSB7CisgICAgICAgICAgICBlbGVtZW50Lm9ubG9hZCA9IG9uTG9hZEhhbmRs
ZXI7CisgICAgICAgIH0KKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBzd2l0Y2ggKGRv
Y3VtZW50LmxvY2F0aW9uLmhhc2gpIHsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwMSI6CisgICAg
ICAgICAgICAgICAgLy8gU2V0IGZpcnN0LXBhcnR5IGNvb2tpZSBmb3IgbG9jYWxob3N0LgorICAg
ICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSB0aGlyZFBhcnR5QmFzZVVybCAr
IHN1YlBhdGhUb1NldEZpcnN0UGFydHlDb29raWUgKyAiIyIgKyByZXR1cm5VcmwgKyAiI3N0ZXAy
IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIiNzdGVwMiI6Cisg
ICAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICJzdGVwMyI7CisgICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgY29va2llIGlzIGJsb2NrZWQgZm9yIGxvY2FsaG9z
dCB1bmRlciAxMjcuMC4wLjEgZXZlbiB0aG91Z2ggbG9jYWxob3N0IGlzIG5vdCBwcmV2YWxlbnQu
CisgICAgICAgICAgICAgICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1YlBhdGhU
b0dldENvb2tpZXMgKyAiJm1lc3NhZ2U9QmVmb3JlIHVzZXIgaW50ZXJhY3Rpb24sIHNob3VsZCBy
ZWNlaXZlIG5vIGNvb2tpZXMuIiwgcnVuVGVzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlICIjc3RlcDMiOgorICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0
aW9uLmhhc2ggPSAic3RlcDQiOworICAgICAgICAgICAgICAgIC8vIFByb2R1Y2UgdXNlciBpbnRl
cmFjdGlvbiBmb3IgdGhlIGZpcnN0LXBhcnR5IHRvIGFsbG93IHRoaXJkLXBhcnR5IGNvb2tpZSBh
Y2Nlc3MuCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKHBhcnRpdGlvbk9yaWdpbiwgdHJ1ZSwgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1VwZGF0ZUNvb2tpZUJsb2NraW5nKGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgY29v
a2llIGlzIG5vIGxvbmdlciBibG9ja2VkIGZvciBsb2NhbGhvc3QgdW5kZXIgMTI3LjAuMC4xLgor
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlbklmcmFtZSh0aGlyZFBhcnR5QmFzZVVybCArIHN1
YlBhdGhUb0dldENvb2tpZXMgKyAgIiZtZXNzYWdlPUFmdGVyIHVzZXIgaW50ZXJhY3Rpb24sIHNo
b3VsZCByZWNlaXZlIGZpcnN0LXBhcnR5IGNvb2tpZS4iLCBydW5UZXN0KTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlICIjc3RlcDQiOgorICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc1Nob3VsZEJsb2NrVGhpcmRQYXJ0eUNvb2tpZXMoZmFsc2UsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgICAgICBzZXRFbmFibGVGZWF0dXJlKGZhbHNlLCBmaW5pc2hK
U1Rlc3QpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPT09ICIiKSB7
CisgICAgICAgIHNldEVuYWJsZUZlYXR1cmUodHJ1ZSwgZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodGhpcmRQYXJ0
eU9yaWdpbikpCisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiTG9jYWxob3N0IHdhcyBjbGFz
c2lmaWVkIGFzIHByZXZhbGVudCByZXNvdXJjZSBiZWZvcmUgdGhlIHRlc3Qgc3RhcnRzLiIpOwor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSAic3RlcDEiOworICAgICAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQmxvY2tUaGlyZFBhcnR5Q29va2llcyh0cnVlLCBydW5U
ZXN0KTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcnVuVGVzdCgpOworICAg
IH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4td2luZG93LW9wZW4taW5zZXJ0LXNjcmlw
dC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4td2lu
ZG93LW9wZW4taW5zZXJ0LXNjcmlwdC5odG1sCmluZGV4IDExNjRiNzUwOTRkMTRiNGFiZjEyZWMw
OGE3Y2MyOWZmYWIyYjVjZjMuLmFhMDdiMWY0ZWI5Mjk5YzUxZTI5NDUzNDRiMGViMWRkYTdmZjY1
OWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3Jp
Z2luLXdpbmRvdy1vcGVuLWluc2VydC1zY3JpcHQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi13aW5kb3ctb3Blbi1pbnNlcnQtc2NyaXB0Lmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VD
YWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxib2R5PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4td2lu
ZG93LW9wZW4tamF2YXNjcmlwdC11cmwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkvY3Jvc3Mtb3JpZ2luLXdpbmRvdy1vcGVuLWphdmFzY3JpcHQtdXJsLmh0bWwKaW5kZXgg
MjY2YmE5Y2U5Y2IwMzM3MDUwOGYxN2YxMWIwYzk0ZWQ4NzhhYzdkZC4uYTZiZDQ0MjdjNGE2YjNj
M2Y4NTk2N2Y4MjI3MTY5ZTkxYzQ5NTc1YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4td2luZG93LW9wZW4tamF2YXNjcmlwdC11cmwuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi13aW5k
b3ctb3Blbi1qYXZhc2NyaXB0LXVybC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBo
dG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvbmF2aWdhdGUtd2hlbi1yZXN0b3JpbmctY2FjaGVkLXBhZ2UuaHRtbCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvbmF2aWdhdGUtd2hlbi1yZXN0b3JpbmctY2FjaGVk
LXBhZ2UuaHRtbAppbmRleCBiMTFhNGZhOTk2ODkxYzBlNjMxYjgwYTVjMWM3ODFmYjc2NDQ5OTE3
Li5kZDZmOGMxZjc3MmNhYjI0MDQ3ZTI4ZGI1ZWI4NzM3MWJjYzhjMTk4IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L25hdmlnYXRlLXdoZW4tcmVzdG9yaW5nLWNh
Y2hlZC1wYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9uYXZp
Z2F0ZS13aGVuLXJlc3RvcmluZy1jYWNoZWQtcGFnZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwh
RE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KQEAgLTYzLDcgKzYzLDcgQEAKIAogICAgICAg
ICAgIC8vIFByZXZlbnQgZW50ZXJpbmcgUGFnZUNhY2hlLgogICAgICAgICAgIGlmICh3LmludGVy
bmFscykKLSAgICAgICAgICAgIHcuaW50ZXJuYWxzLnByZXZlbnREb2N1bWVudEZvckVudGVyaW5n
UGFnZUNhY2hlKCk7CisgICAgICAgICAgICB3LmludGVybmFscy5wcmV2ZW50RG9jdW1lbnRGb3JF
bnRlcmluZ0JhY2tGb3J3YXJkQ2FjaGUoKTsKIAogICAgICAgICAgIGNoaWxkX2ZyYW1lID0gdy5k
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScp
KTsKICAgICAgICAgICBjaGlsZF9mcmFtZS5jb250ZW50V2luZG93Lm9udW5sb2FkID0gKCkgPT4g
ewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtREVOSUVE
LWNsaWNrLWFuZC1mb3JtLXN1Ym1pc3Npb24tZnJvbS1pbmFjdGl2ZS1kb213aW5kb3cuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzLURFTklFRC1jbGljay1hbmQtZm9y
bS1zdWJtaXNzaW9uLWZyb20taW5hY3RpdmUtZG9td2luZG93Lmh0bWwKaW5kZXggMTMzMTRlNjE3
NWExOWFjODY0NWEwNGEzNjZiMGU0YzRlNDA1MGU1MS4uZmU0NjM0ZDEzYWU1ZDJiZTBjMmM4MmNl
NDBkMWEyMjQ1NzBmODRkYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3MtREVOSUVELWNsaWNrLWFuZC1mb3JtLXN1Ym1pc3Npb24tZnJvbS1pbmFjdGl2ZS1k
b213aW5kb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1E
RU5JRUQtY2xpY2stYW5kLWZvcm0tc3VibWlzc2lvbi1mcm9tLWluYWN0aXZlLWRvbXdpbmRvdy5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdl
Q2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9y
d2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzLURFTklFRC1zY3Jp
cHQtaW5qZWN0LWludG8taW5hY3RpdmUtd2luZG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQtc2NyaXB0LWluamVjdC1pbnRvLWluYWN0aXZlLXdpbmRv
dy5odG1sCmluZGV4IDI5NjE5NzY1MDQxZmY1YTNmOTZlODY0NTBiMTAwOTVjNzE5NmZmNzEuLjRk
MGJiYTk5MDc5MDQ3MDY2OTQ0Mzc4MDhjOGI2YzlmYTgwZDU0MWUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzLURFTklFRC1zY3JpcHQtaW5qZWN0LWludG8t
aW5hY3RpdmUtd2luZG93Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3MtREVOSUVELXNjcmlwdC1pbmplY3QtaW50by1pbmFjdGl2ZS13aW5kb3cuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRy
dWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQtc2NyaXB0LWluamVj
dC1pbnRvLWluYWN0aXZlLXdpbmRvdzItcHNvbi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS94c3MtREVOSUVELXNjcmlwdC1pbmplY3QtaW50by1pbmFjdGl2ZS13aW5kb3cy
LXBzb24uaHRtbAppbmRleCA2YTNiZDE4Mzc1OTUyZDcxNDBlZWZjYTE4YjMyZjBmNWRhMTczOTAw
Li45YzkyODU2ODNjYmRjNjdjODRiNTRjYzNiZjk4YzFlZTQ1YmQ0NDk1IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQtc2NyaXB0LWluamVjdC1p
bnRvLWluYWN0aXZlLXdpbmRvdzItcHNvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzLURFTklFRC1zY3JpcHQtaW5qZWN0LWludG8taW5hY3RpdmUtd2luZG93
Mi1wc29uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uPXRydWUgZW5hYmxlUGFn
ZUNhY2hlPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb249dHJ1ZSBlbmFibGVCYWNrRm9yd2FyZENh
Y2hlPXRydWUgXSAtLT4KIDxodG1sPgogPGhlYWQ+CiA8c2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtREVOSUVELXNjcmlwdC1pbmplY3QtaW50
by1pbmFjdGl2ZS13aW5kb3cyLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzcy1ERU5JRUQtc2NyaXB0LWluamVjdC1pbnRvLWluYWN0aXZlLXdpbmRvdzIuaHRtbAppbmRl
eCA4NGJjNWJlOTgzZmUwYjYzYzY1ZWI1Y2EwYWM2YzkwZWY4NjQ3Njg5Li4zMWNhODY0OTBhZWMz
ZmU3MDgyODc1NWUyZDE4YTI5MDRjMTNmM2Q4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQtc2NyaXB0LWluamVjdC1pbnRvLWluYWN0aXZlLXdp
bmRvdzIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5J
RUQtc2NyaXB0LWluamVjdC1pbnRvLWluYWN0aXZlLXdpbmRvdzIuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4K
KzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0g
LS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzcy1ERU5JRUQtc2NyaXB0LWluamVjdC1pbnRvLWlu
YWN0aXZlLXdpbmRvdzMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
LURFTklFRC1zY3JpcHQtaW5qZWN0LWludG8taW5hY3RpdmUtd2luZG93My5odG1sCmluZGV4IDhk
NmJmMmMzMmQxM2UzMGNhZmIyMGZlOGJlMjRiN2QxMTRmNDc4ZDAuLjNlMWZhZTdjN2RkOTVlMjMw
OWYwMWIyMDZhZGJjM2I5MDQ3OTg4M2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzLURFTklFRC1zY3JpcHQtaW5qZWN0LWludG8taW5hY3RpdmUtd2luZG93
My5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzLURFTklFRC1z
Y3JpcHQtaW5qZWN0LWludG8taW5hY3RpdmUtd2luZG93My5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4K
IDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvY2xvc2VkLXdoZW4tZW50ZXJpbmctcGFn
ZS1jYWNoZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHli
aS9jbG9zZWQtd2hlbi1lbnRlcmluZy1wYWdlLWNhY2hlLmh0bWwKaW5kZXggNGU3MTQzYjVmOGVl
MGEyYTExZDRiYzBiOWQ4ZjM4ZWU0NDhkZGY3ZS4uZTY4NDI0NzJhOWJiN2ZiZTYzMTY3ODU1OTk5
YTE5MWEyYmUwZDlkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaHliaS9jbG9zZWQtd2hlbi1lbnRlcmluZy1wYWdlLWNhY2hlLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9jbG9zZWQtd2hlbi1l
bnRlcmluZy1wYWdlLWNhY2hlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+
CiA8aHRtbD4KIDxib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJz
b2NrZXQvdGVzdHMvaHliaS9zdG9wLW9uLXJlc3VtZS1pbi1lcnJvci1oYW5kbGVyLmh0bWwgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3N0b3Atb24tcmVzdW1l
LWluLWVycm9yLWhhbmRsZXIuaHRtbAppbmRleCA0YWMyMGMwMDNlNTViN2MzN2I0ZWVmZmViNjZi
NDBmODY5M2ZjZjQxLi4yNjA2NzgwZjYxODFkNjMwMDFlY2Y0MzRhZTllNDFjYzAzOTU1ZTczIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3N0
b3Atb24tcmVzdW1lLWluLWVycm9yLWhhbmRsZXIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3N0b3Atb24tcmVzdW1lLWluLWVycm9yLWhhbmRs
ZXIuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxl
UGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFj
a0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvc2VydmljZS9jbGll
bnQtYWRkZWQtdG8tY2xpZW50cy13aGVuLXJlc3RvcmVkLWZyb20tcGFnZS1jYWNoZS5odG1sIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3NlcnZpY2UvY2xpZW50LWFkZGVkLXRvLWNs
aWVudHMtd2hlbi1yZXN0b3JlZC1mcm9tLXBhZ2UtY2FjaGUuaHRtbAppbmRleCA1YmIwYmVlMWY4
MTlmODFiMTdhZmZjOTFmM2Y3YTFkNTRjMWYzZjlkLi41ZDU4NTNlM2E0NjAyNjI3ZTYxM2M5ZjBl
NDBmMTJlZjZiMDAwNmVkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtl
cnMvc2VydmljZS9jbGllbnQtYWRkZWQtdG8tY2xpZW50cy13aGVuLXJlc3RvcmVkLWZyb20tcGFn
ZS1jYWNoZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9zZXJ2aWNl
L2NsaWVudC1hZGRlZC10by1jbGllbnRzLXdoZW4tcmVzdG9yZWQtZnJvbS1wYWdlLWNhY2hlLmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VD
YWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxib2R5PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3NlcnZpY2UvY2xpZW50LXJl
bW92ZWQtZnJvbS1jbGllbnRzLXdoaWxlLWluLXBhZ2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvd29ya2Vycy9zZXJ2aWNlL2NsaWVudC1yZW1vdmVkLWZyb20tY2xpZW50cy13
aGlsZS1pbi1wYWdlLWNhY2hlLmh0bWwKaW5kZXggYmVjMTFlYTkxMTg4MWU4YWVjMGU3MDZkODA0
YjU5ZGU4M2I1YmM2ZS4uYzIyZWI0YjRmYmNmYjdjZDViZjczNDYyYjc0YjFkNmVmZDZjNDg2YyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3NlcnZpY2UvY2xpZW50
LXJlbW92ZWQtZnJvbS1jbGllbnRzLXdoaWxlLWluLXBhZ2UtY2FjaGUuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvc2VydmljZS9jbGllbnQtcmVtb3ZlZC1mcm9tLWNs
aWVudHMtd2hpbGUtaW4tcGFnZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQ
RSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd29ya2Vycy9zZXJ2aWNlL3BhZ2UtY2FjaGUtc2VydmljZS13b3JrZXItcGVuZGluZy1wcm9t
aXNlLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvc2VydmljZS9w
YWdlLWNhY2hlLXNlcnZpY2Utd29ya2VyLXBlbmRpbmctcHJvbWlzZS5odHRwcy5odG1sCmluZGV4
IDA5ZjA1NjgzZjdhOWFjNzVjZWNiZWQxZWVmYTczY2I4OGE3MjA3NTEuLjZkYjVkMzAwZmI5M2Rh
NjMyYmM5MzM1YTRhYmU2NzljNGVlZjU4MmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd29ya2Vycy9zZXJ2aWNlL3BhZ2UtY2FjaGUtc2VydmljZS13b3JrZXItcGVuZGluZy1w
cm9taXNlLmh0dHBzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Nl
cnZpY2UvcGFnZS1jYWNoZS1zZXJ2aWNlLXdvcmtlci1wZW5kaW5nLXByb21pc2UuaHR0cHMuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNh
Y2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0Zvcndh
cmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dvcmtlcnMvc2VydmljZS9wYWdlLWNhY2hp
bmcuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9zZXJ2aWNlL3BhZ2UtY2Fj
aGluZy5odG1sCmluZGV4IDRmMjZhZjkyNGUyM2VhY2E4ZGMzZTM2ZjJlZGU5YTY1Y2I2MzMyN2Iu
LjUxMWVmODViYTFlNjFhYTUzOTMzYjljZjYwNzRkMjNjY2ZkYjJkMGUgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9zZXJ2aWNlL3BhZ2UtY2FjaGluZy5odG1sCisr
KyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9zZXJ2aWNlL3BhZ2UtY2FjaGluZy5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdl
Q2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9y
d2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvd3B0L2JlYWNvbi9zdXBwb3J0L3NlbmRCZWFjb24t
b25wYWdlaGlkZS13aW5kb3cuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvd3B0L2JlYWNvbi9zdXBw
b3J0L3NlbmRCZWFjb24tb25wYWdlaGlkZS13aW5kb3cuaHRtbAppbmRleCBjYmUxOTUwOWM1NmRk
ZGFjMDQ2ZjZkYTc1ZDQ0MGVhOWY1ZTVkMmM4Li5hMzc4YTU0OGVmMzMyN2IyOTIzODA1MmY0Y2Jh
NjM5ZTZiYzU4ZmUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3dwdC9iZWFjb24vc3Vw
cG9ydC9zZW5kQmVhY29uLW9ucGFnZWhpZGUtd2luZG93Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC93cHQvYmVhY29uL3N1cHBvcnQvc2VuZEJlYWNvbi1vbnBhZ2VoaWRlLXdpbmRvdy5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2Fj
aGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2Fy
ZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2xlZ2FjeS1hbmltYXRpb24tZW5naW5lL2FuaW1hdGlvbnMvcmVz
dW1lLWFmdGVyLXBhZ2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL2xlZ2FjeS1hbmltYXRpb24t
ZW5naW5lL2FuaW1hdGlvbnMvcmVzdW1lLWFmdGVyLXBhZ2UtY2FjaGUuaHRtbAppbmRleCBkZWQz
ODc1NmYxZTcwMWM2MjcyNGZkZTcxYjg4YjQxMTUyMzY3ZDk3Li5iMTFjMGVhNWQ4MTA5YjhhYTUx
NGEyZGEzYzY5ZThhMDk5NGQzMmZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9sZWdhY3ktYW5p
bWF0aW9uLWVuZ2luZS9hbmltYXRpb25zL3Jlc3VtZS1hZnRlci1wYWdlLWNhY2hlLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvbGVnYWN5LWFuaW1hdGlvbi1lbmdpbmUvYW5pbWF0aW9ucy9yZXN1bWUt
YWZ0ZXItcGFnZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD1m
YWxzZSBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD1mYWxzZSBl
bmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxzdHlsZT4KIEAtd2Via2l0LWtleWZy
YW1lcyBib3VuY2UgewogICAgIGZyb20gewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbG9hZGVy
L2dvLWJhY2stY2FjaGVkLW1haW4tcmVzb3VyY2UuaHRtbCBiL0xheW91dFRlc3RzL2xvYWRlci9n
by1iYWNrLWNhY2hlZC1tYWluLXJlc291cmNlLmh0bWwKaW5kZXggOTg0ZjY0MDZhOTA2MzJjZjA4
NjQxMDI1ODAzOTU3YTNjODUzYmZkYi4uMzU1NWVjYzE4ZGM2Y2FlMTk5NWMwODVlMjljMGVhYTBj
OWE5MzM0NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvbG9hZGVyL2dvLWJhY2stY2FjaGVkLW1h
aW4tcmVzb3VyY2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9sb2FkZXIvZ28tYmFjay1jYWNoZWQt
bWFpbi1yZXNvdXJjZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxodG1sPgogPGhlYWQ+CiAgICAg
PHRpdGxlPlRlc3QgcmVzb3VyY2UgbG9hZCBjYWxsYmFja3MgZ29pbmcgYmFjayB0byBhIGNhY2hl
ZCBtYWluIHJlc291cmNlPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2xvYWRlci9n
by1iYWNrLXRvLWRpZmZlcmVudC13aW5kb3ctc2l6ZS5odG1sIGIvTGF5b3V0VGVzdHMvbG9hZGVy
L2dvLWJhY2stdG8tZGlmZmVyZW50LXdpbmRvdy1zaXplLmh0bWwKaW5kZXggNTg0M2U3ZjU4YjFm
ODYwYWM3ZmU2ZDgwZGVmMDVjOTljOTg1OTMzMy4uMDE2MmJhYThmOWI0ZTIwNzZmNDliOTU2ZGNm
MGE4MGJjMDRjMGQ1NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvbG9hZGVyL2dvLWJhY2stdG8t
ZGlmZmVyZW50LXdpbmRvdy1zaXplLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvbG9hZGVyL2dvLWJh
Y2stdG8tZGlmZmVyZW50LXdpbmRvdy1zaXplLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVlIF0gLS0+Cis8IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9dHJ1ZSBdIC0tPgogPGh0bWw+
CiA8c2NyaXB0PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9jcmFzaC1jbG9zaW5n
LXBhZ2Utd2l0aC1tZWRpYS1hcy1wbHVnaW4tZmFsbGJhY2suaHRtbCBiL0xheW91dFRlc3RzL21l
ZGlhL2NyYXNoLWNsb3NpbmctcGFnZS13aXRoLW1lZGlhLWFzLXBsdWdpbi1mYWxsYmFjay5odG1s
CmluZGV4IDgxOTU5MWVkYmU1MzAyNGZkMDI5M2I0MjQzNWRiYjJhMjhlMTYxMjYuLmM1ZDhjNzQx
MzZjMTk0Yzg1NGRiMTgwNTBhN2QyOTJhYzBmZTBmNTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L21lZGlhL2NyYXNoLWNsb3NpbmctcGFnZS13aXRoLW1lZGlhLWFzLXBsdWdpbi1mYWxsYmFjay5o
dG1sCisrKyBiL0xheW91dFRlc3RzL21lZGlhL2NyYXNoLWNsb3NpbmctcGFnZS13aXRoLW1lZGlh
LWFzLXBsdWdpbi1mYWxsYmFjay5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxzY3JpcHQ+CiB2YXIg
Y2hpbGRXaW5kb3c7CiA8L3NjcmlwdD4KQEAgLTEzLDcgKzEzLDcgQEAKIGlmICh3aW5kb3cudGVz
dFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0
KCk7CiAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci0gICAgaW50ZXJuYWxzLnNldHRp
bmdzLnNldFBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyh0cnVlKTsKKyAgICBpbnRlcm5hbHMuc2V0
dGluZ3Muc2V0QmFja0ZvcndhcmRDYWNoZVN1cHBvcnRzUGx1Z2lucyh0cnVlKTsKICAgICB0ZXN0
UnVubmVyLnNldENhbk9wZW5XaW5kb3dzKHRydWUpOwogICAgIHRlc3RSdW5uZXIuc2V0Q2xvc2VS
ZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKHRydWUpOwogICAgIHZhciBidXR0b24gPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9t
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXBhZ2UtY2FjaGUuaHRtbCBiL0xheW91dFRl
c3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcGFnZS1jYWNoZS5odG1sCmluZGV4
IDAxMmNlNGFjZDE4MDkzMTBjZTNkMWRiZGZkZGQyM2Y4M2ExZWFmZjMuLmM4ZGMzNmY2NjI0NzU0
OTM4MmNjMmUyZDg0NmM0MmFmMzZkNjExMzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL21lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcGFnZS1jYWNoZS5odG1sCisrKyBiL0xheW91dFRl
c3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtcGFnZS1jYWNoZS5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1
ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hl
PXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL21lZGlhL3Jlc3RvcmUtZnJvbS1wYWdlLWNhY2hlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9tZWRpYS9yZXN0b3JlLWZyb20tcGFnZS1jYWNoZS5odG1sCmluZGV4IGU5NTA1MTgzMmI2
MmI1NmQ1OWE0ZDQ5NmZkOTQwOTQ4NjE4ZWMzODIuLjFhZDI1NzFhMTU3MmI4ZGU0ZjY2ZTY4NzE1
OTQwZmMzMGJmNGQ1ODUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL21lZGlhL3Jlc3RvcmUtZnJv
bS1wYWdlLWNhY2hlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvcmVzdG9yZS1mcm9tLXBh
Z2UtY2FjaGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5h
YmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8aHRtbD4KICAgICA8aGVhZD4KICAgICAg
ICAgPHNjcmlwdCBzcmM9bWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2lvcy9pb3MvZml4ZWQvZml4ZWQtYmFjay1mb3J3YXJkLmh0bWwgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvaW9zL2ZpeGVkL2ZpeGVkLWJhY2stZm9yd2FyZC5odG1s
CmluZGV4IGQwNjQwNDMzZDBiNmQxOTAwMTdlYWZlMDUwMWVkYWZlOGZlYWNhZGUuLjM1NjFlZWUy
YjdmZWQ5NDk3YzBlZTZhZDZjMDg1YWIwZmQ5MDUxMGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy9pb3MvZml4ZWQvZml4ZWQtYmFjay1mb3J3YXJkLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2lvcy9maXhlZC9maXhlZC1iYWNrLWZvcndhcmQuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hl
PXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRD
YWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbHVnaW5zL2NyYXNoLXJlc3RvcmluZy1wbHVnaW4tcGFnZS1mcm9t
LXBhZ2UtY2FjaGUuaHRtbCBiL0xheW91dFRlc3RzL3BsdWdpbnMvY3Jhc2gtcmVzdG9yaW5nLXBs
dWdpbi1wYWdlLWZyb20tcGFnZS1jYWNoZS5odG1sCmluZGV4IDZmODg0ZjM1NmM4NzAwNjc2NDBm
MDE0MmM4ZTU0YmUxNWNhNGM5MzAuLjEwZGM5OTRiZmQyNmE4NTE1NzY2YjRhNmY4OTMzZGI0MGFh
YjU3NTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsdWdpbnMvY3Jhc2gtcmVzdG9yaW5nLXBs
dWdpbi1wYWdlLWZyb20tcGFnZS1jYWNoZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3BsdWdpbnMv
Y3Jhc2gtcmVzdG9yaW5nLXBsdWdpbi1wYWdlLWZyb20tcGFnZS1jYWNoZS5odG1sCkBAIC0xLDEw
ICsxLDEwIEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZVBhZ2VDYWNoZT10cnVl
IF0gLS0+Cis8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGU9
dHJ1ZSBdIC0tPgogPGhlYWQ+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdp
bmRvdy5pbnRlcm5hbHMpIHsKICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKICAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLSAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0UGFnZUNh
Y2hlU3VwcG9ydHNQbHVnaW5zKHRydWUpOworICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRCYWNr
Rm9yd2FyZENhY2hlU3VwcG9ydHNQbHVnaW5zKHRydWUpOwogfQogCiBmdW5jdGlvbiBwYWdlU2hv
d24oKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbHVnaW5zL2ZyYW1lc2V0LXdpdGgtcGx1
Z2luLWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9wbHVnaW5zL2ZyYW1lc2V0LXdpdGgtcGx1Z2lu
LWZyYW1lLmh0bWwKaW5kZXggY2E4NWJkY2I2Mjk3MGQ5Nzc2ZWMzMThiZDI5MDEyNTZjYjVkYmRh
My4uYjI5OTA2Y2U1ZTAxZGMyOWFkOTZiYTQzMDUyYWJhMmJkNjkwMjU5NSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvcGx1Z2lucy9mcmFtZXNldC13aXRoLXBsdWdpbi1mcmFtZS5odG1sCisrKyBi
L0xheW91dFRlc3RzL3BsdWdpbnMvZnJhbWVzZXQtd2l0aC1wbHVnaW4tZnJhbWUuaHRtbApAQCAt
MSwxMSArMSwxMSBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9
dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENh
Y2hlPXRydWUgXSAtLT4KIDxodG1sPgogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNo
YXJzZXQ9InV0Zi04Ij4KICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmludGVy
bmFscykgewogICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKICAgICAgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CiAgICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRGcmFt
ZUZsYXR0ZW5pbmcoIkZ1bGx5RW5hYmxlZCIpCi0gICAgICAgIGludGVybmFscy5zZXR0aW5ncy5z
ZXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnModHJ1ZSk7CisgICAgICAgIGludGVybmFscy5zZXR0
aW5ncy5zZXRCYWNrRm9yd2FyZENhY2hlU3VwcG9ydHNQbHVnaW5zKHRydWUpOwogICAgIH0KIDwv
c2NyaXB0PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbHVnaW5zL25ldHNjYXBlLXBsdWdp
bi1wYWdlLWNhY2hlLXdvcmtzLmh0bWwgYi9MYXlvdXRUZXN0cy9wbHVnaW5zL25ldHNjYXBlLXBs
dWdpbi1wYWdlLWNhY2hlLXdvcmtzLmh0bWwKaW5kZXggNGY4MjM0MTc2YzBiY2NmZmUyNTMyN2Mz
ZmZlMzA3YjJhMjNhYTExYi4uNzdmMmJlNGRmMzJlZWZiNzViZmZjZDgxNmU4MGY5YmY1NWQwNzA1
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGx1Z2lucy9uZXRzY2FwZS1wbHVnaW4tcGFnZS1j
YWNoZS13b3Jrcy5odG1sCisrKyBiL0xheW91dFRlc3RzL3BsdWdpbnMvbmV0c2NhcGUtcGx1Z2lu
LXBhZ2UtY2FjaGUtd29ya3MuaHRtbApAQCAtMSwxMCArMSwxMCBAQAotPCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxodG1sPgogPHNjcmlw
dD4KIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgdGVz
dFJ1bm5lci5kdW1wQXNUZXh0KCk7CiAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Ci0g
ICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldFBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyh0cnVlKTsK
KyAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0QmFja0ZvcndhcmRDYWNoZVN1cHBvcnRzUGx1Z2lu
cyh0cnVlKTsKIH0KIAogdmFyIHNhdmVkVGVzdE9iamVjdCA9IG51bGw7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9JREJSZXF1ZXN0LXBhZ2UtY2FjaGUuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL0lEQlJlcXVlc3QtcGFnZS1jYWNoZS5odG1s
CmluZGV4IDZkZTgwNjNkZjhkNWNlYTNlYmE1NzVhMGRhOGY4NDhhMjIxNDRhMmYuLmM3YzU5NGI2
MzgzMmVhYmRjN2RhZmNhYWQwMzlhODUzMmEzYTVlNzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL0lEQlJlcXVlc3QtcGFnZS1jYWNoZS5odG1sCisrKyBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL0lEQlJlcXVlc3QtcGFnZS1jYWNoZS5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1
ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hl
PXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLXBhZ2UtY2FjaGUu
aHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLXBhZ2Ut
Y2FjaGUuaHRtbAppbmRleCAyYzg3ODkxZDEzNzI5NGY3NjgwMWVmY2RiYmE4N2I4Y2VkNDJhZDlj
Li5iYmQ3YzVkZWNlOTQ0MjFmNjFlYjVjNWI5YzFmOTQzYzdhM2Q5YjE3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi1wYWdlLWNhY2hlLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24tcGFn
ZS1jYWNoZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
bmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFi
bGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8
Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N3aXBlL2Jhc2ljLWNhY2hlZC1iYWNrLXN3
aXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9zd2lwZS9iYXNpYy1jYWNoZWQtYmFjay1zd2lwZS5odG1s
CmluZGV4IDY1NjViMDc4ZDBkNDU0ZTQ3YTMxYmY1NDgxYmRlNjkzYzAxZDhlZDQuLmQyZmJhMjM1
NWQ4ZTQ3ZTRjNGQwZDRlMWFhZTNmY2JjMmIxNjg4YTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3N3aXBlL2Jhc2ljLWNhY2hlZC1iYWNrLXN3aXBlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3dp
cGUvYmFzaWMtY2FjaGVkLWJhY2stc3dpcGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8aGVhZD4K
IDxzdHlsZT4KIGh0bWwgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3dpcGUvbWFpbi1mcmFt
ZS1waW5uaW5nLXJlcXVpcmVtZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9zd2lwZS9tYWluLWZyYW1l
LXBpbm5pbmctcmVxdWlyZW1lbnQuaHRtbAppbmRleCBjODFmM2U2NGRmNDNhNjBmZjJmMGMwODIz
NWMwODczNTY2ZWZjZjc0Li5iODVhZDFiM2VmM2Q3ZmNkNWEzYjY0N2I5ZDY2NzIyMzI3Yjc2NGFh
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zd2lwZS9tYWluLWZyYW1lLXBpbm5pbmctcmVxdWly
ZW1lbnQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zd2lwZS9tYWluLWZyYW1lLXBpbm5pbmctcmVx
dWlyZW1lbnQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5h
YmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8aGVhZD4KIDxzdHlsZT4KIGh0bWwgewpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3dpcGUvcHVzaFN0YXRlLWNhY2hlZC1iYWNrLXN3aXBl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9zd2lwZS9wdXNoU3RhdGUtY2FjaGVkLWJhY2stc3dpcGUuaHRt
bAppbmRleCBhMDExOWYxNjMzMWM2YjUwNDc1ZDdmZGQ2MzBlYmU4ZDI3OTA4ZTE2Li44M2VkYWI4
NjkxZjdkYjkzZTg5NTgwY2FiNmY4M2IzM2Q5NzNjY2NjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9zd2lwZS9wdXNoU3RhdGUtY2FjaGVkLWJhY2stc3dpcGUuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9zd2lwZS9wdXNoU3RhdGUtY2FjaGVkLWJhY2stc3dpcGUuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+
CiA8aGVhZD4KIDxzdHlsZT4KIGh0bWwgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3dpcGUv
cHVzaFN0YXRlLXByb2dyYW1tYXRpYy1iYWNrLXdoaWxlLXN3aXBpbmctY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL3N3aXBlL3B1c2hTdGF0ZS1wcm9ncmFtbWF0aWMtYmFjay13aGlsZS1zd2lwaW5n
LWNyYXNoLmh0bWwKaW5kZXggMDJmZDQ0ZTQxZWMxZjNhMWYxNGQwYzEwMDMzMGUxNGFlMjRhYmE4
Ny4uZDM1NmQyMTdjYTczZjM1N2M1N2QyOTFlZGQyMmMyZDA3NWQyNTAwYyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvc3dpcGUvcHVzaFN0YXRlLXByb2dyYW1tYXRpYy1iYWNrLXdoaWxlLXN3aXBp
bmctY3Jhc2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zd2lwZS9wdXNoU3RhdGUtcHJvZ3JhbW1h
dGljLWJhY2std2hpbGUtc3dpcGluZy1jcmFzaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDxoZWFk
PgogPHN0eWxlPgogaHRtbCB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zd2lwZS9wdXNoc3Rh
dGUtd2l0aC1tYW51YWwtc2Nyb2xscmVzdG9yYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3N3aXBl
L3B1c2hzdGF0ZS13aXRoLW1hbnVhbC1zY3JvbGxyZXN0b3JhdGlvbi5odG1sCmluZGV4IDFmMWQ3
YWUwNzcwNGQ1OWMyZWRmZGMzNTFhZGMzYzkzZWE1MTBmMzkuLjNmMGFkZjIxMjgzYzRkMDJjZDEy
MDU4YTJjZmUzZTYzZDU4ODgwNjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N3aXBlL3B1c2hz
dGF0ZS13aXRoLW1hbnVhbC1zY3JvbGxyZXN0b3JhdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3N3aXBlL3B1c2hzdGF0ZS13aXRoLW1hbnVhbC1zY3JvbGxyZXN0b3JhdGlvbi5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1
ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hl
PXRydWUgXSAtLT4KIDxoZWFkPgogPHN0eWxlPgogaHRtbCB7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy9udWxsLXBhcmVudC1iYWNrLWNyYXNoLmh0bWwg
Yi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy9udWxsLXBhcmVudC1iYWNrLWNy
YXNoLmh0bWwKaW5kZXggNzdjM2MwYTg2MmQwNTIxMWI2M2M1ZmUxMzI1NzBiOWI0MjBhNWI2Yy4u
MjMyNTRlNTg2NTgyODAxZDg4YThjNTAxNGE3NmJhN2VmMjlkZDI4NSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9zY3JvbGxpbmcvbnVsbC1wYXJlbnQtYmFjay1jcmFzaC5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nL251bGwtcGFyZW50
LWJhY2stY3Jhc2guaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZW5hYmxlUGFnZUNhY2hlPXRydWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZW5hYmxlQmFja0ZvcndhcmRDYWNoZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1s
PgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL3RpbGVkLWRy
YXdpbmctc2Nyb2xsLXBvc2l0aW9uLXBhZ2UtY2FjaGUtcmVzdG9yYXRpb24uaHRtbCBiL0xheW91
dFRlc3RzL3RpbGVkLWRyYXdpbmcvdGlsZWQtZHJhd2luZy1zY3JvbGwtcG9zaXRpb24tcGFnZS1j
YWNoZS1yZXN0b3JhdGlvbi5odG1sCmluZGV4IGJkZDA4NzUyNWY0NGJjNjU1Y2NjNjMwMzYwMGVm
ZTRhMzZkYTgxYzQuLmFkOTBjODcxOTA4NTM1NzgxNzRkYmFhN2I4ZTBhNzY0NTE4MDhmNjcgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvdGlsZWQtZHJhd2luZy1zY3JvbGwt
cG9zaXRpb24tcGFnZS1jYWNoZS1yZXN0b3JhdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3Rp
bGVkLWRyYXdpbmcvdGlsZWQtZHJhd2luZy1zY3JvbGwtcG9zaXRpb24tcGFnZS1jYWNoZS1yZXN0
b3JhdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
bmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgorPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFi
bGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAtLT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8
aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnJ0Yy9kYXRhY2hhbm5lbC9kYXRhY2hh
bm5lbC1wYWdlLWNhY2hlLXNlbmQuaHRtbCBiL0xheW91dFRlc3RzL3dlYnJ0Yy9kYXRhY2hhbm5l
bC9kYXRhY2hhbm5lbC1wYWdlLWNhY2hlLXNlbmQuaHRtbAppbmRleCA1Zjg0YTIzOWQ5MWMzZGI1
NzEzOGI2Y2E3MzIzYTliNmY1ZTNkZGQ3Li5jNGJkNzRmMDhjNzczMzg5NzEzMmQ2ZDFiNzhhODAx
MTA0YWFiZGQyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJydGMvZGF0YWNoYW5uZWwvZGF0
YWNoYW5uZWwtcGFnZS1jYWNoZS1zZW5kLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2VicnRjL2Rh
dGFjaGFubmVsL2RhdGFjaGFubmVsLXBhZ2UtY2FjaGUtc2VuZC5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVQYWdlQ2FjaGU9dHJ1ZSBdIC0tPgor
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBlbmFibGVCYWNrRm9yd2FyZENhY2hlPXRydWUgXSAt
LT4KIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYnJ0Yy9kYXRhY2hhbm5lbC9kYXRhY2hhbm5lbC1wYWdlLWNhY2hlLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJydGMvZGF0YWNoYW5uZWwvZGF0YWNoYW5uZWwtcGFnZS1jYWNoZS5odG1sCmlu
ZGV4IDE3MGJiOWZkZjcxMThhMjdlNjRlY2VjOWVlOGRlYTg2ZThjOTU2YWMuLmRjZjU3MGRhZTVh
NThhNDYzN2EzOThmZDliOGE2MGM1YTc4NTYzZGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dl
YnJ0Yy9kYXRhY2hhbm5lbC9kYXRhY2hhbm5lbC1wYWdlLWNhY2hlLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvd2VicnRjL2RhdGFjaGFubmVsL2RhdGFjaGFubmVsLXBhZ2UtY2FjaGUuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlUGFnZUNhY2hlPXRy
dWUgXSAtLT4KKzwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZT10cnVlIF0gLS0+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGJvZHk+CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE5M2Q0OWY3NDU0
OGFkNDE1MDVhYTQwYjE2NGZiMjZhMGFjNTcxM2MuLjNiNTg5ZjgxYzY3OWVjODQ1YTA1YmRhMzM5
MTA1ZTJhYzQ0ODIzMTkgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTktMTAtMTYgIEtlaXRoIE1pbGxlciAg
PGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBhc3NlcnQgaW4gV2FzbTo6
UGxhbjo6ZmFpbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMzA1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgTGFtLgorCisgICAgICAgICog
d2FzbS9yZWdyZXNzL3dhc20tcGxhbi1mYWlsLWJhZC1lcnJvci1tZXNzYWdlLWFzc2VydC5qczog
QWRkZWQuCisgICAgICAgIChCaW5hcnkpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS50cnVu
Y19idWZmZXIpOgorICAgICAgICAoQmluYXJ5LnByb3RvdHlwZS5lbWl0X2xlYl91KToKKyAgICAg
ICAgKEJpbmFyeS5wcm90b3R5cGUuZW1pdF91MzJ2KToKKyAgICAgICAgKEJpbmFyeS5wcm90b3R5
cGUuZW1pdF9ieXRlcyk6CisgICAgICAgIChCaW5hcnkucHJvdG90eXBlLmVtaXRfaGVhZGVyKToK
KyAgICAgICAgKF9fZl81NzYpOgorICAgICAgICAoX19mXzU4Nyk6CisKIDIwMTktMTAtMTUgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIG9wZXJhdGlvblN3aXRjaENo
YXJXaXRoVW5rbm93bktleVR5cGUgZmFpbGVkIHRvIGhhbmRsZSBPT01FIHdoZW4gcmVzb2x2aW5n
IHJvcGUgc3RyaW5nLgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3JlZ3Jlc3Mvd2FzbS1wbGFu
LWZhaWwtYmFkLWVycm9yLW1lc3NhZ2UtYXNzZXJ0LmpzIGIvSlNUZXN0cy93YXNtL3JlZ3Jlc3Mv
d2FzbS1wbGFuLWZhaWwtYmFkLWVycm9yLW1lc3NhZ2UtYXNzZXJ0LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZm
MGVlZGYwYjRkODVlZGM3MzcwOGYwZDZiYjI0NzA5MGY3YjRlZWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3dhc20vcmVncmVzcy93YXNtLXBsYW4tZmFpbC1iYWQtZXJyb3ItbWVzc2FnZS1h
c3NlcnQuanMKQEAgLTAsMCArMSw1NSBAQAorLy8gRnJvbSBvc3MtZnV6ejogaHR0cHM6Ly9idWdz
LmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MTc5NzYKKwordmFyIGtX
YXNtSDAgPSAwOwordmFyIGtXYXNtSDEgPSAweDYxOwordmFyIGtXYXNtSDIgPSAweDczOwordmFy
IGtXYXNtSDMgPSAweDZkOwordmFyIGtXYXNtVjAgPSAweDE7Cit2YXIga1dhc21WMSA9IDA7Cit2
YXIga1dhc21WMiA9IDA7Cit2YXIga1dhc21WMyA9IDA7CitsZXQga1R5cGVTZWN0aW9uQ29kZSA9
IDE7CitsZXQga0Z1bmN0aW9uU2VjdGlvbkNvZGUgPSAzOworbGV0IGtDb2RlU2VjdGlvbkNvZGUg
PSAxMDsKK2xldCBrV2FzbUZ1bmN0aW9uVHlwZUZvcm0gPSAweDYwOworY2xhc3MgQmluYXJ5IHsK
KyAgY29uc3RydWN0b3IoKSB7CisgICAgdGhpcy5sZW5ndGggPSAwOworICAgIHRoaXMuYnVmZmVy
ID0gbmV3IFVpbnQ4QXJyYXkoODE5Mik7CisgIH0KKyAgdHJ1bmNfYnVmZmVyKCkgeworICAgIHJl
dHVybiBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5idWZmZXIsIDAsIHRoaXMubGVuZ3RoKTsK
KyAgfQorICBlbWl0X2xlYl91KCkgeworCisgICAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3Ro
KytdID0gdjsKKyAgICAgICAgcmV0dXJuOworICB9CisgIGVtaXRfdTMydigpIHsKKyAgICB0aGlz
LmVtaXRfbGViX3UoKTsKKyAgfQorICBlbWl0X2J5dGVzKGRhdGEpIHsKKyAgICB0aGlzLmJ1ZmZl
ci5zZXQoZGF0YSwgdGhpcy5sZW5ndGgpOworICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3Ro
OworICB9CisgIGVtaXRfaGVhZGVyKCkgeworICAgIHRoaXMuZW1pdF9ieXRlcyhba1dhc21IMCwg
a1dhc21IMSwga1dhc21IMiwga1dhc21IMywga1dhc21WMCwga1dhc21WMSwga1dhc21WMiwga1dh
c21WM10pOworICB9CisKK30KK2Z1bmN0aW9uIF9fZl81NzYoX192XzIwNzgpIHsKKyAgICBXZWJB
c3NlbWJseS5jb21waWxlKF9fdl8yMDc4LnRydW5jX2J1ZmZlcigpKQorfQorICAoZnVuY3Rpb24g
X19mXzU4NygpIHsKKyAgICBsZXQgX192XzIwOTkgPSBuZXcgQmluYXJ5KCk7CisKKyAgICAgIF9f
dl8yMDk5LmVtaXRfaGVhZGVyKCkKKyAgICAgIF9fdl8yMDk5LmVtaXRfYnl0ZXMoW2tUeXBlU2Vj
dGlvbkNvZGUsIDQsIDEsIGtXYXNtRnVuY3Rpb25UeXBlRm9ybSwgMCwgMF0pCisgICAgICBfX3Zf
MjA5OS5lbWl0X2J5dGVzKFtrRnVuY3Rpb25TZWN0aW9uQ29kZSwgMiwgMSwgMF0pCisgICAgICBf
X3ZfMjA5OS5lbWl0X2J5dGVzKFtrQ29kZVNlY3Rpb25Db2RlLCAyMCwgMV0pCisgICAgdHJ5IHsK
KyAgICAgIF9fdl8yMDk5LmVtaXRfdTMydigpOworICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgICBf
X2ZfNTc2KF9fdl8yMDk5LAorICd0ZXN0Qm9keVNpemVJc1plcm8nKQorICB9KSgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>